@interocitor/core 0.0.0-beta.3 → 0.0.0-beta.4

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 (98) hide show
  1. package/README.md +445 -91
  2. package/dist/adapters/cloudflare.d.ts +8 -9
  3. package/dist/adapters/cloudflare.d.ts.map +1 -1
  4. package/dist/adapters/cloudflare.js +38 -12
  5. package/dist/adapters/google-drive.d.ts +1 -1
  6. package/dist/adapters/google-drive.js +1 -2
  7. package/dist/adapters/memory.d.ts +4 -1
  8. package/dist/adapters/memory.d.ts.map +1 -1
  9. package/dist/adapters/memory.js +13 -2
  10. package/dist/adapters/webdav.d.ts +5 -0
  11. package/dist/adapters/webdav.d.ts.map +1 -1
  12. package/dist/adapters/webdav.js +18 -1
  13. package/dist/core/codec.d.ts +1 -1
  14. package/dist/core/codec.d.ts.map +1 -1
  15. package/dist/core/codec.js +39 -3
  16. package/dist/core/compaction.d.ts +8 -1
  17. package/dist/core/compaction.d.ts.map +1 -1
  18. package/dist/core/compaction.js +13 -5
  19. package/dist/core/crdt.d.ts +6 -3
  20. package/dist/core/crdt.d.ts.map +1 -1
  21. package/dist/core/crdt.js +38 -60
  22. package/dist/core/errors.d.ts +47 -0
  23. package/dist/core/errors.d.ts.map +1 -0
  24. package/dist/core/errors.js +61 -0
  25. package/dist/core/flush.d.ts +3 -3
  26. package/dist/core/flush.d.ts.map +1 -1
  27. package/dist/core/flush.js +64 -7
  28. package/dist/core/hlc.js +0 -1
  29. package/dist/core/ids.d.ts +49 -0
  30. package/dist/core/ids.d.ts.map +1 -0
  31. package/dist/core/ids.js +132 -0
  32. package/dist/core/internals.d.ts +10 -2
  33. package/dist/core/internals.d.ts.map +1 -1
  34. package/dist/core/internals.js +27 -9
  35. package/dist/core/manifest.d.ts +20 -5
  36. package/dist/core/manifest.d.ts.map +1 -1
  37. package/dist/core/manifest.js +65 -11
  38. package/dist/core/pull.d.ts +1 -1
  39. package/dist/core/pull.d.ts.map +1 -1
  40. package/dist/core/pull.js +21 -6
  41. package/dist/core/row-id.js +0 -1
  42. package/dist/core/schema-types.d.ts +22 -11
  43. package/dist/core/schema-types.d.ts.map +1 -1
  44. package/dist/core/schema-types.js +18 -9
  45. package/dist/core/schema-types.type-test.js +59 -5
  46. package/dist/core/sync-engine.d.ts +163 -12
  47. package/dist/core/sync-engine.d.ts.map +1 -1
  48. package/dist/core/sync-engine.js +1521 -219
  49. package/dist/core/table.d.ts +217 -17
  50. package/dist/core/table.d.ts.map +1 -1
  51. package/dist/core/table.js +376 -24
  52. package/dist/core/types.d.ts +382 -17
  53. package/dist/core/types.d.ts.map +1 -1
  54. package/dist/core/types.js +0 -1
  55. package/dist/crypto/encryption.d.ts.map +1 -1
  56. package/dist/crypto/encryption.js +6 -1
  57. package/dist/crypto/keys.js +0 -1
  58. package/dist/handshake/channel.js +0 -1
  59. package/dist/handshake/index.d.ts +5 -2
  60. package/dist/handshake/index.d.ts.map +1 -1
  61. package/dist/handshake/index.js +19 -2
  62. package/dist/handshake/qr.js +0 -1
  63. package/dist/index.d.ts +9 -7
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +8 -6
  66. package/dist/storage/credential-store.d.ts +25 -2
  67. package/dist/storage/credential-store.d.ts.map +1 -1
  68. package/dist/storage/credential-store.js +55 -8
  69. package/dist/storage/local-store.d.ts +4 -1
  70. package/dist/storage/local-store.d.ts.map +1 -1
  71. package/dist/storage/local-store.js +37 -21
  72. package/package.json +3 -3
  73. package/dist/adapters/cloudflare.js.map +0 -1
  74. package/dist/adapters/google-drive.js.map +0 -1
  75. package/dist/adapters/memory.js.map +0 -1
  76. package/dist/adapters/webdav.js.map +0 -1
  77. package/dist/core/codec.js.map +0 -1
  78. package/dist/core/compaction.js.map +0 -1
  79. package/dist/core/crdt.js.map +0 -1
  80. package/dist/core/flush.js.map +0 -1
  81. package/dist/core/hlc.js.map +0 -1
  82. package/dist/core/internals.js.map +0 -1
  83. package/dist/core/manifest.js.map +0 -1
  84. package/dist/core/pull.js.map +0 -1
  85. package/dist/core/row-id.js.map +0 -1
  86. package/dist/core/schema-types.js.map +0 -1
  87. package/dist/core/schema-types.type-test.js.map +0 -1
  88. package/dist/core/sync-engine.js.map +0 -1
  89. package/dist/core/table.js.map +0 -1
  90. package/dist/core/types.js.map +0 -1
  91. package/dist/crypto/encryption.js.map +0 -1
  92. package/dist/crypto/keys.js.map +0 -1
  93. package/dist/handshake/channel.js.map +0 -1
  94. package/dist/handshake/index.js.map +0 -1
  95. package/dist/handshake/qr.js.map +0 -1
  96. package/dist/index.js.map +0 -1
  97. package/dist/storage/credential-store.js.map +0 -1
  98. package/dist/storage/local-store.js.map +0 -1
@@ -1,15 +1,175 @@
1
1
  /**
2
- * Table<T> — typed handle for a named collection within a SyncEngine.
2
+ * Table<T> — typed handle for a named collection within a Interocitor.
3
3
  *
4
4
  * Wraps the engine's raw Row/string API with a type-safe surface.
5
5
  * All reads return plain T objects (internal HLC metadata stripped).
6
6
  * All writes accept Partial<T> and return T.
7
7
  */
8
- import type { SyncEngine } from './sync-engine.ts';
9
- type AnyEngine = SyncEngine<any>;
10
- import type { WherePrimitive } from './types.ts';
8
+ import type { Interocitor } from './sync-engine.ts';
9
+ type AnyEngine = Interocitor<any>;
10
+ import type { TableEventListener } from './types.ts';
11
+ import type { QueryDescriptor, QueryExecutionOptions, QueryExecutionPolicy, RowDescriptor, WherePrimitive } from './types.ts';
11
12
  /**
12
- * Typed handle for a named collection within a {@link SyncEngine}.
13
+ * Thenable result of an async query.
14
+ *
15
+ * Two layers live here, kept distinct on purpose:
16
+ * 1. Async query identity: `descriptor` + `cacheKey`. Owned by core. Stable
17
+ * across `.sort()` chains. Used by any cache layer (React etc.) to dedupe
18
+ * loads, share in-flight promises, and keep stale data across remounts.
19
+ * 2. Sync derivation: `.sort(compareFn)` runs after the async load. Does not
20
+ * change `cacheKey`. Not part of cache identity. Pure post-processing.
21
+ *
22
+ * `then(...)` triggers a load through the engine cache. Use `load({ bypassCache })`
23
+ * to force a fresh fetch.
24
+ */
25
+ export declare class QueryResult<T extends Record<string, unknown>> implements PromiseLike<T[]> {
26
+ private readonly _engine;
27
+ /** Optional sync transform stack — runs after rows are loaded. */
28
+ private readonly _sortChain;
29
+ /** Optional pre-resolved promise (used for synthetic / engine-less results). */
30
+ private readonly _explicitPromise;
31
+ /** Stable async-query identity. */
32
+ readonly descriptor: QueryDescriptor;
33
+ /** Stable cache key derived from descriptor by core. */
34
+ readonly cacheKey: string;
35
+ constructor(descriptor: QueryDescriptor, _engine: AnyEngine | null,
36
+ /** Optional sync transform stack — runs after rows are loaded. */
37
+ _sortChain?: ReadonlyArray<(rows: T[]) => T[]>,
38
+ /** Optional pre-resolved promise (used for synthetic / engine-less results). */
39
+ _explicitPromise?: Promise<T[]> | null);
40
+ /** Public metadata. Mirrors `QueryMetadata` shape. */
41
+ get metadata(): {
42
+ descriptor: QueryDescriptor;
43
+ cacheKey: string;
44
+ };
45
+ /**
46
+ * Async load through engine cache.
47
+ * Pass `{ bypassCache: true }` to ignore cached snapshot and refetch.
48
+ */
49
+ load(options?: QueryExecutionOptions): Promise<T[]>;
50
+ /**
51
+ * Read cached rows synchronously, if available. Returns `undefined` only if
52
+ * the cache has no row snapshot. Does not start a load.
53
+ *
54
+ * Stale-while-revalidate contract: pending/error snapshots may still carry
55
+ * rows from the previous ready load. Expose those rows so consumers can keep
56
+ * stale data visible while a refresh is in flight.
57
+ *
58
+ * Stable reference contract: callers (React, useSyncExternalStore, etc.)
59
+ * MUST be able to compare the returned array by reference. We memoize the
60
+ * typed+sorted projection keyed by the raw rows reference from the engine
61
+ * cache. As long as the engine cache hasn't moved, this returns the exact
62
+ * same array instance.
63
+ */
64
+ peekCache(): T[] | undefined;
65
+ /**
66
+ * Sync status read for cache consumers (e.g. React bindings). Mirrors the
67
+ * cache snapshot status without exposing engine internals.
68
+ */
69
+ peekStatus(): {
70
+ status: 'empty' | 'pending' | 'ready' | 'error';
71
+ error?: Error;
72
+ };
73
+ /**
74
+ * Render-time read. If the engine is ready and a cache snapshot exists,
75
+ * returns rows synchronously (no flash). Otherwise returns a promise.
76
+ * If the engine is not ready and `mode === 'cache-first'`, falls back to
77
+ * sync `undefined`-like behavior by returning a promise — caller decides.
78
+ */
79
+ readForRender(policy?: QueryExecutionPolicy): Promise<T[]> | T[];
80
+ then<R1 = T[], R2 = never>(onfulfilled?: ((value: T[]) => R1 | PromiseLike<R1>) | null, onrejected?: ((reason: unknown) => R2 | PromiseLike<R2>) | null): PromiseLike<R1 | R2>;
81
+ /**
82
+ * Sort the result. Same signature as `Array.prototype.sort`.
83
+ * Sync-only. Does NOT change `cacheKey` — this is post-load derivation.
84
+ */
85
+ sort(compareFn: (a: T, b: T) => number): QueryResult<T>;
86
+ /**
87
+ * Sort by a single field. Default: ascending.
88
+ *
89
+ * Deterministic and serializable, so it lives on the descriptor and
90
+ * participates in `cacheKey`. Two queries with the same shape and the
91
+ * same `orderBy` share a cache entry; differing only by direction or
92
+ * field produces a distinct cache entry.
93
+ *
94
+ * Re-applying `orderBy` overwrites the previous one (last write wins).
95
+ * The sync `.sort(compareFn)` chain is preserved on top of orderBy for
96
+ * post-load derivations.
97
+ */
98
+ orderBy<K extends keyof T>(field: K, dir?: 'asc' | 'desc'): QueryResult<T>;
99
+ /**
100
+ * Subscribe to changes that affect this query's table.
101
+ * Returns an unsubscribe function. Currently table-wide; finer-grained
102
+ * invalidation can be added in core later without changing this contract.
103
+ */
104
+ subscribe(cb: TableEventListener<T>): () => void;
105
+ /**
106
+ * Memoization for the typed+sorted projection. Keyed by the raw rows
107
+ * reference from the engine cache. Same input ref ⇒ same output ref.
108
+ * Cleared automatically when the engine swaps in a fresh raw rows array
109
+ * (e.g. after a write invalidation).
110
+ */
111
+ private _projectionInputRef;
112
+ private _projectionOutput;
113
+ private _project;
114
+ private _applySort;
115
+ private _loadRaw;
116
+ }
117
+ /**
118
+ * Stable, deterministic cache key derived from a query descriptor.
119
+ *
120
+ * Only async-affecting fields are included. Sync derivations (custom `sort`)
121
+ * are intentionally excluded.
122
+ */
123
+ export declare function computeCacheKey(descriptor: QueryDescriptor): string;
124
+ /**
125
+ * Thenable result of a single-row read.
126
+ *
127
+ * Same contract as `QueryResult`, scaled down to one row:
128
+ * - identity is `descriptor` + `cacheKey`
129
+ * - `then(...)` / `load(...)` go through the engine row cache
130
+ * - `peekCache()` / `peekStatus()` are sync probes
131
+ * - `subscribe(cb)` fires on table events that touch the same rowId
132
+ *
133
+ * Returns `undefined` when the row is absent or deleted.
134
+ */
135
+ export declare class RowResult<T extends Record<string, unknown>> implements PromiseLike<T | undefined> {
136
+ private readonly _engine;
137
+ readonly descriptor: RowDescriptor;
138
+ readonly cacheKey: string;
139
+ constructor(descriptor: RowDescriptor, _engine: AnyEngine | null);
140
+ get metadata(): {
141
+ descriptor: RowDescriptor;
142
+ cacheKey: string;
143
+ };
144
+ /**
145
+ * Memoization for the typed projection. Keyed by the raw row reference.
146
+ * Same input ref ⇒ same output ref — required by useSyncExternalStore
147
+ * consumers and by selector memoization in the React hooks.
148
+ */
149
+ private _projectionInputRef;
150
+ private _projectionOutput;
151
+ private _project;
152
+ load(options?: QueryExecutionOptions): Promise<T | undefined>;
153
+ /**
154
+ * Sync cached row, or `undefined` if the cache has no row. Pending/error
155
+ * snapshots may still carry the previous row for stale-while-revalidate.
156
+ */
157
+ peekCache(): T | undefined;
158
+ peekStatus(): {
159
+ status: 'empty' | 'pending' | 'ready' | 'error';
160
+ error?: Error;
161
+ };
162
+ readForRender(policy?: QueryExecutionPolicy): Promise<T | undefined> | T | undefined;
163
+ then<R1 = T | undefined, R2 = never>(onfulfilled?: ((value: T | undefined) => R1 | PromiseLike<R1>) | null, onrejected?: ((reason: unknown) => R2 | PromiseLike<R2>) | null): PromiseLike<R1 | R2>;
164
+ /**
165
+ * Subscribe to changes that touch this row's `rowId`.
166
+ * Returns an unsubscribe function. Filtering done here so callers don't
167
+ * see unrelated table events.
168
+ */
169
+ subscribe(cb: TableEventListener<T>): () => void;
170
+ }
171
+ /**
172
+ * Typed handle for a named collection within a {@link Interocitor}.
13
173
  *
14
174
  * All reads return plain objects with CRDT metadata stripped away.
15
175
  *
@@ -27,16 +187,56 @@ export declare class Table<T extends Record<string, unknown>> {
27
187
  constructor(engine: AnyEngine,
28
188
  /** The collection name as stored in the engine. */
29
189
  name: string);
30
- /** Retrieve a single record by ID, or undefined if not found / deleted. */
31
- get(rowId: string): Promise<T | undefined>;
190
+ /**
191
+ * Build a single-row handle. Same descriptor + cacheKey contract as
192
+ * `query()`, scaled down to one row. Lazy: nothing fetched until
193
+ * `then()` / `load()` / `readForRender()` is called.
194
+ *
195
+ * Use `await table.row(id)` for an async fetch, `table.row(id).peekCache()`
196
+ * for a sync cache read, or pass the handle directly to `useRow`.
197
+ */
198
+ row(rowId: string): RowResult<T>;
32
199
  /** Retrieve all live (non-deleted) records in this collection. */
33
- query(): Promise<T[]>;
200
+ query(): QueryResult<T>;
34
201
  /** Build a field-scoped where query (Dexie-style, without string schema syntax). */
35
202
  where<K extends keyof T & string>(field: K): TableWhere<T>;
36
- /** Insert or update a record. Returns the merged result. */
203
+ /**
204
+ * Patch a record — only the provided fields are updated.
205
+ * Omitted fields are untouched (CRDT per-field merge).
206
+ * Returns the full merged row.
207
+ */
208
+ patch(rowId: string, data: Partial<T>, userId?: string): Promise<T>;
209
+ /** Back-compat alias for older code paths. */
37
210
  put(rowId: string, data: Partial<T>, userId?: string): Promise<T>;
211
+ /**
212
+ * Replace a record — writes ALL fields in `data`, explicitly nulling any
213
+ * fields present in the existing row but absent from `data`.
214
+ * Returns the full row.
215
+ */
216
+ replace(rowId: string, data: T, userId?: string): Promise<T>;
217
+ /**
218
+ * Insert a new record with an auto-generated row ID.
219
+ * Returns the generated ID.
220
+ *
221
+ * @example
222
+ * const id = await table.add({ title: 'Buy milk' });
223
+ * const id = await table.add({ title: 'Buy milk' }, { prefix: 'task' });
224
+ */
225
+ add(data: T, opts?: {
226
+ prefix?: string;
227
+ }, userId?: string): Promise<string>;
38
228
  /** Soft-delete a record. */
39
229
  delete(rowId: string, userId?: string): Promise<void>;
230
+ /**
231
+ * Subscribe to changes in this table. Fires on every change/delete.
232
+ * Returns an unsubscribe function.
233
+ *
234
+ * @example
235
+ * const unsub = db.table('tasks').subscribe(event => {
236
+ * if (event.type === 'change') console.log(event.row);
237
+ * });
238
+ */
239
+ subscribe(cb: TableEventListener<T>): () => void;
40
240
  }
41
241
  declare class TableWhere<T extends Record<string, unknown>> {
42
242
  private readonly engine;
@@ -44,17 +244,17 @@ declare class TableWhere<T extends Record<string, unknown>> {
44
244
  private readonly field;
45
245
  constructor(engine: AnyEngine, table: string, field: string);
46
246
  private run;
47
- equals(value: WherePrimitive): Promise<T[]>;
48
- above(value: WherePrimitive): Promise<T[]>;
49
- aboveOrEqual(value: WherePrimitive): Promise<T[]>;
50
- below(value: WherePrimitive): Promise<T[]>;
51
- belowOrEqual(value: WherePrimitive): Promise<T[]>;
247
+ equals(value: WherePrimitive): QueryResult<T>;
248
+ above(value: WherePrimitive): QueryResult<T>;
249
+ aboveOrEqual(value: WherePrimitive): QueryResult<T>;
250
+ below(value: WherePrimitive): QueryResult<T>;
251
+ belowOrEqual(value: WherePrimitive): QueryResult<T>;
52
252
  between(lower: WherePrimitive, upper: WherePrimitive, options?: {
53
253
  lowerOpen?: boolean;
54
254
  upperOpen?: boolean;
55
- }): Promise<T[]>;
56
- startsWith(prefix: string): Promise<T[]>;
57
- anyOf(values: WherePrimitive[]): Promise<T[]>;
255
+ }): QueryResult<T>;
256
+ startsWith(prefix: string): QueryResult<T>;
257
+ anyOf(values: WherePrimitive[]): QueryResult<T>;
58
258
  }
59
259
  export {};
60
260
  //# sourceMappingURL=table.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/core/table.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAInD,KAAK,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;AAEjC,OAAO,KAAK,EAAe,cAAc,EAAE,MAAM,YAAY,CAAC;AAa9D;;;;;;;;;;;GAWG;AACH,qBAAa,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAEhD,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,mDAAmD;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAFJ,MAAM,EAAE,SAAS;IAClC,mDAAmD;IAC1C,IAAI,EAAE,MAAM;IAGvB,2EAA2E;IACrE,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAKhD,kEAAkE;IAC5D,KAAK,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC;IAK3B,oFAAoF;IACpF,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IAI1D,4DAA4D;IACtD,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAUvE,4BAA4B;IACtB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG5D;AAED,cAAM,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAE9C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAFL,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM;YAGlB,GAAG;IAQjB,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAI3C,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAI1C,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAIjD,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAI1C,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAIjD,OAAO,CACL,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,cAAc,EACrB,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GACrD,OAAO,CAAC,CAAC,EAAE,CAAC;IAUf,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAIxC,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;CAG9C"}
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/core/table.ts"],"names":[],"mappings":"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"}