@squidcloud/local-backend 1.0.450 → 1.0.452
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/backend/src/actions.js +264 -0
- package/dist/backend/src/actions.js.map +1 -0
- package/dist/backend/src/index.js +24 -0
- package/dist/backend/src/index.js.map +1 -0
- package/dist/backend/src/llm-service.js +8 -0
- package/dist/backend/src/llm-service.js.map +1 -0
- package/dist/backend/src/metadata.js +336 -0
- package/dist/backend/src/metadata.js.map +1 -0
- package/dist/backend/src/project.js +31 -0
- package/dist/backend/src/project.js.map +1 -0
- package/dist/backend/src/public-types.js +32 -0
- package/dist/backend/src/public-types.js.map +1 -0
- package/dist/backend/src/squid.service.js +194 -0
- package/dist/backend/src/squid.service.js.map +1 -0
- package/dist/backend/src/utils.js +13 -0
- package/dist/backend/src/utils.js.map +1 -0
- package/dist/internal-common/src/ai/ai-model.registry.js +564 -0
- package/dist/internal-common/src/ai/ai-model.registry.js.map +1 -0
- package/dist/internal-common/src/public-types/ai-agent.public-types.js.map +1 -1
- package/dist/internal-common/src/public-types/ai-common.public-types.js +1 -1
- package/dist/internal-common/src/public-types/ai-common.public-types.js.map +1 -1
- package/dist/internal-common/src/public-types/ai-matchmaking.public-types.js +3 -0
- package/dist/internal-common/src/public-types/ai-matchmaking.public-types.js.map +1 -0
- package/dist/internal-common/src/public-types/external-auth/external-auth.public-types.js +3 -0
- package/dist/internal-common/src/public-types/external-auth/external-auth.public-types.js.map +1 -0
- package/dist/internal-common/src/public-types/http-status.public-types.js +64 -0
- package/dist/internal-common/src/public-types/http-status.public-types.js.map +1 -0
- package/dist/internal-common/src/public-types/regions.public-types.js +5 -0
- package/dist/internal-common/src/public-types/regions.public-types.js.map +1 -0
- package/dist/internal-common/src/public-types/serialized-query.public-types.js +3 -0
- package/dist/internal-common/src/public-types/serialized-query.public-types.js.map +1 -0
- package/dist/internal-common/src/public-types/web.public-types.js +3 -0
- package/dist/internal-common/src/public-types/web.public-types.js.map +1 -0
- package/dist/internal-common/src/public-types-backend/bundle-data.public-types.js +2 -1
- package/dist/internal-common/src/public-types-backend/bundle-data.public-types.js.map +1 -1
- package/dist/internal-common/src/public-types-backend/llm.public-types.js +3 -0
- package/dist/internal-common/src/public-types-backend/llm.public-types.js.map +1 -0
- package/dist/internal-common/src/public-utils/context-utils.js +12 -0
- package/dist/internal-common/src/public-utils/context-utils.js.map +1 -0
- package/dist/internal-common/src/public-utils/id-utils.js +60 -0
- package/dist/internal-common/src/public-utils/id-utils.js.map +1 -0
- package/dist/internal-common/src/types/ai-knowledge-base.types.js +3 -0
- package/dist/internal-common/src/types/ai-knowledge-base.types.js.map +1 -0
- package/dist/internal-common/src/types/ai-matchmaking.types.js +3 -0
- package/dist/internal-common/src/types/ai-matchmaking.types.js.map +1 -0
- package/dist/internal-common/src/types/application.types.js +4 -0
- package/dist/internal-common/src/types/application.types.js.map +1 -1
- package/dist/internal-common/src/types/backend-function.types.js +3 -0
- package/dist/internal-common/src/types/backend-function.types.js.map +1 -0
- package/dist/internal-common/src/types/backend-run.types.js.map +1 -1
- package/dist/internal-common/src/types/bundle-data.types.js.map +1 -1
- package/dist/internal-common/src/types/headers.types.js +13 -0
- package/dist/internal-common/src/types/headers.types.js.map +1 -0
- package/dist/internal-common/src/types/integrration-lifecycle.types.js +3 -0
- package/dist/internal-common/src/types/integrration-lifecycle.types.js.map +1 -0
- package/dist/internal-common/src/types/management-api-key.types.js +5 -0
- package/dist/internal-common/src/types/management-api-key.types.js.map +1 -0
- package/dist/internal-common/src/types/mutation.types.js +187 -0
- package/dist/internal-common/src/types/mutation.types.js.map +1 -0
- package/dist/internal-common/src/types/notification.types.js +3 -0
- package/dist/internal-common/src/types/notification.types.js.map +1 -0
- package/dist/internal-common/src/types/quota.types.js +52 -0
- package/dist/internal-common/src/types/quota.types.js.map +1 -0
- package/dist/internal-common/src/types/socket.types.js +6 -0
- package/dist/internal-common/src/types/socket.types.js.map +1 -0
- package/dist/internal-common/src/types/url-shortener.types.js +3 -0
- package/dist/internal-common/src/types/url-shortener.types.js.map +1 -0
- package/dist/internal-common/src/utils/array.js +75 -0
- package/dist/internal-common/src/utils/array.js.map +1 -0
- package/dist/internal-common/src/utils/backend-transforms.js +11 -4
- package/dist/internal-common/src/utils/backend-transforms.js.map +1 -1
- package/dist/internal-common/src/utils/e2e-test-utils.js +7 -0
- package/dist/internal-common/src/utils/e2e-test-utils.js.map +1 -0
- package/dist/internal-common/src/utils/file-utils.js +18 -0
- package/dist/internal-common/src/utils/file-utils.js.map +1 -0
- package/dist/internal-common/src/utils/http.js +0 -2
- package/dist/internal-common/src/utils/http.js.map +1 -1
- package/dist/internal-common/src/utils/lock.manager.js +40 -0
- package/dist/internal-common/src/utils/lock.manager.js.map +1 -0
- package/dist/internal-common/src/utils/metric-utils.js +105 -0
- package/dist/internal-common/src/utils/metric-utils.js.map +1 -0
- package/dist/internal-common/src/utils/python-ipc.js +218 -0
- package/dist/internal-common/src/utils/python-ipc.js.map +1 -0
- package/dist/internal-common/src/utils/squid-service.utils.js +33 -5
- package/dist/internal-common/src/utils/squid-service.utils.js.map +1 -1
- package/dist/internal-common/src/utils/trace-id-generator.js +8 -0
- package/dist/internal-common/src/utils/trace-id-generator.js.map +1 -0
- package/dist/internal-common/src/utils/tsoa-utils.js +26 -24
- package/dist/internal-common/src/utils/tsoa-utils.js.map +1 -1
- package/dist/internal-common/src/utils/validation.js +46 -0
- package/dist/internal-common/src/utils/validation.js.map +1 -0
- package/dist/internal-common/src/utils.js +7 -0
- package/dist/internal-common/src/utils.js.map +1 -1
- package/dist/local-backend/src/local-backend-socket.service.js +20 -3
- package/dist/local-backend/src/local-backend-socket.service.js.map +1 -1
- package/dist/local-backend/src/local-backend.app.js +43 -0
- package/dist/local-backend/src/local-backend.app.js.map +1 -1
- package/dist/local-backend/src/local-backend.module.js +9 -4
- package/dist/local-backend/src/local-backend.module.js.map +1 -1
- package/dist/local-backend/src/local-backend.service.js +73 -10
- package/dist/local-backend/src/local-backend.service.js.map +1 -1
- package/dist/local-backend/src/local-backend.types.js +3 -2
- package/dist/local-backend/src/local-backend.types.js.map +1 -1
- package/dist/local-backend/src/main.js +143 -11
- package/dist/local-backend/src/main.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/typescript-client/src/admin-client.js +23 -0
- package/dist/typescript-client/src/admin-client.js.map +1 -0
- package/dist/typescript-client/src/agent/ai-agent-client-reference.js +392 -0
- package/dist/typescript-client/src/agent/ai-agent-client-reference.js.map +1 -0
- package/dist/typescript-client/src/agent/ai-agent-client.js +60 -0
- package/dist/typescript-client/src/agent/ai-agent-client.js.map +1 -0
- package/dist/typescript-client/src/agent/ai-agent-client.types.js +5 -0
- package/dist/typescript-client/src/agent/ai-agent-client.types.js.map +1 -0
- package/dist/typescript-client/src/ai-audio-client.js +20 -0
- package/dist/typescript-client/src/ai-audio-client.js.map +1 -0
- package/dist/typescript-client/src/ai-client.js +110 -0
- package/dist/typescript-client/src/ai-client.js.map +1 -0
- package/dist/typescript-client/src/ai-files-client.js +27 -0
- package/dist/typescript-client/src/ai-files-client.js.map +1 -0
- package/dist/typescript-client/src/ai-image-client.js +20 -0
- package/dist/typescript-client/src/ai-image-client.js.map +1 -0
- package/dist/typescript-client/src/ai-knowledge-base/ai-knowledge-base-client-reference.js +111 -0
- package/dist/typescript-client/src/ai-knowledge-base/ai-knowledge-base-client-reference.js.map +1 -0
- package/dist/typescript-client/src/ai-knowledge-base/ai-knowledge-base-client.js +24 -0
- package/dist/typescript-client/src/ai-knowledge-base/ai-knowledge-base-client.js.map +1 -0
- package/dist/typescript-client/src/ai-matchmaking-client.js +93 -0
- package/dist/typescript-client/src/ai-matchmaking-client.js.map +1 -0
- package/dist/typescript-client/src/api-client.js +55 -0
- package/dist/typescript-client/src/api-client.js.map +1 -0
- package/dist/typescript-client/src/auth.manager.js +36 -0
- package/dist/typescript-client/src/auth.manager.js.map +1 -0
- package/dist/typescript-client/src/backend-function.manager.js +60 -0
- package/dist/typescript-client/src/backend-function.manager.js.map +1 -0
- package/dist/typescript-client/src/client-customization.utils.js +11 -0
- package/dist/typescript-client/src/client-customization.utils.js.map +1 -0
- package/dist/typescript-client/src/client-id.service.js +60 -0
- package/dist/typescript-client/src/client-id.service.js.map +1 -0
- package/dist/typescript-client/src/collection-reference.factory.js +28 -0
- package/dist/typescript-client/src/collection-reference.factory.js.map +1 -0
- package/dist/typescript-client/src/collection-reference.js +181 -0
- package/dist/typescript-client/src/collection-reference.js.map +1 -0
- package/dist/typescript-client/src/connection-details.js +25 -0
- package/dist/typescript-client/src/connection-details.js.map +1 -0
- package/dist/typescript-client/src/console-utils.js +25 -0
- package/dist/typescript-client/src/console-utils.js.map +1 -0
- package/dist/typescript-client/src/data.manager.js +608 -0
- package/dist/typescript-client/src/data.manager.js.map +1 -0
- package/dist/typescript-client/src/destruct.manager.js +46 -0
- package/dist/typescript-client/src/destruct.manager.js.map +1 -0
- package/dist/typescript-client/src/distributed-lock.manager.js +108 -0
- package/dist/typescript-client/src/distributed-lock.manager.js.map +1 -0
- package/dist/typescript-client/src/document-identity.service.js +24 -0
- package/dist/typescript-client/src/document-identity.service.js.map +1 -0
- package/dist/typescript-client/src/document-reference.factory.js +52 -0
- package/dist/typescript-client/src/document-reference.factory.js.map +1 -0
- package/dist/typescript-client/src/document-reference.js +207 -0
- package/dist/typescript-client/src/document-reference.js.map +1 -0
- package/dist/typescript-client/src/document-store.js +184 -0
- package/dist/typescript-client/src/document-store.js.map +1 -0
- package/dist/typescript-client/src/execute-function-options.js +47 -0
- package/dist/typescript-client/src/execute-function-options.js.map +1 -0
- package/dist/typescript-client/src/external-auth-client.js +32 -0
- package/dist/typescript-client/src/external-auth-client.js.map +1 -0
- package/dist/typescript-client/src/extraction-client.js +27 -0
- package/dist/typescript-client/src/extraction-client.js.map +1 -0
- package/dist/typescript-client/src/file-args-transformer.js +44 -0
- package/dist/typescript-client/src/file-args-transformer.js.map +1 -0
- package/dist/typescript-client/src/index.js +80 -0
- package/dist/typescript-client/src/index.js.map +1 -0
- package/dist/typescript-client/src/integration-client.js +62 -0
- package/dist/typescript-client/src/integration-client.js.map +1 -0
- package/dist/typescript-client/src/job-client.js +67 -0
- package/dist/typescript-client/src/job-client.js.map +1 -0
- package/dist/typescript-client/src/management-client.js +66 -0
- package/dist/typescript-client/src/management-client.js.map +1 -0
- package/dist/typescript-client/src/mutation/mutation-sender.js +38 -0
- package/dist/typescript-client/src/mutation/mutation-sender.js.map +1 -0
- package/dist/typescript-client/src/native-query-manager.js +13 -0
- package/dist/typescript-client/src/native-query-manager.js.map +1 -0
- package/dist/typescript-client/src/notification-client.js +32 -0
- package/dist/typescript-client/src/notification-client.js.map +1 -0
- package/dist/typescript-client/src/observability-client.js +56 -0
- package/dist/typescript-client/src/observability-client.js.map +1 -0
- package/dist/typescript-client/src/public-types.js +47 -0
- package/dist/typescript-client/src/public-types.js.map +1 -0
- package/dist/typescript-client/src/public-utils.js +18 -0
- package/dist/typescript-client/src/public-utils.js.map +1 -0
- package/dist/typescript-client/src/query/deserializer.js +78 -0
- package/dist/typescript-client/src/query/deserializer.js.map +1 -0
- package/dist/typescript-client/src/query/join-query-builder.factory.js +335 -0
- package/dist/typescript-client/src/query/join-query-builder.factory.js.map +1 -0
- package/dist/typescript-client/src/query/local-query-manager.js +29 -0
- package/dist/typescript-client/src/query/local-query-manager.js.map +1 -0
- package/dist/typescript-client/src/query/pagination.js +205 -0
- package/dist/typescript-client/src/query/pagination.js.map +1 -0
- package/dist/typescript-client/src/query/query-builder.factory.js +423 -0
- package/dist/typescript-client/src/query/query-builder.factory.js.map +1 -0
- package/dist/typescript-client/src/query/query-sender.js +81 -0
- package/dist/typescript-client/src/query/query-sender.js.map +1 -0
- package/dist/typescript-client/src/query/query-subscription.manager.js +820 -0
- package/dist/typescript-client/src/query/query-subscription.manager.js.map +1 -0
- package/dist/typescript-client/src/query/query.types.js +11 -0
- package/dist/typescript-client/src/query/query.types.js.map +1 -0
- package/dist/typescript-client/src/query/snapshot-emitter.js +3 -0
- package/dist/typescript-client/src/query/snapshot-emitter.js.map +1 -0
- package/dist/typescript-client/src/query-utils.js +21 -0
- package/dist/typescript-client/src/query-utils.js.map +1 -0
- package/dist/typescript-client/src/queue.manager.js +123 -0
- package/dist/typescript-client/src/queue.manager.js.map +1 -0
- package/dist/typescript-client/src/rate-limiter.js +35 -0
- package/dist/typescript-client/src/rate-limiter.js.map +1 -0
- package/dist/typescript-client/src/rpc.manager.js +214 -0
- package/dist/typescript-client/src/rpc.manager.js.map +1 -0
- package/dist/typescript-client/src/runtime-options.js +9 -0
- package/dist/typescript-client/src/runtime-options.js.map +1 -0
- package/dist/typescript-client/src/scheduler-client.js +29 -0
- package/dist/typescript-client/src/scheduler-client.js.map +1 -0
- package/dist/typescript-client/src/secret.client.js +62 -0
- package/dist/typescript-client/src/secret.client.js.map +1 -0
- package/dist/typescript-client/src/socket.manager.js +249 -0
- package/dist/typescript-client/src/socket.manager.js.map +1 -0
- package/dist/typescript-client/src/squid-http-client.js +135 -0
- package/dist/typescript-client/src/squid-http-client.js.map +1 -0
- package/dist/typescript-client/src/squid.js +259 -0
- package/dist/typescript-client/src/squid.js.map +1 -0
- package/dist/typescript-client/src/storage-client.js +51 -0
- package/dist/typescript-client/src/storage-client.js.map +1 -0
- package/dist/typescript-client/src/types.js +18 -0
- package/dist/typescript-client/src/types.js.map +1 -0
- package/dist/typescript-client/src/version.js +5 -0
- package/dist/typescript-client/src/version.js.map +1 -0
- package/dist/typescript-client/src/web-client.js +92 -0
- package/dist/typescript-client/src/web-client.js.map +1 -0
- package/dist/typescript-client/src/webhook.manager.js +85 -0
- package/dist/typescript-client/src/webhook.manager.js.map +1 -0
- package/package.json +3 -1
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DestructManager = void 0;
|
|
4
|
+
const rxjs_1 = require("rxjs");
|
|
5
|
+
const operators_1 = require("rxjs/operators");
|
|
6
|
+
class DestructManager {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.preDestructors = [];
|
|
9
|
+
this.destructors = [];
|
|
10
|
+
this.isDestructedSubject = new rxjs_1.BehaviorSubject(false);
|
|
11
|
+
}
|
|
12
|
+
get isDestructing() {
|
|
13
|
+
return this.isDestructedSubject.value;
|
|
14
|
+
}
|
|
15
|
+
observeIsDestructing() {
|
|
16
|
+
return this.isDestructedSubject.asObservable().pipe((0, rxjs_1.filter)(Boolean), (0, operators_1.map)(() => undefined));
|
|
17
|
+
}
|
|
18
|
+
onPreDestruct(fn) {
|
|
19
|
+
this.preDestructors.push(fn);
|
|
20
|
+
}
|
|
21
|
+
onDestruct(fn) {
|
|
22
|
+
this.destructors.push(fn);
|
|
23
|
+
}
|
|
24
|
+
async destruct() {
|
|
25
|
+
this.reportDestructed();
|
|
26
|
+
const fns = this.preDestructors.concat(this.destructors);
|
|
27
|
+
let fn = fns.shift();
|
|
28
|
+
while (fn) {
|
|
29
|
+
try {
|
|
30
|
+
await fn();
|
|
31
|
+
}
|
|
32
|
+
catch (e) {
|
|
33
|
+
console.error('Error while destructing Squid', e);
|
|
34
|
+
}
|
|
35
|
+
fn = fns.shift();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
reportDestructed() {
|
|
39
|
+
if (this.isDestructing) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
this.isDestructedSubject.next(true);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.DestructManager = DestructManager;
|
|
46
|
+
//# sourceMappingURL=destruct.manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"destruct.manager.js","sourceRoot":"","sources":["../../../../typescript-client/src/destruct.manager.ts"],"names":[],"mappings":";;;AACA,+BAA2D;AAC3D,8CAAqC;AAcrC,MAAa,eAAe;IAA5B;QACmB,mBAAc,GAAwB,EAAE,CAAC;QACzC,gBAAW,GAAwB,EAAE,CAAC;QACtC,wBAAmB,GAAG,IAAI,sBAAe,CAAU,KAAK,CAAC,CAAC;IAyC7E,CAAC;IAvCC,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;IACxC,CAAC;IAED,oBAAoB;QAClB,OAAO,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC,IAAI,CACjD,IAAA,aAAM,EAAC,OAAO,CAAC,EACf,IAAA,eAAG,EAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CACrB,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,EAAgB;QAC5B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,UAAU,CAAC,EAAgB;QACzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzD,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,EAAE,EAAE,CAAC;YACV,IAAI,CAAC;gBACH,MAAM,EAAE,EAAE,CAAC;YACb,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,CAAC,CAAC,CAAC;YACpD,CAAC;YACD,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAED,gBAAgB;QACd,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;CACF;AA5CD,0CA4CC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DistributedLockImpl = exports.DistributedLockManager = void 0;
|
|
4
|
+
const assertic_1 = require("assertic");
|
|
5
|
+
const rxjs_1 = require("rxjs");
|
|
6
|
+
const operators_1 = require("rxjs/operators");
|
|
7
|
+
const id_utils_1 = require("../../internal-common/src/public-utils/id-utils");
|
|
8
|
+
class DistributedLockManager {
|
|
9
|
+
constructor(socketManager, destructManager) {
|
|
10
|
+
this.socketManager = socketManager;
|
|
11
|
+
this.destructManager = destructManager;
|
|
12
|
+
this.ongoingLocks = {};
|
|
13
|
+
this.acquireLockMessagesFromServer = this.socketManager
|
|
14
|
+
.observeNotifications()
|
|
15
|
+
.pipe((0, rxjs_1.filter)(message => message.type === 'lockAcquired'));
|
|
16
|
+
this.releaseLockMessagesFromServer = this.socketManager
|
|
17
|
+
.observeNotifications()
|
|
18
|
+
.pipe((0, rxjs_1.filter)(message => message.type === 'lockReleased'));
|
|
19
|
+
this.lockWaitForConnectionThreshold = 2000;
|
|
20
|
+
destructManager.onPreDestruct(() => {
|
|
21
|
+
this.releaseAllLocks();
|
|
22
|
+
});
|
|
23
|
+
this.socketManager.observeConnectionReady().subscribe(ready => {
|
|
24
|
+
if (ready)
|
|
25
|
+
return;
|
|
26
|
+
this.releaseAllLocks();
|
|
27
|
+
});
|
|
28
|
+
this.releaseLockMessagesFromServer.subscribe(message => {
|
|
29
|
+
const lock = this.ongoingLocks[message.payload.lockId];
|
|
30
|
+
void lock?.release();
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
async lock(resourceId, options) {
|
|
34
|
+
if (typeof options === 'number') {
|
|
35
|
+
options = { acquisitionTimeoutMillis: options };
|
|
36
|
+
}
|
|
37
|
+
const acquisitionTimeoutMillis = options?.acquisitionTimeoutMillis ?? 2000;
|
|
38
|
+
const maxHoldTimeMillis = options?.maxHoldTimeMillis;
|
|
39
|
+
this.socketManager.notifyWebSocketIsNeeded();
|
|
40
|
+
const isConnected = await (0, rxjs_1.firstValueFrom)((0, rxjs_1.race)((0, rxjs_1.timer)(this.lockWaitForConnectionThreshold).pipe((0, operators_1.map)(() => false)), this.socketManager.observeConnectionReady().pipe((0, rxjs_1.filter)(Boolean)), this.destructManager.observeIsDestructing()));
|
|
41
|
+
(0, assertic_1.assertTruthy)(isConnected, 'CLIENT_NOT_CONNECTED');
|
|
42
|
+
const clientRequestId = (0, id_utils_1.generateUUID)();
|
|
43
|
+
const acquireLockMessage = {
|
|
44
|
+
type: 'acquireLock',
|
|
45
|
+
payload: { mutex: resourceId, acquisitionTimeoutMillis, maxHoldTimeMillis, clientRequestId },
|
|
46
|
+
};
|
|
47
|
+
this.socketManager.postMessage(acquireLockMessage);
|
|
48
|
+
const result = await (0, rxjs_1.firstValueFrom)((0, rxjs_1.race)((0, rxjs_1.timer)(acquisitionTimeoutMillis + 4000).pipe((0, rxjs_1.take)(1), (0, operators_1.map)(() => ({
|
|
49
|
+
payload: {
|
|
50
|
+
error: `TIMEOUT_GETTING_LOCK: ${resourceId}`,
|
|
51
|
+
lockId: undefined,
|
|
52
|
+
clientRequestId,
|
|
53
|
+
},
|
|
54
|
+
}))), this.acquireLockMessagesFromServer.pipe((0, rxjs_1.filter)(message => message.payload.clientRequestId === clientRequestId))));
|
|
55
|
+
const lockId = result.payload.lockId;
|
|
56
|
+
(0, assertic_1.assertTruthy)(!this.destructManager.isDestructing, 'Squid client is in destructuring phase');
|
|
57
|
+
(0, assertic_1.assertTruthy)(lockId, () => `Failed to acquire lock: ${result.payload.error}`);
|
|
58
|
+
const lock = new DistributedLockImpl(lockId, resourceId, clientRequestId, this.ongoingLocks, this.socketManager);
|
|
59
|
+
this.ongoingLocks[lockId] = lock;
|
|
60
|
+
return lock;
|
|
61
|
+
}
|
|
62
|
+
releaseAllLocks() {
|
|
63
|
+
for (const [lockId, lock] of Object.entries(this.ongoingLocks)) {
|
|
64
|
+
void lock.release();
|
|
65
|
+
delete this.ongoingLocks[lockId];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.DistributedLockManager = DistributedLockManager;
|
|
70
|
+
class DistributedLockImpl {
|
|
71
|
+
constructor(lockId, resourceId, clientRequestId, ongoingLocks, socketManager) {
|
|
72
|
+
this.lockId = lockId;
|
|
73
|
+
this.resourceId = resourceId;
|
|
74
|
+
this.clientRequestId = clientRequestId;
|
|
75
|
+
this.ongoingLocks = ongoingLocks;
|
|
76
|
+
this.socketManager = socketManager;
|
|
77
|
+
this.released = false;
|
|
78
|
+
this.onReleaseSubject = new rxjs_1.Subject();
|
|
79
|
+
}
|
|
80
|
+
async release() {
|
|
81
|
+
if (this.released)
|
|
82
|
+
return;
|
|
83
|
+
this.released = true;
|
|
84
|
+
delete this.ongoingLocks[this.lockId];
|
|
85
|
+
const releaseLockMessage = {
|
|
86
|
+
type: 'releaseLock',
|
|
87
|
+
payload: {
|
|
88
|
+
lockId: this.lockId,
|
|
89
|
+
clientRequestId: this.clientRequestId,
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
try {
|
|
93
|
+
await this.socketManager.sendMessage(releaseLockMessage);
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
this.onReleaseSubject.next();
|
|
97
|
+
this.onReleaseSubject.complete();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
observeRelease() {
|
|
101
|
+
return this.onReleaseSubject.asObservable();
|
|
102
|
+
}
|
|
103
|
+
isReleased() {
|
|
104
|
+
return this.released;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
exports.DistributedLockImpl = DistributedLockImpl;
|
|
108
|
+
//# sourceMappingURL=distributed-lock.manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"distributed-lock.manager.js","sourceRoot":"","sources":["../../../../typescript-client/src/distributed-lock.manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const rxjs_1 = require("rxjs");
|
|
4
|
+
class DocumentIdentityService {
|
|
5
|
+
constructor(documentStore, destructManager) {
|
|
6
|
+
this.documentStore = documentStore;
|
|
7
|
+
this.destructManager = destructManager;
|
|
8
|
+
this.changeNotifier = new rxjs_1.BehaviorSubject({});
|
|
9
|
+
this.destructManager.onDestruct(() => {
|
|
10
|
+
this.changeNotifier.complete();
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
migrate(idResolutionMap) {
|
|
14
|
+
Object.entries(idResolutionMap).forEach(([squidDocId, newSquidDocId]) => {
|
|
15
|
+
this.documentStore.migrateDocId(squidDocId, newSquidDocId);
|
|
16
|
+
});
|
|
17
|
+
this.changeNotifier.next(idResolutionMap);
|
|
18
|
+
}
|
|
19
|
+
observeChanges() {
|
|
20
|
+
return this.changeNotifier.asObservable();
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.default = DocumentIdentityService;
|
|
24
|
+
//# sourceMappingURL=document-identity.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-identity.service.js","sourceRoot":"","sources":["../../../../typescript-client/src/document-identity.service.ts"],"names":[],"mappings":";;AAEA,+BAAmD;AAMnD,MAAqB,uBAAuB;IAG1C,YACmB,aAA4B,EAC5B,eAAgC;QADhC,kBAAa,GAAb,aAAa,CAAe;QAC5B,oBAAe,GAAf,eAAe,CAAiB;QAJlC,mBAAc,GAAG,IAAI,sBAAe,CAAkB,EAAE,CAAC,CAAC;QAMzE,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG,EAAE;YACnC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,eAAgC;QAEtC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,EAAE;YACtE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5C,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;IAC5C,CAAC;CACF;AAxBD,0CAwBC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DocumentReferenceFactory = void 0;
|
|
4
|
+
const assertic_1 = require("assertic");
|
|
5
|
+
const document_types_1 = require("../../internal-common/src/types/document.types");
|
|
6
|
+
const object_1 = require("../../internal-common/src/utils/object");
|
|
7
|
+
const document_reference_1 = require("./document-reference");
|
|
8
|
+
class DocumentReferenceFactory {
|
|
9
|
+
constructor(documentIdentityService) {
|
|
10
|
+
this.documentIdentityService = documentIdentityService;
|
|
11
|
+
this.documents = new Map();
|
|
12
|
+
this.documentsForCollection = new Map();
|
|
13
|
+
this.documentIdentityService.observeChanges().subscribe(this.migrateDocIds.bind(this));
|
|
14
|
+
}
|
|
15
|
+
create(squidDocId, queryBuilderFactory, projectFields) {
|
|
16
|
+
if (projectFields) {
|
|
17
|
+
return new document_reference_1.DocumentReference(squidDocId, (0, assertic_1.truthy)(this.dataManager, 'dataManager not found'), queryBuilderFactory, projectFields);
|
|
18
|
+
}
|
|
19
|
+
let reference = this.documents.get(squidDocId);
|
|
20
|
+
if (reference)
|
|
21
|
+
return reference;
|
|
22
|
+
reference = new document_reference_1.DocumentReference(squidDocId, (0, assertic_1.truthy)(this.dataManager, 'dataManager not found'), queryBuilderFactory);
|
|
23
|
+
const { integrationId, collectionName } = (0, document_types_1.parseSquidDocId)(squidDocId);
|
|
24
|
+
this.documents.set(squidDocId, reference);
|
|
25
|
+
const collectionKey = this.getCollectionKey(integrationId, collectionName);
|
|
26
|
+
const docsForCollection = this.documentsForCollection.get(collectionKey) || [];
|
|
27
|
+
this.documentsForCollection.set(collectionKey, docsForCollection.concat(reference));
|
|
28
|
+
return reference;
|
|
29
|
+
}
|
|
30
|
+
setDataManager(dataManager) {
|
|
31
|
+
this.dataManager = dataManager;
|
|
32
|
+
}
|
|
33
|
+
getDocumentsForCollection(integrationId, collectionName) {
|
|
34
|
+
const collectionKey = this.getCollectionKey(integrationId, collectionName);
|
|
35
|
+
return (this.documentsForCollection.get(collectionKey) || []).filter(d => d.hasData);
|
|
36
|
+
}
|
|
37
|
+
migrateDocIds(idResolutionMap) {
|
|
38
|
+
for (const [, reference] of this.documents) {
|
|
39
|
+
reference.migrateDocIds(idResolutionMap);
|
|
40
|
+
}
|
|
41
|
+
Object.entries(idResolutionMap).forEach(([squidDocId, newSquidDocId]) => {
|
|
42
|
+
const squidDocIdObj = (0, document_types_1.parseSquidDocId)(squidDocId);
|
|
43
|
+
const newSquidDocIdObj = (0, document_types_1.parseSquidDocId)(newSquidDocId);
|
|
44
|
+
(0, object_1.replaceKeyInMap)(this.documents, squidDocIdObj.docId, newSquidDocIdObj.docId);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
getCollectionKey(integrationId, collectionName) {
|
|
48
|
+
return `${integrationId}_${collectionName}`;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.DocumentReferenceFactory = DocumentReferenceFactory;
|
|
52
|
+
//# sourceMappingURL=document-reference.factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-reference.factory.js","sourceRoot":"","sources":["../../../../typescript-client/src/document-reference.factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DocumentReference = void 0;
|
|
4
|
+
const assertic_1 = require("assertic");
|
|
5
|
+
const rxjs_1 = require("rxjs");
|
|
6
|
+
const id_utils_1 = require("../../internal-common/src/public-utils/id-utils");
|
|
7
|
+
const document_types_1 = require("../../internal-common/src/types/document.types");
|
|
8
|
+
const object_1 = require("../../internal-common/src/utils/object");
|
|
9
|
+
const serialization_1 = require("../../internal-common/src/utils/serialization");
|
|
10
|
+
const public_types_1 = require("./public-types");
|
|
11
|
+
class DocumentReference {
|
|
12
|
+
constructor(_squidDocId, dataManager, queryBuilderFactory, projectFields) {
|
|
13
|
+
this._squidDocId = _squidDocId;
|
|
14
|
+
this.dataManager = dataManager;
|
|
15
|
+
this.queryBuilderFactory = queryBuilderFactory;
|
|
16
|
+
this.projectFields = projectFields;
|
|
17
|
+
this.refId = (0, id_utils_1.generateUUID)();
|
|
18
|
+
}
|
|
19
|
+
get squidDocId() {
|
|
20
|
+
return this._squidDocId;
|
|
21
|
+
}
|
|
22
|
+
get data() {
|
|
23
|
+
return (0, object_1.cloneDeep)(this.dataRef);
|
|
24
|
+
}
|
|
25
|
+
get dataRef() {
|
|
26
|
+
const getError = () => {
|
|
27
|
+
const { collectionName, integrationId, docId } = (0, document_types_1.parseSquidDocId)(this.squidDocId);
|
|
28
|
+
return `No data found for document reference: ${JSON.stringify({
|
|
29
|
+
docId,
|
|
30
|
+
collectionName,
|
|
31
|
+
integrationId,
|
|
32
|
+
}, null, 2)}`;
|
|
33
|
+
};
|
|
34
|
+
const doc = (0, assertic_1.truthy)(this.dataManager.getProperties(this.squidDocId), getError);
|
|
35
|
+
if (this.projectFields) {
|
|
36
|
+
return this.applyProjection(doc);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
return doc;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
get hasData() {
|
|
43
|
+
return this.dataManager.hasSufficientData(this.squidDocId, this.projectFields);
|
|
44
|
+
}
|
|
45
|
+
async snapshot() {
|
|
46
|
+
if (this.hasSquidPlaceholderId()) {
|
|
47
|
+
throw new Error('Cannot invoke snapshot of a document that was created locally without storing it on the server.');
|
|
48
|
+
}
|
|
49
|
+
if (this.isTracked() && this.hasData)
|
|
50
|
+
return this.data;
|
|
51
|
+
const results = await this.queryBuilderFactory.getForDocument(this.squidDocId).dereference().snapshot();
|
|
52
|
+
(0, assertic_1.truthy)(results.length <= 1, 'Got more than one doc for the same id:' + this.squidDocId);
|
|
53
|
+
return results.length ? results[0] : undefined;
|
|
54
|
+
}
|
|
55
|
+
snapshots() {
|
|
56
|
+
return this.queryBuilderFactory
|
|
57
|
+
.getForDocument(this.squidDocId)
|
|
58
|
+
.dereference()
|
|
59
|
+
.snapshots()
|
|
60
|
+
.pipe((0, rxjs_1.map)(results => {
|
|
61
|
+
(0, assertic_1.truthy)(results.length <= 1, 'Got more than one doc for the same id:' + this.squidDocId);
|
|
62
|
+
return results.length ? results[0] : undefined;
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
peek() {
|
|
66
|
+
return this.isTracked() && this.hasData ? this.data : undefined;
|
|
67
|
+
}
|
|
68
|
+
isDirty() {
|
|
69
|
+
return this.dataManager.isDirty(this.squidDocId);
|
|
70
|
+
}
|
|
71
|
+
async update(data, transactionId) {
|
|
72
|
+
const properties = {};
|
|
73
|
+
Object.entries(data).forEach(([fieldName, value]) => {
|
|
74
|
+
const propertyMutation = value !== undefined
|
|
75
|
+
? {
|
|
76
|
+
type: 'update',
|
|
77
|
+
value: value,
|
|
78
|
+
}
|
|
79
|
+
: {
|
|
80
|
+
type: 'removeProperty',
|
|
81
|
+
};
|
|
82
|
+
properties[fieldName] = [propertyMutation];
|
|
83
|
+
});
|
|
84
|
+
const mutation = {
|
|
85
|
+
type: 'update',
|
|
86
|
+
squidDocIdObj: (0, document_types_1.parseSquidDocId)(this.squidDocId),
|
|
87
|
+
properties,
|
|
88
|
+
};
|
|
89
|
+
return this.dataManager.applyOutgoingMutation(mutation, transactionId);
|
|
90
|
+
}
|
|
91
|
+
async setInPath(path, value, transactionId) {
|
|
92
|
+
return this.update({ [path]: (0, object_1.cloneDeep)(value) }, transactionId);
|
|
93
|
+
}
|
|
94
|
+
async deleteInPath(path, transactionId) {
|
|
95
|
+
return this.update({ [path]: undefined }, transactionId);
|
|
96
|
+
}
|
|
97
|
+
incrementInPath(path, value, transactionId) {
|
|
98
|
+
const propertyMutation = {
|
|
99
|
+
type: 'applyNumericFn',
|
|
100
|
+
fn: 'increment',
|
|
101
|
+
value,
|
|
102
|
+
};
|
|
103
|
+
const mutation = {
|
|
104
|
+
type: 'update',
|
|
105
|
+
squidDocIdObj: (0, document_types_1.parseSquidDocId)(this.squidDocId),
|
|
106
|
+
properties: {
|
|
107
|
+
[path]: [propertyMutation],
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
return this.dataManager.applyOutgoingMutation(mutation, transactionId);
|
|
111
|
+
}
|
|
112
|
+
decrementInPath(path, value, transactionId) {
|
|
113
|
+
return this.incrementInPath(path, -value, transactionId);
|
|
114
|
+
}
|
|
115
|
+
async upsert(data, transactionId) {
|
|
116
|
+
const squidDocIdObj = (0, document_types_1.parseSquidDocId)(this.squidDocId);
|
|
117
|
+
const integrationId = squidDocIdObj.integrationId;
|
|
118
|
+
let docIdProps = (0, serialization_1.deserializeObj)(squidDocIdObj.docId);
|
|
119
|
+
if (docIdProps[document_types_1.SquidPlaceholderId])
|
|
120
|
+
docIdProps = {};
|
|
121
|
+
if (integrationId === public_types_1.BUILT_IN_DB_INTEGRATION_ID && docIdProps.__id) {
|
|
122
|
+
try {
|
|
123
|
+
const idProps = (0, serialization_1.deserializeObj)(docIdProps.__id);
|
|
124
|
+
docIdProps = { ...docIdProps, ...idProps };
|
|
125
|
+
}
|
|
126
|
+
catch { }
|
|
127
|
+
}
|
|
128
|
+
const mutation = {
|
|
129
|
+
type: 'insert',
|
|
130
|
+
squidDocIdObj,
|
|
131
|
+
properties: { ...data, __docId__: squidDocIdObj.docId, ...docIdProps },
|
|
132
|
+
};
|
|
133
|
+
return this.dataManager.applyOutgoingMutation(mutation, transactionId);
|
|
134
|
+
}
|
|
135
|
+
async insert(data, transactionId) {
|
|
136
|
+
return this.upsert(data, transactionId);
|
|
137
|
+
}
|
|
138
|
+
async delete(transactionId) {
|
|
139
|
+
const mutation = {
|
|
140
|
+
type: 'delete',
|
|
141
|
+
squidDocIdObj: (0, document_types_1.parseSquidDocId)(this.squidDocId),
|
|
142
|
+
};
|
|
143
|
+
return this.dataManager.applyOutgoingMutation(mutation, transactionId);
|
|
144
|
+
}
|
|
145
|
+
migrateDocIds(idResolutionMap) {
|
|
146
|
+
const newSquidDocId = idResolutionMap[this.squidDocId];
|
|
147
|
+
if (newSquidDocId) {
|
|
148
|
+
this._squidDocId = newSquidDocId;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
isTracked() {
|
|
152
|
+
return this.dataManager.isTracked(this.squidDocId);
|
|
153
|
+
}
|
|
154
|
+
applyProjection(doc) {
|
|
155
|
+
const projected = {};
|
|
156
|
+
const projectFields = (0, assertic_1.truthy)(this.projectFields, 'applyProjection called without projectFields');
|
|
157
|
+
const { integrationId } = (0, document_types_1.parseSquidDocId)(this.squidDocId);
|
|
158
|
+
if ('__id' in doc)
|
|
159
|
+
projected['__id'] = doc['__id'];
|
|
160
|
+
if ('__docId__' in doc)
|
|
161
|
+
projected['__docId__'] = doc['__docId__'];
|
|
162
|
+
const idFieldKey = integrationId === public_types_1.BUILT_IN_DB_INTEGRATION_ID ? '__id' : '__docId__';
|
|
163
|
+
if (idFieldKey in doc) {
|
|
164
|
+
const idValue = doc[idFieldKey];
|
|
165
|
+
if (typeof idValue === 'string' && idValue.startsWith('{')) {
|
|
166
|
+
try {
|
|
167
|
+
const idFields = (0, serialization_1.deserializeObj)(idValue);
|
|
168
|
+
if (typeof idFields === 'object' && idFields !== null) {
|
|
169
|
+
for (const [key, value] of Object.entries(idFields)) {
|
|
170
|
+
if (!(key in projected)) {
|
|
171
|
+
projected[key] = value;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
for (const field of projectFields) {
|
|
181
|
+
if (field.includes('.')) {
|
|
182
|
+
const value = (0, object_1.getInPath)(doc, field);
|
|
183
|
+
if (value !== undefined) {
|
|
184
|
+
(0, object_1.setInPath)(projected, field, value);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
if (field in doc) {
|
|
189
|
+
projected[field] = doc[field];
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return projected;
|
|
194
|
+
}
|
|
195
|
+
hasSquidPlaceholderId() {
|
|
196
|
+
const obj = (0, serialization_1.deserializeObj)(this._squidDocId);
|
|
197
|
+
if (typeof obj === 'object' && !!obj.docId) {
|
|
198
|
+
const docIdObj = (0, serialization_1.deserializeObj)(obj.docId);
|
|
199
|
+
if (typeof docIdObj === 'object' && Object.keys(docIdObj).includes(document_types_1.SquidPlaceholderId)) {
|
|
200
|
+
return true;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
exports.DocumentReference = DocumentReference;
|
|
207
|
+
//# sourceMappingURL=document-reference.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-reference.js","sourceRoot":"","sources":["../../../../typescript-client/src/document-reference.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DocumentStore = void 0;
|
|
4
|
+
const assertic_1 = require("assertic");
|
|
5
|
+
const document_types_1 = require("../../internal-common/src/types/document.types");
|
|
6
|
+
const object_1 = require("../../internal-common/src/utils/object");
|
|
7
|
+
const serialization_1 = require("../../internal-common/src/utils/serialization");
|
|
8
|
+
class DocumentStore {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.squidDocIdToDoc = new Map();
|
|
11
|
+
this.squidDocIdToProjectedFields = new Map();
|
|
12
|
+
}
|
|
13
|
+
saveProjectedDocument(squidDocId, properties, projectFields) {
|
|
14
|
+
const existingDoc = this.squidDocIdToDoc.get(squidDocId);
|
|
15
|
+
if (existingDoc) {
|
|
16
|
+
const mergedDoc = this.mergeDocuments(existingDoc, properties);
|
|
17
|
+
const data = this.removeInternalProperties(mergedDoc);
|
|
18
|
+
this.squidDocIdToDoc.set(squidDocId, data);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
const data = this.removeInternalProperties(properties);
|
|
22
|
+
this.squidDocIdToDoc.set(squidDocId, data);
|
|
23
|
+
}
|
|
24
|
+
if (projectFields?.length) {
|
|
25
|
+
const existing = this.squidDocIdToProjectedFields.get(squidDocId);
|
|
26
|
+
if (existing !== undefined) {
|
|
27
|
+
for (const field of projectFields) {
|
|
28
|
+
existing.add(field);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
else if (!existingDoc) {
|
|
32
|
+
this.squidDocIdToProjectedFields.set(squidDocId, new Set(projectFields));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return this.squidDocIdToDoc.get(squidDocId);
|
|
36
|
+
}
|
|
37
|
+
mergeDocuments(existing, incoming) {
|
|
38
|
+
const merged = (0, object_1.cloneDeep)(existing);
|
|
39
|
+
for (const key of Object.keys(incoming)) {
|
|
40
|
+
const incomingValue = incoming[key];
|
|
41
|
+
const existingValue = merged[key];
|
|
42
|
+
if (incomingValue !== null &&
|
|
43
|
+
typeof incomingValue === 'object' &&
|
|
44
|
+
!Array.isArray(incomingValue) &&
|
|
45
|
+
existingValue !== null &&
|
|
46
|
+
typeof existingValue === 'object' &&
|
|
47
|
+
!Array.isArray(existingValue)) {
|
|
48
|
+
merged[key] = this.mergeDocuments(existingValue, incomingValue);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
merged[key] = incomingValue;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return merged;
|
|
55
|
+
}
|
|
56
|
+
deleteDocument(squidDocId) {
|
|
57
|
+
this.squidDocIdToDoc.delete(squidDocId);
|
|
58
|
+
this.squidDocIdToProjectedFields.delete(squidDocId);
|
|
59
|
+
}
|
|
60
|
+
saveDocument(squidDocId, properties) {
|
|
61
|
+
const doc = this.squidDocIdToDoc.get(squidDocId);
|
|
62
|
+
if (doc === undefined && !properties)
|
|
63
|
+
return undefined;
|
|
64
|
+
if (doc !== undefined) {
|
|
65
|
+
if (properties) {
|
|
66
|
+
const updateDoc = (0, object_1.cloneDeep)(properties);
|
|
67
|
+
const data = this.removeInternalProperties(updateDoc);
|
|
68
|
+
this.squidDocIdToDoc.set(squidDocId, data);
|
|
69
|
+
this.squidDocIdToProjectedFields.delete(squidDocId);
|
|
70
|
+
return data;
|
|
71
|
+
}
|
|
72
|
+
this.squidDocIdToDoc.delete(squidDocId);
|
|
73
|
+
this.squidDocIdToProjectedFields.delete(squidDocId);
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
const data = this.removeInternalProperties(properties);
|
|
77
|
+
this.squidDocIdToDoc.set(squidDocId, data);
|
|
78
|
+
this.squidDocIdToProjectedFields.delete(squidDocId);
|
|
79
|
+
return data;
|
|
80
|
+
}
|
|
81
|
+
hasData(squidDocId) {
|
|
82
|
+
return this.squidDocIdToDoc.get(squidDocId) !== undefined;
|
|
83
|
+
}
|
|
84
|
+
getDocumentOrUndefined(squidDocId) {
|
|
85
|
+
return this.squidDocIdToDoc.get(squidDocId);
|
|
86
|
+
}
|
|
87
|
+
hasSufficientData(squidDocId, requestedProjectFields) {
|
|
88
|
+
if (!this.squidDocIdToDoc.has(squidDocId))
|
|
89
|
+
return false;
|
|
90
|
+
const storedProjection = this.squidDocIdToProjectedFields.get(squidDocId);
|
|
91
|
+
if (storedProjection === undefined)
|
|
92
|
+
return true;
|
|
93
|
+
if (!requestedProjectFields?.length) {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
return requestedProjectFields.every(f => storedProjection.has(f));
|
|
97
|
+
}
|
|
98
|
+
group(sortedDocs, sortFieldNames) {
|
|
99
|
+
return Object.values((0, object_1.groupBy)(sortedDocs, doc => (0, serialization_1.normalizeJsonAsString)(sortFieldNames.map(fieldName => (0, object_1.getInPath)(doc, fieldName)))));
|
|
100
|
+
}
|
|
101
|
+
sortAndLimitDocs(docIdSet, query) {
|
|
102
|
+
if (docIdSet.size === 0) {
|
|
103
|
+
return [];
|
|
104
|
+
}
|
|
105
|
+
const docs = Array.from(docIdSet)
|
|
106
|
+
.map(id => this.squidDocIdToDoc.get(id))
|
|
107
|
+
.filter(assertic_1.isNonNullable);
|
|
108
|
+
const { sortOrder, limitBy } = query;
|
|
109
|
+
const sortedDocs = docs.sort((a, b) => this.compareSquidDocs(a, b, sortOrder));
|
|
110
|
+
const mainLimit = query.limit < 0 ? 2000 : query.limit;
|
|
111
|
+
let result;
|
|
112
|
+
if (!limitBy) {
|
|
113
|
+
result = sortedDocs.slice(0, mainLimit);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
const { limit: internalLimit, fields, reverseSort } = limitBy;
|
|
117
|
+
const sortedGroups = this.group(sortedDocs, fields);
|
|
118
|
+
let limitedGroups;
|
|
119
|
+
if (reverseSort) {
|
|
120
|
+
limitedGroups = sortedGroups.map(group => group.slice(-internalLimit));
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
limitedGroups = sortedGroups.map(group => group.slice(0, internalLimit));
|
|
124
|
+
}
|
|
125
|
+
result = limitedGroups.flat().slice(0, mainLimit);
|
|
126
|
+
}
|
|
127
|
+
const hasProjection = query.projectFields !== null && query.projectFields !== undefined;
|
|
128
|
+
if (hasProjection) {
|
|
129
|
+
result = result.map(doc => this.projectDocument(doc, query.projectFields));
|
|
130
|
+
}
|
|
131
|
+
return result;
|
|
132
|
+
}
|
|
133
|
+
projectDocument(doc, projectFields) {
|
|
134
|
+
const projected = {};
|
|
135
|
+
if ('__id' in doc)
|
|
136
|
+
projected['__id'] = doc['__id'];
|
|
137
|
+
if ('__docId__' in doc)
|
|
138
|
+
projected['__docId__'] = doc['__docId__'];
|
|
139
|
+
for (const field of projectFields) {
|
|
140
|
+
if (field.includes('.')) {
|
|
141
|
+
const value = (0, object_1.getInPath)(doc, field);
|
|
142
|
+
if (value !== undefined) {
|
|
143
|
+
(0, object_1.setInPath)(projected, field, value);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
if (field in doc) {
|
|
148
|
+
projected[field] = doc[field];
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return projected;
|
|
153
|
+
}
|
|
154
|
+
migrateDocId(squidDocId, newSquidDocId) {
|
|
155
|
+
const doc = this.getDocumentOrUndefined(squidDocId);
|
|
156
|
+
if (!doc)
|
|
157
|
+
return;
|
|
158
|
+
(0, object_1.replaceKeyInMap)(this.squidDocIdToDoc, squidDocId, newSquidDocId);
|
|
159
|
+
(0, object_1.replaceKeyInMap)(this.squidDocIdToProjectedFields, squidDocId, newSquidDocId);
|
|
160
|
+
const newSquidDocIdObj = (0, document_types_1.parseSquidDocId)(newSquidDocId);
|
|
161
|
+
const docIdObj = (0, serialization_1.deserializeObj)(newSquidDocIdObj.docId);
|
|
162
|
+
this.saveDocument(newSquidDocId, { ...doc, ...docIdObj, __docId__: newSquidDocIdObj.docId });
|
|
163
|
+
}
|
|
164
|
+
compareSquidDocs(a, b, sortOrders) {
|
|
165
|
+
for (const { fieldName, asc } of sortOrders) {
|
|
166
|
+
const valueA = (0, object_1.getInPath)(a, fieldName);
|
|
167
|
+
const valueB = (0, object_1.getInPath)(b, fieldName);
|
|
168
|
+
const rc = (0, object_1.compareValues)(valueA, valueB);
|
|
169
|
+
if (rc !== 0) {
|
|
170
|
+
return asc ? rc : -rc;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return 0;
|
|
174
|
+
}
|
|
175
|
+
removeInternalProperties(doc) {
|
|
176
|
+
if (!doc)
|
|
177
|
+
return undefined;
|
|
178
|
+
const data = { ...doc };
|
|
179
|
+
delete data['__ts__'];
|
|
180
|
+
return data;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
exports.DocumentStore = DocumentStore;
|
|
184
|
+
//# sourceMappingURL=document-store.js.map
|