@putout/operator-filesystem
Version:
🐊Putout operator adds ability to filesystem referenced variables that was not defined
320 lines (227 loc) • 6.42 kB
Markdown
# @putout/operator-filesystem [![NPM version][NPMIMGURL]][NPMURL]
[NPMIMGURL]: https://img.shields.io/npm/v/@putout/operator-filesystem.svg?style=flat&longCache=true
[NPMURL]: https://npmjs.org/package/@putout/operator-filesystem "npm"
🐊[**Putout**](https://github.com/coderaiser/putout) operator adds ability to lint filesystem.
## Install
```
npm i putout @putout/operator-filesystem
```
## API
### `createFile(directoryPath: DirectoryPath, name: string, content?: string): FilePath`
```js
const {operator} = require('putout');
const {findFile, createFile} = operator;
const [dirPath] = findFile(ast, 'hello');
const filePath = createFile(dirPath, 'world.txt', 'hello world');
```
### `createDirectory(directoryPath: DirectoryPath, name: string): DirectoryPath`
```js
const {operator} = require('putout');
const {
createDirectory,
findFile,
} = operator;
const [dirPath] = findFile(ast, 'hello');
const newDirectoryPath = createDirectory(dirPath, 'world');
```
### `readDirectory(directoryPath: DirectoryPath): (FilePath | DirectoryPath)[]`
```js
const {operator} = require('putout');
const {
finedFiles,
findFile,
readDirectory,
} = operator;
const [dirPath] = findFile(ast, '/bin');
readDirectory(dirPath);
// returns list of files
[];
```
### `createNestedDirectory(path: FilePath|DirectoryPath, name: string): DirectoryPath`
```js
const {operator} = require('putout');
const {
createDirectory,
findFile,
createNestedDirectory,
} = operator;
const newDirectoryPath = createNestedDirectory(ast, '/hello/world');
```
### `removeEmptyDirectory(DirectoryPath)`
```js
const {operator} = require('putout');
const {
removeEmptyDirectory,
createNestedDirectory,
} = operator;
const newDirectoryPath = createNestedDirectory(ast, '/hello/world');
removeEmptyDirectory(newDirectoryPath);
```
### `readDirectory(directoryPath: DirectoryPath): (FilePath | DirectoryPath)[]`
```js
const {operator} = require('putout');
const {
finedFiles,
findFile,
readDirectory,
} = operator;
const [dirPath] = findFile(ast, '/bin');
readDirectory(dirPath);
// returns list of files
[];
```
### `findFile(directoryPath: DirectoryPath, name: string | string[], exclude?: string[]): (FilePath | DirectoryPath)[]`
```js
const {operator} = require('putout');
const {finedFiles, findFile} = operator;
const [filePath] = findFile(ast, 'hello');
```
You can also pass array of file masks:
```js
import {operator} from 'putout';
const {findFile} = operator;
const coupleFiles = findFile(ast, ['*.js', '*.ts']);
```
Or `exclude` some files:
```js
import {operator} from 'putout';
const {findFile, getFilename} = operator;
const coupleFilesWithExcludeArray = findFile(ast, '*.ts', ['*.d.ts']);
```
And even search for a directory:
```js
import {operator} from 'putout';
const {findFile} = operator;
const coupleFiles = findFile(ast, ['/home/coderaiser', '/home/coderaiser/putout']);
```
### `getParentDirectory(path: FilePath | DirectoryPath): FilePath | null`
```js
const {operator} = require('putout');
const {
createDirectory,
findFile,
getParentDirectory,
} = operator;
const [dirPath] = findFile(ast, 'hello');
const newDirectoryPath = createDirectory(dirPath, 'world');
dirPath === getParentDirectory(newDirectoryPath);
// returns
true;
```
### `getRootDirectory(path: FilePath | DirectoryPath): DrectoryPath`
```js
const {operator} = require('putout');
const {
findFile,
getRootDirectory,
} = operator;
const [filePath] = findFile(ast, 'hello');
getRootDirectory(dirPath);
```
### `getFilename(path: FilePath | DirectoryPath): string`
```js
const {operator} = require('putout');
const {getFilename} = operator;
const name = getFilename(filePath);
```
### `getFileType(path: FilePath): string`
```js
const {operator} = require('putout');
const {getFilename, getFileType} = operator;
getFileType(filePath);
// returns
'file';
```
### `getFileContent(path: FilePath): [is: boolean, content: string]`
Get `content` property if it exists, use [`readFileContent`](#read-file-content) to read file from **Filesystem**.
```js
const {operator} = require('putout');
const {getFileContent} = operator;
getFileContent(filePath);
// returns
[true, 'hello world'];
```
### `removeFile(filePath: Path)`
```js
const {operator} = require('putout');
const {removeFile} = operator;
removeFile(filePath);
```
### `copyFile(path: FilePath | DirectoryPath, directoryPath: DirectoryPath)`
```js
const {operator} = require('putout');
const {moveFile, copyFile} = operator;
copyFile(filePath, dirPath);
```
### `moveFile(path: FilePath | DirectoryPath, directoryPath: DirectoryPath)`
```js
const {operator} = require('putout');
const {moveFile} = operator;
moveFile(filePath, dirPath);
```
### `readFileContent(filePath: FilePath): string`
```js
const {operator} = require('putout');
const {readFileContent} = operator;
readFileContent(filePath);
// returns
'hello';
```
### `writeFileContent(filePath: FilePath, content: string)`
```js
const {operator} = require('putout');
const {
writeFileContent,
readFileContent,
} = operator;
writeFileContent(filePath, 'hello');
readFileContent(filePath);
// returns
'hello';
```
### `renameFile(path: FilePath | DirectoryPath, name: string)`
```js
const {operator} = require('putout');
const {renameFile, findFile} = operator;
const [filePath] = findFile(path, 'README.md');
renameFile(filePath, 'readme.md');
```
this is the same as:
```
renameFile(filePath, '/any/path/here/readme.md');
```
Since `basename` is used.
> The `path.basename()` method returns the last portion of a path, similar to the Unix basename command. Trailing directory separators are ignored.
>
> (c) [nodejs.org](https://nodejs.org/api/path.html#pathbasenamepath-suffix)
To move file use [`moveFile()`](#movefilefilepath-filepath-dirpath-filepath).
## Example
```js
const montag = require('montag');
const {
parse,
print,
operator,
} = require('putout');
const {renameFile, findFile} = operator;
const ast = parse(montag`
putout_processor_filesystem({
"type": "directory",
"filename": "/hello",
"files": []
});
`);
const [filePath] = findFile(ast, 'hello');
renameFile(filePath, 'world');
print(ast);
// returns
`
putout_processor_filesystem({
"type": "directory",
"filename": "/hello",
"files": []
});
`;
```
## License
MIT