watcher/dist_ts/utils.js
2024-04-18 21:12:37 +02:00

121 lines
9.3 KiB
JavaScript

/* IMPORT */
import { debounce } from './dettle/index.js';
import fs from 'node:fs';
import path from 'node:path';
import sfs from 'stubborn-fs';
import readdir from './tiny-readdir/index.js';
import { POLLING_TIMEOUT } from './constants.js';
/* MAIN */
const Utils = {
/* LANG API */
lang: {
debounce,
attempt: (fn) => {
try {
return fn();
}
catch (error) {
return Utils.lang.castError(error);
}
},
castArray: (x) => {
return Utils.lang.isArray(x) ? x : [x];
},
castError: (exception) => {
if (Utils.lang.isError(exception))
return exception;
if (Utils.lang.isString(exception))
return new Error(exception);
return new Error('Unknown error');
},
defer: (callback) => {
return setTimeout(callback, 0);
},
isArray: (value) => {
return Array.isArray(value);
},
isError: (value) => {
return value instanceof Error;
},
isFunction: (value) => {
return typeof value === 'function';
},
isNaN: (value) => {
return Number.isNaN(value);
},
isNumber: (value) => {
return typeof value === 'number';
},
isPrimitive: (value) => {
if (value === null)
return true;
const type = typeof value;
return type !== 'object' && type !== 'function';
},
isShallowEqual: (x, y) => {
if (x === y)
return true;
if (Utils.lang.isNaN(x))
return Utils.lang.isNaN(y);
if (Utils.lang.isPrimitive(x) || Utils.lang.isPrimitive(y))
return x === y;
for (const i in x)
if (!(i in y))
return false;
for (const i in y)
if (x[i] !== y[i])
return false;
return true;
},
isSet: (value) => {
return value instanceof Set;
},
isString: (value) => {
return typeof value === 'string';
},
isUndefined: (value) => {
return value === undefined;
},
noop: () => {
return;
},
uniq: (arr) => {
if (arr.length < 2)
return arr;
return Array.from(new Set(arr));
}
},
/* FS API */
fs: {
getDepth: (targetPath) => {
return Math.max(0, targetPath.split(path.sep).length - 1);
},
getRealPath: (targetPath, native) => {
try {
return native ? fs.realpathSync.native(targetPath) : fs.realpathSync(targetPath);
}
catch {
return;
}
},
isSubPath: (targetPath, subPath) => {
return (subPath.startsWith(targetPath) && subPath[targetPath.length] === path.sep && (subPath.length - targetPath.length) > path.sep.length);
},
poll: (targetPath, timeout = POLLING_TIMEOUT) => {
return sfs.retry.stat(timeout)(targetPath, { bigint: true }).catch(Utils.lang.noop);
},
readdir: async (rootPath, ignore, depth = Infinity, limit = Infinity, signal, readdirMap) => {
if (readdirMap && depth === 1 && rootPath in readdirMap) { // Reusing cached data
const result = readdirMap[rootPath];
return [result.directories, result.files];
}
else { // Retrieving fresh data
const result = await readdir(rootPath, { depth, limit, ignore, signal });
return [result.directories, result.files];
}
}
}
};
/* EXPORT */
export default Utils;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxZQUFZO0FBRVosT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QixPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxHQUFHLE1BQU0sYUFBYSxDQUFDO0FBQzlCLE9BQU8sT0FBTyxNQUFNLHlCQUF5QixDQUFDO0FBQzlDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUcvQyxVQUFVO0FBRVYsTUFBTSxLQUFLLEdBQUc7SUFFWixjQUFjO0lBRWQsSUFBSSxFQUFFO1FBRUosUUFBUTtRQUVSLE9BQU8sRUFBRSxDQUFNLEVBQVcsRUFBYyxFQUFFO1lBRXhDLElBQUksQ0FBQztnQkFFSCxPQUFPLEVBQUUsRUFBRyxDQUFDO1lBRWYsQ0FBQztZQUFDLE9BQVEsS0FBYyxFQUFHLENBQUM7Z0JBRTFCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUcsS0FBSyxDQUFFLENBQUM7WUFFeEMsQ0FBQztRQUVILENBQUM7UUFFRCxTQUFTLEVBQUUsQ0FBTSxDQUFVLEVBQVEsRUFBRTtZQUVuQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFHLENBQUMsQ0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUMsQ0FBQztRQUVELFNBQVMsRUFBRSxDQUFFLFNBQWtCLEVBQVUsRUFBRTtZQUV6QyxJQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFHLFNBQVMsQ0FBRTtnQkFBRyxPQUFPLFNBQVMsQ0FBQztZQUV6RCxJQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFHLFNBQVMsQ0FBRTtnQkFBRyxPQUFPLElBQUksS0FBSyxDQUFHLFNBQVMsQ0FBRSxDQUFDO1lBRXhFLE9BQU8sSUFBSSxLQUFLLENBQUcsZUFBZSxDQUFFLENBQUM7UUFFdkMsQ0FBQztRQUVELEtBQUssRUFBRSxDQUFFLFFBQWtCLEVBQW1CLEVBQUU7WUFFOUMsT0FBTyxVQUFVLENBQUcsUUFBUSxFQUFFLENBQUMsQ0FBRSxDQUFDO1FBRXBDLENBQUM7UUFFRCxPQUFPLEVBQUUsQ0FBRSxLQUFjLEVBQXVCLEVBQUU7WUFFaEQsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFHLEtBQUssQ0FBRSxDQUFDO1FBRWpDLENBQUM7UUFFRCxPQUFPLEVBQUUsQ0FBRSxLQUFjLEVBQW1CLEVBQUU7WUFFNUMsT0FBTyxLQUFLLFlBQVksS0FBSyxDQUFDO1FBRWhDLENBQUM7UUFFRCxVQUFVLEVBQUUsQ0FBRSxLQUFjLEVBQXNCLEVBQUU7WUFFbEQsT0FBTyxPQUFPLEtBQUssS0FBSyxVQUFVLENBQUM7UUFFckMsQ0FBQztRQUVELEtBQUssRUFBRSxDQUFFLEtBQWMsRUFBb0IsRUFBRTtZQUUzQyxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUcsS0FBSyxDQUFFLENBQUM7UUFFaEMsQ0FBQztRQUVELFFBQVEsRUFBRSxDQUFFLEtBQWMsRUFBb0IsRUFBRTtZQUU5QyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQztRQUVuQyxDQUFDO1FBRUQsV0FBVyxFQUFFLENBQUUsS0FBYyxFQUE0RSxFQUFFO1lBRXpHLElBQUssS0FBSyxLQUFLLElBQUk7Z0JBQUcsT0FBTyxJQUFJLENBQUM7WUFFbEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7WUFFMUIsT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksS0FBSyxVQUFVLENBQUM7UUFFbEQsQ0FBQztRQUVELGNBQWMsRUFBRSxDQUFFLENBQU0sRUFBRSxDQUFNLEVBQVksRUFBRTtZQUU1QyxJQUFLLENBQUMsS0FBSyxDQUFDO2dCQUFHLE9BQU8sSUFBSSxDQUFDO1lBRTNCLElBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUcsQ0FBQyxDQUFFO2dCQUFHLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUcsQ0FBQyxDQUFFLENBQUM7WUFFNUQsSUFBSyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBRyxDQUFDLENBQUUsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBRyxDQUFDLENBQUU7Z0JBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRW5GLEtBQU0sTUFBTSxDQUFDLElBQUksQ0FBQztnQkFBRyxJQUFLLENBQUMsQ0FBRSxDQUFDLElBQUksQ0FBQyxDQUFFO29CQUFHLE9BQU8sS0FBSyxDQUFDO1lBRXJELEtBQU0sTUFBTSxDQUFDLElBQUksQ0FBQztnQkFBRyxJQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUFHLE9BQU8sS0FBSyxDQUFDO1lBRXZELE9BQU8sSUFBSSxDQUFDO1FBRWQsQ0FBQztRQUVELEtBQUssRUFBRSxDQUFFLEtBQWMsRUFBMEIsRUFBRTtZQUVqRCxPQUFPLEtBQUssWUFBWSxHQUFHLENBQUM7UUFFOUIsQ0FBQztRQUVELFFBQVEsRUFBRSxDQUFFLEtBQWMsRUFBb0IsRUFBRTtZQUU5QyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQztRQUVuQyxDQUFDO1FBRUQsV0FBVyxFQUFFLENBQUUsS0FBYyxFQUF1QixFQUFFO1lBRXBELE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQztRQUU3QixDQUFDO1FBRUQsSUFBSSxFQUFFLEdBQWMsRUFBRTtZQUVwQixPQUFPO1FBRVQsQ0FBQztRQUVELElBQUksRUFBRSxDQUFNLEdBQVEsRUFBUSxFQUFFO1lBRTVCLElBQUssR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDO2dCQUFHLE9BQU8sR0FBRyxDQUFDO1lBRWpDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBRyxJQUFJLEdBQUcsQ0FBRyxHQUFHLENBQUUsQ0FBRSxDQUFDO1FBRXhDLENBQUM7S0FFRjtJQUVELFlBQVk7SUFFWixFQUFFLEVBQUU7UUFFRixRQUFRLEVBQUUsQ0FBRSxVQUFrQixFQUFXLEVBQUU7WUFFekMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFHLENBQUMsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFHLElBQUksQ0FBQyxHQUFHLENBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFFLENBQUM7UUFFbEUsQ0FBQztRQUVELFdBQVcsRUFBRSxDQUFFLFVBQWtCLEVBQUUsTUFBZ0IsRUFBdUIsRUFBRTtZQUUxRSxJQUFJLENBQUM7Z0JBRUgsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFHLFVBQVUsQ0FBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFHLFVBQVUsQ0FBRSxDQUFDO1lBRXpGLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBRVAsT0FBTztZQUVULENBQUM7UUFFSCxDQUFDO1FBRUQsU0FBUyxFQUFFLENBQUUsVUFBa0IsRUFBRSxPQUFlLEVBQVksRUFBRTtZQUU1RCxPQUFPLENBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBRyxVQUFVLENBQUUsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBRSxPQUFPLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBRSxDQUFDO1FBRXRKLENBQUM7UUFFRCxJQUFJLEVBQUUsQ0FBRSxVQUFrQixFQUFFLFVBQWtCLGVBQWUsRUFBK0IsRUFBRTtZQUU1RixPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFHLE9BQU8sQ0FBRSxDQUFFLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBRSxDQUFDLEtBQUssQ0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBRSxDQUFDO1FBRTlGLENBQUM7UUFFRCxPQUFPLEVBQUUsS0FBSyxFQUFHLFFBQWdCLEVBQUUsTUFBZSxFQUFFLFFBQWdCLFFBQVEsRUFBRSxRQUFnQixRQUFRLEVBQUUsTUFBNkIsRUFBRSxVQUF1QixFQUFrQyxFQUFFO1lBRWhNLElBQUssVUFBVSxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksUUFBUSxJQUFJLFVBQVUsRUFBRyxDQUFDLENBQUMsc0JBQXNCO2dCQUVqRixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBRXBDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU1QyxDQUFDO2lCQUFNLENBQUMsQ0FBQyx3QkFBd0I7Z0JBRS9CLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFHLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFFLENBQUM7Z0JBRTVFLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU1QyxDQUFDO1FBRUgsQ0FBQztLQUVGO0NBRUYsQ0FBQztBQUVGLFlBQVk7QUFFWixlQUFlLEtBQUssQ0FBQyJ9