@putout/operator-filesystem
🐊Putout operator adds ability to filesystem referenced variables that was not defined
Last updated a year ago by coderaiser .
MIT · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install @putout/operator-filesystem 
SYNC missed versions from official npm registry.

@putout/operator-filesystem NPM version

????Putout operator adds ability to lint filesystem.

Install

npm i putout @putout/operator-filesystem

API

createFile(directoryPath: DirectoryPath, name: string, content?: string): FilePath

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

const {operator} = require('putout');
const {
    createDirectory,
    findFile,
} = operator;

const [dirPath] = findFile(ast, 'hello');

const newDirectoryPath = createDirectory(dirPath, 'world');

createNestedDirectory(path: FilePath|DirectoryPath, name: string): DirectoryPath

const {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): Crawled

import {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 | null

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 | File): DrectoryPath

const {operator} = require('putout');
const {
    findFile,
    getRootDirectory,
} = operator;

const [filePath] = findFile(ast, 'hello');

getRootDirectory(dirPath);

getFilename(path: FilePath | DirectoryPath): string

const {operator} = require('putout');
const {getFilename} = operator;

const name = getFilename(filePath);

getFileType(path: FilePath): string

const {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): string

const {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().

inject

Inject filesystem API with methods:

  • renameFile;
  • copyFile;
  • ✅ `removeFile;
  • ✅ `createDirectory;
  • ✅ `readFileContent;
  • ✅ `writeFileContent;

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);

eject

import {eject} from '@putout/operator-filesystem/maybe';

eject();

pause

Pause currently injected filesystem API

import {pause} from '@putout/operator-filesystem/maybe';

pause();

start

Start currently paused injected filesystem API.

import {start} from '@putout/operator-filesystem/maybe';

start();

Example

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

Current Tags

  • 11.1.0                                ...           latest (2 months ago)

78 Versions

  • 11.1.0                                ...           2 months ago
  • 11.0.1                                ...           2 months ago
  • 11.0.0                                ...           2 months ago
  • 10.6.0                                ...           2 months ago
  • 10.5.1                                ...           2 months ago
  • 10.5.0                                ...           2 months ago
  • 10.4.0                                ...           2 months ago
  • 10.3.0                                ...           3 months ago
  • 10.2.0                                ...           3 months ago
  • 10.1.0                                ...           3 months ago
  • 10.0.4                                ...           3 months ago
  • 10.0.3                                ...           3 months ago
  • 10.0.2                                ...           3 months ago
  • 10.0.1                                ...           3 months ago
  • 10.0.0                                ...           4 months ago
  • 9.0.1                                ...           10 months ago
  • 9.0.0                                ...           10 months ago
  • 8.0.0                                ...           a year ago
  • 7.1.0                                ...           a year ago
  • 7.0.0                                ...           a year ago
  • 6.4.1                                ...           a year ago
  • 6.4.0                                ...           a year ago
  • 6.3.0                                ...           a year ago
  • 6.2.0                                ...           a year ago
  • 6.1.0                                ...           a year ago
  • 6.0.3                                ...           a year ago
  • 6.0.2                                ...           a year ago
  • 6.0.1                                ...           a year ago
  • 6.0.0                                ...           a year ago
  • 5.4.0                                ...           a year ago
  • 5.2.0                                ...           a year ago
  • 5.1.0                                ...           a year ago
  • 5.0.0                                ...           a year ago
  • 4.1.0                                ...           2 years ago
  • 4.0.1                                ...           2 years ago
  • 4.0.0                                ...           2 years ago
  • 3.8.1                                ...           2 years ago
  • 3.8.0                                ...           2 years ago
  • 3.7.0                                ...           2 years ago
  • 3.6.0                                ...           2 years ago
  • 3.5.0                                ...           2 years ago
  • 3.4.0                                ...           2 years ago
  • 3.3.0                                ...           2 years ago
  • 3.2.0                                ...           2 years ago
  • 3.1.0                                ...           2 years ago
  • 3.0.2                                ...           2 years ago
  • 3.0.1                                ...           2 years ago
  • 3.0.0                                ...           2 years ago
  • 2.12.2                                ...           2 years ago
  • 2.12.1                                ...           2 years ago
  • 2.12.0                                ...           2 years ago
  • 2.11.0                                ...           2 years ago
  • 2.10.0                                ...           2 years ago
  • 2.9.2                                ...           2 years ago
  • 2.9.1                                ...           2 years ago
  • 2.9.0                                ...           2 years ago
  • 2.8.0                                ...           2 years ago
  • 2.7.0                                ...           2 years ago
  • 2.6.0                                ...           2 years ago
  • 2.5.0                                ...           2 years ago
  • 2.4.0                                ...           2 years ago
  • 2.3.1                                ...           2 years ago
  • 2.3.0                                ...           2 years ago
  • 2.2.1                                ...           2 years ago
  • 2.2.0                                ...           2 years ago
  • 2.1.1                                ...           2 years ago
  • 2.1.0                                ...           2 years ago
  • 2.0.1                                ...           2 years ago
  • 2.0.0                                ...           2 years ago
  • 1.7.0                                ...           2 years ago
  • 1.6.0                                ...           2 years ago
  • 1.5.0                                ...           2 years ago
  • 1.4.0                                ...           2 years ago
  • 1.3.0                                ...           2 years ago
  • 1.2.0                                ...           2 years ago
  • 1.1.0                                ...           2 years ago
  • 1.0.1                                ...           2 years ago
  • 1.0.0                                ...           2 years ago
Maintainers (1)
Downloads
Today 0
This Week 0
This Month 21
Last Day 0
Last Week 21
Last Month 0
Dependencies (4)
Dev Dependencies (12)

Copyright 2013 - present © cnpmjs.org | Home |