@vireocodedev/sqlite 0.2.0 → 0.2.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.
Files changed (47) hide show
  1. package/dist/concurrency/createSqliteOperationCoordinator.d.ts +24 -0
  2. package/dist/core/sqliteCrud.d.ts +4 -0
  3. package/dist/core/sqliteEntityFactory.d.ts +134 -0
  4. package/dist/core/sqliteRequestHandlers.d.ts +7 -0
  5. package/dist/core/sqliteRuntime.d.ts +7 -0
  6. package/dist/core/sqliteTypes.d.ts +12 -0
  7. package/dist/core/sqliteWorkerProtocol.d.ts +18 -0
  8. package/dist/core/sqliteWorkerRuntime.d.ts +19 -0
  9. package/dist/devtools/createSqlConsoleClient.d.ts +20 -0
  10. package/dist/hydration/createHydrationContributorRegistry.d.ts +11 -0
  11. package/dist/hydration/createHydrationController.d.ts +60 -0
  12. package/dist/hydration/createHydrationEntityClient.d.ts +16 -0
  13. package/dist/hydration/createHydrationGate.d.ts +22 -0
  14. package/dist/hydration/createHydrationRequestQueue.d.ts +22 -0
  15. package/dist/hydration/createHydrationStatus.d.ts +26 -0
  16. package/dist/hydration/createLocalReflectionQueue.d.ts +11 -0
  17. package/dist/index.d.ts +31 -0
  18. package/dist/index.js +1508 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/lifecycle/createDatabaseOwnerStore.d.ts +11 -0
  21. package/dist/lifecycle/createOfflineDataLifecycle.d.ts +26 -0
  22. package/dist/lifecycle/createOpfsDatabaseFiles.d.ts +15 -0
  23. package/dist/offline/hydration/hydratePagedSnapshot.d.ts +14 -0
  24. package/dist/offline/index.d.ts +7 -0
  25. package/dist/offline/index.js +99 -0
  26. package/dist/offline/index.js.map +1 -0
  27. package/dist/offline/mutations/offlineMutations.d.ts +20 -0
  28. package/dist/offline/queue/queueingHeaders.d.ts +4 -0
  29. package/dist/offline/queue/queueingPolicy.d.ts +2 -0
  30. package/dist/offline/queue/queueingTypes.d.ts +18 -0
  31. package/dist/offline/status/offlineStatusRuntime.d.ts +2 -0
  32. package/dist/offline/status/offlineStatusTypes.d.ts +23 -0
  33. package/dist/offline-queue/createOfflineQueueCapture.d.ts +16 -0
  34. package/dist/offline-queue/createOfflineQueueClient.d.ts +23 -0
  35. package/dist/offline-queue/createOfflineQueueStatus.d.ts +18 -0
  36. package/dist/offline-queue/offlineQueueStateSqlite.d.ts +30 -0
  37. package/dist/offline-queue/replayOfflineSyncBatch.d.ts +29 -0
  38. package/dist/queueingHeaders-B7TBifLV.js +20 -0
  39. package/dist/queueingHeaders-B7TBifLV.js.map +1 -0
  40. package/dist/runtime/contracts.d.ts +54 -0
  41. package/dist/runtime/createManagedSqliteRuntime.d.ts +23 -0
  42. package/dist/runtime/createSqliteEntityClient.d.ts +32 -0
  43. package/dist/runtime/createSqliteTransport.d.ts +17 -0
  44. package/dist/runtime/hydrationEntityStateSqlite.d.ts +20 -0
  45. package/dist/runtime/sqlConsoleSqlite.d.ts +20 -0
  46. package/dist/sqliteWorkerConfig.d.ts +3 -0
  47. package/package.json +1 -1
@@ -0,0 +1,24 @@
1
+ declare const sqliteOperationLockOwnerBrand: unique symbol;
2
+ export type SqliteOperationLockOwner = {
3
+ readonly [sqliteOperationLockOwnerBrand]: true;
4
+ };
5
+ export type ExclusiveLockManager = {
6
+ request: <T>(name: string, options: {
7
+ mode: "exclusive";
8
+ }, callback: () => Promise<T>) => Promise<T>;
9
+ };
10
+ export type CreateSqliteOperationCoordinatorConfig = {
11
+ lockName: string;
12
+ getLockManager?: () => ExclusiveLockManager | null;
13
+ createAbortReason?: (reason: string) => unknown;
14
+ };
15
+ export type SqliteOperationCoordinator = {
16
+ runDatabaseExclusive: <T>(operation: (lockOwner: SqliteOperationLockOwner) => Promise<T>, lockOwner?: SqliteOperationLockOwner) => Promise<T>;
17
+ runEntityExclusive: <T>(entityKey: string, operation: (lockOwner: SqliteOperationLockOwner) => Promise<T>, lockOwner?: SqliteOperationLockOwner) => Promise<T>;
18
+ runHydrationExclusive: (operation: (signal: AbortSignal, lockOwner: SqliteOperationLockOwner) => Promise<void>) => Promise<void>;
19
+ abortHydration: (reason?: string) => void;
20
+ awaitHydrationIdle: () => Promise<void>;
21
+ };
22
+ /** Creates isolated local queues with optional cross-context serialization through Web Locks. */
23
+ export declare function createSqliteOperationCoordinator(config: CreateSqliteOperationCoordinatorConfig): SqliteOperationCoordinator;
24
+ export {};
@@ -0,0 +1,4 @@
1
+ import { SqliteDatabase } from './sqliteTypes';
2
+ export declare function runSqliteTransaction(db: SqliteDatabase, action: () => void): void;
3
+ export declare function listSqliteRows<T>(db: SqliteDatabase, sql: string, mapRow: (row: unknown[]) => T): T[];
4
+ export declare function deleteSqliteRowsByKey(db: SqliteDatabase, table: string, keyColumn: string, values: Array<number | string>): void;
@@ -0,0 +1,134 @@
1
+ import { SqliteRequestHandlers } from './sqliteRequestHandlers';
2
+ import { SqliteDatabase } from './sqliteTypes';
3
+ type SqliteEntityField<TValue> = {
4
+ column: string;
5
+ id?: boolean;
6
+ toDb?: (value: TValue) => unknown;
7
+ fromDb: (value: unknown) => TValue;
8
+ };
9
+ type SqliteEntityFields = Record<string, SqliteEntityField<any>>;
10
+ type SqliteEntityFieldValue<TField> = TField extends SqliteEntityField<infer TValue> ? TValue : never;
11
+ type SqliteEntityRecordFromFields<TFields extends SqliteEntityFields> = {
12
+ [TProperty in keyof TFields as undefined extends SqliteEntityFieldValue<TFields[TProperty]> ? never : TProperty]: SqliteEntityFieldValue<TFields[TProperty]>;
13
+ } & {
14
+ [TProperty in keyof TFields as undefined extends SqliteEntityFieldValue<TFields[TProperty]> ? TProperty : never]?: Exclude<SqliteEntityFieldValue<TFields[TProperty]>, undefined>;
15
+ };
16
+ type SqliteEntityIdPropertyName<TFields extends SqliteEntityFields> = {
17
+ [TProperty in keyof TFields]: TFields[TProperty] extends {
18
+ id: true;
19
+ } ? TProperty : never;
20
+ }[keyof TFields] & string;
21
+ type SqliteEntityDeletePayloadFromFields<TFields extends SqliteEntityFields> = Pick<SqliteEntityRecordFromFields<TFields>, Extract<SqliteEntityIdPropertyName<TFields>, keyof SqliteEntityRecordFromFields<TFields>>>;
22
+ type SqliteEntityOperationNames<TSingular extends string, TPlural extends string> = {
23
+ replace: `replace${TPlural}`;
24
+ upsert: `upsert${TSingular}`;
25
+ list: `list${TPlural}`;
26
+ delete: `delete${TPlural}`;
27
+ };
28
+ export type SqliteEntitySseConfig<TFields extends SqliteEntityFields, TSseEntity extends string, TSseContext extends object> = {
29
+ entity: TSseEntity;
30
+ hydrationEntityKey?: string;
31
+ mapCreate?: (payload: SqliteEntityRecordFromFields<TFields>, context: TSseContext) => SqliteEntityRecordFromFields<TFields> | null;
32
+ mapUpdate?: (payload: SqliteEntityRecordFromFields<TFields>, context: TSseContext) => SqliteEntityRecordFromFields<TFields> | null;
33
+ mapDeleteKeys?: (payload: SqliteEntityDeletePayloadFromFields<TFields>, context: TSseContext) => Array<number | string>;
34
+ };
35
+ export type SqliteEntitySpec<TFields extends SqliteEntityFields = SqliteEntityFields, TSingular extends string = string, TPlural extends string = string, TRequestKeys extends {
36
+ replace: string;
37
+ upsert: string;
38
+ delete: string;
39
+ } = {
40
+ replace: string;
41
+ upsert: string;
42
+ delete: string;
43
+ }, TSseEntity extends string = string, TSseContext extends object = object> = {
44
+ entityNameSingular: TSingular;
45
+ entityNamePlural: TPlural;
46
+ tableName: string;
47
+ fields: TFields;
48
+ keywordFields?: Array<keyof TFields & string>;
49
+ softDelete?: {
50
+ enabled: boolean;
51
+ columnName?: string;
52
+ };
53
+ orderBy?: string;
54
+ requestKeys: TRequestKeys;
55
+ sse?: SqliteEntitySseConfig<TFields, TSseEntity, TSseContext>;
56
+ hydration?: {
57
+ key: string;
58
+ hydrate: () => Promise<{
59
+ rowCount: number;
60
+ }>;
61
+ };
62
+ };
63
+ export type SqliteEntityBundle<TFields extends SqliteEntityFields, TOperationNames extends {
64
+ replace: string;
65
+ upsert: string;
66
+ list: string;
67
+ delete: string;
68
+ }, TRequestKeys extends {
69
+ replace: string;
70
+ upsert: string;
71
+ delete: string;
72
+ }, TSseEntity extends string, TSseContext extends object> = {
73
+ __sqliteEntityBundle: true;
74
+ fields: TFields;
75
+ operationNames: TOperationNames;
76
+ requestKeys: TRequestKeys;
77
+ tableName: string;
78
+ entityNameSingular: string;
79
+ entityNamePlural: string;
80
+ hydration?: {
81
+ key: string;
82
+ hydrate: () => Promise<{
83
+ rowCount: number;
84
+ }>;
85
+ };
86
+ replaceRows: (db: SqliteDatabase, rows: SqliteEntityRecordFromFields<TFields>[]) => void;
87
+ upsertRow: (db: SqliteDatabase, row: SqliteEntityRecordFromFields<TFields>) => void;
88
+ listRows: (db: SqliteDatabase) => SqliteEntityRecordFromFields<TFields>[];
89
+ deleteRows: (db: SqliteDatabase, keys: Array<number | string>) => void;
90
+ sse?: SqliteEntitySseConfig<TFields, TSseEntity, TSseContext>;
91
+ requestHandlers: SqliteRequestHandlers;
92
+ operationMap: {
93
+ [TReplace in TOperationNames["replace"]]: {
94
+ request: {
95
+ [TReplaceKey in TRequestKeys["replace"]]: SqliteEntityRecordFromFields<TFields>[];
96
+ };
97
+ response: null;
98
+ };
99
+ } & {
100
+ [TUpsert in TOperationNames["upsert"]]: {
101
+ request: {
102
+ [TUpsertKey in TRequestKeys["upsert"]]: SqliteEntityRecordFromFields<TFields>;
103
+ };
104
+ response: null;
105
+ };
106
+ } & {
107
+ [TList in TOperationNames["list"]]: {
108
+ request: {};
109
+ response: SqliteEntityRecordFromFields<TFields>[];
110
+ };
111
+ } & {
112
+ [TDelete in TOperationNames["delete"]]: {
113
+ request: {
114
+ [TDeleteKey in TRequestKeys["delete"]]: Array<number | string>;
115
+ };
116
+ response: null;
117
+ };
118
+ };
119
+ };
120
+ export type SqliteEntityOperationMapFromBundle<TBundle extends {
121
+ operationMap: Record<string, {
122
+ request: unknown;
123
+ response: unknown;
124
+ }>;
125
+ }> = TBundle["operationMap"];
126
+ export type SqliteEntityRecordFromBundle<TBundle> = TBundle extends {
127
+ upsertRow: (...args: infer TArgs) => void;
128
+ } ? TArgs extends [SqliteDatabase, infer TRow] ? TRow : never : never;
129
+ export declare function createSqliteEntityBundle<const TFields extends SqliteEntityFields, const TSingular extends string, const TPlural extends string, const TRequestKeys extends {
130
+ replace: string;
131
+ upsert: string;
132
+ delete: string;
133
+ }, const TSseEntity extends string = string, const TSseContext extends object = object>(spec: SqliteEntitySpec<TFields, TSingular, TPlural, TRequestKeys, TSseEntity, TSseContext>): SqliteEntityBundle<TFields, SqliteEntityOperationNames<TSingular, TPlural>, TRequestKeys, TSseEntity, TSseContext>;
134
+ export {};
@@ -0,0 +1,7 @@
1
+ import { SqliteDatabase } from './sqliteTypes';
2
+ import { WorkerRequest, WorkerResponseResult } from './sqliteWorkerProtocol';
3
+ export type SqliteRequestHandler = (db: SqliteDatabase, request: WorkerRequest) => WorkerResponseResult | Promise<WorkerResponseResult>;
4
+ export type SqliteRequestHandlers = Partial<Record<string, SqliteRequestHandler>>;
5
+ export declare function createSqliteRequestHandlers<THandlers extends SqliteRequestHandlers>(handlers: THandlers): THandlers;
6
+ export declare function mergeSqliteRequestHandlers(...handlersList: SqliteRequestHandlers[]): SqliteRequestHandlers;
7
+ export declare function dispatchSqliteRequest(db: SqliteDatabase, request: WorkerRequest, handlers: SqliteRequestHandlers): Promise<WorkerResponseResult | undefined>;
@@ -0,0 +1,7 @@
1
+ import { SqliteDatabase, SqliteMigration } from './sqliteTypes';
2
+ export declare function mapSqliteRuntimeError(error: unknown): string;
3
+ export declare function querySingleNumber(db: SqliteDatabase, sql: string): number;
4
+ export declare function getSchemaVersion(db: SqliteDatabase): number;
5
+ export declare function setSchemaVersion(db: SqliteDatabase, version: number): void;
6
+ export declare function applySqliteMigrations(db: SqliteDatabase, migrations: SqliteMigration[]): void;
7
+ export declare function initializeSqliteDatabase(dbFile: string, migrations: SqliteMigration[]): Promise<SqliteDatabase>;
@@ -0,0 +1,12 @@
1
+ export type SqliteStatement = {
2
+ bind: (value: readonly unknown[]) => SqliteStatement;
3
+ step: () => boolean;
4
+ get: (target: unknown[]) => unknown[];
5
+ getColumnNames?: (target?: string[]) => string[];
6
+ finalize: () => number | undefined;
7
+ };
8
+ export type SqliteDatabase = {
9
+ exec: (sql: string) => unknown;
10
+ prepare: (sql: string) => SqliteStatement;
11
+ };
12
+ export type SqliteMigration = (db: SqliteDatabase) => void;
@@ -0,0 +1,18 @@
1
+ export type WorkerRequest = {
2
+ id: number;
3
+ type: string;
4
+ [key: string]: unknown;
5
+ };
6
+ export type WorkerRequestInput = Omit<WorkerRequest, "id">;
7
+ export type WorkerResponse = {
8
+ id: number;
9
+ ok: false;
10
+ error: string;
11
+ } | {
12
+ id: number;
13
+ ok: true;
14
+ result: unknown;
15
+ };
16
+ export type WorkerResponseResult = Extract<WorkerResponse, {
17
+ ok: true;
18
+ }>["result"];
@@ -0,0 +1,19 @@
1
+ import { SqliteRequestHandlers } from './sqliteRequestHandlers';
2
+ import { SqliteMigration } from './sqliteTypes';
3
+ import { WorkerRequest } from './sqliteWorkerProtocol';
4
+ type WorkerLike = {
5
+ addEventListener: (type: "message", listener: (event: MessageEvent<unknown>) => void | Promise<void>) => void;
6
+ postMessage: (message: unknown) => void;
7
+ };
8
+ export type SqliteWorkerRuntimeConfig = {
9
+ dbFile: string;
10
+ migrations: SqliteMigration[];
11
+ requestHandlers: SqliteRequestHandlers;
12
+ debug?: boolean;
13
+ bootLogPrefix?: string;
14
+ };
15
+ export declare function createSqliteWorkerRuntime(config: SqliteWorkerRuntimeConfig): {
16
+ attach: (worker: WorkerLike) => void;
17
+ handleRequest: (worker: WorkerLike, request: WorkerRequest) => Promise<void>;
18
+ };
19
+ export {};
@@ -0,0 +1,20 @@
1
+ import { SqliteTransport } from '../runtime/createSqliteTransport';
2
+ import { SqlExecutionResult, SqlPagedQueryRequest, SqlPagedQueryResult } from '../runtime/contracts';
3
+ export type SqlConsoleClient = {
4
+ executeScript: (script: string) => Promise<SqlExecutionResult>;
5
+ executePagedQuery: (request: SqlPagedQueryRequest) => Promise<SqlPagedQueryResult>;
6
+ };
7
+ export type CreateSqlConsoleClientConfig = {
8
+ runtime: {
9
+ shouldUseInMemoryFallback: () => boolean;
10
+ };
11
+ transport: Pick<SqliteTransport, "sendWorkerRequest">;
12
+ requestTypes?: {
13
+ executeScript: string;
14
+ executePagedQuery: string;
15
+ };
16
+ now?: () => number;
17
+ log?: (message: string, ...details: unknown[]) => void;
18
+ createUnavailableError?: (operation: "script" | "paged-query") => Error;
19
+ };
20
+ export declare function createSqlConsoleClient(config: CreateSqlConsoleClientConfig): SqlConsoleClient;
@@ -0,0 +1,11 @@
1
+ export type HydrationContributor = {
2
+ key: string;
3
+ hydrate: (signal: AbortSignal) => Promise<{
4
+ rowCount: number;
5
+ }>;
6
+ };
7
+ export type HydrationContributorRegistry = {
8
+ register: (contributors: HydrationContributor[]) => void;
9
+ list: () => HydrationContributor[];
10
+ };
11
+ export declare function createHydrationContributorRegistry(): HydrationContributorRegistry;
@@ -0,0 +1,60 @@
1
+ import { HydrationContributor } from './createHydrationContributorRegistry';
2
+ import { HydrationRequestQueue } from './createHydrationRequestQueue';
3
+ import { SqliteHydrationEntityStateRecord } from '../runtime/contracts';
4
+ export type RemoteHydrationVersion = {
5
+ entity: string;
6
+ revision: number;
7
+ };
8
+ export type HydrationRunContext = {
9
+ heartbeatEnabled?: boolean;
10
+ heartbeatConnected?: boolean;
11
+ };
12
+ export type HydrationLogDetails = Record<string, unknown>;
13
+ export type HydrationControllerEvents = {
14
+ registerEntities: (keys: string[]) => void;
15
+ markRunning: (running: boolean) => void;
16
+ markEntityRunning: (key: string) => void;
17
+ markEntitySuccess: (key: string, rowCount: number) => void;
18
+ markEntityError: (key: string, message: string) => void;
19
+ startGate: () => void;
20
+ resetGate: () => void;
21
+ finishGate: () => void;
22
+ markDataReady: () => void;
23
+ setErrorMessage: (message: string | null) => void;
24
+ };
25
+ export type CreateHydrationControllerConfig<TLockOwner = unknown> = {
26
+ getContributors: () => HydrationContributor[];
27
+ entityStateClient: {
28
+ list: () => Promise<SqliteHydrationEntityStateRecord[]>;
29
+ upsert: (state: SqliteHydrationEntityStateRecord) => Promise<void>;
30
+ };
31
+ requests: Pick<HydrationRequestQueue, "consume" | "hasPending" | "rejectPending" | "settle" | "reject">;
32
+ runHydrationExclusive: (operation: (signal: AbortSignal, lockOwner: TLockOwner) => Promise<void>) => Promise<void>;
33
+ runEntityExclusive: (entityKey: string, operation: () => Promise<void>, lockOwner: TLockOwner) => Promise<void>;
34
+ fetchRemoteVersions: (entityKeys: string[], signal: AbortSignal) => Promise<{
35
+ versions: RemoteHydrationVersion[];
36
+ }>;
37
+ events: HydrationControllerEvents;
38
+ remoteVersionsTimeoutMs: number;
39
+ entityTimeoutMs: (entityKey: string) => number;
40
+ retryBaseMs: number;
41
+ retryMaxMs: number;
42
+ retryExponentLimit?: number;
43
+ elapsedNow?: () => number;
44
+ timestampNow?: () => number;
45
+ schedule?: (callback: () => void, delayMs: number) => ReturnType<typeof setTimeout>;
46
+ cancelScheduled?: (handle: ReturnType<typeof setTimeout>) => void;
47
+ isCancellationError?: (error: unknown) => boolean;
48
+ debug?: (message: string, details?: HydrationLogDetails) => void;
49
+ warn?: (message: string, details?: HydrationLogDetails) => void;
50
+ error?: (message: string, details?: HydrationLogDetails) => void;
51
+ };
52
+ export type HydrationController = {
53
+ run: (context?: HydrationRunContext) => Promise<void>;
54
+ requestRetry: () => void;
55
+ reset: (pendingRequestReason: string) => void;
56
+ cancelScheduledRetry: () => void;
57
+ dispose: () => void;
58
+ isRunning: () => boolean;
59
+ };
60
+ export declare function createHydrationController<TLockOwner = unknown>(config: CreateHydrationControllerConfig<TLockOwner>): HydrationController;
@@ -0,0 +1,16 @@
1
+ import { InMemorySqliteStore } from '../runtime/createManagedSqliteRuntime';
2
+ import { SqliteTransport } from '../runtime/createSqliteTransport';
3
+ import { SqliteHydrationEntityStateRecord } from '../runtime/contracts';
4
+ export type HydrationEntityClientRuntime = {
5
+ shouldUseInMemoryFallback: () => boolean;
6
+ registerInMemoryStore: (store: InMemorySqliteStore) => () => void;
7
+ };
8
+ export type HydrationEntityClient = {
9
+ list: () => Promise<SqliteHydrationEntityStateRecord[]>;
10
+ upsert: (state: SqliteHydrationEntityStateRecord) => Promise<void>;
11
+ dispose: () => void;
12
+ };
13
+ export declare function createHydrationEntityClient(config: {
14
+ runtime: HydrationEntityClientRuntime;
15
+ transport: Pick<SqliteTransport, "sendWorkerRequest">;
16
+ }): HydrationEntityClient;
@@ -0,0 +1,22 @@
1
+ export type HydrationGatePhase = "idle" | "running" | "finished";
2
+ export type HydrationGateSnapshot = {
3
+ phase: HydrationGatePhase;
4
+ startedAt: number | null;
5
+ dataReady: boolean;
6
+ errorMessage: string | null;
7
+ retryRequestTick: number;
8
+ };
9
+ export type HydrationGate = {
10
+ getSnapshot: () => HydrationGateSnapshot;
11
+ subscribe: (listener: (snapshot: HydrationGateSnapshot) => void) => () => void;
12
+ setErrorMessage: (message: string | null) => void;
13
+ requestRetry: () => void;
14
+ reset: () => void;
15
+ start: () => void;
16
+ finish: () => void;
17
+ markDataReady: () => void;
18
+ };
19
+ export type CreateHydrationGateConfig = {
20
+ now?: () => number;
21
+ };
22
+ export declare function createHydrationGate(config?: CreateHydrationGateConfig): HydrationGate;
@@ -0,0 +1,22 @@
1
+ export type HydrationRequest = {
2
+ keys: Set<string>;
3
+ resolve: () => void;
4
+ reject: (error: Error) => void;
5
+ };
6
+ export type HydrationRequestBatch = {
7
+ requests: HydrationRequest[];
8
+ forcedKeys: Set<string>;
9
+ };
10
+ export type HydrationRequestQueue = {
11
+ request: (keys: string[]) => Promise<void>;
12
+ consume: () => HydrationRequestBatch;
13
+ hasPending: () => boolean;
14
+ rejectPending: (reason: string) => void;
15
+ settle: (batch: HydrationRequestBatch, failedKeys: ReadonlySet<string>) => void;
16
+ reject: (batch: HydrationRequestBatch, error: unknown) => void;
17
+ };
18
+ export type CreateHydrationRequestQueueConfig = {
19
+ onRequestQueued?: () => void;
20
+ createUnexpectedError?: () => Error;
21
+ };
22
+ export declare function createHydrationRequestQueue(config?: CreateHydrationRequestQueueConfig): HydrationRequestQueue;
@@ -0,0 +1,26 @@
1
+ export type HydrationEntityStatus = {
2
+ key: string;
3
+ state: "idle" | "running" | "success" | "error";
4
+ lastAttemptAt: number | null;
5
+ lastSuccessAt: number | null;
6
+ rowCount: number | null;
7
+ errorMessage: string | null;
8
+ };
9
+ export type HydrationStatusSnapshot = {
10
+ entities: HydrationEntityStatus[];
11
+ running: boolean;
12
+ };
13
+ export type HydrationStatus = {
14
+ getSnapshot: () => HydrationStatusSnapshot;
15
+ subscribe: (listener: (snapshot: HydrationStatusSnapshot) => void) => () => void;
16
+ registerEntities: (keys: string[]) => void;
17
+ markRunning: (running: boolean) => void;
18
+ markEntityRunning: (key: string) => void;
19
+ markEntitySuccess: (key: string, rowCount: number) => void;
20
+ markEntityError: (key: string, errorMessage: string) => void;
21
+ reset: () => void;
22
+ };
23
+ export type CreateHydrationStatusConfig = {
24
+ now?: () => number;
25
+ };
26
+ export declare function createHydrationStatus(config?: CreateHydrationStatusConfig): HydrationStatus;
@@ -0,0 +1,11 @@
1
+ export type LocalReflectionQueue = {
2
+ enqueue: (entityKey: string, operation: () => Promise<void>) => void;
3
+ awaitIdle: () => Promise<void>;
4
+ getPendingCount: () => number;
5
+ };
6
+ export type CreateLocalReflectionQueueConfig = {
7
+ runEntityExclusive: (entityKey: string, operation: () => Promise<void>) => Promise<void>;
8
+ onError?: (entityKey: string, error: unknown) => void;
9
+ onPendingCountChange?: (pendingCount: number) => void;
10
+ };
11
+ export declare function createLocalReflectionQueue(config: CreateLocalReflectionQueueConfig): LocalReflectionQueue;
@@ -0,0 +1,31 @@
1
+ export { deleteSqliteRowsByKey, listSqliteRows, runSqliteTransaction } from './core/sqliteCrud';
2
+ export * from './core/sqliteEntityFactory';
3
+ export { createSqliteRequestHandlers, dispatchSqliteRequest, mergeSqliteRequestHandlers, } from './core/sqliteRequestHandlers';
4
+ export type { SqliteRequestHandler, SqliteRequestHandlers } from './core/sqliteRequestHandlers';
5
+ export type { SqliteDatabase, SqliteMigration, SqliteStatement } from './core/sqliteTypes';
6
+ export type { WorkerRequest, WorkerRequestInput, WorkerResponse, WorkerResponseResult, } from './core/sqliteWorkerProtocol';
7
+ export * from './concurrency/createSqliteOperationCoordinator';
8
+ export * from './devtools/createSqlConsoleClient';
9
+ export * from './hydration/createHydrationContributorRegistry';
10
+ export * from './hydration/createHydrationController';
11
+ export * from './hydration/createHydrationEntityClient';
12
+ export * from './hydration/createHydrationGate';
13
+ export * from './hydration/createHydrationRequestQueue';
14
+ export * from './hydration/createHydrationStatus';
15
+ export * from './hydration/createLocalReflectionQueue';
16
+ export * from './lifecycle/createDatabaseOwnerStore';
17
+ export * from './lifecycle/createOfflineDataLifecycle';
18
+ export * from './lifecycle/createOpfsDatabaseFiles';
19
+ export * from './offline-queue/createOfflineQueueCapture';
20
+ export * from './offline-queue/createOfflineQueueClient';
21
+ export * from './offline-queue/createOfflineQueueStatus';
22
+ export * from './offline-queue/offlineQueueStateSqlite';
23
+ export * from './offline-queue/replayOfflineSyncBatch';
24
+ export * from './runtime/createManagedSqliteRuntime';
25
+ export * from './runtime/createSqliteEntityClient';
26
+ export * from './runtime/createSqliteTransport';
27
+ export { createSqliteWorkerRuntime, type SqliteWorkerRuntimeConfig } from './core/sqliteWorkerRuntime';
28
+ export { createSqliteWorkerRuntimeConfig } from './sqliteWorkerConfig';
29
+ export { HYDRATION_ENTITY_STATE_SQLITE_REQUEST_HANDLERS, listHydrationEntityStates, upsertHydrationEntityState, type HydrationEntityStateSqliteOperationMap, } from './runtime/hydrationEntityStateSqlite';
30
+ export { executePagedQuery, executeSqlScript, SQL_CONSOLE_SQLITE_REQUEST_HANDLERS, type SqlConsoleSqliteOperationMap, } from './runtime/sqlConsoleSqlite';
31
+ export type { CreateSqliteWorkerRuntimeConfigInput, OfflineSyncCommandRecord, SqlExecutionResult, SqlExecutionStatementResult, SqliteHydrationEntityStateRecord, SqliteWorkerEntityBundleConfig, SqlPagedQueryRequest, SqlPagedQueryResult, } from './runtime/contracts';