@zajno/common 3.0.0 → 3.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,10 +1,13 @@
1
1
  import type { IDisposable } from '../functions/disposer';
2
2
  export declare class Lazy<T> implements IDisposable {
3
3
  protected readonly _factory: (() => T);
4
+ protected readonly _disposer?: (prev: T) => void;
4
5
  protected _instance: T;
5
- constructor(_factory: (() => T));
6
+ constructor(_factory: (() => T), _disposer?: (prev: T) => void);
6
7
  get hasValue(): boolean;
7
8
  get value(): T;
9
+ /** Override me: additional way to make sure instance is valid */
10
+ protected get isValid(): boolean;
8
11
  private ensureInstance;
9
12
  prewarm(): this;
10
13
  reset(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"singleton.d.ts","sourceRoot":"","sources":["../../src/lazy/singleton.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,qBAAa,IAAI,CAAC,CAAC,CAAE,YAAW,WAAW;IAI3B,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC;IAFlD,SAAS,CAAC,SAAS,EAAE,CAAC,CAAQ;gBAEC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC;IAElD,IAAI,QAAQ,YAAsC;IAElD,IAAI,KAAK,MAGR;IAED,OAAO,CAAC,cAAc;IAMtB,OAAO;IAKP,KAAK;IAIL,OAAO;CACV"}
1
+ {"version":3,"file":"singleton.d.ts","sourceRoot":"","sources":["../../src/lazy/singleton.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,qBAAa,IAAI,CAAC,CAAC,CAAE,YAAW,WAAW;IAKnC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC;IACtC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI;IAJpD,SAAS,CAAC,SAAS,EAAE,CAAC,CAAQ;gBAGP,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,EACnB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI;IAKpD,IAAI,QAAQ,YAAsC;IAElD,IAAI,KAAK,MAGR;IAED,iEAAiE;IACjE,SAAS,KAAK,OAAO,YAA4B;IAEjD,OAAO,CAAC,cAAc;IAUtB,OAAO;IAKP,KAAK;IAOL,OAAO;CACV"}
package/lazy/singleton.js CHANGED
@@ -1,6 +1,7 @@
1
1
  export class Lazy {
2
- constructor(_factory) {
2
+ constructor(_factory, _disposer) {
3
3
  this._factory = _factory;
4
+ this._disposer = _disposer;
4
5
  this._instance = null;
5
6
  }
6
7
  get hasValue() { return this._instance !== null; }
@@ -8,16 +9,24 @@ export class Lazy {
8
9
  this.ensureInstance();
9
10
  return this._instance;
10
11
  }
12
+ /** Override me: additional way to make sure instance is valid */
13
+ get isValid() { return this.hasValue; }
11
14
  ensureInstance() {
12
- if (this._instance === null) {
13
- this._instance = this._factory();
15
+ if (this.isValid) {
16
+ return;
14
17
  }
18
+ // additional reset to make sure previous instance has been disposed
19
+ this.reset();
20
+ this._instance = this._factory();
15
21
  }
16
22
  prewarm() {
17
23
  this.ensureInstance();
18
24
  return this;
19
25
  }
20
26
  reset() {
27
+ if (this.hasValue && this._disposer) {
28
+ this._disposer(this._instance);
29
+ }
21
30
  this._instance = null;
22
31
  }
23
32
  dispose() { this.reset(); }
@@ -1 +1 @@
1
- {"version":3,"file":"singleton.js","sourceRoot":"","sources":["../../src/lazy/singleton.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,IAAI;IAIb,YAA+B,QAAmB;QAAnB,aAAQ,GAAR,QAAQ,CAAW;QAFxC,cAAS,GAAM,IAAI,CAAC;IAEwB,CAAC;IAEvD,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC;IAElD,IAAI,KAAK;QACL,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAEO,cAAc;QAClB,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;YACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;SACpC;IACL,CAAC;IAED,OAAO;QACH,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,OAAO,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;CAC9B"}
1
+ {"version":3,"file":"singleton.js","sourceRoot":"","sources":["../../src/lazy/singleton.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,IAAI;IAIb,YACuB,QAAmB,EACnB,SAA6B;QAD7B,aAAQ,GAAR,QAAQ,CAAW;QACnB,cAAS,GAAT,SAAS,CAAoB;QAJ1C,cAAS,GAAM,IAAI,CAAC;IAO9B,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC;IAElD,IAAI,KAAK;QACL,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,iEAAiE;IACjE,IAAc,OAAO,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEzC,cAAc;QAClB,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,OAAO;SACV;QAED,oEAAoE;QACpE,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IACrC,CAAC;IAED,OAAO;QACH,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK;QACD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;YACjC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAClC;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,OAAO,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;CAC9B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zajno/common",
3
- "version": "3.0.0",
3
+ "version": "3.0.2",
4
4
  "description": "Zajno's re-usable utilities for JS/TS projects",
5
5
  "repository": {
6
6
  "type": "git",
@@ -28,18 +28,18 @@
28
28
  "devDependencies": {
29
29
  "@faker-js/faker": "^7.6.0",
30
30
  "@types/jest": "^29.5.0",
31
- "@types/node": "^18.15.10",
31
+ "@types/node": "^18.15.11",
32
32
  "@zajno/eslint-config": "^2.3.0",
33
33
  "cpy-cli": "^4.2.0",
34
- "eslint": "^8.36.0",
34
+ "eslint": "^8.38.0",
35
35
  "fast-check": "^3.7.1",
36
36
  "jest": "^29.5.0",
37
37
  "jest-extended": "^3.2.4",
38
38
  "rimraf": "^3",
39
- "ts-jest": "^29.0.5",
39
+ "ts-jest": "^29.1.0",
40
40
  "ts-node": "^10.9.1",
41
41
  "tslib": "^2.5.0",
42
- "typescript": "^5.0.2"
42
+ "typescript": "^5.0.4"
43
43
  },
44
44
  "peerDependencies": {
45
45
  "tslib": "^2.4"
@@ -0,0 +1,30 @@
1
+ import { LazyPromise } from '../lazy/promise';
2
+ import { FunctionKeys, StringKeys } from '../types';
3
+ declare const PromiseGetter: "__promise";
4
+ type AllowedFnKeys<T> = FunctionKeys<T, any[], void>;
5
+ type PromiseProxy<T, TKeys extends StringKeys<T> = StringKeys<T>, TFnKeys = never, TWrap extends Object = {}> = {
6
+ [K in TKeys]: T[K] extends Function ? (K extends TFnKeys ? T[K] : never) : T[K];
7
+ } & {
8
+ readonly [PromiseGetter]: Promise<T>;
9
+ } & TWrap;
10
+ type ForbiddenKeys = typeof PromiseGetter;
11
+ type NoForbiddenKeys<T> = {
12
+ [K in keyof T]: K extends ForbiddenKeys ? never : T[K];
13
+ };
14
+ type Options<T, TFnKeys, TWrap, TLazy> = {
15
+ loader: () => Promise<T>;
16
+ fnKeys?: TFnKeys[];
17
+ wrap?: TWrap;
18
+ lazy?: TLazy;
19
+ };
20
+ /**
21
+ * Creates a proxy object that will be resolved to the object returned by the loader function. // Thanks CoPilot for this comment :)
22
+ *
23
+ * @param loader a function returning a promise that resolves to a proxied object
24
+ * @param fnKeys an array of keys that should be treated as functions so that they can be called before the object is resolved
25
+ * @param wrap an object that will be used as a wrapper for the proxied object. can contain any fields that will be copied to the resolved object
26
+ * @returns a proxy object that will be resolved to the object returned by the loader function
27
+ */
28
+ export declare function createPromiseProxy<T extends NoForbiddenKeys<T>, TFnKeys extends AllowedFnKeys<T> = never, TWrap extends Object = {}>(options: Options<T, TFnKeys, TWrap, typeof LazyPromise>): PromiseProxy<T, StringKeys<T>, TFnKeys, TWrap>;
29
+ export {};
30
+ //# sourceMappingURL=promiseProxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promiseProxy.d.ts","sourceRoot":"","sources":["../../src/structures/promiseProxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEpD,QAAA,MAAM,aAAa,aAAuB,CAAC;AAE3C,KAAK,aAAa,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;AAErD,KAAK,YAAY,CAAC,CAAC,EAAE,KAAK,SAAS,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,GAAG,KAAK,EAAE,KAAK,SAAS,MAAM,GAAG,EAAG,IAAI;KAC5G,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,GAC7B,CAAC,CAAC,SAAS,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAClC,CAAC,CAAC,CAAC,CAAC;CACb,GAAG;IACA,QAAQ,CAAC,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CACxC,GAAG,KAAK,CAAC;AAEV,KAAK,aAAa,GAAG,OAAO,aAAa,CAAC;AAC1C,KAAK,eAAe,CAAC,CAAC,IAAI;KACrB,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,aAAa,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;CACzD,CAAC;AAEF,KAAK,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,IAAI;IACrC,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,IAAI,CAAC,EAAE,KAAK,CAAC;CAChB,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,SAAS,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,KAAK,SAAS,MAAM,GAAG,EAAG,EACjI,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,WAAW,CAAC,GACxD,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAoFhD"}
@@ -0,0 +1,88 @@
1
+ import { LazyPromise } from '../lazy/promise';
2
+ const PromiseGetter = '__promise';
3
+ /**
4
+ * Creates a proxy object that will be resolved to the object returned by the loader function. // Thanks CoPilot for this comment :)
5
+ *
6
+ * @param loader a function returning a promise that resolves to a proxied object
7
+ * @param fnKeys an array of keys that should be treated as functions so that they can be called before the object is resolved
8
+ * @param wrap an object that will be used as a wrapper for the proxied object. can contain any fields that will be copied to the resolved object
9
+ * @returns a proxy object that will be resolved to the object returned by the loader function
10
+ */
11
+ export function createPromiseProxy(options) {
12
+ const { loader, fnKeys, wrap, lazy: TLazy = LazyPromise } = options;
13
+ // wrapper object that will hold values temporarily while loading is in progress
14
+ const wrapper = wrap || {};
15
+ const functionCalls = new Map();
16
+ let _resolved = null;
17
+ let lazy = new TLazy(async () => {
18
+ // do the loading
19
+ const result = await loader();
20
+ // copy values from wrapper to result
21
+ Object.entries(wrapper).forEach(([key, value]) => {
22
+ if (value !== undefined && (!wrap || wrap[key] == null)) {
23
+ result[key] = value;
24
+ }
25
+ });
26
+ // call functions that were called before the object was resolved
27
+ for (const [key, args] of functionCalls) {
28
+ const fn = result[key];
29
+ fn.apply(result, args);
30
+ }
31
+ _resolved = result;
32
+ if (_resolved) {
33
+ // free up memory, we don't need the wrapper anymore
34
+ lazy = null;
35
+ }
36
+ return result;
37
+ });
38
+ const proxy = new Proxy(wrapper, {
39
+ get(target, key) {
40
+ if (key === PromiseGetter) {
41
+ return _resolved ? null : lazy.promise;
42
+ }
43
+ const current = _resolved || lazy.value;
44
+ if (current) {
45
+ if (wrap && !(key in current) && key in wrap) {
46
+ return target[key];
47
+ }
48
+ const res = current[key];
49
+ if (typeof res === 'function') {
50
+ return res.bind(current);
51
+ }
52
+ return res;
53
+ }
54
+ if (fnKeys?.includes(key)) {
55
+ return (...args) => {
56
+ functionCalls.set(key, args);
57
+ };
58
+ }
59
+ return target[key];
60
+ },
61
+ set(target, key, value) {
62
+ const current = _resolved || lazy.value;
63
+ if (current) {
64
+ current[key] = value;
65
+ }
66
+ else {
67
+ target[key] = value;
68
+ }
69
+ return true;
70
+ },
71
+ getOwnPropertyDescriptor(target, key) {
72
+ const current = _resolved || lazy.value;
73
+ if (current) {
74
+ return Object.getOwnPropertyDescriptor(current, key);
75
+ }
76
+ return Object.getOwnPropertyDescriptor(target, key);
77
+ },
78
+ ownKeys(target) {
79
+ const current = _resolved || lazy.value;
80
+ if (current) {
81
+ return Object.keys(current);
82
+ }
83
+ return Object.keys(target);
84
+ },
85
+ });
86
+ return proxy;
87
+ }
88
+ //# sourceMappingURL=promiseProxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promiseProxy.js","sourceRoot":"","sources":["../../src/structures/promiseProxy.ts"],"names":[],"mappings":"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"}
package/types/index.d.ts CHANGED
@@ -5,6 +5,14 @@ export type Predicate<T> = (value: T) => boolean;
5
5
  export type TypedKeys<T extends Object, K> = {
6
6
  [P in keyof T]: T[P] extends K ? P : never;
7
7
  }[keyof T];
8
+ /** Type for extracting only string keys from T (skips number & symbol keys) */
9
+ export type StringKeys<T> = {
10
+ [K in keyof T]: K extends string ? K : never;
11
+ }[keyof T];
12
+ /** Type for extraction only keys, values of which are functions with certain args and return result */
13
+ export type FunctionKeys<T, TArgs extends any[] = any[], TRes = any> = {
14
+ [K in keyof T]: T[K] extends (...args: TArgs) => TRes ? K : never;
15
+ }[keyof T];
8
16
  export type ArrayTail<T> = T extends [any, ...infer P] ? [...P] : T;
9
17
  export type NestedPick<T, K extends any[]> = K extends Array<never> ? T : {
10
18
  [P in K[0]]: P extends keyof T ? NestedPick<T[P], ArrayTail<K>> : never;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAE7B,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC;AAEjD,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI;KACxC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK;CAC7C,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAEpE,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,EAAE,IAAI,CAAC,SAAS,KAAK,CAAC,KAAK,CAAC,GAC7D,CAAC,GACD;KACG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;CAC1E,CAAC;AAEN,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI;IACrB,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACjC,CAAC;AAGF,MAAM,MAAM,WAAW,CACf,CAAC,EACD,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,IAClB,MAAM,SAAS,CAAC,GACd,CAAC,EAAE,GACH,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,GACrB,CAAC,GACD,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAE7B,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC;AAEjD,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI;KACxC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK;CAC7C,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX,+EAA+E;AAC/E,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;KACvB,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,MAAM,GAAG,CAAC,GAAG,KAAK;CAC/C,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX,uGAAuG;AACvG,MAAM,MAAM,YAAY,CAAC,CAAC,EAAE,KAAK,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,IAAI,GAAG,GAAG,IAAI;KAClE,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK;CACpE,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAEpE,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,EAAE,IAAI,CAAC,SAAS,KAAK,CAAC,KAAK,CAAC,GAC7D,CAAC,GACD;KACG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;CAC1E,CAAC;AAEN,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI;IACrB,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACjC,CAAC;AAGF,MAAM,MAAM,WAAW,CACf,CAAC,EACD,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,IAClB,MAAM,SAAS,CAAC,GACd,CAAC,EAAE,GACH,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,GACrB,CAAC,GACD,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC"}