@meteor-it/fs
Advanced tools
Comparing version 1.1.8 to 1.2.0
@@ -23,4 +23,8 @@ /// <reference types="node" /> | ||
}>; | ||
declare type IWalkOptions = { | ||
filter?: (name: string) => boolean; | ||
}; | ||
export declare function copy(from: string, to: string, options?: IWalkOptions): Promise<void>; | ||
export declare function mkdir(pathStr: string, recursive?: boolean): Promise<void>; | ||
export declare function unlink(pathStr: string, recursive?: boolean): Promise<void>; | ||
export declare function unlink(pathStr: string, recursive?: boolean, options?: IWalkOptions): Promise<void>; | ||
/** | ||
@@ -35,3 +39,4 @@ * Write text to file | ||
*/ | ||
export declare function walkDir(dir: string, cb?: (file: string, dir: string) => void): Promise<string[] | null>; | ||
export declare function walkDir(dir: string, options?: IWalkOptions, cb?: (file: string) => void): Promise<string[] | null>; | ||
export declare function walkDirStruct(dir: string, options?: IWalkOptions, cb?: (dir: string) => void): Promise<string[] | null>; | ||
/** | ||
@@ -38,0 +43,0 @@ * Check if file exists |
75
index.js
@@ -45,2 +45,15 @@ import fsNative from 'fs'; | ||
} | ||
export async function copy(from, to, options) { | ||
from = path.resolve(from); | ||
to = path.resolve(to); | ||
console.log(from, to); | ||
if ((await isDirectory(from))) { | ||
const dirStruct = (await walkDirStruct(from)).map(e => e.replace(from, to)); | ||
await asyncEach(dirStruct, dir => mkdir(dir, true)); | ||
await asyncEach(await walkDir(from), f => options && options.filter && !options.filter(f) && Promise.resolve(true) || copy(f, f.replace(from, to))); | ||
return; | ||
} | ||
await fsNative.promises.copyFile(from, to); | ||
} | ||
copy('node_modules', 'node_new_modules'); | ||
export async function mkdir(pathStr, recursive = false) { | ||
@@ -51,3 +64,2 @@ pathStr = path.resolve(pathStr); | ||
// check for availability of them | ||
// TODO: Avoid recursion | ||
try { | ||
@@ -74,8 +86,17 @@ return await mkdir(pathStr); | ||
} | ||
export async function unlink(pathStr, recursive = false) { | ||
async function unlinkDirectoryStructure(pathStr) { | ||
pathStr = path.resolve(pathStr); | ||
const dirs = await readDir(pathStr); | ||
await asyncEach(dirs, async (dir) => { | ||
const dirPath = path.resolve(pathStr, dir); | ||
await unlinkDirectoryStructure(dirPath); | ||
await unlink(dirPath); | ||
}); | ||
} | ||
export async function unlink(pathStr, recursive = false, options) { | ||
pathStr = path.resolve(pathStr); | ||
if (recursive) { | ||
// Empty all dirs | ||
await walkDir(pathStr).then(files => Promise.all(files.map((n) => unlink(n)))); | ||
// TODO: Remove empty directories | ||
await walkDir(pathStr, options).then(files => Promise.all(files.map((n) => unlink(n)))); | ||
await unlinkDirectoryStructure(pathStr); | ||
} | ||
@@ -100,3 +121,3 @@ else { | ||
*/ | ||
export async function walkDir(dir, cb) { | ||
export async function walkDir(dir, options, cb) { | ||
if (!await exists(dir)) { | ||
@@ -110,4 +131,4 @@ throw new Error('No such file or directory: ' + dir); | ||
shouldReturn = true; | ||
cb = (file, dir) => { | ||
returnValue.push(dir + path.sep + file); | ||
cb = (file) => { | ||
returnValue.push(path.resolve(dir, file)); | ||
}; | ||
@@ -119,3 +140,5 @@ } | ||
if (await isFile(pathStr)) { | ||
cb(file, dir); | ||
if (options && options.filter && !options.filter(pathStr)) | ||
return; | ||
cb(pathStr); | ||
} | ||
@@ -127,3 +150,3 @@ else if (await isDirectory(pathStr)) { | ||
await asyncEach(dirList, async (dirLevelDown) => { | ||
await walkDir(dir + path.sep + dirLevelDown, cb); | ||
await walkDir(dir + path.sep + dirLevelDown, options, cb); | ||
}); | ||
@@ -135,2 +158,34 @@ if (shouldReturn) { | ||
} | ||
export async function walkDirStruct(dir, options, cb) { | ||
if (!await exists(dir)) { | ||
throw new Error('No such file or directory: ' + dir); | ||
} | ||
let returnValue; | ||
let shouldReturn = false; | ||
if (!cb) { | ||
returnValue = []; | ||
shouldReturn = true; | ||
cb = (dir) => { | ||
returnValue.push(dir); | ||
}; | ||
} | ||
let dirList = []; | ||
await asyncEach(await readDir(dir), async (file) => { | ||
let pathStr = path.resolve(dir, file); | ||
if (await isDirectory(pathStr)) { | ||
dirList.push(pathStr); | ||
} | ||
}); | ||
await asyncEach(dirList, async (dirLevelDown) => { | ||
const dirPath = path.resolve(dir, dirLevelDown); | ||
await walkDirStruct(dirPath, options, cb); | ||
if (options && options.filter && !options.filter(dirPath)) | ||
return; | ||
cb(dirPath); | ||
}); | ||
if (shouldReturn) { | ||
return returnValue.sort(); | ||
} | ||
return null; | ||
} | ||
/** | ||
@@ -175,2 +230,2 @@ * Check if file exists | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInhyZXN0L25vZGVfbW9kdWxlcy9AbWV0ZW9yLWl0L2ZzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sUUFBbUIsTUFBTSxJQUFJLENBQUM7QUFDckMsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUc3Qzs7O0dBR0c7QUFDSCxTQUFTLFNBQVMsQ0FBQyxJQUFZO0lBQzlCLE9BQU8sc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUE7QUFDeEQsQ0FBQztBQU1EOzs7R0FHRztBQUNILFNBQVMsWUFBWSxDQUFDLElBQVk7SUFDakMsT0FBTztRQUNOLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUM7S0FDOUQsQ0FBQTtBQUNGLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsT0FBTyxDQUFDLEdBQVc7SUFDeEMsT0FBTyxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFDRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFFBQVEsQ0FBQyxJQUFZO0lBQzFDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQztRQUNsQixPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDaEMsT0FBTyxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FB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ZW9yLWl0L2ZzL2luZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzTmF0aXZlLCB7IFN0YXRzIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBhc3luY0VhY2ggfSBmcm9tICdAbWV0ZW9yLWl0L3V0aWxzJztcblxudHlwZSBGaWxlSGFuZGxlID0gZnNOYXRpdmUucHJvbWlzZXMuRmlsZUhhbmRsZTtcbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHBhdGggaXMgYSB2YWxpZCBkYXRhIHVybFxuICogQHBhcmFtIHBhdGggcGF0aFxuICovXG5mdW5jdGlvbiBpc0RhdGFVcmwocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdHJldHVybiAvXmRhdGE6LitcXC8uKztiYXNlNjQsLy50ZXN0KHBhdGguc3Vic3RyKDAsIDI2OCkpXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBhcnNlZERhdGFVcmwge1xuXHRtaW1lOiBzdHJpbmcsXG5cdGRhdGE6IEJ1ZmZlclxufVxuLyoqXG4gKiBSZXR1cm5zIG1pbWUgYW5kIGRhdGEgb2YgZGF0YXVybFxuICogQHBhcmFtIHBhdGggRGF0YSB1cmxcbiAqL1xuZnVuY3Rpb24gcGFyc2VEYXRhVXJsKHBhdGg6IHN0cmluZyk6IElQYXJzZWREYXRhVXJsIHtcblx0cmV0dXJuIHtcblx0XHRtaW1lOiBwYXRoLnNsaWNlKDUsIHBhdGguaW5kZXhPZignOycpKSxcblx0XHRkYXRhOiBCdWZmZXIuZnJvbShwYXRoLnNsaWNlKHBhdGguaW5kZXhPZignLCcpICsgMSksICdiYXNlNjQnKVxuXHR9XG59XG5cbi8qKlxuICogR2V0IGFsbCBmaWxlcyBpbiBkaXJlY3RvcnlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWREaXIoZGlyOiBzdHJpbmcpIHtcblx0cmV0dXJuIGF3YWl0IGZzTmF0aXZlLnByb21pc2VzLnJlYWRkaXIoZGlyKTtcbn1cbi8qKlxuICogUmVhZCBmaWxlIG9yIHBhcnNlIGRhdGEgdXJsXG4gKiBAcGFyYW0gZmlsZSBQYXRoIHRvIGZpbGUgdG8gcmVhZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZEZpbGUoZmlsZTogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcblx0aWYgKGlzRGF0YVVybChmaWxlKSlcblx0XHRyZXR1cm4gcGFyc2VEYXRhVXJsKGZpbGUpLmRhdGE7XG5cdHJldHVybiBhd2FpdCBmc05hdGl2ZS5wcm9taXNlcy5yZWFkRmlsZShmaWxlKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXQoZmlsZTogc3RyaW5nKTogUHJvbWlzZTxTdGF0cz4ge1xuXHRyZXR1cm4gYXdhaXQgZnNOYXRpdmUucHJvbWlzZXMuc3RhdChmaWxlKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW4oZmlsZTogc3RyaW5nLCBtb2RlOiBzdHJpbmcsIGFjY2Vzczogc3RyaW5nKTogUHJvbWlzZTxGaWxlSGFuZGxlPiB7XG5cdHJldHVybiBhd2FpdCBmc05hdGl2ZS5wcm9taXNlcy5vcGVuKGZpbGUsIG1vZGUsIGFjY2Vzcyk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkKGZkOiBGaWxlSGFuZGxlLCBidWZmZXI6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyLCBwb3NpdGlvbjogbnVtYmVyKSB7XG5cdHJldHVybiBhd2FpdCBmc05hdGl2ZS5wcm9taXNlcy5yZWFkKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBta2RpcihwYXRoU3RyOiBzdHJpbmcsIHJlY3Vyc2l2ZTogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG5cdHBhdGhTdHIgPSBwYXRoLnJlc29sdmUocGF0aFN0cik7XG5cdGlmIChyZWN1cnNpdmUpIHtcblx0XHQvLyBUT0RPOiB0aGVyZSBpcyByZWN1cnNpdmUgb3B0aW9uIGluIG5ldyB2ZXJzaW9ucyBvZiBub2RlLmpzLFxuXHRcdC8vIGNoZWNrIGZvciBhdmFpbGFiaWxpdHkgb2YgdGhlbVxuXHRcdC8vIFRPRE86IEF2b2lkIHJlY3Vyc2lvblxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gYXdhaXQgbWtkaXIocGF0aFN0cik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0aWYgKGUuY29kZSA9PT0gJ0VOT0VOVCcpIHtcblx0XHRcdFx0YXdhaXQgbWtkaXIocGF0aC5kaXJuYW1lKHBhdGhTdHIpLCB0cnVlKTtcblx0XHRcdFx0cmV0dXJuIGF3YWl0IG1rZGlyKHBhdGhTdHIpO1xuXHRcdFx0fSBlbHNlIGlmICghKGF3YWl0IGV4aXN0cyhwYXRoU3RyKSkpIHtcblx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFN1Y2Nlc3Ncblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYXdhaXQgZnNOYXRpdmUucHJvbWlzZXMubWtkaXIocGF0aFN0cik7XG5cdH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVubGluayhwYXRoU3RyOiBzdHJpbmcsIHJlY3Vyc2l2ZTogYm9vbGVhbiA9IGZhbHNlKSB7XG5cdHBhdGhTdHIgPSBwYXRoLnJlc29sdmUocGF0aFN0cik7XG5cdGlmIChyZWN1cnNpdmUpIHtcblx0XHQvLyBFbXB0eSBhbGwgZGlyc1xuXHRcdGF3YWl0IHdhbGtEaXIocGF0aFN0cikudGhlbihmaWxlcyA9PiBQcm9taXNlLmFsbChmaWxlcy5tYXAoKG4pID0+IHVubGluayhuKSkpKTtcblx0XHQvLyBUT0RPOiBSZW1vdmUgZW1wdHkgZGlyZWN0b3JpZXNcblx0fSBlbHNlIHtcblx0XHRpZiAoYXdhaXQgaXNEaXJlY3RvcnkocGF0aFN0cikpIHtcblx0XHRcdHJldHVybiBhd2FpdCBmc05hdGl2ZS5wcm9taXNlcy5ybWRpcihwYXRoU3RyKTtcblx0XHR9XG5cdFx0YXdhaXQgZnNOYXRpdmUucHJvbWlzZXMudW5saW5rKHBhdGhTdHIpO1xuXHR9XG59XG5cbi8qKlxuICogV3JpdGUgdGV4dCB0byBmaWxlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZUZpbGUoZmlsZW5hbWU6IHN0cmluZywgdGV4dDogc3RyaW5nIHwgQnVmZmVyKSB7XG5cdHJldHVybiBhd2FpdCBmc05hdGl2ZS5wcm9taXNlcy53cml0ZUZpbGUoZmlsZW5hbWUsIHRleHQpO1xufVxuXG4vKipcbiAqIFdhbGsgZGlyZWN0b3J5XG4gKiBAcGFyYW0gZGlyIERpcmVjdG9yeSB0byB3YWxrXG4gKiBAcGFyYW0gY2IgSWYgcHJvdmlkZWQsIGZvdW5kIGZpbGVzIHdpbGwgcmV0dXJuZWQgcmVhbHRpbWUuIElmIG5vdCAtIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGFsbCBmb3VuZCBmaWxlc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2Fsa0RpcihkaXI6IHN0cmluZywgY2I/OiAoZmlsZTogc3RyaW5nLCBkaXI6IHN0cmluZykgPT4gdm9pZCk6IFByb21pc2U8c3RyaW5nW10gfCBudWxsPiB7XG5cdGlmICghYXdhaXQgZXhpc3RzKGRpcikpIHsgdGhyb3cgbmV3IEVycm9yKCdObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5OiAnICsgZGlyKTsgfVxuXHRsZXQgcmV0dXJuVmFsdWU6IHN0cmluZ1tdO1xuXHRsZXQgc2hvdWxkUmV0dXJuID0gZmFsc2U7XG5cdGlmICghY2IpIHtcblx0XHRyZXR1cm5WYWx1ZSA9IFtdO1xuXHRcdHNob3VsZFJldHVybiA9IHRydWU7XG5cdFx0Y2IgPSAoZmlsZTogc3RyaW5nLCBkaXI6IHN0cmluZykgPT4ge1xuXHRcdFx0cmV0dXJuVmFsdWUucHVzaChkaXIgKyBwYXRoLnNlcCArIGZpbGUpO1xuXHRcdH07XG5cdH1cblx0bGV0IGRpckxpc3Q6IHN0cmluZ1tdID0gW107XG5cdGF3YWl0IGFzeW5jRWFjaChhd2FpdCByZWFkRGlyKGRpciksIGFzeW5jIChmaWxlOiBzdHJpbmcpID0+IHtcblx0XHRsZXQgcGF0aFN0ciA9IGRpciArIHBhdGguc2VwICsgZmlsZTtcblx0XHRpZiAoYXdhaXQgaXNGaWxlKHBhdGhTdHIpKSB7XG5cdFx0XHRjYihmaWxlLCBkaXIpO1xuXHRcdH0gZWxzZSBpZiAoYXdhaXQgaXNEaXJlY3RvcnkocGF0aFN0cikpIHtcblx0XHRcdGRpckxpc3QucHVzaChmaWxlKTtcblx0XHR9XG5cdH0pO1xuXHRhd2FpdCBhc3luY0VhY2goZGlyTGlzdCwgYXN5bmMgKGRpckxldmVsRG93bjogc3RyaW5nKSA9PiB7XG5cdFx0YXdhaXQgd2Fsa0RpcihkaXIgKyBwYXRoLnNlcCArIGRpckxldmVsRG93biwgY2IpO1xuXHR9KTtcblx0aWYgKHNob3VsZFJldHVybikge1xuXHRcdHJldHVybiByZXR1cm5WYWx1ZS5zb3J0KCk7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgZmlsZSBleGlzdHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4aXN0cyhmaWxlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0dHJ5IHtcblx0XHRsZXQgcmVzdWx0ID0gYXdhaXQgZnNOYXRpdmUucHJvbWlzZXMuYWNjZXNzKGZpbGUsIGZzTmF0aXZlLmNvbnN0YW50cy5GX09LKTtcblx0XHRyZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQ7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBCZWNhdXNlIG9ubHkgXCJlcnJcIiBmaWVsZCBpcyByZXR1cm5lZCBpZiBub3QgZXhpc3RzXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbi8qKlxuICogSXMgcGF0aCBhIGZpbGVcbiAqIEBwYXJhbSBwYXRoIHBhdGggdG8gdGVzdFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNGaWxlKHBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRyZXR1cm4gKGF3YWl0IHN0YXQocGF0aCkpLmlzRmlsZSgpO1xufVxuLyoqXG4gKiBJcyBwYXRoIGEgZGlyZWN0b3J5XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc0RpcmVjdG9yeShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0cmV0dXJuIChhd2FpdCBzdGF0KHBhdGgpKS5pc0RpcmVjdG9yeSgpO1xufVxuXG4vKipcbiAqIFdyYXBwZXIgdG8gZnMgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlYWRTdHJlYW0ocGF0aDogc3RyaW5nLCBvcHRpb25zID0ge30pIHtcblx0cmV0dXJuIGZzTmF0aXZlLmNyZWF0ZVJlYWRTdHJlYW0ocGF0aCwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogV3JhcHBlciB0byBmcyBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V3JpdGVTdHJlYW0ocGF0aDogc3RyaW5nLCBvcHRpb25zID0ge30pIHtcblx0cmV0dXJuIGZzTmF0aXZlLmNyZWF0ZVdyaXRlU3RyZWFtKHBhdGgsIG9wdGlvbnMpO1xufVxuIl19 | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInhyZXN0L25vZGVfbW9kdWxlcy9AbWV0ZW9yLWl0L2ZzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sUUFBbUIsTUFBTSxJQUFJLENBQUM7QUFDckMsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUc3Qzs7O0dBR0c7QUFDSCxTQUFTLFNBQVMsQ0FBQyxJQUFZO0lBQzlCLE9BQU8sc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUE7QUFDeEQsQ0FBQztBQU1EOzs7R0FHRztBQUNILFNBQVMsWUFBWSxDQUFDLElBQVk7SUFDakMsT0FBTztRQUNOLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUM7S0FDOUQsQ0FBQTtBQUNGLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsT0FBTyxDQUFDLEdBQVc7SUFDeEMsT0FBTyxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFDRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFFBQVEsQ0FBQyxJQUFZO0lBQzFDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQztRQUNsQixPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDaEMsT0FBTyxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FB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M0UsT0FBTyxNQUFNLEtBQUssU0FBUyxDQUFDO0tBQzVCO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDWCxxREFBcUQ7UUFDckQsT0FBTyxLQUFLLENBQUM7S0FDYjtBQUNGLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLE1BQU0sQ0FBQyxJQUFZO0lBQ3hDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3BDLENBQUM7QUFDRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsV0FBVyxDQUFDLElBQVk7SUFDN0MsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDekMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxJQUFZLEVBQUUsT0FBTyxHQUFHLEVBQUU7SUFDdkQsT0FBTyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsSUFBWSxFQUFFLE9BQU8sR0FBRyxFQUFFO0lBQ3hELE9BQU8sUUFBUSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsRCxDQUFDIiwiZmlsZSI6InhyZXN0L25vZGVfbW9kdWxlcy9AbWV0ZW9yLWl0L2ZzL2luZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzTmF0aXZlLCB7IFN0YXRzIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBhc3luY0VhY2ggfSBmcm9tICdAbWV0ZW9yLWl0L3V0aWxzJztcblxudHlwZSBGaWxlSGFuZGxlID0gZnNOYXRpdmUucHJvbWlzZXMuRmlsZUhhbmRsZTtcbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHBhdGggaXMgYSB2YWxpZCBkYXRhIHVybFxuICogQHBhcmFtIHBhdGggcGF0aFxuICovXG5mdW5jdGlvbiBpc0RhdGFVcmwocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdHJldHVybiAvXmRhdGE6LitcXC8uKztiYXNlNjQsLy50ZXN0KHBhdGguc3Vic3RyKDAsIDI2OCkpXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBhcnNlZERhdGFVcmwge1xuXHRtaW1lOiBzdHJpbmcsXG5cdGRhdGE6IEJ1ZmZlclxufVxuLyoqXG4gKiBSZXR1cm5zIG1pbWUgYW5kIGRhdGEgb2YgZGF0YXVybFxuICogQHBhcmFtIHBhdGggRGF0YSB1cmxcbiAqL1xuZnVuY3Rpb24gcGFyc2VEYXRhVXJsKHBhdGg6IHN0cmluZyk6IElQYXJzZWREYXRhVXJsIHtcblx0cmV0dXJuIHtcblx0XHRtaW1lOiBwYXRoLnNsaWNlKDUsIHBhdGguaW5kZXhPZignOycpKSxcblx0XHRkYXRhOiBCdWZmZXIuZnJvbShwYXRoLnNsaWNlKHBhdGguaW5kZXhPZignLCcpICsgMSksICdiYXNlNjQnKVxuXHR9XG59XG5cbi8qKlxuICogR2V0IGFsbCBmaWxlcyBpbiBkaXJlY3RvcnlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWREaXIoZGlyOiBzdHJpbmcpIHtcblx0cmV0dXJuIGF3YWl0IGZzTmF0aXZlLnByb21pc2VzLnJlYWRkaXIoZGlyKTtcbn1cbi8qKlxuICogUmVhZCBmaWxlIG9yIHBhcnNlIGRhdGEgdXJsXG4gKiBAcGFyYW0gZmlsZSBQYXRoIHRvIGZpbGUgdG8gcmVhZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZEZpbGUoZmlsZTogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcblx0aWYgKGlzRGF0YVVybChmaWxlKSlcblx0XHRyZXR1cm4gcGFyc2VEYXRhVXJsKGZpbGUpLmRhdGE7XG5cdHJldHVybiBhd2FpdCBmc05hdGl2ZS5wcm9taXNlcy5yZWFkRmlsZShmaWxlKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXQoZmlsZTogc3RyaW5nKTogUHJvbWlzZTxTdGF0cz4ge1xuXHRyZXR1cm4gYXdhaXQgZnNOYXRpdmUucHJvbWlzZXMuc3RhdChmaWxlKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW4oZmlsZTogc3RyaW5nLCBtb2RlOiBzdHJpbmcsIGFjY2Vzczogc3RyaW5nKTogUHJvbWlzZTxGaWxlSGFuZGxlPiB7XG5cdHJldHVybiBhd2FpdCBmc05hdGl2ZS5wcm9taXNlcy5vcGVuKGZpbGUsIG1vZGUsIGFjY2Vzcyk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkKGZkOiBGaWxlSGFuZGxlLCBidWZmZXI6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyLCBwb3NpdGlvbjogbnVtYmVyKSB7XG5cdHJldHVybiBhd2FpdCBmc05hdGl2ZS5wcm9taXNlcy5yZWFkKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbik7XG59XG5cbnR5cGUgSVdhbGtPcHRpb25zID0ge1xuXHRmaWx0ZXI/OiAobmFtZTogc3RyaW5nKSA9PiBib29sZWFuO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29weShmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcsIG9wdGlvbnM/OiBJV2Fsa09wdGlvbnMpIHtcblx0ZnJvbSA9IHBhdGgucmVzb2x2ZShmcm9tKTtcblx0dG8gPSBwYXRoLnJlc29sdmUodG8pO1xuXHRjb25zb2xlLmxvZyhmcm9tLCB0byk7XG5cdGlmICgoYXdhaXQgaXNEaXJlY3RvcnkoZnJvbSkpKSB7XG5cdFx0Y29uc3QgZGlyU3RydWN0ID0gKGF3YWl0IHdhbGtEaXJTdHJ1Y3QoZnJvbSkpLm1hcChlID0+IGUucmVwbGFjZShmcm9tLCB0bykpO1xuXHRcdGF3YWl0IGFzeW5jRWFjaChkaXJTdHJ1Y3QsIGRpciA9PiBta2RpcihkaXIsIHRydWUpKTtcblx0XHRhd2FpdCBhc3luY0VhY2goYXdhaXQgd2Fsa0Rpcihmcm9tKSwgZiA9PiBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyICYmICFvcHRpb25zLmZpbHRlcihmKSAmJiBQcm9taXNlLnJlc29sdmUodHJ1ZSkgYXMgYW55IGFzIFByb21pc2U8dm9pZD4gfHwgY29weShmLCBmLnJlcGxhY2UoZnJvbSwgdG8pKSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGF3YWl0IGZzTmF0aXZlLnByb21pc2VzLmNvcHlGaWxlKGZyb20sIHRvKTtcbn1cblxuY29weSgnbm9kZV9tb2R1bGVzJywgJ25vZGVfbmV3X21vZHVsZXMnKTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1rZGlyKHBhdGhTdHI6IHN0cmluZywgcmVjdXJzaXZlOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcblx0cGF0aFN0ciA9IHBhdGgucmVzb2x2ZShwYXRoU3RyKTtcblx0aWYgKHJlY3Vyc2l2ZSkge1xuXHRcdC8vIFRPRE86IHRoZXJlIGlzIHJlY3Vyc2l2ZSBvcHRpb24gaW4gbmV3IHZlcnNpb25zIG9mIG5vZGUuanMsXG5cdFx0Ly8gY2hlY2sgZm9yIGF2YWlsYWJpbGl0eSBvZiB0aGVtXG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBhd2FpdCBta2RpcihwYXRoU3RyKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZS5jb2RlID09PSAnRU5PRU5UJykge1xuXHRcdFx0XHRhd2FpdCBta2RpcihwYXRoLmRpcm5hbWUocGF0aFN0ciksIHRydWUpO1xuXHRcdFx0XHRyZXR1cm4gYXdhaXQgbWtkaXIocGF0aFN0cik7XG5cdFx0XHR9IGVsc2UgaWYgKCEoYXdhaXQgZXhpc3RzKHBhdGhTdHIpKSkge1xuXHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gU3VjY2Vzc1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBhd2FpdCBmc05hdGl2ZS5wcm9taXNlcy5ta2RpcihwYXRoU3RyKTtcblx0fVxufVxuXG5hc3luYyBmdW5jdGlvbiB1bmxpbmtEaXJlY3RvcnlTdHJ1Y3R1cmUocGF0aFN0cjogc3RyaW5nKSB7XG5cdHBhdGhTdHIgPSBwYXRoLnJlc29sdmUocGF0aFN0cik7XG5cdGNvbnN0IGRpcnMgPSBhd2FpdCByZWFkRGlyKHBhdGhTdHIpO1xuXHRhd2FpdCBhc3luY0VhY2goZGlycywgYXN5bmMgZGlyID0+IHtcblx0XHRjb25zdCBkaXJQYXRoID0gcGF0aC5yZXNvbHZlKHBhdGhTdHIsIGRpcik7XG5cdFx0YXdhaXQgdW5saW5rRGlyZWN0b3J5U3RydWN0dXJlKGRpclBhdGgpO1xuXHRcdGF3YWl0IHVubGluayhkaXJQYXRoKTtcblx0fSk7XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5saW5rKHBhdGhTdHI6IHN0cmluZywgcmVjdXJzaXZlOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiBJV2Fsa09wdGlvbnMpIHtcblx0cGF0aFN0ciA9IHBhdGgucmVzb2x2ZShwYXRoU3RyKTtcblx0aWYgKHJlY3Vyc2l2ZSkge1xuXHRcdC8vIEVtcHR5IGFsbCBkaXJzXG5cdFx0YXdhaXQgd2Fsa0RpcihwYXRoU3RyLCBvcHRpb25zKS50aGVuKGZpbGVzID0+IFByb21pc2UuYWxsKGZpbGVzLm1hcCgobikgPT4gdW5saW5rKG4pKSkpO1xuXHRcdGF3YWl0IHVubGlua0RpcmVjdG9yeVN0cnVjdHVyZShwYXRoU3RyKTtcblx0fSBlbHNlIHtcblx0XHRpZiAoYXdhaXQgaXNEaXJlY3RvcnkocGF0aFN0cikpIHtcblx0XHRcdHJldHVybiBhd2FpdCBmc05hdGl2ZS5wcm9taXNlcy5ybWRpcihwYXRoU3RyKTtcblx0XHR9XG5cdFx0YXdhaXQgZnNOYXRpdmUucHJvbWlzZXMudW5saW5rKHBhdGhTdHIpO1xuXHR9XG59XG5cbi8qKlxuICogV3JpdGUgdGV4dCB0byBmaWxlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZUZpbGUoZmlsZW5hbWU6IHN0cmluZywgdGV4dDogc3RyaW5nIHwgQnVmZmVyKSB7XG5cdHJldHVybiBhd2FpdCBmc05hdGl2ZS5wcm9taXNlcy53cml0ZUZpbGUoZmlsZW5hbWUsIHRleHQpO1xufVxuXG4vKipcbiAqIFdhbGsgZGlyZWN0b3J5XG4gKiBAcGFyYW0gZGlyIERpcmVjdG9yeSB0byB3YWxrXG4gKiBAcGFyYW0gY2IgSWYgcHJvdmlkZWQsIGZvdW5kIGZpbGVzIHdpbGwgcmV0dXJuZWQgcmVhbHRpbWUuIElmIG5vdCAtIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGFsbCBmb3VuZCBmaWxlc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2Fsa0RpcihkaXI6IHN0cmluZywgb3B0aW9ucz86IElXYWxrT3B0aW9ucywgY2I/OiAoZmlsZTogc3RyaW5nKSA9PiB2b2lkKTogUHJvbWlzZTxzdHJpbmdbXSB8IG51bGw+IHtcblx0aWYgKCFhd2FpdCBleGlzdHMoZGlyKSkgeyB0aHJvdyBuZXcgRXJyb3IoJ05vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnk6ICcgKyBkaXIpOyB9XG5cdGxldCByZXR1cm5WYWx1ZTogc3RyaW5nW107XG5cdGxldCBzaG91bGRSZXR1cm4gPSBmYWxzZTtcblx0aWYgKCFjYikge1xuXHRcdHJldHVyblZhbHVlID0gW107XG5cdFx0c2hvdWxkUmV0dXJuID0gdHJ1ZTtcblx0XHRjYiA9IChmaWxlOiBzdHJpbmcpID0+IHtcblx0XHRcdHJldHVyblZhbHVlLnB1c2gocGF0aC5yZXNvbHZlKGRpciwgZmlsZSkpO1xuXHRcdH07XG5cdH1cblx0bGV0IGRpckxpc3Q6IHN0cmluZ1tdID0gW107XG5cdGF3YWl0IGFzeW5jRWFjaChhd2FpdCByZWFkRGlyKGRpciksIGFzeW5jIChmaWxlOiBzdHJpbmcpID0+IHtcblx0XHRsZXQgcGF0aFN0ciA9IGRpciArIHBhdGguc2VwICsgZmlsZTtcblx0XHRpZiAoYXdhaXQgaXNGaWxlKHBhdGhTdHIpKSB7XG5cdFx0XHRpZiAob3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlciAmJiAhb3B0aW9ucy5maWx0ZXIocGF0aFN0cikpIHJldHVybjtcblx0XHRcdGNiKHBhdGhTdHIpO1xuXHRcdH0gZWxzZSBpZiAoYXdhaXQgaXNEaXJlY3RvcnkocGF0aFN0cikpIHtcblx0XHRcdGRpckxpc3QucHVzaChmaWxlKTtcblx0XHR9XG5cdH0pO1xuXHRhd2FpdCBhc3luY0VhY2goZGlyTGlzdCwgYXN5bmMgKGRpckxldmVsRG93bjogc3RyaW5nKSA9PiB7XG5cdFx0YXdhaXQgd2Fsa0RpcihkaXIgKyBwYXRoLnNlcCArIGRpckxldmVsRG93biwgb3B0aW9ucywgY2IpO1xuXHR9KTtcblx0aWYgKHNob3VsZFJldHVybikge1xuXHRcdHJldHVybiByZXR1cm5WYWx1ZS5zb3J0KCk7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWxrRGlyU3RydWN0KGRpcjogc3RyaW5nLCBvcHRpb25zPzogSVdhbGtPcHRpb25zLCBjYj86IChkaXI6IHN0cmluZykgPT4gdm9pZCk6IFByb21pc2U8c3RyaW5nW10gfCBudWxsPiB7XG5cdGlmICghYXdhaXQgZXhpc3RzKGRpcikpIHsgdGhyb3cgbmV3IEVycm9yKCdObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5OiAnICsgZGlyKTsgfVxuXHRsZXQgcmV0dXJuVmFsdWU6IHN0cmluZ1tdO1xuXHRsZXQgc2hvdWxkUmV0dXJuID0gZmFsc2U7XG5cdGlmICghY2IpIHtcblx0XHRyZXR1cm5WYWx1ZSA9IFtdO1xuXHRcdHNob3VsZFJldHVybiA9IHRydWU7XG5cdFx0Y2IgPSAoZGlyOiBzdHJpbmcpID0+IHtcblx0XHRcdHJldHVyblZhbHVlLnB1c2goZGlyKTtcblx0XHR9O1xuXHR9XG5cdGxldCBkaXJMaXN0OiBzdHJpbmdbXSA9IFtdO1xuXHRhd2FpdCBhc3luY0VhY2goYXdhaXQgcmVhZERpcihkaXIpLCBhc3luYyAoZmlsZTogc3RyaW5nKSA9PiB7XG5cdFx0bGV0IHBhdGhTdHIgPSBwYXRoLnJlc29sdmUoZGlyLCBmaWxlKTtcblx0XHRpZiAoYXdhaXQgaXNEaXJlY3RvcnkocGF0aFN0cikpIHtcblx0XHRcdGRpckxpc3QucHVzaChwYXRoU3RyKTtcblx0XHR9XG5cdH0pO1xuXHRhd2FpdCBhc3luY0VhY2goZGlyTGlzdCwgYXN5bmMgKGRpckxldmVsRG93bjogc3RyaW5nKSA9PiB7XG5cdFx0Y29uc3QgZGlyUGF0aCA9IHBhdGgucmVzb2x2ZShkaXIsIGRpckxldmVsRG93bik7XG5cdFx0YXdhaXQgd2Fsa0RpclN0cnVjdChkaXJQYXRoLCBvcHRpb25zLCBjYik7XG5cdFx0aWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXIgJiYgIW9wdGlvbnMuZmlsdGVyKGRpclBhdGgpKSByZXR1cm47XG5cdFx0Y2IoZGlyUGF0aCk7XG5cdH0pO1xuXHRpZiAoc2hvdWxkUmV0dXJuKSB7XG5cdFx0cmV0dXJuIHJldHVyblZhbHVlLnNvcnQoKTtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBmaWxlIGV4aXN0c1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhpc3RzKGZpbGU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHR0cnkge1xuXHRcdGxldCByZXN1bHQgPSBhd2FpdCBmc05hdGl2ZS5wcm9taXNlcy5hY2Nlc3MoZmlsZSwgZnNOYXRpdmUuY29uc3RhbnRzLkZfT0spO1xuXHRcdHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZDtcblx0fSBjYXRjaCAoZSkge1xuXHRcdC8vIEJlY2F1c2Ugb25seSBcImVyclwiIGZpZWxkIGlzIHJldHVybmVkIGlmIG5vdCBleGlzdHNcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxuLyoqXG4gKiBJcyBwYXRoIGEgZmlsZVxuICogQHBhcmFtIHBhdGggcGF0aCB0byB0ZXN0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc0ZpbGUocGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdHJldHVybiAoYXdhaXQgc3RhdChwYXRoKSkuaXNGaWxlKCk7XG59XG4vKipcbiAqIElzIHBhdGggYSBkaXJlY3RvcnlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzRGlyZWN0b3J5KHBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRyZXR1cm4gKGF3YWl0IHN0YXQocGF0aCkpLmlzRGlyZWN0b3J5KCk7XG59XG5cbi8qKlxuICogV3JhcHBlciB0byBmcyBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVhZFN0cmVhbShwYXRoOiBzdHJpbmcsIG9wdGlvbnMgPSB7fSkge1xuXHRyZXR1cm4gZnNOYXRpdmUuY3JlYXRlUmVhZFN0cmVhbShwYXRoLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBXcmFwcGVyIHRvIGZzIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXcml0ZVN0cmVhbShwYXRoOiBzdHJpbmcsIG9wdGlvbnMgPSB7fSkge1xuXHRyZXR1cm4gZnNOYXRpdmUuY3JlYXRlV3JpdGVTdHJlYW0ocGF0aCwgb3B0aW9ucyk7XG59XG4iXX0= |
76
index.ts
@@ -57,2 +57,21 @@ import fsNative, { Stats } from 'fs'; | ||
type IWalkOptions = { | ||
filter?: (name: string) => boolean; | ||
} | ||
export async function copy(from: string, to: string, options?: IWalkOptions) { | ||
from = path.resolve(from); | ||
to = path.resolve(to); | ||
console.log(from, to); | ||
if ((await isDirectory(from))) { | ||
const dirStruct = (await walkDirStruct(from)).map(e => e.replace(from, to)); | ||
await asyncEach(dirStruct, dir => mkdir(dir, true)); | ||
await asyncEach(await walkDir(from), f => options && options.filter && !options.filter(f) && Promise.resolve(true) as any as Promise<void> || copy(f, f.replace(from, to))); | ||
return; | ||
} | ||
await fsNative.promises.copyFile(from, to); | ||
} | ||
copy('node_modules', 'node_new_modules'); | ||
export async function mkdir(pathStr: string, recursive: boolean = false): Promise<void> { | ||
@@ -63,3 +82,2 @@ pathStr = path.resolve(pathStr); | ||
// check for availability of them | ||
// TODO: Avoid recursion | ||
try { | ||
@@ -83,8 +101,17 @@ return await mkdir(pathStr); | ||
export async function unlink(pathStr: string, recursive: boolean = false) { | ||
async function unlinkDirectoryStructure(pathStr: string) { | ||
pathStr = path.resolve(pathStr); | ||
const dirs = await readDir(pathStr); | ||
await asyncEach(dirs, async dir => { | ||
const dirPath = path.resolve(pathStr, dir); | ||
await unlinkDirectoryStructure(dirPath); | ||
await unlink(dirPath); | ||
}); | ||
} | ||
export async function unlink(pathStr: string, recursive: boolean = false, options?: IWalkOptions) { | ||
pathStr = path.resolve(pathStr); | ||
if (recursive) { | ||
// Empty all dirs | ||
await walkDir(pathStr).then(files => Promise.all(files.map((n) => unlink(n)))); | ||
// TODO: Remove empty directories | ||
await walkDir(pathStr, options).then(files => Promise.all(files.map((n) => unlink(n)))); | ||
await unlinkDirectoryStructure(pathStr); | ||
} else { | ||
@@ -110,3 +137,3 @@ if (await isDirectory(pathStr)) { | ||
*/ | ||
export async function walkDir(dir: string, cb?: (file: string, dir: string) => void): Promise<string[] | null> { | ||
export async function walkDir(dir: string, options?: IWalkOptions, cb?: (file: string) => void): Promise<string[] | null> { | ||
if (!await exists(dir)) { throw new Error('No such file or directory: ' + dir); } | ||
@@ -118,4 +145,4 @@ let returnValue: string[]; | ||
shouldReturn = true; | ||
cb = (file: string, dir: string) => { | ||
returnValue.push(dir + path.sep + file); | ||
cb = (file: string) => { | ||
returnValue.push(path.resolve(dir, file)); | ||
}; | ||
@@ -127,3 +154,4 @@ } | ||
if (await isFile(pathStr)) { | ||
cb(file, dir); | ||
if (options && options.filter && !options.filter(pathStr)) return; | ||
cb(pathStr); | ||
} else if (await isDirectory(pathStr)) { | ||
@@ -134,3 +162,3 @@ dirList.push(file); | ||
await asyncEach(dirList, async (dirLevelDown: string) => { | ||
await walkDir(dir + path.sep + dirLevelDown, cb); | ||
await walkDir(dir + path.sep + dirLevelDown, options, cb); | ||
}); | ||
@@ -143,2 +171,32 @@ if (shouldReturn) { | ||
export async function walkDirStruct(dir: string, options?: IWalkOptions, cb?: (dir: string) => void): Promise<string[] | null> { | ||
if (!await exists(dir)) { throw new Error('No such file or directory: ' + dir); } | ||
let returnValue: string[]; | ||
let shouldReturn = false; | ||
if (!cb) { | ||
returnValue = []; | ||
shouldReturn = true; | ||
cb = (dir: string) => { | ||
returnValue.push(dir); | ||
}; | ||
} | ||
let dirList: string[] = []; | ||
await asyncEach(await readDir(dir), async (file: string) => { | ||
let pathStr = path.resolve(dir, file); | ||
if (await isDirectory(pathStr)) { | ||
dirList.push(pathStr); | ||
} | ||
}); | ||
await asyncEach(dirList, async (dirLevelDown: string) => { | ||
const dirPath = path.resolve(dir, dirLevelDown); | ||
await walkDirStruct(dirPath, options, cb); | ||
if (options && options.filter && !options.filter(dirPath)) return; | ||
cb(dirPath); | ||
}); | ||
if (shouldReturn) { | ||
return returnValue.sort(); | ||
} | ||
return null; | ||
} | ||
/** | ||
@@ -145,0 +203,0 @@ * Check if file exists |
{ | ||
"name": "@meteor-it/fs", | ||
"version": "1.1.8", | ||
"version": "1.2.0", | ||
"description": "Wrappers for native fs module", | ||
@@ -20,3 +20,3 @@ "module": "index.mjs", | ||
}, | ||
"gitHead": "1d959519c624e54df90813aac68afdddc1d1fc8a" | ||
"gitHead": "9671934d578249a12c4dffaacf04dfb92ce8a167" | ||
} |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
61321
863