UNPKG

speckoloo

Version:
1,017 lines (981 loc) 28.9 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var cov_slr7a81u6 = function () { var path = '/home/henrique/labs/speckoloo/src/build-schema.js', hash = '2765f65855cd47bdf4b5619cf2c01da7d4e1fd81', global = new Function('return this')(), gcv = '__coverage__', coverageData = { path: '/home/henrique/labs/speckoloo/src/build-schema.js', statementMap: { '0': { start: { line: 5, column: 24 }, end: { line: 5, column: 57 } }, '1': { start: { line: 7, column: 25 }, end: { line: 14, column: 5 } }, '2': { start: { line: 9, column: 52 }, end: { line: 12, column: 7 } }, '3': { start: { line: 16, column: 2 }, end: { line: 19, column: 3 } }, '4': { start: { line: 23, column: 2 }, end: { line: 36, column: 5 } }, '5': { start: { line: 25, column: 98 }, end: { line: 34, column: 7 } }, '6': { start: { line: 45, column: 6 }, end: { line: 45, column: 23 } }, '7': { start: { line: 47, column: 2 }, end: { line: 49, column: 3 } }, '8': { start: { line: 48, column: 4 }, end: { line: 48, column: 143 } }, '9': { start: { line: 51, column: 22 }, end: { line: 53, column: 43 } }, '10': { start: { line: 55, column: 20 }, end: { line: 55, column: 44 } }, '11': { start: { line: 58, column: 29 }, end: { line: 58, column: 53 } }, '12': { start: { line: 59, column: 25 }, end: { line: 68, column: 5 } }, '13': { start: { line: 61, column: 48 }, end: { line: 66, column: 7 } }, '14': { start: { line: 70, column: 29 }, end: { line: 70, column: 59 } }, '15': { start: { line: 71, column: 25 }, end: { line: 80, column: 5 } }, '16': { start: { line: 73, column: 30 }, end: { line: 78, column: 7 } }, '17': { start: { line: 82, column: 2 }, end: { line: 96, column: 5 } }, '18': { start: { line: 85, column: 8 }, end: { line: 94, column: 9 } }, '19': { start: { line: 100, column: 2 }, end: { line: 102, column: 3 } }, '20': { start: { line: 101, column: 4 }, end: { line: 101, column: 33 } }, '21': { start: { line: 104, column: 2 }, end: { line: 104, column: 15 } }, '22': { start: { line: 108, column: 2 }, end: { line: 110, column: 3 } }, '23': { start: { line: 109, column: 4 }, end: { line: 109, column: 33 } }, '24': { start: { line: 112, column: 2 }, end: { line: 112, column: 15 } } }, fnMap: { '0': { name: 'buildSchema', decl: { start: { line: 4, column: 24 }, end: { line: 4, column: 35 } }, loc: { start: { line: 4, column: 59 }, end: { line: 20, column: 1 } }, line: 4 }, '1': { name: '(anonymous_1)', decl: { start: { line: 9, column: 6 }, end: { line: 9, column: 7 } }, loc: { start: { line: 9, column: 52 }, end: { line: 12, column: 7 } }, line: 9 }, '2': { name: 'fillDefaultProperties', decl: { start: { line: 22, column: 9 }, end: { line: 22, column: 30 } }, loc: { start: { line: 22, column: 52 }, end: { line: 37, column: 1 } }, line: 22 }, '3': { name: '(anonymous_3)', decl: { start: { line: 25, column: 6 }, end: { line: 25, column: 7 } }, loc: { start: { line: 25, column: 98 }, end: { line: 34, column: 7 } }, line: 25 }, '4': { name: 'applyOperators', decl: { start: { line: 39, column: 9 }, end: { line: 39, column: 23 } }, loc: { start: { line: 39, column: 72 }, end: { line: 97, column: 1 } }, line: 39 }, '5': { name: '(anonymous_5)', decl: { start: { line: 61, column: 6 }, end: { line: 61, column: 7 } }, loc: { start: { line: 61, column: 48 }, end: { line: 66, column: 7 } }, line: 61 }, '6': { name: '(anonymous_6)', decl: { start: { line: 73, column: 6 }, end: { line: 73, column: 7 } }, loc: { start: { line: 73, column: 30 }, end: { line: 78, column: 7 } }, line: 73 }, '7': { name: '(anonymous_7)', decl: { start: { line: 84, column: 6 }, end: { line: 84, column: 7 } }, loc: { start: { line: 85, column: 8 }, end: { line: 94, column: 9 } }, line: 85 }, '8': { name: 'applyInclude', decl: { start: { line: 99, column: 9 }, end: { line: 99, column: 21 } }, loc: { start: { line: 99, column: 41 }, end: { line: 105, column: 1 } }, line: 99 }, '9': { name: 'applyExclude', decl: { start: { line: 107, column: 9 }, end: { line: 107, column: 21 } }, loc: { start: { line: 107, column: 41 }, end: { line: 113, column: 1 } }, line: 107 } }, branchMap: { '0': { loc: { start: { line: 32, column: 21 }, end: { line: 32, column: 42 } }, type: 'binary-expr', locations: [{ start: { line: 32, column: 21 }, end: { line: 32, column: 30 } }, { start: { line: 32, column: 34 }, end: { line: 32, column: 42 } }], line: 32 }, '1': { loc: { start: { line: 41, column: 4 }, end: { line: 41, column: 17 } }, type: 'default-arg', locations: [{ start: { line: 41, column: 15 }, end: { line: 41, column: 17 } }], line: 41 }, '2': { loc: { start: { line: 42, column: 4 }, end: { line: 42, column: 17 } }, type: 'default-arg', locations: [{ start: { line: 42, column: 15 }, end: { line: 42, column: 17 } }], line: 42 }, '3': { loc: { start: { line: 43, column: 4 }, end: { line: 43, column: 14 } }, type: 'default-arg', locations: [{ start: { line: 43, column: 12 }, end: { line: 43, column: 14 } }], line: 43 }, '4': { loc: { start: { line: 44, column: 4 }, end: { line: 44, column: 16 } }, type: 'default-arg', locations: [{ start: { line: 44, column: 14 }, end: { line: 44, column: 16 } }], line: 44 }, '5': { loc: { start: { line: 47, column: 2 }, end: { line: 49, column: 3 } }, type: 'if', locations: [{ start: { line: 47, column: 2 }, end: { line: 49, column: 3 } }, { start: { line: 47, column: 2 }, end: { line: 49, column: 3 } }], line: 47 }, '6': { loc: { start: { line: 47, column: 6 }, end: { line: 47, column: 48 } }, type: 'binary-expr', locations: [{ start: { line: 47, column: 6 }, end: { line: 47, column: 25 } }, { start: { line: 47, column: 29 }, end: { line: 47, column: 48 } }], line: 47 }, '7': { loc: { start: { line: 51, column: 22 }, end: { line: 53, column: 43 } }, type: 'cond-expr', locations: [{ start: { line: 52, column: 6 }, end: { line: 52, column: 43 } }, { start: { line: 53, column: 6 }, end: { line: 53, column: 43 } }], line: 51 }, '8': { loc: { start: { line: 100, column: 2 }, end: { line: 102, column: 3 } }, type: 'if', locations: [{ start: { line: 100, column: 2 }, end: { line: 102, column: 3 } }, { start: { line: 100, column: 2 }, end: { line: 102, column: 3 } }], line: 100 }, '9': { loc: { start: { line: 108, column: 2 }, end: { line: 110, column: 3 } }, type: 'if', locations: [{ start: { line: 108, column: 2 }, end: { line: 110, column: 3 } }, { start: { line: 108, column: 2 }, end: { line: 110, column: 3 } }], line: 108 } }, s: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0, '9': 0, '10': 0, '11': 0, '12': 0, '13': 0, '14': 0, '15': 0, '16': 0, '17': 0, '18': 0, '19': 0, '20': 0, '21': 0, '22': 0, '23': 0, '24': 0 }, f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0, '9': 0 }, b: { '0': [0, 0], '1': [0], '2': [0], '3': [0], '4': [0], '5': [0, 0], '6': [0, 0], '7': [0, 0], '8': [0, 0], '9': [0, 0] }, _coverageSchema: '332fd63041d2c1bcb487cc26dd0d5f7d97098a6c' }, coverage = global[gcv] || (global[gcv] = {}); if (coverage[path] && coverage[path].hash === hash) { return coverage[path]; } coverageData.hash = hash; return coverage[path] = coverageData; }(); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; exports.default = buildSchema; var _defaultValidators = require('./default-validators'); var _common = require('./common'); function _objectEntries(obj) { var entries = []; var keys = Object.keys(obj); for (var k = 0; k < keys.length; ++k) entries.push([keys[k], obj[keys[k]]]); return entries; } function buildSchema(definition, contexts) { cov_slr7a81u6.f[0]++; const defaultSchema = (cov_slr7a81u6.s[0]++, fillDefaultProperties(definition)); const contextSchemas = (cov_slr7a81u6.s[1]++, _objectEntries(contexts).reduce((acc, [contextName, contextDefinition]) => { cov_slr7a81u6.f[1]++; cov_slr7a81u6.s[2]++; return _extends({}, acc, { [contextName]: applyOperators(contextDefinition, defaultSchema, contextName) }); }, {})); cov_slr7a81u6.s[3]++; return _extends({ default: defaultSchema }, contextSchemas); } function fillDefaultProperties(propertyDefinition) { cov_slr7a81u6.f[2]++; cov_slr7a81u6.s[4]++; return _objectEntries(propertyDefinition).reduce((acc, [propertyName, { validator, factory, skippable, readOnly, default: _default }]) => { cov_slr7a81u6.f[3]++; cov_slr7a81u6.s[5]++; return _extends({}, acc, { [propertyName]: { default: _default, factory, readOnly, skippable: !!skippable, validator: (cov_slr7a81u6.b[0][0]++, validator) || (cov_slr7a81u6.b[0][1]++, _defaultValidators.allowAny) } }); }, {}); } function applyOperators(contextDefinition, defaultSchema, contextName) { cov_slr7a81u6.f[4]++; var _ref = (cov_slr7a81u6.s[6]++, contextDefinition), _ref$$exclude = _ref.$exclude; const $exclude = _ref$$exclude === undefined ? (cov_slr7a81u6.b[1][0]++, []) : _ref$$exclude; var _ref$$include = _ref.$include; const $include = _ref$$include === undefined ? (cov_slr7a81u6.b[2][0]++, []) : _ref$$include; var _ref$$skip = _ref.$skip; const $skip = _ref$$skip === undefined ? (cov_slr7a81u6.b[3][0]++, []) : _ref$$skip; var _ref$$modify = _ref.$modify; const $modify = _ref$$modify === undefined ? (cov_slr7a81u6.b[4][0]++, {}) : _ref$$modify; cov_slr7a81u6.s[7]++; if ((cov_slr7a81u6.b[6][0]++, $include.length > 0) && (cov_slr7a81u6.b[6][1]++, $exclude.length > 0)) { cov_slr7a81u6.b[5][0]++; cov_slr7a81u6.s[8]++; process.emitWarning(`Both $include and $exclude operators were used in context ${contextName}. Beware that $include will take precedence.`); } else { cov_slr7a81u6.b[5][1]++; } const finalSchema = (cov_slr7a81u6.s[9]++, $include.length > 0 ? (cov_slr7a81u6.b[7][0]++, applyInclude($include, defaultSchema)) : (cov_slr7a81u6.b[7][1]++, applyExclude($exclude, defaultSchema))); const finalKeys = (cov_slr7a81u6.s[10]++, Object.keys(finalSchema)); // @TODO: refactor this! const validatorsToModify = (cov_slr7a81u6.s[11]++, (0, _common.pick)($modify, finalKeys)); const validatorPatch = (cov_slr7a81u6.s[12]++, _objectEntries(validatorsToModify).reduce((acc, [propertyName, newValidator]) => { cov_slr7a81u6.f[5]++; cov_slr7a81u6.s[13]++; return _extends({}, acc, { [propertyName]: { validator: newValidator } }); }, {})); const skippablesToModify = (cov_slr7a81u6.s[14]++, (0, _common.intersection)($skip, finalKeys)); const skippablePatch = (cov_slr7a81u6.s[15]++, skippablesToModify.reduce((acc, propertyName) => { cov_slr7a81u6.f[6]++; cov_slr7a81u6.s[16]++; return _extends({}, acc, { [propertyName]: { skippable: true } }); }, {})); cov_slr7a81u6.s[17]++; return _objectEntries(finalSchema).reduce((acc, [key, definition]) => { cov_slr7a81u6.f[7]++; cov_slr7a81u6.s[18]++; return Object.assign(acc, { [key]: _extends({}, definition, validatorPatch[key], skippablePatch[key]) }); }, {}); } function applyInclude($include, schema) { cov_slr7a81u6.f[8]++; cov_slr7a81u6.s[19]++; if ($include.length > 0) { cov_slr7a81u6.b[8][0]++; cov_slr7a81u6.s[20]++; return (0, _common.pick)(schema, $include); } else { cov_slr7a81u6.b[8][1]++; } cov_slr7a81u6.s[21]++; return schema; } function applyExclude($exclude, schema) { cov_slr7a81u6.f[9]++; cov_slr7a81u6.s[22]++; if ($exclude.length > 0) { cov_slr7a81u6.b[9][0]++; cov_slr7a81u6.s[23]++; return (0, _common.omit)(schema, $exclude); } else { cov_slr7a81u6.b[9][1]++; } cov_slr7a81u6.s[24]++; return schema; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9idWlsZC1zY2hlbWEuanMiXSwibmFtZXMiOlsiYnVpbGRTY2hlbWEiLCJkZWZpbml0aW9uIiwiY29udGV4dHMiLCJkZWZhdWx0U2NoZW1hIiwiZmlsbERlZmF1bHRQcm9wZXJ0aWVzIiwiY29udGV4dFNjaGVtYXMiLCJyZWR1Y2UiLCJhY2MiLCJjb250ZXh0TmFtZSIsImNvbnRleHREZWZpbml0aW9uIiwiYXBwbHlPcGVyYXRvcnMiLCJkZWZhdWx0IiwicHJvcGVydHlEZWZpbml0aW9uIiwicHJvcGVydHlOYW1lIiwidmFsaWRhdG9yIiwiZmFjdG9yeSIsInNraXBwYWJsZSIsInJlYWRPbmx5IiwiX2RlZmF1bHQiLCIkZXhjbHVkZSIsIiRpbmNsdWRlIiwiJHNraXAiLCIkbW9kaWZ5IiwibGVuZ3RoIiwicHJvY2VzcyIsImVtaXRXYXJuaW5nIiwiZmluYWxTY2hlbWEiLCJhcHBseUluY2x1ZGUiLCJhcHBseUV4Y2x1ZGUiLCJmaW5hbEtleXMiLCJPYmplY3QiLCJrZXlzIiwidmFsaWRhdG9yc1RvTW9kaWZ5IiwidmFsaWRhdG9yUGF0Y2giLCJuZXdWYWxpZGF0b3IiLCJza2lwcGFibGVzVG9Nb2RpZnkiLCJza2lwcGFibGVQYXRjaCIsImtleSIsImFzc2lnbiIsInNjaGVtYSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QWYsQ0FITDtBQURGLEtBRkY7QUFTQyxHQVpBLEVBYUgsRUFiRyxDQUFQO0FBZUQ7O0FBRUQsU0FBU1YsWUFBVCxDQUF1QlAsUUFBdkIsRUFBaUNtQixNQUFqQyxFQUF5QztBQUFBO0FBQUE7O0FBQ3ZDLE1BQUluQixTQUFTRyxNQUFULEdBQWtCLENBQXRCLEVBQXlCO0FBQUE7QUFBQTs7QUFDdkIsV0FBTyxrQkFBS2dCLE1BQUwsRUFBYW5CLFFBQWIsQ0FBUDtBQUNELEdBRkQ7QUFBQTtBQUFBOztBQUR1QztBQUt2QyxTQUFPbUIsTUFBUDtBQUNEOztBQUVELFNBQVNYLFlBQVQsQ0FBdUJULFFBQXZCLEVBQWlDb0IsTUFBakMsRUFBeUM7QUFBQTtBQUFBOztBQUN2QyxNQUFJcEIsU0FBU0ksTUFBVCxHQUFrQixDQUF0QixFQUF5QjtBQUFBO0FBQUE7O0FBQ3ZCLFdBQU8sa0JBQUtnQixNQUFMLEVBQWFwQixRQUFiLENBQVA7QUFDRCxHQUZEO0FBQUE7QUFBQTs7QUFEdUM7QUFLdkMsU0FBT29CLE1BQVA7QUFDRCIsImZpbGUiOiJidWlsZC1zY2hlbWEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbGxvd0FueSB9IGZyb20gJy4vZGVmYXVsdC12YWxpZGF0b3JzJ1xuaW1wb3J0IHsgb21pdCwgcGljaywgaW50ZXJzZWN0aW9uIH0gZnJvbSAnLi9jb21tb24nXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkU2NoZW1hIChkZWZpbml0aW9uLCBjb250ZXh0cykge1xuICBjb25zdCBkZWZhdWx0U2NoZW1hID0gZmlsbERlZmF1bHRQcm9wZXJ0aWVzKGRlZmluaXRpb24pXG5cbiAgY29uc3QgY29udGV4dFNjaGVtYXMgPSBPYmplY3QuZW50cmllcyhjb250ZXh0cylcbiAgICAucmVkdWNlKFxuICAgICAgKGFjYywgWyBjb250ZXh0TmFtZSwgY29udGV4dERlZmluaXRpb24gXSkgPT4gKHtcbiAgICAgICAgLi4uYWNjLFxuICAgICAgICBbY29udGV4dE5hbWVdOiBhcHBseU9wZXJhdG9ycyhjb250ZXh0RGVmaW5pdGlvbiwgZGVmYXVsdFNjaGVtYSwgY29udGV4dE5hbWUpXG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKVxuXG4gIHJldHVybiB7XG4gICAgZGVmYXVsdDogZGVmYXVsdFNjaGVtYSxcbiAgICAuLi5jb250ZXh0U2NoZW1hc1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbGxEZWZhdWx0UHJvcGVydGllcyAocHJvcGVydHlEZWZpbml0aW9uKSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhwcm9wZXJ0eURlZmluaXRpb24pXG4gICAgLnJlZHVjZShcbiAgICAgIChhY2MsIFsgcHJvcGVydHlOYW1lLCB7IHZhbGlkYXRvciwgZmFjdG9yeSwgc2tpcHBhYmxlLCByZWFkT25seSwgZGVmYXVsdDogX2RlZmF1bHQgfSBdKSA9PiAoe1xuICAgICAgICAuLi5hY2MsXG4gICAgICAgIFtwcm9wZXJ0eU5hbWVdOiB7XG4gICAgICAgICAgZGVmYXVsdDogX2RlZmF1bHQsXG4gICAgICAgICAgZmFjdG9yeSxcbiAgICAgICAgICByZWFkT25seSxcbiAgICAgICAgICBza2lwcGFibGU6ICEhc2tpcHBhYmxlLFxuICAgICAgICAgIHZhbGlkYXRvcjogdmFsaWRhdG9yIHx8IGFsbG93QW55XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAge31cbiAgICApXG59XG5cbmZ1bmN0aW9uIGFwcGx5T3BlcmF0b3JzIChjb250ZXh0RGVmaW5pdGlvbiwgZGVmYXVsdFNjaGVtYSwgY29udGV4dE5hbWUpIHtcbiAgY29uc3Qge1xuICAgICRleGNsdWRlID0gW10sXG4gICAgJGluY2x1ZGUgPSBbXSxcbiAgICAkc2tpcCA9IFtdLFxuICAgICRtb2RpZnkgPSB7fVxuICB9ID0gY29udGV4dERlZmluaXRpb25cblxuICBpZiAoJGluY2x1ZGUubGVuZ3RoID4gMCAmJiAkZXhjbHVkZS5sZW5ndGggPiAwKSB7XG4gICAgcHJvY2Vzcy5lbWl0V2FybmluZyhgQm90aCAkaW5jbHVkZSBhbmQgJGV4Y2x1ZGUgb3BlcmF0b3JzIHdlcmUgdXNlZCBpbiBjb250ZXh0ICR7Y29udGV4dE5hbWV9LiBCZXdhcmUgdGhhdCAkaW5jbHVkZSB3aWxsIHRha2UgcHJlY2VkZW5jZS5gKVxuICB9XG5cbiAgY29uc3QgZmluYWxTY2hlbWEgPSAkaW5jbHVkZS5sZW5ndGggPiAwXG4gICAgPyBhcHBseUluY2x1ZGUoJGluY2x1ZGUsIGRlZmF1bHRTY2hlbWEpXG4gICAgOiBhcHBseUV4Y2x1ZGUoJGV4Y2x1ZGUsIGRlZmF1bHRTY2hlbWEpXG5cbiAgY29uc3QgZmluYWxLZXlzID0gT2JqZWN0LmtleXMoZmluYWxTY2hlbWEpXG5cbiAgLy8gQFRPRE86IHJlZmFjdG9yIHRoaXMhXG4gIGNvbnN0IHZhbGlkYXRvcnNUb01vZGlmeSA9IHBpY2soJG1vZGlmeSwgZmluYWxLZXlzKVxuICBjb25zdCB2YWxpZGF0b3JQYXRjaCA9IE9iamVjdC5lbnRyaWVzKHZhbGlkYXRvcnNUb01vZGlmeSlcbiAgICAucmVkdWNlKFxuICAgICAgKGFjYywgWyBwcm9wZXJ0eU5hbWUsIG5ld1ZhbGlkYXRvciBdKSA9PiAoe1xuICAgICAgICAuLi5hY2MsXG4gICAgICAgIFtwcm9wZXJ0eU5hbWVdOiB7XG4gICAgICAgICAgdmFsaWRhdG9yOiBuZXdWYWxpZGF0b3JcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICB7fVxuICAgIClcblxuICBjb25zdCBza2lwcGFibGVzVG9Nb2RpZnkgPSBpbnRlcnNlY3Rpb24oJHNraXAsIGZpbmFsS2V5cylcbiAgY29uc3Qgc2tpcHBhYmxlUGF0Y2ggPSBza2lwcGFibGVzVG9Nb2RpZnlcbiAgICAucmVkdWNlKFxuICAgICAgKGFjYywgcHJvcGVydHlOYW1lKSA9PiAoe1xuICAgICAgICAuLi5hY2MsXG4gICAgICAgIFtwcm9wZXJ0eU5hbWVdOiB7XG4gICAgICAgICAgc2tpcHBhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAge31cbiAgICApXG5cbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGZpbmFsU2NoZW1hKVxuICAgIC5yZWR1Y2UoXG4gICAgICAoYWNjLCBbIGtleSwgZGVmaW5pdGlvbiBdKSA9PlxuICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIGFjYyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBba2V5XToge1xuICAgICAgICAgICAgICAuLi5kZWZpbml0aW9uLFxuICAgICAgICAgICAgICAuLi52YWxpZGF0b3JQYXRjaFtrZXldLFxuICAgICAgICAgICAgICAuLi5za2lwcGFibGVQYXRjaFtrZXldXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAge31cbiAgICApXG59XG5cbmZ1bmN0aW9uIGFwcGx5SW5jbHVkZSAoJGluY2x1ZGUsIHNjaGVtYSkge1xuICBpZiAoJGluY2x1ZGUubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBwaWNrKHNjaGVtYSwgJGluY2x1ZGUpXG4gIH1cblxuICByZXR1cm4gc2NoZW1hXG59XG5cbmZ1bmN0aW9uIGFwcGx5RXhjbHVkZSAoJGV4Y2x1ZGUsIHNjaGVtYSkge1xuICBpZiAoJGV4Y2x1ZGUubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBvbWl0KHNjaGVtYSwgJGV4Y2x1ZGUpXG4gIH1cblxuICByZXR1cm4gc2NoZW1hXG59XG4iXX0=