๐Putout plugin helps to lint filesystem.
Install
npm i @putout/plugin-filesystem -D
Rules
- โ bundle;
- โ convert-filesystem-to-simple-filesystem;
- โ convert-js-to-json;
- โ convert-json-to-js;
- โ convert-simple-filesystem-to-filesystem;
- โ move-referenced-file;
- โ read-all-files;
- โ rename-file;
- โ remove-files;
- โ rename-referenced-file;
- โ rename-spec-to-test;
- โ rename-test-to-spec;
- โ replace-cwd;
- โ write-all-files;
Config
{
"rules": {
"filesystem/bundle": "off",
"filesystem/read-all-files": ["off", {
"mask": "*"
}],
"filesystem/write-all-files": "off",
"filesystem/rename-file": "off",
"filesystem/remove-files": "off",
"filesystem/rename-spec-to-test": "off",
"filesystem/rename-test-to-spec": "off",
"filesystem/rename-referenced-file": "off",
"filesystem/move-referenced-file": "off",
"filesystem/convert-simple-filesystem-to-filesystem": "off",
"filesystem/replace-cwd": ["off", {
"from": "/home/coderaiser/putout",
"to": "/"
}],
"filesystem/convert-json-to-js": ["off", {
"filename": "package.json"
}],
"filesystem/convert-js-to-json": ["off", {
"filename": "package.js"
}]
}
}rename-file
Checkout in ๐Putout Editor.
Update .putout.json to enable rule:
{
"rules": {
"filesystem/rename-file": ["on", {
"from": "README.md",
"to": "readme.md"
}]
}
}It will make next modifications to filesystem:
For more sophisticated example, use mask:
{
"rules": {
"filesystem/rename-file": ["on", {
"mask": "*.test.*",
"from": "test",
"to": "spec"
}]
}
}It will rename 'test' to 'spec' in *.test.* files:
-index.test.js +index.spec.js
remove-files
Remove next files:
*.swp;*.swo;*.lock;.DS_Store;.travis.yml;
Apply overrides:
{
"rules": {
"filesystem/remove-files": ["on", {
"names": ["coverage"],
"dismiss": [
".travis.yml"
]
}]
}
}It will make next modifications to filesystem:
/
|-- test/
| `-- hello.spec.js
-|-- coverage/
`-- lib/
`-- hello.jsrename-spec-to-test
Checkout in ๐Putout Editor.
-index.spec.js +index.test.js
rename-test-to-spec
Checkout in ๐Putout Editor.
-index.test.js +index.spec.js
rename-referenced-file
Update .putout.json to enable rule:
{
"rules": {
"filesystem/rename-referenced-file": ["on", {
"from": "hello.js",
"to": "world.js"
}]
}
}Checkout in ๐Putout Editor.
Before:
// hello.spec.js import hello from './hello.js';
// hello.js export const hello = 'world';
After:
// hello.spec.js import hello from './world.js';
// world.js export const hello = 'world';
move-referenced-file
Update .putout.json to enable rule:
{
"rules": {
"filesystem/move-referenced-file": ["on", {
"name": "hello.js",
"directory": "lib"
}]
}
}Checkout in ๐Putout Editor.
Before:
/
|-- test/
| `-- hello.spec.js
|-- src/
| `-- hello.js
`-- lib/
// test/hello.spec.js import hello from '../src/hello.js';
// src/hello.js export const hello = 'world';
After:
/
|-- test/
| `-- hello.spec.js
|-- src/
`-- lib/
`-- hello.js
-src/hello.js +lib/hello.js
// test/hello.spec.js import hello from '../lib/hello.js';
// lib/hello.js export const hello = 'world';
convert-simple-filesystem-to-filesystem
Checkout in ๐Putout Editor.
โ Example of incorrect code
__putout_processor_filesystem([ '/', '/hello.txt', [ '/world.txt', 'hello world', ], '/abc/', ]);
โ Example of correct code
__putout_processor_filesystem({ type: 'directory', filename: '/', files: [{ type: 'file', filename: '/hello.txt', }, { type: 'file', filename: '/world.txt', content: 'hello world', }, { type: 'directory', filename: '/abc', files: [], }], });
convert-filesystem-to-simple-filesystem
Checkout in ๐Putout Editor.
โ Example of incorrect code
__putout_processor_filesystem({ type: 'directory', filename: '/', files: [{ type: 'file', filename: '/hello.txt', }, { type: 'file', filename: '/world.txt', content: 'hello world', }, { type: 'directory', filename: '/abc', files: [], }], });
โ Example of correct code
__putout_processor_filesystem([ '/', '/hello.txt', [ '/world.txt', 'hello world', ], '/abc/', ]);
bundle
Bundle and minify css files.
{
"rules": {
"filesystem/bundle": ["on", {
"groups": [
["__:columns/__", [
"name-size-date.css",
"name-size.css"
]],
["main.css", [
"hello.css",
"world.css"
]],
"1:1"
]
}]
}
}Checkout in ๐Putout Editor.
Before:
/
|-- css/
| `-- hello.css
| `-- world.css
After:
/
|-- css/
| `-- hello.css
| `-- world.css
|-- dist/
| `-- main.css
Just minify styles:
{
"rules": {
"filesystem/bundle": ["on", {
"groups": ["1:1"]
}]
}
}Before:
/
|-- css/
| `-- hello.css
| `-- world.css
After:
/
|-- css/
| `-- hello.css
| `-- world.css
|-- dist/
| `-- hello.css
| `-- world.css
Create subdirectory:
{
"rules": {
"filesystem/bundle": ["on", {
"groups": [
["__:columns/__", [
"name-size-date.css",
"name-size.css"
]]
]
}]
}
}Before:
/
|-- css/
| `-- hello.css
| `-- world.css
After:
/
|-- css/
| `-- hello.css
| `-- world.css
|-- dist/
| `-- columns
| `-- hello.css
| `-- world.css
Filter css files by mask:
{
"rules": {
"filesystem/bundle": ["on", {
"mask": "*.good.css",
"groups": ["1:1"]
}]
}
}Before:
/
|-- css/
| `-- hello.css
| `-- world.good.css
After:
/
|-- css/
| `-- hello.css
| `-- world.css
|-- dist/
| `-- world.good.css
You can even override transform with your own config:
putout(filesystem, { rules: { 'filesystem/bundle': ['on', { transform: (source: string | string[], config) => string, }], }, });
Concut files:
{
"rules": {
"filesystem/bundle": ["on", {
"groups": ["hello.css"]
}]
}
}Before:
/
|-- css/
| `-- hello.css
| `-- world.css
After:
/
|-- css/
| `-- hello.css
| `-- world.css
|-- dist/
| `-- hello.css
replace-cwd
Checkout in ๐Putout Editor.
When from=/home/coderaiser/putout and to=/:
{
"rules": {
"filesystem/replace-cwd": ["on", {
"from": "/home/coderaiser/putout",
"to": "/"
}]
}
}โ Example of incorrect code
__putout_processor_filesystem([ '/home/coderaiser/putout/', '/home/coderaiser/putout/README.md', ]);
โ Example of correct code
__putout_processor_filesystem(['/', '/README.md']);
read-all-files
Checkout in ๐Putout Editor.
โ Example of incorrect code
โ Example of correct code
["/", [ "/hello.xyz", "hello world" ]]
write-all-files
Write all files that was read before to Filesystem.
Checkout in ๐Putout Editor.
["/", [ "/hello.xyz", "hello world" ]]
convert-json-to-js
Checkout in ๐Putout Editor.
Filesystem:
-["/", "/package.json"] +["/", "/package.js"]
โ Example of incorrect code
โ Example of correct code
export default { plugins: [], };
convert-js-to-json
Checkout in ๐Putout Editor:
Filesystem:
-["/", "/package.js"] +["/", "/package.json"]
โ Example of incorrect code
โ Example of correct code
export default { plugins: [], };
License
MIT