@stryke/fs
Version:
A package containing various file system utilities that expand the functionality of NodeJs's built-in `fs` module.
79 lines (77 loc) • 2.93 kB
JavaScript
import { joinPaths } from "@stryke/path";
import { isString } from "@stryke/type-checks";
import defu from "defu";
import { glob } from "glob";
//#region src/list-files.ts
const DEFAULT_OPTIONS = { dot: true };
/**
* A files and directories listing helper function
*
* @param filesGlob - A glob pattern to match files
* @returns A list of file paths
*/
async function list(filesGlob, options) {
return glob(isString(filesGlob) ? filesGlob.includes("*") ? filesGlob : joinPaths(filesGlob, "**/*") : filesGlob.input ? joinPaths(filesGlob.input, filesGlob.glob) : filesGlob.glob, defu(isString(filesGlob) ? {} : {
dot: filesGlob.dot,
ignore: filesGlob.ignore
}, options ?? {}, DEFAULT_OPTIONS));
}
/**
* A synchronous files and directories listing helper function
*
* @param filesGlob - A glob pattern to match files
* @returns A list of file paths
*/
function listSync(filesGlob, options) {
return glob.sync(isString(filesGlob) ? filesGlob.includes("*") ? filesGlob : joinPaths(filesGlob, "**/*") : filesGlob.input ? joinPaths(filesGlob.input, filesGlob.glob) : filesGlob.glob, defu(isString(filesGlob) ? {} : {
dot: filesGlob.dot,
ignore: filesGlob.ignore
}, options ?? {}, DEFAULT_OPTIONS));
}
/**
* A file listing helper function
*
* @param filesGlob - A glob pattern to match files
* @returns A list of file paths
*/
async function listFiles(filesGlob, options) {
const result = (await list(filesGlob, defu({ withFileTypes: true }, options ?? {}))).filter((ret) => ret.isFile());
if (!options?.withFileTypes) return result.map((file) => file.fullpath());
return result;
}
/**
* A synchronous file listing helper function
*
* @param filesGlob - A glob pattern to match files
* @returns A list of file paths
*/
function listFilesSync(filesGlob, options) {
const result = listSync(filesGlob, defu({ withFileTypes: true }, options ?? {})).filter((ret) => ret.isFile());
if (!options?.withFileTypes) return result.map((file) => file.fullpath());
return result;
}
/**
* A directories listing helper function
*
* @param filesGlob - A glob pattern to match files
* @returns A list of file paths
*/
async function listDirectories(filesGlob, options) {
const result = (await list(filesGlob, defu({ withFileTypes: true }, options ?? {}))).filter((ret) => ret.isDirectory());
if (!options?.withFileTypes) return result.map((file) => file.fullpath());
return result;
}
/**
* A synchronous directories listing helper function
*
* @param filesGlob - A glob pattern to match files
* @returns A list of file paths
*/
function listDirectoriesSync(filesGlob, options) {
const result = listSync(filesGlob, defu({ withFileTypes: true }, options ?? {})).filter((ret) => ret.isDirectory());
if (!options?.withFileTypes) return result.map((file) => file.fullpath());
return result;
}
//#endregion
export { list, listDirectories, listDirectoriesSync, listFiles, listFilesSync, listSync };
//# sourceMappingURL=list-files.mjs.map