@comake/skl-js-engine 1.4.3 → 1.5.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/dist/SklEngine.d.ts +9 -0
- package/dist/SklEngine.d.ts.map +1 -1
- package/dist/SklEngine.js +122 -12
- package/dist/SklEngine.js.map +1 -1
- package/dist/SklEngineOptions.d.ts +32 -0
- package/dist/SklEngineOptions.d.ts.map +1 -1
- package/dist/SklEngineOptions.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/storage/FindOptionsTypes.d.ts +4 -1
- package/dist/storage/FindOptionsTypes.d.ts.map +1 -1
- package/dist/storage/FindOptionsTypes.js.map +1 -1
- package/dist/util/ReadCacheHelper.d.ts +14 -0
- package/dist/util/ReadCacheHelper.d.ts.map +1 -0
- package/dist/util/ReadCacheHelper.js +61 -0
- package/dist/util/ReadCacheHelper.js.map +1 -0
- package/package.json +1 -1
- package/src/SklEngine.ts +150 -13
- package/src/SklEngineOptions.ts +40 -0
- package/src/index.ts +1 -0
- package/src/storage/FindOptionsTypes.ts +4 -1
- package/src/util/ReadCacheHelper.ts +64 -0
package/dist/SklEngine.d.ts
CHANGED
|
@@ -25,11 +25,20 @@ export declare class SKLEngine implements SKLEngineInterface {
|
|
|
25
25
|
private readonly skdsEndpointUrl;
|
|
26
26
|
private readonly scriptPath;
|
|
27
27
|
private readonly logger;
|
|
28
|
+
private readonly readCache?;
|
|
29
|
+
private readonly readCachePolicy?;
|
|
30
|
+
private readonly readCacheNamespace?;
|
|
31
|
+
private readonly readCacheSingleflight;
|
|
28
32
|
constructor(options: SklEngineOptions);
|
|
29
33
|
setCodeExecutor(codeExecutor: ICodeExecutor): void;
|
|
30
34
|
executeRawQuery<T extends RawQueryResult>(query: string): Promise<T[]>;
|
|
31
35
|
executeRawUpdate(query: string): Promise<void>;
|
|
32
36
|
executeRawConstructQuery(query: string, frame?: Frame): Promise<GraphObject>;
|
|
37
|
+
private cloneForReadCache;
|
|
38
|
+
private stripBypassCacheFromFindOneOptions;
|
|
39
|
+
private stripBypassCacheFromFindAllOptions;
|
|
40
|
+
private stripBypassCacheFromWhere;
|
|
41
|
+
private runReadWithCache;
|
|
33
42
|
find(options?: FindOneOptions): Promise<Entity>;
|
|
34
43
|
findBy(where: FindOptionsWhere, notFoundErrorMessage?: string): Promise<Entity>;
|
|
35
44
|
findByIfExists(options: FindOptionsWhere): Promise<Entity | undefined>;
|
package/dist/SklEngine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SklEngine.d.ts","sourceRoot":"","sources":["../src/SklEngine.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAqB,WAAW,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAgBhD,OAAO,EAAE,WAAW,EAAyB,MAAM,qBAAqB,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"SklEngine.d.ts","sourceRoot":"","sources":["../src/SklEngine.ts"],"names":[],"mappings":"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"}
|
package/dist/SklEngine.js
CHANGED
|
@@ -25,16 +25,22 @@ const SequencePath_1 = require("./storage/operator/SequencePath");
|
|
|
25
25
|
const ZeroOrMorePath_1 = require("./storage/operator/ZeroOrMorePath");
|
|
26
26
|
const SparqlQueryAdapter_1 = require("./storage/query-adapter/sparql/SparqlQueryAdapter");
|
|
27
27
|
const PerformanceLogger_1 = require("./util/PerformanceLogger");
|
|
28
|
+
const ReadCacheHelper_1 = require("./util/ReadCacheHelper");
|
|
28
29
|
const Util_1 = require("./util/Util");
|
|
29
30
|
const Vocabularies_1 = require("./util/Vocabularies");
|
|
31
|
+
const DEFAULT_READ_CACHE_TTL_MS = 60000;
|
|
30
32
|
class SKLEngine {
|
|
31
33
|
constructor(options) {
|
|
34
|
+
this.readCacheSingleflight = new ReadCacheHelper_1.ReadCacheSingleflight();
|
|
32
35
|
this.queryAdapter = new SparqlQueryAdapter_1.SparqlQueryAdapter(options);
|
|
33
36
|
this.disableValidation = options.disableValidation;
|
|
34
37
|
this.globalCallbacks = options.callbacks;
|
|
35
38
|
this.inputFiles = options.inputFiles;
|
|
36
39
|
this.skdsEndpointUrl = options.endpointUrl;
|
|
37
40
|
this.scriptPath = options.scriptPath;
|
|
41
|
+
this.readCache = options.readCache;
|
|
42
|
+
this.readCachePolicy = options.readCachePolicy;
|
|
43
|
+
this.readCacheNamespace = options.readCacheNamespace;
|
|
38
44
|
if (options.functions) {
|
|
39
45
|
this.functions = Object.fromEntries(Object.entries(options.functions).map(([key, func]) => [
|
|
40
46
|
key,
|
|
@@ -64,19 +70,102 @@ class SKLEngine {
|
|
|
64
70
|
async executeRawConstructQuery(query, frame) {
|
|
65
71
|
return await this.queryAdapter.executeRawConstructQuery(query, frame);
|
|
66
72
|
}
|
|
73
|
+
cloneForReadCache(value) {
|
|
74
|
+
try {
|
|
75
|
+
return structuredClone(value);
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return value;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
stripBypassCacheFromFindOneOptions(options) {
|
|
82
|
+
if (!options) {
|
|
83
|
+
return options;
|
|
84
|
+
}
|
|
85
|
+
const { bypassCache, ...rest } = options;
|
|
86
|
+
return rest;
|
|
87
|
+
}
|
|
88
|
+
stripBypassCacheFromFindAllOptions(options) {
|
|
89
|
+
if (!options) {
|
|
90
|
+
return options;
|
|
91
|
+
}
|
|
92
|
+
const { bypassCache, ...rest } = options;
|
|
93
|
+
return rest;
|
|
94
|
+
}
|
|
95
|
+
stripBypassCacheFromWhere(where) {
|
|
96
|
+
if (!where) {
|
|
97
|
+
return where;
|
|
98
|
+
}
|
|
99
|
+
const { bypassCache, ...rest } = where;
|
|
100
|
+
return rest;
|
|
101
|
+
}
|
|
102
|
+
async runReadWithCache(params) {
|
|
103
|
+
if (params.bypassCache) {
|
|
104
|
+
return await params.execute();
|
|
105
|
+
}
|
|
106
|
+
if (!this.readCache || !this.readCachePolicy) {
|
|
107
|
+
return await params.execute();
|
|
108
|
+
}
|
|
109
|
+
const policyDecision = this.readCachePolicy({
|
|
110
|
+
operation: params.operation,
|
|
111
|
+
args: params.args,
|
|
112
|
+
endpointUrl: this.skdsEndpointUrl,
|
|
113
|
+
namespace: this.readCacheNamespace
|
|
114
|
+
});
|
|
115
|
+
if (!policyDecision.cache) {
|
|
116
|
+
return await params.execute();
|
|
117
|
+
}
|
|
118
|
+
const ttlMs = policyDecision.ttlMs ?? DEFAULT_READ_CACHE_TTL_MS;
|
|
119
|
+
if (ttlMs <= 0) {
|
|
120
|
+
return await params.execute();
|
|
121
|
+
}
|
|
122
|
+
const cacheKey = (0, ReadCacheHelper_1.buildReadCacheKey)({
|
|
123
|
+
operation: params.operation,
|
|
124
|
+
args: params.args,
|
|
125
|
+
endpointUrl: this.skdsEndpointUrl,
|
|
126
|
+
namespace: this.readCacheNamespace,
|
|
127
|
+
keyHint: policyDecision.keyHint
|
|
128
|
+
});
|
|
129
|
+
return await this.readCacheSingleflight.do(cacheKey, async () => {
|
|
130
|
+
try {
|
|
131
|
+
const cached = await this.readCache?.get(cacheKey);
|
|
132
|
+
if (cached !== undefined) {
|
|
133
|
+
return this.cloneForReadCache(cached);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
this.logger.debug('Read cache lookup failed; continuing without cache', error);
|
|
138
|
+
}
|
|
139
|
+
const result = await params.execute();
|
|
140
|
+
try {
|
|
141
|
+
await this.readCache?.set(cacheKey, this.cloneForReadCache(result), ttlMs);
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
this.logger.debug('Read cache write failed; continuing without cache', error);
|
|
145
|
+
}
|
|
146
|
+
return result;
|
|
147
|
+
});
|
|
148
|
+
}
|
|
67
149
|
async find(options) {
|
|
150
|
+
const bypassCache = options?.bypassCache;
|
|
151
|
+
const optionsWithoutBypass = this.stripBypassCacheFromFindOneOptions(options);
|
|
68
152
|
return PerformanceLogger_1.PerformanceLogger.withSpanRoot('SklEngine.find', async () => {
|
|
69
153
|
const context = {
|
|
70
154
|
entities: [],
|
|
71
155
|
operation: 'find',
|
|
72
|
-
operationParameters: { options },
|
|
156
|
+
operationParameters: { options: optionsWithoutBypass },
|
|
73
157
|
sklEngine: this
|
|
74
158
|
};
|
|
75
159
|
await globalHooks_1.globalHooks.execute(globalHooks_1.HookTypes.READ, globalHooks_1.HookStages.BEFORE, context);
|
|
76
160
|
try {
|
|
77
|
-
const entity = await this.
|
|
161
|
+
const entity = await this.runReadWithCache({
|
|
162
|
+
operation: 'find',
|
|
163
|
+
args: [optionsWithoutBypass],
|
|
164
|
+
bypassCache,
|
|
165
|
+
execute: async () => await this.queryAdapter.find(optionsWithoutBypass)
|
|
166
|
+
});
|
|
78
167
|
if (!entity) {
|
|
79
|
-
throw new Error(`No schema found with fields matching ${JSON.stringify(
|
|
168
|
+
throw new Error(`No schema found with fields matching ${JSON.stringify(optionsWithoutBypass)}`);
|
|
80
169
|
}
|
|
81
170
|
const updatedContext = { ...context, entities: [entity] };
|
|
82
171
|
const afterHookResult = await globalHooks_1.globalHooks.execute(globalHooks_1.HookTypes.READ, globalHooks_1.HookStages.AFTER, updatedContext, entity);
|
|
@@ -86,31 +175,38 @@ class SKLEngine {
|
|
|
86
175
|
await globalHooks_1.globalHooks.execute(globalHooks_1.HookTypes.READ, globalHooks_1.HookStages.ERROR, context, error);
|
|
87
176
|
throw error;
|
|
88
177
|
}
|
|
89
|
-
}, { options });
|
|
178
|
+
}, { options: optionsWithoutBypass });
|
|
90
179
|
}
|
|
91
180
|
async findBy(where, notFoundErrorMessage) {
|
|
181
|
+
const bypassCache = where?.bypassCache;
|
|
182
|
+
const whereWithoutBypass = this.stripBypassCacheFromWhere(where);
|
|
92
183
|
return PerformanceLogger_1.PerformanceLogger.withSpanRoot('SklEngine.findBy', async () => {
|
|
93
184
|
const context = {
|
|
94
185
|
entities: [],
|
|
95
186
|
operation: 'findBy',
|
|
96
|
-
operationParameters: { where },
|
|
187
|
+
operationParameters: { where: whereWithoutBypass },
|
|
97
188
|
sklEngine: this
|
|
98
189
|
};
|
|
99
190
|
await globalHooks_1.globalHooks.execute(globalHooks_1.HookTypes.READ, globalHooks_1.HookStages.BEFORE, context);
|
|
100
191
|
try {
|
|
101
|
-
const entity = await this.
|
|
192
|
+
const entity = await this.runReadWithCache({
|
|
193
|
+
operation: 'findBy',
|
|
194
|
+
args: [whereWithoutBypass, notFoundErrorMessage],
|
|
195
|
+
bypassCache,
|
|
196
|
+
execute: async () => await this.queryAdapter.findBy(whereWithoutBypass)
|
|
197
|
+
});
|
|
102
198
|
if (entity) {
|
|
103
199
|
const updatedContext = { ...context, entities: [entity] };
|
|
104
200
|
await globalHooks_1.globalHooks.execute(globalHooks_1.HookTypes.READ, globalHooks_1.HookStages.AFTER, updatedContext, entity);
|
|
105
201
|
return entity;
|
|
106
202
|
}
|
|
107
|
-
throw new Error(notFoundErrorMessage ?? `No schema found with fields matching ${JSON.stringify(
|
|
203
|
+
throw new Error(notFoundErrorMessage ?? `No schema found with fields matching ${JSON.stringify(whereWithoutBypass)}`);
|
|
108
204
|
}
|
|
109
205
|
catch (error) {
|
|
110
206
|
await globalHooks_1.globalHooks.execute(globalHooks_1.HookTypes.READ, globalHooks_1.HookStages.ERROR, context, error);
|
|
111
207
|
throw error;
|
|
112
208
|
}
|
|
113
|
-
}, { where });
|
|
209
|
+
}, { where: whereWithoutBypass });
|
|
114
210
|
}
|
|
115
211
|
async findByIfExists(options) {
|
|
116
212
|
try {
|
|
@@ -122,16 +218,23 @@ class SKLEngine {
|
|
|
122
218
|
}
|
|
123
219
|
}
|
|
124
220
|
async findAll(options) {
|
|
221
|
+
const bypassCache = options?.bypassCache;
|
|
222
|
+
const optionsWithoutBypass = this.stripBypassCacheFromFindAllOptions(options);
|
|
125
223
|
return PerformanceLogger_1.PerformanceLogger.withSpanRoot('SklEngine.findAll', async () => {
|
|
126
224
|
const context = {
|
|
127
225
|
entities: [],
|
|
128
226
|
operation: 'findAll',
|
|
129
|
-
operationParameters: { options },
|
|
227
|
+
operationParameters: { options: optionsWithoutBypass },
|
|
130
228
|
sklEngine: this
|
|
131
229
|
};
|
|
132
230
|
await globalHooks_1.globalHooks.execute(globalHooks_1.HookTypes.READ, globalHooks_1.HookStages.BEFORE, context);
|
|
133
231
|
try {
|
|
134
|
-
const entities = await this.
|
|
232
|
+
const entities = await this.runReadWithCache({
|
|
233
|
+
operation: 'findAll',
|
|
234
|
+
args: [optionsWithoutBypass],
|
|
235
|
+
bypassCache,
|
|
236
|
+
execute: async () => await this.queryAdapter.findAll(optionsWithoutBypass)
|
|
237
|
+
});
|
|
135
238
|
const updatedContext = { ...context, entities };
|
|
136
239
|
await globalHooks_1.globalHooks.execute(globalHooks_1.HookTypes.READ, globalHooks_1.HookStages.AFTER, updatedContext, entities);
|
|
137
240
|
return entities;
|
|
@@ -140,7 +243,7 @@ class SKLEngine {
|
|
|
140
243
|
await globalHooks_1.globalHooks.execute(globalHooks_1.HookTypes.READ, globalHooks_1.HookStages.ERROR, context, error);
|
|
141
244
|
throw error;
|
|
142
245
|
}
|
|
143
|
-
}, { options });
|
|
246
|
+
}, { options: optionsWithoutBypass });
|
|
144
247
|
}
|
|
145
248
|
async groupBy(options) {
|
|
146
249
|
return PerformanceLogger_1.PerformanceLogger.withSpanRoot('SklEngine.groupBy', async () => {
|
|
@@ -188,7 +291,14 @@ class SKLEngine {
|
|
|
188
291
|
return PerformanceLogger_1.PerformanceLogger.withSpanRoot('SklEngine.exists', async () => this.queryAdapter.exists(options), { options });
|
|
189
292
|
}
|
|
190
293
|
async count(options) {
|
|
191
|
-
|
|
294
|
+
const bypassCache = options?.bypassCache;
|
|
295
|
+
const optionsWithoutBypass = this.stripBypassCacheFromFindAllOptions(options);
|
|
296
|
+
return PerformanceLogger_1.PerformanceLogger.withSpanRoot('SklEngine.count', async () => await this.runReadWithCache({
|
|
297
|
+
operation: 'count',
|
|
298
|
+
args: [optionsWithoutBypass],
|
|
299
|
+
bypassCache,
|
|
300
|
+
execute: async () => await this.queryAdapter.count(optionsWithoutBypass)
|
|
301
|
+
}), { options: optionsWithoutBypass });
|
|
192
302
|
}
|
|
193
303
|
async save(entityOrEntities, options) {
|
|
194
304
|
return PerformanceLogger_1.PerformanceLogger.withSpanRoot('SklEngine.save', async () => {
|