@powerhousedao/reactor 4.1.0-dev.12 → 4.1.0-dev.121
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/cache/buffer/ring-buffer.d.ts +37 -0
- package/dist/src/cache/buffer/ring-buffer.d.ts.map +1 -0
- package/dist/src/cache/buffer/ring-buffer.js +69 -0
- package/dist/src/cache/buffer/ring-buffer.js.map +1 -0
- package/dist/src/cache/index.d.ts +3 -0
- package/dist/src/cache/index.d.ts.map +1 -0
- package/dist/src/cache/index.js +2 -0
- package/dist/src/cache/index.js.map +1 -0
- package/dist/src/cache/kysely-operation-index.d.ts +13 -0
- package/dist/src/cache/kysely-operation-index.d.ts.map +1 -0
- package/dist/src/cache/kysely-operation-index.js +207 -0
- package/dist/src/cache/kysely-operation-index.js.map +1 -0
- package/dist/src/cache/kysely-write-cache.d.ts +134 -0
- package/dist/src/cache/kysely-write-cache.d.ts.map +1 -0
- package/dist/src/cache/kysely-write-cache.js +375 -0
- package/dist/src/cache/kysely-write-cache.js.map +1 -0
- package/dist/src/cache/lru/lru-tracker.d.ts +15 -0
- package/dist/src/cache/lru/lru-tracker.d.ts.map +1 -0
- package/dist/src/cache/lru/lru-tracker.js +96 -0
- package/dist/src/cache/lru/lru-tracker.js.map +1 -0
- package/dist/src/cache/operation-index-types.d.ts +49 -0
- package/dist/src/cache/operation-index-types.d.ts.map +1 -0
- package/dist/src/cache/operation-index-types.js +4 -0
- package/dist/src/cache/operation-index-types.js.map +1 -0
- package/dist/src/cache/write/interfaces.d.ts +83 -0
- package/dist/src/cache/write/interfaces.d.ts.map +1 -0
- package/dist/src/cache/write/interfaces.js +2 -0
- package/dist/src/cache/write/interfaces.js.map +1 -0
- package/dist/src/cache/write-cache-types.d.ts +42 -0
- package/dist/src/cache/write-cache-types.d.ts.map +1 -0
- package/dist/src/cache/write-cache-types.js +2 -0
- package/dist/src/cache/write-cache-types.js.map +1 -0
- package/dist/src/client/reactor-client.d.ts +103 -0
- package/dist/src/client/reactor-client.d.ts.map +1 -0
- package/dist/src/client/reactor-client.js +184 -0
- package/dist/src/client/reactor-client.js.map +1 -0
- package/dist/src/client/types.d.ts +213 -0
- package/dist/src/client/types.d.ts.map +1 -0
- package/dist/src/client/types.js +14 -0
- package/dist/src/client/types.js.map +1 -0
- package/dist/src/core/builder.d.ts +20 -0
- package/dist/src/core/builder.d.ts.map +1 -0
- package/dist/src/core/builder.js +47 -0
- package/dist/src/core/builder.js.map +1 -0
- package/dist/src/core/reactor-builder.d.ts +37 -0
- package/dist/src/core/reactor-builder.d.ts.map +1 -0
- package/dist/src/core/reactor-builder.js +138 -0
- package/dist/src/core/reactor-builder.js.map +1 -0
- package/dist/src/core/reactor.d.ts +111 -0
- package/dist/src/core/reactor.d.ts.map +1 -0
- package/dist/src/core/reactor.js +952 -0
- package/dist/src/core/reactor.js.map +1 -0
- package/dist/src/core/types.d.ts +183 -0
- package/dist/src/core/types.d.ts.map +1 -0
- package/dist/src/core/types.js +2 -0
- package/dist/src/core/types.js.map +1 -0
- package/dist/src/core/utils.d.ts +51 -0
- package/dist/src/core/utils.d.ts.map +1 -0
- package/dist/src/core/utils.js +141 -0
- package/dist/src/core/utils.js.map +1 -0
- package/dist/src/events/event-bus.d.ts +3 -3
- package/dist/src/events/event-bus.d.ts.map +1 -1
- package/dist/src/events/event-bus.js.map +1 -1
- package/dist/src/events/interfaces.d.ts +1 -1
- package/dist/src/events/interfaces.d.ts.map +1 -1
- package/dist/src/events/types.d.ts +31 -1
- package/dist/src/events/types.d.ts.map +1 -1
- package/dist/src/events/types.js +7 -0
- package/dist/src/events/types.js.map +1 -1
- package/dist/src/executor/interfaces.d.ts +31 -54
- package/dist/src/executor/interfaces.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor-manager.d.ts +32 -0
- package/dist/src/executor/simple-job-executor-manager.d.ts.map +1 -0
- package/dist/src/executor/simple-job-executor-manager.js +214 -0
- package/dist/src/executor/simple-job-executor-manager.js.map +1 -0
- package/dist/src/executor/simple-job-executor.d.ts +62 -0
- package/dist/src/executor/simple-job-executor.d.ts.map +1 -0
- package/dist/src/executor/simple-job-executor.js +705 -0
- package/dist/src/executor/simple-job-executor.js.map +1 -0
- package/dist/src/executor/types.d.ts +32 -8
- 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 +65 -0
- package/dist/src/executor/util.d.ts.map +1 -0
- package/dist/src/executor/util.js +154 -0
- package/dist/src/executor/util.js.map +1 -0
- package/dist/src/index.d.ts +35 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +43 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/job-tracker/in-memory-job-tracker.d.ts +16 -0
- package/dist/src/job-tracker/in-memory-job-tracker.d.ts.map +1 -0
- package/dist/src/job-tracker/in-memory-job-tracker.js +84 -0
- package/dist/src/job-tracker/in-memory-job-tracker.js.map +1 -0
- package/dist/src/job-tracker/index.d.ts +3 -0
- package/dist/src/job-tracker/index.d.ts.map +1 -0
- package/dist/src/job-tracker/index.js +2 -0
- package/dist/src/job-tracker/index.js.map +1 -0
- package/dist/src/job-tracker/interfaces.d.ts +42 -0
- package/dist/src/job-tracker/interfaces.d.ts.map +1 -0
- package/dist/src/job-tracker/interfaces.js +2 -0
- package/dist/src/job-tracker/interfaces.js.map +1 -0
- package/dist/src/queue/interfaces.d.ts +46 -5
- package/dist/src/queue/interfaces.d.ts.map +1 -1
- package/dist/src/queue/job-execution-handle.d.ts +25 -0
- package/dist/src/queue/job-execution-handle.d.ts.map +1 -0
- package/dist/src/queue/job-execution-handle.js +62 -0
- package/dist/src/queue/job-execution-handle.js.map +1 -0
- package/dist/src/queue/queue.d.ts +56 -5
- package/dist/src/queue/queue.d.ts.map +1 -1
- package/dist/src/queue/queue.js +284 -36
- package/dist/src/queue/queue.js.map +1 -1
- package/dist/src/queue/types.d.ts +38 -5
- package/dist/src/queue/types.d.ts.map +1 -1
- package/dist/src/queue/types.js +12 -0
- package/dist/src/queue/types.js.map +1 -1
- package/dist/src/read-models/coordinator.d.ts +38 -0
- package/dist/src/read-models/coordinator.d.ts.map +1 -0
- package/dist/src/read-models/coordinator.js +72 -0
- package/dist/src/read-models/coordinator.js.map +1 -0
- package/dist/src/read-models/document-view.d.ts +24 -0
- package/dist/src/read-models/document-view.d.ts.map +1 -0
- package/dist/src/read-models/document-view.js +368 -0
- package/dist/src/read-models/document-view.js.map +1 -0
- package/dist/src/read-models/interfaces.d.ts +29 -0
- package/dist/src/read-models/interfaces.d.ts.map +1 -0
- package/dist/src/read-models/interfaces.js +2 -0
- package/dist/src/read-models/interfaces.js.map +1 -0
- package/dist/src/read-models/types.d.ts +46 -0
- package/dist/src/read-models/types.d.ts.map +1 -0
- package/dist/src/read-models/types.js +2 -0
- package/dist/src/read-models/types.js.map +1 -0
- package/dist/src/registry/implementation.d.ts +62 -0
- package/dist/src/registry/implementation.d.ts.map +1 -0
- package/dist/src/registry/implementation.js +96 -0
- package/dist/src/registry/implementation.js.map +1 -0
- package/dist/src/registry/index.d.ts +3 -0
- package/dist/src/registry/index.d.ts.map +1 -0
- package/dist/src/registry/index.js +2 -0
- package/dist/src/registry/index.js.map +1 -0
- package/dist/src/registry/interfaces.d.ts +39 -0
- package/dist/src/registry/interfaces.d.ts.map +1 -0
- package/dist/src/registry/interfaces.js +2 -0
- package/dist/src/registry/interfaces.js.map +1 -0
- package/dist/src/shared/awaiter.d.ts +32 -0
- package/dist/src/shared/awaiter.d.ts.map +1 -0
- package/dist/src/shared/awaiter.js +132 -0
- package/dist/src/shared/awaiter.js.map +1 -0
- package/dist/src/shared/consistency-tracker.d.ts +48 -0
- package/dist/src/shared/consistency-tracker.d.ts.map +1 -0
- package/dist/src/shared/consistency-tracker.js +123 -0
- package/dist/src/shared/consistency-tracker.js.map +1 -0
- package/dist/src/shared/errors.d.ts +17 -0
- package/dist/src/shared/errors.d.ts.map +1 -0
- package/dist/src/shared/errors.js +33 -0
- package/dist/src/shared/errors.js.map +1 -0
- package/dist/src/shared/factories.d.ts +16 -0
- package/dist/src/shared/factories.d.ts.map +1 -0
- package/dist/src/shared/factories.js +33 -0
- package/dist/src/shared/factories.js.map +1 -0
- package/dist/src/shared/types.d.ts +126 -20
- package/dist/src/shared/types.d.ts.map +1 -1
- package/dist/src/shared/types.js +35 -1
- package/dist/src/shared/types.js.map +1 -1
- package/dist/src/shared/utils.d.ts +3 -0
- package/dist/src/shared/utils.d.ts.map +1 -0
- package/dist/src/shared/utils.js +8 -0
- package/dist/src/shared/utils.js.map +1 -0
- package/dist/src/signer/passthrough-signer.d.ts +6 -0
- package/dist/src/signer/passthrough-signer.d.ts.map +1 -0
- package/dist/src/signer/passthrough-signer.js +6 -0
- package/dist/src/signer/passthrough-signer.js.map +1 -0
- package/dist/src/signer/types.d.ts +15 -0
- package/dist/src/signer/types.d.ts.map +1 -0
- package/dist/src/signer/types.js +2 -0
- package/dist/src/signer/types.js.map +1 -0
- package/dist/src/storage/index.d.ts +4 -0
- package/dist/src/storage/index.d.ts.map +1 -0
- package/dist/src/storage/index.js +3 -0
- package/dist/src/storage/index.js.map +1 -0
- package/dist/src/storage/interfaces.d.ts +335 -0
- package/dist/src/storage/interfaces.d.ts.map +1 -0
- package/dist/src/storage/interfaces.js +19 -0
- package/dist/src/storage/interfaces.js.map +1 -0
- package/dist/src/storage/kysely/document-indexer.d.ts +28 -0
- package/dist/src/storage/kysely/document-indexer.d.ts.map +1 -0
- package/dist/src/storage/kysely/document-indexer.js +350 -0
- package/dist/src/storage/kysely/document-indexer.js.map +1 -0
- package/dist/src/storage/kysely/keyframe-store.d.ts +15 -0
- package/dist/src/storage/kysely/keyframe-store.d.ts.map +1 -0
- package/dist/src/storage/kysely/keyframe-store.js +64 -0
- package/dist/src/storage/kysely/keyframe-store.js.map +1 -0
- package/dist/src/storage/kysely/store.d.ts +15 -0
- package/dist/src/storage/kysely/store.d.ts.map +1 -0
- package/dist/src/storage/kysely/store.js +196 -0
- package/dist/src/storage/kysely/store.js.map +1 -0
- package/dist/src/storage/kysely/sync-cursor-storage.d.ts +13 -0
- package/dist/src/storage/kysely/sync-cursor-storage.d.ts.map +1 -0
- package/dist/src/storage/kysely/sync-cursor-storage.js +93 -0
- package/dist/src/storage/kysely/sync-cursor-storage.js.map +1 -0
- package/dist/src/storage/kysely/sync-remote-storage.d.ts +13 -0
- package/dist/src/storage/kysely/sync-remote-storage.d.ts.map +1 -0
- package/dist/src/storage/kysely/sync-remote-storage.js +134 -0
- package/dist/src/storage/kysely/sync-remote-storage.js.map +1 -0
- package/dist/src/storage/kysely/types.d.ts +135 -0
- package/dist/src/storage/kysely/types.d.ts.map +1 -0
- package/dist/src/storage/kysely/types.js +2 -0
- package/dist/src/storage/kysely/types.js.map +1 -0
- package/dist/src/storage/migrations/001_create_operation_table.d.ts +3 -0
- package/dist/src/storage/migrations/001_create_operation_table.d.ts.map +1 -0
- package/dist/src/storage/migrations/001_create_operation_table.js +40 -0
- package/dist/src/storage/migrations/001_create_operation_table.js.map +1 -0
- package/dist/src/storage/migrations/002_create_keyframe_table.d.ts +3 -0
- package/dist/src/storage/migrations/002_create_keyframe_table.d.ts.map +1 -0
- package/dist/src/storage/migrations/002_create_keyframe_table.js +27 -0
- package/dist/src/storage/migrations/002_create_keyframe_table.js.map +1 -0
- package/dist/src/storage/migrations/003_create_document_table.d.ts +3 -0
- package/dist/src/storage/migrations/003_create_document_table.d.ts.map +1 -0
- package/dist/src/storage/migrations/003_create_document_table.js +10 -0
- package/dist/src/storage/migrations/003_create_document_table.js.map +1 -0
- package/dist/src/storage/migrations/004_create_document_relationship_table.d.ts +3 -0
- package/dist/src/storage/migrations/004_create_document_relationship_table.d.ts.map +1 -0
- package/dist/src/storage/migrations/004_create_document_relationship_table.js +35 -0
- package/dist/src/storage/migrations/004_create_document_relationship_table.js.map +1 -0
- package/dist/src/storage/migrations/005_create_indexer_state_table.d.ts +3 -0
- package/dist/src/storage/migrations/005_create_indexer_state_table.d.ts.map +1 -0
- package/dist/src/storage/migrations/005_create_indexer_state_table.js +10 -0
- package/dist/src/storage/migrations/005_create_indexer_state_table.js.map +1 -0
- package/dist/src/storage/migrations/006_create_document_snapshot_table.d.ts +3 -0
- package/dist/src/storage/migrations/006_create_document_snapshot_table.d.ts.map +1 -0
- package/dist/src/storage/migrations/006_create_document_snapshot_table.js +49 -0
- package/dist/src/storage/migrations/006_create_document_snapshot_table.js.map +1 -0
- package/dist/src/storage/migrations/007_create_slug_mapping_table.d.ts +3 -0
- package/dist/src/storage/migrations/007_create_slug_mapping_table.d.ts.map +1 -0
- package/dist/src/storage/migrations/007_create_slug_mapping_table.js +24 -0
- package/dist/src/storage/migrations/007_create_slug_mapping_table.js.map +1 -0
- package/dist/src/storage/migrations/008_create_view_state_table.d.ts +3 -0
- package/dist/src/storage/migrations/008_create_view_state_table.d.ts.map +1 -0
- package/dist/src/storage/migrations/008_create_view_state_table.js +9 -0
- package/dist/src/storage/migrations/008_create_view_state_table.js.map +1 -0
- package/dist/src/storage/migrations/009_create_operation_index_tables.d.ts +3 -0
- package/dist/src/storage/migrations/009_create_operation_index_tables.d.ts.map +1 -0
- package/dist/src/storage/migrations/009_create_operation_index_tables.js +50 -0
- package/dist/src/storage/migrations/009_create_operation_index_tables.js.map +1 -0
- package/dist/src/storage/migrations/010_create_sync_tables.d.ts +3 -0
- package/dist/src/storage/migrations/010_create_sync_tables.d.ts.map +1 -0
- package/dist/src/storage/migrations/010_create_sync_tables.js +43 -0
- package/dist/src/storage/migrations/010_create_sync_tables.js.map +1 -0
- package/dist/src/storage/migrations/index.d.ts +3 -0
- package/dist/src/storage/migrations/index.d.ts.map +1 -0
- package/dist/src/storage/migrations/index.js +3 -0
- package/dist/src/storage/migrations/index.js.map +1 -0
- package/dist/src/storage/migrations/migrator.d.ts +5 -0
- package/dist/src/storage/migrations/migrator.d.ts.map +1 -0
- package/dist/src/storage/migrations/migrator.js +55 -0
- package/dist/src/storage/migrations/migrator.js.map +1 -0
- package/dist/src/storage/migrations/run-migrations.d.ts +2 -0
- package/dist/src/storage/migrations/run-migrations.d.ts.map +1 -0
- package/dist/src/storage/migrations/run-migrations.js +58 -0
- package/dist/src/storage/migrations/run-migrations.js.map +1 -0
- package/dist/src/storage/migrations/types.d.ts +9 -0
- package/dist/src/storage/migrations/types.d.ts.map +1 -0
- package/dist/src/storage/migrations/types.js +2 -0
- package/dist/src/storage/migrations/types.js.map +1 -0
- package/dist/src/storage/txn.d.ts +15 -0
- package/dist/src/storage/txn.d.ts.map +1 -0
- package/dist/src/storage/txn.js +43 -0
- package/dist/src/storage/txn.js.map +1 -0
- package/dist/src/subs/default-error-handler.d.ts +13 -0
- package/dist/src/subs/default-error-handler.d.ts.map +1 -0
- package/dist/src/subs/default-error-handler.js +27 -0
- package/dist/src/subs/default-error-handler.js.map +1 -0
- package/dist/src/subs/react-subscription-manager.d.ts +45 -0
- package/dist/src/subs/react-subscription-manager.d.ts.map +1 -0
- package/dist/src/subs/react-subscription-manager.js +185 -0
- package/dist/src/subs/react-subscription-manager.js.map +1 -0
- package/dist/src/subs/types.d.ts +64 -0
- package/dist/src/subs/types.d.ts.map +1 -0
- package/dist/src/subs/types.js +2 -0
- package/dist/src/subs/types.js.map +1 -0
- package/dist/src/sync/channels/index.d.ts +3 -0
- package/dist/src/sync/channels/index.d.ts.map +1 -0
- package/dist/src/sync/channels/index.js +3 -0
- package/dist/src/sync/channels/index.js.map +1 -0
- package/dist/src/sync/channels/internal-channel.d.ts +57 -0
- package/dist/src/sync/channels/internal-channel.d.ts.map +1 -0
- package/dist/src/sync/channels/internal-channel.js +106 -0
- package/dist/src/sync/channels/internal-channel.js.map +1 -0
- package/dist/src/sync/channels/utils.d.ts +15 -0
- package/dist/src/sync/channels/utils.d.ts.map +1 -0
- package/dist/src/sync/channels/utils.js +26 -0
- package/dist/src/sync/channels/utils.js.map +1 -0
- package/dist/src/sync/errors.d.ts +10 -0
- package/dist/src/sync/errors.d.ts.map +1 -0
- package/dist/src/sync/errors.js +17 -0
- package/dist/src/sync/errors.js.map +1 -0
- package/dist/src/sync/index.d.ts +12 -0
- package/dist/src/sync/index.d.ts.map +1 -0
- package/dist/src/sync/index.js +9 -0
- package/dist/src/sync/index.js.map +1 -0
- package/dist/src/sync/interfaces.d.ts +150 -0
- package/dist/src/sync/interfaces.d.ts.map +1 -0
- package/dist/src/sync/interfaces.js +2 -0
- package/dist/src/sync/interfaces.js.map +1 -0
- package/dist/src/sync/mailbox.d.ts +21 -0
- package/dist/src/sync/mailbox.d.ts.map +1 -0
- package/dist/src/sync/mailbox.js +59 -0
- package/dist/src/sync/mailbox.js.map +1 -0
- package/dist/src/sync/sync-builder.d.ts +17 -0
- package/dist/src/sync/sync-builder.d.ts.map +1 -0
- package/dist/src/sync/sync-builder.js +29 -0
- package/dist/src/sync/sync-builder.js.map +1 -0
- package/dist/src/sync/sync-manager.d.ts +33 -0
- package/dist/src/sync/sync-manager.d.ts.map +1 -0
- package/dist/src/sync/sync-manager.js +196 -0
- package/dist/src/sync/sync-manager.js.map +1 -0
- package/dist/src/sync/sync-operation.d.ts +28 -0
- package/dist/src/sync/sync-operation.d.ts.map +1 -0
- package/dist/src/sync/sync-operation.js +63 -0
- package/dist/src/sync/sync-operation.js.map +1 -0
- package/dist/src/sync/types.d.ts +61 -0
- package/dist/src/sync/types.d.ts.map +1 -0
- package/dist/src/sync/types.js +16 -0
- package/dist/src/sync/types.js.map +1 -0
- package/dist/src/sync/utils.d.ts +17 -0
- package/dist/src/sync/utils.d.ts.map +1 -0
- package/dist/src/sync/utils.js +34 -0
- package/dist/src/sync/utils.js.map +1 -0
- package/dist/src/utils/reshuffle.d.ts +30 -0
- package/dist/src/utils/reshuffle.d.ts.map +1 -0
- package/dist/src/utils/reshuffle.js +47 -0
- package/dist/src/utils/reshuffle.js.map +1 -0
- package/package.json +23 -7
- package/dist/bench/end-to-end-flow.bench.d.ts +0 -2
- package/dist/bench/end-to-end-flow.bench.d.ts.map +0 -1
- package/dist/bench/end-to-end-flow.bench.js +0 -256
- package/dist/bench/end-to-end-flow.bench.js.map +0 -1
- package/dist/bench/event-bus.bench.d.ts +0 -2
- package/dist/bench/event-bus.bench.d.ts.map +0 -1
- package/dist/bench/event-bus.bench.js +0 -238
- package/dist/bench/event-bus.bench.js.map +0 -1
- package/dist/bench/queue-only.bench.d.ts +0 -2
- package/dist/bench/queue-only.bench.d.ts.map +0 -1
- package/dist/bench/queue-only.bench.js +0 -40
- package/dist/bench/queue-only.bench.js.map +0 -1
- package/dist/bench/reactor-throughput.bench.d.ts +0 -2
- package/dist/bench/reactor-throughput.bench.d.ts.map +0 -1
- package/dist/bench/reactor-throughput.bench.js +0 -137
- package/dist/bench/reactor-throughput.bench.js.map +0 -1
- package/dist/src/executor/job-executor.d.ts +0 -62
- package/dist/src/executor/job-executor.d.ts.map +0 -1
- package/dist/src/executor/job-executor.js +0 -325
- package/dist/src/executor/job-executor.js.map +0 -1
- package/dist/test/event-bus.test.d.ts +0 -2
- package/dist/test/event-bus.test.d.ts.map +0 -1
- package/dist/test/event-bus.test.js +0 -532
- package/dist/test/event-bus.test.js.map +0 -1
- package/dist/test/job-executor.test.d.ts +0 -2
- package/dist/test/job-executor.test.d.ts.map +0 -1
- package/dist/test/job-executor.test.js +0 -581
- package/dist/test/job-executor.test.js.map +0 -1
- package/dist/test/queue.test.d.ts +0 -2
- package/dist/test/queue.test.d.ts.map +0 -1
- package/dist/test/queue.test.js +0 -396
- package/dist/test/queue.test.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error thrown when a document model module is not found in the registry.
|
|
3
|
+
*/
|
|
4
|
+
export class ModuleNotFoundError extends Error {
|
|
5
|
+
constructor(documentType) {
|
|
6
|
+
super(`Document model module not found for type: ${documentType}`);
|
|
7
|
+
this.name = "ModuleNotFoundError";
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Error thrown when attempting to register a module that already exists.
|
|
12
|
+
*/
|
|
13
|
+
export class DuplicateModuleError extends Error {
|
|
14
|
+
constructor(documentType) {
|
|
15
|
+
super(`Document model module already registered for type: ${documentType}`);
|
|
16
|
+
this.name = "DuplicateModuleError";
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Error thrown when a module is invalid or malformed.
|
|
21
|
+
*/
|
|
22
|
+
export class InvalidModuleError extends Error {
|
|
23
|
+
constructor(message) {
|
|
24
|
+
super(`Invalid document model module: ${message}`);
|
|
25
|
+
this.name = "InvalidModuleError";
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* In-memory implementation of the IDocumentModelRegistry interface.
|
|
30
|
+
* Manages document model modules and provides centralized access to their reducers, utils, and specifications.
|
|
31
|
+
*/
|
|
32
|
+
export class DocumentModelRegistry {
|
|
33
|
+
modules = new Map();
|
|
34
|
+
/**
|
|
35
|
+
* Register multiple modules at once.
|
|
36
|
+
*
|
|
37
|
+
* @param modules Document model modules to register
|
|
38
|
+
* @throws DuplicateModuleError if a module with the same document type is already registered
|
|
39
|
+
* @throws InvalidModuleError if a module is malformed
|
|
40
|
+
*/
|
|
41
|
+
registerModules(...modules) {
|
|
42
|
+
for (const module of modules) {
|
|
43
|
+
const documentType = module.documentModel.global.id;
|
|
44
|
+
if (this.modules.has(documentType)) {
|
|
45
|
+
throw new DuplicateModuleError(documentType);
|
|
46
|
+
}
|
|
47
|
+
this.modules.set(documentType, module);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Unregister multiple document model modules at once.
|
|
52
|
+
*
|
|
53
|
+
* @param documentTypes The document types to unregister
|
|
54
|
+
* @returns true if all modules were unregistered, false if any were not found
|
|
55
|
+
*/
|
|
56
|
+
unregisterModules(...documentTypes) {
|
|
57
|
+
let allFound = true;
|
|
58
|
+
for (const documentType of documentTypes) {
|
|
59
|
+
const wasDeleted = this.modules.delete(documentType);
|
|
60
|
+
if (!wasDeleted) {
|
|
61
|
+
allFound = false;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return allFound;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get a specific document model module by document type.
|
|
68
|
+
*
|
|
69
|
+
* @param documentType The document type identifier
|
|
70
|
+
* @returns The document model module
|
|
71
|
+
* @throws ModuleNotFoundError if the document type is not registered
|
|
72
|
+
*/
|
|
73
|
+
getModule(documentType) {
|
|
74
|
+
const module = this.modules.get(documentType);
|
|
75
|
+
if (module) {
|
|
76
|
+
return module;
|
|
77
|
+
}
|
|
78
|
+
throw new ModuleNotFoundError(documentType);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Get all registered document model modules.
|
|
82
|
+
* Note: This only returns loaded modules, not lazy-loaded ones.
|
|
83
|
+
*
|
|
84
|
+
* @returns Array of all registered modules
|
|
85
|
+
*/
|
|
86
|
+
getAllModules() {
|
|
87
|
+
return Array.from(this.modules.values());
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Clear all registered modules
|
|
91
|
+
*/
|
|
92
|
+
clear() {
|
|
93
|
+
this.modules.clear();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=implementation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"implementation.js","sourceRoot":"","sources":["../../../src/registry/implementation.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,YAAoB;QAC9B,KAAK,CAAC,6CAA6C,YAAY,EAAE,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,YAAoB;QAC9B,KAAK,CAAC,sDAAsD,YAAY,EAAE,CAAC,CAAC;QAC5E,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,kCAAkC,OAAO,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,qBAAqB;IACxB,OAAO,GAAG,IAAI,GAAG,EAAoC,CAAC;IAE9D;;;;;;OAMG;IACH,eAAe,CAAC,GAAG,OAAmC;QACpD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YAEpD,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,oBAAoB,CAAC,YAAY,CAAC,CAAC;YAC/C,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,iBAAiB,CAAC,GAAG,aAAuB;QAC1C,IAAI,QAAQ,GAAG,IAAI,CAAC;QAEpB,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;YACzC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACrD,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,QAAQ,GAAG,KAAK,CAAC;YACnB,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;;OAMG;IACH,SAAS,CAAC,YAAoB;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAE9C,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,IAAI,mBAAmB,CAAC,YAAY,CAAC,CAAC;IAC9C,CAAC;IAED;;;;;OAKG;IACH,aAAa;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/registry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/registry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { DocumentModelModule } from "document-model";
|
|
2
|
+
/**
|
|
3
|
+
* Registry for managing document model modules.
|
|
4
|
+
* Provides centralized access to document models' reducers, utils, and specifications.
|
|
5
|
+
*/
|
|
6
|
+
export interface IDocumentModelRegistry {
|
|
7
|
+
/**
|
|
8
|
+
* Register multiple modules at once.
|
|
9
|
+
*
|
|
10
|
+
* @param modules Document model modules to register
|
|
11
|
+
* @throws Error if a module with the same document type is already registered
|
|
12
|
+
*/
|
|
13
|
+
registerModules(...modules: DocumentModelModule<any>[]): void;
|
|
14
|
+
/**
|
|
15
|
+
* Unregister multiple document model modules at once.
|
|
16
|
+
*
|
|
17
|
+
* @param documentTypes The document types to unregister
|
|
18
|
+
* @returns true if all modules were unregistered, false if any were not found
|
|
19
|
+
*/
|
|
20
|
+
unregisterModules(...documentTypes: string[]): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Get a specific document model module by document type.
|
|
23
|
+
*
|
|
24
|
+
* @param documentType The document type identifier
|
|
25
|
+
* @returns The document model module
|
|
26
|
+
* @throws Error if the document type is not registered
|
|
27
|
+
*/
|
|
28
|
+
getModule(documentType: string): DocumentModelModule<any>;
|
|
29
|
+
/**
|
|
30
|
+
* Get all registered document model modules
|
|
31
|
+
* @returns Array of all registered modules
|
|
32
|
+
*/
|
|
33
|
+
getAllModules(): DocumentModelModule<any>[];
|
|
34
|
+
/**
|
|
35
|
+
* Clear all registered modules
|
|
36
|
+
*/
|
|
37
|
+
clear(): void;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/registry/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1D;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,eAAe,CAAC,GAAG,OAAO,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC;IAE9D;;;;;OAKG;IACH,iBAAiB,CAAC,GAAG,aAAa,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAEvD;;;;;;OAMG;IACH,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAE1D;;;OAGG;IACH,aAAa,IAAI,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;IAE5C;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;CACf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../src/registry/interfaces.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type JobInfo } from "./types.js";
|
|
2
|
+
export interface IJobAwaiter {
|
|
3
|
+
/**
|
|
4
|
+
* Waits for a job to complete: turns a job into a promise.
|
|
5
|
+
*
|
|
6
|
+
* @param jobId - The job id or job object
|
|
7
|
+
* @param signal - Optional abort signal to cancel the request
|
|
8
|
+
* @returns The result of the job
|
|
9
|
+
*/
|
|
10
|
+
waitForJob(jobId: string, signal?: AbortSignal): Promise<JobInfo>;
|
|
11
|
+
/**
|
|
12
|
+
* Shuts down the job awaiter. This will synchronously reject all pending jobs.
|
|
13
|
+
*/
|
|
14
|
+
shutdown(): void;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Default implementation of IJobAwaiter that polls for job status.
|
|
18
|
+
* Uses a single interval timer to check all pending jobs.
|
|
19
|
+
*/
|
|
20
|
+
export declare class JobAwaiter implements IJobAwaiter {
|
|
21
|
+
private getJobStatus;
|
|
22
|
+
private pollIntervalMs;
|
|
23
|
+
private pendingJobs;
|
|
24
|
+
private intervalId;
|
|
25
|
+
constructor(getJobStatus: (jobId: string, signal?: AbortSignal) => Promise<JobInfo>, pollIntervalMs?: number);
|
|
26
|
+
shutdown(): void;
|
|
27
|
+
waitForJob(jobId: string, signal?: AbortSignal): Promise<JobInfo>;
|
|
28
|
+
private startInterval;
|
|
29
|
+
private stopIntervalIfNoJobs;
|
|
30
|
+
private checkPendingJobs;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=awaiter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"awaiter.d.ts","sourceRoot":"","sources":["../../../src/shared/awaiter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,WAAW,WAAW;IAC1B;;;;;;OAMG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAElE;;OAEG;IACH,QAAQ,IAAI,IAAI,CAAC;CAClB;AAQD;;;GAGG;AACH,qBAAa,UAAW,YAAW,WAAW;IAM1C,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,cAAc;IARxB,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,UAAU,CAA+B;gBAGvC,YAAY,EAAE,CACpB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,OAAO,CAAC,EACb,cAAc,SAAK;IAK7B,QAAQ,IAAI,IAAI;IAcV,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IA2CvE,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,oBAAoB;YAOd,gBAAgB;CA+D/B"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { JobStatus } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Default implementation of IJobAwaiter that polls for job status.
|
|
4
|
+
* Uses a single interval timer to check all pending jobs.
|
|
5
|
+
*/
|
|
6
|
+
export class JobAwaiter {
|
|
7
|
+
getJobStatus;
|
|
8
|
+
pollIntervalMs;
|
|
9
|
+
// Map from job ID to list of waiters (multiple waiters can wait for same job)
|
|
10
|
+
pendingJobs = new Map();
|
|
11
|
+
intervalId = null;
|
|
12
|
+
constructor(getJobStatus, pollIntervalMs = 10) {
|
|
13
|
+
this.getJobStatus = getJobStatus;
|
|
14
|
+
this.pollIntervalMs = pollIntervalMs;
|
|
15
|
+
//
|
|
16
|
+
}
|
|
17
|
+
shutdown() {
|
|
18
|
+
if (this.intervalId !== null) {
|
|
19
|
+
clearInterval(this.intervalId);
|
|
20
|
+
this.intervalId = null;
|
|
21
|
+
}
|
|
22
|
+
// Reject all pending jobs
|
|
23
|
+
for (const [, waiters] of this.pendingJobs) {
|
|
24
|
+
for (const waiter of waiters) {
|
|
25
|
+
waiter.reject(new Error("JobAwaiter destroyed"));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
this.pendingJobs.clear();
|
|
29
|
+
}
|
|
30
|
+
async waitForJob(jobId, signal) {
|
|
31
|
+
// Check if signal is already aborted
|
|
32
|
+
if (signal?.aborted) {
|
|
33
|
+
throw new Error("Operation aborted");
|
|
34
|
+
}
|
|
35
|
+
// Create promise for this job
|
|
36
|
+
const promise = new Promise((resolve, reject) => {
|
|
37
|
+
const waiter = { resolve, reject, signal };
|
|
38
|
+
// Add to the list of waiters for this job
|
|
39
|
+
const existingWaiters = this.pendingJobs.get(jobId) || [];
|
|
40
|
+
existingWaiters.push(waiter);
|
|
41
|
+
this.pendingJobs.set(jobId, existingWaiters);
|
|
42
|
+
// If signal is provided, handle abort
|
|
43
|
+
if (signal) {
|
|
44
|
+
const abortHandler = () => {
|
|
45
|
+
// Find and remove this specific waiter
|
|
46
|
+
const waiters = this.pendingJobs.get(jobId);
|
|
47
|
+
if (waiters) {
|
|
48
|
+
const index = waiters.indexOf(waiter);
|
|
49
|
+
if (index !== -1) {
|
|
50
|
+
waiters.splice(index, 1);
|
|
51
|
+
if (waiters.length === 0) {
|
|
52
|
+
this.pendingJobs.delete(jobId);
|
|
53
|
+
}
|
|
54
|
+
waiter.reject(new Error("Operation aborted"));
|
|
55
|
+
this.stopIntervalIfNoJobs();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
signal.addEventListener("abort", abortHandler, { once: true });
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
// Start interval if not already running
|
|
63
|
+
this.startInterval();
|
|
64
|
+
return promise;
|
|
65
|
+
}
|
|
66
|
+
startInterval() {
|
|
67
|
+
if (this.intervalId === null && this.pendingJobs.size > 0) {
|
|
68
|
+
this.intervalId = setInterval(() => {
|
|
69
|
+
void this.checkPendingJobs();
|
|
70
|
+
}, this.pollIntervalMs);
|
|
71
|
+
// Check immediately as well - schedule it for next tick
|
|
72
|
+
setTimeout(() => void this.checkPendingJobs(), 0);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
stopIntervalIfNoJobs() {
|
|
76
|
+
if (this.pendingJobs.size === 0 && this.intervalId !== null) {
|
|
77
|
+
clearInterval(this.intervalId);
|
|
78
|
+
this.intervalId = null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async checkPendingJobs() {
|
|
82
|
+
// Get unique job IDs to check
|
|
83
|
+
const jobIds = Array.from(this.pendingJobs.keys());
|
|
84
|
+
// Check each job
|
|
85
|
+
const jobChecks = jobIds.map(async (jobId) => {
|
|
86
|
+
const waiters = this.pendingJobs.get(jobId);
|
|
87
|
+
if (!waiters || waiters.length === 0) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
// Filter out aborted waiters
|
|
92
|
+
const activeWaiters = waiters.filter((w) => !w.signal?.aborted);
|
|
93
|
+
if (activeWaiters.length === 0) {
|
|
94
|
+
// All waiters were aborted
|
|
95
|
+
this.pendingJobs.delete(jobId);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
// let errors bubble up
|
|
99
|
+
const jobInfo = await this.getJobStatus(jobId, activeWaiters[0].signal);
|
|
100
|
+
// Check if job is complete
|
|
101
|
+
if (jobInfo.status === JobStatus.COMPLETED ||
|
|
102
|
+
jobInfo.status === JobStatus.FAILED) {
|
|
103
|
+
// Remove from pending
|
|
104
|
+
this.pendingJobs.delete(jobId);
|
|
105
|
+
// Resolve all active waiters
|
|
106
|
+
for (const waiter of activeWaiters) {
|
|
107
|
+
waiter.resolve(jobInfo);
|
|
108
|
+
}
|
|
109
|
+
// Reject aborted waiters
|
|
110
|
+
for (const waiter of waiters) {
|
|
111
|
+
if (waiter.signal?.aborted) {
|
|
112
|
+
waiter.reject(new Error("Operation aborted"));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
// Remove from pending
|
|
119
|
+
this.pendingJobs.delete(jobId);
|
|
120
|
+
// Reject all waiters with the error
|
|
121
|
+
for (const waiter of waiters) {
|
|
122
|
+
waiter.reject(error instanceof Error ? error : new Error(String(error)));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
// Wait for all checks to complete
|
|
127
|
+
await Promise.all(jobChecks);
|
|
128
|
+
// Stop interval if no more jobs
|
|
129
|
+
this.stopIntervalIfNoJobs();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=awaiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"awaiter.js","sourceRoot":"","sources":["../../../src/shared/awaiter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { ConsistencyCoordinate, ConsistencyKey } from "./types.js";
|
|
2
|
+
export interface IConsistencyTracker {
|
|
3
|
+
/**
|
|
4
|
+
* Updates the tracker with new operation indexes.
|
|
5
|
+
* When multiple coordinates have the same key, keeps the highest operationIndex.
|
|
6
|
+
* Resolves any pending waiters whose coordinates are now satisfied.
|
|
7
|
+
*/
|
|
8
|
+
update(coordinates: ConsistencyCoordinate[]): void;
|
|
9
|
+
/**
|
|
10
|
+
* Returns the latest operation index for a given key, or undefined if not tracked.
|
|
11
|
+
*/
|
|
12
|
+
getLatest(key: ConsistencyKey): number | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* Returns a promise that resolves when all coordinates are satisfied.
|
|
15
|
+
* Rejects if the timeout is reached or the signal is aborted.
|
|
16
|
+
*/
|
|
17
|
+
waitFor(coordinates: ConsistencyCoordinate[], timeoutMs?: number, signal?: AbortSignal): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Returns a serializable snapshot of the current state.
|
|
20
|
+
*/
|
|
21
|
+
serialize(): Array<[ConsistencyKey, number]>;
|
|
22
|
+
/**
|
|
23
|
+
* Restores state from a serialized snapshot.
|
|
24
|
+
*/
|
|
25
|
+
hydrate(entries: Array<[ConsistencyKey, number]>): void;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Creates a consistency key from documentId, scope, and branch.
|
|
29
|
+
*/
|
|
30
|
+
export declare function makeConsistencyKey(documentId: string, scope: string, branch: string): ConsistencyKey;
|
|
31
|
+
/**
|
|
32
|
+
* Tracks operation indexes for documents and provides read-after-write consistency guarantees.
|
|
33
|
+
* Maintains an in-memory map of the latest operation index for each (documentId, scope, branch) tuple.
|
|
34
|
+
*/
|
|
35
|
+
export declare class ConsistencyTracker implements IConsistencyTracker {
|
|
36
|
+
private state;
|
|
37
|
+
private waiters;
|
|
38
|
+
update(coordinates: ConsistencyCoordinate[]): void;
|
|
39
|
+
getLatest(key: ConsistencyKey): number | undefined;
|
|
40
|
+
waitFor(coordinates: ConsistencyCoordinate[], timeoutMs?: number, signal?: AbortSignal): Promise<void>;
|
|
41
|
+
serialize(): Array<[ConsistencyKey, number]>;
|
|
42
|
+
hydrate(entries: Array<[ConsistencyKey, number]>): void;
|
|
43
|
+
private deduplicateCoordinates;
|
|
44
|
+
private areCoordinatesSatisfied;
|
|
45
|
+
private checkWaiters;
|
|
46
|
+
private removeWaiter;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=consistency-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consistency-tracker.d.ts","sourceRoot":"","sources":["../../../src/shared/consistency-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAExE,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,MAAM,CAAC,WAAW,EAAE,qBAAqB,EAAE,GAAG,IAAI,CAAC;IAEnD;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAAC;IAEnD;;;OAGG;IACH,OAAO,CACL,WAAW,EAAE,qBAAqB,EAAE,EACpC,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;OAEG;IACH,SAAS,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;IAE7C;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;CACzD;AAUD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,cAAc,CAEhB;AAED;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,mBAAmB;IAC5D,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,OAAO,CAAgB;IAE/B,MAAM,CAAC,WAAW,EAAE,qBAAqB,EAAE,GAAG,IAAI;IAmBlD,SAAS,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS;IAIlD,OAAO,CACL,WAAW,EAAE,qBAAqB,EAAE,EACpC,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC;IAoChB,SAAS,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAI5C,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI;IAOvD,OAAO,CAAC,sBAAsB;IAsB9B,OAAO,CAAC,uBAAuB;IAkB/B,OAAO,CAAC,YAAY;IA0BpB,OAAO,CAAC,YAAY;CASrB"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a consistency key from documentId, scope, and branch.
|
|
3
|
+
*/
|
|
4
|
+
export function makeConsistencyKey(documentId, scope, branch) {
|
|
5
|
+
return `${documentId}:${scope}:${branch}`;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Tracks operation indexes for documents and provides read-after-write consistency guarantees.
|
|
9
|
+
* Maintains an in-memory map of the latest operation index for each (documentId, scope, branch) tuple.
|
|
10
|
+
*/
|
|
11
|
+
export class ConsistencyTracker {
|
|
12
|
+
state = new Map();
|
|
13
|
+
waiters = [];
|
|
14
|
+
update(coordinates) {
|
|
15
|
+
const deduplicated = this.deduplicateCoordinates(coordinates);
|
|
16
|
+
for (let i = 0; i < deduplicated.length; i++) {
|
|
17
|
+
const coord = deduplicated[i];
|
|
18
|
+
const key = makeConsistencyKey(coord.documentId, coord.scope, coord.branch);
|
|
19
|
+
const current = this.state.get(key);
|
|
20
|
+
if (current === undefined || coord.operationIndex > current) {
|
|
21
|
+
this.state.set(key, coord.operationIndex);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
this.checkWaiters();
|
|
25
|
+
}
|
|
26
|
+
getLatest(key) {
|
|
27
|
+
return this.state.get(key);
|
|
28
|
+
}
|
|
29
|
+
waitFor(coordinates, timeoutMs, signal) {
|
|
30
|
+
if (signal?.aborted) {
|
|
31
|
+
return Promise.reject(new Error("Operation aborted"));
|
|
32
|
+
}
|
|
33
|
+
if (this.areCoordinatesSatisfied(coordinates)) {
|
|
34
|
+
return Promise.resolve();
|
|
35
|
+
}
|
|
36
|
+
return new Promise((resolve, reject) => {
|
|
37
|
+
const waiter = {
|
|
38
|
+
coordinates,
|
|
39
|
+
resolve,
|
|
40
|
+
reject,
|
|
41
|
+
signal,
|
|
42
|
+
};
|
|
43
|
+
if (timeoutMs !== undefined) {
|
|
44
|
+
waiter.timeoutId = setTimeout(() => {
|
|
45
|
+
this.removeWaiter(waiter);
|
|
46
|
+
reject(new Error(`Consistency wait timed out after ${timeoutMs}ms`));
|
|
47
|
+
}, timeoutMs);
|
|
48
|
+
}
|
|
49
|
+
if (signal) {
|
|
50
|
+
const abortHandler = () => {
|
|
51
|
+
this.removeWaiter(waiter);
|
|
52
|
+
reject(new Error("Operation aborted"));
|
|
53
|
+
};
|
|
54
|
+
signal.addEventListener("abort", abortHandler, { once: true });
|
|
55
|
+
}
|
|
56
|
+
this.waiters.push(waiter);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
serialize() {
|
|
60
|
+
return Array.from(this.state.entries());
|
|
61
|
+
}
|
|
62
|
+
hydrate(entries) {
|
|
63
|
+
this.state.clear();
|
|
64
|
+
for (const [key, index] of entries) {
|
|
65
|
+
this.state.set(key, index);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
deduplicateCoordinates(coordinates) {
|
|
69
|
+
const map = new Map();
|
|
70
|
+
for (let i = 0; i < coordinates.length; i++) {
|
|
71
|
+
const coord = coordinates[i];
|
|
72
|
+
const key = makeConsistencyKey(coord.documentId, coord.scope, coord.branch);
|
|
73
|
+
const existing = map.get(key);
|
|
74
|
+
if (!existing || coord.operationIndex > existing.operationIndex) {
|
|
75
|
+
map.set(key, coord);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return Array.from(map.values());
|
|
79
|
+
}
|
|
80
|
+
areCoordinatesSatisfied(coordinates) {
|
|
81
|
+
for (let i = 0; i < coordinates.length; i++) {
|
|
82
|
+
const coord = coordinates[i];
|
|
83
|
+
const key = makeConsistencyKey(coord.documentId, coord.scope, coord.branch);
|
|
84
|
+
const latest = this.state.get(key);
|
|
85
|
+
if (latest === undefined || latest < coord.operationIndex) {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
checkWaiters() {
|
|
92
|
+
const satisfiedWaiters = [];
|
|
93
|
+
const unsatisfiedWaiters = [];
|
|
94
|
+
for (const waiter of this.waiters) {
|
|
95
|
+
if (waiter.signal?.aborted) {
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (this.areCoordinatesSatisfied(waiter.coordinates)) {
|
|
99
|
+
satisfiedWaiters.push(waiter);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
unsatisfiedWaiters.push(waiter);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
this.waiters = unsatisfiedWaiters;
|
|
106
|
+
for (const waiter of satisfiedWaiters) {
|
|
107
|
+
if (waiter.timeoutId !== undefined) {
|
|
108
|
+
clearTimeout(waiter.timeoutId);
|
|
109
|
+
}
|
|
110
|
+
waiter.resolve();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
removeWaiter(waiter) {
|
|
114
|
+
const index = this.waiters.indexOf(waiter);
|
|
115
|
+
if (index !== -1) {
|
|
116
|
+
this.waiters.splice(index, 1);
|
|
117
|
+
}
|
|
118
|
+
if (waiter.timeoutId !== undefined) {
|
|
119
|
+
clearTimeout(waiter.timeoutId);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=consistency-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consistency-tracker.js","sourceRoot":"","sources":["../../../src/shared/consistency-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error thrown when attempting to access a deleted document.
|
|
3
|
+
*/
|
|
4
|
+
export declare class DocumentDeletedError extends Error {
|
|
5
|
+
readonly documentId: string;
|
|
6
|
+
readonly deletedAtUtcIso: string | null;
|
|
7
|
+
constructor(documentId: string, deletedAtUtcIso?: string | null);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Error thrown when attempting to add operations before CREATE_DOCUMENT.
|
|
11
|
+
*/
|
|
12
|
+
export declare class CreateDocumentRequiredError extends Error {
|
|
13
|
+
readonly documentId: string;
|
|
14
|
+
readonly scope: string;
|
|
15
|
+
constructor(documentId: string, scope: string);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/shared/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;gBAEnC,UAAU,EAAE,MAAM,EAAE,eAAe,GAAE,MAAM,GAAG,IAAW;CAYtE;AAED;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,KAAK;IACpD,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,KAAK,EAAE,MAAM,CAAC;gBAElB,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;CAU9C"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error thrown when attempting to access a deleted document.
|
|
3
|
+
*/
|
|
4
|
+
export class DocumentDeletedError extends Error {
|
|
5
|
+
documentId;
|
|
6
|
+
deletedAtUtcIso;
|
|
7
|
+
constructor(documentId, deletedAtUtcIso = null) {
|
|
8
|
+
const message = deletedAtUtcIso
|
|
9
|
+
? `Document ${documentId} was deleted at ${deletedAtUtcIso}`
|
|
10
|
+
: `Document ${documentId} has been deleted`;
|
|
11
|
+
super(message);
|
|
12
|
+
this.name = "DocumentDeletedError";
|
|
13
|
+
this.documentId = documentId;
|
|
14
|
+
this.deletedAtUtcIso = deletedAtUtcIso;
|
|
15
|
+
Error.captureStackTrace(this, DocumentDeletedError);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Error thrown when attempting to add operations before CREATE_DOCUMENT.
|
|
20
|
+
*/
|
|
21
|
+
export class CreateDocumentRequiredError extends Error {
|
|
22
|
+
documentId;
|
|
23
|
+
scope;
|
|
24
|
+
constructor(documentId, scope) {
|
|
25
|
+
const message = `Document ${documentId} requires a CREATE_DOCUMENT operation at revision 0 in the "document" scope before operations can be added to scope "${scope}"`;
|
|
26
|
+
super(message);
|
|
27
|
+
this.name = "CreateDocumentRequiredError";
|
|
28
|
+
this.documentId = documentId;
|
|
29
|
+
this.scope = scope;
|
|
30
|
+
Error.captureStackTrace(this, CreateDocumentRequiredError);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/shared/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7B,UAAU,CAAS;IACnB,eAAe,CAAgB;IAE/C,YAAY,UAAkB,EAAE,kBAAiC,IAAI;QACnE,MAAM,OAAO,GAAG,eAAe;YAC7B,CAAC,CAAC,YAAY,UAAU,mBAAmB,eAAe,EAAE;YAC5D,CAAC,CAAC,YAAY,UAAU,mBAAmB,CAAC;QAE9C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QAEvC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;IACtD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,2BAA4B,SAAQ,KAAK;IACpC,UAAU,CAAS;IACnB,KAAK,CAAS;IAE9B,YAAY,UAAkB,EAAE,KAAa;QAC3C,MAAM,OAAO,GAAG,YAAY,UAAU,wHAAwH,KAAK,GAAG,CAAC;QAEvK,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,2BAA2B,CAAC,CAAC;IAC7D,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ShutdownStatus } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Factory method to create a ShutdownStatus object
|
|
4
|
+
*
|
|
5
|
+
* @param isShutdown - Initial shutdown state
|
|
6
|
+
* @returns A ShutdownStatus object with a getter for the shutdown state
|
|
7
|
+
*/
|
|
8
|
+
export declare function createShutdownStatus(isShutdown: boolean): ShutdownStatus;
|
|
9
|
+
/**
|
|
10
|
+
* Factory method to create a ShutdownStatus that can be updated
|
|
11
|
+
*
|
|
12
|
+
* @param initialState - Initial shutdown state (default: false)
|
|
13
|
+
* @returns A tuple of [ShutdownStatus, setter function]
|
|
14
|
+
*/
|
|
15
|
+
export declare function createMutableShutdownStatus(initialState?: boolean): [ShutdownStatus, (value: boolean) => void];
|
|
16
|
+
//# sourceMappingURL=factories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factories.d.ts","sourceRoot":"","sources":["../../../src/shared/factories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,OAAO,GAAG,cAAc,CAQxE;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,YAAY,UAAQ,GACnB,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,CAc5C"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Factory method to create a ShutdownStatus object
|
|
3
|
+
*
|
|
4
|
+
* @param isShutdown - Initial shutdown state
|
|
5
|
+
* @returns A ShutdownStatus object with a getter for the shutdown state
|
|
6
|
+
*/
|
|
7
|
+
export function createShutdownStatus(isShutdown) {
|
|
8
|
+
const shutdownState = isShutdown;
|
|
9
|
+
return {
|
|
10
|
+
get isShutdown() {
|
|
11
|
+
return shutdownState;
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Factory method to create a ShutdownStatus that can be updated
|
|
17
|
+
*
|
|
18
|
+
* @param initialState - Initial shutdown state (default: false)
|
|
19
|
+
* @returns A tuple of [ShutdownStatus, setter function]
|
|
20
|
+
*/
|
|
21
|
+
export function createMutableShutdownStatus(initialState = false) {
|
|
22
|
+
let shutdownState = initialState;
|
|
23
|
+
const status = {
|
|
24
|
+
get isShutdown() {
|
|
25
|
+
return shutdownState;
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
const setShutdown = (value) => {
|
|
29
|
+
shutdownState = value;
|
|
30
|
+
};
|
|
31
|
+
return [status, setShutdown];
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=factories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factories.js","sourceRoot":"","sources":["../../../src/shared/factories.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,UAAmB;IACtD,MAAM,aAAa,GAAG,UAAU,CAAC;IAEjC,OAAO;QACL,IAAI,UAAU;YACZ,OAAO,aAAa,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CACzC,YAAY,GAAG,KAAK;IAEpB,IAAI,aAAa,GAAG,YAAY,CAAC;IAEjC,MAAM,MAAM,GAAmB;QAC7B,IAAI,UAAU;YACZ,OAAO,aAAa,CAAC;QACvB,CAAC;KACF,CAAC;IAEF,MAAM,WAAW,GAAG,CAAC,KAAc,EAAE,EAAE;QACrC,aAAa,GAAG,KAAK,CAAC;IACxB,CAAC,CAAC;IAEF,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAC/B,CAAC"}
|