@glimmer/application-test-helpers
Advanced tools
Comparing version 0.14.0-alpha.4 to 0.14.0-alpha.5
@@ -44,3 +44,3 @@ define('@glimmer/application-test-helpers/index', ['exports', '@glimmer/application-test-helpers/src/app-builder', '@glimmer/application-test-helpers/src/compiler', '@glimmer/application-test-helpers/src/default-resolver-configuration', '@glimmer/application-test-helpers/src/did-render', '@glimmer/application-test-helpers/src/render-test'], function (exports, _appBuilder, _compiler, _defaultResolverConfiguration, _didRender, _renderTest) { | ||
}); | ||
define("@glimmer/application-test-helpers/src/app-builder", ["exports", "@glimmer/resolver", "@glimmer/application-test-helpers/src/default-resolver-configuration", "@glimmer/application-test-helpers/src/compiler", "@glimmer/application", "@glimmer/component", "@glimmer/util", "@glimmer/bundle-compiler", "@glimmer/opcode-compiler", "@glimmer/application-test-helpers/src/did-render"], function (exports, _resolver, _defaultResolverConfiguration, _compiler, _application, _component, _util, _bundleCompiler, _opcodeCompiler, _didRender) { | ||
define("@glimmer/application-test-helpers/src/app-builder", ["exports", "@glimmer/resolver", "@glimmer/application-test-helpers/src/default-resolver-configuration", "@glimmer/application-test-helpers/src/compiler", "@glimmer/application", "@glimmer/component", "@glimmer/util", "@glimmer/bundle-compiler", "@glimmer/opcode-compiler", "@glimmer/ssr", "@glimmer/application-test-helpers/src/did-render"], function (exports, _resolver, _defaultResolverConfiguration, _compiler, _application, _component, _util, _bundleCompiler, _opcodeCompiler, _ssr, _didRender) { | ||
"use strict"; | ||
@@ -130,3 +130,3 @@ | ||
this.template('Main', '<div />'); | ||
this.helper('action', _application.buildAction); | ||
this.helper('action', _application.buildAction, true); | ||
} | ||
@@ -149,3 +149,6 @@ | ||
AppBuilder.prototype.helper = function helper(name, helperFunc) { | ||
var isFactory = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; | ||
var specifier = 'helper:/' + this.rootName + '/components/' + name; | ||
helperFunc.isFactory = isFactory; | ||
this.modules[specifier] = helperFunc; | ||
@@ -165,4 +168,4 @@ return this; | ||
AppBuilder.prototype.buildRuntimeCompilerLoader = function buildRuntimeCompilerLoader(resolver) { | ||
return new _application.RuntimeCompilerLoader(resolver); | ||
AppBuilder.prototype.buildRuntimeCompilerLoader = function buildRuntimeCompilerLoader() { | ||
return new _application.RuntimeCompilerLoader(); | ||
}; | ||
@@ -207,3 +210,4 @@ | ||
if (module.indexOf('helper:') === 0) { | ||
resolverTable[handle] = [1, _this2.modules[module]]; | ||
var moduleType = _this2.modules[module].isFactory ? 0 /* HELPER_FACTORY */ : 1 /* HELPER */; | ||
resolverTable[handle] = [moduleType, _this2.modules[module]]; | ||
} else { | ||
@@ -229,16 +233,28 @@ resolverTable[handle] = _this2.modules[module]; | ||
AppBuilder.prototype.buildLoader = function buildLoader(resolver) { | ||
switch (this.options.loader) { | ||
case 'runtime-compiler': | ||
return this.buildRuntimeCompilerLoader(); | ||
case 'bytecode': | ||
return this.buildBytecodeLoader(resolver); | ||
default: | ||
throw new Error('Unrecognized loader ' + this.options.loader); | ||
} | ||
}; | ||
AppBuilder.prototype.renderToString = function renderToString(componentName, data) { | ||
var resolver = this.buildResolver(); | ||
var loader = this.buildLoader(resolver); | ||
return _ssr.SSRApplication.renderToString(componentName, data, { | ||
rootName: this.rootName, | ||
resolver: resolver, | ||
loader: loader, | ||
renderer: new _application.SyncRenderer() | ||
}); | ||
}; | ||
AppBuilder.prototype.boot = function () { | ||
var _ref = _asyncToGenerator(function* () { | ||
var resolver = this.buildResolver(); | ||
var loader = void 0; | ||
switch (this.options.loader) { | ||
case 'runtime-compiler': | ||
loader = this.buildRuntimeCompilerLoader(resolver); | ||
break; | ||
case 'bytecode': | ||
loader = this.buildBytecodeLoader(resolver); | ||
break; | ||
default: | ||
throw new Error('Unrecognized loader ' + this.options.loader); | ||
} | ||
var loader = this.buildLoader(resolver); | ||
var doc = this.options.document || document; | ||
@@ -245,0 +261,0 @@ var element = doc.body; |
@@ -30,2 +30,4 @@ 'use strict'; | ||
var _ssr = require('@glimmer/ssr'); | ||
var _didRender = require('./did-render'); | ||
@@ -58,3 +60,3 @@ | ||
this.template('Main', '<div />'); | ||
this.helper('action', _application.buildAction); | ||
this.helper('action', _application.buildAction, true); | ||
} | ||
@@ -73,4 +75,5 @@ template(name, template) { | ||
} | ||
helper(name, helperFunc) { | ||
helper(name, helperFunc, isFactory = false) { | ||
let specifier = `helper:/${this.rootName}/components/${name}`; | ||
helperFunc.isFactory = isFactory; | ||
this.modules[specifier] = helperFunc; | ||
@@ -88,4 +91,4 @@ return this; | ||
} | ||
buildRuntimeCompilerLoader(resolver) { | ||
return new _application.RuntimeCompilerLoader(resolver); | ||
buildRuntimeCompilerLoader() { | ||
return new _application.RuntimeCompilerLoader(); | ||
} | ||
@@ -122,3 +125,4 @@ buildBytecodeLoader(resolver) { | ||
if (module.indexOf('helper:') === 0) { | ||
resolverTable[handle] = [1, this.modules[module]]; | ||
const moduleType = this.modules[module].isFactory ? 0 /* HELPER_FACTORY */ : 1 /* HELPER */; | ||
resolverTable[handle] = [moduleType, this.modules[module]]; | ||
} else { | ||
@@ -143,15 +147,25 @@ resolverTable[handle] = this.modules[module]; | ||
} | ||
async boot() { | ||
let resolver = this.buildResolver(); | ||
let loader; | ||
buildLoader(resolver) { | ||
switch (this.options.loader) { | ||
case 'runtime-compiler': | ||
loader = this.buildRuntimeCompilerLoader(resolver); | ||
break; | ||
return this.buildRuntimeCompilerLoader(); | ||
case 'bytecode': | ||
loader = this.buildBytecodeLoader(resolver); | ||
break; | ||
return this.buildBytecodeLoader(resolver); | ||
default: | ||
throw new Error(`Unrecognized loader ${this.options.loader}`); | ||
} | ||
} | ||
renderToString(componentName, data) { | ||
const resolver = this.buildResolver(); | ||
let loader = this.buildLoader(resolver); | ||
return _ssr.SSRApplication.renderToString(componentName, data, { | ||
rootName: this.rootName, | ||
resolver, | ||
loader, | ||
renderer: new _application.SyncRenderer() | ||
}); | ||
} | ||
async boot() { | ||
let resolver = this.buildResolver(); | ||
let loader = this.buildLoader(resolver); | ||
let doc = this.options.document || document; | ||
@@ -220,2 +234,2 @@ let element = doc.body; | ||
exports.buildApp = buildApp; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2FwcGxpY2F0aW9uLXRlc3QtaGVscGVycy9zcmMvYXBwLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFQTs7OztBQUNBOztBQUNBOzs7O0FBUUE7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBSUE7Ozs7OztBQWFNLE1BQU8sZUFBUCxTQUErQixxQkFBL0IsQ0FBMEM7UUFBbkMsZSxHQUFBLGU7QUFRYixTQUFTLFVBQVQsQ0FBb0IsTUFBcEIsRUFBb0MsSUFBcEMsRUFBZ0Q7QUFDOUMsV0FBTztBQUNMLGNBQU0sVUFERDtBQUVMLGNBRks7QUFHTCxZQUhLO0FBSUwsY0FBTTtBQUNKLGtCQURJO0FBRUo7QUFGSTtBQUpELEtBQVA7QUFTRDtBQUVLLE1BQU8sVUFBUCxDQUFpQjtBQU1yQixnQkFBWSxJQUFaLEVBQTBCLE9BQTFCLEVBQXVEO0FBSnZELGFBQUEsT0FBQSxHQUF5QixFQUF6QjtBQUNBLGFBQUEsU0FBQSxHQUEwQixFQUExQjtBQUlFLGFBQUssUUFBTCxHQUFnQixJQUFoQjtBQUNBLGFBQUssT0FBTCxHQUFlLE9BQWY7QUFDQSxhQUFLLE9BQUwsQ0FDRSxzQkFBc0IsS0FBSyxRQUFRLDBCQURyQyxJQUVJLEtBQUssT0FBTCxDQUFhLGdCQUZqQjtBQUdBLGFBQUssUUFBTCxDQUFjLE1BQWQsRUFBc0IsU0FBdEI7QUFDQSxhQUFLLE1BQUwsQ0FBWSxRQUFaLEVBQXNCLHdCQUF0QjtBQUNEO0FBRUQsYUFBUyxJQUFULEVBQXVCLFFBQXZCLEVBQXVDO0FBQ3JDLDBCQUNFLEtBQUssTUFBTCxDQUFZLENBQVosTUFBbUIsS0FBSyxNQUFMLENBQVksQ0FBWixFQUFlLFdBQWYsRUFEckIsRUFFRSxpREFGRjtBQUtBLFlBQUksWUFBWSxhQUFhLEtBQUssUUFBUSxlQUFlLElBQUksRUFBN0Q7QUFDQSxhQUFLLE9BQUwsQ0FBYSxTQUFiLElBQTBCLDBCQUFXLFFBQVgsRUFB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UUFBZCxDQUF1QixVQUFVLFVBQVUsRUFBM0MsRUFBK0MsU0FBUyxNQUF4RCxDQUFmO0FBQ0EsZUFBTyxFQUFFLFFBQVEsUUFBVixFQUFvQixNQUFNLFNBQTFCLEVBQVA7QUFDRDtBQUVELHNCQUFrQixXQUFsQixFQUF1QyxRQUF2QyxFQUE4RDtBQUM1RCxjQUFNLElBQUksS0FBSixDQUFVLHlCQUFWLENBQU47QUFDRDtBQUVELG1CQUFlLFdBQWYsRUFBb0MsUUFBcEMsRUFBMkQ7QUFDekQsY0FBTSxJQUFJLEtBQUosQ0FBVSx5QkFBVixDQUFOO0FBQ0Q7QUFFRCx1QkFBbUIsWUFBbkIsRUFBeUMsUUFBekMsRUFBZ0U7QUFDOUQsY0FBTSxJQUFJLEtBQUosQ0FBVSx5QkFBVixDQUFOO0FBQ0Q7QUFFRCxvQkFBZ0IsWUFBaEIsRUFBc0MsUUFBdEMsRUFBNkQ7QUFDM0QsY0FBTSxJQUFJLEtBQUosQ0FBVSx5QkFBVixDQUFOO0FBQ0Q7QUF2Q21CO0FBMEN0QixTQUFTLFFBQVQsQ0FBNkMsVUFBZ0MsRUFBN0UsRUFBK0U7QUFDN0UsWUFBUSxPQUFSLEdBQWtCLFFBQVEsT0FBUixJQUFtQixVQUFyQztBQUNBLFlBQVEsTUFBUixHQUFpQixRQUFRLE1BQVIsSUFBa0Isa0JBQW5DO0FBQ0EsWUFBUSxnQkFBUixHQUEyQixRQUFRLGdCQUFSLElBQTRCLDJCQUF2RDtBQUNBLFlBQVEsZ0JBQVIsR0FDRSxRQUFRLGdCQUFSLElBQTZCLGVBRC9CO0FBR0EsV0FBTyxJQUFJLFVBQUosQ0FBZSxRQUFRLE9BQXZCLEVBQWdDLE9BQWhDLENBQVA7QUFDRDtRQUVRLFEsR0FBQSxRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlc29sdmVyLCB7IEJhc2ljTW9kdWxlUmVnaXN0cnksIFJlc29sdmVyQ29uZmlndXJhdGlvbiB9IGZyb20gJ0BnbGltbWVyL3Jlc29sdmVyJztcbmltcG9ydCB7IERpY3QsIE1vZHVsZUxvY2F0b3IsIFRlbXBsYXRlTG9jYXRvciB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IGRlZmF1bHRSZXNvbHZlckNvbmZpZ3VyYXRpb24gZnJvbSAnLi9kZWZhdWx0LXJlc29sdmVyLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHsgcHJlY29tcGlsZSB9IGZyb20gJy4vY29tcGlsZXInO1xuaW1wb3J0IEFwcGxpY2F0aW9uLCB7XG4gIEFwcGxpY2F0aW9uQ29uc3RydWN0b3IsXG4gIEJ5dGVjb2RlTG9hZGVyLFxuICBET01CdWlsZGVyLFxuICBMb2FkZXIsXG4gIFJ1bnRpbWVDb21waWxlckxvYWRlcixcbiAgU3luY1JlbmRlcmVyLFxufSBmcm9tICdAZ2xpbW1lci9hcHBsaWNhdGlvbic7XG5pbXBvcnQgeyBDb21wb25lbnRNYW5hZ2VyLCBDQVBBQklMSVRJRVMgfSBmcm9tICdAZ2xpbW1lci9jb21wb25lbnQnO1xuaW1wb3J0IHsgYXNzZXJ0IH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyBCdW5kbGVDb21waWxlciwgQ29tcGlsZXJEZWxlZ2F0ZSBhcyBJQ29tcGlsZXJEZWxlZ2F0ZSB9IGZyb20gJ0BnbGltbWVyL2J1bmRsZS1jb21waWxlcic7XG5pbXBvcnQgeyBidWlsZEFjdGlvbiwgbWFpblRlbXBsYXRlIH0gZnJvbSAnQGdsaW1tZXIvYXBwbGljYXRpb24nO1xuaW1wb3J0IHsgY29tcGlsYWJsZSB9IGZyb20gJ0BnbGltbWVyL29wY29kZS1jb21waWxlcic7XG5pbXBvcnQgeyBNZXRhZGF0YSB9IGZyb20gJy4uLy4uL2FwcGxpY2F0aW9uL3NyYy9sb2FkZXJzL2J5dGVjb2RlL2xvYWRlcic7XG5pbXBvcnQgeyBTaW1wbGVEb2N1bWVudCB9IGZyb20gJ0BzaW1wbGUtZG9tL2ludGVyZmFjZSc7XG5cbmltcG9ydCBkaWRSZW5kZXIgZnJvbSAnLi9kaWQtcmVuZGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBBcHBCdWlsZGVyT3B0aW9uczxUPiB7XG4gIGFwcE5hbWU/OiBzdHJpbmc7XG4gIGxvYWRlcj86IHN0cmluZztcbiAgQXBwbGljYXRpb25DbGFzcz86IEFwcGxpY2F0aW9uQ29uc3RydWN0b3I8VD47XG4gIENvbXBvbmVudE1hbmFnZXI/OiBhbnk7IC8vIFRPRE8gLSB0eXBpbmdcbiAgcmVzb2x2ZXJDb25maWd1cmF0aW9uPzogUmVzb2x2ZXJDb25maWd1cmF0aW9uO1xuICBkb2N1bWVudD86IFNpbXBsZURvY3VtZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudEZhY3Rvcnkge31cblxuZXhwb3J0IGNsYXNzIFRlc3RBcHBsaWNhdGlvbiBleHRlbmRzIEFwcGxpY2F0aW9uIHtcbiAgcm9vdEVsZW1lbnQ6IEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwQnVpbGRlclRlbXBsYXRlTWV0YSB7XG4gIHNwZWNpZmllcjogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBsb2NhdG9yRm9yKG1vZHVsZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBUZW1wbGF0ZUxvY2F0b3I8TW9kdWxlTG9jYXRvcj4ge1xuICByZXR1cm4ge1xuICAgIGtpbmQ6ICd0ZW1wbGF0ZScsXG4gICAgbW9kdWxlLFxuICAgIG5hbWUsXG4gICAgbWV0YToge1xuICAgICAgbW9kdWxlLFxuICAgICAgbmFtZSxcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgQXBwQnVpbGRlcjxUIGV4dGVuZHMgVGVzdEFwcGxpY2F0aW9uPiB7XG4gIHJvb3ROYW1lOiBzdHJpbmc7XG4gIG1vZHVsZXM6IERpY3Q8dW5rbm93bj4gPSB7fTtcbiAgdGVtcGxhdGVzOiBEaWN0PHN0cmluZz4gPSB7fTtcbiAgb3B0aW9uczogQXBwQnVpbGRlck9wdGlvbnM8VD47XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCBvcHRpb25zOiBBcHBCdWlsZGVyT3B0aW9uczxUPikge1xuICAgIHRoaXMucm9vdE5hbWUgPSBuYW1lO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5tb2R1bGVzW1xuICAgICAgYGNvbXBvbmVudC1tYW5hZ2VyOi8ke3RoaXMucm9vdE5hbWV9L2NvbXBvbmVudC1tYW5hZ2Vycy9tYWluYFxuICAgIF0gPSB0aGlzLm9wdGlvbnMuQ29tcG9uZW50TWFuYWdlcjtcbiAgICB0aGlzLnRlbXBsYXRlKCdNYWluJywgJzxkaXYgLz4nKTtcbiAgICB0aGlzLmhlbHBlcignYWN0aW9uJywgYnVpbGRBY3Rpb24pO1xuICB9XG5cbiAgdGVtcGxhdGUobmFtZTogc3RyaW5nLCB0ZW1wbGF0ZTogc3RyaW5nKSB7XG4gICAgYXNzZXJ0KFxuICAgICAgbmFtZS5jaGFyQXQoMCkgPT09IG5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCksXG4gICAgICAndGVtcGxhdGUgbmFtZXMgbXVzdCBzdGFydCB3aXRoIGEgY2FwaXRhbCBsZXR0ZXInXG4gICAgKTtcblxuICAgIGxldCBzcGVjaWZpZXIgPSBgdGVtcGxhdGU6LyR7dGhpcy5yb290TmFtZX0vY29tcG9uZW50cy8ke25hbWV9YDtcbiAgICB0aGlzLm1vZHVsZXNbc3BlY2lmaWVyXSA9IHByZWNvbXBpbGUodGVtcGxhdGUsIHsgbWV0YTogeyBzcGVjaWZpZXIgfSB9KTtcbiAgICB0aGlzLnRlbXBsYXRlc1tzcGVjaWZpZXJdID0gdGVtcGxhdGU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb21wb25lbnQobmFtZTogc3RyaW5nLCBjb21wb25lbnRGYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5KSB7XG4gICAgbGV0IHNwZWNpZmllciA9IGBjb21wb25lbnQ6LyR7dGhpcy5yb290TmFtZX0vY29tcG9uZW50cy8ke25hbWV9YDtcbiAgICB0aGlzLm1vZHVsZXNbc3BlY2lmaWVyXSA9IGNvbXBvbmVudEZhY3Rvcnk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBoZWxwZXIobmFtZTogc3RyaW5nLCBoZWxwZXJGdW5jOiBGdW5jdGlvbikge1xuICAgIGxldCBzcGVjaWZpZXIgPSBgaGVscGVyOi8ke3RoaXMucm9vdE5hbWV9L2NvbXBvbmVudHMvJHtuYW1lfWA7XG4gICAgdGhpcy5tb2R1bGVzW3NwZWNpZmllcl0gPSBoZWxwZXJGdW5jO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGJ1aWxkUmVzb2x2ZXIoKTogUmVzb2x2ZXIge1xuICAgIGxldCByZXNvbHZlckNvbmZpZ3VyYXRpb24gPSB0aGlzLm9wdGlvbnMucmVzb2x2ZXJDb25maWd1cmF0aW9uIHx8IGRlZmF1bHRSZXNvbHZlckNvbmZpZ3VyYXRpb247XG4gICAgcmVzb2x2ZXJDb25maWd1cmF0aW9uLmFwcCA9IHJlc29sdmVyQ29uZmlndXJhdGlvbi5hcHAgfHwge1xuICAgICAgbmFtZTogdGhpcy5yb290TmFtZSxcbiAgICAgIHJvb3ROYW1lOiB0aGlzLnJvb3ROYW1lLFxuICAgIH07XG5cbiAgICBsZXQgcmVnaXN0cnkgPSBuZXcgQmFzaWNNb2R1bGVSZWdpc3RyeSh0aGlzLm1vZHVsZXMpO1xuICAgIHJldHVybiBuZXcgUmVzb2x2ZXIocmVzb2x2ZXJDb25maWd1cmF0aW9uLCByZWdpc3RyeSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRSdW50aW1lQ29tcGlsZXJMb2FkZXIocmVzb2x2ZXI6IFJlc29sdmVyKTogTG9hZGVyIHtcbiAgICByZXR1cm4gbmV3IFJ1bnRpbWVDb21waWxlckxvYWRlcihyZXNvbHZlcik7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRCeXRlY29kZUxvYWRlcihyZXNvbHZlcjogUmVzb2x2ZXIpIHtcbiAgICBsZXQgZGVsZWdhdGUgPSBuZXcgQ29tcGlsZXJEZWxlZ2F0ZShyZXNvbHZlcik7XG4gICAgbGV0IGNvbXBpbGVyID0gbmV3IEJ1bmRsZUNvbXBpbGVyKGRlbGVnYXRlKTtcblxuICAgIGxldCBtYWluTG9jYXRvciA9IGxvY2F0b3JGb3IoJ3RlbXBsYXRlOm1haW5UZW1wbGF0ZScsICdkZWZhdWx0Jyk7XG4gICAgbWFpbkxvY2F0b3IubWV0YS5tb2R1bGUgPSAndGVtcGxhdGU6bWFpblRlbXBsYXRlJztcblxuICAgIGxldCBibG9jayA9IEpTT04ucGFyc2UobWFpblRlbXBsYXRlLmJsb2NrKTtcbiAgICBsZXQgY29tcGlsYWJsZVRlbXBsYXRlID0gY29tcGlsYWJsZSh7XG4gICAgICBibG9jayxcbiAgICAgIHJlZmVycmVyOiBtYWluTG9jYXRvci5tZXRhLFxuICAgIH0pO1xuXG4gICAgY29tcGlsZXIuYWRkQ29tcGlsYWJsZVRlbXBsYXRlKG1haW5Mb2NhdG9yLCBjb21waWxhYmxlVGVtcGxhdGUpO1xuXG4gICAgZm9yIChsZXQgbW9kdWxlIGluIHRoaXMudGVtcGxhdGVzKSB7XG4gICAgICBjb21waWxlci5hZGRUZW1wbGF0ZVNvdXJjZShsb2NhdG9yRm9yKG1vZHVsZSwgJ2RlZmF1bHQnKSwgdGhpcy50ZW1wbGF0ZXNbbW9kdWxlXSk7XG4gICAgfVxuXG4gICAgbGV0IHsgaGVhcCwgcG9vbCwgdGFibGUgfSA9IGNvbXBpbGVyLmNvbXBpbGUoKTtcblxuICAgIGxldCByZXNvbHZlclRhYmxlOiB1bmtub3duW10gPSBbXTtcblxuICAgIGxldCBtZXRhOiBEaWN0PE1ldGFkYXRhPiA9IHt9O1xuXG4gICAgdGFibGUudm1IYW5kbGVCeU1vZHVsZUxvY2F0b3IuZm9yRWFjaCgodm1IYW5kbGUsIGxvY2F0b3IpID0+IHtcbiAgICAgIGxldCBoYW5kbGUgPSB0YWJsZS5ieU1vZHVsZUxvY2F0b3IuZ2V0KGxvY2F0b3IpO1xuICAgICAgbGV0IHRlbXBsYXRlID0gY29tcGlsZXIuZ2V0VGVtcGxhdGUobG9jYXRvcik7XG5cbiAgICAgIG1ldGFbbG9jYXRvci5tb2R1bGVdID0ge1xuICAgICAgICB2OiB2bUhhbmRsZSxcbiAgICAgICAgaDogaGFuZGxlLFxuICAgICAgICB0YWJsZTogdGVtcGxhdGUuc3ltYm9sVGFibGUsXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGFibGUuYnlIYW5kbGUuZm9yRWFjaCgobG9jYXRvciwgaGFuZGxlKSA9PiB7XG4gICAgICBsZXQgbW9kdWxlID0gbG9jYXRvci5tb2R1bGUucmVwbGFjZSgndGVtcGxhdGU6LycsICdjb21wb25lbnQ6LycpO1xuICAgICAgaWYgKHRoaXMubW9kdWxlc1ttb2R1bGVdKSB7XG4gICAgICAgIGlmIChtb2R1bGUuaW5kZXhPZignaGVscGVyOicpID09PSAwKSB7XG4gICAgICAgICAgcmVzb2x2ZXJUYWJsZVtoYW5kbGVdID0gWzEsIHRoaXMubW9kdWxlc1ttb2R1bGVdXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlclRhYmxlW2hhbmRsZV0gPSB0aGlzLm1vZHVsZXNbbW9kdWxlXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbGV0IGJ5dGVjb2RlID0gaGVhcC5idWZmZXI7XG4gICAgbGV0IGRhdGEgPSB7XG4gICAgICBwcmVmaXg6ICcnLFxuICAgICAgbWFpbkVudHJ5OiB0YWJsZS52bUhhbmRsZUJ5TW9kdWxlTG9jYXRvci5nZXQobWFpbkxvY2F0b3IpLFxuICAgICAgcG9vbCxcbiAgICAgIHRhYmxlOiByZXNvbHZlclRhYmxlLFxuICAgICAgbWV0YSxcbiAgICAgIGhlYXA6IHtcbiAgICAgICAgdGFibGU6IGhlYXAudGFibGUsXG4gICAgICAgIGhhbmRsZTogaGVhcC5oYW5kbGUsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IEJ5dGVjb2RlTG9hZGVyKHsgYnl0ZWNvZGUsIGRhdGEgfSk7XG4gIH1cblxuICBhc3luYyBib290KCk6IFByb21pc2U8VD4ge1xuICAgIGxldCByZXNvbHZlciA9IHRoaXMuYnVpbGRSZXNvbHZlcigpO1xuICAgIGxldCBsb2FkZXI6IExvYWRlcjtcblxuICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLmxvYWRlcikge1xuICAgICAgY2FzZSAncnVudGltZS1jb21waWxlcic6XG4gICAgICAgIGxvYWRlciA9IHRoaXMuYnVpbGRSdW50aW1lQ29tcGlsZXJMb2FkZXIocmVzb2x2ZXIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2J5dGVjb2RlJzpcbiAgICAgICAgbG9hZGVyID0gdGhpcy5idWlsZEJ5dGVjb2RlTG9hZGVyKHJlc29sdmVyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBsb2FkZXIgJHt0aGlzLm9wdGlvbnMubG9hZGVyfWApO1xuICAgIH1cblxuICAgIGxldCBkb2M6IERvY3VtZW50ID0gKHRoaXMub3B0aW9ucy5kb2N1bWVudCBhcyBEb2N1bWVudCkgfHwgZG9jdW1lbnQ7XG4gICAgbGV0IGVsZW1lbnQgPSBkb2MuYm9keTtcbiAgICBsZXQgYnVpbGRlciA9IG5ldyBET01CdWlsZGVyKHsgZWxlbWVudCB9KTtcbiAgICBsZXQgcmVuZGVyZXIgPSBuZXcgU3luY1JlbmRlcmVyKCk7XG5cbiAgICBsZXQgYXBwID0gbmV3IHRoaXMub3B0aW9ucy5BcHBsaWNhdGlvbkNsYXNzKHtcbiAgICAgIHJlc29sdmVyLFxuICAgICAgYnVpbGRlcixcbiAgICAgIGxvYWRlcixcbiAgICAgIHJlbmRlcmVyLFxuICAgICAgcm9vdE5hbWU6IHRoaXMucm9vdE5hbWUsXG4gICAgICBkb2N1bWVudDogdGhpcy5vcHRpb25zLmRvY3VtZW50LFxuICAgIH0pO1xuXG4gICAgbGV0IHJvb3RFbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGFwcC5yb290RWxlbWVudCA9IHJvb3RFbGVtZW50O1xuICAgIGFwcC5yZW5kZXJDb21wb25lbnQoJ01haW4nLCByb290RWxlbWVudCk7XG4gICAgYXBwLmJvb3QoKTtcblxuICAgIGF3YWl0IGRpZFJlbmRlcihhcHApO1xuXG4gICAgcmV0dXJuIGFwcDtcbiAgfVxufVxuXG5jbGFzcyBDb21waWxlckRlbGVnYXRlIGltcGxlbWVudHMgSUNvbXBpbGVyRGVsZWdhdGU8TW9kdWxlTG9jYXRvcj4ge1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVzb2x2ZXI6IFJlc29sdmVyKSB7fVxuXG4gIGhhc0NvbXBvbmVudEluU2NvcGUobmFtZTogc3RyaW5nLCByZWZlcnJlcjogTW9kdWxlTG9jYXRvcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucmVzb2x2ZXIuaWRlbnRpZnkoYHRlbXBsYXRlOiR7bmFtZX1gLCByZWZlcnJlci5tb2R1bGUpO1xuICB9XG5cbiAgcmVzb2x2ZUNvbXBvbmVudChuYW1lOiBzdHJpbmcsIHJlZmVycmVyOiBNb2R1bGVMb2NhdG9yKTogTW9kdWxlTG9jYXRvciB7XG4gICAgbGV0IHJlc29sdmVkID0gdGhpcy5yZXNvbHZlci5pZGVudGlmeShgdGVtcGxhdGU6JHtuYW1lfWAsIHJlZmVycmVyLm1vZHVsZSk7XG4gICAgcmV0dXJuIHsgbW9kdWxlOiByZXNvbHZlZCwgbmFtZTogJ2RlZmF1bHQnIH07XG4gIH1cblxuICBnZXRDb21wb25lbnRDYXBhYmlsaXRpZXMoKSB7XG4gICAgcmV0dXJuIENBUEFCSUxJVElFUztcbiAgfVxuXG4gIGhhc0hlbHBlckluU2NvcGUoaGVscGVyTmFtZTogc3RyaW5nLCByZWZlcnJlcjogTW9kdWxlTG9jYXRvcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucmVzb2x2ZXIuaWRlbnRpZnkoYGhlbHBlcjoke2hlbHBlck5hbWV9YCwgcmVmZXJyZXIubW9kdWxlKTtcbiAgfVxuXG4gIHJlc29sdmVIZWxwZXIoaGVscGVyTmFtZTogc3RyaW5nLCByZWZlcnJlcjogTW9kdWxlTG9jYXRvcik6IE1vZHVsZUxvY2F0b3Ige1xuICAgIGxldCByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZXIuaWRlbnRpZnkoYGhlbHBlcjoke2hlbHBlck5hbWV9YCwgcmVmZXJyZXIubW9kdWxlKTtcbiAgICByZXR1cm4geyBtb2R1bGU6IHJlc29sdmVkLCBuYW1lOiAnZGVmYXVsdCcgfTtcbiAgfVxuXG4gIGhhc1BhcnRpYWxJblNjb3BlKHBhcnRpYWxOYW1lOiBzdHJpbmcsIHJlZmVycmVyOiBNb2R1bGVMb2NhdG9yKTogYm9vbGVhbiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgcmVzb2x2ZVBhcnRpYWwocGFydGlhbE5hbWU6IHN0cmluZywgcmVmZXJyZXI6IE1vZHVsZUxvY2F0b3IpOiBNb2R1bGVMb2NhdG9yIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICBoYXNNb2RpZmllckluU2NvcGUobW9kaWZpZXJOYW1lOiBzdHJpbmcsIHJlZmVycmVyOiBNb2R1bGVMb2NhdG9yKTogYm9vbGVhbiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgcmVzb2x2ZU1vZGlmaWVyKG1vZGlmaWVyTmFtZTogc3RyaW5nLCByZWZlcnJlcjogTW9kdWxlTG9jYXRvcik6IE1vZHVsZUxvY2F0b3Ige1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZEFwcDxUIGV4dGVuZHMgVGVzdEFwcGxpY2F0aW9uPihvcHRpb25zOiBBcHBCdWlsZGVyT3B0aW9uczxUPiA9IHt9KTogQXBwQnVpbGRlcjxUPiB7XG4gIG9wdGlvbnMuYXBwTmFtZSA9IG9wdGlvbnMuYXBwTmFtZSB8fCAndGVzdC1hcHAnO1xuICBvcHRpb25zLmxvYWRlciA9IG9wdGlvbnMubG9hZGVyIHx8ICdydW50aW1lLWNvbXBpbGVyJztcbiAgb3B0aW9ucy5Db21wb25lbnRNYW5hZ2VyID0gb3B0aW9ucy5Db21wb25lbnRNYW5hZ2VyIHx8IENvbXBvbmVudE1hbmFnZXI7XG4gIG9wdGlvbnMuQXBwbGljYXRpb25DbGFzcyA9XG4gICAgb3B0aW9ucy5BcHBsaWNhdGlvbkNsYXNzIHx8IChUZXN0QXBwbGljYXRpb24gYXMgQXBwbGljYXRpb25Db25zdHJ1Y3RvcjxUPik7XG5cbiAgcmV0dXJuIG5ldyBBcHBCdWlsZGVyKG9wdGlvbnMuYXBwTmFtZSwgb3B0aW9ucyk7XG59XG5cbmV4cG9ydCB7IGJ1aWxkQXBwIH07XG4iXSwic291cmNlUm9vdCI6IiJ9 | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2FwcGxpY2F0aW9uLXRlc3QtaGVscGVycy9zcmMvYXBwLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFQTs7OztBQUNBOztBQUNBOzs7O0FBU0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBR0E7O0FBRUE7Ozs7OztBQWFNLE1BQU8sZUFBUCxTQUErQixxQkFBL0IsQ0FBMEM7UUFBbkMsZSxHQUFBLGU7QUFZYixTQUFTLFVBQVQsQ0FBb0IsTUFBcEIsRUFBb0MsSUFBcEMsRUFBZ0Q7QUFDOUMsV0FBTztBQUNMLGNBQU0sVUFERDtBQUVMLGNBRks7QUFHTCxZQUhLO0FBSUwsY0FBTTtBQUNKLGtCQURJO0FBRUo7QUFGSTtBQUpELEtBQVA7QUFTRDtBQUVLLE1BQU8sVUFBUCxDQUFpQjtBQU1yQixnQkFBWSxJQUFaLEVBQTBCLE9BQTFCLEVBQXVEO0FBSnZELGFBQUEsT0FBQSxHQUF5QixFQUF6QjtBQUNBLGFBQUEsU0FBQSxHQUEwQixFQUExQjtBQUlFLGFBQUssUUFBTCxHQUFnQixJQUFoQjtBQUNBLGFBQUssT0FBTCxHQUFlLE9BQWY7QUFDQSxhQUFLLE9BQUwsQ0FDRSxzQkFBc0IsS0FBSyxRQUFRLDBCQURyQyxJQUVJLEtBQUssT0FBTCxDQUFhLGdCQUZqQjtBQUdBLGFBQUssUUFBTCxDQUFjLE1BQWQsRUFBc0IsU0FBdEI7QUFDQSxhQUFLLE1BQUwsQ0FBWSxRQUFaLEVBQXNCLHdCQUF0QixFQUFtQyxJQUFuQztBQUNEO0FBRUQsYUFBUyxJQUFULEVBQXVCLFFBQXZCLEVBQXVDO0FBQ3JDLDBCQUNFLEtBQUssTUFBTCxDQUFZLENBQVosTUFBbUIsS0FBSyxNQUFMLENBQVksQ0FBWixFQUFlLFdBQWYsRUFEckIsRUFFRSxpREFGRjtBQUtBLFlBQUksWUFBWSxhQUFhLEtBQUssUUFBUSxlQUFlLElBQUksRUFBN0Q7QUFDQSxhQUFLLE9BQUwsQ0FBYSxTQUFiLElBQTBCLDBCQUFXLFFBQVgsRUFBcUIsRUFBRSxNQUFNLEVBQUUsU0FBRixFQUFSLEVBQXJCLENBQTFCO0FBQ0EsYUFBSyxTQUFMLENBQWUsU0FBZixJQUE0QixRQUE1QjtBQUNBLGVBQU8sSUFBUDtBQUNEO0FBRUQsY0FBVSxJQUFWLEVBQXdCLGdCQUF4QixFQUEwRDtBQUN4RCxZQUFJLFlBQVksY0FBYyxLQUFLLFFBQVEsZUFBZSxJQUFJLEVBQTlEO0FBQ0EsYUFBSyxPQUFMLENBQWEsU0FBYixJQUEwQixnQkFBMUI7QUFDQSxlQUFPLElBQVA7QUFDRDtBQUVELFdBQU8sSUFBUCxFQUFxQixVQUFyQixFQUFpRCxZQUFZLEtBQTdELEVBQWtFO0FBQ2hFLFlBQUksWUFBWSxXQUFXLEtBQUssUUFBUSxlQUFlLElBQUksRUFBM0Q7QUFDQSxtQkFBVyxTQUFYLEdBQXVCLFNBQXZCO0FBQ0EsYUFBSyxPQUFMLENBQWEsU0FBYixJQUEwQixVQUExQjtBQUNBLGVBQU8sSUFBUDtBQUNEO0FBRVMsb0JBQWE7QUFDckIsWUFBSSx3QkFBd0IsS0FBSyxPQUFMLENBQWEscUJBQWIsSUFBc0Msc0NBQWxFO0FBQ0EsOEJBQXNCLEdBQXRCLEdBQTRCLHNCQUFzQixHQUF0QixJQUE2QjtBQUN2RCxrQkFBTSxLQUFLLFFBRDRDO0FBRXZELHNCQUFVLEtBQUs7QUFGd0MsU0FBekQ7QUFLQSxZQUFJLFdBQVcsSUFBSSw2QkFBSixDQUF3QixLQUFLLE9BQTdCLENBQWY7QUFDQSxlQUFPLElBQUksa0JBQUosQ0FBYSxxQkFBYixFQUFvQyxRQUFwQyxDQUFQO0FBQ0Q7QUFFUyxpQ0FBMEI7QUFDbEMsZUFBTyxJQUFJLGtDQUFKLEVBQVA7QUFDRDtBQUVTLHdCQUFvQixRQUFwQixFQUFzQztBQUM5QyxZQUFJLFdBQVcsSUFBSSxnQkFBSixDQUFxQixRQUFyQixDQUFmO0FBQ0EsWUFBSSxXQUFXLElBQUksOEJBQUosQ0FBbUIsUUFBbkIsQ0FBZjtBQUVBLFlBQUksY0FBYyxXQUFXLHVCQUFYLEVBQW9DLFNBQXBDLENBQWxCO0FBQ0Esb0JBQVksSUFBWixDQUFpQixNQUFqQixHQUEwQix1QkFBMUI7QUFFQSxZQUFJLFFBQVEsS0FBSyxLQUFMLENBQVcsMEJBQWEsS0FBeEIsQ0FBWjtBQUNBLFlBQUkscUJBQXFCLGdDQUFXO0FBQ2xDLGlCQURrQztBQUVsQyxzQkFBVSxZQUFZO0FBRlksU0FBWCxDQUF6QjtBQUtBLGlCQUFTLHFCQUFULENBQStCLFdBQS9CLEVBQTRDLGtCQUE1QztBQUVBLGFBQUssSUFBSSxNQUFULElBQW1CLEtBQUssU0FBeEIsRUFBbUM7QUFDakMscUJBQVMsaUJBQVQsQ0FBMkIsV0FBVyxNQUFYLEVBQW1CLFNBQW5CLENBQTNCLEVBQTBELEtBQUssU0FBTCxDQUFlLE1BQWYsQ0FBMUQ7QUFDRDtBQUVELFlBQUksRUFBRSxJQUFGLEVBQVEsSUFBUixFQUFjLEtBQWQsS0FBd0IsU0FBUyxPQUFULEVBQTVCO0FBRUEsWUFBSSxnQkFBMkIsRUFBL0I7QUFFQSxZQUFJLE9BQXVCLEVBQTNCO0FBRUEsY0FBTSx1QkFBTixDQUE4QixPQUE5QixDQUFzQyxDQUFDLFFBQUQsRUFBVyxPQUFYLEtBQXNCO0FBQzFELGdCQUFJLFNBQVMsTUFBTSxlQUFOLENBQXNCLEdBQXRCLENBQTBCLE9BQTFCLENBQWI7QUFDQSxnQkFBSSxXQUFXLFNBQVMsV0FBVCxDQUFxQixPQUFyQixDQUFmO0FBRUEsaUJBQUssUUFBUSxNQUFiLElBQXVCO0FBQ3JCLG1CQUFHLFFBRGtCO0FBRXJCLG1CQUFHLE1BRmtCO0FBR3JCLHVCQUFPLFNBQVM7QUFISyxhQUF2QjtBQUtELFNBVEQ7QUFXQSxjQUFNLFFBQU4sQ0FBZSxPQUFmLENBQXVCLENBQUMsT0FBRCxFQUFVLE1BQVYsS0FBb0I7QUFDekMsZ0JBQUksU0FBUyxRQUFRLE1BQVIsQ0FBZSxPQUFmLENBQXVCLFlBQXZCLEVBQXFDLGFBQXJDLENBQWI7QUFDQSxnQkFBSSxLQUFLLE9BQUwsQ0FBYSxNQUFiLENBQUosRUFBMEI7QUFDeEIsb0JBQUksT0FBTyxPQUFQLENBQWUsU0FBZixNQUE4QixDQUFsQyxFQUFxQztBQUNuQywwQkFBTSxhQUFjLEtBQUssT0FBTCxDQUFhLE1BQWIsRUFBd0MsU0FBeEMsR0FBbUQsQ0FBbkQsQ0FBbUQsb0JBQW5ELEdBQWdGLENBQXBHLENBQW9HLFlBQXBHO0FBQ0Esa0NBQWMsTUFBZCxJQUF3QixDQUFDLFVBQUQsRUFBYSxLQUFLLE9BQUwsQ0FBYSxNQUFiLENBQWIsQ0FBeEI7QUFDRCxpQkFIRCxNQUdPO0FBQ0wsa0NBQWMsTUFBZCxJQUF3QixLQUFLLE9BQUwsQ0FBYSxNQUFiLENBQXhCO0FBQ0Q7QUFDRjtBQUNGLFNBVkQ7QUFZQSxZQUFJLFdBQVcsS0FBSyxNQUFwQjtBQUNBLFlBQUksT0FBTztBQUNULG9CQUFRLEVBREM7QUFFVCx1QkFBVyxNQUFNLHVCQUFOLENBQThCLEdBQTlCLENBQWtDLFdBQWxDLENBRkY7QUFHVCxnQkFIUztBQUlULG1CQUFPLGFBSkU7QUFLVCxnQkFMUztBQU1ULGtCQUFNO0FBQ0osdUJBQU8sS0FBSyxLQURSO0FBRUosd0JBQVEsS0FBSztBQUZUO0FBTkcsU0FBWDtBQVlBLGVBQU8sSUFBSSwyQkFBSixDQUFtQixFQUFFLFFBQUYsRUFBWSxJQUFaLEVBQW5CLENBQVA7QUFDRDtBQUVTLGdCQUFZLFFBQVosRUFBb0I7QUFDNUIsZ0JBQVEsS0FBSyxPQUFMLENBQWEsTUFBckI7QUFDRSxpQkFBSyxrQkFBTDtBQUNFLHVCQUFPLEtBQUssMEJBQUwsRUFBUDtBQUNGLGlCQUFLLFVBQUw7QUFDRSx1QkFBTyxLQUFLLG1CQUFMLENBQXlCLFFBQXpCLENBQVA7QUFDRjtBQUNFLHNCQUFNLElBQUksS0FBSixDQUFVLHVCQUF1QixLQUFLLE9BQUwsQ0FBYSxNQUFNLEVBQXBELENBQU47QUFOSjtBQVFEO0FBRUQsbUJBQWUsYUFBZixFQUFzQyxJQUF0QyxFQUF5RDtBQUN2RCxjQUFNLFdBQVcsS0FBSyxhQUFMLEVBQWpCO0FBQ0EsWUFBSSxTQUFTLEtBQUssV0FBTCxDQUFpQixRQUFqQixDQUFiO0FBRUEsZUFBTyxvQkFBZSxjQUFmLENBQThCLGFBQTlCLEVBQTZDLElBQTdDLEVBQW1EO0FBQ3hELHNCQUFVLEtBQUssUUFEeUM7QUFFeEQsb0JBRndEO0FBR3hELGtCQUh3RDtBQUl4RCxzQkFBVSxJQUFJLHlCQUFKO0FBSjhDLFNBQW5ELENBQVA7QUFNRDtBQUVELFVBQU0sSUFBTixHQUFVO0FBQ1IsWUFBSSxXQUFXLEtBQUssYUFBTCxFQUFmO0FBQ0EsWUFBSSxTQUFpQixLQUFLLFdBQUwsQ0FBaUIsUUFBakIsQ0FBckI7QUFFQSxZQUFJLE1BQWlCLEtBQUssT0FBTCxDQUFhLFFBQWIsSUFBc0MsUUFBM0Q7QUFDQSxZQUFJLFVBQVUsSUFBSSxJQUFsQjtBQUNBLFlBQUksVUFBVSxJQUFJLHVCQUFKLENBQWUsRUFBRSxPQUFGLEVBQWYsQ0FBZDtBQUNBLFlBQUksV0FBVyxJQUFJLHlCQUFKLEVBQWY7QUFFQSxZQUFJLE1BQU0sSUFBSSxLQUFLLE9BQUwsQ0FBYSxnQkFBakIsQ0FBa0M7QUFDMUMsb0JBRDBDO0FBRTFDLG1CQUYwQztBQUcxQyxrQkFIMEM7QUFJMUMsb0JBSjBDO0FBSzFDLHNCQUFVLEtBQUssUUFMMkI7QUFNMUMsc0JBQVUsS0FBSyxPQUFMLENBQWE7QUFObUIsU0FBbEMsQ0FBVjtBQVNBLFlBQUksY0FBYyxJQUFJLGFBQUosQ0FBa0IsS0FBbEIsQ0FBbEI7QUFDQSxZQUFJLFdBQUosR0FBa0IsV0FBbEI7QUFDQSxZQUFJLGVBQUosQ0FBb0IsTUFBcEIsRUFBNEIsV0FBNUI7QUFDQSxZQUFJLElBQUo7QUFFQSxjQUFNLHlCQUFVLEdBQVYsQ0FBTjtBQUVBLGVBQU8sR0FBUDtBQUNEO0FBektvQjtRQUFWLFUsR0FBQSxVO0FBNEtiLE1BQU0sZ0JBQU4sQ0FBc0I7QUFDcEIsZ0JBQXNCLFFBQXRCLEVBQXdDO0FBQWxCLGFBQUEsUUFBQSxHQUFBLFFBQUE7QUFBc0I7QUFFNUMsd0JBQW9CLElBQXBCLEVBQWtDLFFBQWxDLEVBQXlEO0FBQ3ZELGVBQU8sQ0FBQyxDQUFDLEtBQUssUUFBTCxDQUFjLFFBQWQsQ0FBdUIsWUFBWSxJQUFJLEVBQXZDLEVBQTJDLFNBQVMsTUFBcEQsQ0FBVDtBQUNEO0FBRUQscUJBQWlCLElBQWpCLEVBQStCLFFBQS9CLEVBQXNEO0FBQ3BELFlBQUksV0FBVyxLQUFLLFFBQUwsQ0FBYyxRQUFkLENBQXVCLFlBQVksSUFBSSxFQUF2QyxFQUEyQyxTQUFTLE1BQXBELENBQWY7QUFDQSxlQUFPLEVBQUUsUUFBUSxRQUFWLEVBQW9CLE1BQU0sU0FBMUIsRUFBUDtBQUNEO0FBRUQsK0JBQXdCO0FBQ3RCLGVBQU8sdUJBQVA7QUFDRDtBQUVELHFCQUFpQixVQUFqQixFQUFxQyxRQUFyQyxFQUE0RDtBQUMxRCxlQUFPLENBQUMsQ0FBQyxLQUFLLFFBQUwsQ0FBYyxRQUFkLENBQXVCLFVBQVUsVUFBVSxFQUEzQyxFQUErQyxTQUFTLE1BQXhELENBQVQ7QUFDRDtBQUVELGtCQUFjLFVBQWQsRUFBa0MsUUFBbEMsRUFBeUQ7QUFDdkQsWUFBSSxXQUFXLEtBQUssUUFBTCxDQUFjLFFBQWQsQ0FBdUIsVUFBVSxVQUFVLEVBQTNDLEVBQStDLFNBQVMsTUFBeEQsQ0FBZjtBQUNBLGVBQU8sRUFBRSxRQUFRLFFBQVYsRUFBb0IsTUFBTSxTQUExQixFQUFQO0FBQ0Q7QUFFRCxzQkFBa0IsV0FBbEIsRUFBdUMsUUFBdkMsRUFBOEQ7QUFDNUQsY0FBTSxJQUFJLEtBQUosQ0FBVSx5QkFBVixDQUFOO0FBQ0Q7QUFFRCxtQkFBZSxXQUFmLEVBQW9DLFFBQXBDLEVBQTJEO0FBQ3pELGNBQU0sSUFBSSxLQUFKLENBQVUseUJBQVYsQ0FBTjtBQUNEO0FBRUQsdUJBQW1CLFlBQW5CLEVBQXlDLFFBQXpDLEVBQWdFO0FBQzlELGNBQU0sSUFBSSxLQUFKLENBQVUseUJBQVYsQ0FBTjtBQUNEO0FBRUQsb0JBQWdCLFlBQWhCLEVBQXNDLFFBQXRDLEVBQTZEO0FBQzNELGNBQU0sSUFBSSxLQUFKLENBQVUseUJBQVYsQ0FBTjtBQUNEO0FBdkNtQjtBQTBDdEIsU0FBUyxRQUFULENBQTZDLFVBQWdDLEVBQTdFLEVBQStFO0FBQzdFLFlBQVEsT0FBUixHQUFrQixRQUFRLE9BQVIsSUFBbUIsVUFBckM7QUFDQSxZQUFRLE1BQVIsR0FBaUIsUUFBUSxNQUFSLElBQWtCLGtCQUFuQztBQUNBLFlBQVEsZ0JBQVIsR0FBMkIsUUFBUSxnQkFBUixJQUE0QiwyQkFBdkQ7QUFDQSxZQUFRLGdCQUFSLEdBQ0UsUUFBUSxnQkFBUixJQUE2QixlQUQvQjtBQUdBLFdBQU8sSUFBSSxVQUFKLENBQWUsUUFBUSxPQUF2QixFQUFnQyxPQUFoQyxDQUFQO0FBQ0Q7UUFFUSxRLEdBQUEsUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZXNvbHZlciwgeyBCYXNpY01vZHVsZVJlZ2lzdHJ5LCBSZXNvbHZlckNvbmZpZ3VyYXRpb24gfSBmcm9tICdAZ2xpbW1lci9yZXNvbHZlcic7XG5pbXBvcnQgeyBEaWN0LCBNb2R1bGVMb2NhdG9yLCBUZW1wbGF0ZUxvY2F0b3IgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCBkZWZhdWx0UmVzb2x2ZXJDb25maWd1cmF0aW9uIGZyb20gJy4vZGVmYXVsdC1yZXNvbHZlci1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7IHByZWNvbXBpbGUgfSBmcm9tICcuL2NvbXBpbGVyJztcbmltcG9ydCBBcHBsaWNhdGlvbiwge1xuICBBcHBsaWNhdGlvbkNvbnN0cnVjdG9yLFxuICBCeXRlY29kZUxvYWRlcixcbiAgRE9NQnVpbGRlcixcbiAgTG9hZGVyLFxuICBSdW50aW1lQ29tcGlsZXJMb2FkZXIsXG4gIFN5bmNSZW5kZXJlcixcbiAgTW9kdWxlVHlwZXNcbn0gZnJvbSAnQGdsaW1tZXIvYXBwbGljYXRpb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50TWFuYWdlciwgQ0FQQUJJTElUSUVTIH0gZnJvbSAnQGdsaW1tZXIvY29tcG9uZW50JztcbmltcG9ydCB7IGFzc2VydCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgQnVuZGxlQ29tcGlsZXIsIENvbXBpbGVyRGVsZWdhdGUgYXMgSUNvbXBpbGVyRGVsZWdhdGUgfSBmcm9tICdAZ2xpbW1lci9idW5kbGUtY29tcGlsZXInO1xuaW1wb3J0IHsgYnVpbGRBY3Rpb24sIG1haW5UZW1wbGF0ZSB9IGZyb20gJ0BnbGltbWVyL2FwcGxpY2F0aW9uJztcbmltcG9ydCB7IGNvbXBpbGFibGUgfSBmcm9tICdAZ2xpbW1lci9vcGNvZGUtY29tcGlsZXInO1xuaW1wb3J0IHsgTWV0YWRhdGEgfSBmcm9tICcuLi8uLi9hcHBsaWNhdGlvbi9zcmMvbG9hZGVycy9ieXRlY29kZS9sb2FkZXInO1xuaW1wb3J0IHsgU2ltcGxlRG9jdW1lbnQgfSBmcm9tICdAc2ltcGxlLWRvbS9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU1NSQXBwbGljYXRpb24gfSBmcm9tICdAZ2xpbW1lci9zc3InO1xuXG5pbXBvcnQgZGlkUmVuZGVyIGZyb20gJy4vZGlkLXJlbmRlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwQnVpbGRlck9wdGlvbnM8VD4ge1xuICBhcHBOYW1lPzogc3RyaW5nO1xuICBsb2FkZXI/OiBzdHJpbmc7XG4gIEFwcGxpY2F0aW9uQ2xhc3M/OiBBcHBsaWNhdGlvbkNvbnN0cnVjdG9yPFQ+O1xuICBDb21wb25lbnRNYW5hZ2VyPzogYW55OyAvLyBUT0RPIC0gdHlwaW5nXG4gIHJlc29sdmVyQ29uZmlndXJhdGlvbj86IFJlc29sdmVyQ29uZmlndXJhdGlvbjtcbiAgZG9jdW1lbnQ/OiBTaW1wbGVEb2N1bWVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRGYWN0b3J5IHt9XG5cbmV4cG9ydCBjbGFzcyBUZXN0QXBwbGljYXRpb24gZXh0ZW5kcyBBcHBsaWNhdGlvbiB7XG4gIHJvb3RFbGVtZW50OiBFbGVtZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwcEJ1aWxkZXJUZW1wbGF0ZU1ldGEge1xuICBzcGVjaWZpZXI6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEhlbHBlckZ1bmN0aW9uIGV4dGVuZHMgRnVuY3Rpb24ge1xuICBpc0ZhY3Rvcnk/OiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiBsb2NhdG9yRm9yKG1vZHVsZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBUZW1wbGF0ZUxvY2F0b3I8TW9kdWxlTG9jYXRvcj4ge1xuICByZXR1cm4ge1xuICAgIGtpbmQ6ICd0ZW1wbGF0ZScsXG4gICAgbW9kdWxlLFxuICAgIG5hbWUsXG4gICAgbWV0YToge1xuICAgICAgbW9kdWxlLFxuICAgICAgbmFtZSxcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgQXBwQnVpbGRlcjxUIGV4dGVuZHMgVGVzdEFwcGxpY2F0aW9uPiB7XG4gIHJvb3ROYW1lOiBzdHJpbmc7XG4gIG1vZHVsZXM6IERpY3Q8dW5rbm93bj4gPSB7fTtcbiAgdGVtcGxhdGVzOiBEaWN0PHN0cmluZz4gPSB7fTtcbiAgb3B0aW9uczogQXBwQnVpbGRlck9wdGlvbnM8VD47XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCBvcHRpb25zOiBBcHBCdWlsZGVyT3B0aW9uczxUPikge1xuICAgIHRoaXMucm9vdE5hbWUgPSBuYW1lO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5tb2R1bGVzW1xuICAgICAgYGNvbXBvbmVudC1tYW5hZ2VyOi8ke3RoaXMucm9vdE5hbWV9L2NvbXBvbmVudC1tYW5hZ2Vycy9tYWluYFxuICAgIF0gPSB0aGlzLm9wdGlvbnMuQ29tcG9uZW50TWFuYWdlcjtcbiAgICB0aGlzLnRlbXBsYXRlKCdNYWluJywgJzxkaXYgLz4nKTtcbiAgICB0aGlzLmhlbHBlcignYWN0aW9uJywgYnVpbGRBY3Rpb24sIHRydWUpO1xuICB9XG5cbiAgdGVtcGxhdGUobmFtZTogc3RyaW5nLCB0ZW1wbGF0ZTogc3RyaW5nKSB7XG4gICAgYXNzZXJ0KFxuICAgICAgbmFtZS5jaGFyQXQoMCkgPT09IG5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCksXG4gICAgICAndGVtcGxhdGUgbmFtZXMgbXVzdCBzdGFydCB3aXRoIGEgY2FwaXRhbCBsZXR0ZXInXG4gICAgKTtcblxuICAgIGxldCBzcGVjaWZpZXIgPSBgdGVtcGxhdGU6LyR7dGhpcy5yb290TmFtZX0vY29tcG9uZW50cy8ke25hbWV9YDtcbiAgICB0aGlzLm1vZHVsZXNbc3BlY2lmaWVyXSA9IHByZWNvbXBpbGUodGVtcGxhdGUsIHsgbWV0YTogeyBzcGVjaWZpZXIgfSB9KTtcbiAgICB0aGlzLnRlbXBsYXRlc1tzcGVjaWZpZXJdID0gdGVtcGxhdGU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb21wb25lbnQobmFtZTogc3RyaW5nLCBjb21wb25lbnRGYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5KSB7XG4gICAgbGV0IHNwZWNpZmllciA9IGBjb21wb25lbnQ6LyR7dGhpcy5yb290TmFtZX0vY29tcG9uZW50cy8ke25hbWV9YDtcbiAgICB0aGlzLm1vZHVsZXNbc3BlY2lmaWVyXSA9IGNvbXBvbmVudEZhY3Rvcnk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBoZWxwZXIobmFtZTogc3RyaW5nLCBoZWxwZXJGdW5jOiBIZWxwZXJGdW5jdGlvbiwgaXNGYWN0b3J5ID0gZmFsc2UpIHtcbiAgICBsZXQgc3BlY2lmaWVyID0gYGhlbHBlcjovJHt0aGlzLnJvb3ROYW1lfS9jb21wb25lbnRzLyR7bmFtZX1gO1xuICAgIGhlbHBlckZ1bmMuaXNGYWN0b3J5ID0gaXNGYWN0b3J5O1xuICAgIHRoaXMubW9kdWxlc1tzcGVjaWZpZXJdID0gaGVscGVyRnVuYztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByb3RlY3RlZCBidWlsZFJlc29sdmVyKCk6IFJlc29sdmVyIHtcbiAgICBsZXQgcmVzb2x2ZXJDb25maWd1cmF0aW9uID0gdGhpcy5vcHRpb25zLnJlc29sdmVyQ29uZmlndXJhdGlvbiB8fCBkZWZhdWx0UmVzb2x2ZXJDb25maWd1cmF0aW9uO1xuICAgIHJlc29sdmVyQ29uZmlndXJhdGlvbi5hcHAgPSByZXNvbHZlckNvbmZpZ3VyYXRpb24uYXBwIHx8IHtcbiAgICAgIG5hbWU6IHRoaXMucm9vdE5hbWUsXG4gICAgICByb290TmFtZTogdGhpcy5yb290TmFtZSxcbiAgICB9O1xuXG4gICAgbGV0IHJlZ2lzdHJ5ID0gbmV3IEJhc2ljTW9kdWxlUmVnaXN0cnkodGhpcy5tb2R1bGVzKTtcbiAgICByZXR1cm4gbmV3IFJlc29sdmVyKHJlc29sdmVyQ29uZmlndXJhdGlvbiwgcmVnaXN0cnkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGJ1aWxkUnVudGltZUNvbXBpbGVyTG9hZGVyKCk6IExvYWRlciB7XG4gICAgcmV0dXJuIG5ldyBSdW50aW1lQ29tcGlsZXJMb2FkZXIoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBidWlsZEJ5dGVjb2RlTG9hZGVyKHJlc29sdmVyOiBSZXNvbHZlcikge1xuICAgIGxldCBkZWxlZ2F0ZSA9IG5ldyBDb21waWxlckRlbGVnYXRlKHJlc29sdmVyKTtcbiAgICBsZXQgY29tcGlsZXIgPSBuZXcgQnVuZGxlQ29tcGlsZXIoZGVsZWdhdGUpO1xuXG4gICAgbGV0IG1haW5Mb2NhdG9yID0gbG9jYXRvckZvcigndGVtcGxhdGU6bWFpblRlbXBsYXRlJywgJ2RlZmF1bHQnKTtcbiAgICBtYWluTG9jYXRvci5tZXRhLm1vZHVsZSA9ICd0ZW1wbGF0ZTptYWluVGVtcGxhdGUnO1xuXG4gICAgbGV0IGJsb2NrID0gSlNPTi5wYXJzZShtYWluVGVtcGxhdGUuYmxvY2spO1xuICAgIGxldCBjb21waWxhYmxlVGVtcGxhdGUgPSBjb21waWxhYmxlKHtcbiAgICAgIGJsb2NrLFxuICAgICAgcmVmZXJyZXI6IG1haW5Mb2NhdG9yLm1ldGEsXG4gICAgfSk7XG5cbiAgICBjb21waWxlci5hZGRDb21waWxhYmxlVGVtcGxhdGUobWFpbkxvY2F0b3IsIGNvbXBpbGFibGVUZW1wbGF0ZSk7XG5cbiAgICBmb3IgKGxldCBtb2R1bGUgaW4gdGhpcy50ZW1wbGF0ZXMpIHtcbiAgICAgIGNvbXBpbGVyLmFkZFRlbXBsYXRlU291cmNlKGxvY2F0b3JGb3IobW9kdWxlLCAnZGVmYXVsdCcpLCB0aGlzLnRlbXBsYXRlc1ttb2R1bGVdKTtcbiAgICB9XG5cbiAgICBsZXQgeyBoZWFwLCBwb29sLCB0YWJsZSB9ID0gY29tcGlsZXIuY29tcGlsZSgpO1xuXG4gICAgbGV0IHJlc29sdmVyVGFibGU6IHVua25vd25bXSA9IFtdO1xuXG4gICAgbGV0IG1ldGE6IERpY3Q8TWV0YWRhdGE+ID0ge307XG5cbiAgICB0YWJsZS52bUhhbmRsZUJ5TW9kdWxlTG9jYXRvci5mb3JFYWNoKCh2bUhhbmRsZSwgbG9jYXRvcikgPT4ge1xuICAgICAgbGV0IGhhbmRsZSA9IHRhYmxlLmJ5TW9kdWxlTG9jYXRvci5nZXQobG9jYXRvcik7XG4gICAgICBsZXQgdGVtcGxhdGUgPSBjb21waWxlci5nZXRUZW1wbGF0ZShsb2NhdG9yKTtcblxuICAgICAgbWV0YVtsb2NhdG9yLm1vZHVsZV0gPSB7XG4gICAgICAgIHY6IHZtSGFuZGxlLFxuICAgICAgICBoOiBoYW5kbGUsXG4gICAgICAgIHRhYmxlOiB0ZW1wbGF0ZS5zeW1ib2xUYWJsZSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICB0YWJsZS5ieUhhbmRsZS5mb3JFYWNoKChsb2NhdG9yLCBoYW5kbGUpID0+IHtcbiAgICAgIGxldCBtb2R1bGUgPSBsb2NhdG9yLm1vZHVsZS5yZXBsYWNlKCd0ZW1wbGF0ZTovJywgJ2NvbXBvbmVudDovJyk7XG4gICAgICBpZiAodGhpcy5tb2R1bGVzW21vZHVsZV0pIHtcbiAgICAgICAgaWYgKG1vZHVsZS5pbmRleE9mKCdoZWxwZXI6JykgPT09IDApIHtcbiAgICAgICAgICBjb25zdCBtb2R1bGVUeXBlID0gKHRoaXMubW9kdWxlc1ttb2R1bGVdIGFzIEhlbHBlckZ1bmN0aW9uKS5pc0ZhY3RvcnkgPyBNb2R1bGVUeXBlcy5IRUxQRVJfRkFDVE9SWSA6IE1vZHVsZVR5cGVzLkhFTFBFUjtcbiAgICAgICAgICByZXNvbHZlclRhYmxlW2hhbmRsZV0gPSBbbW9kdWxlVHlwZSwgdGhpcy5tb2R1bGVzW21vZHVsZV1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmVyVGFibGVbaGFuZGxlXSA9IHRoaXMubW9kdWxlc1ttb2R1bGVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBsZXQgYnl0ZWNvZGUgPSBoZWFwLmJ1ZmZlcjtcbiAgICBsZXQgZGF0YSA9IHtcbiAgICAgIHByZWZpeDogJycsXG4gICAgICBtYWluRW50cnk6IHRhYmxlLnZtSGFuZGxlQnlNb2R1bGVMb2NhdG9yLmdldChtYWluTG9jYXRvciksXG4gICAgICBwb29sLFxuICAgICAgdGFibGU6IHJlc29sdmVyVGFibGUsXG4gICAgICBtZXRhLFxuICAgICAgaGVhcDoge1xuICAgICAgICB0YWJsZTogaGVhcC50YWJsZSxcbiAgICAgICAgaGFuZGxlOiBoZWFwLmhhbmRsZSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgQnl0ZWNvZGVMb2FkZXIoeyBieXRlY29kZSwgZGF0YSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBidWlsZExvYWRlcihyZXNvbHZlcik6IExvYWRlciB7XG4gICAgc3dpdGNoICh0aGlzLm9wdGlvbnMubG9hZGVyKSB7XG4gICAgICBjYXNlICdydW50aW1lLWNvbXBpbGVyJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRSdW50aW1lQ29tcGlsZXJMb2FkZXIoKTtcbiAgICAgIGNhc2UgJ2J5dGVjb2RlJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRCeXRlY29kZUxvYWRlcihyZXNvbHZlcik7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBsb2FkZXIgJHt0aGlzLm9wdGlvbnMubG9hZGVyfWApO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlclRvU3RyaW5nKGNvbXBvbmVudE5hbWU6IHN0cmluZywgZGF0YTogRGljdDx1bmtub3duPik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgcmVzb2x2ZXIgPSB0aGlzLmJ1aWxkUmVzb2x2ZXIoKTtcbiAgICBsZXQgbG9hZGVyID0gdGhpcy5idWlsZExvYWRlcihyZXNvbHZlcik7XG5cbiAgICByZXR1cm4gU1NSQXBwbGljYXRpb24ucmVuZGVyVG9TdHJpbmcoY29tcG9uZW50TmFtZSwgZGF0YSwge1xuICAgICAgcm9vdE5hbWU6IHRoaXMucm9vdE5hbWUsXG4gICAgICByZXNvbHZlcixcbiAgICAgIGxvYWRlcixcbiAgICAgIHJlbmRlcmVyOiBuZXcgU3luY1JlbmRlcmVyKClcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGJvb3QoKTogUHJvbWlzZTxUPiB7XG4gICAgbGV0IHJlc29sdmVyID0gdGhpcy5idWlsZFJlc29sdmVyKCk7XG4gICAgbGV0IGxvYWRlcjogTG9hZGVyID0gdGhpcy5idWlsZExvYWRlcihyZXNvbHZlcik7XG5cbiAgICBsZXQgZG9jOiBEb2N1bWVudCA9ICh0aGlzLm9wdGlvbnMuZG9jdW1lbnQgYXMgRG9jdW1lbnQpIHx8IGRvY3VtZW50O1xuICAgIGxldCBlbGVtZW50ID0gZG9jLmJvZHk7XG4gICAgbGV0IGJ1aWxkZXIgPSBuZXcgRE9NQnVpbGRlcih7IGVsZW1lbnQgfSk7XG4gICAgbGV0IHJlbmRlcmVyID0gbmV3IFN5bmNSZW5kZXJlcigpO1xuXG4gICAgbGV0IGFwcCA9IG5ldyB0aGlzLm9wdGlvbnMuQXBwbGljYXRpb25DbGFzcyh7XG4gICAgICByZXNvbHZlcixcbiAgICAgIGJ1aWxkZXIsXG4gICAgICBsb2FkZXIsXG4gICAgICByZW5kZXJlcixcbiAgICAgIHJvb3ROYW1lOiB0aGlzLnJvb3ROYW1lLFxuICAgICAgZG9jdW1lbnQ6IHRoaXMub3B0aW9ucy5kb2N1bWVudCxcbiAgICB9KTtcblxuICAgIGxldCByb290RWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBhcHAucm9vdEVsZW1lbnQgPSByb290RWxlbWVudDtcbiAgICBhcHAucmVuZGVyQ29tcG9uZW50KCdNYWluJywgcm9vdEVsZW1lbnQpO1xuICAgIGFwcC5ib290KCk7XG5cbiAgICBhd2FpdCBkaWRSZW5kZXIoYXBwKTtcblxuICAgIHJldHVybiBhcHA7XG4gIH1cbn1cblxuY2xhc3MgQ29tcGlsZXJEZWxlZ2F0ZSBpbXBsZW1lbnRzIElDb21waWxlckRlbGVnYXRlPE1vZHVsZUxvY2F0b3I+IHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlc29sdmVyOiBSZXNvbHZlcikge31cblxuICBoYXNDb21wb25lbnRJblNjb3BlKG5hbWU6IHN0cmluZywgcmVmZXJyZXI6IE1vZHVsZUxvY2F0b3IpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnJlc29sdmVyLmlkZW50aWZ5KGB0ZW1wbGF0ZToke25hbWV9YCwgcmVmZXJyZXIubW9kdWxlKTtcbiAgfVxuXG4gIHJlc29sdmVDb21wb25lbnQobmFtZTogc3RyaW5nLCByZWZlcnJlcjogTW9kdWxlTG9jYXRvcik6IE1vZHVsZUxvY2F0b3Ige1xuICAgIGxldCByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZXIuaWRlbnRpZnkoYHRlbXBsYXRlOiR7bmFtZX1gLCByZWZlcnJlci5tb2R1bGUpO1xuICAgIHJldHVybiB7IG1vZHVsZTogcmVzb2x2ZWQsIG5hbWU6ICdkZWZhdWx0JyB9O1xuICB9XG5cbiAgZ2V0Q29tcG9uZW50Q2FwYWJpbGl0aWVzKCkge1xuICAgIHJldHVybiBDQVBBQklMSVRJRVM7XG4gIH1cblxuICBoYXNIZWxwZXJJblNjb3BlKGhlbHBlck5hbWU6IHN0cmluZywgcmVmZXJyZXI6IE1vZHVsZUxvY2F0b3IpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnJlc29sdmVyLmlkZW50aWZ5KGBoZWxwZXI6JHtoZWxwZXJOYW1lfWAsIHJlZmVycmVyLm1vZHVsZSk7XG4gIH1cblxuICByZXNvbHZlSGVscGVyKGhlbHBlck5hbWU6IHN0cmluZywgcmVmZXJyZXI6IE1vZHVsZUxvY2F0b3IpOiBNb2R1bGVMb2NhdG9yIHtcbiAgICBsZXQgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVyLmlkZW50aWZ5KGBoZWxwZXI6JHtoZWxwZXJOYW1lfWAsIHJlZmVycmVyLm1vZHVsZSk7XG4gICAgcmV0dXJuIHsgbW9kdWxlOiByZXNvbHZlZCwgbmFtZTogJ2RlZmF1bHQnIH07XG4gIH1cblxuICBoYXNQYXJ0aWFsSW5TY29wZShwYXJ0aWFsTmFtZTogc3RyaW5nLCByZWZlcnJlcjogTW9kdWxlTG9jYXRvcik6IGJvb2xlYW4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIHJlc29sdmVQYXJ0aWFsKHBhcnRpYWxOYW1lOiBzdHJpbmcsIHJlZmVycmVyOiBNb2R1bGVMb2NhdG9yKTogTW9kdWxlTG9jYXRvciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgaGFzTW9kaWZpZXJJblNjb3BlKG1vZGlmaWVyTmFtZTogc3RyaW5nLCByZWZlcnJlcjogTW9kdWxlTG9jYXRvcik6IGJvb2xlYW4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIHJlc29sdmVNb2RpZmllcihtb2RpZmllck5hbWU6IHN0cmluZywgcmVmZXJyZXI6IE1vZHVsZUxvY2F0b3IpOiBNb2R1bGVMb2NhdG9yIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYnVpbGRBcHA8VCBleHRlbmRzIFRlc3RBcHBsaWNhdGlvbj4ob3B0aW9uczogQXBwQnVpbGRlck9wdGlvbnM8VD4gPSB7fSk6IEFwcEJ1aWxkZXI8VD4ge1xuICBvcHRpb25zLmFwcE5hbWUgPSBvcHRpb25zLmFwcE5hbWUgfHwgJ3Rlc3QtYXBwJztcbiAgb3B0aW9ucy5sb2FkZXIgPSBvcHRpb25zLmxvYWRlciB8fCAncnVudGltZS1jb21waWxlcic7XG4gIG9wdGlvbnMuQ29tcG9uZW50TWFuYWdlciA9IG9wdGlvbnMuQ29tcG9uZW50TWFuYWdlciB8fCBDb21wb25lbnRNYW5hZ2VyO1xuICBvcHRpb25zLkFwcGxpY2F0aW9uQ2xhc3MgPVxuICAgIG9wdGlvbnMuQXBwbGljYXRpb25DbGFzcyB8fCAoVGVzdEFwcGxpY2F0aW9uIGFzIEFwcGxpY2F0aW9uQ29uc3RydWN0b3I8VD4pO1xuXG4gIHJldHVybiBuZXcgQXBwQnVpbGRlcihvcHRpb25zLmFwcE5hbWUsIG9wdGlvbnMpO1xufVxuXG5leHBvcnQgeyBidWlsZEFwcCB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ== |
@@ -30,2 +30,4 @@ "use strict"; | ||
var _ssr = require("@glimmer/ssr"); | ||
var _didRender = require("./did-render"); | ||
@@ -118,3 +120,3 @@ | ||
this.template('Main', '<div />'); | ||
this.helper('action', _application.buildAction); | ||
this.helper('action', _application.buildAction, true); | ||
} | ||
@@ -137,3 +139,6 @@ | ||
AppBuilder.prototype.helper = function helper(name, helperFunc) { | ||
var isFactory = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; | ||
var specifier = 'helper:/' + this.rootName + '/components/' + name; | ||
helperFunc.isFactory = isFactory; | ||
this.modules[specifier] = helperFunc; | ||
@@ -153,4 +158,4 @@ return this; | ||
AppBuilder.prototype.buildRuntimeCompilerLoader = function buildRuntimeCompilerLoader(resolver) { | ||
return new _application.RuntimeCompilerLoader(resolver); | ||
AppBuilder.prototype.buildRuntimeCompilerLoader = function buildRuntimeCompilerLoader() { | ||
return new _application.RuntimeCompilerLoader(); | ||
}; | ||
@@ -195,3 +200,4 @@ | ||
if (module.indexOf('helper:') === 0) { | ||
resolverTable[handle] = [1, _this2.modules[module]]; | ||
var moduleType = _this2.modules[module].isFactory ? 0 /* HELPER_FACTORY */ : 1 /* HELPER */; | ||
resolverTable[handle] = [moduleType, _this2.modules[module]]; | ||
} else { | ||
@@ -217,16 +223,28 @@ resolverTable[handle] = _this2.modules[module]; | ||
AppBuilder.prototype.buildLoader = function buildLoader(resolver) { | ||
switch (this.options.loader) { | ||
case 'runtime-compiler': | ||
return this.buildRuntimeCompilerLoader(); | ||
case 'bytecode': | ||
return this.buildBytecodeLoader(resolver); | ||
default: | ||
throw new Error('Unrecognized loader ' + this.options.loader); | ||
} | ||
}; | ||
AppBuilder.prototype.renderToString = function renderToString(componentName, data) { | ||
var resolver = this.buildResolver(); | ||
var loader = this.buildLoader(resolver); | ||
return _ssr.SSRApplication.renderToString(componentName, data, { | ||
rootName: this.rootName, | ||
resolver: resolver, | ||
loader: loader, | ||
renderer: new _application.SyncRenderer() | ||
}); | ||
}; | ||
AppBuilder.prototype.boot = function () { | ||
var _ref = _asyncToGenerator(function* () { | ||
var resolver = this.buildResolver(); | ||
var loader = void 0; | ||
switch (this.options.loader) { | ||
case 'runtime-compiler': | ||
loader = this.buildRuntimeCompilerLoader(resolver); | ||
break; | ||
case 'bytecode': | ||
loader = this.buildBytecodeLoader(resolver); | ||
break; | ||
default: | ||
throw new Error('Unrecognized loader ' + this.options.loader); | ||
} | ||
var loader = this.buildLoader(resolver); | ||
var doc = this.options.document || document; | ||
@@ -323,2 +341,2 @@ var element = doc.body; | ||
exports.buildApp = buildApp; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2FwcGxpY2F0aW9uLXRlc3QtaGVscGVycy9zcmMvYXBwLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOzs7O0FBRUE7Ozs7QUFDQTs7QUFDQTs7OztBQVFBOztBQUNBOztBQUNBOztBQUVBOztBQUlBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFhQSxJQUFBLDRDQUFBLFVBQUEsWUFBQSxFQUFBO0FBQUEsY0FBQSxlQUFBLEVBQUEsWUFBQTs7QUFBQSxhQUFBLGVBQUEsR0FBQTtBQUFBLHdCQUFBLElBQUEsRUFBQSxlQUFBOztBQUFBLGVBQUEsMkJBQUEsSUFBQSxFQUFBLGFBQUEsS0FBQSxDQUFBLElBQUEsRUFBQSxTQUFBLENBQUEsQ0FBQTtBQUFBOztBQUFBLFdBQUEsZUFBQTtBQUFBLENBQUEsQ0FBQSxxQkFBQSxDQUFBO0FBUUEsU0FBQSxVQUFBLENBQUEsTUFBQSxFQUFBLElBQUEsRUFBZ0Q7QUFDOUMsV0FBTztBQUNMLGNBREssVUFBQTtBQUVMLGdCQUZLLE1BQUE7QUFHTCxjQUhLLElBQUE7QUFJTCxjQUFNO0FBQ0osb0JBREksTUFBQTtBQUVKLGtCQUFBO0FBRkk7QUFKRCxLQUFQO0FBU0Q7O0lBRVksYTtBQU1YLGFBQUEsVUFBQSxDQUFBLElBQUEsRUFBQSxPQUFBLEVBQXVEO0FBQUEsd0JBQUEsSUFBQSxFQUFBLFVBQUE7O0FBSnZELGFBQUEsT0FBQSxHQUFBLEVBQUE7QUFDQSxhQUFBLFNBQUEsR0FBQSxFQUFBO0FBSUUsYUFBQSxRQUFBLEdBQUEsSUFBQTtBQUNBLGFBQUEsT0FBQSxHQUFBLE9BQUE7QUFDQSxhQUFBLE9BQUEsQ0FBQSx3QkFDd0IsS0FEeEIsUUFBQSxHQUFBLDBCQUFBLElBRUksS0FBQSxPQUFBLENBRkosZ0JBQUE7QUFHQSxhQUFBLFFBQUEsQ0FBQSxNQUFBLEVBQUEsU0FB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QTJCLFFBQUEsZ0JBQUEsSUFBM0IsMkJBQUE7QUFDQSxZQUFBLGdCQUFBLEdBQ0UsUUFBQSxnQkFBQSxJQURGLGVBQUE7QUFHQSxXQUFPLElBQUEsVUFBQSxDQUFlLFFBQWYsT0FBQSxFQUFQLE9BQU8sQ0FBUDtBQUNEO1FBRUQsUSxHQUFBLFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVzb2x2ZXIsIHsgQmFzaWNNb2R1bGVSZWdpc3RyeSwgUmVzb2x2ZXJDb25maWd1cmF0aW9uIH0gZnJvbSAnQGdsaW1tZXIvcmVzb2x2ZXInO1xuaW1wb3J0IHsgRGljdCwgTW9kdWxlTG9jYXRvciwgVGVtcGxhdGVMb2NhdG9yIH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgZGVmYXVsdFJlc29sdmVyQ29uZmlndXJhdGlvbiBmcm9tICcuL2RlZmF1bHQtcmVzb2x2ZXItY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBwcmVjb21waWxlIH0gZnJvbSAnLi9jb21waWxlcic7XG5pbXBvcnQgQXBwbGljYXRpb24sIHtcbiAgQXBwbGljYXRpb25Db25zdHJ1Y3RvcixcbiAgQnl0ZWNvZGVMb2FkZXIsXG4gIERPTUJ1aWxkZXIsXG4gIExvYWRlcixcbiAgUnVudGltZUNvbXBpbGVyTG9hZGVyLFxuICBTeW5jUmVuZGVyZXIsXG59IGZyb20gJ0BnbGltbWVyL2FwcGxpY2F0aW9uJztcbmltcG9ydCB7IENvbXBvbmVudE1hbmFnZXIsIENBUEFCSUxJVElFUyB9IGZyb20gJ0BnbGltbWVyL2NvbXBvbmVudCc7XG5pbXBvcnQgeyBhc3NlcnQgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IEJ1bmRsZUNvbXBpbGVyLCBDb21waWxlckRlbGVnYXRlIGFzIElDb21waWxlckRlbGVnYXRlIH0gZnJvbSAnQGdsaW1tZXIvYnVuZGxlLWNvbXBpbGVyJztcbmltcG9ydCB7IGJ1aWxkQWN0aW9uLCBtYWluVGVtcGxhdGUgfSBmcm9tICdAZ2xpbW1lci9hcHBsaWNhdGlvbic7XG5pbXBvcnQgeyBjb21waWxhYmxlIH0gZnJvbSAnQGdsaW1tZXIvb3Bjb2RlLWNvbXBpbGVyJztcbmltcG9ydCB7IE1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vYXBwbGljYXRpb24vc3JjL2xvYWRlcnMvYnl0ZWNvZGUvbG9hZGVyJztcbmltcG9ydCB7IFNpbXBsZURvY3VtZW50IH0gZnJvbSAnQHNpbXBsZS1kb20vaW50ZXJmYWNlJztcblxuaW1wb3J0IGRpZFJlbmRlciBmcm9tICcuL2RpZC1yZW5kZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwcEJ1aWxkZXJPcHRpb25zPFQ+IHtcbiAgYXBwTmFtZT86IHN0cmluZztcbiAgbG9hZGVyPzogc3RyaW5nO1xuICBBcHBsaWNhdGlvbkNsYXNzPzogQXBwbGljYXRpb25Db25zdHJ1Y3RvcjxUPjtcbiAgQ29tcG9uZW50TWFuYWdlcj86IGFueTsgLy8gVE9ETyAtIHR5cGluZ1xuICByZXNvbHZlckNvbmZpZ3VyYXRpb24/OiBSZXNvbHZlckNvbmZpZ3VyYXRpb247XG4gIGRvY3VtZW50PzogU2ltcGxlRG9jdW1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RmFjdG9yeSB7fVxuXG5leHBvcnQgY2xhc3MgVGVzdEFwcGxpY2F0aW9uIGV4dGVuZHMgQXBwbGljYXRpb24ge1xuICByb290RWxlbWVudDogRWxlbWVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBCdWlsZGVyVGVtcGxhdGVNZXRhIHtcbiAgc3BlY2lmaWVyOiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGxvY2F0b3JGb3IobW9kdWxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFRlbXBsYXRlTG9jYXRvcjxNb2R1bGVMb2NhdG9yPiB7XG4gIHJldHVybiB7XG4gICAga2luZDogJ3RlbXBsYXRlJyxcbiAgICBtb2R1bGUsXG4gICAgbmFtZSxcbiAgICBtZXRhOiB7XG4gICAgICBtb2R1bGUsXG4gICAgICBuYW1lLFxuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBBcHBCdWlsZGVyPFQgZXh0ZW5kcyBUZXN0QXBwbGljYXRpb24+IHtcbiAgcm9vdE5hbWU6IHN0cmluZztcbiAgbW9kdWxlczogRGljdDx1bmtub3duPiA9IHt9O1xuICB0ZW1wbGF0ZXM6IERpY3Q8c3RyaW5nPiA9IHt9O1xuICBvcHRpb25zOiBBcHBCdWlsZGVyT3B0aW9uczxUPjtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IEFwcEJ1aWxkZXJPcHRpb25zPFQ+KSB7XG4gICAgdGhpcy5yb290TmFtZSA9IG5hbWU7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLm1vZHVsZXNbXG4gICAgICBgY29tcG9uZW50LW1hbmFnZXI6LyR7dGhpcy5yb290TmFtZX0vY29tcG9uZW50LW1hbmFnZXJzL21haW5gXG4gICAgXSA9IHRoaXMub3B0aW9ucy5Db21wb25lbnRNYW5hZ2VyO1xuICAgIHRoaXMudGVtcGxhdGUoJ01haW4nLCAnPGRpdiAvPicpO1xuICAgIHRoaXMuaGVscGVyKCdhY3Rpb24nLCBidWlsZEFjdGlvbik7XG4gIH1cblxuICB0ZW1wbGF0ZShuYW1lOiBzdHJpbmcsIHRlbXBsYXRlOiBzdHJpbmcpIHtcbiAgICBhc3NlcnQoXG4gICAgICBuYW1lLmNoYXJBdCgwKSA9PT0gbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSxcbiAgICAgICd0ZW1wbGF0ZSBuYW1lcyBtdXN0IHN0YXJ0IHdpdGggYSBjYXBpdGFsIGxldHRlcidcbiAgICApO1xuXG4gICAgbGV0IHNwZWNpZmllciA9IGB0ZW1wbGF0ZTovJHt0aGlzLnJvb3ROYW1lfS9jb21wb25lbnRzLyR7bmFtZX1gO1xuICAgIHRoaXMubW9kdWxlc1tzcGVjaWZpZXJdID0gcHJlY29tcGlsZSh0ZW1wbGF0ZSwgeyBtZXRhOiB7IHNwZWNpZmllciB9IH0pO1xuICAgIHRoaXMudGVtcGxhdGVzW3NwZWNpZmllcl0gPSB0ZW1wbGF0ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNvbXBvbmVudChuYW1lOiBzdHJpbmcsIGNvbXBvbmVudEZhY3Rvcnk6IENvbXBvbmVudEZhY3RvcnkpIHtcbiAgICBsZXQgc3BlY2lmaWVyID0gYGNvbXBvbmVudDovJHt0aGlzLnJvb3ROYW1lfS9jb21wb25lbnRzLyR7bmFtZX1gO1xuICAgIHRoaXMubW9kdWxlc1tzcGVjaWZpZXJdID0gY29tcG9uZW50RmFjdG9yeTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGhlbHBlcihuYW1lOiBzdHJpbmcsIGhlbHBlckZ1bmM6IEZ1bmN0aW9uKSB7XG4gICAgbGV0IHNwZWNpZmllciA9IGBoZWxwZXI6LyR7dGhpcy5yb290TmFtZX0vY29tcG9uZW50cy8ke25hbWV9YDtcbiAgICB0aGlzLm1vZHVsZXNbc3BlY2lmaWVyXSA9IGhlbHBlckZ1bmM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRSZXNvbHZlcigpOiBSZXNvbHZlciB7XG4gICAgbGV0IHJlc29sdmVyQ29uZmlndXJhdGlvbiA9IHRoaXMub3B0aW9ucy5yZXNvbHZlckNvbmZpZ3VyYXRpb24gfHwgZGVmYXVsdFJlc29sdmVyQ29uZmlndXJhdGlvbjtcbiAgICByZXNvbHZlckNvbmZpZ3VyYXRpb24uYXBwID0gcmVzb2x2ZXJDb25maWd1cmF0aW9uLmFwcCB8fCB7XG4gICAgICBuYW1lOiB0aGlzLnJvb3ROYW1lLFxuICAgICAgcm9vdE5hbWU6IHRoaXMucm9vdE5hbWUsXG4gICAgfTtcblxuICAgIGxldCByZWdpc3RyeSA9IG5ldyBCYXNpY01vZHVsZVJlZ2lzdHJ5KHRoaXMubW9kdWxlcyk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlcihyZXNvbHZlckNvbmZpZ3VyYXRpb24sIHJlZ2lzdHJ5KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBidWlsZFJ1bnRpbWVDb21waWxlckxvYWRlcihyZXNvbHZlcjogUmVzb2x2ZXIpOiBMb2FkZXIge1xuICAgIHJldHVybiBuZXcgUnVudGltZUNvbXBpbGVyTG9hZGVyKHJlc29sdmVyKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBidWlsZEJ5dGVjb2RlTG9hZGVyKHJlc29sdmVyOiBSZXNvbHZlcikge1xuICAgIGxldCBkZWxlZ2F0ZSA9IG5ldyBDb21waWxlckRlbGVnYXRlKHJlc29sdmVyKTtcbiAgICBsZXQgY29tcGlsZXIgPSBuZXcgQnVuZGxlQ29tcGlsZXIoZGVsZWdhdGUpO1xuXG4gICAgbGV0IG1haW5Mb2NhdG9yID0gbG9jYXRvckZvcigndGVtcGxhdGU6bWFpblRlbXBsYXRlJywgJ2RlZmF1bHQnKTtcbiAgICBtYWluTG9jYXRvci5tZXRhLm1vZHVsZSA9ICd0ZW1wbGF0ZTptYWluVGVtcGxhdGUnO1xuXG4gICAgbGV0IGJsb2NrID0gSlNPTi5wYXJzZShtYWluVGVtcGxhdGUuYmxvY2spO1xuICAgIGxldCBjb21waWxhYmxlVGVtcGxhdGUgPSBjb21waWxhYmxlKHtcbiAgICAgIGJsb2NrLFxuICAgICAgcmVmZXJyZXI6IG1haW5Mb2NhdG9yLm1ldGEsXG4gICAgfSk7XG5cbiAgICBjb21waWxlci5hZGRDb21waWxhYmxlVGVtcGxhdGUobWFpbkxvY2F0b3IsIGNvbXBpbGFibGVUZW1wbGF0ZSk7XG5cbiAgICBmb3IgKGxldCBtb2R1bGUgaW4gdGhpcy50ZW1wbGF0ZXMpIHtcbiAgICAgIGNvbXBpbGVyLmFkZFRlbXBsYXRlU291cmNlKGxvY2F0b3JGb3IobW9kdWxlLCAnZGVmYXVsdCcpLCB0aGlzLnRlbXBsYXRlc1ttb2R1bGVdKTtcbiAgICB9XG5cbiAgICBsZXQgeyBoZWFwLCBwb29sLCB0YWJsZSB9ID0gY29tcGlsZXIuY29tcGlsZSgpO1xuXG4gICAgbGV0IHJlc29sdmVyVGFibGU6IHVua25vd25bXSA9IFtdO1xuXG4gICAgbGV0IG1ldGE6IERpY3Q8TWV0YWRhdGE+ID0ge307XG5cbiAgICB0YWJsZS52bUhhbmRsZUJ5TW9kdWxlTG9jYXRvci5mb3JFYWNoKCh2bUhhbmRsZSwgbG9jYXRvcikgPT4ge1xuICAgICAgbGV0IGhhbmRsZSA9IHRhYmxlLmJ5TW9kdWxlTG9jYXRvci5nZXQobG9jYXRvcik7XG4gICAgICBsZXQgdGVtcGxhdGUgPSBjb21waWxlci5nZXRUZW1wbGF0ZShsb2NhdG9yKTtcblxuICAgICAgbWV0YVtsb2NhdG9yLm1vZHVsZV0gPSB7XG4gICAgICAgIHY6IHZtSGFuZGxlLFxuICAgICAgICBoOiBoYW5kbGUsXG4gICAgICAgIHRhYmxlOiB0ZW1wbGF0ZS5zeW1ib2xUYWJsZSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICB0YWJsZS5ieUhhbmRsZS5mb3JFYWNoKChsb2NhdG9yLCBoYW5kbGUpID0+IHtcbiAgICAgIGxldCBtb2R1bGUgPSBsb2NhdG9yLm1vZHVsZS5yZXBsYWNlKCd0ZW1wbGF0ZTovJywgJ2NvbXBvbmVudDovJyk7XG4gICAgICBpZiAodGhpcy5tb2R1bGVzW21vZHVsZV0pIHtcbiAgICAgICAgaWYgKG1vZHVsZS5pbmRleE9mKCdoZWxwZXI6JykgPT09IDApIHtcbiAgICAgICAgICByZXNvbHZlclRhYmxlW2hhbmRsZV0gPSBbMSwgdGhpcy5tb2R1bGVzW21vZHVsZV1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmVyVGFibGVbaGFuZGxlXSA9IHRoaXMubW9kdWxlc1ttb2R1bGVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBsZXQgYnl0ZWNvZGUgPSBoZWFwLmJ1ZmZlcjtcbiAgICBsZXQgZGF0YSA9IHtcbiAgICAgIHByZWZpeDogJycsXG4gICAgICBtYWluRW50cnk6IHRhYmxlLnZtSGFuZGxlQnlNb2R1bGVMb2NhdG9yLmdldChtYWluTG9jYXRvciksXG4gICAgICBwb29sLFxuICAgICAgdGFibGU6IHJlc29sdmVyVGFibGUsXG4gICAgICBtZXRhLFxuICAgICAgaGVhcDoge1xuICAgICAgICB0YWJsZTogaGVhcC50YWJsZSxcbiAgICAgICAgaGFuZGxlOiBoZWFwLmhhbmRsZSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgQnl0ZWNvZGVMb2FkZXIoeyBieXRlY29kZSwgZGF0YSB9KTtcbiAgfVxuXG4gIGFzeW5jIGJvb3QoKTogUHJvbWlzZTxUPiB7XG4gICAgbGV0IHJlc29sdmVyID0gdGhpcy5idWlsZFJlc29sdmVyKCk7XG4gICAgbGV0IGxvYWRlcjogTG9hZGVyO1xuXG4gICAgc3dpdGNoICh0aGlzLm9wdGlvbnMubG9hZGVyKSB7XG4gICAgICBjYXNlICdydW50aW1lLWNvbXBpbGVyJzpcbiAgICAgICAgbG9hZGVyID0gdGhpcy5idWlsZFJ1bnRpbWVDb21waWxlckxvYWRlcihyZXNvbHZlcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYnl0ZWNvZGUnOlxuICAgICAgICBsb2FkZXIgPSB0aGlzLmJ1aWxkQnl0ZWNvZGVMb2FkZXIocmVzb2x2ZXIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGxvYWRlciAke3RoaXMub3B0aW9ucy5sb2FkZXJ9YCk7XG4gICAgfVxuXG4gICAgbGV0IGRvYzogRG9jdW1lbnQgPSAodGhpcy5vcHRpb25zLmRvY3VtZW50IGFzIERvY3VtZW50KSB8fCBkb2N1bWVudDtcbiAgICBsZXQgZWxlbWVudCA9IGRvYy5ib2R5O1xuICAgIGxldCBidWlsZGVyID0gbmV3IERPTUJ1aWxkZXIoeyBlbGVtZW50IH0pO1xuICAgIGxldCByZW5kZXJlciA9IG5ldyBTeW5jUmVuZGVyZXIoKTtcblxuICAgIGxldCBhcHAgPSBuZXcgdGhpcy5vcHRpb25zLkFwcGxpY2F0aW9uQ2xhc3Moe1xuICAgICAgcmVzb2x2ZXIsXG4gICAgICBidWlsZGVyLFxuICAgICAgbG9hZGVyLFxuICAgICAgcmVuZGVyZXIsXG4gICAgICByb290TmFtZTogdGhpcy5yb290TmFtZSxcbiAgICAgIGRvY3VtZW50OiB0aGlzLm9wdGlvbnMuZG9jdW1lbnQsXG4gICAgfSk7XG5cbiAgICBsZXQgcm9vdEVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgYXBwLnJvb3RFbGVtZW50ID0gcm9vdEVsZW1lbnQ7XG4gICAgYXBwLnJlbmRlckNvbXBvbmVudCgnTWFpbicsIHJvb3RFbGVtZW50KTtcbiAgICBhcHAuYm9vdCgpO1xuXG4gICAgYXdhaXQgZGlkUmVuZGVyKGFwcCk7XG5cbiAgICByZXR1cm4gYXBwO1xuICB9XG59XG5cbmNsYXNzIENvbXBpbGVyRGVsZWdhdGUgaW1wbGVtZW50cyBJQ29tcGlsZXJEZWxlZ2F0ZTxNb2R1bGVMb2NhdG9yPiB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZXNvbHZlcjogUmVzb2x2ZXIpIHt9XG5cbiAgaGFzQ29tcG9uZW50SW5TY29wZShuYW1lOiBzdHJpbmcsIHJlZmVycmVyOiBNb2R1bGVMb2NhdG9yKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5yZXNvbHZlci5pZGVudGlmeShgdGVtcGxhdGU6JHtuYW1lfWAsIHJlZmVycmVyLm1vZHVsZSk7XG4gIH1cblxuICByZXNvbHZlQ29tcG9uZW50KG5hbWU6IHN0cmluZywgcmVmZXJyZXI6IE1vZHVsZUxvY2F0b3IpOiBNb2R1bGVMb2NhdG9yIHtcbiAgICBsZXQgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVyLmlkZW50aWZ5KGB0ZW1wbGF0ZToke25hbWV9YCwgcmVmZXJyZXIubW9kdWxlKTtcbiAgICByZXR1cm4geyBtb2R1bGU6IHJlc29sdmVkLCBuYW1lOiAnZGVmYXVsdCcgfTtcbiAgfVxuXG4gIGdldENvbXBvbmVudENhcGFiaWxpdGllcygpIHtcbiAgICByZXR1cm4gQ0FQQUJJTElUSUVTO1xuICB9XG5cbiAgaGFzSGVscGVySW5TY29wZShoZWxwZXJOYW1lOiBzdHJpbmcsIHJlZmVycmVyOiBNb2R1bGVMb2NhdG9yKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5yZXNvbHZlci5pZGVudGlmeShgaGVscGVyOiR7aGVscGVyTmFtZX1gLCByZWZlcnJlci5tb2R1bGUpO1xuICB9XG5cbiAgcmVzb2x2ZUhlbHBlcihoZWxwZXJOYW1lOiBzdHJpbmcsIHJlZmVycmVyOiBNb2R1bGVMb2NhdG9yKTogTW9kdWxlTG9jYXRvciB7XG4gICAgbGV0IHJlc29sdmVkID0gdGhpcy5yZXNvbHZlci5pZGVudGlmeShgaGVscGVyOiR7aGVscGVyTmFtZX1gLCByZWZlcnJlci5tb2R1bGUpO1xuICAgIHJldHVybiB7IG1vZHVsZTogcmVzb2x2ZWQsIG5hbWU6ICdkZWZhdWx0JyB9O1xuICB9XG5cbiAgaGFzUGFydGlhbEluU2NvcGUocGFydGlhbE5hbWU6IHN0cmluZywgcmVmZXJyZXI6IE1vZHVsZUxvY2F0b3IpOiBib29sZWFuIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICByZXNvbHZlUGFydGlhbChwYXJ0aWFsTmFtZTogc3RyaW5nLCByZWZlcnJlcjogTW9kdWxlTG9jYXRvcik6IE1vZHVsZUxvY2F0b3Ige1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIGhhc01vZGlmaWVySW5TY29wZShtb2RpZmllck5hbWU6IHN0cmluZywgcmVmZXJyZXI6IE1vZHVsZUxvY2F0b3IpOiBib29sZWFuIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICByZXNvbHZlTW9kaWZpZXIobW9kaWZpZXJOYW1lOiBzdHJpbmcsIHJlZmVycmVyOiBNb2R1bGVMb2NhdG9yKTogTW9kdWxlTG9jYXRvciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQXBwPFQgZXh0ZW5kcyBUZXN0QXBwbGljYXRpb24+KG9wdGlvbnM6IEFwcEJ1aWxkZXJPcHRpb25zPFQ+ID0ge30pOiBBcHBCdWlsZGVyPFQ+IHtcbiAgb3B0aW9ucy5hcHBOYW1lID0gb3B0aW9ucy5hcHBOYW1lIHx8ICd0ZXN0LWFwcCc7XG4gIG9wdGlvbnMubG9hZGVyID0gb3B0aW9ucy5sb2FkZXIgfHwgJ3J1bnRpbWUtY29tcGlsZXInO1xuICBvcHRpb25zLkNvbXBvbmVudE1hbmFnZXIgPSBvcHRpb25zLkNvbXBvbmVudE1hbmFnZXIgfHwgQ29tcG9uZW50TWFuYWdlcjtcbiAgb3B0aW9ucy5BcHBsaWNhdGlvbkNsYXNzID1cbiAgICBvcHRpb25zLkFwcGxpY2F0aW9uQ2xhc3MgfHwgKFRlc3RBcHBsaWNhdGlvbiBhcyBBcHBsaWNhdGlvbkNvbnN0cnVjdG9yPFQ+KTtcblxuICByZXR1cm4gbmV3IEFwcEJ1aWxkZXIob3B0aW9ucy5hcHBOYW1lLCBvcHRpb25zKTtcbn1cblxuZXhwb3J0IHsgYnVpbGRBcHAgfTtcbiJdLCJzb3VyY2VSb290IjoiIn0= | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2FwcGxpY2F0aW9uLXRlc3QtaGVscGVycy9zcmMvYXBwLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOzs7O0FBRUE7Ozs7QUFDQTs7QUFDQTs7OztBQVNBOztBQUNBOztBQUNBOztBQUVBOztBQUdBOztBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFhQSxJQUFBLDRDQUFBLFVBQUEsWUFBQSxFQUFBO0FBQUEsY0FBQSxlQUFBLEVBQUEsWUFBQTs7QUFBQSxhQUFBLGVBQUEsR0FBQTtBQUFBLHdCQUFBLElBQUEsRUFBQSxlQUFBOztBQUFBLGVBQUEsMkJBQUEsSUFBQSxFQUFBLGFBQUEsS0FBQSxDQUFBLElBQUEsRUFBQSxTQUFBLENBQUEsQ0FBQTtBQUFBOztBQUFBLFdBQUEsZUFBQTtBQUFBLENBQUEsQ0FBQSxxQkFBQSxDQUFBO0FBWUEsU0FBQSxVQUFBLENBQUEsTUFBQSxFQUFBLElBQUEsRUFBZ0Q7QUFDOUMsV0FBTztBQUNMLGNBREssVUFBQTtBQUVMLGdCQUZLLE1BQUE7QUFHTCxjQUhLLElBQUE7QUFJTCxjQUFNO0FBQ0osb0JBREksTUFBQTtBQUVKLGtCQUFBO0FBRkk7QUFKRCxLQUFQO0FBU0Q7O0lBRVksYTtBQU1YLGFBQUEsVUFBQSxDQUFBLElBQUEsRUFBQSxPQUFBLEVBQXVEO0FBQUEsd0JBQUEsSUFBQSxFQUFBLFVBQUE7O0FBSnZELGFBQUEsT0FBQSxHQUFBLEVBQUE7QUFDQSxhQUFBLFNBQUEsR0FBQSxFQUFBO0FBSUUsYUFBQSxRQUFBLEdBQUEsSUFBQTtBQUNBLGFBQUEsT0FBQSxHQUFBLE9BQUE7QUFDQSxhQUFBLE9BQUEsQ0FBQSx3QkFDd0IsS0FEeEIsUUFBQSxHQUFBLDBCQUFBLElBRUksS0FBQSxPQUFBLENBRkosZ0JBQUE7QUFHQSxhQUFBLFFBQUEsQ0FBQSxNQUFBLEVB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QixRLEVBQXVCO0FBQzVELGNBQU0sSUFBQSxLQUFBLENBQU4seUJBQU0sQ0FBTjs7OytCQUdGLGMsMkJBQWUsVyxFQUFxQixRLEVBQXVCO0FBQ3pELGNBQU0sSUFBQSxLQUFBLENBQU4seUJBQU0sQ0FBTjs7OytCQUdGLGtCLCtCQUFtQixZLEVBQXNCLFEsRUFBdUI7QUFDOUQsY0FBTSxJQUFBLEtBQUEsQ0FBTix5QkFBTSxDQUFOOzs7K0JBR0YsZSw0QkFBZ0IsWSxFQUFzQixRLEVBQXVCO0FBQzNELGNBQU0sSUFBQSxLQUFBLENBQU4seUJBQU0sQ0FBTjs7Ozs7O0FBSUosU0FBQSxRQUFBLEdBQStFO0FBQUEsUUFBbEMsVUFBa0MsVUFBQSxNQUFBLEdBQUEsQ0FBQSxJQUFBLFVBQUEsQ0FBQSxNQUFBLFNBQUEsR0FBQSxVQUFBLENBQUEsQ0FBQSxHQUFGLEVBQUU7O0FBQzdFLFlBQUEsT0FBQSxHQUFrQixRQUFBLE9BQUEsSUFBbEIsVUFBQTtBQUNBLFlBQUEsTUFBQSxHQUFpQixRQUFBLE1BQUEsSUFBakIsa0JBQUE7QUFDQSxZQUFBLGdCQUFBLEdBQTJCLFFBQUEsZ0JBQUEsSUFBM0IsMkJBQUE7QUFDQSxZQUFBLGdCQUFBLEdBQ0UsUUFBQSxnQkFBQSxJQURGLGVBQUE7QUFHQSxXQUFPLElBQUEsVUFBQSxDQUFlLFFBQWYsT0FBQSxFQUFQLE9BQU8sQ0FBUDtBQUNEO1FBRUQsUSxHQUFBLFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVzb2x2ZXIsIHsgQmFzaWNNb2R1bGVSZWdpc3RyeSwgUmVzb2x2ZXJDb25maWd1cmF0aW9uIH0gZnJvbSAnQGdsaW1tZXIvcmVzb2x2ZXInO1xuaW1wb3J0IHsgRGljdCwgTW9kdWxlTG9jYXRvciwgVGVtcGxhdGVMb2NhdG9yIH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgZGVmYXVsdFJlc29sdmVyQ29uZmlndXJhdGlvbiBmcm9tICcuL2RlZmF1bHQtcmVzb2x2ZXItY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBwcmVjb21waWxlIH0gZnJvbSAnLi9jb21waWxlcic7XG5pbXBvcnQgQXBwbGljYXRpb24sIHtcbiAgQXBwbGljYXRpb25Db25zdHJ1Y3RvcixcbiAgQnl0ZWNvZGVMb2FkZXIsXG4gIERPTUJ1aWxkZXIsXG4gIExvYWRlcixcbiAgUnVudGltZUNvbXBpbGVyTG9hZGVyLFxuICBTeW5jUmVuZGVyZXIsXG4gIE1vZHVsZVR5cGVzXG59IGZyb20gJ0BnbGltbWVyL2FwcGxpY2F0aW9uJztcbmltcG9ydCB7IENvbXBvbmVudE1hbmFnZXIsIENBUEFCSUxJVElFUyB9IGZyb20gJ0BnbGltbWVyL2NvbXBvbmVudCc7XG5pbXBvcnQgeyBhc3NlcnQgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IEJ1bmRsZUNvbXBpbGVyLCBDb21waWxlckRlbGVnYXRlIGFzIElDb21waWxlckRlbGVnYXRlIH0gZnJvbSAnQGdsaW1tZXIvYnVuZGxlLWNvbXBpbGVyJztcbmltcG9ydCB7IGJ1aWxkQWN0aW9uLCBtYWluVGVtcGxhdGUgfSBmcm9tICdAZ2xpbW1lci9hcHBsaWNhdGlvbic7XG5pbXBvcnQgeyBjb21waWxhYmxlIH0gZnJvbSAnQGdsaW1tZXIvb3Bjb2RlLWNvbXBpbGVyJztcbmltcG9ydCB7IE1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vYXBwbGljYXRpb24vc3JjL2xvYWRlcnMvYnl0ZWNvZGUvbG9hZGVyJztcbmltcG9ydCB7IFNpbXBsZURvY3VtZW50IH0gZnJvbSAnQHNpbXBsZS1kb20vaW50ZXJmYWNlJztcbmltcG9ydCB7IFNTUkFwcGxpY2F0aW9uIH0gZnJvbSAnQGdsaW1tZXIvc3NyJztcblxuaW1wb3J0IGRpZFJlbmRlciBmcm9tICcuL2RpZC1yZW5kZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwcEJ1aWxkZXJPcHRpb25zPFQ+IHtcbiAgYXBwTmFtZT86IHN0cmluZztcbiAgbG9hZGVyPzogc3RyaW5nO1xuICBBcHBsaWNhdGlvbkNsYXNzPzogQXBwbGljYXRpb25Db25zdHJ1Y3RvcjxUPjtcbiAgQ29tcG9uZW50TWFuYWdlcj86IGFueTsgLy8gVE9ETyAtIHR5cGluZ1xuICByZXNvbHZlckNvbmZpZ3VyYXRpb24/OiBSZXNvbHZlckNvbmZpZ3VyYXRpb247XG4gIGRvY3VtZW50PzogU2ltcGxlRG9jdW1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RmFjdG9yeSB7fVxuXG5leHBvcnQgY2xhc3MgVGVzdEFwcGxpY2F0aW9uIGV4dGVuZHMgQXBwbGljYXRpb24ge1xuICByb290RWxlbWVudDogRWxlbWVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBCdWlsZGVyVGVtcGxhdGVNZXRhIHtcbiAgc3BlY2lmaWVyOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBIZWxwZXJGdW5jdGlvbiBleHRlbmRzIEZ1bmN0aW9uIHtcbiAgaXNGYWN0b3J5PzogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gbG9jYXRvckZvcihtb2R1bGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogVGVtcGxhdGVMb2NhdG9yPE1vZHVsZUxvY2F0b3I+IHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiAndGVtcGxhdGUnLFxuICAgIG1vZHVsZSxcbiAgICBuYW1lLFxuICAgIG1ldGE6IHtcbiAgICAgIG1vZHVsZSxcbiAgICAgIG5hbWUsXG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIEFwcEJ1aWxkZXI8VCBleHRlbmRzIFRlc3RBcHBsaWNhdGlvbj4ge1xuICByb290TmFtZTogc3RyaW5nO1xuICBtb2R1bGVzOiBEaWN0PHVua25vd24+ID0ge307XG4gIHRlbXBsYXRlczogRGljdDxzdHJpbmc+ID0ge307XG4gIG9wdGlvbnM6IEFwcEJ1aWxkZXJPcHRpb25zPFQ+O1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgb3B0aW9uczogQXBwQnVpbGRlck9wdGlvbnM8VD4pIHtcbiAgICB0aGlzLnJvb3ROYW1lID0gbmFtZTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMubW9kdWxlc1tcbiAgICAgIGBjb21wb25lbnQtbWFuYWdlcjovJHt0aGlzLnJvb3ROYW1lfS9jb21wb25lbnQtbWFuYWdlcnMvbWFpbmBcbiAgICBdID0gdGhpcy5vcHRpb25zLkNvbXBvbmVudE1hbmFnZXI7XG4gICAgdGhpcy50ZW1wbGF0ZSgnTWFpbicsICc8ZGl2IC8+Jyk7XG4gICAgdGhpcy5oZWxwZXIoJ2FjdGlvbicsIGJ1aWxkQWN0aW9uLCB0cnVlKTtcbiAgfVxuXG4gIHRlbXBsYXRlKG5hbWU6IHN0cmluZywgdGVtcGxhdGU6IHN0cmluZykge1xuICAgIGFzc2VydChcbiAgICAgIG5hbWUuY2hhckF0KDApID09PSBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpLFxuICAgICAgJ3RlbXBsYXRlIG5hbWVzIG11c3Qgc3RhcnQgd2l0aCBhIGNhcGl0YWwgbGV0dGVyJ1xuICAgICk7XG5cbiAgICBsZXQgc3BlY2lmaWVyID0gYHRlbXBsYXRlOi8ke3RoaXMucm9vdE5hbWV9L2NvbXBvbmVudHMvJHtuYW1lfWA7XG4gICAgdGhpcy5tb2R1bGVzW3NwZWNpZmllcl0gPSBwcmVjb21waWxlKHRlbXBsYXRlLCB7IG1ldGE6IHsgc3BlY2lmaWVyIH0gfSk7XG4gICAgdGhpcy50ZW1wbGF0ZXNbc3BlY2lmaWVyXSA9IHRlbXBsYXRlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29tcG9uZW50KG5hbWU6IHN0cmluZywgY29tcG9uZW50RmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeSkge1xuICAgIGxldCBzcGVjaWZpZXIgPSBgY29tcG9uZW50Oi8ke3RoaXMucm9vdE5hbWV9L2NvbXBvbmVudHMvJHtuYW1lfWA7XG4gICAgdGhpcy5tb2R1bGVzW3NwZWNpZmllcl0gPSBjb21wb25lbnRGYWN0b3J5O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaGVscGVyKG5hbWU6IHN0cmluZywgaGVscGVyRnVuYzogSGVscGVyRnVuY3Rpb24sIGlzRmFjdG9yeSA9IGZhbHNlKSB7XG4gICAgbGV0IHNwZWNpZmllciA9IGBoZWxwZXI6LyR7dGhpcy5yb290TmFtZX0vY29tcG9uZW50cy8ke25hbWV9YDtcbiAgICBoZWxwZXJGdW5jLmlzRmFjdG9yeSA9IGlzRmFjdG9yeTtcbiAgICB0aGlzLm1vZHVsZXNbc3BlY2lmaWVyXSA9IGhlbHBlckZ1bmM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRSZXNvbHZlcigpOiBSZXNvbHZlciB7XG4gICAgbGV0IHJlc29sdmVyQ29uZmlndXJhdGlvbiA9IHRoaXMub3B0aW9ucy5yZXNvbHZlckNvbmZpZ3VyYXRpb24gfHwgZGVmYXVsdFJlc29sdmVyQ29uZmlndXJhdGlvbjtcbiAgICByZXNvbHZlckNvbmZpZ3VyYXRpb24uYXBwID0gcmVzb2x2ZXJDb25maWd1cmF0aW9uLmFwcCB8fCB7XG4gICAgICBuYW1lOiB0aGlzLnJvb3ROYW1lLFxuICAgICAgcm9vdE5hbWU6IHRoaXMucm9vdE5hbWUsXG4gICAgfTtcblxuICAgIGxldCByZWdpc3RyeSA9IG5ldyBCYXNpY01vZHVsZVJlZ2lzdHJ5KHRoaXMubW9kdWxlcyk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlcihyZXNvbHZlckNvbmZpZ3VyYXRpb24sIHJlZ2lzdHJ5KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBidWlsZFJ1bnRpbWVDb21waWxlckxvYWRlcigpOiBMb2FkZXIge1xuICAgIHJldHVybiBuZXcgUnVudGltZUNvbXBpbGVyTG9hZGVyKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRCeXRlY29kZUxvYWRlcihyZXNvbHZlcjogUmVzb2x2ZXIpIHtcbiAgICBsZXQgZGVsZWdhdGUgPSBuZXcgQ29tcGlsZXJEZWxlZ2F0ZShyZXNvbHZlcik7XG4gICAgbGV0IGNvbXBpbGVyID0gbmV3IEJ1bmRsZUNvbXBpbGVyKGRlbGVnYXRlKTtcblxuICAgIGxldCBtYWluTG9jYXRvciA9IGxvY2F0b3JGb3IoJ3RlbXBsYXRlOm1haW5UZW1wbGF0ZScsICdkZWZhdWx0Jyk7XG4gICAgbWFpbkxvY2F0b3IubWV0YS5tb2R1bGUgPSAndGVtcGxhdGU6bWFpblRlbXBsYXRlJztcblxuICAgIGxldCBibG9jayA9IEpTT04ucGFyc2UobWFpblRlbXBsYXRlLmJsb2NrKTtcbiAgICBsZXQgY29tcGlsYWJsZVRlbXBsYXRlID0gY29tcGlsYWJsZSh7XG4gICAgICBibG9jayxcbiAgICAgIHJlZmVycmVyOiBtYWluTG9jYXRvci5tZXRhLFxuICAgIH0pO1xuXG4gICAgY29tcGlsZXIuYWRkQ29tcGlsYWJsZVRlbXBsYXRlKG1haW5Mb2NhdG9yLCBjb21waWxhYmxlVGVtcGxhdGUpO1xuXG4gICAgZm9yIChsZXQgbW9kdWxlIGluIHRoaXMudGVtcGxhdGVzKSB7XG4gICAgICBjb21waWxlci5hZGRUZW1wbGF0ZVNvdXJjZShsb2NhdG9yRm9yKG1vZHVsZSwgJ2RlZmF1bHQnKSwgdGhpcy50ZW1wbGF0ZXNbbW9kdWxlXSk7XG4gICAgfVxuXG4gICAgbGV0IHsgaGVhcCwgcG9vbCwgdGFibGUgfSA9IGNvbXBpbGVyLmNvbXBpbGUoKTtcblxuICAgIGxldCByZXNvbHZlclRhYmxlOiB1bmtub3duW10gPSBbXTtcblxuICAgIGxldCBtZXRhOiBEaWN0PE1ldGFkYXRhPiA9IHt9O1xuXG4gICAgdGFibGUudm1IYW5kbGVCeU1vZHVsZUxvY2F0b3IuZm9yRWFjaCgodm1IYW5kbGUsIGxvY2F0b3IpID0+IHtcbiAgICAgIGxldCBoYW5kbGUgPSB0YWJsZS5ieU1vZHVsZUxvY2F0b3IuZ2V0KGxvY2F0b3IpO1xuICAgICAgbGV0IHRlbXBsYXRlID0gY29tcGlsZXIuZ2V0VGVtcGxhdGUobG9jYXRvcik7XG5cbiAgICAgIG1ldGFbbG9jYXRvci5tb2R1bGVdID0ge1xuICAgICAgICB2OiB2bUhhbmRsZSxcbiAgICAgICAgaDogaGFuZGxlLFxuICAgICAgICB0YWJsZTogdGVtcGxhdGUuc3ltYm9sVGFibGUsXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGFibGUuYnlIYW5kbGUuZm9yRWFjaCgobG9jYXRvciwgaGFuZGxlKSA9PiB7XG4gICAgICBsZXQgbW9kdWxlID0gbG9jYXRvci5tb2R1bGUucmVwbGFjZSgndGVtcGxhdGU6LycsICdjb21wb25lbnQ6LycpO1xuICAgICAgaWYgKHRoaXMubW9kdWxlc1ttb2R1bGVdKSB7XG4gICAgICAgIGlmIChtb2R1bGUuaW5kZXhPZignaGVscGVyOicpID09PSAwKSB7XG4gICAgICAgICAgY29uc3QgbW9kdWxlVHlwZSA9ICh0aGlzLm1vZHVsZXNbbW9kdWxlXSBhcyBIZWxwZXJGdW5jdGlvbikuaXNGYWN0b3J5ID8gTW9kdWxlVHlwZXMuSEVMUEVSX0ZBQ1RPUlkgOiBNb2R1bGVUeXBlcy5IRUxQRVI7XG4gICAgICAgICAgcmVzb2x2ZXJUYWJsZVtoYW5kbGVdID0gW21vZHVsZVR5cGUsIHRoaXMubW9kdWxlc1ttb2R1bGVdXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlclRhYmxlW2hhbmRsZV0gPSB0aGlzLm1vZHVsZXNbbW9kdWxlXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbGV0IGJ5dGVjb2RlID0gaGVhcC5idWZmZXI7XG4gICAgbGV0IGRhdGEgPSB7XG4gICAgICBwcmVmaXg6ICcnLFxuICAgICAgbWFpbkVudHJ5OiB0YWJsZS52bUhhbmRsZUJ5TW9kdWxlTG9jYXRvci5nZXQobWFpbkxvY2F0b3IpLFxuICAgICAgcG9vbCxcbiAgICAgIHRhYmxlOiByZXNvbHZlclRhYmxlLFxuICAgICAgbWV0YSxcbiAgICAgIGhlYXA6IHtcbiAgICAgICAgdGFibGU6IGhlYXAudGFibGUsXG4gICAgICAgIGhhbmRsZTogaGVhcC5oYW5kbGUsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IEJ5dGVjb2RlTG9hZGVyKHsgYnl0ZWNvZGUsIGRhdGEgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRMb2FkZXIocmVzb2x2ZXIpOiBMb2FkZXIge1xuICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLmxvYWRlcikge1xuICAgICAgY2FzZSAncnVudGltZS1jb21waWxlcic6XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkUnVudGltZUNvbXBpbGVyTG9hZGVyKCk7XG4gICAgICBjYXNlICdieXRlY29kZSc6XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkQnl0ZWNvZGVMb2FkZXIocmVzb2x2ZXIpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgbG9hZGVyICR7dGhpcy5vcHRpb25zLmxvYWRlcn1gKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXJUb1N0cmluZyhjb21wb25lbnROYW1lOiBzdHJpbmcsIGRhdGE6IERpY3Q8dW5rbm93bj4pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHJlc29sdmVyID0gdGhpcy5idWlsZFJlc29sdmVyKCk7XG4gICAgbGV0IGxvYWRlciA9IHRoaXMuYnVpbGRMb2FkZXIocmVzb2x2ZXIpO1xuXG4gICAgcmV0dXJuIFNTUkFwcGxpY2F0aW9uLnJlbmRlclRvU3RyaW5nKGNvbXBvbmVudE5hbWUsIGRhdGEsIHtcbiAgICAgIHJvb3ROYW1lOiB0aGlzLnJvb3ROYW1lLFxuICAgICAgcmVzb2x2ZXIsXG4gICAgICBsb2FkZXIsXG4gICAgICByZW5kZXJlcjogbmV3IFN5bmNSZW5kZXJlcigpXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBib290KCk6IFByb21pc2U8VD4ge1xuICAgIGxldCByZXNvbHZlciA9IHRoaXMuYnVpbGRSZXNvbHZlcigpO1xuICAgIGxldCBsb2FkZXI6IExvYWRlciA9IHRoaXMuYnVpbGRMb2FkZXIocmVzb2x2ZXIpO1xuXG4gICAgbGV0IGRvYzogRG9jdW1lbnQgPSAodGhpcy5vcHRpb25zLmRvY3VtZW50IGFzIERvY3VtZW50KSB8fCBkb2N1bWVudDtcbiAgICBsZXQgZWxlbWVudCA9IGRvYy5ib2R5O1xuICAgIGxldCBidWlsZGVyID0gbmV3IERPTUJ1aWxkZXIoeyBlbGVtZW50IH0pO1xuICAgIGxldCByZW5kZXJlciA9IG5ldyBTeW5jUmVuZGVyZXIoKTtcblxuICAgIGxldCBhcHAgPSBuZXcgdGhpcy5vcHRpb25zLkFwcGxpY2F0aW9uQ2xhc3Moe1xuICAgICAgcmVzb2x2ZXIsXG4gICAgICBidWlsZGVyLFxuICAgICAgbG9hZGVyLFxuICAgICAgcmVuZGVyZXIsXG4gICAgICByb290TmFtZTogdGhpcy5yb290TmFtZSxcbiAgICAgIGRvY3VtZW50OiB0aGlzLm9wdGlvbnMuZG9jdW1lbnQsXG4gICAgfSk7XG5cbiAgICBsZXQgcm9vdEVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgYXBwLnJvb3RFbGVtZW50ID0gcm9vdEVsZW1lbnQ7XG4gICAgYXBwLnJlbmRlckNvbXBvbmVudCgnTWFpbicsIHJvb3RFbGVtZW50KTtcbiAgICBhcHAuYm9vdCgpO1xuXG4gICAgYXdhaXQgZGlkUmVuZGVyKGFwcCk7XG5cbiAgICByZXR1cm4gYXBwO1xuICB9XG59XG5cbmNsYXNzIENvbXBpbGVyRGVsZWdhdGUgaW1wbGVtZW50cyBJQ29tcGlsZXJEZWxlZ2F0ZTxNb2R1bGVMb2NhdG9yPiB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZXNvbHZlcjogUmVzb2x2ZXIpIHt9XG5cbiAgaGFzQ29tcG9uZW50SW5TY29wZShuYW1lOiBzdHJpbmcsIHJlZmVycmVyOiBNb2R1bGVMb2NhdG9yKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5yZXNvbHZlci5pZGVudGlmeShgdGVtcGxhdGU6JHtuYW1lfWAsIHJlZmVycmVyLm1vZHVsZSk7XG4gIH1cblxuICByZXNvbHZlQ29tcG9uZW50KG5hbWU6IHN0cmluZywgcmVmZXJyZXI6IE1vZHVsZUxvY2F0b3IpOiBNb2R1bGVMb2NhdG9yIHtcbiAgICBsZXQgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVyLmlkZW50aWZ5KGB0ZW1wbGF0ZToke25hbWV9YCwgcmVmZXJyZXIubW9kdWxlKTtcbiAgICByZXR1cm4geyBtb2R1bGU6IHJlc29sdmVkLCBuYW1lOiAnZGVmYXVsdCcgfTtcbiAgfVxuXG4gIGdldENvbXBvbmVudENhcGFiaWxpdGllcygpIHtcbiAgICByZXR1cm4gQ0FQQUJJTElUSUVTO1xuICB9XG5cbiAgaGFzSGVscGVySW5TY29wZShoZWxwZXJOYW1lOiBzdHJpbmcsIHJlZmVycmVyOiBNb2R1bGVMb2NhdG9yKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5yZXNvbHZlci5pZGVudGlmeShgaGVscGVyOiR7aGVscGVyTmFtZX1gLCByZWZlcnJlci5tb2R1bGUpO1xuICB9XG5cbiAgcmVzb2x2ZUhlbHBlcihoZWxwZXJOYW1lOiBzdHJpbmcsIHJlZmVycmVyOiBNb2R1bGVMb2NhdG9yKTogTW9kdWxlTG9jYXRvciB7XG4gICAgbGV0IHJlc29sdmVkID0gdGhpcy5yZXNvbHZlci5pZGVudGlmeShgaGVscGVyOiR7aGVscGVyTmFtZX1gLCByZWZlcnJlci5tb2R1bGUpO1xuICAgIHJldHVybiB7IG1vZHVsZTogcmVzb2x2ZWQsIG5hbWU6ICdkZWZhdWx0JyB9O1xuICB9XG5cbiAgaGFzUGFydGlhbEluU2NvcGUocGFydGlhbE5hbWU6IHN0cmluZywgcmVmZXJyZXI6IE1vZHVsZUxvY2F0b3IpOiBib29sZWFuIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICByZXNvbHZlUGFydGlhbChwYXJ0aWFsTmFtZTogc3RyaW5nLCByZWZlcnJlcjogTW9kdWxlTG9jYXRvcik6IE1vZHVsZUxvY2F0b3Ige1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIGhhc01vZGlmaWVySW5TY29wZShtb2RpZmllck5hbWU6IHN0cmluZywgcmVmZXJyZXI6IE1vZHVsZUxvY2F0b3IpOiBib29sZWFuIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICByZXNvbHZlTW9kaWZpZXIobW9kaWZpZXJOYW1lOiBzdHJpbmcsIHJlZmVycmVyOiBNb2R1bGVMb2NhdG9yKTogTW9kdWxlTG9jYXRvciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQXBwPFQgZXh0ZW5kcyBUZXN0QXBwbGljYXRpb24+KG9wdGlvbnM6IEFwcEJ1aWxkZXJPcHRpb25zPFQ+ID0ge30pOiBBcHBCdWlsZGVyPFQ+IHtcbiAgb3B0aW9ucy5hcHBOYW1lID0gb3B0aW9ucy5hcHBOYW1lIHx8ICd0ZXN0LWFwcCc7XG4gIG9wdGlvbnMubG9hZGVyID0gb3B0aW9ucy5sb2FkZXIgfHwgJ3J1bnRpbWUtY29tcGlsZXInO1xuICBvcHRpb25zLkNvbXBvbmVudE1hbmFnZXIgPSBvcHRpb25zLkNvbXBvbmVudE1hbmFnZXIgfHwgQ29tcG9uZW50TWFuYWdlcjtcbiAgb3B0aW9ucy5BcHBsaWNhdGlvbkNsYXNzID1cbiAgICBvcHRpb25zLkFwcGxpY2F0aW9uQ2xhc3MgfHwgKFRlc3RBcHBsaWNhdGlvbiBhcyBBcHBsaWNhdGlvbkNvbnN0cnVjdG9yPFQ+KTtcblxuICByZXR1cm4gbmV3IEFwcEJ1aWxkZXIob3B0aW9ucy5hcHBOYW1lLCBvcHRpb25zKTtcbn1cblxuZXhwb3J0IHsgYnVpbGRBcHAgfTtcbiJdLCJzb3VyY2VSb290IjoiIn0= |
import Resolver, { BasicModuleRegistry } from '@glimmer/resolver'; | ||
import defaultResolverConfiguration from './default-resolver-configuration'; | ||
import { precompile } from './compiler'; | ||
import Application, { BytecodeLoader, DOMBuilder, RuntimeCompilerLoader, SyncRenderer, } from '@glimmer/application'; | ||
import Application, { BytecodeLoader, DOMBuilder, RuntimeCompilerLoader, SyncRenderer } from '@glimmer/application'; | ||
import { ComponentManager, CAPABILITIES } from '@glimmer/component'; | ||
@@ -10,2 +10,3 @@ import { assert } from '@glimmer/util'; | ||
import { compilable } from '@glimmer/opcode-compiler'; | ||
import { SSRApplication } from '@glimmer/ssr'; | ||
import didRender from './did-render'; | ||
@@ -33,3 +34,3 @@ export class TestApplication extends Application { | ||
this.template('Main', '<div />'); | ||
this.helper('action', buildAction); | ||
this.helper('action', buildAction, true); | ||
} | ||
@@ -48,4 +49,5 @@ template(name, template) { | ||
} | ||
helper(name, helperFunc) { | ||
helper(name, helperFunc, isFactory = false) { | ||
let specifier = `helper:/${this.rootName}/components/${name}`; | ||
helperFunc.isFactory = isFactory; | ||
this.modules[specifier] = helperFunc; | ||
@@ -63,4 +65,4 @@ return this; | ||
} | ||
buildRuntimeCompilerLoader(resolver) { | ||
return new RuntimeCompilerLoader(resolver); | ||
buildRuntimeCompilerLoader() { | ||
return new RuntimeCompilerLoader(); | ||
} | ||
@@ -97,3 +99,4 @@ buildBytecodeLoader(resolver) { | ||
if (module.indexOf('helper:') === 0) { | ||
resolverTable[handle] = [1, this.modules[module]]; | ||
const moduleType = this.modules[module].isFactory ? 0 /* HELPER_FACTORY */ : 1 /* HELPER */; | ||
resolverTable[handle] = [moduleType, this.modules[module]]; | ||
} | ||
@@ -119,15 +122,25 @@ else { | ||
} | ||
async boot() { | ||
let resolver = this.buildResolver(); | ||
let loader; | ||
buildLoader(resolver) { | ||
switch (this.options.loader) { | ||
case 'runtime-compiler': | ||
loader = this.buildRuntimeCompilerLoader(resolver); | ||
break; | ||
return this.buildRuntimeCompilerLoader(); | ||
case 'bytecode': | ||
loader = this.buildBytecodeLoader(resolver); | ||
break; | ||
return this.buildBytecodeLoader(resolver); | ||
default: | ||
throw new Error(`Unrecognized loader ${this.options.loader}`); | ||
} | ||
} | ||
renderToString(componentName, data) { | ||
const resolver = this.buildResolver(); | ||
let loader = this.buildLoader(resolver); | ||
return SSRApplication.renderToString(componentName, data, { | ||
rootName: this.rootName, | ||
resolver, | ||
loader, | ||
renderer: new SyncRenderer() | ||
}); | ||
} | ||
async boot() { | ||
let resolver = this.buildResolver(); | ||
let loader = this.buildLoader(resolver); | ||
let doc = this.options.document || document; | ||
@@ -196,2 +209,2 @@ let element = doc.body; | ||
export { buildApp }; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci9hcHBsaWNhdGlvbi10ZXN0LWhlbHBlcnMvc3JjL2FwcC1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sUUFBUSxFQUFFLEVBQUUsbUJBQW1CLEVBQXlCLE1BQU0sbUJBQW1CLENBQUM7QUFFekYsT0FBTyw0QkFBNEIsTUFBTSxrQ0FBa0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3hDLE9BQU8sV0FBVyxFQUFFLEVBRWxCLGNBQWMsRUFDZCxVQUFVLEVBRVYscUJBQXFCLEVBQ3JCLFlBQVksR0FDYixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxjQUFjLEVBQXlDLE1BQU0sMEJBQTBCLENBQUM7QUFDakcsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFJdEQsT0FBTyxTQUFTLE1BQU0sY0FBYyxDQUFDO0FBYXJDLE1BQU0sT0FBTyxlQUFnQixTQUFRLFdBQVc7Q0FFL0M7QUFNRCxTQUFTLFVBQVUsQ0FBQyxNQUFjLEVBQUUsSUFBWTtJQUM5QyxPQUFPO1FBQ0wsSUFBSSxFQUFFLFVBQVU7UUFDaEIsTUFBTTtRQUNOLElBQUk7UUFDSixJQUFJLEVBQUU7WUFDSixNQUFNO1lBQ04sSUFBSTtTQUNMO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLE9BQU8sVUFBVTtJQU1yQixZQUFZLElBQVksRUFBRSxPQUE2QjtRQUp2RCxZQUFPLEdBQWtCLEVB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QUVELGVBQWUsQ0FBQyxZQUFvQixFQUFFLFFBQXVCO1FBQzNELE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0NBQ0Y7QUFFRCxTQUFTLFFBQVEsQ0FBNEIsVUFBZ0MsRUFBRTtJQUM3RSxPQUFPLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDO0lBQ2hELE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQztJQUN0RCxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixJQUFJLGdCQUFnQixDQUFDO0lBQ3hFLE9BQU8sQ0FBQyxnQkFBZ0I7UUFDdEIsT0FBTyxDQUFDLGdCQUFnQixJQUFLLGVBQTZDLENBQUM7SUFFN0UsT0FBTyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFRCxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVzb2x2ZXIsIHsgQmFzaWNNb2R1bGVSZWdpc3RyeSwgUmVzb2x2ZXJDb25maWd1cmF0aW9uIH0gZnJvbSAnQGdsaW1tZXIvcmVzb2x2ZXInO1xuaW1wb3J0IHsgRGljdCwgTW9kdWxlTG9jYXRvciwgVGVtcGxhdGVMb2NhdG9yIH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgZGVmYXVsdFJlc29sdmVyQ29uZmlndXJhdGlvbiBmcm9tICcuL2RlZmF1bHQtcmVzb2x2ZXItY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBwcmVjb21waWxlIH0gZnJvbSAnLi9jb21waWxlcic7XG5pbXBvcnQgQXBwbGljYXRpb24sIHtcbiAgQXBwbGljYXRpb25Db25zdHJ1Y3RvcixcbiAgQnl0ZWNvZGVMb2FkZXIsXG4gIERPTUJ1aWxkZXIsXG4gIExvYWRlcixcbiAgUnVudGltZUNvbXBpbGVyTG9hZGVyLFxuICBTeW5jUmVuZGVyZXIsXG59IGZyb20gJ0BnbGltbWVyL2FwcGxpY2F0aW9uJztcbmltcG9ydCB7IENvbXBvbmVudE1hbmFnZXIsIENBUEFCSUxJVElFUyB9IGZyb20gJ0BnbGltbWVyL2NvbXBvbmVudCc7XG5pbXBvcnQgeyBhc3NlcnQgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IEJ1bmRsZUNvbXBpbGVyLCBDb21waWxlckRlbGVnYXRlIGFzIElDb21waWxlckRlbGVnYXRlIH0gZnJvbSAnQGdsaW1tZXIvYnVuZGxlLWNvbXBpbGVyJztcbmltcG9ydCB7IGJ1aWxkQWN0aW9uLCBtYWluVGVtcGxhdGUgfSBmcm9tICdAZ2xpbW1lci9hcHBsaWNhdGlvbic7XG5pbXBvcnQgeyBjb21waWxhYmxlIH0gZnJvbSAnQGdsaW1tZXIvb3Bjb2RlLWNvbXBpbGVyJztcbmltcG9ydCB7IE1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vYXBwbGljYXRpb24vc3JjL2xvYWRlcnMvYnl0ZWNvZGUvbG9hZGVyJztcbmltcG9ydCB7IFNpbXBsZURvY3VtZW50IH0gZnJvbSAnQHNpbXBsZS1kb20vaW50ZXJmYWNlJztcblxuaW1wb3J0IGRpZFJlbmRlciBmcm9tICcuL2RpZC1yZW5kZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwcEJ1aWxkZXJPcHRpb25zPFQ+IHtcbiAgYXBwTmFtZT86IHN0cmluZztcbiAgbG9hZGVyPzogc3RyaW5nO1xuICBBcHBsaWNhdGlvbkNsYXNzPzogQXBwbGljYXRpb25Db25zdHJ1Y3RvcjxUPjtcbiAgQ29tcG9uZW50TWFuYWdlcj86IGFueTsgLy8gVE9ETyAtIHR5cGluZ1xuICByZXNvbHZlckNvbmZpZ3VyYXRpb24/OiBSZXNvbHZlckNvbmZpZ3VyYXRpb247XG4gIGRvY3VtZW50PzogU2ltcGxlRG9jdW1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RmFjdG9yeSB7fVxuXG5leHBvcnQgY2xhc3MgVGVzdEFwcGxpY2F0aW9uIGV4dGVuZHMgQXBwbGljYXRpb24ge1xuICByb290RWxlbWVudDogRWxlbWVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBCdWlsZGVyVGVtcGxhdGVNZXRhIHtcbiAgc3BlY2lmaWVyOiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGxvY2F0b3JGb3IobW9kdWxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFRlbXBsYXRlTG9jYXRvcjxNb2R1bGVMb2NhdG9yPiB7XG4gIHJldHVybiB7XG4gICAga2luZDogJ3RlbXBsYXRlJyxcbiAgICBtb2R1bGUsXG4gICAgbmFtZSxcbiAgICBtZXRhOiB7XG4gICAgICBtb2R1bGUsXG4gICAgICBuYW1lLFxuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBBcHBCdWlsZGVyPFQgZXh0ZW5kcyBUZXN0QXBwbGljYXRpb24+IHtcbiAgcm9vdE5hbWU6IHN0cmluZztcbiAgbW9kdWxlczogRGljdDx1bmtub3duPiA9IHt9O1xuICB0ZW1wbGF0ZXM6IERpY3Q8c3RyaW5nPiA9IHt9O1xuICBvcHRpb25zOiBBcHBCdWlsZGVyT3B0aW9uczxUPjtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IEFwcEJ1aWxkZXJPcHRpb25zPFQ+KSB7XG4gICAgdGhpcy5yb290TmFtZSA9IG5hbWU7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLm1vZHVsZXNbXG4gICAgICBgY29tcG9uZW50LW1hbmFnZXI6LyR7dGhpcy5yb290TmFtZX0vY29tcG9uZW50LW1hbmFnZXJzL21haW5gXG4gICAgXSA9IHRoaXMub3B0aW9ucy5Db21wb25lbnRNYW5hZ2VyO1xuICAgIHRoaXMudGVtcGxhdGUoJ01haW4nLCAnPGRpdiAvPicpO1xuICAgIHRoaXMuaGVscGVyKCdhY3Rpb24nLCBidWlsZEFjdGlvbik7XG4gIH1cblxuICB0ZW1wbGF0ZShuYW1lOiBzdHJpbmcsIHRlbXBsYXRlOiBzdHJpbmcpIHtcbiAgICBhc3NlcnQoXG4gICAgICBuYW1lLmNoYXJBdCgwKSA9PT0gbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSxcbiAgICAgICd0ZW1wbGF0ZSBuYW1lcyBtdXN0IHN0YXJ0IHdpdGggYSBjYXBpdGFsIGxldHRlcidcbiAgICApO1xuXG4gICAgbGV0IHNwZWNpZmllciA9IGB0ZW1wbGF0ZTovJHt0aGlzLnJvb3ROYW1lfS9jb21wb25lbnRzLyR7bmFtZX1gO1xuICAgIHRoaXMubW9kdWxlc1tzcGVjaWZpZXJdID0gcHJlY29tcGlsZSh0ZW1wbGF0ZSwgeyBtZXRhOiB7IHNwZWNpZmllciB9IH0pO1xuICAgIHRoaXMudGVtcGxhdGVzW3NwZWNpZmllcl0gPSB0ZW1wbGF0ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNvbXBvbmVudChuYW1lOiBzdHJpbmcsIGNvbXBvbmVudEZhY3Rvcnk6IENvbXBvbmVudEZhY3RvcnkpIHtcbiAgICBsZXQgc3BlY2lmaWVyID0gYGNvbXBvbmVudDovJHt0aGlzLnJvb3ROYW1lfS9jb21wb25lbnRzLyR7bmFtZX1gO1xuICAgIHRoaXMubW9kdWxlc1tzcGVjaWZpZXJdID0gY29tcG9uZW50RmFjdG9yeTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGhlbHBlcihuYW1lOiBzdHJpbmcsIGhlbHBlckZ1bmM6IEZ1bmN0aW9uKSB7XG4gICAgbGV0IHNwZWNpZmllciA9IGBoZWxwZXI6LyR7dGhpcy5yb290TmFtZX0vY29tcG9uZW50cy8ke25hbWV9YDtcbiAgICB0aGlzLm1vZHVsZXNbc3BlY2lmaWVyXSA9IGhlbHBlckZ1bmM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRSZXNvbHZlcigpOiBSZXNvbHZlciB7XG4gICAgbGV0IHJlc29sdmVyQ29uZmlndXJhdGlvbiA9IHRoaXMub3B0aW9ucy5yZXNvbHZlckNvbmZpZ3VyYXRpb24gfHwgZGVmYXVsdFJlc29sdmVyQ29uZmlndXJhdGlvbjtcbiAgICByZXNvbHZlckNvbmZpZ3VyYXRpb24uYXBwID0gcmVzb2x2ZXJDb25maWd1cmF0aW9uLmFwcCB8fCB7XG4gICAgICBuYW1lOiB0aGlzLnJvb3ROYW1lLFxuICAgICAgcm9vdE5hbWU6IHRoaXMucm9vdE5hbWUsXG4gICAgfTtcblxuICAgIGxldCByZWdpc3RyeSA9IG5ldyBCYXNpY01vZHVsZVJlZ2lzdHJ5KHRoaXMubW9kdWxlcyk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlcihyZXNvbHZlckNvbmZpZ3VyYXRpb24sIHJlZ2lzdHJ5KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBidWlsZFJ1bnRpbWVDb21waWxlckxvYWRlcihyZXNvbHZlcjogUmVzb2x2ZXIpOiBMb2FkZXIge1xuICAgIHJldHVybiBuZXcgUnVudGltZUNvbXBpbGVyTG9hZGVyKHJlc29sdmVyKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBidWlsZEJ5dGVjb2RlTG9hZGVyKHJlc29sdmVyOiBSZXNvbHZlcikge1xuICAgIGxldCBkZWxlZ2F0ZSA9IG5ldyBDb21waWxlckRlbGVnYXRlKHJlc29sdmVyKTtcbiAgICBsZXQgY29tcGlsZXIgPSBuZXcgQnVuZGxlQ29tcGlsZXIoZGVsZWdhdGUpO1xuXG4gICAgbGV0IG1haW5Mb2NhdG9yID0gbG9jYXRvckZvcigndGVtcGxhdGU6bWFpblRlbXBsYXRlJywgJ2RlZmF1bHQnKTtcbiAgICBtYWluTG9jYXRvci5tZXRhLm1vZHVsZSA9ICd0ZW1wbGF0ZTptYWluVGVtcGxhdGUnO1xuXG4gICAgbGV0IGJsb2NrID0gSlNPTi5wYXJzZShtYWluVGVtcGxhdGUuYmxvY2spO1xuICAgIGxldCBjb21waWxhYmxlVGVtcGxhdGUgPSBjb21waWxhYmxlKHtcbiAgICAgIGJsb2NrLFxuICAgICAgcmVmZXJyZXI6IG1haW5Mb2NhdG9yLm1ldGEsXG4gICAgfSk7XG5cbiAgICBjb21waWxlci5hZGRDb21waWxhYmxlVGVtcGxhdGUobWFpbkxvY2F0b3IsIGNvbXBpbGFibGVUZW1wbGF0ZSk7XG5cbiAgICBmb3IgKGxldCBtb2R1bGUgaW4gdGhpcy50ZW1wbGF0ZXMpIHtcbiAgICAgIGNvbXBpbGVyLmFkZFRlbXBsYXRlU291cmNlKGxvY2F0b3JGb3IobW9kdWxlLCAnZGVmYXVsdCcpLCB0aGlzLnRlbXBsYXRlc1ttb2R1bGVdKTtcbiAgICB9XG5cbiAgICBsZXQgeyBoZWFwLCBwb29sLCB0YWJsZSB9ID0gY29tcGlsZXIuY29tcGlsZSgpO1xuXG4gICAgbGV0IHJlc29sdmVyVGFibGU6IHVua25vd25bXSA9IFtdO1xuXG4gICAgbGV0IG1ldGE6IERpY3Q8TWV0YWRhdGE+ID0ge307XG5cbiAgICB0YWJsZS52bUhhbmRsZUJ5TW9kdWxlTG9jYXRvci5mb3JFYWNoKCh2bUhhbmRsZSwgbG9jYXRvcikgPT4ge1xuICAgICAgbGV0IGhhbmRsZSA9IHRhYmxlLmJ5TW9kdWxlTG9jYXRvci5nZXQobG9jYXRvcik7XG4gICAgICBsZXQgdGVtcGxhdGUgPSBjb21waWxlci5nZXRUZW1wbGF0ZShsb2NhdG9yKTtcblxuICAgICAgbWV0YVtsb2NhdG9yLm1vZHVsZV0gPSB7XG4gICAgICAgIHY6IHZtSGFuZGxlLFxuICAgICAgICBoOiBoYW5kbGUsXG4gICAgICAgIHRhYmxlOiB0ZW1wbGF0ZS5zeW1ib2xUYWJsZSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICB0YWJsZS5ieUhhbmRsZS5mb3JFYWNoKChsb2NhdG9yLCBoYW5kbGUpID0+IHtcbiAgICAgIGxldCBtb2R1bGUgPSBsb2NhdG9yLm1vZHVsZS5yZXBsYWNlKCd0ZW1wbGF0ZTovJywgJ2NvbXBvbmVudDovJyk7XG4gICAgICBpZiAodGhpcy5tb2R1bGVzW21vZHVsZV0pIHtcbiAgICAgICAgaWYgKG1vZHVsZS5pbmRleE9mKCdoZWxwZXI6JykgPT09IDApIHtcbiAgICAgICAgICByZXNvbHZlclRhYmxlW2hhbmRsZV0gPSBbMSwgdGhpcy5tb2R1bGVzW21vZHVsZV1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmVyVGFibGVbaGFuZGxlXSA9IHRoaXMubW9kdWxlc1ttb2R1bGVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBsZXQgYnl0ZWNvZGUgPSBoZWFwLmJ1ZmZlcjtcbiAgICBsZXQgZGF0YSA9IHtcbiAgICAgIHByZWZpeDogJycsXG4gICAgICBtYWluRW50cnk6IHRhYmxlLnZtSGFuZGxlQnlNb2R1bGVMb2NhdG9yLmdldChtYWluTG9jYXRvciksXG4gICAgICBwb29sLFxuICAgICAgdGFibGU6IHJlc29sdmVyVGFibGUsXG4gICAgICBtZXRhLFxuICAgICAgaGVhcDoge1xuICAgICAgICB0YWJsZTogaGVhcC50YWJsZSxcbiAgICAgICAgaGFuZGxlOiBoZWFwLmhhbmRsZSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgQnl0ZWNvZGVMb2FkZXIoeyBieXRlY29kZSwgZGF0YSB9KTtcbiAgfVxuXG4gIGFzeW5jIGJvb3QoKTogUHJvbWlzZTxUPiB7XG4gICAgbGV0IHJlc29sdmVyID0gdGhpcy5idWlsZFJlc29sdmVyKCk7XG4gICAgbGV0IGxvYWRlcjogTG9hZGVyO1xuXG4gICAgc3dpdGNoICh0aGlzLm9wdGlvbnMubG9hZGVyKSB7XG4gICAgICBjYXNlICdydW50aW1lLWNvbXBpbGVyJzpcbiAgICAgICAgbG9hZGVyID0gdGhpcy5idWlsZFJ1bnRpbWVDb21waWxlckxvYWRlcihyZXNvbHZlcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYnl0ZWNvZGUnOlxuICAgICAgICBsb2FkZXIgPSB0aGlzLmJ1aWxkQnl0ZWNvZGVMb2FkZXIocmVzb2x2ZXIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGxvYWRlciAke3RoaXMub3B0aW9ucy5sb2FkZXJ9YCk7XG4gICAgfVxuXG4gICAgbGV0IGRvYzogRG9jdW1lbnQgPSAodGhpcy5vcHRpb25zLmRvY3VtZW50IGFzIERvY3VtZW50KSB8fCBkb2N1bWVudDtcbiAgICBsZXQgZWxlbWVudCA9IGRvYy5ib2R5O1xuICAgIGxldCBidWlsZGVyID0gbmV3IERPTUJ1aWxkZXIoeyBlbGVtZW50IH0pO1xuICAgIGxldCByZW5kZXJlciA9IG5ldyBTeW5jUmVuZGVyZXIoKTtcblxuICAgIGxldCBhcHAgPSBuZXcgdGhpcy5vcHRpb25zLkFwcGxpY2F0aW9uQ2xhc3Moe1xuICAgICAgcmVzb2x2ZXIsXG4gICAgICBidWlsZGVyLFxuICAgICAgbG9hZGVyLFxuICAgICAgcmVuZGVyZXIsXG4gICAgICByb290TmFtZTogdGhpcy5yb290TmFtZSxcbiAgICAgIGRvY3VtZW50OiB0aGlzLm9wdGlvbnMuZG9jdW1lbnQsXG4gICAgfSk7XG5cbiAgICBsZXQgcm9vdEVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgYXBwLnJvb3RFbGVtZW50ID0gcm9vdEVsZW1lbnQ7XG4gICAgYXBwLnJlbmRlckNvbXBvbmVudCgnTWFpbicsIHJvb3RFbGVtZW50KTtcbiAgICBhcHAuYm9vdCgpO1xuXG4gICAgYXdhaXQgZGlkUmVuZGVyKGFwcCk7XG5cbiAgICByZXR1cm4gYXBwO1xuICB9XG59XG5cbmNsYXNzIENvbXBpbGVyRGVsZWdhdGUgaW1wbGVtZW50cyBJQ29tcGlsZXJEZWxlZ2F0ZTxNb2R1bGVMb2NhdG9yPiB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZXNvbHZlcjogUmVzb2x2ZXIpIHt9XG5cbiAgaGFzQ29tcG9uZW50SW5TY29wZShuYW1lOiBzdHJpbmcsIHJlZmVycmVyOiBNb2R1bGVMb2NhdG9yKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5yZXNvbHZlci5pZGVudGlmeShgdGVtcGxhdGU6JHtuYW1lfWAsIHJlZmVycmVyLm1vZHVsZSk7XG4gIH1cblxuICByZXNvbHZlQ29tcG9uZW50KG5hbWU6IHN0cmluZywgcmVmZXJyZXI6IE1vZHVsZUxvY2F0b3IpOiBNb2R1bGVMb2NhdG9yIHtcbiAgICBsZXQgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVyLmlkZW50aWZ5KGB0ZW1wbGF0ZToke25hbWV9YCwgcmVmZXJyZXIubW9kdWxlKTtcbiAgICByZXR1cm4geyBtb2R1bGU6IHJlc29sdmVkLCBuYW1lOiAnZGVmYXVsdCcgfTtcbiAgfVxuXG4gIGdldENvbXBvbmVudENhcGFiaWxpdGllcygpIHtcbiAgICByZXR1cm4gQ0FQQUJJTElUSUVTO1xuICB9XG5cbiAgaGFzSGVscGVySW5TY29wZShoZWxwZXJOYW1lOiBzdHJpbmcsIHJlZmVycmVyOiBNb2R1bGVMb2NhdG9yKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5yZXNvbHZlci5pZGVudGlmeShgaGVscGVyOiR7aGVscGVyTmFtZX1gLCByZWZlcnJlci5tb2R1bGUpO1xuICB9XG5cbiAgcmVzb2x2ZUhlbHBlcihoZWxwZXJOYW1lOiBzdHJpbmcsIHJlZmVycmVyOiBNb2R1bGVMb2NhdG9yKTogTW9kdWxlTG9jYXRvciB7XG4gICAgbGV0IHJlc29sdmVkID0gdGhpcy5yZXNvbHZlci5pZGVudGlmeShgaGVscGVyOiR7aGVscGVyTmFtZX1gLCByZWZlcnJlci5tb2R1bGUpO1xuICAgIHJldHVybiB7IG1vZHVsZTogcmVzb2x2ZWQsIG5hbWU6ICdkZWZhdWx0JyB9O1xuICB9XG5cbiAgaGFzUGFydGlhbEluU2NvcGUocGFydGlhbE5hbWU6IHN0cmluZywgcmVmZXJyZXI6IE1vZHVsZUxvY2F0b3IpOiBib29sZWFuIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICByZXNvbHZlUGFydGlhbChwYXJ0aWFsTmFtZTogc3RyaW5nLCByZWZlcnJlcjogTW9kdWxlTG9jYXRvcik6IE1vZHVsZUxvY2F0b3Ige1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIGhhc01vZGlmaWVySW5TY29wZShtb2RpZmllck5hbWU6IHN0cmluZywgcmVmZXJyZXI6IE1vZHVsZUxvY2F0b3IpOiBib29sZWFuIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICByZXNvbHZlTW9kaWZpZXIobW9kaWZpZXJOYW1lOiBzdHJpbmcsIHJlZmVycmVyOiBNb2R1bGVMb2NhdG9yKTogTW9kdWxlTG9jYXRvciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQXBwPFQgZXh0ZW5kcyBUZXN0QXBwbGljYXRpb24+KG9wdGlvbnM6IEFwcEJ1aWxkZXJPcHRpb25zPFQ+ID0ge30pOiBBcHBCdWlsZGVyPFQ+IHtcbiAgb3B0aW9ucy5hcHBOYW1lID0gb3B0aW9ucy5hcHBOYW1lIHx8ICd0ZXN0LWFwcCc7XG4gIG9wdGlvbnMubG9hZGVyID0gb3B0aW9ucy5sb2FkZXIgfHwgJ3J1bnRpbWUtY29tcGlsZXInO1xuICBvcHRpb25zLkNvbXBvbmVudE1hbmFnZXIgPSBvcHRpb25zLkNvbXBvbmVudE1hbmFnZXIgfHwgQ29tcG9uZW50TWFuYWdlcjtcbiAgb3B0aW9ucy5BcHBsaWNhdGlvbkNsYXNzID1cbiAgICBvcHRpb25zLkFwcGxpY2F0aW9uQ2xhc3MgfHwgKFRlc3RBcHBsaWNhdGlvbiBhcyBBcHBsaWNhdGlvbkNvbnN0cnVjdG9yPFQ+KTtcblxuICByZXR1cm4gbmV3IEFwcEJ1aWxkZXIob3B0aW9ucy5hcHBOYW1lLCBvcHRpb25zKTtcbn1cblxuZXhwb3J0IHsgYnVpbGRBcHAgfTtcbiJdfQ== | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci9hcHBsaWNhdGlvbi10ZXN0LWhlbHBlcnMvc3JjL2FwcC1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sUUFBUSxFQUFFLEVBQUUsbUJBQW1CLEVBQXlCLE1BQU0sbUJBQW1CLENBQUM7QUFFekYsT0FBTyw0QkFBNEIsTUFBTSxrQ0FBa0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3hDLE9BQU8sV0FBVyxFQUFFLEVBRWxCLGNBQWMsRUFDZCxVQUFVLEVBRVYscUJBQXFCLEVBQ3JCLFlBQVksRUFFYixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxjQUFjLEVBQXlDLE1BQU0sMEJBQTBCLENBQUM7QUFDakcsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU5QyxPQUFPLFNBQVMsTUFBTSxjQUFjLENBQUM7QUFhckMsTUFBTSxPQUFPLGVBQWdCLFNBQVEsV0FBVztDQUUvQztBQVVELFNBQVMsVUFBVSxDQUFDLE1BQWMsRUFBRSxJQUFZO0lBQzlDLE9BQU87UUFDTCxJQUFJLEVBQUUsVUFBVTtRQUNoQixNQUFNO1FBQ04sSUFBSTtRQUNKLElBQUksRUFBRTtZQUNKLE1BQU07WUFDTixJQUFJO1NBQ0w7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sT0FBTyxVQUFVO0lBTXJC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RUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlc29sdmVyLCB7IEJhc2ljTW9kdWxlUmVnaXN0cnksIFJlc29sdmVyQ29uZmlndXJhdGlvbiB9IGZyb20gJ0BnbGltbWVyL3Jlc29sdmVyJztcbmltcG9ydCB7IERpY3QsIE1vZHVsZUxvY2F0b3IsIFRlbXBsYXRlTG9jYXRvciB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IGRlZmF1bHRSZXNvbHZlckNvbmZpZ3VyYXRpb24gZnJvbSAnLi9kZWZhdWx0LXJlc29sdmVyLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHsgcHJlY29tcGlsZSB9IGZyb20gJy4vY29tcGlsZXInO1xuaW1wb3J0IEFwcGxpY2F0aW9uLCB7XG4gIEFwcGxpY2F0aW9uQ29uc3RydWN0b3IsXG4gIEJ5dGVjb2RlTG9hZGVyLFxuICBET01CdWlsZGVyLFxuICBMb2FkZXIsXG4gIFJ1bnRpbWVDb21waWxlckxvYWRlcixcbiAgU3luY1JlbmRlcmVyLFxuICBNb2R1bGVUeXBlc1xufSBmcm9tICdAZ2xpbW1lci9hcHBsaWNhdGlvbic7XG5pbXBvcnQgeyBDb21wb25lbnRNYW5hZ2VyLCBDQVBBQklMSVRJRVMgfSBmcm9tICdAZ2xpbW1lci9jb21wb25lbnQnO1xuaW1wb3J0IHsgYXNzZXJ0IH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyBCdW5kbGVDb21waWxlciwgQ29tcGlsZXJEZWxlZ2F0ZSBhcyBJQ29tcGlsZXJEZWxlZ2F0ZSB9IGZyb20gJ0BnbGltbWVyL2J1bmRsZS1jb21waWxlcic7XG5pbXBvcnQgeyBidWlsZEFjdGlvbiwgbWFpblRlbXBsYXRlIH0gZnJvbSAnQGdsaW1tZXIvYXBwbGljYXRpb24nO1xuaW1wb3J0IHsgY29tcGlsYWJsZSB9IGZyb20gJ0BnbGltbWVyL29wY29kZS1jb21waWxlcic7XG5pbXBvcnQgeyBNZXRhZGF0YSB9IGZyb20gJy4uLy4uL2FwcGxpY2F0aW9uL3NyYy9sb2FkZXJzL2J5dGVjb2RlL2xvYWRlcic7XG5pbXBvcnQgeyBTaW1wbGVEb2N1bWVudCB9IGZyb20gJ0BzaW1wbGUtZG9tL2ludGVyZmFjZSc7XG5pbXBvcnQgeyBTU1JBcHBsaWNhdGlvbiB9IGZyb20gJ0BnbGltbWVyL3Nzcic7XG5cbmltcG9ydCBkaWRSZW5kZXIgZnJvbSAnLi9kaWQtcmVuZGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBBcHBCdWlsZGVyT3B0aW9uczxUPiB7XG4gIGFwcE5hbWU/OiBzdHJpbmc7XG4gIGxvYWRlcj86IHN0cmluZztcbiAgQXBwbGljYXRpb25DbGFzcz86IEFwcGxpY2F0aW9uQ29uc3RydWN0b3I8VD47XG4gIENvbXBvbmVudE1hbmFnZXI/OiBhbnk7IC8vIFRPRE8gLSB0eXBpbmdcbiAgcmVzb2x2ZXJDb25maWd1cmF0aW9uPzogUmVzb2x2ZXJDb25maWd1cmF0aW9uO1xuICBkb2N1bWVudD86IFNpbXBsZURvY3VtZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudEZhY3Rvcnkge31cblxuZXhwb3J0IGNsYXNzIFRlc3RBcHBsaWNhdGlvbiBleHRlbmRzIEFwcGxpY2F0aW9uIHtcbiAgcm9vdEVsZW1lbnQ6IEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwQnVpbGRlclRlbXBsYXRlTWV0YSB7XG4gIHNwZWNpZmllcjogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgSGVscGVyRnVuY3Rpb24gZXh0ZW5kcyBGdW5jdGlvbiB7XG4gIGlzRmFjdG9yeT86IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIGxvY2F0b3JGb3IobW9kdWxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFRlbXBsYXRlTG9jYXRvcjxNb2R1bGVMb2NhdG9yPiB7XG4gIHJldHVybiB7XG4gICAga2luZDogJ3RlbXBsYXRlJyxcbiAgICBtb2R1bGUsXG4gICAgbmFtZSxcbiAgICBtZXRhOiB7XG4gICAgICBtb2R1bGUsXG4gICAgICBuYW1lLFxuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBBcHBCdWlsZGVyPFQgZXh0ZW5kcyBUZXN0QXBwbGljYXRpb24+IHtcbiAgcm9vdE5hbWU6IHN0cmluZztcbiAgbW9kdWxlczogRGljdDx1bmtub3duPiA9IHt9O1xuICB0ZW1wbGF0ZXM6IERpY3Q8c3RyaW5nPiA9IHt9O1xuICBvcHRpb25zOiBBcHBCdWlsZGVyT3B0aW9uczxUPjtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IEFwcEJ1aWxkZXJPcHRpb25zPFQ+KSB7XG4gICAgdGhpcy5yb290TmFtZSA9IG5hbWU7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLm1vZHVsZXNbXG4gICAgICBgY29tcG9uZW50LW1hbmFnZXI6LyR7dGhpcy5yb290TmFtZX0vY29tcG9uZW50LW1hbmFnZXJzL21haW5gXG4gICAgXSA9IHRoaXMub3B0aW9ucy5Db21wb25lbnRNYW5hZ2VyO1xuICAgIHRoaXMudGVtcGxhdGUoJ01haW4nLCAnPGRpdiAvPicpO1xuICAgIHRoaXMuaGVscGVyKCdhY3Rpb24nLCBidWlsZEFjdGlvbiwgdHJ1ZSk7XG4gIH1cblxuICB0ZW1wbGF0ZShuYW1lOiBzdHJpbmcsIHRlbXBsYXRlOiBzdHJpbmcpIHtcbiAgICBhc3NlcnQoXG4gICAgICBuYW1lLmNoYXJBdCgwKSA9PT0gbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSxcbiAgICAgICd0ZW1wbGF0ZSBuYW1lcyBtdXN0IHN0YXJ0IHdpdGggYSBjYXBpdGFsIGxldHRlcidcbiAgICApO1xuXG4gICAgbGV0IHNwZWNpZmllciA9IGB0ZW1wbGF0ZTovJHt0aGlzLnJvb3ROYW1lfS9jb21wb25lbnRzLyR7bmFtZX1gO1xuICAgIHRoaXMubW9kdWxlc1tzcGVjaWZpZXJdID0gcHJlY29tcGlsZSh0ZW1wbGF0ZSwgeyBtZXRhOiB7IHNwZWNpZmllciB9IH0pO1xuICAgIHRoaXMudGVtcGxhdGVzW3NwZWNpZmllcl0gPSB0ZW1wbGF0ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNvbXBvbmVudChuYW1lOiBzdHJpbmcsIGNvbXBvbmVudEZhY3Rvcnk6IENvbXBvbmVudEZhY3RvcnkpIHtcbiAgICBsZXQgc3BlY2lmaWVyID0gYGNvbXBvbmVudDovJHt0aGlzLnJvb3ROYW1lfS9jb21wb25lbnRzLyR7bmFtZX1gO1xuICAgIHRoaXMubW9kdWxlc1tzcGVjaWZpZXJdID0gY29tcG9uZW50RmFjdG9yeTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGhlbHBlcihuYW1lOiBzdHJpbmcsIGhlbHBlckZ1bmM6IEhlbHBlckZ1bmN0aW9uLCBpc0ZhY3RvcnkgPSBmYWxzZSkge1xuICAgIGxldCBzcGVjaWZpZXIgPSBgaGVscGVyOi8ke3RoaXMucm9vdE5hbWV9L2NvbXBvbmVudHMvJHtuYW1lfWA7XG4gICAgaGVscGVyRnVuYy5pc0ZhY3RvcnkgPSBpc0ZhY3Rvcnk7XG4gICAgdGhpcy5tb2R1bGVzW3NwZWNpZmllcl0gPSBoZWxwZXJGdW5jO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGJ1aWxkUmVzb2x2ZXIoKTogUmVzb2x2ZXIge1xuICAgIGxldCByZXNvbHZlckNvbmZpZ3VyYXRpb24gPSB0aGlzLm9wdGlvbnMucmVzb2x2ZXJDb25maWd1cmF0aW9uIHx8IGRlZmF1bHRSZXNvbHZlckNvbmZpZ3VyYXRpb247XG4gICAgcmVzb2x2ZXJDb25maWd1cmF0aW9uLmFwcCA9IHJlc29sdmVyQ29uZmlndXJhdGlvbi5hcHAgfHwge1xuICAgICAgbmFtZTogdGhpcy5yb290TmFtZSxcbiAgICAgIHJvb3ROYW1lOiB0aGlzLnJvb3ROYW1lLFxuICAgIH07XG5cbiAgICBsZXQgcmVnaXN0cnkgPSBuZXcgQmFzaWNNb2R1bGVSZWdpc3RyeSh0aGlzLm1vZHVsZXMpO1xuICAgIHJldHVybiBuZXcgUmVzb2x2ZXIocmVzb2x2ZXJDb25maWd1cmF0aW9uLCByZWdpc3RyeSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRSdW50aW1lQ29tcGlsZXJMb2FkZXIoKTogTG9hZGVyIHtcbiAgICByZXR1cm4gbmV3IFJ1bnRpbWVDb21waWxlckxvYWRlcigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGJ1aWxkQnl0ZWNvZGVMb2FkZXIocmVzb2x2ZXI6IFJlc29sdmVyKSB7XG4gICAgbGV0IGRlbGVnYXRlID0gbmV3IENvbXBpbGVyRGVsZWdhdGUocmVzb2x2ZXIpO1xuICAgIGxldCBjb21waWxlciA9IG5ldyBCdW5kbGVDb21waWxlcihkZWxlZ2F0ZSk7XG5cbiAgICBsZXQgbWFpbkxvY2F0b3IgPSBsb2NhdG9yRm9yKCd0ZW1wbGF0ZTptYWluVGVtcGxhdGUnLCAnZGVmYXVsdCcpO1xuICAgIG1haW5Mb2NhdG9yLm1ldGEubW9kdWxlID0gJ3RlbXBsYXRlOm1haW5UZW1wbGF0ZSc7XG5cbiAgICBsZXQgYmxvY2sgPSBKU09OLnBhcnNlKG1haW5UZW1wbGF0ZS5ibG9jayk7XG4gICAgbGV0IGNvbXBpbGFibGVUZW1wbGF0ZSA9IGNvbXBpbGFibGUoe1xuICAgICAgYmxvY2ssXG4gICAgICByZWZlcnJlcjogbWFpbkxvY2F0b3IubWV0YSxcbiAgICB9KTtcblxuICAgIGNvbXBpbGVyLmFkZENvbXBpbGFibGVUZW1wbGF0ZShtYWluTG9jYXRvciwgY29tcGlsYWJsZVRlbXBsYXRlKTtcblxuICAgIGZvciAobGV0IG1vZHVsZSBpbiB0aGlzLnRlbXBsYXRlcykge1xuICAgICAgY29tcGlsZXIuYWRkVGVtcGxhdGVTb3VyY2UobG9jYXRvckZvcihtb2R1bGUsICdkZWZhdWx0JyksIHRoaXMudGVtcGxhdGVzW21vZHVsZV0pO1xuICAgIH1cblxuICAgIGxldCB7IGhlYXAsIHBvb2wsIHRhYmxlIH0gPSBjb21waWxlci5jb21waWxlKCk7XG5cbiAgICBsZXQgcmVzb2x2ZXJUYWJsZTogdW5rbm93bltdID0gW107XG5cbiAgICBsZXQgbWV0YTogRGljdDxNZXRhZGF0YT4gPSB7fTtcblxuICAgIHRhYmxlLnZtSGFuZGxlQnlNb2R1bGVMb2NhdG9yLmZvckVhY2goKHZtSGFuZGxlLCBsb2NhdG9yKSA9PiB7XG4gICAgICBsZXQgaGFuZGxlID0gdGFibGUuYnlNb2R1bGVMb2NhdG9yLmdldChsb2NhdG9yKTtcbiAgICAgIGxldCB0ZW1wbGF0ZSA9IGNvbXBpbGVyLmdldFRlbXBsYXRlKGxvY2F0b3IpO1xuXG4gICAgICBtZXRhW2xvY2F0b3IubW9kdWxlXSA9IHtcbiAgICAgICAgdjogdm1IYW5kbGUsXG4gICAgICAgIGg6IGhhbmRsZSxcbiAgICAgICAgdGFibGU6IHRlbXBsYXRlLnN5bWJvbFRhYmxlLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRhYmxlLmJ5SGFuZGxlLmZvckVhY2goKGxvY2F0b3IsIGhhbmRsZSkgPT4ge1xuICAgICAgbGV0IG1vZHVsZSA9IGxvY2F0b3IubW9kdWxlLnJlcGxhY2UoJ3RlbXBsYXRlOi8nLCAnY29tcG9uZW50Oi8nKTtcbiAgICAgIGlmICh0aGlzLm1vZHVsZXNbbW9kdWxlXSkge1xuICAgICAgICBpZiAobW9kdWxlLmluZGV4T2YoJ2hlbHBlcjonKSA9PT0gMCkge1xuICAgICAgICAgIGNvbnN0IG1vZHVsZVR5cGUgPSAodGhpcy5tb2R1bGVzW21vZHVsZV0gYXMgSGVscGVyRnVuY3Rpb24pLmlzRmFjdG9yeSA/IE1vZHVsZVR5cGVzLkhFTFBFUl9GQUNUT1JZIDogTW9kdWxlVHlwZXMuSEVMUEVSO1xuICAgICAgICAgIHJlc29sdmVyVGFibGVbaGFuZGxlXSA9IFttb2R1bGVUeXBlLCB0aGlzLm1vZHVsZXNbbW9kdWxlXV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZXJUYWJsZVtoYW5kbGVdID0gdGhpcy5tb2R1bGVzW21vZHVsZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxldCBieXRlY29kZSA9IGhlYXAuYnVmZmVyO1xuICAgIGxldCBkYXRhID0ge1xuICAgICAgcHJlZml4OiAnJyxcbiAgICAgIG1haW5FbnRyeTogdGFibGUudm1IYW5kbGVCeU1vZHVsZUxvY2F0b3IuZ2V0KG1haW5Mb2NhdG9yKSxcbiAgICAgIHBvb2wsXG4gICAgICB0YWJsZTogcmVzb2x2ZXJUYWJsZSxcbiAgICAgIG1ldGEsXG4gICAgICBoZWFwOiB7XG4gICAgICAgIHRhYmxlOiBoZWFwLnRhYmxlLFxuICAgICAgICBoYW5kbGU6IGhlYXAuaGFuZGxlLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBCeXRlY29kZUxvYWRlcih7IGJ5dGVjb2RlLCBkYXRhIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGJ1aWxkTG9hZGVyKHJlc29sdmVyKTogTG9hZGVyIHtcbiAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy5sb2FkZXIpIHtcbiAgICAgIGNhc2UgJ3J1bnRpbWUtY29tcGlsZXInOlxuICAgICAgICByZXR1cm4gdGhpcy5idWlsZFJ1bnRpbWVDb21waWxlckxvYWRlcigpO1xuICAgICAgY2FzZSAnYnl0ZWNvZGUnOlxuICAgICAgICByZXR1cm4gdGhpcy5idWlsZEJ5dGVjb2RlTG9hZGVyKHJlc29sdmVyKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGxvYWRlciAke3RoaXMub3B0aW9ucy5sb2FkZXJ9YCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyVG9TdHJpbmcoY29tcG9uZW50TmFtZTogc3RyaW5nLCBkYXRhOiBEaWN0PHVua25vd24+KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCByZXNvbHZlciA9IHRoaXMuYnVpbGRSZXNvbHZlcigpO1xuICAgIGxldCBsb2FkZXIgPSB0aGlzLmJ1aWxkTG9hZGVyKHJlc29sdmVyKTtcblxuICAgIHJldHVybiBTU1JBcHBsaWNhdGlvbi5yZW5kZXJUb1N0cmluZyhjb21wb25lbnROYW1lLCBkYXRhLCB7XG4gICAgICByb290TmFtZTogdGhpcy5yb290TmFtZSxcbiAgICAgIHJlc29sdmVyLFxuICAgICAgbG9hZGVyLFxuICAgICAgcmVuZGVyZXI6IG5ldyBTeW5jUmVuZGVyZXIoKVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgYm9vdCgpOiBQcm9taXNlPFQ+IHtcbiAgICBsZXQgcmVzb2x2ZXIgPSB0aGlzLmJ1aWxkUmVzb2x2ZXIoKTtcbiAgICBsZXQgbG9hZGVyOiBMb2FkZXIgPSB0aGlzLmJ1aWxkTG9hZGVyKHJlc29sdmVyKTtcblxuICAgIGxldCBkb2M6IERvY3VtZW50ID0gKHRoaXMub3B0aW9ucy5kb2N1bWVudCBhcyBEb2N1bWVudCkgfHwgZG9jdW1lbnQ7XG4gICAgbGV0IGVsZW1lbnQgPSBkb2MuYm9keTtcbiAgICBsZXQgYnVpbGRlciA9IG5ldyBET01CdWlsZGVyKHsgZWxlbWVudCB9KTtcbiAgICBsZXQgcmVuZGVyZXIgPSBuZXcgU3luY1JlbmRlcmVyKCk7XG5cbiAgICBsZXQgYXBwID0gbmV3IHRoaXMub3B0aW9ucy5BcHBsaWNhdGlvbkNsYXNzKHtcbiAgICAgIHJlc29sdmVyLFxuICAgICAgYnVpbGRlcixcbiAgICAgIGxvYWRlcixcbiAgICAgIHJlbmRlcmVyLFxuICAgICAgcm9vdE5hbWU6IHRoaXMucm9vdE5hbWUsXG4gICAgICBkb2N1bWVudDogdGhpcy5vcHRpb25zLmRvY3VtZW50LFxuICAgIH0pO1xuXG4gICAgbGV0IHJvb3RFbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGFwcC5yb290RWxlbWVudCA9IHJvb3RFbGVtZW50O1xuICAgIGFwcC5yZW5kZXJDb21wb25lbnQoJ01haW4nLCByb290RWxlbWVudCk7XG4gICAgYXBwLmJvb3QoKTtcblxuICAgIGF3YWl0IGRpZFJlbmRlcihhcHApO1xuXG4gICAgcmV0dXJuIGFwcDtcbiAgfVxufVxuXG5jbGFzcyBDb21waWxlckRlbGVnYXRlIGltcGxlbWVudHMgSUNvbXBpbGVyRGVsZWdhdGU8TW9kdWxlTG9jYXRvcj4ge1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVzb2x2ZXI6IFJlc29sdmVyKSB7fVxuXG4gIGhhc0NvbXBvbmVudEluU2NvcGUobmFtZTogc3RyaW5nLCByZWZlcnJlcjogTW9kdWxlTG9jYXRvcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucmVzb2x2ZXIuaWRlbnRpZnkoYHRlbXBsYXRlOiR7bmFtZX1gLCByZWZlcnJlci5tb2R1bGUpO1xuICB9XG5cbiAgcmVzb2x2ZUNvbXBvbmVudChuYW1lOiBzdHJpbmcsIHJlZmVycmVyOiBNb2R1bGVMb2NhdG9yKTogTW9kdWxlTG9jYXRvciB7XG4gICAgbGV0IHJlc29sdmVkID0gdGhpcy5yZXNvbHZlci5pZGVudGlmeShgdGVtcGxhdGU6JHtuYW1lfWAsIHJlZmVycmVyLm1vZHVsZSk7XG4gICAgcmV0dXJuIHsgbW9kdWxlOiByZXNvbHZlZCwgbmFtZTogJ2RlZmF1bHQnIH07XG4gIH1cblxuICBnZXRDb21wb25lbnRDYXBhYmlsaXRpZXMoKSB7XG4gICAgcmV0dXJuIENBUEFCSUxJVElFUztcbiAgfVxuXG4gIGhhc0hlbHBlckluU2NvcGUoaGVscGVyTmFtZTogc3RyaW5nLCByZWZlcnJlcjogTW9kdWxlTG9jYXRvcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucmVzb2x2ZXIuaWRlbnRpZnkoYGhlbHBlcjoke2hlbHBlck5hbWV9YCwgcmVmZXJyZXIubW9kdWxlKTtcbiAgfVxuXG4gIHJlc29sdmVIZWxwZXIoaGVscGVyTmFtZTogc3RyaW5nLCByZWZlcnJlcjogTW9kdWxlTG9jYXRvcik6IE1vZHVsZUxvY2F0b3Ige1xuICAgIGxldCByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZXIuaWRlbnRpZnkoYGhlbHBlcjoke2hlbHBlck5hbWV9YCwgcmVmZXJyZXIubW9kdWxlKTtcbiAgICByZXR1cm4geyBtb2R1bGU6IHJlc29sdmVkLCBuYW1lOiAnZGVmYXVsdCcgfTtcbiAgfVxuXG4gIGhhc1BhcnRpYWxJblNjb3BlKHBhcnRpYWxOYW1lOiBzdHJpbmcsIHJlZmVycmVyOiBNb2R1bGVMb2NhdG9yKTogYm9vbGVhbiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgcmVzb2x2ZVBhcnRpYWwocGFydGlhbE5hbWU6IHN0cmluZywgcmVmZXJyZXI6IE1vZHVsZUxvY2F0b3IpOiBNb2R1bGVMb2NhdG9yIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICBoYXNNb2RpZmllckluU2NvcGUobW9kaWZpZXJOYW1lOiBzdHJpbmcsIHJlZmVycmVyOiBNb2R1bGVMb2NhdG9yKTogYm9vbGVhbiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgcmVzb2x2ZU1vZGlmaWVyKG1vZGlmaWVyTmFtZTogc3RyaW5nLCByZWZlcnJlcjogTW9kdWxlTG9jYXRvcik6IE1vZHVsZUxvY2F0b3Ige1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZEFwcDxUIGV4dGVuZHMgVGVzdEFwcGxpY2F0aW9uPihvcHRpb25zOiBBcHBCdWlsZGVyT3B0aW9uczxUPiA9IHt9KTogQXBwQnVpbGRlcjxUPiB7XG4gIG9wdGlvbnMuYXBwTmFtZSA9IG9wdGlvbnMuYXBwTmFtZSB8fCAndGVzdC1hcHAnO1xuICBvcHRpb25zLmxvYWRlciA9IG9wdGlvbnMubG9hZGVyIHx8ICdydW50aW1lLWNvbXBpbGVyJztcbiAgb3B0aW9ucy5Db21wb25lbnRNYW5hZ2VyID0gb3B0aW9ucy5Db21wb25lbnRNYW5hZ2VyIHx8IENvbXBvbmVudE1hbmFnZXI7XG4gIG9wdGlvbnMuQXBwbGljYXRpb25DbGFzcyA9XG4gICAgb3B0aW9ucy5BcHBsaWNhdGlvbkNsYXNzIHx8IChUZXN0QXBwbGljYXRpb24gYXMgQXBwbGljYXRpb25Db25zdHJ1Y3RvcjxUPik7XG5cbiAgcmV0dXJuIG5ldyBBcHBCdWlsZGVyKG9wdGlvbnMuYXBwTmFtZSwgb3B0aW9ucyk7XG59XG5cbmV4cG9ydCB7IGJ1aWxkQXBwIH07XG4iXX0= |
@@ -20,2 +20,3 @@ function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; } | ||
import { compilable } from '@glimmer/opcode-compiler'; | ||
import { SSRApplication } from '@glimmer/ssr'; | ||
import didRender from './did-render'; | ||
@@ -55,3 +56,3 @@ export var TestApplication = function (_Application) { | ||
this.template('Main', '<div />'); | ||
this.helper('action', buildAction); | ||
this.helper('action', buildAction, true); | ||
} | ||
@@ -74,3 +75,6 @@ | ||
AppBuilder.prototype.helper = function helper(name, helperFunc) { | ||
var isFactory = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; | ||
var specifier = 'helper:/' + this.rootName + '/components/' + name; | ||
helperFunc.isFactory = isFactory; | ||
this.modules[specifier] = helperFunc; | ||
@@ -90,4 +94,4 @@ return this; | ||
AppBuilder.prototype.buildRuntimeCompilerLoader = function buildRuntimeCompilerLoader(resolver) { | ||
return new RuntimeCompilerLoader(resolver); | ||
AppBuilder.prototype.buildRuntimeCompilerLoader = function buildRuntimeCompilerLoader() { | ||
return new RuntimeCompilerLoader(); | ||
}; | ||
@@ -132,3 +136,4 @@ | ||
if (module.indexOf('helper:') === 0) { | ||
resolverTable[handle] = [1, _this2.modules[module]]; | ||
var moduleType = _this2.modules[module].isFactory ? 0 /* HELPER_FACTORY */ : 1 /* HELPER */; | ||
resolverTable[handle] = [moduleType, _this2.modules[module]]; | ||
} else { | ||
@@ -154,16 +159,28 @@ resolverTable[handle] = _this2.modules[module]; | ||
AppBuilder.prototype.buildLoader = function buildLoader(resolver) { | ||
switch (this.options.loader) { | ||
case 'runtime-compiler': | ||
return this.buildRuntimeCompilerLoader(); | ||
case 'bytecode': | ||
return this.buildBytecodeLoader(resolver); | ||
default: | ||
throw new Error('Unrecognized loader ' + this.options.loader); | ||
} | ||
}; | ||
AppBuilder.prototype.renderToString = function renderToString(componentName, data) { | ||
var resolver = this.buildResolver(); | ||
var loader = this.buildLoader(resolver); | ||
return SSRApplication.renderToString(componentName, data, { | ||
rootName: this.rootName, | ||
resolver: resolver, | ||
loader: loader, | ||
renderer: new SyncRenderer() | ||
}); | ||
}; | ||
AppBuilder.prototype.boot = function () { | ||
var _ref = _asyncToGenerator(function* () { | ||
var resolver = this.buildResolver(); | ||
var loader = void 0; | ||
switch (this.options.loader) { | ||
case 'runtime-compiler': | ||
loader = this.buildRuntimeCompilerLoader(resolver); | ||
break; | ||
case 'bytecode': | ||
loader = this.buildBytecodeLoader(resolver); | ||
break; | ||
default: | ||
throw new Error('Unrecognized loader ' + this.options.loader); | ||
} | ||
var loader = this.buildLoader(resolver); | ||
var doc = this.options.document || document; | ||
@@ -259,2 +276,2 @@ var element = doc.body; | ||
export { buildApp }; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2FwcGxpY2F0aW9uLXRlc3QtaGVscGVycy9zcmMvYXBwLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLE9BQU8sUUFBUCxJQUFtQixtQkFBbkIsUUFBcUUsbUJBQXJFO0FBRUEsT0FBTyw0QkFBUCxNQUF5QyxrQ0FBekM7QUFDQSxTQUFTLFVBQVQsUUFBMkIsWUFBM0I7QUFDQSxPQUFPLFdBQVAsSUFFRSxjQUZGLEVBR0UsVUFIRixFQUtFLHFCQUxGLEVBTUUsWUFORixRQU9PLHNCQVBQO0FBUUEsU0FBUyxnQkFBVCxFQUEyQixZQUEzQixRQUErQyxvQkFBL0M7QUFDQSxTQUFTLE1BQVQsUUFBdUIsZUFBdkI7QUFDQSxTQUFTLGNBQVQsUUFBc0UsMEJBQXRFO0FBQ0EsU0FBUyxXQUFULEVBQXNCLFlBQXRCLFFBQTBDLHNCQUExQztBQUNBLFNBQVMsVUFBVCxRQUEyQiwwQkFBM0I7QUFJQSxPQUFPLFNBQVAsTUFBc0IsY0FBdEI7QUFhQSxXQUFhLGVBQWI7QUFBQTs7QUFBQTtBQUFBOztBQUFBO0FBQUE7O0FBQUE7QUFBQSxFQUFxQyxXQUFyQztBQVFBLFNBQVMsVUFBVCxDQUFvQixNQUFwQixFQUFvQyxJQUFwQyxFQUFnRDtBQUM5QyxXQUFPO0FBQ0wsY0FBTSxVQUREO0FBRUwsc0JBRks7QUFHTCxrQkFISztBQUlMLGNBQU07QUFDSiwwQkFESTtBQUVKO0FBRkk7QUFKRCxLQUFQO0FBU0Q7O0lBRVksVTtBQU1YLHdCQUFZLElBQVosRUFBMEIsT0FBMUIsRUFBdUQ7QUFBQTs7QUFKdkQsYUFBQSxPQUFBLEdBQXlCLEVBQXpCO0FBQ0EsYUFBQSxTQUFBLEdBQTBCLEVBQTFCO0FBSUUsYUFBSyxRQUFMLEdBQWdCLElBQWhCO0FBQ0EsYUFBSyxPQUFMLEdBQWUsT0FBZjtBQUNBLGFBQUssT0FBTCx5QkFDd0IsS0FBSyxRQUQ3QixpQ0FFSSxLQUFLLE9BQUwsQ0FBYSxnQkFGakI7QUFHQSxhQUFLLFFBQUwsQ0FBYyxNQUFkLEVBQXNCLFNBQXRCO0FBQ0EsYUFBSyxNQUFMLENBQVksUUFBWixFQUFzQixXQUF0QjtBQUNEOzt5QkFFRCxRLHFCQUFTLEksRUFBYyxTLEVBQWdCO0FBQ3JDLGVBQ0UsS0FBSyxNQUFMLENBQVksQ0FBWixNQUFtQixLQUFLLE1BQUwsQ0FBWSxDQUFaLEVBQWUsV0FBZixFQURyQixFQUVFLGlEQUZGO0FBS0EsWUFBSSwyQkFBeUIsS0FBSyxRQUE5QixvQkFBcUQsSUFBekQ7QUFDQSxhQUFLLE9BQUwsQ0FBYSxTQUFiLElBQTBCLFdBQVcsU0FBWCxFQUFxQixFQUFFLE1BQU0sRUFBRSxvQkFBRixFQUFSLEVBQXJCLENBQTFCO0FBQ0EsYUFBSyxTQUFMLENBQWUsU0FBZixJQUE0QixTQUE1QjtBQUNBLGVBQU8sSUFBUDtBQUNELEs7O3lCQUVELFMsc0JBQVUsSSxFQUFjLGdCLEVBQWtDO0FBQ3hELFlBQUksNEJBQTBCLEtBQUssUUFBL0Isb0JBQXNELElBQTFEO0FBQ0EsYUFBSyxPQUFMLENBQWEsU0FBYixJQUEwQixnQkFBMUI7QUFDQSxlQUFPLElBQVA7QUFDRCxLOzt5QkFFRCxNLG1CQUFPLEksRUFBYyxVLEVBQW9CO0FBQ3ZDLFlBQUkseUJBQXVCLEtBQUssUUFBNUIsb0JBQW1ELElBQXZEO0FBQ0EsYUFBSyxPQUFMLENBQWEsU0FBYixJQUEwQixVQUExQjtBQUNBLGVBQU8sSUFBUDtBQUNELEs7O3lCQUVTLGEsNEJBQWE7QUFDckIsWUFBSSx3QkFBd0IsS0FBSyxPQUFMLENBQWEscUJBQWIsSUFBc0MsNEJBQWxFO0FBQ0EsOEJBQXNCLEdBQXRCLEdBQTRCLHNCQUFzQixHQUF0QixJQUE2QjtBQUN2RCxrQkFBTSxLQUFLLFFBRDRDO0FBRXZELHNCQUFVLEtBQUs7QUFGd0MsU0FBekQ7QUFLQSxZQUFJLFdBQVcsSUFBSSxtQkFBSixDQUF3QixLQUFLLE9BQTdCLENBQWY7QUFDQSxlQUFPLElBQUksUUFBSixDQUFhLHFCQUFiLEVBQW9DLFFBQXBDLENBQVA7QUFDRCxLOzt5QkFFUywwQix1Q0FBMkIsUSxFQUFrQjtBQUNyRCxlQUFPLElBQUkscUJBQUosQ0FBMEIsUUFBMUIsQ0FBUDtBQUNELEs7O3lCQUVTLG1CLGdDQUFvQixRLEVBQWtCO0FBQUE7O0FBQzlDLFlBQUksV0FBVyxJQUFJLGdCQUFKLENBQXFCLFFBQXJCLENBQWY7QUFDQSxZQUFJLFdBQVcsSUFBSSxjQUFKLENBQW1CLFFBQW5CLENBQWY7QUFFQSxZQUFJLGNBQWMsV0FBVyx1QkFBWCxFQUFvQyxTQUFwQyxDQUFsQjtBQUNBLG9CQUFZLElBQVosQ0FBaUIsTUFBakIsR0FBMEIsdUJBQTFCO0FBRUEsWUFBSSxRQUFRLEtBQUssS0FBTCxDQUFXLGFBQWEsS0FBeEIsQ0FBWjtBQUNBLFlBQUkscUJBQXFCLFdBQVc7QUFDbEMsd0JBRGtDO0FBRWxDLHNCQUFVLFlBQVk7QUFGWSxTQUFYLENBQXpCO0FBS0EsaUJBQVMscUJBQVQsQ0FBK0IsV0FBL0IsRUFBNEMsa0JBQTVDO0FBRUEsYUFBSyxJQUFJLE1BQVQsSUFBbUIsS0FBSyxTQUF4QixFQUFtQztBQUNqQyxxQkFBUyxpQkFBVCxDQUEyQixXQUFXLE1BQVgsRUFBbUIsU0FBbkIsQ0FBM0IsRUFBMEQsS0FBSyxTQUFMLENBQWUsTUFBZixDQUExRDtBQUNEOztBQWpCNkMsZ0NBbUJsQixTQUFTLE9BQVQsRUFuQmtCO0FBQUEsWUFtQnhDLElBbkJ3QyxxQkFtQnhDLElBbkJ3QztBQUFBLFlBbUJsQyxJQW5Ca0MscUJBbUJsQyxJQW5Ca0M7QUFBQSxZQW1CNUIsS0FuQjRCLHFCQW1CNUIsS0FuQjRCOztBQXFCOUMsWUFBSSxnQkFBMkIsRUFBL0I7QUFFQSxZQUFJLE9BQXVCLEVBQTNCO0FBRUEsY0FBTSx1QkFBTixDQUE4QixPQUE5QixDQUFzQyxVQUFDLFFBQUQsRUFBVyxPQUFYLEVBQXNCO0FBQzFELGdCQUFJLFNBQVMsTUFBTSxlQUFOLENBQXNCLEdBQXRCLENBQTBCLE9BQTFCLENBQWI7QUFDQSxnQkFBSSxXQUFXLFNBQVMsV0FBVCxDQUFxQixPQUFyQixDQUFmO0FBRUEsaUJBQUssUUFBUSxNQUFiLElBQXVCO0FBQ3JCLG1CQUFHLFFBRGtCO0FBRXJCLG1CQUFHLE1BRmtCO0FBR3JCLHVCQUFPLFNBQVM7QUFISyxhQUF2QjtBQUtELFNBVEQ7QUFXQSxjQUFNLFFBQU4sQ0FBZSxPQUFmLENBQXVCLFVBQUMsT0FBRCxFQUFVLE1BQVYsRUFBb0I7QUFDekMsZ0JBQUksU0FBUyxRQUFRLE1BQVIsQ0FBZSxPQUFmLENBQXVCLFlBQXZCLEVBQXFDLGFBQXJDLENBQWI7QUFDQSxnQkFBSSxPQUFLLE9BQUwsQ0FBYSxNQUFiLENBQUosRUFBMEI7QUFDeEIsb0JBQUksT0FBTyxPQUFQLENBQWUsU0FBZixNQUE4QixDQUFsQyxFQUFxQztBQUNuQyxrQ0FBYyxNQUFkLElBQXdCLENBQUMsQ0FBRCxFQUFJLE9BQUssT0FBTCxDQUFhLE1BQWIsQ0FBSixDQUF4QjtBQUNELGlCQUZELE1BRU87QUFDTCxrQ0FBYyxNQUFkLElBQXdCLE9BQUssT0FBTCxDQUFhLE1BQWIsQ0FBeEI7QUFDRDtBQUNGO0FBQ0YsU0FURDtBQVdBLFlBQUksV0FBVyxLQUFLLE1BQXBCO0FBQ0EsWUFBSSxPQUFPO0FBQ1Qsb0JBQVEsRUFEQztBQUVULHVCQUFXLE1BQU0sdUJBQU4sQ0FBOEIsR0FBOUIsQ0FBa0MsV0FBbEMsQ0FGRjtBQUdULHNCQUhTO0FBSVQsbUJBQU8sYUFKRTtBQUtULHNCQUxTO0FBTVQsa0JBQU07QUFDSix1QkFBTyxLQUFLLEtBRFI7QUFFSix3QkFBUSxLQUFLO0FBRlQ7QUFORyxTQUFYO0FBWUEsZUFBTyxJQUFJLGNBQUosQ0FBbUIsRUFBRSxrQkFBRixFQUFZLFVBQVosRUFBbkIsQ0FBUDtBQUNELEs7O3lCQUVLLEk7a0RBQUk7QUFDUixnQkFBSSxXQUFXLEtBQUssYUFBTCxFQUFmO0FBQ0EsZ0JBQUksZUFBSjtBQUVBLG9CQUFRLEtBQUssT0FBTCxDQUFhLE1BQXJCO0FBQ0UscUJBQUssa0JBQUw7QUFDRSw2QkFBUyxLQUFLLDBCQUFMLENBQWdDLFFBQWhDLENBQVQ7QUFDQTtBQUNGLHFCQUFLLFVBQUw7QUFDRSw2QkFBUyxLQUFLLG1CQUFMLENBQXlCLFFBQXpCLENBQVQ7QUFDQTtBQUNGO0FBQ0UsMEJBQU0sSUFBSSxLQUFKLDBCQUFpQyxLQUFLLE9BQUwsQ0FBYSxNQUE5QyxDQUFOO0FBUko7QUFXQSxnQkFBSSxNQUFpQixLQUFLLE9BQUwsQ0FBYSxRQUFiLElBQXNDLFFBQTNEO0FBQ0EsZ0JBQUksVUFBVSxJQUFJLElBQWxCO0FBQ0EsZ0JBQUksVUFBVSxJQUFJLFVBQUosQ0FBZSxFQUFFLGdCQUFGLEVBQWYsQ0FBZDtBQUNBLGdCQUFJLFdBQVcsSUFBSSxZQUFKLEVBQWY7QUFFQSxnQkFBSSxNQUFNLElBQUksS0FBSyxPQUFMLENBQWEsZ0JBQWpCLENBQWtDO0FBQzFDLGtDQUQwQztBQUUxQyxnQ0FGMEM7QUFHMUMsOEJBSDBDO0FBSTFDLGtDQUowQztBQUsxQywwQkFBVSxLQUFLLFFBTDJCO0FBTTFDLDBCQUFVLEtBQUssT0FBTCxDQUFhO0FBTm1CLGFBQWxDLENBQVY7QUFTQSxnQkFBSSxjQUFjLElBQUksYUFBSixDQUFrQixLQUFsQixDQUFsQjtBQUNBLGdCQUFJLFdBQUosR0FBa0IsV0FBbEI7QUFDQSxnQkFBSSxlQUFKLENBQW9CLE1BQXBCLEVBQTRCLFdBQTVCO0FBQ0EsZ0JBQUksSUFBSjtBQUVBLGtCQUFNLFVBQVUsR0FBVixDQUFOO0FBRUEsbUJBQU8sR0FBUDtBQUNELFM7Ozs7Ozs7Ozs7Ozs7O0lBR0csZ0I7QUFDSiw4QkFBc0IsUUFBdEIsRUFBd0M7QUFBQTs7QUFBbEIsYUFBQSxRQUFBLEdBQUEsUUFBQTtBQUFzQjs7K0JBRTVDLG1CLGdDQUFvQixJLEVBQWMsUSxFQUF1QjtBQUN2RCxlQUFPLENBQUMsQ0FBQyxLQUFLLFFBQUwsQ0FBYyxRQUFkLGVBQW1DLElBQW5DLEVBQTJDLFNBQVMsTUFBcEQsQ0FBVDtBQUNELEs7OytCQUVELGdCLDZCQUFpQixJLEVBQWMsUSxFQUF1QjtBQUNwRCxZQUFJLFdBQVcsS0FBSyxRQUFMLENBQWMsUUFBZCxlQUFtQyxJQUFuQyxFQUEyQyxTQUFTLE1BQXBELENBQWY7QUFDQSxlQUFPLEVBQUUsUUFBUSxRQUFWLEVBQW9CLE1BQU0sU0FBMUIsRUFBUDtBQUNELEs7OytCQUVELHdCLHVDQUF3QjtBQUN0QixlQUFPLFlBQVA7QUFDRCxLOzsrQkFFRCxnQiw2QkFBaUIsVSxFQUFvQixRLEVBQXVCO0FBQzFELGVBQU8sQ0FBQyxDQUFDLEtBQUssUUFBTCxDQUFjLFFBQWQsYUFBaUMsVUFBakMsRUFBK0MsU0FBUyxNQUF4RCxDQUFUO0FBQ0QsSzs7K0JBRUQsYSwwQkFBYyxVLEVBQW9CLFEsRUFBdUI7QUFDdkQsWUFBSSxXQUFXLEtBQUssUUFBTCxDQUFjLFFBQWQsYUFBaUMsVUFBakMsRUFBK0MsU0FBUyxNQUF4RCxDQUFmO0FBQ0EsZUFBTyxFQUFFLFFBQVEsUUFBVixFQUFvQixNQUFNLFNBQTFCLEVBQVA7QUFDRCxLOzsrQkFFRCxpQiw4QkFBa0IsVyxFQUFxQixRLEVBQXVCO0FBQzVELGNBQU0sSUFBSSxLQUFKLENBQVUseUJBQVYsQ0FBTjtBQUNELEs7OytCQUVELGMsMkJBQWUsVyxFQUFxQixRLEVBQXVCO0FBQ3pELGNBQU0sSUFBSSxLQUFKLENBQVUseUJBQVYsQ0FBTjtBQUNELEs7OytCQUVELGtCLCtCQUFtQixZLEVBQXNCLFEsRUFBdUI7QUFDOUQsY0FBTSxJQUFJLEtBQUosQ0FBVSx5QkFBVixDQUFOO0FBQ0QsSzs7K0JBRUQsZSw0QkFBZ0IsWSxFQUFzQixRLEVBQXVCO0FBQzNELGNBQU0sSUFBSSxLQUFKLENBQVUseUJBQVYsQ0FBTjtBQUNELEs7Ozs7O0FBR0gsU0FBUyxRQUFULEdBQStFO0FBQUEsUUFBbEMsT0FBa0MsdUVBQUYsRUFBRTs7QUFDN0UsWUFBUSxPQUFSLEdBQWtCLFFBQVEsT0FBUixJQUFtQixVQUFyQztBQUNBLFlBQVEsTUFBUixHQUFpQixRQUFRLE1BQVIsSUFBa0Isa0JBQW5DO0FBQ0EsWUFBUSxnQkFBUixHQUEyQixRQUFRLGdCQUFSLElBQTRCLGdCQUF2RDtBQUNBLFlBQVEsZ0JBQVIsR0FDRSxRQUFRLGdCQUFSLElBQTZCLGVBRC9CO0FBR0EsV0FBTyxJQUFJLFVBQUosQ0FBZSxRQUFRLE9BQXZCLEVBQWdDLE9BQWhDLENBQVA7QUFDRDtBQUVELFNBQVMsUUFBVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZXNvbHZlciwgeyBCYXNpY01vZHVsZVJlZ2lzdHJ5LCBSZXNvbHZlckNvbmZpZ3VyYXRpb24gfSBmcm9tICdAZ2xpbW1lci9yZXNvbHZlcic7XG5pbXBvcnQgeyBEaWN0LCBNb2R1bGVMb2NhdG9yLCBUZW1wbGF0ZUxvY2F0b3IgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCBkZWZhdWx0UmVzb2x2ZXJDb25maWd1cmF0aW9uIGZyb20gJy4vZGVmYXVsdC1yZXNvbHZlci1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7IHByZWNvbXBpbGUgfSBmcm9tICcuL2NvbXBpbGVyJztcbmltcG9ydCBBcHBsaWNhdGlvbiwge1xuICBBcHBsaWNhdGlvbkNvbnN0cnVjdG9yLFxuICBCeXRlY29kZUxvYWRlcixcbiAgRE9NQnVpbGRlcixcbiAgTG9hZGVyLFxuICBSdW50aW1lQ29tcGlsZXJMb2FkZXIsXG4gIFN5bmNSZW5kZXJlcixcbn0gZnJvbSAnQGdsaW1tZXIvYXBwbGljYXRpb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50TWFuYWdlciwgQ0FQQUJJTElUSUVTIH0gZnJvbSAnQGdsaW1tZXIvY29tcG9uZW50JztcbmltcG9ydCB7IGFzc2VydCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgQnVuZGxlQ29tcGlsZXIsIENvbXBpbGVyRGVsZWdhdGUgYXMgSUNvbXBpbGVyRGVsZWdhdGUgfSBmcm9tICdAZ2xpbW1lci9idW5kbGUtY29tcGlsZXInO1xuaW1wb3J0IHsgYnVpbGRBY3Rpb24sIG1haW5UZW1wbGF0ZSB9IGZyb20gJ0BnbGltbWVyL2FwcGxpY2F0aW9uJztcbmltcG9ydCB7IGNvbXBpbGFibGUgfSBmcm9tICdAZ2xpbW1lci9vcGNvZGUtY29tcGlsZXInO1xuaW1wb3J0IHsgTWV0YWRhdGEgfSBmcm9tICcuLi8uLi9hcHBsaWNhdGlvbi9zcmMvbG9hZGVycy9ieXRlY29kZS9sb2FkZXInO1xuaW1wb3J0IHsgU2ltcGxlRG9jdW1lbnQgfSBmcm9tICdAc2ltcGxlLWRvbS9pbnRlcmZhY2UnO1xuXG5pbXBvcnQgZGlkUmVuZGVyIGZyb20gJy4vZGlkLXJlbmRlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwQnVpbGRlck9wdGlvbnM8VD4ge1xuICBhcHBOYW1lPzogc3RyaW5nO1xuICBsb2FkZXI/OiBzdHJpbmc7XG4gIEFwcGxpY2F0aW9uQ2xhc3M/OiBBcHBsaWNhdGlvbkNvbnN0cnVjdG9yPFQ+O1xuICBDb21wb25lbnRNYW5hZ2VyPzogYW55OyAvLyBUT0RPIC0gdHlwaW5nXG4gIHJlc29sdmVyQ29uZmlndXJhdGlvbj86IFJlc29sdmVyQ29uZmlndXJhdGlvbjtcbiAgZG9jdW1lbnQ/OiBTaW1wbGVEb2N1bWVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRGYWN0b3J5IHt9XG5cbmV4cG9ydCBjbGFzcyBUZXN0QXBwbGljYXRpb24gZXh0ZW5kcyBBcHBsaWNhdGlvbiB7XG4gIHJvb3RFbGVtZW50OiBFbGVtZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwcEJ1aWxkZXJUZW1wbGF0ZU1ldGEge1xuICBzcGVjaWZpZXI6IHN0cmluZztcbn1cblxuZnVuY3Rpb24gbG9jYXRvckZvcihtb2R1bGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogVGVtcGxhdGVMb2NhdG9yPE1vZHVsZUxvY2F0b3I+IHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiAndGVtcGxhdGUnLFxuICAgIG1vZHVsZSxcbiAgICBuYW1lLFxuICAgIG1ldGE6IHtcbiAgICAgIG1vZHVsZSxcbiAgICAgIG5hbWUsXG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIEFwcEJ1aWxkZXI8VCBleHRlbmRzIFRlc3RBcHBsaWNhdGlvbj4ge1xuICByb290TmFtZTogc3RyaW5nO1xuICBtb2R1bGVzOiBEaWN0PHVua25vd24+ID0ge307XG4gIHRlbXBsYXRlczogRGljdDxzdHJpbmc+ID0ge307XG4gIG9wdGlvbnM6IEFwcEJ1aWxkZXJPcHRpb25zPFQ+O1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgb3B0aW9uczogQXBwQnVpbGRlck9wdGlvbnM8VD4pIHtcbiAgICB0aGlzLnJvb3ROYW1lID0gbmFtZTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMubW9kdWxlc1tcbiAgICAgIGBjb21wb25lbnQtbWFuYWdlcjovJHt0aGlzLnJvb3ROYW1lfS9jb21wb25lbnQtbWFuYWdlcnMvbWFpbmBcbiAgICBdID0gdGhpcy5vcHRpb25zLkNvbXBvbmVudE1hbmFnZXI7XG4gICAgdGhpcy50ZW1wbGF0ZSgnTWFpbicsICc8ZGl2IC8+Jyk7XG4gICAgdGhpcy5oZWxwZXIoJ2FjdGlvbicsIGJ1aWxkQWN0aW9uKTtcbiAgfVxuXG4gIHRlbXBsYXRlKG5hbWU6IHN0cmluZywgdGVtcGxhdGU6IHN0cmluZykge1xuICAgIGFzc2VydChcbiAgICAgIG5hbWUuY2hhckF0KDApID09PSBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpLFxuICAgICAgJ3RlbXBsYXRlIG5hbWVzIG11c3Qgc3RhcnQgd2l0aCBhIGNhcGl0YWwgbGV0dGVyJ1xuICAgICk7XG5cbiAgICBsZXQgc3BlY2lmaWVyID0gYHRlbXBsYXRlOi8ke3RoaXMucm9vdE5hbWV9L2NvbXBvbmVudHMvJHtuYW1lfWA7XG4gICAgdGhpcy5tb2R1bGVzW3NwZWNpZmllcl0gPSBwcmVjb21waWxlKHRlbXBsYXRlLCB7IG1ldGE6IHsgc3BlY2lmaWVyIH0gfSk7XG4gICAgdGhpcy50ZW1wbGF0ZXNbc3BlY2lmaWVyXSA9IHRlbXBsYXRlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29tcG9uZW50KG5hbWU6IHN0cmluZywgY29tcG9uZW50RmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeSkge1xuICAgIGxldCBzcGVjaWZpZXIgPSBgY29tcG9uZW50Oi8ke3RoaXMucm9vdE5hbWV9L2NvbXBvbmVudHMvJHtuYW1lfWA7XG4gICAgdGhpcy5tb2R1bGVzW3NwZWNpZmllcl0gPSBjb21wb25lbnRGYWN0b3J5O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaGVscGVyKG5hbWU6IHN0cmluZywgaGVscGVyRnVuYzogRnVuY3Rpb24pIHtcbiAgICBsZXQgc3BlY2lmaWVyID0gYGhlbHBlcjovJHt0aGlzLnJvb3ROYW1lfS9jb21wb25lbnRzLyR7bmFtZX1gO1xuICAgIHRoaXMubW9kdWxlc1tzcGVjaWZpZXJdID0gaGVscGVyRnVuYztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByb3RlY3RlZCBidWlsZFJlc29sdmVyKCk6IFJlc29sdmVyIHtcbiAgICBsZXQgcmVzb2x2ZXJDb25maWd1cmF0aW9uID0gdGhpcy5vcHRpb25zLnJlc29sdmVyQ29uZmlndXJhdGlvbiB8fCBkZWZhdWx0UmVzb2x2ZXJDb25maWd1cmF0aW9uO1xuICAgIHJlc29sdmVyQ29uZmlndXJhdGlvbi5hcHAgPSByZXNvbHZlckNvbmZpZ3VyYXRpb24uYXBwIHx8IHtcbiAgICAgIG5hbWU6IHRoaXMucm9vdE5hbWUsXG4gICAgICByb290TmFtZTogdGhpcy5yb290TmFtZSxcbiAgICB9O1xuXG4gICAgbGV0IHJlZ2lzdHJ5ID0gbmV3IEJhc2ljTW9kdWxlUmVnaXN0cnkodGhpcy5tb2R1bGVzKTtcbiAgICByZXR1cm4gbmV3IFJlc29sdmVyKHJlc29sdmVyQ29uZmlndXJhdGlvbiwgcmVnaXN0cnkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGJ1aWxkUnVudGltZUNvbXBpbGVyTG9hZGVyKHJlc29sdmVyOiBSZXNvbHZlcik6IExvYWRlciB7XG4gICAgcmV0dXJuIG5ldyBSdW50aW1lQ29tcGlsZXJMb2FkZXIocmVzb2x2ZXIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGJ1aWxkQnl0ZWNvZGVMb2FkZXIocmVzb2x2ZXI6IFJlc29sdmVyKSB7XG4gICAgbGV0IGRlbGVnYXRlID0gbmV3IENvbXBpbGVyRGVsZWdhdGUocmVzb2x2ZXIpO1xuICAgIGxldCBjb21waWxlciA9IG5ldyBCdW5kbGVDb21waWxlcihkZWxlZ2F0ZSk7XG5cbiAgICBsZXQgbWFpbkxvY2F0b3IgPSBsb2NhdG9yRm9yKCd0ZW1wbGF0ZTptYWluVGVtcGxhdGUnLCAnZGVmYXVsdCcpO1xuICAgIG1haW5Mb2NhdG9yLm1ldGEubW9kdWxlID0gJ3RlbXBsYXRlOm1haW5UZW1wbGF0ZSc7XG5cbiAgICBsZXQgYmxvY2sgPSBKU09OLnBhcnNlKG1haW5UZW1wbGF0ZS5ibG9jayk7XG4gICAgbGV0IGNvbXBpbGFibGVUZW1wbGF0ZSA9IGNvbXBpbGFibGUoe1xuICAgICAgYmxvY2ssXG4gICAgICByZWZlcnJlcjogbWFpbkxvY2F0b3IubWV0YSxcbiAgICB9KTtcblxuICAgIGNvbXBpbGVyLmFkZENvbXBpbGFibGVUZW1wbGF0ZShtYWluTG9jYXRvciwgY29tcGlsYWJsZVRlbXBsYXRlKTtcblxuICAgIGZvciAobGV0IG1vZHVsZSBpbiB0aGlzLnRlbXBsYXRlcykge1xuICAgICAgY29tcGlsZXIuYWRkVGVtcGxhdGVTb3VyY2UobG9jYXRvckZvcihtb2R1bGUsICdkZWZhdWx0JyksIHRoaXMudGVtcGxhdGVzW21vZHVsZV0pO1xuICAgIH1cblxuICAgIGxldCB7IGhlYXAsIHBvb2wsIHRhYmxlIH0gPSBjb21waWxlci5jb21waWxlKCk7XG5cbiAgICBsZXQgcmVzb2x2ZXJUYWJsZTogdW5rbm93bltdID0gW107XG5cbiAgICBsZXQgbWV0YTogRGljdDxNZXRhZGF0YT4gPSB7fTtcblxuICAgIHRhYmxlLnZtSGFuZGxlQnlNb2R1bGVMb2NhdG9yLmZvckVhY2goKHZtSGFuZGxlLCBsb2NhdG9yKSA9PiB7XG4gICAgICBsZXQgaGFuZGxlID0gdGFibGUuYnlNb2R1bGVMb2NhdG9yLmdldChsb2NhdG9yKTtcbiAgICAgIGxldCB0ZW1wbGF0ZSA9IGNvbXBpbGVyLmdldFRlbXBsYXRlKGxvY2F0b3IpO1xuXG4gICAgICBtZXRhW2xvY2F0b3IubW9kdWxlXSA9IHtcbiAgICAgICAgdjogdm1IYW5kbGUsXG4gICAgICAgIGg6IGhhbmRsZSxcbiAgICAgICAgdGFibGU6IHRlbXBsYXRlLnN5bWJvbFRhYmxlLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRhYmxlLmJ5SGFuZGxlLmZvckVhY2goKGxvY2F0b3IsIGhhbmRsZSkgPT4ge1xuICAgICAgbGV0IG1vZHVsZSA9IGxvY2F0b3IubW9kdWxlLnJlcGxhY2UoJ3RlbXBsYXRlOi8nLCAnY29tcG9uZW50Oi8nKTtcbiAgICAgIGlmICh0aGlzLm1vZHVsZXNbbW9kdWxlXSkge1xuICAgICAgICBpZiAobW9kdWxlLmluZGV4T2YoJ2hlbHBlcjonKSA9PT0gMCkge1xuICAgICAgICAgIHJlc29sdmVyVGFibGVbaGFuZGxlXSA9IFsxLCB0aGlzLm1vZHVsZXNbbW9kdWxlXV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZXJUYWJsZVtoYW5kbGVdID0gdGhpcy5tb2R1bGVzW21vZHVsZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxldCBieXRlY29kZSA9IGhlYXAuYnVmZmVyO1xuICAgIGxldCBkYXRhID0ge1xuICAgICAgcHJlZml4OiAnJyxcbiAgICAgIG1haW5FbnRyeTogdGFibGUudm1IYW5kbGVCeU1vZHVsZUxvY2F0b3IuZ2V0KG1haW5Mb2NhdG9yKSxcbiAgICAgIHBvb2wsXG4gICAgICB0YWJsZTogcmVzb2x2ZXJUYWJsZSxcbiAgICAgIG1ldGEsXG4gICAgICBoZWFwOiB7XG4gICAgICAgIHRhYmxlOiBoZWFwLnRhYmxlLFxuICAgICAgICBoYW5kbGU6IGhlYXAuaGFuZGxlLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBCeXRlY29kZUxvYWRlcih7IGJ5dGVjb2RlLCBkYXRhIH0pO1xuICB9XG5cbiAgYXN5bmMgYm9vdCgpOiBQcm9taXNlPFQ+IHtcbiAgICBsZXQgcmVzb2x2ZXIgPSB0aGlzLmJ1aWxkUmVzb2x2ZXIoKTtcbiAgICBsZXQgbG9hZGVyOiBMb2FkZXI7XG5cbiAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy5sb2FkZXIpIHtcbiAgICAgIGNhc2UgJ3J1bnRpbWUtY29tcGlsZXInOlxuICAgICAgICBsb2FkZXIgPSB0aGlzLmJ1aWxkUnVudGltZUNvbXBpbGVyTG9hZGVyKHJlc29sdmVyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdieXRlY29kZSc6XG4gICAgICAgIGxvYWRlciA9IHRoaXMuYnVpbGRCeXRlY29kZUxvYWRlcihyZXNvbHZlcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgbG9hZGVyICR7dGhpcy5vcHRpb25zLmxvYWRlcn1gKTtcbiAgICB9XG5cbiAgICBsZXQgZG9jOiBEb2N1bWVudCA9ICh0aGlzLm9wdGlvbnMuZG9jdW1lbnQgYXMgRG9jdW1lbnQpIHx8IGRvY3VtZW50O1xuICAgIGxldCBlbGVtZW50ID0gZG9jLmJvZHk7XG4gICAgbGV0IGJ1aWxkZXIgPSBuZXcgRE9NQnVpbGRlcih7IGVsZW1lbnQgfSk7XG4gICAgbGV0IHJlbmRlcmVyID0gbmV3IFN5bmNSZW5kZXJlcigpO1xuXG4gICAgbGV0IGFwcCA9IG5ldyB0aGlzLm9wdGlvbnMuQXBwbGljYXRpb25DbGFzcyh7XG4gICAgICByZXNvbHZlcixcbiAgICAgIGJ1aWxkZXIsXG4gICAgICBsb2FkZXIsXG4gICAgICByZW5kZXJlcixcbiAgICAgIHJvb3ROYW1lOiB0aGlzLnJvb3ROYW1lLFxuICAgICAgZG9jdW1lbnQ6IHRoaXMub3B0aW9ucy5kb2N1bWVudCxcbiAgICB9KTtcblxuICAgIGxldCByb290RWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBhcHAucm9vdEVsZW1lbnQgPSByb290RWxlbWVudDtcbiAgICBhcHAucmVuZGVyQ29tcG9uZW50KCdNYWluJywgcm9vdEVsZW1lbnQpO1xuICAgIGFwcC5ib290KCk7XG5cbiAgICBhd2FpdCBkaWRSZW5kZXIoYXBwKTtcblxuICAgIHJldHVybiBhcHA7XG4gIH1cbn1cblxuY2xhc3MgQ29tcGlsZXJEZWxlZ2F0ZSBpbXBsZW1lbnRzIElDb21waWxlckRlbGVnYXRlPE1vZHVsZUxvY2F0b3I+IHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlc29sdmVyOiBSZXNvbHZlcikge31cblxuICBoYXNDb21wb25lbnRJblNjb3BlKG5hbWU6IHN0cmluZywgcmVmZXJyZXI6IE1vZHVsZUxvY2F0b3IpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnJlc29sdmVyLmlkZW50aWZ5KGB0ZW1wbGF0ZToke25hbWV9YCwgcmVmZXJyZXIubW9kdWxlKTtcbiAgfVxuXG4gIHJlc29sdmVDb21wb25lbnQobmFtZTogc3RyaW5nLCByZWZlcnJlcjogTW9kdWxlTG9jYXRvcik6IE1vZHVsZUxvY2F0b3Ige1xuICAgIGxldCByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZXIuaWRlbnRpZnkoYHRlbXBsYXRlOiR7bmFtZX1gLCByZWZlcnJlci5tb2R1bGUpO1xuICAgIHJldHVybiB7IG1vZHVsZTogcmVzb2x2ZWQsIG5hbWU6ICdkZWZhdWx0JyB9O1xuICB9XG5cbiAgZ2V0Q29tcG9uZW50Q2FwYWJpbGl0aWVzKCkge1xuICAgIHJldHVybiBDQVBBQklMSVRJRVM7XG4gIH1cblxuICBoYXNIZWxwZXJJblNjb3BlKGhlbHBlck5hbWU6IHN0cmluZywgcmVmZXJyZXI6IE1vZHVsZUxvY2F0b3IpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnJlc29sdmVyLmlkZW50aWZ5KGBoZWxwZXI6JHtoZWxwZXJOYW1lfWAsIHJlZmVycmVyLm1vZHVsZSk7XG4gIH1cblxuICByZXNvbHZlSGVscGVyKGhlbHBlck5hbWU6IHN0cmluZywgcmVmZXJyZXI6IE1vZHVsZUxvY2F0b3IpOiBNb2R1bGVMb2NhdG9yIHtcbiAgICBsZXQgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVyLmlkZW50aWZ5KGBoZWxwZXI6JHtoZWxwZXJOYW1lfWAsIHJlZmVycmVyLm1vZHVsZSk7XG4gICAgcmV0dXJuIHsgbW9kdWxlOiByZXNvbHZlZCwgbmFtZTogJ2RlZmF1bHQnIH07XG4gIH1cblxuICBoYXNQYXJ0aWFsSW5TY29wZShwYXJ0aWFsTmFtZTogc3RyaW5nLCByZWZlcnJlcjogTW9kdWxlTG9jYXRvcik6IGJvb2xlYW4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIHJlc29sdmVQYXJ0aWFsKHBhcnRpYWxOYW1lOiBzdHJpbmcsIHJlZmVycmVyOiBNb2R1bGVMb2NhdG9yKTogTW9kdWxlTG9jYXRvciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgaGFzTW9kaWZpZXJJblNjb3BlKG1vZGlmaWVyTmFtZTogc3RyaW5nLCByZWZlcnJlcjogTW9kdWxlTG9jYXRvcik6IGJvb2xlYW4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIHJlc29sdmVNb2RpZmllcihtb2RpZmllck5hbWU6IHN0cmluZywgcmVmZXJyZXI6IE1vZHVsZUxvY2F0b3IpOiBNb2R1bGVMb2NhdG9yIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYnVpbGRBcHA8VCBleHRlbmRzIFRlc3RBcHBsaWNhdGlvbj4ob3B0aW9uczogQXBwQnVpbGRlck9wdGlvbnM8VD4gPSB7fSk6IEFwcEJ1aWxkZXI8VD4ge1xuICBvcHRpb25zLmFwcE5hbWUgPSBvcHRpb25zLmFwcE5hbWUgfHwgJ3Rlc3QtYXBwJztcbiAgb3B0aW9ucy5sb2FkZXIgPSBvcHRpb25zLmxvYWRlciB8fCAncnVudGltZS1jb21waWxlcic7XG4gIG9wdGlvbnMuQ29tcG9uZW50TWFuYWdlciA9IG9wdGlvbnMuQ29tcG9uZW50TWFuYWdlciB8fCBDb21wb25lbnRNYW5hZ2VyO1xuICBvcHRpb25zLkFwcGxpY2F0aW9uQ2xhc3MgPVxuICAgIG9wdGlvbnMuQXBwbGljYXRpb25DbGFzcyB8fCAoVGVzdEFwcGxpY2F0aW9uIGFzIEFwcGxpY2F0aW9uQ29uc3RydWN0b3I8VD4pO1xuXG4gIHJldHVybiBuZXcgQXBwQnVpbGRlcihvcHRpb25zLmFwcE5hbWUsIG9wdGlvbnMpO1xufVxuXG5leHBvcnQgeyBidWlsZEFwcCB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ== | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2FwcGxpY2F0aW9uLXRlc3QtaGVscGVycy9zcmMvYXBwLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLE9BQU8sUUFBUCxJQUFtQixtQkFBbkIsUUFBcUUsbUJBQXJFO0FBRUEsT0FBTyw0QkFBUCxNQUF5QyxrQ0FBekM7QUFDQSxTQUFTLFVBQVQsUUFBMkIsWUFBM0I7QUFDQSxPQUFPLFdBQVAsSUFFRSxjQUZGLEVBR0UsVUFIRixFQUtFLHFCQUxGLEVBTUUsWUFORixRQVFPLHNCQVJQO0FBU0EsU0FBUyxnQkFBVCxFQUEyQixZQUEzQixRQUErQyxvQkFBL0M7QUFDQSxTQUFTLE1BQVQsUUFBdUIsZUFBdkI7QUFDQSxTQUFTLGNBQVQsUUFBc0UsMEJBQXRFO0FBQ0EsU0FBUyxXQUFULEVBQXNCLFlBQXRCLFFBQTBDLHNCQUExQztBQUNBLFNBQVMsVUFBVCxRQUEyQiwwQkFBM0I7QUFHQSxTQUFTLGNBQVQsUUFBK0IsY0FBL0I7QUFFQSxPQUFPLFNBQVAsTUFBc0IsY0FBdEI7QUFhQSxXQUFhLGVBQWI7QUFBQTs7QUFBQTtBQUFBOztBQUFBO0FBQUE7O0FBQUE7QUFBQSxFQUFxQyxXQUFyQztBQVlBLFNBQVMsVUFBVCxDQUFvQixNQUFwQixFQUFvQyxJQUFwQyxFQUFnRDtBQUM5QyxXQUFPO0FBQ0wsY0FBTSxVQUREO0FBRUwsc0JBRks7QUFHTCxrQkFISztBQUlMLGNBQU07QUFDSiwwQkFESTtBQUVKO0FBRkk7QUFKRCxLQUFQO0FBU0Q7O0lBRVksVTtBQU1YLHdCQUFZLElBQVosRUFBMEIsT0FBMUIsRUFBdUQ7QUFBQTs7QUFKdkQsYUFBQSxPQUFBLEdBQXlCLEVBQXpCO0FBQ0EsYUFBQSxTQUFBLEdBQTBCLEVBQTFCO0FBSUUsYUFBSyxRQUFMLEdBQWdCLElBQWhCO0FBQ0EsYUFBSyxPQUFMLEdBQWUsT0FBZjtBQUNBLGFBQUssT0FBTCx5QkFDd0IsS0FB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QjtBQUM1RCxjQUFNLElBQUksS0FBSixDQUFVLHlCQUFWLENBQU47QUFDRCxLOzsrQkFFRCxjLDJCQUFlLFcsRUFBcUIsUSxFQUF1QjtBQUN6RCxjQUFNLElBQUksS0FBSixDQUFVLHlCQUFWLENBQU47QUFDRCxLOzsrQkFFRCxrQiwrQkFBbUIsWSxFQUFzQixRLEVBQXVCO0FBQzlELGNBQU0sSUFBSSxLQUFKLENBQVUseUJBQVYsQ0FBTjtBQUNELEs7OytCQUVELGUsNEJBQWdCLFksRUFBc0IsUSxFQUF1QjtBQUMzRCxjQUFNLElBQUksS0FBSixDQUFVLHlCQUFWLENBQU47QUFDRCxLOzs7OztBQUdILFNBQVMsUUFBVCxHQUErRTtBQUFBLFFBQWxDLE9BQWtDLHVFQUFGLEVBQUU7O0FBQzdFLFlBQVEsT0FBUixHQUFrQixRQUFRLE9BQVIsSUFBbUIsVUFBckM7QUFDQSxZQUFRLE1BQVIsR0FBaUIsUUFBUSxNQUFSLElBQWtCLGtCQUFuQztBQUNBLFlBQVEsZ0JBQVIsR0FBMkIsUUFBUSxnQkFBUixJQUE0QixnQkFBdkQ7QUFDQSxZQUFRLGdCQUFSLEdBQ0UsUUFBUSxnQkFBUixJQUE2QixlQUQvQjtBQUdBLFdBQU8sSUFBSSxVQUFKLENBQWUsUUFBUSxPQUF2QixFQUFnQyxPQUFoQyxDQUFQO0FBQ0Q7QUFFRCxTQUFTLFFBQVQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVzb2x2ZXIsIHsgQmFzaWNNb2R1bGVSZWdpc3RyeSwgUmVzb2x2ZXJDb25maWd1cmF0aW9uIH0gZnJvbSAnQGdsaW1tZXIvcmVzb2x2ZXInO1xuaW1wb3J0IHsgRGljdCwgTW9kdWxlTG9jYXRvciwgVGVtcGxhdGVMb2NhdG9yIH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgZGVmYXVsdFJlc29sdmVyQ29uZmlndXJhdGlvbiBmcm9tICcuL2RlZmF1bHQtcmVzb2x2ZXItY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBwcmVjb21waWxlIH0gZnJvbSAnLi9jb21waWxlcic7XG5pbXBvcnQgQXBwbGljYXRpb24sIHtcbiAgQXBwbGljYXRpb25Db25zdHJ1Y3RvcixcbiAgQnl0ZWNvZGVMb2FkZXIsXG4gIERPTUJ1aWxkZXIsXG4gIExvYWRlcixcbiAgUnVudGltZUNvbXBpbGVyTG9hZGVyLFxuICBTeW5jUmVuZGVyZXIsXG4gIE1vZHVsZVR5cGVzXG59IGZyb20gJ0BnbGltbWVyL2FwcGxpY2F0aW9uJztcbmltcG9ydCB7IENvbXBvbmVudE1hbmFnZXIsIENBUEFCSUxJVElFUyB9IGZyb20gJ0BnbGltbWVyL2NvbXBvbmVudCc7XG5pbXBvcnQgeyBhc3NlcnQgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IEJ1bmRsZUNvbXBpbGVyLCBDb21waWxlckRlbGVnYXRlIGFzIElDb21waWxlckRlbGVnYXRlIH0gZnJvbSAnQGdsaW1tZXIvYnVuZGxlLWNvbXBpbGVyJztcbmltcG9ydCB7IGJ1aWxkQWN0aW9uLCBtYWluVGVtcGxhdGUgfSBmcm9tICdAZ2xpbW1lci9hcHBsaWNhdGlvbic7XG5pbXBvcnQgeyBjb21waWxhYmxlIH0gZnJvbSAnQGdsaW1tZXIvb3Bjb2RlLWNvbXBpbGVyJztcbmltcG9ydCB7IE1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vYXBwbGljYXRpb24vc3JjL2xvYWRlcnMvYnl0ZWNvZGUvbG9hZGVyJztcbmltcG9ydCB7IFNpbXBsZURvY3VtZW50IH0gZnJvbSAnQHNpbXBsZS1kb20vaW50ZXJmYWNlJztcbmltcG9ydCB7IFNTUkFwcGxpY2F0aW9uIH0gZnJvbSAnQGdsaW1tZXIvc3NyJztcblxuaW1wb3J0IGRpZFJlbmRlciBmcm9tICcuL2RpZC1yZW5kZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwcEJ1aWxkZXJPcHRpb25zPFQ+IHtcbiAgYXBwTmFtZT86IHN0cmluZztcbiAgbG9hZGVyPzogc3RyaW5nO1xuICBBcHBsaWNhdGlvbkNsYXNzPzogQXBwbGljYXRpb25Db25zdHJ1Y3RvcjxUPjtcbiAgQ29tcG9uZW50TWFuYWdlcj86IGFueTsgLy8gVE9ETyAtIHR5cGluZ1xuICByZXNvbHZlckNvbmZpZ3VyYXRpb24/OiBSZXNvbHZlckNvbmZpZ3VyYXRpb247XG4gIGRvY3VtZW50PzogU2ltcGxlRG9jdW1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RmFjdG9yeSB7fVxuXG5leHBvcnQgY2xhc3MgVGVzdEFwcGxpY2F0aW9uIGV4dGVuZHMgQXBwbGljYXRpb24ge1xuICByb290RWxlbWVudDogRWxlbWVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBCdWlsZGVyVGVtcGxhdGVNZXRhIHtcbiAgc3BlY2lmaWVyOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBIZWxwZXJGdW5jdGlvbiBleHRlbmRzIEZ1bmN0aW9uIHtcbiAgaXNGYWN0b3J5PzogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gbG9jYXRvckZvcihtb2R1bGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogVGVtcGxhdGVMb2NhdG9yPE1vZHVsZUxvY2F0b3I+IHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiAndGVtcGxhdGUnLFxuICAgIG1vZHVsZSxcbiAgICBuYW1lLFxuICAgIG1ldGE6IHtcbiAgICAgIG1vZHVsZSxcbiAgICAgIG5hbWUsXG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIEFwcEJ1aWxkZXI8VCBleHRlbmRzIFRlc3RBcHBsaWNhdGlvbj4ge1xuICByb290TmFtZTogc3RyaW5nO1xuICBtb2R1bGVzOiBEaWN0PHVua25vd24+ID0ge307XG4gIHRlbXBsYXRlczogRGljdDxzdHJpbmc+ID0ge307XG4gIG9wdGlvbnM6IEFwcEJ1aWxkZXJPcHRpb25zPFQ+O1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgb3B0aW9uczogQXBwQnVpbGRlck9wdGlvbnM8VD4pIHtcbiAgICB0aGlzLnJvb3ROYW1lID0gbmFtZTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMubW9kdWxlc1tcbiAgICAgIGBjb21wb25lbnQtbWFuYWdlcjovJHt0aGlzLnJvb3ROYW1lfS9jb21wb25lbnQtbWFuYWdlcnMvbWFpbmBcbiAgICBdID0gdGhpcy5vcHRpb25zLkNvbXBvbmVudE1hbmFnZXI7XG4gICAgdGhpcy50ZW1wbGF0ZSgnTWFpbicsICc8ZGl2IC8+Jyk7XG4gICAgdGhpcy5oZWxwZXIoJ2FjdGlvbicsIGJ1aWxkQWN0aW9uLCB0cnVlKTtcbiAgfVxuXG4gIHRlbXBsYXRlKG5hbWU6IHN0cmluZywgdGVtcGxhdGU6IHN0cmluZykge1xuICAgIGFzc2VydChcbiAgICAgIG5hbWUuY2hhckF0KDApID09PSBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpLFxuICAgICAgJ3RlbXBsYXRlIG5hbWVzIG11c3Qgc3RhcnQgd2l0aCBhIGNhcGl0YWwgbGV0dGVyJ1xuICAgICk7XG5cbiAgICBsZXQgc3BlY2lmaWVyID0gYHRlbXBsYXRlOi8ke3RoaXMucm9vdE5hbWV9L2NvbXBvbmVudHMvJHtuYW1lfWA7XG4gICAgdGhpcy5tb2R1bGVzW3NwZWNpZmllcl0gPSBwcmVjb21waWxlKHRlbXBsYXRlLCB7IG1ldGE6IHsgc3BlY2lmaWVyIH0gfSk7XG4gICAgdGhpcy50ZW1wbGF0ZXNbc3BlY2lmaWVyXSA9IHRlbXBsYXRlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29tcG9uZW50KG5hbWU6IHN0cmluZywgY29tcG9uZW50RmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeSkge1xuICAgIGxldCBzcGVjaWZpZXIgPSBgY29tcG9uZW50Oi8ke3RoaXMucm9vdE5hbWV9L2NvbXBvbmVudHMvJHtuYW1lfWA7XG4gICAgdGhpcy5tb2R1bGVzW3NwZWNpZmllcl0gPSBjb21wb25lbnRGYWN0b3J5O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaGVscGVyKG5hbWU6IHN0cmluZywgaGVscGVyRnVuYzogSGVscGVyRnVuY3Rpb24sIGlzRmFjdG9yeSA9IGZhbHNlKSB7XG4gICAgbGV0IHNwZWNpZmllciA9IGBoZWxwZXI6LyR7dGhpcy5yb290TmFtZX0vY29tcG9uZW50cy8ke25hbWV9YDtcbiAgICBoZWxwZXJGdW5jLmlzRmFjdG9yeSA9IGlzRmFjdG9yeTtcbiAgICB0aGlzLm1vZHVsZXNbc3BlY2lmaWVyXSA9IGhlbHBlckZ1bmM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRSZXNvbHZlcigpOiBSZXNvbHZlciB7XG4gICAgbGV0IHJlc29sdmVyQ29uZmlndXJhdGlvbiA9IHRoaXMub3B0aW9ucy5yZXNvbHZlckNvbmZpZ3VyYXRpb24gfHwgZGVmYXVsdFJlc29sdmVyQ29uZmlndXJhdGlvbjtcbiAgICByZXNvbHZlckNvbmZpZ3VyYXRpb24uYXBwID0gcmVzb2x2ZXJDb25maWd1cmF0aW9uLmFwcCB8fCB7XG4gICAgICBuYW1lOiB0aGlzLnJvb3ROYW1lLFxuICAgICAgcm9vdE5hbWU6IHRoaXMucm9vdE5hbWUsXG4gICAgfTtcblxuICAgIGxldCByZWdpc3RyeSA9IG5ldyBCYXNpY01vZHVsZVJlZ2lzdHJ5KHRoaXMubW9kdWxlcyk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlcihyZXNvbHZlckNvbmZpZ3VyYXRpb24sIHJlZ2lzdHJ5KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBidWlsZFJ1bnRpbWVDb21waWxlckxvYWRlcigpOiBMb2FkZXIge1xuICAgIHJldHVybiBuZXcgUnVudGltZUNvbXBpbGVyTG9hZGVyKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRCeXRlY29kZUxvYWRlcihyZXNvbHZlcjogUmVzb2x2ZXIpIHtcbiAgICBsZXQgZGVsZWdhdGUgPSBuZXcgQ29tcGlsZXJEZWxlZ2F0ZShyZXNvbHZlcik7XG4gICAgbGV0IGNvbXBpbGVyID0gbmV3IEJ1bmRsZUNvbXBpbGVyKGRlbGVnYXRlKTtcblxuICAgIGxldCBtYWluTG9jYXRvciA9IGxvY2F0b3JGb3IoJ3RlbXBsYXRlOm1haW5UZW1wbGF0ZScsICdkZWZhdWx0Jyk7XG4gICAgbWFpbkxvY2F0b3IubWV0YS5tb2R1bGUgPSAndGVtcGxhdGU6bWFpblRlbXBsYXRlJztcblxuICAgIGxldCBibG9jayA9IEpTT04ucGFyc2UobWFpblRlbXBsYXRlLmJsb2NrKTtcbiAgICBsZXQgY29tcGlsYWJsZVRlbXBsYXRlID0gY29tcGlsYWJsZSh7XG4gICAgICBibG9jayxcbiAgICAgIHJlZmVycmVyOiBtYWluTG9jYXRvci5tZXRhLFxuICAgIH0pO1xuXG4gICAgY29tcGlsZXIuYWRkQ29tcGlsYWJsZVRlbXBsYXRlKG1haW5Mb2NhdG9yLCBjb21waWxhYmxlVGVtcGxhdGUpO1xuXG4gICAgZm9yIChsZXQgbW9kdWxlIGluIHRoaXMudGVtcGxhdGVzKSB7XG4gICAgICBjb21waWxlci5hZGRUZW1wbGF0ZVNvdXJjZShsb2NhdG9yRm9yKG1vZHVsZSwgJ2RlZmF1bHQnKSwgdGhpcy50ZW1wbGF0ZXNbbW9kdWxlXSk7XG4gICAgfVxuXG4gICAgbGV0IHsgaGVhcCwgcG9vbCwgdGFibGUgfSA9IGNvbXBpbGVyLmNvbXBpbGUoKTtcblxuICAgIGxldCByZXNvbHZlclRhYmxlOiB1bmtub3duW10gPSBbXTtcblxuICAgIGxldCBtZXRhOiBEaWN0PE1ldGFkYXRhPiA9IHt9O1xuXG4gICAgdGFibGUudm1IYW5kbGVCeU1vZHVsZUxvY2F0b3IuZm9yRWFjaCgodm1IYW5kbGUsIGxvY2F0b3IpID0+IHtcbiAgICAgIGxldCBoYW5kbGUgPSB0YWJsZS5ieU1vZHVsZUxvY2F0b3IuZ2V0KGxvY2F0b3IpO1xuICAgICAgbGV0IHRlbXBsYXRlID0gY29tcGlsZXIuZ2V0VGVtcGxhdGUobG9jYXRvcik7XG5cbiAgICAgIG1ldGFbbG9jYXRvci5tb2R1bGVdID0ge1xuICAgICAgICB2OiB2bUhhbmRsZSxcbiAgICAgICAgaDogaGFuZGxlLFxuICAgICAgICB0YWJsZTogdGVtcGxhdGUuc3ltYm9sVGFibGUsXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGFibGUuYnlIYW5kbGUuZm9yRWFjaCgobG9jYXRvciwgaGFuZGxlKSA9PiB7XG4gICAgICBsZXQgbW9kdWxlID0gbG9jYXRvci5tb2R1bGUucmVwbGFjZSgndGVtcGxhdGU6LycsICdjb21wb25lbnQ6LycpO1xuICAgICAgaWYgKHRoaXMubW9kdWxlc1ttb2R1bGVdKSB7XG4gICAgICAgIGlmIChtb2R1bGUuaW5kZXhPZignaGVscGVyOicpID09PSAwKSB7XG4gICAgICAgICAgY29uc3QgbW9kdWxlVHlwZSA9ICh0aGlzLm1vZHVsZXNbbW9kdWxlXSBhcyBIZWxwZXJGdW5jdGlvbikuaXNGYWN0b3J5ID8gTW9kdWxlVHlwZXMuSEVMUEVSX0ZBQ1RPUlkgOiBNb2R1bGVUeXBlcy5IRUxQRVI7XG4gICAgICAgICAgcmVzb2x2ZXJUYWJsZVtoYW5kbGVdID0gW21vZHVsZVR5cGUsIHRoaXMubW9kdWxlc1ttb2R1bGVdXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlclRhYmxlW2hhbmRsZV0gPSB0aGlzLm1vZHVsZXNbbW9kdWxlXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbGV0IGJ5dGVjb2RlID0gaGVhcC5idWZmZXI7XG4gICAgbGV0IGRhdGEgPSB7XG4gICAgICBwcmVmaXg6ICcnLFxuICAgICAgbWFpbkVudHJ5OiB0YWJsZS52bUhhbmRsZUJ5TW9kdWxlTG9jYXRvci5nZXQobWFpbkxvY2F0b3IpLFxuICAgICAgcG9vbCxcbiAgICAgIHRhYmxlOiByZXNvbHZlclRhYmxlLFxuICAgICAgbWV0YSxcbiAgICAgIGhlYXA6IHtcbiAgICAgICAgdGFibGU6IGhlYXAudGFibGUsXG4gICAgICAgIGhhbmRsZTogaGVhcC5oYW5kbGUsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IEJ5dGVjb2RlTG9hZGVyKHsgYnl0ZWNvZGUsIGRhdGEgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRMb2FkZXIocmVzb2x2ZXIpOiBMb2FkZXIge1xuICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLmxvYWRlcikge1xuICAgICAgY2FzZSAncnVudGltZS1jb21waWxlcic6XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkUnVudGltZUNvbXBpbGVyTG9hZGVyKCk7XG4gICAgICBjYXNlICdieXRlY29kZSc6XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkQnl0ZWNvZGVMb2FkZXIocmVzb2x2ZXIpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgbG9hZGVyICR7dGhpcy5vcHRpb25zLmxvYWRlcn1gKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXJUb1N0cmluZyhjb21wb25lbnROYW1lOiBzdHJpbmcsIGRhdGE6IERpY3Q8dW5rbm93bj4pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHJlc29sdmVyID0gdGhpcy5idWlsZFJlc29sdmVyKCk7XG4gICAgbGV0IGxvYWRlciA9IHRoaXMuYnVpbGRMb2FkZXIocmVzb2x2ZXIpO1xuXG4gICAgcmV0dXJuIFNTUkFwcGxpY2F0aW9uLnJlbmRlclRvU3RyaW5nKGNvbXBvbmVudE5hbWUsIGRhdGEsIHtcbiAgICAgIHJvb3ROYW1lOiB0aGlzLnJvb3ROYW1lLFxuICAgICAgcmVzb2x2ZXIsXG4gICAgICBsb2FkZXIsXG4gICAgICByZW5kZXJlcjogbmV3IFN5bmNSZW5kZXJlcigpXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBib290KCk6IFByb21pc2U8VD4ge1xuICAgIGxldCByZXNvbHZlciA9IHRoaXMuYnVpbGRSZXNvbHZlcigpO1xuICAgIGxldCBsb2FkZXI6IExvYWRlciA9IHRoaXMuYnVpbGRMb2FkZXIocmVzb2x2ZXIpO1xuXG4gICAgbGV0IGRvYzogRG9jdW1lbnQgPSAodGhpcy5vcHRpb25zLmRvY3VtZW50IGFzIERvY3VtZW50KSB8fCBkb2N1bWVudDtcbiAgICBsZXQgZWxlbWVudCA9IGRvYy5ib2R5O1xuICAgIGxldCBidWlsZGVyID0gbmV3IERPTUJ1aWxkZXIoeyBlbGVtZW50IH0pO1xuICAgIGxldCByZW5kZXJlciA9IG5ldyBTeW5jUmVuZGVyZXIoKTtcblxuICAgIGxldCBhcHAgPSBuZXcgdGhpcy5vcHRpb25zLkFwcGxpY2F0aW9uQ2xhc3Moe1xuICAgICAgcmVzb2x2ZXIsXG4gICAgICBidWlsZGVyLFxuICAgICAgbG9hZGVyLFxuICAgICAgcmVuZGVyZXIsXG4gICAgICByb290TmFtZTogdGhpcy5yb290TmFtZSxcbiAgICAgIGRvY3VtZW50OiB0aGlzLm9wdGlvbnMuZG9jdW1lbnQsXG4gICAgfSk7XG5cbiAgICBsZXQgcm9vdEVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgYXBwLnJvb3RFbGVtZW50ID0gcm9vdEVsZW1lbnQ7XG4gICAgYXBwLnJlbmRlckNvbXBvbmVudCgnTWFpbicsIHJvb3RFbGVtZW50KTtcbiAgICBhcHAuYm9vdCgpO1xuXG4gICAgYXdhaXQgZGlkUmVuZGVyKGFwcCk7XG5cbiAgICByZXR1cm4gYXBwO1xuICB9XG59XG5cbmNsYXNzIENvbXBpbGVyRGVsZWdhdGUgaW1wbGVtZW50cyBJQ29tcGlsZXJEZWxlZ2F0ZTxNb2R1bGVMb2NhdG9yPiB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZXNvbHZlcjogUmVzb2x2ZXIpIHt9XG5cbiAgaGFzQ29tcG9uZW50SW5TY29wZShuYW1lOiBzdHJpbmcsIHJlZmVycmVyOiBNb2R1bGVMb2NhdG9yKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5yZXNvbHZlci5pZGVudGlmeShgdGVtcGxhdGU6JHtuYW1lfWAsIHJlZmVycmVyLm1vZHVsZSk7XG4gIH1cblxuICByZXNvbHZlQ29tcG9uZW50KG5hbWU6IHN0cmluZywgcmVmZXJyZXI6IE1vZHVsZUxvY2F0b3IpOiBNb2R1bGVMb2NhdG9yIHtcbiAgICBsZXQgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVyLmlkZW50aWZ5KGB0ZW1wbGF0ZToke25hbWV9YCwgcmVmZXJyZXIubW9kdWxlKTtcbiAgICByZXR1cm4geyBtb2R1bGU6IHJlc29sdmVkLCBuYW1lOiAnZGVmYXVsdCcgfTtcbiAgfVxuXG4gIGdldENvbXBvbmVudENhcGFiaWxpdGllcygpIHtcbiAgICByZXR1cm4gQ0FQQUJJTElUSUVTO1xuICB9XG5cbiAgaGFzSGVscGVySW5TY29wZShoZWxwZXJOYW1lOiBzdHJpbmcsIHJlZmVycmVyOiBNb2R1bGVMb2NhdG9yKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5yZXNvbHZlci5pZGVudGlmeShgaGVscGVyOiR7aGVscGVyTmFtZX1gLCByZWZlcnJlci5tb2R1bGUpO1xuICB9XG5cbiAgcmVzb2x2ZUhlbHBlcihoZWxwZXJOYW1lOiBzdHJpbmcsIHJlZmVycmVyOiBNb2R1bGVMb2NhdG9yKTogTW9kdWxlTG9jYXRvciB7XG4gICAgbGV0IHJlc29sdmVkID0gdGhpcy5yZXNvbHZlci5pZGVudGlmeShgaGVscGVyOiR7aGVscGVyTmFtZX1gLCByZWZlcnJlci5tb2R1bGUpO1xuICAgIHJldHVybiB7IG1vZHVsZTogcmVzb2x2ZWQsIG5hbWU6ICdkZWZhdWx0JyB9O1xuICB9XG5cbiAgaGFzUGFydGlhbEluU2NvcGUocGFydGlhbE5hbWU6IHN0cmluZywgcmVmZXJyZXI6IE1vZHVsZUxvY2F0b3IpOiBib29sZWFuIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICByZXNvbHZlUGFydGlhbChwYXJ0aWFsTmFtZTogc3RyaW5nLCByZWZlcnJlcjogTW9kdWxlTG9jYXRvcik6IE1vZHVsZUxvY2F0b3Ige1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIGhhc01vZGlmaWVySW5TY29wZShtb2RpZmllck5hbWU6IHN0cmluZywgcmVmZXJyZXI6IE1vZHVsZUxvY2F0b3IpOiBib29sZWFuIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICByZXNvbHZlTW9kaWZpZXIobW9kaWZpZXJOYW1lOiBzdHJpbmcsIHJlZmVycmVyOiBNb2R1bGVMb2NhdG9yKTogTW9kdWxlTG9jYXRvciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQXBwPFQgZXh0ZW5kcyBUZXN0QXBwbGljYXRpb24+KG9wdGlvbnM6IEFwcEJ1aWxkZXJPcHRpb25zPFQ+ID0ge30pOiBBcHBCdWlsZGVyPFQ+IHtcbiAgb3B0aW9ucy5hcHBOYW1lID0gb3B0aW9ucy5hcHBOYW1lIHx8ICd0ZXN0LWFwcCc7XG4gIG9wdGlvbnMubG9hZGVyID0gb3B0aW9ucy5sb2FkZXIgfHwgJ3J1bnRpbWUtY29tcGlsZXInO1xuICBvcHRpb25zLkNvbXBvbmVudE1hbmFnZXIgPSBvcHRpb25zLkNvbXBvbmVudE1hbmFnZXIgfHwgQ29tcG9uZW50TWFuYWdlcjtcbiAgb3B0aW9ucy5BcHBsaWNhdGlvbkNsYXNzID1cbiAgICBvcHRpb25zLkFwcGxpY2F0aW9uQ2xhc3MgfHwgKFRlc3RBcHBsaWNhdGlvbiBhcyBBcHBsaWNhdGlvbkNvbnN0cnVjdG9yPFQ+KTtcblxuICByZXR1cm4gbmV3IEFwcEJ1aWxkZXIob3B0aW9ucy5hcHBOYW1lLCBvcHRpb25zKTtcbn1cblxuZXhwb3J0IHsgYnVpbGRBcHAgfTtcbiJdLCJzb3VyY2VSb290IjoiIn0= |
@@ -21,2 +21,5 @@ import Resolver, { ResolverConfiguration } from '@glimmer/resolver'; | ||
} | ||
interface HelperFunction extends Function { | ||
isFactory?: boolean; | ||
} | ||
export declare class AppBuilder<T extends TestApplication> { | ||
@@ -30,6 +33,8 @@ rootName: string; | ||
component(name: string, componentFactory: ComponentFactory): this; | ||
helper(name: string, helperFunc: Function): this; | ||
helper(name: string, helperFunc: HelperFunction, isFactory?: boolean): this; | ||
protected buildResolver(): Resolver; | ||
protected buildRuntimeCompilerLoader(resolver: Resolver): Loader; | ||
protected buildRuntimeCompilerLoader(): Loader; | ||
protected buildBytecodeLoader(resolver: Resolver): BytecodeLoader; | ||
protected buildLoader(resolver: any): Loader; | ||
renderToString(componentName: string, data: Dict<unknown>): Promise<string>; | ||
boot(): Promise<T>; | ||
@@ -36,0 +41,0 @@ } |
{ | ||
"name": "@glimmer/application-test-helpers", | ||
"version": "0.14.0-alpha.4", | ||
"version": "0.14.0-alpha.5", | ||
"description": "Test helpers for developing @glimmer/component and @glimmer/application", | ||
@@ -18,12 +18,12 @@ "contributors": [ | ||
"dependencies": { | ||
"@glimmer/compiler": "^0.39.1", | ||
"@glimmer/compiler": "^0.40.1", | ||
"@glimmer/di": "^0.1.9", | ||
"@glimmer/env": "^0.1.7", | ||
"@glimmer/interfaces": "^0.39.1", | ||
"@glimmer/reference": "^0.39.1", | ||
"@glimmer/interfaces": "^0.40.1", | ||
"@glimmer/reference": "^0.40.1", | ||
"@glimmer/resolver": "^0.3.0", | ||
"@glimmer/runtime": "^0.39.1", | ||
"@glimmer/util": "^0.39.1", | ||
"@glimmer/wire-format": "^0.39.1" | ||
"@glimmer/runtime": "^0.40.1", | ||
"@glimmer/util": "^0.40.1", | ||
"@glimmer/wire-format": "^0.40.1" | ||
} | ||
} |
208279
1986
+ Added@glimmer/compiler@0.40.2(transitive)
+ Added@glimmer/encoder@0.40.2(transitive)
+ Added@glimmer/interfaces@0.40.2(transitive)
+ Added@glimmer/low-level@0.40.2(transitive)
+ Added@glimmer/program@0.40.2(transitive)
+ Added@glimmer/reference@0.40.2(transitive)
+ Added@glimmer/runtime@0.40.2(transitive)
+ Added@glimmer/syntax@0.40.2(transitive)
+ Added@glimmer/util@0.40.2(transitive)
+ Added@glimmer/vm@0.40.2(transitive)
+ Added@glimmer/wire-format@0.40.2(transitive)
- Removed@glimmer/compiler@0.39.3(transitive)
- Removed@glimmer/encoder@0.39.3(transitive)
- Removed@glimmer/interfaces@0.39.3(transitive)
- Removed@glimmer/low-level@0.39.3(transitive)
- Removed@glimmer/program@0.39.3(transitive)
- Removed@glimmer/reference@0.39.3(transitive)
- Removed@glimmer/runtime@0.39.3(transitive)
- Removed@glimmer/syntax@0.39.3(transitive)
- Removed@glimmer/util@0.39.3(transitive)
- Removed@glimmer/vm@0.39.3(transitive)
- Removed@glimmer/wire-format@0.39.3(transitive)
Updated@glimmer/compiler@^0.40.1
Updated@glimmer/interfaces@^0.40.1
Updated@glimmer/reference@^0.40.1
Updated@glimmer/runtime@^0.40.1
Updated@glimmer/util@^0.40.1
Updated@glimmer/wire-format@^0.40.1