document-drive 4.0.0-staging.6 → 4.0.1
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/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/prisma/schema.prisma +2 -1
- package/dist/src/drive-document-model/gen/document-model.js +3 -3
- package/dist/src/drive-document-model/gen/document-model.js.map +1 -1
- package/dist/src/drive-document-model/gen/node/creators.d.ts +2 -6
- package/dist/src/drive-document-model/gen/node/creators.d.ts.map +1 -1
- package/dist/src/drive-document-model/gen/node/creators.js +1 -8
- package/dist/src/drive-document-model/gen/node/creators.js.map +1 -1
- package/dist/src/drive-document-model/gen/schema/types.d.ts +14 -1
- package/dist/src/drive-document-model/gen/schema/types.d.ts.map +1 -1
- package/dist/src/drive-document-model/gen/schema/zod.d.ts +5 -1
- package/dist/src/drive-document-model/gen/schema/zod.d.ts.map +1 -1
- package/dist/src/drive-document-model/gen/schema/zod.js +12 -0
- package/dist/src/drive-document-model/gen/schema/zod.js.map +1 -1
- package/dist/src/drive-document-model/gen/types.d.ts +4 -13
- package/dist/src/drive-document-model/gen/types.d.ts.map +1 -1
- package/dist/src/drive-document-model/gen/types.js.map +1 -1
- package/dist/src/drive-document-model/module.d.ts +1 -2
- package/dist/src/drive-document-model/module.d.ts.map +1 -1
- package/dist/src/drive-document-model/src/reducers/node.d.ts.map +1 -1
- package/dist/src/drive-document-model/src/reducers/node.js +25 -1
- package/dist/src/drive-document-model/src/reducers/node.js.map +1 -1
- package/dist/src/drive-document-model/src/tests/actions.test.js +23 -1
- package/dist/src/drive-document-model/src/tests/actions.test.js.map +1 -1
- package/dist/src/drive-document-model/src/tests/base.test.js +32 -0
- package/dist/src/drive-document-model/src/tests/base.test.js.map +1 -1
- package/dist/src/drive-document-model/src/tests/utils.test.js +37 -7
- package/dist/src/drive-document-model/src/tests/utils.test.js.map +1 -1
- package/dist/src/drive-document-model/src/utils.d.ts +8 -2
- package/dist/src/drive-document-model/src/utils.d.ts.map +1 -1
- package/dist/src/drive-document-model/src/utils.js +55 -6
- package/dist/src/drive-document-model/src/utils.js.map +1 -1
- package/dist/src/queue/base.d.ts +27 -6
- package/dist/src/queue/base.d.ts.map +1 -1
- package/dist/src/queue/base.js +203 -15
- package/dist/src/queue/base.js.map +1 -1
- package/dist/src/queue/redis.d.ts +27 -1
- package/dist/src/queue/redis.d.ts.map +1 -1
- package/dist/src/queue/redis.js +110 -122
- package/dist/src/queue/redis.js.map +1 -1
- package/dist/src/queue/types.d.ts +12 -18
- package/dist/src/queue/types.d.ts.map +1 -1
- package/dist/src/queue/types.js +0 -3
- package/dist/src/queue/types.js.map +1 -1
- package/dist/src/server/base-server.d.ts +11 -87
- package/dist/src/server/base-server.d.ts.map +1 -1
- package/dist/src/server/base-server.js +250 -549
- package/dist/src/server/base-server.js.map +1 -1
- package/dist/src/server/builder.js +2 -2
- package/dist/src/server/builder.js.map +1 -1
- package/dist/src/server/error.d.ts +3 -3
- package/dist/src/server/error.d.ts.map +1 -1
- package/dist/src/server/error.js +2 -2
- package/dist/src/server/error.js.map +1 -1
- package/dist/src/server/listener/listener-manager.d.ts +6 -5
- package/dist/src/server/listener/listener-manager.d.ts.map +1 -1
- package/dist/src/server/listener/listener-manager.js +79 -62
- package/dist/src/server/listener/listener-manager.js.map +1 -1
- package/dist/src/server/listener/transmitter/internal.d.ts +1 -1
- package/dist/src/server/listener/transmitter/internal.d.ts.map +1 -1
- package/dist/src/server/listener/transmitter/internal.js +12 -14
- package/dist/src/server/listener/transmitter/internal.js.map +1 -1
- package/dist/src/server/listener/transmitter/pull-responder.d.ts.map +1 -1
- package/dist/src/server/listener/transmitter/pull-responder.js +8 -14
- package/dist/src/server/listener/transmitter/pull-responder.js.map +1 -1
- package/dist/src/server/listener/transmitter/switchboard-push.d.ts.map +1 -1
- package/dist/src/server/listener/transmitter/switchboard-push.js +8 -13
- package/dist/src/server/listener/transmitter/switchboard-push.js.map +1 -1
- package/dist/src/server/sync-manager.d.ts +10 -8
- package/dist/src/server/sync-manager.d.ts.map +1 -1
- package/dist/src/server/sync-manager.js +147 -62
- package/dist/src/server/sync-manager.js.map +1 -1
- package/dist/src/server/types.d.ts +31 -114
- package/dist/src/server/types.d.ts.map +1 -1
- package/dist/src/server/types.js.map +1 -1
- package/dist/src/server/utils.d.ts +1 -10
- package/dist/src/server/utils.d.ts.map +1 -1
- package/dist/src/server/utils.js +0 -41
- package/dist/src/server/utils.js.map +1 -1
- package/dist/src/storage/browser.d.ts +2 -7
- package/dist/src/storage/browser.d.ts.map +1 -1
- package/dist/src/storage/browser.js +22 -80
- package/dist/src/storage/browser.js.map +1 -1
- package/dist/src/storage/filesystem.d.ts +2 -7
- package/dist/src/storage/filesystem.d.ts.map +1 -1
- package/dist/src/storage/filesystem.js +22 -79
- package/dist/src/storage/filesystem.js.map +1 -1
- package/dist/src/storage/memory.d.ts +2 -7
- package/dist/src/storage/memory.d.ts.map +1 -1
- package/dist/src/storage/memory.js +22 -76
- package/dist/src/storage/memory.js.map +1 -1
- package/dist/src/storage/prisma/client/edge.js +4 -5
- package/dist/src/storage/prisma/client/index-browser.js +1 -2
- package/dist/src/storage/prisma/client/index.d.ts +249 -58
- package/dist/src/storage/prisma/client/index.js +4 -5
- package/dist/src/storage/prisma/client/package.json +1 -1
- package/dist/src/storage/prisma/client/schema.prisma +3 -2
- package/dist/src/storage/prisma/client/wasm.js +1 -2
- package/dist/src/storage/prisma/prisma.d.ts +4 -9
- package/dist/src/storage/prisma/prisma.d.ts.map +1 -1
- package/dist/src/storage/prisma/prisma.js +51 -119
- package/dist/src/storage/prisma/prisma.js.map +1 -1
- package/dist/src/storage/types.d.ts +4 -43
- package/dist/src/storage/types.d.ts.map +1 -1
- package/dist/src/storage/utils.d.ts +0 -3
- package/dist/src/storage/utils.d.ts.map +1 -1
- package/dist/src/storage/utils.js +0 -14
- package/dist/src/storage/utils.js.map +1 -1
- package/dist/src/utils/gql-transformations.d.ts +5 -14
- package/dist/src/utils/gql-transformations.d.ts.map +1 -1
- package/dist/src/utils/gql-transformations.js +0 -1
- package/dist/src/utils/gql-transformations.js.map +1 -1
- package/dist/src/utils/misc.d.ts +0 -2
- package/dist/src/utils/misc.d.ts.map +1 -1
- package/dist/src/utils/misc.js +0 -4
- package/dist/src/utils/misc.js.map +1 -1
- package/dist/test/cache.test.d.ts +2 -0
- package/dist/test/cache.test.d.ts.map +1 -0
- package/dist/test/cache.test.js +281 -0
- package/dist/test/cache.test.js.map +1 -0
- package/dist/test/default-remote-drives.test.d.ts +2 -0
- package/dist/test/default-remote-drives.test.d.ts.map +1 -0
- package/dist/test/default-remote-drives.test.js +446 -0
- package/dist/test/default-remote-drives.test.js.map +1 -0
- package/dist/test/document-helpers/addUndo.test.d.ts +2 -0
- package/dist/test/document-helpers/addUndo.test.d.ts.map +1 -0
- package/dist/test/document-helpers/addUndo.test.js +120 -0
- package/dist/test/document-helpers/addUndo.test.js.map +1 -0
- package/dist/test/document-helpers/attachBranch.test.d.ts +2 -0
- package/dist/test/document-helpers/attachBranch.test.d.ts.map +1 -0
- package/dist/test/document-helpers/attachBranch.test.js +333 -0
- package/dist/test/document-helpers/attachBranch.test.js.map +1 -0
- package/dist/test/document-helpers/checkCleanedOperationsIntegrity.test.d.ts +2 -0
- package/dist/test/document-helpers/checkCleanedOperationsIntegrity.test.d.ts.map +1 -0
- package/dist/test/document-helpers/checkCleanedOperationsIntegrity.test.js +252 -0
- package/dist/test/document-helpers/checkCleanedOperationsIntegrity.test.js.map +1 -0
- package/dist/test/document-helpers/garbageCollect.test.d.ts +2 -0
- package/dist/test/document-helpers/garbageCollect.test.d.ts.map +1 -0
- package/dist/test/document-helpers/garbageCollect.test.js +136 -0
- package/dist/test/document-helpers/garbageCollect.test.js.map +1 -0
- package/dist/test/document-helpers/groupOperationsByScope.test.d.ts +2 -0
- package/dist/test/document-helpers/groupOperationsByScope.test.d.ts.map +1 -0
- package/dist/test/document-helpers/groupOperationsByScope.test.js +98 -0
- package/dist/test/document-helpers/groupOperationsByScope.test.js.map +1 -0
- package/dist/test/document-helpers/merge.test.d.ts +2 -0
- package/dist/test/document-helpers/merge.test.d.ts.map +1 -0
- package/dist/test/document-helpers/merge.test.js +757 -0
- package/dist/test/document-helpers/merge.test.js.map +1 -0
- package/dist/test/document-helpers/nextSkipNumber.test.d.ts +2 -0
- package/dist/test/document-helpers/nextSkipNumber.test.d.ts.map +1 -0
- package/dist/test/document-helpers/nextSkipNumber.test.js +123 -0
- package/dist/test/document-helpers/nextSkipNumber.test.js.map +1 -0
- package/dist/test/document-helpers/prepareOperations.test.d.ts +2 -0
- package/dist/test/document-helpers/prepareOperations.test.d.ts.map +1 -0
- package/dist/test/document-helpers/prepareOperations.test.js +304 -0
- package/dist/test/document-helpers/prepareOperations.test.js.map +1 -0
- package/dist/test/document-helpers/removeExistingOperations.test.d.ts +2 -0
- package/dist/test/document-helpers/removeExistingOperations.test.d.ts.map +1 -0
- package/dist/test/document-helpers/removeExistingOperations.test.js +150 -0
- package/dist/test/document-helpers/removeExistingOperations.test.js.map +1 -0
- package/dist/test/document-helpers/reshuffleByTimestamp.test.d.ts +2 -0
- package/dist/test/document-helpers/reshuffleByTimestamp.test.d.ts.map +1 -0
- package/dist/test/document-helpers/reshuffleByTimestamp.test.js +148 -0
- package/dist/test/document-helpers/reshuffleByTimestamp.test.js.map +1 -0
- package/dist/test/document-helpers/reshuffleByTimestampAndIndex.test.d.ts +2 -0
- package/dist/test/document-helpers/reshuffleByTimestampAndIndex.test.d.ts.map +1 -0
- package/dist/test/document-helpers/reshuffleByTimestampAndIndex.test.js +200 -0
- package/dist/test/document-helpers/reshuffleByTimestampAndIndex.test.js.map +1 -0
- package/dist/test/document-helpers/sortOperations.test.d.ts +2 -0
- package/dist/test/document-helpers/sortOperations.test.d.ts.map +1 -0
- package/dist/test/document-helpers/sortOperations.test.js +101 -0
- package/dist/test/document-helpers/sortOperations.test.js.map +1 -0
- package/dist/test/document-helpers/split.test.d.ts +2 -0
- package/dist/test/document-helpers/split.test.d.ts.map +1 -0
- package/dist/test/document-helpers/split.test.js +121 -0
- package/dist/test/document-helpers/split.test.js.map +1 -0
- package/dist/test/document-helpers/utils.d.ts +8 -0
- package/dist/test/document-helpers/utils.d.ts.map +1 -0
- package/dist/test/document-helpers/utils.js +22 -0
- package/dist/test/document-helpers/utils.js.map +1 -0
- package/dist/test/drive-operations.test.d.ts +2 -0
- package/dist/test/drive-operations.test.d.ts.map +1 -0
- package/dist/test/drive-operations.test.js +145 -0
- package/dist/test/drive-operations.test.js.map +1 -0
- package/dist/test/graphql.test.d.ts +2 -0
- package/dist/test/graphql.test.d.ts.map +1 -0
- package/dist/test/graphql.test.js +10 -0
- package/dist/test/graphql.test.js.map +1 -0
- package/dist/test/internal-listener.test.d.ts +2 -0
- package/dist/test/internal-listener.test.d.ts.map +1 -0
- package/dist/test/internal-listener.test.js +277 -0
- package/dist/test/internal-listener.test.js.map +1 -0
- package/dist/test/queue.test.d.ts +2 -0
- package/dist/test/queue.test.d.ts.map +1 -0
- package/dist/test/queue.test.js +338 -0
- package/dist/test/queue.test.js.map +1 -0
- package/dist/test/read-mode.test.d.ts +2 -0
- package/dist/test/read-mode.test.d.ts.map +1 -0
- package/dist/test/read-mode.test.js +578 -0
- package/dist/test/read-mode.test.js.map +1 -0
- package/dist/test/server/driveOperationsConflictResolution.test.d.ts +2 -0
- package/dist/test/server/driveOperationsConflictResolution.test.d.ts.map +1 -0
- package/dist/test/server/driveOperationsConflictResolution.test.js +460 -0
- package/dist/test/server/driveOperationsConflictResolution.test.js.map +1 -0
- package/dist/test/server/mergeOperations.test.d.ts +2 -0
- package/dist/test/server/mergeOperations.test.d.ts.map +1 -0
- package/dist/test/server/mergeOperations.test.js +107 -0
- package/dist/test/server/mergeOperations.test.js.map +1 -0
- package/dist/test/server/processOperations.test.d.ts +2 -0
- package/dist/test/server/processOperations.test.d.ts.map +1 -0
- package/dist/test/server/processOperations.test.js +380 -0
- package/dist/test/server/processOperations.test.js.map +1 -0
- package/dist/test/server.test.d.ts +2 -0
- package/dist/test/server.test.d.ts.map +1 -0
- package/dist/test/server.test.js +899 -0
- package/dist/test/server.test.js.map +1 -0
- package/dist/test/signature-migration.test.d.ts +2 -0
- package/dist/test/signature-migration.test.d.ts.map +1 -0
- package/dist/test/signature-migration.test.js +239 -0
- package/dist/test/signature-migration.test.js.map +1 -0
- package/dist/test/storage.test.d.ts +2 -0
- package/dist/test/storage.test.d.ts.map +1 -0
- package/dist/test/storage.test.js +523 -0
- package/dist/test/storage.test.js.map +1 -0
- package/dist/test/utils.d.ts +48 -0
- package/dist/test/utils.d.ts.map +1 -0
- package/dist/test/utils.js +133 -0
- package/dist/test/utils.js.map +1 -0
- package/dist/test/utils.test.d.ts +2 -0
- package/dist/test/utils.test.d.ts.map +1 -0
- package/dist/test/utils.test.js +89 -0
- package/dist/test/utils.test.js.map +1 -0
- package/dist/test/vitest-setup.d.ts +2 -0
- package/dist/test/vitest-setup.d.ts.map +1 -0
- package/dist/test/vitest-setup.js +5 -0
- package/dist/test/vitest-setup.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +27 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +4 -4
- package/dist/src/queue/event.d.ts +0 -42
- package/dist/src/queue/event.d.ts.map +0 -1
- package/dist/src/queue/event.js +0 -222
- package/dist/src/queue/event.js.map +0 -1
- package/dist/src/server/sync-unit-map.d.ts +0 -137
- package/dist/src/server/sync-unit-map.d.ts.map +0 -1
- package/dist/src/server/sync-unit-map.js +0 -234
- package/dist/src/server/sync-unit-map.js.map +0 -1
- package/dist/tsconfig.lib.tsbuildinfo +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitest.config.d.ts","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":";AAGA,wBAuBI"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { loadEnv } from "vite";
|
|
2
|
+
import { defaultExclude, defineConfig } from "vitest/config";
|
|
3
|
+
export default defineConfig(({ mode }) => ({
|
|
4
|
+
test: {
|
|
5
|
+
environment: "node",
|
|
6
|
+
env: loadEnv(mode, process.cwd(), ""),
|
|
7
|
+
testTimeout: 5000,
|
|
8
|
+
server: {
|
|
9
|
+
deps: {
|
|
10
|
+
inline: ["document-model-libs"],
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
setupFiles: "./test/vitest-setup.ts",
|
|
14
|
+
poolOptions: {
|
|
15
|
+
forks: {
|
|
16
|
+
singleFork: true,
|
|
17
|
+
isolate: true,
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
include: ["test/**/*.test.ts"],
|
|
21
|
+
exclude: [...defaultExclude, "test/flaky/**", "test/test-storage/**"],
|
|
22
|
+
alias: {
|
|
23
|
+
"#": new URL("./src/", import.meta.url).pathname,
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
}));
|
|
27
|
+
//# sourceMappingURL=vitest.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitest.config.js","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7D,eAAe,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,EAAE;QACJ,WAAW,EAAE,MAAM;QACnB,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC;QACrC,WAAW,EAAE,IAAI;QACjB,MAAM,EAAE;YACN,IAAI,EAAE;gBACJ,MAAM,EAAE,CAAC,qBAAqB,CAAC;aAChC;SACF;QACD,UAAU,EAAE,wBAAwB;QACpC,WAAW,EAAE;YACX,KAAK,EAAE;gBACL,UAAU,EAAE,IAAI;gBAChB,OAAO,EAAE,IAAI;aACd;SACF;QACD,OAAO,EAAE,CAAC,mBAAmB,CAAC;QAC9B,OAAO,EAAE,CAAC,GAAG,cAAc,EAAE,eAAe,EAAE,sBAAsB,CAAC;QACrE,KAAK,EAAE;YACL,GAAG,EAAE,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ;SACjD;KACF;CACF,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "document-drive",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.1",
|
|
4
4
|
"license": "AGPL-3.0-only",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -48,9 +48,9 @@
|
|
|
48
48
|
"sqlite3": "^5.1.7",
|
|
49
49
|
"uuid": "^11.0.5",
|
|
50
50
|
"zod": "^3.24.3",
|
|
51
|
-
"@powerhousedao/
|
|
52
|
-
"@powerhousedao/
|
|
53
|
-
"document-model": "4.0.
|
|
51
|
+
"@powerhousedao/config": "4.0.1",
|
|
52
|
+
"@powerhousedao/codegen": "4.0.1",
|
|
53
|
+
"document-model": "4.0.1"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@powerhousedao/analytics-engine-core": "^0.5.0",
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { type IOperationResult } from "#server/types";
|
|
2
|
-
import { type OperationScope } from "document-model";
|
|
3
|
-
import { type Unsubscribe } from "nanoevents";
|
|
4
|
-
import { type IJob, type IJobQueue, type IQueueManager, type IServerDelegate, type Job, type JobId, type QueueEvents } from "./types.js";
|
|
5
|
-
interface EnqueuedJob {
|
|
6
|
-
jobId: string;
|
|
7
|
-
documentId: string;
|
|
8
|
-
scope: OperationScope;
|
|
9
|
-
timestamp: string;
|
|
10
|
-
}
|
|
11
|
-
export declare class EventQueueManager implements IQueueManager {
|
|
12
|
-
protected logger: import("#utils/logger").ILogger;
|
|
13
|
-
protected emitter: import("nanoevents").Emitter<QueueEvents>;
|
|
14
|
-
protected queues: Map<string, Map<OperationScope, IJobQueue>>;
|
|
15
|
-
protected globalQueue: EnqueuedJob[];
|
|
16
|
-
protected isFindingJob: boolean;
|
|
17
|
-
protected maxWorkers: number;
|
|
18
|
-
protected workers: number;
|
|
19
|
-
protected runningJobs: IJob<Job>[];
|
|
20
|
-
protected timeout: number;
|
|
21
|
-
protected delegate: IServerDelegate | undefined;
|
|
22
|
-
protected onError: ((error: Error) => void) | undefined;
|
|
23
|
-
constructor(maxWorkers?: number, timeout?: number);
|
|
24
|
-
init(delegate: IServerDelegate, onError: (error: Error) => void): Promise<void>;
|
|
25
|
-
addJob(job: Job): Promise<JobId>;
|
|
26
|
-
getQueue(documentId: string, scope: OperationScope): IJobQueue;
|
|
27
|
-
getDocumentQueues(documentId: string): Map<OperationScope, IJobQueue> | undefined;
|
|
28
|
-
removeQueue(documentId: string, scope: OperationScope): boolean | undefined;
|
|
29
|
-
removeDocumentQueues(documentId: string): void;
|
|
30
|
-
protected removeJob(job: IJob<Job>): void;
|
|
31
|
-
protected handleJobCompleted(job: IJob<Job>, result: IOperationResult): Promise<void>;
|
|
32
|
-
protected isBusy(): boolean;
|
|
33
|
-
protected processNextJob(): Promise<void>;
|
|
34
|
-
protected findNextJob(): Promise<{
|
|
35
|
-
queue: IJobQueue;
|
|
36
|
-
job: IJob<Job>;
|
|
37
|
-
} | undefined>;
|
|
38
|
-
protected emit<K extends keyof QueueEvents>(event: K, ...args: Parameters<QueueEvents[K]>): void;
|
|
39
|
-
on<K extends keyof QueueEvents>(event: K, cb: QueueEvents[K]): Unsubscribe;
|
|
40
|
-
}
|
|
41
|
-
export {};
|
|
42
|
-
//# sourceMappingURL=event.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../../src/queue/event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAEhE,OAAO,EACL,KAAK,IAAI,EACT,KAAK,SAAS,EACd,KAAK,aAAa,EAElB,KAAK,eAAe,EAEpB,KAAK,GAAG,EACR,KAAK,KAAK,EACV,KAAK,WAAW,EACjB,MAAM,YAAY,CAAC;AAIpB,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,cAAc,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,iBAAkB,YAAW,aAAa;IACrD,SAAS,CAAC,MAAM,kCAAsC;IACtD,SAAS,CAAC,OAAO,4CAAmC;IACpD,SAAS,CAAC,MAAM,8CAAoD;IACpE,SAAS,CAAC,WAAW,gBAA4B;IACjD,SAAS,CAAC,YAAY,UAAS;IAC/B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,WAAW,cAA0B;IAC/C,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,QAAQ,EAAE,eAAe,GAAG,SAAS,CAAC;IAChD,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;gBAE5C,UAAU,SAAI,EAAE,OAAO,SAAI;IAMjC,IAAI,CACR,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAC9B,OAAO,CAAC,IAAI,CAAC;IAyDV,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC;IA8CtC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc;IAgBlD,iBAAiB,CAAC,UAAU,EAAE,MAAM;IAIpC,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc;IASrD,oBAAoB,CAAC,UAAU,EAAE,MAAM;IAOvC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;cAkBlB,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,gBAAgB;IAI3E,SAAS,CAAC,MAAM;cAIA,cAAc;cA0Dd,WAAW,IAAI,OAAO,CACpC;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;KAAE,GAAG,SAAS,CACjD;IAuBD,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,MAAM,WAAW,EACxC,KAAK,EAAE,CAAC,EACR,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAK9B,EAAE,CAAC,CAAC,SAAS,MAAM,WAAW,EACnC,KAAK,EAAE,CAAC,EACR,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,GACjB,WAAW;CAGf"}
|
package/dist/src/queue/event.js
DELETED
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
import { childLogger, logger } from "#utils/logger";
|
|
2
|
-
import { generateId } from "document-model";
|
|
3
|
-
import { createNanoEvents } from "nanoevents";
|
|
4
|
-
import { MemoryQueue } from "./base.js";
|
|
5
|
-
import { isDocumentJob, isOperationJob, } from "./types.js";
|
|
6
|
-
export class EventQueueManager {
|
|
7
|
-
logger = childLogger(["EventQueueManager"]);
|
|
8
|
-
emitter = createNanoEvents();
|
|
9
|
-
queues = new Map();
|
|
10
|
-
globalQueue = new Array();
|
|
11
|
-
isFindingJob = false;
|
|
12
|
-
maxWorkers;
|
|
13
|
-
workers;
|
|
14
|
-
runningJobs = new Array();
|
|
15
|
-
timeout;
|
|
16
|
-
delegate;
|
|
17
|
-
onError;
|
|
18
|
-
constructor(maxWorkers = 1, timeout = 0) {
|
|
19
|
-
this.maxWorkers = maxWorkers;
|
|
20
|
-
this.workers = 0;
|
|
21
|
-
this.timeout = timeout;
|
|
22
|
-
}
|
|
23
|
-
async init(delegate, onError) {
|
|
24
|
-
this.delegate = delegate;
|
|
25
|
-
this.onError = onError;
|
|
26
|
-
function wrapErrorHandler(method) {
|
|
27
|
-
return (async (...args) => {
|
|
28
|
-
try {
|
|
29
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
30
|
-
await method(...args);
|
|
31
|
-
}
|
|
32
|
-
catch (error) {
|
|
33
|
-
throw error instanceof Error
|
|
34
|
-
? error
|
|
35
|
-
: new Error(JSON.stringify(error));
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
this.emitter.on("jobAdded", wrapErrorHandler(async (job) => {
|
|
40
|
-
this.logger.verbose("Added job", job);
|
|
41
|
-
await this.processNextJob();
|
|
42
|
-
}));
|
|
43
|
-
this.emitter.on("jobStarted", wrapErrorHandler(async (job) => {
|
|
44
|
-
this.logger.verbose("Started job", job.jobId);
|
|
45
|
-
this.runningJobs.push(job);
|
|
46
|
-
await this.processNextJob();
|
|
47
|
-
}));
|
|
48
|
-
this.emitter.on("jobCompleted", wrapErrorHandler(async (job, result) => {
|
|
49
|
-
this.logger.verbose("Completed job", job.jobId);
|
|
50
|
-
await this.handleJobCompleted(job, result);
|
|
51
|
-
}));
|
|
52
|
-
this.emitter.on("jobFailed", wrapErrorHandler(async (job, error) => {
|
|
53
|
-
this.logger.error("Failed job", job, error);
|
|
54
|
-
this.removeJob(job);
|
|
55
|
-
onError(error);
|
|
56
|
-
await this.processNextJob();
|
|
57
|
-
}));
|
|
58
|
-
return Promise.resolve();
|
|
59
|
-
}
|
|
60
|
-
async addJob(job) {
|
|
61
|
-
if (!this.delegate) {
|
|
62
|
-
throw new Error("No server delegate defined");
|
|
63
|
-
}
|
|
64
|
-
const jobId = generateId();
|
|
65
|
-
const documentJob = isDocumentJob(job);
|
|
66
|
-
const jobActions = isDocumentJob(job)
|
|
67
|
-
? undefined
|
|
68
|
-
: isOperationJob(job)
|
|
69
|
-
? job.operations
|
|
70
|
-
: job.actions;
|
|
71
|
-
if (!documentJob && !jobActions?.length) {
|
|
72
|
-
throw new Error("Job has no operations or actions: " + JSON.stringify(job));
|
|
73
|
-
}
|
|
74
|
-
const scope = jobActions?.at(0)?.scope ?? "global";
|
|
75
|
-
if (jobActions?.find((j) => j.scope !== scope)) {
|
|
76
|
-
throw new Error("Job has actions with different scopes");
|
|
77
|
-
}
|
|
78
|
-
const queue = this.getQueue(job.documentId, scope);
|
|
79
|
-
// checks if the job is for a document:scope that has been deleted
|
|
80
|
-
if (!isDocumentJob(job) && (await queue.isDeleted())) {
|
|
81
|
-
throw new Error("Job has operations for deleted document");
|
|
82
|
-
}
|
|
83
|
-
// TODO should create document job be a dependency of all jobs to the same document?
|
|
84
|
-
const jobValue = Object.freeze({ jobId, ...job });
|
|
85
|
-
await queue.addJob(jobValue);
|
|
86
|
-
this.globalQueue.push({
|
|
87
|
-
jobId,
|
|
88
|
-
documentId: job.documentId,
|
|
89
|
-
scope,
|
|
90
|
-
timestamp: new Date().toUTCString(),
|
|
91
|
-
});
|
|
92
|
-
this.emit("jobAdded", jobValue);
|
|
93
|
-
return jobId;
|
|
94
|
-
}
|
|
95
|
-
getQueue(documentId, scope) {
|
|
96
|
-
let docQueue = this.queues.get(documentId);
|
|
97
|
-
if (!docQueue) {
|
|
98
|
-
docQueue = new Map();
|
|
99
|
-
this.queues.set(documentId, docQueue);
|
|
100
|
-
}
|
|
101
|
-
let scopeQueue = docQueue.get(scope);
|
|
102
|
-
if (!scopeQueue) {
|
|
103
|
-
scopeQueue = new MemoryQueue(scope);
|
|
104
|
-
docQueue.set(scope, scopeQueue);
|
|
105
|
-
}
|
|
106
|
-
return scopeQueue;
|
|
107
|
-
}
|
|
108
|
-
getDocumentQueues(documentId) {
|
|
109
|
-
return this.queues.get(documentId);
|
|
110
|
-
}
|
|
111
|
-
removeQueue(documentId, scope) {
|
|
112
|
-
const docQueues = this.queues.get(documentId);
|
|
113
|
-
const deleted = docQueues?.delete(scope);
|
|
114
|
-
if (deleted) {
|
|
115
|
-
this.emit("queueRemoved", { documentId, scope });
|
|
116
|
-
}
|
|
117
|
-
return deleted;
|
|
118
|
-
}
|
|
119
|
-
removeDocumentQueues(documentId) {
|
|
120
|
-
const docQueues = this.queues.get(documentId);
|
|
121
|
-
docQueues?.keys().forEach((scope) => {
|
|
122
|
-
this.removeQueue(documentId, scope);
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
removeJob(job) {
|
|
126
|
-
const indexRunning = this.runningJobs.findIndex((j) => j.jobId === job.jobId);
|
|
127
|
-
if (indexRunning === -1) {
|
|
128
|
-
this.logger.warn("Running job not found", job.jobId);
|
|
129
|
-
}
|
|
130
|
-
this.runningJobs.splice(indexRunning, 1);
|
|
131
|
-
const indexGlobal = this.globalQueue.findIndex((j) => j.jobId === job.jobId);
|
|
132
|
-
if (indexGlobal === -1) {
|
|
133
|
-
this.logger.warn("Job not found on global queue", job.jobId);
|
|
134
|
-
}
|
|
135
|
-
this.globalQueue.splice(indexGlobal, 1);
|
|
136
|
-
}
|
|
137
|
-
async handleJobCompleted(job, result) {
|
|
138
|
-
this.removeJob(job);
|
|
139
|
-
return this.processNextJob();
|
|
140
|
-
}
|
|
141
|
-
isBusy() {
|
|
142
|
-
return this.workers >= this.maxWorkers;
|
|
143
|
-
}
|
|
144
|
-
async processNextJob() {
|
|
145
|
-
// if there is already a worker looking for a job then waits for it to finish
|
|
146
|
-
if (this.isFindingJob) {
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
if (!this.delegate) {
|
|
150
|
-
throw new Error("No server delegate defined");
|
|
151
|
-
}
|
|
152
|
-
// returns if there are no jobs available
|
|
153
|
-
if (this.globalQueue.length === 0) {
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
// returns if there are no workers available
|
|
157
|
-
if (this.isBusy()) {
|
|
158
|
-
return;
|
|
159
|
-
}
|
|
160
|
-
this.isFindingJob = true;
|
|
161
|
-
this.workers++;
|
|
162
|
-
let queue;
|
|
163
|
-
let job;
|
|
164
|
-
try {
|
|
165
|
-
const queueJob = await this.findNextJob();
|
|
166
|
-
queue = queueJob?.queue;
|
|
167
|
-
job = queueJob?.job;
|
|
168
|
-
}
|
|
169
|
-
catch (error) {
|
|
170
|
-
logger.error("Error finding next job", error);
|
|
171
|
-
}
|
|
172
|
-
if (!queue || !job) {
|
|
173
|
-
this.workers--;
|
|
174
|
-
this.isFindingJob = false;
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
try {
|
|
178
|
-
await queue.setRunning(true);
|
|
179
|
-
this.isFindingJob = false;
|
|
180
|
-
this.emit("jobStarted", job);
|
|
181
|
-
const result = await this.delegate.processJob(job);
|
|
182
|
-
this.workers--;
|
|
183
|
-
await queue.setRunning(false);
|
|
184
|
-
this.emit("jobCompleted", job, result);
|
|
185
|
-
}
|
|
186
|
-
catch (error) {
|
|
187
|
-
logger.error("Job failed", error);
|
|
188
|
-
this.workers--;
|
|
189
|
-
this.isFindingJob = false;
|
|
190
|
-
await queue.setRunning(false);
|
|
191
|
-
this.emit("jobFailed", job, error instanceof Error ? error : new Error(JSON.stringify(error)));
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
async findNextJob() {
|
|
195
|
-
const skippedQueues = new Set();
|
|
196
|
-
for (const job of this.globalQueue) {
|
|
197
|
-
const queue = this.getQueue(job.documentId, job.scope);
|
|
198
|
-
const queueId = queue.getId();
|
|
199
|
-
if (skippedQueues.has(queueId)) {
|
|
200
|
-
continue;
|
|
201
|
-
}
|
|
202
|
-
if (await queue.isBlocked()) {
|
|
203
|
-
skippedQueues.add(queue.getId());
|
|
204
|
-
continue;
|
|
205
|
-
}
|
|
206
|
-
const queueJob = await queue.getNextJob();
|
|
207
|
-
if (queueJob?.jobId !== job.jobId) {
|
|
208
|
-
logger.warn("Queue has different job waiting to be picked up"); // TODO ensure this is not possible
|
|
209
|
-
logger.error(job, queueJob);
|
|
210
|
-
continue;
|
|
211
|
-
}
|
|
212
|
-
return { queue, job: queueJob };
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
emit(event, ...args) {
|
|
216
|
-
this.emitter.emit(event, ...args);
|
|
217
|
-
}
|
|
218
|
-
on(event, cb) {
|
|
219
|
-
return this.emitter.on(event, cb);
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
//# sourceMappingURL=event.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"event.js","sourceRoot":"","sources":["../../../src/queue/event.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
import { type SynchronizationUnitId } from "./types.js";
|
|
2
|
-
/**
|
|
3
|
-
* Interface for a specialized Map implementation that manages synchronization units.
|
|
4
|
-
* Each unit is identified by a SynchronizationUnitId which consists of documentId, scope, and branch.
|
|
5
|
-
*/
|
|
6
|
-
export interface ISyncUnitMap<Value> {
|
|
7
|
-
set(id: SynchronizationUnitId, state: Value): this;
|
|
8
|
-
get(id: SynchronizationUnitId): Value | undefined;
|
|
9
|
-
has(id: SynchronizationUnitId): boolean;
|
|
10
|
-
delete(id: SynchronizationUnitId): boolean;
|
|
11
|
-
clear(): void;
|
|
12
|
-
get size(): number;
|
|
13
|
-
keys(): IterableIterator<SynchronizationUnitId>;
|
|
14
|
-
values(): IterableIterator<Value>;
|
|
15
|
-
entries(): IterableIterator<[SynchronizationUnitId, Value]>;
|
|
16
|
-
[Symbol.iterator](): IterableIterator<[SynchronizationUnitId, Value]>;
|
|
17
|
-
forEach(callbackfn: (value: Value, key: SynchronizationUnitId, map: ISyncUnitMap<Value>) => void, thisArg?: any): void;
|
|
18
|
-
deleteByDocumentId(documentId: string): void;
|
|
19
|
-
deleteByDocumentIdAndScope(documentId: string, scope: string): void;
|
|
20
|
-
getAllByDocumentId(documentId: string): [SynchronizationUnitId, Value][];
|
|
21
|
-
getAllByDocumentIdAndScope(documentId: string, scope: string): [SynchronizationUnitId, Value][];
|
|
22
|
-
}
|
|
23
|
-
/** Separator character used to join synchronization unit key parts */
|
|
24
|
-
type SyncUnitKeySeparator = "|";
|
|
25
|
-
/**
|
|
26
|
-
* Internal key format used to store synchronization units.
|
|
27
|
-
* Composed of documentId, scope, and branch joined by the separator.
|
|
28
|
-
*/
|
|
29
|
-
type SyncUnitKey = `${SynchronizationUnitId["documentId"]}${SyncUnitKeySeparator}${SynchronizationUnitId["scope"]}${SyncUnitKeySeparator}${SynchronizationUnitId["branch"]}`;
|
|
30
|
-
/**
|
|
31
|
-
* A specialized Map implementation for managing synchronization units that uses a "documentId - scope - branch" tuple as key.
|
|
32
|
-
* It provides methods to store, retrieve, and delete synchronization units of a certain documentId, optionally a scope and a branch.
|
|
33
|
-
* The implementation uses an internal Map with string keys created by combining documentId, scope, and branch with a separator character.
|
|
34
|
-
*/
|
|
35
|
-
export declare class SyncUnitMap<Value> implements ISyncUnitMap<Value> {
|
|
36
|
-
/** Internal storage using concatenated string keys */
|
|
37
|
-
private internalMap;
|
|
38
|
-
/** Character used to separate key components */
|
|
39
|
-
static keySeparator: SyncUnitKeySeparator;
|
|
40
|
-
/**
|
|
41
|
-
* Escapes the separator character in a string by prefixing it with a backslash
|
|
42
|
-
* @param str String to escape
|
|
43
|
-
*/
|
|
44
|
-
private static escape;
|
|
45
|
-
/**
|
|
46
|
-
* Unescapes the separator character in a string by removing the prefix backslash
|
|
47
|
-
* @param str String to unescape
|
|
48
|
-
*/
|
|
49
|
-
private static unescape;
|
|
50
|
-
/**
|
|
51
|
-
* Creates a composite key from a SynchronizationUnitId
|
|
52
|
-
* Escapes any separator characters in the components
|
|
53
|
-
* @param id The synchronization unit identifier
|
|
54
|
-
* @returns A string key combining documentId, scope, and branch
|
|
55
|
-
*/
|
|
56
|
-
static buildKey(id: SynchronizationUnitId): SyncUnitKey;
|
|
57
|
-
/**
|
|
58
|
-
* Parses a composite key back into a SynchronizationUnitId
|
|
59
|
-
* Unescapes any separator characters in the components
|
|
60
|
-
* @param key The composite key string
|
|
61
|
-
* @returns The parsed synchronization unit identifier
|
|
62
|
-
*/
|
|
63
|
-
static parseKey(key: SyncUnitKey): SynchronizationUnitId;
|
|
64
|
-
/**
|
|
65
|
-
* Stores a value with the given synchronization unit identifier
|
|
66
|
-
* @throws Error if any part of the id contains the separator character
|
|
67
|
-
*/
|
|
68
|
-
set(id: SynchronizationUnitId, state: Value): this;
|
|
69
|
-
/** Retrieves a value by its synchronization unit identifier */
|
|
70
|
-
get(id: SynchronizationUnitId): Value | undefined;
|
|
71
|
-
/** Checks if a value exists for the given synchronization unit identifier */
|
|
72
|
-
has(id: SynchronizationUnitId): boolean;
|
|
73
|
-
/** Removes a value by its synchronization unit identifier */
|
|
74
|
-
delete(id: SynchronizationUnitId): boolean;
|
|
75
|
-
/** Removes all entries from the map */
|
|
76
|
-
clear(): void;
|
|
77
|
-
/** Returns the number of entries in the map */
|
|
78
|
-
get size(): number;
|
|
79
|
-
/**
|
|
80
|
-
* Returns an iterator of synchronization unit identifiers
|
|
81
|
-
* @param filter Optional filter by documentId and scope
|
|
82
|
-
*/
|
|
83
|
-
keys(filter?: {
|
|
84
|
-
documentId: string;
|
|
85
|
-
scope?: string;
|
|
86
|
-
} | undefined): IterableIterator<SynchronizationUnitId>;
|
|
87
|
-
/**
|
|
88
|
-
* Returns an iterator of stored values
|
|
89
|
-
* @param filter Optional filter by documentId and scope
|
|
90
|
-
*/
|
|
91
|
-
values(filter?: {
|
|
92
|
-
documentId: string;
|
|
93
|
-
scope?: string;
|
|
94
|
-
} | undefined): IterableIterator<Value>;
|
|
95
|
-
/**
|
|
96
|
-
* Returns an iterator of [id, value] pairs
|
|
97
|
-
* @param filter Optional filter by documentId and scope
|
|
98
|
-
*/
|
|
99
|
-
entries(filter?: {
|
|
100
|
-
documentId: string;
|
|
101
|
-
scope?: string;
|
|
102
|
-
} | undefined): IterableIterator<[SynchronizationUnitId, Value]>;
|
|
103
|
-
/** Makes the map iterable */
|
|
104
|
-
[Symbol.iterator](): IterableIterator<[SynchronizationUnitId, Value]>;
|
|
105
|
-
/**
|
|
106
|
-
* Executes a callback for each entry in the map
|
|
107
|
-
* @param callbackfn Function to execute for each entry
|
|
108
|
-
* @param thisArg Value to use as 'this' in the callback
|
|
109
|
-
*/
|
|
110
|
-
forEach(callbackfn: (value: Value, key: SynchronizationUnitId, map: ISyncUnitMap<Value>) => void, thisArg?: any): void;
|
|
111
|
-
/**
|
|
112
|
-
* Removes all entries associated with a specific document
|
|
113
|
-
* @param documentId The document identifier
|
|
114
|
-
*/
|
|
115
|
-
deleteByDocumentId(documentId: string): void;
|
|
116
|
-
/**
|
|
117
|
-
* Removes all entries for a specific document and scope combination
|
|
118
|
-
* @param documentId The document identifier
|
|
119
|
-
* @param scope The scope identifier
|
|
120
|
-
*/
|
|
121
|
-
deleteByDocumentIdAndScope(documentId: string, scope: string): void;
|
|
122
|
-
/**
|
|
123
|
-
* Retrieves all entries associated with a specific document
|
|
124
|
-
* @param documentId The document identifier
|
|
125
|
-
* @returns Array of [id, value] pairs
|
|
126
|
-
*/
|
|
127
|
-
getAllByDocumentId(documentId: string): [SynchronizationUnitId, Value][];
|
|
128
|
-
/**
|
|
129
|
-
* Retrieves all entries for a specific document and scope combination
|
|
130
|
-
* @param documentId The document identifier
|
|
131
|
-
* @param scope The scope identifier
|
|
132
|
-
* @returns Array of [id, value] pairs
|
|
133
|
-
*/
|
|
134
|
-
getAllByDocumentIdAndScope(documentId: string, scope: string): [SynchronizationUnitId, Value][];
|
|
135
|
-
}
|
|
136
|
-
export {};
|
|
137
|
-
//# sourceMappingURL=sync-unit-map.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync-unit-map.d.ts","sourceRoot":"","sources":["../../../src/server/sync-unit-map.ts"],"names":[],"mappings":"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"}
|