koatty_store 1.4.7 → 1.5.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.
- package/.eslintrc.js +2 -1
- package/.vscode/launch.json +25 -0
- package/CHANGELOG.md +2 -6
- package/LICENSE +1 -1
- package/babel.config.js +0 -5
- package/dist/index.d.ts +19 -28
- package/dist/index.js +11 -20
- package/dist/index.js.map +1 -1
- package/dist/{memory.d.ts → store/memory.d.ts} +8 -41
- package/dist/{memory.js → store/memory.js} +12 -56
- package/dist/store/memory.js.map +1 -0
- package/dist/store/memory_cache.d.ts +553 -0
- package/dist/store/memory_cache.js +1149 -0
- package/dist/store/memory_cache.js.map +1 -0
- package/dist/store/redis.d.ts +73 -0
- package/dist/store/redis.js +228 -0
- package/dist/store/redis.js.map +1 -0
- package/dist/{redis.d.ts → store.d.ts} +36 -105
- package/dist/store.js +383 -0
- package/dist/store.js.map +1 -0
- package/jest.config.js +19 -1
- package/jest_html_reporters.html +1 -1
- package/package.json +19 -21
- package/tsconfig.json +4 -4
- package/dist/memory.js.map +0 -1
- package/dist/redis.js +0 -545
- package/dist/redis.js.map +0 -1
- package/tslint.json +0 -85
- package/yarn-error.log +0 -6080
package/.eslintrc.js
CHANGED
|
@@ -22,12 +22,13 @@ module.exports = {
|
|
|
22
22
|
},
|
|
23
23
|
rules: {
|
|
24
24
|
"@typescript-eslint/no-explicit-any": "off",
|
|
25
|
-
"@typescript-eslint/no-require-imports": "off",
|
|
25
|
+
// "@typescript-eslint/no-require-imports": "off",
|
|
26
26
|
"@typescript-eslint/no-var-requires": "off",
|
|
27
27
|
"@typescript-eslint/member-ordering": "off",
|
|
28
28
|
"@typescript-eslint/consistent-type-assertions": "off",
|
|
29
29
|
"@typescript-eslint/no-param-reassign": "off",
|
|
30
30
|
"@typescript-eslint/no-empty-function": "off",
|
|
31
|
+
"@typescript-eslint/no-empty-interface": "off",
|
|
31
32
|
"@typescript-eslint/explicit-module-boundary-types": "off",
|
|
32
33
|
"@typescript-eslint/ban-types": ["error",
|
|
33
34
|
{
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
// 使用 IntelliSense 了解相关属性。
|
|
3
|
+
// 悬停以查看现有属性的描述。
|
|
4
|
+
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
|
|
5
|
+
"version": "0.2.0",
|
|
6
|
+
"configurations": [
|
|
7
|
+
{
|
|
8
|
+
"name": "Launch Typescript Project",
|
|
9
|
+
"type": "node",
|
|
10
|
+
"request": "launch",
|
|
11
|
+
"args": [
|
|
12
|
+
"${workspaceRoot}/test/test.ts"
|
|
13
|
+
],
|
|
14
|
+
"runtimeArgs": [
|
|
15
|
+
"--nolazy",
|
|
16
|
+
"-r",
|
|
17
|
+
"ts-node/register"
|
|
18
|
+
],
|
|
19
|
+
"sourceMaps": true,
|
|
20
|
+
"cwd": "${workspaceRoot}",
|
|
21
|
+
"protocol": "inspector",
|
|
22
|
+
"internalConsoleOptions": "neverOpen"
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
}
|
package/CHANGELOG.md
CHANGED
|
@@ -2,10 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
-
### [1.
|
|
5
|
+
### [1.5.2](https://github.com/koatty/koatty_store/compare/v1.4.10...v1.5.2) (2021-12-02)
|
|
6
6
|
|
|
7
|
-
### [1.4.
|
|
8
|
-
|
|
9
|
-
### [1.3.3](https://github.com/koatty/koatty_store/compare/v1.3.2...v1.3.3) (2021-06-30)
|
|
10
|
-
|
|
11
|
-
### 1.3.2 (2021-06-23)
|
|
7
|
+
### [1.4.10](https://github.com/koatty/koatty_store/compare/v1.4.8...v1.4.10) (2021-11-20)
|
package/LICENSE
CHANGED
package/babel.config.js
CHANGED
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* @Description : babel配置
|
|
3
3
|
* @usage : 用于jest执行用例
|
|
4
|
-
* @Date : 2020-10-19 23:08:40
|
|
5
|
-
* @Author : fankerwang<fankerwang@tencent.com>
|
|
6
|
-
* @LastEditors : fankerwang<fankerwang@tencent.com>
|
|
7
|
-
* @LastEditTime : 2021-05-21 20:27:11
|
|
8
|
-
* @FilePath : /tkoatty/babel.config.js
|
|
9
4
|
*/
|
|
10
5
|
|
|
11
6
|
module.exports = {
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
export { RedisStore, RedisStoreOptions } from "./redis";
|
|
4
|
-
export { MemoryStore, MemoryStoreOptions } from "./memory";
|
|
1
|
+
import { CacheStore } from "./store";
|
|
2
|
+
export { MemoryStore } from "./store/memory";
|
|
5
3
|
/**
|
|
6
4
|
*
|
|
7
5
|
*
|
|
@@ -9,34 +7,27 @@ export { MemoryStore, MemoryStoreOptions } from "./memory";
|
|
|
9
7
|
* @interface StoreOptions
|
|
10
8
|
*/
|
|
11
9
|
export interface StoreOptions {
|
|
12
|
-
type
|
|
13
|
-
|
|
14
|
-
host
|
|
10
|
+
type?: string;
|
|
11
|
+
keyPrefix?: string;
|
|
12
|
+
host?: string | Array<string>;
|
|
15
13
|
port?: number | Array<number>;
|
|
16
|
-
name?: string;
|
|
17
14
|
username?: string;
|
|
18
15
|
password?: string;
|
|
19
16
|
db?: number;
|
|
20
17
|
timeout?: number;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
release(conn: any): Promise<void>;
|
|
35
|
-
get(name: string): Promise<any>;
|
|
36
|
-
set(name: string, value: string | number, timeout?: number): Promise<any>;
|
|
37
|
-
del(name: string): Promise<any>;
|
|
38
|
-
defineCommand(name: string, scripts: any): any;
|
|
39
|
-
getCompare(name: string, value: string | number): Promise<any>;
|
|
18
|
+
poolSize?: number;
|
|
19
|
+
connectTimeout?: number;
|
|
20
|
+
name?: string;
|
|
21
|
+
sentinelUsername?: string;
|
|
22
|
+
sentinelPassword?: string;
|
|
23
|
+
sentinels?: Array<{
|
|
24
|
+
host: string;
|
|
25
|
+
port: number;
|
|
26
|
+
}>;
|
|
27
|
+
clusters?: Array<{
|
|
28
|
+
host: string;
|
|
29
|
+
port: number;
|
|
30
|
+
}>;
|
|
40
31
|
}
|
|
41
32
|
/**
|
|
42
33
|
*
|
|
@@ -53,5 +44,5 @@ export declare class Store {
|
|
|
53
44
|
* @returns
|
|
54
45
|
* @memberof ValidateUtil
|
|
55
46
|
*/
|
|
56
|
-
static getInstance(options: StoreOptions):
|
|
47
|
+
static getInstance(options: StoreOptions): CacheStore;
|
|
57
48
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,19 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Store = exports.MemoryStore =
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
* @LastEditors: Please set LastEditors
|
|
8
|
-
* @LastEditTime: 2021-07-01 11:03:36
|
|
9
|
-
* @License: BSD (3-Clause)
|
|
10
|
-
* @Copyright (c) - <richenlin(at)gmail.com>
|
|
11
|
-
*/
|
|
12
|
-
const memory_1 = require("./memory");
|
|
13
|
-
const redis_1 = require("./redis");
|
|
14
|
-
var redis_2 = require("./redis");
|
|
15
|
-
Object.defineProperty(exports, "RedisStore", { enumerable: true, get: function () { return redis_2.RedisStore; } });
|
|
16
|
-
var memory_2 = require("./memory");
|
|
3
|
+
exports.Store = exports.MemoryStore = void 0;
|
|
4
|
+
const memory_1 = require("./store/memory");
|
|
5
|
+
const redis_1 = require("./store/redis");
|
|
6
|
+
var memory_2 = require("./store/memory");
|
|
17
7
|
Object.defineProperty(exports, "MemoryStore", { enumerable: true, get: function () { return memory_2.MemoryStore; } });
|
|
18
8
|
/**
|
|
19
9
|
*
|
|
@@ -36,12 +26,13 @@ class Store {
|
|
|
36
26
|
options = {
|
|
37
27
|
...{
|
|
38
28
|
type: 'memory',
|
|
39
|
-
host: '
|
|
40
|
-
port:
|
|
41
|
-
|
|
42
|
-
timeout:
|
|
43
|
-
|
|
44
|
-
|
|
29
|
+
host: '',
|
|
30
|
+
port: 0,
|
|
31
|
+
keyPrefix: 'Koatty',
|
|
32
|
+
timeout: 600,
|
|
33
|
+
poolSize: 10,
|
|
34
|
+
connectTimeout: 500,
|
|
35
|
+
db: 0
|
|
45
36
|
}, ...options
|
|
46
37
|
};
|
|
47
38
|
switch (options.type) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AASA,2CAA6C;AAC7C,yCAA2C;AAC3C,yCAA6C;AAApC,qGAAA,WAAW,OAAA;AA8BpB;;;;;GAKG;AACH,MAAa,KAAK;IAGd;;;;;;OAMG;IACH,MAAM,CAAC,WAAW,CAAC,OAAqB;QACpC,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,OAAO,IAAI,CAAC,QAAQ,CAAC;SACxB;QACD,OAAO,GAAG;YACN,GAAG;gBACC,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,EAAE;gBACR,IAAI,EAAE,CAAC;gBACP,SAAS,EAAE,QAAQ;gBACnB,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,EAAE;gBACZ,cAAc,EAAE,GAAG;gBACnB,EAAE,EAAE,CAAC;aACR,EAAE,GAAG,OAAO;SAChB,CAAC;QACF,QAAQ,OAAO,CAAC,IAAI,EAAE;YAClB,KAAK,OAAO;gBACR,IAAI,CAAC,QAAQ,GAAG,IAAI,kBAAU,CAAC,OAAO,CAAC,CAAC;gBACxC,MAAM;YACV,KAAK,QAAQ,CAAC;YACd;gBACI,IAAI,CAAC,QAAQ,GAAG,IAAI,oBAAW,CAAC,OAAO,CAAC,CAAC;gBACzC,MAAM;SACb;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;CACJ;AAtCD,sBAsCC"}
|
|
@@ -1,17 +1,10 @@
|
|
|
1
|
-
import { CacheStore
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
* @export
|
|
6
|
-
* @interface MemoryStoreOptions
|
|
7
|
-
*/
|
|
8
|
-
export interface MemoryStoreOptions {
|
|
9
|
-
timeout?: number;
|
|
10
|
-
}
|
|
11
|
-
export declare class MemoryStore implements CacheStore {
|
|
1
|
+
import { CacheStore } from "../store";
|
|
2
|
+
import { StoreOptions } from "../index";
|
|
3
|
+
import { MemoryCache } from "./memory_cache";
|
|
4
|
+
export declare class MemoryStore extends CacheStore {
|
|
12
5
|
client: any;
|
|
13
|
-
|
|
14
|
-
|
|
6
|
+
pool: any;
|
|
7
|
+
options: StoreOptions;
|
|
15
8
|
/**
|
|
16
9
|
* Creates an instance of MemoryStore.
|
|
17
10
|
* @param {StoreOptions} options
|
|
@@ -24,7 +17,7 @@ export declare class MemoryStore implements CacheStore {
|
|
|
24
17
|
* @returns {*}
|
|
25
18
|
* @memberof MemoryStore
|
|
26
19
|
*/
|
|
27
|
-
getConnection():
|
|
20
|
+
getConnection(): MemoryCache;
|
|
28
21
|
/**
|
|
29
22
|
* close
|
|
30
23
|
*
|
|
@@ -47,7 +40,7 @@ export declare class MemoryStore implements CacheStore {
|
|
|
47
40
|
* @param {*} scripts
|
|
48
41
|
* @memberof MemoryStore
|
|
49
42
|
*/
|
|
50
|
-
defineCommand(name: string, scripts: any): Promise<
|
|
43
|
+
defineCommand(name: string, scripts: any): Promise<void>;
|
|
51
44
|
/**
|
|
52
45
|
* get and compare value
|
|
53
46
|
*
|
|
@@ -57,30 +50,4 @@ export declare class MemoryStore implements CacheStore {
|
|
|
57
50
|
* @memberof MemoryStore
|
|
58
51
|
*/
|
|
59
52
|
getCompare(name: string, value: string | number): Promise<any>;
|
|
60
|
-
/**
|
|
61
|
-
* get
|
|
62
|
-
*
|
|
63
|
-
* @param {string} name
|
|
64
|
-
* @returns {*} {Promise<any>}
|
|
65
|
-
* @memberof MemoryStore
|
|
66
|
-
*/
|
|
67
|
-
get(name: string): Promise<any>;
|
|
68
|
-
/**
|
|
69
|
-
* set
|
|
70
|
-
*
|
|
71
|
-
* @param {string} name
|
|
72
|
-
* @param {(string | number)} value
|
|
73
|
-
* @param {number} [timeout]
|
|
74
|
-
* @returns {*} {Promise<any>}
|
|
75
|
-
* @memberof MemoryStore
|
|
76
|
-
*/
|
|
77
|
-
set(name: string, value: string | number, timeout?: number): Promise<any>;
|
|
78
|
-
/**
|
|
79
|
-
* del
|
|
80
|
-
*
|
|
81
|
-
* @param {string} name
|
|
82
|
-
* @returns {*}
|
|
83
|
-
* @memberof MemoryStore
|
|
84
|
-
*/
|
|
85
|
-
del(name: string): any;
|
|
86
53
|
}
|
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MemoryStore = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const MemoryCache = require('@outofsync/memory-cache');
|
|
4
|
+
const store_1 = require("../store");
|
|
5
|
+
const memory_cache_1 = require("./memory_cache");
|
|
6
|
+
// const MemoryCache = require('@outofsync/memory-cache');
|
|
7
7
|
/*
|
|
8
8
|
* @Description:
|
|
9
9
|
* @Usage:
|
|
10
10
|
* @Author: richen
|
|
11
11
|
* @Date: 2021-06-29 19:07:57
|
|
12
|
-
* @LastEditTime: 2021-
|
|
12
|
+
* @LastEditTime: 2021-12-02 15:30:12
|
|
13
13
|
*/
|
|
14
|
-
class MemoryStore {
|
|
14
|
+
class MemoryStore extends store_1.CacheStore {
|
|
15
15
|
/**
|
|
16
16
|
* Creates an instance of MemoryStore.
|
|
17
17
|
* @param {StoreOptions} options
|
|
18
18
|
* @memberof MemoryStore
|
|
19
19
|
*/
|
|
20
20
|
constructor(options) {
|
|
21
|
+
super(options);
|
|
21
22
|
this.options = options;
|
|
22
23
|
this.client = null;
|
|
23
24
|
}
|
|
@@ -29,7 +30,9 @@ class MemoryStore {
|
|
|
29
30
|
*/
|
|
30
31
|
getConnection() {
|
|
31
32
|
if (!this.pool) {
|
|
32
|
-
this.pool = new MemoryCache({
|
|
33
|
+
this.pool = new memory_cache_1.MemoryCache({
|
|
34
|
+
database: this.options.db
|
|
35
|
+
});
|
|
33
36
|
}
|
|
34
37
|
if (!this.client) {
|
|
35
38
|
this.client = this.pool.createClient();
|
|
@@ -65,16 +68,7 @@ class MemoryStore {
|
|
|
65
68
|
* @memberof MemoryStore
|
|
66
69
|
*/
|
|
67
70
|
async defineCommand(name, scripts) {
|
|
68
|
-
|
|
69
|
-
Object.defineProperty(client, name, {
|
|
70
|
-
value: async function () {
|
|
71
|
-
return scripts;
|
|
72
|
-
},
|
|
73
|
-
writable: false,
|
|
74
|
-
configurable: false,
|
|
75
|
-
enumerable: true,
|
|
76
|
-
});
|
|
77
|
-
return client;
|
|
71
|
+
throw new Error(memory_cache_1.messages.unsupported);
|
|
78
72
|
}
|
|
79
73
|
/**
|
|
80
74
|
* get and compare value
|
|
@@ -86,55 +80,17 @@ class MemoryStore {
|
|
|
86
80
|
*/
|
|
87
81
|
async getCompare(name, value) {
|
|
88
82
|
const client = this.getConnection();
|
|
89
|
-
const val = client.get(name);
|
|
83
|
+
const val = client.get(`${this.options.keyPrefix}${name}`);
|
|
90
84
|
if (!val) {
|
|
91
85
|
return 0;
|
|
92
86
|
}
|
|
93
87
|
else if (val == value) {
|
|
94
|
-
return client.del(name);
|
|
88
|
+
return client.del(`${this.options.keyPrefix}${name}`);
|
|
95
89
|
}
|
|
96
90
|
else {
|
|
97
91
|
return -1;
|
|
98
92
|
}
|
|
99
93
|
}
|
|
100
|
-
/**
|
|
101
|
-
* get
|
|
102
|
-
*
|
|
103
|
-
* @param {string} name
|
|
104
|
-
* @returns {*} {Promise<any>}
|
|
105
|
-
* @memberof MemoryStore
|
|
106
|
-
*/
|
|
107
|
-
get(name) {
|
|
108
|
-
const client = this.getConnection();
|
|
109
|
-
return client.getAsync(name);
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* set
|
|
113
|
-
*
|
|
114
|
-
* @param {string} name
|
|
115
|
-
* @param {(string | number)} value
|
|
116
|
-
* @param {number} [timeout]
|
|
117
|
-
* @returns {*} {Promise<any>}
|
|
118
|
-
* @memberof MemoryStore
|
|
119
|
-
*/
|
|
120
|
-
set(name, value, timeout) {
|
|
121
|
-
const client = this.getConnection();
|
|
122
|
-
if (helper.isTrueEmpty(timeout)) {
|
|
123
|
-
timeout = this.options.timeout;
|
|
124
|
-
}
|
|
125
|
-
return client.setAsync(name, value, "ex", timeout);
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* del
|
|
129
|
-
*
|
|
130
|
-
* @param {string} name
|
|
131
|
-
* @returns {*}
|
|
132
|
-
* @memberof MemoryStore
|
|
133
|
-
*/
|
|
134
|
-
del(name) {
|
|
135
|
-
const client = this.getConnection();
|
|
136
|
-
return client.delAsync(name);
|
|
137
|
-
}
|
|
138
94
|
}
|
|
139
95
|
exports.MemoryStore = MemoryStore;
|
|
140
96
|
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/store/memory.ts"],"names":[],"mappings":";;;AACA,oCAAsC;AAEtC,iDAAuD;AACvD,0DAA0D;AAE1D;;;;;;GAMG;AACH,MAAa,WAAY,SAAQ,kBAAU;IAKvC;;;;OAIG;IACH,YAAY,OAAqB;QAC7B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACvB,CAAC;IAED;;;;;OAKG;IACH,aAAa;QACT,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACZ,IAAI,CAAC,IAAI,GAAG,IAAI,0BAAW,CAAC;gBACxB,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;aAC5B,CAAC,CAAC;SACN;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC;SAChC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAK;QACP,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAA;QACjB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACvB,CAAC;IACD;;;;;;OAMG;IACH,KAAK,CAAC,OAAO,CAAC,IAAS;QACnB,OAAO;IACX,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,aAAa,CAAC,IAAY,EAAE,OAAY;QAC1C,MAAM,IAAI,KAAK,CAAC,uBAAQ,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,UAAU,CAAC,IAAY,EAAE,KAAsB;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,GAAG,EAAE;YACN,OAAO,CAAC,CAAC;SACZ;aAAM,IAAI,GAAG,IAAI,KAAK,EAAE;YACrB,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,EAAE,CAAC,CAAC;SACzD;aAAM;YACH,OAAO,CAAC,CAAC,CAAC;SACb;IACL,CAAC;CAGJ;AAzFD,kCAyFC"}
|