@glimmer/runtime
Version:
Minimal runtime needed to render Glimmer templates
241 lines (188 loc) • 23.9 kB
JavaScript
;
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==