@sentio/sdk 2.40.0-rc.19 → 2.40.0-rc.20
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/lib/store/cache.d.ts +14 -0
- package/lib/store/cache.d.ts.map +1 -0
- package/lib/store/cache.js +35 -0
- package/lib/store/cache.js.map +1 -0
- package/lib/store/store.d.ts +2 -3
- package/lib/store/store.d.ts.map +1 -1
- package/lib/store/store.js +34 -8
- package/lib/store/store.js.map +1 -1
- package/package.json +3 -3
- package/src/store/cache.ts +46 -0
- package/src/store/store.ts +62 -34
@@ -0,0 +1,14 @@
|
|
1
|
+
import { ID } from './types.js';
|
2
|
+
import type { Entity as EntityStruct } from '@sentio/protos';
|
3
|
+
export interface Entity {
|
4
|
+
id: ID;
|
5
|
+
}
|
6
|
+
export declare class LocalCache {
|
7
|
+
private cache;
|
8
|
+
getKey(entity: string, id: ID): string;
|
9
|
+
has(entity: string, id: ID): boolean;
|
10
|
+
get(entity: string, id: ID): EntityStruct | undefined;
|
11
|
+
set(entity: EntityStruct): void;
|
12
|
+
delete(entityName: string, id: string | undefined): void;
|
13
|
+
}
|
14
|
+
//# sourceMappingURL=cache.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/store/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,YAAY,CAAA;AAC/B,OAAO,KAAK,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE5D,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,EAAE,CAAA;CACP;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAuC;IAEpD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE;IAI7B,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO;IAIpC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,YAAY,GAAG,SAAS;IAIrD,GAAG,CAAC,MAAM,EAAE,YAAY;IAkBxB,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,SAAS;CAKlD"}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
export class LocalCache {
|
2
|
+
cache = new Map();
|
3
|
+
getKey(entity, id) {
|
4
|
+
return `${entity}-${id}`;
|
5
|
+
}
|
6
|
+
has(entity, id) {
|
7
|
+
return this.cache.has(this.getKey(entity, id));
|
8
|
+
}
|
9
|
+
get(entity, id) {
|
10
|
+
return this.cache.get(this.getKey(entity, id));
|
11
|
+
}
|
12
|
+
set(entity) {
|
13
|
+
const id = entity.data?.fields['id'].stringValue;
|
14
|
+
if (id) {
|
15
|
+
const key = this.getKey(entity.entity, id);
|
16
|
+
let fields = entity.data?.fields || {};
|
17
|
+
if (this.cache.has(key)) {
|
18
|
+
const existFields = this.cache.get(key)?.data?.fields || {};
|
19
|
+
fields = Object.assign(existFields, fields);
|
20
|
+
}
|
21
|
+
this.cache.set(key, {
|
22
|
+
...entity,
|
23
|
+
data: {
|
24
|
+
fields
|
25
|
+
}
|
26
|
+
});
|
27
|
+
}
|
28
|
+
}
|
29
|
+
delete(entityName, id) {
|
30
|
+
if (id) {
|
31
|
+
this.cache.delete(this.getKey(entityName, id));
|
32
|
+
}
|
33
|
+
}
|
34
|
+
}
|
35
|
+
//# sourceMappingURL=cache.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/store/cache.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,UAAU;IACb,KAAK,GAA8B,IAAI,GAAG,EAAE,CAAA;IAEpD,MAAM,CAAC,MAAc,EAAE,EAAM;QAC3B,OAAO,GAAG,MAAM,IAAI,EAAE,EAAE,CAAA;IAC1B,CAAC;IAED,GAAG,CAAC,MAAc,EAAE,EAAM;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAA;IAChD,CAAC;IAED,GAAG,CAAC,MAAc,EAAE,EAAM;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAA;IAChD,CAAC;IAED,GAAG,CAAC,MAAoB;QACtB,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,CAAA;QAChD,IAAI,EAAE,EAAE,CAAC;YACP,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;YAC1C,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAA;YACtC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE,CAAA;gBAC3D,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;YAC7C,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;gBAClB,GAAG,MAAM;gBACT,IAAI,EAAE;oBACJ,MAAM;iBACP;aACF,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,MAAM,CAAC,UAAkB,EAAE,EAAsB;QAC/C,IAAI,EAAE,EAAE,CAAC;YACP,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAA;QAChD,CAAC;IACH,CAAC;CACF"}
|
package/lib/store/store.d.ts
CHANGED
@@ -2,14 +2,13 @@ import { StoreContext } from './context.js';
|
|
2
2
|
import { BigDecimal } from '@sentio/bigdecimal';
|
3
3
|
import { Bytes, Float, ID, Int, Timestamp } from './types.js';
|
4
4
|
import { Cursor } from './cursor.js';
|
5
|
-
|
6
|
-
id: ID;
|
7
|
-
}
|
5
|
+
import { Entity } from './cache.js';
|
8
6
|
export interface EntityClass<T> {
|
9
7
|
new (data: Partial<T>): T;
|
10
8
|
}
|
11
9
|
export declare class Store {
|
12
10
|
private readonly context;
|
11
|
+
private cache;
|
13
12
|
constructor(context: StoreContext);
|
14
13
|
get<T extends Entity>(entity: EntityClass<T> | string, id: ID): Promise<T | undefined>;
|
15
14
|
delete<T extends Entity>(entity: EntityClass<T> | T | T[], id?: string | string[]): Promise<void>;
|
package/lib/store/store.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAK7D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"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"}
|
package/lib/store/store.js
CHANGED
@@ -3,9 +3,10 @@ import { BigDecimal } from '@sentio/bigdecimal';
|
|
3
3
|
import { DBRequest_DBOperator } from '@sentio/protos';
|
4
4
|
import { toBigInteger } from './convert.js';
|
5
5
|
import { PluginManager } from '@sentio/runtime';
|
6
|
+
import { LocalCache } from './cache.js';
|
6
7
|
function getEntityName(entity) {
|
7
8
|
if (entity == null) {
|
8
|
-
throw new Error(
|
9
|
+
throw new Error('can\'t figure out entityName from undefined');
|
9
10
|
}
|
10
11
|
if (typeof entity == 'string') {
|
11
12
|
return entity;
|
@@ -20,13 +21,19 @@ function getEntityName(entity) {
|
|
20
21
|
}
|
21
22
|
export class Store {
|
22
23
|
context;
|
24
|
+
cache = new LocalCache();
|
23
25
|
constructor(context) {
|
24
26
|
this.context = context;
|
25
27
|
}
|
26
28
|
async get(entity, id) {
|
29
|
+
const entityName = getEntityName(entity);
|
30
|
+
const cachedData = this.cache.get(entityName, id);
|
31
|
+
if (cachedData) {
|
32
|
+
return Promise.resolve(this.newEntity(entity, cachedData));
|
33
|
+
}
|
27
34
|
const promise = this.context.sendRequest({
|
28
35
|
get: {
|
29
|
-
entity:
|
36
|
+
entity: entityName,
|
30
37
|
id: id.toString()
|
31
38
|
}
|
32
39
|
});
|
@@ -42,23 +49,27 @@ export class Store {
|
|
42
49
|
entity: [],
|
43
50
|
id: []
|
44
51
|
};
|
52
|
+
const entityName = getEntityName(entity);
|
45
53
|
if (id) {
|
46
54
|
if (Array.isArray(id)) {
|
47
55
|
for (const i of id) {
|
48
|
-
request.entity.push(
|
56
|
+
request.entity.push(entityName);
|
49
57
|
request.id.push(i.toString());
|
58
|
+
this.cache.delete(entityName, i.toString());
|
50
59
|
}
|
51
60
|
}
|
52
61
|
else {
|
53
|
-
request.entity.push(
|
62
|
+
request.entity.push(entityName);
|
54
63
|
request.id.push(id);
|
64
|
+
this.cache.delete(entityName, id);
|
55
65
|
}
|
56
66
|
}
|
57
67
|
else {
|
58
68
|
const entities = Array.isArray(entity) ? entity : [entity];
|
59
69
|
for (const e of entities) {
|
60
|
-
request.entity.push(
|
70
|
+
request.entity.push(entityName);
|
61
71
|
request.id.push(e.id.toString());
|
72
|
+
this.cache.delete(entityName, id);
|
62
73
|
}
|
63
74
|
}
|
64
75
|
await this.context.sendRequest({
|
@@ -67,15 +78,26 @@ export class Store {
|
|
67
78
|
}
|
68
79
|
async upsert(entity) {
|
69
80
|
const entities = Array.isArray(entity) ? entity : [entity];
|
70
|
-
const
|
81
|
+
const request = {
|
71
82
|
upsert: {
|
72
83
|
entity: entities.map((e) => getEntityName(e)),
|
73
84
|
// data: entities.map((e) => serialize(e.data)),
|
74
85
|
id: entities.map((e) => e.id.toString()),
|
75
86
|
entityData: entities.map((e) => e._data)
|
76
87
|
}
|
88
|
+
};
|
89
|
+
const promise = this.context.sendRequest(request);
|
90
|
+
return promise.then((_data) => {
|
91
|
+
request.upsert?.entity.forEach((entity, i) => {
|
92
|
+
this.cache.set({
|
93
|
+
entity: entity,
|
94
|
+
data: request.upsert?.entityData[i],
|
95
|
+
genBlockChain: "",
|
96
|
+
genBlockTime: undefined,
|
97
|
+
genBlockNumber: 0n
|
98
|
+
});
|
99
|
+
});
|
77
100
|
});
|
78
|
-
await promise;
|
79
101
|
}
|
80
102
|
async *listIterator(entity, filters) {
|
81
103
|
let cursor = undefined;
|
@@ -104,7 +126,7 @@ export class Store {
|
|
104
126
|
}
|
105
127
|
}
|
106
128
|
async listRequest(entity, filters, cursor, pageSize) {
|
107
|
-
|
129
|
+
const response = (await this.context.sendRequest({
|
108
130
|
list: {
|
109
131
|
entity: getEntityName(entity),
|
110
132
|
cursor,
|
@@ -116,6 +138,10 @@ export class Store {
|
|
116
138
|
})) || []
|
117
139
|
}
|
118
140
|
}, 60));
|
141
|
+
response.entityList?.entities?.forEach((entity) => {
|
142
|
+
this.cache.set(entity);
|
143
|
+
});
|
144
|
+
return response;
|
119
145
|
}
|
120
146
|
async list(entity, filters, cursor) {
|
121
147
|
if (cursor) {
|
package/lib/store/store.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAG/C,OAAO,EAAE,oBAAoB,EAAc,MAAM,gBAAgB,CAAA;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@sentio/sdk",
|
3
|
-
"version": "2.40.0-rc.
|
3
|
+
"version": "2.40.0-rc.20",
|
4
4
|
"license": "Apache-2.0",
|
5
5
|
"type": "module",
|
6
6
|
"exports": {
|
@@ -82,8 +82,8 @@
|
|
82
82
|
"typechain": "^8.3.2",
|
83
83
|
"utility-types": "^3.11.0",
|
84
84
|
"yaml": "^2.3.4",
|
85
|
-
"@sentio/protos": "2.40.0-rc.
|
86
|
-
"@sentio/runtime": "^2.40.0-rc.
|
85
|
+
"@sentio/protos": "2.40.0-rc.20",
|
86
|
+
"@sentio/runtime": "^2.40.0-rc.20"
|
87
87
|
},
|
88
88
|
"peerDependencies": {
|
89
89
|
"tsup": "npm:@sentio/tsup@^6.7.2"
|
@@ -0,0 +1,46 @@
|
|
1
|
+
import { ID } from './types.js'
|
2
|
+
import type { Entity as EntityStruct } from '@sentio/protos'
|
3
|
+
|
4
|
+
export interface Entity {
|
5
|
+
id: ID
|
6
|
+
}
|
7
|
+
|
8
|
+
export class LocalCache {
|
9
|
+
private cache: Map<string, EntityStruct> = new Map()
|
10
|
+
|
11
|
+
getKey(entity: string, id: ID) {
|
12
|
+
return `${entity}-${id}`
|
13
|
+
}
|
14
|
+
|
15
|
+
has(entity: string, id: ID): boolean {
|
16
|
+
return this.cache.has(this.getKey(entity, id))
|
17
|
+
}
|
18
|
+
|
19
|
+
get(entity: string, id: ID): EntityStruct | undefined {
|
20
|
+
return this.cache.get(this.getKey(entity, id))
|
21
|
+
}
|
22
|
+
|
23
|
+
set(entity: EntityStruct) {
|
24
|
+
const id = entity.data?.fields['id'].stringValue
|
25
|
+
if (id) {
|
26
|
+
const key = this.getKey(entity.entity, id)
|
27
|
+
let fields = entity.data?.fields || {}
|
28
|
+
if (this.cache.has(key)) {
|
29
|
+
const existFields = this.cache.get(key)?.data?.fields || {}
|
30
|
+
fields = Object.assign(existFields, fields)
|
31
|
+
}
|
32
|
+
this.cache.set(key, {
|
33
|
+
...entity,
|
34
|
+
data: {
|
35
|
+
fields
|
36
|
+
}
|
37
|
+
})
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
delete(entityName: string, id: string | undefined) {
|
42
|
+
if (id) {
|
43
|
+
this.cache.delete(this.getKey(entityName, id))
|
44
|
+
}
|
45
|
+
}
|
46
|
+
}
|
package/src/store/store.ts
CHANGED
@@ -2,25 +2,21 @@ import { StoreContext } from './context.js'
|
|
2
2
|
import { DatabaseSchema } from '../core/index.js'
|
3
3
|
import { BigDecimal } from '@sentio/bigdecimal'
|
4
4
|
import { Bytes, Float, ID, Int, Timestamp } from './types.js'
|
5
|
-
import type { Entity as EntityStruct, RichValue } from '@sentio/protos'
|
5
|
+
import type { DBRequest, Entity as EntityStruct, RichValue } from '@sentio/protos'
|
6
6
|
import { DBRequest_DBOperator, DBResponse } from '@sentio/protos'
|
7
7
|
import { toBigInteger } from './convert.js'
|
8
8
|
import { PluginManager } from '@sentio/runtime'
|
9
9
|
import { Cursor } from './cursor.js'
|
10
|
+
import { Entity, LocalCache } from './cache.js'
|
10
11
|
|
11
|
-
type Value = ID | string | Int | Float | boolean | Timestamp | Bytes | BigDecimal | bigint
|
12
|
-
|
13
|
-
interface Entity {
|
14
|
-
id: ID
|
15
|
-
}
|
16
12
|
|
17
13
|
export interface EntityClass<T> {
|
18
|
-
new
|
14
|
+
new(data: Partial<T>): T
|
19
15
|
}
|
20
16
|
|
21
17
|
function getEntityName<T>(entity: EntityClass<T> | T | string): string {
|
22
18
|
if (entity == null) {
|
23
|
-
throw new Error(
|
19
|
+
throw new Error('can\'t figure out entityName from undefined')
|
24
20
|
}
|
25
21
|
if (typeof entity == 'string') {
|
26
22
|
return entity
|
@@ -35,16 +31,27 @@ function getEntityName<T>(entity: EntityClass<T> | T | string): string {
|
|
35
31
|
}
|
36
32
|
|
37
33
|
export class Store {
|
38
|
-
|
34
|
+
|
35
|
+
private cache = new LocalCache()
|
36
|
+
|
37
|
+
constructor(private readonly context: StoreContext) {
|
38
|
+
}
|
39
39
|
|
40
40
|
async get<T extends Entity>(entity: EntityClass<T> | string, id: ID): Promise<T | undefined> {
|
41
|
+
const entityName = getEntityName(entity)
|
42
|
+
const cachedData = this.cache.get(entityName, id)
|
43
|
+
if (cachedData) {
|
44
|
+
return Promise.resolve(this.newEntity(entity, cachedData))
|
45
|
+
}
|
46
|
+
|
41
47
|
const promise = this.context.sendRequest({
|
42
48
|
get: {
|
43
|
-
entity:
|
49
|
+
entity: entityName,
|
44
50
|
id: id.toString()
|
45
51
|
}
|
46
52
|
})
|
47
53
|
|
54
|
+
|
48
55
|
const data = (await promise) as DBResponse
|
49
56
|
if (data.entityList?.entities[0]) {
|
50
57
|
const entityData = data.entityList?.entities[0]
|
@@ -59,21 +66,25 @@ export class Store {
|
|
59
66
|
entity: [] as string[],
|
60
67
|
id: [] as string[]
|
61
68
|
}
|
69
|
+
const entityName = getEntityName(entity)
|
62
70
|
if (id) {
|
63
71
|
if (Array.isArray(id)) {
|
64
72
|
for (const i of id) {
|
65
|
-
request.entity.push(
|
73
|
+
request.entity.push(entityName)
|
66
74
|
request.id.push(i.toString())
|
75
|
+
this.cache.delete(entityName, i.toString())
|
67
76
|
}
|
68
77
|
} else {
|
69
|
-
request.entity.push(
|
78
|
+
request.entity.push(entityName)
|
70
79
|
request.id.push(id)
|
80
|
+
this.cache.delete(entityName, id)
|
71
81
|
}
|
72
82
|
} else {
|
73
83
|
const entities = Array.isArray(entity) ? entity : [entity]
|
74
84
|
for (const e of entities) {
|
75
|
-
request.entity.push(
|
85
|
+
request.entity.push(entityName)
|
76
86
|
request.id.push((e as Entity).id.toString())
|
87
|
+
this.cache.delete(entityName, id)
|
77
88
|
}
|
78
89
|
}
|
79
90
|
|
@@ -84,19 +95,30 @@ export class Store {
|
|
84
95
|
|
85
96
|
async upsert<T extends Entity>(entity: T | T[]): Promise<void> {
|
86
97
|
const entities = Array.isArray(entity) ? entity : [entity]
|
87
|
-
const
|
98
|
+
const request = {
|
88
99
|
upsert: {
|
89
100
|
entity: entities.map((e) => getEntityName(e)),
|
90
101
|
// data: entities.map((e) => serialize(e.data)),
|
91
102
|
id: entities.map((e) => e.id.toString()),
|
92
103
|
entityData: entities.map((e: any) => e._data)
|
93
104
|
}
|
105
|
+
} as DBRequest
|
106
|
+
const promise = this.context.sendRequest(request)
|
107
|
+
|
108
|
+
return promise.then((_data) => {
|
109
|
+
request.upsert?.entity.forEach((entity, i) => {
|
110
|
+
this.cache.set({
|
111
|
+
entity: entity,
|
112
|
+
data: request.upsert?.entityData[i],
|
113
|
+
genBlockChain: "",
|
114
|
+
genBlockTime: undefined,
|
115
|
+
genBlockNumber: 0n
|
116
|
+
})
|
117
|
+
})
|
94
118
|
})
|
95
|
-
|
96
|
-
await promise
|
97
119
|
}
|
98
120
|
|
99
|
-
async
|
121
|
+
async* listIterator<T extends Entity, P extends keyof T, O extends Operators<T[P]>>(
|
100
122
|
entity: EntityClass<T>,
|
101
123
|
filters: ListFilter<T, P, O>[]
|
102
124
|
) {
|
@@ -120,7 +142,7 @@ export class Store {
|
|
120
142
|
}
|
121
143
|
}
|
122
144
|
|
123
|
-
async
|
145
|
+
async* listBatched<T extends Entity, P extends keyof T, O extends Operators<T[P]>>(
|
124
146
|
entity: EntityClass<T>,
|
125
147
|
filters: ListFilter<T, P, O>[],
|
126
148
|
batchSize = 100
|
@@ -144,7 +166,7 @@ export class Store {
|
|
144
166
|
cursor: string | undefined,
|
145
167
|
pageSize?: number
|
146
168
|
): Promise<DBResponse> {
|
147
|
-
|
169
|
+
const response = (await this.context.sendRequest(
|
148
170
|
{
|
149
171
|
list: {
|
150
172
|
entity: getEntityName(entity),
|
@@ -160,6 +182,12 @@ export class Store {
|
|
160
182
|
},
|
161
183
|
60
|
162
184
|
)) as DBResponse
|
185
|
+
|
186
|
+
response.entityList?.entities?.forEach((entity) => {
|
187
|
+
this.cache.set(entity)
|
188
|
+
})
|
189
|
+
|
190
|
+
return response
|
163
191
|
}
|
164
192
|
|
165
193
|
async list<T extends Entity, P extends keyof T, O extends Operators<T[P]>>(
|
@@ -233,22 +261,22 @@ type CompatibleValue<T, O extends Operators<T>> = O extends ArrayOperators
|
|
233
261
|
? U[]
|
234
262
|
: T[]
|
235
263
|
:
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
264
|
+
| (T extends bigint
|
265
|
+
? bigint
|
266
|
+
: T extends Int
|
267
|
+
? number
|
268
|
+
: T extends Float
|
269
|
+
? number
|
270
|
+
: T extends Bytes
|
271
|
+
? Bytes | string
|
272
|
+
: T extends ID
|
273
|
+
? ID | string
|
274
|
+
: T extends BigDecimal
|
275
|
+
? BigDecimal | number
|
276
|
+
: T extends Int
|
241
277
|
? number
|
242
|
-
: T
|
243
|
-
|
244
|
-
: T extends ID
|
245
|
-
? ID | string
|
246
|
-
: T extends BigDecimal
|
247
|
-
? BigDecimal | number
|
248
|
-
: T extends Int
|
249
|
-
? number
|
250
|
-
: T)
|
251
|
-
| Nullable<O>
|
278
|
+
: T)
|
279
|
+
| Nullable<O>
|
252
280
|
|
253
281
|
type Nullable<O> = O extends '=' | '!=' ? null : never
|
254
282
|
|