@toa.io/extensions.stash 1.0.0-alpha.32 → 1.0.0-alpha.321

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.
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "@toa.io/extensions.stash",
3
- "version": "1.0.0-alpha.32",
3
+ "version": "1.0.0-alpha.321",
4
+ "type": "module",
4
5
  "description": "Toa Stash",
5
6
  "author": "temich <tema.gurtovoy@gmail.com>",
6
7
  "homepage": "https://github.com/toa-io/toa#readme",
@@ -16,18 +17,24 @@
16
17
  "publishConfig": {
17
18
  "access": "public"
18
19
  },
20
+ "files": [
21
+ "transpiled",
22
+ "readme.md",
23
+ "!**/tsconfig.tsbuildinfo",
24
+ "!**/*.test.*",
25
+ "!**/.env*"
26
+ ],
19
27
  "dependencies": {
20
- "@toa.io/pointer": "1.0.0-alpha.32",
21
- "ioredis": "5.3.2",
22
- "msgpackr": "1.10.1",
23
- "redlock-temp-fix": "5.0.0-beta.2"
28
+ "@toa.io/core": "1.0.0-alpha.321",
29
+ "@toa.io/definitions": "1.0.0-alpha.321",
30
+ "@toa.io/generic": "1.0.0-alpha.311",
31
+ "@toa.io/pointer": "1.0.0-alpha.311",
32
+ "ioredis": "6.0.0",
33
+ "msgpackr": "2.1.0",
34
+ "openspan": "1.0.0-alpha.305"
24
35
  },
25
36
  "scripts": {
26
37
  "transpile": "tsc"
27
38
  },
28
- "jest": {
29
- "preset": "ts-jest",
30
- "testEnvironment": "node"
31
- },
32
- "gitHead": "93ceb53797363abb77eb9c550db77e906691d42a"
39
+ "gitHead": "fa850e861a0c748d7364ccf7c8a09ce26973fc04"
33
40
  }
package/readme.md CHANGED
@@ -1,20 +1,22 @@
1
1
  # Toa Stash
2
2
 
3
- Shared cache and distributed lock manager on top of [ioredis](https://github.com/redis/ioredis)
4
- and [redlock](https://github.com/mike-marcacci/node-redlock).
3
+ Shared cache on top of [ioredis](https://github.com/redis/ioredis).
5
4
 
6
5
  ## Shared cache
7
6
 
8
7
  `stash` aspect exposes [`ioredis` methods](https://redis.github.io/ioredis/classes/Cluster.html).
9
8
 
10
9
  ```javascript
11
- async function computation (input, context) {
10
+ async function computation(input, context) {
12
11
  await context.stash.set('key', 'value')
13
12
  await context.stash.get('key')
14
13
  }
15
14
  ```
16
15
 
17
- Keys are component-scoped, meaning that the underlying Redis keys are `namespace:name:key`.
16
+ Keys are component-scoped, meaning that the underlying Redis keys are
17
+ `<scope>:<namespace>:<name>:<key>`, where the scope is the context's name followed by `TOA_SUFFIX`
18
+ (see [deployment](/documentation/deployment.md#several-processes-of-one-context-on-shared-infrastructure)).
19
+ Contexts sharing a Redis do not share keys.
18
20
 
19
21
  ### Storing objects
20
22
 
@@ -27,18 +29,6 @@ starting from third.
27
29
 
28
30
  Values are encoded using [msgpack](https://msgpack.org).
29
31
 
30
- ## Distributed lock manager
31
-
32
- `async lock<T>(id: string | string[], routine: async? () => T): T`
33
-
34
- Executes `routine` once a lock is successfully acquired. Lock ID is component-scoped.
35
-
36
- ```javascript
37
- async function computation (input, context) {
38
- await context.stash.lock('lock id', () => console.log('Lock acquired'))
39
- }
40
- ```
41
-
42
32
  ## Manifest
43
33
 
44
34
  To enable extension for a component, add `null` definition to its manifest:
@@ -1,20 +1,15 @@
1
- import { Connector, type extensions } from '@toa.io/core';
2
- import type { Connection } from './Connection';
1
+ import { Connector } from '@toa.io/core';
2
+ import type { extensions } from '@toa.io/core/types';
3
+ import type { Connection } from './Connection.ts';
3
4
  export declare class Aspect extends Connector implements extensions.Aspect {
4
5
  readonly name = "stash";
5
6
  private readonly connection;
6
7
  private redis;
7
- private redlock;
8
8
  constructor(connection: Connection);
9
- invoke(method: 'store', key: string, value: object): Promise<void>;
10
- invoke(method: 'fetch', key: string): Promise<object>;
11
- invoke<T>(method: 'lock', key: Resources, routine: Routine<T>): Promise<T>;
12
- invoke(method: string, ...args: unknown[]): Promise<any>;
9
+ invoke(method: 'store', key: string, value: object): any;
10
+ invoke(method: 'fetch', key: string): any;
11
+ invoke(method: string, ...args: unknown[]): any;
13
12
  protected open(): Promise<void>;
14
13
  private store;
15
14
  private fetch;
16
- private lock;
17
15
  }
18
- type Routine<T> = () => Promise<T>;
19
- type Resources = string | string[];
20
- export {};
@@ -1,40 +1,50 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.Aspect = void 0;
7
- const redlock_temp_fix_1 = __importDefault(require("redlock-temp-fix"));
8
- const msgpackr_1 = require("msgpackr");
9
- const core_1 = require("@toa.io/core");
10
- class Aspect extends core_1.Connector {
1
+ import { encode, decode } from 'msgpackr';
2
+ import { console } from 'openspan';
3
+ import { Connector } from '@toa.io/core';
4
+ import { command } from './measurements.js';
5
+ export class Aspect extends Connector {
11
6
  name = 'stash';
12
7
  connection;
13
8
  redis = null;
14
- redlock = null;
15
9
  constructor(connection) {
16
10
  super();
17
11
  this.connection = connection;
18
12
  this.depends(connection);
19
13
  }
20
- async invoke(method, ...args) {
14
+ // eslint-disable-next-line @typescript-eslint/promise-function-async
15
+ invoke(method, ...args) {
21
16
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
22
17
  // @ts-expect-error
23
- if (typeof this.redis[method] === 'function')
24
- return this.redis[method](...args);
18
+ if (typeof this.redis[method] === 'function') {
19
+ // multi/pipeline return a sync chainable; the span wraps exec() instead
20
+ if (method === 'multi' || method === 'pipeline') {
21
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
22
+ // @ts-expect-error
23
+ const chain = this.redis[method](...args);
24
+ const exec = chain.exec.bind(chain);
25
+ chain.exec = async () => {
26
+ const options = span(method, args[0]);
27
+ Object.assign(options.attributes, { 'db.operation.batch.size': chain.length });
28
+ return await console.span(options, exec);
29
+ };
30
+ return chain;
31
+ }
32
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
33
+ // @ts-expect-error
34
+ return console.span(span(method, args[0]), () => this.redis[method](...args));
35
+ }
25
36
  if (method === 'store')
26
- await this.store(args[0], args[1], ...args.slice(2));
37
+ return console.span(span(method, args[0]), async () => {
38
+ await this.store(args[0], args[1], ...args.slice(2));
39
+ });
27
40
  if (method === 'fetch')
28
- return await this.fetch(args[0]);
29
- if (method === 'lock')
30
- return await this.lock(args[0], args[1]);
41
+ return console.span(span(method, args[0]), async () => await this.fetch(args[0]));
31
42
  }
32
43
  async open() {
33
- this.redis = this.connection.redises[0];
34
- this.redlock = new redlock_temp_fix_1.default(this.connection.redises, { retryCount: -1 });
44
+ this.redis = this.connection.redis;
35
45
  }
36
46
  async store(key, value, ...args) {
37
- const buffer = (0, msgpackr_1.encode)(value);
47
+ const buffer = encode(value);
38
48
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
39
49
  // @ts-expect-error
40
50
  await this.redis.set(key, buffer, ...args);
@@ -43,15 +53,27 @@ class Aspect extends core_1.Connector {
43
53
  if (this.redis === null)
44
54
  return null;
45
55
  const buffer = await this.redis.getBuffer(key);
46
- return buffer === null ? null : (0, msgpackr_1.decode)(buffer);
47
- }
48
- async lock(key, routine) {
49
- if (this.redlock === null)
50
- return null;
51
- if (typeof key === 'string')
52
- key = [key];
53
- return await this.redlock.using(key, 5000, routine);
56
+ return buffer === null ? null : decode(buffer);
54
57
  }
55
58
  }
56
- exports.Aspect = Aspect;
59
+ function span(method, key) {
60
+ // https://opentelemetry.io/docs/specs/semconv/database/redis/
61
+ // `db.namespace` names the database node on service graphs,
62
+ // which otherwise displays 'unknown'
63
+ const attributes = {
64
+ 'db.system': 'redis',
65
+ 'db.namespace': 'stash',
66
+ 'db.operation.name': method
67
+ };
68
+ if (typeof key === 'string')
69
+ attributes.key = key;
70
+ else if (Array.isArray(key))
71
+ attributes.key = key.join(' ');
72
+ return {
73
+ name: `${method} stash`,
74
+ kind: 'client',
75
+ attributes,
76
+ measure: command(method)
77
+ };
78
+ }
57
79
  //# sourceMappingURL=Aspect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Aspect.js","sourceRoot":"","sources":["../source/Aspect.ts"],"names":[],"mappings":";;;;;;AAAA,wEAAsC;AACtC,uCAAyC;AACzC,uCAAyD;AAIzD,MAAa,MAAO,SAAQ,gBAAS;IACnB,IAAI,GAAG,OAAO,CAAA;IACb,UAAU,CAAY;IAC/B,KAAK,GAAiB,IAAI,CAAA;IAC1B,OAAO,GAAmB,IAAI,CAAA;IAEtC,YAAoB,UAAsB;QACxC,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IAC1B,CAAC;IAMM,KAAK,CAAC,MAAM,CAAE,MAAc,EAAE,GAAG,IAAe;QACrD,6DAA6D;QAC7D,mBAAmB;QACnB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,UAAU;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;QAEhF,IAAI,MAAM,KAAK,OAAO;YACpB,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAW,EAAE,IAAI,CAAC,CAAC,CAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QAE1E,IAAI,MAAM,KAAK,OAAO;YACpB,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAW,CAAC,CAAA;QAE5C,IAAI,MAAM,KAAK,MAAM;YACnB,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAc,EAAE,IAAI,CAAC,CAAC,CAAc,CAAC,CAAA;IACtE,CAAC;IAEkB,KAAK,CAAC,IAAI;QAC3B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QACvC,IAAI,CAAC,OAAO,GAAG,IAAI,0BAAO,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;IACzE,CAAC;IAEO,KAAK,CAAC,KAAK,CAAE,GAAW,EAAE,KAAa,EAAE,GAAG,IAAe;QACjE,MAAM,MAAM,GAAG,IAAA,iBAAM,EAAC,KAAK,CAAC,CAAA;QAE5B,6DAA6D;QAC7D,mBAAmB;QACnB,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,CAAA;IAC5C,CAAC;IAEO,KAAK,CAAC,KAAK,CAAE,GAAW;QAC9B,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,CAAA;QAEpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;QAE9C,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAA,iBAAM,EAAC,MAAM,CAAC,CAAA;IAChD,CAAC;IAEO,KAAK,CAAC,IAAI,CAAK,GAAc,EAAE,OAAmB;QACxD,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;YAAE,OAAO,IAAI,CAAA;QAEtC,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;QAExC,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAI,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;IACxD,CAAC;CACF;AA5DD,wBA4DC"}
1
+ {"version":3,"file":"Aspect.js","sourceRoot":"","sources":["../source/Aspect.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,16 @@
1
1
  import { Redis } from 'ioredis';
2
2
  import { Connector, type Locator } from '@toa.io/core';
3
3
  export declare class Connection extends Connector {
4
- readonly redises: Redis[];
5
- private readonly locator;
4
+ redis: Redis | null;
5
+ readonly locator: Locator;
6
6
  constructor(locator: Locator);
7
7
  protected open(): Promise<void>;
8
+ /**
9
+ * The client reconnects on its own and reports every attempt that fails, so an outage is said
10
+ * once, and so is its end. A client with nothing listening for its errors prints each of them
11
+ * past the logs, as unhandled.
12
+ */
13
+ private watch;
8
14
  protected close(): Promise<void>;
9
- private connectNode;
10
- private resolveURLs;
15
+ private resolveURL;
11
16
  }
@@ -1,41 +1,72 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Connection = void 0;
4
- const ioredis_1 = require("ioredis");
5
- const core_1 = require("@toa.io/core");
6
- const pointer_1 = require("@toa.io/pointer");
7
- const extension_1 = require("./extension");
8
- class Connection extends core_1.Connector {
9
- redises = [];
1
+ import { Redis } from 'ioredis';
2
+ import { console } from 'openspan';
3
+ import { Connector } from '@toa.io/core';
4
+ import { resolve } from '@toa.io/pointer';
5
+ import { ID } from '@toa.io/definitions/extensions.stash';
6
+ import { environment } from '@toa.io/generic';
7
+ export class Connection extends Connector {
8
+ redis = null;
10
9
  locator;
11
10
  constructor(locator) {
12
11
  super();
13
12
  this.locator = locator;
14
13
  }
15
14
  async open() {
16
- const keyPrefix = `${this.locator.namespace}:${this.locator.name}:`;
17
- const options = { keyPrefix, enableReadyCheck: true, lazyConnect: true };
18
- const urls = await this.resolveURLs();
19
- for (const url of urls)
20
- this.redises.push(new ioredis_1.Redis(url, options));
21
- const connecting = this.redises.map(this.connectNode.bind(this));
22
- await Promise.all(connecting);
15
+ // contexts share a Redis, and so do the processes of one context given different suffixes
16
+ const keyPrefix = `${environment.scope()}:${this.locator.namespace}:${this.locator.name}:`;
17
+ const options = {
18
+ keyPrefix,
19
+ enableReadyCheck: true,
20
+ lazyConnect: true,
21
+ protocol: 3,
22
+ replyMapping: 'resp3'
23
+ };
24
+ const redis = new Redis(await this.resolveURL(), options);
25
+ this.redis = redis;
26
+ this.watch(redis);
27
+ await redis.connect();
28
+ console.info('Stash connected to redis', { host: this.redis.options.host });
23
29
  }
24
- async close() {
25
- for (const redis of this.redises)
26
- redis.disconnect();
27
- console.log('Stash disconnected');
30
+ /**
31
+ * The client reconnects on its own and reports every attempt that fails, so an outage is said
32
+ * once, and so is its end. A client with nothing listening for its errors prints each of them
33
+ * past the logs, as unhandled.
34
+ */
35
+ watch(redis) {
36
+ let lost = false;
37
+ // ioredis leaves `message` empty on a refused connection, where the code is the whole story
38
+ redis.on('error', (error) => {
39
+ if (lost)
40
+ return;
41
+ lost = true;
42
+ console.warn('Stash is unreachable', {
43
+ host: redis.options.host,
44
+ error: error.code ?? error.message
45
+ });
46
+ });
47
+ redis.on('ready', () => {
48
+ if (!lost)
49
+ return;
50
+ lost = false;
51
+ console.info('Stash reconnected', { host: redis.options.host });
52
+ });
28
53
  }
29
- async connectNode(redis) {
30
- await redis.connect();
31
- console.log(`Stash connected to ${redis.options.host}:${String(redis.options.port)}`);
54
+ async close() {
55
+ this.redis?.disconnect();
56
+ this.redis = null;
57
+ console.info('Stash shutdown complete');
32
58
  }
33
- async resolveURLs() {
34
- if (process.env.TOA_DEV === '1')
35
- return ['redis://localhost'];
36
- else
37
- return (0, pointer_1.resolve)(extension_1.ID, this.locator.id);
59
+ async resolveURL() {
60
+ // Toa's own development stack is not on the conventional ports: the applications built on
61
+ // Toa are, and they share the machine. See CONTRIBUTING.md.
62
+ if (environment.get('TOA_DEV') === '1')
63
+ return 'redis://localhost:31040';
64
+ const urls = resolve(ID, this.locator.id);
65
+ // several addresses used to be independent masters for the lock manager, which the atom
66
+ // aspect holds now. A cache is one Redis, and the rest have never been read from
67
+ if (urls.length > 1)
68
+ console.warn('Stash takes the first of several addresses', { count: urls.length });
69
+ return urls[0];
38
70
  }
39
71
  }
40
- exports.Connection = Connection;
41
72
  //# sourceMappingURL=Connection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Connection.js","sourceRoot":"","sources":["../source/Connection.ts"],"names":[],"mappings":";;;AAAA,qCAAoD;AACpD,uCAAsD;AACtD,6CAAyC;AACzC,2CAAgC;AAEhC,MAAa,UAAW,SAAQ,gBAAS;IACvB,OAAO,GAAY,EAAE,CAAA;IACpB,OAAO,CAAS;IAEjC,YAAoB,OAAgB;QAClC,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAEkB,KAAK,CAAC,IAAI;QAC3B,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAA;QACnE,MAAM,OAAO,GAAmB,EAAE,SAAS,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;QACxF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAA;QAErC,KAAK,MAAM,GAAG,IAAI,IAAI;YACpB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,eAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAA;QAE5C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAEhE,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IAC/B,CAAC;IAEkB,KAAK,CAAC,KAAK;QAC5B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO;YAC9B,KAAK,CAAC,UAAU,EAAE,CAAA;QAEpB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;IACnC,CAAC;IAEO,KAAK,CAAC,WAAW,CAAE,KAAY;QACrC,MAAM,KAAK,CAAC,OAAO,EAAE,CAAA;QAErB,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACvF,CAAC;IAEO,KAAK,CAAC,WAAW;QACvB,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,GAAG;YAC7B,OAAO,CAAC,mBAAmB,CAAC,CAAA;;YAE5B,OAAO,IAAA,iBAAO,EAAC,cAAE,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IACvC,CAAC;CACF;AA1CD,gCA0CC"}
1
+ {"version":3,"file":"Connection.js","sourceRoot":"","sources":["../source/Connection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { RedisCommander } from 'ioredis';
2
+ /** What `context.stash` is: every Redis command, and what the aspect adds to them. */
3
+ export interface Stash extends RedisCommander {
4
+ store: <T>(key: string, value: T) => Promise<void>;
5
+ fetch: <T>(key: string) => Promise<T>;
6
+ lock: <T>(key: Resources, routine: Routine<T>) => Promise<T>;
7
+ count: (name: string, interval: number, amount?: number) => number;
8
+ }
9
+ type Routine<T> = () => Promise<T>;
10
+ type Resources = string | string[];
11
+ export {};
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Stash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stash.js","sourceRoot":"","sources":["../source/Stash.ts"],"names":[],"mappings":""}
@@ -1,9 +1,5 @@
1
- import { type URIMap } from '@toa.io/pointer';
2
- import type { Locator, extensions } from '@toa.io/core';
3
- import type { context } from '@toa.io/norm';
4
- import type { Dependency } from '@toa.io/operations';
1
+ import type { Locator } from '@toa.io/core';
2
+ import type { extensions } from '@toa.io/core/types';
5
3
  export declare class Factory implements extensions.Factory {
6
4
  aspect(locator: Locator): extensions.Aspect;
7
5
  }
8
- export declare function deployment(instances: context.Dependency[], annotation: URIMap): Dependency;
9
- export declare const ID = "stash";
@@ -1,27 +1,9 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ID = exports.deployment = exports.Factory = void 0;
4
- const pointer_1 = require("@toa.io/pointer");
5
- const Aspect_1 = require("./Aspect");
6
- const Connection_1 = require("./Connection");
7
- class Factory {
1
+ import { Aspect } from './Aspect.js';
2
+ import { Connection } from './Connection.js';
3
+ export class Factory {
8
4
  aspect(locator) {
9
- const connection = new Connection_1.Connection(locator);
10
- return new Aspect_1.Aspect(connection);
5
+ const connection = new Connection(locator);
6
+ return new Aspect(connection);
11
7
  }
12
8
  }
13
- exports.Factory = Factory;
14
- function deployment(instances, annotation) {
15
- const requests = instances.map((instance) => createRequest(instance));
16
- const variables = (0, pointer_1.createVariables)(exports.ID, annotation, requests);
17
- return { variables };
18
- }
19
- exports.deployment = deployment;
20
- function createRequest(instance) {
21
- return {
22
- group: instance.locator.label,
23
- selectors: [instance.locator.id]
24
- };
25
- }
26
- exports.ID = 'stash';
27
9
  //# sourceMappingURL=extension.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"extension.js","sourceRoot":"","sources":["../source/extension.ts"],"names":[],"mappings":";;;AAAA,6CAA4E;AAC5E,qCAAiC;AACjC,6CAAyC;AAKzC,MAAa,OAAO;IACX,MAAM,CAAE,OAAgB;QAC7B,MAAM,UAAU,GAAG,IAAI,uBAAU,CAAC,OAAO,CAAC,CAAA;QAE1C,OAAO,IAAI,eAAM,CAAC,UAAU,CAAC,CAAA;IAC/B,CAAC;CACF;AAND,0BAMC;AAED,SAAgB,UAAU,CAAE,SAA+B,EAAE,UAAkB;IAC7E,MAAM,QAAQ,GAAc,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAA;IAChF,MAAM,SAAS,GAAG,IAAA,yBAAe,EAAC,UAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAA;IAE3D,OAAO,EAAE,SAAS,EAAE,CAAA;AACtB,CAAC;AALD,gCAKC;AAED,SAAS,aAAa,CAAE,QAA4B;IAClD,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK;QAC7B,SAAS,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;KACjC,CAAA;AACH,CAAC;AAEY,QAAA,EAAE,GAAG,OAAO,CAAA"}
1
+ {"version":3,"file":"extension.js","sourceRoot":"","sources":["../source/extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAI5C,MAAM,OAAO,OAAO;IACX,MAAM,CAAC,OAAgB;QAC5B,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAA;QAE1C,OAAO,IAAI,MAAM,CAAC,UAAU,CAAC,CAAA;IAC/B,CAAC;CACF"}
@@ -1 +1,2 @@
1
- export * from './extension';
1
+ export * from './extension.ts';
2
+ export type { Stash } from './Stash.ts';
@@ -1,18 +1,2 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./extension"), exports);
1
+ export * from './extension.js';
18
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA2B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA"}
@@ -0,0 +1,2 @@
1
+ import type { Measure } from 'openspan';
2
+ export declare function command(name: string): Measure;
@@ -0,0 +1,13 @@
1
+ import { registry } from 'openspan';
2
+ /**
3
+ * What the stash measures. `command` and not a key: the commands a component uses are a fixed set
4
+ * of its source, and a key is whatever the data is.
5
+ */
6
+ const meters = registry();
7
+ /** A local Redis answers in well under a millisecond, so the ladder starts there. */
8
+ const DURATIONS = [0.0005, 0.001, 0.0025, 0.005, 0.01, 0.025, 0.05, 0.1, 0.5, 1];
9
+ const duration = meters.histogram('toa.stash.command.duration', { buckets: DURATIONS, unit: 's' }, { command: null });
10
+ export function command(name) {
11
+ return { histogram: duration, labels: { command: name } };
12
+ }
13
+ //# sourceMappingURL=measurements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"measurements.js","sourceRoot":"","sources":["../source/measurements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAGnC;;;GAGG;AACH,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAA;AAEzB,qFAAqF;AACrF,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;AAEhF,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAC/B,4BAA4B,EAC5B,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,EACjC,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAA;AAED,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAA;AAC3D,CAAC"}
package/source/Aspect.ts DELETED
@@ -1,70 +0,0 @@
1
- import Redlock from 'redlock-temp-fix'
2
- import { encode, decode } from 'msgpackr'
3
- import { Connector, type extensions } from '@toa.io/core'
4
- import type { Connection } from './Connection'
5
- import type { Redis } from 'ioredis'
6
-
7
- export class Aspect extends Connector implements extensions.Aspect {
8
- public readonly name = 'stash'
9
- private readonly connection: Connection
10
- private redis: Redis | null = null
11
- private redlock: Redlock | null = null
12
-
13
- public constructor (connection: Connection) {
14
- super()
15
-
16
- this.connection = connection
17
- this.depends(connection)
18
- }
19
-
20
- public async invoke (method: 'store', key: string, value: object): Promise<void>
21
- public async invoke (method: 'fetch', key: string): Promise<object>
22
- public async invoke<T> (method: 'lock', key: Resources, routine: Routine<T>): Promise<T>
23
- public async invoke (method: string, ...args: unknown[]): Promise<any>
24
- public async invoke (method: string, ...args: unknown[]): Promise<any> {
25
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
26
- // @ts-expect-error
27
- if (typeof this.redis[method] === 'function') return this.redis[method](...args)
28
-
29
- if (method === 'store')
30
- await this.store(args[0] as string, args[1] as object, ...args.slice(2))
31
-
32
- if (method === 'fetch')
33
- return await this.fetch(args[0] as string)
34
-
35
- if (method === 'lock')
36
- return await this.lock(args[0] as Resources, args[1] as () => any)
37
- }
38
-
39
- protected override async open (): Promise<void> {
40
- this.redis = this.connection.redises[0]
41
- this.redlock = new Redlock(this.connection.redises, { retryCount: -1 })
42
- }
43
-
44
- private async store (key: string, value: object, ...args: unknown[]): Promise<void> {
45
- const buffer = encode(value)
46
-
47
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
48
- // @ts-expect-error
49
- await this.redis.set(key, buffer, ...args)
50
- }
51
-
52
- private async fetch (key: string): Promise<object | null> {
53
- if (this.redis === null) return null
54
-
55
- const buffer = await this.redis.getBuffer(key)
56
-
57
- return buffer === null ? null : decode(buffer)
58
- }
59
-
60
- private async lock<T> (key: Resources, routine: Routine<T>): Promise<T | null> {
61
- if (this.redlock === null) return null
62
-
63
- if (typeof key === 'string') key = [key]
64
-
65
- return await this.redlock.using<T>(key, 5000, routine)
66
- }
67
- }
68
-
69
- type Routine<T> = () => Promise<T>
70
- type Resources = string | string[]
@@ -1,48 +0,0 @@
1
- import { Redis, type ClusterOptions } from 'ioredis'
2
- import { Connector, type Locator } from '@toa.io/core'
3
- import { resolve } from '@toa.io/pointer'
4
- import { ID } from './extension'
5
-
6
- export class Connection extends Connector {
7
- public readonly redises: Redis[] = []
8
- private readonly locator: Locator
9
-
10
- public constructor (locator: Locator) {
11
- super()
12
-
13
- this.locator = locator
14
- }
15
-
16
- protected override async open (): Promise<void> {
17
- const keyPrefix = `${this.locator.namespace}:${this.locator.name}:`
18
- const options: ClusterOptions = { keyPrefix, enableReadyCheck: true, lazyConnect: true }
19
- const urls = await this.resolveURLs()
20
-
21
- for (const url of urls)
22
- this.redises.push(new Redis(url, options))
23
-
24
- const connecting = this.redises.map(this.connectNode.bind(this))
25
-
26
- await Promise.all(connecting)
27
- }
28
-
29
- protected override async close (): Promise<void> {
30
- for (const redis of this.redises)
31
- redis.disconnect()
32
-
33
- console.log('Stash disconnected')
34
- }
35
-
36
- private async connectNode (redis: Redis): Promise<void> {
37
- await redis.connect()
38
-
39
- console.log(`Stash connected to ${redis.options.host}:${String(redis.options.port)}`)
40
- }
41
-
42
- private async resolveURLs (): Promise<string[]> {
43
- if (process.env.TOA_DEV === '1')
44
- return ['redis://localhost']
45
- else
46
- return resolve(ID, this.locator.id)
47
- }
48
- }
@@ -1,30 +0,0 @@
1
- import { createVariables, type URIMap, type Request } from '@toa.io/pointer'
2
- import { Aspect } from './Aspect'
3
- import { Connection } from './Connection'
4
- import type { Locator, extensions } from '@toa.io/core'
5
- import type { context } from '@toa.io/norm'
6
- import type { Dependency } from '@toa.io/operations'
7
-
8
- export class Factory implements extensions.Factory {
9
- public aspect (locator: Locator): extensions.Aspect {
10
- const connection = new Connection(locator)
11
-
12
- return new Aspect(connection)
13
- }
14
- }
15
-
16
- export function deployment (instances: context.Dependency[], annotation: URIMap): Dependency {
17
- const requests: Request[] = instances.map((instance) => createRequest(instance))
18
- const variables = createVariables(ID, annotation, requests)
19
-
20
- return { variables }
21
- }
22
-
23
- function createRequest (instance: context.Dependency): Request {
24
- return {
25
- group: instance.locator.label,
26
- selectors: [instance.locator.id]
27
- }
28
- }
29
-
30
- export const ID = 'stash'
package/source/index.ts DELETED
@@ -1 +0,0 @@
1
- export * from './extension'
@@ -1 +0,0 @@
1
- {"program":{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/typescript/lib/lib.es2023.d.ts","../../../node_modules/typescript/lib/lib.esnext.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../../node_modules/typescript/lib/lib.scripthost.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/typescript/lib/lib.esnext.full.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/buffer/index.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/file.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/filereader.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/dom-events.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/globals.global.d.ts","../../../node_modules/@types/node/index.d.ts","../../../node_modules/ioredis/built/types.d.ts","../../../node_modules/ioredis/built/Command.d.ts","../../../node_modules/ioredis/built/ScanStream.d.ts","../../../node_modules/ioredis/built/utils/RedisCommander.d.ts","../../../node_modules/ioredis/built/transaction.d.ts","../../../node_modules/ioredis/built/utils/Commander.d.ts","../../../node_modules/ioredis/built/connectors/AbstractConnector.d.ts","../../../node_modules/ioredis/built/connectors/ConnectorConstructor.d.ts","../../../node_modules/ioredis/built/connectors/SentinelConnector/types.d.ts","../../../node_modules/ioredis/built/connectors/SentinelConnector/SentinelIterator.d.ts","../../../node_modules/ioredis/built/connectors/SentinelConnector/index.d.ts","../../../node_modules/ioredis/built/connectors/StandaloneConnector.d.ts","../../../node_modules/ioredis/built/redis/RedisOptions.d.ts","../../../node_modules/ioredis/built/cluster/util.d.ts","../../../node_modules/ioredis/built/cluster/ClusterOptions.d.ts","../../../node_modules/ioredis/built/cluster/index.d.ts","../../../node_modules/denque/index.d.ts","../../../node_modules/ioredis/built/SubscriptionSet.d.ts","../../../node_modules/ioredis/built/DataHandler.d.ts","../../../node_modules/ioredis/built/Redis.d.ts","../../../node_modules/ioredis/built/Pipeline.d.ts","../../../node_modules/ioredis/built/index.d.ts","../../../node_modules/redlock-temp-fix/dist/index.d.ts","../../../node_modules/msgpackr/index.d.ts","../../../runtime/core/types/bindings.d.ts","../../../runtime/core/types/connector.d.ts","../../../runtime/core/types/locator.d.ts","../../../runtime/core/types/exception.d.ts","../../../runtime/core/types/request.d.ts","../../../runtime/core/types/component.d.ts","../../../runtime/core/types/context.d.ts","../../../runtime/core/types/storages.d.ts","../../../runtime/core/types/extensions.d.ts","../../../runtime/core/types/bridges.ts","../../../runtime/core/types/operations.d.ts","../../../runtime/core/types/message.d.ts","../../../runtime/core/types/receiver.d.ts","../../../runtime/core/types/index.ts","../../../operations/types/dependency.d.ts","../../../operations/types/index.d.ts","../../../libraries/pointer/transpiled/Deployment.d.ts","../../../libraries/pointer/transpiled/annotation.d.ts","../../../libraries/pointer/transpiled/createVariables.d.ts","../../../libraries/pointer/transpiled/resolve.d.ts","../../../libraries/pointer/transpiled/naming.d.ts","../../../libraries/pointer/transpiled/index.d.ts","../../../runtime/norm/types/component.d.ts","../../../runtime/norm/types/context/declaration.d.ts","../../../runtime/norm/types/context.d.ts","../../../runtime/norm/types/index.d.ts","../source/extension.ts","../source/Connection.ts","../source/Aspect.ts","../source/index.ts","../../../node_modules/@babel/types/lib/index.d.ts","../../../node_modules/@types/babel__generator/index.d.ts","../../../node_modules/@babel/parser/typings/babel-parser.d.ts","../../../node_modules/@types/babel__template/index.d.ts","../../../node_modules/@types/babel__traverse/index.d.ts","../../../node_modules/@types/babel__core/index.d.ts","../../../node_modules/@types/bcryptjs/index.d.ts","../../../node_modules/@types/caseless/index.d.ts","../../../node_modules/@types/cookie/index.d.ts","../../../node_modules/@types/cors/index.d.ts","../../../node_modules/@types/duplexify/index.d.ts","../../../node_modules/minimatch/dist/cjs/ast.d.ts","../../../node_modules/minimatch/dist/cjs/escape.d.ts","../../../node_modules/minimatch/dist/cjs/unescape.d.ts","../../../node_modules/minimatch/dist/cjs/index.d.ts","../../../node_modules/@types/glob/index.d.ts","../../../node_modules/@types/graceful-fs/index.d.ts","../../../node_modules/@types/istanbul-lib-coverage/index.d.ts","../../../node_modules/@types/istanbul-lib-report/index.d.ts","../../../node_modules/@types/istanbul-reports/index.d.ts","../../../node_modules/@jest/expect-utils/build/index.d.ts","../../../node_modules/chalk/index.d.ts","../../../node_modules/@sinclair/typebox/typebox.d.ts","../../../node_modules/@jest/schemas/build/index.d.ts","../../../node_modules/pretty-format/build/index.d.ts","../../../node_modules/jest-matcher-utils/node_modules/jest-diff/build/index.d.ts","../../../node_modules/jest-matcher-utils/build/index.d.ts","../../../node_modules/expect/build/index.d.ts","../../../node_modules/@types/jest/index.d.ts","../../../node_modules/@types/js-yaml/index.d.ts","../../../node_modules/@types/json-schema/index.d.ts","../../../node_modules/@types/json5/index.d.ts","../../../node_modules/@types/lodash/common/common.d.ts","../../../node_modules/@types/lodash/common/array.d.ts","../../../node_modules/@types/lodash/common/collection.d.ts","../../../node_modules/@types/lodash/common/date.d.ts","../../../node_modules/@types/lodash/common/function.d.ts","../../../node_modules/@types/lodash/common/lang.d.ts","../../../node_modules/@types/lodash/common/math.d.ts","../../../node_modules/@types/lodash/common/number.d.ts","../../../node_modules/@types/lodash/common/object.d.ts","../../../node_modules/@types/lodash/common/seq.d.ts","../../../node_modules/@types/lodash/common/string.d.ts","../../../node_modules/@types/lodash/common/util.d.ts","../../../node_modules/@types/lodash/index.d.ts","../../../node_modules/@types/long/index.d.ts","../../../node_modules/@types/minimatch/index.d.ts","../../../node_modules/@types/minimist/index.d.ts","../../../node_modules/@types/mute-stream/index.d.ts","../../../node_modules/@types/negotiator/index.d.ts","../../../node_modules/@types/normalize-package-data/index.d.ts","../../../node_modules/@types/parse-json/index.d.ts","../../../node_modules/@types/prettier/index.d.ts","../../../node_modules/@types/randomstring/index.d.ts","../../../node_modules/@types/request/node_modules/form-data/index.d.ts","../../../node_modules/@types/tough-cookie/index.d.ts","../../../node_modules/@types/request/index.d.ts","../../../node_modules/@types/semver/classes/semver.d.ts","../../../node_modules/@types/semver/functions/parse.d.ts","../../../node_modules/@types/semver/functions/valid.d.ts","../../../node_modules/@types/semver/functions/clean.d.ts","../../../node_modules/@types/semver/functions/inc.d.ts","../../../node_modules/@types/semver/functions/diff.d.ts","../../../node_modules/@types/semver/functions/major.d.ts","../../../node_modules/@types/semver/functions/minor.d.ts","../../../node_modules/@types/semver/functions/patch.d.ts","../../../node_modules/@types/semver/functions/prerelease.d.ts","../../../node_modules/@types/semver/functions/compare.d.ts","../../../node_modules/@types/semver/functions/rcompare.d.ts","../../../node_modules/@types/semver/functions/compare-loose.d.ts","../../../node_modules/@types/semver/functions/compare-build.d.ts","../../../node_modules/@types/semver/functions/sort.d.ts","../../../node_modules/@types/semver/functions/rsort.d.ts","../../../node_modules/@types/semver/functions/gt.d.ts","../../../node_modules/@types/semver/functions/lt.d.ts","../../../node_modules/@types/semver/functions/eq.d.ts","../../../node_modules/@types/semver/functions/neq.d.ts","../../../node_modules/@types/semver/functions/gte.d.ts","../../../node_modules/@types/semver/functions/lte.d.ts","../../../node_modules/@types/semver/functions/cmp.d.ts","../../../node_modules/@types/semver/functions/coerce.d.ts","../../../node_modules/@types/semver/classes/comparator.d.ts","../../../node_modules/@types/semver/classes/range.d.ts","../../../node_modules/@types/semver/functions/satisfies.d.ts","../../../node_modules/@types/semver/ranges/max-satisfying.d.ts","../../../node_modules/@types/semver/ranges/min-satisfying.d.ts","../../../node_modules/@types/semver/ranges/to-comparators.d.ts","../../../node_modules/@types/semver/ranges/min-version.d.ts","../../../node_modules/@types/semver/ranges/valid.d.ts","../../../node_modules/@types/semver/ranges/outside.d.ts","../../../node_modules/@types/semver/ranges/gtr.d.ts","../../../node_modules/@types/semver/ranges/ltr.d.ts","../../../node_modules/@types/semver/ranges/intersects.d.ts","../../../node_modules/@types/semver/ranges/simplify.d.ts","../../../node_modules/@types/semver/ranges/subset.d.ts","../../../node_modules/@types/semver/internals/identifiers.d.ts","../../../node_modules/@types/semver/index.d.ts","../../../node_modules/@types/ssh2-streams/index.d.ts","../../../node_modules/@types/ssh2/index.d.ts","../../../node_modules/@types/stack-utils/index.d.ts","../../../node_modules/@types/statuses/index.d.ts","../../../node_modules/@types/uuid/index.d.ts","../../../node_modules/@types/webidl-conversions/index.d.ts","../../../node_modules/@types/whatwg-url/index.d.ts","../../../node_modules/@types/wrap-ansi/index.d.ts","../../../node_modules/@types/yargs-parser/index.d.ts","../../../node_modules/@types/yargs/index.d.ts"],"fileInfos":[{"version":"f33e5332b24c3773e930e212cbb8b6867c8ba3ec4492064ea78e55a524d57450","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","26f2f787e82c4222710f3b676b4d83eb5ad0a72fa7b746f03449e7a026ce5073","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc","1c0cdb8dc619bc549c3e5020643e7cf7ae7940058e8c7e5aefa5871b6d86f44b","bed7b7ba0eb5a160b69af72814b4dde371968e40b6c5e73d3a9f7bee407d158c",{"version":"21e41a76098aa7a191028256e52a726baafd45a925ea5cf0222eb430c96c1d83","affectsGlobalScope":true},{"version":"35299ae4a62086698444a5aaee27fc7aa377c68cbb90b441c9ace246ffd05c97","affectsGlobalScope":true},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true},{"version":"138fb588d26538783b78d1e3b2c2cc12d55840b97bf5e08bca7f7a174fbe2f17","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"e0275cd0e42990dc3a16f0b7c8bca3efe87f1c8ad404f80c6db1c7c0b828c59f","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"49ed889be54031e1044af0ad2c603d627b8bda8b50c1a68435fe85583901d072","affectsGlobalScope":true},{"version":"e93d098658ce4f0c8a0779e6cab91d0259efb88a318137f686ad76f8410ca270","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"ec0104fee478075cb5171e5f4e3f23add8e02d845ae0165bfa3f1099241fa2aa","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"acae90d417bee324b1372813b5a00829d31c7eb670d299cd7f8f9a648ac05688","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"51e547984877a62227042850456de71a5c45e7fe86b7c975c6e68896c86fa23b","affectsGlobalScope":true},{"version":"62a4966981264d1f04c44eb0f4b5bdc3d81c1a54725608861e44755aa24ad6a5","affectsGlobalScope":true},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true},{"version":"e6633e05da3ff36e6da2ec170d0d03ccf33de50ca4dc6f5aeecb572cedd162fb","affectsGlobalScope":true},{"version":"86a34c7a13de9cabc43161348f663624b56871ed80986e41d214932ddd8d6719","affectsGlobalScope":true},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true},{"version":"caccc56c72713969e1cfe5c3d44e5bab151544d9d2b373d7dbe5a1e4166652be","affectsGlobalScope":true},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true},{"version":"50d53ccd31f6667aff66e3d62adf948879a3a16f05d89882d1188084ee415bbc","affectsGlobalScope":true},{"version":"08a58483392df5fcc1db57d782e87734f77ae9eab42516028acbfe46f29a3ef7","affectsGlobalScope":true},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true},{"version":"13f6e6380c78e15e140243dc4be2fa546c287c6d61f4729bc2dd7cf449605471","affectsGlobalScope":true},{"version":"4350e5922fecd4bedda2964d69c213a1436349d0b8d260dd902795f5b94dc74b","affectsGlobalScope":true},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"fd1adc28ce106d6b5f7204355726a7ec922191ad5a8cc1a01841cbf9df9a7e64","09df3b4f1c937f02e7fee2836d4c4d7a63e66db70fd4d4e97126f4542cc21d9d","7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","ef18cbf1d8374576e3db03ff33c2c7499845972eb0c4adf87392949709c5e160","5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","7180c03fd3cb6e22f911ce9ba0f8a7008b1a6ddbe88ccf16a9c8140ef9ac1686","25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","54cb85a47d760da1c13c00add10d26b5118280d44d58e6908d8e89abbd9d7725","3e4825171442666d31c845aeb47fcd34b62e14041bb353ae2b874285d78482aa","c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","a967bfe3ad4e62243eb604bf956101e4c740f5921277c60debaf325c1320bf88","e9775e97ac4877aebf963a0289c81abe76d1ec9a2a7778dbe637e5151f25c5f3","471e1da5a78350bc55ef8cef24eb3aca6174143c281b8b214ca2beda51f5e04a","cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","db3435f3525cd785bf21ec6769bf8da7e8a776be1a99e2e7efb5f244a2ef5fee","c3b170c45fc031db31f782e612adf7314b167e60439d304b49e704010e7bafe5","40383ebef22b943d503c6ce2cb2e060282936b952a01bea5f9f493d5fb487cc7","4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","3a84b7cb891141824bd00ef8a50b6a44596aded4075da937f180c90e362fe5f6","13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","33203609eba548914dc83ddf6cadbc0bcb6e8ef89f6d648ca0908ae887f9fcc5","0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","9f0a92164925aa37d4a5d9dd3e0134cff8177208dba55fd2310cd74beea40ee2","8bfdb79bf1a9d435ec48d9372dc93291161f152c0865b81fc0b2694aedb4578d","2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","d32275be3546f252e3ad33976caf8c5e842c09cb87d468cb40d5f4cf092d1acc","4a0c3504813a3289f7fb1115db13967c8e004aa8e4f8a9021b95285502221bd1",{"version":"4d719cfab49ae4045d15cb6bed0f38ad3d7d6eb7f277d2603502a0f862ca3182","affectsGlobalScope":true},"cce1f5f86974c1e916ec4a8cab6eec9aa8e31e8148845bf07fbaa8e1d97b1a2c",{"version":"5a856afb15f9dc9983faa391dde989826995a33983c1cccb173e9606688e9709","affectsGlobalScope":true},"546ab07e19116d935ad982e76a223275b53bff7771dab94f433b7ab04652936e","7b43160a49cf2c6082da0465876c4a0b164e160b81187caeb0a6ca7a281e85ba",{"version":"aefb5a4a209f756b580eb53ea771cca8aad411603926f307a5e5b8ec6b16dcf6","affectsGlobalScope":true},"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb","f5a8b7ec4b798c88679194a8ebc25dcb6f5368e6e5811fcda9fe12b0d445b8db","b86e1a45b29437f3a99bad4147cb9fe2357617e8008c0484568e5bb5138d6e13","b5b719a47968cd61a6f83f437236bb6fe22a39223b6620da81ef89f5d7a78fb7","42c431e7965b641106b5e25ab3283aa4865ca7bb9909610a2abfa6226e4348be","0b7e732af0a9599be28c091d6bd1cb22c856ec0d415d4749c087c3881ca07a56","b7fe70be794e13d1b7940e318b8770cd1fb3eced7707805318a2e3aaac2c3e9e",{"version":"2c71199d1fc83bf17636ad5bf63a945633406b7b94887612bba4ef027c662b3e","affectsGlobalScope":true},{"version":"8d6138a264ddc6f94f16e99d4e117a2d6eb31b217891cf091b6437a2f114d561","affectsGlobalScope":true},"3b4c85eea12187de9929a76792b98406e8778ce575caca8c574f06da82622c54","f788131a39c81e0c9b9e463645dd7132b5bc1beb609b0e31e5c1ceaea378b4df","0c236069ce7bded4f6774946e928e4b3601894d294054af47a553f7abcafe2c1","21894466693f64957b9bd4c80fa3ec7fdfd4efa9d1861e070aca23f10220c9b2","396a8939b5e177542bdf9b5262b4eee85d29851b2d57681fa9d7eae30e225830","21773f5ac69ddf5a05636ba1f50b5239f4f2d27e4420db147fc2f76a5ae598ac",{"version":"6ec93c745c5e3e25e278fa35451bf18ef857f733de7e57c15e7920ac463baa2a","affectsGlobalScope":true},"a5fe4cc622c3bf8e09ababde5f4096ceac53163eefcd95e9cd53f062ff9bb67a","30c2ec6abf6aaa60eb4f32fb1235531506b7961c6d1bdc7430711aec8fd85295","0f05c06ff6196958d76b865ae17245b52d8fe01773626ac3c43214a2458ea7b7",{"version":"308b84e1943ef30015469770e931eb21b795348893b2a6562ca54ea8f0b3c41c","affectsGlobalScope":true},{"version":"d48009cbe8a30a504031cc82e1286f78fed33b7a42abf7602c23b5547b382563","affectsGlobalScope":true},"7aaeb5e62f90e1b2be0fc4844df78cdb1be15c22b427bc6c39d57308785b8f10","3ba30205a029ebc0c91d7b1ab4da73f6277d730ca1fc6692d5a9144c6772c76b","d8dba11dc34d50cb4202de5effa9a1b296d7a2f4a029eec871f894bddfb6430d","8b71dd18e7e63b6f991b511a201fad7c3bf8d1e0dd98acb5e3d844f335a73634","01d8e1419c84affad359cc240b2b551fb9812b450b4d3d456b64cda8102d4f60","458b216959c231df388a5de9dcbcafd4b4ca563bc3784d706d0455467d7d4942","269929a24b2816343a178008ac9ae9248304d92a8ba8e233055e0ed6dbe6ef71","93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","f8c87b19eae111f8720b0345ab301af8d81add39621b63614dfc2d15fd6f140a","831c22d257717bf2cbb03afe9c4bcffc5ccb8a2074344d4238bf16d3a857bb12",{"version":"24ba151e213906027e2b1f5223d33575a3612b0234a0e2b56119520bbe0e594b","affectsGlobalScope":true},{"version":"cbf046714f3a3ba2544957e1973ac94aa819fa8aa668846fa8de47eb1c41b0b2","affectsGlobalScope":true},"aa34c3aa493d1c699601027c441b9664547c3024f9dbab1639df7701d63d18fa","eae74e3d50820f37c72c0679fed959cd1e63c98f6a146a55b8c4361582fa6a52","7c651f8dce91a927ab62925e73f190763574c46098f2b11fb8ddc1b147a6709a","7440ab60f4cb031812940cc38166b8bb6fbf2540cfe599f87c41c08011f0c1df",{"version":"aed89e3c18f4c659ee8153a76560dffda23e2d801e1e60d7a67abd84bc555f8d","affectsGlobalScope":true},{"version":"0ed13c80faeb2b7160bffb4926ff299c468e67a37a645b3ae0917ba0db633c1b","affectsGlobalScope":true},"e393915d3dc385e69c0e2390739c87b2d296a610662eb0b1cb85224e55992250","2f940651c2f30e6b29f8743fae3f40b7b1c03615184f837132b56ea75edad08b","5749c327c3f789f658072f8340786966c8b05ea124a56c1d8d60e04649495a4d",{"version":"c9d62b2a51b2ff166314d8be84f6881a7fcbccd37612442cf1c70d27d5352f50","affectsGlobalScope":true},"e7dbf5716d76846c7522e910896c5747b6df1abd538fee8f5291bdc843461795",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"b510d0a18e3db42ac9765d26711083ec1e8b4e21caaca6dc4d25ae6e8623f447","e8a5beb73e49b5a4899f12b21fa436f4088f5c6b22ed3e6718fcdf526539d851","911484710eb1feaf615cb68eb5875cbfb8edab2a032f0e4fe5a7f8b17e3a997c","4b16f3af68c203b4518ce37421fbb64d8e52f3b454796cd62157cfca503b1e08","4fc05cd35f313ea6bc2cd52bfd0d3d1a79c894aeaeffd7c285153cb7d243f19b","29994a97447d10d003957bcc0c9355c272d8cf0f97143eb1ade331676e860945","6865b4ef724cb739f8f1511295f7ce77c52c67ff4af27e07b61471d81de8ecfc","9cddf06f2bc6753a8628670a737754b5c7e93e2cfe982a300a0b43cf98a7d032","3f8e68bd94e82fe4362553aa03030fcf94c381716ce3599d242535b0d9953e49","63e628515ec7017458620e1624c594c9bd76382f606890c8eebf2532bcab3b7c","355d5e2ba58012bc059e347a70aa8b72d18d82f0c3491e9660adaf852648f032","0c543e751bbd130170ed4efdeca5ff681d06a99f70b5d6fe7defad449d08023d","c301dded041994ed4899a7cf08d1d6261a94788da88a4318c1c2338512431a03","236c2990d130b924b4442194bdafefa400fcbd0c125a5e2c3e106a0dbe43eaad","ded3d0fb8ac3980ae7edcc723cc2ad35da1798d52cceff51c92abe320432ceeb","fbb60baf8c207f19aa1131365e57e1c7974a4f7434c1f8d12e13508961fb20ec","00011159f97bde4bdb1913f30ef185e6948b8d7ad022b1f829284dfc78feaabf","ed849d616865076f44a41c87f27698f7cdf230290c44bafc71d7c2bc6919b202","9a0a0af04065ddfecc29d2b090659fce57f46f64c7a04a9ba63835ef2b2d0efa","10297d22a9209a718b9883a384db19249b206a0897e95f2b9afeed3144601cb0","620d6e0143dba8d88239e321315ddfb662283da3ada6b00cbc935d5c2cee4202","34d206f6ba993e601dade2791944bdf742ab0f7a8caccc661106c87438f4f904","05ca49cc7ba9111f6c816ecfadb9305fffeb579840961ee8286cc89749f06ebd","413cb21741d7a91a92729839c3ad340685cf69a84d67a835e0dfc2de92789867","9c27c480056fd6f51691274b2900434ea2d94f3f4fb7aa3dc636f1a6fdc0077b","a082f228d494500d41d1b7618b581357f833030a9cdbebeec705c88f8e5a8173","b297d49b7ce31c940c72329a2a8e0d3ea4493da2d02dbb2e10d18a70c41c2dbd","ae1b493f13f348cb8e05c1217e500ab7365162758dd02304ae07b36ce5eadfa3","2beb94ef1961eb5c639e8f3cbbe1483bf2d9d53855fde0b20c1a3429d3a6160b","d9c3ed7e2851a2331b0053d3128d730aa19ce0685a0a0409adc0e1e86c00e17c","93f5a43dafa0ed136ac2c886648862de399d97aefb32c946dfe2ab780cd460f6","279541f81029449f33b96790cd7222664bdf66eaa6c1c719c8b451ae8b69ebe5","863a16bffa4414a6784927eec1b17523521761b2b2344a0b98f140c91d659859","1d59fdf9e61f92e14aebf97a22991748e60be71db2145783aa81e12e449b3a08","1f3d731ec6a2963e054fe46cfe1eecea1b29f71fc4ee1bf9ddd1c9908637b48d","d721d38f03dbf541b5fc4fe9056ef0fbd2b1650af027b57a41050b6d5eb7deea","dcd8de07b4735d845b06e546f4f4c6014388cceaf171495e8e7ec40551e167cf","a06788dcbb350c361b23aad1671f6818641850ab75050e7abc0ae42f6ae49090","d0527ff4a59e0993c280322bacc078d1ae663b6a4d198698cc4d50fcfa145d05","50388f12e05f9da4f4e0de9c5b87e2a6438a06e783535eecbb4401431082b1cc","6e77fb2250275d3945569ac61104a29927624b5a7ba0e905e7e1defd1f2ed151","280fa9495d2cf36da6566c652231d3807119adedc0f5cd70fe60b33c44c7ca03","31db44390050eec522abcf9268e697fc78d609e2b5e547c51533f885b9e3c9a8","ee3ed46dc8dccb018423839a1ee04b4bce7b0300d1debcaf52abbf97aaf75e87","31d01071b638f2a1dfd8558f540956f4edcaeff68eb69736a75232fbee05aa03","53d785402c344d04199b00b6dd00e9382cad52548ddc6c907f49157efa44cb00","95edbe862fbb62a384d2adec2b2278c5ece55d935d382da1386c4a63057b39a5","503d1e771e298776cb5c75e2ed29962ce9a7360dafc65b5126911b3fa8a2c339","71e46111f57a5c82031adbac22eb542b5f63a8be4d5ee9253036cafe81d16112","bee841486123ba419b764cc86c5e4faf47317eb9c2d048408b88e7efa885106e","53e95c2c536d057f438646855f24e39f888dc415ca56ef8fae1ec1d5b5485883",{"version":"e6eac725b51d2af33728a559d815b5a4bfd06fef77bcdd48f031bd8d4e5bab40","signature":"4819584364d79f454545d7fbacc31606657b57a481af4c3b61ebc2e39f191b0b"},{"version":"c40c7313f083af89ab0d793898fbecc56c0992f935d7f670e47f64c2f5821861","signature":"7efee672c59cc74656c44034ea2a808f397413b4f8506af49d3898de6f03da04"},{"version":"f24c69db056382a559611d84c31fe699e96bb77660904ed16a1922a98b2a71cc","signature":"68efb5a84cec1d22764d6080da178d4638904f808abfbfea2f9cfef3e48deef1"},{"version":"656ef010f0eaf914b81429ab63d15052c0b351cf28d60995096374cb5253f455","signature":"c7b7afc6417e2d677eb9c1f2defc832788088924914bf0f971e88fa3b9d038c8"},"923c136dcbf20f140c369078a7eb56f6697889d104397d694f70e21dd08b1810","2c8e55457aaf4902941dfdba4061935922e8ee6e120539c9801cd7b400fae050","8041cfce439ff29d339742389de04c136e3029d6b1817f07b2d7fcbfb7534990","670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","9d38964b57191567a14b396422c87488cecd48f405c642daa734159875ee81d9","069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","dbe8bd931d343b9804d5398afb6dd6d6728975b2e23a3314bc4911f81c5e5a33","2174e20517788d2a1379fc0aaacd87899a70f9e0197b4295edabfe75c4db03d8","1748c03e7a7d118f7f6648c709507971eb0d416f489958492c5ae625de445184","efdced704bd09db6984a2a26e3573bc43cdc2379bdef3bcff6cff77efe8ba82b","f6e4d465828539e051c5c1a40ee835fd954ce5cfc45de8e31ac1561bad5d947b","c56ef8201a294d65d1132160ebc76ed0c0a98dcf983d20775c8c8c0912210572","de0199a112f75809a7f80ec071495159dcf3e434bc021347e0175627398264c3","1a2bed55cfa62b4649485df27c0e560b04d4da4911e3a9f0475468721495563f","854045924626ba585f454b53531c42aed4365f02301aa8eca596423f4675b71f","fd326577c62145816fe1acc306c734c2396487f76719d3785d4e825b34540b33","afe73051ff6a03a9565cbd8ebb0e956ee3df5e913ad5c1ded64218aabfa3dcb5","035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","c085e9aa62d1ae1375794c1fb927a445fa105fed891a7e24edbb1c3300f7384a","f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec",{"version":"b2fdcc3836d425833af10e536ae5491c34e218bc71870f12a401720f874b6ce4","affectsGlobalScope":true},"686e548ae30250d62532c8cacb43fccc922b693408371bd3503563c4a0f28eed","f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","b8442e9db28157344d1bc5d8a5a256f1692de213f0c0ddeb84359834015a008c","458111fc89d11d2151277c822dfdc1a28fa5b6b2493cf942e37d4cd0a6ee5f22","da2b6356b84a40111aaecb18304ea4e4fcb43d70efb1c13ca7d7a906445ee0d3","187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","febf0b2de54781102b00f61653b21377390a048fbf5262718c91860d11ff34a6","6f294731b495c65ecf46a5694f0082954b961cf05463bea823f8014098eaffa0","0aaef8cded245bf5036a7a40b65622dd6c4da71f7a35343112edbe112b348a1e","00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","68a0d0c508e1b6d8d23a519a8a0a3303dc5baa4849ca049f21e5bad41945e3fc","3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd","b03afe4bec768ae333582915146f48b161e567a81b5ebc31c4d78af089770ac9","df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd","0e60e0cbf2283adfd5a15430ae548cd2f662d581b5da6ecd98220203e7067c70","963d59066dd6742da1918a6213a209bcc205b8ee53b1876ee2b4e6d80f97c85e","fbca5ffaebf282ec3cdac47b0d1d4a138a8b0bb32105251a38acb235087d3318","dcefc29f25daf56cd69c0a3d3d19f51938efe1e6a15391950be43a76222ee3ed","f4694959db84d3792ca4d4e04c0bc157c4d28627cb0406c9236351f261a3f5e0","22293bd6fa12747929f8dfca3ec1684a3fe08638aa18023dd286ab337e88a592","916be7d770b0ae0406be9486ac12eb9825f21514961dd050594c4b250617d5a8","d88a5e779faf033be3d52142a04fbe1cb96009868e3bbdd296b2bc6c59e06c0e",{"version":"4698841dc5a91fe716dd41ec7136867bbde9a274ce21031e5ef6ce2d8a552ceb","affectsGlobalScope":true},"e91ad231af87f864b3f07cd0e39b1cf6c133988156f087c1c3ccb0a5491c9115","03c258e060b7da220973f84b89615e4e9850e9b5d30b3a8e4840b3e3268ae8eb","319c37263037e8d9481a3dc7eadf6afa6a5f5c002189ebe28776ac1a62a38e15","5b5337f28573ffdbc95c3653c4a7961d0f02fdf4788888253bf74a3b5a05443e","9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","85f8ebd7f245e8bf29da270e8b53dcdd17528826ffd27176c5fc7e426213ef5a","7abf54763b6709a2b72ecd1247c3cfe96f8c44fe6e7ce3897951ee8f4c394640","85976d1088db28912f61f76fd68103dd3625480f5ad5ba4c98519a81693ef717","ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","1f4ae755492a669b317903a6b1664cb7af3fe0c3d1eec6447f4e95a80616d15a","12fe557e4c2d5ce9e11362f69a8d7c05d0588de4ae415afe8c5106da5c2772aa","f2f23fe34b735887db1d5597714ae37a6ffae530cafd6908c9d79d485667c956","7fae4b2bc906f3e6840725cc24affaa4e684e6c9cc20254242c5df4bede5b6f6","24112d1a55250f4da7f9edb9dabeac8e3badebdf4a55b421fc7b8ca5ccc03133","bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","5d30d04a14ed8527ac5d654dc345a4db11b593334c11a65efb6e4facc5484a0e"],"root":[[206,209]],"options":{"allowJs":true,"declaration":true,"esModuleInterop":true,"experimentalDecorators":true,"module":1,"noImplicitOverride":true,"outDir":"./","skipLibCheck":true,"sourceMap":true,"strict":true,"target":99},"fileIdsList":[[148,177,178,179,193,207],[148,177,193,201,206],[148,193,195,201,205,207,208],[148,206],[148,195],[148,196],[148,195,196,197],[148,196,197,198,199,200],[148],[148,210],[148,232],[148,210,211,212,213,214],[148,210,212],[121,148,155],[136,148,155],[118,119,148,155,224],[119,148,155],[148,227],[148,228],[148,234,237],[148,242,244,245,246,247,248,249,250,251,252,253,254],[148,242,243,245,246,247,248,249,250,251,252,253,254],[148,243,244,245,246,247,248,249,250,251,252,253,254],[148,242,243,244,246,247,248,249,250,251,252,253,254],[148,242,243,244,245,247,248,249,250,251,252,253,254],[148,242,243,244,245,246,248,249,250,251,252,253,254],[148,242,243,244,245,246,247,249,250,251,252,253,254],[148,242,243,244,245,246,247,248,250,251,252,253,254],[148,242,243,244,245,246,247,248,249,251,252,253,254],[148,242,243,244,245,246,247,248,249,250,252,253,254],[148,242,243,244,245,246,247,248,249,250,251,253,254],[148,242,243,244,245,246,247,248,249,250,251,252,254],[148,242,243,244,245,246,247,248,249,250,251,252,253],[69,148],[105,148],[106,111,139,148],[107,118,119,126,136,147,148],[107,108,118,126,148],[109,148],[110,111,119,127,148],[111,136,144,148],[112,114,118,126,148],[113,148],[114,115,148],[118,148],[116,118,148],[105,118,148],[118,119,120,136,147,148],[118,119,120,133,136,139,148],[103,148,152],[114,118,121,126,136,147,148],[118,119,121,122,126,136,144,147,148],[121,123,136,144,147,148],[69,70,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154],[118,124,148],[125,147,148,152],[114,118,126,136,148],[127,148],[128,148],[105,129,148],[130,146,148,152],[131,148],[132,148],[118,133,134,148],[133,135,148,150],[106,118,136,137,138,139,148],[106,136,138,148],[136,137,148],[139,148],[140,148],[105,136,148],[118,142,143,148],[142,143,148],[111,126,136,144,148],[145,148],[126,146,148],[106,121,132,147,148],[111,148],[136,148,149],[125,148,150],[148,151],[106,111,118,120,129,136,147,148,150,152],[136,148,153],[119,121,123,126,136,147,148,155,217,264,265],[121,136,148,155],[148,267,306],[148,267,291,306],[148,306],[148,267],[148,267,292,306],[148,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305],[148,292,306],[118,126,136,148,155,307],[148,315],[148,230,236],[148,155,156],[118,148,155,156,172,173],[148,157,161,171,175],[118,148,155,156,157,158,160,161,168,171,172,174],[148,157],[114,148,155,161,168,169],[118,148,155,156,157,158,160,161,169,170,175],[114,148,155],[148,156],[148,162],[148,164],[118,144,148,155,156,162,164,165,170],[148,168],[126,144,148,155,156,162],[148,156,157,158,159,162,166,167,168,169,170,171,175,176],[148,161,163,166,167],[148,159],[126,144,148,155],[148,156,157,159],[148,231,235],[148,234],[148,224],[148,221,222,223],[136,148],[148,233],[118,148,155,177],[80,84,147,148],[80,136,147,148],[75,148],[77,80,144,147,148],[126,144,148],[148,155],[75,148,155],[77,80,126,147,148],[72,73,76,79,106,118,136,147,148],[72,78,148],[76,80,106,139,147,148,155],[106,148,155],[96,106,148,155],[74,75,148,155],[80,148],[74,75,76,77,78,79,80,81,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,148],[80,87,88,148],[78,80,88,89,148],[79,148],[72,75,80,148],[80,84,88,89,148],[84,148],[78,80,83,147,148],[72,77,78,80,84,87,148],[106,136,148],[75,80,96,106,148,152,155],[148,194],[148,193],[148,184,186],[148,181,182,184],[148,181,184,188],[148,180,185,186,187,193],[148,180,181,182,183,184,185,186,187,188,189,190,191,192],[148,181,191],[148,183],[148,181,182],[148,193,202,203],[148,204],[148,202,204],[193,207],[177,193],[193,195,201,205],[206]],"referencedMap":[[208,1],[207,2],[206,3],[209,4],[196,5],[197,6],[198,7],[201,8],[200,9],[199,6],[212,10],[210,9],[230,9],[233,11],[232,9],[215,12],[211,10],[213,13],[214,10],[216,9],[217,9],[218,9],[219,14],[220,15],[225,16],[226,17],[227,9],[228,18],[229,19],[238,20],[239,9],[240,9],[241,9],[243,21],[244,22],[242,23],[245,24],[246,25],[247,26],[248,27],[249,28],[250,29],[251,30],[252,31],[253,32],[254,33],[255,9],[256,9],[257,9],[258,15],[259,9],[69,34],[70,34],[105,35],[106,36],[107,37],[108,38],[109,39],[110,40],[111,41],[112,42],[113,43],[114,44],[115,44],[117,45],[116,46],[118,47],[119,48],[120,49],[104,50],[154,9],[121,51],[122,52],[123,53],[155,54],[124,55],[125,56],[126,57],[127,58],[128,59],[129,60],[130,61],[131,62],[132,63],[133,64],[134,64],[135,65],[136,66],[138,67],[137,68],[139,69],[140,70],[141,71],[142,72],[143,73],[144,74],[145,75],[146,76],[147,77],[148,78],[149,79],[150,80],[151,81],[152,82],[153,83],[260,9],[261,9],[262,9],[263,9],[266,84],[264,85],[291,86],[292,87],[267,88],[270,88],[289,86],[290,86],[280,86],[279,89],[277,86],[272,86],[285,86],[283,86],[287,86],[271,86],[284,86],[288,86],[273,86],[274,86],[286,86],[268,86],[275,86],[276,86],[278,86],[282,86],[293,90],[281,86],[269,86],[306,91],[305,9],[300,90],[302,92],[301,90],[294,90],[295,90],[297,90],[299,90],[303,92],[304,92],[296,92],[298,92],[307,15],[308,93],[309,9],[310,9],[265,9],[311,9],[312,9],[313,9],[314,9],[315,9],[316,94],[71,9],[231,9],[172,9],[237,95],[157,96],[174,97],[176,98],[175,99],[158,15],[173,100],[170,101],[171,102],[169,103],[162,104],[163,105],[165,106],[166,107],[164,108],[167,109],[177,110],[168,111],[160,112],[156,113],[161,114],[159,96],[236,115],[235,116],[221,117],[222,117],[224,118],[223,117],[179,119],[234,120],[178,121],[66,9],[67,9],[12,9],[13,9],[17,9],[16,9],[2,9],[18,9],[19,9],[20,9],[21,9],[22,9],[23,9],[24,9],[25,9],[3,9],[4,9],[26,9],[30,9],[27,9],[28,9],[29,9],[31,9],[32,9],[33,9],[5,9],[34,9],[35,9],[36,9],[37,9],[6,9],[41,9],[38,9],[39,9],[40,9],[42,9],[7,9],[43,9],[48,9],[49,9],[44,9],[45,9],[46,9],[47,9],[8,9],[53,9],[50,9],[51,9],[52,9],[54,9],[9,9],[55,9],[56,9],[57,9],[60,9],[58,9],[59,9],[61,9],[62,9],[10,9],[1,9],[11,9],[65,9],[64,9],[68,9],[63,9],[15,9],[14,9],[87,122],[94,123],[86,122],[101,124],[78,125],[77,126],[100,127],[95,128],[98,129],[80,130],[79,131],[75,132],[74,133],[97,134],[76,135],[81,136],[82,9],[85,136],[72,9],[103,137],[102,136],[89,138],[90,139],[92,140],[88,141],[91,142],[96,127],[83,143],[84,144],[93,145],[73,146],[99,147],[194,9],[195,148],[180,149],[189,150],[185,151],[181,9],[186,152],[183,9],[188,153],[193,154],[182,9],[191,9],[190,9],[192,155],[184,156],[187,157],[202,149],[204,158],[203,159],[205,160]],"exportedModulesMap":[[208,161],[207,162],[206,163],[209,164],[196,5],[197,6],[198,7],[201,8],[200,9],[199,6],[212,10],[210,9],[230,9],[233,11],[232,9],[215,12],[211,10],[213,13],[214,10],[216,9],[217,9],[218,9],[219,14],[220,15],[225,16],[226,17],[227,9],[228,18],[229,19],[238,20],[239,9],[240,9],[241,9],[243,21],[244,22],[242,23],[245,24],[246,25],[247,26],[248,27],[249,28],[250,29],[251,30],[252,31],[253,32],[254,33],[255,9],[256,9],[257,9],[258,15],[259,9],[69,34],[70,34],[105,35],[106,36],[107,37],[108,38],[109,39],[110,40],[111,41],[112,42],[113,43],[114,44],[115,44],[117,45],[116,46],[118,47],[119,48],[120,49],[104,50],[154,9],[121,51],[122,52],[123,53],[155,54],[124,55],[125,56],[126,57],[127,58],[128,59],[129,60],[130,61],[131,62],[132,63],[133,64],[134,64],[135,65],[136,66],[138,67],[137,68],[139,69],[140,70],[141,71],[142,72],[143,73],[144,74],[145,75],[146,76],[147,77],[148,78],[149,79],[150,80],[151,81],[152,82],[153,83],[260,9],[261,9],[262,9],[263,9],[266,84],[264,85],[291,86],[292,87],[267,88],[270,88],[289,86],[290,86],[280,86],[279,89],[277,86],[272,86],[285,86],[283,86],[287,86],[271,86],[284,86],[288,86],[273,86],[274,86],[286,86],[268,86],[275,86],[276,86],[278,86],[282,86],[293,90],[281,86],[269,86],[306,91],[305,9],[300,90],[302,92],[301,90],[294,90],[295,90],[297,90],[299,90],[303,92],[304,92],[296,92],[298,92],[307,15],[308,93],[309,9],[310,9],[265,9],[311,9],[312,9],[313,9],[314,9],[315,9],[316,94],[71,9],[231,9],[172,9],[237,95],[157,96],[174,97],[176,98],[175,99],[158,15],[173,100],[170,101],[171,102],[169,103],[162,104],[163,105],[165,106],[166,107],[164,108],[167,109],[177,110],[168,111],[160,112],[156,113],[161,114],[159,96],[236,115],[235,116],[221,117],[222,117],[224,118],[223,117],[179,119],[234,120],[178,121],[66,9],[67,9],[12,9],[13,9],[17,9],[16,9],[2,9],[18,9],[19,9],[20,9],[21,9],[22,9],[23,9],[24,9],[25,9],[3,9],[4,9],[26,9],[30,9],[27,9],[28,9],[29,9],[31,9],[32,9],[33,9],[5,9],[34,9],[35,9],[36,9],[37,9],[6,9],[41,9],[38,9],[39,9],[40,9],[42,9],[7,9],[43,9],[48,9],[49,9],[44,9],[45,9],[46,9],[47,9],[8,9],[53,9],[50,9],[51,9],[52,9],[54,9],[9,9],[55,9],[56,9],[57,9],[60,9],[58,9],[59,9],[61,9],[62,9],[10,9],[1,9],[11,9],[65,9],[64,9],[68,9],[63,9],[15,9],[14,9],[87,122],[94,123],[86,122],[101,124],[78,125],[77,126],[100,127],[95,128],[98,129],[80,130],[79,131],[75,132],[74,133],[97,134],[76,135],[81,136],[82,9],[85,136],[72,9],[103,137],[102,136],[89,138],[90,139],[92,140],[88,141],[91,142],[96,127],[83,143],[84,144],[93,145],[73,146],[99,147],[194,9],[195,148],[180,149],[189,150],[185,151],[181,9],[186,152],[183,9],[188,153],[193,154],[182,9],[191,9],[190,9],[192,155],[184,156],[187,157],[202,149],[204,158],[203,159],[205,160]],"semanticDiagnosticsPerFile":[208,207,206,209,196,197,198,201,200,199,212,210,230,233,232,215,211,213,214,216,217,218,219,220,225,226,227,228,229,238,239,240,241,243,244,242,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,69,70,105,106,107,108,109,110,111,112,113,114,115,117,116,118,119,120,104,154,121,122,123,155,124,125,126,127,128,129,130,131,132,133,134,135,136,138,137,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,260,261,262,263,266,264,291,292,267,270,289,290,280,279,277,272,285,283,287,271,284,288,273,274,286,268,275,276,278,282,293,281,269,306,305,300,302,301,294,295,297,299,303,304,296,298,307,308,309,310,265,311,312,313,314,315,316,71,231,172,237,157,174,176,175,158,173,170,171,169,162,163,165,166,164,167,177,168,160,156,161,159,236,235,221,222,224,223,179,234,178,66,67,12,13,17,16,2,18,19,20,21,22,23,24,25,3,4,26,30,27,28,29,31,32,33,5,34,35,36,37,6,41,38,39,40,42,7,43,48,49,44,45,46,47,8,53,50,51,52,54,9,55,56,57,60,58,59,61,62,10,1,11,65,64,68,63,15,14,87,94,86,101,78,77,100,95,98,80,79,75,74,97,76,81,82,85,72,103,102,89,90,92,88,91,96,83,84,93,73,99,194,195,180,189,185,181,186,183,188,193,182,191,190,192,184,187,202,204,203,205]},"version":"5.3.3"}
package/tsconfig.json DELETED
@@ -1,9 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.json",
3
- "compilerOptions": {
4
- "outDir": "./transpiled"
5
- },
6
- "include": [
7
- "source"
8
- ]
9
- }