The fs-utils-sync
package provides a collection of well-tested, synchronous file system utility functions. It promotes consistency and readability across projects by providing a unified approach to common file operations, saving you development time and improving code quality.
Install the package:
npm install -S fs-utils-sync
project
│
some-dir/
│ └───...
│
some-file.json
import { pathExist, getPathElement, deleteFile } from 'fs-utils-sync';
pathExists('project'); // true
pathExists('project/some-dir'); // true
pathExists('project/some-other-dir'); // false
pathExists('project/some-file.json'); // true
pathExists('project/other-file.json'); // false
getPathElement('project/other-file.json'); // null
getPathElement('project/some-file.json');
// {
// path: 'project/some-file.json',
// baseName: 'some-file.json',
// extName: '.json',
// isFile: true,
// isDirectory: false,
// isSymbolicLink: false,
// size: 8647,
// creation: 1715264137289,
// }
deleteFile('project/some-file.json');
getPathElement('project/some-file.json'); // null
pathExists
Checks if a path exists (file or directory).
import { pathExists } from 'fs-utils-sync';
pathExists('some-existent-dir'); // true
pathExists('some-non-existent-file.json'); // false
getPathElement
Reads the content of a given path and returns the stats. If the path doesn't exist, it returns null
import { getPathElement } from 'fs-utils-sync';
getPathElement('project/some-file.json');
// {
// path: 'project/some-file.json',
// baseName: 'some-file.json',
// extName: '.json',
// isFile: true,
// isDirectory: false,
// isSymbolicLink: false,
// size: 8647,
// creation: 1715264137289,
// }
isDirectory
Verifies if a given path exists and is a directory.
import { isDirectory } from 'fs-utils-sync';
isDirectory('some-existent-dir'); // true
isDirectory('some-non-existent-dir'); // false
isDirectory('some-existent-file.json'); // false
deleteDirectory
Deletes the directory located in the given path.
import { isDirectory, deleteDirectory } from 'fs-utils-sync';
isDirectory('some-existent-dir'); // true
deleteDirectory('some-non-existent-dir');
isDirectory('some-existent-dir'); // false
createDirectory
Creates a directory at a given path.
import { isDirectory, createDirectory } from 'fs-utils-sync';
isDirectory('some-dir'); // false
createDirectory('some-dir');
isDirectory('some-dir'); // true
copyDirectory
It copies a directory (and sub directories) from srcPath
to destPath
. Keep in mind the destPath
is completely overridden.
import { isDirectory, copyDirectory } from 'fs-utils-sync';
isDirectory('some-dir'); // true
isDirectory('my-copy'); // false
copyDirectory('some-dir', 'my-copy');
isDirectory('my-copy'); // true
createDirectorySymLink
Creates a symlink for the target
directory at path
.
import { createDirectorySymLink } from 'fs-utils-sync';
createDirectorySymLink('some-dir', 'some-dir-symlink');
readDirectory
Reads the contents of a directory based on the provided options and returns them.
import { readDirectory } from 'fs-utils-sync';
readDirectory('some-dir', true);
// [
// 'some-dir/file-01.txt',
// 'some-dir/file-02.json',
// 'some-dir/inner',
// 'some-dir/inner/inner-01.txt'
// ]
getDirectoryElements
Retrieves all the path elements in the given directory based on the provided options.
IMPORTANT: if the includeExts
option is provided, make sure to lowercase all extensions (e.g '.json'
).
import { getDirectoryElements } from 'fs-utils-sync';
getDirectoryElements('fs-test-dir');
// {
// directories: [
// {
// path: 'fs-test-dir/another-dir',
// baseName: 'another-dir',
// extName: '',
// isFile: false,
// isDirectory: true,
// isSymbolicLink: false,
// size: 4096,
// creation: 1733515026497
// },
// {
// path: 'fs-test-dir/some-dir',
// baseName: 'some-dir',
// extName: '',
// isFile: false,
// isDirectory: true,
// isSymbolicLink: false,
// size: 4096,
// creation: 1733515026497
// }
// ],
// files: [
// {
// path: 'fs-test-dir/aafile.json',
// baseName: 'aafile.json',
// extName: '.json',
// isFile: true,
// isDirectory: false,
// isSymbolicLink: false,
// size: 18,
// creation: 1733515026497
// },
// {
// path: 'fs-test-dir/afile.txt',
// baseName: 'afile.txt',
// extName: '.txt',
// isFile: true,
// isDirectory: false,
// isSymbolicLink: false,
// size: 12,
// creation: 1733515026497
// }
// ],
// symbolicLinks: [
// {
// path: 'fs-test-dir/aafile-sl.json',
// baseName: 'aafile-sl.json',
// extName: '.json',
// isFile: false,
// isDirectory: false,
// isSymbolicLink: true,
// size: 23,
// creation: 1733515026497
// },
// {
// path: 'fs-test-dir/some-dir-sl',
// baseName: 'some-dir-sl',
// extName: '',
// isFile: false,
// isDirectory: false,
// isSymbolicLink: true,
// size: 20,
// creation: 1733515026497
// }
// ]
// }
isFile
Verifies if a given path exists and is a file.
import { isFile } from 'fs-utils-sync';
isFile('existent-file.json'); // true
isFile('non-existent-file.json'); // false
writeFile
Creates the base directory for a file in case it doesn't exist and then it writes the file.
import { writeFile } from 'fs-utils-sync';
writeFile('test-file.txt', 'Hello World!', { encoding: 'utf-8' });
writeTextFile
Writes a text file on a given path.
import { writeTextFile } from 'fs-utils-sync';
writeTextFile('test-file.txt', 'Hello World!');
writeJSONFile
Writes a JSON file on a given path. If an object is provided, it will be stringified.
import { writeJSONFile } from 'fs-utils-sync';
writeJSONFile('test-file.json', { id: 1, nickname: 'test-user' });
writeBufferFile
Writes a Buffer file on a given path. If an object is provided, it will be stringified.
import { Buffer } from 'node:buffer';
import { writeBufferFile } from 'fs-utils-sync';
writeBufferFile('test-file', Buffer.from('Hello World!'));
readFile
Reads and returns the contents of a file.
import { readFile } from 'fs-utils-sync';
readFile('test-file.txt', { encoding: 'utf-8' }); // 'Hello World!'
readTextFile
Reads a text file and returns its contents.
import { readTextFile } from 'fs-utils-sync';
readTextFile('test-file.txt'); // 'Hello World!'
readJSONFile
Reads a text file, parses and returns its contents.
import { readJSONFile } from 'fs-utils-sync';
readJSONFile('test-file.json'); // { id: 1, nickname: 'test-user' }
readBufferFile
Reads a Buffer file and returns its contents.
import { readBufferFile } from 'fs-utils-sync';
readBufferFile('test-file'); // <Buffer 48 65 6c 6c 6f 20 57 6f 72 6c 64 21>
copyFile
Copies a file from srcPath
to destPath
, replacing the destination if it exists.
import { isFile, copyFile } from 'fs-utils-sync';
isFile('file-a.json'); // true
isFile('file-b.json'); // false
copyFile('file-a.json', 'file-b.json');
isFile('file-b.json'); // true
deleteFile
Deletes the file located at the provided path
.
import { isFile, deleteFile } from 'fs-utils-sync';
isFile('file-a.json'); // true
deleteFile('file-a.json');
isFile('file-a.json'); // false
createFileSymLink
Creates a symlink for a given file.
import { createFileSymLink } from 'fs-utils-sync';
createFileSymLink('test-file.txt', 'test-file-symlink.txt');
IPathElement
The most relevant information regarding a path element, extracted by making use of the lstat
function.
interface IPathElement {
// the relative path of the el
path: string;
// the base name of the el
baseName: string;
// the ext of the el (e.g '.json'). If the el has no ext, it will be an empty string ('')
extName: string;
// true if the el is a file
isFile: boolean;
// true if the el is a directory
isDirectory: boolean;
// true if the el is a symbolic link
isSymbolicLink: boolean; // when this property is true, isFile & isDirectory are false
// the size in bytes of the el
size: number;
// the date in which the el was created (in milliseconds)
creation: number;
}
IDirectoryElementsOptions
When querying the path elements from within a directory, a series of filters and sorting options can be provided.
import { ISortDirection } from 'web-utils-kit';
type IDirectoryElementsKeySort = 'baseName' | 'size' | 'creation';
type IDirectoryElementsOptions = {
// the key that will be used to sort the elements. Defaults to 'baseName'
sortByKey: IDirectoryElementsKeySort;
// the sort order that will be applied to the elements. Defaults to 'asc'
sortOrder: ISortDirection;
// the list of file extensions that will be included. Defaults to [] (includes all exts)
includeExts: string[];
};
IDirectoryPathElements
The output emitted when retrieving all the path elements within a directory.
type IDirectoryPathElements = {
directories: IPathElement[];
files: IPathElement[];
symbolicLinks: IPathElement[];
};
- TypeScript
# unit tests
npm run test:unit
# integration tests
npm run test:integration
Install dependencies:
npm install
Build the library:
npm start
Publish to npm
:
npm publish