$ cnpm install @putout/operator-filesystem
????Putout operator adds ability to lint filesystem.
npm i putout @putout/operator-filesystem
createFile(directoryPath: DirectoryPath, name: string, content?: string): FilePathconst {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): DirectoryPathconst {operator} = require('putout');
const {
createDirectory,
findFile,
} = operator;
const [dirPath] = findFile(ast, 'hello');
const newDirectoryPath = createDirectory(dirPath, 'world');
createNestedDirectory(path: FilePath|DirectoryPath, name: string): DirectoryPathconst {operator} = require('putout');
const {
createDirectory,
findFile,
createNestedDirectory,
} = operator;
const newDirectoryPath = createNestedDirectory(ast, '/hello/world');
removeEmptyDirectory(DirectoryPath)const {operator} = require('putout');
const {
removeEmptyDirectory,
createNestedDirectory,
} = operator;
const newDirectoryPath = createNestedDirectory(ast, '/hello/world');
removeEmptyDirectory(newDirectoryPath);
readDirectory(directoryPath: DirectoryPath): (FilePath | DirectoryPath)[]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[] | Set<string>, exclude?: string[]): (FilePath | DirectoryPath)[]Traverse filesystem to search one or more files:
const {operator} = require('putout');
const {findFile} = operator;
const [filePath] = findFile(ast, 'hello');
You can also pass array of file masks:
import {operator} from 'putout';
const {findFile} = operator;
const coupleFiles = findFile(ast, ['*.js', '*.ts']);
Or exclude some files:
import {operator} from 'putout';
const {findFile, getFilename} = operator;
const coupleFilesWithExcludeArray = findFile(ast, '*.ts', ['*.d.ts']);
And even search for a directory:
import {operator} from 'putout';
const {findFile} = operator;
const coupleFiles = findFile(root, ['/home/coderaiser', '/home/coderaiser/putout']);
Each ????Putout plugin should use findFile independently since AST can change: files renamed, removed etc.
Anyways inside one plugin while you applying changes related to one plugin you can speed things drastically crawling file system once. It works good if plugin do not mutates the file tree, only file content.
☝️ findFile expensive, when you need to call it often use crawlDirectory()
crawlDirectory(directoryPath: directoryPath): Crawledimport {operator} from 'putout';
const {findFile} = operator;
const crawled = crawlDirectory(rootPath);
const [file] = findFile(root, 'hello', {
crawled,
});
getFile(directoryPath: DirectoryPath, name: string | string[], options?: Options): FilePath[]type Options = {
type?: 'file' | 'directory';
};
Get file named name from directoryPath
const {operator} = require('putout');
const {getFile} = operator;
const [filePath] = getFile(root, 'package.json');
When you need a couple files use:
import {operator} from 'putout';
const {getFile} = operator;
const [index, indexSpec] = getFile(root, ['index.js', 'index.spec.js']);
getParentDirectory(path: FilePath | DirectoryPath): FilePath | nullconst {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 | File): DrectoryPathconst {operator} = require('putout');
const {
findFile,
getRootDirectory,
} = operator;
const [filePath] = findFile(ast, 'hello');
getRootDirectory(dirPath);
getFilename(path: FilePath | DirectoryPath): stringconst {operator} = require('putout');
const {getFilename} = operator;
const name = getFilename(filePath);
getFileType(path: FilePath): stringconst {operator} = require('putout');
const {getFilename, getFileType} = operator;
getFileType(filePath);
// returns
'file';
removeFile(filePath: Path)const {operator} = require('putout');
const {removeFile} = operator;
removeFile(filePath);
copyFile(path: FilePath | DirectoryPath, directoryPath: DirectoryPath)const {operator} = require('putout');
const {moveFile, copyFile} = operator;
copyFile(filePath, dirPath);
moveFile(path: FilePath | DirectoryPath, directoryPath: DirectoryPath)const {operator} = require('putout');
const {moveFile} = operator;
moveFile(filePath, dirPath);
readFileContent(filePath: FilePath): stringconst {operator} = require('putout');
const {readFileContent} = operator;
readFileContent(filePath);
// returns
'hello';
writeFileContent(filePath: FilePath, content: string)const {operator} = require('putout');
const {
writeFileContent,
readFileContent,
} = operator;
writeFileContent(filePath, 'hello');
readFileContent(filePath);
// returns
'hello';
renameFile(path: FilePath | DirectoryPath, name: string)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
To move file use moveFile().
injectInject filesystem API with methods:
renameFile;copyFile;To have ability to interact with any kind of filesystem representation.
import {inject} from '@putout/operator-filesystem/maybe';
import * as filesystemCLI from '@putout/cli-filesystem';
inject(filesystemCLI);
ejectimport {eject} from '@putout/operator-filesystem/maybe';
eject();
pausePause currently injected filesystem API
import {pause} from '@putout/operator-filesystem/maybe';
pause();
startStart currently paused injected filesystem API.
import {start} from '@putout/operator-filesystem/maybe';
start();
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": []
});
`;
MIT
Copyright 2013 - present © cnpmjs.org | Home |