@belopash/typeorm-store 1.1.2 → 1.2.0
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/cacheMap.d.ts +4 -9
- package/lib/cacheMap.d.ts.map +1 -1
- package/lib/cacheMap.js +48 -92
- package/lib/cacheMap.js.map +1 -1
- package/lib/deferQueue.d.ts.map +1 -1
- package/lib/deferQueue.js +2 -18
- package/lib/deferQueue.js.map +1 -1
- package/lib/store.d.ts +7 -3
- package/lib/store.d.ts.map +1 -1
- package/lib/store.js +128 -90
- package/lib/store.js.map +1 -1
- package/lib/test/lib/model.d.ts +25 -0
- package/lib/test/lib/model.d.ts.map +1 -0
- package/lib/test/lib/model.js +107 -0
- package/lib/test/lib/model.js.map +1 -0
- package/lib/test/store.test.d.ts +6 -0
- package/lib/test/store.test.d.ts.map +1 -0
- package/lib/test/store.test.js +162 -0
- package/lib/test/store.test.js.map +1 -0
- package/lib/test/util.d.ts +13 -0
- package/lib/test/util.d.ts.map +1 -0
- package/lib/test/util.js +57 -0
- package/lib/test/util.js.map +1 -0
- package/lib/utils.d.ts +3 -0
- package/lib/utils.d.ts.map +1 -1
- package/lib/utils.js +19 -1
- package/lib/utils.js.map +1 -1
- package/package.json +18 -4
- package/src/cacheMap.ts +52 -118
- package/src/deferQueue.ts +1 -25
- package/src/store.ts +141 -97
- package/src/utils.ts +28 -0
- package/.github/workflows/bump.yml +0 -30
- package/.github/workflows/publish.yml +0 -49
- package/tsconfig.json +0 -23
package/lib/cacheMap.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Entity } from '@subsquid/typeorm-store';
|
|
2
|
-
import { EntityManager, EntityTarget
|
|
2
|
+
import { EntityManager, EntityTarget } from 'typeorm';
|
|
3
3
|
import { Logger } from '@subsquid/logger';
|
|
4
4
|
export declare class CachedEntity<E extends Entity> {
|
|
5
5
|
value: E | null;
|
|
@@ -9,6 +9,7 @@ export declare class CacheMap {
|
|
|
9
9
|
private em;
|
|
10
10
|
private opts;
|
|
11
11
|
private map;
|
|
12
|
+
private logger;
|
|
12
13
|
constructor(em: () => EntityManager, opts: {
|
|
13
14
|
logger: Logger;
|
|
14
15
|
});
|
|
@@ -17,15 +18,9 @@ export declare class CacheMap {
|
|
|
17
18
|
ensure<E extends Entity>(entityClass: EntityTarget<E>, id: string): void;
|
|
18
19
|
delete<E extends Entity>(entityClass: EntityTarget<E>, id: string): void;
|
|
19
20
|
clear(): void;
|
|
20
|
-
add<E extends Entity>(e: E | E[],
|
|
21
|
-
mask?: FindOptionsRelations<E>;
|
|
22
|
-
isNew?: boolean;
|
|
23
|
-
}): void;
|
|
21
|
+
add<E extends Entity>(e: E | E[], isNew?: boolean): void;
|
|
24
22
|
private cacheEntity;
|
|
25
|
-
private cacheColumns;
|
|
26
|
-
private cacheRelatedEntities;
|
|
27
23
|
private getEntityCache;
|
|
28
|
-
private
|
|
29
|
-
private getLogger;
|
|
24
|
+
private getEntityMetadata;
|
|
30
25
|
}
|
|
31
26
|
//# sourceMappingURL=cacheMap.d.ts.map
|
package/lib/cacheMap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cacheMap.d.ts","sourceRoot":"","sources":["../src/cacheMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,yBAAyB,CAAA;AAC9C,OAAO,EAAC,aAAa,
|
|
1
|
+
{"version":3,"file":"cacheMap.d.ts","sourceRoot":"","sources":["../src/cacheMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,yBAAyB,CAAA;AAC9C,OAAO,EAAC,aAAa,EAAkB,YAAY,EAAC,MAAM,SAAS,CAAA;AAEnE,OAAO,EAAC,MAAM,EAAC,MAAM,kBAAkB,CAAA;AAEvC,qBAAa,YAAY,CAAC,CAAC,SAAS,MAAM;IACtC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;;CAKlB;AAED,qBAAa,QAAQ;IAIL,OAAO,CAAC,EAAE;IAAuB,OAAO,CAAC,IAAI;IAHzD,OAAO,CAAC,GAAG,CAAiE;IAC5E,OAAO,CAAC,MAAM,CAAQ;gBAEF,EAAE,EAAE,MAAM,aAAa,EAAU,IAAI,EAAE;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC;IAI3E,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM;IAOhE,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM;IAM9D,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM;IAUjE,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM;IAOjE,KAAK;IAUL,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,OAAO;IASjD,OAAO,CAAC,WAAW;IA+CnB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,iBAAiB;CAI5B"}
|
package/lib/cacheMap.js
CHANGED
|
@@ -1,18 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.CacheMap = exports.CachedEntity = void 0;
|
|
13
4
|
const utils_1 = require("./utils");
|
|
14
|
-
const logger_1 = require("@subsquid/logger");
|
|
15
|
-
const util_internal_1 = require("@subsquid/util-internal");
|
|
16
5
|
class CachedEntity {
|
|
17
6
|
constructor() {
|
|
18
7
|
this.value = null;
|
|
@@ -24,135 +13,102 @@ class CacheMap {
|
|
|
24
13
|
this.em = em;
|
|
25
14
|
this.opts = opts;
|
|
26
15
|
this.map = new Map();
|
|
16
|
+
this.logger = this.opts.logger.child('cache');
|
|
27
17
|
}
|
|
28
18
|
exist(entityClass, id) {
|
|
29
|
-
const
|
|
19
|
+
const metadata = this.getEntityMetadata(entityClass);
|
|
20
|
+
const cacheMap = this.getEntityCache(metadata);
|
|
30
21
|
const cachedEntity = cacheMap.get(id);
|
|
31
|
-
return cachedEntity?.value
|
|
22
|
+
return !!cachedEntity?.value;
|
|
32
23
|
}
|
|
33
24
|
get(entityClass, id) {
|
|
34
|
-
const
|
|
25
|
+
const metadata = this.getEntityMetadata(entityClass);
|
|
26
|
+
const cacheMap = this.getEntityCache(metadata);
|
|
35
27
|
return cacheMap.get(id);
|
|
36
28
|
}
|
|
37
29
|
ensure(entityClass, id) {
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
30
|
+
const metadata = this.getEntityMetadata(entityClass);
|
|
31
|
+
const cacheMap = this.getEntityCache(metadata);
|
|
32
|
+
if (cacheMap.has(id))
|
|
33
|
+
return;
|
|
34
|
+
cacheMap.set(id, new CachedEntity());
|
|
35
|
+
this.logger.debug(`added empty entity ${metadata.name} ${id}`);
|
|
44
36
|
}
|
|
45
37
|
delete(entityClass, id) {
|
|
46
|
-
const
|
|
38
|
+
const metadata = this.getEntityMetadata(entityClass);
|
|
39
|
+
const cacheMap = this.getEntityCache(metadata);
|
|
47
40
|
cacheMap.set(id, new CachedEntity());
|
|
48
|
-
|
|
49
|
-
this.getLogger().debug(`deleted entity ${name} ${id}`);
|
|
41
|
+
this.logger.debug(`deleted entity ${metadata.name} ${id}`);
|
|
50
42
|
}
|
|
51
43
|
clear() {
|
|
52
|
-
const log = this.getLogger();
|
|
53
44
|
for (const [name, item] of this.map) {
|
|
54
|
-
|
|
55
|
-
|
|
45
|
+
if (item.size > 0) {
|
|
46
|
+
item.clear();
|
|
47
|
+
this.logger.debug(`cleared cache for ${name} (${item.size})`);
|
|
48
|
+
}
|
|
56
49
|
}
|
|
57
50
|
this.map.clear();
|
|
58
51
|
}
|
|
59
|
-
add(e,
|
|
52
|
+
add(e, isNew) {
|
|
60
53
|
const entities = Array.isArray(e) ? e : [e];
|
|
61
54
|
if (entities.length === 0)
|
|
62
55
|
return;
|
|
63
56
|
for (const entity of entities) {
|
|
64
|
-
this.cacheEntity(entity,
|
|
57
|
+
this.cacheEntity(entity, isNew);
|
|
65
58
|
}
|
|
66
59
|
}
|
|
67
|
-
cacheEntity(entity,
|
|
68
|
-
const
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
if (cachedEntity == null) {
|
|
75
|
-
cachedEntity = new CachedEntity();
|
|
76
|
-
cacheMap.set(entityId, cachedEntity);
|
|
60
|
+
cacheEntity(entity, isNew = false) {
|
|
61
|
+
const metadata = this.getEntityMetadata(entity.constructor);
|
|
62
|
+
const cacheMap = this.getEntityCache(metadata);
|
|
63
|
+
let cached = cacheMap.get(entity.id);
|
|
64
|
+
if (cached == null) {
|
|
65
|
+
cached = new CachedEntity();
|
|
66
|
+
cacheMap.set(entity.id, cached);
|
|
77
67
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
68
|
+
let cachedEntity = cached.value;
|
|
69
|
+
if (cachedEntity == null) {
|
|
70
|
+
cachedEntity = cached.value = metadata.create();
|
|
71
|
+
cachedEntity.id = entity.id;
|
|
72
|
+
this.logger.debug(`added entity ${metadata.name} ${entity.id}`);
|
|
81
73
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
relations: metadata.relations,
|
|
85
|
-
sourceEntity: entity,
|
|
86
|
-
cachedEntity: cachedEntity.value,
|
|
87
|
-
mask,
|
|
88
|
-
isNew,
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
cacheColumns({ columns, sourceEntity, cachedEntity, }) {
|
|
92
|
-
for (const column of columns) {
|
|
93
|
-
const objectColumnValue = column.getEntityValue(sourceEntity);
|
|
74
|
+
for (const column of metadata.nonVirtualColumns) {
|
|
75
|
+
const objectColumnValue = column.getEntityValue(entity);
|
|
94
76
|
if (objectColumnValue !== undefined) {
|
|
95
77
|
column.setEntityValue(cachedEntity, (0, utils_1.copy)(objectColumnValue));
|
|
96
78
|
}
|
|
97
79
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
const invMetadata = relation.inverseEntityMetadata;
|
|
102
|
-
const invEntity = relation.getEntityValue(sourceEntity);
|
|
103
|
-
const invMask = mask[relation.propertyName];
|
|
104
|
-
if (invMask) {
|
|
105
|
-
if (relation.isOneToMany || relation.isManyToMany) {
|
|
106
|
-
if (!Array.isArray(invEntity))
|
|
107
|
-
continue;
|
|
108
|
-
for (const entity of invEntity) {
|
|
109
|
-
this.cacheEntity(entity, { mask: typeof invMask === 'boolean' ? {} : invMask });
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
else if (invEntity != null) {
|
|
113
|
-
this.cacheEntity(invEntity, { mask: typeof invMask === 'boolean' ? {} : invMask });
|
|
114
|
-
}
|
|
115
|
-
}
|
|
80
|
+
for (const relation of metadata.relations) {
|
|
81
|
+
const inverseEntity = relation.getEntityValue(entity);
|
|
82
|
+
const inverseMetadata = relation.inverseEntityMetadata;
|
|
116
83
|
if (relation.isOwning) {
|
|
117
|
-
if (
|
|
118
|
-
if (
|
|
84
|
+
if (inverseEntity == null) {
|
|
85
|
+
if (inverseEntity === null || isNew) {
|
|
119
86
|
relation.setEntityValue(cachedEntity, null);
|
|
120
87
|
}
|
|
121
88
|
}
|
|
122
89
|
else {
|
|
123
|
-
const relationCacheMap = this.getEntityCache(
|
|
124
|
-
const cachedRelation = relationCacheMap.get(
|
|
90
|
+
const relationCacheMap = this.getEntityCache(inverseMetadata);
|
|
91
|
+
const cachedRelation = relationCacheMap.get(inverseEntity.id)?.value;
|
|
125
92
|
if (cachedRelation == null) {
|
|
126
|
-
throw new Error(`Missing entity ${
|
|
93
|
+
throw new Error(`Missing entity ${inverseMetadata.name} with id ${inverseEntity.id}`);
|
|
127
94
|
}
|
|
128
95
|
relation.setEntityValue(cachedEntity, cachedRelation);
|
|
129
96
|
}
|
|
130
97
|
}
|
|
131
98
|
}
|
|
132
99
|
}
|
|
133
|
-
getEntityCache(
|
|
134
|
-
|
|
135
|
-
let map = this.map.get(name);
|
|
100
|
+
getEntityCache(metadata) {
|
|
101
|
+
let map = this.map.get(metadata);
|
|
136
102
|
if (map == null) {
|
|
137
103
|
map = new Map();
|
|
138
|
-
this.map.set(
|
|
104
|
+
this.map.set(metadata, map);
|
|
139
105
|
}
|
|
140
106
|
return map;
|
|
141
107
|
}
|
|
142
|
-
|
|
108
|
+
getEntityMetadata(entityClass) {
|
|
143
109
|
const em = this.em();
|
|
144
|
-
|
|
145
|
-
return metadata.name;
|
|
146
|
-
}
|
|
147
|
-
getLogger() {
|
|
148
|
-
return this.opts.logger.child('cache');
|
|
110
|
+
return em.connection.getMetadata(entityClass);
|
|
149
111
|
}
|
|
150
112
|
}
|
|
151
113
|
exports.CacheMap = CacheMap;
|
|
152
|
-
__decorate([
|
|
153
|
-
util_internal_1.def,
|
|
154
|
-
__metadata("design:type", Function),
|
|
155
|
-
__metadata("design:paramtypes", []),
|
|
156
|
-
__metadata("design:returntype", logger_1.Logger)
|
|
157
|
-
], CacheMap.prototype, "getLogger", null);
|
|
158
114
|
//# sourceMappingURL=cacheMap.js.map
|
package/lib/cacheMap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cacheMap.js","sourceRoot":"","sources":["../src/cacheMap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cacheMap.js","sourceRoot":"","sources":["../src/cacheMap.ts"],"names":[],"mappings":"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"}
|
package/lib/deferQueue.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deferQueue.d.ts","sourceRoot":"","sources":["../src/deferQueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,yBAAyB,CAAA;AAC9C,OAAO,EAAC,aAAa,EAAE,YAAY,EAAE,oBAAoB,EAAC,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"deferQueue.d.ts","sourceRoot":"","sources":["../src/deferQueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,yBAAyB,CAAA;AAC9C,OAAO,EAAC,aAAa,EAAE,YAAY,EAAE,oBAAoB,EAAC,MAAM,SAAS,CAAA;AAGzE,MAAM,MAAM,SAAS,GAAG;IACpB,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAChB,SAAS,EAAE,oBAAoB,CAAC,GAAG,CAAC,CAAA;CACvC,CAAA;AAED,qBAAa,UAAU;IAGP,OAAO,CAAC,EAAE;IAFtB,OAAO,CAAC,QAAQ,CAA+C;gBAE3C,EAAE,EAAE,MAAM,aAAa;IAE3C,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC;IASnG,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC,GAAG,CAAC;IAatC,MAAM;;;;IAIN,KAAK;CAGR"}
|
package/lib/deferQueue.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DeferQueue = void 0;
|
|
4
|
+
const utils_1 = require("./utils");
|
|
4
5
|
class DeferQueue {
|
|
5
6
|
constructor(em) {
|
|
6
7
|
this.em = em;
|
|
@@ -10,7 +11,7 @@ class DeferQueue {
|
|
|
10
11
|
const data = this.getData(entityClass);
|
|
11
12
|
data.ids.add(id);
|
|
12
13
|
if (relations != null) {
|
|
13
|
-
data.relations = mergeRelataions(data.relations, relations);
|
|
14
|
+
data.relations = (0, utils_1.mergeRelataions)(data.relations, relations);
|
|
14
15
|
}
|
|
15
16
|
}
|
|
16
17
|
getData(entityClass) {
|
|
@@ -31,21 +32,4 @@ class DeferQueue {
|
|
|
31
32
|
}
|
|
32
33
|
}
|
|
33
34
|
exports.DeferQueue = DeferQueue;
|
|
34
|
-
function mergeRelataions(a, b) {
|
|
35
|
-
const mergedObject = {};
|
|
36
|
-
for (const key in a) {
|
|
37
|
-
mergedObject[key] = a[key];
|
|
38
|
-
}
|
|
39
|
-
for (const key in b) {
|
|
40
|
-
const bValue = b[key];
|
|
41
|
-
const value = mergedObject[key];
|
|
42
|
-
if (typeof bValue === 'object') {
|
|
43
|
-
mergedObject[key] = (typeof value === 'object' ? mergeRelataions(value, bValue) : bValue);
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
mergedObject[key] = value || bValue;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return mergedObject;
|
|
50
|
-
}
|
|
51
35
|
//# sourceMappingURL=deferQueue.js.map
|
package/lib/deferQueue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deferQueue.js","sourceRoot":"","sources":["../src/deferQueue.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"deferQueue.js","sourceRoot":"","sources":["../src/deferQueue.ts"],"names":[],"mappings":";;;AAEA,mCAAuC;AAOvC,MAAa,UAAU;IAGnB,YAAoB,EAAuB;QAAvB,OAAE,GAAF,EAAE,CAAqB;QAFnC,aAAQ,GAAsC,IAAI,GAAG,EAAE,CAAA;IAEjB,CAAC;IAE/C,GAAG,CAAmB,WAA4B,EAAE,EAAU,EAAE,SAAmC;QAC/F,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QACtC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAEhB,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,GAAG,IAAA,uBAAe,EAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAC/D,CAAC;IACL,CAAC;IAED,OAAO,CAAC,WAA8B;QAClC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAA;QACpB,MAAM,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;QAEvD,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC7C,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACf,IAAI,GAAG,EAAC,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,SAAS,EAAE,EAAE,EAAC,CAAA;YACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAC5C,CAAC;QAED,OAAO,IAAI,CAAA;IACf,CAAC;IAED,MAAM;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC,CAAA;IACjF,CAAC;IAED,KAAK;QACD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;IACzB,CAAC;CACJ;AAlCD,gCAkCC"}
|
package/lib/store.d.ts
CHANGED
|
@@ -47,17 +47,21 @@ export declare class StoreWithCache extends Store {
|
|
|
47
47
|
* @deprecated use {@link getOrInsert} instead
|
|
48
48
|
*/
|
|
49
49
|
getOrCreate<E extends Entity>(entityClass: EntityTarget<E>, idOrOptions: string | GetOptions<E>, create: (id: string) => E | Promise<E>): Promise<E>;
|
|
50
|
-
private getCached;
|
|
51
50
|
defer<E extends Entity>(entityClass: EntityTarget<E>, id: string): DeferredEntity<E>;
|
|
52
51
|
defer<E extends Entity>(entityClass: EntityTarget<E>, options: GetOptions<E>): DeferredEntity<E>;
|
|
53
52
|
commit(): Promise<void>;
|
|
54
|
-
|
|
55
|
-
private extractExtraUpsert;
|
|
53
|
+
clear(): void;
|
|
56
54
|
flush(): Promise<void>;
|
|
55
|
+
private getChangeSet;
|
|
57
56
|
private load;
|
|
57
|
+
private getCached;
|
|
58
|
+
private getExtraUpsert;
|
|
58
59
|
private getCommitOrder;
|
|
59
60
|
private commitOrderIndexes;
|
|
60
61
|
private getCommitOrderIndex;
|
|
62
|
+
private cloneEntity;
|
|
63
|
+
private traverseEntity;
|
|
64
|
+
private getEntityMetadata;
|
|
61
65
|
private saveMany;
|
|
62
66
|
private getFkSignature;
|
|
63
67
|
private upsertMany;
|
package/lib/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,IAAI,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,EAAC,MAAM,yBAAyB,CAAA;AACtH,OAAO,EAAC,aAAa,EAAC,MAAM,iCAAiC,CAAA;AAG7D,OAAO,EAAC,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,oBAAoB,EAAE,gBAAgB,EAAK,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|