UNPKG

ember-legacy-class-transform

Version:
322 lines (271 loc) 28.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ComponentBuilder = undefined; exports.compileLayout = compileLayout; exports.builder = builder; var _blocks = require("./compiled/blocks"); var _wireFormat = require("@glimmer/wire-format"); var _opcodes = require("./opcodes"); var _functions = require("./syntax/functions"); var _clientSide = require("./syntax/client-side"); var ClientSide = _interopRequireWildcard(_clientSide); var _builder = require("./compiled/opcodes/builder"); var _builder2 = _interopRequireDefault(_builder); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } var _createClass = function () { 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); } }return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function compileLayout(compilable, env) { var builder = new ComponentLayoutBuilder(env); compilable.compile(builder); return builder.compile(); } var ComponentLayoutBuilder = function () { function ComponentLayoutBuilder(env) { _classCallCheck(this, ComponentLayoutBuilder); this.env = env; } ComponentLayoutBuilder.prototype.wrapLayout = function wrapLayout(layout) { this.inner = new WrappedBuilder(this.env, layout); }; ComponentLayoutBuilder.prototype.fromLayout = function fromLayout(componentName, layout) { this.inner = new UnwrappedBuilder(this.env, componentName, layout); }; ComponentLayoutBuilder.prototype.compile = function compile() { return this.inner.compile(); }; _createClass(ComponentLayoutBuilder, [{ key: 'tag', get: function () { return this.inner.tag; } }, { key: 'attrs', get: function () { return this.inner.attrs; } }]); return ComponentLayoutBuilder; }(); var WrappedBuilder = function () { function WrappedBuilder(env, layout) { _classCallCheck(this, WrappedBuilder); this.env = env; this.layout = layout; this.tag = new ComponentTagBuilder(); this.attrs = new ComponentAttrsBuilder(); } WrappedBuilder.prototype.compile = function compile() { //========DYNAMIC // PutValue(TagExpr) // Test // JumpUnless(BODY) // OpenDynamicPrimitiveElement // DidCreateElement // ...attr statements... // FlushElement // BODY: Noop // ...body statements... // PutValue(TagExpr) // Test // JumpUnless(END) // CloseElement // END: Noop // DidRenderLayout // Exit // //========STATIC // OpenPrimitiveElementOpcode // DidCreateElement // ...attr statements... // FlushElement // ...body statements... // CloseElement // DidRenderLayout // Exit var env = this.env, layout = this.layout; var meta = { templateMeta: layout.meta, symbols: layout.symbols, asPartial: false }; var dynamicTag = this.tag.getDynamic(); var staticTag = this.tag.getStatic(); var b = builder(env, meta); b.startLabels(); if (dynamicTag) { b.fetch(_opcodes.Register.s1); (0, _functions.expr)(dynamicTag, b); b.dup(); b.load(_opcodes.Register.s1); b.test('simple'); b.jumpUnless('BODY'); b.fetch(_opcodes.Register.s1); b.pushComponentOperations(); b.openDynamicElement(); } else if (staticTag) { b.pushComponentOperations(); b.openElementWithOperations(staticTag); } if (dynamicTag || staticTag) { b.didCreateElement(_opcodes.Register.s0); var attrs = this.attrs.buffer; for (var i = 0; i < attrs.length; i++) { (0, _functions.compileStatement)(attrs[i], b); } b.flushElement(); } b.label('BODY'); b.invokeStatic(layout.asBlock()); if (dynamicTag) { b.fetch(_opcodes.Register.s1); b.test('simple'); b.jumpUnless('END'); b.closeElement(); } else if (staticTag) { b.closeElement(); } b.label('END'); b.didRenderLayout(_opcodes.Register.s0); if (dynamicTag) { b.load(_opcodes.Register.s1); } b.stopLabels(); var start = b.start; var end = b.finalize(); if (false) { (0, _opcodes.debugSlice)(env, env.program.heap.getaddr(start), env.program.heap.getaddr(end)); } return new _blocks.CompiledDynamicTemplate(start, { meta: meta, hasEval: layout.hasEval, symbols: layout.symbols.concat([_functions.ATTRS_BLOCK]) }); }; return WrappedBuilder; }(); var UnwrappedBuilder = function () { function UnwrappedBuilder(env, componentName, layout) { _classCallCheck(this, UnwrappedBuilder); this.env = env; this.componentName = componentName; this.layout = layout; this.attrs = new ComponentAttrsBuilder(); } UnwrappedBuilder.prototype.compile = function compile() { var env = this.env, layout = this.layout; return layout.asLayout(this.componentName, this.attrs.buffer).compileDynamic(env); }; _createClass(UnwrappedBuilder, [{ key: 'tag', get: function () { throw new Error('BUG: Cannot call `tag` on an UnwrappedBuilder'); } }]); return UnwrappedBuilder; }(); var ComponentTagBuilder = function () { function ComponentTagBuilder() { _classCallCheck(this, ComponentTagBuilder); this.isDynamic = null; this.isStatic = null; this.staticTagName = null; this.dynamicTagName = null; } ComponentTagBuilder.prototype.getDynamic = function getDynamic() { if (this.isDynamic) { return this.dynamicTagName; } }; ComponentTagBuilder.prototype.getStatic = function getStatic() { if (this.isStatic) { return this.staticTagName; } }; ComponentTagBuilder.prototype.static = function _static(tagName) { this.isStatic = true; this.staticTagName = tagName; }; ComponentTagBuilder.prototype.dynamic = function dynamic(tagName) { this.isDynamic = true; this.dynamicTagName = [_wireFormat.Ops.ClientSideExpression, ClientSide.Ops.FunctionExpression, tagName]; }; return ComponentTagBuilder; }(); var ComponentAttrsBuilder = function () { function ComponentAttrsBuilder() { _classCallCheck(this, ComponentAttrsBuilder); this.buffer = []; } ComponentAttrsBuilder.prototype.static = function _static(name, value) { this.buffer.push([_wireFormat.Ops.StaticAttr, name, value, null]); }; ComponentAttrsBuilder.prototype.dynamic = function dynamic(name, value) { this.buffer.push([_wireFormat.Ops.DynamicAttr, name, [_wireFormat.Ops.ClientSideExpression, ClientSide.Ops.FunctionExpression, value], null]); }; return ComponentAttrsBuilder; }(); var ComponentBuilder = exports.ComponentBuilder = function () { function ComponentBuilder(builder) { _classCallCheck(this, ComponentBuilder); this.builder = builder; this.env = builder.env; } ComponentBuilder.prototype.static = function _static(definition, args) { var params = args[0], hash = args[1], _default = args[2], inverse = args[3]; var builder = this.builder; builder.pushComponentManager(definition); builder.invokeComponent(null, params, hash, _default, inverse); }; ComponentBuilder.prototype.dynamic = function dynamic(definitionArgs, getDefinition, args) { var params = args[0], hash = args[1], block = args[2], inverse = args[3]; var builder = this.builder; if (!definitionArgs || definitionArgs.length === 0) { throw new Error("Dynamic syntax without an argument"); } var meta = this.builder.meta.templateMeta; function helper(vm, a) { return getDefinition(vm, a, meta); } builder.startLabels(); builder.pushFrame(); builder.returnTo('END'); builder.compileArgs(definitionArgs[0], definitionArgs[1], true); builder.helper(helper); builder.dup(); builder.test('simple'); builder.enter(2); builder.jumpUnless('ELSE'); builder.pushDynamicComponentManager(); builder.invokeComponent(null, params, hash, block, inverse); builder.label('ELSE'); builder.exit(); builder.return(); builder.label('END'); builder.popFrame(); builder.stopLabels(); }; return ComponentBuilder; }(); function builder(env, meta) { return new _builder2.default(env, meta); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21waWxlci5qcyJdLCJuYW1lcyI6WyJDb21waWxlZER5bmFtaWNUZW1wbGF0ZSIsIk9wcyIsIlJlZ2lzdGVyIiwiZGVidWdTbGljZSIsIkFUVFJTX0JMT0NLIiwiY29tcGlsZVN0YXRlbWVudCIsIkNsaWVudFNpZGUiLCJleHByIiwiT3Bjb2RlQnVpbGRlckRTTCIsImNvbXBpbGVMYXlvdXQiLCJjb21waWxhYmxlIiwiZW52IiwiYnVpbGRlciIsIkNvbXBvbmVudExheW91dEJ1aWxkZXIiLCJjb21waWxlIiwid3JhcExheW91dCIsImxheW91dCIsImlubmVyIiwiV3JhcHBlZEJ1aWxkZXIiLCJmcm9tTGF5b3V0IiwiY29tcG9uZW50TmFtZSIsIlVud3JhcHBlZEJ1aWxkZXIiLCJ0YWciLCJhdHRycyIsIkNvbXBvbmVudFRhZ0J1aWxkZXIiLCJDb21wb25lbnRBdHRyc0J1aWxkZXIiLCJtZXRhIiwidGVtcGxhdGVNZXRhIiwic3ltYm9scyIsImFzUGFydGlhbCIsImR5bmFtaWNUYWciLCJnZXREeW5hbWljIiwic3RhdGljVGFnIiwiZ2V0U3RhdGljIiwiYiIsInN0YXJ0TGFiZWxzIiwiZmV0Y2giLCJzMSIsImR1cCIsImxvYWQiLCJ0ZXN0IiwianVtcFVubGVzcyIsInB1c2hDb21wb25lbnRPcGVyYXRpb25zIiwib3BlbkR5bmFtaWNFbGVtZW50Iiwib3BlbkVsZW1lbnRXaXRoT3BlcmF0aW9ucyIsImRpZENyZWF0ZUVsZW1lbnQiLCJzMCIsImJ1ZmZlciIsImkiLCJsZW5ndGgiLCJmbHVzaEVsZW1lbnQiLCJsYWJlbCIsImludm9rZVN0YXRpYyIsImFzQmxvY2siLCJjbG9zZUVsZW1lbnQiLCJkaWRSZW5kZXJMYXlvdXQiLCJzdG9wTGFiZWxzIiwic3RhcnQiLCJlbmQiLCJmaW5hbGl6ZSIsInByb2dyYW0iLCJoZWFwIiwiZ2V0YWRkciIsImhhc0V2YWwiLCJjb25jYXQiLCJhc0xheW91dCIsImNvbXBpbGVEeW5hbWljIiwiRXJyb3IiLCJpc0R5bmFtaWMiLCJpc1N0YXRpYyIsInN0YXRpY1RhZ05hbWUiLCJkeW5hbWljVGFnTmFtZSIsInN0YXRpYyIsInRhZ05hbWUiLCJkeW5hbWljIiwiQ2xpZW50U2lkZUV4cHJlc3Npb24iLCJGdW5jdGlvbkV4cHJlc3Npb24iLCJuYW1lIiwidmFsdWUiLCJwdXNoIiwiU3RhdGljQXR0ciIsIkR5bmFtaWNBdHRyIiwiQ29tcG9uZW50QnVpbGRlciIsImRlZmluaXRpb24iLCJhcmdzIiwicGFyYW1zIiwiaGFzaCIsIl9kZWZhdWx0IiwiaW52ZXJzZSIsInB1c2hDb21wb25lbnRNYW5hZ2VyIiwiaW52b2tlQ29tcG9uZW50IiwiZGVmaW5pdGlvbkFyZ3MiLCJnZXREZWZpbml0aW9uIiwiYmxvY2siLCJoZWxwZXIiLCJ2bSIsImEiLCJwdXNoRnJhbWUiLCJyZXR1cm5UbyIsImNvbXBpbGVBcmdzIiwiZW50ZXIiLCJwdXNoRHluYW1pY0NvbXBvbmVudE1hbmFnZXIiLCJleGl0IiwicmV0dXJuIiwicG9wRnJhbWUiXSwibWFwcGluZ3MiOiI7Ozs7OztRQVFPLEFBQVM7UUFnTlQsQUFBUzs7QUF4TmhCLEFBQVMsQUFBK0I7O0FBQ3hDLEFBQVMsQUFBVzs7QUFDcEIsQUFBUyxBQUFVLEFBQWtCOztBQUNyQyxBQUFTLEFBQWEsQUFBd0I7O0FBQzlDLEFBQU87O0lBQVAsQUFBWSxBQUFnQixBQUM1QixBQUFTLEFBQVk7O0FBQ3JCLEFBQU8sQUFBc0IsQUFFN0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFPLHVCQUFBLEFBQXVCLFlBQXZCLEFBQW1DLEtBQUssQUFDM0M7UUFBSSxVQUFVLElBQUEsQUFBSSx1QkFBbEIsQUFBYyxBQUEyQixBQUN6QztlQUFBLEFBQVcsUUFBWCxBQUFtQixBQUNuQjtXQUFPLFFBQVAsQUFBTyxBQUFRLEFBQ2xCOzs7SSxBQUNLLHFDQUNGO29DQUFBLEFBQVksS0FBSzs4QkFDYjs7YUFBQSxBQUFLLE1BQUwsQUFBVyxBQUNkOzs7cUNBQ0QsQSxpQyxBQUFXLFFBQVEsQUFDZjthQUFBLEFB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QzFEO2dCQUFBLEFBQVEsT0FBUixBQUFlLEFBQ2Y7Z0JBQUEsQUFBUSxBQUNSO2dCQUFBLEFBQVEsS0FBUixBQUFhLEFBQ2I7Z0JBQUEsQUFBUSxNQUFSLEFBQWMsQUFDZDtnQkFBQSxBQUFRLFdBQVIsQUFBbUIsQUFDbkI7Z0JBQUEsQUFBUSxBQUNSO2dCQUFBLEFBQVEsZ0JBQVIsQUFBd0IsTUFBeEIsQUFBOEIsUUFBOUIsQUFBc0MsTUFBdEMsQUFBNEMsT0FBNUMsQUFBbUQsQUFDbkQ7Z0JBQUEsQUFBUSxNQUFSLEFBQWMsQUFDZDtnQkFBQSxBQUFRLEFBQ1I7Z0JBQUEsQUFBUSxBQUNSO2dCQUFBLEFBQVEsTUFBUixBQUFjLEFBQ2Q7Z0JBQUEsQUFBUSxBQUNSO2dCQUFBLEFBQVEsQUFDWDtBQXRDTDs7V0FBQTtBQXdDQTtBQUFPLGlCQUFBLEFBQWlCLEtBQWpCLEFBQXNCLE1BQU0sQUFDL0I7V0FBTyxBQUFJLHNCQUFKLEFBQXFCLEtBQTVCLEFBQU8sQUFBMEIsQUFDcEMiLCJmaWxlIjoibGliL2NvbXBpbGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUgfSBmcm9tICcuL2NvbXBpbGVkL2Jsb2Nrcyc7XG5pbXBvcnQgeyBPcHMgfSBmcm9tICdAZ2xpbW1lci93aXJlLWZvcm1hdCc7XG5pbXBvcnQgeyBSZWdpc3RlciwgZGVidWdTbGljZSB9IGZyb20gJy4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBBVFRSU19CTE9DSywgY29tcGlsZVN0YXRlbWVudCB9IGZyb20gJy4vc3ludGF4L2Z1bmN0aW9ucyc7XG5pbXBvcnQgKiBhcyBDbGllbnRTaWRlIGZyb20gJy4vc3ludGF4L2NsaWVudC1zaWRlJztcbmltcG9ydCB7IGV4cHIgfSBmcm9tICcuL3N5bnRheC9mdW5jdGlvbnMnO1xuaW1wb3J0IE9wY29kZUJ1aWxkZXJEU0wgZnJvbSAnLi9jb21waWxlZC9vcGNvZGVzL2J1aWxkZXInO1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZUxheW91dChjb21waWxhYmxlLCBlbnYpIHtcbiAgICBsZXQgYnVpbGRlciA9IG5ldyBDb21wb25lbnRMYXlvdXRCdWlsZGVyKGVudik7XG4gICAgY29tcGlsYWJsZS5jb21waWxlKGJ1aWxkZXIpO1xuICAgIHJldHVybiBidWlsZGVyLmNvbXBpbGUoKTtcbn1cbmNsYXNzIENvbXBvbmVudExheW91dEJ1aWxkZXIge1xuICAgIGNvbnN0cnVjdG9yKGVudikge1xuICAgICAgICB0aGlzLmVudiA9IGVudjtcbiAgICB9XG4gICAgd3JhcExheW91dChsYXlvdXQpIHtcbiAgICAgICAgdGhpcy5pbm5lciA9IG5ldyBXcmFwcGVkQnVpbGRlcih0aGlzLmVudiwgbGF5b3V0KTtcbiAgICB9XG4gICAgZnJvbUxheW91dChjb21wb25lbnROYW1lLCBsYXlvdXQpIHtcbiAgICAgICAgdGhpcy5pbm5lciA9IG5ldyBVbndyYXBwZWRCdWlsZGVyKHRoaXMuZW52LCBjb21wb25lbnROYW1lLCBsYXlvdXQpO1xuICAgIH1cbiAgICBjb21waWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbm5lci5jb21waWxlKCk7XG4gICAgfVxuICAgIGdldCB0YWcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyLnRhZztcbiAgICB9XG4gICAgZ2V0IGF0dHJzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbm5lci5hdHRycztcbiAgICB9XG59XG5jbGFzcyBXcmFwcGVkQnVpbGRlciB7XG4gICAgY29uc3RydWN0b3IoZW52LCBsYXlvdXQpIHtcbiAgICAgICAgdGhpcy5lbnYgPSBlbnY7XG4gICAgICAgIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuICAgICAgICB0aGlzLnRhZyA9IG5ldyBDb21wb25lbnRUYWdCdWlsZGVyKCk7XG4gICAgICAgIHRoaXMuYXR0cnMgPSBuZXcgQ29tcG9uZW50QXR0cnNCdWlsZGVyKCk7XG4gICAgfVxuICAgIGNvbXBpbGUoKSB7XG4gICAgICAgIC8vPT09PT09PT1EWU5BTUlDXG4gICAgICAgIC8vICAgICAgICBQdXRWYWx1ZShUYWdFeHByKVxuICAgICAgICAvLyAgICAgICAgVGVzdFxuICAgICAgICAvLyAgICAgICAgSnVtcFVubGVzcyhCT0RZKVxuICAgICAgICAvLyAgICAgICAgT3BlbkR5bmFtaWNQcmltaXRpdmVFbGVtZW50XG4gICAgICAgIC8vICAgICAgICBEaWRDcmVhdGVFbGVtZW50XG4gICAgICAgIC8vICAgICAgICAuLi5hdHRyIHN0YXRlbWVudHMuLi5cbiAgICAgICAgLy8gICAgICAgIEZsdXNoRWxlbWVudFxuICAgICAgICAvLyBCT0RZOiAgTm9vcFxuICAgICAgICAvLyAgICAgICAgLi4uYm9keSBzdGF0ZW1lbnRzLi4uXG4gICAgICAgIC8vICAgICAgICBQdXRWYWx1ZShUYWdFeHByKVxuICAgICAgICAvLyAgICAgICAgVGVzdFxuICAgICAgICAvLyAgICAgICAgSnVtcFVubGVzcyhFTkQpXG4gICAgICAgIC8vICAgICAgICBDbG9zZUVsZW1lbnRcbiAgICAgICAgLy8gRU5EOiAgIE5vb3BcbiAgICAgICAgLy8gICAgICAgIERpZFJlbmRlckxheW91dFxuICAgICAgICAvLyAgICAgICAgRXhpdFxuICAgICAgICAvL1xuICAgICAgICAvLz09PT09PT09U1RBVElDXG4gICAgICAgIC8vICAgICAgICBPcGVuUHJpbWl0aXZlRWxlbWVudE9wY29kZVxuICAgICAgICAvLyAgICAgICAgRGlkQ3JlYXRlRWxlbWVudFxuICAgICAgICAvLyAgICAgICAgLi4uYXR0ciBzdGF0ZW1lbnRzLi4uXG4gICAgICAgIC8vICAgICAgICBGbHVzaEVsZW1lbnRcbiAgICAgICAgLy8gICAgICAgIC4uLmJvZHkgc3RhdGVtZW50cy4uLlxuICAgICAgICAvLyAgICAgICAgQ2xvc2VFbGVtZW50XG4gICAgICAgIC8vICAgICAgICBEaWRSZW5kZXJMYXlvdXRcbiAgICAgICAgLy8gICAgICAgIEV4aXRcbiAgICAgICAgbGV0IHsgZW52LCBsYXlvdXQgfSA9IHRoaXM7XG4gICAgICAgIGxldCBtZXRhID0geyB0ZW1wbGF0ZU1ldGE6IGxheW91dC5tZXRhLCBzeW1ib2xzOiBsYXlvdXQuc3ltYm9scywgYXNQYXJ0aWFsOiBmYWxzZSB9O1xuICAgICAgICBsZXQgZHluYW1pY1RhZyA9IHRoaXMudGFnLmdldER5bmFtaWMoKTtcbiAgICAgICAgbGV0IHN0YXRpY1RhZyA9IHRoaXMudGFnLmdldFN0YXRpYygpO1xuICAgICAgICBsZXQgYiA9IGJ1aWxkZXIoZW52LCBtZXRhKTtcbiAgICAgICAgYi5zdGFydExhYmVscygpO1xuICAgICAgICBpZiAoZHluYW1pY1RhZykge1xuICAgICAgICAgICAgYi5mZXRjaChSZWdpc3Rlci5zMSk7XG4gICAgICAgICAgICBleHByKGR5bmFtaWNUYWcsIGIpO1xuICAgICAgICAgICAgYi5kdXAoKTtcbiAgICAgICAgICAgIGIubG9hZChSZWdpc3Rlci5zMSk7XG4gICAgICAgICAgICBiLnRlc3QoJ3NpbXBsZScpO1xuICAgICAgICAgICAgYi5qdW1wVW5sZXNzKCdCT0RZJyk7XG4gICAgICAgICAgICBiLmZldGNoKFJlZ2lzdGVyLnMxKTtcbiAgICAgICAgICAgIGIucHVzaENvbXBvbmVudE9wZXJhdGlvbnMoKTtcbiAgICAgICAgICAgIGIub3BlbkR5bmFtaWNFbGVtZW50KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGljVGFnKSB7XG4gICAgICAgICAgICBiLnB1c2hDb21wb25lbnRPcGVyYXRpb25zKCk7XG4gICAgICAgICAgICBiLm9wZW5FbGVtZW50V2l0aE9wZXJhdGlvbnMoc3RhdGljVGFnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZHluYW1pY1RhZyB8fCBzdGF0aWNUYWcpIHtcbiAgICAgICAgICAgIGIuZGlkQ3JlYXRlRWxlbWVudChSZWdpc3Rlci5zMCk7XG4gICAgICAgICAgICBsZXQgYXR0cnMgPSB0aGlzLmF0dHJzLmJ1ZmZlcjtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb21waWxlU3RhdGVtZW50KGF0dHJzW2ldLCBiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIuZmx1c2hFbGVtZW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgYi5sYWJlbCgnQk9EWScpO1xuICAgICAgICBiLmludm9rZVN0YXRpYyhsYXlvdXQuYXNCbG9jaygpKTtcbiAgICAgICAgaWYgKGR5bmFtaWNUYWcpIHtcbiAgICAgICAgICAgIGIuZmV0Y2goUmVnaXN0ZXIuczEpO1xuICAgICAgICAgICAgYi50ZXN0KCdzaW1wbGUnKTtcbiAgICAgICAgICAgIGIuanVtcFVubGVzcygnRU5EJyk7XG4gICAgICAgICAgICBiLmNsb3NlRWxlbWVudCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRpY1RhZykge1xuICAgICAgICAgICAgYi5jbG9zZUVsZW1lbnQoKTtcbiAgICAgICAgfVxuICAgICAgICBiLmxhYmVsKCdFTkQnKTtcbiAgICAgICAgYi5kaWRSZW5kZXJMYXlvdXQoUmVnaXN0ZXIuczApO1xuICAgICAgICBpZiAoZHluYW1pY1RhZykge1xuICAgICAgICAgICAgYi5sb2FkKFJlZ2lzdGVyLnMxKTtcbiAgICAgICAgfVxuICAgICAgICBiLnN0b3BMYWJlbHMoKTtcbiAgICAgICAgbGV0IHN0YXJ0ID0gYi5zdGFydDtcbiAgICAgICAgbGV0IGVuZCA9IGIuZmluYWxpemUoKTtcbiAgICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAgICAgICBkZWJ1Z1NsaWNlKGVudiwgZW52LnByb2dyYW0uaGVhcC5nZXRhZGRyKHN0YXJ0KSwgZW52LnByb2dyYW0uaGVhcC5nZXRhZGRyKGVuZCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUoc3RhcnQsIHtcbiAgICAgICAgICAgIG1ldGEsXG4gICAgICAgICAgICBoYXNFdmFsOiBsYXlvdXQuaGFzRXZhbCxcbiAgICAgICAgICAgIHN5bWJvbHM6IGxheW91dC5zeW1ib2xzLmNvbmNhdChbQVRUUlNfQkxPQ0tdKVxuICAgICAgICB9KTtcbiAgICB9XG59XG5jbGFzcyBVbndyYXBwZWRCdWlsZGVyIHtcbiAgICBjb25zdHJ1Y3RvcihlbnYsIGNvbXBvbmVudE5hbWUsIGxheW91dCkge1xuICAgICAgICB0aGlzLmVudiA9IGVudjtcbiAgICAgICAgdGhpcy5jb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZTtcbiAgICAgICAgdGhpcy5sYXlvdXQgPSBsYXlvdXQ7XG4gICAgICAgIHRoaXMuYXR0cnMgPSBuZXcgQ29tcG9uZW50QXR0cnNCdWlsZGVyKCk7XG4gICAgfVxuICAgIGdldCB0YWcoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQlVHOiBDYW5ub3QgY2FsbCBgdGFnYCBvbiBhbiBVbndyYXBwZWRCdWlsZGVyJyk7XG4gICAgfVxuICAgIGNvbXBpbGUoKSB7XG4gICAgICAgIGxldCB7IGVudiwgbGF5b3V0IH0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gbGF5b3V0LmFzTGF5b3V0KHRoaXMuY29tcG9uZW50TmFtZSwgdGhpcy5hdHRycy5idWZmZXIpLmNvbXBpbGVEeW5hbWljKGVudik7XG4gICAgfVxufVxuY2xhc3MgQ29tcG9uZW50VGFnQnVpbGRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaXNEeW5hbWljID0gbnVsbDtcbiAgICAgICAgdGhpcy5pc1N0YXRpYyA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RhdGljVGFnTmFtZSA9IG51bGw7XG4gICAgICAgIHRoaXMuZHluYW1pY1RhZ05hbWUgPSBudWxsO1xuICAgIH1cbiAgICBnZXREeW5hbWljKCkge1xuICAgICAgICBpZiAodGhpcy5pc0R5bmFtaWMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmR5bmFtaWNUYWdOYW1lO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldFN0YXRpYygpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdGF0aWMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0YXRpY1RhZ05hbWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljKHRhZ05hbWUpIHtcbiAgICAgICAgdGhpcy5pc1N0YXRpYyA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RhdGljVGFnTmFtZSA9IHRhZ05hbWU7XG4gICAgfVxuICAgIGR5bmFtaWModGFnTmFtZSkge1xuICAgICAgICB0aGlzLmlzRHluYW1pYyA9IHRydWU7XG4gICAgICAgIHRoaXMuZHluYW1pY1RhZ05hbWUgPSBbT3BzLkNsaWVudFNpZGVFeHByZXNzaW9uLCBDbGllbnRTaWRlLk9wcy5GdW5jdGlvbkV4cHJlc3Npb24sIHRhZ05hbWVdO1xuICAgIH1cbn1cbmNsYXNzIENvbXBvbmVudEF0dHJzQnVpbGRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuYnVmZmVyID0gW107XG4gICAgfVxuICAgIHN0YXRpYyhuYW1lLCB2YWx1ZSkge1xuICAgICAgICB0aGlzLmJ1ZmZlci5wdXNoKFtPcHMuU3RhdGljQXR0ciwgbmFtZSwgdmFsdWUsIG51bGxdKTtcbiAgICB9XG4gICAgZHluYW1pYyhuYW1lLCB2YWx1ZSkge1xuICAgICAgICB0aGlzLmJ1ZmZlci5wdXNoKFtPcHMuRHluYW1pY0F0dHIsIG5hbWUsIFtPcHMuQ2xpZW50U2lkZUV4cHJlc3Npb24sIENsaWVudFNpZGUuT3BzLkZ1bmN0aW9uRXhwcmVzc2lvbiwgdmFsdWVdLCBudWxsXSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIENvbXBvbmVudEJ1aWxkZXIge1xuICAgIGNvbnN0cnVjdG9yKGJ1aWxkZXIpIHtcbiAgICAgICAgdGhpcy5idWlsZGVyID0gYnVpbGRlcjtcbiAgICAgICAgdGhpcy5lbnYgPSBidWlsZGVyLmVudjtcbiAgICB9XG4gICAgc3RhdGljKGRlZmluaXRpb24sIGFyZ3MpIHtcbiAgICAgICAgbGV0IFtwYXJhbXMsIGhhc2gsIF9kZWZhdWx0LCBpbnZlcnNlXSA9IGFyZ3M7XG4gICAgICAgIGxldCB7IGJ1aWxkZXIgfSA9IHRoaXM7XG4gICAgICAgIGJ1aWxkZXIucHVzaENvbXBvbmVudE1hbmFnZXIoZGVmaW5pdGlvbik7XG4gICAgICAgIGJ1aWxkZXIuaW52b2tlQ29tcG9uZW50KG51bGwsIHBhcmFtcywgaGFzaCwgX2RlZmF1bHQsIGludmVyc2UpO1xuICAgIH1cbiAgICBkeW5hbWljKGRlZmluaXRpb25BcmdzLCBnZXREZWZpbml0aW9uLCBhcmdzKSB7XG4gICAgICAgIGxldCBbcGFyYW1zLCBoYXNoLCBibG9jaywgaW52ZXJzZV0gPSBhcmdzO1xuICAgICAgICBsZXQgeyBidWlsZGVyIH0gPSB0aGlzO1xuICAgICAgICBpZiAoIWRlZmluaXRpb25BcmdzIHx8IGRlZmluaXRpb25BcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRHluYW1pYyBzeW50YXggd2l0aG91dCBhbiBhcmd1bWVudFwiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbWV0YSA9IHRoaXMuYnVpbGRlci5tZXRhLnRlbXBsYXRlTWV0YTtcbiAgICAgICAgZnVuY3Rpb24gaGVscGVyKHZtLCBhKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RGVmaW5pdGlvbih2bSwgYSwgbWV0YSk7XG4gICAgICAgIH1cbiAgICAgICAgYnVpbGRlci5zdGFydExhYmVscygpO1xuICAgICAgICBidWlsZGVyLnB1c2hGcmFtZSgpO1xuICAgICAgICBidWlsZGVyLnJldHVyblRvKCdFTkQnKTtcbiAgICAgICAgYnVpbGRlci5jb21waWxlQXJncyhkZWZpbml0aW9uQXJnc1swXSwgZGVmaW5pdGlvbkFyZ3NbMV0sIHRydWUpO1xuICAgICAgICBidWlsZGVyLmhlbHBlcihoZWxwZXIpO1xuICAgICAgICBidWlsZGVyLmR1cCgpO1xuICAgICAgICBidWlsZGVyLnRlc3QoJ3NpbXBsZScpO1xuICAgICAgICBidWlsZGVyLmVudGVyKDIpO1xuICAgICAgICBidWlsZGVyLmp1bXBVbmxlc3MoJ0VMU0UnKTtcbiAgICAgICAgYnVpbGRlci5wdXNoRHluYW1pY0NvbXBvbmVudE1hbmFnZXIoKTtcbiAgICAgICAgYnVpbGRlci5pbnZva2VDb21wb25lbnQobnVsbCwgcGFyYW1zLCBoYXNoLCBibG9jaywgaW52ZXJzZSk7XG4gICAgICAgIGJ1aWxkZXIubGFiZWwoJ0VMU0UnKTtcbiAgICAgICAgYnVpbGRlci5leGl0KCk7XG4gICAgICAgIGJ1aWxkZXIucmV0dXJuKCk7XG4gICAgICAgIGJ1aWxkZXIubGFiZWwoJ0VORCcpO1xuICAgICAgICBidWlsZGVyLnBvcEZyYW1lKCk7XG4gICAgICAgIGJ1aWxkZXIuc3RvcExhYmVscygpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBidWlsZGVyKGVudiwgbWV0YSkge1xuICAgIHJldHVybiBuZXcgT3Bjb2RlQnVpbGRlckRTTChlbnYsIG1ldGEpO1xufSJdfQ==