Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

appcd-fs

Package Overview
Dependencies
Maintainers
3
Versions
57
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

appcd-fs - npm Package Compare versions

Comparing version 2.0.7 to 2.1.0

6

CHANGELOG.md

@@ -0,1 +1,7 @@

# v2.1.0 (Jun 8, 2021)
* feat: Added `mkdirpSync()`, `moveSync()`, and `writeFileSync()` helpers that create parent
directories and apply parent directory ownership.
* chore: Updated dependencies.
# v2.0.7 (Apr 26, 2021)

@@ -2,0 +8,0 @@

122

dist/fs.js

@@ -10,3 +10,6 @@ "use strict";

exports.locate = locate;
exports.mkdirpSync = mkdirpSync;
exports.moveSync = moveSync;
exports.readdirScopedSync = readdirScopedSync;
exports.writeFileSync = writeFileSync;

@@ -25,2 +28,56 @@ var _fs = _interopRequireDefault(require("fs"));

/**
* Determines owner of existing parent directory, calls the operation's function, then applies the
* owner to the destination and its newly created parent directories.
*
* @param {String} dest - The destination of the file or directory the operation is targetting.
* @param {Object} opts - Various options.
* @param {Boolean} [opts.applyOwner=true] - When `true`, determines the owner of the closest
* existing parent directory and apply the owner to the file and any newly created directories.
* @param {Number} [opts.gid] - The group id to apply to the file when assigning an owner.
* @param {Number} [opts.uid] - The user id to apply to the file when assigning an owner.
* @param {Function} fn - A function to call to perform the original filesystem operation.
*/
function execute(dest, opts, fn) {
if (opts.applyOwner === false || process.platform === 'win32' || !process.getuid || process.getuid() !== 0) {
fn(opts);
return;
}
dest = _path.default.resolve(dest);
let origin = _path.default.parse(dest).root;
if (!opts.uid) {
for (origin = dest; true; origin = _path.default.dirname(origin)) {
try {
const st = _fs.default.lstatSync(origin);
if (st.isDirectory()) {
opts = Object.assign({}, opts, {
gid: st.gid,
uid: st.uid
});
break;
}
} catch (err) {// continue
}
}
}
fn(opts);
const chownSync = _fs.default.lchownSync || _fs.default.chownSync;
let stat = _fs.default.lstatSync(dest);
while (dest !== origin && stat.uid !== opts.uid) {
try {
chownSync(dest, opts.uid, opts.gid);
dest = _path.default.dirname(dest);
stat = _fs.default.lstatSync(dest);
} catch (e) {
break;
}
}
}
/**
* Determines if a file or directory exists.

@@ -31,2 +88,4 @@ *

*/
function existsSync(file) {

@@ -112,2 +171,42 @@ try {

/**
* Creates a directory and any parent directories if needed.
*
* @param {String} dest - The directory path to create.
* @param {Object} [opts] - Various options plus options to pass into `fs.mkdirSync()`.
* @param {Boolean} [opts.applyOwner=true] - When `true`, determines the owner of the closest
* existing parent directory and apply the owner to the file and any newly created directories.
* @param {Number} [opts.gid] - The group id to apply to the file when assigning an owner.
* @param {Number} [opts.uid] - The user id to apply to the file when assigning an owner.
*/
function mkdirpSync(dest, opts = {}) {
execute(dest, opts, opts => {
_fs.default.mkdirSync(dest, { ...opts,
recursive: true
});
});
}
/**
* Moves a file.
*
* @param {String} src - The file or directory to move.
* @param {String} dest - The destination to move the file or directory to.
* @param {Object} [opts] - Various options plus options to pass into `fs.mkdirSync()` and
* `fs.renameSync()`.
* @param {Boolean} [opts.applyOwner=true] - When `true`, determines the owner of the closest
* existing parent directory and apply the owner to the file and any newly created directories.
* @param {Number} [opts.gid] - The group id to apply to the file when assigning an owner.
* @param {Number} [opts.uid] - The user id to apply to the file when assigning an owner.
*/
function moveSync(src, dest, opts = {}) {
execute(dest, opts, opts => {
mkdirpSync(_path.default.dirname(dest), opts);
_fs.default.renameSync(src, dest, opts);
});
}
/**
* Read a directory including scoped packages as a single entry in the Array

@@ -144,2 +243,23 @@ * and filtering out all files.

}
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZzLmpzIl0sIm5hbWVzIjpbIkVycm9yIiwicHJlcGFyZVN0YWNrVHJhY2UiLCJyZXF1aXJlIiwiZXhpc3RzU3luYyIsImZpbGUiLCJmcyIsInN0YXRTeW5jIiwiZSIsImlzRGlyIiwiZGlyIiwiaXNEaXJlY3RvcnkiLCJpc0ZpbGUiLCJsb2NhdGUiLCJmaWxlbmFtZSIsImRlcHRoIiwibmFtZSIsInJlYWRkaXJTeW5jIiwicGF0aCIsImpvaW4iLCJyZXN1bHQiLCJ1bmRlZmluZWQiLCJSZWdFeHAiLCJ0ZXN0IiwicmVhZGRpclNjb3BlZFN5bmMiLCJjaGlsZHJlbiIsImNoaWxkUGF0aCIsImNoYXJBdCIsInNjb3BlZFBhY2thZ2UiLCJwdXNoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUtBOztBQUNBOzs7O0FBTkE7QUFDQSxJQUFJLENBQUNBLEtBQUssQ0FBQ0MsaUJBQVgsRUFBOEI7QUFDN0JDLEVBQUFBLE9BQU8sQ0FBQyw2QkFBRCxDQUFQO0FBQ0E7O0FBS0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsVUFBVCxDQUFvQkMsSUFBcEIsRUFBMEI7QUFDaEMsTUFBSTtBQUNIQyxnQkFBR0MsUUFBSCxDQUFZRixJQUFaOztBQUNBLFdBQU8sSUFBUDtBQUNBLEdBSEQsQ0FHRSxPQUFPRyxDQUFQLEVBQVU7QUFDWCxXQUFPLEtBQVA7QUFDQTtBQUNEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTQyxLQUFULENBQWVDLEdBQWYsRUFBb0I7QUFDMUIsTUFBSTtBQUNILFdBQU9KLFlBQUdDLFFBQUgsQ0FBWUcsR0FBWixFQUFpQkMsV0FBakIsRUFBUDtBQUNBLEdBRkQsQ0FFRSxPQUFPSCxDQUFQLEVBQVUsQ0FDWDtBQUNBOztBQUNELFNBQU8sS0FBUDtBQUNBO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTSSxNQUFULENBQWdCUCxJQUFoQixFQUFzQjtBQUM1QixNQUFJO0FBQ0gsV0FBT0MsWUFBR0MsUUFBSCxDQUFZRixJQUFaLEVBQWtCTyxNQUFsQixFQUFQO0FBQ0EsR0FGRCxDQUVFLE9BQU9KLENBQVAsRUFBVSxDQUNYO0FBQ0E7O0FBQ0QsU0FBTyxLQUFQO0FBQ0E7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTSyxNQUFULENBQWdCSCxHQUFoQixFQUFxQkksUUFBckIsRUFBK0JDLEtBQS9CLEVBQXNDO0FBQzVDLE1BQUk7QUFDSCxRQUFJVCxZQUFHQyxRQUFILENBQVlHLEdBQVosRUFBaUJDLFdBQWpCLEVBQUosRUFBb0M7QUFDbkMsV0FBSyxNQUFNSyxJQUFYLElBQW1CVixZQUFHVyxXQUFILENBQWVQLEdBQWYsQ0FBbkIsRUFBd0M7QUFDdkMsY0FBTUwsSUFBSSxHQUFHYSxjQUFLQyxJQUFMLENBQVVULEdBQVYsRUFBZU0sSUFBZixDQUFiOztBQUNBLFlBQUk7QUFDSDtBQUNBLGNBQUlWLFlBQUdDLFFBQUgsQ0FBWUYsSUFBWixFQUFrQk0sV0FBbEIsRUFBSixFQUFxQztBQUNwQyxnQkFBSSxPQUFPSSxLQUFQLEtBQWlCLFdBQWpCLElBQWdDQSxLQUFLLEdBQUcsQ0FBNUMsRUFBK0M7QUFDOUMsb0JBQU1LLE1BQU0sR0FBR1AsTUFBTSxDQUFDUixJQUFELEVBQU9TLFFBQVAsRUFBaUIsT0FBT0MsS0FBUCxLQUFpQixXQUFqQixHQUErQk0sU0FBL0IsR0FBMkNOLEtBQUssR0FBRyxDQUFwRSxDQUFyQjs7QUFDQSxrQkFBSUssTUFBSixFQUFZO0FBQ1gsdUJBQU9BLE1BQVA7QUFDQTtBQUNEO0FBQ0QsV0FQRCxNQU9PLElBQUssT0FBT04sUUFBUCxLQUFvQixRQUFwQixJQUFnQ0UsSUFBSSxLQUFLRixRQUExQyxJQUF3REEsUUFBUSxZQUFZUSxNQUFwQixJQUE4QlIsUUFBUSxDQUFDUyxJQUFULENBQWNQLElBQWQsQ0FBMUYsRUFBZ0g7QUFDdEgsbUJBQU9YLElBQVA7QUFDQTtBQUNELFNBWkQsQ0FZRSxPQUFPRyxDQUFQLEVBQVUsQ0FDWDtBQUNBO0FBQ0Q7QUFDRDtBQUNELEdBckJELENBcUJFLE9BQU9BLENBQVAsRUFBVSxDQUNYO0FBQ0E7O0FBQ0QsU0FBTyxJQUFQO0FBQ0E7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU2dCLGlCQUFULENBQTJCZCxHQUEzQixFQUFnQztBQUN0QyxRQUFNZSxRQUFRLEdBQUcsRUFBakI7O0FBRUEsT0FBSyxNQUFNVCxJQUFYLElBQW1CVixZQUFHVyxXQUFILENBQWVQLEdBQWYsQ0FBbkIsRUFBd0M7QUFDdkMsVUFBTWdCLFNBQVMsR0FBR1IsY0FBS0MsSUFBTCxDQUFVVCxHQUFWLEVBQWVNLElBQWYsQ0FBbEI7O0FBQ0EsUUFBSSxDQUFDUCxLQUFLLENBQUNpQixTQUFELENBQVYsRUFBdUI7QUFDdEI7QUFDQTs7QUFDRCxRQUFJVixJQUFJLENBQUNXLE1BQUwsQ0FBWSxDQUFaLE1BQW1CLEdBQXZCLEVBQTRCO0FBQzNCLFdBQUssTUFBTUMsYUFBWCxJQUE0QnRCLFlBQUdXLFdBQUgsQ0FBZVMsU0FBZixDQUE1QixFQUF1RDtBQUN0RCxZQUFJakIsS0FBSyxDQUFDUyxjQUFLQyxJQUFMLENBQVVPLFNBQVYsRUFBcUJFLGFBQXJCLENBQUQsQ0FBVCxFQUFnRDtBQUMvQ0gsVUFBQUEsUUFBUSxDQUFDSSxJQUFULENBQWUsR0FBRWIsSUFBSyxJQUFHWSxhQUFjLEVBQXZDO0FBQ0E7QUFDRDtBQUNELEtBTkQsTUFNTztBQUNOSCxNQUFBQSxRQUFRLENBQUNJLElBQVQsQ0FBY2IsSUFBZDtBQUNBO0FBQ0Q7O0FBRUQsU0FBT1MsUUFBUDtBQUNBIiwic291cmNlc0NvbnRlbnQiOlsiLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAoIUVycm9yLnByZXBhcmVTdGFja1RyYWNlKSB7XG5cdHJlcXVpcmUoJ3NvdXJjZS1tYXAtc3VwcG9ydC9yZWdpc3RlcicpO1xufVxuXG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBhIGZpbGUgb3IgZGlyZWN0b3J5IGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZmlsZSAtIFRoZSBmdWxsIHBhdGggdG8gY2hlY2sgaWYgZXhpc3RzLlxuICogQHJldHVybnMge0Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleGlzdHNTeW5jKGZpbGUpIHtcblx0dHJ5IHtcblx0XHRmcy5zdGF0U3luYyhmaWxlKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgYSBkaXJlY3RvcnkgZXhpc3RzIGFuZCB0aGF0IGl0IGlzIGluZGVlZCBhIGRpcmVjdG9yeS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZGlyIC0gVGhlIGRpcmVjdG9yeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEaXIoZGlyKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIGZzLnN0YXRTeW5jKGRpcikuaXNEaXJlY3RvcnkoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdC8vIHNxdWVsY2hcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBhIGZpbGUgZXhpc3RzIGFuZCB0aGF0IGl0IGlzIGluZGVlZCBhIGZpbGUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGZpbGUgLSBUaGUgZmlsZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGaWxlKGZpbGUpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gZnMuc3RhdFN5bmMoZmlsZSkuaXNGaWxlKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBzcXVlbGNoXG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFNjYW4gYSBkaXJlY3RvcnkgZm9yIGEgc3BlY2lmaWVkIGZpbGUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGRpciAtIFRoZSBkaXJlY3RvcnkgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20uXG4gKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB9IGZpbGVuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gbG9vayBmb3IuXG4gKiBAcGFyYW0ge051bWJlcn0gZGVwdGggLSBPcHRpb25hbCBzZWFyY2ggZGVwdGgsIGRlZmF1bHQgMSBsZXZlbC5cbiAqIEByZXR1cm5zIHtTdHJpbmd8bnVsbH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvY2F0ZShkaXIsIGZpbGVuYW1lLCBkZXB0aCkge1xuXHR0cnkge1xuXHRcdGlmIChmcy5zdGF0U3luYyhkaXIpLmlzRGlyZWN0b3J5KCkpIHtcblx0XHRcdGZvciAoY29uc3QgbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkaXIpKSB7XG5cdFx0XHRcdGNvbnN0IGZpbGUgPSBwYXRoLmpvaW4oZGlyLCBuYW1lKTtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBtYXgtZGVwdGggKi9cblx0XHRcdFx0XHRpZiAoZnMuc3RhdFN5bmMoZmlsZSkuaXNEaXJlY3RvcnkoKSkge1xuXHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcgfHwgZGVwdGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGxvY2F0ZShmaWxlLCBmaWxlbmFtZSwgdHlwZW9mIGRlcHRoID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGRlcHRoIC0gMSk7XG5cdFx0XHRcdFx0XHRcdGlmIChyZXN1bHQpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIGlmICgodHlwZW9mIGZpbGVuYW1lID09PSAnc3RyaW5nJyAmJiBuYW1lID09PSBmaWxlbmFtZSkgfHwgKGZpbGVuYW1lIGluc3RhbmNlb2YgUmVnRXhwICYmIGZpbGVuYW1lLnRlc3QobmFtZSkpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmlsZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHQvLyBwcm9iYWJseSBhIHBlcm1pc3Npb24gaXNzdWUsIGdvIHRvIG5leHQgZmlsZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gZGlyIGRvZXMgbm90IGV4aXN0IG9yIHBlcm1pc3Npb24gaXNzdWVcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBSZWFkIGEgZGlyZWN0b3J5IGluY2x1ZGluZyBzY29wZWQgcGFja2FnZXMgYXMgYSBzaW5nbGUgZW50cnkgaW4gdGhlIEFycmF5XG4gKiBhbmQgZmlsdGVyaW5nIG91dCBhbGwgZmlsZXMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGRpciAtIERpcmVjdG9yeSB0byByZWFkLlxuICogQHJldHVybnMge0FycmF5fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhZGRpclNjb3BlZFN5bmMoZGlyKSB7XG5cdGNvbnN0IGNoaWxkcmVuID0gW107XG5cblx0Zm9yIChjb25zdCBuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRpcikpIHtcblx0XHRjb25zdCBjaGlsZFBhdGggPSBwYXRoLmpvaW4oZGlyLCBuYW1lKTtcblx0XHRpZiAoIWlzRGlyKGNoaWxkUGF0aCkpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRpZiAobmFtZS5jaGFyQXQoMCkgPT09ICdAJykge1xuXHRcdFx0Zm9yIChjb25zdCBzY29wZWRQYWNrYWdlIG9mIGZzLnJlYWRkaXJTeW5jKGNoaWxkUGF0aCkpIHtcblx0XHRcdFx0aWYgKGlzRGlyKHBhdGguam9pbihjaGlsZFBhdGgsIHNjb3BlZFBhY2thZ2UpKSkge1xuXHRcdFx0XHRcdGNoaWxkcmVuLnB1c2goYCR7bmFtZX0vJHtzY29wZWRQYWNrYWdlfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNoaWxkcmVuLnB1c2gobmFtZSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNoaWxkcmVuO1xufVxuIl0sImZpbGUiOiJmcy5qcyJ9
/**
* Writes a file to disk.
*
* @param {String} dest - The name of the file to write.
* @param {String} contents - The contents of the file to write.
* @param {Object} [opts] - Various options plus options to pass into `fs.mkdirSync()` and
* `fs.writeFileSync()`.
* @param {Boolean} [opts.applyOwner=true] - When `true`, determines the owner of the closest
* existing parent directory and apply the owner to the file and any newly created directories.
* @param {Number} [opts.gid] - The group id to apply to the file when assigning an owner.
* @param {Number} [opts.uid] - The user id to apply to the file when assigning an owner.
*/
function writeFileSync(dest, contents, opts = {}) {
execute(dest, opts, opts => {
mkdirpSync(_path.default.dirname(dest), opts);
_fs.default.writeFileSync(dest, contents, opts);
});
}
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZzLmpzIl0sIm5hbWVzIjpbIkVycm9yIiwicHJlcGFyZVN0YWNrVHJhY2UiLCJyZXF1aXJlIiwiZXhlY3V0ZSIsImRlc3QiLCJvcHRzIiwiZm4iLCJhcHBseU93bmVyIiwicHJvY2VzcyIsInBsYXRmb3JtIiwiZ2V0dWlkIiwicGF0aCIsInJlc29sdmUiLCJvcmlnaW4iLCJwYXJzZSIsInJvb3QiLCJ1aWQiLCJkaXJuYW1lIiwic3QiLCJmcyIsImxzdGF0U3luYyIsImlzRGlyZWN0b3J5IiwiT2JqZWN0IiwiYXNzaWduIiwiZ2lkIiwiZXJyIiwiY2hvd25TeW5jIiwibGNob3duU3luYyIsInN0YXQiLCJlIiwiZXhpc3RzU3luYyIsImZpbGUiLCJzdGF0U3luYyIsImlzRGlyIiwiZGlyIiwiaXNGaWxlIiwibG9jYXRlIiwiZmlsZW5hbWUiLCJkZXB0aCIsIm5hbWUiLCJyZWFkZGlyU3luYyIsImpvaW4iLCJyZXN1bHQiLCJ1bmRlZmluZWQiLCJSZWdFeHAiLCJ0ZXN0IiwibWtkaXJwU3luYyIsIm1rZGlyU3luYyIsInJlY3Vyc2l2ZSIsIm1vdmVTeW5jIiwic3JjIiwicmVuYW1lU3luYyIsInJlYWRkaXJTY29wZWRTeW5jIiwiY2hpbGRyZW4iLCJjaGlsZFBhdGgiLCJjaGFyQXQiLCJzY29wZWRQYWNrYWdlIiwicHVzaCIsIndyaXRlRmlsZVN5bmMiLCJjb250ZW50cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFLQTs7QUFDQTs7OztBQU5BO0FBQ0EsSUFBSSxDQUFDQSxLQUFLLENBQUNDLGlCQUFYLEVBQThCO0FBQzdCQyxFQUFBQSxPQUFPLENBQUMsNkJBQUQsQ0FBUDtBQUNBOztBQUtEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLE9BQVQsQ0FBaUJDLElBQWpCLEVBQXVCQyxJQUF2QixFQUE2QkMsRUFBN0IsRUFBaUM7QUFDaEMsTUFBSUQsSUFBSSxDQUFDRSxVQUFM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QzNCLFdBQUssTUFBTUMsYUFBWCxJQUE0QnJDLFlBQUdxQixXQUFILENBQWVjLFNBQWYsQ0FBNUIsRUFBdUQ7QUFDdEQsWUFBSXJCLEtBQUssQ0FBQ3RCLGNBQUs4QixJQUFMLENBQVVhLFNBQVYsRUFBcUJFLGFBQXJCLENBQUQsQ0FBVCxFQUFnRDtBQUMvQ0gsVUFBQUEsUUFBUSxDQUFDSSxJQUFULENBQWUsR0FBRWxCLElBQUssSUFBR2lCLGFBQWMsRUFBdkM7QUFDQTtBQUNEO0FBQ0QsS0FORCxNQU1PO0FBQ05ILE1BQUFBLFFBQVEsQ0FBQ0ksSUFBVCxDQUFjbEIsSUFBZDtBQUNBO0FBQ0Q7O0FBRUQsU0FBT2MsUUFBUDtBQUNBO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTSyxhQUFULENBQXVCdEQsSUFBdkIsRUFBNkJ1RCxRQUE3QixFQUF1Q3RELElBQUksR0FBRyxFQUE5QyxFQUFrRDtBQUN4REYsRUFBQUEsT0FBTyxDQUFDQyxJQUFELEVBQU9DLElBQVAsRUFBYUEsSUFBSSxJQUFJO0FBQzNCeUMsSUFBQUEsVUFBVSxDQUFDbkMsY0FBS00sT0FBTCxDQUFhYixJQUFiLENBQUQsRUFBcUJDLElBQXJCLENBQVY7O0FBQ0FjLGdCQUFHdUMsYUFBSCxDQUFpQnRELElBQWpCLEVBQXVCdUQsUUFBdkIsRUFBaUN0RCxJQUFqQztBQUNBLEdBSE0sQ0FBUDtBQUlBIiwic291cmNlc0NvbnRlbnQiOlsiLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAoIUVycm9yLnByZXBhcmVTdGFja1RyYWNlKSB7XG5cdHJlcXVpcmUoJ3NvdXJjZS1tYXAtc3VwcG9ydC9yZWdpc3RlcicpO1xufVxuXG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBvd25lciBvZiBleGlzdGluZyBwYXJlbnQgZGlyZWN0b3J5LCBjYWxscyB0aGUgb3BlcmF0aW9uJ3MgZnVuY3Rpb24sIHRoZW4gYXBwbGllcyB0aGVcbiAqIG93bmVyIHRvIHRoZSBkZXN0aW5hdGlvbiBhbmQgaXRzIG5ld2x5IGNyZWF0ZWQgcGFyZW50IGRpcmVjdG9yaWVzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBkZXN0IC0gVGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSB0aGUgb3BlcmF0aW9uIGlzIHRhcmdldHRpbmcuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIFZhcmlvdXMgb3B0aW9ucy5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuYXBwbHlPd25lcj10cnVlXSAtIFdoZW4gYHRydWVgLCBkZXRlcm1pbmVzIHRoZSBvd25lciBvZiB0aGUgY2xvc2VzdFxuICogZXhpc3RpbmcgcGFyZW50IGRpcmVjdG9yeSBhbmQgYXBwbHkgdGhlIG93bmVyIHRvIHRoZSBmaWxlIGFuZCBhbnkgbmV3bHkgY3JlYXRlZCBkaXJlY3Rvcmllcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5naWRdIC0gVGhlIGdyb3VwIGlkIHRvIGFwcGx5IHRvIHRoZSBmaWxlIHdoZW4gYXNzaWduaW5nIGFuIG93bmVyLlxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnVpZF0gLSBUaGUgdXNlciBpZCB0byBhcHBseSB0byB0aGUgZmlsZSB3aGVuIGFzc2lnbmluZyBhbiBvd25lci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gQSBmdW5jdGlvbiB0byBjYWxsIHRvIHBlcmZvcm0gdGhlIG9yaWdpbmFsIGZpbGVzeXN0ZW0gb3BlcmF0aW9uLlxuICovXG5mdW5jdGlvbiBleGVjdXRlKGRlc3QsIG9wdHMsIGZuKSB7XG5cdGlmIChvcHRzLmFwcGx5T3duZXIgPT09IGZhbHNlIHx8IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgfHwgIXByb2Nlc3MuZ2V0dWlkIHx8IHByb2Nlc3MuZ2V0dWlkKCkgIT09IDApIHtcblx0XHRmbihvcHRzKTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRkZXN0ID0gcGF0aC5yZXNvbHZlKGRlc3QpO1xuXHRsZXQgb3JpZ2luID0gcGF0aC5wYXJzZShkZXN0KS5yb290O1xuXG5cdGlmICghb3B0cy51aWQpIHtcblx0XHRmb3IgKG9yaWdpbiA9IGRlc3Q7IHRydWU7IG9yaWdpbiA9IHBhdGguZGlybmFtZShvcmlnaW4pKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBzdCA9IGZzLmxzdGF0U3luYyhvcmlnaW4pO1xuXHRcdFx0XHRpZiAoc3QuaXNEaXJlY3RvcnkoKSkge1xuXHRcdFx0XHRcdG9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRzLCB7IGdpZDogc3QuZ2lkLCB1aWQ6IHN0LnVpZCB9KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdC8vIGNvbnRpbnVlXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Zm4ob3B0cyk7XG5cblx0Y29uc3QgY2hvd25TeW5jID0gZnMubGNob3duU3luYyB8fCBmcy5jaG93blN5bmM7XG5cdGxldCBzdGF0ID0gZnMubHN0YXRTeW5jKGRlc3QpO1xuXHR3aGlsZSAoZGVzdCAhPT0gb3JpZ2luICYmIHN0YXQudWlkICE9PSBvcHRzLnVpZCkge1xuXHRcdHRyeSB7XG5cdFx0XHRjaG93blN5bmMoZGVzdCwgb3B0cy51aWQsIG9wdHMuZ2lkKTtcblx0XHRcdGRlc3QgPSBwYXRoLmRpcm5hbWUoZGVzdCk7XG5cdFx0XHRzdGF0ID0gZnMubHN0YXRTeW5jKGRlc3QpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgYSBmaWxlIG9yIGRpcmVjdG9yeSBleGlzdHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGZpbGUgLSBUaGUgZnVsbCBwYXRoIHRvIGNoZWNrIGlmIGV4aXN0cy5cbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhpc3RzU3luYyhmaWxlKSB7XG5cdHRyeSB7XG5cdFx0ZnMuc3RhdFN5bmMoZmlsZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGEgZGlyZWN0b3J5IGV4aXN0cyBhbmQgdGhhdCBpdCBpcyBpbmRlZWQgYSBkaXJlY3RvcnkuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGRpciAtIFRoZSBkaXJlY3RvcnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGlyKGRpcikge1xuXHR0cnkge1xuXHRcdHJldHVybiBmcy5zdGF0U3luYyhkaXIpLmlzRGlyZWN0b3J5KCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBzcXVlbGNoXG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgYSBmaWxlIGV4aXN0cyBhbmQgdGhhdCBpdCBpcyBpbmRlZWQgYSBmaWxlLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaWxlIC0gVGhlIGZpbGUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsZShmaWxlKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIGZzLnN0YXRTeW5jKGZpbGUpLmlzRmlsZSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gc3F1ZWxjaFxuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBTY2FuIGEgZGlyZWN0b3J5IGZvciBhIHNwZWNpZmllZCBmaWxlLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBkaXIgLSBUaGUgZGlyZWN0b3J5IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLlxuICogQHBhcmFtIHtTdHJpbmd8UmVnRXhwfSBmaWxlbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGxvb2sgZm9yLlxuICogQHBhcmFtIHtOdW1iZXJ9IGRlcHRoIC0gT3B0aW9uYWwgc2VhcmNoIGRlcHRoLCBkZWZhdWx0IDEgbGV2ZWwuXG4gKiBAcmV0dXJucyB7U3RyaW5nfG51bGx9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2NhdGUoZGlyLCBmaWxlbmFtZSwgZGVwdGgpIHtcblx0dHJ5IHtcblx0XHRpZiAoZnMuc3RhdFN5bmMoZGlyKS5pc0RpcmVjdG9yeSgpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGlyKSkge1xuXHRcdFx0XHRjb25zdCBmaWxlID0gcGF0aC5qb2luKGRpciwgbmFtZSk7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbWF4LWRlcHRoICovXG5cdFx0XHRcdFx0aWYgKGZzLnN0YXRTeW5jKGZpbGUpLmlzRGlyZWN0b3J5KCkpIHtcblx0XHRcdFx0XHRcdGlmICh0eXBlb2YgZGVwdGggPT09ICd1bmRlZmluZWQnIHx8IGRlcHRoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCByZXN1bHQgPSBsb2NhdGUoZmlsZSwgZmlsZW5hbWUsIHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBkZXB0aCAtIDEpO1xuXHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoKHR5cGVvZiBmaWxlbmFtZSA9PT0gJ3N0cmluZycgJiYgbmFtZSA9PT0gZmlsZW5hbWUpIHx8IChmaWxlbmFtZSBpbnN0YW5jZW9mIFJlZ0V4cCAmJiBmaWxlbmFtZS50ZXN0KG5hbWUpKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZpbGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0Ly8gcHJvYmFibHkgYSBwZXJtaXNzaW9uIGlzc3VlLCBnbyB0byBuZXh0IGZpbGVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSBjYXRjaCAoZSkge1xuXHRcdC8vIGRpciBkb2VzIG5vdCBleGlzdCBvciBwZXJtaXNzaW9uIGlzc3VlXG5cdH1cblx0cmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRpcmVjdG9yeSBhbmQgYW55IHBhcmVudCBkaXJlY3RvcmllcyBpZiBuZWVkZWQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGRlc3QgLSBUaGUgZGlyZWN0b3J5IHBhdGggdG8gY3JlYXRlLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIFZhcmlvdXMgb3B0aW9ucyBwbHVzIG9wdGlvbnMgdG8gcGFzcyBpbnRvIGBmcy5ta2RpclN5bmMoKWAuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRzLmFwcGx5T3duZXI9dHJ1ZV0gLSBXaGVuIGB0cnVlYCwgZGV0ZXJtaW5lcyB0aGUgb3duZXIgb2YgdGhlIGNsb3Nlc3RcbiAqIGV4aXN0aW5nIHBhcmVudCBkaXJlY3RvcnkgYW5kIGFwcGx5IHRoZSBvd25lciB0byB0aGUgZmlsZSBhbmQgYW55IG5ld2x5IGNyZWF0ZWQgZGlyZWN0b3JpZXMuXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuZ2lkXSAtIFRoZSBncm91cCBpZCB0byBhcHBseSB0byB0aGUgZmlsZSB3aGVuIGFzc2lnbmluZyBhbiBvd25lci5cbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy51aWRdIC0gVGhlIHVzZXIgaWQgdG8gYXBwbHkgdG8gdGhlIGZpbGUgd2hlbiBhc3NpZ25pbmcgYW4gb3duZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBta2RpcnBTeW5jKGRlc3QsIG9wdHMgPSB7fSkge1xuXHRleGVjdXRlKGRlc3QsIG9wdHMsIG9wdHMgPT4ge1xuXHRcdGZzLm1rZGlyU3luYyhkZXN0LCB7IC4uLm9wdHMsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblx0fSk7XG59XG5cbi8qKlxuICogTW92ZXMgYSBmaWxlLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzcmMgLSBUaGUgZmlsZSBvciBkaXJlY3RvcnkgdG8gbW92ZS5cbiAqIEBwYXJhbSB7U3RyaW5nfSBkZXN0IC0gVGhlIGRlc3RpbmF0aW9uIHRvIG1vdmUgdGhlIGZpbGUgb3IgZGlyZWN0b3J5IHRvLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIFZhcmlvdXMgb3B0aW9ucyBwbHVzIG9wdGlvbnMgdG8gcGFzcyBpbnRvIGBmcy5ta2RpclN5bmMoKWAgYW5kXG4gKiBgZnMucmVuYW1lU3luYygpYC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuYXBwbHlPd25lcj10cnVlXSAtIFdoZW4gYHRydWVgLCBkZXRlcm1pbmVzIHRoZSBvd25lciBvZiB0aGUgY2xvc2VzdFxuICogZXhpc3RpbmcgcGFyZW50IGRpcmVjdG9yeSBhbmQgYXBwbHkgdGhlIG93bmVyIHRvIHRoZSBmaWxlIGFuZCBhbnkgbmV3bHkgY3JlYXRlZCBkaXJlY3Rvcmllcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5naWRdIC0gVGhlIGdyb3VwIGlkIHRvIGFwcGx5IHRvIHRoZSBmaWxlIHdoZW4gYXNzaWduaW5nIGFuIG93bmVyLlxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnVpZF0gLSBUaGUgdXNlciBpZCB0byBhcHBseSB0byB0aGUgZmlsZSB3aGVuIGFzc2lnbmluZyBhbiBvd25lci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vdmVTeW5jKHNyYywgZGVzdCwgb3B0cyA9IHt9KSB7XG5cdGV4ZWN1dGUoZGVzdCwgb3B0cywgb3B0cyA9PiB7XG5cdFx0bWtkaXJwU3luYyhwYXRoLmRpcm5hbWUoZGVzdCksIG9wdHMpO1xuXHRcdGZzLnJlbmFtZVN5bmMoc3JjLCBkZXN0LCBvcHRzKTtcblx0fSk7XG59XG5cbi8qKlxuICogUmVhZCBhIGRpcmVjdG9yeSBpbmNsdWRpbmcgc2NvcGVkIHBhY2thZ2VzIGFzIGEgc2luZ2xlIGVudHJ5IGluIHRoZSBBcnJheVxuICogYW5kIGZpbHRlcmluZyBvdXQgYWxsIGZpbGVzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBkaXIgLSBEaXJlY3RvcnkgdG8gcmVhZC5cbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRkaXJTY29wZWRTeW5jKGRpcikge1xuXHRjb25zdCBjaGlsZHJlbiA9IFtdO1xuXG5cdGZvciAoY29uc3QgbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkaXIpKSB7XG5cdFx0Y29uc3QgY2hpbGRQYXRoID0gcGF0aC5qb2luKGRpciwgbmFtZSk7XG5cdFx0aWYgKCFpc0RpcihjaGlsZFBhdGgpKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0aWYgKG5hbWUuY2hhckF0KDApID09PSAnQCcpIHtcblx0XHRcdGZvciAoY29uc3Qgc2NvcGVkUGFja2FnZSBvZiBmcy5yZWFkZGlyU3luYyhjaGlsZFBhdGgpKSB7XG5cdFx0XHRcdGlmIChpc0RpcihwYXRoLmpvaW4oY2hpbGRQYXRoLCBzY29wZWRQYWNrYWdlKSkpIHtcblx0XHRcdFx0XHRjaGlsZHJlbi5wdXNoKGAke25hbWV9LyR7c2NvcGVkUGFja2FnZX1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjaGlsZHJlbi5wdXNoKG5hbWUpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjaGlsZHJlbjtcbn1cblxuLyoqXG4gKiBXcml0ZXMgYSBmaWxlIHRvIGRpc2suXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGRlc3QgLSBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0byB3cml0ZS5cbiAqIEBwYXJhbSB7U3RyaW5nfSBjb250ZW50cyAtIFRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSB0byB3cml0ZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBWYXJpb3VzIG9wdGlvbnMgcGx1cyBvcHRpb25zIHRvIHBhc3MgaW50byBgZnMubWtkaXJTeW5jKClgIGFuZFxuICogYGZzLndyaXRlRmlsZVN5bmMoKWAuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRzLmFwcGx5T3duZXI9dHJ1ZV0gLSBXaGVuIGB0cnVlYCwgZGV0ZXJtaW5lcyB0aGUgb3duZXIgb2YgdGhlIGNsb3Nlc3RcbiAqIGV4aXN0aW5nIHBhcmVudCBkaXJlY3RvcnkgYW5kIGFwcGx5IHRoZSBvd25lciB0byB0aGUgZmlsZSBhbmQgYW55IG5ld2x5IGNyZWF0ZWQgZGlyZWN0b3JpZXMuXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuZ2lkXSAtIFRoZSBncm91cCBpZCB0byBhcHBseSB0byB0aGUgZmlsZSB3aGVuIGFzc2lnbmluZyBhbiBvd25lci5cbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy51aWRdIC0gVGhlIHVzZXIgaWQgdG8gYXBwbHkgdG8gdGhlIGZpbGUgd2hlbiBhc3NpZ25pbmcgYW4gb3duZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUZpbGVTeW5jKGRlc3QsIGNvbnRlbnRzLCBvcHRzID0ge30pIHtcblx0ZXhlY3V0ZShkZXN0LCBvcHRzLCBvcHRzID0+IHtcblx0XHRta2RpcnBTeW5jKHBhdGguZGlybmFtZShkZXN0KSwgb3B0cyk7XG5cdFx0ZnMud3JpdGVGaWxlU3luYyhkZXN0LCBjb250ZW50cywgb3B0cyk7XG5cdH0pO1xufVxuIl0sImZpbGUiOiJmcy5qcyJ9

10

package.json
{
"name": "appcd-fs",
"version": "2.0.7",
"version": "2.1.0",
"description": "Library of useful filesystem functions.",

@@ -19,6 +19,7 @@ "main": "./dist/fs",

"dependencies": {
"source-map-support": "^0.5.19"
"source-map-support": "^0.5.19",
"tmp": "^0.2.1"
},
"devDependencies": {
"appcd-gulp": "^3.1.6"
"appcd-gulp": "^3.2.0"
},

@@ -30,4 +31,3 @@ "homepage": "https://github.com/appcelerator/appc-daemon",

"node": ">=10.13.0"
},
"gitHead": "15e8b31ac846c3532cd840b6463836a68747c18e"
}
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc