UNPKG

@glimmer/runtime

Version:

Minimal runtime needed to render Glimmer templates

241 lines (188 loc) 23.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.runtimeContext = runtimeContext; exports.inTransaction = inTransaction; exports.default = exports.EnvironmentImpl = exports.TRANSACTION = void 0; var _env = require("@glimmer/env"); var _util = require("@glimmer/util"); var _validator = require("@glimmer/validator"); var _helper = require("./dom/helper"); var _program = require("@glimmer/program"); var _debugRenderTree = _interopRequireDefault(require("./debug-render-tree")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var _a; var TRANSACTION = (0, _util.symbol)('TRANSACTION'); exports.TRANSACTION = TRANSACTION; var TransactionImpl = /*#__PURE__*/function () { function TransactionImpl() { this.scheduledInstallModifiers = []; this.scheduledUpdateModifiers = []; this.createdComponents = []; this.updatedComponents = []; } var _proto = TransactionImpl.prototype; _proto.didCreate = function didCreate(component) { this.createdComponents.push(component); }; _proto.didUpdate = function didUpdate(component) { this.updatedComponents.push(component); }; _proto.scheduleInstallModifier = function scheduleInstallModifier(modifier) { this.scheduledInstallModifiers.push(modifier); }; _proto.scheduleUpdateModifier = function scheduleUpdateModifier(modifier) { this.scheduledUpdateModifiers.push(modifier); }; _proto.commit = function commit() { var createdComponents = this.createdComponents, updatedComponents = this.updatedComponents; for (var i = 0; i < createdComponents.length; i++) { var _createdComponents$i = createdComponents[i], _manager = _createdComponents$i.manager, _state = _createdComponents$i.state; _manager.didCreate(_state); } for (var _i = 0; _i < updatedComponents.length; _i++) { var _updatedComponents$_i = updatedComponents[_i], _manager2 = _updatedComponents$_i.manager, _state2 = _updatedComponents$_i.state; _manager2.didUpdate(_state2); } var scheduledInstallModifiers = this.scheduledInstallModifiers, scheduledUpdateModifiers = this.scheduledUpdateModifiers; // Prevent a transpilation issue we guard against in Ember, the // throw-if-closure-required issue var manager, state; for (var _i2 = 0; _i2 < scheduledInstallModifiers.length; _i2++) { var modifier = scheduledInstallModifiers[_i2]; manager = modifier.manager; state = modifier.state; var modifierTag = manager.getTag(state); if (modifierTag !== null) { var tag = (0, _validator.track)( // eslint-disable-next-line no-loop-func function () { return manager.install(state); }, _env.DEBUG && "- While rendering:\n (instance of a `" + (modifier.definition.resolvedName || manager.getDebugName(modifier.definition.state)) + "` modifier)"); (0, _validator.updateTag)(modifierTag, tag); } else { manager.install(state); } } for (var _i3 = 0; _i3 < scheduledUpdateModifiers.length; _i3++) { var _modifier = scheduledUpdateModifiers[_i3]; manager = _modifier.manager; state = _modifier.state; var _modifierTag = manager.getTag(state); if (_modifierTag !== null) { var _tag = (0, _validator.track)( // eslint-disable-next-line no-loop-func function () { return manager.update(state); }, _env.DEBUG && "- While rendering:\n (instance of a `" + (_modifier.definition.resolvedName || manager.getDebugName(_modifier.definition.state)) + "` modifier)"); (0, _validator.updateTag)(_modifierTag, _tag); } else { manager.update(state); } } }; return TransactionImpl; }(); var EnvironmentImpl = /*#__PURE__*/function () { function EnvironmentImpl(options, delegate) { this.delegate = delegate; this[_a] = null; // Delegate methods and values this.isInteractive = this.delegate.isInteractive; this.debugRenderTree = this.delegate.enableDebugTooling ? new _debugRenderTree.default() : undefined; if (options.appendOperations) { this.appendOperations = options.appendOperations; this.updateOperations = options.updateOperations; } else if (options.document) { this.appendOperations = new _helper.DOMTreeConstruction(options.document); this.updateOperations = new _helper.DOMChangesImpl(options.document); } else if (_env.DEBUG) { throw new Error('you must pass document or appendOperations to a new runtime'); } } var _proto2 = EnvironmentImpl.prototype; _proto2.getAppendOperations = function getAppendOperations() { return this.appendOperations; }; _proto2.getDOM = function getDOM() { return this.updateOperations; }; _proto2.begin = function begin() { var _b; false && (0, _util.assert)(!this[TRANSACTION], 'A glimmer transaction was begun, but one already exists. You may have a nested transaction, possibly caused by an earlier runtime exception while rendering. Please check your console for the stack trace of any prior exceptions.'); (_b = this.debugRenderTree) === null || _b === void 0 ? void 0 : _b.begin(); this[TRANSACTION] = new TransactionImpl(); }; _proto2.didCreate = function didCreate(component) { this.transaction.didCreate(component); }; _proto2.didUpdate = function didUpdate(component) { this.transaction.didUpdate(component); }; _proto2.scheduleInstallModifier = function scheduleInstallModifier(modifier) { if (this.isInteractive) { this.transaction.scheduleInstallModifier(modifier); } }; _proto2.scheduleUpdateModifier = function scheduleUpdateModifier(modifier) { if (this.isInteractive) { this.transaction.scheduleUpdateModifier(modifier); } }; _proto2.commit = function commit() { var _b; var transaction = this.transaction; this[TRANSACTION] = null; transaction.commit(); (_b = this.debugRenderTree) === null || _b === void 0 ? void 0 : _b.commit(); this.delegate.onTransactionCommit(); }; _createClass(EnvironmentImpl, [{ key: "transaction", get: function get() { return this[TRANSACTION]; } }]); return EnvironmentImpl; }(); exports.EnvironmentImpl = EnvironmentImpl; _a = TRANSACTION; function runtimeContext(options, delegate, artifacts, resolver) { return { env: new EnvironmentImpl(options, delegate), program: new _program.RuntimeProgramImpl(artifacts.constants, artifacts.heap), resolver: resolver }; } function inTransaction(env, cb) { if (!env[TRANSACTION]) { env.begin(); try { cb(); } finally { env.commit(); } } else { cb(); } } var _default = EnvironmentImpl; exports.default = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3J1bnRpbWUvbGliL2Vudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQWlCQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVPLElBQU0sV0FBVyxHQUFzQixrQkFBdkMsYUFBdUMsQ0FBdkM7OztJQUVQLGU7QUFBQSxXQUFBLGVBQUEsR0FBQTtBQUNTLFNBQUEseUJBQUEsR0FBQSxFQUFBO0FBQ0EsU0FBQSx3QkFBQSxHQUFBLEVBQUE7QUFDQSxTQUFBLGlCQUFBLEdBQUEsRUFBQTtBQUNBLFNBQUEsaUJBQUEsR0FBQSxFQUFBO0FBaUZSOzs7O1NBL0VDLFMsR0FBQSxTQUFBLFNBQUEsQ0FBQSxTQUFBLEVBQWdEO0FBQzlDLFNBQUEsaUJBQUEsQ0FBQSxJQUFBLENBQUEsU0FBQTs7O1NBR0YsUyxHQUFBLFNBQUEsU0FBQSxDQUFBLFNBQUEsRUFBZ0Q7QUFDOUMsU0FBQSxpQkFBQSxDQUFBLElBQUEsQ0FBQSxTQUFBOzs7U0FHRix1QixHQUFBLFNBQUEsdUJBQUEsQ0FBQSxRQUFBLEVBQWtEO0FBQ2hELFNBQUEseUJBQUEsQ0FBQSxJQUFBLENBQUEsUUFBQTs7O1NBR0Ysc0IsR0FBQSxTQUFBLHNCQUFBLENBQUEsUUFBQSxFQUFpRDtBQUMvQyxTQUFBLHdCQUFBLENBQUEsSUFBQSxDQUFBLFFBQUE7OztTQUdGLE0sR0FBQSxTQUFBLE1BQUEsR0FBTTtBQUFBLFFBQ0EsaUJBREEsR0FBQSxLQUFBLGlCQUFBO0FBQUEsUUFDcUIsaUJBRHJCLEdBQUEsS0FBQSxpQkFBQTs7QUFHSixTQUFLLElBQUksQ0FBQyxHQUFWLENBQUEsRUFBZ0IsQ0FBQyxHQUFHLGlCQUFpQixDQUFyQyxNQUFBLEVBQThDLENBQTlDLEVBQUEsRUFBbUQ7QUFBQSxVQUFBLG9CQUFBLEdBQ3hCLGlCQUFpQixDQURPLENBQ1AsQ0FETztBQUFBLFVB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QWMsQ0FBZDtBQUNEO0FBL0NILEdBQUEsQ0FBQSxDQUFBOztBQUFBLFNBQUEsZUFBQTtBQUFBLENBQUEsRUFBQTs7O0tBQ0csVzs7QUFpR0csU0FBQSxjQUFBLENBQUEsT0FBQSxFQUFBLFFBQUEsRUFBQSxTQUFBLEVBQUEsUUFBQSxFQUlxQjtBQUV6QixTQUFPO0FBQ0wsSUFBQSxHQUFHLEVBQUUsSUFBQSxlQUFBLENBQUEsT0FBQSxFQURBLFFBQ0EsQ0FEQTtBQUVMLElBQUEsT0FBTyxFQUFFLElBQUEsMkJBQUEsQ0FBdUIsU0FBUyxDQUFoQyxTQUFBLEVBQTRDLFNBQVMsQ0FGekQsSUFFSSxDQUZKO0FBR0wsSUFBQSxRQUFRLEVBQUU7QUFITCxHQUFQO0FBS0Q7O0FBRUssU0FBQSxhQUFBLENBQUEsR0FBQSxFQUFBLEVBQUEsRUFBd0Q7QUFDNUQsTUFBSSxDQUFDLEdBQUcsQ0FBUixXQUFRLENBQVIsRUFBdUI7QUFDckIsSUFBQSxHQUFHLENBQUgsS0FBQTs7QUFDQSxRQUFJO0FBQ0YsTUFBQSxFQUFFO0FBREosS0FBQSxTQUVVO0FBQ1IsTUFBQSxHQUFHLENBQUgsTUFBQTtBQUNEO0FBTkgsR0FBQSxNQU9PO0FBQ0wsSUFBQSxFQUFFO0FBQ0g7QUFDRjs7ZUFFRCxlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVCVUcgfSBmcm9tICdAZ2xpbW1lci9lbnYnO1xuaW1wb3J0IHtcbiAgRW52aXJvbm1lbnQsXG4gIEVudmlyb25tZW50T3B0aW9ucyxcbiAgR2xpbW1lclRyZWVDaGFuZ2VzLFxuICBHbGltbWVyVHJlZUNvbnN0cnVjdGlvbixcbiAgVHJhbnNhY3Rpb24sXG4gIFRyYW5zYWN0aW9uU3ltYm9sLFxuICBSdW50aW1lQ29udGV4dCxcbiAgUnVudGltZVJlc29sdmVyLFxuICBPcHRpb24sXG4gIFJ1bnRpbWVBcnRpZmFjdHMsXG4gIENvbXBvbmVudEluc3RhbmNlV2l0aENyZWF0ZSxcbiAgTW9kaWZpZXJJbnN0YW5jZSxcbiAgSW50ZXJuYWxNb2RpZmllck1hbmFnZXIsXG4gIE1vZGlmaWVySW5zdGFuY2VTdGF0ZSxcbn0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBhc3NlcnQsIGV4cGVjdCwgc3ltYm9sIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyB0cmFjaywgdXBkYXRlVGFnIH0gZnJvbSAnQGdsaW1tZXIvdmFsaWRhdG9yJztcbmltcG9ydCB7IERPTUNoYW5nZXNJbXBsLCBET01UcmVlQ29uc3RydWN0aW9uIH0gZnJvbSAnLi9kb20vaGVscGVyJztcbmltcG9ydCB7IFJ1bnRpbWVQcm9ncmFtSW1wbCB9IGZyb20gJ0BnbGltbWVyL3Byb2dyYW0nO1xuaW1wb3J0IERlYnVnUmVuZGVyVHJlZSBmcm9tICcuL2RlYnVnLXJlbmRlci10cmVlJztcblxuZXhwb3J0IGNvbnN0IFRSQU5TQUNUSU9OOiBUcmFuc2FjdGlvblN5bWJvbCA9IHN5bWJvbCgnVFJBTlNBQ1RJT04nKTtcblxuY2xhc3MgVHJhbnNhY3Rpb25JbXBsIGltcGxlbWVudHMgVHJhbnNhY3Rpb24ge1xuICBwdWJsaWMgc2NoZWR1bGVkSW5zdGFsbE1vZGlmaWVyczogTW9kaWZpZXJJbnN0YW5jZVtdID0gW107XG4gIHB1YmxpYyBzY2hlZHVsZWRVcGRhdGVNb2RpZmllcnM6IE1vZGlmaWVySW5zdGFuY2VbXSA9IFtdO1xuICBwdWJsaWMgY3JlYXRlZENvbXBvbmVudHM6IENvbXBvbmVudEluc3RhbmNlV2l0aENyZWF0ZVtdID0gW107XG4gIHB1YmxpYyB1cGRhdGVkQ29tcG9uZW50czogQ29tcG9uZW50SW5zdGFuY2VXaXRoQ3JlYXRlW10gPSBbXTtcblxuICBkaWRDcmVhdGUoY29tcG9uZW50OiBDb21wb25lbnRJbnN0YW5jZVdpdGhDcmVhdGUpIHtcbiAgICB0aGlzLmNyZWF0ZWRDb21wb25lbnRzLnB1c2goY29tcG9uZW50KTtcbiAgfVxuXG4gIGRpZFVwZGF0ZShjb21wb25lbnQ6IENvbXBvbmVudEluc3RhbmNlV2l0aENyZWF0ZSkge1xuICAgIHRoaXMudXBkYXRlZENvbXBvbmVudHMucHVzaChjb21wb25lbnQpO1xuICB9XG5cbiAgc2NoZWR1bGVJbnN0YWxsTW9kaWZpZXIobW9kaWZpZXI6IE1vZGlmaWVySW5zdGFuY2UpIHtcbiAgICB0aGlzLnNjaGVkdWxlZEluc3RhbGxNb2RpZmllcnMucHVzaChtb2RpZmllcik7XG4gIH1cblxuICBzY2hlZHVsZVVwZGF0ZU1vZGlmaWVyKG1vZGlmaWVyOiBNb2RpZmllckluc3RhbmNlKSB7XG4gICAgdGhpcy5zY2hlZHVsZWRVcGRhdGVNb2RpZmllcnMucHVzaChtb2RpZmllcik7XG4gIH1cblxuICBjb21taXQoKSB7XG4gICAgbGV0IHsgY3JlYXRlZENvbXBvbmVudHMsIHVwZGF0ZWRDb21wb25lbnRzIH0gPSB0aGlzO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjcmVhdGVkQ29tcG9uZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IHsgbWFuYWdlciwgc3RhdGUgfSA9IGNyZWF0ZWRDb21wb25lbnRzW2ldO1xuICAgICAgbWFuYWdlci5kaWRDcmVhdGUoc3RhdGUpO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdXBkYXRlZENvbXBvbmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCB7IG1hbmFnZXIsIHN0YXRlIH0gPSB1cGRhdGVkQ29tcG9uZW50c1tpXTtcbiAgICAgIG1hbmFnZXIuZGlkVXBkYXRlKHN0YXRlKTtcbiAgICB9XG5cbiAgICBsZXQgeyBzY2hlZHVsZWRJbnN0YWxsTW9kaWZpZXJzLCBzY2hlZHVsZWRVcGRhdGVNb2RpZmllcnMgfSA9IHRoaXM7XG5cbiAgICAvLyBQcmV2ZW50IGEgdHJhbnNwaWxhdGlvbiBpc3N1ZSB3ZSBndWFyZCBhZ2FpbnN0IGluIEVtYmVyLCB0aGVcbiAgICAvLyB0aHJvdy1pZi1jbG9zdXJlLXJlcXVpcmVkIGlzc3VlXG4gICAgbGV0IG1hbmFnZXI6IEludGVybmFsTW9kaWZpZXJNYW5hZ2VyLCBzdGF0ZTogTW9kaWZpZXJJbnN0YW5jZVN0YXRlO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzY2hlZHVsZWRJbnN0YWxsTW9kaWZpZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgbW9kaWZpZXIgPSBzY2hlZHVsZWRJbnN0YWxsTW9kaWZpZXJzW2ldO1xuICAgICAgbWFuYWdlciA9IG1vZGlmaWVyLm1hbmFnZXI7XG4gICAgICBzdGF0ZSA9IG1vZGlmaWVyLnN0YXRlO1xuXG4gICAgICBsZXQgbW9kaWZpZXJUYWcgPSBtYW5hZ2VyLmdldFRhZyhzdGF0ZSk7XG5cbiAgICAgIGlmIChtb2RpZmllclRhZyAhPT0gbnVsbCkge1xuICAgICAgICBsZXQgdGFnID0gdHJhY2soXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgICAgICgpID0+IG1hbmFnZXIuaW5zdGFsbChzdGF0ZSksXG4gICAgICAgICAgREVCVUcgJiZcbiAgICAgICAgICAgIGAtIFdoaWxlIHJlbmRlcmluZzpcXG4gIChpbnN0YW5jZSBvZiBhIFxcYCR7XG4gICAgICAgICAgICAgIG1vZGlmaWVyLmRlZmluaXRpb24ucmVzb2x2ZWROYW1lIHx8IG1hbmFnZXIuZ2V0RGVidWdOYW1lKG1vZGlmaWVyLmRlZmluaXRpb24uc3RhdGUpXG4gICAgICAgICAgICB9XFxgIG1vZGlmaWVyKWBcbiAgICAgICAgKTtcbiAgICAgICAgdXBkYXRlVGFnKG1vZGlmaWVyVGFnLCB0YWcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWFuYWdlci5pbnN0YWxsKHN0YXRlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNjaGVkdWxlZFVwZGF0ZU1vZGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IG1vZGlmaWVyID0gc2NoZWR1bGVkVXBkYXRlTW9kaWZpZXJzW2ldO1xuICAgICAgbWFuYWdlciA9IG1vZGlmaWVyLm1hbmFnZXI7XG4gICAgICBzdGF0ZSA9IG1vZGlmaWVyLnN0YXRlO1xuXG4gICAgICBsZXQgbW9kaWZpZXJUYWcgPSBtYW5hZ2VyLmdldFRhZyhzdGF0ZSk7XG5cbiAgICAgIGlmIChtb2RpZmllclRhZyAhPT0gbnVsbCkge1xuICAgICAgICBsZXQgdGFnID0gdHJhY2soXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgICAgICgpID0+IG1hbmFnZXIudXBkYXRlKHN0YXRlKSxcbiAgICAgICAgICBERUJVRyAmJlxuICAgICAgICAgICAgYC0gV2hpbGUgcmVuZGVyaW5nOlxcbiAgKGluc3RhbmNlIG9mIGEgXFxgJHtcbiAgICAgICAgICAgICAgbW9kaWZpZXIuZGVmaW5pdGlvbi5yZXNvbHZlZE5hbWUgfHwgbWFuYWdlci5nZXREZWJ1Z05hbWUobW9kaWZpZXIuZGVmaW5pdGlvbi5zdGF0ZSlcbiAgICAgICAgICAgIH1cXGAgbW9kaWZpZXIpYFxuICAgICAgICApO1xuICAgICAgICB1cGRhdGVUYWcobW9kaWZpZXJUYWcsIHRhZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtYW5hZ2VyLnVwZGF0ZShzdGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudEltcGwgaW1wbGVtZW50cyBFbnZpcm9ubWVudCB7XG4gIFtUUkFOU0FDVElPTl06IE9wdGlvbjxUcmFuc2FjdGlvbkltcGw+ID0gbnVsbDtcblxuICBwcm90ZWN0ZWQgYXBwZW5kT3BlcmF0aW9ucyE6IEdsaW1tZXJUcmVlQ29uc3RydWN0aW9uO1xuICBwcm90ZWN0ZWQgdXBkYXRlT3BlcmF0aW9ucz86IEdsaW1tZXJUcmVlQ2hhbmdlcztcblxuICAvLyBEZWxlZ2F0ZSBtZXRob2RzIGFuZCB2YWx1ZXNcbiAgcHVibGljIGlzSW50ZXJhY3RpdmUgPSB0aGlzLmRlbGVnYXRlLmlzSW50ZXJhY3RpdmU7XG5cbiAgZGVidWdSZW5kZXJUcmVlID0gdGhpcy5kZWxlZ2F0ZS5lbmFibGVEZWJ1Z1Rvb2xpbmcgPyBuZXcgRGVidWdSZW5kZXJUcmVlKCkgOiB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogRW52aXJvbm1lbnRPcHRpb25zLCBwcml2YXRlIGRlbGVnYXRlOiBFbnZpcm9ubWVudERlbGVnYXRlKSB7XG4gICAgaWYgKG9wdGlvbnMuYXBwZW5kT3BlcmF0aW9ucykge1xuICAgICAgdGhpcy5hcHBlbmRPcGVyYXRpb25zID0gb3B0aW9ucy5hcHBlbmRPcGVyYXRpb25zO1xuICAgICAgdGhpcy51cGRhdGVPcGVyYXRpb25zID0gb3B0aW9ucy51cGRhdGVPcGVyYXRpb25zO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5kb2N1bWVudCkge1xuICAgICAgdGhpcy5hcHBlbmRPcGVyYXRpb25zID0gbmV3IERPTVRyZWVDb25zdHJ1Y3Rpb24ob3B0aW9ucy5kb2N1bWVudCk7XG4gICAgICB0aGlzLnVwZGF0ZU9wZXJhdGlvbnMgPSBuZXcgRE9NQ2hhbmdlc0ltcGwob3B0aW9ucy5kb2N1bWVudCk7XG4gICAgfSBlbHNlIGlmIChERUJVRykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd5b3UgbXVzdCBwYXNzIGRvY3VtZW50IG9yIGFwcGVuZE9wZXJhdGlvbnMgdG8gYSBuZXcgcnVudGltZScpO1xuICAgIH1cbiAgfVxuXG4gIGdldEFwcGVuZE9wZXJhdGlvbnMoKTogR2xpbW1lclRyZWVDb25zdHJ1Y3Rpb24ge1xuICAgIHJldHVybiB0aGlzLmFwcGVuZE9wZXJhdGlvbnM7XG4gIH1cblxuICBnZXRET00oKTogR2xpbW1lclRyZWVDaGFuZ2VzIHtcbiAgICByZXR1cm4gZXhwZWN0KFxuICAgICAgdGhpcy51cGRhdGVPcGVyYXRpb25zLFxuICAgICAgJ0F0dGVtcHRlZCB0byBnZXQgRE9NIHVwZGF0ZU9wZXJhdGlvbnMsIGJ1dCB0aGV5IHdlcmUgbm90IHByb3ZpZGVkIGJ5IHRoZSBlbnZpcm9ubWVudC4gWW91IG1heSBiZSBhdHRlbXB0aW5nIHRvIHJlcmVuZGVyIGluIGFuIGVudmlyb25tZW50IHdoaWNoIGRvZXMgbm90IHN1cHBvcnQgcmVyZW5kZXJpbmcsIHN1Y2ggYXMgU1NSLidcbiAgICApO1xuICB9XG5cbiAgYmVnaW4oKSB7XG4gICAgYXNzZXJ0KFxuICAgICAgIXRoaXNbVFJBTlNBQ1RJT05dLFxuICAgICAgJ0EgZ2xpbW1lciB0cmFuc2FjdGlvbiB3YXMgYmVndW4sIGJ1dCBvbmUgYWxyZWFkeSBleGlzdHMuIFlvdSBtYXkgaGF2ZSBhIG5lc3RlZCB0cmFuc2FjdGlvbiwgcG9zc2libHkgY2F1c2VkIGJ5IGFuIGVhcmxpZXIgcnVudGltZSBleGNlcHRpb24gd2hpbGUgcmVuZGVyaW5nLiBQbGVhc2UgY2hlY2sgeW91ciBjb25zb2xlIGZvciB0aGUgc3RhY2sgdHJhY2Ugb2YgYW55IHByaW9yIGV4Y2VwdGlvbnMuJ1xuICAgICk7XG5cbiAgICB0aGlzLmRlYnVnUmVuZGVyVHJlZT8uYmVnaW4oKTtcblxuICAgIHRoaXNbVFJBTlNBQ1RJT05dID0gbmV3IFRyYW5zYWN0aW9uSW1wbCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgdHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb25JbXBsIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXNbVFJBTlNBQ1RJT05dISwgJ211c3QgYmUgaW4gYSB0cmFuc2FjdGlvbicpO1xuICB9XG5cbiAgZGlkQ3JlYXRlKGNvbXBvbmVudDogQ29tcG9uZW50SW5zdGFuY2VXaXRoQ3JlYXRlKSB7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5kaWRDcmVhdGUoY29tcG9uZW50KTtcbiAgfVxuXG4gIGRpZFVwZGF0ZShjb21wb25lbnQ6IENvbXBvbmVudEluc3RhbmNlV2l0aENyZWF0ZSkge1xuICAgIHRoaXMudHJhbnNhY3Rpb24uZGlkVXBkYXRlKGNvbXBvbmVudCk7XG4gIH1cblxuICBzY2hlZHVsZUluc3RhbGxNb2RpZmllcihtb2RpZmllcjogTW9kaWZpZXJJbnN0YW5jZSkge1xuICAgIGlmICh0aGlzLmlzSW50ZXJhY3RpdmUpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uc2NoZWR1bGVJbnN0YWxsTW9kaWZpZXIobW9kaWZpZXIpO1xuICAgIH1cbiAgfVxuXG4gIHNjaGVkdWxlVXBkYXRlTW9kaWZpZXIobW9kaWZpZXI6IE1vZGlmaWVySW5zdGFuY2UpIHtcbiAgICBpZiAodGhpcy5pc0ludGVyYWN0aXZlKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLnNjaGVkdWxlVXBkYXRlTW9kaWZpZXIobW9kaWZpZXIpO1xuICAgIH1cbiAgfVxuXG4gIGNvbW1pdCgpIHtcbiAgICBsZXQgdHJhbnNhY3Rpb24gPSB0aGlzLnRyYW5zYWN0aW9uO1xuICAgIHRoaXNbVFJBTlNBQ1RJT05dID0gbnVsbDtcbiAgICB0cmFuc2FjdGlvbi5jb21taXQoKTtcblxuICAgIHRoaXMuZGVidWdSZW5kZXJUcmVlPy5jb21taXQoKTtcblxuICAgIHRoaXMuZGVsZWdhdGUub25UcmFuc2FjdGlvbkNvbW1pdCgpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW52aXJvbm1lbnREZWxlZ2F0ZSB7XG4gIC8qKlxuICAgKiBVc2VkIHRvIGRldGVybWluZSB0aGUgdGhlIGVudmlyb25tZW50IGlzIGludGVyYWN0aXZlIChlLmcuIFNTUiBpcyBub3RcbiAgICogaW50ZXJhY3RpdmUpLiBJbnRlcmFjdGl2ZSBlbnZpcm9ubWVudHMgc2NoZWR1bGUgbW9kaWZpZXJzLCBhbW9uZyBvdGhlciB0aGluZ3MuXG4gICAqL1xuICBpc0ludGVyYWN0aXZlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGVuYWJsZSBkZWJ1ZyB0b29saW5nXG4gICAqL1xuICBlbmFibGVEZWJ1Z1Rvb2xpbmc6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIGFuIGVudmlyb25tZW50IHRyYW5zYWN0aW9uIGNvbW1pdHNcbiAgICovXG4gIG9uVHJhbnNhY3Rpb25Db21taXQ6ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW50aW1lQ29udGV4dChcbiAgb3B0aW9uczogRW52aXJvbm1lbnRPcHRpb25zLFxuICBkZWxlZ2F0ZTogRW52aXJvbm1lbnREZWxlZ2F0ZSxcbiAgYXJ0aWZhY3RzOiBSdW50aW1lQXJ0aWZhY3RzLFxuICByZXNvbHZlcjogUnVudGltZVJlc29sdmVyXG4pOiBSdW50aW1lQ29udGV4dCB7XG4gIHJldHVybiB7XG4gICAgZW52OiBuZXcgRW52aXJvbm1lbnRJbXBsKG9wdGlvbnMsIGRlbGVnYXRlKSxcbiAgICBwcm9ncmFtOiBuZXcgUnVudGltZVByb2dyYW1JbXBsKGFydGlmYWN0cy5jb25zdGFudHMsIGFydGlmYWN0cy5oZWFwKSxcbiAgICByZXNvbHZlcjogcmVzb2x2ZXIsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpblRyYW5zYWN0aW9uKGVudjogRW52aXJvbm1lbnQsIGNiOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gIGlmICghZW52W1RSQU5TQUNUSU9OXSkge1xuICAgIGVudi5iZWdpbigpO1xuICAgIHRyeSB7XG4gICAgICBjYigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBlbnYuY29tbWl0KCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNiKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRW52aXJvbm1lbnRJbXBsO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==