Socket
Socket
Sign inDemoInstall

@atlas.js/atlas

Package Overview
Dependencies
Maintainers
2
Versions
23
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@atlas.js/atlas - npm Package Compare versions

Comparing version 1.3.1 to 1.4.0-alpha.a596c671

test/dispatch.test.js

23

CHANGELOG.md

@@ -6,2 +6,25 @@ # Change Log

<a name="1.4.0-alpha.a596c671"></a>
# 1.4.0-alpha.a596c671 (2018-05-14)
### Features
* **atlas:** allow components to define their config schema 💪 ([ecd54d8](https://github.com/strvcom/atlas.js/commit/ecd54d8)), closes [#28](https://github.com/strvcom/atlas.js/issues/28)
* **atlas:** Allow components to emit custom events 💪 ([ba02799](https://github.com/strvcom/atlas.js/commit/ba02799)), closes [#34](https://github.com/strvcom/atlas.js/issues/34)
* **atlas:** allow JSON schemas to use ajv-keywords ([70b42f2](https://github.com/strvcom/atlas.js/commit/70b42f2))
* **atlas:** Implement Atlas.bootstrap() 🚀 ([d6f1101](https://github.com/strvcom/atlas.js/commit/d6f1101))
* **atlas:** Legendary: overhaul Hooks ([7710edd](https://github.com/strvcom/atlas.js/commit/7710edd)), closes [#35](https://github.com/strvcom/atlas.js/issues/35) [#34](https://github.com/strvcom/atlas.js/issues/34)
* **atlas:** Log when a hook receives event it cannot handle ([0939822](https://github.com/strvcom/atlas.js/commit/0939822)), closes [#34](https://github.com/strvcom/atlas.js/issues/34)
* **service:** Ensure Service's instance methods return Promise ([2e2ef13](https://github.com/strvcom/atlas.js/commit/2e2ef13))
### BREAKING CHANGES
* **atlas:**
* **service:**
<a name="1.3.1"></a>

@@ -8,0 +31,0 @@ ## [1.3.1](https://github.com/strvcom/atlas.js/compare/@atlas.js/atlas@1.3.0...@atlas.js/atlas@1.3.1) (2018-02-12)

15

package.json
{
"name": "@atlas.js/atlas",
"description": "The main package containing the core functionality of @atlas.js",
"version": "1.3.1",
"version": "1.4.0-alpha.a596c671",
"author": "Robert Rossmann <robert.rossmann@strv.com>",

@@ -9,6 +9,8 @@ "bugs": "https://github.com/strvcom/atlas.js/issues",

"dependencies": {
"@atlas.js/action": "^1.0.2",
"@atlas.js/errors": "^0.1.1",
"@atlas.js/hook": "^1.0.2",
"@atlas.js/service": "^1.0.2",
"@atlas.js/action": "^1.1.0-alpha.a596c671",
"@atlas.js/errors": "^0.2.0-alpha.a596c671",
"@atlas.js/hook": "^1.1.0-alpha.a596c671",
"@atlas.js/service": "^1.1.0-alpha.a596c671",
"ajv": "^6.5.0",
"ajv-keywords": "^3.2.0",
"local-scope": "^1.2.0",

@@ -26,2 +28,5 @@ "lodash": "^4.17.4",

"main": "src",
"publishConfig": {
"access": "public"
},
"repository": {

@@ -28,0 +33,0 @@ "type": "git",

@@ -10,2 +10,6 @@ "use strict";

var _ajv = _interopRequireDefault(require("ajv"));
var _ajvKeywords = _interopRequireDefault(require("ajv-keywords"));
var _pino = _interopRequireDefault(require("pino"));

@@ -48,3 +52,14 @@

atlas.log.debug({
paths
}, 'atlas:init');
return this.bootstrap(atlas, modules);
}
static bootstrap(atlas, modules = {}) {
(0, _lodash.defaultsDeep)(modules, {
config: 'config',
actions: {},
hooks: {},
services: {},
aliases: {

@@ -59,3 +74,2 @@ actions: {},

root: atlas.root,
paths,
components: {

@@ -66,3 +80,3 @@ actions: Object.keys(modules.actions),

}
}, 'atlas:init');
}, 'atlas:bootstrap');

@@ -110,20 +124,6 @@ for (const [alias, Hook] of Object.entries(modules.hooks)) {

constructor(options = {}) {
Object.defineProperty(this, "config", {
configurable: true,
enumerable: true,
writable: true,
value: {}
});
Object.defineProperty(this, "services", {
configurable: true,
enumerable: true,
writable: true,
value: {}
});
Object.defineProperty(this, "actions", {
configurable: true,
enumerable: true,
writable: true,
value: {}
});
this.config = {};
this.services = {};
this.actions = {};
this.validator = null;
_create.default.call(this).env = options.env || process.env.NODE_ENV;

@@ -138,2 +138,3 @@ _create.default.call(this).root = options.root;

};
_create.default.call(this).observers = new Map();

@@ -155,2 +156,4 @@ if (!this.env) {

this.log = _private.mklog.call(this, this.config.atlas.log);
this.validator = new _ajv.default(this.config.atlas.validator);
(0, _ajvKeywords.default)(this.validator);
}

@@ -166,3 +169,3 @@

service(alias, Component, opts = {}) {
return _private.component.call(this, {
_private.component.call(this, {
type: 'service',

@@ -173,6 +176,8 @@ alias,

}, _create.default.call(this).catalog.services);
return this;
}
hook(alias, Component, opts = {}) {
return _private.component.call(this, {
_private.component.call(this, {
type: 'hook',

@@ -183,6 +188,8 @@ alias,

}, _create.default.call(this).catalog.hooks);
return this;
}
action(alias, Component, opts = {}) {
return _private.component.call(this, {
_private.component.call(this, {
type: 'action',

@@ -193,2 +200,4 @@ alias,

}, _create.default.call(this).catalog.actions);
return this;
}

@@ -207,9 +216,23 @@

for (const [alias, action] of actions) {
this.actions[alias] = action.component;
const observers = _create.default.call(this).observers;
for (const [alias, container] of hooks) {
if (!container.Component.observes) {
throw new _errors.FrameworkError(`Hook ${alias} does not have static 'observes' property`);
}
if (container.Component.observes === 'atlas') {
observers.set(alias, container);
}
}
await Promise.all(Array.from(services).map(([alias, service]) => lifecycle.service.prepare.call(this, alias, service)));
await Promise.all(Array.from(hooks).map(([, container]) => container.prepare()));
await Promise.all(Array.from(actions).map(async ([alias, container]) => _private.expose.call(this, 'actions', alias, (await container.prepare({
hooks
})))));
await Promise.all(Array.from(services).map(async ([alias, container]) => _private.expose.call(this, 'services', alias, (await container.prepare({
hooks
})))));
_create.default.call(this).prepared = true;
await _private.dispatch.call(this, 'afterPrepare', this, hooks);
await _private.dispatch.call(observers, 'afterPrepare', this);
return this;

@@ -219,26 +242,23 @@ }

async start() {
const hooks = _create.default.call(this).catalog.hooks;
await this.prepare();
await _private.dispatch.call(this, 'beforeStart', this, hooks);
const {
services
actions,
services,
hooks
} = _create.default.call(this).catalog;
for (const [alias, service] of services) {
if (service.started) {
this.log.warn({
service: alias
}, 'service:start:already-started');
continue;
}
const observers = _create.default.call(this).observers;
await this.prepare();
await _private.dispatch.call(observers, 'beforeStart', this);
await Promise.all([...Array.from(hooks), ...Array.from(actions)].map(([, container]) => container.start({
hooks
})));
for (const [alias, container] of services) {
try {
await lifecycle.service.start.call(this, alias, service);
await container.start({
instance: this.services[alias],
hooks
});
} catch (err) {
this.log.error({
err,
service: alias
}, 'service:start:failure');
await this.stop().catch(stopErr => void this.log.fatal({

@@ -252,3 +272,3 @@ err: stopErr

_create.default.call(this).started = true;
await _private.dispatch.call(this, 'afterStart', this, hooks);
await _private.dispatch.call(observers, 'afterStart', this);
this.log.info('atlas:ready');

@@ -265,20 +285,17 @@ return this;

await _private.dispatch.call(this, 'beforeStop', this, hooks);
const observers = _create.default.call(this).observers;
await _private.dispatch.call(observers, 'beforeStop', this);
await Promise.all([...Array.from(hooks), ...Array.from(actions)].map(([, container]) => container.stop()));
let error;
for (const [alias, service] of Array.from(services).reverse()) {
if (!service.started) {
this.log.warn({
service: alias
}, 'service:stop:already-stopped');
continue;
}
for (const [alias, container] of Array.from(services).reverse()) {
try {
await lifecycle.service.stop.call(this, alias, service);
const instance = this.services[alias];
delete this.services[alias];
await container.stop({
instance,
hooks
});
} catch (err) {
this.log.error({
err,
service: alias
}, 'service:stop:failure');
error = err;

@@ -294,3 +311,3 @@ }

_create.default.call(this).prepared = false;
await _private.dispatch.call(this, 'afterStop', null, hooks);
await _private.dispatch.call(hooks, 'afterStop', null);
this.log.info('atlas:stopped');

@@ -307,57 +324,20 @@

Object.defineProperty(Atlas, "defaults", {
configurable: true,
enumerable: true,
writable: true,
value: {
log: {
name: _path.default.basename(process.cwd()),
level: 'info',
serializers: _pino.default.stdSerializers
Atlas.defaults = {
log: {
name: _path.default.basename(process.cwd()),
level: 'info',
serializers: {
err: _pino.default.stdSerializers.err,
req: _pino.default.stdSerializers.req,
res: _pino.default.stdSerializers.res
}
},
validator: {
allErrors: true,
useDefaults: true,
coerceTypes: true
}
});
const lifecycle = {
service: {
async prepare(alias, service) {
this.log.trace({
service: alias
}, 'service:prepare:before');
const instance = await service.component.prepare();
_private.expose.call(this, 'services', alias, instance);
this.log.trace({
service: alias
}, 'service:prepare:after');
},
async start(alias, service) {
this.log.trace({
service: alias
}, 'service:start:before');
await service.component.start(this.services[alias]);
service.started = true;
this.log.trace({
service: alias
}, 'service:start:after');
},
async stop(alias, service) {
this.log.trace({
service: alias
}, 'service:stop:before');
const instance = this.services[alias];
delete this.services[alias];
await service.component.stop(instance);
service.started = false;
this.log.trace({
service: alias
}, 'service:stop:after');
}
}
};
var _default = Atlas;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF0bGFzLm1qcyJdLCJuYW1lcyI6WyJBdGxhcyIsImluaXQiLCJvcHRpb25zIiwiY29uZmlnIiwiaG9va3MiLCJzZXJ2aWNlcyIsImFjdGlvbnMiLCJhbGlhc2VzIiwiYXRsYXMiLCJlbnYiLCJyb290IiwidHlwZXMiLCJwYXRocyIsIm1vZHVsZXMiLCJ0eXBlIiwicmVzb2x2ZSIsInJlcXVpcmUiLCJvcHRpb25hbCIsImxvZyIsImRlYnVnIiwiY29tcG9uZW50cyIsIk9iamVjdCIsImtleXMiLCJhbGlhcyIsIkhvb2siLCJlbnRyaWVzIiwiaG9vayIsIlNlcnZpY2UiLCJzZXJ2aWNlIiwiQWN0aW9uIiwiYWN0aW9uIiwicHJlcGFyZWQiLCJzdGFydGVkIiwiY29uc3RydWN0b3IiLCJwcm9jZXNzIiwiTk9ERV9FTlYiLCJjYXRhbG9nIiwiTWFwIiwiZGVmYXVsdHMiLCJsb2NhdGlvbiIsImFic29sdXRlIiwibG9hZCIsImNvbnRlbnRzIiwibm9ybWFsaXNlIiwiZGVmYXVsdCIsIkNvbXBvbmVudCIsIm9wdHMiLCJwcmVwYXJlIiwiY29tcG9uZW50IiwiUHJvbWlzZSIsImFsbCIsIkFycmF5IiwiZnJvbSIsIm1hcCIsImxpZmVjeWNsZSIsInN0YXJ0Iiwid2FybiIsImVyciIsImVycm9yIiwic3RvcCIsImNhdGNoIiwic3RvcEVyciIsImZhdGFsIiwiaW5mbyIsInJldmVyc2UiLCJuYW1lIiwiYmFzZW5hbWUiLCJjd2QiLCJsZXZlbCIsInNlcmlhbGl6ZXJzIiwic3RkU2VyaWFsaXplcnMiLCJ0cmFjZSIsImluc3RhbmNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBQ0E7O0FBQ0E7Ozs7QUFjQSxNQUFNQSxLQUFOLENBQVk7QUF1QlYsU0FBT0MsSUFBUCxDQUFZQyxVQUFVLEVBQXRCLEVBQTBCO0FBQ3hCLDhCQUFTQSxPQUFULEVBQWtCO0FBQ2hCQyxjQUFRLFFBRFE7QUFFaEJDLGFBQU8sT0FGUztBQUdoQkMsZ0JB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T0FBZixFQUFtQyxzQkFBbkM7QUFDQSxZQUFNSyxRQUFRb0IsU0FBUixDQUFrQk8sS0FBbEIsQ0FBd0IsS0FBS2xELFFBQUwsQ0FBY2tCLEtBQWQsQ0FBeEIsQ0FBTjtBQUNBSyxjQUFRSSxPQUFSLEdBQWtCLElBQWxCO0FBQ0EsV0FBS2QsR0FBTCxDQUFTcUQsS0FBVCxDQUFlO0FBQUUzQyxpQkFBU0w7QUFBWCxPQUFmLEVBQW1DLHFCQUFuQztBQUNELEtBNUJNOztBQXFDUCxVQUFNb0MsSUFBTixDQUFXcEMsS0FBWCxFQUFrQkssT0FBbEIsRUFBMkI7QUFDekIsV0FBS1YsR0FBTCxDQUFTcUQsS0FBVCxDQUFlO0FBQUUzQyxpQkFBU0w7QUFBWCxPQUFmLEVBQW1DLHFCQUFuQztBQUNBLFlBQU1pRCxXQUFXLEtBQUtuRSxRQUFMLENBQWNrQixLQUFkLENBQWpCO0FBQ0EsYUFBTyxLQUFLbEIsUUFBTCxDQUFja0IsS0FBZCxDQUFQO0FBQ0EsWUFBTUssUUFBUW9CLFNBQVIsQ0FBa0JXLElBQWxCLENBQXVCYSxRQUF2QixDQUFOO0FBQ0E1QyxjQUFRSSxPQUFSLEdBQWtCLEtBQWxCO0FBQ0EsV0FBS2QsR0FBTCxDQUFTcUQsS0FBVCxDQUFlO0FBQUUzQyxpQkFBU0w7QUFBWCxPQUFmLEVBQW1DLG9CQUFuQztBQUNEOztBQTVDTTtBQURPLENBQWxCO2VBaURldkIsSyIsImZpbGUiOiJhdGxhcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFdlIHVzZSBmb3ItYXdhaXQgcGF0dGVybiBxdWl0ZSBleHRlbnNpdmVseSBoZXJlIGZvciBsZWdpdGltYXRlIHB1cnBvc2VzXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1hd2FpdC1pbi1sb29wICovXG5cbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgcGlubyBmcm9tICdwaW5vJ1xuaW1wb3J0IHtcbiAgZGVmYXVsdHNEZWVwIGFzIGRlZmF1bHRzLFxuICBpc1BsYWluT2JqZWN0LFxufSBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgaGlkZGVuIGZyb20gJ2xvY2FsLXNjb3BlL2NyZWF0ZSdcbmltcG9ydCB7IEZyYW1ld29ya0Vycm9yIH0gZnJvbSAnQGF0bGFzLmpzL2Vycm9ycydcbmltcG9ydCB7XG4gIGV4cG9zZSxcbiAgZGlzcGF0Y2gsXG4gIGNvbXBvbmVudCxcbiAgbWtjb25maWcsXG4gIG1rbG9nLFxuICBvcHRyZXF1aXJlLFxufSBmcm9tICcuL3ByaXZhdGUnXG5cbi8qKlxuICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHlvdXIgYXBwbGljYXRpb24gYW5kIGFnZ3JlZ2F0ZXMgYWxsIGNvbXBvbmVudHMgdG9nZXRoZXJcbiAqXG4gKiBZb3Ugc2hvdWxkIGdlbmVyYWxseSBjcmVhdGUgb25seSBvbmUgaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBpbiBhIHByb2dyYW0uXG4gKi9cbmNsYXNzIEF0bGFzIHtcbiAgc3RhdGljIGRlZmF1bHRzID0ge1xuICAgIGxvZzoge1xuICAgICAgbmFtZTogcGF0aC5iYXNlbmFtZShwcm9jZXNzLmN3ZCgpKSxcbiAgICAgIGxldmVsOiAnaW5mbycsXG4gICAgICBzZXJpYWxpemVyczogcGluby5zdGRTZXJpYWxpemVycyxcbiAgICB9LFxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpc2UgYSBicmFuZC1uZXcgYXRsYXMgaW5zdGFuY2UgZnJvbSB0aGUgZ2l2ZW4gbW9kdWxlIGxvY2F0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgICAgb3B0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICBvcHRpb25zLmVudiAgICAgICAgICAgICAgICAgICBUaGUgZW52aXJvbm1lbnQgdW5kZXIgd2hpY2ggdG8gb3BlcmF0ZVxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgb3B0aW9ucy5yb290ICAgICAgICAgICAgICAgICAgVGhlIHJvb3QgZGlyZWN0b3J5IHRvIHdoaWNoIGFsbCBvdGhlclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgbWVudGlvbmVkIGhlcmUgYXJlIHJlbGF0aXZlXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICBvcHRpb25zLmNvbmZpZz0nY29uZmlnJyAgICAgICBNb2R1bGUgbG9jYXRpb24gZm9yIHRoZSBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICBvcHRpb25zLmhvb2tzPSdob29rcycgICAgICAgICBNb2R1bGUgbG9jYXRpb24gZm9yIHRoZSBob29rc1xuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgb3B0aW9ucy5zZXJ2aWNlcz0nc2VydmljZXMnICAgTW9kdWxlIGxvY2F0aW9uIGZvciB0aGUgc2VydmljZXNcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgIG9wdGlvbnMuYWN0aW9ucz0nYWN0aW9ucycgICAgIE1vZHVsZSBsb2NhdGlvbiBmb3IgdGhlIGFjdGlvbnNcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgIG9wdGlvbnMuYWxpYXNlcz0nYWxpYXNlcycgICAgIE1vZHVsZSBsb2NhdGlvbiBmb3IgdGhlIGFsaWFzZXNcbiAgICogQHJldHVybiAgICB7QXRsYXN9XG4gICAqL1xuICBzdGF0aWMgaW5pdChvcHRpb25zID0ge30pIHtcbiAgICBkZWZhdWx0cyhvcHRpb25zLCB7XG4gICAgICBjb25maWc6ICdjb25maWcnLFxuICAgICAgaG9va3M6ICdob29rcycsXG4gICAgICBzZXJ2aWNlczogJ3NlcnZpY2VzJyxcbiAgICAgIGFjdGlvbnM6ICdhY3Rpb25zJyxcbiAgICAgIGFsaWFzZXM6ICdhbGlhc2VzJyxcbiAgICB9KVxuXG4gICAgY29uc3QgYXRsYXMgPSBuZXcgdGhpcyh7XG4gICAgICBlbnY6IG9wdGlvbnMuZW52LFxuICAgICAgcm9vdDogb3B0aW9ucy5yb290LFxuICAgICAgY29uZmlnOiBvcHRpb25zLmNvbmZpZyxcbiAgICB9KVxuICAgIGNvbnN0IHR5cGVzID0gW1xuICAgICAgJ2hvb2tzJyxcbiAgICAgICdzZXJ2aWNlcycsXG4gICAgICAnYWN0aW9ucycsXG4gICAgICAnYWxpYXNlcycsXG4gICAgXVxuICAgIGNvbnN0IHBhdGhzID0ge31cbiAgICBjb25zdCBtb2R1bGVzID0ge31cblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgcGF0aHNbdHlwZV0gPSBwYXRoLnJlc29sdmUob3B0aW9ucy5yb290LCBvcHRpb25zW3R5cGVdKVxuICAgICAgbW9kdWxlc1t0eXBlXSA9IGF0bGFzLnJlcXVpcmUob3B0aW9uc1t0eXBlXSwgeyBvcHRpb25hbDogdHJ1ZSB9KVxuICAgIH1cblxuICAgIGRlZmF1bHRzKG1vZHVsZXMsIHtcbiAgICAgIGFsaWFzZXM6IHtcbiAgICAgICAgYWN0aW9uczoge30sXG4gICAgICAgIGhvb2tzOiB7fSxcbiAgICAgICAgc2VydmljZXM6IHt9LFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgYXRsYXMubG9nLmRlYnVnKHtcbiAgICAgIGVudjogYXRsYXMuZW52LFxuICAgICAgcm9vdDogYXRsYXMucm9vdCxcbiAgICAgIHBhdGhzLFxuICAgICAgY29tcG9uZW50czoge1xuICAgICAgICBhY3Rpb25zOiBPYmplY3Qua2V5cyhtb2R1bGVzLmFjdGlvbnMpLFxuICAgICAgICBob29rczogT2JqZWN0LmtleXMobW9kdWxlcy5ob29rcyksXG4gICAgICAgIHNlcnZpY2VzOiBPYmplY3Qua2V5cyhtb2R1bGVzLnNlcnZpY2VzKSxcbiAgICAgIH0sXG4gICAgfSwgJ2F0bGFzOmluaXQnKVxuXG4gICAgLy8gSG9va3NcbiAgICBmb3IgKGNvbnN0IFthbGlhcywgSG9va10gb2YgT2JqZWN0LmVudHJpZXMobW9kdWxlcy5ob29rcykpIHtcbiAgICAgIGNvbnN0IGFsaWFzZXMgPSBtb2R1bGVzLmFsaWFzZXMuaG9va3NbYWxpYXNdXG4gICAgICBhdGxhcy5ob29rKGFsaWFzLCBIb29rLCB7IGFsaWFzZXMgfSlcbiAgICB9XG5cbiAgICAvLyBTZXJ2aWNlc1xuICAgIGZvciAoY29uc3QgW2FsaWFzLCBTZXJ2aWNlXSBvZiBPYmplY3QuZW50cmllcyhtb2R1bGVzLnNlcnZpY2VzKSkge1xuICAgICAgY29uc3QgYWxpYXNlcyA9IG1vZHVsZXMuYWxpYXNlcy5zZXJ2aWNlc1thbGlhc11cbiAgICAgIGF0bGFzLnNlcnZpY2UoYWxpYXMsIFNlcnZpY2UsIHsgYWxpYXNlcyB9KVxuICAgIH1cblxuICAgIC8vIEFjdGlvbnNcbiAgICBmb3IgKGNvbnN0IFthbGlhcywgQWN0aW9uXSBvZiBPYmplY3QuZW50cmllcyhtb2R1bGVzLmFjdGlvbnMpKSB7XG4gICAgICBjb25zdCBhbGlhc2VzID0gbW9kdWxlcy5hbGlhc2VzLmFjdGlvbnNbYWxpYXNdXG4gICAgICBhdGxhcy5hY3Rpb24oYWxpYXMsIEFjdGlvbiwgeyBhbGlhc2VzIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGF0bGFzXG4gIH1cblxuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBlbnZpcm9ubWVudCB1bmRlciB3aGljaCB0aGlzIGluc3RhbmNlIG9wZXJhdGVzXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIE5PREVfRU5WIGZyb20gdGhlIGVudmlyb25tZW50LlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHJldHVybiAgICB7U3RyaW5nfVxuICAgKi9cbiAgZ2V0IGVudigpIHtcbiAgICByZXR1cm4gdGhpczo6aGlkZGVuKCkuZW52XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJvb3QgZm9sZGVyIHdoZXJlIGFsbCBvdGhlciBwYXRocyBzaG91bGQgYmUgcmVsYXRpdmUgdG9cbiAgICpcbiAgICogSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3Ugc2V0IHRoaXMgdG8gdGhlIHByb2plY3QncyByb290IGRpcmVjdG9yeS5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEByZXR1cm4gICAge1N0cmluZ31cbiAgICovXG4gIGdldCByb290KCkge1xuICAgIHJldHVybiB0aGlzOjpoaWRkZW4oKS5yb290XG4gIH1cblxuICAvKipcbiAgICogSXMgdGhpcyBpbnN0YW5jZSBpbiBhIHByZXBhcmVkIHN0YXRlP1xuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHJldHVybiAgICB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBwcmVwYXJlZCgpIHtcbiAgICByZXR1cm4gdGhpczo6aGlkZGVuKCkucHJlcGFyZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBJcyB0aGlzIGluc3RhbmNlIGluIGEgc3RhcnRlZCBzdGF0ZT9cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEByZXR1cm4gICAge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgc3RhcnRlZCgpIHtcbiAgICByZXR1cm4gdGhpczo6aGlkZGVuKCkuc3RhcnRlZFxuICB9XG5cbiAgLyoqXG4gICAqIEF0bGFzIGNvbmZpZ3VyYXRpb24sIGFzIHBhc3NlZCBpbiB0byB0aGUgY29uc3RydWN0b3JcbiAgICpcbiAgICogQHR5cGUgICAge09iamVjdH1cbiAgICovXG4gIGNvbmZpZyA9IHt9XG5cbiAgLyoqXG4gICAqIEFsbCBzZXJ2aWNlcyBhZGRlZCB0byB0aGlzIGluc3RhbmNlXG4gICAqXG4gICAqIEB0eXBlICAgIHtPYmplY3R9XG4gICAqL1xuICBzZXJ2aWNlcyA9IHt9XG5cbiAgLyoqXG4gICAqIEFsbCBhY3Rpb25zIGFkZGVkIHRvIHRoaXMgaW5zdGFuY2VcbiAgICpcbiAgICogQHR5cGUgICAge09iamVjdH1cbiAgICovXG4gIGFjdGlvbnMgPSB7fVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2VcbiAgICpcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRpb25zICAgICAgICAgICAgIE9wdGlvbnMgZm9yIHRoZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdGlvbnMuY29uZmlnICAgICAgQ29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBpbnN0YW5jZSBhbmQgZm9yIGFsbFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZXMgb3Igb3RoZXIgY29tcG9uZW50cyB3aGljaCB3aWxsIGJlIGFkZGVkIHRvXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5zdGFuY2VcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBvcHRpb25zLnJvb3QgICAgICAgIFRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgaW5zdGFuY2VcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBvcHRpb25zLmVudiAgICAgICAgIFRoZSBlbnZpcm9ubWVudCB1bmRlciB3aGljaCB0aGlzIGluc3RhbmNlIG9wZXJhdGVzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9uZW50cyBtYXkgdXNlIHRoaXMgdmFsdWUgZm9yIHZhcmlvdXMgcHVycG9zZXMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byBOT0RFX0VOVi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIEluaXRpYWxpc2UgcHJpdmF0ZSBzdHVmZlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm9jZXNzLWVudlxuICAgIHRoaXM6OmhpZGRlbigpLmVudiA9IG9wdGlvbnMuZW52IHx8IHByb2Nlc3MuZW52Lk5PREVfRU5WXG4gICAgdGhpczo6aGlkZGVuKCkucm9vdCA9IG9wdGlvbnMucm9vdFxuICAgIHRoaXM6OmhpZGRlbigpLnByZXBhcmVkID0gZmFsc2VcbiAgICB0aGlzOjpoaWRkZW4oKS5zdGFydGVkID0gZmFsc2VcbiAgICB0aGlzOjpoaWRkZW4oKS5jYXRhbG9nID0ge1xuICAgICAgc2VydmljZXM6IG5ldyBNYXAoKSxcbiAgICAgIGhvb2tzOiBuZXcgTWFwKCksXG4gICAgICBhY3Rpb25zOiBuZXcgTWFwKCksXG4gICAgfVxuXG4gICAgLy8gU2FmZXR5IGNoZWNrc1xuICAgIGlmICghdGhpcy5lbnYpIHtcbiAgICAgIHRocm93IG5ldyBGcmFtZXdvcmtFcnJvcignZW52IG5vdCBzcGVjaWZpZWQgYW5kIE5PREVfRU5WIHdhcyBub3Qgc2V0JylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRoaXMucm9vdCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBGcmFtZXdvcmtFcnJvcihgcm9vdCBtdXN0IGJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkLCBnb3QgJHtvcHRpb25zLnJvb3R9YClcbiAgICB9XG5cbiAgICB0aGlzLmNvbmZpZyA9IHRoaXM6Om1rY29uZmlnKG9wdGlvbnMuY29uZmlnLCB7XG4gICAgICBhdGxhczogQXRsYXMuZGVmYXVsdHMsXG4gICAgICBzZXJ2aWNlczoge30sXG4gICAgICBob29rczoge30sXG4gICAgICBhY3Rpb25zOiB7fSxcbiAgICB9KVxuICAgIC8vIExvZ2dlciDwn4yyXG4gICAgdGhpcy5sb2cgPSB0aGlzOjpta2xvZyh0aGlzLmNvbmZpZy5hdGxhcy5sb2cpXG4gIH1cblxuICAvKipcbiAgICogUmVxdWlyZSBhIG1vZHVsZSBieSBwYXRoLCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCByb290XG4gICAqXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgbG9jYXRpb24gICAgICAgICAgVGhlIG1vZHVsZSdzIGxvY2F0aW9uLCByZWxhdGl2ZSB0byByb290XG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0aW9ucz17fSAgICAgICAgT3B0aW9uc1xuICAgKiBAcGFyYW0gICAgIHtCb29sZWFufSAgIG9wdGlvbnMub3B0aW9uYWwgIElmIHRydWUsIHdpbGwgbm90IHRocm93IGlmIHRoZSBtb2R1bGUgZG9lcyBub3QgZXhpc3RcbiAgICogQHBhcmFtICAgICB7Qm9vbGVhbn0gICBvcHRpb25zLm5vcm1hbGlzZSBJZiB0cnVlLCBpdCB3aWxsIHByZWZlciB0aGUgRVMgbW9kdWxlcycgZGVmYXVsdCBleHBvcnRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyIG5hbWVkIGV4cG9ydHMgb3IgdGhlIENvbW1vbkpTIGV4cG9ydHNcbiAgICogQHBhcmFtICAgICB7Qm9vbGVhbn0gICBvcHRpb25zLmFic29sdXRlICBJZiB0cnVlLCB3aWxsIHRyeSB0byBsb2FkIHRoZSBtb2R1bGUgd2l0aG91dFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmluZyB0aGUgbW9kdWxlJ3MgbmFtZSB0byB0aGUgcHJvamVjdCByb290IChpdFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgbG9hZCB0aGUgbW9kdWxlIHVzaW5nIHN0YW5kYXJkIE5vZGUncyBtZWNoYW5pc20pXG4gICAqIEByZXR1cm4gICAge21peGVkfSAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1vZHVsZSdzIGNvbnRlbnRzXG4gICAqL1xuICByZXF1aXJlKGxvY2F0aW9uLCBvcHRpb25zID0ge30pIHtcbiAgICBsb2NhdGlvbiA9IG9wdGlvbnMuYWJzb2x1dGVcbiAgICAgID8gbG9jYXRpb25cbiAgICAgIDogcGF0aC5yZXNvbHZlKHRoaXMucm9vdCwgbG9jYXRpb24pXG5cbiAgICBjb25zdCBsb2FkID0gb3B0aW9ucy5vcHRpb25hbFxuICAgICAgPyBvcHRyZXF1aXJlXG4gICAgICA6IHJlcXVpcmVcbiAgICBjb25zdCBjb250ZW50cyA9IGxvYWQobG9jYXRpb24pXG5cbiAgICByZXR1cm4gb3B0aW9ucy5ub3JtYWxpc2UgJiYgaXNQbGFpbk9iamVjdChjb250ZW50cy5kZWZhdWx0KVxuICAgICAgPyBjb250ZW50cy5kZWZhdWx0XG4gICAgICA6IGNvbnRlbnRzXG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBzZXJ2aWNlIGludG8gdGhpcyBhdGxhcyBhdCBnaXZlbiBhbGlhc1xuICAgKlxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgIGFsaWFzICAgICAgICAgICBUaGUgYWxpYXMgZm9yIHRoZSBzZXJ2aWNlIC0gaXQgd2lsbCBiZSB1c2VkIGZvciBleHBvc2luZ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2VydmljZSdzIEFQSSBvbiB0aGUgYXRsYXMuc2VydmljZXMgb2JqZWN0IGFuZCBmb3JcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2luZyBjb25maWd1cmF0aW9uIGRhdGEgdG8gaXRcbiAgICogQHBhcmFtICAgICB7Y2xhc3N9ICAgICBDb21wb25lbnQgICAgICAgVGhlIHNlcnZpY2UgY2xhc3NcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRzICAgICAgICAgICAgUnVudGltZSBvcHRpb25zIGZvciB0aGUgc2VydmljZVxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdHMuYWxpYXNlcyAgICBCaW5kaW5ncyB0byBvdGhlciBkZWZpbmVkIGNvbXBvbmVudHNcbiAgICogQHJldHVybiAgICB7dGhpc31cbiAgICovXG4gIHNlcnZpY2UoYWxpYXMsIENvbXBvbmVudCwgb3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXM6OmNvbXBvbmVudCh7XG4gICAgICB0eXBlOiAnc2VydmljZScsXG4gICAgICBhbGlhcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIGFsaWFzZXM6IG9wdHMuYWxpYXNlcyxcbiAgICB9LCB0aGlzOjpoaWRkZW4oKS5jYXRhbG9nLnNlcnZpY2VzKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgaG9vayBpbnRvIHRoaXMgYXRsYXMgdXNpbmcgZ2l2ZW4gYWxpYXNcbiAgICpcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBhbGlhcyAgICAgICAgICAgVGhlIGFsaWFzIGZvciB0aGUgaG9vayAtIGl0IHdpbGwgYmUgdXNlZCBmb3IgcGFzc2luZ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGRhdGEgdG8gaXRcbiAgICogQHBhcmFtICAgICB7Y2xhc3N9ICAgICBDb21wb25lbnQgICAgICAgVGhlIGhvb2sgY2xhc3NcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRzICAgICAgICAgICAgUnVudGltZSBvcHRpb25zIGZvciB0aGUgaG9va1xuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdHMuYWxpYXNlcyAgICBCaW5kaW5ncyB0byBvdGhlciBkZWZpbmVkIGNvbXBvbmVudHNcbiAgICogQHJldHVybiAgICB7dGhpc31cbiAgICovXG4gIGhvb2soYWxpYXMsIENvbXBvbmVudCwgb3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXM6OmNvbXBvbmVudCh7XG4gICAgICB0eXBlOiAnaG9vaycsXG4gICAgICBhbGlhcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIGFsaWFzZXM6IG9wdHMuYWxpYXNlcyxcbiAgICB9LCB0aGlzOjpoaWRkZW4oKS5jYXRhbG9nLmhvb2tzKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGFuIGFjdGlvbiBpbnRvIHRoaXMgYXRsYXMgYXQgZ2l2ZW4gYWxpYXNcbiAgICpcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBhbGlhcyAgICAgICAgICAgVGhlIGFsaWFzIGZvciB0aGUgYWN0aW9uIC0gaXQgd2lsbCBiZSB1c2VkIGZvciBleHBvc2luZ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYWN0aW9uJ3MgQVBJIG9uIHRoZSBhdGxhcy5hY3Rpb25zIG9iamVjdCBhbmQgZm9yXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NpbmcgY29uZmlndXJhdGlvbiBkYXRhIHRvIGl0XG4gICAqIEBwYXJhbSAgICAge2NsYXNzfSAgICAgQ29tcG9uZW50ICAgICAgIFRoZSBhY3Rpb24gY2xhc3NcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRzICAgICAgICAgICAgUnVudGltZSBvcHRpb25zIGZvciB0aGUgYWN0aW9uXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0cy5hbGlhc2VzICAgIEJpbmRpbmdzIHRvIG90aGVyIGRlZmluZWQgY29tcG9uZW50c1xuICAgKiBAcmV0dXJuICAgIHt0aGlzfVxuICAgKi9cbiAgYWN0aW9uKGFsaWFzLCBDb21wb25lbnQsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzOjpjb21wb25lbnQoe1xuICAgICAgdHlwZTogJ2FjdGlvbicsXG4gICAgICBhbGlhcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIGFsaWFzZXM6IG9wdHMuYWxpYXNlcyxcbiAgICB9LCB0aGlzOjpoaWRkZW4oKS5jYXRhbG9nLmFjdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZSBhbGwgc2VydmljZXMgYW5kIGhvb2tzIGZvciB1c2VcbiAgICpcbiAgICogR2VuZXJhbGx5IHlvdSBzaG91bGQgdXNlIGBhdGxhcy5zdGFydCgpYCBpbnN0ZWFkIHRvIGdldCB5b3VyIGluc3RhbmNlIHVwIGFuZCBydW5uaW5nLiBIb3dldmVyLFxuICAgKiBzb21ldGltZXMgaXQgaXMgbmVjZXNzYXJ5IHRvIGdldCBhbGwgdGhlIHNlcnZpY2VzIGludG8gYSBcImdldC1yZWFkeVwiIHN0YXRlIGJlZm9yZSB0aGV5IHN0YXJ0XG4gICAqIGNvbm5lY3RpbmcgdG8gcmVtb3RlIHJlc291cmNlcyBvciBkb2luZyBhbnkgaW50ZW5zaXZlIEkvTyBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJuICAgIHtQcm9taXNlPHRoaXM+fVxuICAgKi9cbiAgYXN5bmMgcHJlcGFyZSgpIHtcbiAgICBpZiAodGhpcy5wcmVwYXJlZCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICBjb25zdCB7IHNlcnZpY2VzLCBhY3Rpb25zLCBob29rcyB9ID0gdGhpczo6aGlkZGVuKCkuY2F0YWxvZ1xuXG4gICAgLy8gUHJlcGFyZSBhY3Rpb25zXG4gICAgZm9yIChjb25zdCBbYWxpYXMsIGFjdGlvbl0gb2YgYWN0aW9ucykge1xuICAgICAgdGhpcy5hY3Rpb25zW2FsaWFzXSA9IGFjdGlvbi5jb21wb25lbnRcbiAgICB9XG5cbiAgICAvLyBQcmVwYXJlIGFsbCBzZXJ2aWNlcywgaW4gcGFyYWxsZWwg8J+SqlxuICAgIGF3YWl0IFByb21pc2UuYWxsKEFycmF5LmZyb20oc2VydmljZXMpLm1hcCgoW2FsaWFzLCBzZXJ2aWNlXSkgPT5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgdGhpczo6bGlmZWN5Y2xlLnNlcnZpY2UucHJlcGFyZShhbGlhcywgc2VydmljZSkpKVxuXG4gICAgdGhpczo6aGlkZGVuKCkucHJlcGFyZWQgPSB0cnVlXG4gICAgYXdhaXQgdGhpczo6ZGlzcGF0Y2goJ2FmdGVyUHJlcGFyZScsIHRoaXMsIGhvb2tzKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhbGwgc2VydmljZXNcbiAgICpcbiAgICogQHJldHVybiAgICB7UHJvbWlzZTx0aGlzPn1cbiAgICovXG4gIGFzeW5jIHN0YXJ0KCkge1xuICAgIGNvbnN0IGhvb2tzID0gdGhpczo6aGlkZGVuKCkuY2F0YWxvZy5ob29rc1xuXG4gICAgYXdhaXQgdGhpcy5wcmVwYXJlKClcbiAgICBhd2FpdCB0aGlzOjpkaXNwYXRjaCgnYmVmb3JlU3RhcnQnLCB0aGlzLCBob29rcylcblxuICAgIGNvbnN0IHsgc2VydmljZXMgfSA9IHRoaXM6OmhpZGRlbigpLmNhdGFsb2dcblxuICAgIC8vIFN0YXJ0IGFsbCBzZXJ2aWNlcywgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBhZGRlZCB0byB0aGUgaW5zdGFuY2Ug8J+SqlxuICAgIC8vIE9yZGVyaW5nIGlzIGltcG9ydGFudCBoZXJlISBTb21lIHNlcnZpY2VzIHNob3VsZCBiZSBzdGFydGVkIGFzIHRoZSBsYXN0IG9uZXMgYmVjYXVzZSB0aGV5XG4gICAgLy8gZXhwb3NlIHNvbWUgZnVuY3Rpb25hbGl0eSB0byB0aGUgb3V0c2lkZSB3b3JsZCBhbmQgc3RhcnRpbmcgdGhvc2UgYmVmb3JlIGllLiBhIGRhdGFiYXNlXG4gICAgLy8gc2VydmljZSBpcyBzdGFydGVkIG1pZ2h0IGJyZWFrIHN0dWZmIVxuICAgIGZvciAoY29uc3QgW2FsaWFzLCBzZXJ2aWNlXSBvZiBzZXJ2aWNlcykge1xuICAgICAgaWYgKHNlcnZpY2Uuc3RhcnRlZCkge1xuICAgICAgICB0aGlzLmxvZy53YXJuKHsgc2VydmljZTogYWxpYXMgfSwgJ3NlcnZpY2U6c3RhcnQ6YWxyZWFkeS1zdGFydGVkJylcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgIGF3YWl0IHRoaXM6OmxpZmVjeWNsZS5zZXJ2aWNlLnN0YXJ0KGFsaWFzLCBzZXJ2aWNlKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yKHsgZXJyLCBzZXJ2aWNlOiBhbGlhcyB9LCAnc2VydmljZTpzdGFydDpmYWlsdXJlJylcbiAgICAgICAgLy8gUm9sbCBiYWNrXG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcCgpXG4gICAgICAgICAgLy8gU2hpdCBqdXN0IGdvdCBzZXJpb3VzIPCfmLFcbiAgICAgICAgICAuY2F0Y2goc3RvcEVyciA9PiB2b2lkIHRoaXMubG9nLmZhdGFsKHsgZXJyOiBzdG9wRXJyIH0sICdhdGxhczpzdGFydDpyb2xsYmFjay1mYWlsdXJlJykpXG5cbiAgICAgICAgLy8gUmUtdGhyb3cgdGhlIG9yaWdpbmFsIGVycm9yIHdoaWNoIGNhdXNlZCBBdGxhcyB0byBmYWlsIHRvIHN0YXJ0XG4gICAgICAgIHRocm93IGVyclxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXM6OmhpZGRlbigpLnN0YXJ0ZWQgPSB0cnVlXG4gICAgYXdhaXQgdGhpczo6ZGlzcGF0Y2goJ2FmdGVyU3RhcnQnLCB0aGlzLCBob29rcylcbiAgICB0aGlzLmxvZy5pbmZvKCdhdGxhczpyZWFkeScpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3AgYWxsIHNlcnZpY2VzLCB1bnJlZ2lzdGVyIGFsbCBhY3Rpb25zIGFuZCBob29rcyBhbmQgdW5wdWJsaXNoIGFueSBBUElzIGV4cG9zZWQgYnkgdGhlbVxuICAgKlxuICAgKiBUaGlzIHB1dHMgdGhlIHdob2xlIGFwcGxpY2F0aW9uIGludG8gYSBzdGF0ZSBhcyBpdCB3YXMgYmVmb3JlIGBhdGxhcy5wcmVwYXJlKClgIGFuZC9vclxuICAgKiBgYXRsYXMuc3RhcnQoKWAgd2FzIGNhbGxlZC5cbiAgICpcbiAgICogQHJldHVybiAgICB7UHJvbWlzZTx0aGlzPn1cbiAgICovXG4gIGFzeW5jIHN0b3AoKSB7XG4gICAgY29uc3QgeyBzZXJ2aWNlcywgYWN0aW9ucywgaG9va3MgfSA9IHRoaXM6OmhpZGRlbigpLmNhdGFsb2dcblxuICAgIGF3YWl0IHRoaXM6OmRpc3BhdGNoKCdiZWZvcmVTdG9wJywgdGhpcywgaG9va3MpXG5cbiAgICBsZXQgZXJyb3JcblxuICAgIC8vIFN0b3AgYWxsIHNlcnZpY2VzLCBpbiB0aGUgcmV2ZXJzZSBvcmRlciB0aGV5IHdlcmUgYWRkZWQgdG8gdGhlIGluc3RhbmNlIPCfkqpcbiAgICAvLyBUaGlzIHdpbGwgbWFrZSBzdXJlIHRoZSBtb3N0IGltcG9ydGFudCBzZXJ2aWNlcyBhcmUgc3RvcHBlZCBmaXJzdC5cbiAgICBmb3IgKGNvbnN0IFthbGlhcywgc2VydmljZV0gb2YgQXJyYXkuZnJvbShzZXJ2aWNlcykucmV2ZXJzZSgpKSB7XG4gICAgICBpZiAoIXNlcnZpY2Uuc3RhcnRlZCkge1xuICAgICAgICB0aGlzLmxvZy53YXJuKHsgc2VydmljZTogYWxpYXMgfSwgJ3NlcnZpY2U6c3RvcDphbHJlYWR5LXN0b3BwZWQnKVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgYXdhaXQgdGhpczo6bGlmZWN5Y2xlLnNlcnZpY2Uuc3RvcChhbGlhcywgc2VydmljZSlcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmxvZy5lcnJvcih7IGVyciwgc2VydmljZTogYWxpYXMgfSwgJ3NlcnZpY2U6c3RvcDpmYWlsdXJlJylcbiAgICAgICAgZXJyb3IgPSBlcnJcbiAgICAgICAgLy8gTGVhdmUgdGhpcyBzZXJ2aWNlIGFzIGlzIGFuZCBtb3ZlIHRvIHRoZSBuZXh0IHNlcnZpY2UuIFdlIHByb2JhYmx5IGNhbm5vdCBkbyBhbnl0aGluZyB0b1xuICAgICAgICAvLyBwcm9wZXJseSBzdG9wIHRoaXMgc2VydmljZS4g8J+ZgVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVucmVnaXN0ZXIgYWN0aW9uc1xuICAgIGZvciAoY29uc3QgW2FsaWFzXSBvZiBhY3Rpb25zKSB7XG4gICAgICBkZWxldGUgdGhpcy5hY3Rpb25zW2FsaWFzXVxuICAgIH1cblxuICAgIHRoaXM6OmhpZGRlbigpLnN0YXJ0ZWQgPSBmYWxzZVxuICAgIHRoaXM6OmhpZGRlbigpLnByZXBhcmVkID0gZmFsc2VcblxuICAgIGF3YWl0IHRoaXM6OmRpc3BhdGNoKCdhZnRlclN0b3AnLCBudWxsLCBob29rcylcbiAgICB0aGlzLmxvZy5pbmZvKCdhdGxhczpzdG9wcGVkJylcblxuICAgIC8vIElmIHRoZXJlIHdhcyBhbiBlcnJvciB0aHJvd24gaW4gb25lIG9mIHRoZSBzZXJ2aWNlcyBkdXJpbmcgLnN0b3AoKSwgcmUtdGhyb3cgaXQgbm93XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxuY29uc3QgbGlmZWN5Y2xlID0ge1xuICBzZXJ2aWNlOiB7XG4gICAgLyoqXG4gICAgICogUHJlcGFyZSBhIHNlcnZpY2VcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBhbGlhcyAgICAgICBUaGUgU2VydmljZSdzIGFsaWFzXG4gICAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBzZXJ2aWNlICAgICBUaGUgc2VydmljZSBjb21wb25lbnQgY29udGFpbmVyXG4gICAgICogQHJldHVybiAgICB7UHJvbWlzZTx2b2lkPn1cbiAgICAgKi9cbiAgICBhc3luYyBwcmVwYXJlKGFsaWFzLCBzZXJ2aWNlKSB7XG4gICAgICB0aGlzLmxvZy50cmFjZSh7IHNlcnZpY2U6IGFsaWFzIH0sICdzZXJ2aWNlOnByZXBhcmU6YmVmb3JlJylcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gYXdhaXQgc2VydmljZS5jb21wb25lbnQucHJlcGFyZSgpXG4gICAgICB0aGlzOjpleHBvc2UoJ3NlcnZpY2VzJywgYWxpYXMsIGluc3RhbmNlKVxuICAgICAgdGhpcy5sb2cudHJhY2UoeyBzZXJ2aWNlOiBhbGlhcyB9LCAnc2VydmljZTpwcmVwYXJlOmFmdGVyJylcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFN0YXJ0IGEgc2VydmljZVxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgIGFsaWFzICAgICAgIFRoZSBTZXJ2aWNlJ3MgYWxpYXNcbiAgICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIHNlcnZpY2UgICAgIFRoZSBzZXJ2aWNlIGNvbXBvbmVudCBjb250YWluZXJcbiAgICAgKiBAcmV0dXJuICAgIHtQcm9taXNlPHZvaWQ+fVxuICAgICAqL1xuICAgIGFzeW5jIHN0YXJ0KGFsaWFzLCBzZXJ2aWNlKSB7XG4gICAgICB0aGlzLmxvZy50cmFjZSh7IHNlcnZpY2U6IGFsaWFzIH0sICdzZXJ2aWNlOnN0YXJ0OmJlZm9yZScpXG4gICAgICBhd2FpdCBzZXJ2aWNlLmNvbXBvbmVudC5zdGFydCh0aGlzLnNlcnZpY2VzW2FsaWFzXSlcbiAgICAgIHNlcnZpY2Uuc3RhcnRlZCA9IHRydWVcbiAgICAgIHRoaXMubG9nLnRyYWNlKHsgc2VydmljZTogYWxpYXMgfSwgJ3NlcnZpY2U6c3RhcnQ6YWZ0ZXInKVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU3RvcCBhIHNlcnZpY2VcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBhbGlhcyAgICAgICBUaGUgU2VydmljZSdzIGFsaWFzXG4gICAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBzZXJ2aWNlICAgICBUaGUgc2VydmljZSBjb21wb25lbnQgY29udGFpbmVyXG4gICAgICogQHJldHVybiAgICB7UHJvbWlzZTx2b2lkPn1cbiAgICAgKi9cbiAgICBhc3luYyBzdG9wKGFsaWFzLCBzZXJ2aWNlKSB7XG4gICAgICB0aGlzLmxvZy50cmFjZSh7IHNlcnZpY2U6IGFsaWFzIH0sICdzZXJ2aWNlOnN0b3A6YmVmb3JlJylcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5zZXJ2aWNlc1thbGlhc11cbiAgICAgIGRlbGV0ZSB0aGlzLnNlcnZpY2VzW2FsaWFzXVxuICAgICAgYXdhaXQgc2VydmljZS5jb21wb25lbnQuc3RvcChpbnN0YW5jZSlcbiAgICAgIHNlcnZpY2Uuc3RhcnRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmxvZy50cmFjZSh7IHNlcnZpY2U6IGFsaWFzIH0sICdzZXJ2aWNlOnN0b3A6YWZ0ZXInKVxuICAgIH0sXG4gIH0sXG59XG5cbmV4cG9ydCBkZWZhdWx0IEF0bGFzXG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF0bGFzLm1qcyJdLCJuYW1lcyI6WyJBdGxhcyIsImluaXQiLCJvcHRpb25zIiwiY29uZmlnIiwiaG9va3MiLCJzZXJ2aWNlcyIsImFjdGlvbnMiLCJhbGlhc2VzIiwiYXRsYXMiLCJlbnYiLCJyb290IiwidHlwZXMiLCJwYXRocyIsIm1vZHVsZXMiLCJ0eXBlIiwicGF0aCIsInJlc29sdmUiLCJyZXF1aXJlIiwib3B0aW9uYWwiLCJsb2ciLCJkZWJ1ZyIsImJvb3RzdHJhcCIsImNvbXBvbmVudHMiLCJPYmplY3QiLCJrZXlzIiwiYWxpYXMiLCJIb29rIiwiZW50cmllcyIsImhvb2siLCJTZXJ2aWNlIiwic2VydmljZSIsIkFjdGlvbiIsImFjdGlvbiIsImhpZGRlbiIsInByZXBhcmVkIiwic3RhcnRlZCIsImNvbnN0cnVjdG9yIiwidmFsaWRhdG9yIiwicHJvY2VzcyIsIk5PREVfRU5WIiwiY2F0YWxvZyIsIk1hcCIsIm9ic2VydmVycyIsIkZyYW1ld29ya0Vycm9yIiwibWtjb25maWciLCJkZWZhdWx0cyIsIm1rbG9nIiwiQWp2IiwibG9jYXRpb24iLCJhYnNvbHV0ZSIsImxvYWQiLCJvcHRyZXF1aXJlIiwiY29udGVudHMiLCJub3JtYWxpc2UiLCJkZWZhdWx0IiwiQ29tcG9uZW50Iiwib3B0cyIsImNvbXBvbmVudCIsInByZXBhcmUiLCJjb250YWluZXIiLCJvYnNlcnZlcyIsInNldCIsIlByb21pc2UiLCJhbGwiLCJBcnJheSIsImZyb20iLCJtYXAiLCJleHBvc2UiLCJkaXNwYXRjaCIsInN0YXJ0IiwiaW5zdGFuY2UiLCJlcnIiLCJzdG9wIiwiY2F0Y2giLCJzdG9wRXJyIiwiZmF0YWwiLCJpbmZvIiwiZXJyb3IiLCJyZXZlcnNlIiwibmFtZSIsImJhc2VuYW1lIiwiY3dkIiwibGV2ZWwiLCJzZXJpYWxpemVycyIsInBpbm8iLCJzdGRTZXJpYWxpemVycyIsInJlcSIsInJlcyIsImFsbEVycm9ycyIsInVzZURlZmF1bHRzIiwiY29lcmNlVHlwZXMi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RDs7QUFFRCxXQUFPLElBQVA7QUFDRDs7QUF6ZVM7O0FBQU43RSxLLENBQ0c2QyxRLEdBQVc7QUFDaEIxQixPQUFLO0FBQ0g0RCxVQUFNaEUsY0FBS2lFLFFBQUwsQ0FBYzFDLFFBQVEyQyxHQUFSLEVBQWQsQ0FESDtBQUVIQyxXQUFPLE1BRko7QUFHSEMsaUJBQWE7QUFDWFosV0FBS2EsY0FBS0MsY0FBTCxDQUFvQmQsR0FEZDtBQUVYZSxXQUFLRixjQUFLQyxjQUFMLENBQW9CQyxHQUZkO0FBR1hDLFdBQUtILGNBQUtDLGNBQUwsQ0FBb0JFO0FBSGQ7QUFIVixHQURXO0FBV2hCbEQsYUFBVztBQUNUbUQsZUFBVyxJQURGO0FBRVRDLGlCQUFhLElBRko7QUFHVEMsaUJBQWE7QUFISjtBQVhLLEM7ZUEyZUwxRixLIiwic291cmNlc0NvbnRlbnQiOlsiLy8gV2UgdXNlIGZvci1hd2FpdCBwYXR0ZXJuIHF1aXRlIGV4dGVuc2l2ZWx5IGhlcmUgZm9yIGxlZ2l0aW1hdGUgcHVycG9zZXNcbi8qIGVzbGludC1kaXNhYmxlIG5vLWF3YWl0LWluLWxvb3AgKi9cblxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCBBanYgZnJvbSAnYWp2J1xuaW1wb3J0IGFqdktleXdvcmRzIGZyb20gJ2Fqdi1rZXl3b3JkcydcbmltcG9ydCBwaW5vIGZyb20gJ3Bpbm8nXG5pbXBvcnQge1xuICBkZWZhdWx0c0RlZXAgYXMgZGVmYXVsdHMsXG4gIGlzUGxhaW5PYmplY3QsXG59IGZyb20gJ2xvZGFzaCdcbmltcG9ydCBoaWRkZW4gZnJvbSAnbG9jYWwtc2NvcGUvY3JlYXRlJ1xuaW1wb3J0IHsgRnJhbWV3b3JrRXJyb3IgfSBmcm9tICdAYXRsYXMuanMvZXJyb3JzJ1xuaW1wb3J0IHtcbiAgZXhwb3NlLFxuICBkaXNwYXRjaCxcbiAgY29tcG9uZW50LFxuICBta2NvbmZpZyxcbiAgbWtsb2csXG4gIG9wdHJlcXVpcmUsXG59IGZyb20gJy4vcHJpdmF0ZSdcblxuLyoqXG4gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgeW91ciBhcHBsaWNhdGlvbiBhbmQgYWdncmVnYXRlcyBhbGwgY29tcG9uZW50cyB0b2dldGhlclxuICpcbiAqIFlvdSBzaG91bGQgZ2VuZXJhbGx5IGNyZWF0ZSBvbmx5IG9uZSBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGluIGEgcHJvZ3JhbS5cbiAqL1xuY2xhc3MgQXRsYXMge1xuICBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgbG9nOiB7XG4gICAgICBuYW1lOiBwYXRoLmJhc2VuYW1lKHByb2Nlc3MuY3dkKCkpLFxuICAgICAgbGV2ZWw6ICdpbmZvJyxcbiAgICAgIHNlcmlhbGl6ZXJzOiB7XG4gICAgICAgIGVycjogcGluby5zdGRTZXJpYWxpemVycy5lcnIsXG4gICAgICAgIHJlcTogcGluby5zdGRTZXJpYWxpemVycy5yZXEsXG4gICAgICAgIHJlczogcGluby5zdGRTZXJpYWxpemVycy5yZXMsXG4gICAgICB9LFxuICAgIH0sXG5cbiAgICB2YWxpZGF0b3I6IHtcbiAgICAgIGFsbEVycm9yczogdHJ1ZSxcbiAgICAgIHVzZURlZmF1bHRzOiB0cnVlLFxuICAgICAgY29lcmNlVHlwZXM6IHRydWUsXG4gICAgfSxcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXNlIGEgYnJhbmQtbmV3IGF0bGFzIGluc3RhbmNlIGZyb20gdGhlIGdpdmVuIG1vZHVsZSBsb2NhdGlvbnNcbiAgICpcbiAgICogVXNlIHRoaXMgbWV0aG9kIHRvIHF1aWNrbHkgY29uZmlndXJlIEF0bGFzIGluc3RhbmNlIGJ5IHNpbXBseSB0ZWxsaW5nIGl0IHdoZXJlIHlvdXIgY29tcG9uZW50c1xuICAgKiBsaXZlIG9uIHRoZSBmaWxlc3lzdGVtLCBhbmQgQXRsYXMgd2lsbCBsb2FkIHRoZW0gZnJvbSB0aGUgZ2l2ZW4gbW9kdWxlIGxvY2F0aW9ucyBhbmQgYWRkIHRoZW1cbiAgICogdG8gdGhlIEF0bGFzIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgICAgb3B0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICBvcHRpb25zLmVudiAgICAgICAgICAgICAgICAgICBUaGUgZW52aXJvbm1lbnQgdW5kZXIgd2hpY2ggdG8gb3BlcmF0ZVxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgb3B0aW9ucy5yb290ICAgICAgICAgICAgICAgICAgVGhlIHJvb3QgZGlyZWN0b3J5IHRvIHdoaWNoIGFsbCBvdGhlclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgbWVudGlvbmVkIGhlcmUgYXJlIHJlbGF0aXZlXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICBvcHRpb25zLmNvbmZpZz0nY29uZmlnJyAgICAgICBNb2R1bGUgbG9jYXRpb24gZm9yIHRoZSBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICBvcHRpb25zLmhvb2tzPSdob29rcycgICAgICAgICBNb2R1bGUgbG9jYXRpb24gZm9yIHRoZSBob29rc1xuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgb3B0aW9ucy5zZXJ2aWNlcz0nc2VydmljZXMnICAgTW9kdWxlIGxvY2F0aW9uIGZvciB0aGUgc2VydmljZXNcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgIG9wdGlvbnMuYWN0aW9ucz0nYWN0aW9ucycgICAgIE1vZHVsZSBsb2NhdGlvbiBmb3IgdGhlIGFjdGlvbnNcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgIG9wdGlvbnMuYWxpYXNlcz0nYWxpYXNlcycgICAgIE1vZHVsZSBsb2NhdGlvbiBmb3IgdGhlIGFsaWFzZXNcbiAgICogQHJldHVybiAgICB7QXRsYXN9XG4gICAqL1xuICBzdGF0aWMgaW5pdChvcHRpb25zID0ge30pIHtcbiAgICBkZWZhdWx0cyhvcHRpb25zLCB7XG4gICAgICBjb25maWc6ICdjb25maWcnLFxuICAgICAgaG9va3M6ICdob29rcycsXG4gICAgICBzZXJ2aWNlczogJ3NlcnZpY2VzJyxcbiAgICAgIGFjdGlvbnM6ICdhY3Rpb25zJyxcbiAgICAgIGFsaWFzZXM6ICdhbGlhc2VzJyxcbiAgICB9KVxuXG4gICAgY29uc3QgYXRsYXMgPSBuZXcgdGhpcyh7XG4gICAgICBlbnY6IG9wdGlvbnMuZW52LFxuICAgICAgcm9vdDogb3B0aW9ucy5yb290LFxuICAgICAgY29uZmlnOiBvcHRpb25zLmNvbmZpZyxcbiAgICB9KVxuICAgIGNvbnN0IHR5cGVzID0gW1xuICAgICAgJ2hvb2tzJyxcbiAgICAgICdzZXJ2aWNlcycsXG4gICAgICAnYWN0aW9ucycsXG4gICAgICAnYWxpYXNlcycsXG4gICAgXVxuICAgIGNvbnN0IHBhdGhzID0ge31cbiAgICBjb25zdCBtb2R1bGVzID0ge31cblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgcGF0aHNbdHlwZV0gPSBwYXRoLnJlc29sdmUob3B0aW9ucy5yb290LCBvcHRpb25zW3R5cGVdKVxuICAgICAgbW9kdWxlc1t0eXBlXSA9IGF0bGFzLnJlcXVpcmUob3B0aW9uc1t0eXBlXSwgeyBvcHRpb25hbDogdHJ1ZSB9KVxuICAgIH1cblxuICAgIGF0bGFzLmxvZy5kZWJ1Zyh7IHBhdGhzIH0sICdhdGxhczppbml0JylcblxuICAgIHJldHVybiB0aGlzLmJvb3RzdHJhcChhdGxhcywgbW9kdWxlcylcbiAgfVxuXG4gIC8qKlxuICAgKiBCb290c3RyYXAgdGhlIGdpdmVuIEF0bGFzIGluc3RhbmNlIHdpdGggdGhlIHByb3ZpZGVkIG1vZHVsZXNcbiAgICpcbiAgICogVXNlIHRoaXMgbWV0aG9kIHRvIHF1aWNrbHkgc2V0IHVwIHRoZSBnaXZlbiBBdGxhcyBpbnN0YW5jZSB0byB1c2UgdGhlIHByb3ZpZGVkIGNvbXBvbmVudHMuIFRoaXNcbiAgICogaXMgdXNlZnVsIGlmIHlvdSBuZWVkIHRvIGhhdmUgbXVsdGlwbGUgZW50cnkgcG9pbnRzIHRvIHlvdXIgcHJvZ3JhbSBhbmQgc29tZSBlbnRyeXBvaW50cyBzaG91bGRcbiAgICogb25seSB1c2Ugc29tZSBjb21wb25lbnRzIGF2YWlsYWJsZS4gVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCB3aGVuIGltcGxlbWVudGluZyB3b3JrZXJcbiAgICogcHJvY2Vzc2VzIHdoZXJlIHlvdSBvbmx5IG5lZWQgYSBzdWJzZXQgb2YgYWxsIGF2YWlsYWJsZSBjb21wb25lbnRzLiBUaGlzIG1ldGhvZCwgd2hpbGUgbW9yZVxuICAgKiB2ZXJib3NlIGFzIEF0bGFzLmluaXQoKSwgc3RpbGwgZnJlZXMgeW91IGZyb20gbWFudWFsbHkgYWRkaW5nIGFsbCB0aGUgY29tcG9uZW50cyBieSBoYW5kIHdoaWxlXG4gICAqIHByb3ZpZGluZyBncmVhdGVyIGZsZXhpYmlsaXR5IGFzIHRvIHdoaWNoIGNvbXBvbmVudHMgd2lsbCBiZSB1c2VkLlxuICAgKlxuICAgKiBAcGFyYW0gICAgIHtBdGxhc30gICBhdGxhcyAgICAgICAgICAgICAgICAgVGhlIEF0bGFzIGluc3RhbmNlIHRvIGJvb3RzdHJhcFxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICBtb2R1bGVzPXt9ICAgICAgICAgICAgQWxsIHRoZSBtb2R1bGVzIHdoaWNoIHNob3VsZCBiZSBhZGRlZCB0byBBdGxhc1xuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICBtb2R1bGVzLmFjdGlvbnMgICAgICAgQWN0aW9ucyB0byBhZGRcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgbW9kdWxlcy5ob29rcyAgICAgICAgIEhvb2tzIHRvIGFkZFxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICBtb2R1bGVzLnNlcnZpY2VzICAgICAgU2VydmljZXMgdG8gYWRkXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gIG1vZHVsZXMuYWxpYXNlcyAgICAgICBBbGlhc2VzIGZvciBhbGwgdGhlIGNvbXBvbmVudHNcbiAgICogQHJldHVybiAgICB7QXRsYXN9ICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBBdGxhcyBpbnN0YW5jZSB3aXRoIGFsbCBjb21wb25lbnRzIGFkZGVkLCByZWFkeVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgc3RhcnRlZFxuICAgKi9cbiAgc3RhdGljIGJvb3RzdHJhcChhdGxhcywgbW9kdWxlcyA9IHt9KSB7XG4gICAgZGVmYXVsdHMobW9kdWxlcywge1xuICAgICAgLy8gY29uZmlnIG1vZHVsZSBpcyBsb2FkZWQgYnkgQXRsYXMgaW5zdGFuY2UgaXRzZWxmLCBzbyBpdCdzIG9rYXkgdG8gdXNlIGEgc3RyaW5nIGhlcmUgYW5kIGxldFxuICAgICAgLy8gQXRsYXMgbG9hZCBpdFxuICAgICAgY29uZmlnOiAnY29uZmlnJyxcbiAgICAgIC8vIFRoZSBmb2xsb3dpbmcgbW9kdWxlcyBtdXN0IGFscmVhZHkgYmUgcHJvdmlkZWQgZGlyZWN0bHkgYXMgd2Ugd29uJ3QgbG9hZCB0aGVtXG4gICAgICBhY3Rpb25zOiB7fSxcbiAgICAgIGhvb2tzOiB7fSxcbiAgICAgIHNlcnZpY2VzOiB7fSxcbiAgICAgIGFsaWFzZXM6IHtcbiAgICAgICAgYWN0aW9uczoge30sXG4gICAgICAgIGhvb2tzOiB7fSxcbiAgICAgICAgc2VydmljZXM6IHt9LFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgYXRsYXMubG9nLmRlYnVnKHtcbiAgICAgIGVudjogYXRsYXMuZW52LFxuICAgICAgcm9vdDogYXRsYXMucm9vdCxcbiAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgYWN0aW9uczogT2JqZWN0LmtleXMobW9kdWxlcy5hY3Rpb25zKSxcbiAgICAgICAgaG9va3M6IE9iamVjdC5rZXlzKG1vZHVsZXMuaG9va3MpLFxuICAgICAgICBzZXJ2aWNlczogT2JqZWN0LmtleXMobW9kdWxlcy5zZXJ2aWNlcyksXG4gICAgICB9LFxuICAgIH0sICdhdGxhczpib290c3RyYXAnKVxuXG4gICAgLy8gSG9va3NcbiAgICBmb3IgKGNvbnN0IFthbGlhcywgSG9va10gb2YgT2JqZWN0LmVudHJpZXMobW9kdWxlcy5ob29rcykpIHtcbiAgICAgIGNvbnN0IGFsaWFzZXMgPSBtb2R1bGVzLmFsaWFzZXMuaG9va3NbYWxpYXNdXG4gICAgICBhdGxhcy5ob29rKGFsaWFzLCBIb29rLCB7IGFsaWFzZXMgfSlcbiAgICB9XG5cbiAgICAvLyBTZXJ2aWNlc1xuICAgIGZvciAoY29uc3QgW2FsaWFzLCBTZXJ2aWNlXSBvZiBPYmplY3QuZW50cmllcyhtb2R1bGVzLnNlcnZpY2VzKSkge1xuICAgICAgY29uc3QgYWxpYXNlcyA9IG1vZHVsZXMuYWxpYXNlcy5zZXJ2aWNlc1thbGlhc11cbiAgICAgIGF0bGFzLnNlcnZpY2UoYWxpYXMsIFNlcnZpY2UsIHsgYWxpYXNlcyB9KVxuICAgIH1cblxuICAgIC8vIEFjdGlvbnNcbiAgICBmb3IgKGNvbnN0IFthbGlhcywgQWN0aW9uXSBvZiBPYmplY3QuZW50cmllcyhtb2R1bGVzLmFjdGlvbnMpKSB7XG4gICAgICBjb25zdCBhbGlhc2VzID0gbW9kdWxlcy5hbGlhc2VzLmFjdGlvbnNbYWxpYXNdXG4gICAgICBhdGxhcy5hY3Rpb24oYWxpYXMsIEFjdGlvbiwgeyBhbGlhc2VzIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGF0bGFzXG4gIH1cblxuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBlbnZpcm9ubWVudCB1bmRlciB3aGljaCB0aGlzIGluc3RhbmNlIG9wZXJhdGVzXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIE5PREVfRU5WIGZyb20gdGhlIGVudmlyb25tZW50LlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHJldHVybiAgICB7U3RyaW5nfVxuICAgKi9cbiAgZ2V0IGVudigpIHtcbiAgICByZXR1cm4gdGhpczo6aGlkZGVuKCkuZW52XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJvb3QgZm9sZGVyIHdoZXJlIGFsbCBvdGhlciBwYXRocyBzaG91bGQgYmUgcmVsYXRpdmUgdG9cbiAgICpcbiAgICogSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3Ugc2V0IHRoaXMgdG8gdGhlIHByb2plY3QncyByb290IGRpcmVjdG9yeS5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEByZXR1cm4gICAge1N0cmluZ31cbiAgICovXG4gIGdldCByb290KCkge1xuICAgIHJldHVybiB0aGlzOjpoaWRkZW4oKS5yb290XG4gIH1cblxuICAvKipcbiAgICogSXMgdGhpcyBpbnN0YW5jZSBpbiBhIHByZXBhcmVkIHN0YXRlP1xuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHJldHVybiAgICB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBwcmVwYXJlZCgpIHtcbiAgICByZXR1cm4gdGhpczo6aGlkZGVuKCkucHJlcGFyZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBJcyB0aGlzIGluc3RhbmNlIGluIGEgc3RhcnRlZCBzdGF0ZT9cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEByZXR1cm4gICAge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgc3RhcnRlZCgpIHtcbiAgICByZXR1cm4gdGhpczo6aGlkZGVuKCkuc3RhcnRlZFxuICB9XG5cbiAgLyoqXG4gICAqIEF0bGFzIGNvbmZpZ3VyYXRpb24sIGFzIHBhc3NlZCBpbiB0byB0aGUgY29uc3RydWN0b3JcbiAgICpcbiAgICogQHR5cGUgICAge09iamVjdH1cbiAgICovXG4gIGNvbmZpZyA9IHt9XG5cbiAgLyoqXG4gICAqIEFsbCBzZXJ2aWNlcyBhZGRlZCB0byB0aGlzIGluc3RhbmNlXG4gICAqXG4gICAqIEB0eXBlICAgIHtPYmplY3R9XG4gICAqL1xuICBzZXJ2aWNlcyA9IHt9XG5cbiAgLyoqXG4gICAqIEFsbCBhY3Rpb25zIGFkZGVkIHRvIHRoaXMgaW5zdGFuY2VcbiAgICpcbiAgICogQHR5cGUgICAge09iamVjdH1cbiAgICovXG4gIGFjdGlvbnMgPSB7fVxuXG4gIC8qKlxuICAgKiBBbiBpbnN0YW5jZSBvZiBBanYgdXNlZCB0byB2YWxpZGF0ZSBjb21wb25lbnQgY29uZmlndXJhdGlvblxuICAgKiBAdHlwZSAgICB7QWp2fVxuICAgKi9cbiAgdmFsaWRhdG9yID0gbnVsbFxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2VcbiAgICpcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRpb25zICAgICAgICAgICAgIE9wdGlvbnMgZm9yIHRoZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdGlvbnMuY29uZmlnICAgICAgQ29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBpbnN0YW5jZSBhbmQgZm9yIGFsbFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZXMgb3Igb3RoZXIgY29tcG9uZW50cyB3aGljaCB3aWxsIGJlIGFkZGVkIHRvXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5zdGFuY2VcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBvcHRpb25zLnJvb3QgICAgICAgIFRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgaW5zdGFuY2VcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBvcHRpb25zLmVudiAgICAgICAgIFRoZSBlbnZpcm9ubWVudCB1bmRlciB3aGljaCB0aGlzIGluc3RhbmNlIG9wZXJhdGVzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9uZW50cyBtYXkgdXNlIHRoaXMgdmFsdWUgZm9yIHZhcmlvdXMgcHVycG9zZXMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byBOT0RFX0VOVi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIEluaXRpYWxpc2UgcHJpdmF0ZSBzdHVmZlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm9jZXNzLWVudlxuICAgIHRoaXM6OmhpZGRlbigpLmVudiA9IG9wdGlvbnMuZW52IHx8IHByb2Nlc3MuZW52Lk5PREVfRU5WXG4gICAgdGhpczo6aGlkZGVuKCkucm9vdCA9IG9wdGlvbnMucm9vdFxuICAgIHRoaXM6OmhpZGRlbigpLnByZXBhcmVkID0gZmFsc2VcbiAgICB0aGlzOjpoaWRkZW4oKS5zdGFydGVkID0gZmFsc2VcbiAgICB0aGlzOjpoaWRkZW4oKS5jYXRhbG9nID0ge1xuICAgICAgc2VydmljZXM6IG5ldyBNYXAoKSxcbiAgICAgIGhvb2tzOiBuZXcgTWFwKCksXG4gICAgICBhY3Rpb25zOiBuZXcgTWFwKCksXG4gICAgfVxuICAgIHRoaXM6OmhpZGRlbigpLm9ic2VydmVycyA9IG5ldyBNYXAoKVxuXG4gICAgLy8gU2FmZXR5IGNoZWNrc1xuICAgIGlmICghdGhpcy5lbnYpIHtcbiAgICAgIHRocm93IG5ldyBGcmFtZXdvcmtFcnJvcignZW52IG5vdCBzcGVjaWZpZWQgYW5kIE5PREVfRU5WIHdhcyBub3Qgc2V0JylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRoaXMucm9vdCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBGcmFtZXdvcmtFcnJvcihgcm9vdCBtdXN0IGJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkLCBnb3QgJHtvcHRpb25zLnJvb3R9YClcbiAgICB9XG5cbiAgICB0aGlzLmNvbmZpZyA9IHRoaXM6Om1rY29uZmlnKG9wdGlvbnMuY29uZmlnLCB7XG4gICAgICBhdGxhczogQXRsYXMuZGVmYXVsdHMsXG4gICAgICBzZXJ2aWNlczoge30sXG4gICAgICBob29rczoge30sXG4gICAgICBhY3Rpb25zOiB7fSxcbiAgICB9KVxuICAgIC8vIExvZ2dlciDwn4yyXG4gICAgdGhpcy5sb2cgPSB0aGlzOjpta2xvZyh0aGlzLmNvbmZpZy5hdGxhcy5sb2cpXG4gICAgLy8gQWp2IHZhbGlkYXRvciDinJNcbiAgICB0aGlzLnZhbGlkYXRvciA9IG5ldyBBanYodGhpcy5jb25maWcuYXRsYXMudmFsaWRhdG9yKVxuICAgIGFqdktleXdvcmRzKHRoaXMudmFsaWRhdG9yKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVpcmUgYSBtb2R1bGUgYnkgcGF0aCwgcmVsYXRpdmUgdG8gdGhlIHByb2plY3Qgcm9vdFxuICAgKlxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgIGxvY2F0aW9uICAgICAgICAgIFRoZSBtb2R1bGUncyBsb2NhdGlvbiwgcmVsYXRpdmUgdG8gcm9vdFxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdGlvbnM9e30gICAgICAgIE9wdGlvbnNcbiAgICogQHBhcmFtICAgICB7Qm9vbGVhbn0gICBvcHRpb25zLm9wdGlvbmFsICBJZiB0cnVlLCB3aWxsIG5vdCB0aHJvdyBpZiB0aGUgbW9kdWxlIGRvZXMgbm90IGV4aXN0XG4gICAqIEBwYXJhbSAgICAge0Jvb2xlYW59ICAgb3B0aW9ucy5ub3JtYWxpc2UgSWYgdHJ1ZSwgaXQgd2lsbCBwcmVmZXIgdGhlIEVTIG1vZHVsZXMnIGRlZmF1bHQgZXhwb3J0XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlciBuYW1lZCBleHBvcnRzIG9yIHRoZSBDb21tb25KUyBleHBvcnRzXG4gICAqIEBwYXJhbSAgICAge0Jvb2xlYW59ICAgb3B0aW9ucy5hYnNvbHV0ZSAgSWYgdHJ1ZSwgd2lsbCB0cnkgdG8gbG9hZCB0aGUgbW9kdWxlIHdpdGhvdXRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZpbmcgdGhlIG1vZHVsZSdzIG5hbWUgdG8gdGhlIHByb2plY3Qgcm9vdCAoaXRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGxvYWQgdGhlIG1vZHVsZSB1c2luZyBzdGFuZGFyZCBOb2RlJ3MgbWVjaGFuaXNtKVxuICAgKiBAcmV0dXJuICAgIHttaXhlZH0gICAgICAgICAgICAgICAgICAgICAgIFRoZSBtb2R1bGUncyBjb250ZW50c1xuICAgKi9cbiAgcmVxdWlyZShsb2NhdGlvbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbG9jYXRpb24gPSBvcHRpb25zLmFic29sdXRlXG4gICAgICA/IGxvY2F0aW9uXG4gICAgICA6IHBhdGgucmVzb2x2ZSh0aGlzLnJvb3QsIGxvY2F0aW9uKVxuXG4gICAgY29uc3QgbG9hZCA9IG9wdGlvbnMub3B0aW9uYWxcbiAgICAgID8gb3B0cmVxdWlyZVxuICAgICAgOiByZXF1aXJlXG4gICAgY29uc3QgY29udGVudHMgPSBsb2FkKGxvY2F0aW9uKVxuXG4gICAgcmV0dXJuIG9wdGlvbnMubm9ybWFsaXNlICYmIGlzUGxhaW5PYmplY3QoY29udGVudHMuZGVmYXVsdClcbiAgICAgID8gY29udGVudHMuZGVmYXVsdFxuICAgICAgOiBjb250ZW50c1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgc2VydmljZSBpbnRvIHRoaXMgYXRsYXMgYXQgZ2l2ZW4gYWxpYXNcbiAgICpcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBhbGlhcyAgICAgICAgICAgVGhlIGFsaWFzIGZvciB0aGUgc2VydmljZSAtIGl0IHdpbGwgYmUgdXNlZCBmb3IgZXhwb3NpbmdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNlcnZpY2UncyBBUEkgb24gdGhlIGF0bGFzLnNlcnZpY2VzIG9iamVjdCBhbmQgZm9yXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NpbmcgY29uZmlndXJhdGlvbiBkYXRhIHRvIGl0XG4gICAqIEBwYXJhbSAgICAge2NsYXNzfSAgICAgQ29tcG9uZW50ICAgICAgIFRoZSBzZXJ2aWNlIGNsYXNzXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0cyAgICAgICAgICAgIFJ1bnRpbWUgb3B0aW9ucyBmb3IgdGhlIHNlcnZpY2VcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRzLmFsaWFzZXMgICAgQmluZGluZ3MgdG8gb3RoZXIgZGVmaW5lZCBjb21wb25lbnRzXG4gICAqIEByZXR1cm4gICAge3RoaXN9XG4gICAqL1xuICBzZXJ2aWNlKGFsaWFzLCBDb21wb25lbnQsIG9wdHMgPSB7fSkge1xuICAgIHRoaXM6OmNvbXBvbmVudCh7XG4gICAgICB0eXBlOiAnc2VydmljZScsXG4gICAgICBhbGlhcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIGFsaWFzZXM6IG9wdHMuYWxpYXNlcyxcbiAgICB9LCB0aGlzOjpoaWRkZW4oKS5jYXRhbG9nLnNlcnZpY2VzKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGhvb2sgaW50byB0aGlzIGF0bGFzIHVzaW5nIGdpdmVuIGFsaWFzXG4gICAqXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgYWxpYXMgICAgICAgICAgIFRoZSBhbGlhcyBmb3IgdGhlIGhvb2sgLSBpdCB3aWxsIGJlIHVzZWQgZm9yIHBhc3NpbmdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBkYXRhIHRvIGl0XG4gICAqIEBwYXJhbSAgICAge2NsYXNzfSAgICAgQ29tcG9uZW50ICAgICAgIFRoZSBob29rIGNsYXNzXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0cyAgICAgICAgICAgIFJ1bnRpbWUgb3B0aW9ucyBmb3IgdGhlIGhvb2tcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRzLmFsaWFzZXMgICAgQmluZGluZ3MgdG8gb3RoZXIgZGVmaW5lZCBjb21wb25lbnRzXG4gICAqIEByZXR1cm4gICAge3RoaXN9XG4gICAqL1xuICBob29rKGFsaWFzLCBDb21wb25lbnQsIG9wdHMgPSB7fSkge1xuICAgIHRoaXM6OmNvbXBvbmVudCh7XG4gICAgICB0eXBlOiAnaG9vaycsXG4gICAgICBhbGlhcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIGFsaWFzZXM6IG9wdHMuYWxpYXNlcyxcbiAgICB9LCB0aGlzOjpoaWRkZW4oKS5jYXRhbG9nLmhvb2tzKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhbiBhY3Rpb24gaW50byB0aGlzIGF0bGFzIGF0IGdpdmVuIGFsaWFzXG4gICAqXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgYWxpYXMgICAgICAgICAgIFRoZSBhbGlhcyBmb3IgdGhlIGFjdGlvbiAtIGl0IHdpbGwgYmUgdXNlZCBmb3IgZXhwb3NpbmdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFjdGlvbidzIEFQSSBvbiB0aGUgYXRsYXMuYWN0aW9ucyBvYmplY3QgYW5kIGZvclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzaW5nIGNvbmZpZ3VyYXRpb24gZGF0YSB0byBpdFxuICAgKiBAcGFyYW0gICAgIHtjbGFzc30gICAgIENvbXBvbmVudCAgICAgICBUaGUgYWN0aW9uIGNsYXNzXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0cyAgICAgICAgICAgIFJ1bnRpbWUgb3B0aW9ucyBmb3IgdGhlIGFjdGlvblxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdHMuYWxpYXNlcyAgICBCaW5kaW5ncyB0byBvdGhlciBkZWZpbmVkIGNvbXBvbmVudHNcbiAgICogQHJldHVybiAgICB7dGhpc31cbiAgICovXG4gIGFjdGlvbihhbGlhcywgQ29tcG9uZW50LCBvcHRzID0ge30pIHtcbiAgICB0aGlzOjpjb21wb25lbnQoe1xuICAgICAgdHlwZTogJ2FjdGlvbicsXG4gICAgICBhbGlhcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIGFsaWFzZXM6IG9wdHMuYWxpYXNlcyxcbiAgICB9LCB0aGlzOjpoaWRkZW4oKS5jYXRhbG9nLmFjdGlvbnMpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmUgYWxsIHNlcnZpY2VzIGFuZCBob29rcyBmb3IgdXNlXG4gICAqXG4gICAqIEdlbmVyYWxseSB5b3Ugc2hvdWxkIHVzZSBgYXRsYXMuc3RhcnQoKWAgaW5zdGVhZCB0byBnZXQgeW91ciBpbnN0YW5jZSB1cCBhbmQgcnVubmluZy4gSG93ZXZlcixcbiAgICogc29tZXRpbWVzIGl0IGlzIG5lY2Vzc2FyeSB0byBnZXQgYWxsIHRoZSBzZXJ2aWNlcyBpbnRvIGEgXCJnZXQtcmVhZHlcIiBzdGF0ZSBiZWZvcmUgdGhleSBzdGFydFxuICAgKiBjb25uZWN0aW5nIHRvIHJlbW90ZSByZXNvdXJjZXMgb3IgZG9pbmcgYW55IGludGVuc2l2ZSBJL08gb3BlcmF0aW9ucy5cbiAgICpcbiAgICogQHJldHVybiAgICB7UHJvbWlzZTx0aGlzPn1cbiAgICovXG4gIGFzeW5jIHByZXBhcmUoKSB7XG4gICAgaWYgKHRoaXMucHJlcGFyZWQpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgY29uc3QgeyBzZXJ2aWNlcywgYWN0aW9ucywgaG9va3MgfSA9IHRoaXM6OmhpZGRlbigpLmNhdGFsb2dcbiAgICBjb25zdCBvYnNlcnZlcnMgPSB0aGlzOjpoaWRkZW4oKS5vYnNlcnZlcnNcblxuICAgIGZvciAoY29uc3QgW2FsaWFzLCBjb250YWluZXJdIG9mIGhvb2tzKSB7XG4gICAgICBpZiAoIWNvbnRhaW5lci5Db21wb25lbnQub2JzZXJ2ZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEZyYW1ld29ya0Vycm9yKGBIb29rICR7YWxpYXN9IGRvZXMgbm90IGhhdmUgc3RhdGljICdvYnNlcnZlcycgcHJvcGVydHlgKVxuICAgICAgfVxuXG4gICAgICAvLyBQcmVwYXJlIG9ic2VydmVycyBvZiBBdGxhcyBpdHNlbGZcbiAgICAgIGlmIChjb250YWluZXIuQ29tcG9uZW50Lm9ic2VydmVzID09PSAnYXRsYXMnKSB7XG4gICAgICAgIG9ic2VydmVycy5zZXQoYWxpYXMsIGNvbnRhaW5lcilcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQcmVwYXJlIGhvb2tzXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoQXJyYXkuZnJvbShob29rcykubWFwKChbLCBjb250YWluZXJdKSA9PlxuICAgICAgY29udGFpbmVyLnByZXBhcmUoKSkpXG5cbiAgICAvLyBQcmVwYXJlIGFjdGlvbnMsIGluIHBhcmFsbGVsIPCfkqpcbiAgICBhd2FpdCBQcm9taXNlLmFsbChBcnJheS5mcm9tKGFjdGlvbnMpLm1hcChhc3luYyAoW2FsaWFzLCBjb250YWluZXJdKSA9PlxuICAgICAgdGhpczo6ZXhwb3NlKCdhY3Rpb25zJywgYWxpYXMsIGF3YWl0IGNvbnRhaW5lci5wcmVwYXJlKHsgaG9va3MgfSkpKSlcblxuICAgIC8vIFByZXBhcmUgYWxsIHNlcnZpY2VzLCBpbiBwYXJhbGxlbCDwn5KqXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoQXJyYXkuZnJvbShzZXJ2aWNlcykubWFwKGFzeW5jIChbYWxpYXMsIGNvbnRhaW5lcl0pID0+XG4gICAgICB0aGlzOjpleHBvc2UoJ3NlcnZpY2VzJywgYWxpYXMsIGF3YWl0IGNvbnRhaW5lci5wcmVwYXJlKHsgaG9va3MgfSkpKSlcblxuICAgIHRoaXM6OmhpZGRlbigpLnByZXBhcmVkID0gdHJ1ZVxuICAgIGF3YWl0IG9ic2VydmVyczo6ZGlzcGF0Y2goJ2FmdGVyUHJlcGFyZScsIHRoaXMpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGFsbCBzZXJ2aWNlc1xuICAgKlxuICAgKiBAcmV0dXJuICAgIHtQcm9taXNlPHRoaXM+fVxuICAgKi9cbiAgYXN5bmMgc3RhcnQoKSB7XG4gICAgY29uc3QgeyBhY3Rpb25zLCBzZXJ2aWNlcywgaG9va3MgfSA9IHRoaXM6OmhpZGRlbigpLmNhdGFsb2dcbiAgICBjb25zdCBvYnNlcnZlcnMgPSB0aGlzOjpoaWRkZW4oKS5vYnNlcnZlcnNcblxuICAgIGF3YWl0IHRoaXMucHJlcGFyZSgpXG4gICAgYXdhaXQgb2JzZXJ2ZXJzOjpkaXNwYXRjaCgnYmVmb3JlU3RhcnQnLCB0aGlzKVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgLi4uQXJyYXkuZnJvbShob29rcyksXG4gICAgICAuLi5BcnJheS5mcm9tKGFjdGlvbnMpLFxuICAgIF0ubWFwKChbLCBjb250YWluZXJdKSA9PiBjb250YWluZXIuc3RhcnQoeyBob29rcyB9KSkpXG5cbiAgICAvLyBTdGFydCBhbGwgc2VydmljZXMsIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgYWRkZWQgdG8gdGhlIGluc3RhbmNlIPCfkqpcbiAgICAvLyBPcmRlcmluZyBpcyBpbXBvcnRhbnQgaGVyZSEgU29tZSBzZXJ2aWNlcyBzaG91bGQgYmUgc3RhcnRlZCBhcyB0aGUgbGFzdCBvbmVzIGJlY2F1c2UgdGhleVxuICAgIC8vIGV4cG9zZSBzb21lIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIG91dHNpZGUgd29ybGQgYW5kIHN0YXJ0aW5nIHRob3NlIGJlZm9yZSBpZS4gYSBkYXRhYmFzZVxuICAgIC8vIHNlcnZpY2UgaXMgc3RhcnRlZCBtaWdodCBicmVhayBzdHVmZiFcbiAgICBmb3IgKGNvbnN0IFthbGlhcywgY29udGFpbmVyXSBvZiBzZXJ2aWNlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY29udGFpbmVyLnN0YXJ0KHsgaW5zdGFuY2U6IHRoaXMuc2VydmljZXNbYWxpYXNdLCBob29rcyB9KVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIFJvbGwgYmFja1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3AoKVxuICAgICAgICAgIC8vIFNoaXQganVzdCBnb3Qgc2VyaW91cyDwn5ixXG4gICAgICAgICAgLmNhdGNoKHN0b3BFcnIgPT4gdm9pZCB0aGlzLmxvZy5mYXRhbCh7IGVycjogc3RvcEVyciB9LCAnYXRsYXM6c3RhcnQ6cm9sbGJhY2stZmFpbHVyZScpKVxuXG4gICAgICAgIC8vIFJlLXRocm93IHRoZSBvcmlnaW5hbCBlcnJvciB3aGljaCBjYXVzZWQgQXRsYXMgdG8gZmFpbCB0byBzdGFydFxuICAgICAgICB0aHJvdyBlcnJcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzOjpoaWRkZW4oKS5zdGFydGVkID0gdHJ1ZVxuICAgIGF3YWl0IG9ic2VydmVyczo6ZGlzcGF0Y2goJ2FmdGVyU3RhcnQnLCB0aGlzKVxuICAgIHRoaXMubG9nLmluZm8oJ2F0bGFzOnJlYWR5JylcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogU3RvcCBhbGwgc2VydmljZXMsIHVucmVnaXN0ZXIgYWxsIGFjdGlvbnMgYW5kIGhvb2tzIGFuZCB1bnB1Ymxpc2ggYW55IEFQSXMgZXhwb3NlZCBieSB0aGVtXG4gICAqXG4gICAqIFRoaXMgcHV0cyB0aGUgd2hvbGUgYXBwbGljYXRpb24gaW50byBhIHN0YXRlIGFzIGl0IHdhcyBiZWZvcmUgYGF0bGFzLnByZXBhcmUoKWAgYW5kL29yXG4gICAqIGBhdGxhcy5zdGFydCgpYCB3YXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcmV0dXJuICAgIHtQcm9taXNlPHRoaXM+fVxuICAgKi9cbiAgYXN5bmMgc3RvcCgpIHtcbiAgICBjb25zdCB7IHNlcnZpY2VzLCBhY3Rpb25zLCBob29rcyB9ID0gdGhpczo6aGlkZGVuKCkuY2F0YWxvZ1xuICAgIGNvbnN0IG9ic2VydmVycyA9IHRoaXM6OmhpZGRlbigpLm9ic2VydmVyc1xuXG4gICAgYXdhaXQgb2JzZXJ2ZXJzOjpkaXNwYXRjaCgnYmVmb3JlU3RvcCcsIHRoaXMpXG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAuLi5BcnJheS5mcm9tKGhvb2tzKSxcbiAgICAgIC4uLkFycmF5LmZyb20oYWN0aW9ucyksXG4gICAgXS5tYXAoKFssIGNvbnRhaW5lcl0pID0+IGNvbnRhaW5lci5zdG9wKCkpKVxuXG4gICAgbGV0IGVycm9yXG5cbiAgICAvLyBTdG9wIGFsbCBzZXJ2aWNlcywgaW4gdGhlIHJldmVyc2Ugb3JkZXIgdGhleSB3ZXJlIGFkZGVkIHRvIHRoZSBpbnN0YW5jZSDwn5KqXG4gICAgLy8gVGhpcyB3aWxsIG1ha2Ugc3VyZSB0aGUgbW9zdCBpbXBvcnRhbnQgc2VydmljZXMgYXJlIHN0b3BwZWQgZmlyc3QuXG4gICAgZm9yIChjb25zdCBbYWxpYXMsIGNvbnRhaW5lcl0gb2YgQXJyYXkuZnJvbShzZXJ2aWNlcykucmV2ZXJzZSgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuc2VydmljZXNbYWxpYXNdXG4gICAgICAgIGRlbGV0ZSB0aGlzLnNlcnZpY2VzW2FsaWFzXVxuICAgICAgICBhd2FpdCBjb250YWluZXIuc3RvcCh7IGluc3RhbmNlLCBob29rcyB9KVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycm9yID0gZXJyXG4gICAgICAgIC8vIExlYXZlIHRoaXMgc2VydmljZSBhcyBpcyBhbmQgbW92ZSB0byB0aGUgbmV4dCBzZXJ2aWNlLiBXZSBwcm9iYWJseSBjYW5ub3QgZG8gYW55dGhpbmcgdG9cbiAgICAgICAgLy8gcHJvcGVybHkgc3RvcCB0aGlzIHNlcnZpY2UuIPCfmYFcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBVbnJlZ2lzdGVyIGFjdGlvbnNcbiAgICBmb3IgKGNvbnN0IFthbGlhc10gb2YgYWN0aW9ucykge1xuICAgICAgZGVsZXRlIHRoaXMuYWN0aW9uc1thbGlhc11cbiAgICB9XG5cbiAgICB0aGlzOjpoaWRkZW4oKS5zdGFydGVkID0gZmFsc2VcbiAgICB0aGlzOjpoaWRkZW4oKS5wcmVwYXJlZCA9IGZhbHNlXG5cbiAgICBhd2FpdCBob29rczo6ZGlzcGF0Y2goJ2FmdGVyU3RvcCcsIG51bGwpXG4gICAgdGhpcy5sb2cuaW5mbygnYXRsYXM6c3RvcHBlZCcpXG5cbiAgICAvLyBJZiB0aGVyZSB3YXMgYW4gZXJyb3IgdGhyb3duIGluIG9uZSBvZiB0aGUgc2VydmljZXMgZHVyaW5nIC5zdG9wKCksIHJlLXRocm93IGl0IG5vd1xuICAgIGlmIChlcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEF0bGFzXG4iXX0=

@@ -6,8 +6,2 @@ "use strict";

});
Object.defineProperty(exports, "Atlas", {
enumerable: true,
get: function () {
return _atlas.default;
}
});
Object.defineProperty(exports, "Action", {

@@ -31,6 +25,10 @@ enumerable: true,

});
Object.defineProperty(exports, "Atlas", {
enumerable: true,
get: function () {
return _atlas.default;
}
});
exports.errors = void 0;
var _atlas = _interopRequireDefault(require("./atlas"));
var _action = _interopRequireDefault(require("@atlas.js/action"));

@@ -42,9 +40,9 @@

var errors = _interopRequireWildcard(require("@atlas.js/errors"));
var errors = _interopRequireDefault(require("@atlas.js/errors"));
exports.errors = errors;
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
var _atlas = _interopRequireDefault(require("./atlas"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4Lm1qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0EiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQXRsYXMgZnJvbSAnLi9hdGxhcydcbmltcG9ydCBBY3Rpb24gZnJvbSAnQGF0bGFzLmpzL2FjdGlvbidcbmltcG9ydCBIb29rIGZyb20gJ0BhdGxhcy5qcy9ob29rJ1xuaW1wb3J0IFNlcnZpY2UgZnJvbSAnQGF0bGFzLmpzL3NlcnZpY2UnXG5pbXBvcnQgKiBhcyBlcnJvcnMgZnJvbSAnQGF0bGFzLmpzL2Vycm9ycydcblxuZXhwb3J0IHtcbiAgQXRsYXMsXG4gIEFjdGlvbixcbiAgU2VydmljZSxcbiAgSG9vayxcbiAgZXJyb3JzLFxufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4Lm1qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBY3Rpb24gZnJvbSAnQGF0bGFzLmpzL2FjdGlvbidcbmltcG9ydCBIb29rIGZyb20gJ0BhdGxhcy5qcy9ob29rJ1xuaW1wb3J0IFNlcnZpY2UgZnJvbSAnQGF0bGFzLmpzL3NlcnZpY2UnXG5pbXBvcnQgKiBhcyBlcnJvcnMgZnJvbSAnQGF0bGFzLmpzL2Vycm9ycydcbmltcG9ydCBBdGxhcyBmcm9tICcuL2F0bGFzJ1xuXG5leHBvcnQge1xuICBBdGxhcyxcbiAgQWN0aW9uLFxuICBTZXJ2aWNlLFxuICBIb29rLFxuICBlcnJvcnMsXG59XG4iXX0=

@@ -14,2 +14,4 @@ "use strict";

var _dispatch = _interopRequireDefault(require("./dispatch"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

@@ -21,8 +23,3 @@

Object.defineProperty(this, "started", {
configurable: true,
enumerable: true,
writable: true,
value: false
});
this.started = false;
this.type = info.type;

@@ -40,4 +37,15 @@ this.alias = info.alias;

provided: Object.keys(this.aliases),
required: this.Component.requires || []
required: [...(this.Component.requires || [])]
};
if (this.type === 'hook') {
if (typeof this.Component.observes === 'string') {
aliases.required.push(this.Component.observes);
}
if (this.Component.observes === 'atlas') {
aliases.provided.push('atlas');
}
}
const missing = (0, _lodash.difference)(aliases.required, aliases.provided);

@@ -54,2 +62,9 @@ const extra = (0, _lodash.difference)(aliases.provided, aliases.required);

const observers = new Map();
const config = (0, _lodash.defaultsDeep)(info.config, this.Component.defaults);
if (!info.validator.validate(info.Component.config, config)) {
throw new _errors.ValidationError(info.validator.errors);
}
atlas.log.trace({

@@ -62,13 +77,119 @@ component: this.alias,

atlas,
config,
log: atlas.log.child({
[this.type]: this.alias
}),
config: (0, _lodash.defaultsDeep)(info.config, this.Component.defaults),
component: resolve
component: resolve,
dispatch: _dispatch.default.bind(observers)
});
(_context = this.component, _create.default).call(_context).aliases = this.aliases;
(_context = this.component, _create.default).call(_context).observers = observers;
}
async prepare() {
this.component.log.trace('prepare:before');
switch (this.type) {
case 'service':
{
const instance = await this.component.prepare();
this.component.log.trace('prepare:after');
return instance;
}
case 'hook':
case 'action':
default:
this.component.log.trace('prepare:after');
return this.component;
}
}
async start(opts = {}) {
var _context2;
if (this.started) {
return this.component;
}
this.component.log.trace('start:before');
mkobservers.call(this, {
hooks: opts.hooks
});
const observers = (_context2 = this.component, _create.default).call(_context2).observers;
switch (this.type) {
case 'service':
await (async () => {
await _dispatch.default.call(observers, 'beforeStart', opts.instance);
await this.component.start(opts.instance);
await _dispatch.default.call(observers, 'afterStart', opts.instance);
})().catch(err => {
this.component.log.error({
err
}, 'start:failure');
throw err;
});
break;
case 'hook':
case 'action':
default:
break;
}
this.started = true;
return this.component;
}
async stop(opts = {}) {
var _context3;
if (!this.started) {
return;
}
this.component.log.trace('stop:before');
const observers = (_context3 = this.component, _create.default).call(_context3).observers;
switch (this.type) {
case 'service':
await (async () => {
await _dispatch.default.call(observers, 'beforeStop', opts.instance);
await this.component.stop(opts.instance);
await _dispatch.default.call(observers, 'afterStop', null);
})().catch(err => {
this.component.log.error({
err
}, 'stop:failure');
this.started = true;
throw err;
});
break;
case 'hook':
case 'action':
default:
break;
}
this.started = false;
}
}
function mkobservers({
hooks
}) {
for (const [alias, container] of hooks) {
const target = (container.aliases || {})[container.Component.observes];
if (this.alias === target) {
var _context4;
(_context4 = this.component, _create.default).call(_context4).observers.set(alias, container);
}
}
}
function resolve(name) {

@@ -85,3 +206,3 @@ const resolved = _create.default.call(this).aliases[name];

if (!component) {
throw new _errors.FrameworkError(`Unable to find ${type} ${resolved} aliased as ${name}`);
throw new _errors.FrameworkError(`Unable to find ${type}:${resolved} aliased as ${name}`);
}

@@ -94,2 +215,2 @@

exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudC1jb250YWluZXIubWpzIl0sIm5hbWVzIjpbIkNvbXBvbmVudENvbnRhaW5lciIsImNvbnN0cnVjdG9yIiwiaW5mbyIsImF0bGFzIiwidHlwZSIsImFsaWFzIiwiYWxpYXNlcyIsIkNvbXBvbmVudCIsInByb3ZpZGVkIiwiT2JqZWN0Iiwia2V5cyIsInJlcXVpcmVkIiwicmVxdWlyZXMiLCJtaXNzaW5nIiwiZXh0cmEiLCJsZW5ndGgiLCJqb2luIiwibG9nIiwidHJhY2UiLCJjb21wb25lbnQiLCJjb25maWciLCJkZWZhdWx0cyIsImNoaWxkIiwicmVzb2x2ZSIsIm5hbWUiLCJyZXNvbHZlZCIsInNwbGl0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7QUFVQSxNQUFNQSxrQkFBTixDQUF5QjtBQW1CdkJDLGNBQVlDLElBQVosRUFBa0JDLEtBQWxCLEVBQXlCO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxhQWRmO0FBY2U7QUFDdkIsU0FBS0MsSUFBTCxHQUFZRixLQUFLRSxJQUFqQjtBQUNBLFNBQUtDLEtBQUwsR0FBYUgsS0FBS0csS0FBbEI7QUFDQSxTQUFLQyxPQUFMLEdBQWVKLEtBQUtJLE9BQUwsSUFBZ0IsRUFBL0I7QUFDQSxTQUFLQyxTQUFMLEdBQWlCTCxLQUFLSyxTQUF0Qjs7QUFFQSxRQUFJLE9BQU8sS0FBS0EsU0FBWixLQUEwQixVQUE5QixFQUEwQztBQUN4QyxZQUFNSCxPQUFPLE9BQU8sS0FBS0csU0FBekI7QUFDQSxZQUFNLDJCQUFvQixhQUFZLEtBQUtILElBQUssSUFBRyxLQUFLQyxLQUFNLHVCQUFzQkQsSUFBSyxFQUFuRixDQUFOO0FBQ0Q7O0FBR0QsVUFBTUUsVUFBVTtBQUNkRSxnQkFBVUMsT0FBT0MsSUFBUCxDQUFZLEtBQUtKLE9BQWpCLENBREk7QUFFZEssZ0JBQVUsS0FBS0osU0FBTCxDQUFlSyxRQUFmLElBQTJCO0FBRnZCLEtBQWhCO0FBSUEsVUFBTUMsVUFBVSx3QkFBV1AsUUFBUUssUUFBbkIsRUFBNkJMLFFBQVFFLFFBQXJDLENBQWhCO0FBQ0EsVUFBTU0sUUFBUSx3QkFBV1IsUUFBUUUsUUFBbkIsRUFBNkJGLFFBQVFLLFFBQXJDLENBQWQ7O0FBRUEsUUFBSUUsUUFBUUUsTUFBWixFQUFvQjtBQUNsQixZQUFNLDJCQUFvQixpQ0FBZ0MsS0FBS1YsS0FBTSxLQUFJUSxRQUFRRyxJQUFSLENBQWEsSUFBYixDQUFtQixFQUF0RixDQUFOO0FBQ0Q7O0FBRUQsUUFBSUYsTUFBTUMsTUFBVixFQUFrQjtBQUNoQixZQUFNLDJCQUFvQixrQ0FBaUMsS0FBS1YsS0FBTSxLQUFJUyxNQUFNRSxJQUFOLENBQVcsSUFBWCxDQUFpQixFQUFyRixDQUFOO0FBQ0Q7O0FBRURiLFVBQU1jLEdBQU4sQ0FBVUMsS0FBVixDQUFnQjtBQUNkQyxpQkFBVyxLQUFLZCxLQURGO0FBRWRlLGNBQVFsQixLQUFLa0IsTUFGQztBQUdkQyxnQkFBVSxLQUFLZCxTQUFMLENBQWVjO0FBSFgsS0FBaEIsRUFJRyxrQkFKSDtBQU1BLFNBQUtGLFNBQUwsR0FBaUIsSUFBSSxLQUFLWixTQUFULENBQW1CO0FBQ2xDSixXQURrQztBQUVsQ2MsV0FBS2QsTUFBTWMsR0FBTixDQUFVSyxLQUFWLENBQWdCO0FBQUUsU0FBQyxLQUFLbEIsSUFBTixHQUFhLEtBQUtDO0FBQXBCLE9BQWhCLENBRjZCO0FBR2xDZSxjQUFRLDBCQUFTbEIsS0FBS2tCLE1BQWQsRUFBc0IsS0FBS2IsU0FBTCxDQUFlYyxRQUFyQyxDQUgwQjtBQUlsQ0YsaUJBQVdJO0FBSnVCLEtBQW5CLENBQWpCO0FBUUEscUJBQUtKLFNBQUwsa0NBQXlCYixPQUF6QixHQUFtQyxLQUFLQSxPQUF4QztBQUNEOztBQTdEc0I7O0FBZ0V6QixTQUFTaUIsT0FBVCxDQUFpQkMsSUFBakIsRUFBdUI7QUFDckIsUUFBTUMsV0FBVywyQkFBZW5CLE9BQWYsQ0FBdUJrQixJQUF2QixDQUFqQjs7QUFFQSxNQUFJLENBQUNDLFFBQUwsRUFBZTtBQUNiLFVBQU0sMkJBQW9CLGFBQVlELElBQUssY0FBckMsQ0FBTjtBQUNEOztBQUVELFFBQU0sQ0FBQ3BCLElBQUQsSUFBU29CLEtBQUtFLEtBQUwsQ0FBVyxHQUFYLENBQWY7QUFFQSxRQUFNUCxZQUFZLEtBQUtoQixLQUFMLENBQVksR0FBRUMsSUFBSyxHQUFuQixFQUF1QnFCLFFBQXZCLENBQWxCOztBQUVBLE1BQUksQ0FBQ04sU0FBTCxFQUFnQjtBQUNkLFVBQU0sMkJBQW9CLGtCQUFpQmYsSUFBSyxJQUFHcUIsUUFBUyxlQUFjRCxJQUFLLEVBQXpFLENBQU47QUFDRDs7QUFFRCxTQUFPTCxTQUFQO0FBQ0Q7O2VBRWNuQixrQiIsImZpbGUiOiJjb21wb25lbnQtY29udGFpbmVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGhpZGRlbiBmcm9tICdsb2NhbC1zY29wZS9jcmVhdGUnXG5pbXBvcnQgeyBGcmFtZXdvcmtFcnJvciB9IGZyb20gJ0BhdGxhcy5qcy9lcnJvcnMnXG5pbXBvcnQge1xuICBkZWZhdWx0c0RlZXAgYXMgZGVmYXVsdHMsXG4gIGRpZmZlcmVuY2UsXG59IGZyb20gJ2xvZGFzaCdcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGhvbGRzIGFuZCBtYW5hZ2VzIGEgY29tcG9uZW50XG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgQ29tcG9uZW50Q29udGFpbmVyIHtcbiAgLyoqXG4gICAqIElzIHRoaXMgY29tcG9uZW50IGFscmVhZHkgc3RhcnRlZD9cbiAgICogQHR5cGUgICAge0Jvb2xlYW59XG4gICAqL1xuICBzdGFydGVkID0gZmFsc2VcblxuICAvKipcbiAgICogQ3JlYXRlIG5ldyBjb250YWluZXIgZm9yIGEgY29tcG9uZW50XG4gICAqXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgICAgIGluZm8gICAgICAgICAgICAgIENvbXBvbmVudCBpbmZvcm1hdGlvblxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgICBpbmZvLnR5cGUgICAgICAgICBUaGUgY29tcG9uZW50J3MgdHlwZSAoc2VydmljZSwgaG9vaywgYWN0aW9uKVxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgICBpbmZvLmFsaWFzICAgICAgICBUaGUgY29tcG9uZW50J3MgdXNlci1zcGVjaWZpZWQgbmFtZS9hbGlhc1xuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgICAgICBpbmZvLmFsaWFzZXMgICAgICBCaW5kaW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIHVzZXIgdG8gbG9jYXRlIG90aGVyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHNcbiAgICogQHBhcmFtICAgICB7Q2xhc3N9ICAgICAgICAgaW5mby5Db21wb25lbnQgICAgVGhlIGNvbXBvbmVudCBjbGFzc1xuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgICAgICBpbmZvLmNvbmZpZyAgICAgICBUaGUgY29tcG9uZW50J3MgdXNlci1zcGVjaWZpZWQgY29uZmlndXJhdGlvblxuICAgKiBAcGFyYW0gICAgIHtBdGxhc30gICAgICAgICBhdGxhcyAgICAgICAgICAgICBUaGUgQXRsYXMgaW5zdGFuY2VcbiAgICovXG4gIGNvbnN0cnVjdG9yKGluZm8sIGF0bGFzKSB7XG4gICAgdGhpcy50eXBlID0gaW5mby50eXBlXG4gICAgdGhpcy5hbGlhcyA9IGluZm8uYWxpYXNcbiAgICB0aGlzLmFsaWFzZXMgPSBpbmZvLmFsaWFzZXMgfHwge31cbiAgICB0aGlzLkNvbXBvbmVudCA9IGluZm8uQ29tcG9uZW50XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuQ29tcG9uZW50ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCB0eXBlID0gdHlwZW9mIHRoaXMuQ29tcG9uZW50XG4gICAgICB0aHJvdyBuZXcgRnJhbWV3b3JrRXJyb3IoYENvbXBvbmVudCAke3RoaXMudHlwZX06JHt0aGlzLmFsaWFzfSBtdXN0IGJlIGNsYXNzLCBub3QgJHt0eXBlfWApXG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGNvbXBvbmVudCByZWNlaXZlZCBhbGwgdGhlIGFsaWFzZXMgaXQgcmVxdWlyZXNcbiAgICBjb25zdCBhbGlhc2VzID0ge1xuICAgICAgcHJvdmlkZWQ6IE9iamVjdC5rZXlzKHRoaXMuYWxpYXNlcyksXG4gICAgICByZXF1aXJlZDogdGhpcy5Db21wb25lbnQucmVxdWlyZXMgfHwgW10sXG4gICAgfVxuICAgIGNvbnN0IG1pc3NpbmcgPSBkaWZmZXJlbmNlKGFsaWFzZXMucmVxdWlyZWQsIGFsaWFzZXMucHJvdmlkZWQpXG4gICAgY29uc3QgZXh0cmEgPSBkaWZmZXJlbmNlKGFsaWFzZXMucHJvdmlkZWQsIGFsaWFzZXMucmVxdWlyZWQpXG5cbiAgICBpZiAobWlzc2luZy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBGcmFtZXdvcmtFcnJvcihgTWlzc2luZyBhbGlhc2VzIGZvciBjb21wb25lbnQgJHt0aGlzLmFsaWFzfTogJHttaXNzaW5nLmpvaW4oJywgJyl9YClcbiAgICB9XG5cbiAgICBpZiAoZXh0cmEubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRnJhbWV3b3JrRXJyb3IoYFVubmVlZGVkIGFsaWFzZXMgZm9yIGNvbXBvbmVudCAke3RoaXMuYWxpYXN9OiAke2V4dHJhLmpvaW4oJywgJyl9YClcbiAgICB9XG5cbiAgICBhdGxhcy5sb2cudHJhY2Uoe1xuICAgICAgY29tcG9uZW50OiB0aGlzLmFsaWFzLFxuICAgICAgY29uZmlnOiBpbmZvLmNvbmZpZyxcbiAgICAgIGRlZmF1bHRzOiB0aGlzLkNvbXBvbmVudC5kZWZhdWx0cyxcbiAgICB9LCAnY29tcG9uZW50OmNvbmZpZycpXG5cbiAgICB0aGlzLmNvbXBvbmVudCA9IG5ldyB0aGlzLkNvbXBvbmVudCh7XG4gICAgICBhdGxhcyxcbiAgICAgIGxvZzogYXRsYXMubG9nLmNoaWxkKHsgW3RoaXMudHlwZV06IHRoaXMuYWxpYXMgfSksXG4gICAgICBjb25maWc6IGRlZmF1bHRzKGluZm8uY29uZmlnLCB0aGlzLkNvbXBvbmVudC5kZWZhdWx0cyksXG4gICAgICBjb21wb25lbnQ6IHJlc29sdmUsXG4gICAgfSlcblxuICAgIC8vIFNhdmUgdGhlIGFsaWFzZXMgZm9yIHRoaXMgY29tcG9uZW50XG4gICAgdGhpcy5jb21wb25lbnQ6OmhpZGRlbigpLmFsaWFzZXMgPSB0aGlzLmFsaWFzZXNcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlKG5hbWUpIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSB0aGlzOjpoaWRkZW4oKS5hbGlhc2VzW25hbWVdXG5cbiAgaWYgKCFyZXNvbHZlZCkge1xuICAgIHRocm93IG5ldyBGcmFtZXdvcmtFcnJvcihgQWxpYXMgZm9yICR7bmFtZX0gbm90IGRlZmluZWRgKVxuICB9XG5cbiAgY29uc3QgW3R5cGVdID0gbmFtZS5zcGxpdCgnOicpXG4gIC8vIFVzZSBhIHBsdXJhbCBmb3JtIG9mIHRoZSBjb21wb25lbnQgdHlwZSwgaWUuLCBhY3Rpb24gLT4gYWN0aW9ucywgc2VydmljZSAtPiBzZXJ2aWNlcyBldGMuXG4gIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuYXRsYXNbYCR7dHlwZX1zYF1bcmVzb2x2ZWRdXG5cbiAgaWYgKCFjb21wb25lbnQpIHtcbiAgICB0aHJvdyBuZXcgRnJhbWV3b3JrRXJyb3IoYFVuYWJsZSB0byBmaW5kICR7dHlwZX0gJHtyZXNvbHZlZH0gYWxpYXNlZCBhcyAke25hbWV9YClcbiAgfVxuXG4gIHJldHVybiBjb21wb25lbnRcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50Q29udGFpbmVyXG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudC1jb250YWluZXIubWpzIl0sIm5hbWVzIjpbIkNvbXBvbmVudENvbnRhaW5lciIsImNvbnN0cnVjdG9yIiwiaW5mbyIsImF0bGFzIiwic3RhcnRlZCIsInR5cGUiLCJhbGlhcyIsImFsaWFzZXMiLCJDb21wb25lbnQiLCJGcmFtZXdvcmtFcnJvciIsInByb3ZpZGVkIiwiT2JqZWN0Iiwia2V5cyIsInJlcXVpcmVkIiwicmVxdWlyZXMiLCJvYnNlcnZlcyIsInB1c2giLCJtaXNzaW5nIiwiZXh0cmEiLCJsZW5ndGgiLCJqb2luIiwib2JzZXJ2ZXJzIiwiTWFwIiwiY29uZmlnIiwiZGVmYXVsdHMiLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0ZSIsIlZhbGlkYXRpb25FcnJvciIsImVycm9ycyIsImxvZyIsInRyYWNlIiwiY29tcG9uZW50IiwiY2hpbGQiLCJyZXNvbHZlIiwiZGlzcGF0Y2giLCJoaWRkZW4iLCJwcmVwYXJlIiwiaW5zdGFuY2UiLCJzdGFydCIsIm9wdHMiLCJta29ic2VydmVycyIsImhvb2tzIiwiY2F0Y2giLCJlcnIiLCJlcnJvciIsInN0b3AiLCJjb250YWluZXIiLCJ0YXJnZXQiLCJzZXQiLCJuYW1lIiwicmVzb2x2ZWQiLCJzcGxpdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUlBOztBQUlBOzs7O0FBT0EsTUFBTUEsa0JBQU4sQ0FBeUI7QUFvQnZCQyxjQUFZQyxJQUFaLEVBQWtCQyxLQUFsQixFQUF5QjtBQUFBOztBQUFBLFNBZnpCQyxPQWV5QixHQWZmLEtBZWU7QUFDdkIsU0FBS0MsSUFBTCxHQUFZSCxLQUFLRyxJQUFqQjtBQUNBLFNBQUtDLEtBQUwsR0FBYUosS0FBS0ksS0FBbEI7QUFDQSxTQUFLQyxPQUFMLEdBQWVMLEtBQUtLLE9BQUwsSUFBZ0IsRUFBL0I7QUFDQSxTQUFLQyxTQUFMLEdBQWlCTixLQUFLTSxTQUF0Qjs7QUFFQSxRQUFJLE9BQU8sS0FBS0EsU0FBWixLQUEwQixVQUE5QixFQUEw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QixFQUF0QixFQUEwQnVDLFVBQVV0QyxTQUFWLENBQW9CTyxRQUE5QyxDQUFmOztBQUVBLFFBQUksS0FBS1QsS0FBTCxLQUFleUMsTUFBbkIsRUFBMkI7QUFBQTs7QUFDekIsd0JBQUtoQixTQUFMLEVBQWdCSSxlQUFoQixrQkFBeUJkLFNBQXpCLENBQW1DMkIsR0FBbkMsQ0FBdUMxQyxLQUF2QyxFQUE4Q3dDLFNBQTlDO0FBQ0Q7QUFDRjtBQUNGOztBQUdELFNBQVNiLE9BQVQsQ0FBaUJnQixJQUFqQixFQUF1QjtBQUNyQixRQUFNQyxXQUFpQmYsZUFBTixZQUFlNUIsT0FBZixDQUF1QjBDLElBQXZCLENBQWpCOztBQUVBLE1BQUksQ0FBQ0MsUUFBTCxFQUFlO0FBQ2IsVUFBTSxJQUFJekMsc0JBQUosQ0FBb0IsYUFBWXdDLElBQUssY0FBckMsQ0FBTjtBQUNEOztBQUVELFFBQU0sQ0FBQzVDLElBQUQsSUFBUzRDLEtBQUtFLEtBQUwsQ0FBVyxHQUFYLENBQWY7QUFFQSxRQUFNcEIsWUFBWSxLQUFLNUIsS0FBTCxDQUFZLEdBQUVFLElBQUssR0FBbkIsRUFBdUI2QyxRQUF2QixDQUFsQjs7QUFFQSxNQUFJLENBQUNuQixTQUFMLEVBQWdCO0FBQ2QsVUFBTSxJQUFJdEIsc0JBQUosQ0FBb0Isa0JBQWlCSixJQUFLLElBQUc2QyxRQUFTLGVBQWNELElBQUssRUFBekUsQ0FBTjtBQUNEOztBQUVELFNBQU9sQixTQUFQO0FBQ0Q7O2VBRWMvQixrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBoaWRkZW4gZnJvbSAnbG9jYWwtc2NvcGUvY3JlYXRlJ1xuaW1wb3J0IHtcbiAgRnJhbWV3b3JrRXJyb3IsXG4gIFZhbGlkYXRpb25FcnJvcixcbn0gZnJvbSAnQGF0bGFzLmpzL2Vycm9ycydcbmltcG9ydCB7XG4gIGRlZmF1bHRzRGVlcCBhcyBkZWZhdWx0cyxcbiAgZGlmZmVyZW5jZSxcbn0gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IGRpc3BhdGNoIGZyb20gJy4vZGlzcGF0Y2gnXG5cbi8qKlxuICogVGhpcyBjbGFzcyBob2xkcyBhbmQgbWFuYWdlcyBhIGNvbXBvbmVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIENvbXBvbmVudENvbnRhaW5lciB7XG4gIC8qKlxuICAgKiBJcyB0aGlzIGNvbXBvbmVudCBhbHJlYWR5IHN0YXJ0ZWQ/XG4gICAqIEB0eXBlICAgIHtCb29sZWFufVxuICAgKi9cbiAgc3RhcnRlZCA9IGZhbHNlXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBuZXcgY29udGFpbmVyIGZvciBhIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgICAgICBpbmZvICAgICAgICAgICAgICBDb21wb25lbnQgaW5mb3JtYXRpb25cbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgICAgaW5mby50eXBlICAgICAgICAgVGhlIGNvbXBvbmVudCdzIHR5cGUgKHNlcnZpY2UsIGhvb2ssIGFjdGlvbilcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgICAgaW5mby5hbGlhcyAgICAgICAgVGhlIGNvbXBvbmVudCdzIHVzZXItc3BlY2lmaWVkIG5hbWUvYWxpYXNcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICAgICAgaW5mby5hbGlhc2VzICAgICAgQmluZGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSB1c2VyIHRvIGxvY2F0ZSBvdGhlclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzXG4gICAqIEBwYXJhbSAgICAge0NsYXNzfSAgICAgICAgIGluZm8uQ29tcG9uZW50ICAgIFRoZSBjb21wb25lbnQgY2xhc3NcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICAgICAgaW5mby5jb25maWcgICAgICAgVGhlIGNvbXBvbmVudCdzIHVzZXItc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb25cbiAgICogQHBhcmFtICAgICB7QWp2fSAgICAgICAgICAgaW5mby52YWxpZGF0b3IgICAgQSBKU09OIHNjaGVtYSB2YWxpZGF0b3IgaW5zdGFuY2VcbiAgICogQHBhcmFtICAgICB7QXRsYXN9ICAgICAgICAgYXRsYXMgICAgICAgICAgICAgVGhlIEF0bGFzIGluc3RhbmNlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihpbmZvLCBhdGxhcykge1xuICAgIHRoaXMudHlwZSA9IGluZm8udHlwZVxuICAgIHRoaXMuYWxpYXMgPSBpbmZvLmFsaWFzXG4gICAgdGhpcy5hbGlhc2VzID0gaW5mby5hbGlhc2VzIHx8IHt9XG4gICAgdGhpcy5Db21wb25lbnQgPSBpbmZvLkNvbXBvbmVudFxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLkNvbXBvbmVudCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgdHlwZSA9IHR5cGVvZiB0aGlzLkNvbXBvbmVudFxuICAgICAgdGhyb3cgbmV3IEZyYW1ld29ya0Vycm9yKGBDb21wb25lbnQgJHt0aGlzLnR5cGV9OiR7dGhpcy5hbGlhc30gbXVzdCBiZSBjbGFzcywgbm90ICR7dHlwZX1gKVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSBjb21wb25lbnQgcmVjZWl2ZWQgYWxsIHRoZSBhbGlhc2VzIGl0IHJlcXVpcmVzXG4gICAgY29uc3QgYWxpYXNlcyA9IHtcbiAgICAgIHByb3ZpZGVkOiBPYmplY3Qua2V5cyh0aGlzLmFsaWFzZXMpLFxuICAgICAgLy8gQ29weSB0aGUgY29udGVudHMgdG8gYXZvaWQgdGhlaXIgZnV0dXJlIG1vZGlmaWNhdGlvblxuICAgICAgcmVxdWlyZWQ6IFsuLi50aGlzLkNvbXBvbmVudC5yZXF1aXJlcyB8fCBbXV0sXG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ2hvb2snKSB7XG4gICAgICAvLyBSZXF1aXJlIG9ic2VydmVkIGNvbXBvbmVudHMgdG8gYmUgcmVzb2x2ZWQgdmlhIGFsaWFzXG4gICAgICBpZiAodHlwZW9mIHRoaXMuQ29tcG9uZW50Lm9ic2VydmVzID09PSAnc3RyaW5nJykge1xuICAgICAgICBhbGlhc2VzLnJlcXVpcmVkLnB1c2godGhpcy5Db21wb25lbnQub2JzZXJ2ZXMpXG4gICAgICB9XG5cbiAgICAgIC8vIERvIG5vdCByZXF1aXJlIGF0bGFzIHRvIGJlIGxpc3RlZCBpbiBhbGlhc2VzIC0gd2UgY2FuIHJlc29sdmUgaXQgYXV0b21hdGljYWxseVxuICAgICAgaWYgKHRoaXMuQ29tcG9uZW50Lm9ic2VydmVzID09PSAnYXRsYXMnKSB7XG4gICAgICAgIGFsaWFzZXMucHJvdmlkZWQucHVzaCgnYXRsYXMnKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1pc3NpbmcgPSBkaWZmZXJlbmNlKGFsaWFzZXMucmVxdWlyZWQsIGFsaWFzZXMucHJvdmlkZWQpXG4gICAgY29uc3QgZXh0cmEgPSBkaWZmZXJlbmNlKGFsaWFzZXMucHJvdmlkZWQsIGFsaWFzZXMucmVxdWlyZWQpXG5cbiAgICBpZiAobWlzc2luZy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBGcmFtZXdvcmtFcnJvcihgTWlzc2luZyBhbGlhc2VzIGZvciBjb21wb25lbnQgJHt0aGlzLmFsaWFzfTogJHttaXNzaW5nLmpvaW4oJywgJyl9YClcbiAgICB9XG5cbiAgICBpZiAoZXh0cmEubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRnJhbWV3b3JrRXJyb3IoYFVubmVlZGVkIGFsaWFzZXMgZm9yIGNvbXBvbmVudCAke3RoaXMuYWxpYXN9OiAke2V4dHJhLmpvaW4oJywgJyl9YClcbiAgICB9XG5cbiAgICBjb25zdCBvYnNlcnZlcnMgPSBuZXcgTWFwKClcbiAgICBjb25zdCBjb25maWcgPSBkZWZhdWx0cyhpbmZvLmNvbmZpZywgdGhpcy5Db21wb25lbnQuZGVmYXVsdHMpXG5cbiAgICBpZiAoIWluZm8udmFsaWRhdG9yLnZhbGlkYXRlKGluZm8uQ29tcG9uZW50LmNvbmZpZywgY29uZmlnKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihpbmZvLnZhbGlkYXRvci5lcnJvcnMpXG4gICAgfVxuXG4gICAgYXRsYXMubG9nLnRyYWNlKHtcbiAgICAgIGNvbXBvbmVudDogdGhpcy5hbGlhcyxcbiAgICAgIGNvbmZpZzogaW5mby5jb25maWcsXG4gICAgICBkZWZhdWx0czogdGhpcy5Db21wb25lbnQuZGVmYXVsdHMsXG4gICAgfSwgJ2NvbXBvbmVudDpjb25maWcnKVxuXG4gICAgdGhpcy5jb21wb25lbnQgPSBuZXcgdGhpcy5Db21wb25lbnQoe1xuICAgICAgYXRsYXMsXG4gICAgICBjb25maWcsXG4gICAgICBsb2c6IGF0bGFzLmxvZy5jaGlsZCh7IFt0aGlzLnR5cGVdOiB0aGlzLmFsaWFzIH0pLFxuICAgICAgY29tcG9uZW50OiByZXNvbHZlLFxuICAgICAgZGlzcGF0Y2g6IG9ic2VydmVyczo6ZGlzcGF0Y2gsXG4gICAgfSlcblxuICAgIC8vIFNhdmUgdGhlIGFsaWFzZXMgZm9yIHRoaXMgY29tcG9uZW50XG4gICAgdGhpcy5jb21wb25lbnQ6OmhpZGRlbigpLmFsaWFzZXMgPSB0aGlzLmFsaWFzZXNcbiAgICB0aGlzLmNvbXBvbmVudDo6aGlkZGVuKCkub2JzZXJ2ZXJzID0gb2JzZXJ2ZXJzXG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZSB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEByZXR1cm4gICAge1Byb21pc2U8dGhpcz59XG4gICAqL1xuICBhc3luYyBwcmVwYXJlKCkge1xuICAgIHRoaXMuY29tcG9uZW50LmxvZy50cmFjZSgncHJlcGFyZTpiZWZvcmUnKVxuXG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3NlcnZpY2UnOiB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gYXdhaXQgdGhpcy5jb21wb25lbnQucHJlcGFyZSgpXG4gICAgICAgIHRoaXMuY29tcG9uZW50LmxvZy50cmFjZSgncHJlcGFyZTphZnRlcicpXG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlXG4gICAgICB9XG4gICAgICBjYXNlICdob29rJzpcbiAgICAgIGNhc2UgJ2FjdGlvbic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmNvbXBvbmVudC5sb2cudHJhY2UoJ3ByZXBhcmU6YWZ0ZXInKVxuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0cz17fSAgICAgICAgIEFkZGl0aW9uYWwgb3B0aW9uc1xuICAgKiBAcGFyYW0gICAgIHtNYXB9ICAgICAgIG9wdHMuaG9va3MgICAgICBIb29rcyBhdmFpbGFibGUgaW4gdGhlIGFwcGxpY2F0aW9uXG4gICAqIEBwYXJhbSAgICAge2FueX0gICAgICAgb3B0cy5pbnN0YW5jZSAgIFRoZSBzZXJ2aWNlJ3MgZXhwb3NlZCBpbnN0YW5jZVxuICAgKiBAcmV0dXJuICAgIHtQcm9taXNlPHRoaXMuY29tcG9uZW50Pn1cbiAgICovXG4gIGFzeW5jIHN0YXJ0KG9wdHMgPSB7fSkge1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFxuICAgIH1cblxuICAgIHRoaXMuY29tcG9uZW50LmxvZy50cmFjZSgnc3RhcnQ6YmVmb3JlJylcbiAgICB0aGlzOjpta29ic2VydmVycyh7IGhvb2tzOiBvcHRzLmhvb2tzIH0pXG5cbiAgICBjb25zdCBvYnNlcnZlcnMgPSB0aGlzLmNvbXBvbmVudDo6aGlkZGVuKCkub2JzZXJ2ZXJzXG5cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSAnc2VydmljZSc6XG4gICAgICAgIGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgb2JzZXJ2ZXJzOjpkaXNwYXRjaCgnYmVmb3JlU3RhcnQnLCBvcHRzLmluc3RhbmNlKVxuICAgICAgICAgIGF3YWl0IHRoaXMuY29tcG9uZW50LnN0YXJ0KG9wdHMuaW5zdGFuY2UpXG4gICAgICAgICAgYXdhaXQgb2JzZXJ2ZXJzOjpkaXNwYXRjaCgnYWZ0ZXJTdGFydCcsIG9wdHMuaW5zdGFuY2UpXG4gICAgICAgIH0pKClcbiAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LmxvZy5lcnJvcih7IGVyciB9LCAnc3RhcnQ6ZmFpbHVyZScpXG4gICAgICAgICAgICB0aHJvdyBlcnJcbiAgICAgICAgICB9KVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdob29rJzpcbiAgICAgIGNhc2UgJ2FjdGlvbic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVha1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRlZCA9IHRydWVcblxuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0cz17fSAgICAgICAgIEFkZGl0aW9uYWwgb3B0aW9uc1xuICAgKiBAcGFyYW0gICAgIHthbnl9ICAgICAgIG9wdHMuaW5zdGFuY2UgICBUaGUgc2VydmljZSdzIGV4cG9zZWQgaW5zdGFuY2VcbiAgICogQHJldHVybiAgICB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHN0b3Aob3B0cyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuY29tcG9uZW50LmxvZy50cmFjZSgnc3RvcDpiZWZvcmUnKVxuXG4gICAgY29uc3Qgb2JzZXJ2ZXJzID0gdGhpcy5jb21wb25lbnQ6OmhpZGRlbigpLm9ic2VydmVyc1xuXG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3NlcnZpY2UnOlxuICAgICAgICBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IG9ic2VydmVyczo6ZGlzcGF0Y2goJ2JlZm9yZVN0b3AnLCBvcHRzLmluc3RhbmNlKVxuICAgICAgICAgIGF3YWl0IHRoaXMuY29tcG9uZW50LnN0b3Aob3B0cy5pbnN0YW5jZSlcbiAgICAgICAgICBhd2FpdCBvYnNlcnZlcnM6OmRpc3BhdGNoKCdhZnRlclN0b3AnLCBudWxsKVxuICAgICAgICB9KSgpXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudC5sb2cuZXJyb3IoeyBlcnIgfSwgJ3N0b3A6ZmFpbHVyZScpXG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlXG4gICAgICAgICAgICB0aHJvdyBlcnJcbiAgICAgICAgICB9KVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdob29rJzpcbiAgICAgIGNhc2UgJ2FjdGlvbic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVha1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlXG4gIH1cbn1cblxuLyoqXG4gKiBGaW5kIGFsbCBob29rcyB3aGljaCB3YW50IHRvIG9ic2VydmUgdGhpcyBjb21wb25lbnQncyBldmVudHNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICAgICB7T2JqZWN0fSAgICAgIG9wdHMgICAgICAgICAgRnVuY3Rpb24gcGFyYW1ldGVyc1xuICogQHBhcmFtICAgICB7TWFwfSAgICAgICAgIG9wdHMuaG9va3MgICAgQWxsIGhvb2tzIGtub3duIHRvIEF0bGFzXG4gKiBAcmV0dXJuICAgIHt2b2lkfVxuICovXG5mdW5jdGlvbiBta29ic2VydmVycyh7IGhvb2tzIH0pIHtcbiAgZm9yIChjb25zdCBbYWxpYXMsIGNvbnRhaW5lcl0gb2YgaG9va3MpIHtcbiAgICBjb25zdCB0YXJnZXQgPSAoY29udGFpbmVyLmFsaWFzZXMgfHwge30pW2NvbnRhaW5lci5Db21wb25lbnQub2JzZXJ2ZXNdXG5cbiAgICBpZiAodGhpcy5hbGlhcyA9PT0gdGFyZ2V0KSB7XG4gICAgICB0aGlzLmNvbXBvbmVudDo6aGlkZGVuKCkub2JzZXJ2ZXJzLnNldChhbGlhcywgY29udGFpbmVyKVxuICAgIH1cbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHJlc29sdmUobmFtZSkge1xuICBjb25zdCByZXNvbHZlZCA9IHRoaXM6OmhpZGRlbigpLmFsaWFzZXNbbmFtZV1cblxuICBpZiAoIXJlc29sdmVkKSB7XG4gICAgdGhyb3cgbmV3IEZyYW1ld29ya0Vycm9yKGBBbGlhcyBmb3IgJHtuYW1lfSBub3QgZGVmaW5lZGApXG4gIH1cblxuICBjb25zdCBbdHlwZV0gPSBuYW1lLnNwbGl0KCc6JylcbiAgLy8gVXNlIGEgcGx1cmFsIGZvcm0gb2YgdGhlIGNvbXBvbmVudCB0eXBlLCBpZS4sIGFjdGlvbiAtPiBhY3Rpb25zLCBzZXJ2aWNlIC0+IHNlcnZpY2VzIGV0Yy5cbiAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5hdGxhc1tgJHt0eXBlfXNgXVtyZXNvbHZlZF1cblxuICBpZiAoIWNvbXBvbmVudCkge1xuICAgIHRocm93IG5ldyBGcmFtZXdvcmtFcnJvcihgVW5hYmxlIHRvIGZpbmQgJHt0eXBlfToke3Jlc29sdmVkfSBhbGlhc2VkIGFzICR7bmFtZX1gKVxuICB9XG5cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG5leHBvcnQgZGVmYXVsdCBDb21wb25lbnRDb250YWluZXJcbiJdfQ==

@@ -10,4 +10,6 @@ "use strict";

var _ = require(".");
var _componentContainer = _interopRequireDefault(require("./component-container"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function component(info, catalog) {

@@ -19,7 +21,9 @@ if (catalog.has(info.alias)) {

info.config = this.config[`${info.type}s`][info.alias];
catalog.set(info.alias, new _.ComponentContainer(info, this));
info.validator = this.validator;
const container = new _componentContainer.default(info, this);
catalog.set(info.alias, container);
this.log.trace({
[info.type]: info.alias
}, `${info.type}:add`);
return this;
return container;
}

@@ -29,2 +33,2 @@

exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudC5tanMiXSwibmFtZXMiOlsiY29tcG9uZW50IiwiaW5mbyIsImNhdGFsb2ciLCJoYXMiLCJhbGlhcyIsInR5cGUiLCJjb25maWciLCJzZXQiLCJsb2ciLCJ0cmFjZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQWNBLFNBQVNBLFNBQVQsQ0FBbUJDLElBQW5CLEVBQXlCQyxPQUF6QixFQUFrQztBQUVoQyxNQUFJQSxRQUFRQyxHQUFSLENBQVlGLEtBQUtHLEtBQWpCLENBQUosRUFBNkI7QUFDM0IsVUFBTSwyQkFBb0Isd0JBQXVCSCxLQUFLRyxLQUFNLEtBQUlILEtBQUtJLElBQUssZ0JBQXBFLENBQU47QUFDRDs7QUFJREosT0FBS0ssTUFBTCxHQUFjLEtBQUtBLE1BQUwsQ0FBYSxHQUFFTCxLQUFLSSxJQUFLLEdBQXpCLEVBQTZCSixLQUFLRyxLQUFsQyxDQUFkO0FBRUFGLFVBQVFLLEdBQVIsQ0FBWU4sS0FBS0csS0FBakIsRUFBd0IseUJBQXVCSCxJQUF2QixFQUE2QixJQUE3QixDQUF4QjtBQUNBLE9BQUtPLEdBQUwsQ0FBU0MsS0FBVCxDQUFlO0FBQUUsS0FBQ1IsS0FBS0ksSUFBTixHQUFhSixLQUFLRztBQUFwQixHQUFmLEVBQTZDLEdBQUVILEtBQUtJLElBQUssTUFBekQ7QUFFQSxTQUFPLElBQVA7QUFDRDs7ZUFFY0wsUyIsImZpbGUiOiJjb21wb25lbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGcmFtZXdvcmtFcnJvciB9IGZyb20gJ0BhdGxhcy5qcy9lcnJvcnMnXG5pbXBvcnQgeyBDb21wb25lbnRDb250YWluZXIgfSBmcm9tICcuJ1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgY29tcG9uZW50IGludG8gdGhlIGdpdmVuIGNhdGFsb2dcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBpbmZvICAgICAgICAgICAgICBDb21wb25lbnQgaW5mb3JtYXRpb25cbiAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgaW5mby50eXBlICAgICAgICAgVGhlIGNvbXBvbmVudCdzIHR5cGUgKHNlcnZpY2UsIGhvb2ssIGFjdGlvbilcbiAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgaW5mby5hbGlhcyAgICAgICAgVGhlIGNvbXBvbmVudCdzIHVzZXItc3BlY2lmaWVkIG5hbWUvYWxpYXNcbiAqIEBwYXJhbSAgICAge0NsYXNzfSAgICAgaW5mby5Db21wb25lbnQgICAgVGhlIGNvbXBvbmVudCBjbGFzc1xuICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBpbmZvLmFsaWFzZXMgICAgICBCaW5kaW5nIGluZm9ybWF0aW9uIHRvIG90aGVyIGRlZmluZWQgY29tcG9uZW50c1xuICogQHBhcmFtICAgICB7TWFwfSAgICAgICBjYXRhbG9nICAgICAgICAgICBUaGUgY2F0YWxvZyB0byB3aGljaCB0byBzYXZlIHRoZSBjb21wb25lbnRcbiAqIEByZXR1cm4gICAge3RoaXN9XG4gKi9cbmZ1bmN0aW9uIGNvbXBvbmVudChpbmZvLCBjYXRhbG9nKSB7XG4gIC8vIFNhZmV0eSBjaGVja3MgZmlyc3RcbiAgaWYgKGNhdGFsb2cuaGFzKGluZm8uYWxpYXMpKSB7XG4gICAgdGhyb3cgbmV3IEZyYW1ld29ya0Vycm9yKGBDb21wb25lbnQgd2l0aCBhbGlhcyAke2luZm8uYWxpYXN9ICgke2luZm8udHlwZX0pIGFscmVhZHkgdXNlZGApXG4gIH1cblxuICAvLyBQdWxsIHVzZXItcHJvdmlkZWQgY29uZmlnIGZvciB0aGlzIGNvbXBvbmVudFxuICAvLyBVc2UgYSBwbHVyYWwgZm9ybSBvZiB0aGUgY29tcG9uZW50IHR5cGUsIGllLiwgYWN0aW9uIC0+IGFjdGlvbnMsIHNlcnZpY2UgLT4gc2VydmljZXMgZXRjLlxuICBpbmZvLmNvbmZpZyA9IHRoaXMuY29uZmlnW2Ake2luZm8udHlwZX1zYF1baW5mby5hbGlhc11cblxuICBjYXRhbG9nLnNldChpbmZvLmFsaWFzLCBuZXcgQ29tcG9uZW50Q29udGFpbmVyKGluZm8sIHRoaXMpKVxuICB0aGlzLmxvZy50cmFjZSh7IFtpbmZvLnR5cGVdOiBpbmZvLmFsaWFzIH0sIGAke2luZm8udHlwZX06YWRkYClcblxuICByZXR1cm4gdGhpc1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnRcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudC5tanMiXSwibmFtZXMiOlsiY29tcG9uZW50IiwiaW5mbyIsImNhdGFsb2ciLCJoYXMiLCJhbGlhcyIsIkZyYW1ld29ya0Vycm9yIiwidHlwZSIsImNvbmZpZyIsInZhbGlkYXRvciIsImNvbnRhaW5lciIsIkNvbXBvbmVudENvbnRhaW5lciIsInNldCIsImxvZyIsInRyYWNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7Ozs7QUFjQSxTQUFTQSxTQUFULENBQW1CQyxJQUFuQixFQUF5QkMsT0FBekIsRUFBa0M7QUFFaEMsTUFBSUEsUUFBUUMsR0FBUixDQUFZRixLQUFLRyxLQUFqQixDQUFKLEVBQTZCO0FBQzNCLFVBQU0sSUFBSUMsc0JBQUosQ0FBb0Isd0JBQXVCSixLQUFLRyxLQUFNLEtBQUlILEtBQUtLLElBQUssZ0JBQXBFLENBQU47QUFDRDs7QUFJREwsT0FBS00sTUFBTCxHQUFjLEtBQUtBLE1BQUwsQ0FBYSxHQUFFTixLQUFLSyxJQUFLLEdBQXpCLEVBQTZCTCxLQUFLRyxLQUFsQyxDQUFkO0FBRUFILE9BQUtPLFNBQUwsR0FBaUIsS0FBS0EsU0FBdEI7QUFFQSxRQUFNQyxZQUFZLElBQUlDLDJCQUFKLENBQXVCVCxJQUF2QixFQUE2QixJQUE3QixDQUFsQjtBQUVBQyxVQUFRUyxHQUFSLENBQVlWLEtBQUtHLEtBQWpCLEVBQXdCSyxTQUF4QjtBQUNBLE9BQUtHLEdBQUwsQ0FBU0MsS0FBVCxDQUFlO0FBQUUsS0FBQ1osS0FBS0ssSUFBTixHQUFhTCxLQUFLRztBQUFwQixHQUFmLEVBQTZDLEdBQUVILEtBQUtLLElBQUssTUFBekQ7QUFFQSxTQUFPRyxTQUFQO0FBQ0Q7O2VBRWNULFMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGcmFtZXdvcmtFcnJvciB9IGZyb20gJ0BhdGxhcy5qcy9lcnJvcnMnXG5pbXBvcnQgQ29tcG9uZW50Q29udGFpbmVyIGZyb20gJy4vY29tcG9uZW50LWNvbnRhaW5lcidcblxuLyoqXG4gKiBSZWdpc3RlciBhIGNvbXBvbmVudCBpbnRvIHRoZSBnaXZlbiBjYXRhbG9nXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAgICAge09iamVjdH0gICAgaW5mbyAgICAgICAgICAgICAgQ29tcG9uZW50IGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgIGluZm8udHlwZSAgICAgICAgIFRoZSBjb21wb25lbnQncyB0eXBlIChzZXJ2aWNlLCBob29rLCBhY3Rpb24pXG4gKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgIGluZm8uYWxpYXMgICAgICAgIFRoZSBjb21wb25lbnQncyB1c2VyLXNwZWNpZmllZCBuYW1lL2FsaWFzXG4gKiBAcGFyYW0gICAgIHtDbGFzc30gICAgIGluZm8uQ29tcG9uZW50ICAgIFRoZSBjb21wb25lbnQgY2xhc3NcbiAqIEBwYXJhbSAgICAge09iamVjdH0gICAgaW5mby5hbGlhc2VzICAgICAgQmluZGluZyBpbmZvcm1hdGlvbiB0byBvdGhlciBkZWZpbmVkIGNvbXBvbmVudHNcbiAqIEBwYXJhbSAgICAge01hcH0gICAgICAgY2F0YWxvZyAgICAgICAgICAgVGhlIGNhdGFsb2cgdG8gd2hpY2ggdG8gc2F2ZSB0aGUgY29tcG9uZW50XG4gKiBAcmV0dXJuICAgIHtDb21wb25lbnRDb250YWluZXJ9XG4gKi9cbmZ1bmN0aW9uIGNvbXBvbmVudChpbmZvLCBjYXRhbG9nKSB7XG4gIC8vIFNhZmV0eSBjaGVja3MgZmlyc3RcbiAgaWYgKGNhdGFsb2cuaGFzKGluZm8uYWxpYXMpKSB7XG4gICAgdGhyb3cgbmV3IEZyYW1ld29ya0Vycm9yKGBDb21wb25lbnQgd2l0aCBhbGlhcyAke2luZm8uYWxpYXN9ICgke2luZm8udHlwZX0pIGFscmVhZHkgdXNlZGApXG4gIH1cblxuICAvLyBQdWxsIHVzZXItcHJvdmlkZWQgY29uZmlnIGZvciB0aGlzIGNvbXBvbmVudFxuICAvLyBVc2UgYSBwbHVyYWwgZm9ybSBvZiB0aGUgY29tcG9uZW50IHR5cGUsIGllLiwgYWN0aW9uIC0+IGFjdGlvbnMsIHNlcnZpY2UgLT4gc2VydmljZXMgZXRjLlxuICBpbmZvLmNvbmZpZyA9IHRoaXMuY29uZmlnW2Ake2luZm8udHlwZX1zYF1baW5mby5hbGlhc11cbiAgLy8gUHVsbCBKU09OIHNjaGVtYSB2YWxpZGF0b3IgZnJvbSB0aGUgQXRsYXMgaW5zdGFuY2VcbiAgaW5mby52YWxpZGF0b3IgPSB0aGlzLnZhbGlkYXRvclxuXG4gIGNvbnN0IGNvbnRhaW5lciA9IG5ldyBDb21wb25lbnRDb250YWluZXIoaW5mbywgdGhpcylcblxuICBjYXRhbG9nLnNldChpbmZvLmFsaWFzLCBjb250YWluZXIpXG4gIHRoaXMubG9nLnRyYWNlKHsgW2luZm8udHlwZV06IGluZm8uYWxpYXMgfSwgYCR7aW5mby50eXBlfTphZGRgKVxuXG4gIHJldHVybiBjb250YWluZXJcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50XG4iXX0=

@@ -8,19 +8,26 @@ "use strict";

async function dispatch(events, subject, hooks) {
events = Array.isArray(events) ? events : [events];
const tasks = [];
async function dispatch(event, subject) {
const tasks = new Map();
for (const [alias, hook] of hooks) {
for (const event of events) {
if (typeof hook.component[event] === 'function') {
this.log.debug({
hook: alias,
event
}, 'hook:event');
tasks.push(hook.component[event](subject));
}
for (const [, hook] of this) {
if (typeof hook.component[event] === 'function') {
hook.component.log.debug({
event
}, 'hook:event');
tasks.set(hook, Promise.resolve(hook.component[event](subject)));
} else {
hook.component.log.debug({
event
}, 'hook:event:not-implemented');
}
}
await Promise.all(tasks);
await Promise.all(Array.from(tasks.values()));
for (const [hook, task] of tasks) {
task.catch(err => void hook.component.log.error({
err,
event
}, 'hook:event:failure'));
}
}

@@ -30,2 +37,2 @@

exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRpc3BhdGNoLm1qcyJdLCJuYW1lcyI6WyJkaXNwYXRjaCIsImV2ZW50cyIsInN1YmplY3QiLCJob29rcyIsIkFycmF5IiwiaXNBcnJheSIsInRhc2tzIiwiYWxpYXMiLCJob29rIiwiZXZlbnQiLCJjb21wb25lbnQiLCJsb2ciLCJkZWJ1ZyIsInB1c2giLCJQcm9taXNlIiwiYWxsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBWUEsZUFBZUEsUUFBZixDQUF3QkMsTUFBeEIsRUFBZ0NDLE9BQWhDLEVBQXlDQyxLQUF6QyxFQUFnRDtBQUM5Q0YsV0FBU0csTUFBTUMsT0FBTixDQUFjSixNQUFkLElBQ0xBLE1BREssR0FFTCxDQUFDQSxNQUFELENBRko7QUFJQSxRQUFNSyxRQUFRLEVBQWQ7O0FBRUEsT0FBSyxNQUFNLENBQUNDLEtBQUQsRUFBUUMsSUFBUixDQUFYLElBQTRCTCxLQUE1QixFQUFtQztBQUNqQyxTQUFLLE1BQU1NLEtBQVgsSUFBb0JSLE1BQXBCLEVBQTRCO0FBRTFCLFVBQUksT0FBT08sS0FBS0UsU0FBTCxDQUFlRCxLQUFmLENBQVAsS0FBaUMsVUFBckMsRUFBaUQ7QUFDL0MsYUFBS0UsR0FBTCxDQUFTQyxLQUFULENBQWU7QUFBRUosZ0JBQU1ELEtBQVI7QUFBZUU7QUFBZixTQUFmLEVBQXVDLFlBQXZDO0FBQ0FILGNBQU1PLElBQU4sQ0FBV0wsS0FBS0UsU0FBTCxDQUFlRCxLQUFmLEVBQXNCUCxPQUF0QixDQUFYO0FBQ0Q7QUFDRjtBQUNGOztBQUVELFFBQU1ZLFFBQVFDLEdBQVIsQ0FBWVQsS0FBWixDQUFOO0FBQ0Q7O2VBRWNOLFEiLCJmaWxlIjoiZGlzcGF0Y2guanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERpc3BhdGNoIGFuIGV2ZW50IHRvIGFsbCByZWdpc3RlcmVkIGhvb2tzXG4gKlxuICogVGhpcyBmdW5jdGlvbiB0YWtlcyB2YXJpYWJsZSBudW1iZXIgb2YgZXZlbnRzIHRvIGJlIGRpc3BhdGNoZWQgdG8gaG9va3NcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICAgICB7U3RyaW5nfEFycmF5fSAgICBldmVudHMgICAgVGhlIGV2ZW50cycgbmFtZXNcbiAqIEBwYXJhbSAgICAge21peGVkfSAgICAgICAgICAgc3ViamVjdCAgIFRoZSB0aGluZyB0aGF0IGlzIHJlbGF0ZWQgdG8gdGhlIGV2ZW50IChpZS4gYSBjb21wb25lbnQpXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBpcyBnaXZlbiB0byB0aGUgZXZlbnQgaGFuZGxlciBvbiBpbnB1dC5cbiAqIEBwYXJhbSAgICAge09iamVjdFtdfSAgICAgICAgaG9va3MgICAgIFRoZSBob29rcyB0byB3aGljaCB0aGUgZXZlbnQgc2hvdWxkIGJlIGRpc3BhdGNoZWRcbiAqIEByZXR1cm4gICAge1Byb21pc2U8dm9pZD59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRpc3BhdGNoKGV2ZW50cywgc3ViamVjdCwgaG9va3MpIHtcbiAgZXZlbnRzID0gQXJyYXkuaXNBcnJheShldmVudHMpXG4gICAgPyBldmVudHNcbiAgICA6IFtldmVudHNdXG5cbiAgY29uc3QgdGFza3MgPSBbXVxuXG4gIGZvciAoY29uc3QgW2FsaWFzLCBob29rXSBvZiBob29rcykge1xuICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgICAvLyBJcyB0aGlzIGhvb2sgbGlzdGVuaW5nIGZvciB0aGUgZXZlbnQgYmVpbmcgZGlzcGF0Y2hlZD9cbiAgICAgIGlmICh0eXBlb2YgaG9vay5jb21wb25lbnRbZXZlbnRdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKHsgaG9vazogYWxpYXMsIGV2ZW50IH0sICdob29rOmV2ZW50JylcbiAgICAgICAgdGFza3MucHVzaChob29rLmNvbXBvbmVudFtldmVudF0oc3ViamVjdCkpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwodGFza3MpXG59XG5cbmV4cG9ydCBkZWZhdWx0IGRpc3BhdGNoXG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRpc3BhdGNoLm1qcyJdLCJuYW1lcyI6WyJkaXNwYXRjaCIsImV2ZW50Iiwic3ViamVjdCIsInRhc2tzIiwiTWFwIiwiaG9vayIsImNvbXBvbmVudCIsImxvZyIsImRlYnVnIiwic2V0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJhbGwiLCJBcnJheSIsImZyb20iLCJ2YWx1ZXMiLCJ0YXNrIiwiY2F0Y2giLCJlcnIiLCJlcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVlBLGVBQWVBLFFBQWYsQ0FBd0JDLEtBQXhCLEVBQStCQyxPQUEvQixFQUF3QztBQUN0QyxRQUFNQyxRQUFRLElBQUlDLEdBQUosRUFBZDs7QUFFQSxPQUFLLE1BQU0sR0FBR0MsSUFBSCxDQUFYLElBQXVCLElBQXZCLEVBQTZCO0FBRTNCLFFBQUksT0FBT0EsS0FBS0MsU0FBTCxDQUFlTCxLQUFmLENBQVAsS0FBaUMsVUFBckMsRUFBaUQ7QUFDL0NJLFdBQUtDLFNBQUwsQ0FBZUMsR0FBZixDQUFtQkMsS0FBbkIsQ0FBeUI7QUFBRVA7QUFBRixPQUF6QixFQUFvQyxZQUFwQztBQUNBRSxZQUFNTSxHQUFOLENBQVVKLElBQVYsRUFBZ0JLLFFBQVFDLE9BQVIsQ0FBZ0JOLEtBQUtDLFNBQUwsQ0FBZUwsS0FBZixFQUFzQkMsT0FBdEIsQ0FBaEIsQ0FBaEI7QUFDRCxLQUhELE1BR087QUFDTEcsV0FBS0MsU0FBTCxDQUFlQyxHQUFmLENBQW1CQyxLQUFuQixDQUF5QjtBQUFFUDtBQUFGLE9BQXpCLEVBQW9DLDRCQUFwQztBQUNEO0FBQ0Y7O0FBRUQsUUFBTVMsUUFBUUUsR0FBUixDQUFZQyxNQUFNQyxJQUFOLENBQVdYLE1BQU1ZLE1BQU4sRUFBWCxDQUFaLENBQU47O0FBS0EsT0FBSyxNQUFNLENBQUNWLElBQUQsRUFBT1csSUFBUCxDQUFYLElBQTJCYixLQUEzQixFQUFrQztBQUNoQ2EsU0FBS0MsS0FBTCxDQUFXQyxPQUFPLEtBQUtiLEtBQUtDLFNBQUwsQ0FBZUMsR0FBZixDQUFtQlksS0FBbkIsQ0FBeUI7QUFBRUQsU0FBRjtBQUFPakI7QUFBUCxLQUF6QixFQUF5QyxvQkFBekMsQ0FBdkI7QUFDRDtBQUNGOztlQUVjRCxRIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEaXNwYXRjaCBhbiBldmVudCB0byBob29rc1xuICpcbiAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgdmFyaWFibGUgbnVtYmVyIG9mIGV2ZW50cyB0byBiZSBkaXNwYXRjaGVkIHRvIGhvb2tzXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgZXZlbnQgICAgIFRoZSBldmVudCdzIG5hbWVcbiAqIEBwYXJhbSAgICAge21peGVkfSAgICAgc3ViamVjdCAgIFRoZSB0aGluZyB0aGF0IGlzIHJlbGF0ZWQgdG8gdGhlIGV2ZW50IChpZS4gYSBjb21wb25lbnQpXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBpcyBnaXZlbiB0byB0aGUgZXZlbnQgaGFuZGxlciBvbiBpbnB1dC5cbiAqIEB0aGlzICAgICAgTWFwXG4gKiBAcmV0dXJuICAgIHtQcm9taXNlPHZvaWQ+fVxuICovXG5hc3luYyBmdW5jdGlvbiBkaXNwYXRjaChldmVudCwgc3ViamVjdCkge1xuICBjb25zdCB0YXNrcyA9IG5ldyBNYXAoKVxuXG4gIGZvciAoY29uc3QgWywgaG9va10gb2YgdGhpcykge1xuICAgIC8vIElzIHRoaXMgaG9vayBsaXN0ZW5pbmcgZm9yIHRoZSBldmVudCBiZWluZyBkaXNwYXRjaGVkP1xuICAgIGlmICh0eXBlb2YgaG9vay5jb21wb25lbnRbZXZlbnRdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBob29rLmNvbXBvbmVudC5sb2cuZGVidWcoeyBldmVudCB9LCAnaG9vazpldmVudCcpXG4gICAgICB0YXNrcy5zZXQoaG9vaywgUHJvbWlzZS5yZXNvbHZlKGhvb2suY29tcG9uZW50W2V2ZW50XShzdWJqZWN0KSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGhvb2suY29tcG9uZW50LmxvZy5kZWJ1Zyh7IGV2ZW50IH0sICdob29rOmV2ZW50Om5vdC1pbXBsZW1lbnRlZCcpXG4gICAgfVxuICB9XG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwoQXJyYXkuZnJvbSh0YXNrcy52YWx1ZXMoKSkpXG5cbiAgLy8gRW5zdXJlIG5vIHVuY2F1Z2h0IGVycm9yIGVzY2FwZXMgZnJvbSB0aGlzIHBsYWNlXG4gIC8vIFRoaXMgdXRpbGlzZXMgdGhlIGZhY3QgdGhhdCB3ZSBjYW4gY2F0Y2ggYW55IFByb21pc2UtcmVsYXRlZCBlcnJvcnMgYnkgYXR0YWNoaW5nIGEgLmNhdGNoIGJsb2NrXG4gIC8vIHRvIHRoZSBwcm9taXNlLCBldmVuIGlmIHRoZSBwcm9taXNlIGJvZHkgaGFzIGFscmVhZHkgZXhlY3V0ZWQuIPCfkqFcbiAgZm9yIChjb25zdCBbaG9vaywgdGFza10gb2YgdGFza3MpIHtcbiAgICB0YXNrLmNhdGNoKGVyciA9PiB2b2lkIGhvb2suY29tcG9uZW50LmxvZy5lcnJvcih7IGVyciwgZXZlbnQgfSwgJ2hvb2s6ZXZlbnQ6ZmFpbHVyZScpKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGRpc3BhdGNoXG4iXX0=

@@ -18,2 +18,2 @@ "use strict";

exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImV4cG9zZS5tanMiXSwibmFtZXMiOlsiZXhwb3NlIiwiY29sbGVjdGlvbiIsInByb3BlcnR5IiwidmFsdWUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJnZXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFTQSxTQUFTQSxNQUFULENBQWdCQyxVQUFoQixFQUE0QkMsUUFBNUIsRUFBc0NDLEtBQXRDLEVBQTZDO0FBQzNDQyxTQUFPQyxjQUFQLENBQXNCLEtBQUtKLFVBQUwsQ0FBdEIsRUFBd0NDLFFBQXhDLEVBQWtEO0FBQ2hESSxnQkFBWSxJQURvQztBQUVoREMsa0JBQWMsSUFGa0M7QUFHaERDLFNBQUssTUFBTUw7QUFIcUMsR0FBbEQ7QUFLRDs7ZUFFY0gsTSIsImZpbGUiOiJleHBvc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEV4cG9zZSBhIGdldHRlciBvbiB0aGUgYXBwbGljYXRpb24gaW5zdGFuY2UgdW5kZXIgdGhlIHNwZWNpZmllZCBjb2xsZWN0aW9uIChvYmplY3QpXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgY29sbGVjdGlvbiAgICBUaGUgY29sbGVjdGlvbiAob2JqZWN0KSBvbnRvIHdoaWNoIHRvIGF0dGFjaCB0aGUgZ2V0dGVyXG4gKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgIHByb3BlcnR5ICAgICAgVGhlIGdldHRlcidzIG5hbWUva2V5XG4gKiBAcGFyYW0gICAgIHttaXhlZH0gICAgIHZhbHVlICAgICAgIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgZ2V0dGVyXG4gKiBAcmV0dXJuICAgIHt2b2lkfVxuICovXG5mdW5jdGlvbiBleHBvc2UoY29sbGVjdGlvbiwgcHJvcGVydHksIHZhbHVlKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzW2NvbGxlY3Rpb25dLCBwcm9wZXJ0eSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogKCkgPT4gdmFsdWUsXG4gIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IGV4cG9zZVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImV4cG9zZS5tanMiXSwibmFtZXMiOlsiZXhwb3NlIiwiY29sbGVjdGlvbiIsInByb3BlcnR5IiwidmFsdWUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJnZXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFTQSxTQUFTQSxNQUFULENBQWdCQyxVQUFoQixFQUE0QkMsUUFBNUIsRUFBc0NDLEtBQXRDLEVBQTZDO0FBQzNDQyxTQUFPQyxjQUFQLENBQXNCLEtBQUtKLFVBQUwsQ0FBdEIsRUFBd0NDLFFBQXhDLEVBQWtEO0FBQ2hESSxnQkFBWSxJQURvQztBQUVoREMsa0JBQWMsSUFGa0M7QUFHaERDLFNBQUssTUFBTUw7QUFIcUMsR0FBbEQ7QUFLRDs7ZUFFY0gsTSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXhwb3NlIGEgZ2V0dGVyIG9uIHRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZSB1bmRlciB0aGUgc3BlY2lmaWVkIGNvbGxlY3Rpb24gKG9iamVjdClcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBjb2xsZWN0aW9uICAgIFRoZSBjb2xsZWN0aW9uIChvYmplY3QpIG9udG8gd2hpY2ggdG8gYXR0YWNoIHRoZSBnZXR0ZXJcbiAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgcHJvcGVydHkgICAgICBUaGUgZ2V0dGVyJ3MgbmFtZS9rZXlcbiAqIEBwYXJhbSAgICAge21peGVkfSAgICAgdmFsdWUgICAgICAgVGhlIHZhbHVlIHRvIHJldHVybiBmcm9tIHRoZSBnZXR0ZXJcbiAqIEByZXR1cm4gICAge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGV4cG9zZShjb2xsZWN0aW9uLCBwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXNbY29sbGVjdGlvbl0sIHByb3BlcnR5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiAoKSA9PiB2YWx1ZSxcbiAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXhwb3NlXG4iXX0=

@@ -6,8 +6,2 @@ "use strict";

});
Object.defineProperty(exports, "ComponentContainer", {
enumerable: true,
get: function () {
return _componentContainer.default;
}
});
Object.defineProperty(exports, "optrequire", {

@@ -50,4 +44,2 @@ enumerable: true,

var _componentContainer = _interopRequireDefault(require("./component-container"));
var _optrequire = _interopRequireDefault(require("./optrequire"));

@@ -66,2 +58,2 @@

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4Lm1qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQSIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb21wb25lbnRDb250YWluZXIgZnJvbSAnLi9jb21wb25lbnQtY29udGFpbmVyJ1xuaW1wb3J0IG9wdHJlcXVpcmUgZnJvbSAnLi9vcHRyZXF1aXJlJ1xuaW1wb3J0IGV4cG9zZSBmcm9tICcuL2V4cG9zZSdcbmltcG9ydCBkaXNwYXRjaCBmcm9tICcuL2Rpc3BhdGNoJ1xuaW1wb3J0IGNvbXBvbmVudCBmcm9tICcuL2NvbXBvbmVudCdcbmltcG9ydCBta2NvbmZpZyBmcm9tICcuL21rY29uZmlnJ1xuaW1wb3J0IG1rbG9nIGZyb20gJy4vbWtsb2cnXG5cbmV4cG9ydCB7XG4gIENvbXBvbmVudENvbnRhaW5lcixcbiAgb3B0cmVxdWlyZSxcbiAgZXhwb3NlLFxuICBkaXNwYXRjaCxcbiAgY29tcG9uZW50LFxuICBta2NvbmZpZyxcbiAgbWtsb2csXG59XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4Lm1qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBvcHRyZXF1aXJlIGZyb20gJy4vb3B0cmVxdWlyZSdcbmltcG9ydCBleHBvc2UgZnJvbSAnLi9leHBvc2UnXG5pbXBvcnQgZGlzcGF0Y2ggZnJvbSAnLi9kaXNwYXRjaCdcbmltcG9ydCBjb21wb25lbnQgZnJvbSAnLi9jb21wb25lbnQnXG5pbXBvcnQgbWtjb25maWcgZnJvbSAnLi9ta2NvbmZpZydcbmltcG9ydCBta2xvZyBmcm9tICcuL21rbG9nJ1xuXG5leHBvcnQge1xuICBvcHRyZXF1aXJlLFxuICBleHBvc2UsXG4gIGRpc3BhdGNoLFxuICBjb21wb25lbnQsXG4gIG1rY29uZmlnLFxuICBta2xvZyxcbn1cbiJdfQ==

@@ -31,2 +31,2 @@ "use strict";

exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1rY29uZmlnLm1qcyJdLCJuYW1lcyI6WyJta2NvbmZpZyIsImNvbmZpZyIsImJhc2UiLCJvcHRpb25zIiwib3B0aW9uYWwiLCJub3JtYWxpc2UiLCJtb2R1bGVzIiwicmVxdWlyZSIsImVudiIsImxvY2FsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBcUJBLFNBQVNBLFFBQVQsQ0FBa0JDLFNBQVMsRUFBM0IsRUFBK0JDLE9BQU8sRUFBdEMsRUFBMEM7QUFDeEMsTUFBSSxPQUFPRCxNQUFQLEtBQWtCLFFBQXRCLEVBQWdDO0FBQzlCLFVBQU1FLFVBQVU7QUFBRUMsZ0JBQVUsSUFBWjtBQUFrQkMsaUJBQVc7QUFBN0IsS0FBaEI7QUFDQSxVQUFNQyxVQUFVO0FBQ2RMLGNBQVEsS0FBS00sT0FBTCxDQUFhTixNQUFiLEVBQXFCRSxPQUFyQixDQURNO0FBRWRLLFdBQUssS0FBS0QsT0FBTCxDQUFjLEdBQUVOLE1BQU8sUUFBTyxLQUFLTyxHQUFJLEVBQXZDLEVBQTBDTCxPQUExQyxDQUZTO0FBR2RNLGFBQU8sS0FBS0YsT0FBTCxDQUFjLEdBQUVOLE1BQU8sUUFBdkIsRUFBZ0NFLE9BQWhDO0FBSE8sS0FBaEI7QUFNQUcsWUFBUUwsTUFBUixHQUFpQixtQkFBTUssUUFBUUwsTUFBZCxFQUFzQkssUUFBUUUsR0FBOUIsRUFBbUNGLFFBQVFHLEtBQTNDLENBQWpCO0FBQ0FILFlBQVFMLE1BQVIsR0FBaUIsMEJBQVNLLFFBQVFMLE1BQWpCLEVBQXlCQyxJQUF6QixDQUFqQjtBQUVBLFdBQU9JLFFBQVFMLE1BQWY7QUFDRDs7QUFHRCxTQUFPLDBCQUFTQSxNQUFULEVBQWlCQyxJQUFqQixDQUFQO0FBQ0Q7O2VBRWNGLFEiLCJmaWxlIjoibWtjb25maWcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBkZWZhdWx0c0RlZXAgYXMgZGVmYXVsdHMsXG4gIG1lcmdlLFxufSBmcm9tICdsb2Rhc2gnXG5cbi8qKlxuICogQ3JlYXRlIHRoZSBjb25maWd1cmF0aW9uIG9iamVjdCBmcm9tIGlucHV0c1xuICpcbiAqIEZvciBwYXRoLWJhc2VkIGNvbmZpZ3MsIHdlIGFkZGl0aW9uYWxseSB3YW50IHRvIHN1cHBvcnQ6XG4gKiAtIGxvYWRpbmcgYW5kIGFwcGx5aW5nIGVudmlyb25tZW50IG92ZXJyaWRlcyBvbiB0b3Agb2YgdGhlIGJhc2UgY29uZmlnXG4gKiAtIGxvYWRpbmcgYW5kIGFwcGx5aW5nIGxvY2FsIChwZXItbWFjaGluZSkgb3ZlcnJpZGVzIG9uIHRvcCBvZiB0aGUgY29uZmlnXG4gKlxuICogVGhpcyBwYXR0ZXJuIGlzIGZyZXF1ZW50LWVub3VnaCB0aGF0IGl0IHdhcnJhbnRzIGV4cGxpY2l0IHN1cHBvcnQgaW4gY29yZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBjb25maWcgICAgICAgIEJhc2UgY29uZmlnIG9iamVjdCwgb3IgYSBzdHJpbmcgKHBhdGgpIHRvIGEgbW9kdWxlIHdoZXJlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbmZpZyBzaG91bGQgYmUgbG9kZWQgZnJvbSwgcmVsYXRpdmUgdG8gcm9vdFxuICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBiYXNlICAgICAgICAgIERlZmF1bHQgdmFsdWVzIHRvIGJlIGFkZGVkIHRvIHRoZSBjb25maWcgb2JqZWN0IGlmIHRoZXkgYXJlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2luZyBmcm9tIHRoZSBpbnB1dCBjb25maWdcbiAqIEByZXR1cm4gICAge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gbWtjb25maWcoY29uZmlnID0ge30sIGJhc2UgPSB7fSkge1xuICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBvcHRpb25zID0geyBvcHRpb25hbDogdHJ1ZSwgbm9ybWFsaXNlOiB0cnVlIH1cbiAgICBjb25zdCBtb2R1bGVzID0ge1xuICAgICAgY29uZmlnOiB0aGlzLnJlcXVpcmUoY29uZmlnLCBvcHRpb25zKSxcbiAgICAgIGVudjogdGhpcy5yZXF1aXJlKGAke2NvbmZpZ30vZW52LyR7dGhpcy5lbnZ9YCwgb3B0aW9ucyksXG4gICAgICBsb2NhbDogdGhpcy5yZXF1aXJlKGAke2NvbmZpZ30vbG9jYWxgLCBvcHRpb25zKSxcbiAgICB9XG5cbiAgICBtb2R1bGVzLmNvbmZpZyA9IG1lcmdlKG1vZHVsZXMuY29uZmlnLCBtb2R1bGVzLmVudiwgbW9kdWxlcy5sb2NhbClcbiAgICBtb2R1bGVzLmNvbmZpZyA9IGRlZmF1bHRzKG1vZHVsZXMuY29uZmlnLCBiYXNlKVxuXG4gICAgcmV0dXJuIG1vZHVsZXMuY29uZmlnXG4gIH1cblxuICAvLyBJdCdzIGp1c3QgYW4gb2JqZWN0LCBhcHBseSBkZWZhdWx0cyBhbmQgR1RGT1xuICByZXR1cm4gZGVmYXVsdHMoY29uZmlnLCBiYXNlKVxufVxuXG5leHBvcnQgZGVmYXVsdCBta2NvbmZpZ1xuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1rY29uZmlnLm1qcyJdLCJuYW1lcyI6WyJta2NvbmZpZyIsImNvbmZpZyIsImJhc2UiLCJvcHRpb25zIiwib3B0aW9uYWwiLCJub3JtYWxpc2UiLCJtb2R1bGVzIiwicmVxdWlyZSIsImVudiIsImxvY2FsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBcUJBLFNBQVNBLFFBQVQsQ0FBa0JDLFNBQVMsRUFBM0IsRUFBK0JDLE9BQU8sRUFBdEMsRUFBMEM7QUFDeEMsTUFBSSxPQUFPRCxNQUFQLEtBQWtCLFFBQXRCLEVBQWdDO0FBQzlCLFVBQU1FLFVBQVU7QUFBRUMsZ0JBQVUsSUFBWjtBQUFrQkMsaUJBQVc7QUFBN0IsS0FBaEI7QUFDQSxVQUFNQyxVQUFVO0FBQ2RMLGNBQVEsS0FBS00sT0FBTCxDQUFhTixNQUFiLEVBQXFCRSxPQUFyQixDQURNO0FBRWRLLFdBQUssS0FBS0QsT0FBTCxDQUFjLEdBQUVOLE1BQU8sUUFBTyxLQUFLTyxHQUFJLEVBQXZDLEVBQTBDTCxPQUExQyxDQUZTO0FBR2RNLGFBQU8sS0FBS0YsT0FBTCxDQUFjLEdBQUVOLE1BQU8sUUFBdkIsRUFBZ0NFLE9BQWhDO0FBSE8sS0FBaEI7QUFNQUcsWUFBUUwsTUFBUixHQUFpQixtQkFBTUssUUFBUUwsTUFBZCxFQUFzQkssUUFBUUUsR0FBOUIsRUFBbUNGLFFBQVFHLEtBQTNDLENBQWpCO0FBQ0FILFlBQVFMLE1BQVIsR0FBaUIsMEJBQVNLLFFBQVFMLE1BQWpCLEVBQXlCQyxJQUF6QixDQUFqQjtBQUVBLFdBQU9JLFFBQVFMLE1BQWY7QUFDRDs7QUFHRCxTQUFPLDBCQUFTQSxNQUFULEVBQWlCQyxJQUFqQixDQUFQO0FBQ0Q7O2VBRWNGLFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBkZWZhdWx0c0RlZXAgYXMgZGVmYXVsdHMsXG4gIG1lcmdlLFxufSBmcm9tICdsb2Rhc2gnXG5cbi8qKlxuICogQ3JlYXRlIHRoZSBjb25maWd1cmF0aW9uIG9iamVjdCBmcm9tIGlucHV0c1xuICpcbiAqIEZvciBwYXRoLWJhc2VkIGNvbmZpZ3MsIHdlIGFkZGl0aW9uYWxseSB3YW50IHRvIHN1cHBvcnQ6XG4gKiAtIGxvYWRpbmcgYW5kIGFwcGx5aW5nIGVudmlyb25tZW50IG92ZXJyaWRlcyBvbiB0b3Agb2YgdGhlIGJhc2UgY29uZmlnXG4gKiAtIGxvYWRpbmcgYW5kIGFwcGx5aW5nIGxvY2FsIChwZXItbWFjaGluZSkgb3ZlcnJpZGVzIG9uIHRvcCBvZiB0aGUgY29uZmlnXG4gKlxuICogVGhpcyBwYXR0ZXJuIGlzIGZyZXF1ZW50LWVub3VnaCB0aGF0IGl0IHdhcnJhbnRzIGV4cGxpY2l0IHN1cHBvcnQgaW4gY29yZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBjb25maWcgICAgICAgIEJhc2UgY29uZmlnIG9iamVjdCwgb3IgYSBzdHJpbmcgKHBhdGgpIHRvIGEgbW9kdWxlIHdoZXJlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbmZpZyBzaG91bGQgYmUgbG9kZWQgZnJvbSwgcmVsYXRpdmUgdG8gcm9vdFxuICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBiYXNlICAgICAgICAgIERlZmF1bHQgdmFsdWVzIHRvIGJlIGFkZGVkIHRvIHRoZSBjb25maWcgb2JqZWN0IGlmIHRoZXkgYXJlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2luZyBmcm9tIHRoZSBpbnB1dCBjb25maWdcbiAqIEByZXR1cm4gICAge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gbWtjb25maWcoY29uZmlnID0ge30sIGJhc2UgPSB7fSkge1xuICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBvcHRpb25zID0geyBvcHRpb25hbDogdHJ1ZSwgbm9ybWFsaXNlOiB0cnVlIH1cbiAgICBjb25zdCBtb2R1bGVzID0ge1xuICAgICAgY29uZmlnOiB0aGlzLnJlcXVpcmUoY29uZmlnLCBvcHRpb25zKSxcbiAgICAgIGVudjogdGhpcy5yZXF1aXJlKGAke2NvbmZpZ30vZW52LyR7dGhpcy5lbnZ9YCwgb3B0aW9ucyksXG4gICAgICBsb2NhbDogdGhpcy5yZXF1aXJlKGAke2NvbmZpZ30vbG9jYWxgLCBvcHRpb25zKSxcbiAgICB9XG5cbiAgICBtb2R1bGVzLmNvbmZpZyA9IG1lcmdlKG1vZHVsZXMuY29uZmlnLCBtb2R1bGVzLmVudiwgbW9kdWxlcy5sb2NhbClcbiAgICBtb2R1bGVzLmNvbmZpZyA9IGRlZmF1bHRzKG1vZHVsZXMuY29uZmlnLCBiYXNlKVxuXG4gICAgcmV0dXJuIG1vZHVsZXMuY29uZmlnXG4gIH1cblxuICAvLyBJdCdzIGp1c3QgYW4gb2JqZWN0LCBhcHBseSBkZWZhdWx0cyBhbmQgR1RGT1xuICByZXR1cm4gZGVmYXVsdHMoY29uZmlnLCBiYXNlKVxufVxuXG5leHBvcnQgZGVmYXVsdCBta2NvbmZpZ1xuIl19

@@ -21,2 +21,2 @@ "use strict";

exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1rbG9nLm1qcyJdLCJuYW1lcyI6WyJta2xvZyIsImNvbmZpZyIsInNlcmlhbGl6ZXJzIiwicmVxdWlyZSIsIm5vcm1hbGlzZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOzs7O0FBU0EsU0FBU0EsS0FBVCxDQUFlQyxNQUFmLEVBQXVCO0FBRXJCQSxTQUFPQyxXQUFQLEdBQXFCLE9BQU9ELE9BQU9DLFdBQWQsS0FBOEIsUUFBOUIsR0FDakIsS0FBS0MsT0FBTCxDQUFhRixPQUFPQyxXQUFwQixFQUFpQztBQUFFRSxlQUFXO0FBQWIsR0FBakMsQ0FEaUIsR0FFakJILE9BQU9DLFdBRlg7QUFJQSxTQUFPLG1CQUFLRCxNQUFMLENBQVA7QUFDRDs7ZUFFY0QsSyIsImZpbGUiOiJta2xvZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwaW5vIGZyb20gJ3Bpbm8nXG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGxvZ2dlciAocGlubylcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBjb25maWcgICAgTG9nZ2VyIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm4gICAge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gbWtsb2coY29uZmlnKSB7XG4gIC8vIEFsbG93IGxvYWRpbmcgdGhlIHNlcmlhbGlzZXJzIGZyb20gYSBtb2R1bGVcbiAgY29uZmlnLnNlcmlhbGl6ZXJzID0gdHlwZW9mIGNvbmZpZy5zZXJpYWxpemVycyA9PT0gJ3N0cmluZydcbiAgICA/IHRoaXMucmVxdWlyZShjb25maWcuc2VyaWFsaXplcnMsIHsgbm9ybWFsaXNlOiB0cnVlIH0pXG4gICAgOiBjb25maWcuc2VyaWFsaXplcnNcblxuICByZXR1cm4gcGlubyhjb25maWcpXG59XG5cbmV4cG9ydCBkZWZhdWx0IG1rbG9nXG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1rbG9nLm1qcyJdLCJuYW1lcyI6WyJta2xvZyIsImNvbmZpZyIsInNlcmlhbGl6ZXJzIiwicmVxdWlyZSIsIm5vcm1hbGlzZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOzs7O0FBU0EsU0FBU0EsS0FBVCxDQUFlQyxNQUFmLEVBQXVCO0FBRXJCQSxTQUFPQyxXQUFQLEdBQXFCLE9BQU9ELE9BQU9DLFdBQWQsS0FBOEIsUUFBOUIsR0FDakIsS0FBS0MsT0FBTCxDQUFhRixPQUFPQyxXQUFwQixFQUFpQztBQUFFRSxlQUFXO0FBQWIsR0FBakMsQ0FEaUIsR0FFakJILE9BQU9DLFdBRlg7QUFJQSxTQUFPLG1CQUFLRCxNQUFMLENBQVA7QUFDRDs7ZUFFY0QsSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwaW5vIGZyb20gJ3Bpbm8nXG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGxvZ2dlciAocGlubylcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBjb25maWcgICAgTG9nZ2VyIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm4gICAge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gbWtsb2coY29uZmlnKSB7XG4gIC8vIEFsbG93IGxvYWRpbmcgdGhlIHNlcmlhbGlzZXJzIGZyb20gYSBtb2R1bGVcbiAgY29uZmlnLnNlcmlhbGl6ZXJzID0gdHlwZW9mIGNvbmZpZy5zZXJpYWxpemVycyA9PT0gJ3N0cmluZydcbiAgICA/IHRoaXMucmVxdWlyZShjb25maWcuc2VyaWFsaXplcnMsIHsgbm9ybWFsaXNlOiB0cnVlIH0pXG4gICAgOiBjb25maWcuc2VyaWFsaXplcnNcblxuICByZXR1cm4gcGlubyhjb25maWcpXG59XG5cbmV4cG9ydCBkZWZhdWx0IG1rbG9nXG4iXX0=

@@ -20,2 +20,2 @@ "use strict";

exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm9wdHJlcXVpcmUubWpzIl0sIm5hbWVzIjpbIm9wdHJlcXVpcmUiLCJtb2R1bGUiLCJyZXF1aXJlIiwicmVzb2x2ZSIsImVyciJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQU9BLFNBQVNBLFVBQVQsQ0FBb0JDLE1BQXBCLEVBQTRCO0FBQzFCLE1BQUk7QUFDRkMsWUFBUUMsT0FBUixDQUFnQkYsTUFBaEI7QUFDRCxHQUZELENBRUUsT0FBT0csR0FBUCxFQUFZO0FBQ1osV0FBTyxFQUFQO0FBQ0Q7O0FBR0QsU0FBT0YsUUFBUUQsTUFBUixDQUFQO0FBQ0Q7O2VBRWNELFUiLCJmaWxlIjoib3B0cmVxdWlyZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogT3B0aW9uYWxseSByZXF1aXJlIGEgbW9kdWxlLCByZXR1cm5pbmcgYW4gZW1wdHkgb2JqZWN0IGlmIHRoZSBtb2R1bGUgZG9lcyBub3QgZXhpc3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBtb2R1bGUgICAgUGF0aCB0byB0aGUgbW9kdWxlIHRvIHJlcXVpcmVcbiAqIEByZXR1cm4gICAge21peGVkfSAgICAgICAgICAgICAgIFRoZSBtb2R1bGUncyBjb250ZW50c1xuICovXG5mdW5jdGlvbiBvcHRyZXF1aXJlKG1vZHVsZSkge1xuICB0cnkge1xuICAgIHJlcXVpcmUucmVzb2x2ZShtb2R1bGUpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiB7fVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlXG4gIHJldHVybiByZXF1aXJlKG1vZHVsZSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgb3B0cmVxdWlyZVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm9wdHJlcXVpcmUubWpzIl0sIm5hbWVzIjpbIm9wdHJlcXVpcmUiLCJtb2R1bGUiLCJyZXF1aXJlIiwicmVzb2x2ZSIsImVyciJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQU9BLFNBQVNBLFVBQVQsQ0FBb0JDLE1BQXBCLEVBQTRCO0FBQzFCLE1BQUk7QUFDRkMsWUFBUUMsT0FBUixDQUFnQkYsTUFBaEI7QUFDRCxHQUZELENBRUUsT0FBT0csR0FBUCxFQUFZO0FBQ1osV0FBTyxFQUFQO0FBQ0Q7O0FBR0QsU0FBT0YsUUFBUUQsTUFBUixDQUFQO0FBQ0Q7O2VBRWNELFUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE9wdGlvbmFsbHkgcmVxdWlyZSBhIG1vZHVsZSwgcmV0dXJuaW5nIGFuIGVtcHR5IG9iamVjdCBpZiB0aGUgbW9kdWxlIGRvZXMgbm90IGV4aXN0XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgbW9kdWxlICAgIFBhdGggdG8gdGhlIG1vZHVsZSB0byByZXF1aXJlXG4gKiBAcmV0dXJuICAgIHttaXhlZH0gICAgICAgICAgICAgICBUaGUgbW9kdWxlJ3MgY29udGVudHNcbiAqL1xuZnVuY3Rpb24gb3B0cmVxdWlyZShtb2R1bGUpIHtcbiAgdHJ5IHtcbiAgICByZXF1aXJlLnJlc29sdmUobW9kdWxlKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4ge31cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxuICByZXR1cm4gcmVxdWlyZShtb2R1bGUpXG59XG5cbmV4cG9ydCBkZWZhdWx0IG9wdHJlcXVpcmVcbiJdfQ==

@@ -41,2 +41,3 @@ "use strict";

const action = sinon.spy();
action.config = {};
atlas.action('dummy', action);

@@ -49,2 +50,3 @@ const args = action.getCall(0).args[0];

const action = sinon.spy();
action.config = {};
atlas.action('dummy', action);

@@ -58,2 +60,3 @@ const args = action.getCall(0).args[0];

const action = sinon.spy();
action.config = {};
atlas.action('dummy', action);

@@ -67,2 +70,3 @@ const args = action.getCall(0).args[0];

const action = sinon.spy();
action.config = {};
atlas.action('dummy', action);

@@ -75,2 +79,3 @@ const args = action.getCall(0).args[0];

const action = sinon.spy();
action.config = {};
action.defaults = {

@@ -85,2 +90,3 @@ default: true

const action = sinon.spy();
action.config = {};
action.requires = ['service:dummy'];

@@ -93,2 +99,3 @@ expect(() => {

const action = sinon.spy();
action.config = {};
expect(() => {

@@ -102,4 +109,35 @@ atlas.action('dummy', action, {

});
it('throws when user config fails component config schema', () => {
options.config.actions.dummy = {
lol: true
};
atlas = new _.Atlas(options);
const action = sinon.spy();
action.config = {
type: 'object',
additionalProperties: false,
properties: {
test: {
type: 'boolean'
}
}
};
expect(() => atlas.action('dummy', action)).to.throw(_errors.ValidationError);
});
it('works when user config passes component config schema', () => {
const action = sinon.spy();
action.config = {
type: 'object',
additionalProperties: false,
properties: {
test: {
type: 'boolean'
}
}
};
expect(() => atlas.action('dummy', action)).not.to.throw(_errors.ValidationError);
});
it('works when all requirements are specified', () => {
const action = sinon.spy();
action.config = {};
action.requires = ['service:dummy'];

@@ -115,2 +153,2 @@ expect(() => {

});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFjdGlvbi50ZXN0Lm1qcyJdLCJuYW1lcyI6WyJEdW1teUFjdGlvbiIsImRlc2NyaWJlIiwiYXRsYXMiLCJvcHRpb25zIiwiYmVmb3JlRWFjaCIsInJvb3QiLCJfX2Rpcm5hbWUiLCJjb25maWciLCJhY3Rpb25zIiwiZHVtbXkiLCJ0ZXN0IiwiaXQiLCJleHBlY3QiLCJhY3Rpb24iLCJ0byIsImVxdWFsIiwidGhyb3ciLCJzaW5vbiIsInNweSIsImFyZ3MiLCJnZXRDYWxsIiwiaGF2ZSIsInByb3BlcnR5IiwibG9nIiwiYmUiLCJhbiIsImNoaW5kaW5ncyIsIm1hdGNoIiwiY29tcG9uZW50IiwiYSIsImRlZmF1bHRzIiwiZGVmYXVsdCIsInJlcXVpcmVzIiwiYWxpYXNlcyIsIm5vdCJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7QUFDQTs7QUFDQTs7OztBQUVBLE1BQU1BLFdBQU4seUJBQWlDOztBQUVqQ0MsU0FBUyxpQkFBVCxFQUE0QixNQUFNO0FBQ2hDLE1BQUlDLEtBQUo7QUFDQSxNQUFJQyxPQUFKO0FBRUFDLGFBQVcsTUFBTTtBQUNmRCxjQUFVO0FBQ1JFLFlBQU1DLFNBREU7QUFFUkMsY0FBUTtBQUNOQyxpQkFBUztBQUNQQyxpQkFBTztBQUNMQyxrQkFBTTtBQUREO0FBREE7QUFESDtBQUZBLEtBQVY7QUFVQVIsWUFBUSxZQUFVQyxPQUFWLENBQVI7QUFDRCxHQVpEO0FBY0FRLEtBQUcsY0FBSCxFQUFtQixNQUFNO0FBQ3ZCQyxXQUFPVixNQUFNVyxNQUFOLENBQWEsT0FBYixFQUFzQmIsV0FBdEIsQ0FBUCxFQUEyQ2MsRUFBM0MsQ0FBOENDLEtBQTlDLENBQW9EYixLQUFwRDtBQUNELEdBRkQ7QUFJQVMsS0FBRywrREFBSCxFQUFvRSxNQUFNO0FBQ3hFVCxVQUFNVyxNQUFOLENBQWEsT0FBYixFQUFzQmIsV0FBdEI7QUFDQVksV0FBTyxNQUFNVixNQUFNVyxNQUFOLENBQWEsT0FBYixFQUFzQmIsV0FBdEIsQ0FBYixFQUFpRGMsRUFBakQsQ0FBb0RF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V0FBT08sS0FBS1osTUFBWixFQUFvQk8sRUFBcEIsQ0FBdUJPLElBQXZCLENBQTRCQyxRQUE1QixDQUFxQyxTQUFyQyxFQUFnRCxJQUFoRDtBQUNELEdBUEQ7QUFTQVgsS0FBRyxrRUFBSCxFQUF1RSxNQUFNO0FBQzNFLFVBQU1FLFNBQVNJLE1BQU1DLEdBQU4sRUFBZjtBQUNBTCxXQUFPbUIsUUFBUCxHQUFrQixDQUFDLGVBQUQsQ0FBbEI7QUFDQXBCLFdBQU8sTUFBTTtBQUNYVixZQUFNVyxNQUFOLENBQWEsT0FBYixFQUFzQkEsTUFBdEI7QUFDRCxLQUZELEVBRUdDLEVBRkgsQ0FFTUUsS0FGTix5QkFFNEIscUNBRjVCO0FBR0QsR0FORDtBQVFBTCxLQUFHLDhDQUFILEVBQW1ELE1BQU07QUFDdkQsVUFBTUUsU0FBU0ksTUFBTUMsR0FBTixFQUFmO0FBQ0FOLFdBQU8sTUFBTTtBQUNYVixZQUFNVyxNQUFOLENBQWEsT0FBYixFQUFzQkEsTUFBdEIsRUFBOEI7QUFBRW9CLGlCQUFTO0FBQ3ZDLDJCQUFpQjtBQURzQjtBQUFYLE9BQTlCO0FBR0QsS0FKRCxFQUlHbkIsRUFKSCxDQUlNRSxLQUpOLHlCQUk0QixzQ0FKNUI7QUFLRCxHQVBEO0FBU0FMLEtBQUcsMkNBQUgsRUFBZ0QsTUFBTTtBQUNwRCxVQUFNRSxTQUFTSSxNQUFNQyxHQUFOLEVBQWY7QUFDQUwsV0FBT21CLFFBQVAsR0FBa0IsQ0FBQyxlQUFELENBQWxCO0FBQ0FwQixXQUFPLE1BQU07QUFDWFYsWUFBTVcsTUFBTixDQUFhLE9BQWIsRUFBc0JBLE1BQXRCLEVBQThCO0FBQUVvQixpQkFBUztBQUN2QywyQkFBaUI7QUFEc0I7QUFBWCxPQUE5QjtBQUdELEtBSkQsRUFJR25CLEVBSkgsQ0FJTW9CLEdBSk4sQ0FJVWxCLEtBSlY7QUFLRCxHQVJEO0FBU0QsQ0F4R0QiLCJmaWxlIjoiYWN0aW9uLnRlc3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdGxhcyB9IGZyb20gJy4uJ1xuaW1wb3J0IEFjdGlvbiBmcm9tICdAYXRsYXMuanMvYWN0aW9uJ1xuaW1wb3J0IHsgRnJhbWV3b3JrRXJyb3IgfSBmcm9tICdAYXRsYXMuanMvZXJyb3JzJ1xuXG5jbGFzcyBEdW1teUFjdGlvbiBleHRlbmRzIEFjdGlvbiB7fVxuXG5kZXNjcmliZSgnQXRsYXM6OmFjdGlvbigpJywgKCkgPT4ge1xuICBsZXQgYXRsYXNcbiAgbGV0IG9wdGlvbnNcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgcm9vdDogX19kaXJuYW1lLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgICBkdW1teToge1xuICAgICAgICAgICAgdGVzdDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XG4gICAgYXRsYXMgPSBuZXcgQXRsYXMob3B0aW9ucylcbiAgfSlcblxuICBpdCgncmV0dXJucyB0aGlzJywgKCkgPT4ge1xuICAgIGV4cGVjdChhdGxhcy5hY3Rpb24oJ2R1bW15JywgRHVtbXlBY3Rpb24pKS50by5lcXVhbChhdGxhcylcbiAgfSlcblxuICBpdCgndGhyb3dzIHdoZW4gdGhlIGFsaWFzIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBieSBhbm90aGVyIGFjdGlvbicsICgpID0+IHtcbiAgICBhdGxhcy5hY3Rpb24oJ2R1bW15JywgRHVtbXlBY3Rpb24pXG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLmFjdGlvbignZHVtbXknLCBEdW1teUFjdGlvbikpLnRvLnRocm93KEZyYW1ld29ya0Vycm9yKVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiB0aGUgYWN0aW9uIGlzIG5vdCBhIGNsYXNzL2Z1bmN0aW9uJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBhdGxhcy5hY3Rpb24oJ2R1bW15Jywge30pKS50by50aHJvdyhGcmFtZXdvcmtFcnJvcilcbiAgfSlcblxuICBpdCgncHJvdmlkZXMgdGhlIGF0bGFzIG9uIGFjdGlvbiBjb25zdHJ1Y3RvciBhcmd1bWVudCcsICgpID0+IHtcbiAgICBjb25zdCBhY3Rpb24gPSBzaW5vbi5zcHkoKVxuICAgIGF0bGFzLmFjdGlvbignZHVtbXknLCBhY3Rpb24pXG4gICAgY29uc3QgYXJncyA9IGFjdGlvbi5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzKS50by5oYXZlLnByb3BlcnR5KCdhdGxhcycpXG4gICAgZXhwZWN0KGFyZ3MuYXRsYXMpLnRvLmVxdWFsKGF0bGFzKVxuICB9KVxuXG4gIGl0KCdwcm92aWRlcyBhIGxvZ2dlciBpbnN0YW5jZSBvbiBhY3Rpb24gY29uc3RydWN0b3IgYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgY29uc3QgYWN0aW9uID0gc2lub24uc3B5KClcbiAgICBhdGxhcy5hY3Rpb24oJ2R1bW15JywgYWN0aW9uKVxuICAgIGNvbnN0IGFyZ3MgPSBhY3Rpb24uZ2V0Q2FsbCgwKS5hcmdzWzBdXG5cbiAgICBleHBlY3QoYXJncykudG8uaGF2ZS5wcm9wZXJ0eSgnbG9nJylcbiAgICBleHBlY3QoYXJncy5sb2cpLnRvLmJlLmFuKCdvYmplY3QnKVxuICAgIGV4cGVjdChhcmdzLmxvZy5jaGluZGluZ3MpLnRvLm1hdGNoKC9cImFjdGlvblwiOlwiZHVtbXlcIi8pXG4gIH0pXG5cbiAgaXQoJ3Byb3ZpZGVzIHRoZSBjb25maWcgb2JqZWN0IG9uIGFjdGlvbiBjb25zdHJ1Y3RvciBhcmd1bWVudCcsICgpID0+IHtcbiAgICBjb25zdCBhY3Rpb24gPSBzaW5vbi5zcHkoKVxuICAgIGF0bGFzLmFjdGlvbignZHVtbXknLCBhY3Rpb24pXG4gICAgY29uc3QgYXJncyA9IGFjdGlvbi5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzKS50by5oYXZlLnByb3BlcnR5KCdjb25maWcnKVxuICAgIGV4cGVjdChhcmdzLmNvbmZpZykudG8uYmUuYW4oJ29iamVjdCcpXG4gICAgZXhwZWN0KGFyZ3MuY29uZmlnKS50by5lcXVhbChvcHRpb25zLmNvbmZpZy5hY3Rpb25zLmR1bW15KVxuICB9KVxuXG4gIGl0KCdwcm92aWRlcyB0aGUgcmVzb2x2ZSBmdW5jdGlvbiBvbiBhY3Rpb24gY29uc3RydWN0b3IgYXJndW1lbnQgYXMgYGNvbXBvbmVudGAnLCAoKSA9PiB7XG4gICAgY29uc3QgYWN0aW9uID0gc2lub24uc3B5KClcbiAgICBhdGxhcy5hY3Rpb24oJ2R1bW15JywgYWN0aW9uKVxuICAgIGNvbnN0IGFyZ3MgPSBhY3Rpb24uZ2V0Q2FsbCgwKS5hcmdzWzBdXG5cbiAgICBleHBlY3QoYXJncykudG8uaGF2ZS5wcm9wZXJ0eSgnY29tcG9uZW50JylcbiAgICBleHBlY3QoYXJncy5jb21wb25lbnQpLnRvLmJlLmEoJ2Z1bmN0aW9uJylcbiAgfSlcblxuICBpdCgnYXBwbGllcyBkZWZhdWx0cyBkZWZpbmVkIG9uIGFjdGlvbiBvbiB0b3Agb2YgdXNlci1wcm92aWRlZCBjb25maWcnLCAoKSA9PiB7XG4gICAgY29uc3QgYWN0aW9uID0gc2lub24uc3B5KClcbiAgICBhY3Rpb24uZGVmYXVsdHMgPSB7IGRlZmF1bHQ6IHRydWUgfVxuICAgIGF0bGFzLmFjdGlvbignZHVtbXknLCBhY3Rpb24pXG4gICAgY29uc3QgYXJncyA9IGFjdGlvbi5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzLmNvbmZpZykudG8uaGF2ZS5wcm9wZXJ0eSgnZGVmYXVsdCcsIHRydWUpXG4gIH0pXG5cbiAgaXQoJ3Rocm93cyB3aGVuIGFsaWFzZXMgZG8gbm90IHNhdGlzZnkgcmVxdWlyZW1lbnRzIG9mIHRoZSBjb21wb25lbnQnLCAoKSA9PiB7XG4gICAgY29uc3QgYWN0aW9uID0gc2lub24uc3B5KClcbiAgICBhY3Rpb24ucmVxdWlyZXMgPSBbJ3NlcnZpY2U6ZHVtbXknXVxuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBhdGxhcy5hY3Rpb24oJ2R1bW15JywgYWN0aW9uKVxuICAgIH0pLnRvLnRocm93KEZyYW1ld29ya0Vycm9yLCAvTWlzc2luZyBhbGlhc2VzIGZvciBjb21wb25lbnQgZHVtbXkvKVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiBleHRyYW5lb3VzIGFsaWFzZXMgYXJlIHNwZWNpZmllZCcsICgpID0+IHtcbiAgICBjb25zdCBhY3Rpb24gPSBzaW5vbi5zcHkoKVxuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBhdGxhcy5hY3Rpb24oJ2R1bW15JywgYWN0aW9uLCB7IGFsaWFzZXM6IHtcbiAgICAgICAgJ3NlcnZpY2U6ZHVtbXknOiAnZHVtbXknLFxuICAgICAgfSB9KVxuICAgIH0pLnRvLnRocm93KEZyYW1ld29ya0Vycm9yLCAvVW5uZWVkZWQgYWxpYXNlcyBmb3IgY29tcG9uZW50IGR1bW15LylcbiAgfSlcblxuICBpdCgnd29ya3Mgd2hlbiBhbGwgcmVxdWlyZW1lbnRzIGFyZSBzcGVjaWZpZWQnLCAoKSA9PiB7XG4gICAgY29uc3QgYWN0aW9uID0gc2lub24uc3B5KClcbiAgICBhY3Rpb24ucmVxdWlyZXMgPSBbJ3NlcnZpY2U6ZHVtbXknXVxuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBhdGxhcy5hY3Rpb24oJ2R1bW15JywgYWN0aW9uLCB7IGFsaWFzZXM6IHtcbiAgICAgICAgJ3NlcnZpY2U6ZHVtbXknOiAnZHVtbXknLFxuICAgICAgfSB9KVxuICAgIH0pLnRvLm5vdC50aHJvdygpXG4gIH0pXG59KVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFjdGlvbi50ZXN0Lm1qcyJdLCJuYW1lcyI6WyJEdW1teUFjdGlvbiIsIkFjdGlvbiIsImRlc2NyaWJlIiwiYXRsYXMiLCJvcHRpb25zIiwiYmVmb3JlRWFjaCIsInJvb3QiLCJfX2Rpcm5hbWUiLCJjb25maWciLCJhY3Rpb25zIiwiZHVtbXkiLCJ0ZXN0IiwiQXRsYXMiLCJpdCIsImV4cGVjdCIsImFjdGlvbiIsInRvIiwiZXF1YWwiLCJ0aHJvdyIsIkZyYW1ld29ya0Vycm9yIiwic2lub24iLCJzcHkiLCJhcmdzIiwiZ2V0Q2FsbCIsImhhdmUiLCJwcm9wZXJ0eSIsImxvZyIsImJlIiwiYW4iLCJjaGluZGluZ3MiLCJtYXRjaCIsImNvbXBvbmVudCIsImEiLCJkZWZhdWx0cyIsImRlZmF1bHQiLCJyZXF1aXJlcyIsImFsaWFzZXMiLCJsb2wiLCJ0eXBlIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwiVmFsaWRhdGlvbkVycm9yIiwibm90Il0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQUNBOzs7O0FBS0EsTUFBTUEsV0FBTixTQUEwQkMsZUFBMUIsQ0FBaUM7O0FBRWpDQyxTQUFTLGlCQUFULEVBQTRCLE1BQU07QUFDaEMsTUFBSUMsS0FBSjtBQUNBLE1BQUlDLE9BQUo7QUFFQUMsYUFBVyxNQUFNO0FBQ2ZELGNBQVU7QUFDUkUsWUFBTUMsU0FERTtBQUVSQyxjQUFRO0FBQ05DLGlCQUFTO0FBQ1BDLGlCQUFPO0FBQ0xDLGtCQUFNO0FBREQ7QUFEQTtBQURIO0FBRkEsS0FBVjtBQVVBUixZQUFRLElBQUlTLE9BQUosQ0FBVVIsT0FBVixDQUFSO0FBQ0QsR0FaRDtBQWNBUyxLQUFHLGNBQUgsRUFBbUIsTUFBTTtBQUN2QkMsV0FBT1gsTUFBTVksTUFBTixDQUFhLE9BQWIsRUFBc0JmLFdBQXRCLENBQVAsRUFBMkNnQixFQUEzQyxDQUE4Q0MsS0FBOUMsQ0FBb0RkLEtBQXBEO0FBQ0QsR0FGRDtBQUlBVSxLQUFHLCtEQUFILEVB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RXFCLGlCQUFTO0FBQ3ZDLDJCQUFpQjtBQURzQjtBQUFYLE9BQTlCO0FBR0QsS0FKRCxFQUlHcEIsRUFKSCxDQUlNMEIsR0FKTixDQUlVeEIsS0FKVjtBQUtELEdBVEQ7QUFVRCxDQTdJRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0bGFzIH0gZnJvbSAnLi4nXG5pbXBvcnQgQWN0aW9uIGZyb20gJ0BhdGxhcy5qcy9hY3Rpb24nXG5pbXBvcnQge1xuICBGcmFtZXdvcmtFcnJvcixcbiAgVmFsaWRhdGlvbkVycm9yLFxufSBmcm9tICdAYXRsYXMuanMvZXJyb3JzJ1xuXG5jbGFzcyBEdW1teUFjdGlvbiBleHRlbmRzIEFjdGlvbiB7fVxuXG5kZXNjcmliZSgnQXRsYXM6OmFjdGlvbigpJywgKCkgPT4ge1xuICBsZXQgYXRsYXNcbiAgbGV0IG9wdGlvbnNcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgcm9vdDogX19kaXJuYW1lLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgICBkdW1teToge1xuICAgICAgICAgICAgdGVzdDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XG4gICAgYXRsYXMgPSBuZXcgQXRsYXMob3B0aW9ucylcbiAgfSlcblxuICBpdCgncmV0dXJucyB0aGlzJywgKCkgPT4ge1xuICAgIGV4cGVjdChhdGxhcy5hY3Rpb24oJ2R1bW15JywgRHVtbXlBY3Rpb24pKS50by5lcXVhbChhdGxhcylcbiAgfSlcblxuICBpdCgndGhyb3dzIHdoZW4gdGhlIGFsaWFzIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBieSBhbm90aGVyIGFjdGlvbicsICgpID0+IHtcbiAgICBhdGxhcy5hY3Rpb24oJ2R1bW15JywgRHVtbXlBY3Rpb24pXG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLmFjdGlvbignZHVtbXknLCBEdW1teUFjdGlvbikpLnRvLnRocm93KEZyYW1ld29ya0Vycm9yKVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiB0aGUgYWN0aW9uIGlzIG5vdCBhIGNsYXNzL2Z1bmN0aW9uJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBhdGxhcy5hY3Rpb24oJ2R1bW15Jywge30pKS50by50aHJvdyhGcmFtZXdvcmtFcnJvcilcbiAgfSlcblxuICBpdCgncHJvdmlkZXMgdGhlIGF0bGFzIG9uIGFjdGlvbiBjb25zdHJ1Y3RvciBhcmd1bWVudCcsICgpID0+IHtcbiAgICBjb25zdCBhY3Rpb24gPSBzaW5vbi5zcHkoKVxuICAgIGFjdGlvbi5jb25maWcgPSB7fVxuICAgIGF0bGFzLmFjdGlvbignZHVtbXknLCBhY3Rpb24pXG4gICAgY29uc3QgYXJncyA9IGFjdGlvbi5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzKS50by5oYXZlLnByb3BlcnR5KCdhdGxhcycpXG4gICAgZXhwZWN0KGFyZ3MuYXRsYXMpLnRvLmVxdWFsKGF0bGFzKVxuICB9KVxuXG4gIGl0KCdwcm92aWRlcyBhIGxvZ2dlciBpbnN0YW5jZSBvbiBhY3Rpb24gY29uc3RydWN0b3IgYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgY29uc3QgYWN0aW9uID0gc2lub24uc3B5KClcbiAgICBhY3Rpb24uY29uZmlnID0ge31cbiAgICBhdGxhcy5hY3Rpb24oJ2R1bW15JywgYWN0aW9uKVxuICAgIGNvbnN0IGFyZ3MgPSBhY3Rpb24uZ2V0Q2FsbCgwKS5hcmdzWzBdXG5cbiAgICBleHBlY3QoYXJncykudG8uaGF2ZS5wcm9wZXJ0eSgnbG9nJylcbiAgICBleHBlY3QoYXJncy5sb2cpLnRvLmJlLmFuKCdvYmplY3QnKVxuICAgIGV4cGVjdChhcmdzLmxvZy5jaGluZGluZ3MpLnRvLm1hdGNoKC9cImFjdGlvblwiOlwiZHVtbXlcIi8pXG4gIH0pXG5cbiAgaXQoJ3Byb3ZpZGVzIHRoZSBjb25maWcgb2JqZWN0IG9uIGFjdGlvbiBjb25zdHJ1Y3RvciBhcmd1bWVudCcsICgpID0+IHtcbiAgICBjb25zdCBhY3Rpb24gPSBzaW5vbi5zcHkoKVxuICAgIGFjdGlvbi5jb25maWcgPSB7fVxuICAgIGF0bGFzLmFjdGlvbignZHVtbXknLCBhY3Rpb24pXG4gICAgY29uc3QgYXJncyA9IGFjdGlvbi5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzKS50by5oYXZlLnByb3BlcnR5KCdjb25maWcnKVxuICAgIGV4cGVjdChhcmdzLmNvbmZpZykudG8uYmUuYW4oJ29iamVjdCcpXG4gICAgZXhwZWN0KGFyZ3MuY29uZmlnKS50by5lcXVhbChvcHRpb25zLmNvbmZpZy5hY3Rpb25zLmR1bW15KVxuICB9KVxuXG4gIGl0KCdwcm92aWRlcyB0aGUgcmVzb2x2ZSBmdW5jdGlvbiBvbiBhY3Rpb24gY29uc3RydWN0b3IgYXJndW1lbnQgYXMgYGNvbXBvbmVudGAnLCAoKSA9PiB7XG4gICAgY29uc3QgYWN0aW9uID0gc2lub24uc3B5KClcbiAgICBhY3Rpb24uY29uZmlnID0ge31cbiAgICBhdGxhcy5hY3Rpb24oJ2R1bW15JywgYWN0aW9uKVxuICAgIGNvbnN0IGFyZ3MgPSBhY3Rpb24uZ2V0Q2FsbCgwKS5hcmdzWzBdXG5cbiAgICBleHBlY3QoYXJncykudG8uaGF2ZS5wcm9wZXJ0eSgnY29tcG9uZW50JylcbiAgICBleHBlY3QoYXJncy5jb21wb25lbnQpLnRvLmJlLmEoJ2Z1bmN0aW9uJylcbiAgfSlcblxuICBpdCgnYXBwbGllcyBkZWZhdWx0cyBkZWZpbmVkIG9uIGFjdGlvbiBvbiB0b3Agb2YgdXNlci1wcm92aWRlZCBjb25maWcnLCAoKSA9PiB7XG4gICAgY29uc3QgYWN0aW9uID0gc2lub24uc3B5KClcbiAgICBhY3Rpb24uY29uZmlnID0ge31cbiAgICBhY3Rpb24uZGVmYXVsdHMgPSB7IGRlZmF1bHQ6IHRydWUgfVxuICAgIGF0bGFzLmFjdGlvbignZHVtbXknLCBhY3Rpb24pXG4gICAgY29uc3QgYXJncyA9IGFjdGlvbi5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzLmNvbmZpZykudG8uaGF2ZS5wcm9wZXJ0eSgnZGVmYXVsdCcsIHRydWUpXG4gIH0pXG5cbiAgaXQoJ3Rocm93cyB3aGVuIGFsaWFzZXMgZG8gbm90IHNhdGlzZnkgcmVxdWlyZW1lbnRzIG9mIHRoZSBjb21wb25lbnQnLCAoKSA9PiB7XG4gICAgY29uc3QgYWN0aW9uID0gc2lub24uc3B5KClcbiAgICBhY3Rpb24uY29uZmlnID0ge31cbiAgICBhY3Rpb24ucmVxdWlyZXMgPSBbJ3NlcnZpY2U6ZHVtbXknXVxuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBhdGxhcy5hY3Rpb24oJ2R1bW15JywgYWN0aW9uKVxuICAgIH0pLnRvLnRocm93KEZyYW1ld29ya0Vycm9yLCAvTWlzc2luZyBhbGlhc2VzIGZvciBjb21wb25lbnQgZHVtbXkvKVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiBleHRyYW5lb3VzIGFsaWFzZXMgYXJlIHNwZWNpZmllZCcsICgpID0+IHtcbiAgICBjb25zdCBhY3Rpb24gPSBzaW5vbi5zcHkoKVxuICAgIGFjdGlvbi5jb25maWcgPSB7fVxuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBhdGxhcy5hY3Rpb24oJ2R1bW15JywgYWN0aW9uLCB7IGFsaWFzZXM6IHtcbiAgICAgICAgJ3NlcnZpY2U6ZHVtbXknOiAnZHVtbXknLFxuICAgICAgfSB9KVxuICAgIH0pLnRvLnRocm93KEZyYW1ld29ya0Vycm9yLCAvVW5uZWVkZWQgYWxpYXNlcyBmb3IgY29tcG9uZW50IGR1bW15LylcbiAgfSlcblxuICBpdCgndGhyb3dzIHdoZW4gdXNlciBjb25maWcgZmFpbHMgY29tcG9uZW50IGNvbmZpZyBzY2hlbWEnLCAoKSA9PiB7XG4gICAgb3B0aW9ucy5jb25maWcuYWN0aW9ucy5kdW1teSA9IHsgbG9sOiB0cnVlIH1cbiAgICBhdGxhcyA9IG5ldyBBdGxhcyhvcHRpb25zKVxuXG4gICAgY29uc3QgYWN0aW9uID0gc2lub24uc3B5KClcbiAgICBhY3Rpb24uY29uZmlnID0ge1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHRlc3Q6IHsgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gICAgICB9LFxuICAgIH1cblxuICAgIGV4cGVjdCgoKSA9PiBhdGxhcy5hY3Rpb24oJ2R1bW15JywgYWN0aW9uKSkudG8udGhyb3coVmFsaWRhdGlvbkVycm9yKVxuICB9KVxuXG4gIGl0KCd3b3JrcyB3aGVuIHVzZXIgY29uZmlnIHBhc3NlcyBjb21wb25lbnQgY29uZmlnIHNjaGVtYScsICgpID0+IHtcbiAgICBjb25zdCBhY3Rpb24gPSBzaW5vbi5zcHkoKVxuICAgIGFjdGlvbi5jb25maWcgPSB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdGVzdDogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLmFjdGlvbignZHVtbXknLCBhY3Rpb24pKS5ub3QudG8udGhyb3coVmFsaWRhdGlvbkVycm9yKVxuICB9KVxuXG4gIGl0KCd3b3JrcyB3aGVuIGFsbCByZXF1aXJlbWVudHMgYXJlIHNwZWNpZmllZCcsICgpID0+IHtcbiAgICBjb25zdCBhY3Rpb24gPSBzaW5vbi5zcHkoKVxuICAgIGFjdGlvbi5jb25maWcgPSB7fVxuICAgIGFjdGlvbi5yZXF1aXJlcyA9IFsnc2VydmljZTpkdW1teSddXG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIGF0bGFzLmFjdGlvbignZHVtbXknLCBhY3Rpb24sIHsgYWxpYXNlczoge1xuICAgICAgICAnc2VydmljZTpkdW1teSc6ICdkdW1teScsXG4gICAgICB9IH0pXG4gICAgfSkudG8ubm90LnRocm93KClcbiAgfSlcbn0pXG4iXX0=

@@ -13,42 +13,2 @@ "use strict";

class DummyAction extends _action.default {
constructor(options) {
super(options);
this.ping = sinon.spy();
}
sendPing(alias) {
const component = this.component(alias);
component.ping(alias);
}
}
Object.defineProperty(DummyAction, "requires", {
configurable: true,
enumerable: true,
writable: true,
value: ['service:dummy']
});
class DummyService extends _service.default {
prepare() {
super.prepare();
return {
ping: sinon.spy(),
sendPing: alias => {
const component = this.component(alias);
component.ping(alias);
}
};
}
}
Object.defineProperty(DummyService, "requires", {
configurable: true,
enumerable: true,
writable: true,
value: ['action:dummy']
});
describe('Atlas: cross-component communication', () => {

@@ -67,30 +27,127 @@ let atlas;

});
atlas.action('action', DummyAction, {
});
it('service can find action', async () => {
class DummyService extends _service.default {
start() {
this.component('action:dummy').ping('service:dummy');
}
}
DummyService.requires = ['action:dummy'];
class DummyAction extends _action.default {}
DummyAction.prototype.ping = sinon.stub();
atlas.service('dummy', DummyService, {
aliases: {
'service:dummy': 'service'
'action:dummy': 'dummy'
}
});
atlas.service('service', DummyService, {
atlas.action('dummy', DummyAction);
await atlas.start();
expect(DummyAction.prototype.ping).to.have.callCount(1);
expect(DummyAction.prototype.ping).to.have.been.calledWith('service:dummy');
});
it('action can find service', async () => {
const api = {
ping: sinon.stub()
};
class DummyService extends _service.default {
prepare() {
return api;
}
}
class DummyAction extends _action.default {
ping() {
this.component('service:dummy').ping('action:dummy');
}
}
DummyAction.requires = ['service:dummy'];
atlas.service('dummy', DummyService);
atlas.action('dummy', DummyAction, {
aliases: {
'action:dummy': 'action'
'service:dummy': 'dummy'
}
});
return atlas.start();
await atlas.start();
atlas.actions.dummy.ping();
expect(api.ping).to.have.callCount(1);
expect(api.ping).to.have.been.calledWith('action:dummy');
});
it('service can find action', () => {
atlas.services.service.sendPing('action:dummy');
expect(atlas.actions.action.ping).to.have.callCount(1);
expect(atlas.actions.action.ping).to.have.been.calledWith('action:dummy');
xit('service can find internal action', async () => {
class DummyService extends _service.default {
start() {
this.component('action:internal').ping('service:dummy');
}
}
DummyService.requires = ['action:internal'];
class InternalAction extends _action.default {}
InternalAction.internal = true;
InternalAction.prototype.ping = sinon.stub();
atlas.service('dummy', DummyService, {
aliases: {
'action:internal': 'internal'
}
});
atlas.action('internal', InternalAction);
await atlas.start();
expect(InternalAction.prototype.ping).to.have.callCount(1);
expect(InternalAction.prototype.ping).to.have.been.calledWith('service:dummy');
});
it('action can find service', () => {
atlas.actions.action.sendPing('service:dummy');
expect(atlas.services.service.ping).to.have.callCount(1);
expect(atlas.services.service.ping).to.have.been.calledWith('service:dummy');
xit('action can find internal service', async () => {
const api = {
ping: sinon.stub()
};
class InternalService extends _service.default {
prepare() {
return api;
}
}
InternalService.internal = true;
class DummyAction extends _action.default {
ping() {
this.component('service:internal').ping('action:dummy');
}
}
DummyAction.requires = ['service:internal'];
atlas.service('internal', InternalService);
atlas.action('dummy', DummyAction, {
aliases: {
'service:internal': 'internal'
}
});
await atlas.start();
atlas.actions.dummy.ping();
expect(api.ping).to.have.callCount(1);
expect(api.ping).to.have.been.calledWith('action:dummy');
});
xit('hook can find action', () => {});
xit('hook can find service', () => {});
it('requesting unknown component throws', () => {
expect(() => atlas.services.service.sendPing('service:lolsvc')).to.throw(_errors.FrameworkError);
it('requesting unknown component throws', async () => {
class DummyAction extends _action.default {
ping(alias) {
this.component(alias);
}
}
atlas.action('dummy', DummyAction);
await atlas.start();
expect(() => atlas.actions.dummy.ping('service:lolsvc')).to.throw(_errors.FrameworkError);
});
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFsaWFzaW5nLnRlc3QubWpzIl0sIm5hbWVzIjpbIkR1bW15QWN0aW9uIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwicGluZyIsInNpbm9uIiwic3B5Iiwic2VuZFBpbmciLCJhbGlhcyIsImNvbXBvbmVudCIsIkR1bW15U2VydmljZSIsInByZXBhcmUiLCJkZXNjcmliZSIsImF0bGFzIiwiYmVmb3JlRWFjaCIsInJvb3QiLCJfX2Rpcm5hbWUiLCJjb25maWciLCJsb2ciLCJsZXZlbCIsImFjdGlvbiIsImFsaWFzZXMiLCJzZXJ2aWNlIiwic3RhcnQiLCJpdCIsInNlcnZpY2VzIiwiZXhwZWN0IiwiYWN0aW9ucyIsInRvIiwiaGF2ZSIsImNhbGxDb3VudCIsImJlZW4iLCJjYWxsZWRXaXRoIiwieGl0IiwidGhyb3ciXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxXQUFOLHlCQUFpQztBQUcvQkMsY0FBWUMsT0FBWixFQUFxQjtBQUNuQixVQUFNQSxPQUFOO0FBQ0EsU0FBS0MsSUFBTCxHQUFZQyxNQUFNQyxHQUFOLEVBQVo7QUFDRDs7QUFFREMsV0FBU0MsS0FBVCxFQUFnQjtBQUNkLFVBQU1DLFlBQVksS0FBS0EsU0FBTCxDQUFlRCxLQUFmLENBQWxCO0FBQ0FDLGNBQVVMLElBQVYsQ0FBZUksS0FBZjtBQUNEOztBQVg4Qjs7c0JBQTNCUCxXOzs7O1NBQ2MsQ0FBQyxlQUFEOzs7QUFZcEIsTUFBTVMsWUFBTiwwQkFBbUM7QUFHakNDLFlBQVU7QUFDUixVQUFNQSxPQUFOO0FBQ0EsV0FBTztBQUNMUCxZQUFNQyxNQUFNQyxHQUFOLEVBREQ7QUFFTEMsZ0JBQVVDLFNBQVM7QUFDakIsY0FBTUMsWUFBWSxLQUFLQSxTQUFMLENBQWVELEtBQWYsQ0FBbEI7QUFDQUMsa0JBQVVMLElBQVYsQ0FBZUksS0FBZjtBQUNEO0FBTEksS0FBUDtBQU9EOztBQVpnQzs7c0JBQTdCRSxZOzs7O1NBQ2MsQ0FBQyxjQUFEOztBQWNwQkUsU0FBUyxzQ0FBVCxFQUFpRCxNQUFNO0FBQ3JELE1BQUlDLEtBQUo7QUFFQUMsYUFBVyxNQUFNO0FBQ2ZELFlBQVEsWUFBVTtBQUNoQkUsWUFBTUMsU0FEVTtBQUVoQkMsY0FBUTtBQUFFSixlQUFPO0FBQUVLLGVBQUs7QUFDdEJDLG1CQUFPO0FBRGU7QUFBUDtBQUFUO0FBRlEsS0FBVixDQUFSO0FBT0FOLFVBQU1PLE1BQU4sQ0FBYSxRQUFiLEVBQXVCbkIsV0FBdkIsRUFBb0M7QUFBRW9CLGVBQVM7QUFDN0MseUJBQWlCO0FBRDRCO0FBQVgsS0FBcEM7QUFHQVIsVUFBTVMsT0FBTixDQUFjLFNBQWQsRUFBeUJaLFlBQXpCLEVBQXVDO0FBQUVXLGVBQVM7QUFDaEQsd0JBQWdCO0FBRGdDO0FBQVgsS0FBdkM7QUFJQSxXQUFPUixNQUFNVSxLQUFOLEVBQVA7QUFDRCxHQWhCRDtBQWtCQUMsS0FBRyx5QkFBSCxFQUE4QixNQUFNO0FBQ2xDWCxVQUFNWSxRQUFOLENBQWVILE9BQWYsQ0FBdUJmLFFBQXZCLENBQWdDLGNBQWhDO0FBRUFtQixXQUFPYixNQUFNYyxPQUFOLENBQWNQLE1BQWQsQ0FBcUJoQixJQUE1QixFQUFrQ3dCLEVBQWxDLENBQXFDQyxJQUFyQyxDQUEwQ0MsU0FBMUMsQ0FBb0QsQ0FBcEQ7QUFDQUosV0FBT2IsTUFBTWMsT0FBTixDQUFjUCxNQUFkLENBQXFCaEIsSUFBNUIsRUFBa0N3QixFQUFsQyxDQUFxQ0MsSUFBckMsQ0FBMENFLElBQTFDLENBQStDQyxVQUEvQyxDQUEwRCxjQUExRDtBQUNELEdBTEQ7QUFPQVIsS0FBRyx5QkFBSCxFQUE4QixNQUFNO0FBQ2xDWCxVQUFNYyxPQUFOLENBQWNQLE1BQWQsQ0FBcUJiLFFBQXJCLENBQThCLGVBQTlCO0FBRUFtQixXQUFPYixNQUFNWSxRQUFOLENBQWVILE9BQWYsQ0FBdUJsQixJQUE5QixFQUFvQ3dCLEVBQXBDLENBQXVDQyxJQUF2QyxDQUE0Q0MsU0FBNUMsQ0FBc0QsQ0FBdEQ7QUFDQUosV0FBT2IsTUFBTVksUUFBTixDQUFlSCxPQUFmLENBQXVCbEIsSUFBOUIsRUFBb0N3QixFQUFwQyxDQUF1Q0MsSUFBdkMsQ0FBNENFLElBQTVDLENBQWlEQyxVQUFqRCxDQUE0RCxlQUE1RDtBQUNELEdBTEQ7QUFPQUMsTUFBSSxzQkFBSixFQUE0QixNQUFNLENBQUUsQ0FBcEM7QUFDQUEsTUFBSSx1QkFBSixFQUE2QixNQUFNLENBQUUsQ0FBckM7QUFFQVQsS0FBRyxxQ0FBSCxFQUEwQyxNQUFNO0FBQzlDRSxXQUFPLE1BQU1iLE1BQU1ZLFFBQU4sQ0FBZUgsT0FBZixDQUF1QmYsUUFBdkIsQ0FBZ0MsZ0JBQWhDLENBQWIsRUFBZ0VxQixFQUFoRSxDQUFtRU0sS0FBbkU7QUFDRCxHQUZEO0FBR0QsQ0F6Q0QiLCJmaWxlIjoiYWxpYXNpbmcudGVzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0bGFzIH0gZnJvbSAnLi4nXG5pbXBvcnQgU2VydmljZSBmcm9tICdAYXRsYXMuanMvc2VydmljZSdcbmltcG9ydCBBY3Rpb24gZnJvbSAnQGF0bGFzLmpzL2FjdGlvbidcbmltcG9ydCB7IEZyYW1ld29ya0Vycm9yIH0gZnJvbSAnQGF0bGFzLmpzL2Vycm9ycydcblxuY2xhc3MgRHVtbXlBY3Rpb24gZXh0ZW5kcyBBY3Rpb24ge1xuICBzdGF0aWMgcmVxdWlyZXMgPSBbJ3NlcnZpY2U6ZHVtbXknXVxuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zKVxuICAgIHRoaXMucGluZyA9IHNpbm9uLnNweSgpXG4gIH1cblxuICBzZW5kUGluZyhhbGlhcykge1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50KGFsaWFzKVxuICAgIGNvbXBvbmVudC5waW5nKGFsaWFzKVxuICB9XG59XG5jbGFzcyBEdW1teVNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHtcbiAgc3RhdGljIHJlcXVpcmVzID0gWydhY3Rpb246ZHVtbXknXVxuXG4gIHByZXBhcmUoKSB7XG4gICAgc3VwZXIucHJlcGFyZSgpXG4gICAgcmV0dXJuIHtcbiAgICAgIHBpbmc6IHNpbm9uLnNweSgpLFxuICAgICAgc2VuZFBpbmc6IGFsaWFzID0+IHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnQoYWxpYXMpXG4gICAgICAgIGNvbXBvbmVudC5waW5nKGFsaWFzKVxuICAgICAgfSxcbiAgICB9XG4gIH1cbn1cblxuZGVzY3JpYmUoJ0F0bGFzOiBjcm9zcy1jb21wb25lbnQgY29tbXVuaWNhdGlvbicsICgpID0+IHtcbiAgbGV0IGF0bGFzXG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgYXRsYXMgPSBuZXcgQXRsYXMoe1xuICAgICAgcm9vdDogX19kaXJuYW1lLFxuICAgICAgY29uZmlnOiB7IGF0bGFzOiB7IGxvZzoge1xuICAgICAgICBsZXZlbDogJ3dhcm4nLFxuICAgICAgfSB9IH0sXG4gICAgfSlcblxuICAgIGF0bGFzLmFjdGlvbignYWN0aW9uJywgRHVtbXlBY3Rpb24sIHsgYWxpYXNlczoge1xuICAgICAgJ3NlcnZpY2U6ZHVtbXknOiAnc2VydmljZScsXG4gICAgfSB9KVxuICAgIGF0bGFzLnNlcnZpY2UoJ3NlcnZpY2UnLCBEdW1teVNlcnZpY2UsIHsgYWxpYXNlczoge1xuICAgICAgJ2FjdGlvbjpkdW1teSc6ICdhY3Rpb24nLFxuICAgIH0gfSlcblxuICAgIHJldHVybiBhdGxhcy5zdGFydCgpXG4gIH0pXG5cbiAgaXQoJ3NlcnZpY2UgY2FuIGZpbmQgYWN0aW9uJywgKCkgPT4ge1xuICAgIGF0bGFzLnNlcnZpY2VzLnNlcnZpY2Uuc2VuZFBpbmcoJ2FjdGlvbjpkdW1teScpXG5cbiAgICBleHBlY3QoYXRsYXMuYWN0aW9ucy5hY3Rpb24ucGluZykudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICBleHBlY3QoYXRsYXMuYWN0aW9ucy5hY3Rpb24ucGluZykudG8uaGF2ZS5iZWVuLmNhbGxlZFdpdGgoJ2FjdGlvbjpkdW1teScpXG4gIH0pXG5cbiAgaXQoJ2FjdGlvbiBjYW4gZmluZCBzZXJ2aWNlJywgKCkgPT4ge1xuICAgIGF0bGFzLmFjdGlvbnMuYWN0aW9uLnNlbmRQaW5nKCdzZXJ2aWNlOmR1bW15JylcblxuICAgIGV4cGVjdChhdGxhcy5zZXJ2aWNlcy5zZXJ2aWNlLnBpbmcpLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gICAgZXhwZWN0KGF0bGFzLnNlcnZpY2VzLnNlcnZpY2UucGluZykudG8uaGF2ZS5iZWVuLmNhbGxlZFdpdGgoJ3NlcnZpY2U6ZHVtbXknKVxuICB9KVxuXG4gIHhpdCgnaG9vayBjYW4gZmluZCBhY3Rpb24nLCAoKSA9PiB7fSlcbiAgeGl0KCdob29rIGNhbiBmaW5kIHNlcnZpY2UnLCAoKSA9PiB7fSlcblxuICBpdCgncmVxdWVzdGluZyB1bmtub3duIGNvbXBvbmVudCB0aHJvd3MnLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLnNlcnZpY2VzLnNlcnZpY2Uuc2VuZFBpbmcoJ3NlcnZpY2U6bG9sc3ZjJykpLnRvLnRocm93KEZyYW1ld29ya0Vycm9yKVxuICB9KVxufSlcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFsaWFzaW5nLnRlc3QubWpzIl0sIm5hbWVzIjpbImRlc2NyaWJlIiwiYXRsYXMiLCJiZWZvcmVFYWNoIiwiQXRsYXMiLCJyb290IiwiX19kaXJuYW1lIiwiY29uZmlnIiwibG9nIiwibGV2ZWwiLCJpdCIsIkR1bW15U2VydmljZSIsIlNlcnZpY2UiLCJzdGFydCIsImNvbXBvbmVudCIsInBpbmciLCJyZXF1aXJlcyIsIkR1bW15QWN0aW9uIiwiQWN0aW9uIiwicHJvdG90eXBlIiwic2lub24iLCJzdHViIiwic2VydmljZSIsImFsaWFzZXMiLCJhY3Rpb24iLCJleHBlY3QiLCJ0byIsImhhdmUiLCJjYWxsQ291bnQiLCJiZWVuIiwiY2FsbGVkV2l0aCIsImFwaSIsInByZXBhcmUiLCJhY3Rpb25zIiwiZHVtbXkiLCJ4aXQiLCJJbnRlcm5hbEFjdGlvbiIsImludGVybmFsIiwiSW50ZXJuYWxTZXJ2aWNlIiwiYWxpYXMiLCJ0aHJvdyIsIkZyYW1ld29ya0Vycm9yIl0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUFBLFNBQVMsc0NBQVQsRUFBaUQsTUFBTTtBQUNyRCxNQUFJQyxLQUFKO0FBRUFDLGFBQVcsTUFBTTtBQUNmRCxZQUFRLElBQUlFLE9BQUosQ0FBVTtBQUNoQkMsWUFBTUMsU0FEVTtBQUVoQkMsY0FBUTtBQUFFTCxlQUFPO0FBQUVNLGVBQUs7QUFDdEJDLG1CQUFPO0FBRGU7QUFBUDtBQUFUO0FBRlEsS0FBVixDQUFSO0FBTUQsR0FQRDtBQVNBQyxLQUFHLHlCQUFILEVBQThCLFlBQVk7QUFDeEMsVUFBTUMsWUFBTixTQUEyQkMsZ0JBQTNCLENBQW1DO0FBR2pDQyxjQUFRO0FBQ04sYUFBS0MsU0FBTCxDQUFlLGNBQWYsRUFBK0JDLElBQS9CLENBQW9DLGVBQXBDO0FBQ0Q7O0FBTGdDOztBQUE3QkosZ0JBRGtDLENBRS9CSyxRQUYrQixHQUVwQixDQUFDLGNBQUQsQ0FGb0I7O0FBU3hDLFVBQU1DLFdBQU4sU0FB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LE1BQU4sQ0FBYSxPQUFiLEVBQXNCUCxXQUF0QjtBQUNBLFVBQU1mLE1BQU1XLEtBQU4sRUFBTjtBQUVBWSxXQUFPLE1BQU12QixNQUFNK0IsT0FBTixDQUFjQyxLQUFkLENBQW9CbkIsSUFBcEIsQ0FBeUIsZ0JBQXpCLENBQWIsRUFBeURXLEVBQXpELENBQTREYyxLQUE1RCxDQUFrRUMsc0JBQWxFO0FBQ0QsR0FWRDtBQVdELENBM0hEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXRsYXMgfSBmcm9tICcuLidcbmltcG9ydCBTZXJ2aWNlIGZyb20gJ0BhdGxhcy5qcy9zZXJ2aWNlJ1xuaW1wb3J0IEFjdGlvbiBmcm9tICdAYXRsYXMuanMvYWN0aW9uJ1xuaW1wb3J0IHsgRnJhbWV3b3JrRXJyb3IgfSBmcm9tICdAYXRsYXMuanMvZXJyb3JzJ1xuXG5kZXNjcmliZSgnQXRsYXM6IGNyb3NzLWNvbXBvbmVudCBjb21tdW5pY2F0aW9uJywgKCkgPT4ge1xuICBsZXQgYXRsYXNcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBhdGxhcyA9IG5ldyBBdGxhcyh7XG4gICAgICByb290OiBfX2Rpcm5hbWUsXG4gICAgICBjb25maWc6IHsgYXRsYXM6IHsgbG9nOiB7XG4gICAgICAgIGxldmVsOiAnd2FybicsXG4gICAgICB9IH0gfSxcbiAgICB9KVxuICB9KVxuXG4gIGl0KCdzZXJ2aWNlIGNhbiBmaW5kIGFjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICBjbGFzcyBEdW1teVNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHtcbiAgICAgIHN0YXRpYyByZXF1aXJlcyA9IFsnYWN0aW9uOmR1bW15J11cblxuICAgICAgc3RhcnQoKSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50KCdhY3Rpb246ZHVtbXknKS5waW5nKCdzZXJ2aWNlOmR1bW15JylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBEdW1teUFjdGlvbiBleHRlbmRzIEFjdGlvbiB7fVxuXG4gICAgRHVtbXlBY3Rpb24ucHJvdG90eXBlLnBpbmcgPSBzaW5vbi5zdHViKClcblxuICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlLCB7IGFsaWFzZXM6IHsgJ2FjdGlvbjpkdW1teSc6ICdkdW1teScgfSB9KVxuICAgIGF0bGFzLmFjdGlvbignZHVtbXknLCBEdW1teUFjdGlvbilcblxuICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcblxuICAgIGV4cGVjdChEdW1teUFjdGlvbi5wcm90b3R5cGUucGluZykudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICBleHBlY3QoRHVtbXlBY3Rpb24ucHJvdG90eXBlLnBpbmcpLnRvLmhhdmUuYmVlbi5jYWxsZWRXaXRoKCdzZXJ2aWNlOmR1bW15JylcbiAgfSlcblxuICBpdCgnYWN0aW9uIGNhbiBmaW5kIHNlcnZpY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYXBpID0ge1xuICAgICAgcGluZzogc2lub24uc3R1YigpLFxuICAgIH1cblxuICAgIGNsYXNzIER1bW15U2VydmljZSBleHRlbmRzIFNlcnZpY2Uge1xuICAgICAgcHJlcGFyZSgpIHsgcmV0dXJuIGFwaSB9XG4gICAgfVxuXG4gICAgY2xhc3MgRHVtbXlBY3Rpb24gZXh0ZW5kcyBBY3Rpb24ge1xuICAgICAgc3RhdGljIHJlcXVpcmVzID0gWydzZXJ2aWNlOmR1bW15J11cbiAgICAgIHBpbmcoKSB7IHRoaXMuY29tcG9uZW50KCdzZXJ2aWNlOmR1bW15JykucGluZygnYWN0aW9uOmR1bW15JykgfVxuICAgIH1cblxuICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlKVxuICAgIGF0bGFzLmFjdGlvbignZHVtbXknLCBEdW1teUFjdGlvbiwgeyBhbGlhc2VzOiB7ICdzZXJ2aWNlOmR1bW15JzogJ2R1bW15JyB9IH0pXG5cbiAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG4gICAgYXRsYXMuYWN0aW9ucy5kdW1teS5waW5nKClcblxuICAgIGV4cGVjdChhcGkucGluZykudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICBleHBlY3QoYXBpLnBpbmcpLnRvLmhhdmUuYmVlbi5jYWxsZWRXaXRoKCdhY3Rpb246ZHVtbXknKVxuICB9KVxuXG4gIC8vIEBUT0RPOiBJbXBsZW1lbnQgaW50ZXJuYWwgY29tcG9uZW50c1xuICB4aXQoJ3NlcnZpY2UgY2FuIGZpbmQgaW50ZXJuYWwgYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgIGNsYXNzIER1bW15U2VydmljZSBleHRlbmRzIFNlcnZpY2Uge1xuICAgICAgc3RhdGljIHJlcXVpcmVzID0gWydhY3Rpb246aW50ZXJuYWwnXVxuICAgICAgc3RhcnQoKSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50KCdhY3Rpb246aW50ZXJuYWwnKS5waW5nKCdzZXJ2aWNlOmR1bW15JylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBJbnRlcm5hbEFjdGlvbiBleHRlbmRzIEFjdGlvbiB7XG4gICAgICBzdGF0aWMgaW50ZXJuYWwgPSB0cnVlXG4gICAgfVxuXG4gICAgSW50ZXJuYWxBY3Rpb24ucHJvdG90eXBlLnBpbmcgPSBzaW5vbi5zdHViKClcblxuICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlLCB7IGFsaWFzZXM6IHsgJ2FjdGlvbjppbnRlcm5hbCc6ICdpbnRlcm5hbCcgfSB9KVxuICAgIGF0bGFzLmFjdGlvbignaW50ZXJuYWwnLCBJbnRlcm5hbEFjdGlvbilcblxuICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcblxuICAgIGV4cGVjdChJbnRlcm5hbEFjdGlvbi5wcm90b3R5cGUucGluZykudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICBleHBlY3QoSW50ZXJuYWxBY3Rpb24ucHJvdG90eXBlLnBpbmcpLnRvLmhhdmUuYmVlbi5jYWxsZWRXaXRoKCdzZXJ2aWNlOmR1bW15JylcbiAgfSlcblxuICAvLyBAVE9ETzogSW1wbGVtZW50IGludGVybmFsIGNvbXBvbmVudHNcbiAgeGl0KCdhY3Rpb24gY2FuIGZpbmQgaW50ZXJuYWwgc2VydmljZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhcGkgPSB7XG4gICAgICBwaW5nOiBzaW5vbi5zdHViKCksXG4gICAgfVxuXG4gICAgY2xhc3MgSW50ZXJuYWxTZXJ2aWNlIGV4dGVuZHMgU2VydmljZSB7XG4gICAgICBzdGF0aWMgaW50ZXJuYWwgPSB0cnVlXG5cbiAgICAgIHByZXBhcmUoKSB7IHJldHVybiBhcGkgfVxuICAgIH1cblxuICAgIGNsYXNzIER1bW15QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHtcbiAgICAgIHN0YXRpYyByZXF1aXJlcyA9IFsnc2VydmljZTppbnRlcm5hbCddXG5cbiAgICAgIHBpbmcoKSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50KCdzZXJ2aWNlOmludGVybmFsJykucGluZygnYWN0aW9uOmR1bW15JylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhdGxhcy5zZXJ2aWNlKCdpbnRlcm5hbCcsIEludGVybmFsU2VydmljZSlcbiAgICBhdGxhcy5hY3Rpb24oJ2R1bW15JywgRHVtbXlBY3Rpb24sIHsgYWxpYXNlczogeyAnc2VydmljZTppbnRlcm5hbCc6ICdpbnRlcm5hbCcgfSB9KVxuXG4gICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuICAgIGF0bGFzLmFjdGlvbnMuZHVtbXkucGluZygpXG5cbiAgICBleHBlY3QoYXBpLnBpbmcpLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gICAgZXhwZWN0KGFwaS5waW5nKS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aCgnYWN0aW9uOmR1bW15JylcbiAgfSlcblxuICBpdCgncmVxdWVzdGluZyB1bmtub3duIGNvbXBvbmVudCB0aHJvd3MnLCBhc3luYyAoKSA9PiB7XG4gICAgY2xhc3MgRHVtbXlBY3Rpb24gZXh0ZW5kcyBBY3Rpb24ge1xuICAgICAgcGluZyhhbGlhcykge1xuICAgICAgICB0aGlzLmNvbXBvbmVudChhbGlhcylcbiAgICAgIH1cbiAgICB9XG4gICAgYXRsYXMuYWN0aW9uKCdkdW1teScsIER1bW15QWN0aW9uKVxuICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcblxuICAgIGV4cGVjdCgoKSA9PiBhdGxhcy5hY3Rpb25zLmR1bW15LnBpbmcoJ3NlcnZpY2U6bG9sc3ZjJykpLnRvLnRocm93KEZyYW1ld29ya0Vycm9yKVxuICB9KVxufSlcbiJdfQ==

@@ -79,3 +79,3 @@ "use strict";

expect(config.log.serializers).to.be.an('object');
expect(config.log.serializers).to.have.all.keys(['req', 'res', 'err', 'custom']);
expect(config.log.serializers).to.have.all.keys(['err', 'req', 'res', 'custom']);
});

@@ -90,3 +90,3 @@ it('responds to known methods', () => {

const atlas = new _.Atlas(opts);
expect(atlas).to.include.all.keys(['actions', 'services', 'config', 'log']);
expect(atlas).to.include.all.keys(['actions', 'services', 'config', 'log', 'validator']);
expect(atlas.env).to.equal(process.env.NODE_ENV).and.to.be.a('string');

@@ -118,2 +118,2 @@ expect(atlas.root).to.equal(__dirname);

});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwaS50ZXN0Lm1qcyJdLCJuYW1lcyI6WyJkZXNjcmliZSIsIm9wdHMiLCJiZWZvcmVFYWNoIiwicm9vdCIsIl9fZGlybmFtZSIsIml0IiwiZXhwZWN0IiwidG8iLCJiZSIsImEiLCJub3QiLCJ0aHJvdyIsInNhbmRib3giLCJzdHViIiwicHJvY2VzcyIsImVudiIsInZhbHVlIiwibW9kdWxlcyIsImJhc2UiLCJyZXF1aXJlIiwibG9jYWwiLCJhdGxhcyIsImhhdmUiLCJwcm9wZXJ0eSIsImNvbmZpZyIsImRlZmF1bHQiLCJsb2ciLCJzZXJpYWxpemVycyIsImFuIiwiYWxsIiwia2V5cyIsInJlc3BvbmRUbyIsImluY2x1ZGUiLCJlcXVhbCIsIk5PREVfRU5WIiwiYW5kIiwicHJlcGFyZWQiLCJzdGFydGVkIl0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQUVBQSxTQUFTLHVCQUFULEVBQWtDLE1BQU07QUFDdEMsTUFBSUMsSUFBSjtBQUVBQyxhQUFXLE1BQU07QUFDZkQsV0FBTztBQUFFRSxZQUFNQztBQUFSLEtBQVA7QUFDRCxHQUZEO0FBS0FDLEtBQUcsUUFBSCxFQUFhLE1BQU07QUFDakJDLG9CQUFjQyxFQUFkLENBQWlCQyxFQUFqQixDQUFvQkMsQ0FBcEIsQ0FBc0IsVUFBdEI7QUFDRCxHQUZEO0FBSUFKLEtBQUcsb0JBQUgsRUFBeUIsTUFBTTtBQUM3QkMsV0FBTyxNQUFNLFlBQVVMLElBQVYsQ0FBYixFQUE4Qk0sRUFBOUIsQ0FBaUNHLEdBQWpDLENBQXFDQyxLQUFyQztBQUNELEdBRkQ7QUFJQU4sS0FBRywrQkFBSCxFQUFvQyxNQUFNO0FBQ3hDQyxXQUFPLE1BQU0sYUFBYixFQUEwQkMsRUFBMUIsQ0FBNkJJLEtBQTdCLHlCQUFtRCxtQ0FBbkQ7QUFDRCxHQUZEO0FBSUFOLEtBQUcseURBQUgsRUFBOEQsWUFBVztBQUV2RSxTQUFLTyxPQUFMLENBQWFDLElBQWIsQ0FBa0JDLFFBQVFDLEdBQTFCLEVBQStCLFVBQS9CLEVBQTJDQyxLQUEz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LEdBQWlCLElBQWpCO0FBQ0QsS0FGRCxFQUVHN0IsRUFGSCxDQUVNSSxLQUZOO0FBR0QsR0FORDtBQVFBTixLQUFHLGdDQUFILEVBQXFDLE1BQU07QUFDekMsVUFBTWdCLFFBQVEsWUFBVXBCLElBQVYsQ0FBZDtBQUVBSyxXQUFPLE1BQU07QUFDWGUsWUFBTWdCLE9BQU4sR0FBZ0IsSUFBaEI7QUFDRCxLQUZELEVBRUc5QixFQUZILENBRU1JLEtBRk47QUFHRCxHQU5EO0FBT0QsQ0FwSkQiLCJmaWxlIjoiYXBpLnRlc3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdGxhcyB9IGZyb20gJy4uJ1xuaW1wb3J0IHsgRnJhbWV3b3JrRXJyb3IgfSBmcm9tICdAYXRsYXMuanMvZXJyb3JzJ1xuXG5kZXNjcmliZSgnQXRsYXM6IGJhc2ljcyBhbmQgQVBJJywgKCkgPT4ge1xuICBsZXQgb3B0c1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIG9wdHMgPSB7IHJvb3Q6IF9fZGlybmFtZSB9XG4gIH0pXG5cblxuICBpdCgnZXhpc3RzJywgKCkgPT4ge1xuICAgIGV4cGVjdChBdGxhcykudG8uYmUuYSgnZnVuY3Rpb24nKVxuICB9KVxuXG4gIGl0KCdjYW4gYmUgY29uc3RydWN0ZWQnLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IG5ldyBBdGxhcyhvcHRzKSkudG8ubm90LnRocm93KClcbiAgfSlcblxuICBpdCgncmVxdWlyZXMgcm9vdCBvbiBjb25zdHJ1Y3Rpb24nLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IG5ldyBBdGxhcygpKS50by50aHJvdyhGcmFtZXdvcmtFcnJvciwgL3Jvb3QgbXVzdCBiZSBleHBsaWNpdGx5IHNwZWNpZmllZC8pXG4gIH0pXG5cbiAgaXQoJ3Rocm93cyB3aGVuIGVudiBpcyBub3QgcHJvdmlkZWQgYW5kIE5PREVfRU5WIGlzIG5vdCBzZXQnLCBmdW5jdGlvbigpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvY2Vzcy1lbnZcbiAgICB0aGlzLnNhbmRib3guc3R1Yihwcm9jZXNzLmVudiwgJ05PREVfRU5WJykudmFsdWUoJycpXG4gICAgZXhwZWN0KCgpID0+IG5ldyBBdGxhcyhvcHRzKSkudG8udGhyb3coRnJhbWV3b3JrRXJyb3IsIC9lbnYgbm90IHNwZWNpZmllZC8pXG4gIH0pXG5cbiAgaXQoJ3N1cHBvcnRzIGxvYWRpbmcgdGhlIGNvbmZpZyBmcm9tIG1vZHVsZSBwYXRoIHJlbGF0aXZlIHRvIHJvb3QnLCAoKSA9PiB7XG4gICAgLy8gU2FuaXR5IGNoZWNrXG4gICAgY29uc3QgbW9kdWxlcyA9IHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIGdsb2JhbC1yZXF1aXJlICovXG4gICAgICBiYXNlOiByZXF1aXJlKCcuL2RlbW9jb25maWcnKSxcbiAgICAgIGVudjogcmVxdWlyZSgnLi9kZW1vY29uZmlnL2Vudi9sb2xlbnYnKSxcbiAgICAgIGxvY2FsOiByZXF1aXJlKCcuL2RlbW9jb25maWcvbG9jYWwnKSxcbiAgICAgIC8qIGVzbGludC1lbmFibGUgZ2xvYmFsLXJlcXVpcmUgKi9cbiAgICB9XG4gICAgZXhwZWN0KG1vZHVsZXMuYmFzZS5hdGxhcykudG8uaGF2ZS5wcm9wZXJ0eSgnZnJvbUJhc2UnLCB0cnVlKVxuICAgIGV4cGVjdChtb2R1bGVzLmJhc2UuYXRsYXMpLnRvLmhhdmUucHJvcGVydHkoJ2Zyb21FbnYnLCBmYWxzZSlcbiAgICBleHBlY3QobW9kdWxlcy5iYXNlLmF0bGFzKS50by5oYXZlLnByb3BlcnR5KCdmcm9tTG9jYWwnLCBmYWxzZSlcbiAgICBleHBlY3QobW9kdWxlcy5lbnYuYXRsYXMpLnRvLmhhdmUucHJvcGVydHkoJ2Zyb21FbnYnLCB0cnVlKVxuICAgIGV4cGVjdChtb2R1bGVzLmVudi5hdGxhcykudG8uaGF2ZS5wcm9wZXJ0eSgnZnJvbUxvY2FsJywgZmFsc2UpXG4gICAgZXhwZWN0KG1vZHVsZXMubG9jYWwuYXRsYXMpLnRvLmhhdmUucHJvcGVydHkoJ2Zyb21Mb2NhbCcsIHRydWUpXG5cbiAgICBjb25zdCBhdGxhcyA9IG5ldyBBdGxhcyh7XG4gICAgICByb290OiBfX2Rpcm5hbWUsXG4gICAgICBlbnY6ICdsb2xlbnYnLFxuICAgICAgY29uZmlnOiAnZGVtb2NvbmZpZycsXG4gICAgfSlcbiAgICBjb25zdCBjb25maWcgPSBhdGxhcy5jb25maWcuYXRsYXNcblxuICAgIGV4cGVjdChjb25maWcpLnRvLmhhdmUucHJvcGVydHkoJ2Zyb21CYXNlJywgdHJ1ZSlcbiAgICBleHBlY3QoY29uZmlnKS50by5oYXZlLnByb3BlcnR5KCdmcm9tRW52JywgdHJ1ZSlcbiAgICBleHBlY3QoY29uZmlnKS50by5oYXZlLnByb3BlcnR5KCdmcm9tTG9jYWwnLCB0cnVlKVxuICB9KVxuXG4gIGl0KCdwcmVmZXJzIEVTIG1vZHVsZSBkZWZhdWx0IGV4cG9ydCBpbiB0aGUgY29uZmlnIGZpbGVzJywgKCkgPT4ge1xuICAgIGNvbnN0IG1vZHVsZXMgPSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbiAgICAgIGVudjogcmVxdWlyZSgnLi9kZW1vY29uZmlnL2Vudi9tb2RlbnYnKS5kZWZhdWx0LFxuICAgIH1cblxuICAgIGV4cGVjdChtb2R1bGVzLmVudi5hdGxhcykudG8uaGF2ZS5wcm9wZXJ0eSgnZnJvbUVudicsIHRydWUpXG4gICAgZXhwZWN0KG1vZHVsZXMuZW52LmF0bGFzKS50by5oYXZlLnByb3BlcnR5KCdmcm9tTG9jYWwnLCBmYWxzZSlcblxuICAgIGNvbnN0IGF0bGFzID0gbmV3IEF0bGFzKHtcbiAgICAgIHJvb3Q6IF9fZGlybmFtZSxcbiAgICAgIGVudjogJ21vZGVudicsXG4gICAgICBjb25maWc6ICdkZW1vY29uZmlnJyxcbiAgICB9KVxuICAgIGNvbnN0IGNvbmZpZyA9IGF0bGFzLmNvbmZpZy5hdGxhc1xuXG4gICAgZXhwZWN0KGNvbmZpZykudG8uaGF2ZS5wcm9wZXJ0eSgnZnJvbUJhc2UnLCB0cnVlKVxuICAgIGV4cGVjdChjb25maWcpLnRvLmhhdmUucHJvcGVydHkoJ2Zyb21FbnYnLCB0cnVlKVxuICAgIGV4cGVjdChjb25maWcpLnRvLmhhdmUucHJvcGVydHkoJ2Zyb21Mb2NhbCcsIHRydWUpXG4gIH0pXG5cbiAgaXQoJ3N1cHBvcnRzIGxvYWRpbmcgUGlubyBsb2cgc2VyaWFsaXNlcnMgZnJvbSBtb2R1bGUgcGF0aCByZWxhdGl2ZSB0byByb290JywgKCkgPT4ge1xuICAgIGNvbnN0IGF0bGFzID0gbmV3IEF0bGFzKHtcbiAgICAgIHJvb3Q6IF9fZGlybmFtZSxcbiAgICAgIGVudjogJ2xvbGVudicsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgYXRsYXM6IHtcbiAgICAgICAgICBsb2c6IHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZXJzOiAnZGVtb2NvbmZpZy9zZXJpYWxpc2VycycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSlcbiAgICBjb25zdCBjb25maWcgPSBhdGxhcy5jb25maWcuYXRsYXNcblxuICAgIGV4cGVjdChjb25maWcubG9nLnNlcmlhbGl6ZXJzKS50by5iZS5hbignb2JqZWN0JylcbiAgICBleHBlY3QoY29uZmlnLmxvZy5zZXJpYWxpemVycykudG8uaGF2ZS5hbGwua2V5cyhbXG4gICAgICAncmVxJyxcbiAgICAgICdyZXMnLFxuICAgICAgJ2VycicsXG4gICAgICAnY3VzdG9tJyxcbiAgICBdKVxuICB9KVxuXG4gIGl0KCdyZXNwb25kcyB0byBrbm93biBtZXRob2RzJywgKCkgPT4ge1xuICAgIGNvbnN0IGF0bGFzID0gbmV3IEF0bGFzKG9wdHMpXG5cbiAgICBleHBlY3QoYXRsYXMpLnRvLnJlc3BvbmRUbygncHJlcGFyZScpXG4gICAgZXhwZWN0KGF0bGFzKS50by5yZXNwb25kVG8oJ3N0YXJ0JylcbiAgICBleHBlY3QoYXRsYXMpLnRvLnJlc3BvbmRUbygnc3RvcCcpXG4gIH0pXG5cbiAgaXQoJ2hhcyBrbm93biBwdWJsaWMgcHJvcGVydGllcycsICgpID0+IHtcbiAgICBjb25zdCBhdGxhcyA9IG5ldyBBdGxhcyhvcHRzKVxuXG4gICAgZXhwZWN0KGF0bGFzKS50by5pbmNsdWRlLmFsbC5rZXlzKFtcbiAgICAgICdhY3Rpb25zJyxcbiAgICAgICdzZXJ2aWNlcycsXG4gICAgICAnY29uZmlnJyxcbiAgICAgICdsb2cnLFxuICAgIF0pXG4gICAgLy8gSW1wbGVtZW50ZWQgYXMgZ2V0dGVycywgYW5kIENoYWkgZG9lcyBub3Qgc2VlbSB0byB3b3JrIHdpdGggdGhlbSB3aGVuIGNoZWNraW5nIGZvciAua2V5cygpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb2Nlc3MtZW52XG4gICAgZXhwZWN0KGF0bGFzLmVudikudG8uZXF1YWwocHJvY2Vzcy5lbnYuTk9ERV9FTlYpLmFuZC50by5iZS5hKCdzdHJpbmcnKVxuICAgIGV4cGVjdChhdGxhcy5yb290KS50by5lcXVhbChfX2Rpcm5hbWUpXG4gICAgZXhwZWN0KGF0bGFzLnByZXBhcmVkKS50by5lcXVhbChmYWxzZSlcbiAgICBleHBlY3QoYXRsYXMuc3RhcnRlZCkudG8uZXF1YWwoZmFsc2UpXG4gIH0pXG5cbiAgaXQoJ2NvbnN0cnVjdHMgYSBsb2cgb2JqZWN0IG9uIHRoaXMubG9nJywgKCkgPT4ge1xuICAgIGNvbnN0IGF0bGFzID0gbmV3IEF0bGFzKG9wdHMpXG5cbiAgICBleHBlY3QoYXRsYXMpLnRvLmhhdmUucHJvcGVydHkoJ2xvZycpXG4gICAgZXhwZWN0KGF0bGFzLmxvZykudG8ucmVzcG9uZFRvKCdkZWJ1ZycpXG4gICAgZXhwZWN0KGF0bGFzLmxvZykudG8ucmVzcG9uZFRvKCdpbmZvJylcbiAgICBleHBlY3QoYXRsYXMubG9nKS50by5yZXNwb25kVG8oJ3dhcm4nKVxuICAgIGV4cGVjdChhdGxhcy5sb2cpLnRvLnJlc3BvbmRUbygnZXJyb3InKVxuICB9KVxuXG4gIGl0KCdwcmV2ZW50cyBzZXR0aW5nIGF0bGFzLnByZXBhcmVkJywgKCkgPT4ge1xuICAgIGNvbnN0IGF0bGFzID0gbmV3IEF0bGFzKG9wdHMpXG5cbiAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgYXRsYXMucHJlcGFyZWQgPSB0cnVlXG4gICAgfSkudG8udGhyb3coKVxuICB9KVxuXG4gIGl0KCdwcmV2ZW50cyBzZXR0aW5nIGF0bGFzLnN0YXJ0ZWQnLCAoKSA9PiB7XG4gICAgY29uc3QgYXRsYXMgPSBuZXcgQXRsYXMob3B0cylcblxuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBhdGxhcy5zdGFydGVkID0gdHJ1ZVxuICAgIH0pLnRvLnRocm93KClcbiAgfSlcbn0pXG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwaS50ZXN0Lm1qcyJdLCJuYW1lcyI6WyJkZXNjcmliZSIsIm9wdHMiLCJiZWZvcmVFYWNoIiwicm9vdCIsIl9fZGlybmFtZSIsIml0IiwiZXhwZWN0IiwiQXRsYXMiLCJ0byIsImJlIiwiYSIsIm5vdCIsInRocm93IiwiRnJhbWV3b3JrRXJyb3IiLCJzYW5kYm94Iiwic3R1YiIsInByb2Nlc3MiLCJlbnYiLCJ2YWx1ZSIsIm1vZHVsZXMiLCJiYXNlIiwicmVxdWlyZSIsImxvY2FsIiwiYXRsYXMiLCJoYXZlIiwicHJvcGVydHkiLCJjb25maWciLCJkZWZhdWx0IiwibG9nIiwic2VyaWFsaXplcnMiLCJhbiIsImFsbCIsImtleXMiLCJyZXNwb25kVG8iLCJpbmNsdWRlIiwiZXF1YWwiLCJOT0RFX0VOViIsImFuZCIsInByZXBhcmVkIiwic3RhcnRlZCJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7QUFDQTs7QUFFQUEsU0FBUyx1QkFBVCxFQUFrQyxNQUFNO0FBQ3RDLE1BQUlDLElBQUo7QUFFQUMsYUFBVyxNQUFNO0FBQ2ZELFdBQU87QUFBRUUsWUFBTUM7QUFBUixLQUFQO0FBQ0QsR0FGRDtBQUtBQyxLQUFHLFFBQUgsRUFBYSxNQUFNO0FBQ2pCQyxXQUFPQyxPQUFQLEVBQWNDLEVBQWQsQ0FBaUJDLEVBQWpCLENBQW9CQyxDQUFwQixDQUFzQixVQUF0QjtBQUNELEdBRkQ7QUFJQUwsS0FBRyxvQkFBSCxFQUF5QixNQUFNO0FBQzdCQyxXQUFPLE1BQU0sSUFBSUMsT0FBSixDQUFVTixJQUFWLENBQWIsRUFBOEJPLEVBQTlCLENBQWlDRyxHQUFqQyxDQUFxQ0MsS0FBckM7QUFDRCxHQUZEO0FBSUFQLEtBQUcsK0JBQUgsRUFBb0MsTUFBTTtBQUN4Q0MsV0FBTyxNQUFNLElBQUlDLE9BQUosRUFBYixFQUEwQkMsRUFBMUIsQ0FBNkJJLEtBQTdCLENBQW1DQyxzQkFBbkMsRUFBbUQsbUNBQW5EO0FBQ0QsR0FGRDtBQUlBUixLQUFHLHlEQUFILEVBQThELFlBQVc7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QixDQUFxQnlCLFNBQXJCLENBQStCLE1BQS9CO0FBQ0EzQixXQUFPaUIsTUFBTUssR0FBYixFQUFrQnBCLEVBQWxCLENBQXFCeUIsU0FBckIsQ0FBK0IsT0FBL0I7QUFDRCxHQVJEO0FBVUE1QixLQUFHLGlDQUFILEVBQXNDLE1BQU07QUFDMUMsVUFBTWtCLFFBQVEsSUFBSWhCLE9BQUosQ0FBVU4sSUFBVixDQUFkO0FBRUFLLFdBQU8sTUFBTTtBQUNYaUIsWUFBTWUsUUFBTixHQUFpQixJQUFqQjtBQUNELEtBRkQsRUFFRzlCLEVBRkgsQ0FFTUksS0FGTjtBQUdELEdBTkQ7QUFRQVAsS0FBRyxnQ0FBSCxFQUFxQyxNQUFNO0FBQ3pDLFVBQU1rQixRQUFRLElBQUloQixPQUFKLENBQVVOLElBQVYsQ0FBZDtBQUVBSyxXQUFPLE1BQU07QUFDWGlCLFlBQU1nQixPQUFOLEdBQWdCLElBQWhCO0FBQ0QsS0FGRCxFQUVHL0IsRUFGSCxDQUVNSSxLQUZOO0FBR0QsR0FORDtBQU9ELENBaEpEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXRsYXMgfSBmcm9tICcuLidcbmltcG9ydCB7IEZyYW1ld29ya0Vycm9yIH0gZnJvbSAnQGF0bGFzLmpzL2Vycm9ycydcblxuZGVzY3JpYmUoJ0F0bGFzOiBiYXNpY3MgYW5kIEFQSScsICgpID0+IHtcbiAgbGV0IG9wdHNcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvcHRzID0geyByb290OiBfX2Rpcm5hbWUgfVxuICB9KVxuXG5cbiAgaXQoJ2V4aXN0cycsICgpID0+IHtcbiAgICBleHBlY3QoQXRsYXMpLnRvLmJlLmEoJ2Z1bmN0aW9uJylcbiAgfSlcblxuICBpdCgnY2FuIGJlIGNvbnN0cnVjdGVkJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBuZXcgQXRsYXMob3B0cykpLnRvLm5vdC50aHJvdygpXG4gIH0pXG5cbiAgaXQoJ3JlcXVpcmVzIHJvb3Qgb24gY29uc3RydWN0aW9uJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBuZXcgQXRsYXMoKSkudG8udGhyb3coRnJhbWV3b3JrRXJyb3IsIC9yb290IG11c3QgYmUgZXhwbGljaXRseSBzcGVjaWZpZWQvKVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiBlbnYgaXMgbm90IHByb3ZpZGVkIGFuZCBOT0RFX0VOViBpcyBub3Qgc2V0JywgZnVuY3Rpb24oKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb2Nlc3MtZW52XG4gICAgdGhpcy5zYW5kYm94LnN0dWIocHJvY2Vzcy5lbnYsICdOT0RFX0VOVicpLnZhbHVlKCcnKVxuICAgIGV4cGVjdCgoKSA9PiBuZXcgQXRsYXMob3B0cykpLnRvLnRocm93KEZyYW1ld29ya0Vycm9yLCAvZW52IG5vdCBzcGVjaWZpZWQvKVxuICB9KVxuXG4gIGl0KCdzdXBwb3J0cyBsb2FkaW5nIHRoZSBjb25maWcgZnJvbSBtb2R1bGUgcGF0aCByZWxhdGl2ZSB0byByb290JywgKCkgPT4ge1xuICAgIC8vIFNhbml0eSBjaGVja1xuICAgIGNvbnN0IG1vZHVsZXMgPSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBnbG9iYWwtcmVxdWlyZSAqL1xuICAgICAgYmFzZTogcmVxdWlyZSgnLi9kZW1vY29uZmlnJyksXG4gICAgICBlbnY6IHJlcXVpcmUoJy4vZGVtb2NvbmZpZy9lbnYvbG9sZW52JyksXG4gICAgICBsb2NhbDogcmVxdWlyZSgnLi9kZW1vY29uZmlnL2xvY2FsJyksXG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIGdsb2JhbC1yZXF1aXJlICovXG4gICAgfVxuICAgIGV4cGVjdChtb2R1bGVzLmJhc2UuYXRsYXMpLnRvLmhhdmUucHJvcGVydHkoJ2Zyb21CYXNlJywgdHJ1ZSlcbiAgICBleHBlY3QobW9kdWxlcy5iYXNlLmF0bGFzKS50by5oYXZlLnByb3BlcnR5KCdmcm9tRW52JywgZmFsc2UpXG4gICAgZXhwZWN0KG1vZHVsZXMuYmFzZS5hdGxhcykudG8uaGF2ZS5wcm9wZXJ0eSgnZnJvbUxvY2FsJywgZmFsc2UpXG4gICAgZXhwZWN0KG1vZHVsZXMuZW52LmF0bGFzKS50by5oYXZlLnByb3BlcnR5KCdmcm9tRW52JywgdHJ1ZSlcbiAgICBleHBlY3QobW9kdWxlcy5lbnYuYXRsYXMpLnRvLmhhdmUucHJvcGVydHkoJ2Zyb21Mb2NhbCcsIGZhbHNlKVxuICAgIGV4cGVjdChtb2R1bGVzLmxvY2FsLmF0bGFzKS50by5oYXZlLnByb3BlcnR5KCdmcm9tTG9jYWwnLCB0cnVlKVxuXG4gICAgY29uc3QgYXRsYXMgPSBuZXcgQXRsYXMoe1xuICAgICAgcm9vdDogX19kaXJuYW1lLFxuICAgICAgZW52OiAnbG9sZW52JyxcbiAgICAgIGNvbmZpZzogJ2RlbW9jb25maWcnLFxuICAgIH0pXG4gICAgY29uc3QgY29uZmlnID0gYXRsYXMuY29uZmlnLmF0bGFzXG5cbiAgICBleHBlY3QoY29uZmlnKS50by5oYXZlLnByb3BlcnR5KCdmcm9tQmFzZScsIHRydWUpXG4gICAgZXhwZWN0KGNvbmZpZykudG8uaGF2ZS5wcm9wZXJ0eSgnZnJvbUVudicsIHRydWUpXG4gICAgZXhwZWN0KGNvbmZpZykudG8uaGF2ZS5wcm9wZXJ0eSgnZnJvbUxvY2FsJywgdHJ1ZSlcbiAgfSlcblxuICBpdCgncHJlZmVycyBFUyBtb2R1bGUgZGVmYXVsdCBleHBvcnQgaW4gdGhlIGNvbmZpZyBmaWxlcycsICgpID0+IHtcbiAgICBjb25zdCBtb2R1bGVzID0ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlXG4gICAgICBlbnY6IHJlcXVpcmUoJy4vZGVtb2NvbmZpZy9lbnYvbW9kZW52JykuZGVmYXVsdCxcbiAgICB9XG5cbiAgICBleHBlY3QobW9kdWxlcy5lbnYuYXRsYXMpLnRvLmhhdmUucHJvcGVydHkoJ2Zyb21FbnYnLCB0cnVlKVxuICAgIGV4cGVjdChtb2R1bGVzLmVudi5hdGxhcykudG8uaGF2ZS5wcm9wZXJ0eSgnZnJvbUxvY2FsJywgZmFsc2UpXG5cbiAgICBjb25zdCBhdGxhcyA9IG5ldyBBdGxhcyh7XG4gICAgICByb290OiBfX2Rpcm5hbWUsXG4gICAgICBlbnY6ICdtb2RlbnYnLFxuICAgICAgY29uZmlnOiAnZGVtb2NvbmZpZycsXG4gICAgfSlcbiAgICBjb25zdCBjb25maWcgPSBhdGxhcy5jb25maWcuYXRsYXNcblxuICAgIGV4cGVjdChjb25maWcpLnRvLmhhdmUucHJvcGVydHkoJ2Zyb21CYXNlJywgdHJ1ZSlcbiAgICBleHBlY3QoY29uZmlnKS50by5oYXZlLnByb3BlcnR5KCdmcm9tRW52JywgdHJ1ZSlcbiAgICBleHBlY3QoY29uZmlnKS50by5oYXZlLnByb3BlcnR5KCdmcm9tTG9jYWwnLCB0cnVlKVxuICB9KVxuXG4gIGl0KCdzdXBwb3J0cyBsb2FkaW5nIFBpbm8gbG9nIHNlcmlhbGlzZXJzIGZyb20gbW9kdWxlIHBhdGggcmVsYXRpdmUgdG8gcm9vdCcsICgpID0+IHtcbiAgICBjb25zdCBhdGxhcyA9IG5ldyBBdGxhcyh7XG4gICAgICByb290OiBfX2Rpcm5hbWUsXG4gICAgICBlbnY6ICdsb2xlbnYnLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIGF0bGFzOiB7XG4gICAgICAgICAgbG9nOiB7XG4gICAgICAgICAgICBzZXJpYWxpemVyczogJ2RlbW9jb25maWcvc2VyaWFsaXNlcnMnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pXG4gICAgY29uc3QgY29uZmlnID0gYXRsYXMuY29uZmlnLmF0bGFzXG5cbiAgICBleHBlY3QoY29uZmlnLmxvZy5zZXJpYWxpemVycykudG8uYmUuYW4oJ29iamVjdCcpXG4gICAgZXhwZWN0KGNvbmZpZy5sb2cuc2VyaWFsaXplcnMpLnRvLmhhdmUuYWxsLmtleXMoWydlcnInLCAncmVxJywgJ3JlcycsICdjdXN0b20nXSlcbiAgfSlcblxuICBpdCgncmVzcG9uZHMgdG8ga25vd24gbWV0aG9kcycsICgpID0+IHtcbiAgICBjb25zdCBhdGxhcyA9IG5ldyBBdGxhcyhvcHRzKVxuXG4gICAgZXhwZWN0KGF0bGFzKS50by5yZXNwb25kVG8oJ3ByZXBhcmUnKVxuICAgIGV4cGVjdChhdGxhcykudG8ucmVzcG9uZFRvKCdzdGFydCcpXG4gICAgZXhwZWN0KGF0bGFzKS50by5yZXNwb25kVG8oJ3N0b3AnKVxuICB9KVxuXG4gIGl0KCdoYXMga25vd24gcHVibGljIHByb3BlcnRpZXMnLCAoKSA9PiB7XG4gICAgY29uc3QgYXRsYXMgPSBuZXcgQXRsYXMob3B0cylcblxuICAgIGV4cGVjdChhdGxhcykudG8uaW5jbHVkZS5hbGwua2V5cyhbXG4gICAgICAnYWN0aW9ucycsXG4gICAgICAnc2VydmljZXMnLFxuICAgICAgJ2NvbmZpZycsXG4gICAgICAnbG9nJyxcbiAgICAgICd2YWxpZGF0b3InLFxuICAgIF0pXG4gICAgLy8gSW1wbGVtZW50ZWQgYXMgZ2V0dGVycywgYW5kIENoYWkgZG9lcyBub3Qgc2VlbSB0byB3b3JrIHdpdGggdGhlbSB3aGVuIGNoZWNraW5nIGZvciAua2V5cygpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb2Nlc3MtZW52XG4gICAgZXhwZWN0KGF0bGFzLmVudikudG8uZXF1YWwocHJvY2Vzcy5lbnYuTk9ERV9FTlYpLmFuZC50by5iZS5hKCdzdHJpbmcnKVxuICAgIGV4cGVjdChhdGxhcy5yb290KS50by5lcXVhbChfX2Rpcm5hbWUpXG4gICAgZXhwZWN0KGF0bGFzLnByZXBhcmVkKS50by5lcXVhbChmYWxzZSlcbiAgICBleHBlY3QoYXRsYXMuc3RhcnRlZCkudG8uZXF1YWwoZmFsc2UpXG4gIH0pXG5cbiAgaXQoJ2NvbnN0cnVjdHMgYSBsb2cgb2JqZWN0IG9uIHRoaXMubG9nJywgKCkgPT4ge1xuICAgIGNvbnN0IGF0bGFzID0gbmV3IEF0bGFzKG9wdHMpXG5cbiAgICBleHBlY3QoYXRsYXMpLnRvLmhhdmUucHJvcGVydHkoJ2xvZycpXG4gICAgZXhwZWN0KGF0bGFzLmxvZykudG8ucmVzcG9uZFRvKCdkZWJ1ZycpXG4gICAgZXhwZWN0KGF0bGFzLmxvZykudG8ucmVzcG9uZFRvKCdpbmZvJylcbiAgICBleHBlY3QoYXRsYXMubG9nKS50by5yZXNwb25kVG8oJ3dhcm4nKVxuICAgIGV4cGVjdChhdGxhcy5sb2cpLnRvLnJlc3BvbmRUbygnZXJyb3InKVxuICB9KVxuXG4gIGl0KCdwcmV2ZW50cyBzZXR0aW5nIGF0bGFzLnByZXBhcmVkJywgKCkgPT4ge1xuICAgIGNvbnN0IGF0bGFzID0gbmV3IEF0bGFzKG9wdHMpXG5cbiAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgYXRsYXMucHJlcGFyZWQgPSB0cnVlXG4gICAgfSkudG8udGhyb3coKVxuICB9KVxuXG4gIGl0KCdwcmV2ZW50cyBzZXR0aW5nIGF0bGFzLnN0YXJ0ZWQnLCAoKSA9PiB7XG4gICAgY29uc3QgYXRsYXMgPSBuZXcgQXRsYXMob3B0cylcblxuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBhdGxhcy5zdGFydGVkID0gdHJ1ZVxuICAgIH0pLnRvLnRocm93KClcbiAgfSlcbn0pXG4iXX0=

@@ -12,2 +12,2 @@ "use strict";

exports.atlas = atlas;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxvbGVudi5tanMiXSwibmFtZXMiOlsiYXRsYXMiLCJmcm9tRW52IiwiZnJvbUxvY2FsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxNQUFNQSxRQUFRO0FBQ1pDLFdBQVMsSUFERztBQUVaQyxhQUFXO0FBRkMsQ0FBZCIsImZpbGUiOiJsb2xlbnYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBlbnYtc3BlY2lmaWMgY29uZmlndXJhdGlvbi5cbmNvbnN0IGF0bGFzID0ge1xuICBmcm9tRW52OiB0cnVlLFxuICBmcm9tTG9jYWw6IGZhbHNlLFxufVxuXG5leHBvcnQge1xuICBhdGxhcyxcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxvbGVudi5tanMiXSwibmFtZXMiOlsiYXRsYXMiLCJmcm9tRW52IiwiZnJvbUxvY2FsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxNQUFNQSxRQUFRO0FBQ1pDLFdBQVMsSUFERztBQUVaQyxhQUFXO0FBRkMsQ0FBZCIsInNvdXJjZXNDb250ZW50IjpbIi8vIGVudi1zcGVjaWZpYyBjb25maWd1cmF0aW9uLlxuY29uc3QgYXRsYXMgPSB7XG4gIGZyb21FbnY6IHRydWUsXG4gIGZyb21Mb2NhbDogZmFsc2UsXG59XG5cbmV4cG9ydCB7XG4gIGF0bGFzLFxufVxuIl19

@@ -14,2 +14,2 @@ "use strict";

exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vZGVudi5tanMiXSwibmFtZXMiOlsiYXRsYXMiLCJmcm9tRW52IiwiZnJvbUxvY2FsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7ZUFDZTtBQUNiQSxTQUFPO0FBQ0xDLGFBQVMsSUFESjtBQUVMQyxlQUFXO0FBRk47QUFETSxDIiwiZmlsZSI6Im1vZGVudi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGVudi1zcGVjaWZpYyBjb25maWd1cmF0aW9uLlxuZXhwb3J0IGRlZmF1bHQge1xuICBhdGxhczoge1xuICAgIGZyb21FbnY6IHRydWUsXG4gICAgZnJvbUxvY2FsOiBmYWxzZSxcbiAgfSxcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vZGVudi5tanMiXSwibmFtZXMiOlsiYXRsYXMiLCJmcm9tRW52IiwiZnJvbUxvY2FsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7ZUFDZTtBQUNiQSxTQUFPO0FBQ0xDLGFBQVMsSUFESjtBQUVMQyxlQUFXO0FBRk47QUFETSxDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZW52LXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uXG5leHBvcnQgZGVmYXVsdCB7XG4gIGF0bGFzOiB7XG4gICAgZnJvbUVudjogdHJ1ZSxcbiAgICBmcm9tTG9jYWw6IGZhbHNlLFxuICB9LFxufVxuIl19

@@ -13,2 +13,2 @@ "use strict";

exports.atlas = atlas;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4Lm1qcyJdLCJuYW1lcyI6WyJhdGxhcyIsImZyb21CYXNlIiwiZnJvbUVudiIsImZyb21Mb2NhbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsTUFBTUEsUUFBUTtBQUNaQyxZQUFVLElBREU7QUFFWkMsV0FBUyxLQUZHO0FBR1pDLGFBQVc7QUFIQyxDQUFkIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQmFzZSBjb25maWd1cmF0aW9uIG1vZHVsZS5cbmNvbnN0IGF0bGFzID0ge1xuICBmcm9tQmFzZTogdHJ1ZSxcbiAgZnJvbUVudjogZmFsc2UsXG4gIGZyb21Mb2NhbDogZmFsc2UsXG59XG5cbmV4cG9ydCB7XG4gIGF0bGFzLFxufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4Lm1qcyJdLCJuYW1lcyI6WyJhdGxhcyIsImZyb21CYXNlIiwiZnJvbUVudiIsImZyb21Mb2NhbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsTUFBTUEsUUFBUTtBQUNaQyxZQUFVLElBREU7QUFFWkMsV0FBUyxLQUZHO0FBR1pDLGFBQVc7QUFIQyxDQUFkIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQmFzZSBjb25maWd1cmF0aW9uIG1vZHVsZS5cbmNvbnN0IGF0bGFzID0ge1xuICBmcm9tQmFzZTogdHJ1ZSxcbiAgZnJvbUVudjogZmFsc2UsXG4gIGZyb21Mb2NhbDogZmFsc2UsXG59XG5cbmV4cG9ydCB7XG4gIGF0bGFzLFxufVxuIl19

@@ -11,2 +11,2 @@ "use strict";

exports.atlas = atlas;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxvY2FsLm1qcyJdLCJuYW1lcyI6WyJhdGxhcyIsImZyb21Mb2NhbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsTUFBTUEsUUFBUTtBQUNaQyxhQUFXO0FBREMsQ0FBZCIsImZpbGUiOiJsb2NhbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFVzZWZ1bCBmb3IgcHJvdmlkaW5nIGxvY2FsLCBwZXItbWFjaGluZSBjb25maWd1cmF0aW9uIHdoaWNoIGlzIG5ldmVyIGNvbW1pdGVkIHRvIHRoZSByZXBvLlxuY29uc3QgYXRsYXMgPSB7XG4gIGZyb21Mb2NhbDogdHJ1ZSxcbn1cblxuZXhwb3J0IHtcbiAgYXRsYXMsXG59XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxvY2FsLm1qcyJdLCJuYW1lcyI6WyJhdGxhcyIsImZyb21Mb2NhbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsTUFBTUEsUUFBUTtBQUNaQyxhQUFXO0FBREMsQ0FBZCIsInNvdXJjZXNDb250ZW50IjpbIi8vIFVzZWZ1bCBmb3IgcHJvdmlkaW5nIGxvY2FsLCBwZXItbWFjaGluZSBjb25maWd1cmF0aW9uIHdoaWNoIGlzIG5ldmVyIGNvbW1pdGVkIHRvIHRoZSByZXBvLlxuY29uc3QgYXRsYXMgPSB7XG4gIGZyb21Mb2NhbDogdHJ1ZSxcbn1cblxuZXhwb3J0IHtcbiAgYXRsYXMsXG59XG4iXX0=

@@ -15,2 +15,2 @@ "use strict";

exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1peGVkLWV4cG9ydHMubWpzIl0sIm5hbWVzIjpbInRlc3QiLCJuYW1lZCIsImRlZmF1bHQiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFPLE1BQU1BLE9BQU87QUFDbEJDLFNBQU87QUFEVyxDQUFiOztlQUlRO0FBQ2JDLFdBQVM7QUFESSxDIiwiZmlsZSI6Im1peGVkLWV4cG9ydHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdGVzdCA9IHtcbiAgbmFtZWQ6IHRydWUsXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGVmYXVsdDogdHJ1ZSxcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1peGVkLWV4cG9ydHMubWpzIl0sIm5hbWVzIjpbInRlc3QiLCJuYW1lZCIsImRlZmF1bHQiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFPLE1BQU1BLE9BQU87QUFDbEJDLFNBQU87QUFEVyxDQUFiOztlQUlRO0FBQ2JDLFdBQVM7QUFESSxDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHRlc3QgPSB7XG4gIG5hbWVkOiB0cnVlLFxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGRlZmF1bHQ6IHRydWUsXG59XG4iXX0=

@@ -8,8 +8,15 @@ "use strict";

var _pino = require("pino");
var _pino = _interopRequireDefault(require("pino"));
var _default = { ..._pino.stdSerializers,
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const stdSerializers = {
err: _pino.default.stdSerializers.err,
req: _pino.default.stdSerializers.req,
res: _pino.default.stdSerializers.res
};
var _default = { ...stdSerializers,
custom: () => {}
};
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNlcmlhbGlzZXJzLm1qcyJdLCJuYW1lcyI6WyJjdXN0b20iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7ZUFFZSxFQUNiLHVCQURhO0FBRWJBLFVBQVEsTUFBTSxDQUFFO0FBRkgsQyIsImZpbGUiOiJzZXJpYWxpc2Vycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN0ZFNlcmlhbGl6ZXJzIH0gZnJvbSAncGlubydcblxuZXhwb3J0IGRlZmF1bHQge1xuICAuLi5zdGRTZXJpYWxpemVycyxcbiAgY3VzdG9tOiAoKSA9PiB7fSxcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNlcmlhbGlzZXJzLm1qcyJdLCJuYW1lcyI6WyJzdGRTZXJpYWxpemVycyIsImVyciIsInBpbm8iLCJyZXEiLCJyZXMiLCJjdXN0b20iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7OztBQUVBLE1BQU1BLGlCQUFpQjtBQUNyQkMsT0FBS0MsY0FBS0YsY0FBTCxDQUFvQkMsR0FESjtBQUVyQkUsT0FBS0QsY0FBS0YsY0FBTCxDQUFvQkcsR0FGSjtBQUdyQkMsT0FBS0YsY0FBS0YsY0FBTCxDQUFvQkk7QUFISixDQUF2QjtlQU1lLEVBQ2IsR0FBR0osY0FEVTtBQUViSyxVQUFRLE1BQU0sQ0FBRTtBQUZILEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGlubyBmcm9tICdwaW5vJ1xuXG5jb25zdCBzdGRTZXJpYWxpemVycyA9IHtcbiAgZXJyOiBwaW5vLnN0ZFNlcmlhbGl6ZXJzLmVycixcbiAgcmVxOiBwaW5vLnN0ZFNlcmlhbGl6ZXJzLnJlcSxcbiAgcmVzOiBwaW5vLnN0ZFNlcmlhbGl6ZXJzLnJlcyxcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICAuLi5zdGRTZXJpYWxpemVycyxcbiAgY3VzdG9tOiAoKSA9PiB7fSxcbn1cbiJdfQ==

@@ -13,2 +13,3 @@ "use strict";

DummyHook.observes = 'atlas';
describe('Atlas::hook()', () => {

@@ -42,2 +43,3 @@ let atlas;

const hook = sinon.spy();
hook.config = {};
atlas.hook('dummy', hook);

@@ -50,2 +52,3 @@ const args = hook.getCall(0).args[0];

const hook = sinon.spy();
hook.config = {};
atlas.hook('dummy', hook);

@@ -59,2 +62,3 @@ const args = hook.getCall(0).args[0];

const hook = sinon.spy();
hook.config = {};
atlas.hook('dummy', hook);

@@ -68,2 +72,3 @@ const args = hook.getCall(0).args[0];

const hook = sinon.spy();
hook.config = {};
atlas.hook('dummy', hook);

@@ -76,2 +81,3 @@ const args = hook.getCall(0).args[0];

const hook = sinon.spy();
hook.config = {};
hook.defaults = {

@@ -86,2 +92,3 @@ default: true

const hook = sinon.spy();
hook.config = {};
hook.requires = ['service:dummy', 'action:dummy'];

@@ -94,2 +101,3 @@ expect(() => {

const hook = sinon.spy();
hook.config = {};
expect(() => {

@@ -105,2 +113,3 @@ atlas.hook('dummy', hook, {

const hook = sinon.spy();
hook.config = {};
hook.requires = ['service:dummy', 'action:dummy'];

@@ -116,3 +125,61 @@ expect(() => {

});
it('does not throw when aliases include the observed component', () => {
class Dummy extends _hook.default {}
Dummy.observes = 'service:dummy';
expect(() => {
atlas.hook('dummy', Dummy, {
aliases: {
'service:dummy': 'dummy'
}
});
}).to.not.throw();
});
it('throws when the observed component is not included in the aliases', () => {
class Dummy extends _hook.default {}
Dummy.observes = 'service:dummy';
expect(() => {
atlas.hook('dummy', Dummy);
}).to.throw(_errors.FrameworkError, /Missing aliases for component dummy/);
});
it('throws when user config fails component config schema', () => {
options.config.hooks.dummy = {
lol: true
};
atlas = new _.Atlas(options);
const hook = sinon.spy();
hook.config = {
type: 'object',
additionalProperties: false,
properties: {
test: {
type: 'boolean'
}
}
};
expect(() => atlas.hook('dummy', hook)).to.throw(_errors.ValidationError);
});
it('works when user config passes component config schema', () => {
const hook = sinon.spy();
hook.config = {
type: 'object',
additionalProperties: false,
properties: {
test: {
type: 'boolean'
}
}
};
expect(() => atlas.hook('dummy', hook)).not.to.throw(_errors.ValidationError);
});
it('does not throw if a hook observes the atlas instance and atlas is not in aliases', () => {
class Dummy extends _hook.default {}
Dummy.observes = 'atlas';
expect(() => {
atlas.hook('dummy', Dummy);
}).to.not.throw();
});
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImhvb2sudGVzdC5tanMiXSwibmFtZXMiOlsiRHVtbXlIb29rIiwiZGVzY3JpYmUiLCJhdGxhcyIsIm9wdGlvbnMiLCJiZWZvcmVFYWNoIiwicm9vdCIsIl9fZGlybmFtZSIsImNvbmZpZyIsImhvb2tzIiwiZHVtbXkiLCJ0ZXN0IiwiaXQiLCJleHBlY3QiLCJob29rIiwidG8iLCJlcXVhbCIsInRocm93Iiwic2lub24iLCJzcHkiLCJhcmdzIiwiZ2V0Q2FsbCIsImhhdmUiLCJwcm9wZXJ0eSIsImxvZyIsImJlIiwiYW4iLCJjaGluZGluZ3MiLCJtYXRjaCIsImNvbXBvbmVudCIsImEiLCJkZWZhdWx0cyIsImRlZmF1bHQiLCJyZXF1aXJlcyIsImFsaWFzZXMiLCJub3QiXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxTQUFOLHVCQUE2Qjs7QUFFN0JDLFNBQVMsZUFBVCxFQUEwQixNQUFNO0FBQzlCLE1BQUlDLEtBQUo7QUFDQSxNQUFJQyxPQUFKO0FBRUFDLGFBQVcsTUFBTTtBQUNmRCxjQUFVO0FBQ1JFLFlBQU1DLFNBREU7QUFFUkMsY0FBUTtBQUNOQyxlQUFPO0FBQ0xDLGlCQUFPO0FBQ0xDLGtCQUFNO0FBREQ7QUFERjtBQUREO0FBRkEsS0FBVjtBQVVBUixZQUFRLFlBQVVDLE9BQVYsQ0FBUjtBQUNELEdBWkQ7QUFjQVEsS0FBRyxjQUFILEVBQW1CLE1BQU07QUFDdkJDLFdBQU9WLE1BQU1XLElBQU4sQ0FBVyxPQUFYLEVBQW9CYixTQUFwQixDQUFQLEVBQXVDYyxFQUF2QyxDQUEwQ0MsS0FBMUMsQ0FBZ0RiLEtBQWhEO0FBQ0QsR0FGRDtBQUlBUyxLQUFHLDZEQUFILEVBQWtFLE1BQU07QUFDdEVULFVBQU1XLElBQU4sQ0FBVyxPQUFYLEVBQW9CYixTQUFwQjtBQUNBWSxXQUFPLE1BQU1WLE1BQU1XLElBQU4sQ0FBVyxPQUFYLEVBQW9CYixTQUFwQixDQUFiLEVBQTZDYyxFQUE3QyxDQUFnREUsS0FBaEQ7QUFDRCxHQUhEO0FBS0FMLEtBQUcsOENBQUgsRUFBbUQsTUFBTTtBQUN2REMsV0FBTyxNQUFNVixNQUFNVyxJQUFOLENBQVcsT0FBWCxFQUFvQixFQUFwQixDQUFiLEVBQXNDQyxFQUF0QyxDQUF5Q0UsS0FBekM7QUFDRCxHQUZEO0FBSUFMLEtBQUcsaURBQUgsRUFBc0QsTUFBTTtBQUMxRCxVQUFNRSxPQUFPSSxNQUFNQyxHQUFOLEVBQWI7QUFDQWhCLFVBQU1XLElBQU4sQ0FBVyxPQUFYLEVBQW9CQSxJQUFwQjtBQUNBLFVBQU1NLE9BQU9OLEtBQUtPLE9BQUwsQ0FBYSxDQUFiLEVBQWdCRCxJQUFoQixDQUFxQixDQUFyQixDQUFiO0FBRUFQLFdBQU9PLElBQVAsRUFBYUwsRUFBYixDQUFnQk8sSUFBaEIsQ0FBcUJDLFFBQXJCLENBQThCLE9BQTlCO0FBQ0FWLFdBQU9PLEtBQUtqQixLQUFaLEVBQW1CWSxFQUFuQixDQUFzQkMsS0FBdEIsQ0FBNEJiLEtBQTVCO0FBQ0QsR0FQRDtBQVNBUyxLQUFHLHlEQUFILEVBQThELE1BQU07QUFDbEUsVUFBTUUsT0FBT0ksTUFBTUMsR0FBTixFQUFiO0FBQ0FoQixVQUFNVyxJQUFOLENBQVcsT0FBWCxFQUFvQkEsSUFBcEI7QUFDQSxVQUFNTSxPQUFPTixLQUFLTyxPQUFMLENBQWEsQ0FBYixFQUFnQkQsSUFBaEIsQ0FBcUIsQ0FBckIsQ0FBYjtBQUVBUCxXQUFPTyxJQUFQLEVBQWFMLEVBQWIsQ0FBZ0JPLElBQWhCLENBQXFCQyxRQUFyQixDQUE4QixLQUE5QjtBQUNBVixXQUFPTyxLQUFLSSxHQUFaLEVBQWlCVCxFQUFqQixDQUFvQlUsRUFBcEIsQ0FBdUJDLEVBQXZCLENBQTBCLFFBQTFCO0FBQ0FiLFdBQU9PLEtBQUtJLEdBQUwsQ0FBU0csU0FBaEIsRUFBMkJaLEVBQTNCLENBQThCYSxLQUE5QixDQUFvQyxnQkFBcEM7QUFDRCxHQVJEO0FBVUFoQixLQUFHLHFEQUFILEVBQTBELE1BQU07QUFDOUQsVUFBTUUsT0FBT0ksTUFBTUMsR0FBTixFQUFiO0FBQ0FoQixVQUFNVyxJQUFOLENBQVcsT0FBWCxFQUFvQkEsSUFBcEI7QUFDQSxVQUFNTSxPQUFPTixLQUFLTyxPQUFMLENBQWEsQ0FBYixFQUFnQkQsSUFBaEIsQ0FBcUIsQ0FBckIsQ0FBYjtBQUVBUCxXQUFPTyxJQUFQLEVBQWFMLEVBQWIsQ0FBZ0JPLElBQWhCLENBQXFCQyxRQUFyQixDQUE4QixRQUE5QjtBQUNBVixXQUFPTyxLQUFLWixNQUFaLEVBQW9CTyxFQUFwQixDQUF1QlUsRUFBdkIsQ0FBMEJDLEVBQTFCLENBQTZCLFFBQTdCO0FBQ0FiLFdBQU9PLEtBQUtaLE1BQVosRUFBb0JPLEVBQXBCLENBQXVCQyxLQUF2QixDQUE2QlosUUFBUUksTUFBUixDQUFlQyxLQUFmLENBQXFCQyxLQUFsRDtBQUNELEdBUkQ7QUFVQUUsS0FBRywyRUFBSCxFQUFnRixNQUFNO0FBQ3BGLFVBQU1FLE9BQU9JLE1BQU1DLEdBQU4sRUFBYjtBQUNBaEIsVUFBTVcsSUFBTixDQUFXLE9BQVgsRUFBb0JBLElBQXBCO0FBQ0EsVUFBTU0sT0FBT04sS0FBS08sT0FBTCxDQUFhLENBQWIsRUFBZ0JELElBQWhCLENBQXFCLENBQXJCLENBQWI7QUFFQVAsV0FBT08sSUFBUCxFQUFhTCxFQUFiLENBQWdCTyxJQUFoQixDQUFxQkMsUUFBckIsQ0FBOEIsV0FBOUI7QUFDQVYsV0FBT08sS0FBS1MsU0FBWixFQUF1QmQsRUFBdkIsQ0FBMEJVLEVBQTFCLENBQTZCSyxDQUE3QixDQUErQixVQUEvQjtBQUNELEdBUEQ7QUFTQWxCLEtBQUcsaUVBQUgsRUFBc0UsTUFBTTtBQUMxRSxVQUFNRSxPQUFPSSxNQUFNQyxHQUFOLEVBQWI7QUFDQUwsU0FBS2lCLFFBQUwsR0FBZ0I7QUFBRUMsZUFBUztBQUFYLEtBQWhCO0FBQ0E3QixVQUFNVyxJQUFOLENBQVcsT0FBWCxFQUFvQkEsSUFBcEI7QUFDQSxVQUFNTSxPQUFPTixLQUFLTyxPQUFMLENBQWEsQ0FBYixFQUFnQkQsSUFBaEIsQ0FBcUIsQ0FBckIsQ0FBYjtBQUVBUCxXQUFPTyxLQUFLWixNQUFaLEVBQW9CTyxFQUFwQixDQUF1Qk8sSUFBdkIsQ0FBNEJDLFFBQTVCLENBQXFDLFNBQXJDLEVBQWdELElBQWhEO0FBQ0QsR0FQRDtBQVNBWCxLQUFHLGtFQUFILEVBQXVFLE1BQU07QUFDM0UsVUFBTUUsT0FBT0ksTUFBTUMsR0FBTixFQUFiO0FBQ0FMLFNBQUttQixRQUFMLEdBQWdCLENBQUMsZUFBRCxFQUFrQixjQUFsQixDQUFoQjtBQUNBcEIsV0FBTyxNQUFNO0FBQ1hWLFlBQU1XLElBQU4sQ0FBVyxPQUFYLEVBQW9CQSxJQUFwQjtBQUNELEtBRkQsRUFFR0MsRUFGSCxDQUVNRSxLQUZOLHlCQUU0QixxQ0FGNUI7QUFHRCxHQU5EO0FBUUFMLEtBQUcsOENBQUgsRUFBbUQsTUFBTTtBQUN2RCxVQUFNRSxPQUFPSSxNQUFNQyxHQUFOLEVBQWI7QUFDQU4sV0FBTyxNQUFNO0FBQ1hWLFlBQU1XLElBQU4sQ0FBVyxPQUFYLEVBQW9CQSxJQUFwQixFQUEwQjtBQUFFb0IsaUJBQVM7QUFDbkMsMkJBQWlCO0FBRGtCO0FBQVgsT0FBMUI7QUFHRCxLQUpELEVBSUduQixFQUpILENBSU1FLEtBSk4seUJBSTRCLHNDQUo1QjtBQUtELEdBUEQ7QUFTQUwsS0FBRywyQ0FBSCxFQUFnRCxNQUFNO0FBQ3BELFVBQU1FLE9BQU9JLE1BQU1DLEdBQU4sRUFBYjtBQUNBTCxTQUFLbUIsUUFBTCxHQUFnQixDQUFDLGVBQUQsRUFBa0IsY0FBbEIsQ0FBaEI7QUFDQXBCLFdBQU8sTUFBTTtBQUNYVixZQUFNVyxJQUFOLENBQVcsT0FBWCxFQUFvQkEsSUFBcEIsRUFBMEI7QUFBRW9CLGlCQUFTO0FBQ25DLDJCQUFpQixPQURrQjtBQUVuQywwQkFBZ0I7QUFGbUI7QUFBWCxPQUExQjtBQUlELEtBTEQsRUFLR25CLEVBTEgsQ0FLTW9CLEdBTE4sQ0FLVWxCLEtBTFY7QUFNRCxHQVREO0FBVUQsQ0F6R0QiLCJmaWxlIjoiaG9vay50ZXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXRsYXMgfSBmcm9tICcuLidcbmltcG9ydCBIb29rIGZyb20gJ0BhdGxhcy5qcy9ob29rJ1xuaW1wb3J0IHsgRnJhbWV3b3JrRXJyb3IgfSBmcm9tICdAYXRsYXMuanMvZXJyb3JzJ1xuXG5jbGFzcyBEdW1teUhvb2sgZXh0ZW5kcyBIb29rIHt9XG5cbmRlc2NyaWJlKCdBdGxhczo6aG9vaygpJywgKCkgPT4ge1xuICBsZXQgYXRsYXNcbiAgbGV0IG9wdGlvbnNcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgcm9vdDogX19kaXJuYW1lLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIGhvb2tzOiB7XG4gICAgICAgICAgZHVtbXk6IHtcbiAgICAgICAgICAgIHRlc3Q6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuICAgIGF0bGFzID0gbmV3IEF0bGFzKG9wdGlvbnMpXG4gIH0pXG5cbiAgaXQoJ3JldHVybnMgdGhpcycsICgpID0+IHtcbiAgICBleHBlY3QoYXRsYXMuaG9vaygnZHVtbXknLCBEdW1teUhvb2spKS50by5lcXVhbChhdGxhcylcbiAgfSlcblxuICBpdCgndGhyb3dzIHdoZW4gdGhlIGFsaWFzIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBieSBhbm90aGVyIGhvb2snLCAoKSA9PiB7XG4gICAgYXRsYXMuaG9vaygnZHVtbXknLCBEdW1teUhvb2spXG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLmhvb2soJ2R1bW15JywgRHVtbXlIb29rKSkudG8udGhyb3coRnJhbWV3b3JrRXJyb3IpXG4gIH0pXG5cbiAgaXQoJ3Rocm93cyB3aGVuIHRoZSBob29rIGlzIG5vdCBhIGNsYXNzL2Z1bmN0aW9uJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBhdGxhcy5ob29rKCdkdW1teScsIHt9KSkudG8udGhyb3coRnJhbWV3b3JrRXJyb3IpXG4gIH0pXG5cbiAgaXQoJ3Byb3ZpZGVzIHRoZSBhdGxhcyBvbiBob29rIGNvbnN0cnVjdG9yIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgIGNvbnN0IGhvb2sgPSBzaW5vbi5zcHkoKVxuICAgIGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaylcbiAgICBjb25zdCBhcmdzID0gaG9vay5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzKS50by5oYXZlLnByb3BlcnR5KCdhdGxhcycpXG4gICAgZXhwZWN0KGFyZ3MuYXRsYXMpLnRvLmVxdWFsKGF0bGFzKVxuICB9KVxuXG4gIGl0KCdwcm92aWRlcyBhIGxvZ2dlciBpbnN0YW5jZSBvbiBob29rIGNvbnN0cnVjdG9yIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgIGNvbnN0IGhvb2sgPSBzaW5vbi5zcHkoKVxuICAgIGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaylcbiAgICBjb25zdCBhcmdzID0gaG9vay5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzKS50by5oYXZlLnByb3BlcnR5KCdsb2cnKVxuICAgIGV4cGVjdChhcmdzLmxvZykudG8uYmUuYW4oJ29iamVjdCcpXG4gICAgZXhwZWN0KGFyZ3MubG9nLmNoaW5kaW5ncykudG8ubWF0Y2goL1wiaG9va1wiOlwiZHVtbXlcIi8pXG4gIH0pXG5cbiAgaXQoJ3Byb3ZpZGVzIGNvbmZpZyBvYmplY3Qgb24gaG9vayBjb25zdHJ1Y3RvciBhcmd1bWVudCcsICgpID0+IHtcbiAgICBjb25zdCBob29rID0gc2lub24uc3B5KClcbiAgICBhdGxhcy5ob29rKCdkdW1teScsIGhvb2spXG4gICAgY29uc3QgYXJncyA9IGhvb2suZ2V0Q2FsbCgwKS5hcmdzWzBdXG5cbiAgICBleHBlY3QoYXJncykudG8uaGF2ZS5wcm9wZXJ0eSgnY29uZmlnJylcbiAgICBleHBlY3QoYXJncy5jb25maWcpLnRvLmJlLmFuKCdvYmplY3QnKVxuICAgIGV4cGVjdChhcmdzLmNvbmZpZykudG8uZXF1YWwob3B0aW9ucy5jb25maWcuaG9va3MuZHVtbXkpXG4gIH0pXG5cbiAgaXQoJ3Byb3ZpZGVzIHRoZSByZXNvbHZlIGZ1bmN0aW9uIG9uIGhvb2sgY29uc3RydWN0b3IgYXJndW1lbnQgYXMgYGNvbXBvbmVudGAnLCAoKSA9PiB7XG4gICAgY29uc3QgaG9vayA9IHNpbm9uLnNweSgpXG4gICAgYXRsYXMuaG9vaygnZHVtbXknLCBob29rKVxuICAgIGNvbnN0IGFyZ3MgPSBob29rLmdldENhbGwoMCkuYXJnc1swXVxuXG4gICAgZXhwZWN0KGFyZ3MpLnRvLmhhdmUucHJvcGVydHkoJ2NvbXBvbmVudCcpXG4gICAgZXhwZWN0KGFyZ3MuY29tcG9uZW50KS50by5iZS5hKCdmdW5jdGlvbicpXG4gIH0pXG5cbiAgaXQoJ2FwcGxpZXMgZGVmYXVsdHMgZGVmaW5lZCBvbiBob29rIG9uIHRvcCBvZiB1c2VyLXByb3ZpZGVkIGNvbmZpZycsICgpID0+IHtcbiAgICBjb25zdCBob29rID0gc2lub24uc3B5KClcbiAgICBob29rLmRlZmF1bHRzID0geyBkZWZhdWx0OiB0cnVlIH1cbiAgICBhdGxhcy5ob29rKCdkdW1teScsIGhvb2spXG4gICAgY29uc3QgYXJncyA9IGhvb2suZ2V0Q2FsbCgwKS5hcmdzWzBdXG5cbiAgICBleHBlY3QoYXJncy5jb25maWcpLnRvLmhhdmUucHJvcGVydHkoJ2RlZmF1bHQnLCB0cnVlKVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiBhbGlhc2VzIGRvIG5vdCBzYXRpc2Z5IHJlcXVpcmVtZW50cyBvZiB0aGUgY29tcG9uZW50JywgKCkgPT4ge1xuICAgIGNvbnN0IGhvb2sgPSBzaW5vbi5zcHkoKVxuICAgIGhvb2sucmVxdWlyZXMgPSBbJ3NlcnZpY2U6ZHVtbXknLCAnYWN0aW9uOmR1bW15J11cbiAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgYXRsYXMuaG9vaygnZHVtbXknLCBob29rKVxuICAgIH0pLnRvLnRocm93KEZyYW1ld29ya0Vycm9yLCAvTWlzc2luZyBhbGlhc2VzIGZvciBjb21wb25lbnQgZHVtbXkvKVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiBleHRyYW5lb3VzIGFsaWFzZXMgYXJlIHNwZWNpZmllZCcsICgpID0+IHtcbiAgICBjb25zdCBob29rID0gc2lub24uc3B5KClcbiAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgYXRsYXMuaG9vaygnZHVtbXknLCBob29rLCB7IGFsaWFzZXM6IHtcbiAgICAgICAgJ3NlcnZpY2U6ZHVtbXknOiAnZHVtbXknLFxuICAgICAgfSB9KVxuICAgIH0pLnRvLnRocm93KEZyYW1ld29ya0Vycm9yLCAvVW5uZWVkZWQgYWxpYXNlcyBmb3IgY29tcG9uZW50IGR1bW15LylcbiAgfSlcblxuICBpdCgnd29ya3Mgd2hlbiBhbGwgcmVxdWlyZW1lbnRzIGFyZSBzcGVjaWZpZWQnLCAoKSA9PiB7XG4gICAgY29uc3QgaG9vayA9IHNpbm9uLnNweSgpXG4gICAgaG9vay5yZXF1aXJlcyA9IFsnc2VydmljZTpkdW1teScsICdhY3Rpb246ZHVtbXknXVxuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBhdGxhcy5ob29rKCdkdW1teScsIGhvb2ssIHsgYWxpYXNlczoge1xuICAgICAgICAnc2VydmljZTpkdW1teSc6ICdkdW1teScsXG4gICAgICAgICdhY3Rpb246ZHVtbXknOiAnZHVtbXknLFxuICAgICAgfSB9KVxuICAgIH0pLnRvLm5vdC50aHJvdygpXG4gIH0pXG59KVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImhvb2sudGVzdC5tanMiXSwibmFtZXMiOlsiRHVtbXlIb29rIiwiSG9vayIsIm9ic2VydmVzIiwiZGVzY3JpYmUiLCJhdGxhcyIsIm9wdGlvbnMiLCJiZWZvcmVFYWNoIiwicm9vdCIsIl9fZGlybmFtZSIsImNvbmZpZyIsImhvb2tzIiwiZHVtbXkiLCJ0ZXN0IiwiQXRsYXMiLCJpdCIsImV4cGVjdCIsImhvb2siLCJ0byIsImVxdWFsIiwidGhyb3ciLCJGcmFtZXdvcmtFcnJvciIsInNpbm9uIiwic3B5IiwiYXJncyIsImdldENhbGwiLCJoYXZlIiwicHJvcGVydHkiLCJsb2ciLCJiZSIsImFuIiwiY2hpbmRpbmdzIiwibWF0Y2giLCJjb21wb25lbnQiLCJhIiwiZGVmYXVsdHMiLCJkZWZhdWx0IiwicmVxdWlyZXMiLCJhbGlhc2VzIiwibm90IiwiRHVtbXkiLCJsb2wiLCJ0eXBlIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwiVmFsaWRhdGlvbkVycm9yIl0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQUNBOzs7O0FBS0EsTUFBTUEsU0FBTixTQUF3QkMsYUFBeEIsQ0FBNkI7O0FBQXZCRCxTLENBQ0dFLFEsR0FBVyxPO0FBR3BCQyxTQUFTLGVBQVQsRUFBMEIsTUFBTTtBQUM5QixNQUFJQyxLQUFKO0FBQ0EsTUFBSUMsT0FBSjtBQUVBQyxhQUFXLE1BQU07QUFDZkQsY0FBVTtBQUNSRSxZQUFNQyxTQURFO0FBRVJDLGNBQVE7QUFDTkMsZUFBTztBQUNMQyxpQkFBTztBQUNMQyxrQkFBTTtBQUREO0FBREY7QUFERDtBQUZBLEtBQVY7QUFVQVIsWUFBUSxJQUFJUyxPQUFKLENBQVVSLE9BQVYsQ0FBUjtBQUNELEdBWkQ7QUFjQVMsS0FBRyxjQUFILEVBQW1CLE1BQU07QUFDdkJDLFdBQU9YLE1BQU1ZLElBQU4sQ0FBVyxPQUFYLEVBQW9CaEIsU0FBcEIsQ0FBUCxFQUF1Q2lCLEVBQXZDLENBQTBDQyxLQUExQyxDQUFnRGQsS0FBaEQ7QUFDRCxHQUZEO0FBSUFVLEtBQUcsNkRBQUgsRUFBa0UsTUFBTTtBQUN0RVYsVUFBTVksSUFBTixDQUFXLE9BQVgsRUFBb0JoQixTQUFwQjtBQUNBZSxXQUFPLE1BQU1YLE1BQU1ZLElBQU4sQ0FBVyxPQUFYLEVBQW9CaEIsU0FBcEIsQ0FBYixFQUE2Q2lCLEVBQTdDLENBQWdERSxLQUFoRCxDQUFzREMsc0JBQXREO0FBQ0QsR0FIRDtBQUtBTixLQUFHLDhDQUFILEVBQW1ELE1BQU07QUFDdkRDLFdBQU8sTUFBTVgsTUFBTVksSUFBTixDQUFXLE9BQVgsRUFBb0IsRUFBcEIsQ0FBYixFQUFzQ0MsRUFBdEMsQ0FBeUNFLEtBQXpDLENBQStDQyxzQkFBL0M7QUFDRCxHQUZEO0FBSUFOLEtBQUcsaURBQUgsRUFBc0QsTUFBTTtBQUMxRCxVQUFNRSxPQUFPSyxNQUFNQyxHQUFOLEVBQWI7QUFDQU4sU0FBS1AsTUFBTCxHQUFjLEVBQWQ7QUFDQUwsVUFBTVksSUFBTixDQUFXLE9BQVgsRUFBb0JBLElBQXBCO0FBQ0EsVUFBTU8sT0FBT1AsS0FBS1EsT0FBTCxDQUFhLENBQWIsRUFBZ0JELElBQWhCLENBQXFCLENBQXJCLENBQWI7QUFFQVIsV0FBT1EsSUFBUCxFQUFhTixFQUFiLENBQWdCUSxJQUFoQixDQUFxQkMsUUFBckIsQ0FBOEIsT0FBOUI7QUFDQVgsV0FBT1EsS0FBS25CLEtBQVosRUFBbUJhLEVBQW5CLENBQXNCQyxLQUF0QixDQUE0QmQsS0FBNUI7QUFDRCxHQVJEO0FBVUFVLEtBQUcseURBQUgsRUFBOEQsTUFBTTtBQUNsRSxVQUFNRSxPQUFPSyxNQUFNQyxHQUFOLEVBQWI7QUFDQU4sU0FBS1AsTUFBTCxHQUFjLEVBQWQ7QUFDQUwsVUFBTVksSUFBTixDQUFXLE9BQVgsRUFBb0JBLElBQXBCO0FBQ0EsVUFBTU8sT0FBT1AsS0FBS1EsT0FBTCxDQUFhLENBQWIsRUFBZ0JELElBQWhCLENBQXFCLENBQXJCLENBQWI7QUFFQVIsV0FBT1EsSUFBUCxFQUFhTixFQUFiLENBQWdCUSxJQUFoQixDQUFxQkMsUUFBckIsQ0FBOEIsS0FBOUI7QUFDQVgsV0FBT1EsS0FBS0ksR0FBWixFQUFpQlYsRUFBakIsQ0FBb0JXLEVBQXBCLENBQXVCQyxFQUF2QixDQUEwQixRQUExQjtBQUNBZCxXQUFPUSxLQUFLSSxHQUFMLENBQVNHLFNBQWhCLEVBQTJCYixFQUEzQixDQUE4QmMsS0FBOUIsQ0FBb0MsZ0JBQXBDO0FBQ0QsR0FURDtBQVdBakIsS0FBRyxxREFBSCxFQUEwRCxNQUFNO0FBQzlELFVBQU1FLE9BQU9LLE1BQU1DLEdBQU4sRUFBYjtBQUNBTixTQUFLUCxNQUFMLEdBQWMsRUFBZDtBQUNBTCxVQUFNWSxJQUFOLENBQVcsT0FBWCxFQUFvQkEsSUFBcEI7QUFDQSxVQUFNTyxPQUFPUCxLQUFLUSxPQUFMLENBQWEsQ0FBYixFQUFnQkQsSUFBaEIsQ0FBcUIsQ0FBckIsQ0FBYjtBQUVBUixXQUFPUSxJQUFQLEVBQWFOLEVBQWIsQ0FBZ0JRLElBQWhCLENBQXFCQyxRQUFyQixDQUE4QixRQUE5QjtBQUNBWCxXQUFPUSxLQUFLZCxNQUFaLEVBQW9CUSxFQUFwQixDQUF1QlcsRUFBdkIsQ0FBMEJDLEVBQTFCLENBQTZCLFFBQTdCO0FBQ0FkLFdBQU9RLEtBQUtkLE1BQVosRUFBb0JRLEVBQXBCLENBQXVCQyxLQUF2QixDQUE2QmIsUUFBUUksTUFBUixDQUFlQyxLQUFmLENBQXFCQyxLQUFsRDtBQUNELEdBVEQ7QUFXQUcsS0FBRywyRUFBSCxFQUFnRixNQUFNO0FBQ3BGLFVBQU1FLE9BQU9LLE1BQU1DLEdBQU4sRUFBYjtBQUNBTixTQUFLUCxNQUFMLEdBQWMsRUFBZDtBQUNBTCxVQUFNWSxJQUFOLENBQVcsT0FBWCxFQUFvQkEsSUFBcEI7QUFDQSxVQUFNTyxPQUFPUCxLQUFLUSxPQUFMLENBQWEsQ0FBYixFQUFnQkQsSUFBaEIsQ0FBcUIsQ0FBckIsQ0FBYjtBQUVBUixXQUFPUSxJQUFQLEVBQWFOLEVBQWIsQ0FBZ0JRLElBQWhCLENBQXFCQyxRQUFyQixDQUE4QixXQUE5QjtBQUNBWCxXQUFPUSxLQUFLUyxTQUFaLEVBQXVCZixFQUF2QixDQUEwQlcsRUFBMUIsQ0FBNkJLLENBQTdCLENBQStCLFVBQS9CO0FBQ0QsR0FSRDtBQVVBbkIsS0FBRyxpRUFBSCxFQUFzRSxNQUFNO0FBQzFFLFVBQU1FLE9BQU9LLE1BQU1DLEdBQU4sRUFBYjtBQUNBTixTQUFLUCxNQUFMLEdBQWMsRUFBZDtBQUNBTyxTQUFLa0IsUUFBTCxHQUFnQjtBQUFFQyxlQUFTO0FBQVgsS0FBaEI7QUFDQS9CLFVBQU1ZLElBQU4sQ0FBVyxPQUFYLEVBQW9CQSxJQUFwQjtBQUNBLFVBQU1PLE9BQU9QLEtBQUtRLE9BQUwsQ0FBYSxDQUFiLEVBQWdCRCxJQUFoQixDQUFxQixDQUFyQixDQUFiO0FBRUFSLFdBQU9RLEtBQUtkLE1BQVosRUFBb0JRLEVBQXBCLENBQXVCUSxJQUF2QixDQUE0QkMsUUFBNUIsQ0FBcUMsU0FBckMsRUFBZ0QsSUFBaEQ7QUFDRCxHQVJEO0FBVUFaLEtBQUcsa0VBQUgsRUFBdUUsTUFBTTtBQUMzRSxVQUFNRSxPQUFPSyxNQUFNQyxHQUFOLEVBQWI7QUFDQU4sU0FBS1AsTUFBTCxHQUFjLEVBQWQ7QUFDQU8sU0FBS29CLFFBQUwsR0FBZ0IsQ0FBQyxlQUFELEVBQWtCLGNBQWxCLENBQWhCO0FBQ0FyQixXQUFPLE1BQU07QUFDWFgsWUFBTVksSUFBTixDQUFXLE9BQVgsRUFBb0JBLElBQXBCO0FBQ0QsS0FGRCxFQUVHQyxFQUZILENBRU1FLEtBRk4sQ0FFWUMsc0JBRlosRUFFNEIscUNBRjVCO0FBR0QsR0FQRDtBQVNBTixLQUFHLDhDQUFILEVBQW1ELE1BQU07QUFDdkQsVUFBTUUsT0FBT0ssTUFBTUMsR0FBTixFQUFiO0FBQ0FOLFNBQUtQLE1BQUwsR0FBYyxFQUFkO0FBQ0FNLFdBQU8sTUFBTTtBQUNYWCxZQUFNWSxJQUFOLENBQVcsT0FBWCxFQUFvQkEsSUFBcEIsRUFBMEI7QUFBRXFCLGlCQUFTO0FBQ25DLDJCQUFpQjtBQURrQjtBQUFYLE9BQTFCO0FBR0QsS0FKRCxFQUlHcEIsRUFKSCxDQUlNRSxLQUpOLENBSVlDLHNCQUpaLEVBSTRCLHNDQUo1QjtBQUtELEdBUkQ7QUFVQU4sS0FBRywyQ0FBSCxFQUFnRCxNQUFNO0FBQ3BELFVBQU1FLE9BQU9LLE1BQU1DLEdBQU4sRUFBYjtBQUNBTixTQUFLUCxNQUFMLEdBQWMsRUFBZDtBQUNBTyxTQUFLb0IsUUFBTCxHQUFnQixDQUFDLGVBQUQsRUFBa0IsY0FBbEIsQ0FBaEI7QUFDQXJCLFdBQU8sTUFBTTtBQUNYWCxZQUFNWSxJQUFOLENBQVcsT0FBWCxFQUFvQkEsSUFBcEIsRUFBMEI7QUFBRXFCLGlCQUFTO0FBQ25DLDJCQUFpQixPQURrQjtBQUVuQywwQkFBZ0I7QUFGbUI7QUFBWCxPQUExQjtBQUlELEtBTEQsRUFLR3BCLEVBTEgsQ0FLTXFCLEdBTE4sQ0FLVW5CLEtBTFY7QUFNRCxHQVZEO0FBWUFMLEtBQUcsNERBQUgsRUFBaUUsTUFBTTtBQUNyRSxVQUFNeUIsS0FBTixTQUFvQnRDLGFBQXBCLENBQXlCOztBQUFuQnNDLFNBRCtELENBRTVEckMsUUFGNEQsR0FFakQsZUFGaUQ7QUFLckVhLFdBQU8sTUFBTTtBQUNYWCxZQUFNWSxJQUFOLENBQVcsT0FBWCxFQUFvQnVCLEtBQXBCLEVBQTJCO0FBQUVGLGlCQUFTO0FBQ3BDLDJCQUFpQjtBQURtQjtBQUFYLE9BQTNCO0FBR0QsS0FKRCxFQUlHcEIsRUFKSCxDQUlNcUIsR0FKTixDQUlVbkIsS0FKVjtBQUtELEdBVkQ7QUFZQUwsS0FBRyxtRUFBSCxFQUF3RSxNQUFNO0FBQzVFLFVBQU15QixLQUFOLFNBQW9CdEMsYUFBcEIsQ0FBeUI7O0FBQW5Cc0MsU0FEc0UsQ0FFbkVyQyxRQUZtRSxHQUV4RCxlQUZ3RDtBQUs1RWEsV0FBTyxNQUFNO0FBQ1hYLFlBQU1ZLElBQU4sQ0FBVyxPQUFYLEVBQW9CdUIsS0FBcEI7QUFDRCxLQUZELEVBRUd0QixFQUZILENBRU1FLEtBRk4sQ0FFWUMsc0JBRlosRUFFNEIscUNBRjVCO0FBR0QsR0FSRDtBQVVBTixLQUFHLHVEQUFILEVBQTRELE1BQU07QUFDaEVULFlBQVFJLE1BQVIsQ0FBZUMsS0FBZixDQUFxQkMsS0FBckIsR0FBNkI7QUFBRTZCLFdBQUs7QUFBUCxLQUE3QjtBQUNBcEMsWUFBUSxJQUFJUyxPQUFKLENBQVVSLE9BQVYsQ0FBUjtBQUVBLFVBQU1XLE9BQU9LLE1BQU1DLEdBQU4sRUFBYjtBQUNBTixTQUFLUCxNQUFMLEdBQWM7QUFDWmdDLFlBQU0sUUFETTtBQUVaQyw0QkFBc0IsS0FGVjtBQUdaQyxrQkFBWTtBQUNWL0IsY0FBTTtBQUFFNkIsZ0JBQU07QUFBUjtBQURJO0FBSEEsS0FBZDtBQVFBMUIsV0FBTyxNQUFNWCxNQUFNWSxJQUFOLENBQVcsT0FBWCxFQUFvQkEsSUFBcEIsQ0FBYixFQUF3Q0MsRUFBeEMsQ0FBMkNFLEtBQTNDLENBQWlEeUIsdUJBQWpEO0FBQ0QsR0FkRDtBQWdCQTlCLEtBQUcsdURBQUgsRUFBNEQsTUFBTTtBQUNoRSxVQUFNRSxPQUFPSyxNQUFNQyxHQUFOLEVBQWI7QUFDQU4sU0FBS1AsTUFBTCxHQUFjO0FBQ1pnQyxZQUFNLFFBRE07QUFFWkMsNEJBQXNCLEtBRlY7QUFHWkMsa0JBQVk7QUFDVi9CLGNBQU07QUFBRTZCLGdCQUFNO0FBQVI7QUFESTtBQUhBLEtBQWQ7QUFRQTFCLFdBQU8sTUFBTVgsTUFBTVksSUFBTixDQUFXLE9BQVgsRUFBb0JBLElBQXBCLENBQWIsRUFBd0NzQixHQUF4QyxDQUE0Q3JCLEVBQTVDLENBQStDRSxLQUEvQyxDQUFxRHlCLHVCQUFyRDtBQUNELEdBWEQ7QUFhQTlCLEtBQUcsa0ZBQUgsRUFBdUYsTUFBTTtBQUMzRixVQUFNeUIsS0FBTixTQUFvQnRDLGFBQXBCLENBQXlCOztBQUFuQnNDLFNBRHFGLENBRWxGckMsUUFGa0YsR0FFdkUsT0FGdUU7QUFLM0ZhLFdBQU8sTUFBTTtBQUNYWCxZQUFNWSxJQUFOLENBQVcsT0FBWCxFQUFvQnVCLEtBQXBCO0FBQ0QsS0FGRCxFQUVHdEIsRUFGSCxDQUVNcUIsR0FGTixDQUVVbkIsS0FGVjtBQUdELEdBUkQ7QUFTRCxDQTlLRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0bGFzIH0gZnJvbSAnLi4nXG5pbXBvcnQgSG9vayBmcm9tICdAYXRsYXMuanMvaG9vaydcbmltcG9ydCB7XG4gIEZyYW1ld29ya0Vycm9yLFxuICBWYWxpZGF0aW9uRXJyb3IsXG59IGZyb20gJ0BhdGxhcy5qcy9lcnJvcnMnXG5cbmNsYXNzIER1bW15SG9vayBleHRlbmRzIEhvb2sge1xuICBzdGF0aWMgb2JzZXJ2ZXMgPSAnYXRsYXMnXG59XG5cbmRlc2NyaWJlKCdBdGxhczo6aG9vaygpJywgKCkgPT4ge1xuICBsZXQgYXRsYXNcbiAgbGV0IG9wdGlvbnNcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgcm9vdDogX19kaXJuYW1lLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIGhvb2tzOiB7XG4gICAgICAgICAgZHVtbXk6IHtcbiAgICAgICAgICAgIHRlc3Q6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuICAgIGF0bGFzID0gbmV3IEF0bGFzKG9wdGlvbnMpXG4gIH0pXG5cbiAgaXQoJ3JldHVybnMgdGhpcycsICgpID0+IHtcbiAgICBleHBlY3QoYXRsYXMuaG9vaygnZHVtbXknLCBEdW1teUhvb2spKS50by5lcXVhbChhdGxhcylcbiAgfSlcblxuICBpdCgndGhyb3dzIHdoZW4gdGhlIGFsaWFzIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBieSBhbm90aGVyIGhvb2snLCAoKSA9PiB7XG4gICAgYXRsYXMuaG9vaygnZHVtbXknLCBEdW1teUhvb2spXG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLmhvb2soJ2R1bW15JywgRHVtbXlIb29rKSkudG8udGhyb3coRnJhbWV3b3JrRXJyb3IpXG4gIH0pXG5cbiAgaXQoJ3Rocm93cyB3aGVuIHRoZSBob29rIGlzIG5vdCBhIGNsYXNzL2Z1bmN0aW9uJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBhdGxhcy5ob29rKCdkdW1teScsIHt9KSkudG8udGhyb3coRnJhbWV3b3JrRXJyb3IpXG4gIH0pXG5cbiAgaXQoJ3Byb3ZpZGVzIHRoZSBhdGxhcyBvbiBob29rIGNvbnN0cnVjdG9yIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgIGNvbnN0IGhvb2sgPSBzaW5vbi5zcHkoKVxuICAgIGhvb2suY29uZmlnID0ge31cbiAgICBhdGxhcy5ob29rKCdkdW1teScsIGhvb2spXG4gICAgY29uc3QgYXJncyA9IGhvb2suZ2V0Q2FsbCgwKS5hcmdzWzBdXG5cbiAgICBleHBlY3QoYXJncykudG8uaGF2ZS5wcm9wZXJ0eSgnYXRsYXMnKVxuICAgIGV4cGVjdChhcmdzLmF0bGFzKS50by5lcXVhbChhdGxhcylcbiAgfSlcblxuICBpdCgncHJvdmlkZXMgYSBsb2dnZXIgaW5zdGFuY2Ugb24gaG9vayBjb25zdHJ1Y3RvciBhcmd1bWVudCcsICgpID0+IHtcbiAgICBjb25zdCBob29rID0gc2lub24uc3B5KClcbiAgICBob29rLmNvbmZpZyA9IHt9XG4gICAgYXRsYXMuaG9vaygnZHVtbXknLCBob29rKVxuICAgIGNvbnN0IGFyZ3MgPSBob29rLmdldENhbGwoMCkuYXJnc1swXVxuXG4gICAgZXhwZWN0KGFyZ3MpLnRvLmhhdmUucHJvcGVydHkoJ2xvZycpXG4gICAgZXhwZWN0KGFyZ3MubG9nKS50by5iZS5hbignb2JqZWN0JylcbiAgICBleHBlY3QoYXJncy5sb2cuY2hpbmRpbmdzKS50by5tYXRjaCgvXCJob29rXCI6XCJkdW1teVwiLylcbiAgfSlcblxuICBpdCgncHJvdmlkZXMgY29uZmlnIG9iamVjdCBvbiBob29rIGNvbnN0cnVjdG9yIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgIGNvbnN0IGhvb2sgPSBzaW5vbi5zcHkoKVxuICAgIGhvb2suY29uZmlnID0ge31cbiAgICBhdGxhcy5ob29rKCdkdW1teScsIGhvb2spXG4gICAgY29uc3QgYXJncyA9IGhvb2suZ2V0Q2FsbCgwKS5hcmdzWzBdXG5cbiAgICBleHBlY3QoYXJncykudG8uaGF2ZS5wcm9wZXJ0eSgnY29uZmlnJylcbiAgICBleHBlY3QoYXJncy5jb25maWcpLnRvLmJlLmFuKCdvYmplY3QnKVxuICAgIGV4cGVjdChhcmdzLmNvbmZpZykudG8uZXF1YWwob3B0aW9ucy5jb25maWcuaG9va3MuZHVtbXkpXG4gIH0pXG5cbiAgaXQoJ3Byb3ZpZGVzIHRoZSByZXNvbHZlIGZ1bmN0aW9uIG9uIGhvb2sgY29uc3RydWN0b3IgYXJndW1lbnQgYXMgYGNvbXBvbmVudGAnLCAoKSA9PiB7XG4gICAgY29uc3QgaG9vayA9IHNpbm9uLnNweSgpXG4gICAgaG9vay5jb25maWcgPSB7fVxuICAgIGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaylcbiAgICBjb25zdCBhcmdzID0gaG9vay5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzKS50by5oYXZlLnByb3BlcnR5KCdjb21wb25lbnQnKVxuICAgIGV4cGVjdChhcmdzLmNvbXBvbmVudCkudG8uYmUuYSgnZnVuY3Rpb24nKVxuICB9KVxuXG4gIGl0KCdhcHBsaWVzIGRlZmF1bHRzIGRlZmluZWQgb24gaG9vayBvbiB0b3Agb2YgdXNlci1wcm92aWRlZCBjb25maWcnLCAoKSA9PiB7XG4gICAgY29uc3QgaG9vayA9IHNpbm9uLnNweSgpXG4gICAgaG9vay5jb25maWcgPSB7fVxuICAgIGhvb2suZGVmYXVsdHMgPSB7IGRlZmF1bHQ6IHRydWUgfVxuICAgIGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaylcbiAgICBjb25zdCBhcmdzID0gaG9vay5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzLmNvbmZpZykudG8uaGF2ZS5wcm9wZXJ0eSgnZGVmYXVsdCcsIHRydWUpXG4gIH0pXG5cbiAgaXQoJ3Rocm93cyB3aGVuIGFsaWFzZXMgZG8gbm90IHNhdGlzZnkgcmVxdWlyZW1lbnRzIG9mIHRoZSBjb21wb25lbnQnLCAoKSA9PiB7XG4gICAgY29uc3QgaG9vayA9IHNpbm9uLnNweSgpXG4gICAgaG9vay5jb25maWcgPSB7fVxuICAgIGhvb2sucmVxdWlyZXMgPSBbJ3NlcnZpY2U6ZHVtbXknLCAnYWN0aW9uOmR1bW15J11cbiAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgYXRsYXMuaG9vaygnZHVtbXknLCBob29rKVxuICAgIH0pLnRvLnRocm93KEZyYW1ld29ya0Vycm9yLCAvTWlzc2luZyBhbGlhc2VzIGZvciBjb21wb25lbnQgZHVtbXkvKVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiBleHRyYW5lb3VzIGFsaWFzZXMgYXJlIHNwZWNpZmllZCcsICgpID0+IHtcbiAgICBjb25zdCBob29rID0gc2lub24uc3B5KClcbiAgICBob29rLmNvbmZpZyA9IHt9XG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaywgeyBhbGlhc2VzOiB7XG4gICAgICAgICdzZXJ2aWNlOmR1bW15JzogJ2R1bW15JyxcbiAgICAgIH0gfSlcbiAgICB9KS50by50aHJvdyhGcmFtZXdvcmtFcnJvciwgL1VubmVlZGVkIGFsaWFzZXMgZm9yIGNvbXBvbmVudCBkdW1teS8pXG4gIH0pXG5cbiAgaXQoJ3dvcmtzIHdoZW4gYWxsIHJlcXVpcmVtZW50cyBhcmUgc3BlY2lmaWVkJywgKCkgPT4ge1xuICAgIGNvbnN0IGhvb2sgPSBzaW5vbi5zcHkoKVxuICAgIGhvb2suY29uZmlnID0ge31cbiAgICBob29rLnJlcXVpcmVzID0gWydzZXJ2aWNlOmR1bW15JywgJ2FjdGlvbjpkdW1teSddXG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaywgeyBhbGlhc2VzOiB7XG4gICAgICAgICdzZXJ2aWNlOmR1bW15JzogJ2R1bW15JyxcbiAgICAgICAgJ2FjdGlvbjpkdW1teSc6ICdkdW1teScsXG4gICAgICB9IH0pXG4gICAgfSkudG8ubm90LnRocm93KClcbiAgfSlcblxuICBpdCgnZG9lcyBub3QgdGhyb3cgd2hlbiBhbGlhc2VzIGluY2x1ZGUgdGhlIG9ic2VydmVkIGNvbXBvbmVudCcsICgpID0+IHtcbiAgICBjbGFzcyBEdW1teSBleHRlbmRzIEhvb2sge1xuICAgICAgc3RhdGljIG9ic2VydmVzID0gJ3NlcnZpY2U6ZHVtbXknXG4gICAgfVxuXG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIGF0bGFzLmhvb2soJ2R1bW15JywgRHVtbXksIHsgYWxpYXNlczoge1xuICAgICAgICAnc2VydmljZTpkdW1teSc6ICdkdW1teScsXG4gICAgICB9IH0pXG4gICAgfSkudG8ubm90LnRocm93KClcbiAgfSlcblxuICBpdCgndGhyb3dzIHdoZW4gdGhlIG9ic2VydmVkIGNvbXBvbmVudCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGFsaWFzZXMnLCAoKSA9PiB7XG4gICAgY2xhc3MgRHVtbXkgZXh0ZW5kcyBIb29rIHtcbiAgICAgIHN0YXRpYyBvYnNlcnZlcyA9ICdzZXJ2aWNlOmR1bW15J1xuICAgIH1cblxuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBhdGxhcy5ob29rKCdkdW1teScsIER1bW15KVxuICAgIH0pLnRvLnRocm93KEZyYW1ld29ya0Vycm9yLCAvTWlzc2luZyBhbGlhc2VzIGZvciBjb21wb25lbnQgZHVtbXkvKVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiB1c2VyIGNvbmZpZyBmYWlscyBjb21wb25lbnQgY29uZmlnIHNjaGVtYScsICgpID0+IHtcbiAgICBvcHRpb25zLmNvbmZpZy5ob29rcy5kdW1teSA9IHsgbG9sOiB0cnVlIH1cbiAgICBhdGxhcyA9IG5ldyBBdGxhcyhvcHRpb25zKVxuXG4gICAgY29uc3QgaG9vayA9IHNpbm9uLnNweSgpXG4gICAgaG9vay5jb25maWcgPSB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdGVzdDogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaykpLnRvLnRocm93KFZhbGlkYXRpb25FcnJvcilcbiAgfSlcblxuICBpdCgnd29ya3Mgd2hlbiB1c2VyIGNvbmZpZyBwYXNzZXMgY29tcG9uZW50IGNvbmZpZyBzY2hlbWEnLCAoKSA9PiB7XG4gICAgY29uc3QgaG9vayA9IHNpbm9uLnNweSgpXG4gICAgaG9vay5jb25maWcgPSB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdGVzdDogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaykpLm5vdC50by50aHJvdyhWYWxpZGF0aW9uRXJyb3IpXG4gIH0pXG5cbiAgaXQoJ2RvZXMgbm90IHRocm93IGlmIGEgaG9vayBvYnNlcnZlcyB0aGUgYXRsYXMgaW5zdGFuY2UgYW5kIGF0bGFzIGlzIG5vdCBpbiBhbGlhc2VzJywgKCkgPT4ge1xuICAgIGNsYXNzIER1bW15IGV4dGVuZHMgSG9vayB7XG4gICAgICBzdGF0aWMgb2JzZXJ2ZXMgPSAnYXRsYXMnXG4gICAgfVxuXG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIGF0bGFzLmhvb2soJ2R1bW15JywgRHVtbXkpXG4gICAgfSkudG8ubm90LnRocm93KClcbiAgfSlcbn0pXG4iXX0=

@@ -15,2 +15,2 @@ "use strict";

exports.default = DummyAction;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImR1bW15Lm1qcyJdLCJuYW1lcyI6WyJEdW1teUFjdGlvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOzs7O0FBRWUsTUFBTUEsV0FBTix5QkFBaUMiLCJmaWxlIjoiZHVtbXkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQWN0aW9uIGZyb20gJ0BhdGxhcy5qcy9hY3Rpb24nXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER1bW15QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHt9XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImR1bW15Lm1qcyJdLCJuYW1lcyI6WyJEdW1teUFjdGlvbiIsIkFjdGlvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOzs7O0FBRWUsTUFBTUEsV0FBTixTQUEwQkMsZUFBMUIsQ0FBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQWN0aW9uIGZyb20gJ0BhdGxhcy5qcy9hY3Rpb24nXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER1bW15QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHt9XG4iXX0=

@@ -16,2 +16,2 @@ "use strict";

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4Lm1qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkdW1teSBmcm9tICcuL2R1bW15J1xuXG5leHBvcnQge1xuICBkdW1teSxcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4Lm1qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkdW1teSBmcm9tICcuL2R1bW15J1xuXG5leHBvcnQge1xuICBkdW1teSxcbn1cbiJdfQ==

@@ -23,2 +23,2 @@ "use strict";

exports.services = services;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFsaWFzZXMubWpzIl0sIm5hbWVzIjpbImFjdGlvbnMiLCJkdW1teSIsImhvb2tzIiwic2VydmljZXMiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE1BQU1BLFVBQVU7QUFDZEMsU0FBTztBQUNMLHFCQUFpQjtBQURaO0FBRE8sQ0FBaEI7O0FBS0EsTUFBTUMsUUFBUTtBQUNaRCxTQUFPO0FBQ0wscUJBQWlCO0FBRFo7QUFESyxDQUFkOztBQUtBLE1BQU1FLFdBQVc7QUFDZkYsU0FBTztBQURRLENBQWpCIiwiZmlsZSI6ImFsaWFzZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBhY3Rpb25zID0ge1xuICBkdW1teToge1xuICAgICdzZXJ2aWNlOmR1bW15JzogJ2R1bW15JyxcbiAgfSxcbn1cbmNvbnN0IGhvb2tzID0ge1xuICBkdW1teToge1xuICAgICdzZXJ2aWNlOmR1bW15JzogJ2R1bW15JyxcbiAgfSxcbn1cbmNvbnN0IHNlcnZpY2VzID0ge1xuICBkdW1teToge30sXG59XG5cbmV4cG9ydCB7XG4gIGFjdGlvbnMsXG4gIGhvb2tzLFxuICBzZXJ2aWNlcyxcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFsaWFzZXMubWpzIl0sIm5hbWVzIjpbImFjdGlvbnMiLCJkdW1teSIsImhvb2tzIiwic2VydmljZXMiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE1BQU1BLFVBQVU7QUFDZEMsU0FBTztBQUNMLHFCQUFpQjtBQURaO0FBRE8sQ0FBaEI7O0FBS0EsTUFBTUMsUUFBUTtBQUNaRCxTQUFPO0FBQ0wscUJBQWlCO0FBRFo7QUFESyxDQUFkOztBQUtBLE1BQU1FLFdBQVc7QUFDZkYsU0FBTztBQURRLENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgYWN0aW9ucyA9IHtcbiAgZHVtbXk6IHtcbiAgICAnc2VydmljZTpkdW1teSc6ICdkdW1teScsXG4gIH0sXG59XG5jb25zdCBob29rcyA9IHtcbiAgZHVtbXk6IHtcbiAgICAnc2VydmljZTpkdW1teSc6ICdkdW1teScsXG4gIH0sXG59XG5jb25zdCBzZXJ2aWNlcyA9IHtcbiAgZHVtbXk6IHt9LFxufVxuXG5leHBvcnQge1xuICBhY3Rpb25zLFxuICBob29rcyxcbiAgc2VydmljZXMsXG59XG4iXX0=

@@ -29,2 +29,2 @@ "use strict";

exports.hooks = hooks;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QubWpzIl0sIm5hbWVzIjpbImF0bGFzIiwib3ZlcnJpZGUiLCJhY3Rpb25zIiwiZHVtbXkiLCJzZXJ2aWNlcyIsImhvb2tzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxNQUFNQSxRQUFRO0FBQUVDLFlBQVU7QUFBWixDQUFkOztBQUNBLE1BQU1DLFVBQVU7QUFBRUMsU0FBTztBQUFFRixjQUFVO0FBQVo7QUFBVCxDQUFoQjs7QUFDQSxNQUFNRyxXQUFXO0FBQUVELFNBQU87QUFBRUYsY0FBVTtBQUFaO0FBQVQsQ0FBakI7O0FBQ0EsTUFBTUksUUFBUTtBQUFFRixTQUFPO0FBQUVGLGNBQVU7QUFBWjtBQUFULENBQWQiLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGF0bGFzID0geyBvdmVycmlkZTogdHJ1ZSB9XG5jb25zdCBhY3Rpb25zID0geyBkdW1teTogeyBvdmVycmlkZTogdHJ1ZSB9IH1cbmNvbnN0IHNlcnZpY2VzID0geyBkdW1teTogeyBvdmVycmlkZTogdHJ1ZSB9IH1cbmNvbnN0IGhvb2tzID0geyBkdW1teTogeyBvdmVycmlkZTogdHJ1ZSB9IH1cblxuZXhwb3J0IHtcbiAgYXRsYXMsXG4gIGFjdGlvbnMsXG4gIHNlcnZpY2VzLFxuICBob29rcyxcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QubWpzIl0sIm5hbWVzIjpbImF0bGFzIiwib3ZlcnJpZGUiLCJhY3Rpb25zIiwiZHVtbXkiLCJzZXJ2aWNlcyIsImhvb2tzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxNQUFNQSxRQUFRO0FBQUVDLFlBQVU7QUFBWixDQUFkOztBQUNBLE1BQU1DLFVBQVU7QUFBRUMsU0FBTztBQUFFRixjQUFVO0FBQVo7QUFBVCxDQUFoQjs7QUFDQSxNQUFNRyxXQUFXO0FBQUVELFNBQU87QUFBRUYsY0FBVTtBQUFaO0FBQVQsQ0FBakI7O0FBQ0EsTUFBTUksUUFBUTtBQUFFRixTQUFPO0FBQUVGLGNBQVU7QUFBWjtBQUFULENBQWQiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBhdGxhcyA9IHsgb3ZlcnJpZGU6IHRydWUgfVxuY29uc3QgYWN0aW9ucyA9IHsgZHVtbXk6IHsgb3ZlcnJpZGU6IHRydWUgfSB9XG5jb25zdCBzZXJ2aWNlcyA9IHsgZHVtbXk6IHsgb3ZlcnJpZGU6IHRydWUgfSB9XG5jb25zdCBob29rcyA9IHsgZHVtbXk6IHsgb3ZlcnJpZGU6IHRydWUgfSB9XG5cbmV4cG9ydCB7XG4gIGF0bGFzLFxuICBhY3Rpb25zLFxuICBzZXJ2aWNlcyxcbiAgaG9va3MsXG59XG4iXX0=

@@ -29,2 +29,2 @@ "use strict";

exports.hooks = hooks;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4Lm1qcyJdLCJuYW1lcyI6WyJhdGxhcyIsInRlc3QiLCJhY3Rpb25zIiwiZHVtbXkiLCJzZXJ2aWNlcyIsImhvb2tzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxNQUFNQSxRQUFRO0FBQUVDLFFBQU07QUFBUixDQUFkOztBQUNBLE1BQU1DLFVBQVU7QUFBRUMsU0FBTztBQUFFRixVQUFNO0FBQVI7QUFBVCxDQUFoQjs7QUFDQSxNQUFNRyxXQUFXO0FBQUVELFNBQU87QUFBRUYsVUFBTTtBQUFSO0FBQVQsQ0FBakI7O0FBQ0EsTUFBTUksUUFBUTtBQUFFRixTQUFPO0FBQUVGLFVBQU07QUFBUjtBQUFULENBQWQiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBhdGxhcyA9IHsgdGVzdDogdHJ1ZSB9XG5jb25zdCBhY3Rpb25zID0geyBkdW1teTogeyB0ZXN0OiB0cnVlIH0gfVxuY29uc3Qgc2VydmljZXMgPSB7IGR1bW15OiB7IHRlc3Q6IHRydWUgfSB9XG5jb25zdCBob29rcyA9IHsgZHVtbXk6IHsgdGVzdDogdHJ1ZSB9IH1cblxuZXhwb3J0IHtcbiAgYXRsYXMsXG4gIGFjdGlvbnMsXG4gIHNlcnZpY2VzLFxuICBob29rcyxcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4Lm1qcyJdLCJuYW1lcyI6WyJhdGxhcyIsInRlc3QiLCJhY3Rpb25zIiwiZHVtbXkiLCJzZXJ2aWNlcyIsImhvb2tzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxNQUFNQSxRQUFRO0FBQUVDLFFBQU07QUFBUixDQUFkOztBQUNBLE1BQU1DLFVBQVU7QUFBRUMsU0FBTztBQUFFRixVQUFNO0FBQVI7QUFBVCxDQUFoQjs7QUFDQSxNQUFNRyxXQUFXO0FBQUVELFNBQU87QUFBRUYsVUFBTTtBQUFSO0FBQVQsQ0FBakI7O0FBQ0EsTUFBTUksUUFBUTtBQUFFRixTQUFPO0FBQUVGLFVBQU07QUFBUjtBQUFULENBQWQiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBhdGxhcyA9IHsgdGVzdDogdHJ1ZSB9XG5jb25zdCBhY3Rpb25zID0geyBkdW1teTogeyB0ZXN0OiB0cnVlIH0gfVxuY29uc3Qgc2VydmljZXMgPSB7IGR1bW15OiB7IHRlc3Q6IHRydWUgfSB9XG5jb25zdCBob29rcyA9IHsgZHVtbXk6IHsgdGVzdDogdHJ1ZSB9IH1cblxuZXhwb3J0IHtcbiAgYXRsYXMsXG4gIGFjdGlvbnMsXG4gIHNlcnZpY2VzLFxuICBob29rcyxcbn1cbiJdfQ==

@@ -15,2 +15,3 @@ "use strict";

exports.default = DummyHook;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImR1bW15Lm1qcyJdLCJuYW1lcyI6WyJEdW1teUhvb2siXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7OztBQUVlLE1BQU1BLFNBQU4sdUJBQTZCIiwiZmlsZSI6ImR1bW15LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEhvb2sgZnJvbSAnQGF0bGFzLmpzL2hvb2snXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER1bW15SG9vayBleHRlbmRzIEhvb2sge31cbiJdfQ==
DummyHook.observes = 'atlas';
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImR1bW15Lm1qcyJdLCJuYW1lcyI6WyJEdW1teUhvb2siLCJIb29rIiwib2JzZXJ2ZXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7OztBQUVlLE1BQU1BLFNBQU4sU0FBd0JDLGFBQXhCLENBQTZCOzs7QUFBdkJELFMsQ0FDWkUsUSxHQUFXLE8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSG9vayBmcm9tICdAYXRsYXMuanMvaG9vaydcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHVtbXlIb29rIGV4dGVuZHMgSG9vayB7XG4gIHN0YXRpYyBvYnNlcnZlcyA9ICdhdGxhcydcbn1cbiJdfQ==

@@ -16,2 +16,2 @@ "use strict";

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4Lm1qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkdW1teSBmcm9tICcuL2R1bW15J1xuXG5leHBvcnQge1xuICBkdW1teSxcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4Lm1qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkdW1teSBmcm9tICcuL2R1bW15J1xuXG5leHBvcnQge1xuICBkdW1teSxcbn1cbiJdfQ==

@@ -15,2 +15,2 @@ "use strict";

exports.default = DummyService;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImR1bW15Lm1qcyJdLCJuYW1lcyI6WyJEdW1teVNlcnZpY2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7OztBQUVlLE1BQU1BLFlBQU4sMEJBQW1DIiwiZmlsZSI6ImR1bW15LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFNlcnZpY2UgZnJvbSAnQGF0bGFzLmpzL3NlcnZpY2UnXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER1bW15U2VydmljZSBleHRlbmRzIFNlcnZpY2Uge31cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImR1bW15Lm1qcyJdLCJuYW1lcyI6WyJEdW1teVNlcnZpY2UiLCJTZXJ2aWNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7Ozs7QUFFZSxNQUFNQSxZQUFOLFNBQTJCQyxnQkFBM0IsQ0FBbUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU2VydmljZSBmcm9tICdAYXRsYXMuanMvc2VydmljZSdcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHVtbXlTZXJ2aWNlIGV4dGVuZHMgU2VydmljZSB7fVxuIl19

@@ -16,2 +16,2 @@ "use strict";

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4Lm1qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkdW1teSBmcm9tICcuL2R1bW15J1xuXG5leHBvcnQge1xuICBkdW1teSxcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4Lm1qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkdW1teSBmcm9tICcuL2R1bW15J1xuXG5leHBvcnQge1xuICBkdW1teSxcbn1cbiJdfQ==
"use strict";
throw new Error('Unto thy face!');
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndpbGwtdGhyb3cubWpzIl0sIm5hbWVzIjpbIkVycm9yIl0sIm1hcHBpbmdzIjoiOztBQUFBLE1BQU0sSUFBSUEsS0FBSixDQUFVLGdCQUFWLENBQU4iLCJmaWxlIjoid2lsbC10aHJvdy5qcyIsInNvdXJjZXNDb250ZW50IjpbInRocm93IG5ldyBFcnJvcignVW50byB0aHkgZmFjZSEnKVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndpbGwtdGhyb3cubWpzIl0sIm5hbWVzIjpbIkVycm9yIl0sIm1hcHBpbmdzIjoiOztBQUFBLE1BQU0sSUFBSUEsS0FBSixDQUFVLGdCQUFWLENBQU4iLCJzb3VyY2VzQ29udGVudCI6WyJ0aHJvdyBuZXcgRXJyb3IoJ1VudG8gdGh5IGZhY2UhJylcbiJdfQ==

@@ -5,15 +5,13 @@ "use strict";

var _ = require("../..");
var _errors = require("@atlas.js/errors");
var testservices = _interopRequireWildcard(require("./demoapp/services"));
var _ = require("../..");
var testactions = _interopRequireWildcard(require("./demoapp/actions"));
var testservices = _interopRequireDefault(require("./demoapp/services"));
var testhooks = _interopRequireWildcard(require("./demoapp/hooks"));
var testactions = _interopRequireDefault(require("./demoapp/actions"));
var testaliases = _interopRequireWildcard(require("./demoapp/aliases"));
var testhooks = _interopRequireDefault(require("./demoapp/hooks"));
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
var testaliases = _interopRequireDefault(require("./demoapp/aliases"));

@@ -135,2 +133,2 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluaXQudGVzdC5tanMiXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJiZWZvcmVFYWNoIiwic2FuZGJveCIsInN0dWIiLCJwcm90b3R5cGUiLCJyZXR1cm5zVGhpcyIsIml0IiwiZXhwZWN0IiwiaXRzZWxmIiwidG8iLCJyZXNwb25kVG8iLCJpbml0IiwiZW52IiwidGhyb3ciLCJub3QiLCJUeXBlRXJyb3IiLCJwcm90byIsInJvb3QiLCJyZXNvbHZlIiwiX19kaXJuYW1lIiwiYXRsYXMiLCJjb25maWciLCJob29rcyIsImFjdGlvbnMiLCJzZXJ2aWNlcyIsImFsaWFzZXMiLCJuYW1lIiwiQ29tcG9uZW50IiwiT2JqZWN0IiwiZW50cmllcyIsInRlc3RzZXJ2aWNlcyIsInRlc3RhbGlhc2VzIiwic2VydmljZSIsImhhdmUiLCJiZWVuIiwiY2FsbGVkV2l0aCIsInRlc3RhY3Rpb25zIiwiYWN0aW9uIiwidGVzdGhvb2tzIiwiaG9vayIsImFsbCIsImtleXMiLCJpbmNsdWRlIiwiZXFsIiwiZHVtbXkiLCJ0ZXN0Iiwib3ZlcnJpZGUiLCJwcmVwYXJlIiwidHlwZXMiLCJ0eXBlIl0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFFQUEsU0FBUyxlQUFULEVBQTBCLE1BQU07QUFDOUJDLGFBQVcsWUFBVztBQUNwQixTQUFLQyxPQUFMLENBQWFDLElBQWIsQ0FBa0IsUUFBTUMsU0FBeEIsRUFBbUMsUUFBbkMsRUFBNkNDLFdBQTdDO0FBQ0EsU0FBS0gsT0FBTCxDQUFhQyxJQUFiLENBQWtCLFFBQU1DLFNBQXhCLEVBQW1DLE1BQW5DLEVBQTJDQyxXQUEzQztBQUNBLFNBQUtILE9BQUwsQ0FBYUMsSUFBYixDQUFrQixRQUFNQyxTQUF4QixFQUFtQyxTQUFuQyxFQUE4Q0MsV0FBOUM7QUFDRCxHQUpEO0FBT0FDLEtBQUcsUUFBSCxFQUFhLE1BQU07QUFDakJDLG9CQUFjQyxNQUFkLENBQXFCQyxFQUFyQixD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STtBQUdULGFBQUNxQyxJQUFELEdBQVE7QUFIQyxXQUFYO0FBS0QsU0FORCxFQU1HeEMsRUFOSCxDQU1NSSxLQU5OO0FBT0QsT0FSRDtBQVNEO0FBQ0YsR0FqQ0Q7QUFrQ0QsQ0FqSEQiLCJmaWxlIjoiaW5pdC50ZXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCB7IEF0bGFzIH0gZnJvbSAnLi4vLi4nXG5pbXBvcnQgeyBGcmFtZXdvcmtFcnJvciB9IGZyb20gJ0BhdGxhcy5qcy9lcnJvcnMnXG5pbXBvcnQgKiBhcyB0ZXN0c2VydmljZXMgZnJvbSAnLi9kZW1vYXBwL3NlcnZpY2VzJ1xuaW1wb3J0ICogYXMgdGVzdGFjdGlvbnMgZnJvbSAnLi9kZW1vYXBwL2FjdGlvbnMnXG5pbXBvcnQgKiBhcyB0ZXN0aG9va3MgZnJvbSAnLi9kZW1vYXBwL2hvb2tzJ1xuaW1wb3J0ICogYXMgdGVzdGFsaWFzZXMgZnJvbSAnLi9kZW1vYXBwL2FsaWFzZXMnXG5cbmRlc2NyaWJlKCdBdGxhczo6aW5pdCgpJywgKCkgPT4ge1xuICBiZWZvcmVFYWNoKGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2FuZGJveC5zdHViKEF0bGFzLnByb3RvdHlwZSwgJ2FjdGlvbicpLnJldHVybnNUaGlzKClcbiAgICB0aGlzLnNhbmRib3guc3R1YihBdGxhcy5wcm90b3R5cGUsICdob29rJykucmV0dXJuc1RoaXMoKVxuICAgIHRoaXMuc2FuZGJveC5zdHViKEF0bGFzLnByb3RvdHlwZSwgJ3NlcnZpY2UnKS5yZXR1cm5zVGhpcygpXG4gIH0pXG5cblxuICBpdCgnZXhpc3RzJywgKCkgPT4ge1xuICAgIGV4cGVjdChBdGxhcykuaXRzZWxmLnRvLnJlc3BvbmRUbygnaW5pdCcpXG4gIH0pXG5cbiAgaXQoJ3Rocm93cyB3aGVuIG5vIHJvb3QgaXMgcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IEF0bGFzLmluaXQoeyBlbnY6ICd0ZXN0JyB9KSlcbiAgICAgIC50by50aHJvdyhGcmFtZXdvcmtFcnJvciwgL3Jvb3QgbXVzdCBiZSBleHBsaWNpdGx5IHNwZWNpZmllZC8pXG4gIH0pXG5cbiAgaXQoJ2RvZXMgbm90IHRocm93IFR5cGVFcnJvciB3aGVuIG9wdGlvbnMgaXMgbm90IHByb3ZpZGVkJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBBdGxhcy5pbml0KCkpLnRvLm5vdC50aHJvdyhUeXBlRXJyb3IpXG4gIH0pXG5cbiAgaXQoJ2xvYWRzIGFsbCBhY3Rpb25zLCBob29rcyBhbmQgc2VydmljZXMgZnJvbSB0aGUgc3BlY2lmaWVkIGxvY2F0aW9ucycsICgpID0+IHtcbiAgICBjb25zdCBwcm90byA9IEF0bGFzLnByb3RvdHlwZVxuICAgIGNvbnN0IHJvb3QgPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnZGVtb2FwcCcpXG4gICAgY29uc3QgYXRsYXMgPSBBdGxhcy5pbml0KHtcbiAgICAgIHJvb3QsXG4gICAgICBlbnY6ICd0ZXN0JyxcbiAgICAgIGNvbmZpZzogJ2NvbmZpZycsXG4gICAgICBob29rczogJ2hvb2tzJyxcbiAgICAgIGFjdGlvbnM6ICdhY3Rpb25zJyxcbiAgICAgIHNlcnZpY2VzOiAnc2VydmljZXMnLFxuICAgICAgYWxpYXNlczogJ2FsaWFzZXMnLFxuICAgIH0pXG5cbiAgICAvLyBUZXN0IHNlcnZpY2VzXG4gICAgZm9yIChjb25zdCBbbmFtZSwgQ29tcG9uZW50XSBvZiBPYmplY3QuZW50cmllcyh0ZXN0c2VydmljZXMpKSB7XG4gICAgICBjb25zdCBhbGlhc2VzID0gdGVzdGFsaWFzZXMuc2VydmljZXNbbmFtZV1cbiAgICAgIGV4cGVjdChwcm90by5zZXJ2aWNlKS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aChuYW1lLCBDb21wb25lbnQsIHsgYWxpYXNlcyB9KVxuICAgIH1cbiAgICAvLyBUZXN0IGFjdGlvbnNcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBDb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHRlc3RhY3Rpb25zKSkge1xuICAgICAgY29uc3QgYWxpYXNlcyA9IHRlc3RhbGlhc2VzLmFjdGlvbnNbbmFtZV1cbiAgICAgIGV4cGVjdChwcm90by5hY3Rpb24pLnRvLmhhdmUuYmVlbi5jYWxsZWRXaXRoKG5hbWUsIENvbXBvbmVudCwgeyBhbGlhc2VzIH0pXG4gICAgfVxuICAgIC8vIFRlc3QgaG9va3NcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBDb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHRlc3Rob29rcykpIHtcbiAgICAgIGNvbnN0IGFsaWFzZXMgPSB0ZXN0YWxpYXNlcy5ob29rc1tuYW1lXVxuICAgICAgZXhwZWN0KHByb3RvLmhvb2spLnRvLmhhdmUuYmVlbi5jYWxsZWRXaXRoKG5hbWUsIENvbXBvbmVudCwgeyBhbGlhc2VzIH0pXG4gICAgfVxuXG4gICAgLy8gU3R1ZmYgZGlyZWN0bHkgb24gYXRsYXNcbiAgICBleHBlY3QoYXRsYXMuY29uZmlnKS50by5oYXZlLmFsbC5rZXlzKFsnYXRsYXMnLCAnc2VydmljZXMnLCAnaG9va3MnLCAnYWN0aW9ucyddKVxuICAgIGV4cGVjdChhdGxhcy5jb25maWcuYXRsYXMpLnRvLmluY2x1ZGUua2V5cyhbJ3Rlc3QnLCAnb3ZlcnJpZGUnXSlcbiAgICBleHBlY3QoYXRsYXMuY29uZmlnLnNlcnZpY2VzKS50by5lcWwoeyBkdW1teToge1xuICAgICAgdGVzdDogdHJ1ZSxcbiAgICAgIG92ZXJyaWRlOiB0cnVlLFxuICAgIH0gfSlcbiAgICBleHBlY3QoYXRsYXMuY29uZmlnLmhvb2tzKS50by5lcWwoeyBkdW1teToge1xuICAgICAgdGVzdDogdHJ1ZSxcbiAgICAgIG92ZXJyaWRlOiB0cnVlLFxuICAgIH0gfSlcbiAgICBleHBlY3QoYXRsYXMuY29uZmlnLmFjdGlvbnMpLnRvLmVxbCh7IGR1bW15OiB7XG4gICAgICB0ZXN0OiB0cnVlLFxuICAgICAgb3ZlcnJpZGU6IHRydWUsXG4gICAgfSB9KVxuICB9KVxuXG4gIGl0KCdwcm92aWRlcyBkZWZhdWx0cyBmb3IgcGF0aHMgdG8gc2VydmljZXMsIGhvb2tzLCBhY3Rpb25zLCBhbGlhc2VzIGFuZCBjb25maWcgZGlycycsICgpID0+IHtcbiAgICBjb25zdCByb290ID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ2RlbW9hcHAnKVxuICAgIGNvbnN0IGF0bGFzID0gQXRsYXMuaW5pdCh7XG4gICAgICByb290LFxuICAgICAgZW52OiAndGVzdCcsXG4gICAgfSlcblxuICAgIC8vIFNob3VsZCBub3QgdGhyb3dcbiAgICByZXR1cm4gYXRsYXMucHJlcGFyZSgpXG4gIH0pXG5cblxuICBkZXNjcmliZSgnRXhjZXB0aW9uIGhhbmRsaW5nJywgKCkgPT4ge1xuICAgIGNvbnN0IHJvb3QgPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnZGVtb2FwcCcpXG4gICAgY29uc3QgdHlwZXMgPSBbXG4gICAgICAnY29uZmlnJyxcbiAgICAgICdzZXJ2aWNlcycsXG4gICAgICAnYWN0aW9ucycsXG4gICAgICAnaG9va3MnLFxuICAgICAgJ2FsaWFzZXMnLFxuICAgIF1cblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaXQoYGRvZXMgbm90IHRocm93IHdoZW4gJHt0eXBlfSBtb2R1bGUgZG9lcyBub3QgZXhpc3RgLCAoKSA9PiB7XG4gICAgICAgIEF0bGFzLmluaXQoe1xuICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgZW52OiAndGVzdCcsXG4gICAgICAgICAgY29uZmlnOiAnbG9sY29uZicsXG4gICAgICAgICAgc2VydmljZXM6ICdsb2xzZXJ2JyxcbiAgICAgICAgICBhY3Rpb25zOiAnbG9sYWN0aW9ucycsXG4gICAgICAgICAgaG9va3M6ICdsb2xob29rcycsXG4gICAgICAgICAgYWxpYXNlczogJ2xvbGFsaWFzZXMnLFxuICAgICAgICB9KVxuICAgICAgfSlcblxuICAgICAgaXQoYHRocm93cyB3aGVuICR7dHlwZX0gbW9kdWxlIGNvbnRhaW5zIGVycm9yc2AsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICBBdGxhcy5pbml0KHtcbiAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICBlbnY6ICd0ZXN0JyxcbiAgICAgICAgICAgIFt0eXBlXTogJ3dpbGwtdGhyb3cnLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0pLnRvLnRocm93KClcbiAgICAgIH0pXG4gICAgfVxuICB9KVxufSlcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluaXQudGVzdC5tanMiXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJiZWZvcmVFYWNoIiwic2FuZGJveCIsInN0dWIiLCJBdGxhcyIsInByb3RvdHlwZSIsInJldHVybnNUaGlzIiwiaXQiLCJleHBlY3QiLCJpdHNlbGYiLCJ0byIsInJlc3BvbmRUbyIsImluaXQiLCJlbnYiLCJ0aHJvdyIsIkZyYW1ld29ya0Vycm9yIiwibm90IiwiVHlwZUVycm9yIiwicHJvdG8iLCJyb290IiwicGF0aCIsInJlc29sdmUiLCJfX2Rpcm5hbWUiLCJhdGxhcyIsImNvbmZpZyIsImhvb2tzIiwiYWN0aW9ucyIsInNlcnZpY2VzIiwiYWxpYXNlcyIsIm5hbWUiLCJDb21wb25lbnQiLCJPYmplY3QiLCJlbnRyaWVzIiwidGVzdHNlcnZpY2VzIiwidGVzdGFsaWFzZXMiLCJzZXJ2aWNlIiwiaGF2ZSIsImJlZW4iLCJjYWxsZWRXaXRoIiwidGVzdGFjdGlvbnMiLCJhY3Rpb24iLCJ0ZXN0aG9va3MiLCJob29rIiwiYWxsIiwia2V5cyIsImluY2x1ZGUiLCJlcWwiLCJkdW1teSIsInRlc3QiLCJvdmVycmlkZSIsInByZXBhcmUiLCJ0eXBlcyIsInR5cGUiXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQUEsU0FBUyxlQUFULEVBQTBCLE1BQU07QUFDOUJDLGFBQVcsWUFBVztBQUNwQixTQUFLQyxPQUFMLENBQWFDLElBQWIsQ0FBa0JDLFFBQU1DLFNBQXhCLEVBQW1DLFFBQW5DLEVBQTZDQyxXQUE3QztBQUNBLFNBQUtKLE9BQUwsQ0FBYUMsSUFBYixDQUFrQkMsUUFBTUMsU0FBeEIsRUFBbUMsTUFBbkMsRUFBMkNDLFdBQTNDO0FBQ0EsU0FBS0osT0FBTCxDQUFhQyxJQUFiLENBQWtCQyxRQUFNQyxTQUF4QixFQUFtQyxTQUFuQyxFQUE4Q0MsV0FBOUM7QUFDRCxHQUpEO0FBT0FDLEtBQUcsUUFBSCxFQUFhLE1BQU07QUFDakJDLFdBQU9KLE9BQVAsRUFBY0ssTUFBZCxDQUFxQkMsRUFBckIsQ0FBd0JDLFNBQXhCLENBQWtDLE1BQWxDO0FBQ0QsR0FGRDtBQUlBSixLQUFHLGlDQUFILEVBQXNDLE1BQU07QUFDMUNDLFdBQU8sTUFBTUosUUFBTVEsSUFBTixDQUFXO0FBQUVDLFdBQUs7QUFBUCxLQUFYLENBQWIsRUFDR0gsRUFESCxDQUNNSSxLQUROLENBQ1lDLHNCQURaLEVBQzRCLG1DQUQ1QjtBQUVELEdBSEQ7QUFLQVIsS0FBRyx1REFBSCxFQUE0RCxNQUFNO0FBQ2hFQyxXQUFPLE1BQU1KLFFBQU1RLElBQU4sRUFBYixFQUEyQkYsRUFBM0IsQ0FBOEJNLEdBQTlCLENBQWtDRixLQUFsQyxDQUF3Q0csU0FBeEM7QUFDRCxHQUZEO0FBSUFWLEtBQUcsb0VBQUgsRUFBeUUsTUFBTTtBQUM3RSxVQUFNVyxRQUFRZCxRQUFNQyxTQUFwQjs7QUFDQSxVQUFNYyxPQUFPQyxjQUFLQyxPQUFMLENBQWFDLFNBQWIsRUFBd0IsU0FBeEIsQ0FBYjs7QUFDQSxVQUFNQyxRQUFRbkIsUUFBTVEsSUFBTixDQUFXO0FBQ3ZCTyxVQUR1QjtBQUV2Qk4sV0FBSyxNQUZrQjtBQUd2QlcsY0FBUSxRQUhlO0FBSXZCQyxhQUFPLE9BSmdCO0FBS3ZCQyxlQUFTLFNBTGM7QUFNdkJDLGdCQUFVLFVBTmE7QUFPdkJDLGVBQVM7QUFQYyxLQUFYLENBQWQ7O0FBV0EsU0FBSyxNQUFNLENBQUNDLElBQUQsRUFBT0MsU0FBUCxDQUFYLElBQWdDQyxPQUFPQyxPQUFQLENBQWVDLFlBQWYsQ0FBaEMsRUFBOEQ7QUFDNUQsWUFBTUwsVUFBVU0sWUFBWVAsUUFBWixDQUFxQkUsSUFBckIsQ0FBaEI7QUFDQXJCLGFBQU9VLE1BQU1pQixPQUFiLEVBQXNCekIsRUFBdEIsQ0FBeUIwQixJQUF6QixDQUE4QkMsSUFBOUIsQ0FBbUNDLFVBQW5DLENBQThDVCxJQUE5QyxFQUFvREMsU0FBcEQsRUFBK0Q7QUFBRUY7QUFBRixPQUEvRDtBQUNEOztBQUVELFNBQUssTUFBTSxDQUFDQyxJQUFELEVBQU9DLFNBQVAsQ0FBWCxJQUFnQ0MsT0FBT0MsT0FBUCxDQUFlTyxXQUFmLENBQWhDLEVBQTZEO0FBQzNELFlBQU1YLFVBQVVNLFlBQVlSLE9BQVosQ0FBb0JHLElBQXBCLENBQWhCO0FBQ0FyQixhQUFPVSxNQUFNc0IsTUFBYixFQUFxQjlCLEVBQXJCLENBQXdCMEIsSUFBeEIsQ0FBNkJDLElBQTdCLENBQWtDQyxVQUFsQyxDQUE2Q1QsSUFBN0MsRUFBbURDLFNBQW5ELEVBQThEO0FBQUVGO0FBQUYsT0FBOUQ7QUFDRDs7QUFFRCxTQUFLLE1BQU0sQ0FBQ0MsSUFBRCxFQUFPQyxTQUFQLENBQVgsSUFBZ0NDLE9BQU9DLE9BQVAsQ0FBZVMsU0FBZixDQUFoQyxFQUEyRDtBQUN6RCxZQUFNYixVQUFVTSxZQUFZVCxLQUFaLENBQWtCSSxJQUFsQixDQUFoQjtBQUNBckIsYUFBT1UsTUFBTXdCLElBQWIsRUFBbUJoQyxFQUFuQixDQUFzQjBCLElBQXRCLENBQTJCQyxJQUEzQixDQUFnQ0MsVUFBaEMsQ0FBMkNULElBQTNDLEVBQWlEQyxTQUFqRCxFQUE0RDtBQUFFRjtBQUFGLE9BQTVEO0FBQ0Q7O0FBR0RwQixXQUFPZSxNQUFNQyxNQUFiLEVBQXFCZCxFQUFyQixDQUF3QjBCLElBQXhCLENBQTZCTyxHQUE3QixDQUFpQ0MsSUFBakMsQ0FBc0MsQ0FBQyxPQUFELEVBQVUsVUFBVixFQUFzQixPQUF0QixFQUErQixTQUEvQixDQUF0QztBQUNBcEMsV0FBT2UsTUFBTUMsTUFBTixDQUFhRCxLQUFwQixFQUEyQmIsRUFBM0IsQ0FBOEJtQyxPQUE5QixDQUFzQ0QsSUFBdEMsQ0FBMkMsQ0FBQyxNQUFELEVBQVMsVUFBVCxDQUEzQztBQUNBcEMsV0FBT2UsTUFBTUMsTUFBTixDQUFhRyxRQUFwQixFQUE4QmpCLEVBQTlCLENBQWlDb0MsR0FBakMsQ0FBcUM7QUFBRUMsYUFBTztBQUM1Q0MsY0FBTSxJQURzQztBQUU1Q0Msa0JBQVU7QUFGa0M7QUFBVCxLQUFyQztBQUlBekMsV0FBT2UsTUFBTUMsTUFBTixDQUFhQyxLQUFwQixFQUEyQmYsRUFBM0IsQ0FBOEJvQyxHQUE5QixDQUFrQztBQUFFQyxhQUFPO0FBQ3pDQyxjQUFNLElBRG1DO0FBRXpDQyxrQkFBVTtBQUYrQjtBQUFULEtBQWxDO0FBSUF6QyxXQUFPZSxNQUFNQyxNQUFOLENBQWFFLE9BQXBCLEVBQTZCaEIsRUFBN0IsQ0FBZ0NvQyxHQUFoQyxDQUFvQztBQUFFQyxhQUFPO0FBQzNDQyxjQUFNLElBRHFDO0FBRTNDQyxrQkFBVTtBQUZpQztBQUFULEtBQXBDO0FBSUQsR0E1Q0Q7QUE4Q0ExQyxLQUFHLGtGQUFILEVBQXVGLE1BQU07QUFDM0YsVUFBTVksT0FBT0MsY0FBS0MsT0FBTCxDQUFhQyxTQUFiLEVBQXdCLFNBQXhCLENBQWI7O0FBQ0EsVUFBTUMsUUFBUW5CLFFBQU1RLElBQU4sQ0FBVztBQUN2Qk8sVUFEdUI7QUFFdkJOLFdBQUs7QUFGa0IsS0FBWCxDQUFkOztBQU1BLFdBQU9VLE1BQU0yQixPQUFOLEVBQVA7QUFDRCxHQVREO0FBWUFsRCxXQUFTLG9CQUFULEVBQStCLE1BQU07QUFDbkMsVUFBTW1CLE9BQU9DLGNBQUtDLE9BQUwsQ0FBYUMsU0FBYixFQUF3QixTQUF4QixDQUFiOztBQUNBLFVBQU02QixRQUFRLENBQ1osUUFEWSxFQUVaLFVBRlksRUFHWixTQUhZLEVBSVosT0FKWSxFQUtaLFNBTFksQ0FBZDs7QUFRQSxTQUFLLE1BQU1DLElBQVgsSUFBbUJELEtBQW5CLEVBQTBCO0FBQ3hCNUMsU0FBSSx1QkFBc0I2QyxJQUFLLHdCQUEvQixFQUF3RCxNQUFNO0FBQzVEaEQsZ0JBQU1RLElBQU4sQ0FBVztBQUNUTyxjQURTO0FBRVROLGVBQUssTUFGSTtBQUdUVyxrQkFBUSxTQUhDO0FBSVRHLG9CQUFVLFNBSkQ7QUFLVEQsbUJBQVMsWUFMQTtBQU1URCxpQkFBTyxVQU5FO0FBT1RHLG1CQUFTO0FBUEEsU0FBWDtBQVNELE9BVkQ7QUFZQXJCLFNBQUksZUFBYzZDLElBQUsseUJBQXZCLEVBQWlELE1BQU07QUFDckQ1QyxlQUFPLE1BQU07QUFDWEosa0JBQU1RLElBQU4sQ0FBVztBQUNUTyxnQkFEUztBQUVUTixpQkFBSyxNQUZJO0FBR1QsYUFBQ3VDLElBQUQsR0FBUTtBQUhDLFdBQVg7QUFLRCxTQU5ELEVBTUcxQyxFQU5ILENBTU1JLEtBTk47QUFPRCxPQVJEO0FBU0Q7QUFDRixHQWpDRDtBQWtDRCxDQWpIRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBGcmFtZXdvcmtFcnJvciB9IGZyb20gJ0BhdGxhcy5qcy9lcnJvcnMnXG5pbXBvcnQgeyBBdGxhcyB9IGZyb20gJy4uLy4uJ1xuaW1wb3J0ICogYXMgdGVzdHNlcnZpY2VzIGZyb20gJy4vZGVtb2FwcC9zZXJ2aWNlcydcbmltcG9ydCAqIGFzIHRlc3RhY3Rpb25zIGZyb20gJy4vZGVtb2FwcC9hY3Rpb25zJ1xuaW1wb3J0ICogYXMgdGVzdGhvb2tzIGZyb20gJy4vZGVtb2FwcC9ob29rcydcbmltcG9ydCAqIGFzIHRlc3RhbGlhc2VzIGZyb20gJy4vZGVtb2FwcC9hbGlhc2VzJ1xuXG5kZXNjcmliZSgnQXRsYXM6OmluaXQoKScsICgpID0+IHtcbiAgYmVmb3JlRWFjaChmdW5jdGlvbigpIHtcbiAgICB0aGlzLnNhbmRib3guc3R1YihBdGxhcy5wcm90b3R5cGUsICdhY3Rpb24nKS5yZXR1cm5zVGhpcygpXG4gICAgdGhpcy5zYW5kYm94LnN0dWIoQXRsYXMucHJvdG90eXBlLCAnaG9vaycpLnJldHVybnNUaGlzKClcbiAgICB0aGlzLnNhbmRib3guc3R1YihBdGxhcy5wcm90b3R5cGUsICdzZXJ2aWNlJykucmV0dXJuc1RoaXMoKVxuICB9KVxuXG5cbiAgaXQoJ2V4aXN0cycsICgpID0+IHtcbiAgICBleHBlY3QoQXRsYXMpLml0c2VsZi50by5yZXNwb25kVG8oJ2luaXQnKVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiBubyByb290IGlzIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBBdGxhcy5pbml0KHsgZW52OiAndGVzdCcgfSkpXG4gICAgICAudG8udGhyb3coRnJhbWV3b3JrRXJyb3IsIC9yb290IG11c3QgYmUgZXhwbGljaXRseSBzcGVjaWZpZWQvKVxuICB9KVxuXG4gIGl0KCdkb2VzIG5vdCB0aHJvdyBUeXBlRXJyb3Igd2hlbiBvcHRpb25zIGlzIG5vdCBwcm92aWRlZCcsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gQXRsYXMuaW5pdCgpKS50by5ub3QudGhyb3coVHlwZUVycm9yKVxuICB9KVxuXG4gIGl0KCdsb2FkcyBhbGwgYWN0aW9ucywgaG9va3MgYW5kIHNlcnZpY2VzIGZyb20gdGhlIHNwZWNpZmllZCBsb2NhdGlvbnMnLCAoKSA9PiB7XG4gICAgY29uc3QgcHJvdG8gPSBBdGxhcy5wcm90b3R5cGVcbiAgICBjb25zdCByb290ID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ2RlbW9hcHAnKVxuICAgIGNvbnN0IGF0bGFzID0gQXRsYXMuaW5pdCh7XG4gICAgICByb290LFxuICAgICAgZW52OiAndGVzdCcsXG4gICAgICBjb25maWc6ICdjb25maWcnLFxuICAgICAgaG9va3M6ICdob29rcycsXG4gICAgICBhY3Rpb25zOiAnYWN0aW9ucycsXG4gICAgICBzZXJ2aWNlczogJ3NlcnZpY2VzJyxcbiAgICAgIGFsaWFzZXM6ICdhbGlhc2VzJyxcbiAgICB9KVxuXG4gICAgLy8gVGVzdCBzZXJ2aWNlc1xuICAgIGZvciAoY29uc3QgW25hbWUsIENvbXBvbmVudF0gb2YgT2JqZWN0LmVudHJpZXModGVzdHNlcnZpY2VzKSkge1xuICAgICAgY29uc3QgYWxpYXNlcyA9IHRlc3RhbGlhc2VzLnNlcnZpY2VzW25hbWVdXG4gICAgICBleHBlY3QocHJvdG8uc2VydmljZSkudG8uaGF2ZS5iZWVuLmNhbGxlZFdpdGgobmFtZSwgQ29tcG9uZW50LCB7IGFsaWFzZXMgfSlcbiAgICB9XG4gICAgLy8gVGVzdCBhY3Rpb25zXG4gICAgZm9yIChjb25zdCBbbmFtZSwgQ29tcG9uZW50XSBvZiBPYmplY3QuZW50cmllcyh0ZXN0YWN0aW9ucykpIHtcbiAgICAgIGNvbnN0IGFsaWFzZXMgPSB0ZXN0YWxpYXNlcy5hY3Rpb25zW25hbWVdXG4gICAgICBleHBlY3QocHJvdG8uYWN0aW9uKS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aChuYW1lLCBDb21wb25lbnQsIHsgYWxpYXNlcyB9KVxuICAgIH1cbiAgICAvLyBUZXN0IGhvb2tzXG4gICAgZm9yIChjb25zdCBbbmFtZSwgQ29tcG9uZW50XSBvZiBPYmplY3QuZW50cmllcyh0ZXN0aG9va3MpKSB7XG4gICAgICBjb25zdCBhbGlhc2VzID0gdGVzdGFsaWFzZXMuaG9va3NbbmFtZV1cbiAgICAgIGV4cGVjdChwcm90by5ob29rKS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aChuYW1lLCBDb21wb25lbnQsIHsgYWxpYXNlcyB9KVxuICAgIH1cblxuICAgIC8vIFN0dWZmIGRpcmVjdGx5IG9uIGF0bGFzXG4gICAgZXhwZWN0KGF0bGFzLmNvbmZpZykudG8uaGF2ZS5hbGwua2V5cyhbJ2F0bGFzJywgJ3NlcnZpY2VzJywgJ2hvb2tzJywgJ2FjdGlvbnMnXSlcbiAgICBleHBlY3QoYXRsYXMuY29uZmlnLmF0bGFzKS50by5pbmNsdWRlLmtleXMoWyd0ZXN0JywgJ292ZXJyaWRlJ10pXG4gICAgZXhwZWN0KGF0bGFzLmNvbmZpZy5zZXJ2aWNlcykudG8uZXFsKHsgZHVtbXk6IHtcbiAgICAgIHRlc3Q6IHRydWUsXG4gICAgICBvdmVycmlkZTogdHJ1ZSxcbiAgICB9IH0pXG4gICAgZXhwZWN0KGF0bGFzLmNvbmZpZy5ob29rcykudG8uZXFsKHsgZHVtbXk6IHtcbiAgICAgIHRlc3Q6IHRydWUsXG4gICAgICBvdmVycmlkZTogdHJ1ZSxcbiAgICB9IH0pXG4gICAgZXhwZWN0KGF0bGFzLmNvbmZpZy5hY3Rpb25zKS50by5lcWwoeyBkdW1teToge1xuICAgICAgdGVzdDogdHJ1ZSxcbiAgICAgIG92ZXJyaWRlOiB0cnVlLFxuICAgIH0gfSlcbiAgfSlcblxuICBpdCgncHJvdmlkZXMgZGVmYXVsdHMgZm9yIHBhdGhzIHRvIHNlcnZpY2VzLCBob29rcywgYWN0aW9ucywgYWxpYXNlcyBhbmQgY29uZmlnIGRpcnMnLCAoKSA9PiB7XG4gICAgY29uc3Qgcm9vdCA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICdkZW1vYXBwJylcbiAgICBjb25zdCBhdGxhcyA9IEF0bGFzLmluaXQoe1xuICAgICAgcm9vdCxcbiAgICAgIGVudjogJ3Rlc3QnLFxuICAgIH0pXG5cbiAgICAvLyBTaG91bGQgbm90IHRocm93XG4gICAgcmV0dXJuIGF0bGFzLnByZXBhcmUoKVxuICB9KVxuXG5cbiAgZGVzY3JpYmUoJ0V4Y2VwdGlvbiBoYW5kbGluZycsICgpID0+IHtcbiAgICBjb25zdCByb290ID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ2RlbW9hcHAnKVxuICAgIGNvbnN0IHR5cGVzID0gW1xuICAgICAgJ2NvbmZpZycsXG4gICAgICAnc2VydmljZXMnLFxuICAgICAgJ2FjdGlvbnMnLFxuICAgICAgJ2hvb2tzJyxcbiAgICAgICdhbGlhc2VzJyxcbiAgICBdXG5cbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgIGl0KGBkb2VzIG5vdCB0aHJvdyB3aGVuICR7dHlwZX0gbW9kdWxlIGRvZXMgbm90IGV4aXN0YCwgKCkgPT4ge1xuICAgICAgICBBdGxhcy5pbml0KHtcbiAgICAgICAgICByb290LFxuICAgICAgICAgIGVudjogJ3Rlc3QnLFxuICAgICAgICAgIGNvbmZpZzogJ2xvbGNvbmYnLFxuICAgICAgICAgIHNlcnZpY2VzOiAnbG9sc2VydicsXG4gICAgICAgICAgYWN0aW9uczogJ2xvbGFjdGlvbnMnLFxuICAgICAgICAgIGhvb2tzOiAnbG9saG9va3MnLFxuICAgICAgICAgIGFsaWFzZXM6ICdsb2xhbGlhc2VzJyxcbiAgICAgICAgfSlcbiAgICAgIH0pXG5cbiAgICAgIGl0KGB0aHJvd3Mgd2hlbiAke3R5cGV9IG1vZHVsZSBjb250YWlucyBlcnJvcnNgLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgQXRsYXMuaW5pdCh7XG4gICAgICAgICAgICByb290LFxuICAgICAgICAgICAgZW52OiAndGVzdCcsXG4gICAgICAgICAgICBbdHlwZV06ICd3aWxsLXRocm93JyxcbiAgICAgICAgICB9KVxuICAgICAgICB9KS50by50aHJvdygpXG4gICAgICB9KVxuICAgIH1cbiAgfSlcbn0pXG4iXX0=

@@ -11,25 +11,20 @@ "use strict";

var _errors = require("@atlas.js/errors");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class ServiceApi {}
class DummyService extends _service.default {}
Object.defineProperty(DummyService, "defaults", {
configurable: true,
enumerable: true,
writable: true,
value: {
default: true
}
});
DummyService.defaults = {
default: true
};
class DummyHook extends _hook.default {}
Object.defineProperty(DummyHook, "defaults", {
configurable: true,
enumerable: true,
writable: true,
value: {
default: true
}
});
DummyHook.observes = 'atlas';
DummyHook.defaults = {
default: true
};

@@ -75,3 +70,3 @@ class DummyAction extends _action.default {

beforeEach(() => {
DummyService.prototype.prepare = sinon.stub().resolves();
DummyService.prototype.prepare = sinon.stub().resolves(new ServiceApi());
atlas.service('dummy', DummyService);

@@ -97,2 +92,10 @@ });

});
xit('does not expose services marked as internal', async () => {
class InternalService extends _service.default {}
InternalService.internal = true;
atlas.service('internal', InternalService);
await atlas.prepare();
expect(atlas.services).not.to.have.property('internal');
});
});

@@ -106,6 +109,13 @@ describe('Action interactions', () => {

});
xit('does not expose actions marked as internal', async () => {
class InternalAction extends _action.default {}
InternalAction.internal = true;
atlas.action('internal', InternalAction);
await atlas.prepare();
expect(atlas.actions).not.to.have.property('internal');
});
});
describe('Hook interactions - dispatching events', () => {
describe('Hook interactions', () => {
beforeEach(() => {
DummyService.prototype.prepare = sinon.stub().resolves();
DummyHook.prototype.afterPrepare = sinon.stub().resolves();

@@ -125,12 +135,16 @@ atlas.service('dummy', DummyService);

it('can handle hooks which do not implement any listeners', async () => {
class Empty {
prepare() {}
class Empty extends _hook.default {}
}
Empty.observes = 'atlas';
atlas.hook('empty', Empty);
await atlas.prepare();
});
it('throws when a hook does not declare the component they want to observe', () => {
class Empty extends _hook.default {}
atlas.hook('empty', Empty);
return expect(atlas.prepare()).to.be.rejectedWith(_errors.FrameworkError, /does not have static 'observes' property/i);
});
});
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInByZXBhcmUudGVzdC5tanMiXSwibmFtZXMiOlsiRHVtbXlTZXJ2aWNlIiwiZGVmYXVsdCIsIkR1bW15SG9vayIsIkR1bW15QWN0aW9uIiwiZHVtbXlNZXRob2QiLCJkZXNjcmliZSIsImF0bGFzIiwib3B0aW9ucyIsImJlZm9yZUVhY2giLCJyb290IiwiX19kaXJuYW1lIiwiY29uZmlnIiwic2VydmljZXMiLCJkdW1teSIsInRlc3QiLCJob29rcyIsIml0IiwiZXhwZWN0IiwicHJlcGFyZSIsInRvIiwiYmUiLCJpbnN0YW5jZW9mIiwiUHJvbWlzZSIsImVxdWFsIiwicHJlcGFyZWQiLCJwcm90b3R5cGUiLCJzaW5vbiIsInN0dWIiLCJyZXNvbHZlcyIsInNlcnZpY2UiLCJoYXZlIiwiY2FsbENvdW50IiwiaW5zdGFuY2UiLCJhcGkiLCJwcm9wZXJ0eSIsImFjdGlvbiIsImFjdGlvbnMiLCJyZXNwb25kVG8iLCJhZnRlclByZXBhcmUiLCJob29rIiwicHJvdG8iLCJiZWVuIiwiY2FsbGVkV2l0aCIsIkVtcHR5Il0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsTUFBTUEsWUFBTiwwQkFBbUM7O3NCQUE3QkEsWTs7OztTQUNjO0FBQUVDLGFBQVM7QUFBWDs7O0FBR3BCLE1BQU1DLFNBQU4sdUJBQTZCOztzQkFBdkJBLFM7Ozs7U0FDYztBQUFFRCxhQUFTO0FBQVg7OztBQUdwQixNQUFNRSxXQUFOLHlCQUFpQztBQUMvQkMsZ0JBQWMsQ0FBRTs7QUFEZTs7QUFJakNDLFNBQVMsa0JBQVQsRUFBNkIsTUFBTTtBQUNqQyxNQUFJQyxLQUFKO0FBQ0EsTUFBSUMsT0FBSjtBQUVBQyxhQUFXLE1BQU07QUFDZkQsY0FBVTtBQUNSRSxZQUFNQyxTQURFO0FBRVJDLGNBQVE7QUFDTkMsa0JBQVU7QUFDUkMsaUJBQU87QUFDTEMsa0JBQU07QUFERDtBQURDLFNBREo7QUFNTkMsZUFBTztBQUNMRixpQkFBTztBQUNMQyxrQkFBTTtBQURE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QUFNdUIsT0FBTixDQUFjLE9BQWQsRUFBdUI3QixZQUF2QjtBQUNBTSxZQUFNaUMsSUFBTixDQUFXLE9BQVgsRUFBb0JyQyxTQUFwQjtBQUNELEtBTkQ7QUFRQWMsT0FBRyx5QkFBSCxFQUE4QixZQUFZO0FBQ3hDLFlBQU1WLE1BQU1ZLE9BQU4sRUFBTjtBQUVBRCxhQUFPZixVQUFVdUIsU0FBVixDQUFvQmEsWUFBM0IsRUFBeUNuQixFQUF6QyxDQUE0Q1csSUFBNUMsQ0FBaURDLFNBQWpELENBQTJELENBQTNEO0FBQ0QsS0FKRDtBQU1BZixPQUFHLHFEQUFILEVBQTBELFlBQVk7QUFDcEUsWUFBTXdCLFFBQVF0QyxVQUFVdUIsU0FBeEI7QUFDQSxZQUFNbkIsTUFBTVksT0FBTixFQUFOO0FBRUFELGFBQU91QixNQUFNRixZQUFiLEVBQTJCbkIsRUFBM0IsQ0FBOEJXLElBQTlCLENBQW1DVyxJQUFuQyxDQUF3Q0MsVUFBeEMsQ0FBbURwQyxLQUFuRDtBQUNELEtBTEQ7QUFPQVUsT0FBRyx1REFBSCxFQUE0RCxZQUFZO0FBQ3RFLFlBQU0yQixLQUFOLENBQVk7QUFDVnpCLGtCQUFVLENBQUU7O0FBREY7O0FBSVpaLFlBQU1pQyxJQUFOLENBQVcsT0FBWCxFQUFvQkksS0FBcEI7QUFFQSxZQUFNckMsTUFBTVksT0FBTixFQUFOO0FBQ0QsS0FSRDtBQVNELEdBL0JEO0FBZ0NELENBL0dEIiwiZmlsZSI6InByZXBhcmUudGVzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0bGFzIH0gZnJvbSAnLi4nXG5pbXBvcnQgU2VydmljZSBmcm9tICdAYXRsYXMuanMvc2VydmljZSdcbmltcG9ydCBIb29rIGZyb20gJ0BhdGxhcy5qcy9ob29rJ1xuaW1wb3J0IEFjdGlvbiBmcm9tICdAYXRsYXMuanMvYWN0aW9uJ1xuXG5jbGFzcyBEdW1teVNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHtcbiAgc3RhdGljIGRlZmF1bHRzID0geyBkZWZhdWx0OiB0cnVlIH1cbn1cblxuY2xhc3MgRHVtbXlIb29rIGV4dGVuZHMgSG9vayB7XG4gIHN0YXRpYyBkZWZhdWx0cyA9IHsgZGVmYXVsdDogdHJ1ZSB9XG59XG5cbmNsYXNzIER1bW15QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHtcbiAgZHVtbXlNZXRob2QoKSB7fVxufVxuXG5kZXNjcmliZSgnQXRsYXM6OnByZXBhcmUoKScsICgpID0+IHtcbiAgbGV0IGF0bGFzXG4gIGxldCBvcHRpb25zXG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIHJvb3Q6IF9fZGlybmFtZSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBzZXJ2aWNlczoge1xuICAgICAgICAgIGR1bW15OiB7XG4gICAgICAgICAgICB0ZXN0OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGhvb2tzOiB7XG4gICAgICAgICAgZHVtbXk6IHtcbiAgICAgICAgICAgIHRlc3Q6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuICAgIGF0bGFzID0gbmV3IEF0bGFzKG9wdGlvbnMpXG4gIH0pXG5cblxuICBpdCgnaXMgYXN5bmMnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGF0bGFzLnByZXBhcmUoKSkudG8uYmUuaW5zdGFuY2VvZihQcm9taXNlKVxuICB9KVxuXG4gIGl0KCdyZXR1cm5zIHRoaXMnLCBhc3luYyAoKSA9PiB7XG4gICAgZXhwZWN0KGF3YWl0IGF0bGFzLnByZXBhcmUoKSkudG8uZXF1YWwoYXRsYXMpXG4gIH0pXG5cbiAgaXQoJ3NldHMgYXRsYXMucHJlcGFyZWQgdG8gdHJ1ZScsIGFzeW5jICgpID0+IHtcbiAgICBleHBlY3QoYXRsYXMucHJlcGFyZWQpLnRvLmVxdWFsKGZhbHNlKVxuICAgIGF3YWl0IGF0bGFzLnByZXBhcmUoKVxuICAgIGV4cGVjdChhdGxhcy5wcmVwYXJlZCkudG8uZXF1YWwodHJ1ZSlcbiAgfSlcblxuXG4gIGRlc2NyaWJlKCdTZXJ2aWNlIGludGVyYWN0aW9ucycsICgpID0+IHtcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIER1bW15U2VydmljZS5wcm90b3R5cGUucHJlcGFyZSA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpXG4gICAgICBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIER1bW15U2VydmljZSlcbiAgICB9KVxuXG5cbiAgICBpdCgnY2FsbHMgcHJlcGFyZSBvbiB0aGUgc2VydmljZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGF0bGFzLnByZXBhcmUoKVxuICAgICAgZXhwZWN0KER1bW15U2VydmljZS5wcm90b3R5cGUucHJlcGFyZSkudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICB9KVxuXG4gICAgaXQoJ2V4cG9zZXMgdGhlIHJldHVybmVkIGluc3RhbmNlIG9uIGF0bGFzLnNlcnZpY2VzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSB7IGFwaTogdHJ1ZSB9XG4gICAgICBEdW1teVNlcnZpY2UucHJvdG90eXBlLnByZXBhcmUucmVzb2x2ZXMoaW5zdGFuY2UpXG4gICAgICBhd2FpdCBhdGxhcy5wcmVwYXJlKClcblxuICAgICAgZXhwZWN0KGF0bGFzLnNlcnZpY2VzKS50by5oYXZlLnByb3BlcnR5KCdkdW1teScpXG4gICAgICBleHBlY3QoYXRsYXMuc2VydmljZXMuZHVtbXkpLnRvLmVxdWFsKGluc3RhbmNlKVxuICAgIH0pXG5cbiAgICBpdCgnY2FsbHMgdGhlIG1ldGhvZCBvbmx5IG9uY2UgZm9yIGVhY2ggc2VydmljZSBmb3IgbXVsdGlwbGUgLnByZXBhcmUoKSBjYWxscycsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGF0bGFzLnByZXBhcmUoKVxuICAgICAgYXdhaXQgYXRsYXMucHJlcGFyZSgpXG5cbiAgICAgIGV4cGVjdChEdW1teVNlcnZpY2UucHJvdG90eXBlLnByZXBhcmUpLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gICAgfSlcbiAgfSlcblxuXG4gIGRlc2NyaWJlKCdBY3Rpb24gaW50ZXJhY3Rpb25zJywgKCkgPT4ge1xuICAgIGl0KCdleHBvc2VzIGFsbCBhY3Rpb25zIG9uIHRoaXMuYWN0aW9ucycsIGFzeW5jICgpID0+IHtcbiAgICAgIGF0bGFzLmFjdGlvbignZHVtbXknLCBEdW1teUFjdGlvbilcbiAgICAgIGF3YWl0IGF0bGFzLnByZXBhcmUoKVxuXG4gICAgICBleHBlY3QoYXRsYXMuYWN0aW9ucykudG8uaGF2ZS5wcm9wZXJ0eSgnZHVtbXknKVxuICAgICAgZXhwZWN0KGF0bGFzLmFjdGlvbnMuZHVtbXkpLnRvLnJlc3BvbmRUbygnZHVtbXlNZXRob2QnKVxuICAgIH0pXG4gIH0pXG5cbiAgZGVzY3JpYmUoJ0hvb2sgaW50ZXJhY3Rpb25zIC0gZGlzcGF0Y2hpbmcgZXZlbnRzJywgKCkgPT4ge1xuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5wcmVwYXJlID0gc2lub24uc3R1YigpLnJlc29sdmVzKClcbiAgICAgIER1bW15SG9vay5wcm90b3R5cGUuYWZ0ZXJQcmVwYXJlID0gc2lub24uc3R1YigpLnJlc29sdmVzKClcblxuICAgICAgYXRsYXMuc2VydmljZSgnZHVtbXknLCBEdW1teVNlcnZpY2UpXG4gICAgICBhdGxhcy5ob29rKCdkdW1teScsIER1bW15SG9vaylcbiAgICB9KVxuXG4gICAgaXQoJ2NhbGxzIHRoZSBwcmVwYXJlIGhvb2tzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYXRsYXMucHJlcGFyZSgpXG5cbiAgICAgIGV4cGVjdChEdW1teUhvb2sucHJvdG90eXBlLmFmdGVyUHJlcGFyZSkudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICB9KVxuXG4gICAgaXQoJ2NhbGxzIHRoZSBhZnRlclByZXBhcmUgaG9vayB3aXRoIHRoZSBhdGxhcyBpbnN0YW5jZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3RvID0gRHVtbXlIb29rLnByb3RvdHlwZVxuICAgICAgYXdhaXQgYXRsYXMucHJlcGFyZSgpXG5cbiAgICAgIGV4cGVjdChwcm90by5hZnRlclByZXBhcmUpLnRvLmhhdmUuYmVlbi5jYWxsZWRXaXRoKGF0bGFzKVxuICAgIH0pXG5cbiAgICBpdCgnY2FuIGhhbmRsZSBob29rcyB3aGljaCBkbyBub3QgaW1wbGVtZW50IGFueSBsaXN0ZW5lcnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjbGFzcyBFbXB0eSB7XG4gICAgICAgIHByZXBhcmUoKSB7fVxuICAgICAgfVxuXG4gICAgICBhdGxhcy5ob29rKCdlbXB0eScsIEVtcHR5KVxuICAgICAgLy8gVGhpcyBub3QgdGhyb3dpbmcgd2lsbCBzdWZmaWNlIPCfmI5cbiAgICAgIGF3YWl0IGF0bGFzLnByZXBhcmUoKVxuICAgIH0pXG4gIH0pXG59KVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInByZXBhcmUudGVzdC5tanMiXSwibmFtZXMiOlsiU2VydmljZUFwaSIsIkR1bW15U2VydmljZSIsIlNlcnZpY2UiLCJkZWZhdWx0cyIsImRlZmF1bHQiLCJEdW1teUhvb2siLCJIb29rIiwib2JzZXJ2ZXMiLCJEdW1teUFjdGlvbiIsIkFjdGlvbiIsImR1bW15TWV0aG9kIiwiZGVzY3JpYmUiLCJhdGxhcyIsIm9wdGlvbnMiLCJiZWZvcmVFYWNoIiwicm9vdCIsIl9fZGlybmFtZSIsImNvbmZpZyIsInNlcnZpY2VzIiwiZHVtbXkiLCJ0ZXN0IiwiaG9va3MiLCJBdGxhcyIsIml0IiwiZXhwZWN0IiwicHJlcGFyZSIsInRvIiwiYmUiLCJpbnN0YW5jZW9mIiwiUHJvbWlzZSIsImVxdWFsIiwicHJlcGFyZWQiLCJwcm90b3R5cGUiLCJzaW5vbiIsInN0dWIiLCJyZXNvbHZlcyIsInNlcnZpY2UiLCJoYXZlIiwiY2FsbENvdW50IiwiaW5zdGFuY2UiLCJhcGkiLCJwcm9wZXJ0eSIsInhpdCIsIkludGVybmFsU2VydmljZSIsImludGVybmFsIiwibm90IiwiYWN0aW9uIiwiYWN0aW9ucyIsInJlc3BvbmRUbyIsIkludGVybmFsQWN0aW9uIiwiYWZ0ZXJQcmVwYXJlIiwiaG9vayIsInByb3RvIiwiYmVlbiIsImNhbGxlZFdpdGgiLCJFbXB0eSIsInJlamVjdGVkV2l0aCIsIkZyYW1ld29ya0Vycm9yIl0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsTUFBTUEsVUFBTixDQUFpQjs7QUFFakIsTUFBTUMsWUFBTixTQUEyQkMsZ0JBQTNCLENBQW1DOztBQUE3QkQsWSxDQUNHRSxRLEdBQVc7QUFBRUMsV0FBUztBQUFYLEM7O0FBR3BCLE1BQU1DLFNBQU4sU0FBd0JDLGFBQXhCLENBQTZCOztBQUF2QkQsUyxDQUNHRSxRLEdBQVcsTztBQURkRixTLENBRUdGLFEsR0FBVztBQUFFQyxXQUFTO0FBQVgsQzs7QUFHcEIsTUFB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Q3hDLFlBQU1YLE1BQU1hLE9BQU4sRUFBTjtBQUVBRCxhQUFPbkIsVUFBVTJCLFNBQVYsQ0FBb0JrQixZQUEzQixFQUF5Q3hCLEVBQXpDLENBQTRDVyxJQUE1QyxDQUFpREMsU0FBakQsQ0FBMkQsQ0FBM0Q7QUFDRCxLQUpEO0FBTUFmLE9BQUcscURBQUgsRUFBMEQsWUFBWTtBQUNwRSxZQUFNNkIsUUFBUS9DLFVBQVUyQixTQUF4QjtBQUNBLFlBQU1wQixNQUFNYSxPQUFOLEVBQU47QUFFQUQsYUFBTzRCLE1BQU1GLFlBQWIsRUFBMkJ4QixFQUEzQixDQUE4QlcsSUFBOUIsQ0FBbUNnQixJQUFuQyxDQUF3Q0MsVUFBeEMsQ0FBbUQxQyxLQUFuRDtBQUNELEtBTEQ7QUFPQVcsT0FBRyx1REFBSCxFQUE0RCxZQUFZO0FBQ3RFLFlBQU1nQyxLQUFOLFNBQW9CakQsYUFBcEIsQ0FBeUI7O0FBQW5CaUQsV0FEZ0UsQ0FFN0RoRCxRQUY2RCxHQUVsRCxPQUZrRDtBQUt0RUssWUFBTXVDLElBQU4sQ0FBVyxPQUFYLEVBQW9CSSxLQUFwQjtBQUVBLFlBQU0zQyxNQUFNYSxPQUFOLEVBQU47QUFDRCxLQVJEO0FBVUFGLE9BQUcsd0VBQUgsRUFBNkUsTUFBTTtBQUNqRixZQUFNZ0MsS0FBTixTQUFvQmpELGFBQXBCLENBQXlCOztBQUV6Qk0sWUFBTXVDLElBQU4sQ0FBVyxPQUFYLEVBQW9CSSxLQUFwQjtBQUVBLGFBQU8vQixPQUFPWixNQUFNYSxPQUFOLEVBQVAsRUFBd0JDLEVBQXhCLENBQTJCQyxFQUEzQixDQUE4QjZCLFlBQTlCLENBQ0xDLHNCQURLLEVBRUwsMkNBRkssQ0FBUDtBQUlELEtBVEQ7QUFVRCxHQXpDRDtBQTBDRCxDQS9JRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0bGFzIH0gZnJvbSAnLi4nXG5pbXBvcnQgU2VydmljZSBmcm9tICdAYXRsYXMuanMvc2VydmljZSdcbmltcG9ydCBIb29rIGZyb20gJ0BhdGxhcy5qcy9ob29rJ1xuaW1wb3J0IEFjdGlvbiBmcm9tICdAYXRsYXMuanMvYWN0aW9uJ1xuaW1wb3J0IHsgRnJhbWV3b3JrRXJyb3IgfSBmcm9tICdAYXRsYXMuanMvZXJyb3JzJ1xuXG5jbGFzcyBTZXJ2aWNlQXBpIHt9XG5cbmNsYXNzIER1bW15U2VydmljZSBleHRlbmRzIFNlcnZpY2Uge1xuICBzdGF0aWMgZGVmYXVsdHMgPSB7IGRlZmF1bHQ6IHRydWUgfVxufVxuXG5jbGFzcyBEdW1teUhvb2sgZXh0ZW5kcyBIb29rIHtcbiAgc3RhdGljIG9ic2VydmVzID0gJ2F0bGFzJ1xuICBzdGF0aWMgZGVmYXVsdHMgPSB7IGRlZmF1bHQ6IHRydWUgfVxufVxuXG5jbGFzcyBEdW1teUFjdGlvbiBleHRlbmRzIEFjdGlvbiB7XG4gIGR1bW15TWV0aG9kKCkge31cbn1cblxuZGVzY3JpYmUoJ0F0bGFzOjpwcmVwYXJlKCknLCAoKSA9PiB7XG4gIGxldCBhdGxhc1xuICBsZXQgb3B0aW9uc1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICByb290OiBfX2Rpcm5hbWUsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgc2VydmljZXM6IHtcbiAgICAgICAgICBkdW1teToge1xuICAgICAgICAgICAgdGVzdDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBob29rczoge1xuICAgICAgICAgIGR1bW15OiB7XG4gICAgICAgICAgICB0ZXN0OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cbiAgICBhdGxhcyA9IG5ldyBBdGxhcyhvcHRpb25zKVxuICB9KVxuXG5cbiAgaXQoJ2lzIGFzeW5jJywgKCkgPT4ge1xuICAgIGV4cGVjdChhdGxhcy5wcmVwYXJlKCkpLnRvLmJlLmluc3RhbmNlb2YoUHJvbWlzZSlcbiAgfSlcblxuICBpdCgncmV0dXJucyB0aGlzJywgYXN5bmMgKCkgPT4ge1xuICAgIGV4cGVjdChhd2FpdCBhdGxhcy5wcmVwYXJlKCkpLnRvLmVxdWFsKGF0bGFzKVxuICB9KVxuXG4gIGl0KCdzZXRzIGF0bGFzLnByZXBhcmVkIHRvIHRydWUnLCBhc3luYyAoKSA9PiB7XG4gICAgZXhwZWN0KGF0bGFzLnByZXBhcmVkKS50by5lcXVhbChmYWxzZSlcbiAgICBhd2FpdCBhdGxhcy5wcmVwYXJlKClcbiAgICBleHBlY3QoYXRsYXMucHJlcGFyZWQpLnRvLmVxdWFsKHRydWUpXG4gIH0pXG5cblxuICBkZXNjcmliZSgnU2VydmljZSBpbnRlcmFjdGlvbnMnLCAoKSA9PiB7XG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBEdW1teVNlcnZpY2UucHJvdG90eXBlLnByZXBhcmUgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMobmV3IFNlcnZpY2VBcGkoKSlcbiAgICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlKVxuICAgIH0pXG5cblxuICAgIGl0KCdjYWxscyBwcmVwYXJlIG9uIHRoZSBzZXJ2aWNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYXRsYXMucHJlcGFyZSgpXG4gICAgICBleHBlY3QoRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5wcmVwYXJlKS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgIH0pXG5cbiAgICBpdCgnZXhwb3NlcyB0aGUgcmV0dXJuZWQgaW5zdGFuY2Ugb24gYXRsYXMuc2VydmljZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IHsgYXBpOiB0cnVlIH1cbiAgICAgIER1bW15U2VydmljZS5wcm90b3R5cGUucHJlcGFyZS5yZXNvbHZlcyhpbnN0YW5jZSlcbiAgICAgIGF3YWl0IGF0bGFzLnByZXBhcmUoKVxuXG4gICAgICBleHBlY3QoYXRsYXMuc2VydmljZXMpLnRvLmhhdmUucHJvcGVydHkoJ2R1bW15JylcbiAgICAgIGV4cGVjdChhdGxhcy5zZXJ2aWNlcy5kdW1teSkudG8uZXF1YWwoaW5zdGFuY2UpXG4gICAgfSlcblxuICAgIGl0KCdjYWxscyB0aGUgbWV0aG9kIG9ubHkgb25jZSBmb3IgZWFjaCBzZXJ2aWNlIGZvciBtdWx0aXBsZSAucHJlcGFyZSgpIGNhbGxzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYXRsYXMucHJlcGFyZSgpXG4gICAgICBhd2FpdCBhdGxhcy5wcmVwYXJlKClcblxuICAgICAgZXhwZWN0KER1bW15U2VydmljZS5wcm90b3R5cGUucHJlcGFyZSkudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICB9KVxuXG4gICAgLy8gQFRPRE86IEltcGxlbWVudCBpbnRlcm5hbCBjb21wb25lbnRzXG4gICAgeGl0KCdkb2VzIG5vdCBleHBvc2Ugc2VydmljZXMgbWFya2VkIGFzIGludGVybmFsJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY2xhc3MgSW50ZXJuYWxTZXJ2aWNlIGV4dGVuZHMgU2VydmljZSB7XG4gICAgICAgIHN0YXRpYyBpbnRlcm5hbCA9IHRydWVcbiAgICAgIH1cbiAgICAgIGF0bGFzLnNlcnZpY2UoJ2ludGVybmFsJywgSW50ZXJuYWxTZXJ2aWNlKVxuICAgICAgYXdhaXQgYXRsYXMucHJlcGFyZSgpXG5cbiAgICAgIGV4cGVjdChhdGxhcy5zZXJ2aWNlcykubm90LnRvLmhhdmUucHJvcGVydHkoJ2ludGVybmFsJylcbiAgICB9KVxuICB9KVxuXG5cbiAgZGVzY3JpYmUoJ0FjdGlvbiBpbnRlcmFjdGlvbnMnLCAoKSA9PiB7XG4gICAgaXQoJ2V4cG9zZXMgYWxsIGFjdGlvbnMgb24gdGhpcy5hY3Rpb25zJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXRsYXMuYWN0aW9uKCdkdW1teScsIER1bW15QWN0aW9uKVxuICAgICAgYXdhaXQgYXRsYXMucHJlcGFyZSgpXG5cbiAgICAgIGV4cGVjdChhdGxhcy5hY3Rpb25zKS50by5oYXZlLnByb3BlcnR5KCdkdW1teScpXG4gICAgICBleHBlY3QoYXRsYXMuYWN0aW9ucy5kdW1teSkudG8ucmVzcG9uZFRvKCdkdW1teU1ldGhvZCcpXG4gICAgfSlcblxuICAgIC8vIEBUT0RPOiBJbXBsZW1lbnQgaW50ZXJuYWwgY29tcG9uZW50c1xuICAgIHhpdCgnZG9lcyBub3QgZXhwb3NlIGFjdGlvbnMgbWFya2VkIGFzIGludGVybmFsJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY2xhc3MgSW50ZXJuYWxBY3Rpb24gZXh0ZW5kcyBBY3Rpb24ge1xuICAgICAgICBzdGF0aWMgaW50ZXJuYWwgPSB0cnVlXG4gICAgICB9XG4gICAgICBhdGxhcy5hY3Rpb24oJ2ludGVybmFsJywgSW50ZXJuYWxBY3Rpb24pXG4gICAgICBhd2FpdCBhdGxhcy5wcmVwYXJlKClcblxuICAgICAgZXhwZWN0KGF0bGFzLmFjdGlvbnMpLm5vdC50by5oYXZlLnByb3BlcnR5KCdpbnRlcm5hbCcpXG4gICAgfSlcbiAgfSlcblxuICBkZXNjcmliZSgnSG9vayBpbnRlcmFjdGlvbnMnLCAoKSA9PiB7XG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBEdW1teUhvb2sucHJvdG90eXBlLmFmdGVyUHJlcGFyZSA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpXG5cbiAgICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlKVxuICAgICAgYXRsYXMuaG9vaygnZHVtbXknLCBEdW1teUhvb2spXG4gICAgfSlcblxuICAgIGl0KCdjYWxscyB0aGUgcHJlcGFyZSBob29rcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGF0bGFzLnByZXBhcmUoKVxuXG4gICAgICBleHBlY3QoRHVtbXlIb29rLnByb3RvdHlwZS5hZnRlclByZXBhcmUpLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gICAgfSlcblxuICAgIGl0KCdjYWxscyB0aGUgYWZ0ZXJQcmVwYXJlIGhvb2sgd2l0aCB0aGUgYXRsYXMgaW5zdGFuY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwcm90byA9IER1bW15SG9vay5wcm90b3R5cGVcbiAgICAgIGF3YWl0IGF0bGFzLnByZXBhcmUoKVxuXG4gICAgICBleHBlY3QocHJvdG8uYWZ0ZXJQcmVwYXJlKS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aChhdGxhcylcbiAgICB9KVxuXG4gICAgaXQoJ2NhbiBoYW5kbGUgaG9va3Mgd2hpY2ggZG8gbm90IGltcGxlbWVudCBhbnkgbGlzdGVuZXJzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY2xhc3MgRW1wdHkgZXh0ZW5kcyBIb29rIHtcbiAgICAgICAgc3RhdGljIG9ic2VydmVzID0gJ2F0bGFzJ1xuICAgICAgfVxuXG4gICAgICBhdGxhcy5ob29rKCdlbXB0eScsIEVtcHR5KVxuICAgICAgLy8gVGhpcyBub3QgdGhyb3dpbmcgd2lsbCBzdWZmaWNlIPCfmI5cbiAgICAgIGF3YWl0IGF0bGFzLnByZXBhcmUoKVxuICAgIH0pXG5cbiAgICBpdCgndGhyb3dzIHdoZW4gYSBob29rIGRvZXMgbm90IGRlY2xhcmUgdGhlIGNvbXBvbmVudCB0aGV5IHdhbnQgdG8gb2JzZXJ2ZScsICgpID0+IHtcbiAgICAgIGNsYXNzIEVtcHR5IGV4dGVuZHMgSG9vayB7fVxuXG4gICAgICBhdGxhcy5ob29rKCdlbXB0eScsIEVtcHR5KVxuXG4gICAgICByZXR1cm4gZXhwZWN0KGF0bGFzLnByZXBhcmUoKSkudG8uYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICBGcmFtZXdvcmtFcnJvcixcbiAgICAgICAgL2RvZXMgbm90IGhhdmUgc3RhdGljICdvYnNlcnZlcycgcHJvcGVydHkvaSxcbiAgICAgIClcbiAgICB9KVxuICB9KVxufSlcbiJdfQ==

@@ -5,5 +5,5 @@ "use strict";

var democonfig = _interopRequireWildcard(require("./democonfig"));
var democonfig = _interopRequireDefault(require("./democonfig"));
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

@@ -70,2 +70,2 @@ describe('Atlas::require()', () => {

});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJlcXVpcmUudGVzdC5tanMiXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJhdGxhcyIsImJlZm9yZUVhY2giLCJyb290IiwiX19kaXJuYW1lIiwiaXQiLCJleHBlY3QiLCJ0byIsInJlc3BvbmRUbyIsImNvbmZpZyIsInJlcXVpcmUiLCJlcXVhbCIsImRlbW9jb25maWciLCJ0aHJvdyIsIm9wdGlvbmFsIiwibm90IiwiY29udGVudHMiLCJiZSIsImFuIiwiT2JqZWN0Iiwia2V5cyIsImhhdmUiLCJsZW5ndGgiLCJhYnNvbHV0ZSIsIm5vcm1hbGlzZSIsInByb3BlcnR5Il0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOzs7O0FBRUFBLFNBQVMsa0JBQVQsRUFBNkIsTUFBTTtBQUNqQyxNQUFJQyxLQUFKO0FBRUFDLGFBQVcsTUFBTTtBQUNmRCxZQUFRLFlBQVU7QUFBRUUsWUFBTUM7QUFBUixLQUFWLENBQVI7QUFDRCxHQUZEO0FBS0FDLEtBQUcsUUFBSCxFQUFhLE1BQU07QUFDakJDLFdBQU9MLEtBQVAsRUFBY00sRUFBZCxDQUFpQkMsU0FBakIsQ0FBMkIsU0FBM0I7QUFDRCxHQUZEO0FBSUFILEtBQUcsd0NBQUgsRUFBNkMsTUFBTTtBQUNqRCxVQUFNSSxTQUFTUixNQUFNUyxPQUFOLENBQWMsWUFBZCxDQUFmOztBQUVBSixXQUFPRyxNQUFQLEVBQWVGLEVBQWYsQ0FBa0JJLEtBQWxCLENBQXdCQyxVQUF4QjtBQUNELEdBSkQ7QUFNQVAsS0FBRyxxQ0FBSCxFQUEwQyxNQUFNO0FBQzlDQyxXQUFPLE1BQU1MLE1BQU1TLE9BQU4sQ0FBYyxXQUFkLENBQWIsRUFBeUNILEVBQXpDLENBQTRDTSxLQUE1QyxDQUFrRCxvQkFBbEQ7QUFDRCxHQUZEO0FBS0FiLFdBQVMsZ0JBQVQsRUFBMkIsTUFBTTtBQUMvQkssT0FBRyxnQkFBSCxFQUFxQixNQUFNO0FBQ3pCQyxhQUFPLE1BQU1MLE1BQU1TLE9BQU4sQ0FBYyxXQUFkLEVBQTJCO0FBQUVJLGtCQUFVO0FBQVosT0FBM0IsQ0FBYixFQUE2RFAsRUFBN0QsQ0FBZ0VRLEdBQWhFLENBQW9FRixLQUFwRTtBQUNELEtBRkQ7QUFJQVIsT0FBRyxzQkFBSCxFQUEyQixNQUFNO0FBQy9CLFlBQU1XLFdBQVdmLE1BQU1TLE9BQU4sQ0FBYyxXQUFkLEVBQTJCO0FBQUVJLGtCQUFVO0FBQVosT0FBM0IsQ0FBakI7O0FBRUFSLGFBQU9VLFFBQVAsRUFBaUJULEVBQWpCLENBQW9CVSxFQUFwQixDQUF1QkMsRUFBdkIsQ0FBMEIsUUFBMUI7QUFDQVosYUFBT2EsT0FBT0MsSUFBUCxDQUFZSixRQUFaLENBQVAsRUFBOEJULEVBQTlCLENBQWlDYyxJQUFqQyxDQUFzQ0MsTUFBdEMsQ0FBNkMsQ0FBN0M7QUFDRCxLQUxEO0FBTUQsR0FYRDtBQWNBdEIsV0FBUyxnQkFBVCxFQUEyQixNQUFNO0FBQy9CSyxPQUFHLG9DQUFILEVBQXlDLE1BQU07QUFDN0MsWUFBTVcsV0FBV2YsTUFBTVMsT0FBTixDQUFjLE1BQWQsRUFBc0I7QUFBRWEsa0JBQVU7QUFBWixPQUF0QixDQUFqQjs7QUFFQWpCLGFBQU9VLFFBQVAsRUFBaUJULEVBQWpCLENBQW9CVSxFQUFwQixDQUF1QkMsRUFBdkIsQ0FBMEIsUUFBMUI7QUFDRCxLQUpEO0FBS0QsR0FORDtBQVNBbEIsV0FBUyxpQkFBVCxFQUE0QixNQUFNO0FBQ2hDSyxPQUFHLDJDQUFILEVBQWdELE1BQU07QUFDcEQsWUFBTVcsV0FBV2YsTUFBTVMsT0FBTixDQUFjLDBCQUFkLEVBQTBDO0FBQUVjLG1CQUFXO0FBQWIsT0FBMUMsQ0FBakI7O0FBRUFsQixhQUFPVSxRQUFQLEVBQWlCVCxFQUFqQixDQUFvQmMsSUFBcEIsQ0FBeUJJLFFBQXpCLENBQWtDLFNBQWxDLEVBQTZDLElBQTdDO0FBQ0QsS0FKRDtBQU1BcEIsT0FBRyw4REFBSCxFQUFtRSxNQUFNO0FBQ3ZFLFlBQU1XLFdBQVdmLE1BQU1TLE9BQU4sQ0FBYyxZQUFkLEVBQTRCO0FBQUVjLG1CQUFXO0FBQWIsT0FBNUIsQ0FBakI7O0FBRUFsQixhQUFPVSxRQUFQLEVBQWlCVCxFQUFqQixDQUFvQmMsSUFBcEIsQ0FBeUJJLFFBQXpCLENBQWtDLE9BQWxDO0FBQ0FuQixhQUFPVSxTQUFTZixLQUFoQixFQUF1Qk0sRUFBdkIsQ0FBMEJVLEVBQTFCLENBQTZCQyxFQUE3QixDQUFnQyxRQUFoQztBQUNELEtBTEQ7QUFNRCxHQWJEO0FBY0QsQ0E1REQiLCJmaWxlIjoicmVxdWlyZS50ZXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXRsYXMgfSBmcm9tICcuLidcbmltcG9ydCAqIGFzIGRlbW9jb25maWcgZnJvbSAnLi9kZW1vY29uZmlnJ1xuXG5kZXNjcmliZSgnQXRsYXM6OnJlcXVpcmUoKScsICgpID0+IHtcbiAgbGV0IGF0bGFzXG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgYXRsYXMgPSBuZXcgQXRsYXMoeyByb290OiBfX2Rpcm5hbWUgfSlcbiAgfSlcblxuXG4gIGl0KCdleGlzdHMnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGF0bGFzKS50by5yZXNwb25kVG8oJ3JlcXVpcmUnKVxuICB9KVxuXG4gIGl0KCdyZXF1aXJlcyBhIG1vZHVsZSByZWxhdGl2ZSB0byB0aGUgcm9vdCcsICgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBhdGxhcy5yZXF1aXJlKCdkZW1vY29uZmlnJylcblxuICAgIGV4cGVjdChjb25maWcpLnRvLmVxdWFsKGRlbW9jb25maWcpXG4gIH0pXG5cbiAgaXQoJ3Rocm93cyBpZiB0aGUgbW9kdWxlIGRvZXMgbm90IGV4aXN0JywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBhdGxhcy5yZXF1aXJlKCdsb2xtb2R1bGUnKSkudG8udGhyb3coL0Nhbm5vdCBmaW5kIG1vZHVsZS8pXG4gIH0pXG5cblxuICBkZXNjcmliZSgnb3B0aW9uYWw6IHRydWUnLCAoKSA9PiB7XG4gICAgaXQoJ2RvZXMgbm90IHRocm93JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+IGF0bGFzLnJlcXVpcmUoJ2xvbG1vZHVsZScsIHsgb3B0aW9uYWw6IHRydWUgfSkpLnRvLm5vdC50aHJvdygpXG4gICAgfSlcblxuICAgIGl0KCdyZXR1cm5zIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRlbnRzID0gYXRsYXMucmVxdWlyZSgnbG9sbW9kdWxlJywgeyBvcHRpb25hbDogdHJ1ZSB9KVxuXG4gICAgICBleHBlY3QoY29udGVudHMpLnRvLmJlLmFuKCdvYmplY3QnKVxuICAgICAgZXhwZWN0KE9iamVjdC5rZXlzKGNvbnRlbnRzKSkudG8uaGF2ZS5sZW5ndGgoMClcbiAgICB9KVxuICB9KVxuXG5cbiAgZGVzY3JpYmUoJ2Fic29sdXRlOiB0cnVlJywgKCkgPT4ge1xuICAgIGl0KCdsb2FkcyB0aGUgbW9kdWxlIGZyb20gbm9kZV9tb2R1bGVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgY29udGVudHMgPSBhdGxhcy5yZXF1aXJlKCdjaGFpJywgeyBhYnNvbHV0ZTogdHJ1ZSB9KVxuXG4gICAgICBleHBlY3QoY29udGVudHMpLnRvLmJlLmFuKCdvYmplY3QnKVxuICAgIH0pXG4gIH0pXG5cblxuICBkZXNjcmliZSgnbm9ybWFsaXNlOiB0cnVlJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIHRoZSBgZGVmYXVsdGAgZXhwb3J0IGlmIGl0IGV4aXN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRlbnRzID0gYXRsYXMucmVxdWlyZSgnZGVtb2NvbmZpZy9taXhlZC1leHBvcnRzJywgeyBub3JtYWxpc2U6IHRydWUgfSlcblxuICAgICAgZXhwZWN0KGNvbnRlbnRzKS50by5oYXZlLnByb3BlcnR5KCdkZWZhdWx0JywgdHJ1ZSlcbiAgICB9KVxuXG4gICAgaXQoJ3JldHVybnMgdGhlIG5hbWVkIGV4cG9ydHMgaWYgYGRlZmF1bHRgIGV4cG9ydCBkb2VzIG5vdCBleGlzdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRlbnRzID0gYXRsYXMucmVxdWlyZSgnZGVtb2NvbmZpZycsIHsgbm9ybWFsaXNlOiB0cnVlIH0pXG5cbiAgICAgIGV4cGVjdChjb250ZW50cykudG8uaGF2ZS5wcm9wZXJ0eSgnYXRsYXMnKVxuICAgICAgZXhwZWN0KGNvbnRlbnRzLmF0bGFzKS50by5iZS5hbignb2JqZWN0JylcbiAgICB9KVxuICB9KVxufSlcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJlcXVpcmUudGVzdC5tanMiXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJhdGxhcyIsImJlZm9yZUVhY2giLCJBdGxhcyIsInJvb3QiLCJfX2Rpcm5hbWUiLCJpdCIsImV4cGVjdCIsInRvIiwicmVzcG9uZFRvIiwiY29uZmlnIiwicmVxdWlyZSIsImVxdWFsIiwiZGVtb2NvbmZpZyIsInRocm93Iiwib3B0aW9uYWwiLCJub3QiLCJjb250ZW50cyIsImJlIiwiYW4iLCJPYmplY3QiLCJrZXlzIiwiaGF2ZSIsImxlbmd0aCIsImFic29sdXRlIiwibm9ybWFsaXNlIiwicHJvcGVydHkiXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBQ0E7Ozs7QUFFQUEsU0FBUyxrQkFBVCxFQUE2QixNQUFNO0FBQ2pDLE1BQUlDLEtBQUo7QUFFQUMsYUFBVyxNQUFNO0FBQ2ZELFlBQVEsSUFBSUUsT0FBSixDQUFVO0FBQUVDLFlBQU1DO0FBQVIsS0FBVixDQUFSO0FBQ0QsR0FGRDtBQUtBQyxLQUFHLFFBQUgsRUFBYSxNQUFNO0FBQ2pCQyxXQUFPTixLQUFQLEVBQWNPLEVBQWQsQ0FBaUJDLFNBQWpCLENBQTJCLFNBQTNCO0FBQ0QsR0FGRDtBQUlBSCxLQUFHLHdDQUFILEVBQTZDLE1BQU07QUFDakQsVUFBTUksU0FBU1QsTUFBTVUsT0FBTixDQUFjLFlBQWQsQ0FBZjs7QUFFQUosV0FBT0csTUFBUCxFQUFlRixFQUFmLENBQWtCSSxLQUFsQixDQUF3QkMsVUFBeEI7QUFDRCxHQUpEO0FBTUFQLEtBQUcscUNBQUgsRUFBMEMsTUFBTTtBQUM5Q0MsV0FBTyxNQUFNTixNQUFNVSxPQUFOLENBQWMsV0FBZCxDQUFiLEVBQXlDSCxFQUF6QyxDQUE0Q00sS0FBNUMsQ0FBa0Qsb0JBQWxEO0FBQ0QsR0FGRDtBQUtBZCxXQUFTLGdCQUFULEVBQTJCLE1BQU07QUFDL0JNLE9BQUcsZ0JBQUgsRUFBcUIsTUFBTTtBQUN6QkMsYUFBTyxNQUFNTixNQUFNVSxPQUFOLENBQWMsV0FBZCxFQUEyQjtBQUFFSSxrQkFBVTtBQUFaLE9BQTNCLENBQWIsRUFBNkRQLEVBQTdELENBQWdFUSxHQUFoRSxDQUFvRUYsS0FBcEU7QUFDRCxLQUZEO0FBSUFSLE9BQUcsc0JBQUgsRUFBMkIsTUFBTTtBQUMvQixZQUFNVyxXQUFXaEIsTUFBTVUsT0FBTixDQUFjLFdBQWQsRUFBMkI7QUFBRUksa0JBQVU7QUFBWixPQUEzQixDQUFqQjs7QUFFQVIsYUFBT1UsUUFBUCxFQUFpQlQsRUFBakIsQ0FBb0JVLEVBQXBCLENBQXVCQyxFQUF2QixDQUEwQixRQUExQjtBQUNBWixhQUFPYSxPQUFPQyxJQUFQLENBQVlKLFFBQVosQ0FBUCxFQUE4QlQsRUFBOUIsQ0FBaUNjLElBQWpDLENBQXNDQyxNQUF0QyxDQUE2QyxDQUE3QztBQUNELEtBTEQ7QUFNRCxHQVhEO0FBY0F2QixXQUFTLGdCQUFULEVBQTJCLE1BQU07QUFDL0JNLE9BQUcsb0NBQUgsRUFBeUMsTUFBTTtBQUM3QyxZQUFNVyxXQUFXaEIsTUFBTVUsT0FBTixDQUFjLE1BQWQsRUFBc0I7QUFBRWEsa0JBQVU7QUFBWixPQUF0QixDQUFqQjs7QUFFQWpCLGFBQU9VLFFBQVAsRUFBaUJULEVBQWpCLENBQW9CVSxFQUFwQixDQUF1QkMsRUFBdkIsQ0FBMEIsUUFBMUI7QUFDRCxLQUpEO0FBS0QsR0FORDtBQVNBbkIsV0FBUyxpQkFBVCxFQUE0QixNQUFNO0FBQ2hDTSxPQUFHLDJDQUFILEVBQWdELE1BQU07QUFDcEQsWUFBTVcsV0FBV2hCLE1BQU1VLE9BQU4sQ0FBYywwQkFBZCxFQUEwQztBQUFFYyxtQkFBVztBQUFiLE9BQTFDLENBQWpCOztBQUVBbEIsYUFBT1UsUUFBUCxFQUFpQlQsRUFBakIsQ0FBb0JjLElBQXBCLENBQXlCSSxRQUF6QixDQUFrQyxTQUFsQyxFQUE2QyxJQUE3QztBQUNELEtBSkQ7QUFNQXBCLE9BQUcsOERBQUgsRUFBbUUsTUFBTTtBQUN2RSxZQUFNVyxXQUFXaEIsTUFBTVUsT0FBTixDQUFjLFlBQWQsRUFBNEI7QUFBRWMsbUJBQVc7QUFBYixPQUE1QixDQUFqQjs7QUFFQWxCLGFBQU9VLFFBQVAsRUFBaUJULEVBQWpCLENBQW9CYyxJQUFwQixDQUF5QkksUUFBekIsQ0FBa0MsT0FBbEM7QUFDQW5CLGFBQU9VLFNBQVNoQixLQUFoQixFQUF1Qk8sRUFBdkIsQ0FBMEJVLEVBQTFCLENBQTZCQyxFQUE3QixDQUFnQyxRQUFoQztBQUNELEtBTEQ7QUFNRCxHQWJEO0FBY0QsQ0E1REQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdGxhcyB9IGZyb20gJy4uJ1xuaW1wb3J0ICogYXMgZGVtb2NvbmZpZyBmcm9tICcuL2RlbW9jb25maWcnXG5cbmRlc2NyaWJlKCdBdGxhczo6cmVxdWlyZSgpJywgKCkgPT4ge1xuICBsZXQgYXRsYXNcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBhdGxhcyA9IG5ldyBBdGxhcyh7IHJvb3Q6IF9fZGlybmFtZSB9KVxuICB9KVxuXG5cbiAgaXQoJ2V4aXN0cycsICgpID0+IHtcbiAgICBleHBlY3QoYXRsYXMpLnRvLnJlc3BvbmRUbygncmVxdWlyZScpXG4gIH0pXG5cbiAgaXQoJ3JlcXVpcmVzIGEgbW9kdWxlIHJlbGF0aXZlIHRvIHRoZSByb290JywgKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGF0bGFzLnJlcXVpcmUoJ2RlbW9jb25maWcnKVxuXG4gICAgZXhwZWN0KGNvbmZpZykudG8uZXF1YWwoZGVtb2NvbmZpZylcbiAgfSlcblxuICBpdCgndGhyb3dzIGlmIHRoZSBtb2R1bGUgZG9lcyBub3QgZXhpc3QnLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLnJlcXVpcmUoJ2xvbG1vZHVsZScpKS50by50aHJvdygvQ2Fubm90IGZpbmQgbW9kdWxlLylcbiAgfSlcblxuXG4gIGRlc2NyaWJlKCdvcHRpb25hbDogdHJ1ZScsICgpID0+IHtcbiAgICBpdCgnZG9lcyBub3QgdGhyb3cnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4gYXRsYXMucmVxdWlyZSgnbG9sbW9kdWxlJywgeyBvcHRpb25hbDogdHJ1ZSB9KSkudG8ubm90LnRocm93KClcbiAgICB9KVxuXG4gICAgaXQoJ3JldHVybnMgZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgY29udGVudHMgPSBhdGxhcy5yZXF1aXJlKCdsb2xtb2R1bGUnLCB7IG9wdGlvbmFsOiB0cnVlIH0pXG5cbiAgICAgIGV4cGVjdChjb250ZW50cykudG8uYmUuYW4oJ29iamVjdCcpXG4gICAgICBleHBlY3QoT2JqZWN0LmtleXMoY29udGVudHMpKS50by5oYXZlLmxlbmd0aCgwKVxuICAgIH0pXG4gIH0pXG5cblxuICBkZXNjcmliZSgnYWJzb2x1dGU6IHRydWUnLCAoKSA9PiB7XG4gICAgaXQoJ2xvYWRzIHRoZSBtb2R1bGUgZnJvbSBub2RlX21vZHVsZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjb250ZW50cyA9IGF0bGFzLnJlcXVpcmUoJ2NoYWknLCB7IGFic29sdXRlOiB0cnVlIH0pXG5cbiAgICAgIGV4cGVjdChjb250ZW50cykudG8uYmUuYW4oJ29iamVjdCcpXG4gICAgfSlcbiAgfSlcblxuXG4gIGRlc2NyaWJlKCdub3JtYWxpc2U6IHRydWUnLCAoKSA9PiB7XG4gICAgaXQoJ3JldHVybnMgdGhlIGBkZWZhdWx0YCBleHBvcnQgaWYgaXQgZXhpc3RzJywgKCkgPT4ge1xuICAgICAgY29uc3QgY29udGVudHMgPSBhdGxhcy5yZXF1aXJlKCdkZW1vY29uZmlnL21peGVkLWV4cG9ydHMnLCB7IG5vcm1hbGlzZTogdHJ1ZSB9KVxuXG4gICAgICBleHBlY3QoY29udGVudHMpLnRvLmhhdmUucHJvcGVydHkoJ2RlZmF1bHQnLCB0cnVlKVxuICAgIH0pXG5cbiAgICBpdCgncmV0dXJucyB0aGUgbmFtZWQgZXhwb3J0cyBpZiBgZGVmYXVsdGAgZXhwb3J0IGRvZXMgbm90IGV4aXN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgY29udGVudHMgPSBhdGxhcy5yZXF1aXJlKCdkZW1vY29uZmlnJywgeyBub3JtYWxpc2U6IHRydWUgfSlcblxuICAgICAgZXhwZWN0KGNvbnRlbnRzKS50by5oYXZlLnByb3BlcnR5KCdhdGxhcycpXG4gICAgICBleHBlY3QoY29udGVudHMuYXRsYXMpLnRvLmJlLmFuKCdvYmplY3QnKVxuICAgIH0pXG4gIH0pXG59KVxuIl19

@@ -41,2 +41,3 @@ "use strict";

const service = sinon.spy();
service.config = {};
atlas.service('dummy', service);

@@ -49,2 +50,3 @@ const args = service.getCall(0).args[0];

const service = sinon.spy();
service.config = {};
atlas.service('dummy', service);

@@ -58,2 +60,3 @@ const args = service.getCall(0).args[0];

const service = sinon.spy();
service.config = {};
atlas.service('dummy', service);

@@ -67,2 +70,3 @@ const args = service.getCall(0).args[0];

const service = sinon.spy();
service.config = {};
atlas.service('dummy', service);

@@ -75,2 +79,3 @@ const args = service.getCall(0).args[0];

const service = sinon.spy();
service.config = {};
service.defaults = {

@@ -85,2 +90,3 @@ default: true

const service = sinon.spy();
service.config = {};
service.requires = ['service:dummy', 'action:dummy'];

@@ -101,4 +107,35 @@ expect(() => {

});
it('throws when user config fails component config schema', () => {
options.config.services.dummy = {
lol: true
};
atlas = new _.Atlas(options);
const service = sinon.spy();
service.config = {
type: 'object',
additionalProperties: false,
properties: {
test: {
type: 'boolean'
}
}
};
expect(() => atlas.service('dummy', service)).to.throw(_errors.ValidationError);
});
it('works when user config passes component config schema', () => {
const service = sinon.spy();
service.config = {
type: 'object',
additionalProperties: false,
properties: {
test: {
type: 'boolean'
}
}
};
expect(() => atlas.service('dummy', service)).not.to.throw(_errors.ValidationError);
});
it('works when all requirements are specified', () => {
const service = sinon.spy();
service.config = {};
service.requires = ['service:dummy', 'action:dummy'];

@@ -115,2 +152,2 @@ expect(() => {

});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNlcnZpY2UudGVzdC5tanMiXSwibmFtZXMiOlsiRHVtbXlTZXJ2aWNlIiwiZGVzY3JpYmUiLCJhdGxhcyIsIm9wdGlvbnMiLCJiZWZvcmVFYWNoIiwicm9vdCIsIl9fZGlybmFtZSIsImNvbmZpZyIsInNlcnZpY2VzIiwiZHVtbXkiLCJ0ZXN0IiwiaXQiLCJleHBlY3QiLCJzZXJ2aWNlIiwidG8iLCJlcXVhbCIsInRocm93Iiwic2lub24iLCJzcHkiLCJhcmdzIiwiZ2V0Q2FsbCIsImhhdmUiLCJwcm9wZXJ0eSIsImxvZyIsImJlIiwiYW4iLCJjaGluZGluZ3MiLCJtYXRjaCIsImNvbXBvbmVudCIsImEiLCJkZWZhdWx0cyIsImRlZmF1bHQiLCJyZXF1aXJlcyIsImFsaWFzZXMiLCJub3QiXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxZQUFOLDBCQUFtQzs7QUFFbkNDLFNBQVMsa0JBQVQsRUFBNkIsTUFBTTtBQUNqQyxNQUFJQyxLQUFKO0FBQ0EsTUFBSUMsT0FBSjtBQUVBQyxhQUFXLE1BQU07QUFDZkQsY0FBVTtBQUNSRSxZQUFNQyxTQURFO0FBRVJDLGNBQVE7QUFDTkMsa0JBQVU7QUFDUkMsaUJBQU87QUFDTEMsa0JBQU07QUFERDtBQURDO0FBREo7QUFGQSxLQUFWO0FBVUFSLFlBQVEsWUFBVUMsT0FBVixDQUFSO0FBQ0QsR0FaRDtBQWNBUSxLQUFHLGNBQUgsRUFBbUIsTUFBTTtBQUN2QkMsV0FBT1YsTUFBTVcsT0FBTixDQUFjLE9BQWQsRUFBdUJiLFlBQXZCLENBQVAsRUFBNkNjLEVBQTdDLENBQWdEQyxLQUFoRCxDQUFzRGIsS0FBdEQ7QUFDRCxHQUZEO0FBSUFTLEtBQUcsZ0VBQUgsRUFBcUUsTUFBTTtBQUN6RVQsVUFBTVcsT0FBTixDQUFjLE9BQWQsRUFBdUJiLFlBQXZCO0FBQ0FZLFdBQU8sTUFBTVYsTUFBTVcsT0FBTixDQUFjLE9BQWQsRUFBdUJiLFlBQXZCLENBQWIsRUFBbURjLEVBQW5ELENB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Y2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdGxhcyB9IGZyb20gJy4uJ1xuaW1wb3J0IHsgRnJhbWV3b3JrRXJyb3IgfSBmcm9tICdAYXRsYXMuanMvZXJyb3JzJ1xuaW1wb3J0IFNlcnZpY2UgZnJvbSAnQGF0bGFzLmpzL3NlcnZpY2UnXG5cbmNsYXNzIER1bW15U2VydmljZSBleHRlbmRzIFNlcnZpY2Uge31cblxuZGVzY3JpYmUoJ0F0bGFzOjpzZXJ2aWNlKCknLCAoKSA9PiB7XG4gIGxldCBhdGxhc1xuICBsZXQgb3B0aW9uc1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICByb290OiBfX2Rpcm5hbWUsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgc2VydmljZXM6IHtcbiAgICAgICAgICBkdW1teToge1xuICAgICAgICAgICAgdGVzdDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XG4gICAgYXRsYXMgPSBuZXcgQXRsYXMob3B0aW9ucylcbiAgfSlcblxuICBpdCgncmV0dXJucyB0aGlzJywgKCkgPT4ge1xuICAgIGV4cGVjdChhdGxhcy5zZXJ2aWNlKCdkdW1teScsIER1bW15U2VydmljZSkpLnRvLmVxdWFsKGF0bGFzKVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiB0aGUgYWxpYXMgaGFzIGFscmVhZHkgYmVlbiB1c2VkIGJ5IGFub3RoZXIgc2VydmljZScsICgpID0+IHtcbiAgICBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIER1bW15U2VydmljZSlcbiAgICBleHBlY3QoKCkgPT4gYXRsYXMuc2VydmljZSgnZHVtbXknLCBEdW1teVNlcnZpY2UpKS50by50aHJvdyhGcmFtZXdvcmtFcnJvcilcbiAgfSlcblxuICBpdCgndGhyb3dzIHdoZW4gdGhlIHNlcnZpY2UgaXMgbm90IGEgY2xhc3MvZnVuY3Rpb24nLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLnNlcnZpY2UoJ2R1bW15Jywge30pKS50by50aHJvdyhGcmFtZXdvcmtFcnJvcilcbiAgfSlcblxuICBpdCgncHJvdmlkZXMgdGhlIGF0bGFzIG9uIHNlcnZpY2UgY29uc3RydWN0b3IgYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmljZSA9IHNpbm9uLnNweSgpXG4gICAgYXRsYXMuc2VydmljZSgnZHVtbXknLCBzZXJ2aWNlKVxuICAgIGNvbnN0IGFyZ3MgPSBzZXJ2aWNlLmdldENhbGwoMCkuYXJnc1swXVxuXG4gICAgZXhwZWN0KGFyZ3MpLnRvLmhhdmUucHJvcGVydHkoJ2F0bGFzJylcbiAgICBleHBlY3QoYXJncy5hdGxhcykudG8uZXF1YWwoYXRsYXMpXG4gIH0pXG5cbiAgaXQoJ3Byb3ZpZGVzIGEgbG9nZ2VyIGluc3RhbmNlIG9uIHNlcnZpY2UgY29uc3RydWN0b3IgYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmljZSA9IHNpbm9uLnNweSgpXG4gICAgYXRsYXMuc2VydmljZSgnZHVtbXknLCBzZXJ2aWNlKVxuICAgIGNvbnN0IGFyZ3MgPSBzZXJ2aWNlLmdldENhbGwoMCkuYXJnc1swXVxuXG4gICAgZXhwZWN0KGFyZ3MpLnRvLmhhdmUucHJvcGVydHkoJ2xvZycpXG4gICAgZXhwZWN0KGFyZ3MubG9nKS50by5iZS5hbignb2JqZWN0JylcbiAgICBleHBlY3QoYXJncy5sb2cuY2hpbmRpbmdzKS50by5tYXRjaCgvXCJzZXJ2aWNlXCI6XCJkdW1teVwiLylcbiAgfSlcblxuICBpdCgncHJvdmlkZXMgY29uZmlnIG9iamVjdCBvbiBzZXJ2aWNlIGNvbnN0cnVjdG9yIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgIGNvbnN0IHNlcnZpY2UgPSBzaW5vbi5zcHkoKVxuICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15Jywgc2VydmljZSlcbiAgICBjb25zdCBhcmdzID0gc2VydmljZS5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzKS50by5oYXZlLnByb3BlcnR5KCdjb25maWcnKVxuICAgIGV4cGVjdChhcmdzLmNvbmZpZykudG8uYmUuYW4oJ29iamVjdCcpXG4gICAgZXhwZWN0KGFyZ3MuY29uZmlnKS50by5lcXVhbChvcHRpb25zLmNvbmZpZy5zZXJ2aWNlcy5kdW1teSlcbiAgfSlcblxuICBpdCgncHJvdmlkZXMgdGhlIHJlc29sdmUgZnVuY3Rpb24gb24gc2VydmljZSBjb25zdHJ1Y3RvciBhcmd1bWVudCBhcyBgY29tcG9uZW50YCcsICgpID0+IHtcbiAgICBjb25zdCBzZXJ2aWNlID0gc2lub24uc3B5KClcbiAgICBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIHNlcnZpY2UpXG4gICAgY29uc3QgYXJncyA9IHNlcnZpY2UuZ2V0Q2FsbCgwKS5hcmdzWzBdXG5cbiAgICBleHBlY3QoYXJncykudG8uaGF2ZS5wcm9wZXJ0eSgnY29tcG9uZW50JylcbiAgICBleHBlY3QoYXJncy5jb21wb25lbnQpLnRvLmJlLmEoJ2Z1bmN0aW9uJylcbiAgfSlcblxuICBpdCgnYXBwbGllcyBkZWZhdWx0cyBkZWZpbmVkIG9uIHNlcnZpY2Ugb24gdG9wIG9mIHVzZXItcHJvdmlkZWQgY29uZmlnJywgKCkgPT4ge1xuICAgIGNvbnN0IHNlcnZpY2UgPSBzaW5vbi5zcHkoKVxuICAgIHNlcnZpY2UuZGVmYXVsdHMgPSB7IGRlZmF1bHQ6IHRydWUgfVxuICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15Jywgc2VydmljZSlcbiAgICBjb25zdCBhcmdzID0gc2VydmljZS5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzLmNvbmZpZykudG8uaGF2ZS5wcm9wZXJ0eSgnZGVmYXVsdCcsIHRydWUpXG4gIH0pXG5cbiAgaXQoJ3Rocm93cyB3aGVuIGFsaWFzZXMgZG8gbm90IHNhdGlzZnkgcmVxdWlyZW1lbnRzIG9mIHRoZSBjb21wb25lbnQnLCAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmljZSA9IHNpbm9uLnNweSgpXG4gICAgc2VydmljZS5yZXF1aXJlcyA9IFsnc2VydmljZTpkdW1teScsICdhY3Rpb246ZHVtbXknXVxuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIHNlcnZpY2UpXG4gICAgfSkudG8udGhyb3coRnJhbWV3b3JrRXJyb3IsIC9NaXNzaW5nIGFsaWFzZXMgZm9yIGNvbXBvbmVudCBkdW1teS8pXG4gIH0pXG5cbiAgaXQoJ3Rocm93cyB3aGVuIGV4dHJhbmVvdXMgYWxpYXNlcyBhcmUgc3BlY2lmaWVkJywgKCkgPT4ge1xuICAgIGNvbnN0IHNlcnZpY2UgPSBzaW5vbi5zcHkoKVxuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIHNlcnZpY2UsIHsgYWxpYXNlczoge1xuICAgICAgICAnYWN0aW9uOmR1bW15JzogJ2R1bW15JyxcbiAgICAgIH0gfSlcbiAgICB9KS50by50aHJvdyhGcmFtZXdvcmtFcnJvciwgL1VubmVlZGVkIGFsaWFzZXMgZm9yIGNvbXBvbmVudCBkdW1teS8pXG4gIH0pXG5cbiAgaXQoJ3dvcmtzIHdoZW4gYWxsIHJlcXVpcmVtZW50cyBhcmUgc3BlY2lmaWVkJywgKCkgPT4ge1xuICAgIGNvbnN0IHNlcnZpY2UgPSBzaW5vbi5zcHkoKVxuICAgIHNlcnZpY2UucmVxdWlyZXMgPSBbJ3NlcnZpY2U6ZHVtbXknLCAnYWN0aW9uOmR1bW15J11cbiAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgYXRsYXMuc2VydmljZSgnZHVtbXknLCBzZXJ2aWNlLCB7IGFsaWFzZXM6IHtcbiAgICAgICAgJ3NlcnZpY2U6ZHVtbXknOiAnZHVtbXknLFxuICAgICAgICAnYWN0aW9uOmR1bW15JzogJ2R1bW15JyxcbiAgICAgIH0gfSlcbiAgICB9KS50by5ub3QudGhyb3coKVxuICB9KVxufSlcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNlcnZpY2UudGVzdC5tanMiXSwibmFtZXMiOlsiRHVtbXlTZXJ2aWNlIiwiU2VydmljZSIsImRlc2NyaWJlIiwiYXRsYXMiLCJvcHRpb25zIiwiYmVmb3JlRWFjaCIsInJvb3QiLCJfX2Rpcm5hbWUiLCJjb25maWciLCJzZXJ2aWNlcyIsImR1bW15IiwidGVzdCIsIkF0bGFzIiwiaXQiLCJleHBlY3QiLCJzZXJ2aWNlIiwidG8iLCJlcXVhbCIsInRocm93IiwiRnJhbWV3b3JrRXJyb3IiLCJzaW5vbiIsInNweSIsImFyZ3MiLCJnZXRDYWxsIiwiaGF2ZSIsInByb3BlcnR5IiwibG9nIiwiYmUiLCJhbiIsImNoaW5kaW5ncyIsIm1hdGNoIiwiY29tcG9uZW50IiwiYSIsImRlZmF1bHRzIiwiZGVmYXVsdCIsInJlcXVpcmVzIiwiYWxpYXNlcyIsImxvbCIsInR5cGUiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsInByb3BlcnRpZXMiLCJWYWxpZGF0aW9uRXJyb3IiLCJub3QiXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBQ0E7O0FBSUE7Ozs7QUFFQSxNQUFNQSxZQUFOLFNBQTJCQyxnQkFBM0IsQ0FBbUM7O0FBRW5DQyxTQUFTLGtCQUFULEVBQTZCLE1BQU07QUFDakMsTUFBSUMsS0FBSjtBQUNBLE1BQUlDLE9BQUo7QUFFQUMsYUFBVyxNQUFNO0FBQ2ZELGNBQVU7QUFDUkUsWUFBTUMsU0FERTtBQUVSQyxjQUFRO0FBQ05DLGtCQUFVO0FBQ1JDLGlCQUFPO0FBQ0xDLGtCQUFNO0FBREQ7QUFEQztBQURKO0FBRkEsS0FBVjtBQVVBUixZQUFRLElBQUlTLE9BQUosQ0FBVVIsT0FBVixDQUFSO0FBQ0QsR0FaRDtBQWNBUyxLQUFHLGNBQUgsRUFBbUIsTUFBTTtBQUN2QkMsV0FBT1gsTUFBTVksT0FBTixDQUFjLE9BQWQsRUFBdUJmLFlBQXZCLENBQVAsRUFBNkNnQixFQUE3QyxDQUFnREMsS0FBaEQsQ0FBc0RkLEtBQXREO0FBQ0QsR0FGRDtBQUlBVSxLQUFHLGdF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QUF1QkEsT0FBdkIsRUFBZ0M7QUFBRXFCLGlCQUFTO0FBQ3pDLDJCQUFpQixPQUR3QjtBQUV6QywwQkFBZ0I7QUFGeUI7QUFBWCxPQUFoQztBQUlELEtBTEQsRUFLR3BCLEVBTEgsQ0FLTTBCLEdBTE4sQ0FLVXhCLEtBTFY7QUFNRCxHQVZEO0FBV0QsQ0E3SUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdGxhcyB9IGZyb20gJy4uJ1xuaW1wb3J0IHtcbiAgRnJhbWV3b3JrRXJyb3IsXG4gIFZhbGlkYXRpb25FcnJvcixcbn0gZnJvbSAnQGF0bGFzLmpzL2Vycm9ycydcbmltcG9ydCBTZXJ2aWNlIGZyb20gJ0BhdGxhcy5qcy9zZXJ2aWNlJ1xuXG5jbGFzcyBEdW1teVNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHt9XG5cbmRlc2NyaWJlKCdBdGxhczo6c2VydmljZSgpJywgKCkgPT4ge1xuICBsZXQgYXRsYXNcbiAgbGV0IG9wdGlvbnNcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgcm9vdDogX19kaXJuYW1lLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIHNlcnZpY2VzOiB7XG4gICAgICAgICAgZHVtbXk6IHtcbiAgICAgICAgICAgIHRlc3Q6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuICAgIGF0bGFzID0gbmV3IEF0bGFzKG9wdGlvbnMpXG4gIH0pXG5cbiAgaXQoJ3JldHVybnMgdGhpcycsICgpID0+IHtcbiAgICBleHBlY3QoYXRsYXMuc2VydmljZSgnZHVtbXknLCBEdW1teVNlcnZpY2UpKS50by5lcXVhbChhdGxhcylcbiAgfSlcblxuICBpdCgndGhyb3dzIHdoZW4gdGhlIGFsaWFzIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBieSBhbm90aGVyIHNlcnZpY2UnLCAoKSA9PiB7XG4gICAgYXRsYXMuc2VydmljZSgnZHVtbXknLCBEdW1teVNlcnZpY2UpXG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlKSkudG8udGhyb3coRnJhbWV3b3JrRXJyb3IpXG4gIH0pXG5cbiAgaXQoJ3Rocm93cyB3aGVuIHRoZSBzZXJ2aWNlIGlzIG5vdCBhIGNsYXNzL2Z1bmN0aW9uJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIHt9KSkudG8udGhyb3coRnJhbWV3b3JrRXJyb3IpXG4gIH0pXG5cbiAgaXQoJ3Byb3ZpZGVzIHRoZSBhdGxhcyBvbiBzZXJ2aWNlIGNvbnN0cnVjdG9yIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgIGNvbnN0IHNlcnZpY2UgPSBzaW5vbi5zcHkoKVxuICAgIHNlcnZpY2UuY29uZmlnID0ge31cbiAgICBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIHNlcnZpY2UpXG4gICAgY29uc3QgYXJncyA9IHNlcnZpY2UuZ2V0Q2FsbCgwKS5hcmdzWzBdXG5cbiAgICBleHBlY3QoYXJncykudG8uaGF2ZS5wcm9wZXJ0eSgnYXRsYXMnKVxuICAgIGV4cGVjdChhcmdzLmF0bGFzKS50by5lcXVhbChhdGxhcylcbiAgfSlcblxuICBpdCgncHJvdmlkZXMgYSBsb2dnZXIgaW5zdGFuY2Ugb24gc2VydmljZSBjb25zdHJ1Y3RvciBhcmd1bWVudCcsICgpID0+IHtcbiAgICBjb25zdCBzZXJ2aWNlID0gc2lub24uc3B5KClcbiAgICBzZXJ2aWNlLmNvbmZpZyA9IHt9XG4gICAgYXRsYXMuc2VydmljZSgnZHVtbXknLCBzZXJ2aWNlKVxuICAgIGNvbnN0IGFyZ3MgPSBzZXJ2aWNlLmdldENhbGwoMCkuYXJnc1swXVxuXG4gICAgZXhwZWN0KGFyZ3MpLnRvLmhhdmUucHJvcGVydHkoJ2xvZycpXG4gICAgZXhwZWN0KGFyZ3MubG9nKS50by5iZS5hbignb2JqZWN0JylcbiAgICBleHBlY3QoYXJncy5sb2cuY2hpbmRpbmdzKS50by5tYXRjaCgvXCJzZXJ2aWNlXCI6XCJkdW1teVwiLylcbiAgfSlcblxuICBpdCgncHJvdmlkZXMgY29uZmlnIG9iamVjdCBvbiBzZXJ2aWNlIGNvbnN0cnVjdG9yIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgIGNvbnN0IHNlcnZpY2UgPSBzaW5vbi5zcHkoKVxuICAgIHNlcnZpY2UuY29uZmlnID0ge31cbiAgICBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIHNlcnZpY2UpXG4gICAgY29uc3QgYXJncyA9IHNlcnZpY2UuZ2V0Q2FsbCgwKS5hcmdzWzBdXG5cbiAgICBleHBlY3QoYXJncykudG8uaGF2ZS5wcm9wZXJ0eSgnY29uZmlnJylcbiAgICBleHBlY3QoYXJncy5jb25maWcpLnRvLmJlLmFuKCdvYmplY3QnKVxuICAgIGV4cGVjdChhcmdzLmNvbmZpZykudG8uZXF1YWwob3B0aW9ucy5jb25maWcuc2VydmljZXMuZHVtbXkpXG4gIH0pXG5cbiAgaXQoJ3Byb3ZpZGVzIHRoZSByZXNvbHZlIGZ1bmN0aW9uIG9uIHNlcnZpY2UgY29uc3RydWN0b3IgYXJndW1lbnQgYXMgYGNvbXBvbmVudGAnLCAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmljZSA9IHNpbm9uLnNweSgpXG4gICAgc2VydmljZS5jb25maWcgPSB7fVxuICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15Jywgc2VydmljZSlcbiAgICBjb25zdCBhcmdzID0gc2VydmljZS5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzKS50by5oYXZlLnByb3BlcnR5KCdjb21wb25lbnQnKVxuICAgIGV4cGVjdChhcmdzLmNvbXBvbmVudCkudG8uYmUuYSgnZnVuY3Rpb24nKVxuICB9KVxuXG4gIGl0KCdhcHBsaWVzIGRlZmF1bHRzIGRlZmluZWQgb24gc2VydmljZSBvbiB0b3Agb2YgdXNlci1wcm92aWRlZCBjb25maWcnLCAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmljZSA9IHNpbm9uLnNweSgpXG4gICAgc2VydmljZS5jb25maWcgPSB7fVxuICAgIHNlcnZpY2UuZGVmYXVsdHMgPSB7IGRlZmF1bHQ6IHRydWUgfVxuICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15Jywgc2VydmljZSlcbiAgICBjb25zdCBhcmdzID0gc2VydmljZS5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzLmNvbmZpZykudG8uaGF2ZS5wcm9wZXJ0eSgnZGVmYXVsdCcsIHRydWUpXG4gIH0pXG5cbiAgaXQoJ3Rocm93cyB3aGVuIGFsaWFzZXMgZG8gbm90IHNhdGlzZnkgcmVxdWlyZW1lbnRzIG9mIHRoZSBjb21wb25lbnQnLCAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmljZSA9IHNpbm9uLnNweSgpXG4gICAgc2VydmljZS5jb25maWcgPSB7fVxuICAgIHNlcnZpY2UucmVxdWlyZXMgPSBbJ3NlcnZpY2U6ZHVtbXknLCAnYWN0aW9uOmR1bW15J11cbiAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgYXRsYXMuc2VydmljZSgnZHVtbXknLCBzZXJ2aWNlKVxuICAgIH0pLnRvLnRocm93KEZyYW1ld29ya0Vycm9yLCAvTWlzc2luZyBhbGlhc2VzIGZvciBjb21wb25lbnQgZHVtbXkvKVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiBleHRyYW5lb3VzIGFsaWFzZXMgYXJlIHNwZWNpZmllZCcsICgpID0+IHtcbiAgICBjb25zdCBzZXJ2aWNlID0gc2lub24uc3B5KClcbiAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgYXRsYXMuc2VydmljZSgnZHVtbXknLCBzZXJ2aWNlLCB7IGFsaWFzZXM6IHtcbiAgICAgICAgJ2FjdGlvbjpkdW1teSc6ICdkdW1teScsXG4gICAgICB9IH0pXG4gICAgfSkudG8udGhyb3coRnJhbWV3b3JrRXJyb3IsIC9Vbm5lZWRlZCBhbGlhc2VzIGZvciBjb21wb25lbnQgZHVtbXkvKVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiB1c2VyIGNvbmZpZyBmYWlscyBjb21wb25lbnQgY29uZmlnIHNjaGVtYScsICgpID0+IHtcbiAgICBvcHRpb25zLmNvbmZpZy5zZXJ2aWNlcy5kdW1teSA9IHsgbG9sOiB0cnVlIH1cbiAgICBhdGxhcyA9IG5ldyBBdGxhcyhvcHRpb25zKVxuXG4gICAgY29uc3Qgc2VydmljZSA9IHNpbm9uLnNweSgpXG4gICAgc2VydmljZS5jb25maWcgPSB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdGVzdDogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLnNlcnZpY2UoJ2R1bW15Jywgc2VydmljZSkpLnRvLnRocm93KFZhbGlkYXRpb25FcnJvcilcbiAgfSlcblxuICBpdCgnd29ya3Mgd2hlbiB1c2VyIGNvbmZpZyBwYXNzZXMgY29tcG9uZW50IGNvbmZpZyBzY2hlbWEnLCAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmljZSA9IHNpbm9uLnNweSgpXG4gICAgc2VydmljZS5jb25maWcgPSB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdGVzdDogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLnNlcnZpY2UoJ2R1bW15Jywgc2VydmljZSkpLm5vdC50by50aHJvdyhWYWxpZGF0aW9uRXJyb3IpXG4gIH0pXG5cbiAgaXQoJ3dvcmtzIHdoZW4gYWxsIHJlcXVpcmVtZW50cyBhcmUgc3BlY2lmaWVkJywgKCkgPT4ge1xuICAgIGNvbnN0IHNlcnZpY2UgPSBzaW5vbi5zcHkoKVxuICAgIHNlcnZpY2UuY29uZmlnID0ge31cbiAgICBzZXJ2aWNlLnJlcXVpcmVzID0gWydzZXJ2aWNlOmR1bW15JywgJ2FjdGlvbjpkdW1teSddXG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15Jywgc2VydmljZSwgeyBhbGlhc2VzOiB7XG4gICAgICAgICdzZXJ2aWNlOmR1bW15JzogJ2R1bW15JyxcbiAgICAgICAgJ2FjdGlvbjpkdW1teSc6ICdkdW1teScsXG4gICAgICB9IH0pXG4gICAgfSkudG8ubm90LnRocm93KClcbiAgfSlcbn0pXG4iXX0=

@@ -11,2 +11,4 @@ "use strict";

class ServiceApi {}
class DummyService extends _service.default {}

@@ -16,2 +18,3 @@

DummyHook.observes = 'atlas';
describe('Atlas::start()', () => {

@@ -21,3 +24,3 @@ let atlas;

beforeEach(() => {
DummyService.prototype.prepare = sinon.stub().resolves();
DummyService.prototype.prepare = sinon.stub().resolves(new ServiceApi());
DummyService.prototype.start = sinon.stub().resolves();

@@ -41,3 +44,2 @@ DummyService.prototype.stop = sinon.stub().resolves();

atlas = new _.Atlas(options);
atlas.prepare = sinon.stub().resolves();
});

@@ -55,3 +57,4 @@ it('is async', () => {

});
it('calls atlas.prepare()', async () => {
it('calls atlas.prepare()', async function () {
this.sandbox.stub(atlas, 'prepare').resolves(atlas);
await atlas.start();

@@ -68,3 +71,4 @@ expect(atlas.prepare).to.have.callCount(1);

});
it('calls start with the instance returned from prepare() step', async () => {
it('calls start with the instance returned from prepare() step', async function () {
this.sandbox.stub(atlas, 'prepare').resolves(atlas);
const instance = {

@@ -96,3 +100,3 @@ test: true

});
describe('Hook interactions - dispatching events', () => {
describe('Hook interactions (observes = atlas)', () => {
const events = ['beforeStart', 'afterStart'];

@@ -123,4 +127,5 @@ beforeEach(() => {

it('can handle hooks which do not implement any listeners', async () => {
class Empty {}
class Empty extends _hook.default {}
Empty.observes = 'atlas';
atlas.hook('empty', Empty);

@@ -130,3 +135,84 @@ await atlas.start();

});
describe('Hook interactions (observes = component)', () => {
class ComponentHook extends _hook.default {}
ComponentHook.observes = 'service:dummy';
const events = ['beforeStart', 'afterStart'];
beforeEach(() => {
for (const event of events) {
ComponentHook.prototype[event] = sinon.stub().resolves();
}
atlas.service('dummy', DummyService);
atlas.hook('dummy', ComponentHook, {
aliases: {
'service:dummy': 'dummy'
}
});
});
it('calls the hooks with the component instance', async () => {
const proto = ComponentHook.prototype;
await atlas.start();
for (const event of events) {
expect(proto[event]).to.have.been.calledWith(atlas.services.dummy);
}
});
it('can handle hooks which do not implement any listeners', async () => {
class Empty extends _hook.default {}
Empty.observes = 'service:dummy';
atlas.hook('empty', Empty, {
aliases: {
'service:dummy': 'dummy'
}
});
await atlas.start();
});
});
describe('Hook execution order', () => {
class FirstService extends _service.default {}
class SecondService extends _service.default {}
class FirstHook extends _hook.default {}
FirstHook.observes = 'service:first';
class SecondHook extends _hook.default {}
SecondHook.observes = 'service:second';
beforeEach(() => {
FirstService.prototype.start = sinon.stub().resolves();
SecondService.prototype.start = sinon.stub().resolves();
FirstHook.prototype.beforeStart = sinon.stub().resolves();
FirstHook.prototype.afterStart = sinon.stub().resolves();
SecondHook.prototype.beforeStart = sinon.stub().resolves();
SecondHook.prototype.afterStart = sinon.stub().resolves();
atlas.service('first', FirstService);
atlas.service('second', SecondService);
atlas.hook('first', FirstHook, {
aliases: {
'service:first': 'first'
}
});
atlas.hook('second', SecondHook, {
aliases: {
'service:second': 'second'
}
});
});
it('groups the hook events together with the service it observes', async () => {
const order = [];
FirstHook.prototype.beforeStart.callsFake(() => void order.push('first:beforeStart'));
FirstService.prototype.start.callsFake(() => void order.push('first:start'));
FirstHook.prototype.afterStart.callsFake(() => void order.push('first:afterStart'));
SecondHook.prototype.beforeStart.callsFake(() => void order.push('second:beforeStart'));
SecondService.prototype.start.callsFake(() => void order.push('second:start'));
SecondHook.prototype.afterStart.callsFake(() => void order.push('second:afterStart'));
await atlas.start();
expect(order).to.have.ordered.members(['first:beforeStart', 'first:start', 'first:afterStart', 'second:beforeStart', 'second:start', 'second:afterStart']);
});
});
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0YXJ0LnRlc3QubWpzIl0sIm5hbWVzIjpbIkR1bW15U2VydmljZSIsIkR1bW15SG9vayIsImRlc2NyaWJlIiwiYXRsYXMiLCJvcHRpb25zIiwiYmVmb3JlRWFjaCIsInByb3RvdHlwZSIsInByZXBhcmUiLCJzaW5vbiIsInN0dWIiLCJyZXNvbHZlcyIsInN0YXJ0Iiwic3RvcCIsInJvb3QiLCJfX2Rpcm5hbWUiLCJjb25maWciLCJsb2ciLCJsZXZlbCIsInNlcnZpY2VzIiwiZHVtbXkiLCJ0ZXN0IiwiaXQiLCJleHBlY3QiLCJ0byIsImJlIiwiaW5zdGFuY2VvZiIsIlByb21pc2UiLCJlcXVhbCIsInN0YXJ0ZWQiLCJoYXZlIiwiY2FsbENvdW50Iiwic2VydmljZSIsImluc3RhbmNlIiwiYmVlbiIsImNhbGxlZFdpdGgiLCJyZWplY3RzIiwiRXJyb3IiLCJldmVudHVhbGx5IiwicmVqZWN0ZWRXaXRoIiwiRmFpbGluZ1NlcnZpY2UiLCJjYXRjaCIsImV2ZW50cyIsImV2ZW50IiwiaG9vayIsInByb3RvIiwiRW1wdHkiXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxZQUFOLDBCQUFtQzs7QUFFbkMsTUFBTUMsU0FBTix1QkFBNkI7O0FBRTdCQyxTQUFTLGdCQUFULEVBQTJCLE1BQU07QUFDL0IsTUFBSUMsS0FBSjtBQUNBLE1BQUlDLE9BQUo7QUFFQUMsYUFBVyxNQUFNO0FBQ2ZMLGlCQUFhTSxTQUFiLENBQXVCQyxPQUF2QixHQUFpQ0MsTUFBTUMsSUFBTixHQUFhQyxRQUFiLEVBQWpDO0FBQ0FWLGlCQUFhTSxTQUFiLENBQXVCSyxLQUF2QixHQUErQkgsTUFBTUMsSUFBTixHQUFhQyxRQUFiLEVBQS9CO0FBQ0FWLGlCQUFhTSxTQUFiLENBQXVCTSxJQUF2QixHQUE4QkosTUFBTUMsSUFBTixHQUFhQyxRQUFiLEVBQTlCO0FBRUFOLGNBQVU7QUFDUlMsWUFBTUMsU0FERTtBQUVSQyxjQUFRO0FBQ05aLGVBQU87QUFD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QUFNUSxLQUFOLEVBQU47O0FBRUEsV0FBSyxNQUFNK0IsS0FBWCxJQUFvQkQsTUFBcEIsRUFBNEI7QUFDMUJuQixlQUFPc0IsTUFBTUYsS0FBTixDQUFQLEVBQXFCbkIsRUFBckIsQ0FBd0JNLElBQXhCLENBQTZCSSxJQUE3QixDQUFrQ0MsVUFBbEMsQ0FBNkMvQixLQUE3QztBQUNEO0FBQ0YsS0FQRDtBQVNBa0IsT0FBRyx1REFBSCxFQUE0RCxZQUFZO0FBQ3RFLFlBQU13QixLQUFOLENBQVk7O0FBRVoxQyxZQUFNd0MsSUFBTixDQUFXLE9BQVgsRUFBb0JFLEtBQXBCO0FBRUEsWUFBTTFDLE1BQU1RLEtBQU4sRUFBTjtBQUNELEtBTkQ7QUFPRCxHQXhDRDtBQXlDRCxDQXhJRCIsImZpbGUiOiJzdGFydC50ZXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXRsYXMgfSBmcm9tICcuLidcbmltcG9ydCBTZXJ2aWNlIGZyb20gJ0BhdGxhcy5qcy9zZXJ2aWNlJ1xuaW1wb3J0IEhvb2sgZnJvbSAnQGF0bGFzLmpzL2hvb2snXG5cbmNsYXNzIER1bW15U2VydmljZSBleHRlbmRzIFNlcnZpY2Uge31cblxuY2xhc3MgRHVtbXlIb29rIGV4dGVuZHMgSG9vayB7fVxuXG5kZXNjcmliZSgnQXRsYXM6OnN0YXJ0KCknLCAoKSA9PiB7XG4gIGxldCBhdGxhc1xuICBsZXQgb3B0aW9uc1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIER1bW15U2VydmljZS5wcm90b3R5cGUucHJlcGFyZSA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpXG4gICAgRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdGFydCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpXG4gICAgRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdG9wID0gc2lub24uc3R1YigpLnJlc29sdmVzKClcblxuICAgIG9wdGlvbnMgPSB7XG4gICAgICByb290OiBfX2Rpcm5hbWUsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgYXRsYXM6IHtcbiAgICAgICAgICBsb2c6IHtcbiAgICAgICAgICAgIGxldmVsOiAnZmF0YWwnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNlcnZpY2VzOiB7XG4gICAgICAgICAgZHVtbXk6IHtcbiAgICAgICAgICAgIHRlc3Q6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuICAgIGF0bGFzID0gbmV3IEF0bGFzKG9wdGlvbnMpXG4gICAgYXRsYXMucHJlcGFyZSA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpXG4gIH0pXG5cblxuICBpdCgnaXMgYXN5bmMnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGF0bGFzLnN0YXJ0KCkpLnRvLmJlLmluc3RhbmNlb2YoUHJvbWlzZSlcbiAgfSlcblxuICBpdCgncmV0dXJucyB0aGlzJywgYXN5bmMgKCkgPT4ge1xuICAgIGV4cGVjdChhd2FpdCBhdGxhcy5zdGFydCgpKS50by5lcXVhbChhdGxhcylcbiAgfSlcblxuICBpdCgnc2V0cyBhdGxhcy5zdGFydGVkIHRvIHRydWUnLCBhc3luYyAoKSA9PiB7XG4gICAgZXhwZWN0KGF0bGFzLnN0YXJ0ZWQpLnRvLmVxdWFsKGZhbHNlKVxuICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcbiAgICBleHBlY3QoYXRsYXMuc3RhcnRlZCkudG8uZXF1YWwodHJ1ZSlcbiAgfSlcblxuICBpdCgnY2FsbHMgYXRsYXMucHJlcGFyZSgpJywgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcbiAgICBleHBlY3QoYXRsYXMucHJlcGFyZSkudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgfSlcblxuXG4gIGRlc2NyaWJlKCdTZXJ2aWNlIGludGVyYWN0aW9ucycsICgpID0+IHtcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlKVxuICAgIH0pXG5cblxuICAgIGl0KCdjYWxscyBzdGFydCBvbiB0aGUgc2VydmljZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcbiAgICAgIGV4cGVjdChEdW1teVNlcnZpY2UucHJvdG90eXBlLnN0YXJ0KS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgIH0pXG5cbiAgICBpdCgnY2FsbHMgc3RhcnQgd2l0aCB0aGUgaW5zdGFuY2UgcmV0dXJuZWQgZnJvbSBwcmVwYXJlKCkgc3RlcCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0geyB0ZXN0OiB0cnVlIH1cbiAgICAgIGF0bGFzLnNlcnZpY2VzLmR1bW15ID0gaW5zdGFuY2VcbiAgICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcblxuICAgICAgZXhwZWN0KER1bW15U2VydmljZS5wcm90b3R5cGUuc3RhcnQpLnRvLmhhdmUuYmVlbi5jYWxsZWRXaXRoKGluc3RhbmNlKVxuICAgIH0pXG5cbiAgICBpdCgnY2FsbHMgdGhlIG1ldGhvZCBvbmx5IG9uY2UgZm9yIGVhY2ggc2VydmljZSBmb3IgbXVsdGlwbGUgLnN0YXJ0KCkgY2FsbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG4gICAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG5cbiAgICAgIGV4cGVjdChEdW1teVNlcnZpY2UucHJvdG90eXBlLnN0YXJ0KS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgIH0pXG5cbiAgICBpdCgncmUtdGhyb3dzIGNvbXBvbmVudCBlcnJvcnMgdGhyb3duIGR1cmluZyAuc3RhcnQoKScsICgpID0+IHtcbiAgICAgIER1bW15U2VydmljZS5wcm90b3R5cGUuc3RhcnQucmVqZWN0cyhuZXcgRXJyb3IoJ2ZhaWwhJykpXG5cbiAgICAgIHJldHVybiBleHBlY3QoYXRsYXMuc3RhcnQoKSkudG8uZXZlbnR1YWxseS5iZS5yZWplY3RlZFdpdGgoL2ZhaWwhLylcbiAgICB9KVxuXG4gICAgaXQoJ3N0b3BzIGFscmVhZHkgc3RhcnRlZCBzZXJ2aWNlIGlmIG9uZSBvZiB0aGUgY29tcG9uZW50cyBmYWlscyB0byBzdGFydCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNsYXNzIEZhaWxpbmdTZXJ2aWNlIGV4dGVuZHMgU2VydmljZSB7fVxuICAgICAgc2lub24uc3R1YihGYWlsaW5nU2VydmljZS5wcm90b3R5cGUsICdzdGFydCcpLnJlamVjdHMobmV3IEVycm9yKCdmYWlsIScpKVxuICAgICAgYXRsYXMuc2VydmljZSgnZmFpbGluZy1zZXJ2aWNlJywgRmFpbGluZ1NlcnZpY2UpXG5cbiAgICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcbiAgICAgICAgLmNhdGNoKCgpID0+IHt9KVxuXG4gICAgICBleHBlY3QoRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdGFydCkudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICAgIGV4cGVjdChEdW1teVNlcnZpY2UucHJvdG90eXBlLnN0b3ApLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gICAgfSlcbiAgfSlcblxuXG4gIGRlc2NyaWJlKCdIb29rIGludGVyYWN0aW9ucyAtIGRpc3BhdGNoaW5nIGV2ZW50cycsICgpID0+IHtcbiAgICBjb25zdCBldmVudHMgPSBbXG4gICAgICAnYmVmb3JlU3RhcnQnLFxuICAgICAgJ2FmdGVyU3RhcnQnLFxuICAgIF1cblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgLy8gU3R1YiBvdXQgYWxsIHRoZSBldmVudCBoYW5kbGVyc1xuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgRHVtbXlIb29rLnByb3RvdHlwZVtldmVudF0gPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoKVxuICAgICAgfVxuXG4gICAgICBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIER1bW15U2VydmljZSlcbiAgICAgIGF0bGFzLmhvb2soJ2R1bW15JywgRHVtbXlIb29rKVxuICAgIH0pXG5cbiAgICBpdCgnY2FsbHMgdGhlIHN0YXJ0IGhvb2tzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuXG4gICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuICAgICAgICBleHBlY3QoRHVtbXlIb29rLnByb3RvdHlwZVtldmVudF0pLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGl0KCdjYWxscyB0aGUgaG9va3Mgd2l0aCB0aGUgYXRsYXMgaW5zdGFuY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwcm90byA9IER1bW15SG9vay5wcm90b3R5cGVcbiAgICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcblxuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgZXhwZWN0KHByb3RvW2V2ZW50XSkudG8uaGF2ZS5iZWVuLmNhbGxlZFdpdGgoYXRsYXMpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGl0KCdjYW4gaGFuZGxlIGhvb2tzIHdoaWNoIGRvIG5vdCBpbXBsZW1lbnQgYW55IGxpc3RlbmVycycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNsYXNzIEVtcHR5IHt9XG5cbiAgICAgIGF0bGFzLmhvb2soJ2VtcHR5JywgRW1wdHkpXG4gICAgICAvLyBUaGlzIG5vdCB0aHJvd2luZyB3aWxsIHN1ZmZpY2Ug8J+YjlxuICAgICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuICAgIH0pXG4gIH0pXG59KVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0YXJ0LnRlc3QubWpzIl0sIm5hbWVzIjpbIlNlcnZpY2VBcGkiLCJEdW1teVNlcnZpY2UiLCJTZXJ2aWNlIiwiRHVtbXlIb29rIiwiSG9vayIsIm9ic2VydmVzIiwiZGVzY3JpYmUiLCJhdGxhcyIsIm9wdGlvbnMiLCJiZWZvcmVFYWNoIiwicHJvdG90eXBlIiwicHJlcGFyZSIsInNpbm9uIiwic3R1YiIsInJlc29sdmVzIiwic3RhcnQiLCJzdG9wIiwicm9vdCIsIl9fZGlybmFtZSIsImNvbmZpZyIsImxvZyIsImxldmVsIiwic2VydmljZXMiLCJkdW1teSIsInRlc3QiLCJBdGxhcyIsIml0IiwiZXhwZWN0IiwidG8iLCJiZSIsImluc3RhbmNlb2YiLCJQcm9taXNlIiwiZXF1YWwiLCJzdGFydGVkIiwic2FuZGJveCIsImhhdmUiLCJjYWxsQ291bnQiLCJzZXJ2aWNlIiwiaW5zdGFuY2UiLCJiZWVuIiwiY2FsbGVkV2l0aCIsInJlamVjdHMiLCJFcnJvciIsImV2ZW50dWFsbHkiLCJyZWplY3RlZFdpdGgiLCJGYWlsaW5nU2VydmljZSIsImNhdGNoIiwiZXZlbnRzIiwiZXZlbnQiLCJob29rIiwicHJvdG8iLCJFbXB0eSIsIkNvbXBvbmVudEhvb2siLCJhbGlhc2VzIiwiRmlyc3RTZXJ2aWNlIiwiU2Vjb25kU2VydmljZSIsIkZpcnN0SG9vayIsIlNlY29uZEhvb2siLCJiZWZvcmVTdGFydCIsImFmdGVyU3RhcnQiLCJvcmRlciIsImNhbGxzRmFrZSIsInB1c2giLCJvcmRlcmVkIiwibWVtYmVycyJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7QUFDQTs7QUFDQTs7OztBQUVBLE1BQU1BLFVBQU4sQ0FBaUI7O0FBRWpCLE1BQU1DLFlBQU4sU0FBMkJDLGdCQUEzQixDQUFtQzs7QUFFbkMsTUFBTUMsU0FBTixTQUF3QkMsYUFBeEIsQ0FBNkI7O0FBQXZCRCxTLENBQ0dFLFEsR0FBVyxPO0FBR3BCQyxTQUFTLGdCQUFULEVBQTJCLE1BQU07QUFDL0IsTUFBSUMs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Y2UgZnJvbSAnQGF0bGFzLmpzL3NlcnZpY2UnXG5pbXBvcnQgSG9vayBmcm9tICdAYXRsYXMuanMvaG9vaydcblxuY2xhc3MgU2VydmljZUFwaSB7fVxuXG5jbGFzcyBEdW1teVNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHt9XG5cbmNsYXNzIER1bW15SG9vayBleHRlbmRzIEhvb2sge1xuICBzdGF0aWMgb2JzZXJ2ZXMgPSAnYXRsYXMnXG59XG5cbmRlc2NyaWJlKCdBdGxhczo6c3RhcnQoKScsICgpID0+IHtcbiAgbGV0IGF0bGFzXG4gIGxldCBvcHRpb25zXG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5wcmVwYXJlID0gc2lub24uc3R1YigpLnJlc29sdmVzKG5ldyBTZXJ2aWNlQXBpKCkpXG4gICAgRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdGFydCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpXG4gICAgRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdG9wID0gc2lub24uc3R1YigpLnJlc29sdmVzKClcblxuICAgIG9wdGlvbnMgPSB7XG4gICAgICByb290OiBfX2Rpcm5hbWUsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgYXRsYXM6IHtcbiAgICAgICAgICBsb2c6IHtcbiAgICAgICAgICAgIGxldmVsOiAnZmF0YWwnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNlcnZpY2VzOiB7XG4gICAgICAgICAgZHVtbXk6IHtcbiAgICAgICAgICAgIHRlc3Q6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuICAgIGF0bGFzID0gbmV3IEF0bGFzKG9wdGlvbnMpXG4gIH0pXG5cblxuICBpdCgnaXMgYXN5bmMnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGF0bGFzLnN0YXJ0KCkpLnRvLmJlLmluc3RhbmNlb2YoUHJvbWlzZSlcbiAgfSlcblxuICBpdCgncmV0dXJucyB0aGlzJywgYXN5bmMgKCkgPT4ge1xuICAgIGV4cGVjdChhd2FpdCBhdGxhcy5zdGFydCgpKS50by5lcXVhbChhdGxhcylcbiAgfSlcblxuICBpdCgnc2V0cyBhdGxhcy5zdGFydGVkIHRvIHRydWUnLCBhc3luYyAoKSA9PiB7XG4gICAgZXhwZWN0KGF0bGFzLnN0YXJ0ZWQpLnRvLmVxdWFsKGZhbHNlKVxuICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcbiAgICBleHBlY3QoYXRsYXMuc3RhcnRlZCkudG8uZXF1YWwodHJ1ZSlcbiAgfSlcblxuICBpdCgnY2FsbHMgYXRsYXMucHJlcGFyZSgpJywgYXN5bmMgZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zYW5kYm94LnN0dWIoYXRsYXMsICdwcmVwYXJlJykucmVzb2x2ZXMoYXRsYXMpXG4gICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuXG4gICAgZXhwZWN0KGF0bGFzLnByZXBhcmUpLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gIH0pXG5cblxuICBkZXNjcmliZSgnU2VydmljZSBpbnRlcmFjdGlvbnMnLCAoKSA9PiB7XG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIER1bW15U2VydmljZSlcbiAgICB9KVxuXG5cbiAgICBpdCgnY2FsbHMgc3RhcnQgb24gdGhlIHNlcnZpY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG4gICAgICBleHBlY3QoRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdGFydCkudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICB9KVxuXG4gICAgaXQoJ2NhbGxzIHN0YXJ0IHdpdGggdGhlIGluc3RhbmNlIHJldHVybmVkIGZyb20gcHJlcGFyZSgpIHN0ZXAnLCBhc3luYyBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuc2FuZGJveC5zdHViKGF0bGFzLCAncHJlcGFyZScpLnJlc29sdmVzKGF0bGFzKVxuXG4gICAgICBjb25zdCBpbnN0YW5jZSA9IHsgdGVzdDogdHJ1ZSB9XG4gICAgICBhdGxhcy5zZXJ2aWNlcy5kdW1teSA9IGluc3RhbmNlXG4gICAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG5cbiAgICAgIGV4cGVjdChEdW1teVNlcnZpY2UucHJvdG90eXBlLnN0YXJ0KS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aChpbnN0YW5jZSlcbiAgICB9KVxuXG4gICAgaXQoJ2NhbGxzIHRoZSBtZXRob2Qgb25seSBvbmNlIGZvciBlYWNoIHNlcnZpY2UgZm9yIG11bHRpcGxlIC5zdGFydCgpIGNhbGxzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuICAgICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuXG4gICAgICBleHBlY3QoRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdGFydCkudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICB9KVxuXG4gICAgaXQoJ3JlLXRocm93cyBjb21wb25lbnQgZXJyb3JzIHRocm93biBkdXJpbmcgLnN0YXJ0KCknLCAoKSA9PiB7XG4gICAgICBEdW1teVNlcnZpY2UucHJvdG90eXBlLnN0YXJ0LnJlamVjdHMobmV3IEVycm9yKCdmYWlsIScpKVxuXG4gICAgICByZXR1cm4gZXhwZWN0KGF0bGFzLnN0YXJ0KCkpLnRvLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWRXaXRoKC9mYWlsIS8pXG4gICAgfSlcblxuICAgIGl0KCdzdG9wcyBhbHJlYWR5IHN0YXJ0ZWQgc2VydmljZSBpZiBvbmUgb2YgdGhlIGNvbXBvbmVudHMgZmFpbHMgdG8gc3RhcnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjbGFzcyBGYWlsaW5nU2VydmljZSBleHRlbmRzIFNlcnZpY2Uge31cbiAgICAgIHNpbm9uLnN0dWIoRmFpbGluZ1NlcnZpY2UucHJvdG90eXBlLCAnc3RhcnQnKS5yZWplY3RzKG5ldyBFcnJvcignZmFpbCEnKSlcbiAgICAgIGF0bGFzLnNlcnZpY2UoJ2ZhaWxpbmctc2VydmljZScsIEZhaWxpbmdTZXJ2aWNlKVxuXG4gICAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG4gICAgICAgIC5jYXRjaCgoKSA9PiB7fSlcblxuICAgICAgZXhwZWN0KER1bW15U2VydmljZS5wcm90b3R5cGUuc3RhcnQpLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gICAgICBleHBlY3QoRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdG9wKS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgIH0pXG4gIH0pXG5cblxuICBkZXNjcmliZSgnSG9vayBpbnRlcmFjdGlvbnMgKG9ic2VydmVzID0gYXRsYXMpJywgKCkgPT4ge1xuICAgIGNvbnN0IGV2ZW50cyA9IFtcbiAgICAgICdiZWZvcmVTdGFydCcsXG4gICAgICAnYWZ0ZXJTdGFydCcsXG4gICAgXVxuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAvLyBTdHViIG91dCBhbGwgdGhlIGV2ZW50IGhhbmRsZXJzXG4gICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuICAgICAgICBEdW1teUhvb2sucHJvdG90eXBlW2V2ZW50XSA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpXG4gICAgICB9XG5cbiAgICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlKVxuICAgICAgYXRsYXMuaG9vaygnZHVtbXknLCBEdW1teUhvb2spXG4gICAgfSlcblxuICAgIGl0KCdjYWxscyB0aGUgc3RhcnQgaG9va3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG5cbiAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgICAgIGV4cGVjdChEdW1teUhvb2sucHJvdG90eXBlW2V2ZW50XSkudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgaXQoJ2NhbGxzIHRoZSBob29rcyB3aXRoIHRoZSBhdGxhcyBpbnN0YW5jZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3RvID0gRHVtbXlIb29rLnByb3RvdHlwZVxuICAgICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuXG4gICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuICAgICAgICBleHBlY3QocHJvdG9bZXZlbnRdKS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aChhdGxhcylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgaXQoJ2NhbiBoYW5kbGUgaG9va3Mgd2hpY2ggZG8gbm90IGltcGxlbWVudCBhbnkgbGlzdGVuZXJzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY2xhc3MgRW1wdHkgZXh0ZW5kcyBIb29rIHtcbiAgICAgICAgc3RhdGljIG9ic2VydmVzID0gJ2F0bGFzJ1xuICAgICAgfVxuXG4gICAgICBhdGxhcy5ob29rKCdlbXB0eScsIEVtcHR5KVxuICAgICAgLy8gVGhpcyBub3QgdGhyb3dpbmcgd2lsbCBzdWZmaWNlIPCfmI5cbiAgICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcbiAgICB9KVxuICB9KVxuXG5cbiAgZGVzY3JpYmUoJ0hvb2sgaW50ZXJhY3Rpb25zIChvYnNlcnZlcyA9IGNvbXBvbmVudCknLCAoKSA9PiB7XG4gICAgY2xhc3MgQ29tcG9uZW50SG9vayBleHRlbmRzIEhvb2sge1xuICAgICAgc3RhdGljIG9ic2VydmVzID0gJ3NlcnZpY2U6ZHVtbXknXG4gICAgfVxuXG4gICAgY29uc3QgZXZlbnRzID0gW1xuICAgICAgJ2JlZm9yZVN0YXJ0JyxcbiAgICAgICdhZnRlclN0YXJ0JyxcbiAgICBdXG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgICAgIENvbXBvbmVudEhvb2sucHJvdG90eXBlW2V2ZW50XSA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpXG4gICAgICB9XG5cbiAgICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlKVxuICAgICAgYXRsYXMuaG9vaygnZHVtbXknLCBDb21wb25lbnRIb29rLCB7IGFsaWFzZXM6IHsgJ3NlcnZpY2U6ZHVtbXknOiAnZHVtbXknIH0gfSlcbiAgICB9KVxuXG5cbiAgICBpdCgnY2FsbHMgdGhlIGhvb2tzIHdpdGggdGhlIGNvbXBvbmVudCBpbnN0YW5jZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3RvID0gQ29tcG9uZW50SG9vay5wcm90b3R5cGVcbiAgICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcblxuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgZXhwZWN0KHByb3RvW2V2ZW50XSkudG8uaGF2ZS5iZWVuLmNhbGxlZFdpdGgoYXRsYXMuc2VydmljZXMuZHVtbXkpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGl0KCdjYW4gaGFuZGxlIGhvb2tzIHdoaWNoIGRvIG5vdCBpbXBsZW1lbnQgYW55IGxpc3RlbmVycycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNsYXNzIEVtcHR5IGV4dGVuZHMgSG9vayB7XG4gICAgICAgIHN0YXRpYyBvYnNlcnZlcyA9ICdzZXJ2aWNlOmR1bW15J1xuICAgICAgfVxuXG4gICAgICBhdGxhcy5ob29rKCdlbXB0eScsIEVtcHR5LCB7IGFsaWFzZXM6IHsgJ3NlcnZpY2U6ZHVtbXknOiAnZHVtbXknIH0gfSlcbiAgICAgIC8vIFRoaXMgbm90IHRocm93aW5nIHdpbGwgc3VmZmljZSDwn5iOXG4gICAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG4gICAgfSlcbiAgfSlcblxuXG4gIGRlc2NyaWJlKCdIb29rIGV4ZWN1dGlvbiBvcmRlcicsICgpID0+IHtcbiAgICBjbGFzcyBGaXJzdFNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHt9XG5cbiAgICBjbGFzcyBTZWNvbmRTZXJ2aWNlIGV4dGVuZHMgU2VydmljZSB7fVxuXG4gICAgY2xhc3MgRmlyc3RIb29rIGV4dGVuZHMgSG9vayB7XG4gICAgICBzdGF0aWMgb2JzZXJ2ZXMgPSAnc2VydmljZTpmaXJzdCdcbiAgICB9XG5cbiAgICBjbGFzcyBTZWNvbmRIb29rIGV4dGVuZHMgSG9vayB7XG4gICAgICBzdGF0aWMgb2JzZXJ2ZXMgPSAnc2VydmljZTpzZWNvbmQnXG4gICAgfVxuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBGaXJzdFNlcnZpY2UucHJvdG90eXBlLnN0YXJ0ID0gc2lub24uc3R1YigpLnJlc29sdmVzKClcbiAgICAgIFNlY29uZFNlcnZpY2UucHJvdG90eXBlLnN0YXJ0ID0gc2lub24uc3R1YigpLnJlc29sdmVzKClcbiAgICAgIEZpcnN0SG9vay5wcm90b3R5cGUuYmVmb3JlU3RhcnQgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoKVxuICAgICAgRmlyc3RIb29rLnByb3RvdHlwZS5hZnRlclN0YXJ0ID0gc2lub24uc3R1YigpLnJlc29sdmVzKClcbiAgICAgIFNlY29uZEhvb2sucHJvdG90eXBlLmJlZm9yZVN0YXJ0ID0gc2lub24uc3R1YigpLnJlc29sdmVzKClcbiAgICAgIFNlY29uZEhvb2sucHJvdG90eXBlLmFmdGVyU3RhcnQgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoKVxuXG4gICAgICBhdGxhcy5zZXJ2aWNlKCdmaXJzdCcsIEZpcnN0U2VydmljZSlcbiAgICAgIGF0bGFzLnNlcnZpY2UoJ3NlY29uZCcsIFNlY29uZFNlcnZpY2UpXG4gICAgICBhdGxhcy5ob29rKCdmaXJzdCcsIEZpcnN0SG9vaywgeyBhbGlhc2VzOiB7ICdzZXJ2aWNlOmZpcnN0JzogJ2ZpcnN0JyB9IH0pXG4gICAgICBhdGxhcy5ob29rKCdzZWNvbmQnLCBTZWNvbmRIb29rLCB7IGFsaWFzZXM6IHsgJ3NlcnZpY2U6c2Vjb25kJzogJ3NlY29uZCcgfSB9KVxuICAgIH0pXG5cblxuICAgIGl0KCdncm91cHMgdGhlIGhvb2sgZXZlbnRzIHRvZ2V0aGVyIHdpdGggdGhlIHNlcnZpY2UgaXQgb2JzZXJ2ZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBvcmRlciA9IFtdXG5cbiAgICAgIEZpcnN0SG9vay5wcm90b3R5cGUuYmVmb3JlU3RhcnQuY2FsbHNGYWtlKCgpID0+IHZvaWQgb3JkZXIucHVzaCgnZmlyc3Q6YmVmb3JlU3RhcnQnKSlcbiAgICAgIEZpcnN0U2VydmljZS5wcm90b3R5cGUuc3RhcnQuY2FsbHNGYWtlKCgpID0+IHZvaWQgb3JkZXIucHVzaCgnZmlyc3Q6c3RhcnQnKSlcbiAgICAgIEZpcnN0SG9vay5wcm90b3R5cGUuYWZ0ZXJTdGFydC5jYWxsc0Zha2UoKCkgPT4gdm9pZCBvcmRlci5wdXNoKCdmaXJzdDphZnRlclN0YXJ0JykpXG4gICAgICBTZWNvbmRIb29rLnByb3RvdHlwZS5iZWZvcmVTdGFydC5jYWxsc0Zha2UoKCkgPT4gdm9pZCBvcmRlci5wdXNoKCdzZWNvbmQ6YmVmb3JlU3RhcnQnKSlcbiAgICAgIFNlY29uZFNlcnZpY2UucHJvdG90eXBlLnN0YXJ0LmNhbGxzRmFrZSgoKSA9PiB2b2lkIG9yZGVyLnB1c2goJ3NlY29uZDpzdGFydCcpKVxuICAgICAgU2Vjb25kSG9vay5wcm90b3R5cGUuYWZ0ZXJTdGFydC5jYWxsc0Zha2UoKCkgPT4gdm9pZCBvcmRlci5wdXNoKCdzZWNvbmQ6YWZ0ZXJTdGFydCcpKVxuXG4gICAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG5cbiAgICAgIGV4cGVjdChvcmRlcikudG8uaGF2ZS5vcmRlcmVkLm1lbWJlcnMoW1xuICAgICAgICAnZmlyc3Q6YmVmb3JlU3RhcnQnLFxuICAgICAgICAnZmlyc3Q6c3RhcnQnLFxuICAgICAgICAnZmlyc3Q6YWZ0ZXJTdGFydCcsXG4gICAgICAgICdzZWNvbmQ6YmVmb3JlU3RhcnQnLFxuICAgICAgICAnc2Vjb25kOnN0YXJ0JyxcbiAgICAgICAgJ3NlY29uZDphZnRlclN0YXJ0JyxcbiAgICAgIF0pXG4gICAgfSlcbiAgfSlcbn0pXG4iXX0=

@@ -9,10 +9,15 @@ "use strict";

var _action = _interopRequireDefault(require("@atlas.js/action"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class ServiceApi {}
class DummyService extends _service.default {}
class DummyAction {}
class DummyAction extends _action.default {}
class DummyHook extends _hook.default {}
DummyHook.observes = 'atlas';
describe('Atlas::stop()', () => {

@@ -22,3 +27,3 @@ let atlas;

beforeEach(() => {
DummyService.prototype.prepare = sinon.stub().resolves();
DummyService.prototype.prepare = sinon.stub().resolves(new ServiceApi());
DummyService.prototype.stop = sinon.stub().resolves();

@@ -105,3 +110,3 @@ options = {

});
describe('Service interactions - dispatching events', () => {
describe('Hook interactions (observes = atlas)', () => {
const events = ['beforeStop', 'afterStop'];

@@ -133,2 +138,33 @@ beforeEach(() => {

});
describe('Hook interactions (observes = component)', () => {
class ComponentHook extends _hook.default {}
ComponentHook.observes = 'service:dummy';
const events = ['beforeStop', 'afterStop'];
beforeEach(() => {
for (const event of events) {
ComponentHook.prototype[event] = sinon.stub().resolves();
}
atlas = new _.Atlas(options);
atlas.service('dummy', DummyService);
atlas.hook('dummy', ComponentHook, {
aliases: {
'service:dummy': 'dummy'
}
});
return atlas.start();
});
it('calls the beforeStop hook with the component instance', async () => {
const service = atlas.services.dummy;
const proto = ComponentHook.prototype;
await atlas.stop();
expect(proto.beforeStop).to.have.been.calledWith(service);
});
it('calls the afterStop hook with null', async () => {
const proto = ComponentHook.prototype;
await atlas.stop();
expect(proto.afterStop).to.have.been.calledWith(null);
});
});
describe('Action interactions', () => {

@@ -142,2 +178,2 @@ it('removes the action from this.actions', async () => {

});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0b3AudGVzdC5tanMiXSwibmFtZXMiOlsiRHVtbXlTZXJ2aWNlIiwiRHVtbXlBY3Rpb24iLCJEdW1teUhvb2siLCJkZXNjcmliZSIsImF0bGFzIiwib3B0aW9ucyIsImJlZm9yZUVhY2giLCJwcm90b3R5cGUiLCJwcmVwYXJlIiwic2lub24iLCJzdHViIiwicmVzb2x2ZXMiLCJzdG9wIiwicm9vdCIsIl9fZGlybmFtZSIsImNvbmZpZyIsImxvZyIsImxldmVsIiwic2VydmljZXMiLCJkdW1teSIsInRlc3QiLCJob29rcyIsInNlcnZpY2UiLCJhY3Rpb24iLCJob29rIiwic3RhcnQiLCJpdCIsImV4cGVjdCIsInRvIiwiYmUiLCJpbnN0YW5jZW9mIiwiUHJvbWlzZSIsImVxdWFsIiwic3RhcnRlZCIsInByZXBhcmVkIiwiaGF2ZSIsImNhbGxDb3VudCIsImluc3RhbmNlIiwiYmVlbiIsImNhbGxlZFdpdGgiLCJwcm9wZXJ0eSIsIm5vdCIsInJlamVjdHMiLCJFcnJvciIsImV2ZW50dWFsbHkiLCJyZWplY3RlZFdpdGgiLCJGYWlsaW5nU2VydmljZSIsImNhdGNoIiwiZXZlbnRzIiwiZXZlbnQiLCJwcm90byIsImJlZm9yZVN0b3AiLCJhcmdzIiwiYWZ0ZXJTdG9wIiwibGFzdENhbGwiLCJsZW5ndGgiLCJhY3Rpb25zIl0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQUNBOzs7O0FBRUEsTUFBTUEsWUFBTiwwQkFBbUM7O0FBRW5DLE1BQU1DLFdBQU4sQ0FBa0I7O0FBRWxCLE1BQU1DLFNBQU4sdUJBQTZCOztBQUU3QkMsU0FBUyxlQUFULEVBQTBCLE1BQU07QUFDOUIsTUFBSUMsS0FBSjtBQUNBLE1BQUlDLE9BQUo7QUFFQUMsYUFBVyxNQUFNO0FBQ2ZOLGlCQUFhTyxTQUFiLENBQXVCQyxPQUF2QixHQUFpQ0MsTUFBTUMsSUFBTixHQUFhQyxRQUFiLEVBQWpDO0FBQ0FYLGlCQUFhTyxTQUFiLENBQXVCSyxJQUF2QixHQUE4QkgsTUFBTUMsSUFBTixH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c0NBQUgsRUFBMkMsWUFBWTtBQUVyREMsYUFBT3ZCLE1BQU1vRCxPQUFiLEVBQXNCNUIsRUFBdEIsQ0FBeUJPLElBQXpCLENBQThCSyxRQUE5QixDQUF1QyxPQUF2QztBQUVBLFlBQU1wQyxNQUFNUSxJQUFOLEVBQU47QUFDQWUsYUFBT3ZCLE1BQU1vRCxPQUFiLEVBQXNCNUIsRUFBdEIsQ0FBeUJhLEdBQXpCLENBQTZCTixJQUE3QixDQUFrQ0ssUUFBbEMsQ0FBMkMsT0FBM0M7QUFDRCxLQU5EO0FBT0QsR0FSRDtBQVNELENBM0pEIiwiZmlsZSI6InN0b3AudGVzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0bGFzIH0gZnJvbSAnLi4nXG5pbXBvcnQgU2VydmljZSBmcm9tICdAYXRsYXMuanMvc2VydmljZSdcbmltcG9ydCBIb29rIGZyb20gJ0BhdGxhcy5qcy9ob29rJ1xuXG5jbGFzcyBEdW1teVNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHt9XG5cbmNsYXNzIER1bW15QWN0aW9uIHt9XG5cbmNsYXNzIER1bW15SG9vayBleHRlbmRzIEhvb2sge31cblxuZGVzY3JpYmUoJ0F0bGFzOjpzdG9wKCknLCAoKSA9PiB7XG4gIGxldCBhdGxhc1xuICBsZXQgb3B0aW9uc1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIER1bW15U2VydmljZS5wcm90b3R5cGUucHJlcGFyZSA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpXG4gICAgRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdG9wID0gc2lub24uc3R1YigpLnJlc29sdmVzKClcblxuICAgIG9wdGlvbnMgPSB7XG4gICAgICByb290OiBfX2Rpcm5hbWUsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgYXRsYXM6IHtcbiAgICAgICAgICBsb2c6IHtcbiAgICAgICAgICAgIGxldmVsOiAnZmF0YWwnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNlcnZpY2VzOiB7XG4gICAgICAgICAgZHVtbXk6IHtcbiAgICAgICAgICAgIHRlc3Q6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgaG9va3M6IHtcbiAgICAgICAgICBkdW1teToge1xuICAgICAgICAgICAgdGVzdDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XG4gICAgYXRsYXMgPSBuZXcgQXRsYXMob3B0aW9ucylcbiAgICBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIER1bW15U2VydmljZSlcbiAgICBhdGxhcy5hY3Rpb24oJ2R1bW15JywgRHVtbXlBY3Rpb24pXG4gICAgYXRsYXMuaG9vaygnZHVtbXknLCBEdW1teUhvb2spXG5cbiAgICByZXR1cm4gYXRsYXMuc3RhcnQoKVxuICB9KVxuXG5cbiAgaXQoJ2lzIGFzeW5jJywgKCkgPT4ge1xuICAgIGV4cGVjdChhdGxhcy5zdG9wKCkpLnRvLmJlLmluc3RhbmNlb2YoUHJvbWlzZSlcbiAgfSlcblxuICBpdCgncmV0dXJucyB0aGlzJywgYXN5bmMgKCkgPT4ge1xuICAgIGV4cGVjdChhd2FpdCBhdGxhcy5zdG9wKCkpLnRvLmVxdWFsKGF0bGFzKVxuICB9KVxuXG4gIGl0KCdzZXRzIGF0bGFzLnN0YXJ0ZWQgYW5kIGF0bGFzLnByZXBhcmVkIHRvIGZhbHNlJywgYXN5bmMgKCkgPT4ge1xuICAgIGV4cGVjdChhdGxhcy5zdGFydGVkKS50by5lcXVhbCh0cnVlKVxuICAgIGV4cGVjdChhdGxhcy5wcmVwYXJlZCkudG8uZXF1YWwodHJ1ZSlcbiAgICBhd2FpdCBhdGxhcy5zdG9wKClcbiAgICBleHBlY3QoYXRsYXMuc3RhcnRlZCkudG8uZXF1YWwoZmFsc2UpXG4gICAgZXhwZWN0KGF0bGFzLnByZXBhcmVkKS50by5lcXVhbChmYWxzZSlcbiAgfSlcblxuXG4gIGRlc2NyaWJlKCdTZXJ2aWNlIGludGVyYWN0aW9ucycsICgpID0+IHtcbiAgICBpdCgnY2FsbHMgc3RvcCBvbiB0aGUgc2VydmljZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGF0bGFzLnN0b3AoKVxuICAgICAgZXhwZWN0KER1bW15U2VydmljZS5wcm90b3R5cGUuc3RvcCkudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICB9KVxuXG4gICAgaXQoJ3Bhc3NlcyB0aGUgZXhwb3NlZCBpbnN0YW5jZSB0byB0aGUgc3RvcCgpIG1ldGhvZCBvbiB0aGUgc2VydmljZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0geyB0ZXN0OiB0cnVlIH1cbiAgICAgIER1bW15U2VydmljZS5wcm90b3R5cGUucHJlcGFyZS5yZXNvbHZlcyhpbnN0YW5jZSlcblxuICAgICAgYXRsYXMgPSBuZXcgQXRsYXMob3B0aW9ucylcbiAgICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlKVxuXG4gICAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG4gICAgICBhd2FpdCBhdGxhcy5zdG9wKClcblxuICAgICAgZXhwZWN0KER1bW15U2VydmljZS5wcm90b3R5cGUuc3RvcCkudG8uaGF2ZS5iZWVuLmNhbGxlZFdpdGgoaW5zdGFuY2UpXG4gICAgfSlcblxuICAgIGl0KCdjYWxscyB0aGUgbWV0aG9kIG9ubHkgb25jZSBmb3IgZWFjaCBzZXJ2aWNlIGZvciBtdWx0aXBsZSAuc3RvcCgpIGNhbGxzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYXRsYXMuc3RvcCgpXG4gICAgICBhd2FpdCBhdGxhcy5zdG9wKClcblxuICAgICAgZXhwZWN0KER1bW15U2VydmljZS5wcm90b3R5cGUuc3RvcCkudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICB9KVxuXG4gICAgaXQoJ3JlbW92ZXMgZ2V0dGVycyBmb3Igc2VydmljZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBleHBlY3QoYXRsYXMuc2VydmljZXMpLnRvLmhhdmUucHJvcGVydHkoJ2R1bW15JylcbiAgICAgIGF3YWl0IGF0bGFzLnN0b3AoKVxuICAgICAgZXhwZWN0KGF0bGFzLnNlcnZpY2VzKS50by5ub3QuaGF2ZS5wcm9wZXJ0eSgnZHVtbXknKVxuICAgIH0pXG5cbiAgICBpdCgncmUtdGhyb3dzIGNvbXBvbmVudCBlcnJvcnMgdGhyb3duIGR1cmluZyAuc3RvcCgpJywgKCkgPT4ge1xuICAgICAgRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdG9wLnJlamVjdHMobmV3IEVycm9yKCdmYWlsIScpKVxuXG4gICAgICByZXR1cm4gZXhwZWN0KGF0bGFzLnN0b3AoKSkudG8uZXZlbnR1YWxseS5iZS5yZWplY3RlZFdpdGgoL2ZhaWwhLylcbiAgICB9KVxuXG4gICAgaXQoJ3N0b3BzIHRoZSBvdGhlciBzZXJ2aWNlcyBpZiBvbmUgb2YgdGhlIHNlcnZpY2VzIHRocm93cyBkdXJpbmcgLnN0b3AoKScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNsYXNzIEZhaWxpbmdTZXJ2aWNlIGV4dGVuZHMgU2VydmljZSB7fVxuICAgICAgc2lub24uc3R1YihGYWlsaW5nU2VydmljZS5wcm90b3R5cGUsICdzdG9wJykucmVqZWN0cyhuZXcgRXJyb3IoJ2ZhaWwhJykpXG4gICAgICBhdGxhcy5zZXJ2aWNlKCdmYWlsaW5nLXNlcnZpY2UnLCBGYWlsaW5nU2VydmljZSlcblxuICAgICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuICAgICAgYXdhaXQgYXRsYXMuc3RvcCgpXG4gICAgICAgIC5jYXRjaCgoKSA9PiB7fSlcblxuICAgICAgZXhwZWN0KEZhaWxpbmdTZXJ2aWNlLnByb3RvdHlwZS5zdG9wKS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgICAgZXhwZWN0KER1bW15U2VydmljZS5wcm90b3R5cGUuc3RvcCkudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICB9KVxuICB9KVxuXG5cbiAgZGVzY3JpYmUoJ1NlcnZpY2UgaW50ZXJhY3Rpb25zIC0gZGlzcGF0Y2hpbmcgZXZlbnRzJywgKCkgPT4ge1xuICAgIGNvbnN0IGV2ZW50cyA9IFtcbiAgICAgICdiZWZvcmVTdG9wJyxcbiAgICAgICdhZnRlclN0b3AnLFxuICAgIF1cblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgLy8gU3R1YiBvdXQgYWxsIHRoZSBldmVudCBoYW5kbGVyc1xuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgRHVtbXlIb29rLnByb3RvdHlwZVtldmVudF0gPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpdCgnY2FsbHMgdGhlIHN0b3AgaG9va3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhdGxhcy5zdG9wKClcblxuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgZXhwZWN0KER1bW15SG9vay5wcm90b3R5cGVbZXZlbnRdKS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpdCgnY2FsbHMgdGhlIGJlZm9yZVN0b3AgaG9vayB3aXRoIHRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3RvID0gRHVtbXlIb29rLnByb3RvdHlwZVxuICAgICAgYXdhaXQgYXRsYXMuc3RvcCgpXG5cbiAgICAgIGV4cGVjdChwcm90by5iZWZvcmVTdG9wKS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aChhdGxhcylcbiAgICB9KVxuXG4gICAgaXQoJ2NhbGxzIHRoZSBhZnRlclN0b3AgaG9vayB3aXRoIG51bGwnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwcm90byA9IER1bW15SG9vay5wcm90b3R5cGVcbiAgICAgIGF3YWl0IGF0bGFzLnN0b3AoKVxuICAgICAgY29uc3QgYXJncyA9IHByb3RvLmFmdGVyU3RvcC5sYXN0Q2FsbC5hcmdzXG5cbiAgICAgIGV4cGVjdChhcmdzKS50by5oYXZlLmxlbmd0aCgxKVxuICAgICAgZXhwZWN0KGFyZ3NbMF0pLnRvLmVxdWFsKG51bGwpXG4gICAgfSlcbiAgfSlcblxuXG4gIGRlc2NyaWJlKCdBY3Rpb24gaW50ZXJhY3Rpb25zJywgKCkgPT4ge1xuICAgIGl0KCdyZW1vdmVzIHRoZSBhY3Rpb24gZnJvbSB0aGlzLmFjdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBTYW5pdHkgY2hlY2tcbiAgICAgIGV4cGVjdChhdGxhcy5hY3Rpb25zKS50by5oYXZlLnByb3BlcnR5KCdkdW1teScpXG5cbiAgICAgIGF3YWl0IGF0bGFzLnN0b3AoKVxuICAgICAgZXhwZWN0KGF0bGFzLmFjdGlvbnMpLnRvLm5vdC5oYXZlLnByb3BlcnR5KCdkdW1teScpXG4gICAgfSlcbiAgfSlcbn0pXG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0b3AudGVzdC5tanMiXSwibmFtZXMiOlsiU2VydmljZUFwaSIsIkR1bW15U2VydmljZSIsIlNlcnZpY2UiLCJEdW1teUFjdGlvbiIsIkFjdGlvbiIsIkR1bW15SG9vayIsIkhvb2siLCJvYnNlcnZlcyIsImRlc2NyaWJlIiwiYXRsYXMiLCJvcHRpb25zIiwiYmVmb3JlRWFjaCIsInByb3RvdHlwZSIsInByZXBhcmUiLCJzaW5vbiIsInN0dWIiLCJyZXNvbHZlcyIsInN0b3AiLCJyb290IiwiX19kaXJuYW1lIiwiY29uZmlnIiwibG9nIiwibGV2ZWwiLCJzZXJ2aWNlcyIsImR1bW15IiwidGVzdCIsImhvb2tzIiwiQXRsYXMiLCJzZXJ2aWNlIiwiYWN0aW9uIiwiaG9vayIsInN0YXJ0IiwiaXQiLCJleHBlY3QiLCJ0byIsImJlIiwiaW5zdGFuY2VvZiIsIlByb21pc2UiLCJlcXVhbCIsInN0YXJ0ZWQiLCJwcmVwYXJlZCIsImhhdmUiLCJjYWxsQ291bnQiLCJpbnN0YW5jZSIsImJlZW4iLCJjYWxsZWRXaXRoIiwicHJvcGVydHkiLCJub3QiLCJyZWplY3RzIiwiRXJyb3IiLCJldmVudHVhbGx5IiwicmVqZWN0ZWRXaXRoIiwiRmFpbGluZ1NlcnZpY2UiLCJjYXRjaCIsImV2ZW50cyIsImV2ZW50IiwicHJvdG8iLCJiZWZvcmVTdG9wIiwiYXJncyIsImFmdGVyU3RvcCIsImxhc3RDYWxsIiwibGVuZ3RoIiwiQ29tcG9uZW50SG9vayIsImFsaWFzZXMiLCJhY3Rpb25zIl0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsTUFBTUEsVUFBTixDQUFpQjs7QUFFakIsTUFBTUMsWUFBTixTQUEyQkMsZ0JBQTNCLENBQW1DOztBQUVuQyxNQUFNQyxXQUFOLFNBQTBCQyxlQUExQixDQUFpQzs7QUFFakMsTUFBTUMsU0FBTixTQUF3QkMsYUFBeEIsQ0FBNkI7O0FBQXZCRCxTLENBQ0dFLFEsR0FBVyxPO0FBR3BCQyxTQUFTLGVBQVQs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VUFBdEMsQ0FBaURqQixPQUFqRDtBQUNELEtBTkQ7QUFRQUksT0FBRyxvQ0FBSCxFQUF5QyxZQUFZO0FBQ25ELFlBQU13QixRQUFRTSxjQUFjbEQsU0FBNUI7QUFDQSxZQUFNSCxNQUFNUSxJQUFOLEVBQU47QUFFQWdCLGFBQU91QixNQUFNRyxTQUFiLEVBQXdCekIsRUFBeEIsQ0FBMkJPLElBQTNCLENBQWdDRyxJQUFoQyxDQUFxQ0MsVUFBckMsQ0FBZ0QsSUFBaEQ7QUFDRCxLQUxEO0FBTUQsR0FyQ0Q7QUF3Q0FyQyxXQUFTLHFCQUFULEVBQWdDLE1BQU07QUFDcEN3QixPQUFHLHNDQUFILEVBQTJDLFlBQVk7QUFFckRDLGFBQU94QixNQUFNdUQsT0FBYixFQUFzQjlCLEVBQXRCLENBQXlCTyxJQUF6QixDQUE4QkssUUFBOUIsQ0FBdUMsT0FBdkM7QUFFQSxZQUFNckMsTUFBTVEsSUFBTixFQUFOO0FBQ0FnQixhQUFPeEIsTUFBTXVELE9BQWIsRUFBc0I5QixFQUF0QixDQUF5QmEsR0FBekIsQ0FBNkJOLElBQTdCLENBQWtDSyxRQUFsQyxDQUEyQyxPQUEzQztBQUNELEtBTkQ7QUFPRCxHQVJEO0FBU0QsQ0FuTUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdGxhcyB9IGZyb20gJy4uJ1xuaW1wb3J0IFNlcnZpY2UgZnJvbSAnQGF0bGFzLmpzL3NlcnZpY2UnXG5pbXBvcnQgSG9vayBmcm9tICdAYXRsYXMuanMvaG9vaydcbmltcG9ydCBBY3Rpb24gZnJvbSAnQGF0bGFzLmpzL2FjdGlvbidcblxuY2xhc3MgU2VydmljZUFwaSB7fVxuXG5jbGFzcyBEdW1teVNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHt9XG5cbmNsYXNzIER1bW15QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHt9XG5cbmNsYXNzIER1bW15SG9vayBleHRlbmRzIEhvb2sge1xuICBzdGF0aWMgb2JzZXJ2ZXMgPSAnYXRsYXMnXG59XG5cbmRlc2NyaWJlKCdBdGxhczo6c3RvcCgpJywgKCkgPT4ge1xuICBsZXQgYXRsYXNcbiAgbGV0IG9wdGlvbnNcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBEdW1teVNlcnZpY2UucHJvdG90eXBlLnByZXBhcmUgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMobmV3IFNlcnZpY2VBcGkoKSlcbiAgICBEdW1teVNlcnZpY2UucHJvdG90eXBlLnN0b3AgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoKVxuXG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIHJvb3Q6IF9fZGlybmFtZSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBhdGxhczoge1xuICAgICAgICAgIGxvZzoge1xuICAgICAgICAgICAgbGV2ZWw6ICdmYXRhbCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc2VydmljZXM6IHtcbiAgICAgICAgICBkdW1teToge1xuICAgICAgICAgICAgdGVzdDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBob29rczoge1xuICAgICAgICAgIGR1bW15OiB7XG4gICAgICAgICAgICB0ZXN0OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cbiAgICBhdGxhcyA9IG5ldyBBdGxhcyhvcHRpb25zKVxuICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlKVxuICAgIGF0bGFzLmFjdGlvbignZHVtbXknLCBEdW1teUFjdGlvbilcbiAgICBhdGxhcy5ob29rKCdkdW1teScsIER1bW15SG9vaylcblxuICAgIHJldHVybiBhdGxhcy5zdGFydCgpXG4gIH0pXG5cblxuICBpdCgnaXMgYXN5bmMnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGF0bGFzLnN0b3AoKSkudG8uYmUuaW5zdGFuY2VvZihQcm9taXNlKVxuICB9KVxuXG4gIGl0KCdyZXR1cm5zIHRoaXMnLCBhc3luYyAoKSA9PiB7XG4gICAgZXhwZWN0KGF3YWl0IGF0bGFzLnN0b3AoKSkudG8uZXF1YWwoYXRsYXMpXG4gIH0pXG5cbiAgaXQoJ3NldHMgYXRsYXMuc3RhcnRlZCBhbmQgYXRsYXMucHJlcGFyZWQgdG8gZmFsc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgZXhwZWN0KGF0bGFzLnN0YXJ0ZWQpLnRvLmVxdWFsKHRydWUpXG4gICAgZXhwZWN0KGF0bGFzLnByZXBhcmVkKS50by5lcXVhbCh0cnVlKVxuICAgIGF3YWl0IGF0bGFzLnN0b3AoKVxuICAgIGV4cGVjdChhdGxhcy5zdGFydGVkKS50by5lcXVhbChmYWxzZSlcbiAgICBleHBlY3QoYXRsYXMucHJlcGFyZWQpLnRvLmVxdWFsKGZhbHNlKVxuICB9KVxuXG5cbiAgZGVzY3JpYmUoJ1NlcnZpY2UgaW50ZXJhY3Rpb25zJywgKCkgPT4ge1xuICAgIGl0KCdjYWxscyBzdG9wIG9uIHRoZSBzZXJ2aWNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYXRsYXMuc3RvcCgpXG4gICAgICBleHBlY3QoRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdG9wKS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgIH0pXG5cbiAgICBpdCgncGFzc2VzIHRoZSBleHBvc2VkIGluc3RhbmNlIHRvIHRoZSBzdG9wKCkgbWV0aG9kIG9uIHRoZSBzZXJ2aWNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSB7IHRlc3Q6IHRydWUgfVxuICAgICAgRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5wcmVwYXJlLnJlc29sdmVzKGluc3RhbmNlKVxuXG4gICAgICBhdGxhcyA9IG5ldyBBdGxhcyhvcHRpb25zKVxuICAgICAgYXRsYXMuc2VydmljZSgnZHVtbXknLCBEdW1teVNlcnZpY2UpXG5cbiAgICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcbiAgICAgIGF3YWl0IGF0bGFzLnN0b3AoKVxuXG4gICAgICBleHBlY3QoRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdG9wKS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aChpbnN0YW5jZSlcbiAgICB9KVxuXG4gICAgaXQoJ2NhbGxzIHRoZSBtZXRob2Qgb25seSBvbmNlIGZvciBlYWNoIHNlcnZpY2UgZm9yIG11bHRpcGxlIC5zdG9wKCkgY2FsbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhdGxhcy5zdG9wKClcbiAgICAgIGF3YWl0IGF0bGFzLnN0b3AoKVxuXG4gICAgICBleHBlY3QoRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdG9wKS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgIH0pXG5cbiAgICBpdCgncmVtb3ZlcyBnZXR0ZXJzIGZvciBzZXJ2aWNlcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGV4cGVjdChhdGxhcy5zZXJ2aWNlcykudG8uaGF2ZS5wcm9wZXJ0eSgnZHVtbXknKVxuICAgICAgYXdhaXQgYXRsYXMuc3RvcCgpXG4gICAgICBleHBlY3QoYXRsYXMuc2VydmljZXMpLnRvLm5vdC5oYXZlLnByb3BlcnR5KCdkdW1teScpXG4gICAgfSlcblxuICAgIGl0KCdyZS10aHJvd3MgY29tcG9uZW50IGVycm9ycyB0aHJvd24gZHVyaW5nIC5zdG9wKCknLCAoKSA9PiB7XG4gICAgICBEdW1teVNlcnZpY2UucHJvdG90eXBlLnN0b3AucmVqZWN0cyhuZXcgRXJyb3IoJ2ZhaWwhJykpXG5cbiAgICAgIHJldHVybiBleHBlY3QoYXRsYXMuc3RvcCgpKS50by5ldmVudHVhbGx5LmJlLnJlamVjdGVkV2l0aCgvZmFpbCEvKVxuICAgIH0pXG5cbiAgICBpdCgnc3RvcHMgdGhlIG90aGVyIHNlcnZpY2VzIGlmIG9uZSBvZiB0aGUgc2VydmljZXMgdGhyb3dzIGR1cmluZyAuc3RvcCgpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY2xhc3MgRmFpbGluZ1NlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHt9XG4gICAgICBzaW5vbi5zdHViKEZhaWxpbmdTZXJ2aWNlLnByb3RvdHlwZSwgJ3N0b3AnKS5yZWplY3RzKG5ldyBFcnJvcignZmFpbCEnKSlcbiAgICAgIGF0bGFzLnNlcnZpY2UoJ2ZhaWxpbmctc2VydmljZScsIEZhaWxpbmdTZXJ2aWNlKVxuXG4gICAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG4gICAgICBhd2FpdCBhdGxhcy5zdG9wKClcbiAgICAgICAgLmNhdGNoKCgpID0+IHt9KVxuXG4gICAgICBleHBlY3QoRmFpbGluZ1NlcnZpY2UucHJvdG90eXBlLnN0b3ApLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gICAgICBleHBlY3QoRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdG9wKS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgIH0pXG4gIH0pXG5cblxuICBkZXNjcmliZSgnSG9vayBpbnRlcmFjdGlvbnMgKG9ic2VydmVzID0gYXRsYXMpJywgKCkgPT4ge1xuICAgIGNvbnN0IGV2ZW50cyA9IFtcbiAgICAgICdiZWZvcmVTdG9wJyxcbiAgICAgICdhZnRlclN0b3AnLFxuICAgIF1cblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgLy8gU3R1YiBvdXQgYWxsIHRoZSBldmVudCBoYW5kbGVyc1xuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgRHVtbXlIb29rLnByb3RvdHlwZVtldmVudF0gPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpdCgnY2FsbHMgdGhlIHN0b3AgaG9va3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhdGxhcy5zdG9wKClcblxuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgZXhwZWN0KER1bW15SG9vay5wcm90b3R5cGVbZXZlbnRdKS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpdCgnY2FsbHMgdGhlIGJlZm9yZVN0b3AgaG9vayB3aXRoIHRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3RvID0gRHVtbXlIb29rLnByb3RvdHlwZVxuICAgICAgYXdhaXQgYXRsYXMuc3RvcCgpXG5cbiAgICAgIGV4cGVjdChwcm90by5iZWZvcmVTdG9wKS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aChhdGxhcylcbiAgICB9KVxuXG4gICAgaXQoJ2NhbGxzIHRoZSBhZnRlclN0b3AgaG9vayB3aXRoIG51bGwnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwcm90byA9IER1bW15SG9vay5wcm90b3R5cGVcbiAgICAgIGF3YWl0IGF0bGFzLnN0b3AoKVxuICAgICAgY29uc3QgYXJncyA9IHByb3RvLmFmdGVyU3RvcC5sYXN0Q2FsbC5hcmdzXG5cbiAgICAgIGV4cGVjdChhcmdzKS50by5oYXZlLmxlbmd0aCgxKVxuICAgICAgZXhwZWN0KGFyZ3NbMF0pLnRvLmVxdWFsKG51bGwpXG4gICAgfSlcbiAgfSlcblxuXG4gIGRlc2NyaWJlKCdIb29rIGludGVyYWN0aW9ucyAob2JzZXJ2ZXMgPSBjb21wb25lbnQpJywgKCkgPT4ge1xuICAgIGNsYXNzIENvbXBvbmVudEhvb2sgZXh0ZW5kcyBIb29rIHtcbiAgICAgIHN0YXRpYyBvYnNlcnZlcyA9ICdzZXJ2aWNlOmR1bW15J1xuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50cyA9IFtcbiAgICAgICdiZWZvcmVTdG9wJyxcbiAgICAgICdhZnRlclN0b3AnLFxuICAgIF1cblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgLy8gU3R1YiBvdXQgYWxsIHRoZSBldmVudCBoYW5kbGVyc1xuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgQ29tcG9uZW50SG9vay5wcm90b3R5cGVbZXZlbnRdID0gc2lub24uc3R1YigpLnJlc29sdmVzKClcbiAgICAgIH1cblxuICAgICAgYXRsYXMgPSBuZXcgQXRsYXMob3B0aW9ucylcbiAgICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlKVxuICAgICAgYXRsYXMuaG9vaygnZHVtbXknLCBDb21wb25lbnRIb29rLCB7IGFsaWFzZXM6IHsgJ3NlcnZpY2U6ZHVtbXknOiAnZHVtbXknIH0gfSlcblxuICAgICAgcmV0dXJuIGF0bGFzLnN0YXJ0KClcbiAgICB9KVxuXG4gICAgaXQoJ2NhbGxzIHRoZSBiZWZvcmVTdG9wIGhvb2sgd2l0aCB0aGUgY29tcG9uZW50IGluc3RhbmNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VydmljZSA9IGF0bGFzLnNlcnZpY2VzLmR1bW15XG4gICAgICBjb25zdCBwcm90byA9IENvbXBvbmVudEhvb2sucHJvdG90eXBlXG4gICAgICBhd2FpdCBhdGxhcy5zdG9wKClcblxuICAgICAgZXhwZWN0KHByb3RvLmJlZm9yZVN0b3ApLnRvLmhhdmUuYmVlbi5jYWxsZWRXaXRoKHNlcnZpY2UpXG4gICAgfSlcblxuICAgIGl0KCdjYWxscyB0aGUgYWZ0ZXJTdG9wIGhvb2sgd2l0aCBudWxsJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvdG8gPSBDb21wb25lbnRIb29rLnByb3RvdHlwZVxuICAgICAgYXdhaXQgYXRsYXMuc3RvcCgpXG5cbiAgICAgIGV4cGVjdChwcm90by5hZnRlclN0b3ApLnRvLmhhdmUuYmVlbi5jYWxsZWRXaXRoKG51bGwpXG4gICAgfSlcbiAgfSlcblxuXG4gIGRlc2NyaWJlKCdBY3Rpb24gaW50ZXJhY3Rpb25zJywgKCkgPT4ge1xuICAgIGl0KCdyZW1vdmVzIHRoZSBhY3Rpb24gZnJvbSB0aGlzLmFjdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBTYW5pdHkgY2hlY2tcbiAgICAgIGV4cGVjdChhdGxhcy5hY3Rpb25zKS50by5oYXZlLnByb3BlcnR5KCdkdW1teScpXG5cbiAgICAgIGF3YWl0IGF0bGFzLnN0b3AoKVxuICAgICAgZXhwZWN0KGF0bGFzLmFjdGlvbnMpLnRvLm5vdC5oYXZlLnByb3BlcnR5KCdkdW1teScpXG4gICAgfSlcbiAgfSlcbn0pXG4iXX0=

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc