@sunfall/arc-db 0.1.0-alpha.0

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 (150) hide show
  1. package/LICENSE +21 -0
  2. package/dist/change-feed-dispatcher.d.ts +21 -0
  3. package/dist/change-feed-dispatcher.d.ts.map +1 -0
  4. package/dist/change-feed-dispatcher.js +53 -0
  5. package/dist/change-feed-dispatcher.js.map +1 -0
  6. package/dist/collection-change-feed-runtime.d.ts +32 -0
  7. package/dist/collection-change-feed-runtime.d.ts.map +1 -0
  8. package/dist/collection-change-feed-runtime.js +50 -0
  9. package/dist/collection-change-feed-runtime.js.map +1 -0
  10. package/dist/collection-contract.d.ts +525 -0
  11. package/dist/collection-contract.d.ts.map +1 -0
  12. package/dist/collection-contract.js +4 -0
  13. package/dist/collection-contract.js.map +1 -0
  14. package/dist/collection-definition-snapshot.d.ts +64 -0
  15. package/dist/collection-definition-snapshot.d.ts.map +1 -0
  16. package/dist/collection-definition-snapshot.js +122 -0
  17. package/dist/collection-definition-snapshot.js.map +1 -0
  18. package/dist/collection-errors.d.ts +38 -0
  19. package/dist/collection-errors.d.ts.map +1 -0
  20. package/dist/collection-errors.js +17 -0
  21. package/dist/collection-errors.js.map +1 -0
  22. package/dist/collection-ids.d.ts +6 -0
  23. package/dist/collection-ids.d.ts.map +1 -0
  24. package/dist/collection-ids.js +6 -0
  25. package/dist/collection-ids.js.map +1 -0
  26. package/dist/collection-index-materialization.d.ts +29 -0
  27. package/dist/collection-index-materialization.d.ts.map +1 -0
  28. package/dist/collection-index-materialization.js +118 -0
  29. package/dist/collection-index-materialization.js.map +1 -0
  30. package/dist/collection-mutation-queue.d.ts +10 -0
  31. package/dist/collection-mutation-queue.d.ts.map +1 -0
  32. package/dist/collection-mutation-queue.js +46 -0
  33. package/dist/collection-mutation-queue.js.map +1 -0
  34. package/dist/collection-mutation-workflow.d.ts +18 -0
  35. package/dist/collection-mutation-workflow.d.ts.map +1 -0
  36. package/dist/collection-mutation-workflow.js +252 -0
  37. package/dist/collection-mutation-workflow.js.map +1 -0
  38. package/dist/collection-persistence.d.ts +48 -0
  39. package/dist/collection-persistence.d.ts.map +1 -0
  40. package/dist/collection-persistence.js +323 -0
  41. package/dist/collection-persistence.js.map +1 -0
  42. package/dist/collection-policy.d.ts +5 -0
  43. package/dist/collection-policy.d.ts.map +1 -0
  44. package/dist/collection-policy.js +7 -0
  45. package/dist/collection-policy.js.map +1 -0
  46. package/dist/collection-preload.d.ts +21 -0
  47. package/dist/collection-preload.d.ts.map +1 -0
  48. package/dist/collection-preload.js +4 -0
  49. package/dist/collection-preload.js.map +1 -0
  50. package/dist/collection-projection-callback-policy.d.ts +14 -0
  51. package/dist/collection-projection-callback-policy.d.ts.map +1 -0
  52. package/dist/collection-projection-callback-policy.js +25 -0
  53. package/dist/collection-projection-callback-policy.js.map +1 -0
  54. package/dist/collection-reactive-binding.d.ts +72 -0
  55. package/dist/collection-reactive-binding.d.ts.map +1 -0
  56. package/dist/collection-reactive-binding.js +95 -0
  57. package/dist/collection-reactive-binding.js.map +1 -0
  58. package/dist/collection-registry.d.ts +56 -0
  59. package/dist/collection-registry.d.ts.map +1 -0
  60. package/dist/collection-registry.js +123 -0
  61. package/dist/collection-registry.js.map +1 -0
  62. package/dist/collection-row-ingress.d.ts +16 -0
  63. package/dist/collection-row-ingress.d.ts.map +1 -0
  64. package/dist/collection-row-ingress.js +110 -0
  65. package/dist/collection-row-ingress.js.map +1 -0
  66. package/dist/collection-runtime.d.ts +20 -0
  67. package/dist/collection-runtime.d.ts.map +1 -0
  68. package/dist/collection-runtime.js +256 -0
  69. package/dist/collection-runtime.js.map +1 -0
  70. package/dist/collection-snapshot-codec.d.ts +62 -0
  71. package/dist/collection-snapshot-codec.d.ts.map +1 -0
  72. package/dist/collection-snapshot-codec.js +563 -0
  73. package/dist/collection-snapshot-codec.js.map +1 -0
  74. package/dist/collection-state.d.ts +72 -0
  75. package/dist/collection-state.d.ts.map +1 -0
  76. package/dist/collection-state.js +276 -0
  77. package/dist/collection-state.js.map +1 -0
  78. package/dist/collection-sync-load-policy.d.ts +17 -0
  79. package/dist/collection-sync-load-policy.d.ts.map +1 -0
  80. package/dist/collection-sync-load-policy.js +245 -0
  81. package/dist/collection-sync-load-policy.js.map +1 -0
  82. package/dist/collection-value-detachment.d.ts +34 -0
  83. package/dist/collection-value-detachment.d.ts.map +1 -0
  84. package/dist/collection-value-detachment.js +248 -0
  85. package/dist/collection-value-detachment.js.map +1 -0
  86. package/dist/collection-write-commit.d.ts +32 -0
  87. package/dist/collection-write-commit.d.ts.map +1 -0
  88. package/dist/collection-write-commit.js +51 -0
  89. package/dist/collection-write-commit.js.map +1 -0
  90. package/dist/flush-policy.d.ts +130 -0
  91. package/dist/flush-policy.d.ts.map +1 -0
  92. package/dist/flush-policy.js +96 -0
  93. package/dist/flush-policy.js.map +1 -0
  94. package/dist/index.d.ts +481 -0
  95. package/dist/index.d.ts.map +1 -0
  96. package/dist/index.js +251 -0
  97. package/dist/index.js.map +1 -0
  98. package/dist/live-query-collection-materialization.d.ts +47 -0
  99. package/dist/live-query-collection-materialization.d.ts.map +1 -0
  100. package/dist/live-query-collection-materialization.js +231 -0
  101. package/dist/live-query-collection-materialization.js.map +1 -0
  102. package/dist/live-query-collection.d.ts +23 -0
  103. package/dist/live-query-collection.d.ts.map +1 -0
  104. package/dist/live-query-collection.js +94 -0
  105. package/dist/live-query-collection.js.map +1 -0
  106. package/dist/live-query-runtime.d.ts +8 -0
  107. package/dist/live-query-runtime.d.ts.map +1 -0
  108. package/dist/live-query-runtime.js +228 -0
  109. package/dist/live-query-runtime.js.map +1 -0
  110. package/dist/live-query-state.d.ts +11 -0
  111. package/dist/live-query-state.d.ts.map +1 -0
  112. package/dist/live-query-state.js +130 -0
  113. package/dist/live-query-state.js.map +1 -0
  114. package/dist/query-builder.d.ts +294 -0
  115. package/dist/query-builder.d.ts.map +1 -0
  116. package/dist/query-builder.js +373 -0
  117. package/dist/query-builder.js.map +1 -0
  118. package/dist/query-context-identity.d.ts +19 -0
  119. package/dist/query-context-identity.d.ts.map +1 -0
  120. package/dist/query-context-identity.js +41 -0
  121. package/dist/query-context-identity.js.map +1 -0
  122. package/dist/query-execution-plan.d.ts +27 -0
  123. package/dist/query-execution-plan.d.ts.map +1 -0
  124. package/dist/query-execution-plan.js +69 -0
  125. package/dist/query-execution-plan.js.map +1 -0
  126. package/dist/query-plan.d.ts +200 -0
  127. package/dist/query-plan.d.ts.map +1 -0
  128. package/dist/query-plan.js +524 -0
  129. package/dist/query-plan.js.map +1 -0
  130. package/dist/query-source-adapter.d.ts +25 -0
  131. package/dist/query-source-adapter.d.ts.map +1 -0
  132. package/dist/query-source-adapter.js +14 -0
  133. package/dist/query-source-adapter.js.map +1 -0
  134. package/dist/runtime-collection-store.d.ts +38 -0
  135. package/dist/runtime-collection-store.d.ts.map +1 -0
  136. package/dist/runtime-collection-store.js +149 -0
  137. package/dist/runtime-collection-store.js.map +1 -0
  138. package/dist/server-collection.d.ts +84 -0
  139. package/dist/server-collection.d.ts.map +1 -0
  140. package/dist/server-collection.js +84 -0
  141. package/dist/server-collection.js.map +1 -0
  142. package/dist/sqlite-persistence.d.ts +239 -0
  143. package/dist/sqlite-persistence.d.ts.map +1 -0
  144. package/dist/sqlite-persistence.js +345 -0
  145. package/dist/sqlite-persistence.js.map +1 -0
  146. package/dist/sync-adapter.d.ts +233 -0
  147. package/dist/sync-adapter.d.ts.map +1 -0
  148. package/dist/sync-adapter.js +226 -0
  149. package/dist/sync-adapter.js.map +1 -0
  150. package/package.json +48 -0
@@ -0,0 +1,345 @@
1
+ import { EffectInputCallbackError, invokeEffectInput } from "@sunfall/arc-core";
2
+ import { Data, Effect } from "effect";
3
+ /** Default SQLite table used by collection persistence helpers. */
4
+ export const SQLITE_PERSISTENCE_DEFAULT_TABLE = "sunfall_arc_collection_persistence";
5
+ /** Default namespace prefix for persisted collection snapshot rows. */
6
+ export const SQLITE_PERSISTENCE_DEFAULT_NAMESPACE = "sunfall-arc:collections";
7
+ /** Default schema version written to collection persistence rows. */
8
+ export const SQLITE_PERSISTENCE_DEFAULT_SCHEMA_VERSION = 1;
9
+ /**
10
+ * Error raised before generating SQL for an invalid table name.
11
+ */
12
+ export class SQLitePersistenceInvalidTableName extends Data.TaggedError("SQLitePersistenceInvalidTableName") {
13
+ }
14
+ /**
15
+ * Error raised by the in-memory adapter for SQL outside the generated subset.
16
+ */
17
+ export class SQLitePersistenceUnsupportedStatement extends Data.TaggedError("SQLitePersistenceUnsupportedStatement") {
18
+ }
19
+ /** Error raised when a SQLite statement row does not match the persistence row contract. */
20
+ export class SQLitePersistenceInvalidRow extends Data.TaggedError("SQLitePersistenceInvalidRow") {
21
+ }
22
+ /** Error raised when generated in-memory SQLite statements receive malformed params. */
23
+ export class SQLitePersistenceInvalidStatementParams extends Data.TaggedError("SQLitePersistenceInvalidStatementParams") {
24
+ }
25
+ const runCallback = (operation, callback) => invokeEffectInput(`SQLitePersistence.${operation}`, callback);
26
+ const quoteIdentifier = (identifier) => {
27
+ if (identifier.length === 0 || identifier.includes("\0")) {
28
+ throw new SQLitePersistenceInvalidTableName({
29
+ tableName: identifier,
30
+ reason: identifier.length === 0 ? "Empty" : "ContainsNul",
31
+ guidance: "Use a non-empty SQLite table name that does not contain NUL bytes.",
32
+ });
33
+ }
34
+ return `"${identifier.replaceAll('"', '""')}"`;
35
+ };
36
+ const unquoteIdentifier = (identifier) => identifier.startsWith('"') && identifier.endsWith('"')
37
+ ? identifier.slice(1, -1).replaceAll('""', '"')
38
+ : identifier;
39
+ const sqlTableName = (sql) => {
40
+ const match = sql.match(/\bINTO\s+("[^"]*(?:""[^"]*)*")/i) ??
41
+ sql.match(/\bFROM\s+("[^"]*(?:""[^"]*)*")/i) ??
42
+ sql.match(/\bEXISTS\s+("[^"]*(?:""[^"]*)*")/i);
43
+ if (!match?.[1]) {
44
+ throw new SQLitePersistenceUnsupportedStatement({
45
+ sql,
46
+ operation: "tableName",
47
+ guidance: "Use SQL generated by makeSQLiteStatementPersistenceDriver or extend the memory adapter parser.",
48
+ });
49
+ }
50
+ return unquoteIdentifier(match[1]);
51
+ };
52
+ const invalidStatementRow = (field, value, expected) => new SQLitePersistenceInvalidRow({
53
+ field,
54
+ value,
55
+ expected,
56
+ guidance: "SQLite statement adapters must return persisted rows with exact string fields and finite numeric timestamp/version fields.",
57
+ });
58
+ const statementRowNumber = (field, value) => typeof value === "number" && Number.isFinite(value)
59
+ ? Effect.succeed(value)
60
+ : Effect.fail(invalidStatementRow(field, value, "finite-number"));
61
+ const statementRowString = (field, value) => typeof value === "string"
62
+ ? Effect.succeed(value)
63
+ : Effect.fail(invalidStatementRow(field, value, "string"));
64
+ const sqlitePersistenceRowEffect = (row) => Effect.gen(function* () {
65
+ return {
66
+ namespace: yield* statementRowString("namespace", row.namespace),
67
+ key: yield* statementRowString("key", row.key),
68
+ schemaVersion: yield* statementRowNumber("schema_version", row.schemaVersion),
69
+ value: yield* statementRowString("value", row.value),
70
+ updatedAt: yield* statementRowNumber("updated_at", row.updatedAt),
71
+ };
72
+ });
73
+ const invalidStatementParams = (operation, field, value, expected, counts = {}) => new SQLitePersistenceInvalidStatementParams({
74
+ operation,
75
+ field,
76
+ value,
77
+ expected,
78
+ ...counts,
79
+ guidance: "The in-memory SQLite adapter supports generated statements with exact params: string namespace/key/value fields and finite numeric schema_version/updated_at fields.",
80
+ });
81
+ const statementParams = (operation, params, expectedCount) => {
82
+ const values = params === undefined ? [] : Array.isArray(params) ? params : undefined;
83
+ if (values === undefined || values.length !== expectedCount) {
84
+ throw invalidStatementParams(operation, "params", params, "exact-param-count", {
85
+ expectedCount,
86
+ ...(values === undefined ? {} : { actualCount: values.length }),
87
+ });
88
+ }
89
+ return values;
90
+ };
91
+ const statementParamNumber = (operation, field, value) => {
92
+ if (typeof value === "number" && Number.isFinite(value)) {
93
+ return value;
94
+ }
95
+ throw invalidStatementParams(operation, field, value, "finite-number");
96
+ };
97
+ const statementParamString = (operation, field, value) => {
98
+ if (typeof value === "string") {
99
+ return value;
100
+ }
101
+ throw invalidStatementParams(operation, field, value, "string");
102
+ };
103
+ const statementParamList = (params) => params === undefined ? [] : [...params];
104
+ const memoryRowId = (table, key) => `${table}\0${key.namespace}\0${key.key}`;
105
+ /**
106
+ * Create an in-memory statement database that understands generated SQL.
107
+ *
108
+ * Use for tests or demos that need SQLite persistence behavior without a real
109
+ * SQLite runtime.
110
+ */
111
+ export const makeSQLiteMemoryStatementDatabase = () => {
112
+ const rows = new Map();
113
+ const statements = [];
114
+ const row = (table, namespace, key) => rows.get(memoryRowId(table, { namespace, key }));
115
+ const tableRows = (table) => Array.from(rows.entries())
116
+ .filter(([id]) => id.startsWith(`${table}\0`))
117
+ .map(([, value]) => ({ ...value }));
118
+ return {
119
+ statements,
120
+ execute: (sql, params) => {
121
+ statements.push(params === undefined ? { sql } : { sql, params });
122
+ if (/^\s*CREATE\s+TABLE\s+IF\s+NOT\s+EXISTS\b/i.test(sql)) {
123
+ void sqlTableName(sql);
124
+ return;
125
+ }
126
+ if (/^\s*INSERT\s+INTO\b/i.test(sql)) {
127
+ const table = sqlTableName(sql);
128
+ const insertParams = statementParams("insert", params, 5);
129
+ const namespace = statementParamString("insert", "namespace", insertParams[0]);
130
+ const key = statementParamString("insert", "key", insertParams[1]);
131
+ const schemaVersion = statementParamNumber("insert", "schema_version", insertParams[2]);
132
+ const value = statementParamString("insert", "value", insertParams[3]);
133
+ const updatedAt = statementParamNumber("insert", "updated_at", insertParams[4]);
134
+ rows.set(memoryRowId(table, { namespace, key }), {
135
+ namespace,
136
+ key,
137
+ schemaVersion,
138
+ value,
139
+ updatedAt,
140
+ });
141
+ return;
142
+ }
143
+ if (/^\s*DELETE\s+FROM\b/i.test(sql)) {
144
+ const table = sqlTableName(sql);
145
+ const deleteParams = statementParams("delete", params, 2);
146
+ rows.delete(memoryRowId(table, {
147
+ namespace: statementParamString("delete", "namespace", deleteParams[0]),
148
+ key: statementParamString("delete", "key", deleteParams[1]),
149
+ }));
150
+ return;
151
+ }
152
+ throw new SQLitePersistenceUnsupportedStatement({
153
+ sql,
154
+ operation: "execute",
155
+ guidance: "The in-memory SQLite adapter supports generated CREATE, INSERT, and DELETE statements only.",
156
+ });
157
+ },
158
+ select: (sql, params) => {
159
+ statements.push(params === undefined ? { sql } : { sql, params });
160
+ if (!/^\s*SELECT\b/i.test(sql)) {
161
+ throw new SQLitePersistenceUnsupportedStatement({
162
+ sql,
163
+ operation: "select",
164
+ guidance: "The in-memory SQLite adapter supports generated SELECT statements only.",
165
+ });
166
+ }
167
+ const table = sqlTableName(sql);
168
+ const selectParams = statementParams("select", params, 2);
169
+ const current = row(table, statementParamString("select", "namespace", selectParams[0]), statementParamString("select", "key", selectParams[1]));
170
+ return current
171
+ ? [
172
+ {
173
+ namespace: current.namespace,
174
+ key: current.key,
175
+ schema_version: current.schemaVersion,
176
+ value: current.value,
177
+ updated_at: current.updatedAt,
178
+ },
179
+ ]
180
+ : [];
181
+ },
182
+ row,
183
+ tableRows,
184
+ clear: () => {
185
+ rows.clear();
186
+ statements.length = 0;
187
+ },
188
+ };
189
+ };
190
+ /**
191
+ * Adapt a `prepare`/`run`/`all` SQLite client to the statement database shape.
192
+ *
193
+ * Enable `cache` to reuse prepared statements by SQL string.
194
+ */
195
+ export const makeSQLitePreparedStatementDatabase = (database, options = {}) => {
196
+ const cache = options.cache === true ? new Map() : undefined;
197
+ const prepare = (sql) => Effect.gen(function* () {
198
+ const cached = cache?.get(sql);
199
+ if (cached) {
200
+ return cached;
201
+ }
202
+ const statement = yield* runCallback("prepare", () => database.prepare(sql));
203
+ cache?.set(sql, statement);
204
+ return statement;
205
+ });
206
+ return {
207
+ execute: (sql, params) => Effect.flatMap(prepare(sql), (statement) => Effect.asVoid(runCallback("run", () => statement.run(...statementParamList(params))))),
208
+ select: (sql, params) => Effect.flatMap(prepare(sql), (statement) => runCallback("all", () => statement.all(...statementParamList(params)))),
209
+ };
210
+ };
211
+ /**
212
+ * Build a persistence driver from a simple SQL statement database.
213
+ *
214
+ * The driver creates the table if needed, stores snapshots by namespace/key,
215
+ * and quotes table names defensively.
216
+ */
217
+ export const makeSQLiteStatementPersistenceDriver = (database) => ({
218
+ table: (name) => {
219
+ const table = quoteIdentifier(name);
220
+ return {
221
+ ensure: () => runCallback("execute", () => database.execute(`CREATE TABLE IF NOT EXISTS ${table} (` +
222
+ '"namespace" TEXT NOT NULL, ' +
223
+ '"key" TEXT NOT NULL, ' +
224
+ '"schema_version" INTEGER NOT NULL, ' +
225
+ '"value" TEXT NOT NULL, ' +
226
+ '"updated_at" INTEGER NOT NULL, ' +
227
+ 'PRIMARY KEY ("namespace", "key")' +
228
+ ")")),
229
+ get: (key) => Effect.gen(function* () {
230
+ const rows = yield* runCallback("select", () => database.select(`SELECT "namespace", "key", "schema_version", "value", "updated_at" FROM ${table} ` +
231
+ 'WHERE "namespace" = ? AND "key" = ? LIMIT 1', [key.namespace, key.key]));
232
+ const row = rows[0];
233
+ if (!row) {
234
+ return null;
235
+ }
236
+ return {
237
+ namespace: yield* statementRowString("namespace", row.namespace),
238
+ key: yield* statementRowString("key", row.key),
239
+ schemaVersion: yield* statementRowNumber("schema_version", row.schemaVersion ?? row.schema_version),
240
+ value: yield* statementRowString("value", row.value),
241
+ updatedAt: yield* statementRowNumber("updated_at", row.updatedAt ?? row.updated_at),
242
+ };
243
+ }),
244
+ upsert: (row) => runCallback("execute", () => database.execute(`INSERT INTO ${table} ("namespace", "key", "schema_version", "value", "updated_at") ` +
245
+ "VALUES (?, ?, ?, ?, ?) " +
246
+ 'ON CONFLICT("namespace", "key") DO UPDATE SET ' +
247
+ '"schema_version" = excluded."schema_version", ' +
248
+ '"value" = excluded."value", ' +
249
+ '"updated_at" = excluded."updated_at"', [row.namespace, row.key, row.schemaVersion, row.value, row.updatedAt])),
250
+ delete: (key) => runCallback("execute", () => database.execute(`DELETE FROM ${table} WHERE "namespace" = ? AND "key" = ?`, [
251
+ key.namespace,
252
+ key.key,
253
+ ])),
254
+ };
255
+ },
256
+ });
257
+ /**
258
+ * Create `CollectionPersistenceStorage` backed by SQLite.
259
+ *
260
+ * Schema-version mismatches read as `null`, letting callers fall back to a
261
+ * fresh load. Database errors and services flow through the returned storage
262
+ * error and requirement channels.
263
+ *
264
+ * @example
265
+ * const storage = makeSQLitePersistenceStorage(
266
+ * makeSQLiteStatementPersistenceDriver(database)
267
+ * )
268
+ */
269
+ export const makeSQLitePersistenceStorage = (driver, options = {}) => {
270
+ const namespace = options.namespace ?? SQLITE_PERSISTENCE_DEFAULT_NAMESPACE;
271
+ const tableName = options.tableName ?? SQLITE_PERSISTENCE_DEFAULT_TABLE;
272
+ const schemaVersion = options.schemaVersion ?? SQLITE_PERSISTENCE_DEFAULT_SCHEMA_VERSION;
273
+ const now = () => (options.now === undefined ? Date.now() : options.now());
274
+ const tableEffect = () => Effect.try({
275
+ try: () => driver.table(tableName),
276
+ catch: (cause) => cause instanceof SQLitePersistenceInvalidTableName
277
+ ? cause
278
+ : new EffectInputCallbackError({
279
+ operation: "SQLitePersistence.table",
280
+ cause,
281
+ guidance: "SQLite persistence drivers must synchronously return a table adapter. Effectful work belongs in table ensure/get/upsert/delete callbacks.",
282
+ }),
283
+ });
284
+ const runStorageCallback = (operation, callback) => runCallback(operation, callback);
285
+ const ensureTable = (table) => table.ensure ? runStorageCallback("ensure", () => table.ensure()) : Effect.void;
286
+ const rowKeyEffect = (key) => Effect.gen(function* () {
287
+ return {
288
+ namespace: yield* statementRowString("namespace", namespace),
289
+ key: yield* statementRowString("key", key),
290
+ };
291
+ });
292
+ const storage = {
293
+ getItem: (key) => Effect.gen(function* () {
294
+ const table = yield* tableEffect();
295
+ yield* ensureTable(table);
296
+ const currentSchemaVersion = yield* statementRowNumber("schema_version", schemaVersion);
297
+ const rowKey = yield* rowKeyEffect(key);
298
+ const row = yield* runStorageCallback("get", () => table.get(rowKey));
299
+ const validRow = row == null ? null : yield* sqlitePersistenceRowEffect(row);
300
+ return validRow?.schemaVersion === currentSchemaVersion ? validRow.value : null;
301
+ }),
302
+ setItem: (key, value) => Effect.gen(function* () {
303
+ const table = yield* tableEffect();
304
+ yield* ensureTable(table);
305
+ const currentSchemaVersion = yield* statementRowNumber("schema_version", schemaVersion);
306
+ const updatedAt = yield* runStorageCallback("now", now);
307
+ const validUpdatedAt = yield* statementRowNumber("updated_at", updatedAt);
308
+ const rowKey = yield* rowKeyEffect(key);
309
+ const row = yield* sqlitePersistenceRowEffect({
310
+ ...rowKey,
311
+ schemaVersion: currentSchemaVersion,
312
+ value,
313
+ updatedAt: validUpdatedAt,
314
+ });
315
+ yield* runStorageCallback("upsert", () => table.upsert(row));
316
+ }),
317
+ };
318
+ return {
319
+ ...storage,
320
+ removeItem: (key) => Effect.gen(function* () {
321
+ const table = yield* tableEffect();
322
+ if (!table.delete) {
323
+ return;
324
+ }
325
+ yield* ensureTable(table);
326
+ const rowKey = yield* rowKeyEffect(key);
327
+ yield* runStorageCallback("delete", () => table.delete(rowKey));
328
+ }),
329
+ };
330
+ };
331
+ /**
332
+ * SQLite persistence namespace for collection snapshot storage helpers.
333
+ */
334
+ export var SQLitePersistence;
335
+ (function (SQLitePersistence) {
336
+ /** Create `CollectionPersistenceStorage` backed by SQLite. */
337
+ SQLitePersistence.storage = makeSQLitePersistenceStorage;
338
+ /** Adapt a `prepare`/`run`/`all` SQLite client to a statement database. */
339
+ SQLitePersistence.preparedStatementDatabase = makeSQLitePreparedStatementDatabase;
340
+ /** Build a persistence driver from a simple SQL statement database. */
341
+ SQLitePersistence.statementDriver = makeSQLiteStatementPersistenceDriver;
342
+ /** Create an in-memory statement database for tests and demos. */
343
+ SQLitePersistence.memoryStatementDatabase = makeSQLiteMemoryStatementDatabase;
344
+ })(SQLitePersistence || (SQLitePersistence = {}));
345
+ //# sourceMappingURL=sqlite-persistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-persistence.js","sourceRoot":"","sources":["../src/sqlite-persistence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,233 @@
1
+ import { EffectInputCallbackError, Resource, type EffectInput } from "@sunfall/arc-core";
2
+ import type { CollectionIndexRecord, CollectionKey, CollectionChange, CollectionOptions, CollectionPersistenceConfig, CollectionPolicy, CollectionRuntimeError, CollectionTransaction, CollectionWriteOptions } from "./collection-contract.js";
3
+ import type { CollectionChangeFeedDispatchPolicy } from "./change-feed-dispatcher.js";
4
+ /**
5
+ * Insert payload delivered to a collection sync adapter.
6
+ */
7
+ export interface CollectionSyncInsertPayload<A extends object, K extends CollectionKey> {
8
+ readonly values: ReadonlyArray<A>;
9
+ readonly transaction: CollectionTransaction<A, K>;
10
+ }
11
+ /**
12
+ * Update payload delivered to a collection sync adapter.
13
+ */
14
+ export interface CollectionSyncUpdatePayload<A extends object, K extends CollectionKey> {
15
+ readonly updates: ReadonlyArray<{
16
+ readonly key: K;
17
+ readonly value: A;
18
+ readonly previous: A;
19
+ readonly changes: Partial<A>;
20
+ }>;
21
+ readonly transaction: CollectionTransaction<A, K>;
22
+ }
23
+ /**
24
+ * Delete payload delivered to a collection sync adapter.
25
+ */
26
+ export interface CollectionSyncDeletePayload<A extends object, K extends CollectionKey> {
27
+ readonly deletes: ReadonlyArray<{
28
+ readonly key: K;
29
+ readonly previous: A;
30
+ }>;
31
+ readonly transaction: CollectionTransaction<A, K>;
32
+ }
33
+ /**
34
+ * Transport adapter for collection load/refetch and mutation handlers.
35
+ *
36
+ * Each callback may return a plain value or Effect. Errors become the
37
+ * collection error channel `E`, and any required services become `R`.
38
+ */
39
+ export interface CollectionSyncAdapter<A extends object, K extends CollectionKey = string, E = never, R = never> {
40
+ readonly name: string;
41
+ readonly load?: () => EffectInput<ReadonlyArray<A>, E, R>;
42
+ readonly refetch?: () => EffectInput<ReadonlyArray<A>, E, R>;
43
+ readonly insert?: (payload: CollectionSyncInsertPayload<A, K>) => EffectInput<void, E, R>;
44
+ readonly update?: (payload: CollectionSyncUpdatePayload<A, K>) => EffectInput<void, E, R>;
45
+ readonly delete?: (payload: CollectionSyncDeletePayload<A, K>) => EffectInput<void, E, R>;
46
+ }
47
+ /**
48
+ * Options for defining a collection from a sync adapter.
49
+ */
50
+ export interface CollectionSyncOptions<A extends object, K extends CollectionKey = string, E = never, R = never> {
51
+ readonly name: string;
52
+ readonly input?: unknown;
53
+ readonly output?: unknown;
54
+ readonly policy?: CollectionPolicy<E>;
55
+ readonly persistence?: CollectionPersistenceConfig<E, R>;
56
+ readonly indexes?: CollectionIndexRecord<A>;
57
+ readonly getKey: (value: A) => K;
58
+ readonly initialData?: ReadonlyArray<A>;
59
+ readonly sync: CollectionSyncAdapter<A, K, E, R>;
60
+ }
61
+ /**
62
+ * Options for adapting an `@sunfall/arc-core` Resource ref into collection sync.
63
+ */
64
+ export interface CollectionResourceSyncAdapterOptions<I, A extends object, K extends CollectionKey = string, E = never, R = never> extends Pick<CollectionSyncAdapter<A, K, E, R>, "insert" | "update" | "delete"> {
65
+ readonly name?: string;
66
+ readonly ref: Resource.Ref<I, ReadonlyArray<A>, E, R>;
67
+ }
68
+ /**
69
+ * Plain recursive value accepted inside a query-client cache key.
70
+ */
71
+ export type CollectionQuerySyncKeyPart = null | undefined | string | number | boolean | bigint | symbol | Date | ReadonlyArray<CollectionQuerySyncKeyPart> | {
72
+ readonly [key: string]: CollectionQuerySyncKeyPart;
73
+ };
74
+ /**
75
+ * Stable query cache key used by query-client-backed sync adapters.
76
+ */
77
+ export type CollectionQuerySyncKey = ReadonlyArray<CollectionQuerySyncKeyPart>;
78
+ /**
79
+ * Fetch request issued to a query-client-backed sync adapter.
80
+ */
81
+ export interface CollectionQuerySyncFetchOptions<A extends object, E = never, R = never> {
82
+ readonly queryKey: CollectionQuerySyncKey;
83
+ readonly queryFn: () => EffectInput<ReadonlyArray<A>, E, R>;
84
+ }
85
+ /**
86
+ * Invalidation request issued after refetches or mutations.
87
+ */
88
+ export interface CollectionQuerySyncInvalidateOptions {
89
+ readonly queryKey: CollectionQuerySyncKey;
90
+ }
91
+ /**
92
+ * Minimal query client interface used by `collectionQuerySyncAdapter`.
93
+ */
94
+ export interface CollectionQuerySyncClient<A extends object, E = never, R = never> {
95
+ readonly fetchQuery: (options: CollectionQuerySyncFetchOptions<A, E, R>) => EffectInput<ReadonlyArray<A>, E, R>;
96
+ readonly invalidateQueries?: (options: CollectionQuerySyncInvalidateOptions) => EffectInput<void, E, R>;
97
+ }
98
+ /**
99
+ * Policy for post-mutation query cache invalidation failures.
100
+ *
101
+ * `best-effort` preserves the historical behavior: once the mutation callback
102
+ * succeeds, invalidation failures are ignored so the optimistic commit remains
103
+ * synced. `rollback-on-failure` treats invalidation as part of the mutation
104
+ * handler, so invalidation failures roll back the optimistic transaction and
105
+ * fail the mutation Effect.
106
+ */
107
+ export type CollectionQuerySyncMutationInvalidationPolicy = "best-effort" | "rollback-on-failure";
108
+ /**
109
+ * Options for adapting query-client cache reads and invalidation to sync.
110
+ */
111
+ export interface CollectionQuerySyncAdapterOptions<A extends object, K extends CollectionKey = string, E = never, R = never> extends Pick<CollectionSyncAdapter<A, K, E, R>, "insert" | "update" | "delete"> {
112
+ readonly name?: string;
113
+ readonly queryKey: CollectionQuerySyncKey;
114
+ readonly queryFn: () => EffectInput<ReadonlyArray<A>, E, R>;
115
+ readonly queryClient: CollectionQuerySyncClient<A, E, R>;
116
+ readonly invalidateOnRefetch?: boolean;
117
+ readonly invalidateOnMutation?: boolean;
118
+ readonly mutationInvalidation?: CollectionQuerySyncMutationInvalidationPolicy;
119
+ }
120
+ /**
121
+ * Effect-aware unsubscribe callback for change-feed subscriptions.
122
+ *
123
+ * Scope release runs this callback as Effect work. If it fails or defects, the
124
+ * Collection Runtime publishes the failure as `CollectionChangeFeedFailure`
125
+ * and then swallows it so subscription scope cleanup does not fail after
126
+ * release.
127
+ */
128
+ export type CollectionChangeFeedUnsubscribe<E = never, R = never> = () => EffectInput<void, E, R>;
129
+ /**
130
+ * Value returned by a change-feed subscribe call.
131
+ *
132
+ * Use an Effect-aware unsubscribe when cleanup needs services or can fail. The
133
+ * runtime reports cleanup failures and defects through change-feed failure
134
+ * publication rather than by rethrowing from the released scope.
135
+ */
136
+ export type CollectionChangeFeedSubscription<E = never, R = never> = CollectionChangeFeedUnsubscribe<E, R> | {
137
+ readonly unsubscribe: CollectionChangeFeedUnsubscribe<E, R>;
138
+ } | void;
139
+ /**
140
+ * Context passed to change-feed adapters.
141
+ *
142
+ * `emit` returns the Effect for composed Effect adapters. `emitChanges` is the
143
+ * host-callback helper for websocket, worker, and observer feeds; it queues
144
+ * changes into the Collection Runtime consumer owned by
145
+ * `Collection.subscribeChangesEffect(...)`.
146
+ */
147
+ export interface CollectionChangeFeedContext<A extends object, K extends CollectionKey = string, E = never, R = never> {
148
+ readonly collection: string;
149
+ readonly emit: (changes: ReadonlyArray<CollectionChange<A, K>>, options?: CollectionWriteOptions) => EffectInput<void, CollectionRuntimeError<E>, R>;
150
+ readonly emitChanges: (changes: ReadonlyArray<CollectionChange<A, K>>, options?: CollectionWriteOptions) => void;
151
+ }
152
+ /**
153
+ * Scoped adapter for remote change feeds.
154
+ *
155
+ * Use with `Collection.subscribeChangesEffect`; the subscription is released
156
+ * when the provided Scope closes. Subscribe setup failures use the adapter's
157
+ * typed error channel. Unsubscribe failures and defects are published as
158
+ * asynchronous change-feed failures and swallowed during scope release.
159
+ *
160
+ * `E` and `R` describe the feed subscription itself. `CollectionError` and
161
+ * `CollectionRequirements` describe the `context.emit(...)` write seam.
162
+ */
163
+ export interface CollectionChangeFeedAdapter<A extends object, K extends CollectionKey = string, E = never, R = never, CollectionError = never, CollectionRequirements = never> {
164
+ readonly name: string;
165
+ readonly subscribe: (context: CollectionChangeFeedContext<A, K, CollectionError, CollectionRequirements>) => EffectInput<CollectionChangeFeedSubscription<E, R>, E, R>;
166
+ }
167
+ /**
168
+ * Options applied to writes emitted by a change-feed subscription.
169
+ */
170
+ export interface CollectionChangeFeedSubscribeOptions {
171
+ readonly write?: CollectionWriteOptions;
172
+ readonly dispatch?: CollectionChangeFeedDispatchPolicy;
173
+ }
174
+ /**
175
+ * Convert a sync adapter into `Collection.define` options.
176
+ *
177
+ * The Collection Runtime owns the first-load versus forced-refetch decision.
178
+ * This Adapter maps sync `load` and `refetch` callbacks independently and wires
179
+ * mutation callbacks to optimistic transaction handlers.
180
+ *
181
+ * @example
182
+ * const todos = Collection.define(collectionSyncOptions({
183
+ * name: "todos",
184
+ * getKey: (todo) => todo.id,
185
+ * sync: todoSync
186
+ * }))
187
+ */
188
+ export declare const collectionSyncOptions: <A extends object, K extends CollectionKey = string, E = never, R = never>(options: CollectionSyncOptions<A, K, E, R>) => CollectionOptions<A, K, E | EffectInputCallbackError, R>;
189
+ /**
190
+ * Build a sync adapter from an `@sunfall/arc-core` Resource ref.
191
+ *
192
+ * Preload calls `Resource.prefetchEffect`; refetch calls
193
+ * `Resource.refreshEffect`. Optional mutation callbacks can still write through
194
+ * to a remote system.
195
+ */
196
+ export declare const collectionResourceSyncAdapter: <I, A extends object, K extends CollectionKey = string, E = never, R = never>(options: CollectionResourceSyncAdapterOptions<I, A, K, E, R>) => CollectionSyncAdapter<A, K, Resource.LoadError<E>, R>;
197
+ /**
198
+ * Build a sync adapter from a query-client style cache.
199
+ *
200
+ * Fetches go through `queryClient.fetchQuery`. Refetches and successful
201
+ * mutations invalidate the query key unless disabled.
202
+ */
203
+ export declare const collectionQuerySyncAdapter: <A extends object, K extends CollectionKey = string, E = never, R = never>(options: CollectionQuerySyncAdapterOptions<A, K, E, R>) => CollectionSyncAdapter<A, K, E | EffectInputCallbackError, R>;
204
+ /**
205
+ * Sync adapter namespace for collection transport helpers.
206
+ */
207
+ export declare namespace CollectionSync {
208
+ type InsertPayload<A extends object, K extends CollectionKey> = CollectionSyncInsertPayload<A, K>;
209
+ type UpdatePayload<A extends object, K extends CollectionKey> = CollectionSyncUpdatePayload<A, K>;
210
+ type DeletePayload<A extends object, K extends CollectionKey> = CollectionSyncDeletePayload<A, K>;
211
+ type Adapter<A extends object, K extends CollectionKey = string, E = never, R = never> = CollectionSyncAdapter<A, K, E, R>;
212
+ type Options<A extends object, K extends CollectionKey = string, E = never, R = never> = CollectionSyncOptions<A, K, E, R>;
213
+ type ResourceAdapterOptions<I, A extends object, K extends CollectionKey = string, E = never, R = never> = CollectionResourceSyncAdapterOptions<I, A, K, E, R>;
214
+ type QueryKeyPart = CollectionQuerySyncKeyPart;
215
+ type QueryKey = CollectionQuerySyncKey;
216
+ type QueryFetchOptions<A extends object, E = never, R = never> = CollectionQuerySyncFetchOptions<A, E, R>;
217
+ type QueryInvalidateOptions = CollectionQuerySyncInvalidateOptions;
218
+ type QueryClient<A extends object, E = never, R = never> = CollectionQuerySyncClient<A, E, R>;
219
+ type QueryAdapterOptions<A extends object, K extends CollectionKey = string, E = never, R = never> = CollectionQuerySyncAdapterOptions<A, K, E, R>;
220
+ type QueryMutationInvalidationPolicy = CollectionQuerySyncMutationInvalidationPolicy;
221
+ type ChangeFeedUnsubscribe<E = never, R = never> = CollectionChangeFeedUnsubscribe<E, R>;
222
+ type ChangeFeedSubscription<E = never, R = never> = CollectionChangeFeedSubscription<E, R>;
223
+ type ChangeFeedContext<A extends object, K extends CollectionKey = string, E = never, R = never> = CollectionChangeFeedContext<A, K, E, R>;
224
+ type ChangeFeedAdapter<A extends object, K extends CollectionKey = string, E = never, R = never, CollectionError = never, CollectionRequirements = never> = CollectionChangeFeedAdapter<A, K, E, R, CollectionError, CollectionRequirements>;
225
+ type ChangeFeedSubscribeOptions = CollectionChangeFeedSubscribeOptions;
226
+ /** Convert a sync adapter into `Collection.define` options. */
227
+ const options: <A extends object, K extends CollectionKey = string, E = never, R = never>(options: CollectionSyncOptions<A, K, E, R>) => CollectionOptions<A, K, E | EffectInputCallbackError, R>;
228
+ /** Adapt an `@sunfall/arc-core` Resource ref into a sync adapter. */
229
+ const resourceAdapter: <I, A extends object, K extends CollectionKey = string, E = never, R = never>(options: CollectionResourceSyncAdapterOptions<I, A, K, E, R>) => CollectionSyncAdapter<A, K, Resource.LoadError<E>, R>;
230
+ /** Adapt a query-client style cache into a sync adapter. */
231
+ const queryAdapter: <A extends object, K extends CollectionKey = string, E = never, R = never>(options: CollectionQuerySyncAdapterOptions<A, K, E, R>) => CollectionSyncAdapter<A, K, E | EffectInputCallbackError, R>;
232
+ }
233
+ //# sourceMappingURL=sync-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-adapter.d.ts","sourceRoot":"","sources":["../src/sync-adapter.ts"],"names":[],"mappings":"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"}