@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 +17 -10
- package/readme.md +6 -16
- package/transpiled/Aspect.d.ts +6 -11
- package/transpiled/Aspect.js +52 -30
- package/transpiled/Aspect.js.map +1 -1
- package/transpiled/Connection.d.ts +9 -4
- package/transpiled/Connection.js +60 -29
- package/transpiled/Connection.js.map +1 -1
- package/transpiled/Stash.d.ts +11 -0
- package/transpiled/Stash.js +2 -0
- package/transpiled/Stash.js.map +1 -0
- package/transpiled/extension.d.ts +2 -6
- package/transpiled/extension.js +5 -23
- package/transpiled/extension.js.map +1 -1
- package/transpiled/index.d.ts +2 -1
- package/transpiled/index.js +1 -17
- package/transpiled/index.js.map +1 -1
- package/transpiled/measurements.d.ts +2 -0
- package/transpiled/measurements.js +13 -0
- package/transpiled/measurements.js.map +1 -0
- package/source/Aspect.ts +0 -70
- package/source/Connection.ts +0 -48
- package/source/extension.ts +0 -30
- package/source/index.ts +0 -1
- package/transpiled/tsconfig.tsbuildinfo +0 -1
- package/tsconfig.json +0 -9
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@toa.io/extensions.stash",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
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/
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
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
|
-
"
|
|
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
|
|
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
|
|
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
|
|
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:
|
package/transpiled/Aspect.d.ts
CHANGED
|
@@ -1,20 +1,15 @@
|
|
|
1
|
-
import { Connector
|
|
2
|
-
import type {
|
|
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):
|
|
10
|
-
invoke(method: 'fetch', key: string):
|
|
11
|
-
invoke
|
|
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 {};
|
package/transpiled/Aspect.js
CHANGED
|
@@ -1,40 +1,50 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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.
|
|
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 =
|
|
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 :
|
|
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
|
-
|
|
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
|
package/transpiled/Aspect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Aspect.js","sourceRoot":"","sources":["../source/Aspect.ts"],"names":[],"mappings":"
|
|
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
|
-
|
|
5
|
-
|
|
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
|
|
10
|
-
private resolveURLs;
|
|
15
|
+
private resolveURL;
|
|
11
16
|
}
|
package/transpiled/Connection.js
CHANGED
|
@@ -1,41 +1,72 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
|
30
|
-
|
|
31
|
-
|
|
54
|
+
async close() {
|
|
55
|
+
this.redis?.disconnect();
|
|
56
|
+
this.redis = null;
|
|
57
|
+
console.info('Stash shutdown complete');
|
|
32
58
|
}
|
|
33
|
-
async
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
return
|
|
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":"
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"Stash.js","sourceRoot":"","sources":["../source/Stash.ts"],"names":[],"mappings":""}
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type {
|
|
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";
|
package/transpiled/extension.js
CHANGED
|
@@ -1,27 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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
|
|
10
|
-
return new
|
|
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":"
|
|
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"}
|
package/transpiled/index.d.ts
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export * from './extension';
|
|
1
|
+
export * from './extension.ts';
|
|
2
|
+
export type { Stash } from './Stash.ts';
|
package/transpiled/index.js
CHANGED
|
@@ -1,18 +1,2 @@
|
|
|
1
|
-
|
|
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
|
package/transpiled/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA"}
|
|
@@ -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[]
|
package/source/Connection.ts
DELETED
|
@@ -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
|
-
}
|
package/source/extension.ts
DELETED
|
@@ -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"}
|