@decaf-ts/injectable-decorators 1.6.3 → 1.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getInjectKey = void 0;
3
4
  exports.injectable = injectable;
4
5
  exports.inject = inject;
5
6
  const constants_1 = require("./constants.cjs");
@@ -14,59 +15,21 @@ const utils_1 = require("./utils.cjs");
14
15
  * @memberOf module:injectable-decorators
15
16
  */
16
17
  const getInjectKey = (key) => constants_1.InjectablesKeys.REFLECT + key;
17
- /**
18
- * @description Decorator that marks a class as available for dependency injection.
19
- * @summary Defines a class as an injectable singleton that can be retrieved from the registry.
20
- * When applied to a class, replaces its constructor with one that returns a singleton instance.
21
- *
22
- * @param {string} [category] Defaults to the class name. Useful when minification occurs and names are changed,
23
- * or when you want to upcast the object to a different type.
24
- * @param {boolean} [force] Defines if the injectable should override an already existing instance (if any).
25
- * Only meant for extending decorators.
26
- * @param {Function} [instanceCallback] Optional callback function that will be called with the instance after creation.
27
- * @return {Function} A decorator function that transforms the class into an injectable.
28
- *
29
- * @function injectable
30
- * @category Class Decorators
31
- *
32
- * @mermaid
33
- * sequenceDiagram
34
- * participant Client
35
- * participant Decorator
36
- * participant Injectables
37
- *
38
- * Client->>Decorator: @injectable()
39
- * Decorator->>Decorator: Create new constructor
40
- *
41
- * Note over Decorator: When new instance requested
42
- * Decorator->>Injectables: get(name)
43
- * alt Instance exists
44
- * Injectables-->>Decorator: Return existing instance
45
- * else No instance
46
- * Decorator->>Injectables: register(original, name)
47
- * Decorator->>Injectables: get(name)
48
- * Injectables-->>Decorator: Return new instance
49
- * opt Has callback
50
- * Decorator->>Decorator: Call instanceCallback
51
- * end
52
- * end
53
- * Decorator->>Decorator: Define metadata
54
- * Decorator-->>Client: Return instance
55
- */
56
- function injectable(category = undefined, force = false, instanceCallback) {
57
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
58
- return (original, propertyKey) => {
18
+ exports.getInjectKey = getInjectKey;
19
+ function injectable(name, cb) {
20
+ const category = typeof name === "string" ? name : undefined;
21
+ const instanceCallback = (typeof category === "function" ? category : cb);
22
+ return (original) => {
23
+ const symbol = Symbol.for(category || original.toString());
59
24
  const name = category || original.name;
25
+ const metadata = {
26
+ class: name,
27
+ symbol: symbol,
28
+ };
29
+ Reflect.defineMetadata((0, exports.getInjectKey)(constants_1.InjectablesKeys.INJECTABLE), metadata, original);
60
30
  // the new constructor behaviour
61
31
  const newConstructor = function (...args) {
62
- const inj = Injectables_1.Injectables.get(name, ...args);
63
- if (!inj)
64
- return undefined;
65
- const metadata = Object.assign({}, {
66
- class: name,
67
- });
68
- Reflect.defineMetadata(getInjectKey(constants_1.InjectablesKeys.INJECTABLE), metadata, inj.constructor);
69
- return inj;
32
+ return Injectables_1.Injectables.get(symbol, ...args);
70
33
  };
71
34
  // copy prototype so instanceof operator still works
72
35
  newConstructor.prototype = original.prototype;
@@ -78,7 +41,12 @@ function injectable(category = undefined, force = false, instanceCallback) {
78
41
  configurable: false,
79
42
  value: original.prototype.constructor.name,
80
43
  });
81
- Injectables_1.Injectables.register(newConstructor, name, true, force);
44
+ const opts = {
45
+ singleton: true,
46
+ callback: instanceCallback,
47
+ };
48
+ Reflect.defineMetadata((0, exports.getInjectKey)(constants_1.InjectablesKeys.INJECTABLE), metadata, newConstructor);
49
+ Injectables_1.Injectables.register(original, symbol, opts);
82
50
  // return new constructor (will override original)
83
51
  return newConstructor;
84
52
  };
@@ -145,10 +113,15 @@ function injectable(category = undefined, force = false, instanceCallback) {
145
113
  function inject(category, transformer) {
146
114
  return (target, propertyKey) => {
147
115
  const values = new WeakMap();
148
- const name = category || (0, utils_1.getTypeFromDecorator)(target, propertyKey);
149
- if (!name)
116
+ const name = category
117
+ ? typeof category === "symbol"
118
+ ? category
119
+ : Symbol.for(category.toString())
120
+ : (0, utils_1.getTypeFromDecorator)(target, propertyKey);
121
+ if (!name) {
150
122
  throw new Error(`Could not get Type from decorator`);
151
- Reflect.defineMetadata(getInjectKey(constants_1.InjectablesKeys.INJECT), {
123
+ }
124
+ Reflect.defineMetadata((0, exports.getInjectKey)(constants_1.InjectablesKeys.INJECT), {
152
125
  injectable: name,
153
126
  }, target, propertyKey);
154
127
  Object.defineProperty(target, propertyKey, {
@@ -164,7 +137,7 @@ function inject(category, transformer) {
164
137
  if (!obj) {
165
138
  obj = Injectables_1.Injectables.get(name);
166
139
  if (!obj)
167
- throw new Error(`Could not get Injectable ${name} to inject in ${target.constructor ? target.constructor.name : target.name}'s ${propertyKey}`);
140
+ throw new Error(`Could not get Injectable ${name.toString()} to inject in ${target.constructor ? target.constructor.name : target.name}'s ${propertyKey}`);
168
141
  if (transformer)
169
142
  try {
170
143
  obj = transformer(obj, target);
@@ -183,4 +156,4 @@ function inject(category, transformer) {
183
156
  });
184
157
  };
185
158
  }
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBcURBLGdDQTRDQztBQXlFRCx3QkFvREM7QUE5TkQsK0NBQThDO0FBQzlDLG1EQUE0QztBQUM1Qyx1Q0FBK0M7QUFFL0M7Ozs7Ozs7R0FPRztBQUNILE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQywyQkFBZSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFFcEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0NHO0FBQ0gsU0FBZ0IsVUFBVSxDQUN4QixXQUErQixTQUFTLEVBQ3hDLFFBQWlCLEtBQUssRUFDdEIsZ0JBQTBEO0lBRTFELDZEQUE2RDtJQUM3RCxPQUFPLENBQUMsUUFBYSxFQUFFLFdBQWlCLEVBQUUsRUFBRTtRQUMxQyxNQUFNLElBQUksR0FBRyxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QyxnQ0FBZ0M7UUFDaEMsTUFBTSxjQUFjLEdBQVEsVUFBVSxHQUFHLElBQVc7WUFDbEQsTUFBTSxHQUFHLEdBQVEseUJBQVcsQ0FBQyxHQUFHLENBQU0sSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLEdBQUc7Z0JBQUUsT0FBTyxTQUFTLENBQUM7WUFFM0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FDNUIsRUFBRSxFQUNGO2dCQUNFLEtBQUssRUFBRSxJQUFJO2FBQ1osQ0FDRixDQUFDO1lBRUYsT0FBTyxDQUFDLGNBQWMsQ0FDcEIsWUFBWSxDQUFDLDJCQUFlLENBQUMsVUFBVSxDQUFDLEVBQ3hDLFFBQVEsRUFDUixHQUFHLENBQUMsV0FBVyxDQUNoQixDQUFDO1lBRUYsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUM7UUFFRixvREFBb0Q7UUFDcEQsY0FBYyxDQUFD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dXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGVzS2V5cyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgSW5qZWN0YWJsZXMgfSBmcm9tIFwiLi9JbmplY3RhYmxlc1wiO1xuaW1wb3J0IHsgZ2V0VHlwZUZyb21EZWNvcmF0b3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBHZW5lcmF0ZXMgYSBmdWxseSBxdWFsaWZpZWQgcmVmbGVjdGlvbiBtZXRhZGF0YSBrZXkuXG4gKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSByZWZsZWN0aW9uIGtleSBmb3IgaW5qZWN0YWJsZXMgYnkgcHJlZml4aW5nIHRoZSBwcm92aWRlZCBrZXkgd2l0aCB0aGUgYmFzZSByZWZsZWN0aW9uIGtleS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSB0byBiZSBwcmVmaXhlZFxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgZnVsbHkgcXVhbGlmaWVkIHJlZmxlY3Rpb24ga2V5XG4gKiBAZnVuY3Rpb24gZ2V0SW5qZWN0S2V5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmluamVjdGFibGUtZGVjb3JhdG9yc1xuICovXG5jb25zdCBnZXRJbmplY3RLZXkgPSAoa2V5OiBzdHJpbmcpID0+IEluamVjdGFibGVzS2V5cy5SRUZMRUNUICsga2V5O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWNvcmF0b3IgdGhhdCBtYXJrcyBhIGNsYXNzIGFzIGF2YWlsYWJsZSBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgY2xhc3MgYXMgYW4gaW5qZWN0YWJsZSBzaW5nbGV0b24gdGhhdCBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhlIHJlZ2lzdHJ5LlxuICogV2hlbiBhcHBsaWVkIHRvIGEgY2xhc3MsIHJlcGxhY2VzIGl0cyBjb25zdHJ1Y3RvciB3aXRoIG9uZSB0aGF0IHJldHVybnMgYSBzaW5nbGV0b24gaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFtjYXRlZ29yeV0gRGVmYXVsdHMgdG8gdGhlIGNsYXNzIG5hbWUuIFVzZWZ1bCB3aGVuIG1pbmlmaWNhdGlvbiBvY2N1cnMgYW5kIG5hbWVzIGFyZSBjaGFuZ2VkLFxuICogb3Igd2hlbiB5b3Ugd2FudCB0byB1cGNhc3QgdGhlIG9iamVjdCB0byBhIGRpZmZlcmVudCB0eXBlLlxuICogQHBhcmFtIHtib29sZWFufSBbZm9yY2VdIERlZmluZXMgaWYgdGhlIGluamVjdGFibGUgc2hvdWxkIG92ZXJyaWRlIGFuIGFscmVhZHkgZXhpc3RpbmcgaW5zdGFuY2UgKGlmIGFueSkuXG4gKiBPbmx5IG1lYW50IGZvciBleHRlbmRpbmcgZGVjb3JhdG9ycy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpbnN0YW5jZUNhbGxiYWNrXSBPcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGluc3RhbmNlIGFmdGVyIGNyZWF0aW9uLlxuICogQHJldHVybiB7RnVuY3Rpb259IEEgZGVjb3JhdG9yIGZ1bmN0aW9uIHRoYXQgdHJhbnNmb3JtcyB0aGUgY2xhc3MgaW50byBhbiBpbmplY3RhYmxlLlxuICpcbiAqIEBmdW5jdGlvbiBpbmplY3RhYmxlXG4gKiBAY2F0ZWdvcnkgQ2xhc3MgRGVjb3JhdG9yc1xuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2xpZW50XG4gKiAgIHBhcnRpY2lwYW50IERlY29yYXRvclxuICogICBwYXJ0aWNpcGFudCBJbmplY3RhYmxlc1xuICpcbiAqICAgQ2xpZW50LT4+RGVjb3JhdG9yOiBAaW5qZWN0YWJsZSgpXG4gKiAgIERlY29yYXRvci0+PkRlY29yYXRvcjogQ3JlYXRlIG5ldyBjb25zdHJ1Y3RvclxuICpcbiAqICAgTm90ZSBvdmVyIERlY29yYXRvcjogV2hlbiBuZXcgaW5zdGFuY2UgcmVxdWVzdGVkXG4gKiAgIERlY29yYXRvci0+PkluamVjdGFibGVzOiBnZXQobmFtZSlcbiAqICAgYWx0IEluc3RhbmNlIGV4aXN0c1xuICogICAgIEluamVjdGFibGVzLS0+PkRlY29yYXRvcjogUmV0dXJuIGV4aXN0aW5nIGluc3RhbmNlXG4gKiAgIGVsc2UgTm8gaW5zdGFuY2VcbiAqICAgICBEZWNvcmF0b3ItPj5JbmplY3RhYmxlczogcmVnaXN0ZXIob3JpZ2luYWwsIG5hbWUpXG4gKiAgICAgRGVjb3JhdG9yLT4+SW5qZWN0YWJsZXM6IGdldChuYW1lKVxuICogICAgIEluamVjdGFibGVzLS0+PkRlY29yYXRvcjogUmV0dXJuIG5ldyBpbnN0YW5jZVxuICogICAgIG9wdCBIYXMgY2FsbGJhY2tcbiAqICAgICAgIERlY29yYXRvci0+PkRlY29yYXRvcjogQ2FsbCBpbnN0YW5jZUNhbGxiYWNrXG4gKiAgICAgZW5kXG4gKiAgIGVuZFxuICogICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IERlZmluZSBtZXRhZGF0YVxuICogICBEZWNvcmF0b3ItLT4+Q2xpZW50OiBSZXR1cm4gaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdGFibGUoXG4gIGNhdGVnb3J5OiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gIGZvcmNlOiBib29sZWFuID0gZmFsc2UsXG4gIGluc3RhbmNlQ2FsbGJhY2s/OiAoaW5zdGFuY2U6IGFueSwgLi4uYXJnczogYW55W10pID0+IHZvaWRcbikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIHJldHVybiAob3JpZ2luYWw6IGFueSwgcHJvcGVydHlLZXk/OiBhbnkpID0+IHtcbiAgICBjb25zdCBuYW1lID0gY2F0ZWdvcnkgfHwgb3JpZ2luYWwubmFtZTtcbiAgICAvLyB0aGUgbmV3IGNvbnN0cnVjdG9yIGJlaGF2aW91clxuICAgIGNvbnN0IG5ld0NvbnN0cnVjdG9yOiBhbnkgPSBmdW5jdGlvbiAoLi4uYXJnczogYW55W10pIHtcbiAgICAgIGNvbnN0IGluajogYW55ID0gSW5qZWN0YWJsZXMuZ2V0PGFueT4obmFtZSwgLi4uYXJncyk7XG4gICAgICBpZiAoIWluaikgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgbWV0YWRhdGEgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzOiBuYW1lLFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFxuICAgICAgICBnZXRJbmplY3RLZXkoSW5qZWN0YWJsZXNLZXlzLklOSkVDVEFCTEUpLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgaW5qLmNvbnN0cnVjdG9yXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gaW5qO1xuICAgIH07XG5cbiAgICAvLyBjb3B5IHByb3RvdHlwZSBzbyBpbnN0YW5jZW9mIG9wZXJhdG9yIHN0aWxsIHdvcmtzXG4gICAgbmV3Q29uc3RydWN0b3IucHJvdG90eXBlID0gb3JpZ2luYWwucHJvdG90eXBlO1xuICAgIC8vIG5ld0NvbnN0cnVjdG9yLl9fcHJvdG9fXyA9IG9yaWdpbmFsLl9fcHJvdG9fXztcbiAgICAvLyBTZXRzIHRoZSBwcm9wZXIgY29uc3RydWN0b3IgbmFtZSBmb3IgdHlwZSB2ZXJpZmljYXRpb25cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3Q29uc3RydWN0b3IsIFwibmFtZVwiLCB7XG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBvcmlnaW5hbC5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZSxcbiAgICB9KTtcblxuICAgIEluamVjdGFibGVzLnJlZ2lzdGVyKG5ld0NvbnN0cnVjdG9yLCBuYW1lLCB0cnVlLCBmb3JjZSk7XG4gICAgLy8gcmV0dXJuIG5ldyBjb25zdHJ1Y3RvciAod2lsbCBvdmVycmlkZSBvcmlnaW5hbClcbiAgICByZXR1cm4gbmV3Q29uc3RydWN0b3I7XG4gIH07XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBGdW5jdGlvbiB0eXBlIGZvciB0cmFuc2Zvcm1pbmcgaW5qZWN0YWJsZSBpbnN0YW5jZXMgYmVmb3JlIHRoZXkncmUgaW5qZWN0ZWQuXG4gKiBAc3VtbWFyeSBGdW5jdGlvbiB3aGljaCB0cmFuc2Zvcm1zIGEgY2FjaGVkIHtAbGluayBpbmplY3RhYmxlfSBpbnN0YW5jZSBiZWZvcmUgaXQncyBpbmplY3RlZCBpbnRvIGEgdGFyZ2V0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge2FueX0gaW5qZWN0YWJsZSBUaGUgaW5qZWN0YWJsZSBpbnN0YW5jZSB0byB0cmFuc2Zvcm1cbiAqIEBwYXJhbSB7YW55fSBvYmogVGhlIG9iamVjdCB0aGUgaW5qZWN0YWJsZSB3aWxsIGJlIGluamVjdGVkIG9uXG4gKiBAcmV0dXJuIHthbnl9IFRoZSB0cmFuc2Zvcm1lZCBpbmplY3RhYmxlIGluc3RhbmNlXG4gKlxuICogQHR5cGVkZWYge0Z1bmN0aW9ufSBJbnN0YW5jZVRyYW5zZm9ybWVyXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmluamVjdGFibGUtZGVjb3JhdG9yc1xuICovXG5leHBvcnQgdHlwZSBJbnN0YW5jZVRyYW5zZm9ybWVyID0gKGluamVjdGFibGU6IGFueSwgb2JqOiBhbnkpID0+IGFueTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUHJvcGVydHkgZGVjb3JhdG9yIHRoYXQgaW5qZWN0cyBhIGRlcGVuZGVuY3kgaW50byBhIGNsYXNzIHByb3BlcnR5LlxuICogQHN1bW1hcnkgQWxsb3dzIGZvciB0aGUgaW5qZWN0aW9uIG9mIGFuIHtAbGluayBpbmplY3RhYmxlfSBkZWNvcmF0ZWQgZGVwZW5kZW5jeSBpbnRvIGEgY2xhc3MgcHJvcGVydHkuXG4gKiBUaGUgcHJvcGVydHkgbXVzdCBiZSB0eXBlZCBmb3IgdGhlIHJlcXVlc3RlZCBkZXBlbmRlbmN5LiBPbmx5IGNvbmNyZXRlIGNsYXNzZXMgYXJlIHN1cHBvcnRlZDsgZ2VuZXJpY3MgYXJlIG5vdC5cbiAqXG4gKiBJbmplY3RlZCBwcm9wZXJ0aWVzIHNob3VsZCBiZSBkZXNjcmliZWQgbGlrZSBzbzpcbiAqIDxwcmU+XG4gKiAgICAgY2xhc3MgQ2xhc3NOYW1lIHtcbiAqICAgICAgICAgLi4uXG4gKlxuICogICAgICAgICBAaW5qZWN0KClcbiAqICAgICAgICAgcHJvcGVydHlOYW1lITogSW5qZWN0YWJsZUNsYXNzO1xuICpcbiAqICAgICAgICAgLi4uXG4gKiAgICAgfVxuICogPC9wcmU+XG4gKlxuICogd2hlcmUgSW5qZWN0YWJsZUNsYXNzIGlzIHRoZSBjbGFzcyB5b3Ugd2FudCB0byBpbmplY3QuXG4gKiBOb3RpY2UgdGhlIHVzZSBvZiAnITonIHRvIGVuc3VyZSB0aGUgdHJhbnNwaWxlciB0aGUgcHJvcGVydHkgd2lsbCBiZSBzZXQgb3V0c2lkZSB0aGUgY29uc3RydWN0b3IgYnV0IHdpbGwgYWx3YXlzIGJlIGRlZmluZWQuXG4gKiBGb3IgcHJvamVjdHMgd2hlcmUgbWluaWZpY2F0aW9uIG9jY3VycywgeW91IHNob3VsZCB1c2UgdGhlIGNhdGVnb3J5IHBhcmFtIHRvIGVuc3VyZSB0aGUgbmFtZSBpcyB0aGUgc2FtZSB0aHJvdWdob3V0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbY2F0ZWdvcnldIERlZmF1bHRzIHRvIHRoZSBjbGFzcyBuYW1lIGRlcml2ZWQgZnJvbSB0aGUgcHJvcGVydHkgdHlwZS4gVXNlZnVsIHdoZW4gbWluaWZpY2F0aW9uIG9jY3Vyc1xuICogYW5kIG5hbWVzIGFyZSBjaGFuZ2VkLCBvciB3aGVuIHlvdSB3YW50IHRvIHVwY2FzdCB0aGUgb2JqZWN0IHRvIGEgZGlmZmVyZW50IHR5cGUuXG4gKiBAcGFyYW0ge0luc3RhbmNlVHJhbnNmb3JtZXJ9IFt0cmFuc2Zvcm1lcl0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gdHJhbnNmb3JtIHRoZSBpbmplY3RhYmxlIGluc3RhbmNlIGJlZm9yZSBpdCdzIGluamVjdGVkLlxuICogQHJldHVybiB7RnVuY3Rpb259IEEgcHJvcGVydHkgZGVjb3JhdG9yIGZ1bmN0aW9uIHRoYXQgc2V0cyB1cCB0aGUgZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gKlxuICogQGZ1bmN0aW9uIGluamVjdFxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBEZWNvcmF0b3JcbiAqICAgcGFydGljaXBhbnQgSW5qZWN0YWJsZXNcbiAqXG4gKiAgIENsaWVudC0+PkRlY29yYXRvcjogQGluamVjdCgpXG4gKiAgIERlY29yYXRvci0+PkRlY29yYXRvcjogR2V0IHR5cGUgZnJvbSBwcm9wZXJ0eVxuICogICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IERlZmluZSBtZXRhZGF0YVxuICogICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IERlZmluZSBwcm9wZXJ0eSBnZXR0ZXJcbiAqXG4gKiAgIE5vdGUgb3ZlciBEZWNvcmF0b3I6IFdoZW4gcHJvcGVydHkgYWNjZXNzZWRcbiAqICAgQ2xpZW50LT4+RGVjb3JhdG9yOiBhY2Nlc3MgcHJvcGVydHlcbiAqICAgRGVjb3JhdG9yLT4+RGVjb3JhdG9yOiBDaGVjayBpZiBpbnN0YW5jZSBleGlzdHNcbiAqICAgYWx0IEluc3RhbmNlIGV4aXN0cyBpbiBXZWFrTWFwXG4gKiAgICAgRGVjb3JhdG9yLS0+PkNsaWVudDogUmV0dXJuIGNhY2hlZCBpbnN0YW5jZVxuICogICBlbHNlIE5vIGluc3RhbmNlXG4gKiAgICAgRGVjb3JhdG9yLT4+SW5qZWN0YWJsZXM6IGdldChuYW1lKVxuICogICAgIGFsdCBJbmplY3RhYmxlIGZvdW5kXG4gKiAgICAgICBJbmplY3RhYmxlcy0tPj5EZWNvcmF0b3I6IFJldHVybiBpbmplY3RhYmxlIGluc3RhbmNlXG4gKiAgICAgICBvcHQgSGFzIHRyYW5zZm9ybWVyXG4gKiAgICAgICAgIERlY29yYXRvci0+PkRlY29yYXRvcjogQ2FsbCB0cmFuc2Zvcm1lclxuICogICAgICAgZW5kXG4gKiAgICAgICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IFN0b3JlIGluIFdlYWtNYXBcbiAqICAgICAgIERlY29yYXRvci0tPj5DbGllbnQ6IFJldHVybiBpbnN0YW5jZVxuICogICAgIGVsc2UgTm8gaW5qZWN0YWJsZVxuICogICAgICAgRGVjb3JhdG9yLS0+PkNsaWVudDogVGhyb3cgZXJyb3JcbiAqICAgICBlbmRcbiAqICAgZW5kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3QoY2F0ZWdvcnk/OiBzdHJpbmcsIHRyYW5zZm9ybWVyPzogSW5zdGFuY2VUcmFuc2Zvcm1lcikge1xuICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleT86IGFueSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlcyA9IG5ldyBXZWFrTWFwKCk7XG5cbiAgICBjb25zdCBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxuICAgICAgY2F0ZWdvcnkgfHwgZ2V0VHlwZUZyb21EZWNvcmF0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgaWYgKCFuYW1lKSB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBnZXQgVHlwZSBmcm9tIGRlY29yYXRvcmApO1xuXG4gICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcbiAgICAgIGdldEluamVjdEtleShJbmplY3RhYmxlc0tleXMuSU5KRUNUKSxcbiAgICAgIHtcbiAgICAgICAgaW5qZWN0YWJsZTogbmFtZSxcbiAgICAgIH0sXG4gICAgICB0YXJnZXQsXG4gICAgICBwcm9wZXJ0eUtleVxuICAgICk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0KHRoaXM6IGFueSkge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICBwcm9wZXJ0eUtleVxuICAgICAgICApIGFzIFByb3BlcnR5RGVzY3JpcHRvcjtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5S2V5LCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGdldCh0aGlzOiBhbnkpIHtcbiAgICAgICAgICAgICAgbGV0IG9iaiA9IHZhbHVlcy5nZXQodGhpcyk7XG4gICAgICAgICAgICAgIGlmICghb2JqKSB7XG4gICAgICAgICAgICAgICAgb2JqID0gSW5qZWN0YWJsZXMuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICghb2JqKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgQ291bGQgbm90IGdldCBJbmplY3RhYmxlICR7bmFtZX0gdG8gaW5qZWN0IGluICR7dGFyZ2V0LmNvbnN0cnVjdG9yID8gdGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWUgOiB0YXJnZXQubmFtZX0ncyAke3Byb3BlcnR5S2V5fWBcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybWVyKVxuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb2JqID0gdHJhbnNmb3JtZXIob2JqLCB0YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhbHVlcy5zZXQodGhpcywgb2JqKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gdGhpc1twcm9wZXJ0eUtleV07XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG59XG4iXX0=
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQW1FQSxnQ0FzREM7QUF5RUQsd0JBNERDO0FBOVBELCtDQUE4QztBQUM5QyxtREFBNEM7QUFDNUMsdUNBQStDO0FBTy9DOzs7Ozs7O0dBT0c7QUFDSSxNQUFNLFlBQVksR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsMkJBQWUsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0FBQTlELFFBQUEsWUFBWSxnQkFBa0Q7QUFrRDNFLFNBQWdCLFVBQVUsQ0FDeEIsSUFBcUMsRUFDckMsRUFBMEI7SUFFMUIsTUFBTSxRQUFRLEdBQUcsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM3RCxNQUFNLGdCQUFnQixHQUFHLENBQUMsT0FBTyxRQUFRLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FFM0QsQ0FBQztJQUVkLE9BQU8sQ0FBQyxRQUFhLEVBQUUsRUFBRTtRQUN2QixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUMzRCxNQUFNLElBQUksR0FBRyxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQztRQUV2QyxNQUFNLFFBQVEsR0FBdUI7WUFDbkMsS0FBSyxFQUFFLElBQUk7WUFDWCxNQUFNLEVBQUUsTUFBTTtTQUNmLENBQUM7UUFFRixPQUFPLENBQUMsY0FBYyxDQUNwQixJQUFBLG9CQUFZLEVBQUMsMkJBQWUsQ0FBQyxVQUFVLENBQUMsRUFDeEMsUUFBUSxFQUNSLFFBQVEsQ0FDVCxDQUFDO1FBQ0YsZ0NBQWdDO1FBQ2hDLE1BQU0sY0FBYyxHQUFRLFVBQVUsR0FBRyxJQUFXO1lB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QUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLFdBQVcsRUFBRSxDQUMxSSxDQUFDO2dDQUNKLElBQUksV0FBVztvQ0FDYixJQUFJLENBQUM7d0NBQ0gsR0FBRyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7b0NBQ2pDLENBQUM7b0NBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzt3Q0FDWCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO29DQUNuQixDQUFDO2dDQUNILE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDOzRCQUN4QixDQUFDOzRCQUNELE9BQU8sR0FBRyxDQUFDO3dCQUNiLENBQUM7cUJBQ0YsQ0FBQyxDQUFDO29CQUNILE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUMzQixDQUFDO1lBQ0gsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlc0tleXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEluamVjdGFibGVzIH0gZnJvbSBcIi4vSW5qZWN0YWJsZXNcIjtcbmltcG9ydCB7IGdldFR5cGVGcm9tRGVjb3JhdG9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7XG4gIEluamVjdGFibGVNZXRhZGF0YSxcbiAgSW5qZWN0YWJsZU9wdGlvbnMsXG4gIEluc3RhbmNlQ2FsbGJhY2ssXG59IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEdlbmVyYXRlcyBhIGZ1bGx5IHF1YWxpZmllZCByZWZsZWN0aW9uIG1ldGFkYXRhIGtleS5cbiAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIHJlZmxlY3Rpb24ga2V5IGZvciBpbmplY3RhYmxlcyBieSBwcmVmaXhpbmcgdGhlIHByb3ZpZGVkIGtleSB3aXRoIHRoZSBiYXNlIHJlZmxlY3Rpb24ga2V5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IHRvIGJlIHByZWZpeGVkXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBmdWxseSBxdWFsaWZpZWQgcmVmbGVjdGlvbiBrZXlcbiAqIEBmdW5jdGlvbiBnZXRJbmplY3RLZXlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6aW5qZWN0YWJsZS1kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRJbmplY3RLZXkgPSAoa2V5OiBzdHJpbmcpID0+IEluamVjdGFibGVzS2V5cy5SRUZMRUNUICsga2V5O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWNvcmF0b3IgdGhhdCBtYXJrcyBhIGNsYXNzIGFzIGF2YWlsYWJsZSBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgY2xhc3MgYXMgYW4gaW5qZWN0YWJsZSBzaW5nbGV0b24gdGhhdCBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhlIHJlZ2lzdHJ5LlxuICogV2hlbiBhcHBsaWVkIHRvIGEgY2xhc3MsIHJlcGxhY2VzIGl0cyBjb25zdHJ1Y3RvciB3aXRoIG9uZSB0aGF0IHJldHVybnMgYSBzaW5nbGV0b24gaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFtjYXRlZ29yeV0gRGVmYXVsdHMgdG8gdGhlIGNsYXNzIG5hbWUuIFVzZWZ1bCB3aGVuIG1pbmlmaWNhdGlvbiBvY2N1cnMgYW5kIG5hbWVzIGFyZSBjaGFuZ2VkLFxuICogb3Igd2hlbiB5b3Ugd2FudCB0byB1cGNhc3QgdGhlIG9iamVjdCB0byBhIGRpZmZlcmVudCB0eXBlLlxuICogQHBhcmFtIHtib29sZWFufSBbZm9yY2VdIERlZmluZXMgaWYgdGhlIGluamVjdGFibGUgc2hvdWxkIG92ZXJyaWRlIGFuIGFscmVhZHkgZXhpc3RpbmcgaW5zdGFuY2UgKGlmIGFueSkuXG4gKiBPbmx5IG1lYW50IGZvciBleHRlbmRpbmcgZGVjb3JhdG9ycy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpbnN0YW5jZUNhbGxiYWNrXSBPcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGluc3RhbmNlIGFmdGVyIGNyZWF0aW9uLlxuICogQHJldHVybiB7RnVuY3Rpb259IEEgZGVjb3JhdG9yIGZ1bmN0aW9uIHRoYXQgdHJhbnNmb3JtcyB0aGUgY2xhc3MgaW50byBhbiBpbmplY3RhYmxlLlxuICpcbiAqIEBmdW5jdGlvbiBpbmplY3RhYmxlXG4gKiBAY2F0ZWdvcnkgQ2xhc3MgRGVjb3JhdG9yc1xuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2xpZW50XG4gKiAgIHBhcnRpY2lwYW50IERlY29yYXRvclxuICogICBwYXJ0aWNpcGFudCBJbmplY3RhYmxlc1xuICpcbiAqICAgQ2xpZW50LT4+RGVjb3JhdG9yOiBAaW5qZWN0YWJsZSgpXG4gKiAgIERlY29yYXRvci0+PkRlY29yYXRvcjogQ3JlYXRlIG5ldyBjb25zdHJ1Y3RvclxuICpcbiAqICAgTm90ZSBvdmVyIERlY29yYXRvcjogV2hlbiBuZXcgaW5zdGFuY2UgcmVxdWVzdGVkXG4gKiAgIERlY29yYXRvci0+PkluamVjdGFibGVzOiBnZXQobmFtZSlcbiAqICAgYWx0IEluc3RhbmNlIGV4aXN0c1xuICogICAgIEluamVjdGFibGVzLS0+PkRlY29yYXRvcjogUmV0dXJuIGV4aXN0aW5nIGluc3RhbmNlXG4gKiAgIGVsc2UgTm8gaW5zdGFuY2VcbiAqICAgICBEZWNvcmF0b3ItPj5JbmplY3RhYmxlczogcmVnaXN0ZXIob3JpZ2luYWwsIG5hbWUpXG4gKiAgICAgRGVjb3JhdG9yLT4+SW5qZWN0YWJsZXM6IGdldChuYW1lKVxuICogICAgIEluamVjdGFibGVzLS0+PkRlY29yYXRvcjogUmV0dXJuIG5ldyBpbnN0YW5jZVxuICogICAgIG9wdCBIYXMgY2FsbGJhY2tcbiAqICAgICAgIERlY29yYXRvci0+PkRlY29yYXRvcjogQ2FsbCBpbnN0YW5jZUNhbGxiYWNrXG4gKiAgICAgZW5kXG4gKiAgIGVuZFxuICogICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IERlZmluZSBtZXRhZGF0YVxuICogICBEZWNvcmF0b3ItLT4+Q2xpZW50OiBSZXR1cm4gaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdGFibGUoKTogKG9yaWdpbmFsOiBhbnkpID0+IGFueTtcbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RhYmxlKGNhdGVnb3J5OiBzdHJpbmcpOiAob3JpZ2luYWw6IGFueSkgPT4gYW55O1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdGFibGUoXG4gIGluc3RhbmNlQ2FsbGJhY2s6IEluc3RhbmNlQ2FsbGJhY2s8YW55PlxuKTogKG9yaWdpbmFsOiBhbnkpID0+IGFueTtcbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RhYmxlKFxuICBjYXRlZ29yeTogc3RyaW5nLFxuICBpbnN0YW5jZUNhbGxiYWNrOiBJbnN0YW5jZUNhbGxiYWNrPGFueT5cbik6IChvcmlnaW5hbDogYW55KSA9PiBhbnk7XG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0YWJsZShcbiAgbmFtZT86IHN0cmluZyB8IEluc3RhbmNlQ2FsbGJhY2s8YW55PixcbiAgY2I/OiBJbnN0YW5jZUNhbGxiYWNrPGFueT5cbikge1xuICBjb25zdCBjYXRlZ29yeSA9IHR5cGVvZiBuYW1lID09PSBcInN0cmluZ1wiID8gbmFtZSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgaW5zdGFuY2VDYWxsYmFjayA9ICh0eXBlb2YgY2F0ZWdvcnkgPT09IFwiZnVuY3Rpb25cIiA/IGNhdGVnb3J5IDogY2IpIGFzXG4gICAgfCBJbnN0YW5jZUNhbGxiYWNrPGFueT5cbiAgICB8IHVuZGVmaW5lZDtcblxuICByZXR1cm4gKG9yaWdpbmFsOiBhbnkpID0+IHtcbiAgICBjb25zdCBzeW1ib2wgPSBTeW1ib2wuZm9yKGNhdGVnb3J5IHx8IG9yaWdpbmFsLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IG5hbWUgPSBjYXRlZ29yeSB8fCBvcmlnaW5hbC5uYW1lO1xuXG4gICAgY29uc3QgbWV0YWRhdGE6IEluamVjdGFibGVNZXRhZGF0YSA9IHtcbiAgICAgIGNsYXNzOiBuYW1lLFxuICAgICAgc3ltYm9sOiBzeW1ib2wsXG4gICAgfTtcblxuICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoXG4gICAgICBnZXRJbmplY3RLZXkoSW5qZWN0YWJsZXNLZXlzLklOSkVDVEFCTEUpLFxuICAgICAgbWV0YWRhdGEsXG4gICAgICBvcmlnaW5hbFxuICAgICk7XG4gICAgLy8gdGhlIG5ldyBjb25zdHJ1Y3RvciBiZWhhdmlvdXJcbiAgICBjb25zdCBuZXdDb25zdHJ1Y3RvcjogYW55ID0gZnVuY3Rpb24gKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICByZXR1cm4gSW5qZWN0YWJsZXMuZ2V0PGFueT4oc3ltYm9sLCAuLi5hcmdzKTtcbiAgICB9O1xuXG4gICAgLy8gY29weSBwcm90b3R5cGUgc28gaW5zdGFuY2VvZiBvcGVyYXRvciBzdGlsbCB3b3Jrc1xuICAgIG5ld0NvbnN0cnVjdG9yLnByb3RvdHlwZSA9IG9yaWdpbmFsLnByb3RvdHlwZTtcbiAgICAvLyBuZXdDb25zdHJ1Y3Rvci5fX3Byb3RvX18gPSBvcmlnaW5hbC5fX3Byb3RvX187XG4gICAgLy8gU2V0cyB0aGUgcHJvcGVyIGNvbnN0cnVjdG9yIG5hbWUgZm9yIHR5cGUgdmVyaWZpY2F0aW9uXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ld0NvbnN0cnVjdG9yLCBcIm5hbWVcIiwge1xuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogb3JpZ2luYWwucHJvdG90eXBlLmNvbnN0cnVjdG9yLm5hbWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBvcHRzOiBJbmplY3RhYmxlT3B0aW9uczxhbnk+ID0ge1xuICAgICAgc2luZ2xldG9uOiB0cnVlLFxuICAgICAgY2FsbGJhY2s6IGluc3RhbmNlQ2FsbGJhY2sgYXMgSW5zdGFuY2VDYWxsYmFjazxhbnk+LFxuICAgIH07XG5cbiAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFxuICAgICAgZ2V0SW5qZWN0S2V5KEluamVjdGFibGVzS2V5cy5JTkpFQ1RBQkxFKSxcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgbmV3Q29uc3RydWN0b3JcbiAgICApO1xuXG4gICAgSW5qZWN0YWJsZXMucmVnaXN0ZXIob3JpZ2luYWwsIHN5bWJvbCwgb3B0cyk7XG4gICAgLy8gcmV0dXJuIG5ldyBjb25zdHJ1Y3RvciAod2lsbCBvdmVycmlkZSBvcmlnaW5hbClcbiAgICByZXR1cm4gbmV3Q29uc3RydWN0b3I7XG4gIH07XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBGdW5jdGlvbiB0eXBlIGZvciB0cmFuc2Zvcm1pbmcgaW5qZWN0YWJsZSBpbnN0YW5jZXMgYmVmb3JlIHRoZXkncmUgaW5qZWN0ZWQuXG4gKiBAc3VtbWFyeSBGdW5jdGlvbiB3aGljaCB0cmFuc2Zvcm1zIGEgY2FjaGVkIHtAbGluayBpbmplY3RhYmxlfSBpbnN0YW5jZSBiZWZvcmUgaXQncyBpbmplY3RlZCBpbnRvIGEgdGFyZ2V0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge2FueX0gaW5qZWN0YWJsZSBUaGUgaW5qZWN0YWJsZSBpbnN0YW5jZSB0byB0cmFuc2Zvcm1cbiAqIEBwYXJhbSB7YW55fSBvYmogVGhlIG9iamVjdCB0aGUgaW5qZWN0YWJsZSB3aWxsIGJlIGluamVjdGVkIG9uXG4gKiBAcmV0dXJuIHthbnl9IFRoZSB0cmFuc2Zvcm1lZCBpbmplY3RhYmxlIGluc3RhbmNlXG4gKlxuICogQHR5cGVkZWYge0Z1bmN0aW9ufSBJbnN0YW5jZVRyYW5zZm9ybWVyXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmluamVjdGFibGUtZGVjb3JhdG9yc1xuICovXG5leHBvcnQgdHlwZSBJbnN0YW5jZVRyYW5zZm9ybWVyID0gKGluamVjdGFibGU6IGFueSwgb2JqOiBhbnkpID0+IGFueTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUHJvcGVydHkgZGVjb3JhdG9yIHRoYXQgaW5qZWN0cyBhIGRlcGVuZGVuY3kgaW50byBhIGNsYXNzIHByb3BlcnR5LlxuICogQHN1bW1hcnkgQWxsb3dzIGZvciB0aGUgaW5qZWN0aW9uIG9mIGFuIHtAbGluayBpbmplY3RhYmxlfSBkZWNvcmF0ZWQgZGVwZW5kZW5jeSBpbnRvIGEgY2xhc3MgcHJvcGVydHkuXG4gKiBUaGUgcHJvcGVydHkgbXVzdCBiZSB0eXBlZCBmb3IgdGhlIHJlcXVlc3RlZCBkZXBlbmRlbmN5LiBPbmx5IGNvbmNyZXRlIGNsYXNzZXMgYXJlIHN1cHBvcnRlZDsgZ2VuZXJpY3MgYXJlIG5vdC5cbiAqXG4gKiBJbmplY3RlZCBwcm9wZXJ0aWVzIHNob3VsZCBiZSBkZXNjcmliZWQgbGlrZSBzbzpcbiAqIDxwcmU+XG4gKiAgICAgY2xhc3MgQ2xhc3NOYW1lIHtcbiAqICAgICAgICAgLi4uXG4gKlxuICogICAgICAgICBAaW5qZWN0KClcbiAqICAgICAgICAgcHJvcGVydHlOYW1lITogSW5qZWN0YWJsZUNsYXNzO1xuICpcbiAqICAgICAgICAgLi4uXG4gKiAgICAgfVxuICogPC9wcmU+XG4gKlxuICogd2hlcmUgSW5qZWN0YWJsZUNsYXNzIGlzIHRoZSBjbGFzcyB5b3Ugd2FudCB0byBpbmplY3QuXG4gKiBOb3RpY2UgdGhlIHVzZSBvZiAnITonIHRvIGVuc3VyZSB0aGUgdHJhbnNwaWxlciB0aGUgcHJvcGVydHkgd2lsbCBiZSBzZXQgb3V0c2lkZSB0aGUgY29uc3RydWN0b3IgYnV0IHdpbGwgYWx3YXlzIGJlIGRlZmluZWQuXG4gKiBGb3IgcHJvamVjdHMgd2hlcmUgbWluaWZpY2F0aW9uIG9jY3VycywgeW91IHNob3VsZCB1c2UgdGhlIGNhdGVnb3J5IHBhcmFtIHRvIGVuc3VyZSB0aGUgbmFtZSBpcyB0aGUgc2FtZSB0aHJvdWdob3V0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbY2F0ZWdvcnldIERlZmF1bHRzIHRvIHRoZSBjbGFzcyBuYW1lIGRlcml2ZWQgZnJvbSB0aGUgcHJvcGVydHkgdHlwZS4gVXNlZnVsIHdoZW4gbWluaWZpY2F0aW9uIG9jY3Vyc1xuICogYW5kIG5hbWVzIGFyZSBjaGFuZ2VkLCBvciB3aGVuIHlvdSB3YW50IHRvIHVwY2FzdCB0aGUgb2JqZWN0IHRvIGEgZGlmZmVyZW50IHR5cGUuXG4gKiBAcGFyYW0ge0luc3RhbmNlVHJhbnNmb3JtZXJ9IFt0cmFuc2Zvcm1lcl0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gdHJhbnNmb3JtIHRoZSBpbmplY3RhYmxlIGluc3RhbmNlIGJlZm9yZSBpdCdzIGluamVjdGVkLlxuICogQHJldHVybiB7RnVuY3Rpb259IEEgcHJvcGVydHkgZGVjb3JhdG9yIGZ1bmN0aW9uIHRoYXQgc2V0cyB1cCB0aGUgZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gKlxuICogQGZ1bmN0aW9uIGluamVjdFxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBEZWNvcmF0b3JcbiAqICAgcGFydGljaXBhbnQgSW5qZWN0YWJsZXNcbiAqXG4gKiAgIENsaWVudC0+PkRlY29yYXRvcjogQGluamVjdCgpXG4gKiAgIERlY29yYXRvci0+PkRlY29yYXRvcjogR2V0IHR5cGUgZnJvbSBwcm9wZXJ0eVxuICogICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IERlZmluZSBtZXRhZGF0YVxuICogICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IERlZmluZSBwcm9wZXJ0eSBnZXR0ZXJcbiAqXG4gKiAgIE5vdGUgb3ZlciBEZWNvcmF0b3I6IFdoZW4gcHJvcGVydHkgYWNjZXNzZWRcbiAqICAgQ2xpZW50LT4+RGVjb3JhdG9yOiBhY2Nlc3MgcHJvcGVydHlcbiAqICAgRGVjb3JhdG9yLT4+RGVjb3JhdG9yOiBDaGVjayBpZiBpbnN0YW5jZSBleGlzdHNcbiAqICAgYWx0IEluc3RhbmNlIGV4aXN0cyBpbiBXZWFrTWFwXG4gKiAgICAgRGVjb3JhdG9yLS0+PkNsaWVudDogUmV0dXJuIGNhY2hlZCBpbnN0YW5jZVxuICogICBlbHNlIE5vIGluc3RhbmNlXG4gKiAgICAgRGVjb3JhdG9yLT4+SW5qZWN0YWJsZXM6IGdldChuYW1lKVxuICogICAgIGFsdCBJbmplY3RhYmxlIGZvdW5kXG4gKiAgICAgICBJbmplY3RhYmxlcy0tPj5EZWNvcmF0b3I6IFJldHVybiBpbmplY3RhYmxlIGluc3RhbmNlXG4gKiAgICAgICBvcHQgSGFzIHRyYW5zZm9ybWVyXG4gKiAgICAgICAgIERlY29yYXRvci0+PkRlY29yYXRvcjogQ2FsbCB0cmFuc2Zvcm1lclxuICogICAgICAgZW5kXG4gKiAgICAgICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IFN0b3JlIGluIFdlYWtNYXBcbiAqICAgICAgIERlY29yYXRvci0tPj5DbGllbnQ6IFJldHVybiBpbnN0YW5jZVxuICogICAgIGVsc2UgTm8gaW5qZWN0YWJsZVxuICogICAgICAgRGVjb3JhdG9yLS0+PkNsaWVudDogVGhyb3cgZXJyb3JcbiAqICAgICBlbmRcbiAqICAgZW5kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3QoXG4gIGNhdGVnb3J5Pzogc3ltYm9sIHwgc3RyaW5nIHwgeyBuZXcgKC4uLmFyZ3M6IGFueVtdKTogYW55IH0sXG4gIHRyYW5zZm9ybWVyPzogSW5zdGFuY2VUcmFuc2Zvcm1lclxuKSB7XG4gIHJldHVybiAodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5PzogYW55KSA9PiB7XG4gICAgY29uc3QgdmFsdWVzID0gbmV3IFdlYWtNYXAoKTtcblxuICAgIGNvbnN0IG5hbWU6IHN5bWJvbCB8IHVuZGVmaW5lZCA9IGNhdGVnb3J5XG4gICAgICA/IHR5cGVvZiBjYXRlZ29yeSA9PT0gXCJzeW1ib2xcIlxuICAgICAgICA/IGNhdGVnb3J5XG4gICAgICAgIDogU3ltYm9sLmZvcihjYXRlZ29yeS50b1N0cmluZygpKVxuICAgICAgOiBnZXRUeXBlRnJvbURlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGdldCBUeXBlIGZyb20gZGVjb3JhdG9yYCk7XG4gICAgfVxuXG4gICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcbiAgICAgIGdldEluamVjdEtleShJbmplY3RhYmxlc0tleXMuSU5KRUNUKSxcbiAgICAgIHtcbiAgICAgICAgaW5qZWN0YWJsZTogbmFtZSxcbiAgICAgIH0sXG4gICAgICB0YXJnZXQsXG4gICAgICBwcm9wZXJ0eUtleVxuICAgICk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0KHRoaXM6IGFueSkge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICBwcm9wZXJ0eUtleVxuICAgICAgICApIGFzIFByb3BlcnR5RGVzY3JpcHRvcjtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5S2V5LCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGdldCh0aGlzOiBhbnkpIHtcbiAgICAgICAgICAgICAgbGV0IG9iaiA9IHZhbHVlcy5nZXQodGhpcyk7XG4gICAgICAgICAgICAgIGlmICghb2JqKSB7XG4gICAgICAgICAgICAgICAgb2JqID0gSW5qZWN0YWJsZXMuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICghb2JqKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgQ291bGQgbm90IGdldCBJbmplY3RhYmxlICR7bmFtZS50b1N0cmluZygpfSB0byBpbmplY3QgaW4gJHt0YXJnZXQuY29uc3RydWN0b3IgPyB0YXJnZXQuY29uc3RydWN0b3IubmFtZSA6IHRhcmdldC5uYW1lfSdzICR7cHJvcGVydHlLZXl9YFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtZXIpXG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvYmogPSB0cmFuc2Zvcm1lcihvYmosIHRhcmdldCk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFsdWVzLnNldCh0aGlzLCBvYmopO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB0aGlzW3Byb3BlcnR5S2V5XTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfTtcbn1cbiJdfQ==
@@ -1,3 +1,13 @@
1
+ import { InstanceCallback } from "./types";
2
+ /**
3
+ * @description Generates a fully qualified reflection metadata key.
4
+ * @summary Returns the reflection key for injectables by prefixing the provided key with the base reflection key.
5
+ * @param {string} key The key to be prefixed
6
+ * @return {string} The fully qualified reflection key
7
+ * @function getInjectKey
8
+ * @memberOf module:injectable-decorators
9
+ */
10
+ export declare const getInjectKey: (key: string) => string;
1
11
  /**
2
12
  * @description Decorator that marks a class as available for dependency injection.
3
13
  * @summary Defines a class as an injectable singleton that can be retrieved from the registry.
@@ -37,7 +47,10 @@
37
47
  * Decorator->>Decorator: Define metadata
38
48
  * Decorator-->>Client: Return instance
39
49
  */
40
- export declare function injectable(category?: string | undefined, force?: boolean, instanceCallback?: (instance: any, ...args: any[]) => void): (original: any, propertyKey?: any) => any;
50
+ export declare function injectable(): (original: any) => any;
51
+ export declare function injectable(category: string): (original: any) => any;
52
+ export declare function injectable(instanceCallback: InstanceCallback<any>): (original: any) => any;
53
+ export declare function injectable(category: string, instanceCallback: InstanceCallback<any>): (original: any) => any;
41
54
  /**
42
55
  * @description Function type for transforming injectable instances before they're injected.
43
56
  * @summary Function which transforms a cached {@link injectable} instance before it's injected into a target object.
@@ -109,4 +122,6 @@ export type InstanceTransformer = (injectable: any, obj: any) => any;
109
122
  * end
110
123
  * end
111
124
  */
112
- export declare function inject(category?: string, transformer?: InstanceTransformer): (target: any, propertyKey?: any) => void;
125
+ export declare function inject(category?: symbol | string | {
126
+ new (...args: any[]): any;
127
+ }, transformer?: InstanceTransformer): (target: any, propertyKey?: any) => void;
@@ -53,7 +53,9 @@ export declare class Injectables {
53
53
  * @param {any[]} args Constructor arguments to pass when instantiating the injectable
54
54
  * @return {Injectable<T> | undefined} The injectable instance or undefined if not found
55
55
  */
56
- static get<T>(name: string, ...args: any[]): Injectable<T> | undefined;
56
+ static get<T>(name: symbol | string | {
57
+ new (...args: any[]): T;
58
+ }, ...args: any[]): T | undefined;
57
59
  /**
58
60
  * @description Adds a class or object to the injectable registry.
59
61
  * @summary Registers an injectable constructor or instance with the registry, making it available for injection.
@@ -67,11 +69,11 @@ export declare class Injectables {
67
69
  * @description Creates a new instance of an injectable class.
68
70
  * @summary Instantiates an injectable class using its constructor and the provided arguments.
69
71
  * @template T Type of the object to build
70
- * @param {Record<string, any>} obj Object containing the name of the injectable to build
72
+ * @param {symbol} name symbol referencing the injectable
71
73
  * @param {any[]} args Constructor arguments to pass when instantiating the injectable
72
74
  * @return {T} The newly created instance
73
75
  */
74
- static build<T>(obj: Record<string, any>, ...args: any[]): T;
76
+ static build<T>(name: symbol, ...args: any[]): T;
75
77
  /**
76
78
  * @description Replaces the current registry implementation.
77
79
  * @summary Sets a new {@link InjectablesRegistry} implementation, allowing for custom registry behavior.
@@ -71,12 +71,12 @@ export class Injectables {
71
71
  * @description Creates a new instance of an injectable class.
72
72
  * @summary Instantiates an injectable class using its constructor and the provided arguments.
73
73
  * @template T Type of the object to build
74
- * @param {Record<string, any>} obj Object containing the name of the injectable to build
74
+ * @param {symbol} name symbol referencing the injectable
75
75
  * @param {any[]} args Constructor arguments to pass when instantiating the injectable
76
76
  * @return {T} The newly created instance
77
77
  */
78
- static build(obj, ...args) {
79
- return Injectables.getRegistry().build(obj, ...args);
78
+ static build(name, ...args) {
79
+ return Injectables.getRegistry().build(name, ...args);
80
80
  }
81
81
  /**
82
82
  * @description Replaces the current registry implementation.
@@ -120,4 +120,4 @@ export class Injectables {
120
120
  }, {});
121
121
  }
122
122
  }
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5qZWN0YWJsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvSW5qZWN0YWJsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHFCQUFxQixHQUV0QixzQkFBbUI7QUFFcEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUNHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7YUFDUCw4QkFBeUIsR0FBeUIsU0FBUyxDQUFDO0lBRTNFLGdCQUF1QixDQUFDO0lBRXhCOzs7Ozs7OztPQVFHO0lBQ0gsTUFBTSxDQUFDLEdBQUcsQ0FBSSxJQUFZLEVBQUUsR0FBRyxJQUFXO1FBQ3hDLE9BQU8sV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxRQUFRLENBQUksV0FBMEIsRUFBRSxHQUFHLElBQVc7UUFDM0QsT0FBTyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBSSxHQUF3QixFQUFFLEdBQUcsSUFBVztRQUN0RCxPQUFPLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBQyxrQkFBdUM7UUFDeEQsV0FBVyxDQUFDLHlCQUF5QixHQUFHLGtCQUFrQixDQUFDO0lBQzdELENBQUM7SUFDRDs7OztPQUlHO0lBQ0ssTUFBTSxDQUFDLFdBQVc7UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyx5QkFBeUI7WUFDeEMsV0FBVyxDQUFDLHlCQUF5QixHQUFHLElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUN0RSxPQUFPLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxLQUFLO1FBQ1YsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLHFCQUFxQixFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQXNCO1FBQzFDLE1BQU0sTUFBTSxHQUFHLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNwRSxXQUFXLENBQUMseUJBQWlDLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FDckUsV0FBVyxDQUFDLHlCQUFpQyxDQUFDLE9BQU8sQ0FBQyxDQUN4RCxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQTBCLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRTtZQUNsRCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7Z0JBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUN6QyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNULENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbmplY3RhYmxlLFxuICBJbmplY3RhYmxlUmVnaXN0cnlJbXAsXG4gIEluamVjdGFibGVzUmVnaXN0cnksXG59IGZyb20gXCIuL3JlZ2lzdHJ5XCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENlbnRyYWwgcmVnaXN0cnkgZm9yIG1hbmFnaW5nIGluamVjdGFibGUgZGVwZW5kZW5jaWVzLlxuICogQHN1bW1hcnkgU3RhdGljIGNsYXNzIGhvbGRpbmcgdGhlIGFjY2VzcyB0byB0aGUgaW5qZWN0YWJsZXMgZnVuY3Rpb25zLiBQcm92aWRlcyBtZXRob2RzIGZvciByZWdpc3RlcmluZyxcbiAqIHJldHJpZXZpbmcsIGFuZCBidWlsZGluZyBpbmplY3RhYmxlIG9iamVjdHMuXG4gKiBAdGVtcGxhdGUgVCBUeXBlIG9mIHRoZSBpbmplY3RhYmxlIG9iamVjdFxuICogXG4gKiBAY2xhc3MgSW5qZWN0YWJsZXNcbiAqIFxuICogQGV4YW1wbGVcbiAqIC8vIERlZmluZSBhbiBpbmplY3RhYmxlIGNsYXNzXG4gKiBAaW5qZWN0YWJsZSgpXG4gKiBjbGFzcyBNeVNlcnZpY2Uge1xuICogICBkb1NvbWV0aGluZygpIHtcbiAqICAgICByZXR1cm4gJ0hlbGxvIFdvcmxkJztcbiAqICAgfVxuICogfVxuICogXG4gKiAvLyBJbmplY3QgdGhlIHNlcnZpY2UgaW50byBhbm90aGVyIGNsYXNzXG4gKiBjbGFzcyBNeUNvbXBvbmVudCB7XG4gKiAgIEBpbmplY3QoKVxuICogICBwcml2YXRlIHNlcnZpY2UhOiBNeVNlcnZpY2U7XG4gKiAgIFxuICogICB1c2VTZXJ2aWNlKCkge1xuICogICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZG9Tb21ldGhpbmcoKTtcbiAqICAgfVxuICogfVxuICogXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBJbmplY3RhYmxlc1xuICogICBwYXJ0aWNpcGFudCBSZWdpc3RyeVxuICogICBcbiAqICAgQ2xpZW50LT4+SW5qZWN0YWJsZXM6IHJlZ2lzdGVyKE15U2VydmljZSlcbiAqICAgSW5qZWN0YWJsZXMtPj5SZWdpc3RyeTogcmVnaXN0ZXIoTXlTZXJ2aWNlKVxuICogICBSZWdpc3RyeS0tPj5JbmplY3RhYmxlczogdm9pZFxuICogICBcbiAqICAgQ2xpZW50LT4+SW5qZWN0YWJsZXM6IGdldChcIk15U2VydmljZVwiKVxuICogICBJbmplY3RhYmxlcy0+PlJlZ2lzdHJ5OiBnZXQoXCJNeVNlcnZpY2VcIilcbiAqICAgUmVnaXN0cnktLT4+SW5qZWN0YWJsZXM6IE15U2VydmljZSBpbnN0YW5jZVxuICogICBJbmplY3RhYmxlcy0tPj5DbGllbnQ6IE15U2VydmljZSBpbnN0YW5jZVxuICovXG5leHBvcnQgY2xhc3MgSW5qZWN0YWJsZXMge1xuICBwcml2YXRlIHN0YXRpYyBhY3RpbmdJbmplY3RhYmxlc1JlZ2lzdHJ5PzogSW5qZWN0YWJsZXNSZWdpc3RyeSA9IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEZldGNoZXMgYW4gaW5qZWN0YWJsZSBpbnN0YW5jZSBieSBpdHMgcmVnaXN0ZXJlZCBuYW1lLlxuICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgdGhlIG5hbWVkIHtAbGluayBJbmplY3RhYmxlfSBmcm9tIHRoZSByZWdpc3RyeS4gSWYgdGhlIGluamVjdGFibGUgaXMgYSBzaW5nbGV0b24sXG4gICAqIHJldHVybnMgdGhlIGV4aXN0aW5nIGluc3RhbmNlLiBPdGhlcndpc2UsIGNyZWF0ZXMgYSBuZXcgaW5zdGFuY2UuXG4gICAqIEB0ZW1wbGF0ZSBUIFR5cGUgb2YgdGhlIGluamVjdGFibGUgb2JqZWN0IHRvIHJldHJpZXZlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSByZWdpc3RlcmVkIG5hbWUgb2YgdGhlIGluamVjdGFibGUgdG8gcmV0cmlldmVcbiAgICogQHBhcmFtIHthbnlbXX0gYXJncyBDb25zdHJ1Y3RvciBhcmd1bWVudHMgdG8gcGFzcyB3aGVuIGluc3RhbnRpYXRpbmcgdGhlIGluamVjdGFibGVcbiAgICogQHJldHVybiB7SW5qZWN0YWJsZTxUPiB8IHVuZGVmaW5lZH0gVGhlIGluamVjdGFibGUgaW5zdGFuY2Ugb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgc3RhdGljIGdldDxUPihuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogSW5qZWN0YWJsZTxUPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIEluamVjdGFibGVzLmdldFJlZ2lzdHJ5KCkuZ2V0KG5hbWUsIC4uLmFyZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBZGRzIGEgY2xhc3Mgb3Igb2JqZWN0IHRvIHRoZSBpbmplY3RhYmxlIHJlZ2lzdHJ5LlxuICAgKiBAc3VtbWFyeSBSZWdpc3RlcnMgYW4gaW5qZWN0YWJsZSBjb25zdHJ1Y3RvciBvciBpbnN0YW5jZSB3aXRoIHRoZSByZWdpc3RyeSwgbWFraW5nIGl0IGF2YWlsYWJsZSBmb3IgaW5qZWN0aW9uLlxuICAgKiBAdGVtcGxhdGUgVCBUeXBlIG9mIHRoZSBpbmplY3RhYmxlIG9iamVjdCB0byByZWdpc3RlclxuICAgKiBAcGFyYW0ge0luamVjdGFibGU8VD59IGNvbnN0cnVjdG9yIFRoZSBjbGFzcyBjb25zdHJ1Y3RvciBvciBvYmplY3QgaW5zdGFuY2UgdG8gcmVnaXN0ZXJcbiAgICogQHBhcmFtIHthbnlbXX0gYXJncyBBZGRpdGlvbmFsIGFyZ3VtZW50cyBmb3IgcmVnaXN0cmF0aW9uIChjYXRlZ29yeSwgc2luZ2xldG9uIGZsYWcsIGV0Yy4pXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBzdGF0aWMgcmVnaXN0ZXI8VD4oY29uc3RydWN0b3I6IEluamVjdGFibGU8VD4sIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgcmV0dXJuIEluamVjdGFibGVzLmdldFJlZ2lzdHJ5KCkucmVnaXN0ZXIoY29uc3RydWN0b3IsIC4uLmFyZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIGFuIGluamVjdGFibGUgY2xhc3MuXG4gICAqIEBzdW1tYXJ5IEluc3RhbnRpYXRlcyBhbiBpbmplY3RhYmxlIGNsYXNzIHVzaW5nIGl0cyBjb25zdHJ1Y3RvciBhbmQgdGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgICogQHRlbXBsYXRlIFQgVHlwZSBvZiB0aGUgb2JqZWN0IHRvIGJ1aWxkXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gb2JqIE9iamVjdCBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBpbmplY3RhYmxlIHRvIGJ1aWxkXG4gICAqIEBwYXJhbSB7YW55W119IGFyZ3MgQ29uc3RydWN0b3IgYXJndW1lbnRzIHRvIHBhc3Mgd2hlbiBpbnN0YW50aWF0aW5nIHRoZSBpbmplY3RhYmxlXG4gICAqIEByZXR1cm4ge1R9IFRoZSBuZXdseSBjcmVhdGVkIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgYnVpbGQ8VD4ob2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCAuLi5hcmdzOiBhbnlbXSk6IFQge1xuICAgIHJldHVybiBJbmplY3RhYmxlcy5nZXRSZWdpc3RyeSgpLmJ1aWxkKG9iaiwgLi4uYXJncyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlcGxhY2VzIHRoZSBjdXJyZW50IHJlZ2lzdHJ5IGltcGxlbWVudGF0aW9uLlxuICAgKiBAc3VtbWFyeSBTZXRzIGEgbmV3IHtAbGluayBJbmplY3RhYmxlc1JlZ2lzdHJ5fSBpbXBsZW1lbnRhdGlvbiwgYWxsb3dpbmcgZm9yIGN1c3RvbSByZWdpc3RyeSBiZWhhdmlvci5cbiAgICogQHBhcmFtIHtJbmplY3RhYmxlc1JlZ2lzdHJ5fSBvcGVyYXRpb25zUmVnaXN0cnkgVGhlIG5ldyBpbXBsZW1lbnRhdGlvbiBvZiBSZWdpc3RyeSB0byB1c2VcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyBzZXRSZWdpc3RyeShvcGVyYXRpb25zUmVnaXN0cnk6IEluamVjdGFibGVzUmVnaXN0cnkpIHtcbiAgICBJbmplY3RhYmxlcy5hY3RpbmdJbmplY3RhYmxlc1JlZ2lzdHJ5ID0gb3BlcmF0aW9uc1JlZ2lzdHJ5O1xuICB9XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBjdXJyZW50IHJlZ2lzdHJ5IGluc3RhbmNlLlxuICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSBjdXJyZW50IHtAbGluayBJbmplY3RhYmxlc1JlZ2lzdHJ5fSBvciBjcmVhdGVzIGEgZGVmYXVsdCBvbmUgaWYgbm9uZSBleGlzdHMuXG4gICAqIEByZXR1cm4ge0luamVjdGFibGVzUmVnaXN0cnl9IFRoZSBjdXJyZW50IHJlZ2lzdHJ5IGluc3RhbmNlXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBnZXRSZWdpc3RyeSgpIHtcbiAgICBpZiAoIUluamVjdGFibGVzLmFjdGluZ0luamVjdGFibGVzUmVnaXN0cnkpXG4gICAgICBJbmplY3RhYmxlcy5hY3RpbmdJbmplY3RhYmxlc1JlZ2lzdHJ5ID0gbmV3IEluamVjdGFibGVSZWdpc3RyeUltcCgpO1xuICAgIHJldHVybiBJbmplY3RhYmxlcy5hY3RpbmdJbmplY3RhYmxlc1JlZ2lzdHJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDbGVhcnMgYWxsIHJlZ2lzdGVyZWQgaW5qZWN0YWJsZXMuXG4gICAqIEBzdW1tYXJ5IFJlc2V0cyB0aGUgcmVnaXN0cnkgdG8gYSBjbGVhbiBzdGF0ZSBieSBjcmVhdGluZyBhIG5ldyBlbXB0eSByZWdpc3RyeSBpbnN0YW5jZS5cbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyByZXNldCgpIHtcbiAgICBJbmplY3RhYmxlcy5zZXRSZWdpc3RyeShuZXcgSW5qZWN0YWJsZVJlZ2lzdHJ5SW1wKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZW1vdmVzIHNwZWNpZmljIGluamVjdGFibGVzIGZyb20gdGhlIHJlZ2lzdHJ5IGJhc2VkIG9uIGEgcGF0dGVybi5cbiAgICogQHN1bW1hcnkgU2VsZWN0aXZlbHkgcmVzZXRzIHRoZSByZWdpc3RyeSBieSByZW1vdmluZyBvbmx5IHRoZSBpbmplY3RhYmxlcyB3aG9zZSBuYW1lcyBtYXRjaCB0aGUgcHJvdmlkZWQgcGF0dGVybi5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBSZWdFeHB9IG1hdGNoIEEgc3RyaW5nIG9yIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIHRvIG1hdGNoIGFnYWluc3QgaW5qZWN0YWJsZSBuYW1lc1xuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHNlbGVjdGl2ZVJlc2V0KG1hdGNoOiBzdHJpbmcgfCBSZWdFeHApIHtcbiAgICBjb25zdCByZWdleHAgPSB0eXBlb2YgbWF0Y2ggPT09IFwic3RyaW5nXCIgPyBuZXcgUmVnRXhwKG1hdGNoKSA6IG1hdGNoO1xuICAgIChJbmplY3RhYmxlcy5hY3RpbmdJbmplY3RhYmxlc1JlZ2lzdHJ5IGFzIGFueSlbXCJjYWNoZVwiXSA9IE9iamVjdC5lbnRyaWVzKFxuICAgICAgKEluamVjdGFibGVzLmFjdGluZ0luamVjdGFibGVzUmVnaXN0cnkgYXMgYW55KVtcImNhY2hlXCJdXG4gICAgKS5yZWR1Y2UoKGFjY3VtOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBba2V5LCB2YWxdKSA9PiB7XG4gICAgICBpZiAoIWtleS5tYXRjaChyZWdleHApKSBhY2N1bVtrZXldID0gdmFsO1xuICAgICAgcmV0dXJuIGFjY3VtO1xuICAgIH0sIHt9KTtcbiAgfVxufVxuIl19
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5qZWN0YWJsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvSW5qZWN0YWJsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHFCQUFxQixHQUV0QixzQkFBbUI7QUFHcEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUNHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7YUFDUCw4QkFBeUIsR0FBeUIsU0FBUyxDQUFDO0lBRTNFLGdCQUF1QixDQUFDO0lBRXhCOzs7Ozs7OztPQVFHO0lBQ0gsTUFBTSxDQUFDLEdBQUcsQ0FDUixJQUFtRCxFQUNuRCxHQUFHLElBQVc7UUFFZCxPQUFPLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFJLFdBQTBCLEVBQUUsR0FBRyxJQUFXO1FBQzNELE9BQU8sV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FDdkMsV0FBVyxFQUNYLEdBQUksSUFBdUMsQ0FDNUMsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBSSxJQUFZLEVBQUUsR0FBRyxJQUFXO1FBQzFDLE9BQU8sV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsV0FBVyxDQUFDLGtCQUF1QztRQUN4RCxXQUFXLENBQUMseUJBQXlCLEdBQUcsa0JBQWtCLENBQUM7SUFDN0QsQ0FBQztJQUNEOzs7O09BSUc7SUFDSyxNQUFNLENBQUMsV0FBVztRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLHlCQUF5QjtZQUN4QyxXQUFXLENBQUMseUJBQXlCLEdBQUcsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQ3RFLE9BQU8sV0FBVyxDQUFDLHlCQUF5QixDQUFDO0lBQy9DLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLEtBQUs7UUFDVixXQUFXLENBQUMsV0FBVyxDQUFDLElBQUkscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBc0I7UUFDMUMsTUFBTSxNQUFNLEdBQUcsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3BFLFdBQVcsQ0FBQyx5QkFBaUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUNyRSxXQUFXLENBQUMseUJBQWlDLENBQUMsT0FBTyxDQUFDLENBQ3hELENBQUMsTUFBTSxDQUFDLENBQUMsS0FBMEIsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFO1lBQ2xELElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ3pDLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEluamVjdGFibGUsXG4gIEluamVjdGFibGVSZWdpc3RyeUltcCxcbiAgSW5qZWN0YWJsZXNSZWdpc3RyeSxcbn0gZnJvbSBcIi4vcmVnaXN0cnlcIjtcbmltcG9ydCB7IEluamVjdGFibGVPcHRpb25zIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ2VudHJhbCByZWdpc3RyeSBmb3IgbWFuYWdpbmcgaW5qZWN0YWJsZSBkZXBlbmRlbmNpZXMuXG4gKiBAc3VtbWFyeSBTdGF0aWMgY2xhc3MgaG9sZGluZyB0aGUgYWNjZXNzIHRvIHRoZSBpbmplY3RhYmxlcyBmdW5jdGlvbnMuIFByb3ZpZGVzIG1ldGhvZHMgZm9yIHJlZ2lzdGVyaW5nLFxuICogcmV0cmlldmluZywgYW5kIGJ1aWxkaW5nIGluamVjdGFibGUgb2JqZWN0cy5cbiAqIEB0ZW1wbGF0ZSBUIFR5cGUgb2YgdGhlIGluamVjdGFibGUgb2JqZWN0XG4gKlxuICogQGNsYXNzIEluamVjdGFibGVzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIERlZmluZSBhbiBpbmplY3RhYmxlIGNsYXNzXG4gKiBAaW5qZWN0YWJsZSgpXG4gKiBjbGFzcyBNeVNlcnZpY2Uge1xuICogICBkb1NvbWV0aGluZygpIHtcbiAqICAgICByZXR1cm4gJ0hlbGxvIFdvcmxkJztcbiAqICAgfVxuICogfVxuICpcbiAqIC8vIEluamVjdCB0aGUgc2VydmljZSBpbnRvIGFub3RoZXIgY2xhc3NcbiAqIGNsYXNzIE15Q29tcG9uZW50IHtcbiAqICAgQGluamVjdCgpXG4gKiAgIHByaXZhdGUgc2VydmljZSE6IE15U2VydmljZTtcbiAqXG4gKiAgIHVzZVNlcnZpY2UoKSB7XG4gKiAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5kb1NvbWV0aGluZygpO1xuICogICB9XG4gKiB9XG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDbGllbnRcbiAqICAgcGFydGljaXBhbnQgSW5qZWN0YWJsZXNcbiAqICAgcGFydGljaXBhbnQgUmVnaXN0cnlcbiAqXG4gKiAgIENsaWVudC0+PkluamVjdGFibGVzOiByZWdpc3RlcihNeVNlcnZpY2UpXG4gKiAgIEluamVjdGFibGVzLT4+UmVnaXN0cnk6IHJlZ2lzdGVyKE15U2VydmljZSlcbiAqICAgUmVnaXN0cnktLT4+SW5qZWN0YWJsZXM6IHZvaWRcbiAqXG4gKiAgIENsaWVudC0+PkluamVjdGFibGVzOiBnZXQoXCJNeVNlcnZpY2VcIilcbiAqICAgSW5qZWN0YWJsZXMtPj5SZWdpc3RyeTogZ2V0KFwiTXlTZXJ2aWNlXCIpXG4gKiAgIFJlZ2lzdHJ5LS0+PkluamVjdGFibGVzOiBNeVNlcnZpY2UgaW5zdGFuY2VcbiAqICAgSW5qZWN0YWJsZXMtLT4+Q2xpZW50OiBNeVNlcnZpY2UgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGNsYXNzIEluamVjdGFibGVzIHtcbiAgcHJpdmF0ZSBzdGF0aWMgYWN0aW5nSW5qZWN0YWJsZXNSZWdpc3RyeT86IEluamVjdGFibGVzUmVnaXN0cnkgPSB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBGZXRjaGVzIGFuIGluamVjdGFibGUgaW5zdGFuY2UgYnkgaXRzIHJlZ2lzdGVyZWQgbmFtZS5cbiAgICogQHN1bW1hcnkgUmV0cmlldmVzIHRoZSBuYW1lZCB7QGxpbmsgSW5qZWN0YWJsZX0gZnJvbSB0aGUgcmVnaXN0cnkuIElmIHRoZSBpbmplY3RhYmxlIGlzIGEgc2luZ2xldG9uLFxuICAgKiByZXR1cm5zIHRoZSBleGlzdGluZyBpbnN0YW5jZS4gT3RoZXJ3aXNlLCBjcmVhdGVzIGEgbmV3IGluc3RhbmNlLlxuICAgKiBAdGVtcGxhdGUgVCBUeXBlIG9mIHRoZSBpbmplY3RhYmxlIG9iamVjdCB0byByZXRyaWV2ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgcmVnaXN0ZXJlZCBuYW1lIG9mIHRoZSBpbmplY3RhYmxlIHRvIHJldHJpZXZlXG4gICAqIEBwYXJhbSB7YW55W119IGFyZ3MgQ29uc3RydWN0b3IgYXJndW1lbnRzIHRvIHBhc3Mgd2hlbiBpbnN0YW50aWF0aW5nIHRoZSBpbmplY3RhYmxlXG4gICAqIEByZXR1cm4ge0luamVjdGFibGU8VD4gfCB1bmRlZmluZWR9IFRoZSBpbmplY3RhYmxlIGluc3RhbmNlIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICovXG4gIHN0YXRpYyBnZXQ8VD4oXG4gICAgbmFtZTogc3ltYm9sIHwgc3RyaW5nIHwgeyBuZXcgKC4uLmFyZ3M6IGFueVtdKTogVCB9LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBJbmplY3RhYmxlcy5nZXRSZWdpc3RyeSgpLmdldChuYW1lLCAuLi5hcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQWRkcyBhIGNsYXNzIG9yIG9iamVjdCB0byB0aGUgaW5qZWN0YWJsZSByZWdpc3RyeS5cbiAgICogQHN1bW1hcnkgUmVnaXN0ZXJzIGFuIGluamVjdGFibGUgY29uc3RydWN0b3Igb3IgaW5zdGFuY2Ugd2l0aCB0aGUgcmVnaXN0cnksIG1ha2luZyBpdCBhdmFpbGFibGUgZm9yIGluamVjdGlvbi5cbiAgICogQHRlbXBsYXRlIFQgVHlwZSBvZiB0aGUgaW5qZWN0YWJsZSBvYmplY3QgdG8gcmVnaXN0ZXJcbiAgICogQHBhcmFtIHtJbmplY3RhYmxlPFQ+fSBjb25zdHJ1Y3RvciBUaGUgY2xhc3MgY29uc3RydWN0b3Igb3Igb2JqZWN0IGluc3RhbmNlIHRvIHJlZ2lzdGVyXG4gICAqIEBwYXJhbSB7YW55W119IGFyZ3MgQWRkaXRpb25hbCBhcmd1bWVudHMgZm9yIHJlZ2lzdHJhdGlvbiAoY2F0ZWdvcnksIHNpbmdsZXRvbiBmbGFnLCBldGMuKVxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHJlZ2lzdGVyPFQ+KGNvbnN0cnVjdG9yOiBJbmplY3RhYmxlPFQ+LCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgIHJldHVybiBJbmplY3RhYmxlcy5nZXRSZWdpc3RyeSgpLnJlZ2lzdGVyKFxuICAgICAgY29uc3RydWN0b3IsXG4gICAgICAuLi4oYXJncyBhcyBbc3ltYm9sLCBJbmplY3RhYmxlT3B0aW9uczxUPl0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBhbiBpbmplY3RhYmxlIGNsYXNzLlxuICAgKiBAc3VtbWFyeSBJbnN0YW50aWF0ZXMgYW4gaW5qZWN0YWJsZSBjbGFzcyB1c2luZyBpdHMgY29uc3RydWN0b3IgYW5kIHRoZSBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAqIEB0ZW1wbGF0ZSBUIFR5cGUgb2YgdGhlIG9iamVjdCB0byBidWlsZFxuICAgKiBAcGFyYW0ge3N5bWJvbH0gbmFtZSBzeW1ib2wgcmVmZXJlbmNpbmcgdGhlIGluamVjdGFibGVcbiAgICogQHBhcmFtIHthbnlbXX0gYXJncyBDb25zdHJ1Y3RvciBhcmd1bWVudHMgdG8gcGFzcyB3aGVuIGluc3RhbnRpYXRpbmcgdGhlIGluamVjdGFibGVcbiAgICogQHJldHVybiB7VH0gVGhlIG5ld2x5IGNyZWF0ZWQgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBidWlsZDxUPihuYW1lOiBzeW1ib2wsIC4uLmFyZ3M6IGFueVtdKTogVCB7XG4gICAgcmV0dXJuIEluamVjdGFibGVzLmdldFJlZ2lzdHJ5KCkuYnVpbGQobmFtZSwgLi4uYXJncyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlcGxhY2VzIHRoZSBjdXJyZW50IHJlZ2lzdHJ5IGltcGxlbWVudGF0aW9uLlxuICAgKiBAc3VtbWFyeSBTZXRzIGEgbmV3IHtAbGluayBJbmplY3RhYmxlc1JlZ2lzdHJ5fSBpbXBsZW1lbnRhdGlvbiwgYWxsb3dpbmcgZm9yIGN1c3RvbSByZWdpc3RyeSBiZWhhdmlvci5cbiAgICogQHBhcmFtIHtJbmplY3RhYmxlc1JlZ2lzdHJ5fSBvcGVyYXRpb25zUmVnaXN0cnkgVGhlIG5ldyBpbXBsZW1lbnRhdGlvbiBvZiBSZWdpc3RyeSB0byB1c2VcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyBzZXRSZWdpc3RyeShvcGVyYXRpb25zUmVnaXN0cnk6IEluamVjdGFibGVzUmVnaXN0cnkpOiB2b2lkIHtcbiAgICBJbmplY3RhYmxlcy5hY3RpbmdJbmplY3RhYmxlc1JlZ2lzdHJ5ID0gb3BlcmF0aW9uc1JlZ2lzdHJ5O1xuICB9XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBjdXJyZW50IHJlZ2lzdHJ5IGluc3RhbmNlLlxuICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSBjdXJyZW50IHtAbGluayBJbmplY3RhYmxlc1JlZ2lzdHJ5fSBvciBjcmVhdGVzIGEgZGVmYXVsdCBvbmUgaWYgbm9uZSBleGlzdHMuXG4gICAqIEByZXR1cm4ge0luamVjdGFibGVzUmVnaXN0cnl9IFRoZSBjdXJyZW50IHJlZ2lzdHJ5IGluc3RhbmNlXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBnZXRSZWdpc3RyeSgpOiBJbmplY3RhYmxlc1JlZ2lzdHJ5IHtcbiAgICBpZiAoIUluamVjdGFibGVzLmFjdGluZ0luamVjdGFibGVzUmVnaXN0cnkpXG4gICAgICBJbmplY3RhYmxlcy5hY3RpbmdJbmplY3RhYmxlc1JlZ2lzdHJ5ID0gbmV3IEluamVjdGFibGVSZWdpc3RyeUltcCgpO1xuICAgIHJldHVybiBJbmplY3RhYmxlcy5hY3RpbmdJbmplY3RhYmxlc1JlZ2lzdHJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDbGVhcnMgYWxsIHJlZ2lzdGVyZWQgaW5qZWN0YWJsZXMuXG4gICAqIEBzdW1tYXJ5IFJlc2V0cyB0aGUgcmVnaXN0cnkgdG8gYSBjbGVhbiBzdGF0ZSBieSBjcmVhdGluZyBhIG5ldyBlbXB0eSByZWdpc3RyeSBpbnN0YW5jZS5cbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyByZXNldCgpOiB2b2lkIHtcbiAgICBJbmplY3RhYmxlcy5zZXRSZWdpc3RyeShuZXcgSW5qZWN0YWJsZVJlZ2lzdHJ5SW1wKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZW1vdmVzIHNwZWNpZmljIGluamVjdGFibGVzIGZyb20gdGhlIHJlZ2lzdHJ5IGJhc2VkIG9uIGEgcGF0dGVybi5cbiAgICogQHN1bW1hcnkgU2VsZWN0aXZlbHkgcmVzZXRzIHRoZSByZWdpc3RyeSBieSByZW1vdmluZyBvbmx5IHRoZSBpbmplY3RhYmxlcyB3aG9zZSBuYW1lcyBtYXRjaCB0aGUgcHJvdmlkZWQgcGF0dGVybi5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBSZWdFeHB9IG1hdGNoIEEgc3RyaW5nIG9yIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIHRvIG1hdGNoIGFnYWluc3QgaW5qZWN0YWJsZSBuYW1lc1xuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHNlbGVjdGl2ZVJlc2V0KG1hdGNoOiBzdHJpbmcgfCBSZWdFeHApOiB2b2lkIHtcbiAgICBjb25zdCByZWdleHAgPSB0eXBlb2YgbWF0Y2ggPT09IFwic3RyaW5nXCIgPyBuZXcgUmVnRXhwKG1hdGNoKSA6IG1hdGNoO1xuICAgIChJbmplY3RhYmxlcy5hY3RpbmdJbmplY3RhYmxlc1JlZ2lzdHJ5IGFzIGFueSlbXCJjYWNoZVwiXSA9IE9iamVjdC5lbnRyaWVzKFxuICAgICAgKEluamVjdGFibGVzLmFjdGluZ0luamVjdGFibGVzUmVnaXN0cnkgYXMgYW55KVtcImNhY2hlXCJdXG4gICAgKS5yZWR1Y2UoKGFjY3VtOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBba2V5LCB2YWxdKSA9PiB7XG4gICAgICBpZiAoIWtleS5tYXRjaChyZWdleHApKSBhY2N1bVtrZXldID0gdmFsO1xuICAgICAgcmV0dXJuIGFjY3VtO1xuICAgIH0sIHt9KTtcbiAgfVxufVxuIl19
@@ -1,3 +1,13 @@
1
+ import { InstanceCallback } from "./types";
2
+ /**
3
+ * @description Generates a fully qualified reflection metadata key.
4
+ * @summary Returns the reflection key for injectables by prefixing the provided key with the base reflection key.
5
+ * @param {string} key The key to be prefixed
6
+ * @return {string} The fully qualified reflection key
7
+ * @function getInjectKey
8
+ * @memberOf module:injectable-decorators
9
+ */
10
+ export declare const getInjectKey: (key: string) => string;
1
11
  /**
2
12
  * @description Decorator that marks a class as available for dependency injection.
3
13
  * @summary Defines a class as an injectable singleton that can be retrieved from the registry.
@@ -37,7 +47,10 @@
37
47
  * Decorator->>Decorator: Define metadata
38
48
  * Decorator-->>Client: Return instance
39
49
  */
40
- export declare function injectable(category?: string | undefined, force?: boolean, instanceCallback?: (instance: any, ...args: any[]) => void): (original: any, propertyKey?: any) => any;
50
+ export declare function injectable(): (original: any) => any;
51
+ export declare function injectable(category: string): (original: any) => any;
52
+ export declare function injectable(instanceCallback: InstanceCallback<any>): (original: any) => any;
53
+ export declare function injectable(category: string, instanceCallback: InstanceCallback<any>): (original: any) => any;
41
54
  /**
42
55
  * @description Function type for transforming injectable instances before they're injected.
43
56
  * @summary Function which transforms a cached {@link injectable} instance before it's injected into a target object.
@@ -109,4 +122,6 @@ export type InstanceTransformer = (injectable: any, obj: any) => any;
109
122
  * end
110
123
  * end
111
124
  */
112
- export declare function inject(category?: string, transformer?: InstanceTransformer): (target: any, propertyKey?: any) => void;
125
+ export declare function inject(category?: symbol | string | {
126
+ new (...args: any[]): any;
127
+ }, transformer?: InstanceTransformer): (target: any, propertyKey?: any) => void;
@@ -9,60 +9,21 @@ import { getTypeFromDecorator } from "./utils.js";
9
9
  * @function getInjectKey
10
10
  * @memberOf module:injectable-decorators
11
11
  */
12
- const getInjectKey = (key) => InjectablesKeys.REFLECT + key;
13
- /**
14
- * @description Decorator that marks a class as available for dependency injection.
15
- * @summary Defines a class as an injectable singleton that can be retrieved from the registry.
16
- * When applied to a class, replaces its constructor with one that returns a singleton instance.
17
- *
18
- * @param {string} [category] Defaults to the class name. Useful when minification occurs and names are changed,
19
- * or when you want to upcast the object to a different type.
20
- * @param {boolean} [force] Defines if the injectable should override an already existing instance (if any).
21
- * Only meant for extending decorators.
22
- * @param {Function} [instanceCallback] Optional callback function that will be called with the instance after creation.
23
- * @return {Function} A decorator function that transforms the class into an injectable.
24
- *
25
- * @function injectable
26
- * @category Class Decorators
27
- *
28
- * @mermaid
29
- * sequenceDiagram
30
- * participant Client
31
- * participant Decorator
32
- * participant Injectables
33
- *
34
- * Client->>Decorator: @injectable()
35
- * Decorator->>Decorator: Create new constructor
36
- *
37
- * Note over Decorator: When new instance requested
38
- * Decorator->>Injectables: get(name)
39
- * alt Instance exists
40
- * Injectables-->>Decorator: Return existing instance
41
- * else No instance
42
- * Decorator->>Injectables: register(original, name)
43
- * Decorator->>Injectables: get(name)
44
- * Injectables-->>Decorator: Return new instance
45
- * opt Has callback
46
- * Decorator->>Decorator: Call instanceCallback
47
- * end
48
- * end
49
- * Decorator->>Decorator: Define metadata
50
- * Decorator-->>Client: Return instance
51
- */
52
- export function injectable(category = undefined, force = false, instanceCallback) {
53
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
54
- return (original, propertyKey) => {
12
+ export const getInjectKey = (key) => InjectablesKeys.REFLECT + key;
13
+ export function injectable(name, cb) {
14
+ const category = typeof name === "string" ? name : undefined;
15
+ const instanceCallback = (typeof category === "function" ? category : cb);
16
+ return (original) => {
17
+ const symbol = Symbol.for(category || original.toString());
55
18
  const name = category || original.name;
19
+ const metadata = {
20
+ class: name,
21
+ symbol: symbol,
22
+ };
23
+ Reflect.defineMetadata(getInjectKey(InjectablesKeys.INJECTABLE), metadata, original);
56
24
  // the new constructor behaviour
57
25
  const newConstructor = function (...args) {
58
- const inj = Injectables.get(name, ...args);
59
- if (!inj)
60
- return undefined;
61
- const metadata = Object.assign({}, {
62
- class: name,
63
- });
64
- Reflect.defineMetadata(getInjectKey(InjectablesKeys.INJECTABLE), metadata, inj.constructor);
65
- return inj;
26
+ return Injectables.get(symbol, ...args);
66
27
  };
67
28
  // copy prototype so instanceof operator still works
68
29
  newConstructor.prototype = original.prototype;
@@ -74,7 +35,12 @@ export function injectable(category = undefined, force = false, instanceCallback
74
35
  configurable: false,
75
36
  value: original.prototype.constructor.name,
76
37
  });
77
- Injectables.register(newConstructor, name, true, force);
38
+ const opts = {
39
+ singleton: true,
40
+ callback: instanceCallback,
41
+ };
42
+ Reflect.defineMetadata(getInjectKey(InjectablesKeys.INJECTABLE), metadata, newConstructor);
43
+ Injectables.register(original, symbol, opts);
78
44
  // return new constructor (will override original)
79
45
  return newConstructor;
80
46
  };
@@ -141,9 +107,14 @@ export function injectable(category = undefined, force = false, instanceCallback
141
107
  export function inject(category, transformer) {
142
108
  return (target, propertyKey) => {
143
109
  const values = new WeakMap();
144
- const name = category || getTypeFromDecorator(target, propertyKey);
145
- if (!name)
110
+ const name = category
111
+ ? typeof category === "symbol"
112
+ ? category
113
+ : Symbol.for(category.toString())
114
+ : getTypeFromDecorator(target, propertyKey);
115
+ if (!name) {
146
116
  throw new Error(`Could not get Type from decorator`);
117
+ }
147
118
  Reflect.defineMetadata(getInjectKey(InjectablesKeys.INJECT), {
148
119
  injectable: name,
149
120
  }, target, propertyKey);
@@ -160,7 +131,7 @@ export function inject(category, transformer) {
160
131
  if (!obj) {
161
132
  obj = Injectables.get(name);
162
133
  if (!obj)
163
- throw new Error(`Could not get Injectable ${name} to inject in ${target.constructor ? target.constructor.name : target.name}'s ${propertyKey}`);
134
+ throw new Error(`Could not get Injectable ${name.toString()} to inject in ${target.constructor ? target.constructor.name : target.name}'s ${propertyKey}`);
164
135
  if (transformer)
165
136
  try {
166
137
  obj = transformer(obj, target);
@@ -179,4 +150,4 @@ export function inject(category, transformer) {
179
150
  });
180
151
  };
181
152
  }
182
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsdUJBQW9CO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUseUJBQXNCO0FBQzVDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxtQkFBZ0I7QUFFL0M7Ozs7Ozs7R0FPRztBQUNILE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUVwRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQ0c7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUN4QixXQUErQixTQUFTLEVBQ3hDLFFBQWlCLEtBQUssRUFDdEIsZ0JBQTBEO0lBRTFELDZEQUE2RDtJQUM3RCxPQUFPLENBQUMsUUFBYSxFQUFFLFdBQWlCLEVBQUUsRUFBRTtRQUMxQyxNQUFNLElBQUksR0FBRyxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QyxnQ0FBZ0M7UUFDaEMsTUFBTSxjQUFjLEdBQVEsVUFBVSxHQUFHLElBQVc7WUFDbEQsTUFBTSxHQUFHLEdBQVEsV0FBVyxDQUFDLEdBQUcsQ0FBTSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsR0FBRztnQkFBRSxPQUFPLFNBQVMsQ0FBQztZQUUzQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUM1QixFQUFFLEVBQ0Y7Z0JBQ0UsS0FBSyxFQUFFLElBQUk7YUFDWixDQUNGLENBQUM7WUFFRixPQUFPLENBQUMsY0FBYyxDQUNwQixZQUFZLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxFQUN4QyxRQUFRLEVBQ1IsR0FBRyxDQUFDLFdBQVcsQ0FDaEIsQ0FBQztZQUVGLE9BQU8sR0FBRyxDQUFDO1FBQ2Is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QUFDO0lBQ0wsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGVzS2V5cyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgSW5qZWN0YWJsZXMgfSBmcm9tIFwiLi9JbmplY3RhYmxlc1wiO1xuaW1wb3J0IHsgZ2V0VHlwZUZyb21EZWNvcmF0b3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBHZW5lcmF0ZXMgYSBmdWxseSBxdWFsaWZpZWQgcmVmbGVjdGlvbiBtZXRhZGF0YSBrZXkuXG4gKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSByZWZsZWN0aW9uIGtleSBmb3IgaW5qZWN0YWJsZXMgYnkgcHJlZml4aW5nIHRoZSBwcm92aWRlZCBrZXkgd2l0aCB0aGUgYmFzZSByZWZsZWN0aW9uIGtleS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSB0byBiZSBwcmVmaXhlZFxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgZnVsbHkgcXVhbGlmaWVkIHJlZmxlY3Rpb24ga2V5XG4gKiBAZnVuY3Rpb24gZ2V0SW5qZWN0S2V5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmluamVjdGFibGUtZGVjb3JhdG9yc1xuICovXG5jb25zdCBnZXRJbmplY3RLZXkgPSAoa2V5OiBzdHJpbmcpID0+IEluamVjdGFibGVzS2V5cy5SRUZMRUNUICsga2V5O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWNvcmF0b3IgdGhhdCBtYXJrcyBhIGNsYXNzIGFzIGF2YWlsYWJsZSBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgY2xhc3MgYXMgYW4gaW5qZWN0YWJsZSBzaW5nbGV0b24gdGhhdCBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhlIHJlZ2lzdHJ5LlxuICogV2hlbiBhcHBsaWVkIHRvIGEgY2xhc3MsIHJlcGxhY2VzIGl0cyBjb25zdHJ1Y3RvciB3aXRoIG9uZSB0aGF0IHJldHVybnMgYSBzaW5nbGV0b24gaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFtjYXRlZ29yeV0gRGVmYXVsdHMgdG8gdGhlIGNsYXNzIG5hbWUuIFVzZWZ1bCB3aGVuIG1pbmlmaWNhdGlvbiBvY2N1cnMgYW5kIG5hbWVzIGFyZSBjaGFuZ2VkLFxuICogb3Igd2hlbiB5b3Ugd2FudCB0byB1cGNhc3QgdGhlIG9iamVjdCB0byBhIGRpZmZlcmVudCB0eXBlLlxuICogQHBhcmFtIHtib29sZWFufSBbZm9yY2VdIERlZmluZXMgaWYgdGhlIGluamVjdGFibGUgc2hvdWxkIG92ZXJyaWRlIGFuIGFscmVhZHkgZXhpc3RpbmcgaW5zdGFuY2UgKGlmIGFueSkuXG4gKiBPbmx5IG1lYW50IGZvciBleHRlbmRpbmcgZGVjb3JhdG9ycy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpbnN0YW5jZUNhbGxiYWNrXSBPcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGluc3RhbmNlIGFmdGVyIGNyZWF0aW9uLlxuICogQHJldHVybiB7RnVuY3Rpb259IEEgZGVjb3JhdG9yIGZ1bmN0aW9uIHRoYXQgdHJhbnNmb3JtcyB0aGUgY2xhc3MgaW50byBhbiBpbmplY3RhYmxlLlxuICpcbiAqIEBmdW5jdGlvbiBpbmplY3RhYmxlXG4gKiBAY2F0ZWdvcnkgQ2xhc3MgRGVjb3JhdG9yc1xuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2xpZW50XG4gKiAgIHBhcnRpY2lwYW50IERlY29yYXRvclxuICogICBwYXJ0aWNpcGFudCBJbmplY3RhYmxlc1xuICpcbiAqICAgQ2xpZW50LT4+RGVjb3JhdG9yOiBAaW5qZWN0YWJsZSgpXG4gKiAgIERlY29yYXRvci0+PkRlY29yYXRvcjogQ3JlYXRlIG5ldyBjb25zdHJ1Y3RvclxuICpcbiAqICAgTm90ZSBvdmVyIERlY29yYXRvcjogV2hlbiBuZXcgaW5zdGFuY2UgcmVxdWVzdGVkXG4gKiAgIERlY29yYXRvci0+PkluamVjdGFibGVzOiBnZXQobmFtZSlcbiAqICAgYWx0IEluc3RhbmNlIGV4aXN0c1xuICogICAgIEluamVjdGFibGVzLS0+PkRlY29yYXRvcjogUmV0dXJuIGV4aXN0aW5nIGluc3RhbmNlXG4gKiAgIGVsc2UgTm8gaW5zdGFuY2VcbiAqICAgICBEZWNvcmF0b3ItPj5JbmplY3RhYmxlczogcmVnaXN0ZXIob3JpZ2luYWwsIG5hbWUpXG4gKiAgICAgRGVjb3JhdG9yLT4+SW5qZWN0YWJsZXM6IGdldChuYW1lKVxuICogICAgIEluamVjdGFibGVzLS0+PkRlY29yYXRvcjogUmV0dXJuIG5ldyBpbnN0YW5jZVxuICogICAgIG9wdCBIYXMgY2FsbGJhY2tcbiAqICAgICAgIERlY29yYXRvci0+PkRlY29yYXRvcjogQ2FsbCBpbnN0YW5jZUNhbGxiYWNrXG4gKiAgICAgZW5kXG4gKiAgIGVuZFxuICogICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IERlZmluZSBtZXRhZGF0YVxuICogICBEZWNvcmF0b3ItLT4+Q2xpZW50OiBSZXR1cm4gaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdGFibGUoXG4gIGNhdGVnb3J5OiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gIGZvcmNlOiBib29sZWFuID0gZmFsc2UsXG4gIGluc3RhbmNlQ2FsbGJhY2s/OiAoaW5zdGFuY2U6IGFueSwgLi4uYXJnczogYW55W10pID0+IHZvaWRcbikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIHJldHVybiAob3JpZ2luYWw6IGFueSwgcHJvcGVydHlLZXk/OiBhbnkpID0+IHtcbiAgICBjb25zdCBuYW1lID0gY2F0ZWdvcnkgfHwgb3JpZ2luYWwubmFtZTtcbiAgICAvLyB0aGUgbmV3IGNvbnN0cnVjdG9yIGJlaGF2aW91clxuICAgIGNvbnN0IG5ld0NvbnN0cnVjdG9yOiBhbnkgPSBmdW5jdGlvbiAoLi4uYXJnczogYW55W10pIHtcbiAgICAgIGNvbnN0IGluajogYW55ID0gSW5qZWN0YWJsZXMuZ2V0PGFueT4obmFtZSwgLi4uYXJncyk7XG4gICAgICBpZiAoIWluaikgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgbWV0YWRhdGEgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzOiBuYW1lLFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFxuICAgICAgICBnZXRJbmplY3RLZXkoSW5qZWN0YWJsZXNLZXlzLklOSkVDVEFCTEUpLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgaW5qLmNvbnN0cnVjdG9yXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gaW5qO1xuICAgIH07XG5cbiAgICAvLyBjb3B5IHByb3RvdHlwZSBzbyBpbnN0YW5jZW9mIG9wZXJhdG9yIHN0aWxsIHdvcmtzXG4gICAgbmV3Q29uc3RydWN0b3IucHJvdG90eXBlID0gb3JpZ2luYWwucHJvdG90eXBlO1xuICAgIC8vIG5ld0NvbnN0cnVjdG9yLl9fcHJvdG9fXyA9IG9yaWdpbmFsLl9fcHJvdG9fXztcbiAgICAvLyBTZXRzIHRoZSBwcm9wZXIgY29uc3RydWN0b3IgbmFtZSBmb3IgdHlwZSB2ZXJpZmljYXRpb25cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3Q29uc3RydWN0b3IsIFwibmFtZVwiLCB7XG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBvcmlnaW5hbC5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZSxcbiAgICB9KTtcblxuICAgIEluamVjdGFibGVzLnJlZ2lzdGVyKG5ld0NvbnN0cnVjdG9yLCBuYW1lLCB0cnVlLCBmb3JjZSk7XG4gICAgLy8gcmV0dXJuIG5ldyBjb25zdHJ1Y3RvciAod2lsbCBvdmVycmlkZSBvcmlnaW5hbClcbiAgICByZXR1cm4gbmV3Q29uc3RydWN0b3I7XG4gIH07XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBGdW5jdGlvbiB0eXBlIGZvciB0cmFuc2Zvcm1pbmcgaW5qZWN0YWJsZSBpbnN0YW5jZXMgYmVmb3JlIHRoZXkncmUgaW5qZWN0ZWQuXG4gKiBAc3VtbWFyeSBGdW5jdGlvbiB3aGljaCB0cmFuc2Zvcm1zIGEgY2FjaGVkIHtAbGluayBpbmplY3RhYmxlfSBpbnN0YW5jZSBiZWZvcmUgaXQncyBpbmplY3RlZCBpbnRvIGEgdGFyZ2V0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge2FueX0gaW5qZWN0YWJsZSBUaGUgaW5qZWN0YWJsZSBpbnN0YW5jZSB0byB0cmFuc2Zvcm1cbiAqIEBwYXJhbSB7YW55fSBvYmogVGhlIG9iamVjdCB0aGUgaW5qZWN0YWJsZSB3aWxsIGJlIGluamVjdGVkIG9uXG4gKiBAcmV0dXJuIHthbnl9IFRoZSB0cmFuc2Zvcm1lZCBpbmplY3RhYmxlIGluc3RhbmNlXG4gKlxuICogQHR5cGVkZWYge0Z1bmN0aW9ufSBJbnN0YW5jZVRyYW5zZm9ybWVyXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmluamVjdGFibGUtZGVjb3JhdG9yc1xuICovXG5leHBvcnQgdHlwZSBJbnN0YW5jZVRyYW5zZm9ybWVyID0gKGluamVjdGFibGU6IGFueSwgb2JqOiBhbnkpID0+IGFueTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUHJvcGVydHkgZGVjb3JhdG9yIHRoYXQgaW5qZWN0cyBhIGRlcGVuZGVuY3kgaW50byBhIGNsYXNzIHByb3BlcnR5LlxuICogQHN1bW1hcnkgQWxsb3dzIGZvciB0aGUgaW5qZWN0aW9uIG9mIGFuIHtAbGluayBpbmplY3RhYmxlfSBkZWNvcmF0ZWQgZGVwZW5kZW5jeSBpbnRvIGEgY2xhc3MgcHJvcGVydHkuXG4gKiBUaGUgcHJvcGVydHkgbXVzdCBiZSB0eXBlZCBmb3IgdGhlIHJlcXVlc3RlZCBkZXBlbmRlbmN5LiBPbmx5IGNvbmNyZXRlIGNsYXNzZXMgYXJlIHN1cHBvcnRlZDsgZ2VuZXJpY3MgYXJlIG5vdC5cbiAqXG4gKiBJbmplY3RlZCBwcm9wZXJ0aWVzIHNob3VsZCBiZSBkZXNjcmliZWQgbGlrZSBzbzpcbiAqIDxwcmU+XG4gKiAgICAgY2xhc3MgQ2xhc3NOYW1lIHtcbiAqICAgICAgICAgLi4uXG4gKlxuICogICAgICAgICBAaW5qZWN0KClcbiAqICAgICAgICAgcHJvcGVydHlOYW1lITogSW5qZWN0YWJsZUNsYXNzO1xuICpcbiAqICAgICAgICAgLi4uXG4gKiAgICAgfVxuICogPC9wcmU+XG4gKlxuICogd2hlcmUgSW5qZWN0YWJsZUNsYXNzIGlzIHRoZSBjbGFzcyB5b3Ugd2FudCB0byBpbmplY3QuXG4gKiBOb3RpY2UgdGhlIHVzZSBvZiAnITonIHRvIGVuc3VyZSB0aGUgdHJhbnNwaWxlciB0aGUgcHJvcGVydHkgd2lsbCBiZSBzZXQgb3V0c2lkZSB0aGUgY29uc3RydWN0b3IgYnV0IHdpbGwgYWx3YXlzIGJlIGRlZmluZWQuXG4gKiBGb3IgcHJvamVjdHMgd2hlcmUgbWluaWZpY2F0aW9uIG9jY3VycywgeW91IHNob3VsZCB1c2UgdGhlIGNhdGVnb3J5IHBhcmFtIHRvIGVuc3VyZSB0aGUgbmFtZSBpcyB0aGUgc2FtZSB0aHJvdWdob3V0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbY2F0ZWdvcnldIERlZmF1bHRzIHRvIHRoZSBjbGFzcyBuYW1lIGRlcml2ZWQgZnJvbSB0aGUgcHJvcGVydHkgdHlwZS4gVXNlZnVsIHdoZW4gbWluaWZpY2F0aW9uIG9jY3Vyc1xuICogYW5kIG5hbWVzIGFyZSBjaGFuZ2VkLCBvciB3aGVuIHlvdSB3YW50IHRvIHVwY2FzdCB0aGUgb2JqZWN0IHRvIGEgZGlmZmVyZW50IHR5cGUuXG4gKiBAcGFyYW0ge0luc3RhbmNlVHJhbnNmb3JtZXJ9IFt0cmFuc2Zvcm1lcl0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gdHJhbnNmb3JtIHRoZSBpbmplY3RhYmxlIGluc3RhbmNlIGJlZm9yZSBpdCdzIGluamVjdGVkLlxuICogQHJldHVybiB7RnVuY3Rpb259IEEgcHJvcGVydHkgZGVjb3JhdG9yIGZ1bmN0aW9uIHRoYXQgc2V0cyB1cCB0aGUgZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gKlxuICogQGZ1bmN0aW9uIGluamVjdFxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBEZWNvcmF0b3JcbiAqICAgcGFydGljaXBhbnQgSW5qZWN0YWJsZXNcbiAqXG4gKiAgIENsaWVudC0+PkRlY29yYXRvcjogQGluamVjdCgpXG4gKiAgIERlY29yYXRvci0+PkRlY29yYXRvcjogR2V0IHR5cGUgZnJvbSBwcm9wZXJ0eVxuICogICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IERlZmluZSBtZXRhZGF0YVxuICogICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IERlZmluZSBwcm9wZXJ0eSBnZXR0ZXJcbiAqXG4gKiAgIE5vdGUgb3ZlciBEZWNvcmF0b3I6IFdoZW4gcHJvcGVydHkgYWNjZXNzZWRcbiAqICAgQ2xpZW50LT4+RGVjb3JhdG9yOiBhY2Nlc3MgcHJvcGVydHlcbiAqICAgRGVjb3JhdG9yLT4+RGVjb3JhdG9yOiBDaGVjayBpZiBpbnN0YW5jZSBleGlzdHNcbiAqICAgYWx0IEluc3RhbmNlIGV4aXN0cyBpbiBXZWFrTWFwXG4gKiAgICAgRGVjb3JhdG9yLS0+PkNsaWVudDogUmV0dXJuIGNhY2hlZCBpbnN0YW5jZVxuICogICBlbHNlIE5vIGluc3RhbmNlXG4gKiAgICAgRGVjb3JhdG9yLT4+SW5qZWN0YWJsZXM6IGdldChuYW1lKVxuICogICAgIGFsdCBJbmplY3RhYmxlIGZvdW5kXG4gKiAgICAgICBJbmplY3RhYmxlcy0tPj5EZWNvcmF0b3I6IFJldHVybiBpbmplY3RhYmxlIGluc3RhbmNlXG4gKiAgICAgICBvcHQgSGFzIHRyYW5zZm9ybWVyXG4gKiAgICAgICAgIERlY29yYXRvci0+PkRlY29yYXRvcjogQ2FsbCB0cmFuc2Zvcm1lclxuICogICAgICAgZW5kXG4gKiAgICAgICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IFN0b3JlIGluIFdlYWtNYXBcbiAqICAgICAgIERlY29yYXRvci0tPj5DbGllbnQ6IFJldHVybiBpbnN0YW5jZVxuICogICAgIGVsc2UgTm8gaW5qZWN0YWJsZVxuICogICAgICAgRGVjb3JhdG9yLS0+PkNsaWVudDogVGhyb3cgZXJyb3JcbiAqICAgICBlbmRcbiAqICAgZW5kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3QoY2F0ZWdvcnk/OiBzdHJpbmcsIHRyYW5zZm9ybWVyPzogSW5zdGFuY2VUcmFuc2Zvcm1lcikge1xuICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleT86IGFueSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlcyA9IG5ldyBXZWFrTWFwKCk7XG5cbiAgICBjb25zdCBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxuICAgICAgY2F0ZWdvcnkgfHwgZ2V0VHlwZUZyb21EZWNvcmF0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgaWYgKCFuYW1lKSB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBnZXQgVHlwZSBmcm9tIGRlY29yYXRvcmApO1xuXG4gICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcbiAgICAgIGdldEluamVjdEtleShJbmplY3RhYmxlc0tleXMuSU5KRUNUKSxcbiAgICAgIHtcbiAgICAgICAgaW5qZWN0YWJsZTogbmFtZSxcbiAgICAgIH0sXG4gICAgICB0YXJnZXQsXG4gICAgICBwcm9wZXJ0eUtleVxuICAgICk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0KHRoaXM6IGFueSkge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICBwcm9wZXJ0eUtleVxuICAgICAgICApIGFzIFByb3BlcnR5RGVzY3JpcHRvcjtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5S2V5LCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGdldCh0aGlzOiBhbnkpIHtcbiAgICAgICAgICAgICAgbGV0IG9iaiA9IHZhbHVlcy5nZXQodGhpcyk7XG4gICAgICAgICAgICAgIGlmICghb2JqKSB7XG4gICAgICAgICAgICAgICAgb2JqID0gSW5qZWN0YWJsZXMuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICghb2JqKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgQ291bGQgbm90IGdldCBJbmplY3RhYmxlICR7bmFtZX0gdG8gaW5qZWN0IGluICR7dGFyZ2V0LmNvbnN0cnVjdG9yID8gdGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWUgOiB0YXJnZXQubmFtZX0ncyAke3Byb3BlcnR5S2V5fWBcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybWVyKVxuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb2JqID0gdHJhbnNmb3JtZXIob2JqLCB0YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhbHVlcy5zZXQodGhpcywgb2JqKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gdGhpc1twcm9wZXJ0eUtleV07XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG59XG4iXX0=
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsdUJBQW9CO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUseUJBQXNCO0FBQzVDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxtQkFBZ0I7QUFPL0M7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFrRDNFLE1BQU0sVUFBVSxVQUFVLENBQ3hCLElBQXFDLEVBQ3JDLEVBQTBCO0lBRTFCLE1BQU0sUUFBUSxHQUFHLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDN0QsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE9BQU8sUUFBUSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBRTNELENBQUM7SUFFZCxPQUFPLENBQUMsUUFBYSxFQUFFLEVBQUU7UUFDdkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDM0QsTUFBTSxJQUFJLEdBQUcsUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFFdkMsTUFBTSxRQUFRLEdBQXVCO1lBQ25DLEtBQUssRUFBRSxJQUFJO1lBQ1gsTUFBTSxFQUFFLE1BQU07U0FDZixDQUFDO1FBRUYsT0FBTyxDQUFDLGNBQWMsQ0FDcEIsWUFBWSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsRUFDeEMsUUFBUSxFQUNSLFFBQVEsQ0FDVCxDQUFDO1FBQ0YsZ0NBQWdDO1FBQ2hDLE1BQU0sY0FBYyxHQUFR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QUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLFdBQVcsRUFBRSxDQUMxSSxDQUFDO2dDQUNKLElBQUksV0FBVztvQ0FDYixJQUFJLENBQUM7d0NBQ0gsR0FBRyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7b0NBQ2pDLENBQUM7b0NBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzt3Q0FDWCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO29DQUNuQixDQUFDO2dDQUNILE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDOzRCQUN4QixDQUFDOzRCQUNELE9BQU8sR0FBRyxDQUFDO3dCQUNiLENBQUM7cUJBQ0YsQ0FBQyxDQUFDO29CQUNILE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUMzQixDQUFDO1lBQ0gsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlc0tleXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEluamVjdGFibGVzIH0gZnJvbSBcIi4vSW5qZWN0YWJsZXNcIjtcbmltcG9ydCB7IGdldFR5cGVGcm9tRGVjb3JhdG9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7XG4gIEluamVjdGFibGVNZXRhZGF0YSxcbiAgSW5qZWN0YWJsZU9wdGlvbnMsXG4gIEluc3RhbmNlQ2FsbGJhY2ssXG59IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEdlbmVyYXRlcyBhIGZ1bGx5IHF1YWxpZmllZCByZWZsZWN0aW9uIG1ldGFkYXRhIGtleS5cbiAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIHJlZmxlY3Rpb24ga2V5IGZvciBpbmplY3RhYmxlcyBieSBwcmVmaXhpbmcgdGhlIHByb3ZpZGVkIGtleSB3aXRoIHRoZSBiYXNlIHJlZmxlY3Rpb24ga2V5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IHRvIGJlIHByZWZpeGVkXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBmdWxseSBxdWFsaWZpZWQgcmVmbGVjdGlvbiBrZXlcbiAqIEBmdW5jdGlvbiBnZXRJbmplY3RLZXlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6aW5qZWN0YWJsZS1kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRJbmplY3RLZXkgPSAoa2V5OiBzdHJpbmcpID0+IEluamVjdGFibGVzS2V5cy5SRUZMRUNUICsga2V5O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWNvcmF0b3IgdGhhdCBtYXJrcyBhIGNsYXNzIGFzIGF2YWlsYWJsZSBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgY2xhc3MgYXMgYW4gaW5qZWN0YWJsZSBzaW5nbGV0b24gdGhhdCBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhlIHJlZ2lzdHJ5LlxuICogV2hlbiBhcHBsaWVkIHRvIGEgY2xhc3MsIHJlcGxhY2VzIGl0cyBjb25zdHJ1Y3RvciB3aXRoIG9uZSB0aGF0IHJldHVybnMgYSBzaW5nbGV0b24gaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFtjYXRlZ29yeV0gRGVmYXVsdHMgdG8gdGhlIGNsYXNzIG5hbWUuIFVzZWZ1bCB3aGVuIG1pbmlmaWNhdGlvbiBvY2N1cnMgYW5kIG5hbWVzIGFyZSBjaGFuZ2VkLFxuICogb3Igd2hlbiB5b3Ugd2FudCB0byB1cGNhc3QgdGhlIG9iamVjdCB0byBhIGRpZmZlcmVudCB0eXBlLlxuICogQHBhcmFtIHtib29sZWFufSBbZm9yY2VdIERlZmluZXMgaWYgdGhlIGluamVjdGFibGUgc2hvdWxkIG92ZXJyaWRlIGFuIGFscmVhZHkgZXhpc3RpbmcgaW5zdGFuY2UgKGlmIGFueSkuXG4gKiBPbmx5IG1lYW50IGZvciBleHRlbmRpbmcgZGVjb3JhdG9ycy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpbnN0YW5jZUNhbGxiYWNrXSBPcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGluc3RhbmNlIGFmdGVyIGNyZWF0aW9uLlxuICogQHJldHVybiB7RnVuY3Rpb259IEEgZGVjb3JhdG9yIGZ1bmN0aW9uIHRoYXQgdHJhbnNmb3JtcyB0aGUgY2xhc3MgaW50byBhbiBpbmplY3RhYmxlLlxuICpcbiAqIEBmdW5jdGlvbiBpbmplY3RhYmxlXG4gKiBAY2F0ZWdvcnkgQ2xhc3MgRGVjb3JhdG9yc1xuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2xpZW50XG4gKiAgIHBhcnRpY2lwYW50IERlY29yYXRvclxuICogICBwYXJ0aWNpcGFudCBJbmplY3RhYmxlc1xuICpcbiAqICAgQ2xpZW50LT4+RGVjb3JhdG9yOiBAaW5qZWN0YWJsZSgpXG4gKiAgIERlY29yYXRvci0+PkRlY29yYXRvcjogQ3JlYXRlIG5ldyBjb25zdHJ1Y3RvclxuICpcbiAqICAgTm90ZSBvdmVyIERlY29yYXRvcjogV2hlbiBuZXcgaW5zdGFuY2UgcmVxdWVzdGVkXG4gKiAgIERlY29yYXRvci0+PkluamVjdGFibGVzOiBnZXQobmFtZSlcbiAqICAgYWx0IEluc3RhbmNlIGV4aXN0c1xuICogICAgIEluamVjdGFibGVzLS0+PkRlY29yYXRvcjogUmV0dXJuIGV4aXN0aW5nIGluc3RhbmNlXG4gKiAgIGVsc2UgTm8gaW5zdGFuY2VcbiAqICAgICBEZWNvcmF0b3ItPj5JbmplY3RhYmxlczogcmVnaXN0ZXIob3JpZ2luYWwsIG5hbWUpXG4gKiAgICAgRGVjb3JhdG9yLT4+SW5qZWN0YWJsZXM6IGdldChuYW1lKVxuICogICAgIEluamVjdGFibGVzLS0+PkRlY29yYXRvcjogUmV0dXJuIG5ldyBpbnN0YW5jZVxuICogICAgIG9wdCBIYXMgY2FsbGJhY2tcbiAqICAgICAgIERlY29yYXRvci0+PkRlY29yYXRvcjogQ2FsbCBpbnN0YW5jZUNhbGxiYWNrXG4gKiAgICAgZW5kXG4gKiAgIGVuZFxuICogICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IERlZmluZSBtZXRhZGF0YVxuICogICBEZWNvcmF0b3ItLT4+Q2xpZW50OiBSZXR1cm4gaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdGFibGUoKTogKG9yaWdpbmFsOiBhbnkpID0+IGFueTtcbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RhYmxlKGNhdGVnb3J5OiBzdHJpbmcpOiAob3JpZ2luYWw6IGFueSkgPT4gYW55O1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdGFibGUoXG4gIGluc3RhbmNlQ2FsbGJhY2s6IEluc3RhbmNlQ2FsbGJhY2s8YW55PlxuKTogKG9yaWdpbmFsOiBhbnkpID0+IGFueTtcbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RhYmxlKFxuICBjYXRlZ29yeTogc3RyaW5nLFxuICBpbnN0YW5jZUNhbGxiYWNrOiBJbnN0YW5jZUNhbGxiYWNrPGFueT5cbik6IChvcmlnaW5hbDogYW55KSA9PiBhbnk7XG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0YWJsZShcbiAgbmFtZT86IHN0cmluZyB8IEluc3RhbmNlQ2FsbGJhY2s8YW55PixcbiAgY2I/OiBJbnN0YW5jZUNhbGxiYWNrPGFueT5cbikge1xuICBjb25zdCBjYXRlZ29yeSA9IHR5cGVvZiBuYW1lID09PSBcInN0cmluZ1wiID8gbmFtZSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgaW5zdGFuY2VDYWxsYmFjayA9ICh0eXBlb2YgY2F0ZWdvcnkgPT09IFwiZnVuY3Rpb25cIiA/IGNhdGVnb3J5IDogY2IpIGFzXG4gICAgfCBJbnN0YW5jZUNhbGxiYWNrPGFueT5cbiAgICB8IHVuZGVmaW5lZDtcblxuICByZXR1cm4gKG9yaWdpbmFsOiBhbnkpID0+IHtcbiAgICBjb25zdCBzeW1ib2wgPSBTeW1ib2wuZm9yKGNhdGVnb3J5IHx8IG9yaWdpbmFsLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IG5hbWUgPSBjYXRlZ29yeSB8fCBvcmlnaW5hbC5uYW1lO1xuXG4gICAgY29uc3QgbWV0YWRhdGE6IEluamVjdGFibGVNZXRhZGF0YSA9IHtcbiAgICAgIGNsYXNzOiBuYW1lLFxuICAgICAgc3ltYm9sOiBzeW1ib2wsXG4gICAgfTtcblxuICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoXG4gICAgICBnZXRJbmplY3RLZXkoSW5qZWN0YWJsZXNLZXlzLklOSkVDVEFCTEUpLFxuICAgICAgbWV0YWRhdGEsXG4gICAgICBvcmlnaW5hbFxuICAgICk7XG4gICAgLy8gdGhlIG5ldyBjb25zdHJ1Y3RvciBiZWhhdmlvdXJcbiAgICBjb25zdCBuZXdDb25zdHJ1Y3RvcjogYW55ID0gZnVuY3Rpb24gKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICByZXR1cm4gSW5qZWN0YWJsZXMuZ2V0PGFueT4oc3ltYm9sLCAuLi5hcmdzKTtcbiAgICB9O1xuXG4gICAgLy8gY29weSBwcm90b3R5cGUgc28gaW5zdGFuY2VvZiBvcGVyYXRvciBzdGlsbCB3b3Jrc1xuICAgIG5ld0NvbnN0cnVjdG9yLnByb3RvdHlwZSA9IG9yaWdpbmFsLnByb3RvdHlwZTtcbiAgICAvLyBuZXdDb25zdHJ1Y3Rvci5fX3Byb3RvX18gPSBvcmlnaW5hbC5fX3Byb3RvX187XG4gICAgLy8gU2V0cyB0aGUgcHJvcGVyIGNvbnN0cnVjdG9yIG5hbWUgZm9yIHR5cGUgdmVyaWZpY2F0aW9uXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ld0NvbnN0cnVjdG9yLCBcIm5hbWVcIiwge1xuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogb3JpZ2luYWwucHJvdG90eXBlLmNvbnN0cnVjdG9yLm5hbWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBvcHRzOiBJbmplY3RhYmxlT3B0aW9uczxhbnk+ID0ge1xuICAgICAgc2luZ2xldG9uOiB0cnVlLFxuICAgICAgY2FsbGJhY2s6IGluc3RhbmNlQ2FsbGJhY2sgYXMgSW5zdGFuY2VDYWxsYmFjazxhbnk+LFxuICAgIH07XG5cbiAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFxuICAgICAgZ2V0SW5qZWN0S2V5KEluamVjdGFibGVzS2V5cy5JTkpFQ1RBQkxFKSxcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgbmV3Q29uc3RydWN0b3JcbiAgICApO1xuXG4gICAgSW5qZWN0YWJsZXMucmVnaXN0ZXIob3JpZ2luYWwsIHN5bWJvbCwgb3B0cyk7XG4gICAgLy8gcmV0dXJuIG5ldyBjb25zdHJ1Y3RvciAod2lsbCBvdmVycmlkZSBvcmlnaW5hbClcbiAgICByZXR1cm4gbmV3Q29uc3RydWN0b3I7XG4gIH07XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBGdW5jdGlvbiB0eXBlIGZvciB0cmFuc2Zvcm1pbmcgaW5qZWN0YWJsZSBpbnN0YW5jZXMgYmVmb3JlIHRoZXkncmUgaW5qZWN0ZWQuXG4gKiBAc3VtbWFyeSBGdW5jdGlvbiB3aGljaCB0cmFuc2Zvcm1zIGEgY2FjaGVkIHtAbGluayBpbmplY3RhYmxlfSBpbnN0YW5jZSBiZWZvcmUgaXQncyBpbmplY3RlZCBpbnRvIGEgdGFyZ2V0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge2FueX0gaW5qZWN0YWJsZSBUaGUgaW5qZWN0YWJsZSBpbnN0YW5jZSB0byB0cmFuc2Zvcm1cbiAqIEBwYXJhbSB7YW55fSBvYmogVGhlIG9iamVjdCB0aGUgaW5qZWN0YWJsZSB3aWxsIGJlIGluamVjdGVkIG9uXG4gKiBAcmV0dXJuIHthbnl9IFRoZSB0cmFuc2Zvcm1lZCBpbmplY3RhYmxlIGluc3RhbmNlXG4gKlxuICogQHR5cGVkZWYge0Z1bmN0aW9ufSBJbnN0YW5jZVRyYW5zZm9ybWVyXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmluamVjdGFibGUtZGVjb3JhdG9yc1xuICovXG5leHBvcnQgdHlwZSBJbnN0YW5jZVRyYW5zZm9ybWVyID0gKGluamVjdGFibGU6IGFueSwgb2JqOiBhbnkpID0+IGFueTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUHJvcGVydHkgZGVjb3JhdG9yIHRoYXQgaW5qZWN0cyBhIGRlcGVuZGVuY3kgaW50byBhIGNsYXNzIHByb3BlcnR5LlxuICogQHN1bW1hcnkgQWxsb3dzIGZvciB0aGUgaW5qZWN0aW9uIG9mIGFuIHtAbGluayBpbmplY3RhYmxlfSBkZWNvcmF0ZWQgZGVwZW5kZW5jeSBpbnRvIGEgY2xhc3MgcHJvcGVydHkuXG4gKiBUaGUgcHJvcGVydHkgbXVzdCBiZSB0eXBlZCBmb3IgdGhlIHJlcXVlc3RlZCBkZXBlbmRlbmN5LiBPbmx5IGNvbmNyZXRlIGNsYXNzZXMgYXJlIHN1cHBvcnRlZDsgZ2VuZXJpY3MgYXJlIG5vdC5cbiAqXG4gKiBJbmplY3RlZCBwcm9wZXJ0aWVzIHNob3VsZCBiZSBkZXNjcmliZWQgbGlrZSBzbzpcbiAqIDxwcmU+XG4gKiAgICAgY2xhc3MgQ2xhc3NOYW1lIHtcbiAqICAgICAgICAgLi4uXG4gKlxuICogICAgICAgICBAaW5qZWN0KClcbiAqICAgICAgICAgcHJvcGVydHlOYW1lITogSW5qZWN0YWJsZUNsYXNzO1xuICpcbiAqICAgICAgICAgLi4uXG4gKiAgICAgfVxuICogPC9wcmU+XG4gKlxuICogd2hlcmUgSW5qZWN0YWJsZUNsYXNzIGlzIHRoZSBjbGFzcyB5b3Ugd2FudCB0byBpbmplY3QuXG4gKiBOb3RpY2UgdGhlIHVzZSBvZiAnITonIHRvIGVuc3VyZSB0aGUgdHJhbnNwaWxlciB0aGUgcHJvcGVydHkgd2lsbCBiZSBzZXQgb3V0c2lkZSB0aGUgY29uc3RydWN0b3IgYnV0IHdpbGwgYWx3YXlzIGJlIGRlZmluZWQuXG4gKiBGb3IgcHJvamVjdHMgd2hlcmUgbWluaWZpY2F0aW9uIG9jY3VycywgeW91IHNob3VsZCB1c2UgdGhlIGNhdGVnb3J5IHBhcmFtIHRvIGVuc3VyZSB0aGUgbmFtZSBpcyB0aGUgc2FtZSB0aHJvdWdob3V0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbY2F0ZWdvcnldIERlZmF1bHRzIHRvIHRoZSBjbGFzcyBuYW1lIGRlcml2ZWQgZnJvbSB0aGUgcHJvcGVydHkgdHlwZS4gVXNlZnVsIHdoZW4gbWluaWZpY2F0aW9uIG9jY3Vyc1xuICogYW5kIG5hbWVzIGFyZSBjaGFuZ2VkLCBvciB3aGVuIHlvdSB3YW50IHRvIHVwY2FzdCB0aGUgb2JqZWN0IHRvIGEgZGlmZmVyZW50IHR5cGUuXG4gKiBAcGFyYW0ge0luc3RhbmNlVHJhbnNmb3JtZXJ9IFt0cmFuc2Zvcm1lcl0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gdHJhbnNmb3JtIHRoZSBpbmplY3RhYmxlIGluc3RhbmNlIGJlZm9yZSBpdCdzIGluamVjdGVkLlxuICogQHJldHVybiB7RnVuY3Rpb259IEEgcHJvcGVydHkgZGVjb3JhdG9yIGZ1bmN0aW9uIHRoYXQgc2V0cyB1cCB0aGUgZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gKlxuICogQGZ1bmN0aW9uIGluamVjdFxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBEZWNvcmF0b3JcbiAqICAgcGFydGljaXBhbnQgSW5qZWN0YWJsZXNcbiAqXG4gKiAgIENsaWVudC0+PkRlY29yYXRvcjogQGluamVjdCgpXG4gKiAgIERlY29yYXRvci0+PkRlY29yYXRvcjogR2V0IHR5cGUgZnJvbSBwcm9wZXJ0eVxuICogICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IERlZmluZSBtZXRhZGF0YVxuICogICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IERlZmluZSBwcm9wZXJ0eSBnZXR0ZXJcbiAqXG4gKiAgIE5vdGUgb3ZlciBEZWNvcmF0b3I6IFdoZW4gcHJvcGVydHkgYWNjZXNzZWRcbiAqICAgQ2xpZW50LT4+RGVjb3JhdG9yOiBhY2Nlc3MgcHJvcGVydHlcbiAqICAgRGVjb3JhdG9yLT4+RGVjb3JhdG9yOiBDaGVjayBpZiBpbnN0YW5jZSBleGlzdHNcbiAqICAgYWx0IEluc3RhbmNlIGV4aXN0cyBpbiBXZWFrTWFwXG4gKiAgICAgRGVjb3JhdG9yLS0+PkNsaWVudDogUmV0dXJuIGNhY2hlZCBpbnN0YW5jZVxuICogICBlbHNlIE5vIGluc3RhbmNlXG4gKiAgICAgRGVjb3JhdG9yLT4+SW5qZWN0YWJsZXM6IGdldChuYW1lKVxuICogICAgIGFsdCBJbmplY3RhYmxlIGZvdW5kXG4gKiAgICAgICBJbmplY3RhYmxlcy0tPj5EZWNvcmF0b3I6IFJldHVybiBpbmplY3RhYmxlIGluc3RhbmNlXG4gKiAgICAgICBvcHQgSGFzIHRyYW5zZm9ybWVyXG4gKiAgICAgICAgIERlY29yYXRvci0+PkRlY29yYXRvcjogQ2FsbCB0cmFuc2Zvcm1lclxuICogICAgICAgZW5kXG4gKiAgICAgICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IFN0b3JlIGluIFdlYWtNYXBcbiAqICAgICAgIERlY29yYXRvci0tPj5DbGllbnQ6IFJldHVybiBpbnN0YW5jZVxuICogICAgIGVsc2UgTm8gaW5qZWN0YWJsZVxuICogICAgICAgRGVjb3JhdG9yLS0+PkNsaWVudDogVGhyb3cgZXJyb3JcbiAqICAgICBlbmRcbiAqICAgZW5kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3QoXG4gIGNhdGVnb3J5Pzogc3ltYm9sIHwgc3RyaW5nIHwgeyBuZXcgKC4uLmFyZ3M6IGFueVtdKTogYW55IH0sXG4gIHRyYW5zZm9ybWVyPzogSW5zdGFuY2VUcmFuc2Zvcm1lclxuKSB7XG4gIHJldHVybiAodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5PzogYW55KSA9PiB7XG4gICAgY29uc3QgdmFsdWVzID0gbmV3IFdlYWtNYXAoKTtcblxuICAgIGNvbnN0IG5hbWU6IHN5bWJvbCB8IHVuZGVmaW5lZCA9IGNhdGVnb3J5XG4gICAgICA/IHR5cGVvZiBjYXRlZ29yeSA9PT0gXCJzeW1ib2xcIlxuICAgICAgICA/IGNhdGVnb3J5XG4gICAgICAgIDogU3ltYm9sLmZvcihjYXRlZ29yeS50b1N0cmluZygpKVxuICAgICAgOiBnZXRUeXBlRnJvbURlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGdldCBUeXBlIGZyb20gZGVjb3JhdG9yYCk7XG4gICAgfVxuXG4gICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcbiAgICAgIGdldEluamVjdEtleShJbmplY3RhYmxlc0tleXMuSU5KRUNUKSxcbiAgICAgIHtcbiAgICAgICAgaW5qZWN0YWJsZTogbmFtZSxcbiAgICAgIH0sXG4gICAgICB0YXJnZXQsXG4gICAgICBwcm9wZXJ0eUtleVxuICAgICk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0KHRoaXM6IGFueSkge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICBwcm9wZXJ0eUtleVxuICAgICAgICApIGFzIFByb3BlcnR5RGVzY3JpcHRvcjtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5S2V5LCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGdldCh0aGlzOiBhbnkpIHtcbiAgICAgICAgICAgICAgbGV0IG9iaiA9IHZhbHVlcy5nZXQodGhpcyk7XG4gICAgICAgICAgICAgIGlmICghb2JqKSB7XG4gICAgICAgICAgICAgICAgb2JqID0gSW5qZWN0YWJsZXMuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICghb2JqKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgQ291bGQgbm90IGdldCBJbmplY3RhYmxlICR7bmFtZS50b1N0cmluZygpfSB0byBpbmplY3QgaW4gJHt0YXJnZXQuY29uc3RydWN0b3IgPyB0YXJnZXQuY29uc3RydWN0b3IubmFtZSA6IHRhcmdldC5uYW1lfSdzICR7cHJvcGVydHlLZXl9YFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtZXIpXG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvYmogPSB0cmFuc2Zvcm1lcihvYmosIHRhcmdldCk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFsdWVzLnNldCh0aGlzLCBvYmopO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB0aGlzW3Byb3BlcnR5S2V5XTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfTtcbn1cbiJdfQ==
@@ -10,6 +10,7 @@ export * from "./constants";
10
10
  export * from "./decorators";
11
11
  export * from "./Injectables";
12
12
  export * from "./registry";
13
+ export * from "./types";
13
14
  export * from "./utils";
14
15
  /**
15
16
  * @description Current version of the injectable-decorators library.
@@ -17,4 +18,4 @@ export * from "./utils";
17
18
  * @const VERSION
18
19
  * @memberOf module:injectable-decorators
19
20
  */
20
- export declare const VERSION = "1.6.3";
21
+ export declare const VERSION = "1.6.5";
package/lib/esm/index.js CHANGED
@@ -10,6 +10,7 @@ export * from "./constants.js";
10
10
  export * from "./decorators.js";
11
11
  export * from "./Injectables.js";
12
12
  export * from "./registry.js";
13
+ export * from "./types.js";
13
14
  export * from "./utils.js";
14
15
  /**
15
16
  * @description Current version of the injectable-decorators library.
@@ -17,5 +18,5 @@ export * from "./utils.js";
17
18
  * @const VERSION
18
19
  * @memberOf module:injectable-decorators
19
20
  */
20
- export const VERSION = "1.6.3";
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILCtCQUE0QjtBQUM1QixnQ0FBNkI7QUFDN0IsaUNBQThCO0FBQzlCLDhCQUEyQjtBQUMzQiwyQkFBd0I7QUFFeEI7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZGVzY3JpcHRpb24gQSBsaWdodHdlaWdodCBkZXBlbmRlbmN5IGluamVjdGlvbiBsaWJyYXJ5IGZvciBUeXBlU2NyaXB0IGFwcGxpY2F0aW9ucy5cbiAqIEBzdW1tYXJ5IEFkZHMgYSBzaW1wbGUgSW5qZWN0YWJsZXMgaW1wbGVtZW50YXRpb24gdG8gY3JlYXRlIHNpbmdsZXRvbiBpbnN0YW5jZXMgb2YgYW4gb2JqZWN0XG4gKiBhbmQgZWFzaWx5IGluamVjdCBpdCBpbnRvIG90aGVyIG9iamVjdHMuIFByb3ZpZGVzIGRlY29yYXRvcnMgZm9yIG1hcmtpbmcgY2xhc3NlcyBhcyBpbmplY3RhYmxlXG4gKiBhbmQgZm9yIGluamVjdGluZyBkZXBlbmRlbmNpZXMgaW50byBjbGFzcyBwcm9wZXJ0aWVzLlxuICpcbiAqIEBtb2R1bGUgaW5qZWN0YWJsZS1kZWNvcmF0b3JzXG4gKi9cblxuZXhwb3J0ICogZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9JbmplY3RhYmxlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcmVnaXN0cnlcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgaW5qZWN0YWJsZS1kZWNvcmF0b3JzIGxpYnJhcnkuXG4gKiBAc3VtbWFyeSBEZWZpbmVkIG9uIGxpYnJhcnkgYnVpbGQuIEhvbGRzIHRoZSBsaWJyYXJ5J3MgY3VycmVudCB2ZXJzaW9uIHN0cmluZy5cbiAqIEBjb25zdCBWRVJTSU9OXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmluamVjdGFibGUtZGVjb3JhdG9yc1xuICovXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiIyNWRVJTSU9OIyNcIjtcbiJdfQ==
21
+ export const VERSION = "1.6.5";
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILCtCQUE0QjtBQUM1QixnQ0FBNkI7QUFDN0IsaUNBQThCO0FBQzlCLDhCQUEyQjtBQUMzQiwyQkFBd0I7QUFDeEIsMkJBQXdCO0FBRXhCOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGRlc2NyaXB0aW9uIEEgbGlnaHR3ZWlnaHQgZGVwZW5kZW5jeSBpbmplY3Rpb24gbGlicmFyeSBmb3IgVHlwZVNjcmlwdCBhcHBsaWNhdGlvbnMuXG4gKiBAc3VtbWFyeSBBZGRzIGEgc2ltcGxlIEluamVjdGFibGVzIGltcGxlbWVudGF0aW9uIHRvIGNyZWF0ZSBzaW5nbGV0b24gaW5zdGFuY2VzIG9mIGFuIG9iamVjdFxuICogYW5kIGVhc2lseSBpbmplY3QgaXQgaW50byBvdGhlciBvYmplY3RzLiBQcm92aWRlcyBkZWNvcmF0b3JzIGZvciBtYXJraW5nIGNsYXNzZXMgYXMgaW5qZWN0YWJsZVxuICogYW5kIGZvciBpbmplY3RpbmcgZGVwZW5kZW5jaWVzIGludG8gY2xhc3MgcHJvcGVydGllcy5cbiAqXG4gKiBAbW9kdWxlIGluamVjdGFibGUtZGVjb3JhdG9yc1xuICovXG5cbmV4cG9ydCAqIGZyb20gXCIuL2NvbnN0YW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vSW5qZWN0YWJsZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3JlZ2lzdHJ5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ3VycmVudCB2ZXJzaW9uIG9mIHRoZSBpbmplY3RhYmxlLWRlY29yYXRvcnMgbGlicmFyeS5cbiAqIEBzdW1tYXJ5IERlZmluZWQgb24gbGlicmFyeSBidWlsZC4gSG9sZHMgdGhlIGxpYnJhcnkncyBjdXJyZW50IHZlcnNpb24gc3RyaW5nLlxuICogQGNvbnN0IFZFUlNJT05cbiAqIEBtZW1iZXJPZiBtb2R1bGU6aW5qZWN0YWJsZS1kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIjI1ZFUlNJT04jI1wiO1xuIl19