
Research
/Security News
Critical Vulnerability in NestJS Devtools: Localhost RCE via Sandbox Escape
A flawed sandbox in @nestjs/devtools-integration lets attackers run code on your machine via CSRF, leading to full Remote Code Execution (RCE).
fs-utils-sync
Advanced tools
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 i
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 i -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[];
};
# unit tests
npm run test:unit
# integration tests
npm run test:integration
FAQs
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 i
The npm package fs-utils-sync receives a total of 12 weekly downloads. As such, fs-utils-sync popularity was classified as not popular.
We found that fs-utils-sync demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
/Security News
A flawed sandbox in @nestjs/devtools-integration lets attackers run code on your machine via CSRF, leading to full Remote Code Execution (RCE).
Product
Customize license detection with Socket’s new license overlays: gain control, reduce noise, and handle edge cases with precision.
Product
Socket now supports Rust and Cargo, offering package search for all users and experimental SBOM generation for enterprise projects.