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

object-rewrite

Package Overview
Dependencies
Maintainers
1
Versions
179
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

object-rewrite - npm Package Compare versions

Comparing version 4.0.0 to 4.0.1

95

lib/util/rewriter.js

@@ -130,4 +130,3 @@ const assert = require('assert');

assert(fieldsToRequest.every(f => dataStoreFields.includes(f)), `Bad Field Requested: ${fieldsToRequest.filter(f => !dataStoreFields.includes(f))}`);
const injectRewriter = (input, context) => objectScan(Object.keys(injectCbs), {
const injectRewriter = objectScan(Object.keys(injectCbs), {
useArraySelector: false,

@@ -137,12 +136,12 @@ joined: false,

matchedBy,
parents
parents,
context
}) => {
matchedBy.forEach(m => {
Object.assign(value, injectCbs[m].fn(key, value, parents, context));
Object.assign(value, injectCbs[m].fn(key, value, parents, context.context));
});
return true;
}
})(input);
const filterRewriter = (input, context) => objectScan(Object.keys(filterCbs), {
});
const filterRewriter = objectScan(Object.keys(filterCbs), {
useArraySelector: false,

@@ -152,8 +151,9 @@ joined: false,

matchedBy,
parents
parents,
context
}) => {
const result = matchedBy.some(m => filterCbs[m].fn(key, value, parents, context) === true);
const result = matchedBy.some(m => filterCbs[m].fn(key, value, parents, context.context) === true);
if (result === false) {
const parent = key.length === 1 ? input : parents[0];
const parent = key.length === 1 ? context.input : parents[0];

@@ -169,41 +169,38 @@ if (Array.isArray(parent)) {

}
})(input);
});
const sortRewriter = objectScan(Object.keys(sortCbs), {
useArraySelector: false,
joined: false,
filterFn: (key, value, {
matchedBy,
parents,
context
}) => {
assert(Array.isArray(parents[0]), 'Sort must be on "Array" type.');
const sortRewriter = (input, context) => {
const lookups = [];
return objectScan(Object.keys(sortCbs), {
useArraySelector: false,
joined: false,
filterFn: (key, value, {
matchedBy,
parents
}) => {
assert(Array.isArray(parents[0]), 'Sort must be on "Array" type.');
if (context.lookups[key.length - 1] === undefined) {
// eslint-disable-next-line no-param-reassign
context.lookups[key.length - 1] = new Map();
}
if (lookups[key.length - 1] === undefined) {
lookups[key.length - 1] = new Map();
}
const lookup = context.lookups[key.length - 1];
lookup.set(value, sortCbs[matchedBy[0]].fn(key, value, parents, context.context));
const lookup = lookups[key.length - 1];
lookup.set(value, sortCbs[matchedBy[0]].fn(key, value, parents, context));
if (key[key.length - 1] === 0) {
parents[0].sort((a, b) => sortFn(lookup.get(a), lookup.get(b)));
const limits = sortCbs[matchedBy[0]].plugins.filter(p => p.limit !== undefined).map(p => p.limit({
context: context.context
})).filter(l => l !== undefined);
if (key[key.length - 1] === 0) {
parents[0].sort((a, b) => sortFn(lookup.get(a), lookup.get(b)));
const limits = sortCbs[matchedBy[0]].plugins.filter(p => p.limit !== undefined).map(p => p.limit({
context
})).filter(l => l !== undefined);
if (limits.length !== 0) {
assert(limits.every(l => Number.isInteger(l) && l >= 0));
parents[0].splice(Math.min(...limits));
}
lookups.splice(key.length - 1);
if (limits.length !== 0) {
assert(limits.every(l => Number.isInteger(l) && l >= 0));
parents[0].splice(Math.min(...limits));
}
return true;
context.lookups.splice(key.length - 1);
}
})(input);
};
return true;
}
});
return {

@@ -213,5 +210,13 @@ fieldsToRequest,

assert(context instanceof Object && !Array.isArray(context));
injectRewriter(input, context);
filterRewriter(input, context);
sortRewriter(input, context);
injectRewriter(input, {
context
});
filterRewriter(input, {
input,
context
});
sortRewriter(input, {
lookups: [],
context
});
objectFields.retain(input, fields);

@@ -223,2 +228,2 @@ }

};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL3Jld3JpdGVyLmpzIl0sIm5hbWVzIjpbImFzc2VydCIsInJlcXVpcmUiLCJzZXQiLCJvYmplY3RTY2FuIiwib2JqZWN0RmllbGRzIiwic29ydEZuIiwicGx1Z2luVHlwZXMiLCJjb21waWxlVGFyZ2V0VG9DYWxsYmFjayIsInR5cGUiLCJwbHVnaW5zIiwiZXZlcnkiLCJwIiwidGFyZ2V0VG9QbHVnaW5zIiwicmVkdWNlIiwicHJldiIsInBsdWdpbiIsImtleSIsInByZWZpeCIsInRhcmdldCIsImVuZHNXaXRoIiwic2xpY2UiLCJ1bmRlZmluZWQiLCJPYmplY3QiLCJhc3NpZ24iLCJwdXNoIiwiZW50cmllcyIsInBzIiwiZm4iLCJ2YWx1ZSIsInBhcmVudHMiLCJjb250ZXh0IiwiYXJncyIsImZvckVhY2giLCJyZXN1bHQiLCJzY2hlbWEiLCJ0YXJnZXRSZWwiLCJtYXAiLCJjb21waWxlTWV0YSIsImZpZWxkcyIsInBsdWdpbnNCeVR5cGUiLCJjIiwiaW5hY3RpdmVQbHVnaW5zIiwicmVxdWlyZWRGaWVsZHMiLCJpZ25vcmVkRmllbGRzIiwiU2V0IiwiaSIsImxlbmd0aCIsImZpZWxkIiwiaiIsInRhcmdldHMiLCJpbmNsdWRlcyIsInN0YXJ0c1dpdGgiLCJyZXF1aXJlcyIsInNwbGljZSIsImFkZCIsInRvTG93ZXJDYXNlIiwiZmllbGRzVG9SZXF1ZXN0IiwiZmlsdGVyIiwiZSIsImhhcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJwbHVnaW5NYXAiLCJkYXRhU3RvcmVGaWVsZHMiLCJBcnJheSIsImlzQXJyYXkiLCJhbGxvd2VkRmllbGRzIiwidCIsImluaXQiLCJmIiwiRXJyb3IiLCJqb2luIiwiaW5qZWN0Q2JzIiwiZmlsdGVyQ2JzIiwic29ydENicyIsImluamVjdFJld3JpdGVyIiwiaW5wdXQiLCJrZXlzIiwidXNlQXJyYXlTZWxlY3RvciIsImpvaW5lZCIsImZpbHRlckZuIiwibWF0Y2hlZEJ5IiwibSIsImZpbHRlclJld3JpdGVyIiwic29tZSIsInBhcmVudCIsInNvcnRSZXdyaXRlciIsImxvb2t1cHMiLCJNYXAiLCJsb29rdXAiLCJzb3J0IiwiYSIsImIiLCJnZXQiLCJsaW1pdHMiLCJsaW1pdCIsImwiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJNYXRoIiwibWluIiwicmV3cml0ZSIsInJldGFpbiJdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTUEsTUFBTSxHQUFHQyxPQUFPLENBQUMsUUFBRCxDQUF0Qjs7QUFDQSxNQUFNQyxHQUFHLEdBQUdELE9BQU8sQ0FBQyxZQUFELENBQW5COztBQUNBLE1BQU1FLFVBQVUsR0FBR0YsT0FBTyxDQUFDLGFBQUQsQ0FBMUI7O0FBQ0EsTUFBTUcsWUFBWSxHQUFHSCxPQUFPLENBQUMsZUFBRCxDQUE1Qjs7QUFDQSxNQUFNSSxNQUFNLEdBQUdKLE9BQU8sQ0FBQyxXQUFELENBQXRCOztBQUNBLE1BQU07QUFBRUssRUFBQUE7QUFBRixJQUFrQkwsT0FBTyxDQUFDLFVBQUQsQ0FBL0I7O0FBRUEsTUFBTU0sdUJBQXVCLEdBQUcsQ0FBQ0MsSUFBRCxFQUFPQyxPQUFQLEtBQW1CO0FBQ2pEVCxFQUFBQSxNQUFNLENBQUNTLE9BQU8sQ0FBQ0MsS0FBUixDQUFlQyxDQUFELElBQU9BLENBQUMsQ0FBQ0gsSUFBRixLQUFXQSxJQUFoQyxDQUFELENBQU47QUFFQSxRQUFNSSxlQUFlLEdBQUdILE9BQU8sQ0FDNUJJLE1BRHFCLENBQ2QsQ0FBQ0MsSUFBRCxFQUFPQyxNQUFQLEtBQWtCO0FBQ3hCO0FBQ0EsVUFBTUMsR0FBRyxHQUFHUixJQUFJLEtBQUssUUFBVCxHQUNSTyxNQUFNLENBQUNFLE1BREMsR0FFUEYsTUFBTSxDQUFDRyxNQUFQLENBQWNDLFFBQWQsQ0FBdUIsR0FBdkIsSUFBOEJKLE1BQU0sQ0FBQ0csTUFBUCxDQUFjRSxLQUFkLENBQW9CLENBQXBCLEVBQXVCLENBQUMsQ0FBeEIsQ0FBOUIsR0FBMkRMLE1BQU0sQ0FBQ0csTUFGdkU7O0FBR0EsUUFBSUosSUFBSSxDQUFDRSxHQUFELENBQUosS0FBY0ssU0FBbEIsRUFBNkI7QUFDM0JDLE1BQUFBLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjVCxJQUFkLEVBQW9CO0FBQUUsU0FBQ0UsR0FBRCxHQUFPO0FBQVQsT0FBcEI7QUFDRDs7QUFDREYsSUFBQUEsSUFBSSxDQUFDRSxHQUFELENBQUosQ0FBVVEsSUFBVixDQUFlVCxNQUFmO0FBQ0EsV0FBT0QsSUFBUDtBQUNELEdBWHFCLEVBV25CLEVBWG1CLENBQXhCO0FBYUEsU0FBT1EsTUFBTSxDQUNWRyxPQURJLENBQ0liLGVBREosRUFFSkMsTUFGSSxDQUVHLENBQUNDLElBQUQsRUFBTyxDQUFDSSxNQUFELEVBQVNRLEVBQVQsQ0FBUCxLQUF3QkosTUFBTSxDQUFDQyxNQUFQLENBQWNULElBQWQsRUFBb0I7QUFDbEQsS0FBQ0ksTUFBRCxHQUFVO0FBQ1JTLE1BQUFBLEVBQUUsRUFBRSxDQUFDWCxHQUFELEVBQU1ZLEtBQU4sRUFBYUMsT0FBYixFQUFzQkMsT0FBdEIsS0FBa0M7QUFDcEMsY0FBTUMsSUFBSSxHQUFHO0FBQ1hmLFVBQUFBLEdBRFc7QUFDTlksVUFBQUEsS0FETTtBQUNDQyxVQUFBQSxPQUREO0FBQ1VDLFVBQUFBO0FBRFYsU0FBYjs7QUFHQSxnQkFBUXRCLElBQVI7QUFDRSxlQUFLLFFBQUw7QUFDRWtCLFlBQUFBLEVBQUUsQ0FBQ00sT0FBSCxDQUFZckIsQ0FBRCxJQUFPO0FBQ2hCLG9CQUFNc0IsTUFBTSxHQUFHdEIsQ0FBQyxDQUFDZ0IsRUFBRixDQUFLSSxJQUFMLENBQWY7QUFDQS9CLGNBQUFBLE1BQU0sQ0FBQ1csQ0FBQyxDQUFDdUIsTUFBRixDQUFTRCxNQUFULE1BQXFCLElBQXRCLENBQU47QUFDQS9CLGNBQUFBLEdBQUcsQ0FBQzBCLEtBQUQsRUFBUWpCLENBQUMsQ0FBQ3dCLFNBQVYsRUFBcUJGLE1BQXJCLENBQUg7QUFDRCxhQUpEO0FBS0EsbUJBQU9MLEtBQVA7O0FBQ0YsZUFBSyxRQUFMO0FBQ0UsbUJBQU9GLEVBQUUsQ0FBQ2hCLEtBQUgsQ0FBVUMsQ0FBRCxJQUFPQSxDQUFDLENBQUNnQixFQUFGLENBQUtJLElBQUwsQ0FBaEIsQ0FBUDs7QUFDRixlQUFLLE1BQUw7QUFDQTtBQUNFLG1CQUFPTCxFQUFFLENBQUNVLEdBQUgsQ0FBUXpCLENBQUQsSUFBT0EsQ0FBQyxDQUFDZ0IsRUFBRixDQUFLSSxJQUFMLENBQWQsQ0FBUDtBQVpKO0FBY0QsT0FuQk87QUFvQlJ0QixNQUFBQSxPQUFPLEVBQUVpQjtBQXBCRDtBQUR3QyxHQUFwQixDQUYzQixFQXlCRCxFQXpCQyxDQUFQO0FBMEJELENBMUNEOztBQTRDQSxNQUFNVyxXQUFXLEdBQUcsQ0FBQzVCLE9BQUQsRUFBVTZCLE1BQVYsS0FBcUI7QUFDdkMsUUFBTUMsYUFBYSxHQUFHakMsV0FBVyxDQUFDTyxNQUFaLENBQW1CLENBQUNGLENBQUQsRUFBSTZCLENBQUosS0FBVWxCLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjWixDQUFkLEVBQWlCO0FBQUUsS0FBQzZCLENBQUQsR0FBSztBQUFQLEdBQWpCLENBQTdCLEVBQTRELEVBQTVELENBQXRCO0FBRUEsUUFBTUMsZUFBZSxHQUFHLENBQUMsR0FBR2hDLE9BQUosQ0FBeEI7QUFDQSxRQUFNaUMsY0FBYyxHQUFHLENBQUMsR0FBR0osTUFBSixDQUF2QjtBQUNBLFFBQU1LLGFBQWEsR0FBRyxJQUFJQyxHQUFKLEVBQXRCOztBQUVBLE9BQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR0gsY0FBYyxDQUFDSSxNQUFuQyxFQUEyQ0QsQ0FBQyxJQUFJLENBQWhELEVBQW1EO0FBQ2pELFVBQU1FLEtBQUssR0FBR0wsY0FBYyxDQUFDRyxDQUFELENBQTVCOztBQUNBLFNBQUssSUFBSUcsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR1AsZUFBZSxDQUFDSyxNQUFwQyxFQUE0Q0UsQ0FBQyxJQUFJLENBQWpELEVBQW9EO0FBQ2xELFlBQU1qQyxNQUFNLEdBQUcwQixlQUFlLENBQUNPLENBQUQsQ0FBOUI7O0FBQ0EsVUFDRWpDLE1BQU0sQ0FBQ2tDLE9BQVAsQ0FBZUMsUUFBZixDQUF3QkgsS0FBeEIsS0FDSWhDLE1BQU0sQ0FBQ1AsSUFBUCxLQUFnQixRQUFoQixLQUNELEdBQUV1QyxLQUFNLEdBQVQsS0FBZ0JoQyxNQUFNLENBQUNHLE1BQXZCLElBQ0c2QixLQUFLLENBQUNJLFVBQU4sQ0FBaUJwQyxNQUFNLENBQUNHLE1BQXhCLENBRkQsQ0FGTixFQU1FO0FBQ0F3QixRQUFBQSxjQUFjLENBQUNsQixJQUFmLENBQW9CLEdBQUdULE1BQU0sQ0FBQ3FDLFFBQTlCO0FBQ0FYLFFBQUFBLGVBQWUsQ0FBQ1ksTUFBaEIsQ0FBdUJMLENBQXZCLEVBQTBCLENBQTFCO0FBQ0FBLFFBQUFBLENBQUMsSUFBSSxDQUFMO0FBQ0FULFFBQUFBLGFBQWEsQ0FBQ3hCLE1BQU0sQ0FBQ1AsSUFBUixDQUFiLENBQTJCZ0IsSUFBM0IsQ0FBZ0NULE1BQWhDOztBQUNBLFlBQUlBLE1BQU0sQ0FBQ1AsSUFBUCxLQUFnQixRQUFwQixFQUE4QjtBQUM1Qk8sVUFBQUEsTUFBTSxDQUFDa0MsT0FBUCxDQUFlakIsT0FBZixDQUF3QmQsTUFBRCxJQUFZO0FBQ2pDLGdCQUFJLENBQUNILE1BQU0sQ0FBQ3FDLFFBQVAsQ0FBZ0JGLFFBQWhCLENBQXlCaEMsTUFBekIsQ0FBTCxFQUF1QztBQUNyQ3lCLGNBQUFBLGFBQWEsQ0FBQ1csR0FBZCxDQUFrQnBDLE1BQWxCO0FBQ0Q7QUFDRixXQUpEO0FBS0Q7QUFDRjtBQUNGO0FBQ0Y7O0FBRUQsU0FBT0ksTUFBTSxDQUFDRyxPQUFQLENBQWVjLGFBQWYsRUFBOEIxQixNQUE5QixDQUFxQyxDQUFDRixDQUFELEVBQUksQ0FBQ0gsSUFBRCxFQUFPa0IsRUFBUCxDQUFKLEtBQW1CSixNQUFNLENBQUNDLE1BQVAsQ0FBY1osQ0FBZCxFQUFpQjtBQUM5RSxLQUFFLEdBQUVILElBQUksQ0FBQytDLFdBQUwsRUFBbUIsS0FBdkIsR0FBOEJoRCx1QkFBdUIsQ0FBQ0MsSUFBRCxFQUFPa0IsRUFBUDtBQUR5QixHQUFqQixDQUF4RCxFQUVIO0FBQ0Y4QixJQUFBQSxlQUFlLEVBQUUsQ0FBQyxHQUFHLElBQUlaLEdBQUosQ0FBUUYsY0FBUixDQUFKLEVBQTZCZSxNQUE3QixDQUFxQ0MsQ0FBRCxJQUFPLENBQUNmLGFBQWEsQ0FBQ2dCLEdBQWQsQ0FBa0JELENBQWxCLENBQTVDO0FBRGYsR0FGRyxDQUFQO0FBS0QsQ0F0Q0Q7O0FBd0NBRSxNQUFNLENBQUNDLE9BQVAsR0FBaUIsQ0FBQ0MsU0FBRCxFQUFZQyxlQUFaLEtBQWdDO0FBQy9DL0QsRUFBQUEsTUFBTSxDQUFDOEQsU0FBUyxZQUFZeEMsTUFBckIsSUFBK0IsQ0FBQzBDLEtBQUssQ0FBQ0MsT0FBTixDQUFjSCxTQUFkLENBQWpDLENBQU47QUFDQTlELEVBQUFBLE1BQU0sQ0FBQ2dFLEtBQUssQ0FBQ0MsT0FBTixDQUFjRixlQUFkLEtBQWtDQSxlQUFlLENBQUNyRCxLQUFoQixDQUF1QmdELENBQUQsSUFBTyxPQUFPQSxDQUFQLEtBQWEsUUFBMUMsQ0FBbkMsQ0FBTjtBQUVBLFFBQU1qRCxPQUFPLEdBQUdhLE1BQU0sQ0FBQ0csT0FBUCxDQUFlcUMsU0FBZixFQUEwQmpELE1BQTFCLENBQWlDLENBQUNDLElBQUQsRUFBTyxDQUFDRyxNQUFELEVBQVNTLEVBQVQsQ0FBUCxLQUF3QjtBQUN2RUEsSUFBQUEsRUFBRSxDQUFDTSxPQUFILENBQVlyQixDQUFELElBQU9HLElBQUksQ0FBQ1UsSUFBTCxDQUFVYixDQUFDLENBQUNNLE1BQUQsQ0FBWCxDQUFsQjtBQUNBLFdBQU9ILElBQVA7QUFDRCxHQUhlLEVBR2IsRUFIYSxDQUFoQjtBQUlBLFFBQU1vRCxhQUFhLEdBQUcsQ0FBQyxHQUFHekQsT0FBTyxDQUFDSSxNQUFSLENBQWUsQ0FBQ0YsQ0FBRCxFQUFJNkIsQ0FBSixLQUFVO0FBQ2pELFFBQUlBLENBQUMsQ0FBQ2hDLElBQUYsS0FBVyxRQUFmLEVBQXlCO0FBQ3ZCZ0MsTUFBQUEsQ0FBQyxDQUFDUyxPQUFGLENBQVVqQixPQUFWLENBQW1CbUMsQ0FBRCxJQUFPeEQsQ0FBQyxDQUFDMkMsR0FBRixDQUFNYSxDQUFOLENBQXpCO0FBQ0Q7O0FBQ0QsV0FBT3hELENBQVA7QUFDRCxHQUx5QixFQUt2QixJQUFJaUMsR0FBSixDQUFRbUIsZUFBUixDQUx1QixDQUFKLENBQXRCO0FBT0EsU0FBTztBQUNMRyxJQUFBQSxhQURLO0FBRUxFLElBQUFBLElBQUksRUFBRzlCLE1BQUQsSUFBWTtBQUNoQnRDLE1BQUFBLE1BQU0sQ0FBQ2dFLEtBQUssQ0FBQ0MsT0FBTixDQUFjM0IsTUFBZCxDQUFELENBQU47O0FBRUEsVUFBSSxDQUFDQSxNQUFNLENBQUM1QixLQUFQLENBQWMyRCxDQUFELElBQU9ILGFBQWEsQ0FBQ2hCLFFBQWQsQ0FBdUJtQixDQUF2QixDQUFwQixDQUFMLEVBQXFEO0FBQ25ELGNBQU0sSUFBSUMsS0FBSixDQUFXLHdCQUF1QmhDLE1BQU0sQ0FBQ21CLE1BQVAsQ0FBZVksQ0FBRCxJQUFPLENBQUNILGFBQWEsQ0FBQ2hCLFFBQWQsQ0FBdUJtQixDQUF2QixDQUF0QixFQUFpREUsSUFBakQsQ0FBc0QsSUFBdEQsQ0FBNEQsRUFBOUYsQ0FBTjtBQUNEOztBQUVELFlBQU07QUFDSkMsUUFBQUEsU0FESTtBQUVKQyxRQUFBQSxTQUZJO0FBR0pDLFFBQUFBLE9BSEk7QUFJSmxCLFFBQUFBO0FBSkksVUFLRm5CLFdBQVcsQ0FBQzVCLE9BQUQsRUFBVTZCLE1BQVYsQ0FMZjtBQU9BdEMsTUFBQUEsTUFBTSxDQUNKd0QsZUFBZSxDQUFDOUMsS0FBaEIsQ0FBdUIyRCxDQUFELElBQU9OLGVBQWUsQ0FBQ2IsUUFBaEIsQ0FBeUJtQixDQUF6QixDQUE3QixDQURJLEVBRUgsd0JBQXVCYixlQUFlLENBQUNDLE1BQWhCLENBQXdCWSxDQUFELElBQU8sQ0FBQ04sZUFBZSxDQUFDYixRQUFoQixDQUF5Qm1CLENBQXpCLENBQS9CLENBQTRELEVBRmhGLENBQU47O0FBS0EsWUFBTU0sY0FBYyxHQUFHLENBQUNDLEtBQUQsRUFBUTlDLE9BQVIsS0FBb0IzQixVQUFVLENBQUNtQixNQUFNLENBQUN1RCxJQUFQLENBQVlMLFNBQVosQ0FBRCxFQUF5QjtBQUM1RU0sUUFBQUEsZ0JBQWdCLEVBQUUsS0FEMEQ7QUFFNUVDLFFBQUFBLE1BQU0sRUFBRSxLQUZvRTtBQUc1RUMsUUFBQUEsUUFBUSxFQUFFLENBQUNoRSxHQUFELEVBQU1ZLEtBQU4sRUFBYTtBQUFFcUQsVUFBQUEsU0FBRjtBQUFhcEQsVUFBQUE7QUFBYixTQUFiLEtBQXdDO0FBQ2hEb0QsVUFBQUEsU0FBUyxDQUFDakQsT0FBVixDQUFtQmtELENBQUQsSUFBTztBQUN2QjVELFlBQUFBLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjSyxLQUFkLEVBQXFCNEMsU0FBUyxDQUFDVSxDQUFELENBQVQsQ0FBYXZELEVBQWIsQ0FBZ0JYLEdBQWhCLEVBQXFCWSxLQUFyQixFQUE0QkMsT0FBNUIsRUFBcUNDLE9BQXJDLENBQXJCO0FBQ0QsV0FGRDtBQUdBLGlCQUFPLElBQVA7QUFDRDtBQVIyRSxPQUF6QixDQUFWLENBU3hDOEMsS0FUd0MsQ0FBM0M7O0FBVUEsWUFBTU8sY0FBYyxHQUFHLENBQUNQLEtBQUQsRUFBUTlDLE9BQVIsS0FBb0IzQixVQUFVLENBQUNtQixNQUFNLENBQUN1RCxJQUFQLENBQVlKLFNBQVosQ0FBRCxFQUF5QjtBQUM1RUssUUFBQUEsZ0JBQWdCLEVBQUUsS0FEMEQ7QUFFNUVDLFFBQUFBLE1BQU0sRUFBRSxLQUZvRTtBQUc1RUMsUUFBQUEsUUFBUSxFQUFFLENBQUNoRSxHQUFELEVBQU1ZLEtBQU4sRUFBYTtBQUFFcUQsVUFBQUEsU0FBRjtBQUFhcEQsVUFBQUE7QUFBYixTQUFiLEtBQXdDO0FBQ2hELGdCQUFNSSxNQUFNLEdBQUdnRCxTQUFTLENBQUNHLElBQVYsQ0FBZ0JGLENBQUQsSUFBT1QsU0FBUyxDQUFDUyxDQUFELENBQVQsQ0FBYXZELEVBQWIsQ0FBZ0JYLEdBQWhCLEVBQXFCWSxLQUFyQixFQUE0QkMsT0FBNUIsRUFBcUNDLE9BQXJDLE1BQWtELElBQXhFLENBQWY7O0FBQ0EsY0FBSUcsTUFBTSxLQUFLLEtBQWYsRUFBc0I7QUFDcEIsa0JBQU1vRCxNQUFNLEdBQUdyRSxHQUFHLENBQUM4QixNQUFKLEtBQWUsQ0FBZixHQUFtQjhCLEtBQW5CLEdBQTJCL0MsT0FBTyxDQUFDLENBQUQsQ0FBakQ7O0FBQ0EsZ0JBQUltQyxLQUFLLENBQUNDLE9BQU4sQ0FBY29CLE1BQWQsQ0FBSixFQUEyQjtBQUN6QkEsY0FBQUEsTUFBTSxDQUFDaEMsTUFBUCxDQUFjckMsR0FBRyxDQUFDQSxHQUFHLENBQUM4QixNQUFKLEdBQWEsQ0FBZCxDQUFqQixFQUFtQyxDQUFuQztBQUNELGFBRkQsTUFFTztBQUNMLHFCQUFPdUMsTUFBTSxDQUFDckUsR0FBRyxDQUFDQSxHQUFHLENBQUM4QixNQUFKLEdBQWEsQ0FBZCxDQUFKLENBQWI7QUFDRDtBQUNGOztBQUNELGlCQUFPYixNQUFQO0FBQ0Q7QUFkMkUsT0FBekIsQ0FBVixDQWV4QzJDLEtBZndDLENBQTNDOztBQWdCQSxZQUFNVSxZQUFZLEdBQUcsQ0FBQ1YsS0FBRCxFQUFROUMsT0FBUixLQUFvQjtBQUN2QyxjQUFNeUQsT0FBTyxHQUFHLEVBQWhCO0FBQ0EsZUFBT3BGLFVBQVUsQ0FBQ21CLE1BQU0sQ0FBQ3VELElBQVAsQ0FBWUgsT0FBWixDQUFELEVBQXVCO0FBQ3RDSSxVQUFBQSxnQkFBZ0IsRUFBRSxLQURvQjtBQUV0Q0MsVUFBQUEsTUFBTSxFQUFFLEtBRjhCO0FBR3RDQyxVQUFBQSxRQUFRLEVBQUUsQ0FBQ2hFLEdBQUQsRUFBTVksS0FBTixFQUFhO0FBQUVxRCxZQUFBQSxTQUFGO0FBQWFwRCxZQUFBQTtBQUFiLFdBQWIsS0FBd0M7QUFDaEQ3QixZQUFBQSxNQUFNLENBQUNnRSxLQUFLLENBQUNDLE9BQU4sQ0FBY3BDLE9BQU8sQ0FBQyxDQUFELENBQXJCLENBQUQsRUFBNEIsK0JBQTVCLENBQU47O0FBQ0EsZ0JBQUkwRCxPQUFPLENBQUN2RSxHQUFHLENBQUM4QixNQUFKLEdBQWEsQ0FBZCxDQUFQLEtBQTRCekIsU0FBaEMsRUFBMkM7QUFDekNrRSxjQUFBQSxPQUFPLENBQUN2RSxHQUFHLENBQUM4QixNQUFKLEdBQWEsQ0FBZCxDQUFQLEdBQTBCLElBQUkwQyxHQUFKLEVBQTFCO0FBQ0Q7O0FBQ0Qsa0JBQU1DLE1BQU0sR0FBR0YsT0FBTyxDQUFDdkUsR0FBRyxDQUFDOEIsTUFBSixHQUFhLENBQWQsQ0FBdEI7QUFDQTJDLFlBQUFBLE1BQU0sQ0FBQ3ZGLEdBQVAsQ0FBVzBCLEtBQVgsRUFBa0I4QyxPQUFPLENBQUNPLFNBQVMsQ0FBQyxDQUFELENBQVYsQ0FBUCxDQUFzQnRELEVBQXRCLENBQXlCWCxHQUF6QixFQUE4QlksS0FBOUIsRUFBcUNDLE9BQXJDLEVBQThDQyxPQUE5QyxDQUFsQjs7QUFDQSxnQkFBSWQsR0FBRyxDQUFDQSxHQUFHLENBQUM4QixNQUFKLEdBQWEsQ0FBZCxDQUFILEtBQXdCLENBQTVCLEVBQStCO0FBQzdCakIsY0FBQUEsT0FBTyxDQUFDLENBQUQsQ0FBUCxDQUFXNkQsSUFBWCxDQUFnQixDQUFDQyxDQUFELEVBQUlDLENBQUosS0FBVXZGLE1BQU0sQ0FBQ29GLE1BQU0sQ0FBQ0ksR0FBUCxDQUFXRixDQUFYLENBQUQsRUFBZ0JGLE1BQU0sQ0FBQ0ksR0FBUCxDQUFXRCxDQUFYLENBQWhCLENBQWhDO0FBQ0Esb0JBQU1FLE1BQU0sR0FBR3BCLE9BQU8sQ0FBQ08sU0FBUyxDQUFDLENBQUQsQ0FBVixDQUFQLENBQXNCeEUsT0FBdEIsQ0FDWmdELE1BRFksQ0FDSjlDLENBQUQsSUFBT0EsQ0FBQyxDQUFDb0YsS0FBRixLQUFZMUUsU0FEZCxFQUVaZSxHQUZZLENBRVB6QixDQUFELElBQU9BLENBQUMsQ0FBQ29GLEtBQUYsQ0FBUTtBQUFFakUsZ0JBQUFBO0FBQUYsZUFBUixDQUZDLEVBR1oyQixNQUhZLENBR0p1QyxDQUFELElBQU9BLENBQUMsS0FBSzNFLFNBSFIsQ0FBZjs7QUFJQSxrQkFBSXlFLE1BQU0sQ0FBQ2hELE1BQVAsS0FBa0IsQ0FBdEIsRUFBeUI7QUFDdkI5QyxnQkFBQUEsTUFBTSxDQUFDOEYsTUFBTSxDQUFDcEYsS0FBUCxDQUFjc0YsQ0FBRCxJQUFPQyxNQUFNLENBQUNDLFNBQVAsQ0FBaUJGLENBQWpCLEtBQXVCQSxDQUFDLElBQUksQ0FBaEQsQ0FBRCxDQUFOO0FBQ0FuRSxnQkFBQUEsT0FBTyxDQUFDLENBQUQsQ0FBUCxDQUFXd0IsTUFBWCxDQUFrQjhDLElBQUksQ0FBQ0MsR0FBTCxDQUFTLEdBQUdOLE1BQVosQ0FBbEI7QUFDRDs7QUFDRFAsY0FBQUEsT0FBTyxDQUFDbEMsTUFBUixDQUFlckMsR0FBRyxDQUFDOEIsTUFBSixHQUFhLENBQTVCO0FBQ0Q7O0FBQ0QsbUJBQU8sSUFBUDtBQUNEO0FBdkJxQyxTQUF2QixDQUFWLENBd0JKOEIsS0F4QkksQ0FBUDtBQXlCRCxPQTNCRDs7QUE2QkEsYUFBTztBQUNMcEIsUUFBQUEsZUFESztBQUVMNkMsUUFBQUEsT0FBTyxFQUFFLENBQUN6QixLQUFELEVBQVE5QyxPQUFPLEdBQUcsRUFBbEIsS0FBeUI7QUFDaEM5QixVQUFBQSxNQUFNLENBQUM4QixPQUFPLFlBQVlSLE1BQW5CLElBQTZCLENBQUMwQyxLQUFLLENBQUNDLE9BQU4sQ0FBY25DLE9BQWQsQ0FBL0IsQ0FBTjtBQUNBNkMsVUFBQUEsY0FBYyxDQUFDQyxLQUFELEVBQVE5QyxPQUFSLENBQWQ7QUFDQXFELFVBQUFBLGNBQWMsQ0FBQ1AsS0FBRCxFQUFROUMsT0FBUixDQUFkO0FBQ0F3RCxVQUFBQSxZQUFZLENBQUNWLEtBQUQsRUFBUTlDLE9BQVIsQ0FBWjtBQUNBMUIsVUFBQUEsWUFBWSxDQUFDa0csTUFBYixDQUFvQjFCLEtBQXBCLEVBQTJCdEMsTUFBM0I7QUFDRDtBQVJJLE9BQVA7QUFVRDtBQXRGSSxHQUFQO0FBd0ZELENBdkdEIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7XG5jb25zdCBzZXQgPSByZXF1aXJlKCdsb2Rhc2guc2V0Jyk7XG5jb25zdCBvYmplY3RTY2FuID0gcmVxdWlyZSgnb2JqZWN0LXNjYW4nKTtcbmNvbnN0IG9iamVjdEZpZWxkcyA9IHJlcXVpcmUoJ29iamVjdC1maWVsZHMnKTtcbmNvbnN0IHNvcnRGbiA9IHJlcXVpcmUoJy4vc29ydC1mbicpO1xuY29uc3QgeyBwbHVnaW5UeXBlcyB9ID0gcmVxdWlyZSgnLi9wbHVnaW4nKTtcblxuY29uc3QgY29tcGlsZVRhcmdldFRvQ2FsbGJhY2sgPSAodHlwZSwgcGx1Z2lucykgPT4ge1xuICBhc3NlcnQocGx1Z2lucy5ldmVyeSgocCkgPT4gcC50eXBlID09PSB0eXBlKSk7XG5cbiAgY29uc3QgdGFyZ2V0VG9QbHVnaW5zID0gcGx1Z2luc1xuICAgIC5yZWR1Y2UoKHByZXYsIHBsdWdpbikgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5lc3RlZC10ZXJuYXJ5XG4gICAgICBjb25zdCBrZXkgPSB0eXBlID09PSAnSU5KRUNUJ1xuICAgICAgICA/IHBsdWdpbi5wcmVmaXhcbiAgICAgICAgOiAocGx1Z2luLnRhcmdldC5lbmRzV2l0aCgnLicpID8gcGx1Z2luLnRhcmdldC5zbGljZSgwLCAtMSkgOiBwbHVnaW4udGFyZ2V0KTtcbiAgICAgIGlmIChwcmV2W2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHByZXYsIHsgW2tleV06IFtdIH0pO1xuICAgICAgfVxuICAgICAgcHJldltrZXldLnB1c2gocGx1Z2luKTtcbiAgICAgIHJldHVybiBwcmV2O1xuICAgIH0sIHt9KTtcblxuICByZXR1cm4gT2JqZWN0XG4gICAgLmVudHJpZXModGFyZ2V0VG9QbHVnaW5zKVxuICAgIC5yZWR1Y2UoKHByZXYsIFt0YXJnZXQsIHBzXSkgPT4gT2JqZWN0LmFzc2lnbihwcmV2LCB7XG4gICAgICBbdGFyZ2V0XToge1xuICAgICAgICBmbjogKGtleSwgdmFsdWUsIHBhcmVudHMsIGNvbnRleHQpID0+IHtcbiAgICAgICAgICBjb25zdCBhcmdzID0ge1xuICAgICAgICAgICAga2V5LCB2YWx1ZSwgcGFyZW50cywgY29udGV4dFxuICAgICAgICAgIH07XG4gICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdJTkpFQ1QnOlxuICAgICAgICAgICAgICBwcy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcC5mbihhcmdzKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQocC5zY2hlbWEocmVzdWx0KSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgc2V0KHZhbHVlLCBwLnRhcmdldFJlbCwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgJ0ZJTFRFUic6XG4gICAgICAgICAgICAgIHJldHVybiBwcy5ldmVyeSgocCkgPT4gcC5mbihhcmdzKSk7XG4gICAgICAgICAgICBjYXNlICdTT1JUJzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBwcy5tYXAoKHApID0+IHAuZm4oYXJncykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcGx1Z2luczogcHNcbiAgICAgIH1cbiAgICB9KSwge30pO1xufTtcblxuY29uc3QgY29tcGlsZU1ldGEgPSAocGx1Z2lucywgZmllbGRzKSA9PiB7XG4gIGNvbnN0IHBsdWdpbnNCeVR5cGUgPSBwbHVnaW5UeXBlcy5yZWR1Y2UoKHAsIGMpID0+IE9iamVjdC5hc3NpZ24ocCwgeyBbY106IFtdIH0pLCB7fSk7XG5cbiAgY29uc3QgaW5hY3RpdmVQbHVnaW5zID0gWy4uLnBsdWdpbnNdO1xuICBjb25zdCByZXF1aXJlZEZpZWxkcyA9IFsuLi5maWVsZHNdO1xuICBjb25zdCBpZ25vcmVkRmllbGRzID0gbmV3IFNldCgpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVxdWlyZWRGaWVsZHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBmaWVsZCA9IHJlcXVpcmVkRmllbGRzW2ldO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgaW5hY3RpdmVQbHVnaW5zLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICBjb25zdCBwbHVnaW4gPSBpbmFjdGl2ZVBsdWdpbnNbal07XG4gICAgICBpZiAoXG4gICAgICAgIHBsdWdpbi50YXJnZXRzLmluY2x1ZGVzKGZpZWxkKVxuICAgICAgICB8fCAocGx1Z2luLnR5cGUgIT09ICdJTkpFQ1QnICYmIChcbiAgICAgICAgICBgJHtmaWVsZH0uYCA9PT0gcGx1Z2luLnRhcmdldFxuICAgICAgICAgIHx8IGZpZWxkLnN0YXJ0c1dpdGgocGx1Z2luLnRhcmdldClcbiAgICAgICAgKSlcbiAgICAgICkge1xuICAgICAgICByZXF1aXJlZEZpZWxkcy5wdXNoKC4uLnBsdWdpbi5yZXF1aXJlcyk7XG4gICAgICAgIGluYWN0aXZlUGx1Z2lucy5zcGxpY2UoaiwgMSk7XG4gICAgICAgIGogLT0gMTtcbiAgICAgICAgcGx1Z2luc0J5VHlwZVtwbHVnaW4udHlwZV0ucHVzaChwbHVnaW4pO1xuICAgICAgICBpZiAocGx1Z2luLnR5cGUgPT09ICdJTkpFQ1QnKSB7XG4gICAgICAgICAgcGx1Z2luLnRhcmdldHMuZm9yRWFjaCgodGFyZ2V0KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXBsdWdpbi5yZXF1aXJlcy5pbmNsdWRlcyh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgIGlnbm9yZWRGaWVsZHMuYWRkKHRhcmdldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocGx1Z2luc0J5VHlwZSkucmVkdWNlKChwLCBbdHlwZSwgcHNdKSA9PiBPYmplY3QuYXNzaWduKHAsIHtcbiAgICBbYCR7dHlwZS50b0xvd2VyQ2FzZSgpfUNic2BdOiBjb21waWxlVGFyZ2V0VG9DYWxsYmFjayh0eXBlLCBwcylcbiAgfSksIHtcbiAgICBmaWVsZHNUb1JlcXVlc3Q6IFsuLi5uZXcgU2V0KHJlcXVpcmVkRmllbGRzKV0uZmlsdGVyKChlKSA9PiAhaWdub3JlZEZpZWxkcy5oYXMoZSkpXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSAocGx1Z2luTWFwLCBkYXRhU3RvcmVGaWVsZHMpID0+IHtcbiAgYXNzZXJ0KHBsdWdpbk1hcCBpbnN0YW5jZW9mIE9iamVjdCAmJiAhQXJyYXkuaXNBcnJheShwbHVnaW5NYXApKTtcbiAgYXNzZXJ0KEFycmF5LmlzQXJyYXkoZGF0YVN0b3JlRmllbGRzKSAmJiBkYXRhU3RvcmVGaWVsZHMuZXZlcnkoKGUpID0+IHR5cGVvZiBlID09PSAnc3RyaW5nJykpO1xuXG4gIGNvbnN0IHBsdWdpbnMgPSBPYmplY3QuZW50cmllcyhwbHVnaW5NYXApLnJlZHVjZSgocHJldiwgW3ByZWZpeCwgcHNdKSA9PiB7XG4gICAgcHMuZm9yRWFjaCgocCkgPT4gcHJldi5wdXNoKHAocHJlZml4KSkpO1xuICAgIHJldHVybiBwcmV2O1xuICB9LCBbXSk7XG4gIGNvbnN0IGFsbG93ZWRGaWVsZHMgPSBbLi4ucGx1Z2lucy5yZWR1Y2UoKHAsIGMpID0+IHtcbiAgICBpZiAoYy50eXBlID09PSAnSU5KRUNUJykge1xuICAgICAgYy50YXJnZXRzLmZvckVhY2goKHQpID0+IHAuYWRkKHQpKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0sIG5ldyBTZXQoZGF0YVN0b3JlRmllbGRzKSldO1xuXG4gIHJldHVybiB7XG4gICAgYWxsb3dlZEZpZWxkcyxcbiAgICBpbml0OiAoZmllbGRzKSA9PiB7XG4gICAgICBhc3NlcnQoQXJyYXkuaXNBcnJheShmaWVsZHMpKTtcblxuICAgICAgaWYgKCFmaWVsZHMuZXZlcnkoKGYpID0+IGFsbG93ZWRGaWVsZHMuaW5jbHVkZXMoZikpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIGZpZWxkIHJlcXVlc3RlZDogJHtmaWVsZHMuZmlsdGVyKChmKSA9PiAhYWxsb3dlZEZpZWxkcy5pbmNsdWRlcyhmKSkuam9pbignLCAnKX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qge1xuICAgICAgICBpbmplY3RDYnMsXG4gICAgICAgIGZpbHRlckNicyxcbiAgICAgICAgc29ydENicyxcbiAgICAgICAgZmllbGRzVG9SZXF1ZXN0XG4gICAgICB9ID0gY29tcGlsZU1ldGEocGx1Z2lucywgZmllbGRzKTtcblxuICAgICAgYXNzZXJ0KFxuICAgICAgICBmaWVsZHNUb1JlcXVlc3QuZXZlcnkoKGYpID0+IGRhdGFTdG9yZUZpZWxkcy5pbmNsdWRlcyhmKSksXG4gICAgICAgIGBCYWQgRmllbGQgUmVxdWVzdGVkOiAke2ZpZWxkc1RvUmVxdWVzdC5maWx0ZXIoKGYpID0+ICFkYXRhU3RvcmVGaWVsZHMuaW5jbHVkZXMoZikpfWBcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGluamVjdFJld3JpdGVyID0gKGlucHV0LCBjb250ZXh0KSA9PiBvYmplY3RTY2FuKE9iamVjdC5rZXlzKGluamVjdENicyksIHtcbiAgICAgICAgdXNlQXJyYXlTZWxlY3RvcjogZmFsc2UsXG4gICAgICAgIGpvaW5lZDogZmFsc2UsXG4gICAgICAgIGZpbHRlckZuOiAoa2V5LCB2YWx1ZSwgeyBtYXRjaGVkQnksIHBhcmVudHMgfSkgPT4ge1xuICAgICAgICAgIG1hdGNoZWRCeS5mb3JFYWNoKChtKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHZhbHVlLCBpbmplY3RDYnNbbV0uZm4oa2V5LCB2YWx1ZSwgcGFyZW50cywgY29udGV4dCkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KShpbnB1dCk7XG4gICAgICBjb25zdCBmaWx0ZXJSZXdyaXRlciA9IChpbnB1dCwgY29udGV4dCkgPT4gb2JqZWN0U2NhbihPYmplY3Qua2V5cyhmaWx0ZXJDYnMpLCB7XG4gICAgICAgIHVzZUFycmF5U2VsZWN0b3I6IGZhbHNlLFxuICAgICAgICBqb2luZWQ6IGZhbHNlLFxuICAgICAgICBmaWx0ZXJGbjogKGtleSwgdmFsdWUsIHsgbWF0Y2hlZEJ5LCBwYXJlbnRzIH0pID0+IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBtYXRjaGVkQnkuc29tZSgobSkgPT4gZmlsdGVyQ2JzW21dLmZuKGtleSwgdmFsdWUsIHBhcmVudHMsIGNvbnRleHQpID09PSB0cnVlKTtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0ga2V5Lmxlbmd0aCA9PT0gMSA/IGlucHV0IDogcGFyZW50c1swXTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmVudCkpIHtcbiAgICAgICAgICAgICAgcGFyZW50LnNwbGljZShrZXlba2V5Lmxlbmd0aCAtIDFdLCAxKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSBwYXJlbnRba2V5W2tleS5sZW5ndGggLSAxXV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH0pKGlucHV0KTtcbiAgICAgIGNvbnN0IHNvcnRSZXdyaXRlciA9IChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBsb29rdXBzID0gW107XG4gICAgICAgIHJldHVybiBvYmplY3RTY2FuKE9iamVjdC5rZXlzKHNvcnRDYnMpLCB7XG4gICAgICAgICAgdXNlQXJyYXlTZWxlY3RvcjogZmFsc2UsXG4gICAgICAgICAgam9pbmVkOiBmYWxzZSxcbiAgICAgICAgICBmaWx0ZXJGbjogKGtleSwgdmFsdWUsIHsgbWF0Y2hlZEJ5LCBwYXJlbnRzIH0pID0+IHtcbiAgICAgICAgICAgIGFzc2VydChBcnJheS5pc0FycmF5KHBhcmVudHNbMF0pLCAnU29ydCBtdXN0IGJlIG9uIFwiQXJyYXlcIiB0eXBlLicpO1xuICAgICAgICAgICAgaWYgKGxvb2t1cHNba2V5Lmxlbmd0aCAtIDFdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgbG9va3Vwc1trZXkubGVuZ3RoIC0gMV0gPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBsb29rdXAgPSBsb29rdXBzW2tleS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGxvb2t1cC5zZXQodmFsdWUsIHNvcnRDYnNbbWF0Y2hlZEJ5WzBdXS5mbihrZXksIHZhbHVlLCBwYXJlbnRzLCBjb250ZXh0KSk7XG4gICAgICAgICAgICBpZiAoa2V5W2tleS5sZW5ndGggLSAxXSA9PT0gMCkge1xuICAgICAgICAgICAgICBwYXJlbnRzWzBdLnNvcnQoKGEsIGIpID0+IHNvcnRGbihsb29rdXAuZ2V0KGEpLCBsb29rdXAuZ2V0KGIpKSk7XG4gICAgICAgICAgICAgIGNvbnN0IGxpbWl0cyA9IHNvcnRDYnNbbWF0Y2hlZEJ5WzBdXS5wbHVnaW5zXG4gICAgICAgICAgICAgICAgLmZpbHRlcigocCkgPT4gcC5saW1pdCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIC5tYXAoKHApID0+IHAubGltaXQoeyBjb250ZXh0IH0pKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGwpID0+IGwgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgIGlmIChsaW1pdHMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGxpbWl0cy5ldmVyeSgobCkgPT4gTnVtYmVyLmlzSW50ZWdlcihsKSAmJiBsID49IDApKTtcbiAgICAgICAgICAgICAgICBwYXJlbnRzWzBdLnNwbGljZShNYXRoLm1pbiguLi5saW1pdHMpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsb29rdXBzLnNwbGljZShrZXkubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKGlucHV0KTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpZWxkc1RvUmVxdWVzdCxcbiAgICAgICAgcmV3cml0ZTogKGlucHV0LCBjb250ZXh0ID0ge30pID0+IHtcbiAgICAgICAgICBhc3NlcnQoY29udGV4dCBpbnN0YW5jZW9mIE9iamVjdCAmJiAhQXJyYXkuaXNBcnJheShjb250ZXh0KSk7XG4gICAgICAgICAgaW5qZWN0UmV3cml0ZXIoaW5wdXQsIGNvbnRleHQpO1xuICAgICAgICAgIGZpbHRlclJld3JpdGVyKGlucHV0LCBjb250ZXh0KTtcbiAgICAgICAgICBzb3J0UmV3cml0ZXIoaW5wdXQsIGNvbnRleHQpO1xuICAgICAgICAgIG9iamVjdEZpZWxkcy5yZXRhaW4oaW5wdXQsIGZpZWxkcyk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL3Jld3JpdGVyLmpzIl0sIm5hbWVzIjpbImFzc2VydCIsInJlcXVpcmUiLCJzZXQiLCJvYmplY3RTY2FuIiwib2JqZWN0RmllbGRzIiwic29ydEZuIiwicGx1Z2luVHlwZXMiLCJjb21waWxlVGFyZ2V0VG9DYWxsYmFjayIsInR5cGUiLCJwbHVnaW5zIiwiZXZlcnkiLCJwIiwidGFyZ2V0VG9QbHVnaW5zIiwicmVkdWNlIiwicHJldiIsInBsdWdpbiIsImtleSIsInByZWZpeCIsInRhcmdldCIsImVuZHNXaXRoIiwic2xpY2UiLCJ1bmRlZmluZWQiLCJPYmplY3QiLCJhc3NpZ24iLCJwdXNoIiwiZW50cmllcyIsInBzIiwiZm4iLCJ2YWx1ZSIsInBhcmVudHMiLCJjb250ZXh0IiwiYXJncyIsImZvckVhY2giLCJyZXN1bHQiLCJzY2hlbWEiLCJ0YXJnZXRSZWwiLCJtYXAiLCJjb21waWxlTWV0YSIsImZpZWxkcyIsInBsdWdpbnNCeVR5cGUiLCJjIiwiaW5hY3RpdmVQbHVnaW5zIiwicmVxdWlyZWRGaWVsZHMiLCJpZ25vcmVkRmllbGRzIiwiU2V0IiwiaSIsImxlbmd0aCIsImZpZWxkIiwiaiIsInRhcmdldHMiLCJpbmNsdWRlcyIsInN0YXJ0c1dpdGgiLCJyZXF1aXJlcyIsInNwbGljZSIsImFkZCIsInRvTG93ZXJDYXNlIiwiZmllbGRzVG9SZXF1ZXN0IiwiZmlsdGVyIiwiZSIsImhhcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJwbHVnaW5NYXAiLCJkYXRhU3RvcmVGaWVsZHMiLCJBcnJheSIsImlzQXJyYXkiLCJhbGxvd2VkRmllbGRzIiwidCIsImluaXQiLCJmIiwiRXJyb3IiLCJqb2luIiwiaW5qZWN0Q2JzIiwiZmlsdGVyQ2JzIiwic29ydENicyIsImluamVjdFJld3JpdGVyIiwia2V5cyIsInVzZUFycmF5U2VsZWN0b3IiLCJqb2luZWQiLCJmaWx0ZXJGbiIsIm1hdGNoZWRCeSIsIm0iLCJmaWx0ZXJSZXdyaXRlciIsInNvbWUiLCJwYXJlbnQiLCJpbnB1dCIsInNvcnRSZXdyaXRlciIsImxvb2t1cHMiLCJNYXAiLCJsb29rdXAiLCJzb3J0IiwiYSIsImIiLCJnZXQiLCJsaW1pdHMiLCJsaW1pdCIsImwiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJNYXRoIiwibWluIiwicmV3cml0ZSIsInJldGFpbiJdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTUEsTUFBTSxHQUFHQyxPQUFPLENBQUMsUUFBRCxDQUF0Qjs7QUFDQSxNQUFNQyxHQUFHLEdBQUdELE9BQU8sQ0FBQyxZQUFELENBQW5COztBQUNBLE1BQU1FLFVBQVUsR0FBR0YsT0FBTyxDQUFDLGFBQUQsQ0FBMUI7O0FBQ0EsTUFBTUcsWUFBWSxHQUFHSCxPQUFPLENBQUMsZUFBRCxDQUE1Qjs7QUFDQSxNQUFNSSxNQUFNLEdBQUdKLE9BQU8sQ0FBQyxXQUFELENBQXRCOztBQUNBLE1BQU07QUFBRUssRUFBQUE7QUFBRixJQUFrQkwsT0FBTyxDQUFDLFVBQUQsQ0FBL0I7O0FBRUEsTUFBTU0sdUJBQXVCLEdBQUcsQ0FBQ0MsSUFBRCxFQUFPQyxPQUFQLEtBQW1CO0FBQ2pEVCxFQUFBQSxNQUFNLENBQUNTLE9BQU8sQ0FBQ0MsS0FBUixDQUFlQyxDQUFELElBQU9BLENBQUMsQ0FBQ0gsSUFBRixLQUFXQSxJQUFoQyxDQUFELENBQU47QUFFQSxRQUFNSSxlQUFlLEdBQUdILE9BQU8sQ0FDNUJJLE1BRHFCLENBQ2QsQ0FBQ0MsSUFBRCxFQUFPQyxNQUFQLEtBQWtCO0FBQ3hCO0FBQ0EsVUFBTUMsR0FBRyxHQUFHUixJQUFJLEtBQUssUUFBVCxHQUNSTyxNQUFNLENBQUNFLE1BREMsR0FFUEYsTUFBTSxDQUFDRyxNQUFQLENBQWNDLFFBQWQsQ0FBdUIsR0FBdkIsSUFBOEJKLE1BQU0sQ0FBQ0csTUFBUCxDQUFjRSxLQUFkLENBQW9CLENBQXBCLEVBQXVCLENBQUMsQ0FBeEIsQ0FBOUIsR0FBMkRMLE1BQU0sQ0FBQ0csTUFGdkU7O0FBR0EsUUFBSUosSUFBSSxDQUFDRSxHQUFELENBQUos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LENBQWpCLEtBQXVCQSxDQUFDLElBQUksQ0FBaEQsQ0FBRCxDQUFOO0FBQ0FuRSxjQUFBQSxPQUFPLENBQUMsQ0FBRCxDQUFQLENBQVd3QixNQUFYLENBQWtCOEMsSUFBSSxDQUFDQyxHQUFMLENBQVMsR0FBR04sTUFBWixDQUFsQjtBQUNEOztBQUNEaEUsWUFBQUEsT0FBTyxDQUFDeUQsT0FBUixDQUFnQmxDLE1BQWhCLENBQXVCckMsR0FBRyxDQUFDOEIsTUFBSixHQUFhLENBQXBDO0FBQ0Q7O0FBQ0QsaUJBQU8sSUFBUDtBQUNEO0FBeEJtRCxPQUF2QixDQUEvQjtBQTJCQSxhQUFPO0FBQ0xVLFFBQUFBLGVBREs7QUFFTDZDLFFBQUFBLE9BQU8sRUFBRSxDQUFDaEIsS0FBRCxFQUFRdkQsT0FBTyxHQUFHLEVBQWxCLEtBQXlCO0FBQ2hDOUIsVUFBQUEsTUFBTSxDQUFDOEIsT0FBTyxZQUFZUixNQUFuQixJQUE2QixDQUFDMEMsS0FBSyxDQUFDQyxPQUFOLENBQWNuQyxPQUFkLENBQS9CLENBQU47QUFDQTZDLFVBQUFBLGNBQWMsQ0FBQ1UsS0FBRCxFQUFRO0FBQUV2RCxZQUFBQTtBQUFGLFdBQVIsQ0FBZDtBQUNBb0QsVUFBQUEsY0FBYyxDQUFDRyxLQUFELEVBQVE7QUFBRUEsWUFBQUEsS0FBRjtBQUFTdkQsWUFBQUE7QUFBVCxXQUFSLENBQWQ7QUFDQXdELFVBQUFBLFlBQVksQ0FBQ0QsS0FBRCxFQUFRO0FBQUVFLFlBQUFBLE9BQU8sRUFBRSxFQUFYO0FBQWV6RCxZQUFBQTtBQUFmLFdBQVIsQ0FBWjtBQUNBMUIsVUFBQUEsWUFBWSxDQUFDa0csTUFBYixDQUFvQmpCLEtBQXBCLEVBQTJCL0MsTUFBM0I7QUFDRDtBQVJJLE9BQVA7QUFVRDtBQXBGSSxHQUFQO0FBc0ZELENBckdEIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7XG5jb25zdCBzZXQgPSByZXF1aXJlKCdsb2Rhc2guc2V0Jyk7XG5jb25zdCBvYmplY3RTY2FuID0gcmVxdWlyZSgnb2JqZWN0LXNjYW4nKTtcbmNvbnN0IG9iamVjdEZpZWxkcyA9IHJlcXVpcmUoJ29iamVjdC1maWVsZHMnKTtcbmNvbnN0IHNvcnRGbiA9IHJlcXVpcmUoJy4vc29ydC1mbicpO1xuY29uc3QgeyBwbHVnaW5UeXBlcyB9ID0gcmVxdWlyZSgnLi9wbHVnaW4nKTtcblxuY29uc3QgY29tcGlsZVRhcmdldFRvQ2FsbGJhY2sgPSAodHlwZSwgcGx1Z2lucykgPT4ge1xuICBhc3NlcnQocGx1Z2lucy5ldmVyeSgocCkgPT4gcC50eXBlID09PSB0eXBlKSk7XG5cbiAgY29uc3QgdGFyZ2V0VG9QbHVnaW5zID0gcGx1Z2luc1xuICAgIC5yZWR1Y2UoKHByZXYsIHBsdWdpbikgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5lc3RlZC10ZXJuYXJ5XG4gICAgICBjb25zdCBrZXkgPSB0eXBlID09PSAnSU5KRUNUJ1xuICAgICAgICA/IHBsdWdpbi5wcmVmaXhcbiAgICAgICAgOiAocGx1Z2luLnRhcmdldC5lbmRzV2l0aCgnLicpID8gcGx1Z2luLnRhcmdldC5zbGljZSgwLCAtMSkgOiBwbHVnaW4udGFyZ2V0KTtcbiAgICAgIGlmIChwcmV2W2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHByZXYsIHsgW2tleV06IFtdIH0pO1xuICAgICAgfVxuICAgICAgcHJldltrZXldLnB1c2gocGx1Z2luKTtcbiAgICAgIHJldHVybiBwcmV2O1xuICAgIH0sIHt9KTtcblxuICByZXR1cm4gT2JqZWN0XG4gICAgLmVudHJpZXModGFyZ2V0VG9QbHVnaW5zKVxuICAgIC5yZWR1Y2UoKHByZXYsIFt0YXJnZXQsIHBzXSkgPT4gT2JqZWN0LmFzc2lnbihwcmV2LCB7XG4gICAgICBbdGFyZ2V0XToge1xuICAgICAgICBmbjogKGtleSwgdmFsdWUsIHBhcmVudHMsIGNvbnRleHQpID0+IHtcbiAgICAgICAgICBjb25zdCBhcmdzID0ge1xuICAgICAgICAgICAga2V5LCB2YWx1ZSwgcGFyZW50cywgY29udGV4dFxuICAgICAgICAgIH07XG4gICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdJTkpFQ1QnOlxuICAgICAgICAgICAgICBwcy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcC5mbihhcmdzKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQocC5zY2hlbWEocmVzdWx0KSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgc2V0KHZhbHVlLCBwLnRhcmdldFJlbCwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgJ0ZJTFRFUic6XG4gICAgICAgICAgICAgIHJldHVybiBwcy5ldmVyeSgocCkgPT4gcC5mbihhcmdzKSk7XG4gICAgICAgICAgICBjYXNlICdTT1JUJzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBwcy5tYXAoKHApID0+IHAuZm4oYXJncykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcGx1Z2luczogcHNcbiAgICAgIH1cbiAgICB9KSwge30pO1xufTtcblxuY29uc3QgY29tcGlsZU1ldGEgPSAocGx1Z2lucywgZmllbGRzKSA9PiB7XG4gIGNvbnN0IHBsdWdpbnNCeVR5cGUgPSBwbHVnaW5UeXBlcy5yZWR1Y2UoKHAsIGMpID0+IE9iamVjdC5hc3NpZ24ocCwgeyBbY106IFtdIH0pLCB7fSk7XG5cbiAgY29uc3QgaW5hY3RpdmVQbHVnaW5zID0gWy4uLnBsdWdpbnNdO1xuICBjb25zdCByZXF1aXJlZEZpZWxkcyA9IFsuLi5maWVsZHNdO1xuICBjb25zdCBpZ25vcmVkRmllbGRzID0gbmV3IFNldCgpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVxdWlyZWRGaWVsZHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBmaWVsZCA9IHJlcXVpcmVkRmllbGRzW2ldO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgaW5hY3RpdmVQbHVnaW5zLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICBjb25zdCBwbHVnaW4gPSBpbmFjdGl2ZVBsdWdpbnNbal07XG4gICAgICBpZiAoXG4gICAgICAgIHBsdWdpbi50YXJnZXRzLmluY2x1ZGVzKGZpZWxkKVxuICAgICAgICB8fCAocGx1Z2luLnR5cGUgIT09ICdJTkpFQ1QnICYmIChcbiAgICAgICAgICBgJHtmaWVsZH0uYCA9PT0gcGx1Z2luLnRhcmdldFxuICAgICAgICAgIHx8IGZpZWxkLnN0YXJ0c1dpdGgocGx1Z2luLnRhcmdldClcbiAgICAgICAgKSlcbiAgICAgICkge1xuICAgICAgICByZXF1aXJlZEZpZWxkcy5wdXNoKC4uLnBsdWdpbi5yZXF1aXJlcyk7XG4gICAgICAgIGluYWN0aXZlUGx1Z2lucy5zcGxpY2UoaiwgMSk7XG4gICAgICAgIGogLT0gMTtcbiAgICAgICAgcGx1Z2luc0J5VHlwZVtwbHVnaW4udHlwZV0ucHVzaChwbHVnaW4pO1xuICAgICAgICBpZiAocGx1Z2luLnR5cGUgPT09ICdJTkpFQ1QnKSB7XG4gICAgICAgICAgcGx1Z2luLnRhcmdldHMuZm9yRWFjaCgodGFyZ2V0KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXBsdWdpbi5yZXF1aXJlcy5pbmNsdWRlcyh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgIGlnbm9yZWRGaWVsZHMuYWRkKHRhcmdldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocGx1Z2luc0J5VHlwZSkucmVkdWNlKChwLCBbdHlwZSwgcHNdKSA9PiBPYmplY3QuYXNzaWduKHAsIHtcbiAgICBbYCR7dHlwZS50b0xvd2VyQ2FzZSgpfUNic2BdOiBjb21waWxlVGFyZ2V0VG9DYWxsYmFjayh0eXBlLCBwcylcbiAgfSksIHtcbiAgICBmaWVsZHNUb1JlcXVlc3Q6IFsuLi5uZXcgU2V0KHJlcXVpcmVkRmllbGRzKV0uZmlsdGVyKChlKSA9PiAhaWdub3JlZEZpZWxkcy5oYXMoZSkpXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSAocGx1Z2luTWFwLCBkYXRhU3RvcmVGaWVsZHMpID0+IHtcbiAgYXNzZXJ0KHBsdWdpbk1hcCBpbnN0YW5jZW9mIE9iamVjdCAmJiAhQXJyYXkuaXNBcnJheShwbHVnaW5NYXApKTtcbiAgYXNzZXJ0KEFycmF5LmlzQXJyYXkoZGF0YVN0b3JlRmllbGRzKSAmJiBkYXRhU3RvcmVGaWVsZHMuZXZlcnkoKGUpID0+IHR5cGVvZiBlID09PSAnc3RyaW5nJykpO1xuXG4gIGNvbnN0IHBsdWdpbnMgPSBPYmplY3QuZW50cmllcyhwbHVnaW5NYXApLnJlZHVjZSgocHJldiwgW3ByZWZpeCwgcHNdKSA9PiB7XG4gICAgcHMuZm9yRWFjaCgocCkgPT4gcHJldi5wdXNoKHAocHJlZml4KSkpO1xuICAgIHJldHVybiBwcmV2O1xuICB9LCBbXSk7XG4gIGNvbnN0IGFsbG93ZWRGaWVsZHMgPSBbLi4ucGx1Z2lucy5yZWR1Y2UoKHAsIGMpID0+IHtcbiAgICBpZiAoYy50eXBlID09PSAnSU5KRUNUJykge1xuICAgICAgYy50YXJnZXRzLmZvckVhY2goKHQpID0+IHAuYWRkKHQpKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0sIG5ldyBTZXQoZGF0YVN0b3JlRmllbGRzKSldO1xuXG4gIHJldHVybiB7XG4gICAgYWxsb3dlZEZpZWxkcyxcbiAgICBpbml0OiAoZmllbGRzKSA9PiB7XG4gICAgICBhc3NlcnQoQXJyYXkuaXNBcnJheShmaWVsZHMpKTtcblxuICAgICAgaWYgKCFmaWVsZHMuZXZlcnkoKGYpID0+IGFsbG93ZWRGaWVsZHMuaW5jbHVkZXMoZikpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIGZpZWxkIHJlcXVlc3RlZDogJHtmaWVsZHMuZmlsdGVyKChmKSA9PiAhYWxsb3dlZEZpZWxkcy5pbmNsdWRlcyhmKSkuam9pbignLCAnKX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qge1xuICAgICAgICBpbmplY3RDYnMsXG4gICAgICAgIGZpbHRlckNicyxcbiAgICAgICAgc29ydENicyxcbiAgICAgICAgZmllbGRzVG9SZXF1ZXN0XG4gICAgICB9ID0gY29tcGlsZU1ldGEocGx1Z2lucywgZmllbGRzKTtcblxuICAgICAgYXNzZXJ0KFxuICAgICAgICBmaWVsZHNUb1JlcXVlc3QuZXZlcnkoKGYpID0+IGRhdGFTdG9yZUZpZWxkcy5pbmNsdWRlcyhmKSksXG4gICAgICAgIGBCYWQgRmllbGQgUmVxdWVzdGVkOiAke2ZpZWxkc1RvUmVxdWVzdC5maWx0ZXIoKGYpID0+ICFkYXRhU3RvcmVGaWVsZHMuaW5jbHVkZXMoZikpfWBcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGluamVjdFJld3JpdGVyID0gb2JqZWN0U2NhbihPYmplY3Qua2V5cyhpbmplY3RDYnMpLCB7XG4gICAgICAgIHVzZUFycmF5U2VsZWN0b3I6IGZhbHNlLFxuICAgICAgICBqb2luZWQ6IGZhbHNlLFxuICAgICAgICBmaWx0ZXJGbjogKGtleSwgdmFsdWUsIHsgbWF0Y2hlZEJ5LCBwYXJlbnRzLCBjb250ZXh0IH0pID0+IHtcbiAgICAgICAgICBtYXRjaGVkQnkuZm9yRWFjaCgobSkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih2YWx1ZSwgaW5qZWN0Q2JzW21dLmZuKGtleSwgdmFsdWUsIHBhcmVudHMsIGNvbnRleHQuY29udGV4dCkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZpbHRlclJld3JpdGVyID0gb2JqZWN0U2NhbihPYmplY3Qua2V5cyhmaWx0ZXJDYnMpLCB7XG4gICAgICAgIHVzZUFycmF5U2VsZWN0b3I6IGZhbHNlLFxuICAgICAgICBqb2luZWQ6IGZhbHNlLFxuICAgICAgICBmaWx0ZXJGbjogKGtleSwgdmFsdWUsIHsgbWF0Y2hlZEJ5LCBwYXJlbnRzLCBjb250ZXh0IH0pID0+IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBtYXRjaGVkQnkuc29tZSgobSkgPT4gZmlsdGVyQ2JzW21dLmZuKGtleSwgdmFsdWUsIHBhcmVudHMsIGNvbnRleHQuY29udGV4dCkgPT09IHRydWUpO1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBrZXkubGVuZ3RoID09PSAxID8gY29udGV4dC5pbnB1dCA6IHBhcmVudHNbMF07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJlbnQpKSB7XG4gICAgICAgICAgICAgIHBhcmVudC5zcGxpY2Uoa2V5W2tleS5sZW5ndGggLSAxXSwgMSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkZWxldGUgcGFyZW50W2tleVtrZXkubGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHNvcnRSZXdyaXRlciA9IG9iamVjdFNjYW4oT2JqZWN0LmtleXMoc29ydENicyksIHtcbiAgICAgICAgdXNlQXJyYXlTZWxlY3RvcjogZmFsc2UsXG4gICAgICAgIGpvaW5lZDogZmFsc2UsXG4gICAgICAgIGZpbHRlckZuOiAoa2V5LCB2YWx1ZSwgeyBtYXRjaGVkQnksIHBhcmVudHMsIGNvbnRleHQgfSkgPT4ge1xuICAgICAgICAgIGFzc2VydChBcnJheS5pc0FycmF5KHBhcmVudHNbMF0pLCAnU29ydCBtdXN0IGJlIG9uIFwiQXJyYXlcIiB0eXBlLicpO1xuICAgICAgICAgIGlmIChjb250ZXh0Lmxvb2t1cHNba2V5Lmxlbmd0aCAtIDFdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgY29udGV4dC5sb29rdXBzW2tleS5sZW5ndGggLSAxXSA9IG5ldyBNYXAoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgbG9va3VwID0gY29udGV4dC5sb29rdXBzW2tleS5sZW5ndGggLSAxXTtcbiAgICAgICAgICBsb29rdXAuc2V0KHZhbHVlLCBzb3J0Q2JzW21hdGNoZWRCeVswXV0uZm4oa2V5LCB2YWx1ZSwgcGFyZW50cywgY29udGV4dC5jb250ZXh0KSk7XG4gICAgICAgICAgaWYgKGtleVtrZXkubGVuZ3RoIC0gMV0gPT09IDApIHtcbiAgICAgICAgICAgIHBhcmVudHNbMF0uc29ydCgoYSwgYikgPT4gc29ydEZuKGxvb2t1cC5nZXQoYSksIGxvb2t1cC5nZXQoYikpKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbWl0cyA9IHNvcnRDYnNbbWF0Y2hlZEJ5WzBdXS5wbHVnaW5zXG4gICAgICAgICAgICAgIC5maWx0ZXIoKHApID0+IHAubGltaXQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgLm1hcCgocCkgPT4gcC5saW1pdCh7IGNvbnRleHQ6IGNvbnRleHQuY29udGV4dCB9KSlcbiAgICAgICAgICAgICAgLmZpbHRlcigobCkgPT4gbCAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIGlmIChsaW1pdHMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICAgIGFzc2VydChsaW1pdHMuZXZlcnkoKGwpID0+IE51bWJlci5pc0ludGVnZXIobCkgJiYgbCA+PSAwKSk7XG4gICAgICAgICAgICAgIHBhcmVudHNbMF0uc3BsaWNlKE1hdGgubWluKC4uLmxpbWl0cykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGV4dC5sb29rdXBzLnNwbGljZShrZXkubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmllbGRzVG9SZXF1ZXN0LFxuICAgICAgICByZXdyaXRlOiAoaW5wdXQsIGNvbnRleHQgPSB7fSkgPT4ge1xuICAgICAgICAgIGFzc2VydChjb250ZXh0IGluc3RhbmNlb2YgT2JqZWN0ICYmICFBcnJheS5pc0FycmF5KGNvbnRleHQpKTtcbiAgICAgICAgICBpbmplY3RSZXdyaXRlcihpbnB1dCwgeyBjb250ZXh0IH0pO1xuICAgICAgICAgIGZpbHRlclJld3JpdGVyKGlucHV0LCB7IGlucHV0LCBjb250ZXh0IH0pO1xuICAgICAgICAgIHNvcnRSZXdyaXRlcihpbnB1dCwgeyBsb29rdXBzOiBbXSwgY29udGV4dCB9KTtcbiAgICAgICAgICBvYmplY3RGaWVsZHMucmV0YWluKGlucHV0LCBmaWVsZHMpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG4iXX0=
{
"name": "object-rewrite",
"version": "4.0.0",
"version": "4.0.1",
"description": "Rewrite Object(s) in place using plugins.",

@@ -13,3 +13,3 @@ "main": "lib/index.js",

"object-fields": "1.3.32",
"object-scan": "11.0.3"
"object-scan": "11.1.0"
},

@@ -32,5 +32,5 @@ "devDependencies": {

"eslint-plugin-mocha": "6.3.0",
"js-gardener": "2.0.146",
"js-gardener": "2.0.148",
"lodash.get": "4.4.2",
"nyc": "15.0.0",
"nyc": "15.0.1",
"semantic-release": "17.0.4"

@@ -37,0 +37,0 @@ },

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