transformalizer
Advanced tools
Comparing version 0.1.4 to 1.0.0-beta.0
@@ -5,2 +5,22 @@ # Change Log | ||
<a name="1.0.0-beta.0"></a> | ||
# [1.0.0-beta.0](https://github.com/GaiamTV/transformalizer/compare/v0.1.4...v1.0.0-beta.0) (2017-06-20) | ||
### Bug Fixes | ||
* **docs:** update outdated docs, closes [#12](https://github.com/GaiamTV/transformalizer/issues/12) ([7daa893](https://github.com/GaiamTV/transformalizer/commit/7daa893)) | ||
### Features | ||
* **state:** refactors options into options and state ([fb46919](https://github.com/GaiamTV/transformalizer/commit/fb46919)) | ||
### BREAKING CHANGES | ||
* **state:** removes `clone` dependency and options immutability for performance improvements | ||
<a name="0.1.4"></a> | ||
@@ -7,0 +27,0 @@ ## [0.1.4](https://github.com/GaiamTV/transformalizer/compare/v0.1.3...v0.1.4) (2017-05-04) |
@@ -13,10 +13,4 @@ 'use strict'; | ||
var _clone = require('clone'); | ||
var _clone2 = _interopRequireDefault(_clone); | ||
var _utils = require('./utils'); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } | ||
@@ -77,5 +71,5 @@ | ||
} | ||
var options = (0, _clone2.default)(Object.assign({}, baseOptions, opts)); | ||
var include = createInclude({ source: source, options: opts }); | ||
var data = transformSource({ docSchema: docSchema, source: source, options: opts, include: include }); | ||
var options = Object.assign({}, baseOptions, opts); | ||
var include = createInclude({ source: source, options: options }); | ||
var data = transformSource({ docSchema: docSchema, source: source, options: options, include: include }); | ||
var included = include.get(); | ||
@@ -86,5 +80,4 @@ var document = { | ||
} | ||
}; | ||
// add top level properties if available | ||
var topLevel = ['links', 'meta']; | ||
// add top level properties if available | ||
};var topLevel = ['links', 'meta']; | ||
topLevel.forEach(function (prop) { | ||
@@ -144,3 +137,3 @@ if (docSchema.schema[prop]) { | ||
source = args.source, | ||
opts = args.options, | ||
options = args.options, | ||
data = args.data, | ||
@@ -154,3 +147,3 @@ include = args.include, | ||
if ((0, _utils.isFunction)(docSchema.schema.data.dataSchema)) { | ||
var name = docSchema.schema.data.dataSchema({ source: source, data: data, options: opts }); | ||
var name = docSchema.schema.data.dataSchema({ source: source, data: data, options: options }); | ||
if (name !== docSchema.name) { | ||
@@ -163,4 +156,4 @@ dataSchema = registry[name]; | ||
} | ||
var options = (0, _clone2.default)(Object.assign({}, baseOptions, opts)); | ||
var params = { dataSchema: dataSchema, source: source, options: options, data: data }; | ||
var state = {}; | ||
var params = { dataSchema: dataSchema, source: source, options: options, data: data, state: state }; | ||
var type = params.type = _type || getType(params); | ||
@@ -499,2 +492,2 @@ var id = params.id = _id || getId(params); | ||
module.exports = exports['default']; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi90cmFuc2Zvcm1hbGl6ZXIuanMiXSwibmFtZXMiOlsiY3JlYXRlVHJhbnNmb3JtYWxpemVyIiwiYmFzZU9wdGlvbnMiLCJyZWdpc3RyeSIsInJlZ2lzdGVyIiwibmFtZSIsInNjaGVtYSIsInNjaGVtYU9wdGlvbnMiLCJvcHRpb25zIiwiRXJyb3IiLCJ1bmRlZmluZWQiLCJ0cmFuc2Zvcm0iLCJzb3VyY2UiLCJvcHRzIiwiZG9jU2NoZW1hIiwiT2JqZWN0IiwiYXNzaWduIiwiaW5jbHVkZSIsImNyZWF0ZUluY2x1ZGUiLCJkYXRhIiwidHJhbnNmb3JtU291cmNlIiwiaW5jbHVkZWQiLCJnZXQiLCJkb2N1bWVudCIsImpzb25hcGkiLCJ2ZXJzaW9uIiwidG9wTGV2ZWwiLCJmb3JFYWNoIiwicHJvcCIsInJlc3VsdCIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJ0cmFuc2Zvcm1EYXRhIiwiX3R5cGUiLCJfaWQiLCJkYXRhU2NoZW1hIiwicGFyYW1zIiwidHlwZSIsImdldFR5cGUiLCJpZCIsImdldElkIiwiYXR0cmlidXRlcyIsImdldEF0dHJpYnV0ZXMiLCJyZWxhdGlvbnNoaXBzIiwiZ2V0UmVsYXRpb25zaGlwcyIsImxpbmtzIiwiZ2V0TGlua3MiLCJtZXRhIiwiZ2V0TWV0YSIsInJlc291cmNlIiwib3RoZXJzIiwicmVsU2NoZW1hIiwia2V5cyIsInJlZHVjZSIsIm1lbW8iLCJrZXkiLCJmbiIsInJlbGF0aW9uc2hpcCIsImdldFJlbGF0aW9uc2hpcCIsImludmFsaWREYXRhIiwidHJhbnNmb3JtUmVsYXRpb25zaGlwRGF0YSIsIml0ZW0iLCJleGlzdHMiLCJhbHJlYWR5SW5jbHVkZWQiLCJwdXNoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O2tCQWV3QkEscUI7O0FBZnhCOzs7O0FBRUE7Ozs7OztBQVFBOzs7OztBQUtlLFNBQVNBLHFCQUFULEdBQWlEO0FBQUEsTUFBbEJDLFdBQWtCLHVFQUFKLEVBQUk7O0FB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WUFSSyx5QkFRZ0I7QUFBQSxZQUFaekIsSUFBWSxTQUFaQSxJQUFZO0FBQUEsWUFBTkUsRUFBTSxTQUFOQSxFQUFNOztBQUNuQixlQUFPd0IsZ0JBQW1CMUIsSUFBbkIsU0FBMkJFLEVBQTNCLENBQVA7QUFDRCxPQVZJOzs7QUFZTDs7Ozs7QUFLQXpCLGFBakJLLG1CQWlCR21DLFFBakJILEVBaUJhO0FBQ2hCYyx3QkFBbUJkLFNBQVNaLElBQTVCLFNBQW9DWSxTQUFTVixFQUE3QyxJQUFxRCxJQUFyRDtBQUNBckIsaUJBQVM4QyxJQUFULENBQWNmLFFBQWQ7QUFDRCxPQXBCSTs7O0FBc0JMOzs7O0FBSUE5QixTQTFCSyxpQkEwQkM7QUFDSixlQUFPRCxRQUFQO0FBQ0Q7QUE1QkksS0FBUDtBQThCRDs7QUFFRCxTQUFPO0FBQ0xqQixzQkFESztBQUVMTztBQUZLLEdBQVA7QUFJRCIsImZpbGUiOiJ0cmFuc2Zvcm1hbGl6ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2xvbmUgZnJvbSAnY2xvbmUnXG5cbmltcG9ydCB7XG4gIGlzRnVuY3Rpb24sXG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgVHJhbnNmb3JtRXJyb3IsXG4gIHZhbGlkYXRlU2NoZW1hLFxufSBmcm9tICcuL3V0aWxzJ1xuXG4vKipcbiAqIFRyYW5zZm9ybWFsaXplciBmYWN0b3J5IGZ1bmN0aW9uLlxuICogQHBhcmFtICB7T2JqZWN0fSBbYmFzZU9wdGlvbnM9e31dXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRyYW5zZm9ybWFsaXplclxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVUcmFuc2Zvcm1hbGl6ZXIoYmFzZU9wdGlvbnMgPSB7fSkge1xuICBjb25zdCByZWdpc3RyeSA9IHt9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgc2NoZW1hXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGFyZ3MubmFtZSAtIHNjaGVtYSBuYW1lL2lkXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5zY2hlbWEgLSBzY2hlbWEgZGVmaW5pdGlvblxuICAgKiBAcGFyYW0gIHtPYmplY3R9IFthcmdzLm9wdGlvbnM9e31dIC0gc2NoZW1hIG9wdGlvbnMgdG8gYmUgbWVyZ2VkIGluIHRvIHRyYW5zZm9ybSBvcHRpb25zXG4gICAqIEByZXR1cm4ge1VuZGVmaW5lZH1cbiAgICovXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyKHsgbmFtZSwgc2NoZW1hLCBvcHRpb25zOiBzY2hlbWFPcHRpb25zIH0pIHtcbiAgICBpZiAoIWlzU3RyaW5nKG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgXCJuYW1lXCIgUHJvcGVydHkgKG5vbiBzdHJpbmcpJylcbiAgICB9XG4gICAgcmVnaXN0cnlbbmFtZV0gPSB7XG4gICAgICBzY2hlbWE6IHZhbGlkYXRlU2NoZW1hKHsgbmFtZSwgc2NoZW1hIH0pLFxuICAgICAgb3B0aW9uczogc2NoZW1hT3B0aW9ucyxcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSByYXcgZGF0YSBpbnRvIGEgdmFsaWQgSlNPTiBBUEkgZG9jdW1lbnRcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSAge1N0cmluZ30gYXJncy5uYW1lIC0gdGhlIHRvcCBsZXZlbCBzY2hlbWEgbmFtZVxuICAgKiBAcGFyYW0gIHtPYmplY3R8T2JqZWN0W119IGFyZ3Muc291cmNlIC0gYSBzaW5nbGUgc291cmNlIG9iamVjdCBvciBhbiBhcmF5IG9mIHNvdXJjZSBvYmplY3RzXG4gICAqIEBwYXJhbSAge09iamVjdH0gW29wdGlvbnM9e31dIC0gZnVuY3Rpb24gbGV2ZWwgb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtPYmplY3R9IGRvY3VtZW50XG4gICAqL1xuICBmdW5jdGlvbiB0cmFuc2Zvcm0oeyBuYW1lLCBzb3VyY2UsIG9wdGlvbnM6IG9wdHMgfSkge1xuICAgIGlmICghaXNTdHJpbmcobmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBUcmFuc2Zvcm1FcnJvcignSW52YWxpZCBcIm5hbWVcIiBQcm9wZXJ0eSAobm9uIHN0cmluZyknLCB7IG5hbWUsIHNvdXJjZSwgb3B0aW9uczogb3B0cyB9KVxuICAgIH1cbiAgICBjb25zdCBkb2NTY2hlbWEgPSByZWdpc3RyeVtuYW1lXVxuICAgIGlmICghZG9jU2NoZW1hKSB7XG4gICAgICB0aHJvdyBuZXcgVHJhbnNmb3JtRXJyb3IoYE1pc3NpbmcgU2NoZW1hOiAke25hbWV9YCwgeyBuYW1lLCBzb3VyY2UsIG9wdGlvbnM6IG9wdHMgfSlcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNsb25lKE9iamVjdC5hc3NpZ24oe30sIGJhc2VPcHRpb25zLCBvcHRzKSlcbiAgICBjb25zdCBpbmNsdWRlID0gY3JlYXRlSW5jbHVkZSh7IHNvdXJjZSwgb3B0aW9uczogb3B0cyB9KVxuICAgIGNvbnN0IGRhdGEgPSB0cmFuc2Zvcm1Tb3VyY2UoeyBkb2NTY2hlbWEsIHNvdXJjZSwgb3B0aW9uczogb3B0cywgaW5jbHVkZSB9KVxuICAgIGNvbnN0IGluY2x1ZGVkID0gaW5jbHVkZS5nZXQoKVxuICAgIGNvbnN0IGRvY3VtZW50ID0ge1xuICAgICAganNvbmFwaToge1xuICAgICAgICB2ZXJzaW9uOiAnMS4wJyxcbiAgICAgIH0sXG4gICAgfVxuICAgIC8vIGFkZCB0b3AgbGV2ZWwgcHJvcGVydGllcyBpZiBhdmFpbGFibGVcbiAgICBjb25zdCB0b3BMZXZlbCA9IFsnbGlua3MnLCAnbWV0YSddXG4gICAgdG9wTGV2ZWwuZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgaWYgKGRvY1NjaGVtYS5zY2hlbWFbcHJvcF0pIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZG9jU2NoZW1hLnNjaGVtYVtwcm9wXSh7IHNvdXJjZSwgb3B0aW9ucywgZGF0YSwgaW5jbHVkZWQgfSlcbiAgICAgICAgaWYgKGlzT2JqZWN0KHJlc3VsdCkpIHtcbiAgICAgICAgICBkb2N1bWVudFtwcm9wXSA9IHJlc3VsdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgICBkb2N1bWVudC5kYXRhID0gZGF0YVxuICAgIGlmIChpbmNsdWRlZC5sZW5ndGgpIHtcbiAgICAgIGRvY3VtZW50LmluY2x1ZGVkID0gaW5jbHVkZWRcbiAgICB9XG4gICAgcmV0dXJuIGRvY3VtZW50XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIHNvdXJjZSBpbnRvIHRoZSBcInByaW1hcnkgZGF0YVwiIG9mIHRoZSBkb2N1bWVudFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3NcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzLmRvY1NjaGVtYSAtIHRoZSB0b3AgbGV2ZWwgc2NoZW1hIHVzZWQgZm9yIHRyYW5zZm9ybWluZyB0aGUgZG9jdW1lbnRcbiAgICogQHBhcmFtICB7T2JqZWN0fE9iamVjdFtdfSBhcmdzLnNvdXJjZSAtIHNvdXJjZSBkYXRhXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5vcHRpb25zIC0gZnVuY3Rpb24gbGV2ZWwgb3B0aW9uc1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3MuaW5jbHVkZSAtIGluY2x1ZGUgb2JqZWN0XG4gICAqIEByZXR1cm4ge09iamVjdHxPYmplY3RbXX1cbiAgICovXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybVNvdXJjZShhcmdzKSB7XG4gICAgY29uc3QgeyBkb2NTY2hlbWEsIHNvdXJjZSwgb3B0aW9uczogb3B0cywgaW5jbHVkZSB9ID0gYXJnc1xuICAgIC8vIFRPRE8gZGVmaW5lIGluY2x1ZGVcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLm1hcChkYXRhID0+IHRyYW5zZm9ybURhdGEoeyBkb2NTY2hlbWEsIHNvdXJjZSwgb3B0aW9uczogb3B0cywgZGF0YSwgaW5jbHVkZSB9KSlcbiAgICB9XG4gICAgcmV0dXJuIHRyYW5zZm9ybURhdGEoeyBkb2NTY2hlbWEsIHNvdXJjZSwgb3B0aW9uczogb3B0cywgZGF0YTogc291cmNlLCBpbmNsdWRlIH0pXG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIGEgc2luZ2xlIHNvdXJjZSBvYmplY3QgaW50byBhIHZhbGlkIHJlc291cmNlIG9iamVjdFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3MuZG9jU2NoZW1hIC0gdGhlIHRvcCBsZXZlbCBzY2hlbWEgdXNlZCBmb3IgdHJhbnNmb3JtaW5nIHRoZSBkb2N1bWVudFxuICAgKiBAcGFyYW0gIHtPYmplY3R8T2JqZWN0W119IGFyZ3Muc291cmNlIC0gc291cmNlIGRhdGFcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzLm9wdGlvbnMgLSBmdW5jdGlvbiBsZXZlbCBvcHRpb25zXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5kYXRhIC0gY3VycmVudCBzb3VyY2Ugb2JqZWN0XG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5pbmNsdWRlIC0gaW5jbHVkZSBvYmplY3RcbiAgICogQHBhcmFtICB7U3RyaW5nfSBbYXJncy5fdHlwZV0gLSAoZm9yIHVzZSBieSB0cmFuc2Zvcm1SZWxhdGlvbnNoaXBEYXRhKVxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IFthcmdzLl9pZF0gLSAoZm9yIHVzZSBieSB0cmFuc2Zvcm1SZWxhdGlvbnNoaXBEYXRhKVxuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqL1xuICBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGFyZ3MpIHtcbiAgICBjb25zdCB7IGRvY1NjaGVtYSwgc291cmNlLCBvcHRpb25zOiBvcHRzLCBkYXRhLCBpbmNsdWRlLCBfdHlwZSwgX2lkIH0gPSBhcmdzXG4gICAgLy8gY2FsbCBkYXRhU2NoZW1hIGlmIGRlZmluZWQgYW5kIHN3aXRjaCBjb250ZXh0cyBpZiBuZWNlc3NhcnlcbiAgICBsZXQgZGF0YVNjaGVtYSA9IGRvY1NjaGVtYVxuICAgIGlmIChpc0Z1bmN0aW9uKGRvY1NjaGVtYS5zY2hlbWEuZGF0YS5kYXRhU2NoZW1hKSkge1xuICAgICAgY29uc3QgbmFtZSA9IGRvY1NjaGVtYS5zY2hlbWEuZGF0YS5kYXRhU2NoZW1hKHsgc291cmNlLCBkYXRhLCBvcHRpb25zOiBvcHRzIH0pXG4gICAgICBpZiAobmFtZSAhPT0gZG9jU2NoZW1hLm5hbWUpIHtcbiAgICAgICAgZGF0YVNjaGVtYSA9IHJlZ2lzdHJ5W25hbWVdXG4gICAgICAgIGlmICghZGF0YVNjaGVtYSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBTY2hlbWE6ICR7bmFtZX1gKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvbnMgPSBjbG9uZShPYmplY3QuYXNzaWduKHt9LCBiYXNlT3B0aW9ucywgb3B0cykpXG4gICAgY29uc3QgcGFyYW1zID0geyBkYXRhU2NoZW1hLCBzb3VyY2UsIG9wdGlvbnMsIGRhdGEgfVxuICAgIGNvbnN0IHR5cGUgPSBwYXJhbXMudHlwZSA9IF90eXBlIHx8IGdldFR5cGUocGFyYW1zKVxuICAgIGNvbnN0IGlkID0gcGFyYW1zLmlkID0gX2lkIHx8IGdldElkKHBhcmFtcylcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gcGFyYW1zLmF0dHJpYnV0ZXMgPSBnZXRBdHRyaWJ1dGVzKHBhcmFtcylcbiAgICBjb25zdCByZWxhdGlvbnNoaXBzID0gcGFyYW1zLnJlbGF0aW9uc2hpcHMgPSBnZXRSZWxhdGlvbnNoaXBzKHsgaW5jbHVkZSwgLi4ucGFyYW1zIH0pXG4gICAgY29uc3QgbGlua3MgPSBwYXJhbXMubGlua3MgPSBnZXRMaW5rcyhwYXJhbXMpXG4gICAgY29uc3QgbWV0YSA9IHBhcmFtcy5tZXRhID0gZ2V0TWV0YShwYXJhbXMpXG4gICAgLy8gYnVpbGQgcmVzdWx0aW5nIHJlc291cmNlXG4gICAgY29uc3QgcmVzb3VyY2UgPSB7IHR5cGUsIGlkIH1cbiAgICBpZiAoaXNPYmplY3QoYXR0cmlidXRlcykpIHtcbiAgICAgIHJlc291cmNlLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzXG4gICAgfVxuICAgIGlmIChpc09iamVjdChyZWxhdGlvbnNoaXBzKSkge1xuICAgICAgcmVzb3VyY2UucmVsYXRpb25zaGlwcyA9IHJlbGF0aW9uc2hpcHNcbiAgICB9XG4gICAgaWYgKGlzT2JqZWN0KG1ldGEpKSB7XG4gICAgICByZXNvdXJjZS5tZXRhID0gbWV0YVxuICAgIH1cbiAgICBpZiAoaXNPYmplY3QobGlua3MpKSB7XG4gICAgICByZXNvdXJjZS5saW5rcyA9IGxpbmtzXG4gICAgfVxuICAgIHJldHVybiByZXNvdXJjZVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcmVzb3VyY2UgdHlwZSBmb3IgdGhlIGN1cnJlbnQgc291cmNlIG9iamVjdFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3NcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzLmRhdGFTY2hlbWFcbiAgICogQHBhcmFtICB7T2JqZWN0fE9iamVjdFtdfSBhcmdzLnNvdXJjZVxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3Mub3B0aW9uc1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3MuZGF0YVxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IHR5cGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGZ1bmN0aW9uIGdldFR5cGUoYXJncykge1xuICAgIGNvbnN0IHsgZGF0YVNjaGVtYSwgLi4ub3RoZXJzIH0gPSBhcmdzXG4gICAgY29uc3QgdHlwZSA9IGRhdGFTY2hlbWEuc2NoZW1hLmRhdGEudHlwZShvdGhlcnMpXG4gICAgaWYgKCFpc1N0cmluZyh0eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IFRyYW5zZm9ybUVycm9yKCdJbnZhbGlkIHR5cGUnLCBhcmdzKVxuICAgIH1cbiAgICByZXR1cm4gdHlwZVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcmVzb3VyY2UgaWQgZm9yIHRoZSBjdXJyZW50IHNvdXJjZSBvYmplY3RcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5kYXRhU2NoZW1hXG4gICAqIEBwYXJhbSAge09iamVjdHxPYmplY3RbXX0gYXJncy5zb3VyY2VcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzLm9wdGlvbnNcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzLmRhdGFcbiAgICogQHBhcmFtICB7U3RyaW5nfSBhcmdzLnR5cGVcbiAgICogQHJldHVybiB7U3RyaW5nfSBpZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SWQoYXJncykge1xuICAgIGNvbnN0IHsgZGF0YVNjaGVtYSwgLi4ub3RoZXJzIH0gPSBhcmdzXG4gICAgY29uc3QgaWQgPSBkYXRhU2NoZW1hLnNjaGVtYS5kYXRhLmlkKG90aGVycylcbiAgICBpZiAoIWlzU3RyaW5nKGlkKSkge1xuICAgICAgdGhyb3cgbmV3IFRyYW5zZm9ybUVycm9yKCdJbnZhbGlkIGlkJywgYXJncylcbiAgICB9XG4gICAgcmV0dXJuIGlkXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSByZXNvdXJjZSBhdHRyaWJ1dGVzIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgc291cmNlIG9iamVjdFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3NcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzLmRhdGFTY2hlbWFcbiAgICogQHBhcmFtICB7T2JqZWN0fE9iamVjdFtdfSBhcmdzLnNvdXJjZVxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3Mub3B0aW9uc1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3MuZGF0YVxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGFyZ3MudHlwZVxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGFyZ3MuaWRcbiAgICogQHJldHVybiB7T2JqZWN0fSBhdHRyaWJ1dGVzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVzKGFyZ3MpIHtcbiAgICBjb25zdCB7IGRhdGFTY2hlbWEsIC4uLm90aGVycyB9ID0gYXJnc1xuICAgIGlmIChkYXRhU2NoZW1hLnNjaGVtYS5kYXRhLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBkYXRhU2NoZW1hLnNjaGVtYS5kYXRhLmF0dHJpYnV0ZXMob3RoZXJzKVxuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcmVzb3VyY2UgcmVsYXRpb25zaGlwcyBvYmplY3QgZm9yIHRoZSBjdXJyZW50IHNvdXJjZSBvYmplY3RcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5kYXRhU2NoZW1hXG4gICAqIEBwYXJhbSAge09iamVjdHxPYmplY3RbXX0gYXJncy5zb3VyY2VcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzLm9wdGlvbnNcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzLmRhdGFcbiAgICogQHBhcmFtICB7U3RyaW5nfSBhcmdzLnR5cGVcbiAgICogQHBhcmFtICB7U3RyaW5nfSBhcmdzLmlkXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5hdHRyaWJ1dGVzXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5pbmNsdWRlXG4gICAqIEByZXR1cm4ge09iamVjdH0gcmVsYXRpb25zaGlwc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0UmVsYXRpb25zaGlwcyhhcmdzKSB7XG4gICAgY29uc3QgeyBkYXRhU2NoZW1hLCAuLi5vdGhlcnMgfSA9IGFyZ3NcbiAgICBjb25zdCByZWxTY2hlbWEgPSBkYXRhU2NoZW1hLnNjaGVtYS5kYXRhLnJlbGF0aW9uc2hpcHNcbiAgICBpZiAocmVsU2NoZW1hKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocmVsU2NoZW1hKVxuICAgICAgY29uc3QgcmVsYXRpb25zaGlwcyA9IGtleXMucmVkdWNlKChtZW1vLCBrZXkpID0+IHtcbiAgICAgICAgY29uc3QgZm4gPSByZWxTY2hlbWFba2V5XVxuICAgICAgICBjb25zdCByZWxhdGlvbnNoaXAgPSBnZXRSZWxhdGlvbnNoaXAoeyBmbiwgLi4ub3RoZXJzIH0pXG4gICAgICAgIGlmIChpc09iamVjdChyZWxhdGlvbnNoaXApKSB7XG4gICAgICAgICAgbWVtb1trZXldID0gcmVsYXRpb25zaGlwXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lbW9cbiAgICAgIH0sIHt9KVxuICAgICAgaWYgKCFPYmplY3Qua2V5cyhyZWxhdGlvbnNoaXBzKS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlbGF0aW9uc2hpcHNcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcmVzb3VyY2UgcmVsYXRpb25zaGlwIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgcmVsYXRpb25zaGlwIG9mIHRoZVxuICAgKiBjdXJyZW50IHNvdXJjZSBvYmplY3RcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5mblxuICAgKiBAcGFyYW0gIHtPYmplY3R8T2JqZWN0W119IGFyZ3Muc291cmNlXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5vcHRpb25zXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5kYXRhXG4gICAqIEBwYXJhbSAge1N0cmluZ30gYXJncy50eXBlXG4gICAqIEBwYXJhbSAge1N0cmluZ30gYXJncy5pZFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3MuYXR0cmlidXRlc1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3MuaW5jbHVkZVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IHJlbGF0aW9uc2hpcFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0UmVsYXRpb25zaGlwKGFyZ3MpIHtcbiAgICBjb25zdCB7IGZuLCBpbmNsdWRlLCAuLi5vdGhlcnMgfSA9IGFyZ3NcbiAgICBjb25zdCByZXN1bHQgPSBmbihvdGhlcnMpXG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICAgIGNvbnN0IHsgbWV0YSwgbGlua3MsIGRhdGEgfSA9IHJlc3VsdFxuICAgIGNvbnN0IGludmFsaWREYXRhID0gIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnXG4gICAgaWYgKCFsaW5rcyAmJiAhbWV0YSAmJiBpbnZhbGlkRGF0YSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgICBjb25zdCByZWxhdGlvbnNoaXAgPSB7fVxuICAgIGlmICghaW52YWxpZERhdGEpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIHJlbGF0aW9uc2hpcC5kYXRhID0gZGF0YS5tYXAoaXRlbSA9PiB0cmFuc2Zvcm1SZWxhdGlvbnNoaXBEYXRhKHtcbiAgICAgICAgICBpdGVtLFxuICAgICAgICAgIHNvdXJjZTogYXJncy5zb3VyY2UsXG4gICAgICAgICAgb3B0aW9uczogYXJncy5vcHRpb25zLFxuICAgICAgICAgIGluY2x1ZGUsXG4gICAgICAgIH0pKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVsYXRpb25zaGlwLmRhdGEgPSB0cmFuc2Zvcm1SZWxhdGlvbnNoaXBEYXRhKHtcbiAgICAgICAgICBpdGVtOiBkYXRhLFxuICAgICAgICAgIHNvdXJjZTogYXJncy5zb3VyY2UsXG4gICAgICAgICAgb3B0aW9uczogYXJncy5vcHRpb25zLFxuICAgICAgICAgIGluY2x1ZGUsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpc09iamVjdChtZXRhKSkge1xuICAgICAgcmVsYXRpb25zaGlwLm1ldGEgPSBtZXRhXG4gICAgfVxuICAgIGlmIChpc09iamVjdChsaW5rcykpIHtcbiAgICAgIHJlbGF0aW9uc2hpcC5saW5rcyA9IGxpbmtzXG4gICAgfVxuICAgIHJldHVybiByZWxhdGlvbnNoaXBcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRhdGEgZm9yIHRoZSBjdXJyZW50IHJlbGF0aW9uc2hpcCBvYmplY3QgZm9yIHRoZSBjdXJyZW50IHNvdXJjZVxuICAgKiBvYmplY3RcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5pdGVtIC0gdGhlIGN1cnJlbnQgZGF0YSBpdGVtXG4gICAqIEBwYXJhbSAge09iamVjdHxPYmplY3RbXX0gYXJncy5zb3VyY2VcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzLm9wdGlvbnNcbiAgICogQHBhcmFtICB7RnVuY3Rpb259IGFyZ3MuaW5jbHVkZVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IGRhdGFcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybVJlbGF0aW9uc2hpcERhdGEoYXJncykge1xuICAgIGNvbnN0IHsgaXRlbSwgc291cmNlLCBvcHRpb25zLCBpbmNsdWRlIH0gPSBhcmdzXG4gICAgY29uc3QgeyBuYW1lLCBkYXRhLCBpbmNsdWRlZCwgbWV0YSB9ID0gaXRlbVxuICAgIGlmICghaXNTdHJpbmcobmFtZSkgfHwgIXJlZ2lzdHJ5W25hbWVdKSB7XG4gICAgICB0aHJvdyBuZXcgVHJhbnNmb3JtRXJyb3IoYE1pc3NpbmcgU2NoZW1hOiAke25hbWV9YCwgYXJncylcbiAgICB9XG4gICAgY29uc3QgcmVsU2NoZW1hID0gcmVnaXN0cnlbbmFtZV1cbiAgICBjb25zdCB0eXBlID0gZ2V0VHlwZSh7IGRhdGFTY2hlbWE6IHJlbFNjaGVtYSwgc291cmNlLCBvcHRpb25zLCBkYXRhIH0pXG4gICAgY29uc3QgaWQgPSBnZXRJZCh7IGRhdGFTY2hlbWE6IHJlbFNjaGVtYSwgc291cmNlLCBvcHRpb25zLCBkYXRhIH0pXG4gICAgY29uc3QgcmVzdWx0ID0geyB0eXBlLCBpZCB9XG4gICAgaWYgKGlzT2JqZWN0KG1ldGEpKSB7XG4gICAgICByZXN1bHQubWV0YSA9IG1ldGFcbiAgICB9XG4gICAgaWYgKGluY2x1ZGVkID09PSB0cnVlICYmICFpbmNsdWRlLmV4aXN0cyh7IHR5cGUsIGlkIH0pKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IHRyYW5zZm9ybURhdGEoe1xuICAgICAgICBkb2NTY2hlbWE6IHJlbFNjaGVtYSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICBkYXRhLFxuICAgICAgICBpbmNsdWRlLFxuICAgICAgICBfdHlwZTogdHlwZSxcbiAgICAgICAgX2lkOiBpZCxcbiAgICAgIH0pXG4gICAgICBpbmNsdWRlLmluY2x1ZGUocmVzb3VyY2UpXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHJlc291cmNlIGxpbmtzIGZvciB0aGUgY3VycmVudCBzb3VyY2Ugb2JqZWN0XG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3MuZGF0YVNjaGVtYVxuICAgKiBAcGFyYW0gIHtPYmplY3R8T2JqZWN0W119IGFyZ3Muc291cmNlXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5vcHRpb25zXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5kYXRhXG4gICAqIEBwYXJhbSAge1N0cmluZ30gYXJncy50eXBlXG4gICAqIEBwYXJhbSAge1N0cmluZ30gYXJncy5pZFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3MuYXR0cmlidXRlc1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3MucmVsYXRpb25zaGlwc1xuICAgKiBAcmV0dXJuIHtPYmplY3R9IGxpbmtzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBmdW5jdGlvbiBnZXRMaW5rcyhhcmdzKSB7XG4gICAgY29uc3QgeyBkYXRhU2NoZW1hLCAuLi5vdGhlcnMgfSA9IGFyZ3NcbiAgICBpZiAoZGF0YVNjaGVtYS5zY2hlbWEuZGF0YS5saW5rcykge1xuICAgICAgcmV0dXJuIGRhdGFTY2hlbWEuc2NoZW1hLmRhdGEubGlua3Mob3RoZXJzKVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSByZXNvdXJjZSBtZXRhIGZvciB0aGUgY3VycmVudCBzb3VyY2Ugb2JqZWN0XG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3MuZGF0YVNjaGVtYVxuICAgKiBAcGFyYW0gIHtPYmplY3R8T2JqZWN0W119IGFyZ3Muc291cmNlXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5vcHRpb25zXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5kYXRhXG4gICAqIEBwYXJhbSAge1N0cmluZ30gYXJncy50eXBlXG4gICAqIEBwYXJhbSAge1N0cmluZ30gYXJncy5pZFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3MuYXR0cmlidXRlc1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3MucmVsYXRpb25zaGlwc1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3MubGlua3NcbiAgICogQHJldHVybiB7T2JqZWN0fSBtZXRhXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBmdW5jdGlvbiBnZXRNZXRhKGFyZ3MpIHtcbiAgICBjb25zdCB7IGRhdGFTY2hlbWEsIC4uLm90aGVycyB9ID0gYXJnc1xuICAgIGlmIChkYXRhU2NoZW1hLnNjaGVtYS5kYXRhLm1ldGEpIHtcbiAgICAgIHJldHVybiBkYXRhU2NoZW1hLnNjaGVtYS5kYXRhLm1ldGEob3RoZXJzKVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGluY2x1ZGUgb2JqZWN0XG4gICAqIEByZXR1cm4ge09iamVjdH0gaW5jbHVkZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gY3JlYXRlSW5jbHVkZSgpIHtcbiAgICBjb25zdCBpbmNsdWRlZCA9IFtdXG4gICAgY29uc3QgYWxyZWFkeUluY2x1ZGVkID0ge31cbiAgICByZXR1cm4ge1xuICAgICAgLyoqXG4gICAgICAgKiBEZXRlcm1pbmUgd2hldGhlciBvciBub3QgYSBnaXZlbiByZXNvdXJjZSBoYXMgYWxyZWFkeSBiZWVuIGluY2x1ZGVkXG4gICAgICAgKiBAcGFyYW0ge09iamVjdH0gYXJnc1xuICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGFyZ3MudHlwZVxuICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGFyZ3MuaWRcbiAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAgICAgKi9cbiAgICAgIGV4aXN0cyh7IHR5cGUsIGlkIH0pIHtcbiAgICAgICAgcmV0dXJuIGFscmVhZHlJbmNsdWRlZFtgJHt0eXBlfToke2lkfWBdXG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIEFkZCBhbiBpbmNsdWRlZCByZXNvdXJjZSB0byB0aGUgaW5jbHVkZWQgc2VjdGlvbiBvZiB0aGUgZG9jdW1lbnRcbiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZXNvdXJjZVxuICAgICAgICogQHJldHVybiB7VW5kZWZpbmVkfVxuICAgICAgICovXG4gICAgICBpbmNsdWRlKHJlc291cmNlKSB7XG4gICAgICAgIGFscmVhZHlJbmNsdWRlZFtgJHtyZXNvdXJjZS50eXBlfToke3Jlc291cmNlLmlkfWBdID0gdHJ1ZVxuICAgICAgICBpbmNsdWRlZC5wdXNoKHJlc291cmNlKVxuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBSZXR1cm4gdGhlIGluY2x1ZGVkIGFycmF5IGluIGl0cyBjdXJyZW50IHN0YXRlXG4gICAgICAgKiBAcmV0dXJuIHtPYmplY3RbXX1cbiAgICAgICAqL1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gaW5jbHVkZWRcbiAgICAgIH0sXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICByZWdpc3RlcixcbiAgICB0cmFuc2Zvcm0sXG4gIH1cbn1cbiJdfQ== | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi90cmFuc2Zvcm1hbGl6ZXIuanMiXSwibmFtZXMiOlsiY3JlYXRlVHJhbnNmb3JtYWxpemVyIiwiYmFzZU9wdGlvbnMiLCJyZWdpc3RyeSIsInJlZ2lzdGVyIiwibmFtZSIsInNjaGVtYSIsInNjaGVtYU9wdGlvbnMiLCJvcHRpb25zIiwiRXJyb3IiLCJ1bmRlZmluZWQiLCJ0cmFuc2Zvcm0iLCJzb3VyY2UiLCJvcHRzIiwiZG9jU2NoZW1hIiwiT2JqZWN0IiwiYXNzaWduIiwiaW5jbHVkZSIsImNyZWF0ZUluY2x1ZGUiLCJkYXRhIiwidHJhbnNmb3JtU291cmNlIiwiaW5jbHVkZWQiLCJnZXQiLCJkb2N1bWVudCIsImpzb25hcGkiLCJ2ZXJzaW9uIiwidG9wTGV2ZWwiLCJmb3JFYWNoIiwicHJvcCIsInJlc3VsdCIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJ0cmFuc2Zvcm1EYXRhIiwiX3R5cGUiLCJfaWQiLCJkYXRhU2NoZW1hIiwic3RhdGUiLCJwYXJhbXMiLCJ0eXBlIiwiZ2V0VHlwZSIsImlkIiwiZ2V0SWQiLCJhdHRyaWJ1dGVzIiwiZ2V0QXR0cmlidXRlcyIsInJlbGF0aW9uc2hpcHMiLCJnZXRSZWxhdGlvbnNoaXBzIiwibGlua3MiLCJnZXRMaW5rcyIsIm1ldGEiLCJnZXRNZXRhIiwicmVzb3VyY2UiLCJvdGhlcnMiLCJyZWxTY2hlbWEiLCJrZXlzIiwicmVkdWNlIiwibWVtbyIsImtleSIsImZuIiwicmVsYXRpb25zaGlwIiwiZ2V0UmVsYXRpb25zaGlwIiwiaW52YWxpZERhdGEiLCJ0cmFuc2Zvcm1SZWxhdGlvbnNoaXBEYXRhIiwiaXRlbSIsImV4aXN0cyIsImFscmVhZHlJbmNsdWRlZCIsInB1c2giXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7a0JBYXdCQSxxQjs7QUFieEI7Ozs7QUFRQTs7Ozs7QUFLZSxTQUFTQSxxQkFBVCxHQUFpRDtBQUFBLE1BQWxCQyxXQUFrQix1RUFBSixFQUFJOztBQUM5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LGVBQU93QixnQkFBbUIxQixJQUFuQixTQUEyQkUsRUFBM0IsQ0FBUDtBQUNELE9BVkk7OztBQVlMOzs7OztBQUtBMUIsYUFqQkssbUJBaUJHb0MsUUFqQkgsRUFpQmE7QUFDaEJjLHdCQUFtQmQsU0FBU1osSUFBNUIsU0FBb0NZLFNBQVNWLEVBQTdDLElBQXFELElBQXJEO0FBQ0F0QixpQkFBUytDLElBQVQsQ0FBY2YsUUFBZDtBQUNELE9BcEJJOzs7QUFzQkw7Ozs7QUFJQS9CLFNBMUJLLGlCQTBCQztBQUNKLGVBQU9ELFFBQVA7QUFDRDtBQTVCSSxLQUFQO0FBOEJEOztBQUVELFNBQU87QUFDTGpCLHNCQURLO0FBRUxPO0FBRkssR0FBUDtBQUlEIiwiZmlsZSI6InRyYW5zZm9ybWFsaXplci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGlzRnVuY3Rpb24sXG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgVHJhbnNmb3JtRXJyb3IsXG4gIHZhbGlkYXRlU2NoZW1hLFxufSBmcm9tICcuL3V0aWxzJ1xuXG4vKipcbiAqIFRyYW5zZm9ybWFsaXplciBmYWN0b3J5IGZ1bmN0aW9uLlxuICogQHBhcmFtICB7T2JqZWN0fSBbYmFzZU9wdGlvbnM9e31dXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRyYW5zZm9ybWFsaXplclxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVUcmFuc2Zvcm1hbGl6ZXIoYmFzZU9wdGlvbnMgPSB7fSkge1xuICBjb25zdCByZWdpc3RyeSA9IHt9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgc2NoZW1hXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGFyZ3MubmFtZSAtIHNjaGVtYSBuYW1lL2lkXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5zY2hlbWEgLSBzY2hlbWEgZGVmaW5pdGlvblxuICAgKiBAcGFyYW0gIHtPYmplY3R9IFthcmdzLm9wdGlvbnM9e31dIC0gc2NoZW1hIG9wdGlvbnMgdG8gYmUgbWVyZ2VkIGluIHRvIHRyYW5zZm9ybSBvcHRpb25zXG4gICAqIEByZXR1cm4ge1VuZGVmaW5lZH1cbiAgICovXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyKHsgbmFtZSwgc2NoZW1hLCBvcHRpb25zOiBzY2hlbWFPcHRpb25zIH0pIHtcbiAgICBpZiAoIWlzU3RyaW5nKG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgXCJuYW1lXCIgUHJvcGVydHkgKG5vbiBzdHJpbmcpJylcbiAgICB9XG4gICAgcmVnaXN0cnlbbmFtZV0gPSB7XG4gICAgICBzY2hlbWE6IHZhbGlkYXRlU2NoZW1hKHsgbmFtZSwgc2NoZW1hIH0pLFxuICAgICAgb3B0aW9uczogc2NoZW1hT3B0aW9ucyxcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSByYXcgZGF0YSBpbnRvIGEgdmFsaWQgSlNPTiBBUEkgZG9jdW1lbnRcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSAge1N0cmluZ30gYXJncy5uYW1lIC0gdGhlIHRvcCBsZXZlbCBzY2hlbWEgbmFtZVxuICAgKiBAcGFyYW0gIHtPYmplY3R8T2JqZWN0W119IGFyZ3Muc291cmNlIC0gYSBzaW5nbGUgc291cmNlIG9iamVjdCBvciBhbiBhcmF5IG9mIHNvdXJjZSBvYmplY3RzXG4gICAqIEBwYXJhbSAge09iamVjdH0gW29wdGlvbnM9e31dIC0gZnVuY3Rpb24gbGV2ZWwgb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtPYmplY3R9IGRvY3VtZW50XG4gICAqL1xuICBmdW5jdGlvbiB0cmFuc2Zvcm0oeyBuYW1lLCBzb3VyY2UsIG9wdGlvbnM6IG9wdHMgfSkge1xuICAgIGlmICghaXNTdHJpbmcobmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBUcmFuc2Zvcm1FcnJvcignSW52YWxpZCBcIm5hbWVcIiBQcm9wZXJ0eSAobm9uIHN0cmluZyknLCB7IG5hbWUsIHNvdXJjZSwgb3B0aW9uczogb3B0cyB9KVxuICAgIH1cbiAgICBjb25zdCBkb2NTY2hlbWEgPSByZWdpc3RyeVtuYW1lXVxuICAgIGlmICghZG9jU2NoZW1hKSB7XG4gICAgICB0aHJvdyBuZXcgVHJhbnNmb3JtRXJyb3IoYE1pc3NpbmcgU2NoZW1hOiAke25hbWV9YCwgeyBuYW1lLCBzb3VyY2UsIG9wdGlvbnM6IG9wdHMgfSlcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGJhc2VPcHRpb25zLCBvcHRzKVxuICAgIGNvbnN0IGluY2x1ZGUgPSBjcmVhdGVJbmNsdWRlKHsgc291cmNlLCBvcHRpb25zIH0pXG4gICAgY29uc3QgZGF0YSA9IHRyYW5zZm9ybVNvdXJjZSh7IGRvY1NjaGVtYSwgc291cmNlLCBvcHRpb25zLCBpbmNsdWRlIH0pXG4gICAgY29uc3QgaW5jbHVkZWQgPSBpbmNsdWRlLmdldCgpXG4gICAgY29uc3QgZG9jdW1lbnQgPSB7XG4gICAgICBqc29uYXBpOiB7XG4gICAgICAgIHZlcnNpb246ICcxLjAnLFxuICAgICAgfSxcbiAgICB9XG4gICAgLy8gYWRkIHRvcCBsZXZlbCBwcm9wZXJ0aWVzIGlmIGF2YWlsYWJsZVxuICAgIGNvbnN0IHRvcExldmVsID0gWydsaW5rcycsICdtZXRhJ11cbiAgICB0b3BMZXZlbC5mb3JFYWNoKChwcm9wKSA9PiB7XG4gICAgICBpZiAoZG9jU2NoZW1hLnNjaGVtYVtwcm9wXSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBkb2NTY2hlbWEuc2NoZW1hW3Byb3BdKHsgc291cmNlLCBvcHRpb25zLCBkYXRhLCBpbmNsdWRlZCB9KVxuICAgICAgICBpZiAoaXNPYmplY3QocmVzdWx0KSkge1xuICAgICAgICAgIGRvY3VtZW50W3Byb3BdID0gcmVzdWx0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIGRvY3VtZW50LmRhdGEgPSBkYXRhXG4gICAgaWYgKGluY2x1ZGVkLmxlbmd0aCkge1xuICAgICAgZG9jdW1lbnQuaW5jbHVkZWQgPSBpbmNsdWRlZFxuICAgIH1cbiAgICByZXR1cm4gZG9jdW1lbnRcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm0gc291cmNlIGludG8gdGhlIFwicHJpbWFyeSBkYXRhXCIgb2YgdGhlIGRvY3VtZW50XG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3MuZG9jU2NoZW1hIC0gdGhlIHRvcCBsZXZlbCBzY2hlbWEgdXNlZCBmb3IgdHJhbnNmb3JtaW5nIHRoZSBkb2N1bWVudFxuICAgKiBAcGFyYW0gIHtPYmplY3R8T2JqZWN0W119IGFyZ3Muc291cmNlIC0gc291cmNlIGRhdGFcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzLm9wdGlvbnMgLSBmdW5jdGlvbiBsZXZlbCBvcHRpb25zXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5pbmNsdWRlIC0gaW5jbHVkZSBvYmplY3RcbiAgICogQHJldHVybiB7T2JqZWN0fE9iamVjdFtdfVxuICAgKi9cbiAgZnVuY3Rpb24gdHJhbnNmb3JtU291cmNlKGFyZ3MpIHtcbiAgICBjb25zdCB7IGRvY1NjaGVtYSwgc291cmNlLCBvcHRpb25zOiBvcHRzLCBpbmNsdWRlIH0gPSBhcmdzXG4gICAgLy8gVE9ETyBkZWZpbmUgaW5jbHVkZVxuICAgIGlmIChBcnJheS5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2UubWFwKGRhdGEgPT4gdHJhbnNmb3JtRGF0YSh7IGRvY1NjaGVtYSwgc291cmNlLCBvcHRpb25zOiBvcHRzLCBkYXRhLCBpbmNsdWRlIH0pKVxuICAgIH1cbiAgICByZXR1cm4gdHJhbnNmb3JtRGF0YSh7IGRvY1NjaGVtYSwgc291cmNlLCBvcHRpb25zOiBvcHRzLCBkYXRhOiBzb3VyY2UsIGluY2x1ZGUgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm0gYSBzaW5nbGUgc291cmNlIG9iamVjdCBpbnRvIGEgdmFsaWQgcmVzb3VyY2Ugb2JqZWN0XG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJnXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5kb2NTY2hlbWEgLSB0aGUgdG9wIGxldmVsIHNjaGVtYSB1c2VkIGZvciB0cmFuc2Zvcm1pbmcgdGhlIGRvY3VtZW50XG4gICAqIEBwYXJhbSAge09iamVjdHxPYmplY3RbXX0gYXJncy5zb3VyY2UgLSBzb3VyY2UgZGF0YVxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3Mub3B0aW9ucyAtIGZ1bmN0aW9uIGxldmVsIG9wdGlvbnNcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzLmRhdGEgLSBjdXJyZW50IHNvdXJjZSBvYmplY3RcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzLmluY2x1ZGUgLSBpbmNsdWRlIG9iamVjdFxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IFthcmdzLl90eXBlXSAtIChmb3IgdXNlIGJ5IHRyYW5zZm9ybVJlbGF0aW9uc2hpcERhdGEpXG4gICAqIEBwYXJhbSAge1N0cmluZ30gW2FyZ3MuX2lkXSAtIChmb3IgdXNlIGJ5IHRyYW5zZm9ybVJlbGF0aW9uc2hpcERhdGEpXG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICovXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoYXJncykge1xuICAgIGNvbnN0IHsgZG9jU2NoZW1hLCBzb3VyY2UsIG9wdGlvbnMsIGRhdGEsIGluY2x1ZGUsIF90eXBlLCBfaWQgfSA9IGFyZ3NcbiAgICAvLyBjYWxsIGRhdGFTY2hlbWEgaWYgZGVmaW5lZCBhbmQgc3dpdGNoIGNvbnRleHRzIGlmIG5lY2Vzc2FyeVxuICAgIGxldCBkYXRhU2NoZW1hID0gZG9jU2NoZW1hXG4gICAgaWYgKGlzRnVuY3Rpb24oZG9jU2NoZW1hLnNjaGVtYS5kYXRhLmRhdGFTY2hlbWEpKSB7XG4gICAgICBjb25zdCBuYW1lID0gZG9jU2NoZW1hLnNjaGVtYS5kYXRhLmRhdGFTY2hlbWEoeyBzb3VyY2UsIGRhdGEsIG9wdGlvbnMgfSlcbiAgICAgIGlmIChuYW1lICE9PSBkb2NTY2hlbWEubmFtZSkge1xuICAgICAgICBkYXRhU2NoZW1hID0gcmVnaXN0cnlbbmFtZV1cbiAgICAgICAgaWYgKCFkYXRhU2NoZW1hKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIFNjaGVtYTogJHtuYW1lfWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc3RhdGUgPSB7fVxuICAgIGNvbnN0IHBhcmFtcyA9IHsgZGF0YVNjaGVtYSwgc291cmNlLCBvcHRpb25zLCBkYXRhLCBzdGF0ZSB9XG4gICAgY29uc3QgdHlwZSA9IHBhcmFtcy50eXBlID0gX3R5cGUgfHwgZ2V0VHlwZShwYXJhbXMpXG4gICAgY29uc3QgaWQgPSBwYXJhbXMuaWQgPSBfaWQgfHwgZ2V0SWQocGFyYW1zKVxuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBwYXJhbXMuYXR0cmlidXRlcyA9IGdldEF0dHJpYnV0ZXMocGFyYW1zKVxuICAgIGNvbnN0IHJlbGF0aW9uc2hpcHMgPSBwYXJhbXMucmVsYXRpb25zaGlwcyA9IGdldFJlbGF0aW9uc2hpcHMoeyBpbmNsdWRlLCAuLi5wYXJhbXMgfSlcbiAgICBjb25zdCBsaW5rcyA9IHBhcmFtcy5saW5rcyA9IGdldExpbmtzKHBhcmFtcylcbiAgICBjb25zdCBtZXRhID0gcGFyYW1zLm1ldGEgPSBnZXRNZXRhKHBhcmFtcylcbiAgICAvLyBidWlsZCByZXN1bHRpbmcgcmVzb3VyY2VcbiAgICBjb25zdCByZXNvdXJjZSA9IHsgdHlwZSwgaWQgfVxuICAgIGlmIChpc09iamVjdChhdHRyaWJ1dGVzKSkge1xuICAgICAgcmVzb3VyY2UuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXNcbiAgICB9XG4gICAgaWYgKGlzT2JqZWN0KHJlbGF0aW9uc2hpcHMpKSB7XG4gICAgICByZXNvdXJjZS5yZWxhdGlvbnNoaXBzID0gcmVsYXRpb25zaGlwc1xuICAgIH1cbiAgICBpZiAoaXNPYmplY3QobWV0YSkpIHtcbiAgICAgIHJlc291cmNlLm1ldGEgPSBtZXRhXG4gICAgfVxuICAgIGlmIChpc09iamVjdChsaW5rcykpIHtcbiAgICAgIHJlc291cmNlLmxpbmtzID0gbGlua3NcbiAgICB9XG4gICAgcmV0dXJuIHJlc291cmNlXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSByZXNvdXJjZSB0eXBlIGZvciB0aGUgY3VycmVudCBzb3VyY2Ugb2JqZWN0XG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3MuZGF0YVNjaGVtYVxuICAgKiBAcGFyYW0gIHtPYmplY3R8T2JqZWN0W119IGFyZ3Muc291cmNlXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5vcHRpb25zXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5kYXRhXG4gICAqIEByZXR1cm4ge1N0cmluZ30gdHlwZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0VHlwZShhcmdzKSB7XG4gICAgY29uc3QgeyBkYXRhU2NoZW1hLCAuLi5vdGhlcnMgfSA9IGFyZ3NcbiAgICBjb25zdCB0eXBlID0gZGF0YVNjaGVtYS5zY2hlbWEuZGF0YS50eXBlKG90aGVycylcbiAgICBpZiAoIWlzU3RyaW5nKHR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHJhbnNmb3JtRXJyb3IoJ0ludmFsaWQgdHlwZScsIGFyZ3MpXG4gICAgfVxuICAgIHJldHVybiB0eXBlXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSByZXNvdXJjZSBpZCBmb3IgdGhlIGN1cnJlbnQgc291cmNlIG9iamVjdFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3NcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzLmRhdGFTY2hlbWFcbiAgICogQHBhcmFtICB7T2JqZWN0fE9iamVjdFtdfSBhcmdzLnNvdXJjZVxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3Mub3B0aW9uc1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3MuZGF0YVxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGFyZ3MudHlwZVxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IGlkXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBmdW5jdGlvbiBnZXRJZChhcmdzKSB7XG4gICAgY29uc3QgeyBkYXRhU2NoZW1hLCAuLi5vdGhlcnMgfSA9IGFyZ3NcbiAgICBjb25zdCBpZCA9IGRhdGFTY2hlbWEuc2NoZW1hLmRhdGEuaWQob3RoZXJzKVxuICAgIGlmICghaXNTdHJpbmcoaWQpKSB7XG4gICAgICB0aHJvdyBuZXcgVHJhbnNmb3JtRXJyb3IoJ0ludmFsaWQgaWQnLCBhcmdzKVxuICAgIH1cbiAgICByZXR1cm4gaWRcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHJlc291cmNlIGF0dHJpYnV0ZXMgb2JqZWN0IGZvciB0aGUgY3VycmVudCBzb3VyY2Ugb2JqZWN0XG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3MuZGF0YVNjaGVtYVxuICAgKiBAcGFyYW0gIHtPYmplY3R8T2JqZWN0W119IGFyZ3Muc291cmNlXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5vcHRpb25zXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5kYXRhXG4gICAqIEBwYXJhbSAge1N0cmluZ30gYXJncy50eXBlXG4gICAqIEBwYXJhbSAge1N0cmluZ30gYXJncy5pZFxuICAgKiBAcmV0dXJuIHtPYmplY3R9IGF0dHJpYnV0ZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGZ1bmN0aW9uIGdldEF0dHJpYnV0ZXMoYXJncykge1xuICAgIGNvbnN0IHsgZGF0YVNjaGVtYSwgLi4ub3RoZXJzIH0gPSBhcmdzXG4gICAgaWYgKGRhdGFTY2hlbWEuc2NoZW1hLmRhdGEuYXR0cmlidXRlcykge1xuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGRhdGFTY2hlbWEuc2NoZW1hLmRhdGEuYXR0cmlidXRlcyhvdGhlcnMpXG4gICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSByZXNvdXJjZSByZWxhdGlvbnNoaXBzIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgc291cmNlIG9iamVjdFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3NcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzLmRhdGFTY2hlbWFcbiAgICogQHBhcmFtICB7T2JqZWN0fE9iamVjdFtdfSBhcmdzLnNvdXJjZVxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3Mub3B0aW9uc1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3MuZGF0YVxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGFyZ3MudHlwZVxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGFyZ3MuaWRcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzLmF0dHJpYnV0ZXNcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzLmluY2x1ZGVcbiAgICogQHJldHVybiB7T2JqZWN0fSByZWxhdGlvbnNoaXBzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBmdW5jdGlvbiBnZXRSZWxhdGlvbnNoaXBzKGFyZ3MpIHtcbiAgICBjb25zdCB7IGRhdGFTY2hlbWEsIC4uLm90aGVycyB9ID0gYXJnc1xuICAgIGNvbnN0IHJlbFNjaGVtYSA9IGRhdGFTY2hlbWEuc2NoZW1hLmRhdGEucmVsYXRpb25zaGlwc1xuICAgIGlmIChyZWxTY2hlbWEpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyZWxTY2hlbWEpXG4gICAgICBjb25zdCByZWxhdGlvbnNoaXBzID0ga2V5cy5yZWR1Y2UoKG1lbW8sIGtleSkgPT4ge1xuICAgICAgICBjb25zdCBmbiA9IHJlbFNjaGVtYVtrZXldXG4gICAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IGdldFJlbGF0aW9uc2hpcCh7IGZuLCAuLi5vdGhlcnMgfSlcbiAgICAgICAgaWYgKGlzT2JqZWN0KHJlbGF0aW9uc2hpcCkpIHtcbiAgICAgICAgICBtZW1vW2tleV0gPSByZWxhdGlvbnNoaXBcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVtb1xuICAgICAgfSwge30pXG4gICAgICBpZiAoIU9iamVjdC5rZXlzKHJlbGF0aW9uc2hpcHMpLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVsYXRpb25zaGlwc1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSByZXNvdXJjZSByZWxhdGlvbnNoaXAgb2JqZWN0IGZvciB0aGUgY3VycmVudCByZWxhdGlvbnNoaXAgb2YgdGhlXG4gICAqIGN1cnJlbnQgc291cmNlIG9iamVjdFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3NcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzLmZuXG4gICAqIEBwYXJhbSAge09iamVjdHxPYmplY3RbXX0gYXJncy5zb3VyY2VcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzLm9wdGlvbnNcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzLmRhdGFcbiAgICogQHBhcmFtICB7U3RyaW5nfSBhcmdzLnR5cGVcbiAgICogQHBhcmFtICB7U3RyaW5nfSBhcmdzLmlkXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5hdHRyaWJ1dGVzXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5pbmNsdWRlXG4gICAqIEByZXR1cm4ge09iamVjdH0gcmVsYXRpb25zaGlwXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBmdW5jdGlvbiBnZXRSZWxhdGlvbnNoaXAoYXJncykge1xuICAgIGNvbnN0IHsgZm4sIGluY2x1ZGUsIC4uLm90aGVycyB9ID0gYXJnc1xuICAgIGNvbnN0IHJlc3VsdCA9IGZuKG90aGVycylcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG4gICAgY29uc3QgeyBtZXRhLCBsaW5rcywgZGF0YSB9ID0gcmVzdWx0XG4gICAgY29uc3QgaW52YWxpZERhdGEgPSAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCdcbiAgICBpZiAoIWxpbmtzICYmICFtZXRhICYmIGludmFsaWREYXRhKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IHt9XG4gICAgaWYgKCFpbnZhbGlkRGF0YSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgcmVsYXRpb25zaGlwLmRhdGEgPSBkYXRhLm1hcChpdGVtID0+IHRyYW5zZm9ybVJlbGF0aW9uc2hpcERhdGEoe1xuICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgc291cmNlOiBhcmdzLnNvdXJjZSxcbiAgICAgICAgICBvcHRpb25zOiBhcmdzLm9wdGlvbnMsXG4gICAgICAgICAgaW5jbHVkZSxcbiAgICAgICAgfSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWxhdGlvbnNoaXAuZGF0YSA9IHRyYW5zZm9ybVJlbGF0aW9uc2hpcERhdGEoe1xuICAgICAgICAgIGl0ZW06IGRhdGEsXG4gICAgICAgICAgc291cmNlOiBhcmdzLnNvdXJjZSxcbiAgICAgICAgICBvcHRpb25zOiBhcmdzLm9wdGlvbnMsXG4gICAgICAgICAgaW5jbHVkZSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzT2JqZWN0KG1ldGEpKSB7XG4gICAgICByZWxhdGlvbnNoaXAubWV0YSA9IG1ldGFcbiAgICB9XG4gICAgaWYgKGlzT2JqZWN0KGxpbmtzKSkge1xuICAgICAgcmVsYXRpb25zaGlwLmxpbmtzID0gbGlua3NcbiAgICB9XG4gICAgcmV0dXJuIHJlbGF0aW9uc2hpcFxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGF0YSBmb3IgdGhlIGN1cnJlbnQgcmVsYXRpb25zaGlwIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgc291cmNlXG4gICAqIG9iamVjdFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3NcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzLml0ZW0gLSB0aGUgY3VycmVudCBkYXRhIGl0ZW1cbiAgICogQHBhcmFtICB7T2JqZWN0fE9iamVjdFtdfSBhcmdzLnNvdXJjZVxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFyZ3Mub3B0aW9uc1xuICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gYXJncy5pbmNsdWRlXG4gICAqIEByZXR1cm4ge09iamVjdH0gZGF0YVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gdHJhbnNmb3JtUmVsYXRpb25zaGlwRGF0YShhcmdzKSB7XG4gICAgY29uc3QgeyBpdGVtLCBzb3VyY2UsIG9wdGlvbnMsIGluY2x1ZGUgfSA9IGFyZ3NcbiAgICBjb25zdCB7IG5hbWUsIGRhdGEsIGluY2x1ZGVkLCBtZXRhIH0gPSBpdGVtXG4gICAgaWYgKCFpc1N0cmluZyhuYW1lKSB8fCAhcmVnaXN0cnlbbmFtZV0pIHtcbiAgICAgIHRocm93IG5ldyBUcmFuc2Zvcm1FcnJvcihgTWlzc2luZyBTY2hlbWE6ICR7bmFtZX1gLCBhcmdzKVxuICAgIH1cbiAgICBjb25zdCByZWxTY2hlbWEgPSByZWdpc3RyeVtuYW1lXVxuICAgIGNvbnN0IHR5cGUgPSBnZXRUeXBlKHsgZGF0YVNjaGVtYTogcmVsU2NoZW1hLCBzb3VyY2UsIG9wdGlvbnMsIGRhdGEgfSlcbiAgICBjb25zdCBpZCA9IGdldElkKHsgZGF0YVNjaGVtYTogcmVsU2NoZW1hLCBzb3VyY2UsIG9wdGlvbnMsIGRhdGEgfSlcbiAgICBjb25zdCByZXN1bHQgPSB7IHR5cGUsIGlkIH1cbiAgICBpZiAoaXNPYmplY3QobWV0YSkpIHtcbiAgICAgIHJlc3VsdC5tZXRhID0gbWV0YVxuICAgIH1cbiAgICBpZiAoaW5jbHVkZWQgPT09IHRydWUgJiYgIWluY2x1ZGUuZXhpc3RzKHsgdHlwZSwgaWQgfSkpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gdHJhbnNmb3JtRGF0YSh7XG4gICAgICAgIGRvY1NjaGVtYTogcmVsU2NoZW1hLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGluY2x1ZGUsXG4gICAgICAgIF90eXBlOiB0eXBlLFxuICAgICAgICBfaWQ6IGlkLFxuICAgICAgfSlcbiAgICAgIGluY2x1ZGUuaW5jbHVkZShyZXNvdXJjZSlcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcmVzb3VyY2UgbGlua3MgZm9yIHRoZSBjdXJyZW50IHNvdXJjZSBvYmplY3RcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5kYXRhU2NoZW1hXG4gICAqIEBwYXJhbSAge09iamVjdHxPYmplY3RbXX0gYXJncy5zb3VyY2VcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzLm9wdGlvbnNcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzLmRhdGFcbiAgICogQHBhcmFtICB7U3RyaW5nfSBhcmdzLnR5cGVcbiAgICogQHBhcmFtICB7U3RyaW5nfSBhcmdzLmlkXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5hdHRyaWJ1dGVzXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5yZWxhdGlvbnNoaXBzXG4gICAqIEByZXR1cm4ge09iamVjdH0gbGlua3NcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGZ1bmN0aW9uIGdldExpbmtzKGFyZ3MpIHtcbiAgICBjb25zdCB7IGRhdGFTY2hlbWEsIC4uLm90aGVycyB9ID0gYXJnc1xuICAgIGlmIChkYXRhU2NoZW1hLnNjaGVtYS5kYXRhLmxpbmtzKSB7XG4gICAgICByZXR1cm4gZGF0YVNjaGVtYS5zY2hlbWEuZGF0YS5saW5rcyhvdGhlcnMpXG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHJlc291cmNlIG1ldGEgZm9yIHRoZSBjdXJyZW50IHNvdXJjZSBvYmplY3RcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5kYXRhU2NoZW1hXG4gICAqIEBwYXJhbSAge09iamVjdHxPYmplY3RbXX0gYXJncy5zb3VyY2VcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzLm9wdGlvbnNcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhcmdzLmRhdGFcbiAgICogQHBhcmFtICB7U3RyaW5nfSBhcmdzLnR5cGVcbiAgICogQHBhcmFtICB7U3RyaW5nfSBhcmdzLmlkXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5hdHRyaWJ1dGVzXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5yZWxhdGlvbnNoaXBzXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXJncy5saW5rc1xuICAgKiBAcmV0dXJuIHtPYmplY3R9IG1ldGFcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGZ1bmN0aW9uIGdldE1ldGEoYXJncykge1xuICAgIGNvbnN0IHsgZGF0YVNjaGVtYSwgLi4ub3RoZXJzIH0gPSBhcmdzXG4gICAgaWYgKGRhdGFTY2hlbWEuc2NoZW1hLmRhdGEubWV0YSkge1xuICAgICAgcmV0dXJuIGRhdGFTY2hlbWEuc2NoZW1hLmRhdGEubWV0YShvdGhlcnMpXG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gaW5jbHVkZSBvYmplY3RcbiAgICogQHJldHVybiB7T2JqZWN0fSBpbmNsdWRlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBmdW5jdGlvbiBjcmVhdGVJbmNsdWRlKCkge1xuICAgIGNvbnN0IGluY2x1ZGVkID0gW11cbiAgICBjb25zdCBhbHJlYWR5SW5jbHVkZWQgPSB7fVxuICAgIHJldHVybiB7XG4gICAgICAvKipcbiAgICAgICAqIERldGVybWluZSB3aGV0aGVyIG9yIG5vdCBhIGdpdmVuIHJlc291cmNlIGhhcyBhbHJlYWR5IGJlZW4gaW5jbHVkZWRcbiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdzXG4gICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYXJncy50eXBlXG4gICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYXJncy5pZFxuICAgICAgICogQHJldHVybiB7Qm9vbGVhbn1cbiAgICAgICAqL1xuICAgICAgZXhpc3RzKHsgdHlwZSwgaWQgfSkge1xuICAgICAgICByZXR1cm4gYWxyZWFkeUluY2x1ZGVkW2Ake3R5cGV9OiR7aWR9YF1cbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogQWRkIGFuIGluY2x1ZGVkIHJlc291cmNlIHRvIHRoZSBpbmNsdWRlZCBzZWN0aW9uIG9mIHRoZSBkb2N1bWVudFxuICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJlc291cmNlXG4gICAgICAgKiBAcmV0dXJuIHtVbmRlZmluZWR9XG4gICAgICAgKi9cbiAgICAgIGluY2x1ZGUocmVzb3VyY2UpIHtcbiAgICAgICAgYWxyZWFkeUluY2x1ZGVkW2Ake3Jlc291cmNlLnR5cGV9OiR7cmVzb3VyY2UuaWR9YF0gPSB0cnVlXG4gICAgICAgIGluY2x1ZGVkLnB1c2gocmVzb3VyY2UpXG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIFJldHVybiB0aGUgaW5jbHVkZWQgYXJyYXkgaW4gaXRzIGN1cnJlbnQgc3RhdGVcbiAgICAgICAqIEByZXR1cm4ge09iamVjdFtdfVxuICAgICAgICovXG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiBpbmNsdWRlZFxuICAgICAgfSxcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHJlZ2lzdGVyLFxuICAgIHRyYW5zZm9ybSxcbiAgfVxufVxuIl19 |
{ | ||
"name": "transformalizer", | ||
"version": "0.1.4", | ||
"version": "1.0.0-beta.0", | ||
"description": "a bare bones node module for building JSON API v1.0 compliant payloads", | ||
@@ -69,5 +69,4 @@ "main": "./dist/transformalizer.js", | ||
"dependencies": { | ||
"clone": "^2.1.0", | ||
"source-map-support": "^0.4.11" | ||
} | ||
} |
@@ -117,6 +117,6 @@ # transformalizer | ||
{ | ||
links({ source, options, document }) { | ||
links({ source, options, data, included }) { | ||
return { /* top level links */ }; | ||
}, | ||
meta({ source, options, document }) { | ||
meta({ source, options, data, included }) { | ||
return { /* top level meta */ }; | ||
@@ -128,9 +128,9 @@ }, | ||
}, | ||
type({ source, options, data }) { | ||
type({ source, options, data, state }) { | ||
return 'my-type'; | ||
}, | ||
id({ source, options, data, type }) { | ||
id({ source, options, data, type, state }) { | ||
return data.id.toString(); | ||
}, | ||
attributes({ source, options, data, type, id }) { | ||
attributes({ source, options, data, type, id, state }) { | ||
return { /* resource attributes */ } | ||
@@ -140,3 +140,3 @@ }, | ||
// .. | ||
[key]({ source, options, data, type, id, attributes }) { | ||
[key]({ source, options, data, type, id, attributes, state }) { | ||
return { | ||
@@ -154,6 +154,6 @@ data: { | ||
}, | ||
links({ source, options, data, type, id, attributes, relationships }) { | ||
links({ source, options, data, type, id, attributes, relationships, state }) { | ||
return { /* resource links if available */ } | ||
}, | ||
meta({ source, options, data, type, id, attributes, relationships }) { | ||
meta({ source, options, data, type, id, attributes, relationships, state }) { | ||
return { /* resource meta if available */ } | ||
@@ -206,2 +206,3 @@ } | ||
| params.data | Object | the current item being processed when source is an array, or the source itself if not an array | | ||
| params.state | Object | the recommended namespace for passing information between data level methods, useful for storing calculated data that is needed in multiple places | | ||
@@ -222,2 +223,3 @@ --- | ||
| params.type | String | the resource type determined in the `data.type` step | | ||
| params.state | Object | the recommended namespace for passing information between data level methods, useful for storing calculated data that is needed in multiple places | | ||
@@ -239,2 +241,3 @@ --- | ||
| params.id | String | the id of the current resource, determined in the `data.id` step | | ||
| params.state | Object | the recommended namespace for passing information between data level methods, useful for storing calculated data that is needed in multiple places | | ||
@@ -267,2 +270,3 @@ --- | ||
| params.attributes | Object | the attributes object of the current resource, determined in the `data.attributes` step | | ||
| params.state | Object | the recommended namespace for passing information between data level methods, useful for storing calculated data that is needed in multiple places | | ||
@@ -286,2 +290,3 @@ --- | ||
| params.relationships | Object | the relationships object of the current resource, determined in the `data.relationships` step | | ||
| params.state | Object | the recommended namespace for passing information between data level methods, useful for storing calculated data that is needed in multiple places | | ||
@@ -306,2 +311,3 @@ --- | ||
| params.links | Object | the links object of the current resource, determined in the `data.links` step | | ||
| params.state | Object | the recommended namespace for passing information between data level methods, useful for storing calculated data that is needed in multiple places | | ||
@@ -308,0 +314,0 @@ --- |
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
76338
1
354
577
- Removedclone@^2.1.0
- Removedclone@2.1.2(transitive)