@korajs/store 1.0.0-beta.2 → 1.0.0-beta.5
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/adapters/better-sqlite3.cjs.map +1 -1
- package/dist/adapters/better-sqlite3.d.cts +1 -1
- package/dist/adapters/better-sqlite3.d.ts +1 -1
- package/dist/adapters/better-sqlite3.js +1 -1
- package/dist/adapters/indexeddb.cjs +161 -35
- package/dist/adapters/indexeddb.cjs.map +1 -1
- package/dist/adapters/indexeddb.d.cts +2 -2
- package/dist/adapters/indexeddb.d.ts +2 -2
- package/dist/adapters/indexeddb.js +3 -3
- package/dist/adapters/sqlite-wasm-shared-host.cjs +333 -56
- package/dist/adapters/sqlite-wasm-shared-host.cjs.map +1 -1
- package/dist/adapters/sqlite-wasm-shared-host.d.cts +81 -1
- package/dist/adapters/sqlite-wasm-shared-host.d.ts +81 -1
- package/dist/adapters/sqlite-wasm-shared-host.js +51 -56
- package/dist/adapters/sqlite-wasm-shared-host.js.map +1 -1
- package/dist/adapters/sqlite-wasm-worker.cjs +206 -208
- package/dist/adapters/sqlite-wasm-worker.cjs.map +1 -1
- package/dist/adapters/sqlite-wasm-worker.js +8 -257
- package/dist/adapters/sqlite-wasm-worker.js.map +1 -1
- package/dist/adapters/sqlite-wasm.cjs +161 -35
- package/dist/adapters/sqlite-wasm.cjs.map +1 -1
- package/dist/adapters/sqlite-wasm.d.cts +14 -3
- package/dist/adapters/sqlite-wasm.d.ts +14 -3
- package/dist/adapters/sqlite-wasm.js +3 -3
- package/dist/{backup-IQE4QC7Q.js → backup-5S7K2Z35.js} +3 -3
- package/dist/chunk-3Y2IERBF.js +255 -0
- package/dist/chunk-3Y2IERBF.js.map +1 -0
- package/dist/{chunk-IOEFNHHP.js → chunk-COJSQBXW.js} +2 -2
- package/dist/{chunk-RCTG3IJG.js → chunk-CYO3YKFL.js} +2 -2
- package/dist/{chunk-6NKLDBTY.js → chunk-GSJ7EEUC.js} +2 -1
- package/dist/chunk-GSJ7EEUC.js.map +1 -0
- package/dist/{chunk-OCOGQRHW.js → chunk-HS6DBMST.js} +2 -2
- package/dist/{chunk-QUJGXSZ6.js → chunk-Q57CHIIN.js} +154 -37
- package/dist/chunk-Q57CHIIN.js.map +1 -0
- package/dist/{chunk-2VRPF25R.js → chunk-RL43UYQZ.js} +3 -3
- package/dist/{chunk-QL2XVZRN.js → chunk-TUR7RGEP.js} +12 -1
- package/dist/{chunk-QL2XVZRN.js.map → chunk-TUR7RGEP.js.map} +1 -1
- package/dist/{export-audit-MT2LTMIN.js → export-audit-ODGQTQIK.js} +3 -3
- package/dist/index.cjs +132 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +37 -5
- package/dist/index.d.ts +37 -5
- package/dist/index.js +131 -12
- package/dist/index.js.map +1 -1
- package/dist/internal.cjs +1 -0
- package/dist/internal.cjs.map +1 -1
- package/dist/internal.d.cts +3 -3
- package/dist/internal.d.ts +3 -3
- package/dist/internal.js +3 -3
- package/dist/{sqlite-wasm-channel-DUDPclTE.d.cts → sqlite-wasm-channel-Bx57s8Cq.d.cts} +1 -1
- package/dist/{sqlite-wasm-channel-DUDPclTE.d.ts → sqlite-wasm-channel-Bx57s8Cq.d.ts} +1 -1
- package/dist/sqlite-wasm-channel-NGSBJR44.js +12 -0
- package/dist/{types-5h4Hqcwc.d.ts → types-C1kigrWz.d.ts} +1 -1
- package/dist/{types-k6AZgiH4.d.ts → types-D1MzKVmk.d.cts} +10 -0
- package/dist/{types-k6AZgiH4.d.cts → types-D1MzKVmk.d.ts} +10 -0
- package/dist/{types-DfPiPwKr.d.cts → types-DAo9oduO.d.cts} +1 -1
- package/package.json +2 -2
- package/dist/chunk-6NKLDBTY.js.map +0 -1
- package/dist/chunk-QUJGXSZ6.js.map +0 -1
- package/dist/sqlite-wasm-channel-H43KEZLM.js +0 -12
- /package/dist/{backup-IQE4QC7Q.js.map → backup-5S7K2Z35.js.map} +0 -0
- /package/dist/{chunk-IOEFNHHP.js.map → chunk-COJSQBXW.js.map} +0 -0
- /package/dist/{chunk-RCTG3IJG.js.map → chunk-CYO3YKFL.js.map} +0 -0
- /package/dist/{chunk-OCOGQRHW.js.map → chunk-HS6DBMST.js.map} +0 -0
- /package/dist/{chunk-2VRPF25R.js.map → chunk-RL43UYQZ.js.map} +0 -0
- /package/dist/{export-audit-MT2LTMIN.js.map → export-audit-ODGQTQIK.js.map} +0 -0
- /package/dist/{sqlite-wasm-channel-H43KEZLM.js.map → sqlite-wasm-channel-NGSBJR44.js.map} +0 -0
package/dist/index.d.cts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { C as CollectionRecord, S as StorageAdapter, Q as QueryDescriptor, c as SubscriptionCallback, W as WhereClause, d as OrderByDirection, L as LocalMutationHandler, e as StoreConfig, A as ApplyRemoteOptions, f as MaterializedRowSnapshot, g as RowVersionState } from './types-
|
|
2
|
-
export { M as MigrationPlan, h as OrderByClause, i as StoreIsolation, T as Transaction, j as TransactionBufferedEntry, k as TransactionCommitBatch, l as TransactionCommitResult, m as WhereOperators } from './types-
|
|
1
|
+
import { C as CollectionRecord, S as StorageAdapter, Q as QueryDescriptor, c as SubscriptionCallback, W as WhereClause, d as OrderByDirection, L as LocalMutationHandler, e as StoreConfig, A as ApplyRemoteOptions, f as MaterializedRowSnapshot, g as RowVersionState } from './types-D1MzKVmk.cjs';
|
|
2
|
+
export { M as MigrationPlan, h as OrderByClause, i as StoreIsolation, T as Transaction, j as TransactionBufferedEntry, k as TransactionCommitBatch, l as TransactionCommitResult, m as WhereOperators } from './types-D1MzKVmk.cjs';
|
|
3
3
|
import { Operation, KoraError, VersionVector, SchemaDefinition, HLCTimestamp, MergeTrace, CollectionDefinition, SequenceConfig, HybridLogicalClock, CausalTracker, OperationLog, ApplyResult, StateMachineDefinition, KoraBytesValue, KoraEvent, BlobRefMetadata, BlobRef } from '@korajs/core';
|
|
4
4
|
export { ApplyResult } from '@korajs/core';
|
|
5
|
-
import { R as RelationEnforcer, L as LocalMutationContext } from './types-
|
|
6
|
-
export { C as Collection } from './types-
|
|
5
|
+
import { R as RelationEnforcer, L as LocalMutationContext } from './types-DAo9oduO.cjs';
|
|
6
|
+
export { C as Collection } from './types-DAo9oduO.cjs';
|
|
7
7
|
import * as yjs from 'yjs';
|
|
8
8
|
import { C as ContentAddressedBlobStore, M as MemoryBlobStore } from './content-addressed-blob-store-Dcj3SB9r.cjs';
|
|
9
9
|
export { B as BlobIntegrityError } from './content-addressed-blob-store-Dcj3SB9r.cjs';
|
|
@@ -71,6 +71,15 @@ declare class WorkerInitError extends KoraError {
|
|
|
71
71
|
declare class WorkerTimeoutError extends KoraError {
|
|
72
72
|
constructor(operation: string, timeoutMs: number);
|
|
73
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Thrown when a follower tab cannot reach a live leader tab over the multi-tab
|
|
76
|
+
* broadcast channel (the leader tab was closed, crashed, or is unresponsive).
|
|
77
|
+
* Distinct from {@link WorkerTimeoutError}: this fails fast on a confirmed-absent
|
|
78
|
+
* leader instead of waiting out the full RPC timeout.
|
|
79
|
+
*/
|
|
80
|
+
declare class NoLeaderError extends KoraError {
|
|
81
|
+
constructor(operation: string);
|
|
82
|
+
}
|
|
74
83
|
/**
|
|
75
84
|
* Thrown when IndexedDB persistence operations fail (serialize/deserialize).
|
|
76
85
|
*/
|
|
@@ -849,6 +858,23 @@ declare class Store implements OperationLog {
|
|
|
849
858
|
* Persist or clear the delta cursor for paginated initial sync resume.
|
|
850
859
|
*/
|
|
851
860
|
saveDeltaCursor(cursor: string | null): Promise<void>;
|
|
861
|
+
/**
|
|
862
|
+
* Load the persisted delivery watermark for a view signature (0 when none recorded).
|
|
863
|
+
* Defaults to the unfiltered view so existing single-watermark reads keep working.
|
|
864
|
+
*/
|
|
865
|
+
loadDeliveryWatermark(signature?: string): Promise<number>;
|
|
866
|
+
/**
|
|
867
|
+
* Persist the delivery watermark for a view signature so it survives a client restart.
|
|
868
|
+
*/
|
|
869
|
+
saveDeliveryWatermark(signature: string, watermark: number): Promise<void>;
|
|
870
|
+
/**
|
|
871
|
+
* Load every persisted view watermark, keyed by signature.
|
|
872
|
+
*/
|
|
873
|
+
loadAllDeliveryWatermarks(): Promise<Record<string, number>>;
|
|
874
|
+
/**
|
|
875
|
+
* Delete a persisted view watermark (safe: the view back-fills from 0 when next visited).
|
|
876
|
+
*/
|
|
877
|
+
deleteDeliveryWatermark(signature: string): Promise<void>;
|
|
852
878
|
/**
|
|
853
879
|
* Local operations not yet reflected on the server version vector.
|
|
854
880
|
*/
|
|
@@ -883,6 +909,12 @@ declare class Store implements OperationLog {
|
|
|
883
909
|
* Latest operation for a record from any node (for 3-way merge when local op log is empty).
|
|
884
910
|
*/
|
|
885
911
|
getLatestOperationForRecord(collection: string, recordId: string): Promise<Operation | null>;
|
|
912
|
+
/**
|
|
913
|
+
* All operations for a record, sorted in HLC total order (wallTime, logical,
|
|
914
|
+
* nodeId). Used by the apply pipeline to materialize atomic-op fields by folding
|
|
915
|
+
* the record's log, matching the server's materialization exactly.
|
|
916
|
+
*/
|
|
917
|
+
getOperationsForRecord(collection: string, recordId: string): Promise<Operation[]>;
|
|
886
918
|
/** Expose the subscription manager for direct access (e.g., by QueryBuilder) */
|
|
887
919
|
getSubscriptionManager(): SubscriptionManager;
|
|
888
920
|
/**
|
|
@@ -1748,4 +1780,4 @@ declare function createChunkPortPair(): {
|
|
|
1748
1780
|
b: ChunkMessagePort;
|
|
1749
1781
|
};
|
|
1750
1782
|
|
|
1751
|
-
export { AdapterError, ApplyRemoteOptions, type AuditExportManifest, type AuditExportOptions, type AuditExportPayload, type AuditExportProgress, type AuditTraceQuery, type BackupManifest, type BackupOptions, type BackupProgress, type BlobGcOptions, type BlobGcResult, type BlobManifest, type BlobManifestMetadata, COMPACTION_BASELINE_META_KEY, type ChunkMessage, type ChunkMessagePort, type ChunkProvider, type ChunkRequestMessage, type ChunkResponseMessage, type ClockRebaseResult, type CollectionAccessor, CollectionRecord, type CompactionResult, type CompactionStrategy, ContentAddressedBlobStore, type CreateRichTextControllerOptions, DEFAULT_CHUNK_SIZE, InvalidStateTransitionError, LAST_ACKED_SERVER_VECTOR_META_KEY, LocalMutationHandler, MaterializedRowSnapshot, MemoryBlobStore, type OpfsBlobDirectory, OpfsBlobStore, OptimisticLockError, OrderByDirection, type PersistedAuditTrace, PersistenceError, QueryBuilder, QueryDescriptor, QueryError, QueryStore, QueryStoreCache, type ReceiveBlobResult, type ReceiveBlobStores, RecordNotFoundError, type RemoteChunkProvider, type ReplaySnapshot, type RestoreOptions, type RestoreResult, type RichTextAwarenessUser, type RichTextController, type RichTextControllerSnapshot, type RichTextCursorInfo, type RichTextSyncEngine, RowVersionState, SequenceManager, type ServerBlobCallbacks, StorageAdapter, Store, StoreConfig, StoreNotOpenError, SubscriptionBloomFilter, SubscriptionCallback, SubscriptionManager, type SubscriptionManagerOptions, type SubscriptionStats, type TransactionCollectionAccessor, TransactionContext, type TransactionContextConfig, WhereClause, WorkerInitError, WorkerTimeoutError, asRichTextSyncEngine, assertQueryReady, chunkBlob, collectBlobGarbage, collectOperationsAheadOfServer, compactOperationLog, computeAckCompactionWatermark, createChunkPortPair, createMemoryServerBlobStore, createOpfsBlobDirectory, createOpfsBlobStore, createRemoteChunkProvider, createRichTextController, decodeAuditExport, decodeRichtext, deserializeVersionVectorFromMeta, encodeRichtext, exportBackup, extractBlobRefs, fetchBlobManifest, getSharedQueryStoreCache, mergeVersionVectors, parseBlobManifest, persistedAuditTraceFromEvent, pluralize, prepareBlobForSend, putBlobForTransfer, readAuditExportManifest, readBackupManifest, reassembleBlob, receiveBlob, resolveBlobManifest, restoreBackup, richtextStatesEqual, richtextToPlainText, serializeBlobManifest, serializeVersionVectorToMeta, serveBlobChunks, singularize, toServerBlobCallbacks, validateStateTransition, validateUpdateStateMachine, verifyAuditExportChecksum, verifyBackupChecksum };
|
|
1783
|
+
export { AdapterError, ApplyRemoteOptions, type AuditExportManifest, type AuditExportOptions, type AuditExportPayload, type AuditExportProgress, type AuditTraceQuery, type BackupManifest, type BackupOptions, type BackupProgress, type BlobGcOptions, type BlobGcResult, type BlobManifest, type BlobManifestMetadata, COMPACTION_BASELINE_META_KEY, type ChunkMessage, type ChunkMessagePort, type ChunkProvider, type ChunkRequestMessage, type ChunkResponseMessage, type ClockRebaseResult, type CollectionAccessor, CollectionRecord, type CompactionResult, type CompactionStrategy, ContentAddressedBlobStore, type CreateRichTextControllerOptions, DEFAULT_CHUNK_SIZE, InvalidStateTransitionError, LAST_ACKED_SERVER_VECTOR_META_KEY, LocalMutationHandler, MaterializedRowSnapshot, MemoryBlobStore, NoLeaderError, type OpfsBlobDirectory, OpfsBlobStore, OptimisticLockError, OrderByDirection, type PersistedAuditTrace, PersistenceError, QueryBuilder, QueryDescriptor, QueryError, QueryStore, QueryStoreCache, type ReceiveBlobResult, type ReceiveBlobStores, RecordNotFoundError, type RemoteChunkProvider, type ReplaySnapshot, type RestoreOptions, type RestoreResult, type RichTextAwarenessUser, type RichTextController, type RichTextControllerSnapshot, type RichTextCursorInfo, type RichTextSyncEngine, RowVersionState, SequenceManager, type ServerBlobCallbacks, StorageAdapter, Store, StoreConfig, StoreNotOpenError, SubscriptionBloomFilter, SubscriptionCallback, SubscriptionManager, type SubscriptionManagerOptions, type SubscriptionStats, type TransactionCollectionAccessor, TransactionContext, type TransactionContextConfig, WhereClause, WorkerInitError, WorkerTimeoutError, asRichTextSyncEngine, assertQueryReady, chunkBlob, collectBlobGarbage, collectOperationsAheadOfServer, compactOperationLog, computeAckCompactionWatermark, createChunkPortPair, createMemoryServerBlobStore, createOpfsBlobDirectory, createOpfsBlobStore, createRemoteChunkProvider, createRichTextController, decodeAuditExport, decodeRichtext, deserializeVersionVectorFromMeta, encodeRichtext, exportBackup, extractBlobRefs, fetchBlobManifest, getSharedQueryStoreCache, mergeVersionVectors, parseBlobManifest, persistedAuditTraceFromEvent, pluralize, prepareBlobForSend, putBlobForTransfer, readAuditExportManifest, readBackupManifest, reassembleBlob, receiveBlob, resolveBlobManifest, restoreBackup, richtextStatesEqual, richtextToPlainText, serializeBlobManifest, serializeVersionVectorToMeta, serveBlobChunks, singularize, toServerBlobCallbacks, validateStateTransition, validateUpdateStateMachine, verifyAuditExportChecksum, verifyBackupChecksum };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { C as CollectionRecord, S as StorageAdapter, Q as QueryDescriptor, c as SubscriptionCallback, W as WhereClause, d as OrderByDirection, L as LocalMutationHandler, e as StoreConfig, A as ApplyRemoteOptions, f as MaterializedRowSnapshot, g as RowVersionState } from './types-
|
|
2
|
-
export { M as MigrationPlan, h as OrderByClause, i as StoreIsolation, T as Transaction, j as TransactionBufferedEntry, k as TransactionCommitBatch, l as TransactionCommitResult, m as WhereOperators } from './types-
|
|
1
|
+
import { C as CollectionRecord, S as StorageAdapter, Q as QueryDescriptor, c as SubscriptionCallback, W as WhereClause, d as OrderByDirection, L as LocalMutationHandler, e as StoreConfig, A as ApplyRemoteOptions, f as MaterializedRowSnapshot, g as RowVersionState } from './types-D1MzKVmk.js';
|
|
2
|
+
export { M as MigrationPlan, h as OrderByClause, i as StoreIsolation, T as Transaction, j as TransactionBufferedEntry, k as TransactionCommitBatch, l as TransactionCommitResult, m as WhereOperators } from './types-D1MzKVmk.js';
|
|
3
3
|
import { Operation, KoraError, VersionVector, SchemaDefinition, HLCTimestamp, MergeTrace, CollectionDefinition, SequenceConfig, HybridLogicalClock, CausalTracker, OperationLog, ApplyResult, StateMachineDefinition, KoraBytesValue, KoraEvent, BlobRefMetadata, BlobRef } from '@korajs/core';
|
|
4
4
|
export { ApplyResult } from '@korajs/core';
|
|
5
|
-
import { R as RelationEnforcer, L as LocalMutationContext } from './types-
|
|
6
|
-
export { C as Collection } from './types-
|
|
5
|
+
import { R as RelationEnforcer, L as LocalMutationContext } from './types-C1kigrWz.js';
|
|
6
|
+
export { C as Collection } from './types-C1kigrWz.js';
|
|
7
7
|
import * as yjs from 'yjs';
|
|
8
8
|
import { C as ContentAddressedBlobStore, M as MemoryBlobStore } from './content-addressed-blob-store-Dcj3SB9r.js';
|
|
9
9
|
export { B as BlobIntegrityError } from './content-addressed-blob-store-Dcj3SB9r.js';
|
|
@@ -71,6 +71,15 @@ declare class WorkerInitError extends KoraError {
|
|
|
71
71
|
declare class WorkerTimeoutError extends KoraError {
|
|
72
72
|
constructor(operation: string, timeoutMs: number);
|
|
73
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Thrown when a follower tab cannot reach a live leader tab over the multi-tab
|
|
76
|
+
* broadcast channel (the leader tab was closed, crashed, or is unresponsive).
|
|
77
|
+
* Distinct from {@link WorkerTimeoutError}: this fails fast on a confirmed-absent
|
|
78
|
+
* leader instead of waiting out the full RPC timeout.
|
|
79
|
+
*/
|
|
80
|
+
declare class NoLeaderError extends KoraError {
|
|
81
|
+
constructor(operation: string);
|
|
82
|
+
}
|
|
74
83
|
/**
|
|
75
84
|
* Thrown when IndexedDB persistence operations fail (serialize/deserialize).
|
|
76
85
|
*/
|
|
@@ -849,6 +858,23 @@ declare class Store implements OperationLog {
|
|
|
849
858
|
* Persist or clear the delta cursor for paginated initial sync resume.
|
|
850
859
|
*/
|
|
851
860
|
saveDeltaCursor(cursor: string | null): Promise<void>;
|
|
861
|
+
/**
|
|
862
|
+
* Load the persisted delivery watermark for a view signature (0 when none recorded).
|
|
863
|
+
* Defaults to the unfiltered view so existing single-watermark reads keep working.
|
|
864
|
+
*/
|
|
865
|
+
loadDeliveryWatermark(signature?: string): Promise<number>;
|
|
866
|
+
/**
|
|
867
|
+
* Persist the delivery watermark for a view signature so it survives a client restart.
|
|
868
|
+
*/
|
|
869
|
+
saveDeliveryWatermark(signature: string, watermark: number): Promise<void>;
|
|
870
|
+
/**
|
|
871
|
+
* Load every persisted view watermark, keyed by signature.
|
|
872
|
+
*/
|
|
873
|
+
loadAllDeliveryWatermarks(): Promise<Record<string, number>>;
|
|
874
|
+
/**
|
|
875
|
+
* Delete a persisted view watermark (safe: the view back-fills from 0 when next visited).
|
|
876
|
+
*/
|
|
877
|
+
deleteDeliveryWatermark(signature: string): Promise<void>;
|
|
852
878
|
/**
|
|
853
879
|
* Local operations not yet reflected on the server version vector.
|
|
854
880
|
*/
|
|
@@ -883,6 +909,12 @@ declare class Store implements OperationLog {
|
|
|
883
909
|
* Latest operation for a record from any node (for 3-way merge when local op log is empty).
|
|
884
910
|
*/
|
|
885
911
|
getLatestOperationForRecord(collection: string, recordId: string): Promise<Operation | null>;
|
|
912
|
+
/**
|
|
913
|
+
* All operations for a record, sorted in HLC total order (wallTime, logical,
|
|
914
|
+
* nodeId). Used by the apply pipeline to materialize atomic-op fields by folding
|
|
915
|
+
* the record's log, matching the server's materialization exactly.
|
|
916
|
+
*/
|
|
917
|
+
getOperationsForRecord(collection: string, recordId: string): Promise<Operation[]>;
|
|
886
918
|
/** Expose the subscription manager for direct access (e.g., by QueryBuilder) */
|
|
887
919
|
getSubscriptionManager(): SubscriptionManager;
|
|
888
920
|
/**
|
|
@@ -1748,4 +1780,4 @@ declare function createChunkPortPair(): {
|
|
|
1748
1780
|
b: ChunkMessagePort;
|
|
1749
1781
|
};
|
|
1750
1782
|
|
|
1751
|
-
export { AdapterError, ApplyRemoteOptions, type AuditExportManifest, type AuditExportOptions, type AuditExportPayload, type AuditExportProgress, type AuditTraceQuery, type BackupManifest, type BackupOptions, type BackupProgress, type BlobGcOptions, type BlobGcResult, type BlobManifest, type BlobManifestMetadata, COMPACTION_BASELINE_META_KEY, type ChunkMessage, type ChunkMessagePort, type ChunkProvider, type ChunkRequestMessage, type ChunkResponseMessage, type ClockRebaseResult, type CollectionAccessor, CollectionRecord, type CompactionResult, type CompactionStrategy, ContentAddressedBlobStore, type CreateRichTextControllerOptions, DEFAULT_CHUNK_SIZE, InvalidStateTransitionError, LAST_ACKED_SERVER_VECTOR_META_KEY, LocalMutationHandler, MaterializedRowSnapshot, MemoryBlobStore, type OpfsBlobDirectory, OpfsBlobStore, OptimisticLockError, OrderByDirection, type PersistedAuditTrace, PersistenceError, QueryBuilder, QueryDescriptor, QueryError, QueryStore, QueryStoreCache, type ReceiveBlobResult, type ReceiveBlobStores, RecordNotFoundError, type RemoteChunkProvider, type ReplaySnapshot, type RestoreOptions, type RestoreResult, type RichTextAwarenessUser, type RichTextController, type RichTextControllerSnapshot, type RichTextCursorInfo, type RichTextSyncEngine, RowVersionState, SequenceManager, type ServerBlobCallbacks, StorageAdapter, Store, StoreConfig, StoreNotOpenError, SubscriptionBloomFilter, SubscriptionCallback, SubscriptionManager, type SubscriptionManagerOptions, type SubscriptionStats, type TransactionCollectionAccessor, TransactionContext, type TransactionContextConfig, WhereClause, WorkerInitError, WorkerTimeoutError, asRichTextSyncEngine, assertQueryReady, chunkBlob, collectBlobGarbage, collectOperationsAheadOfServer, compactOperationLog, computeAckCompactionWatermark, createChunkPortPair, createMemoryServerBlobStore, createOpfsBlobDirectory, createOpfsBlobStore, createRemoteChunkProvider, createRichTextController, decodeAuditExport, decodeRichtext, deserializeVersionVectorFromMeta, encodeRichtext, exportBackup, extractBlobRefs, fetchBlobManifest, getSharedQueryStoreCache, mergeVersionVectors, parseBlobManifest, persistedAuditTraceFromEvent, pluralize, prepareBlobForSend, putBlobForTransfer, readAuditExportManifest, readBackupManifest, reassembleBlob, receiveBlob, resolveBlobManifest, restoreBackup, richtextStatesEqual, richtextToPlainText, serializeBlobManifest, serializeVersionVectorToMeta, serveBlobChunks, singularize, toServerBlobCallbacks, validateStateTransition, validateUpdateStateMachine, verifyAuditExportChecksum, verifyBackupChecksum };
|
|
1783
|
+
export { AdapterError, ApplyRemoteOptions, type AuditExportManifest, type AuditExportOptions, type AuditExportPayload, type AuditExportProgress, type AuditTraceQuery, type BackupManifest, type BackupOptions, type BackupProgress, type BlobGcOptions, type BlobGcResult, type BlobManifest, type BlobManifestMetadata, COMPACTION_BASELINE_META_KEY, type ChunkMessage, type ChunkMessagePort, type ChunkProvider, type ChunkRequestMessage, type ChunkResponseMessage, type ClockRebaseResult, type CollectionAccessor, CollectionRecord, type CompactionResult, type CompactionStrategy, ContentAddressedBlobStore, type CreateRichTextControllerOptions, DEFAULT_CHUNK_SIZE, InvalidStateTransitionError, LAST_ACKED_SERVER_VECTOR_META_KEY, LocalMutationHandler, MaterializedRowSnapshot, MemoryBlobStore, NoLeaderError, type OpfsBlobDirectory, OpfsBlobStore, OptimisticLockError, OrderByDirection, type PersistedAuditTrace, PersistenceError, QueryBuilder, QueryDescriptor, QueryError, QueryStore, QueryStoreCache, type ReceiveBlobResult, type ReceiveBlobStores, RecordNotFoundError, type RemoteChunkProvider, type ReplaySnapshot, type RestoreOptions, type RestoreResult, type RichTextAwarenessUser, type RichTextController, type RichTextControllerSnapshot, type RichTextCursorInfo, type RichTextSyncEngine, RowVersionState, SequenceManager, type ServerBlobCallbacks, StorageAdapter, Store, StoreConfig, StoreNotOpenError, SubscriptionBloomFilter, SubscriptionCallback, SubscriptionManager, type SubscriptionManagerOptions, type SubscriptionStats, type TransactionCollectionAccessor, TransactionContext, type TransactionContextConfig, WhereClause, WorkerInitError, WorkerTimeoutError, asRichTextSyncEngine, assertQueryReady, chunkBlob, collectBlobGarbage, collectOperationsAheadOfServer, compactOperationLog, computeAckCompactionWatermark, createChunkPortPair, createMemoryServerBlobStore, createOpfsBlobDirectory, createOpfsBlobStore, createRemoteChunkProvider, createRichTextController, decodeAuditExport, decodeRichtext, deserializeVersionVectorFromMeta, encodeRichtext, exportBackup, extractBlobRefs, fetchBlobManifest, getSharedQueryStoreCache, mergeVersionVectors, parseBlobManifest, persistedAuditTraceFromEvent, pluralize, prepareBlobForSend, putBlobForTransfer, readAuditExportManifest, readBackupManifest, reassembleBlob, receiveBlob, resolveBlobManifest, restoreBackup, richtextStatesEqual, richtextToPlainText, serializeBlobManifest, serializeVersionVectorToMeta, serveBlobChunks, singularize, toServerBlobCallbacks, validateStateTransition, validateUpdateStateMachine, verifyAuditExportChecksum, verifyBackupChecksum };
|
package/dist/index.js
CHANGED
|
@@ -3,12 +3,12 @@ import {
|
|
|
3
3
|
readBackupManifest,
|
|
4
4
|
restoreBackup,
|
|
5
5
|
verifyBackupChecksum
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-HS6DBMST.js";
|
|
7
7
|
import {
|
|
8
8
|
decodeAuditExport,
|
|
9
9
|
readAuditExportManifest,
|
|
10
10
|
verifyAuditExportChecksum
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-CYO3YKFL.js";
|
|
12
12
|
import {
|
|
13
13
|
persistedAuditTraceFromEvent
|
|
14
14
|
} from "./chunk-MYSJN3DF.js";
|
|
@@ -39,7 +39,7 @@ import {
|
|
|
39
39
|
serializeRowVersion,
|
|
40
40
|
validateStateTransition,
|
|
41
41
|
validateUpdateStateMachine
|
|
42
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-RL43UYQZ.js";
|
|
43
43
|
import {
|
|
44
44
|
decodeRichtext,
|
|
45
45
|
decodeRichtextFieldsFromOpData,
|
|
@@ -51,9 +51,10 @@ import {
|
|
|
51
51
|
richtextToPlainText,
|
|
52
52
|
serializeOperation,
|
|
53
53
|
serializeRecord
|
|
54
|
-
} from "./chunk-
|
|
54
|
+
} from "./chunk-GSJ7EEUC.js";
|
|
55
55
|
import {
|
|
56
56
|
AdapterError,
|
|
57
|
+
NoLeaderError,
|
|
57
58
|
OptimisticLockError,
|
|
58
59
|
PersistenceError,
|
|
59
60
|
QueryError,
|
|
@@ -61,7 +62,7 @@ import {
|
|
|
61
62
|
StoreNotOpenError,
|
|
62
63
|
WorkerInitError,
|
|
63
64
|
WorkerTimeoutError
|
|
64
|
-
} from "./chunk-
|
|
65
|
+
} from "./chunk-TUR7RGEP.js";
|
|
65
66
|
|
|
66
67
|
// src/compaction/types.ts
|
|
67
68
|
var COMPACTION_BASELINE_META_KEY = "compaction_baseline_at";
|
|
@@ -130,6 +131,7 @@ function buildDeleteSql(table, withAge) {
|
|
|
130
131
|
import { createVersionVector as createVersionVector2 } from "@korajs/core";
|
|
131
132
|
var LAST_ACKED_SERVER_VECTOR_META_KEY = "last_acked_server_vector";
|
|
132
133
|
var DELTA_CURSOR_META_KEY = "delta_cursor";
|
|
134
|
+
var DELIVERY_WATERMARK_META_KEY = "delivery_watermark";
|
|
133
135
|
function serializeVersionVectorToMeta(vector) {
|
|
134
136
|
const record = {};
|
|
135
137
|
for (const [nodeId, seq] of vector) {
|
|
@@ -202,6 +204,45 @@ async function saveDeltaCursor(adapter, cursor) {
|
|
|
202
204
|
cursor
|
|
203
205
|
]);
|
|
204
206
|
}
|
|
207
|
+
function deliveryWatermarkKey(signature) {
|
|
208
|
+
return signature === "" ? DELIVERY_WATERMARK_META_KEY : `${DELIVERY_WATERMARK_META_KEY}:${signature}`;
|
|
209
|
+
}
|
|
210
|
+
async function loadDeliveryWatermark(adapter, signature) {
|
|
211
|
+
const rows = await adapter.query("SELECT value FROM _kora_meta WHERE key = ?", [
|
|
212
|
+
deliveryWatermarkKey(signature)
|
|
213
|
+
]);
|
|
214
|
+
const value = rows[0]?.value;
|
|
215
|
+
if (value === void 0 || value === null) {
|
|
216
|
+
return 0;
|
|
217
|
+
}
|
|
218
|
+
const parsed = Number(value);
|
|
219
|
+
return Number.isFinite(parsed) && parsed >= 0 ? parsed : 0;
|
|
220
|
+
}
|
|
221
|
+
async function saveDeliveryWatermark(adapter, signature, watermark) {
|
|
222
|
+
await adapter.execute("INSERT OR REPLACE INTO _kora_meta (key, value) VALUES (?, ?)", [
|
|
223
|
+
deliveryWatermarkKey(signature),
|
|
224
|
+
String(watermark)
|
|
225
|
+
]);
|
|
226
|
+
}
|
|
227
|
+
async function deleteDeliveryWatermark(adapter, signature) {
|
|
228
|
+
await adapter.execute("DELETE FROM _kora_meta WHERE key = ?", [deliveryWatermarkKey(signature)]);
|
|
229
|
+
}
|
|
230
|
+
async function loadAllDeliveryWatermarks(adapter) {
|
|
231
|
+
const rows = await adapter.query(
|
|
232
|
+
"SELECT key, value FROM _kora_meta WHERE key = ? OR key LIKE ?",
|
|
233
|
+
[DELIVERY_WATERMARK_META_KEY, `${DELIVERY_WATERMARK_META_KEY}:%`]
|
|
234
|
+
);
|
|
235
|
+
const result = {};
|
|
236
|
+
const prefix = `${DELIVERY_WATERMARK_META_KEY}:`;
|
|
237
|
+
for (const row of rows) {
|
|
238
|
+
const signature = row.key === DELIVERY_WATERMARK_META_KEY ? "" : row.key.slice(prefix.length);
|
|
239
|
+
const parsed = Number(row.value);
|
|
240
|
+
if (Number.isFinite(parsed) && parsed >= 0) {
|
|
241
|
+
result[signature] = parsed;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return result;
|
|
245
|
+
}
|
|
205
246
|
|
|
206
247
|
// src/store/store.ts
|
|
207
248
|
import {
|
|
@@ -210,7 +251,8 @@ import {
|
|
|
210
251
|
createVersionVector as createVersionVector3,
|
|
211
252
|
generateUUIDv7 as generateUUIDv73,
|
|
212
253
|
migrationStepsToSQL,
|
|
213
|
-
quoteIdent as quoteIdent7
|
|
254
|
+
quoteIdent as quoteIdent7,
|
|
255
|
+
replayOperationsForRecord
|
|
214
256
|
} from "@korajs/core";
|
|
215
257
|
|
|
216
258
|
// src/collection/collection.ts
|
|
@@ -2195,7 +2237,8 @@ var Store = class {
|
|
|
2195
2237
|
throw new OptimisticLockError(collection, op.recordId);
|
|
2196
2238
|
}
|
|
2197
2239
|
};
|
|
2198
|
-
if (
|
|
2240
|
+
if (options?.logOnly) {
|
|
2241
|
+
} else if (op.type === "insert" && materializeSource) {
|
|
2199
2242
|
const serializedData = serializeRecord(materializeSource, definition.fields);
|
|
2200
2243
|
const existing2 = await tx.query(
|
|
2201
2244
|
`SELECT _updated_at, _version, _field_versions, _deleted FROM ${collection} WHERE id = ?`,
|
|
@@ -2217,7 +2260,7 @@ var Store = class {
|
|
|
2217
2260
|
};
|
|
2218
2261
|
const insertQuery = buildInsertQuery(collection, record);
|
|
2219
2262
|
await tx.execute(insertQuery.sql, insertQuery.params);
|
|
2220
|
-
await this.foldOrphanedOperations(tx, collection, definition, op.recordId);
|
|
2263
|
+
await this.foldOrphanedOperations(tx, collection, definition, op.recordId, op);
|
|
2221
2264
|
} else if (row._deleted === 1) {
|
|
2222
2265
|
if (isIncomingNewerThanRow(materializeTimestamp, row)) {
|
|
2223
2266
|
const fieldChanges = {
|
|
@@ -2369,7 +2412,7 @@ var Store = class {
|
|
|
2369
2412
|
* necessarily an orphan (rows are soft-deleted, never removed, so a row
|
|
2370
2413
|
* that is absent now was never materialized).
|
|
2371
2414
|
*/
|
|
2372
|
-
async foldOrphanedOperations(tx, collection, definition, recordId) {
|
|
2415
|
+
async foldOrphanedOperations(tx, collection, definition, recordId, insertOp) {
|
|
2373
2416
|
const orphanRows = await tx.query(
|
|
2374
2417
|
`SELECT * FROM ${quoteIdent7(`_kora_ops_${collection}`)} WHERE record_id = ? AND type IN ('update', 'delete')`,
|
|
2375
2418
|
[recordId]
|
|
@@ -2418,6 +2461,37 @@ var Store = class {
|
|
|
2418
2461
|
await tx.execute(query.sql, query.params);
|
|
2419
2462
|
}
|
|
2420
2463
|
}
|
|
2464
|
+
const atomicFields = /* @__PURE__ */ new Set();
|
|
2465
|
+
for (const orphan of orphans) {
|
|
2466
|
+
if (orphan.type === "update" && orphan.atomicOps) {
|
|
2467
|
+
for (const field of Object.keys(orphan.atomicOps)) {
|
|
2468
|
+
atomicFields.add(field);
|
|
2469
|
+
}
|
|
2470
|
+
}
|
|
2471
|
+
}
|
|
2472
|
+
if (atomicFields.size > 0) {
|
|
2473
|
+
const ordered = [insertOp, ...orphans].sort(
|
|
2474
|
+
(a, b) => HybridLogicalClock3.compare(a.timestamp, b.timestamp)
|
|
2475
|
+
);
|
|
2476
|
+
const folded = replayOperationsForRecord(ordered);
|
|
2477
|
+
if (folded) {
|
|
2478
|
+
const composed = {};
|
|
2479
|
+
for (const field of atomicFields) {
|
|
2480
|
+
if (field in folded) {
|
|
2481
|
+
composed[field] = folded[field];
|
|
2482
|
+
}
|
|
2483
|
+
}
|
|
2484
|
+
const serialized = serializeRecord(composed, definition.fields);
|
|
2485
|
+
const cols = Object.keys(serialized);
|
|
2486
|
+
if (cols.length > 0) {
|
|
2487
|
+
const setClause = cols.map((c) => `${quoteIdent7(c)} = ?`).join(", ");
|
|
2488
|
+
await tx.execute(`UPDATE ${quoteIdent7(collection)} SET ${setClause} WHERE id = ?`, [
|
|
2489
|
+
...cols.map((c) => serialized[c]),
|
|
2490
|
+
recordId
|
|
2491
|
+
]);
|
|
2492
|
+
}
|
|
2493
|
+
}
|
|
2494
|
+
}
|
|
2421
2495
|
}
|
|
2422
2496
|
/**
|
|
2423
2497
|
* Get operations from a node within a sequence number range.
|
|
@@ -2504,7 +2578,7 @@ var Store = class {
|
|
|
2504
2578
|
*/
|
|
2505
2579
|
async exportAudit(options) {
|
|
2506
2580
|
this.ensureOpen();
|
|
2507
|
-
const { exportAudit: doExport } = await import("./export-audit-
|
|
2581
|
+
const { exportAudit: doExport } = await import("./export-audit-ODGQTQIK.js");
|
|
2508
2582
|
return doExport(this.adapter, this.schema, this.nodeId, this.schema.version, options);
|
|
2509
2583
|
}
|
|
2510
2584
|
/**
|
|
@@ -2631,6 +2705,35 @@ var Store = class {
|
|
|
2631
2705
|
this.ensureOpen();
|
|
2632
2706
|
await saveDeltaCursor(this.adapter, cursor);
|
|
2633
2707
|
}
|
|
2708
|
+
/**
|
|
2709
|
+
* Load the persisted delivery watermark for a view signature (0 when none recorded).
|
|
2710
|
+
* Defaults to the unfiltered view so existing single-watermark reads keep working.
|
|
2711
|
+
*/
|
|
2712
|
+
async loadDeliveryWatermark(signature = "") {
|
|
2713
|
+
this.ensureOpen();
|
|
2714
|
+
return loadDeliveryWatermark(this.adapter, signature);
|
|
2715
|
+
}
|
|
2716
|
+
/**
|
|
2717
|
+
* Persist the delivery watermark for a view signature so it survives a client restart.
|
|
2718
|
+
*/
|
|
2719
|
+
async saveDeliveryWatermark(signature, watermark) {
|
|
2720
|
+
this.ensureOpen();
|
|
2721
|
+
await saveDeliveryWatermark(this.adapter, signature, watermark);
|
|
2722
|
+
}
|
|
2723
|
+
/**
|
|
2724
|
+
* Load every persisted view watermark, keyed by signature.
|
|
2725
|
+
*/
|
|
2726
|
+
async loadAllDeliveryWatermarks() {
|
|
2727
|
+
this.ensureOpen();
|
|
2728
|
+
return loadAllDeliveryWatermarks(this.adapter);
|
|
2729
|
+
}
|
|
2730
|
+
/**
|
|
2731
|
+
* Delete a persisted view watermark (safe: the view back-fills from 0 when next visited).
|
|
2732
|
+
*/
|
|
2733
|
+
async deleteDeliveryWatermark(signature) {
|
|
2734
|
+
this.ensureOpen();
|
|
2735
|
+
await deleteDeliveryWatermark(this.adapter, signature);
|
|
2736
|
+
}
|
|
2634
2737
|
/**
|
|
2635
2738
|
* Local operations not yet reflected on the server version vector.
|
|
2636
2739
|
*/
|
|
@@ -2721,6 +2824,21 @@ var Store = class {
|
|
|
2721
2824
|
}
|
|
2722
2825
|
return latest;
|
|
2723
2826
|
}
|
|
2827
|
+
/**
|
|
2828
|
+
* All operations for a record, sorted in HLC total order (wallTime, logical,
|
|
2829
|
+
* nodeId). Used by the apply pipeline to materialize atomic-op fields by folding
|
|
2830
|
+
* the record's log, matching the server's materialization exactly.
|
|
2831
|
+
*/
|
|
2832
|
+
async getOperationsForRecord(collection, recordId) {
|
|
2833
|
+
this.ensureOpen();
|
|
2834
|
+
const rows = await this.adapter.query(
|
|
2835
|
+
`SELECT * FROM ${quoteIdent7(`_kora_ops_${collection}`)} WHERE record_id = ?`,
|
|
2836
|
+
[recordId]
|
|
2837
|
+
);
|
|
2838
|
+
const ops = rows.map((row) => deserializeOperationWithCollection(row, collection));
|
|
2839
|
+
ops.sort((a, b) => HybridLogicalClock3.compare(a.timestamp, b.timestamp));
|
|
2840
|
+
return ops;
|
|
2841
|
+
}
|
|
2724
2842
|
/** Expose the subscription manager for direct access (e.g., by QueryBuilder) */
|
|
2725
2843
|
getSubscriptionManager() {
|
|
2726
2844
|
return this.subscriptionManager;
|
|
@@ -2799,7 +2917,7 @@ var Store = class {
|
|
|
2799
2917
|
*/
|
|
2800
2918
|
async exportBackup(options) {
|
|
2801
2919
|
this.ensureOpen();
|
|
2802
|
-
const { exportBackup: doExport } = await import("./backup-
|
|
2920
|
+
const { exportBackup: doExport } = await import("./backup-5S7K2Z35.js");
|
|
2803
2921
|
return doExport(this.adapter, this.schema, this.nodeId, this.schema.version, options);
|
|
2804
2922
|
}
|
|
2805
2923
|
/**
|
|
@@ -2811,7 +2929,7 @@ var Store = class {
|
|
|
2811
2929
|
*/
|
|
2812
2930
|
async importBackup(data, options) {
|
|
2813
2931
|
this.ensureOpen();
|
|
2814
|
-
const { restoreBackup: doRestore } = await import("./backup-
|
|
2932
|
+
const { restoreBackup: doRestore } = await import("./backup-5S7K2Z35.js");
|
|
2815
2933
|
return doRestore(this.adapter, this.schema, data, options);
|
|
2816
2934
|
}
|
|
2817
2935
|
/**
|
|
@@ -3952,6 +4070,7 @@ export {
|
|
|
3952
4070
|
InvalidStateTransitionError,
|
|
3953
4071
|
LAST_ACKED_SERVER_VECTOR_META_KEY,
|
|
3954
4072
|
MemoryBlobStore,
|
|
4073
|
+
NoLeaderError,
|
|
3955
4074
|
OpfsBlobStore,
|
|
3956
4075
|
OptimisticLockError,
|
|
3957
4076
|
PersistenceError,
|