@powerhousedao/reactor 5.1.0-staging.0 → 5.2.0-dev.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/src/actions/index.d.ts +24 -0
- package/dist/src/actions/index.d.ts.map +1 -0
- package/dist/src/actions/index.js +76 -0
- package/dist/src/actions/index.js.map +1 -0
- package/dist/src/cache/document-meta-cache-types.d.ts +114 -0
- package/dist/src/cache/document-meta-cache-types.d.ts.map +1 -0
- package/dist/src/cache/document-meta-cache-types.js +2 -0
- package/dist/src/cache/document-meta-cache-types.js.map +1 -0
- package/dist/src/cache/document-meta-cache.d.ts +30 -0
- package/dist/src/cache/document-meta-cache.d.ts.map +1 -0
- package/dist/src/cache/document-meta-cache.js +128 -0
- package/dist/src/cache/document-meta-cache.js.map +1 -0
- package/dist/src/cache/kysely-operation-index.d.ts +4 -2
- package/dist/src/cache/kysely-operation-index.d.ts.map +1 -1
- package/dist/src/cache/kysely-operation-index.js +67 -24
- package/dist/src/cache/kysely-operation-index.js.map +1 -1
- package/dist/src/cache/kysely-write-cache.d.ts.map +1 -1
- package/dist/src/cache/kysely-write-cache.js +3 -2
- package/dist/src/cache/kysely-write-cache.js.map +1 -1
- package/dist/src/cache/operation-index-types.d.ts +4 -3
- package/dist/src/cache/operation-index-types.d.ts.map +1 -1
- package/dist/src/cache/operation-index-types.js.map +1 -1
- package/dist/src/client/reactor-client.d.ts +16 -4
- package/dist/src/client/reactor-client.d.ts.map +1 -1
- package/dist/src/client/reactor-client.js +122 -5
- package/dist/src/client/reactor-client.js.map +1 -1
- package/dist/src/client/types.d.ts +22 -3
- package/dist/src/client/types.d.ts.map +1 -1
- package/dist/src/core/reactor-builder.d.ts +10 -9
- package/dist/src/core/reactor-builder.d.ts.map +1 -1
- package/dist/src/core/reactor-builder.js +73 -17
- package/dist/src/core/reactor-builder.js.map +1 -1
- package/dist/src/core/reactor-client-builder.d.ts +10 -1
- package/dist/src/core/reactor-client-builder.d.ts.map +1 -1
- package/dist/src/core/reactor-client-builder.js +16 -1
- package/dist/src/core/reactor-client-builder.js.map +1 -1
- package/dist/src/core/reactor.d.ts +11 -10
- package/dist/src/core/reactor.d.ts.map +1 -1
- package/dist/src/core/reactor.js +78 -91
- package/dist/src/core/reactor.js.map +1 -1
- package/dist/src/core/types.d.ts +22 -7
- package/dist/src/core/types.d.ts.map +1 -1
- package/dist/src/core/utils.d.ts +1 -2
- package/dist/src/core/utils.d.ts.map +1 -1
- package/dist/src/core/utils.js +2 -2
- package/dist/src/core/utils.js.map +1 -1
- package/dist/src/events/types.d.ts +1 -0
- package/dist/src/events/types.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor-manager.d.ts +3 -1
- package/dist/src/executor/simple-job-executor-manager.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor-manager.js +10 -7
- package/dist/src/executor/simple-job-executor-manager.js.map +1 -1
- package/dist/src/executor/simple-job-executor.d.ts +17 -3
- package/dist/src/executor/simple-job-executor.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor.js +329 -221
- package/dist/src/executor/simple-job-executor.js.map +1 -1
- package/dist/src/executor/types.d.ts +2 -0
- package/dist/src/executor/types.d.ts.map +1 -1
- package/dist/src/executor/types.js.map +1 -1
- package/dist/src/executor/util.d.ts +14 -5
- package/dist/src/executor/util.d.ts.map +1 -1
- package/dist/src/executor/util.js +36 -9
- package/dist/src/executor/util.js.map +1 -1
- package/dist/src/index.d.ts +12 -5
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +10 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/logging/console.d.ts +11 -1
- package/dist/src/logging/console.d.ts.map +1 -1
- package/dist/src/logging/console.js +45 -14
- package/dist/src/logging/console.js.map +1 -1
- package/dist/src/logging/types.d.ts +1 -0
- package/dist/src/logging/types.d.ts.map +1 -1
- package/dist/src/processors/index.d.ts +3 -0
- package/dist/src/processors/index.d.ts.map +1 -0
- package/dist/src/processors/index.js +2 -0
- package/dist/src/processors/index.js.map +1 -0
- package/dist/src/processors/processor-manager.d.ts +38 -0
- package/dist/src/processors/processor-manager.d.ts.map +1 -0
- package/dist/src/processors/processor-manager.js +165 -0
- package/dist/src/processors/processor-manager.js.map +1 -0
- package/dist/src/processors/types.d.ts +63 -0
- package/dist/src/processors/types.d.ts.map +1 -0
- package/dist/src/processors/types.js +2 -0
- package/dist/src/processors/types.js.map +1 -0
- package/dist/src/processors/utils.d.ts +10 -0
- package/dist/src/processors/utils.d.ts.map +1 -0
- package/dist/src/processors/utils.js +58 -0
- package/dist/src/processors/utils.js.map +1 -0
- package/dist/src/queue/types.d.ts +2 -0
- package/dist/src/queue/types.d.ts.map +1 -1
- package/dist/src/queue/types.js.map +1 -1
- package/dist/src/read-models/base-read-model.d.ts +60 -0
- package/dist/src/read-models/base-read-model.d.ts.map +1 -0
- package/dist/src/read-models/base-read-model.js +143 -0
- package/dist/src/read-models/base-read-model.js.map +1 -0
- package/dist/src/read-models/coordinator.d.ts +3 -2
- package/dist/src/read-models/coordinator.d.ts.map +1 -1
- package/dist/src/read-models/coordinator.js +12 -13
- package/dist/src/read-models/coordinator.js.map +1 -1
- package/dist/src/read-models/document-view.d.ts +6 -7
- package/dist/src/read-models/document-view.d.ts.map +1 -1
- package/dist/src/read-models/document-view.js +18 -81
- package/dist/src/read-models/document-view.js.map +1 -1
- package/dist/src/read-models/types.d.ts +2 -1
- package/dist/src/read-models/types.d.ts.map +1 -1
- package/dist/src/registry/implementation.d.ts +42 -34
- package/dist/src/registry/implementation.d.ts.map +1 -1
- package/dist/src/registry/implementation.js +168 -48
- package/dist/src/registry/implementation.js.map +1 -1
- package/dist/src/registry/interfaces.d.ts +69 -8
- package/dist/src/registry/interfaces.d.ts.map +1 -1
- package/dist/src/shared/errors.d.ts +16 -0
- package/dist/src/shared/errors.d.ts.map +1 -1
- package/dist/src/shared/errors.js +28 -0
- package/dist/src/shared/errors.js.map +1 -1
- package/dist/src/shared/types.d.ts +4 -0
- package/dist/src/shared/types.d.ts.map +1 -1
- package/dist/src/shared/types.js.map +1 -1
- package/dist/src/signer/passthrough-signer.d.ts +9 -3
- package/dist/src/signer/passthrough-signer.d.ts.map +1 -1
- package/dist/src/signer/passthrough-signer.js +13 -0
- package/dist/src/signer/passthrough-signer.js.map +1 -1
- package/dist/src/signer/types.d.ts +2 -22
- package/dist/src/signer/types.d.ts.map +1 -1
- package/dist/src/storage/consistency-aware-legacy-storage.d.ts +33 -0
- package/dist/src/storage/consistency-aware-legacy-storage.d.ts.map +1 -0
- package/dist/src/storage/consistency-aware-legacy-storage.js +65 -0
- package/dist/src/storage/consistency-aware-legacy-storage.js.map +1 -0
- package/dist/src/storage/interfaces.d.ts +94 -1
- package/dist/src/storage/interfaces.d.ts.map +1 -1
- package/dist/src/storage/interfaces.js +2 -2
- package/dist/src/storage/interfaces.js.map +1 -1
- package/dist/src/storage/kysely/store.d.ts +1 -0
- package/dist/src/storage/kysely/store.d.ts.map +1 -1
- package/dist/src/storage/kysely/store.js +41 -4
- package/dist/src/storage/kysely/store.js.map +1 -1
- package/dist/src/storage/kysely/sync-cursor-storage.js +2 -2
- package/dist/src/storage/kysely/sync-cursor-storage.js.map +1 -1
- package/dist/src/storage/kysely/sync-remote-storage.js +8 -8
- package/dist/src/storage/kysely/sync-remote-storage.js.map +1 -1
- package/dist/src/storage/kysely/types.d.ts +6 -6
- package/dist/src/storage/migrations/001_create_operation_table.d.ts.map +1 -1
- package/dist/src/storage/migrations/001_create_operation_table.js +2 -1
- package/dist/src/storage/migrations/001_create_operation_table.js.map +1 -1
- package/dist/src/storage/migrations/008_create_view_state_table.d.ts +1 -1
- package/dist/src/storage/migrations/008_create_view_state_table.d.ts.map +1 -1
- package/dist/src/storage/migrations/008_create_view_state_table.js +2 -1
- package/dist/src/storage/migrations/008_create_view_state_table.js.map +1 -1
- package/dist/src/storage/migrations/009_create_operation_index_tables.js +1 -1
- package/dist/src/storage/migrations/009_create_operation_index_tables.js.map +1 -1
- package/dist/src/storage/migrations/010_create_sync_tables.js +5 -5
- package/dist/src/storage/migrations/010_create_sync_tables.js.map +1 -1
- package/dist/src/storage/migrations/migrator.d.ts +3 -2
- package/dist/src/storage/migrations/migrator.d.ts.map +1 -1
- package/dist/src/storage/migrations/migrator.js +29 -6
- package/dist/src/storage/migrations/migrator.js.map +1 -1
- package/dist/src/storage/txn.d.ts.map +1 -1
- package/dist/src/storage/txn.js +2 -3
- package/dist/src/storage/txn.js.map +1 -1
- package/dist/src/subs/subscription-notification-read-model.d.ts +17 -0
- package/dist/src/subs/subscription-notification-read-model.d.ts.map +1 -0
- package/dist/src/subs/subscription-notification-read-model.js +62 -0
- package/dist/src/subs/subscription-notification-read-model.js.map +1 -0
- package/dist/src/sync/channels/composite-channel-factory.d.ts +30 -0
- package/dist/src/sync/channels/composite-channel-factory.d.ts.map +1 -0
- package/dist/src/sync/channels/composite-channel-factory.js +87 -0
- package/dist/src/sync/channels/composite-channel-factory.js.map +1 -0
- package/dist/src/sync/channels/gql-channel-factory.d.ts +5 -2
- package/dist/src/sync/channels/gql-channel-factory.d.ts.map +1 -1
- package/dist/src/sync/channels/gql-channel-factory.js +8 -2
- package/dist/src/sync/channels/gql-channel-factory.js.map +1 -1
- package/dist/src/sync/channels/gql-channel.d.ts +28 -1
- package/dist/src/sync/channels/gql-channel.d.ts.map +1 -1
- package/dist/src/sync/channels/gql-channel.js +150 -22
- package/dist/src/sync/channels/gql-channel.js.map +1 -1
- package/dist/src/sync/channels/index.d.ts +2 -1
- package/dist/src/sync/channels/index.d.ts.map +1 -1
- package/dist/src/sync/channels/index.js +2 -1
- package/dist/src/sync/channels/index.js.map +1 -1
- package/dist/src/sync/channels/polling-channel.d.ts +39 -0
- package/dist/src/sync/channels/polling-channel.d.ts.map +1 -0
- package/dist/src/sync/channels/polling-channel.js +72 -0
- package/dist/src/sync/channels/polling-channel.js.map +1 -0
- package/dist/src/sync/channels/utils.d.ts +17 -2
- package/dist/src/sync/channels/utils.d.ts.map +1 -1
- package/dist/src/sync/channels/utils.js +76 -6
- package/dist/src/sync/channels/utils.js.map +1 -1
- package/dist/src/sync/errors.d.ts +1 -1
- package/dist/src/sync/errors.d.ts.map +1 -1
- package/dist/src/sync/errors.js +2 -2
- package/dist/src/sync/errors.js.map +1 -1
- package/dist/src/sync/index.d.ts +2 -2
- package/dist/src/sync/index.d.ts.map +1 -1
- package/dist/src/sync/index.js +2 -2
- package/dist/src/sync/index.js.map +1 -1
- package/dist/src/sync/interfaces.d.ts +16 -1
- package/dist/src/sync/interfaces.d.ts.map +1 -1
- package/dist/src/sync/sync-builder.d.ts +3 -2
- package/dist/src/sync/sync-builder.d.ts.map +1 -1
- package/dist/src/sync/sync-builder.js +4 -4
- package/dist/src/sync/sync-builder.js.map +1 -1
- package/dist/src/sync/sync-manager.d.ts +4 -1
- package/dist/src/sync/sync-manager.d.ts.map +1 -1
- package/dist/src/sync/sync-manager.js +65 -8
- package/dist/src/sync/sync-manager.js.map +1 -1
- package/dist/src/sync/utils.d.ts +19 -0
- package/dist/src/sync/utils.d.ts.map +1 -1
- package/dist/src/sync/utils.js +44 -0
- package/dist/src/sync/utils.js.map +1 -1
- package/package.json +3 -3
- package/dist/src/sync/channels/internal-channel.d.ts +0 -57
- package/dist/src/sync/channels/internal-channel.d.ts.map +0 -1
- package/dist/src/sync/channels/internal-channel.js +0 -106
- package/dist/src/sync/channels/internal-channel.js.map +0 -1
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Action, CreateDocumentActionInput, UpgradeDocumentActionInput } from "document-model";
|
|
2
|
+
import { actions as documentActions } from "document-model";
|
|
3
|
+
export { documentActions };
|
|
4
|
+
/**
|
|
5
|
+
* Creates a CREATE_DOCUMENT action for document creation.
|
|
6
|
+
*/
|
|
7
|
+
export declare function createDocumentAction(input: CreateDocumentActionInput): Action;
|
|
8
|
+
/**
|
|
9
|
+
* Creates an UPGRADE_DOCUMENT action to set initial document state.
|
|
10
|
+
*/
|
|
11
|
+
export declare function upgradeDocumentAction(input: UpgradeDocumentActionInput): Action;
|
|
12
|
+
/**
|
|
13
|
+
* Creates a DELETE_DOCUMENT action for document deletion.
|
|
14
|
+
*/
|
|
15
|
+
export declare function deleteDocumentAction(documentId: string): Action;
|
|
16
|
+
/**
|
|
17
|
+
* Creates an ADD_RELATIONSHIP action to establish a parent-child relationship.
|
|
18
|
+
*/
|
|
19
|
+
export declare function addRelationshipAction(sourceId: string, targetId: string, relationshipType?: string): Action;
|
|
20
|
+
/**
|
|
21
|
+
* Creates a REMOVE_RELATIONSHIP action to remove a parent-child relationship.
|
|
22
|
+
*/
|
|
23
|
+
export declare function removeRelationshipAction(sourceId: string, targetId: string, relationshipType?: string): Action;
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/actions/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAEN,yBAAyB,EAGzB,0BAA0B,EAC3B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,OAAO,IAAI,eAAe,EAAc,MAAM,gBAAgB,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,MAAM,CAQ7E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,0BAA0B,GAChC,MAAM,CAQR;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAY/D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,gBAAgB,GAAE,MAAgB,GACjC,MAAM,CAcR;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,gBAAgB,GAAE,MAAgB,GACjC,MAAM,CAcR"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { actions as documentActions, generateId } from "document-model";
|
|
2
|
+
export { documentActions };
|
|
3
|
+
/**
|
|
4
|
+
* Creates a CREATE_DOCUMENT action for document creation.
|
|
5
|
+
*/
|
|
6
|
+
export function createDocumentAction(input) {
|
|
7
|
+
return {
|
|
8
|
+
id: generateId(),
|
|
9
|
+
type: "CREATE_DOCUMENT",
|
|
10
|
+
scope: "document",
|
|
11
|
+
timestampUtcMs: new Date().toISOString(),
|
|
12
|
+
input,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Creates an UPGRADE_DOCUMENT action to set initial document state.
|
|
17
|
+
*/
|
|
18
|
+
export function upgradeDocumentAction(input) {
|
|
19
|
+
return {
|
|
20
|
+
id: generateId(),
|
|
21
|
+
type: "UPGRADE_DOCUMENT",
|
|
22
|
+
scope: "document",
|
|
23
|
+
timestampUtcMs: new Date().toISOString(),
|
|
24
|
+
input,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Creates a DELETE_DOCUMENT action for document deletion.
|
|
29
|
+
*/
|
|
30
|
+
export function deleteDocumentAction(documentId) {
|
|
31
|
+
const input = {
|
|
32
|
+
documentId,
|
|
33
|
+
};
|
|
34
|
+
return {
|
|
35
|
+
id: generateId(),
|
|
36
|
+
type: "DELETE_DOCUMENT",
|
|
37
|
+
scope: "document",
|
|
38
|
+
timestampUtcMs: new Date().toISOString(),
|
|
39
|
+
input,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Creates an ADD_RELATIONSHIP action to establish a parent-child relationship.
|
|
44
|
+
*/
|
|
45
|
+
export function addRelationshipAction(sourceId, targetId, relationshipType = "child") {
|
|
46
|
+
const input = {
|
|
47
|
+
sourceId,
|
|
48
|
+
targetId,
|
|
49
|
+
relationshipType,
|
|
50
|
+
};
|
|
51
|
+
return {
|
|
52
|
+
id: generateId(),
|
|
53
|
+
type: "ADD_RELATIONSHIP",
|
|
54
|
+
scope: "document",
|
|
55
|
+
timestampUtcMs: new Date().toISOString(),
|
|
56
|
+
input,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Creates a REMOVE_RELATIONSHIP action to remove a parent-child relationship.
|
|
61
|
+
*/
|
|
62
|
+
export function removeRelationshipAction(sourceId, targetId, relationshipType = "child") {
|
|
63
|
+
const input = {
|
|
64
|
+
sourceId,
|
|
65
|
+
targetId,
|
|
66
|
+
relationshipType,
|
|
67
|
+
};
|
|
68
|
+
return {
|
|
69
|
+
id: generateId(),
|
|
70
|
+
type: "REMOVE_RELATIONSHIP",
|
|
71
|
+
scope: "document",
|
|
72
|
+
timestampUtcMs: new Date().toISOString(),
|
|
73
|
+
input,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/actions/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAgC;IACnE,OAAO;QACL,EAAE,EAAE,UAAU,EAAE;QAChB,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,UAAU;QACjB,cAAc,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACxC,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAiC;IAEjC,OAAO;QACL,EAAE,EAAE,UAAU,EAAE;QAChB,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,UAAU;QACjB,cAAc,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACxC,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,UAAkB;IACrD,MAAM,KAAK,GAA8B;QACvC,UAAU;KACX,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,UAAU,EAAE;QAChB,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,UAAU;QACjB,cAAc,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACxC,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAAgB,EAChB,QAAgB,EAChB,mBAA2B,OAAO;IAElC,MAAM,KAAK,GAA+B;QACxC,QAAQ;QACR,QAAQ;QACR,gBAAgB;KACjB,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,UAAU,EAAE;QAChB,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,UAAU;QACjB,cAAc,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACxC,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,QAAgB,EAChB,QAAgB,EAChB,mBAA2B,OAAO;IAElC,MAAM,KAAK,GAAkC;QAC3C,QAAQ;QACR,QAAQ;QACR,gBAAgB;KACjB,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,UAAU,EAAE;QAChB,IAAI,EAAE,qBAAqB;QAC3B,KAAK,EAAE,UAAU;QACjB,cAAc,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACxC,KAAK;KACN,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import type { PHDocumentState } from "document-model";
|
|
2
|
+
/**
|
|
3
|
+
* Configuration options for the document metadata cache.
|
|
4
|
+
*/
|
|
5
|
+
export type DocumentMetaCacheConfig = {
|
|
6
|
+
/**
|
|
7
|
+
* Maximum number of document metadata entries to cache (LRU eviction).
|
|
8
|
+
* Default: 1000
|
|
9
|
+
*/
|
|
10
|
+
maxDocuments: number;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Cached document metadata from the "document" scope.
|
|
14
|
+
*
|
|
15
|
+
* This lightweight structure holds essential document information needed by
|
|
16
|
+
* the job executor without fetching full scope state. It provides an explicit
|
|
17
|
+
* cross-scope contract for accessing document scope metadata.
|
|
18
|
+
*/
|
|
19
|
+
export type CachedDocumentMeta = {
|
|
20
|
+
/**
|
|
21
|
+
* The full PHDocumentState from document.state.document.
|
|
22
|
+
* Contains version, hash, isDeleted, deletedAtUtcIso, etc.
|
|
23
|
+
*/
|
|
24
|
+
state: PHDocumentState;
|
|
25
|
+
/**
|
|
26
|
+
* The document type (from header), cached for convenience.
|
|
27
|
+
*/
|
|
28
|
+
documentType: string;
|
|
29
|
+
/**
|
|
30
|
+
* The revision of the document scope when this metadata was captured.
|
|
31
|
+
* Used for cache invalidation and consistency checks.
|
|
32
|
+
*/
|
|
33
|
+
documentScopeRevision: number;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Interface for the document metadata cache.
|
|
37
|
+
*
|
|
38
|
+
* This cache provides an explicit cross-scope contract for accessing document
|
|
39
|
+
* scope metadata. It solves the problem where job execution in one scope (e.g.,
|
|
40
|
+
* "global") needs access to document scope state (version, isDeleted, etc.)
|
|
41
|
+
* which may be stale in scope-specific caches or keyframes.
|
|
42
|
+
*
|
|
43
|
+
* The cache supports:
|
|
44
|
+
* - Latest metadata retrieval with LRU caching
|
|
45
|
+
* - Historical metadata reconstruction for reshuffling scenarios
|
|
46
|
+
* - Eager updates after document scope operations
|
|
47
|
+
*/
|
|
48
|
+
export interface IDocumentMetaCache {
|
|
49
|
+
/**
|
|
50
|
+
* Retrieves the LATEST document metadata from cache or rebuilds from operations.
|
|
51
|
+
*
|
|
52
|
+
* On cache miss, fetches all document scope operations and reconstructs the
|
|
53
|
+
* current PHDocumentState by applying UPGRADE_DOCUMENT and DELETE_DOCUMENT
|
|
54
|
+
* operations.
|
|
55
|
+
*
|
|
56
|
+
* @param documentId - The document identifier
|
|
57
|
+
* @param branch - Branch name
|
|
58
|
+
* @param signal - Optional abort signal to cancel the operation
|
|
59
|
+
* @returns The cached or rebuilt document metadata
|
|
60
|
+
* @throws {Error} "Operation aborted" if signal is aborted
|
|
61
|
+
* @throws {Error} If document not found (no CREATE_DOCUMENT operation)
|
|
62
|
+
*/
|
|
63
|
+
getDocumentMeta(documentId: string, branch: string, signal?: AbortSignal): Promise<CachedDocumentMeta>;
|
|
64
|
+
/**
|
|
65
|
+
* Rebuilds document metadata at a SPECIFIC revision (always rebuilds, no caching).
|
|
66
|
+
*
|
|
67
|
+
* Used during reshuffling when operations need to be inserted at a previous
|
|
68
|
+
* revision and we need the document scope state as of that point in time.
|
|
69
|
+
*
|
|
70
|
+
* @param documentId - The document identifier
|
|
71
|
+
* @param branch - Branch name
|
|
72
|
+
* @param targetRevision - The document scope revision to reconstruct up to
|
|
73
|
+
* @param signal - Optional abort signal to cancel the operation
|
|
74
|
+
* @returns Document metadata as of the target revision
|
|
75
|
+
* @throws {Error} "Operation aborted" if signal is aborted
|
|
76
|
+
* @throws {Error} If document not found
|
|
77
|
+
*/
|
|
78
|
+
rebuildAtRevision(documentId: string, branch: string, targetRevision: number, signal?: AbortSignal): Promise<CachedDocumentMeta>;
|
|
79
|
+
/**
|
|
80
|
+
* Eagerly updates cached metadata after document scope operations.
|
|
81
|
+
*
|
|
82
|
+
* Called by the job executor after CREATE_DOCUMENT, UPGRADE_DOCUMENT, or
|
|
83
|
+
* DELETE_DOCUMENT operations to keep the cache current.
|
|
84
|
+
*
|
|
85
|
+
* @param documentId - The document identifier
|
|
86
|
+
* @param branch - Branch name
|
|
87
|
+
* @param meta - The new metadata to cache
|
|
88
|
+
*/
|
|
89
|
+
putDocumentMeta(documentId: string, branch: string, meta: CachedDocumentMeta): void;
|
|
90
|
+
/**
|
|
91
|
+
* Invalidates cached document metadata.
|
|
92
|
+
*
|
|
93
|
+
* Call before reshuffling operations that modify the document scope, or
|
|
94
|
+
* when document state may have changed externally.
|
|
95
|
+
*
|
|
96
|
+
* @param documentId - The document identifier
|
|
97
|
+
* @param branch - Optional branch to narrow invalidation (if omitted, all branches)
|
|
98
|
+
* @returns Number of entries invalidated
|
|
99
|
+
*/
|
|
100
|
+
invalidate(documentId: string, branch?: string): number;
|
|
101
|
+
/**
|
|
102
|
+
* Clears all cached document metadata.
|
|
103
|
+
*/
|
|
104
|
+
clear(): void;
|
|
105
|
+
/**
|
|
106
|
+
* Performs startup initialization.
|
|
107
|
+
*/
|
|
108
|
+
startup(): Promise<void>;
|
|
109
|
+
/**
|
|
110
|
+
* Performs graceful shutdown.
|
|
111
|
+
*/
|
|
112
|
+
shutdown(): Promise<void>;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=document-meta-cache-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-meta-cache-types.d.ts","sourceRoot":"","sources":["../../../src/cache/document-meta-cache-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;OAGG;IACH,KAAK,EAAE,eAAe,CAAC;IAEvB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;;;;;;OAaG;IACH,eAAe,CACb,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAE/B;;;;;;;;;;;;;OAaG;IACH,iBAAiB,CACf,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAE/B;;;;;;;;;OASG;IACH,eAAe,CACb,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,kBAAkB,GACvB,IAAI,CAAC;IAER;;;;;;;;;OASG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAExD;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;IAEd;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB;;OAEG;IACH,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-meta-cache-types.js","sourceRoot":"","sources":["../../../src/cache/document-meta-cache-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { IOperationStore } from "../storage/interfaces.js";
|
|
2
|
+
import type { CachedDocumentMeta, DocumentMetaCacheConfig, IDocumentMetaCache } from "./document-meta-cache-types.js";
|
|
3
|
+
/**
|
|
4
|
+
* In-memory document metadata cache with LRU eviction.
|
|
5
|
+
*
|
|
6
|
+
* Caches PHDocumentState per (documentId, branch) key. On cache miss,
|
|
7
|
+
* rebuilds from document scope operations. Provides an explicit cross-scope
|
|
8
|
+
* contract for accessing document scope metadata.
|
|
9
|
+
*
|
|
10
|
+
* **Thread Safety:**
|
|
11
|
+
* Not thread-safe. Designed for single-threaded job executor environment.
|
|
12
|
+
*/
|
|
13
|
+
export declare class DocumentMetaCache implements IDocumentMetaCache {
|
|
14
|
+
private cache;
|
|
15
|
+
private lruTracker;
|
|
16
|
+
private operationStore;
|
|
17
|
+
private config;
|
|
18
|
+
constructor(operationStore: IOperationStore, config: DocumentMetaCacheConfig);
|
|
19
|
+
startup(): Promise<void>;
|
|
20
|
+
shutdown(): Promise<void>;
|
|
21
|
+
getDocumentMeta(documentId: string, branch: string, signal?: AbortSignal): Promise<CachedDocumentMeta>;
|
|
22
|
+
rebuildAtRevision(documentId: string, branch: string, targetRevision: number, signal?: AbortSignal): Promise<CachedDocumentMeta>;
|
|
23
|
+
putDocumentMeta(documentId: string, branch: string, meta: CachedDocumentMeta): void;
|
|
24
|
+
invalidate(documentId: string, branch?: string): number;
|
|
25
|
+
clear(): void;
|
|
26
|
+
private makeKey;
|
|
27
|
+
private rebuildLatest;
|
|
28
|
+
private rebuildFromOperations;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=document-meta-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-meta-cache.d.ts","sourceRoot":"","sources":["../../../src/cache/document-meta-cache.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EACV,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,gCAAgC,CAAC;AAGxC;;;;;;;;;GASG;AACH,qBAAa,iBAAkB,YAAW,kBAAkB;IAC1D,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,MAAM,CAA0B;gBAGtC,cAAc,EAAE,eAAe,EAC/B,MAAM,EAAE,uBAAuB;IAU3B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,eAAe,CACnB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,kBAAkB,CAAC;IAkBxB,iBAAiB,CACrB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,kBAAkB,CAAC;IAa9B,eAAe,CACb,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,kBAAkB,GACvB,IAAI;IAcP,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAuBvD,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,OAAO;YAID,aAAa;YAQb,qBAAqB;CA0DpC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { applyDeleteDocumentAction, applyUpgradeDocumentAction, createDocumentFromAction, } from "../executor/util.js";
|
|
2
|
+
import { LRUTracker } from "./lru/lru-tracker.js";
|
|
3
|
+
/**
|
|
4
|
+
* In-memory document metadata cache with LRU eviction.
|
|
5
|
+
*
|
|
6
|
+
* Caches PHDocumentState per (documentId, branch) key. On cache miss,
|
|
7
|
+
* rebuilds from document scope operations. Provides an explicit cross-scope
|
|
8
|
+
* contract for accessing document scope metadata.
|
|
9
|
+
*
|
|
10
|
+
* **Thread Safety:**
|
|
11
|
+
* Not thread-safe. Designed for single-threaded job executor environment.
|
|
12
|
+
*/
|
|
13
|
+
export class DocumentMetaCache {
|
|
14
|
+
cache;
|
|
15
|
+
lruTracker;
|
|
16
|
+
operationStore;
|
|
17
|
+
config;
|
|
18
|
+
constructor(operationStore, config) {
|
|
19
|
+
this.operationStore = operationStore;
|
|
20
|
+
this.config = {
|
|
21
|
+
maxDocuments: config.maxDocuments,
|
|
22
|
+
};
|
|
23
|
+
this.cache = new Map();
|
|
24
|
+
this.lruTracker = new LRUTracker();
|
|
25
|
+
}
|
|
26
|
+
async startup() {
|
|
27
|
+
return Promise.resolve();
|
|
28
|
+
}
|
|
29
|
+
async shutdown() {
|
|
30
|
+
return Promise.resolve();
|
|
31
|
+
}
|
|
32
|
+
async getDocumentMeta(documentId, branch, signal) {
|
|
33
|
+
if (signal?.aborted) {
|
|
34
|
+
throw new Error("Operation aborted");
|
|
35
|
+
}
|
|
36
|
+
const key = this.makeKey(documentId, branch);
|
|
37
|
+
const cached = this.cache.get(key);
|
|
38
|
+
if (cached) {
|
|
39
|
+
this.lruTracker.touch(key);
|
|
40
|
+
return cached;
|
|
41
|
+
}
|
|
42
|
+
const meta = await this.rebuildLatest(documentId, branch, signal);
|
|
43
|
+
this.putDocumentMeta(documentId, branch, meta);
|
|
44
|
+
return meta;
|
|
45
|
+
}
|
|
46
|
+
async rebuildAtRevision(documentId, branch, targetRevision, signal) {
|
|
47
|
+
if (signal?.aborted) {
|
|
48
|
+
throw new Error("Operation aborted");
|
|
49
|
+
}
|
|
50
|
+
return this.rebuildFromOperations(documentId, branch, targetRevision, signal);
|
|
51
|
+
}
|
|
52
|
+
putDocumentMeta(documentId, branch, meta) {
|
|
53
|
+
const key = this.makeKey(documentId, branch);
|
|
54
|
+
if (!this.cache.has(key) && this.cache.size >= this.config.maxDocuments) {
|
|
55
|
+
const evictKey = this.lruTracker.evict();
|
|
56
|
+
if (evictKey) {
|
|
57
|
+
this.cache.delete(evictKey);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
this.cache.set(key, structuredClone(meta));
|
|
61
|
+
this.lruTracker.touch(key);
|
|
62
|
+
}
|
|
63
|
+
invalidate(documentId, branch) {
|
|
64
|
+
let evicted = 0;
|
|
65
|
+
if (branch === undefined) {
|
|
66
|
+
for (const key of this.cache.keys()) {
|
|
67
|
+
if (key.startsWith(`${documentId}:`)) {
|
|
68
|
+
this.cache.delete(key);
|
|
69
|
+
this.lruTracker.remove(key);
|
|
70
|
+
evicted++;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
const key = this.makeKey(documentId, branch);
|
|
76
|
+
if (this.cache.has(key)) {
|
|
77
|
+
this.cache.delete(key);
|
|
78
|
+
this.lruTracker.remove(key);
|
|
79
|
+
evicted = 1;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return evicted;
|
|
83
|
+
}
|
|
84
|
+
clear() {
|
|
85
|
+
this.cache.clear();
|
|
86
|
+
this.lruTracker.clear();
|
|
87
|
+
}
|
|
88
|
+
makeKey(documentId, branch) {
|
|
89
|
+
return `${documentId}:${branch}`;
|
|
90
|
+
}
|
|
91
|
+
async rebuildLatest(documentId, branch, signal) {
|
|
92
|
+
return this.rebuildFromOperations(documentId, branch, undefined, signal);
|
|
93
|
+
}
|
|
94
|
+
async rebuildFromOperations(documentId, branch, targetRevision, signal) {
|
|
95
|
+
const docScopeOps = await this.operationStore.getSince(documentId, "document", branch, -1, undefined, signal);
|
|
96
|
+
if (docScopeOps.items.length === 0) {
|
|
97
|
+
throw new Error(`Document ${documentId} not found`);
|
|
98
|
+
}
|
|
99
|
+
const createOp = docScopeOps.items[0];
|
|
100
|
+
if (createOp.action.type !== "CREATE_DOCUMENT") {
|
|
101
|
+
throw new Error(`Invalid document: first operation must be CREATE_DOCUMENT, found ${createOp.action.type}`);
|
|
102
|
+
}
|
|
103
|
+
const createAction = createOp.action;
|
|
104
|
+
const documentType = createAction.input.model;
|
|
105
|
+
let document = createDocumentFromAction(createAction);
|
|
106
|
+
let documentScopeRevision = 0;
|
|
107
|
+
for (const op of docScopeOps.items) {
|
|
108
|
+
if (targetRevision !== undefined && op.index > targetRevision) {
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
documentScopeRevision = op.index;
|
|
112
|
+
if (op.action.type === "UPGRADE_DOCUMENT") {
|
|
113
|
+
const upgradeAction = op.action;
|
|
114
|
+
document = applyUpgradeDocumentAction(document, upgradeAction);
|
|
115
|
+
}
|
|
116
|
+
else if (op.action.type === "DELETE_DOCUMENT") {
|
|
117
|
+
document = applyDeleteDocumentAction(document, op.action);
|
|
118
|
+
}
|
|
119
|
+
// for now, we are skipping relationship operations
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
state: document.state.document,
|
|
123
|
+
documentType,
|
|
124
|
+
documentScopeRevision: documentScopeRevision + 1,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=document-meta-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-meta-cache.js","sourceRoot":"","sources":["../../../src/cache/document-meta-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import type { Kysely } from "kysely";
|
|
2
|
-
import type { PagedResults, PagingOptions, ViewFilter } from "../storage/interfaces.js";
|
|
2
|
+
import type { OperationWithContext, PagedResults, PagingOptions, ViewFilter } from "../storage/interfaces.js";
|
|
3
3
|
import type { Database } from "../storage/kysely/types.js";
|
|
4
4
|
import type { IOperationIndex, IOperationIndexTxn, OperationIndexEntry } from "./operation-index-types.js";
|
|
5
5
|
export declare class KyselyOperationIndex implements IOperationIndex {
|
|
6
6
|
private db;
|
|
7
7
|
constructor(db: Kysely<Database>);
|
|
8
8
|
start(): IOperationIndexTxn;
|
|
9
|
-
commit(txn: IOperationIndexTxn, signal?: AbortSignal): Promise<
|
|
9
|
+
commit(txn: IOperationIndexTxn, signal?: AbortSignal): Promise<number[]>;
|
|
10
10
|
find(collectionId: string, cursor?: number, view?: ViewFilter, paging?: PagingOptions, signal?: AbortSignal): Promise<PagedResults<OperationIndexEntry>>;
|
|
11
|
+
getSinceOrdinal(ordinal: number, paging?: PagingOptions, signal?: AbortSignal): Promise<PagedResults<OperationWithContext>>;
|
|
12
|
+
private rowToOperationWithContext;
|
|
11
13
|
private rowToOperationIndexEntry;
|
|
12
14
|
}
|
|
13
15
|
//# sourceMappingURL=kysely-operation-index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kysely-operation-index.d.ts","sourceRoot":"","sources":["../../../src/cache/kysely-operation-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,UAAU,EACX,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAGV,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EAEpB,MAAM,4BAA4B,CAAC;AAsEpC,qBAAa,oBAAqB,YAAW,eAAe;IAC9C,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC;IAExC,KAAK,IAAI,kBAAkB;IAIrB,MAAM,
|
|
1
|
+
{"version":3,"file":"kysely-operation-index.d.ts","sourceRoot":"","sources":["../../../src/cache/kysely-operation-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,KAAK,EACV,oBAAoB,EACpB,YAAY,EACZ,aAAa,EACb,UAAU,EACX,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAGV,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EAEpB,MAAM,4BAA4B,CAAC;AAsEpC,qBAAa,oBAAqB,YAAW,eAAe;IAC9C,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC;IAExC,KAAK,IAAI,kBAAkB;IAIrB,MAAM,CACV,GAAG,EAAE,kBAAkB,EACvB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,EAAE,CAAC;IAqGd,IAAI,CACR,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,UAAU,EACjB,MAAM,CAAC,EAAE,aAAa,EACtB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;IA2DvC,eAAe,CACnB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,aAAa,EACtB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;IA0C9C,OAAO,CAAC,yBAAyB;IAsBjC,OAAO,CAAC,wBAAwB;CAiBjC"}
|
|
@@ -62,6 +62,7 @@ export class KyselyOperationIndex {
|
|
|
62
62
|
const memberships = kyselyTxn.getCollectionMemberships();
|
|
63
63
|
const removals = kyselyTxn.getCollectionRemovals();
|
|
64
64
|
const operations = kyselyTxn.getOperations();
|
|
65
|
+
let resultOrdinals = [];
|
|
65
66
|
await this.db.transaction().execute(async (trx) => {
|
|
66
67
|
if (collections.length > 0) {
|
|
67
68
|
const collectionRows = collections.map((collectionId) => ({
|
|
@@ -78,34 +79,25 @@ export class KyselyOperationIndex {
|
|
|
78
79
|
}
|
|
79
80
|
let operationOrdinals = [];
|
|
80
81
|
if (operations.length > 0) {
|
|
81
|
-
const operationRows = operations.map((op) => {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
documentType: op.documentType,
|
|
94
|
-
scope: op.scope,
|
|
95
|
-
branch: op.branch,
|
|
96
|
-
timestampUtcMs: BigInt(timestampMs || 0),
|
|
97
|
-
index: op.index,
|
|
98
|
-
skip: op.skip,
|
|
99
|
-
hash: op.hash,
|
|
100
|
-
action: op.action,
|
|
101
|
-
};
|
|
102
|
-
});
|
|
82
|
+
const operationRows = operations.map((op) => ({
|
|
83
|
+
opId: op.id || "",
|
|
84
|
+
documentId: op.documentId,
|
|
85
|
+
documentType: op.documentType,
|
|
86
|
+
scope: op.scope,
|
|
87
|
+
branch: op.branch,
|
|
88
|
+
timestampUtcMs: op.timestampUtcMs,
|
|
89
|
+
index: op.index,
|
|
90
|
+
skip: op.skip,
|
|
91
|
+
hash: op.hash,
|
|
92
|
+
action: op.action,
|
|
93
|
+
}));
|
|
103
94
|
const insertedOps = await trx
|
|
104
95
|
.insertInto("operation_index_operations")
|
|
105
96
|
.values(operationRows)
|
|
106
97
|
.returning("ordinal")
|
|
107
98
|
.execute();
|
|
108
99
|
operationOrdinals = insertedOps.map((row) => row.ordinal);
|
|
100
|
+
resultOrdinals = operationOrdinals;
|
|
109
101
|
}
|
|
110
102
|
if (memberships.length > 0) {
|
|
111
103
|
for (const m of memberships) {
|
|
@@ -142,6 +134,7 @@ export class KyselyOperationIndex {
|
|
|
142
134
|
}
|
|
143
135
|
}
|
|
144
136
|
});
|
|
137
|
+
return resultOrdinals;
|
|
145
138
|
}
|
|
146
139
|
async find(collectionId, cursor, view, paging, signal) {
|
|
147
140
|
if (signal?.aborted) {
|
|
@@ -153,7 +146,6 @@ export class KyselyOperationIndex {
|
|
|
153
146
|
.selectAll("oi")
|
|
154
147
|
.select(["dc.documentId", "dc.collectionId"])
|
|
155
148
|
.where("dc.collectionId", "=", collectionId)
|
|
156
|
-
.whereRef("oi.ordinal", ">=", "dc.joinedOrdinal")
|
|
157
149
|
.where(sql `dc."leftOrdinal" IS NULL OR oi.ordinal < dc."leftOrdinal"`)
|
|
158
150
|
.orderBy("oi.ordinal", "asc");
|
|
159
151
|
if (cursor !== undefined) {
|
|
@@ -188,6 +180,57 @@ export class KyselyOperationIndex {
|
|
|
188
180
|
hasMore,
|
|
189
181
|
};
|
|
190
182
|
}
|
|
183
|
+
async getSinceOrdinal(ordinal, paging, signal) {
|
|
184
|
+
if (signal?.aborted) {
|
|
185
|
+
throw new Error("Operation aborted");
|
|
186
|
+
}
|
|
187
|
+
let query = this.db
|
|
188
|
+
.selectFrom("operation_index_operations")
|
|
189
|
+
.selectAll()
|
|
190
|
+
.where("ordinal", ">", ordinal)
|
|
191
|
+
.orderBy("ordinal", "asc");
|
|
192
|
+
if (paging?.cursor) {
|
|
193
|
+
const cursorOrdinal = Number.parseInt(paging.cursor, 10);
|
|
194
|
+
query = query.where("ordinal", ">", cursorOrdinal);
|
|
195
|
+
}
|
|
196
|
+
if (paging?.limit) {
|
|
197
|
+
query = query.limit(paging.limit + 1);
|
|
198
|
+
}
|
|
199
|
+
const rows = await query.execute();
|
|
200
|
+
let hasMore = false;
|
|
201
|
+
let items = rows;
|
|
202
|
+
if (paging?.limit && rows.length > paging.limit) {
|
|
203
|
+
hasMore = true;
|
|
204
|
+
items = rows.slice(0, paging.limit);
|
|
205
|
+
}
|
|
206
|
+
const nextCursor = hasMore && items.length > 0
|
|
207
|
+
? items[items.length - 1].ordinal.toString()
|
|
208
|
+
: undefined;
|
|
209
|
+
return {
|
|
210
|
+
items: items.map((row) => this.rowToOperationWithContext(row)),
|
|
211
|
+
nextCursor,
|
|
212
|
+
hasMore,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
rowToOperationWithContext(row) {
|
|
216
|
+
return {
|
|
217
|
+
operation: {
|
|
218
|
+
index: row.index,
|
|
219
|
+
timestampUtcMs: row.timestampUtcMs,
|
|
220
|
+
hash: row.hash,
|
|
221
|
+
skip: row.skip,
|
|
222
|
+
action: row.action,
|
|
223
|
+
id: row.opId,
|
|
224
|
+
},
|
|
225
|
+
context: {
|
|
226
|
+
documentId: row.documentId,
|
|
227
|
+
documentType: row.documentType,
|
|
228
|
+
scope: row.scope,
|
|
229
|
+
branch: row.branch,
|
|
230
|
+
ordinal: row.ordinal,
|
|
231
|
+
},
|
|
232
|
+
};
|
|
233
|
+
}
|
|
191
234
|
rowToOperationIndexEntry(row) {
|
|
192
235
|
return {
|
|
193
236
|
ordinal: row.ordinal,
|
|
@@ -196,7 +239,7 @@ export class KyselyOperationIndex {
|
|
|
196
239
|
branch: row.branch,
|
|
197
240
|
scope: row.scope,
|
|
198
241
|
index: row.index,
|
|
199
|
-
timestampUtcMs: row.timestampUtcMs
|
|
242
|
+
timestampUtcMs: row.timestampUtcMs,
|
|
200
243
|
hash: row.hash,
|
|
201
244
|
skip: row.skip,
|
|
202
245
|
action: row.action,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kysely-operation-index.js","sourceRoot":"","sources":["../../../src/cache/kysely-operation-index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"kysely-operation-index.js","sourceRoot":"","sources":["../../../src/cache/kysely-operation-index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kysely-write-cache.d.ts","sourceRoot":"","sources":["../../../src/cache/kysely-write-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"kysely-write-cache.d.ts","sourceRoot":"","sources":["../../../src/cache/kysely-write-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,UAAU,EAEX,MAAM,gBAAgB,CAAC;AAMxB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,KAAK,cAAc,GAAG;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC;CACxC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,qBAAa,gBAAiB,YAAW,WAAW;IAClD,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,MAAM,CAA6B;gBAGzC,aAAa,EAAE,cAAc,EAC7B,cAAc,EAAE,eAAe,EAC/B,QAAQ,EAAE,sBAAsB,EAChC,MAAM,EAAE,gBAAgB;IAc1B;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B;;;;;;;;;;;;;;;;;;OAkBG;IACG,QAAQ,CACZ,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,cAAc,CAAC,EAAE,MAAM,EACvB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC;IAiEtB;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CACN,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,UAAU,GACnB,IAAI;IAuBP;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IA+BvE;;;OAGG;IACH,KAAK,IAAI,IAAI;IAKb;;;OAGG;IACH,SAAS,CACP,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,cAAc,GAAG,SAAS;YAKf,mBAAmB;YAoBnB,eAAe;YAoJf,eAAe;IA6D7B,OAAO,CAAC,wBAAwB;IAiBhC,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,iBAAiB;IAsBzB,OAAO,CAAC,kBAAkB;CAG3B"}
|
|
@@ -236,7 +236,7 @@ export class KyselyWriteCache {
|
|
|
236
236
|
}
|
|
237
237
|
else {
|
|
238
238
|
document = undefined;
|
|
239
|
-
startRevision =
|
|
239
|
+
startRevision = -1;
|
|
240
240
|
const createOpResult = await this.operationStore.getSince(documentId, "document", branch, -1, { limit: 1 }, signal);
|
|
241
241
|
if (createOpResult.items.length === 0) {
|
|
242
242
|
throw new Error(`Failed to rebuild document ${documentId}: no CREATE_DOCUMENT operation found in document scope`);
|
|
@@ -258,7 +258,8 @@ export class KyselyWriteCache {
|
|
|
258
258
|
continue;
|
|
259
259
|
}
|
|
260
260
|
if (operation.action.type === "UPGRADE_DOCUMENT") {
|
|
261
|
-
|
|
261
|
+
const upgradeAction = operation.action;
|
|
262
|
+
document = applyUpgradeDocumentAction(document, upgradeAction);
|
|
262
263
|
}
|
|
263
264
|
else if (operation.action.type === "DELETE_DOCUMENT") {
|
|
264
265
|
applyDeleteDocumentAction(document, operation.action);
|