@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,563 @@
1
+ import { EffectInputCallbackError } from "@sunfall/arc-core";
2
+ import { Effect, Data, Schema } from "effect";
3
+ import { applyCollectionBaseRow, cloneStoredRow, rebaseCollectionBaseRows, syncOptimisticRowsFromPendingMutations, } from "./collection-state.js";
4
+ import { CollectionValueReadError, cloneCollectionValue, collectionExecutableValuePath, cloneFrozenCollectionTransaction, collectionValueChanges, } from "./collection-value-detachment.js";
5
+ /**
6
+ * Typed failure for invalid collection snapshots or hydration payloads.
7
+ *
8
+ * `operation` identifies the codec phase, `path` is a JSONPath-like location
9
+ * in the payload, and `reason` describes the validation failure.
10
+ */
11
+ export class CollectionSnapshotCodecError extends Data.TaggedError("CollectionSnapshotCodecError") {
12
+ }
13
+ const failCodec = (operation, path, reason) => {
14
+ throw new CollectionSnapshotCodecError({ operation, path, reason });
15
+ };
16
+ const assertCodec = (condition, operation, path, reason) => {
17
+ if (!condition) {
18
+ failCodec(operation, path, reason);
19
+ }
20
+ };
21
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
22
+ const isObjectValue = (value) => typeof value === "object" && value !== null;
23
+ const hasOwn = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
24
+ const cloneValue = (value) => cloneCollectionValue(value);
25
+ export const validateCollectionKey = (value, operation, path) => {
26
+ assertCodec(typeof value === "string" || (typeof value === "number" && Number.isFinite(value)), operation, path, "Expected a string or finite number collection key.");
27
+ return value;
28
+ };
29
+ const validateKey = validateCollectionKey;
30
+ const validateString = (value, operation, path) => {
31
+ assertCodec(typeof value === "string", operation, path, "Expected a string.");
32
+ return value;
33
+ };
34
+ const validateNumber = (value, operation, path) => {
35
+ assertCodec(typeof value === "number" && Number.isFinite(value), operation, path, "Expected a finite number.");
36
+ return value;
37
+ };
38
+ const validateNonNegativeSafeInteger = (value, operation, path) => {
39
+ assertCodec(typeof value === "number" && Number.isSafeInteger(value) && value >= 0, operation, path, "Expected a non-negative safe integer.");
40
+ return value;
41
+ };
42
+ const validateOrigin = (value, operation, path) => {
43
+ assertCodec(value === "local" || value === "remote", operation, path, "Expected collection origin to be 'local' or 'remote'.");
44
+ return value;
45
+ };
46
+ const validateObjectValue = (value, operation, path) => {
47
+ assertCodec(isObjectValue(value), operation, path, "Expected a non-null object value.");
48
+ return cloneValue(value);
49
+ };
50
+ const validateChangeObject = (value, operation, path) => {
51
+ assertCodec(isObjectValue(value), operation, path, "Expected a non-null changes object.");
52
+ return cloneValue(value);
53
+ };
54
+ const validateRecord = (value, operation, path, label) => {
55
+ assertCodec(isRecord(value), operation, path, `Expected ${label}.`);
56
+ return value;
57
+ };
58
+ const validateArray = (value, operation, path, label) => {
59
+ assertCodec(Array.isArray(value), operation, path, `Expected ${label}.`);
60
+ return value;
61
+ };
62
+ export const validateCollectionRowSnapshot = (value, operation, path) => {
63
+ const row = validateRecord(value, operation, path, "a collection row snapshot");
64
+ const synced = row.synced;
65
+ assertCodec(typeof synced === "boolean", operation, `${path}.synced`, "Expected a boolean sync flag.");
66
+ return {
67
+ key: validateKey(row.key, operation, `${path}.key`),
68
+ value: validateObjectValue(row.value, operation, `${path}.value`),
69
+ synced,
70
+ origin: validateOrigin(row.origin, operation, `${path}.origin`),
71
+ };
72
+ };
73
+ const validateCollectionMutation = (value, operation, path) => {
74
+ const mutation = validateRecord(value, operation, path, "a collection mutation snapshot");
75
+ const tag = mutation._tag;
76
+ switch (tag) {
77
+ case "Insert": {
78
+ const base = {
79
+ _tag: "Insert",
80
+ key: validateKey(mutation.key, operation, `${path}.key`),
81
+ value: validateObjectValue(mutation.value, operation, `${path}.value`),
82
+ };
83
+ return hasOwn(mutation, "previous") && mutation.previous !== undefined
84
+ ? {
85
+ ...base,
86
+ previous: validateObjectValue(mutation.previous, operation, `${path}.previous`),
87
+ }
88
+ : base;
89
+ }
90
+ case "Update":
91
+ return {
92
+ _tag: "Update",
93
+ key: validateKey(mutation.key, operation, `${path}.key`),
94
+ previous: validateObjectValue(mutation.previous, operation, `${path}.previous`),
95
+ value: validateObjectValue(mutation.value, operation, `${path}.value`),
96
+ changes: validateChangeObject(mutation.changes, operation, `${path}.changes`),
97
+ };
98
+ case "Delete":
99
+ return {
100
+ _tag: "Delete",
101
+ key: validateKey(mutation.key, operation, `${path}.key`),
102
+ previous: validateObjectValue(mutation.previous, operation, `${path}.previous`),
103
+ };
104
+ }
105
+ return failCodec(operation, `${path}._tag`, "Expected mutation tag Insert, Update, or Delete.");
106
+ };
107
+ const validateCollectionTransaction = (value, operation, path) => {
108
+ const transaction = validateRecord(value, operation, path, "a collection transaction snapshot");
109
+ const mutations = validateArray(transaction.mutations, operation, `${path}.mutations`, "a mutation array");
110
+ return {
111
+ id: validateString(transaction.id, operation, `${path}.id`),
112
+ collection: validateString(transaction.collection, operation, `${path}.collection`),
113
+ mutations: mutations.map((mutation, index) => validateCollectionMutation(mutation, operation, `${path}.mutations[${index}]`)),
114
+ };
115
+ };
116
+ const validateCollectionRollbackRow = (value, operation, path) => {
117
+ const rollback = validateRecord(value, operation, path, "a collection rollback row snapshot");
118
+ const key = validateKey(rollback.key, operation, `${path}.key`);
119
+ return hasOwn(rollback, "row") && rollback.row !== undefined
120
+ ? {
121
+ key,
122
+ row: validateCollectionRowSnapshot(rollback.row, operation, `${path}.row`),
123
+ }
124
+ : { key };
125
+ };
126
+ export const validateCollectionPendingMutation = (value, operation, path) => {
127
+ const pending = validateRecord(value, operation, path, "a pending collection mutation snapshot");
128
+ const transaction = validateCollectionTransaction(pending.transaction, operation, `${path}.transaction`);
129
+ const rollbackValues = validateArray(pending.rollbackRows, operation, `${path}.rollbackRows`, "a rollback row array");
130
+ const rollbackRows = rollbackValues.map((rollback, index) => validateCollectionRollbackRow(rollback, operation, `${path}.rollbackRows[${index}]`));
131
+ const mutationKeys = new Set(transaction.mutations.map((mutation) => mutation.key));
132
+ const rollbackKeys = new Set();
133
+ for (const [rollbackIndex, rollback] of rollbackRows.entries()) {
134
+ const rollbackPath = `${path}.rollbackRows[${rollbackIndex}]`;
135
+ assertCodec(!rollbackKeys.has(rollback.key), operation, `${rollbackPath}.key`, `Rollback row key ${String(rollback.key)} appears more than once.`);
136
+ assertCodec(mutationKeys.has(rollback.key), operation, `${rollbackPath}.key`, `Rollback row key ${String(rollback.key)} is not part of the pending transaction.`);
137
+ assertCodec(rollback.row === undefined || Object.is(rollback.row.key, rollback.key), operation, `${rollbackPath}.row.key`, "Rollback row key must match its rollback entry key.");
138
+ rollbackKeys.add(rollback.key);
139
+ }
140
+ for (const key of mutationKeys) {
141
+ assertCodec(rollbackKeys.has(key), operation, `${path}.rollbackRows`, `Missing rollback row for pending mutation key ${String(key)}.`);
142
+ }
143
+ return {
144
+ transaction,
145
+ rollbackRows,
146
+ createdAt: validateNumber(pending.createdAt, operation, `${path}.createdAt`),
147
+ attempts: validateNonNegativeSafeInteger(pending.attempts, operation, `${path}.attempts`),
148
+ };
149
+ };
150
+ export const validateCollectionSnapshot = (value, operation = "hydrate", path = "$") => {
151
+ const snapshot = validateRecord(value, operation, path, "a collection snapshot");
152
+ const rows = validateArray(snapshot.rows, operation, `${path}.rows`, "a row snapshot array");
153
+ const pendingMutations = snapshot.pendingMutations === undefined
154
+ ? []
155
+ : validateArray(snapshot.pendingMutations, operation, `${path}.pendingMutations`, "a pending mutation array");
156
+ const decodedRows = rows.map((row, index) => validateCollectionRowSnapshot(row, operation, `${path}.rows[${index}]`));
157
+ const rowKeys = new Set();
158
+ decodedRows.forEach((row, index) => {
159
+ assertCodec(!rowKeys.has(row.key), operation, `${path}.rows[${index}].key`, `Duplicate row key '${String(row.key)}' in collection snapshot.`);
160
+ rowKeys.add(row.key);
161
+ });
162
+ const decodedPendingMutations = pendingMutations.map((pending, index) => validateCollectionPendingMutation(pending, operation, `${path}.pendingMutations[${index}]`));
163
+ const pendingTransactionIds = new Set();
164
+ decodedPendingMutations.forEach((pending, index) => {
165
+ const id = pending.transaction.id;
166
+ assertCodec(!pendingTransactionIds.has(id), operation, `${path}.pendingMutations[${index}].transaction.id`, `Duplicate pending transaction id '${id}' in collection snapshot.`);
167
+ pendingTransactionIds.add(id);
168
+ });
169
+ return {
170
+ name: validateString(snapshot.name, operation, `${path}.name`),
171
+ rows: decodedRows,
172
+ pendingMutations: decodedPendingMutations,
173
+ updatedAt: validateNumber(snapshot.updatedAt, operation, `${path}.updatedAt`),
174
+ };
175
+ };
176
+ const catchSnapshotCodecError = (operation, path) => (error) => {
177
+ if (error instanceof CollectionSnapshotCodecError) {
178
+ return error;
179
+ }
180
+ return new CollectionSnapshotCodecError({
181
+ operation,
182
+ path,
183
+ reason: error instanceof Error ? error.message : String(error),
184
+ });
185
+ };
186
+ export const validateCollectionSnapshotEffect = (value, operation = "hydrate", path = "$") => Effect.try({
187
+ try: () => validateCollectionSnapshot(value, operation, path),
188
+ catch: catchSnapshotCodecError(operation, path),
189
+ });
190
+ /**
191
+ * Decodes collection output schema failures into the snapshot codec error seam.
192
+ *
193
+ * Public Collection and Query Interfaces should not expose raw schema errors;
194
+ * callers see `CollectionSnapshotCodecError` with the
195
+ * path that failed inside the hydrated or loaded snapshot.
196
+ */
197
+ export const decodeCollectionOutputValuesEffect = (schema, values, operation, path) => {
198
+ if (!Schema.isSchema(schema)) {
199
+ return Effect.succeed(values);
200
+ }
201
+ const candidateValues = values;
202
+ const isDecodedCollection = Schema.is(schema);
203
+ if (isDecodedCollection(candidateValues)) {
204
+ return Effect.succeed(values);
205
+ }
206
+ const isDecodedValue = Schema.is(schema);
207
+ if (candidateValues.every((value) => isDecodedValue(value))) {
208
+ return Effect.succeed(values);
209
+ }
210
+ const decodeValues = Schema.decodeUnknownEffect(schema)(values);
211
+ const decodeRows = Effect.all(candidateValues.map((value) => Schema.decodeUnknownEffect(schema)(value))).pipe(Effect.map((decoded) => decoded));
212
+ return decodeValues.pipe(Effect.catch(() => decodeRows), Effect.mapError(catchSnapshotCodecError(operation, path)));
213
+ };
214
+ export const decodeCollectionOutputValuesSync = (schema, values, operation, path) => {
215
+ if (!Schema.isSchema(schema)) {
216
+ return values;
217
+ }
218
+ try {
219
+ const candidateValues = values;
220
+ const isDecodedCollection = Schema.is(schema);
221
+ if (isDecodedCollection(candidateValues)) {
222
+ return values;
223
+ }
224
+ const isDecodedValue = Schema.is(schema);
225
+ if (candidateValues.every((value) => isDecodedValue(value))) {
226
+ return values;
227
+ }
228
+ try {
229
+ return Schema.decodeUnknownSync(schema)(values);
230
+ }
231
+ catch {
232
+ return candidateValues.map((value) => Schema.decodeUnknownSync(schema)(value));
233
+ }
234
+ }
235
+ catch (error) {
236
+ throw catchSnapshotCodecError(operation, path)(error);
237
+ }
238
+ };
239
+ const decodeCollectionDefinitionValuesEffect = (definition, values, operation, path) => decodeCollectionOutputValuesEffect(definition.options.output, values, operation, path);
240
+ const describeCollectionKey = (key) => typeof key === "string" ? JSON.stringify(key) : String(key);
241
+ const collectionDefinitionKeyEffect = (definition, value, operation, path) => Effect.try({
242
+ try: () => definition.getKey(value),
243
+ catch: (cause) => new EffectInputCallbackError({
244
+ operation: `Collection.${operation}(${definition.name}).getKey`,
245
+ cause,
246
+ guidance: `Collection snapshot getKey callbacks must be synchronous, pure, and total. The failing value was at ${path}.`,
247
+ }),
248
+ });
249
+ const validateCollectionValueKeyEffect = (definition, snapshotKey, value, operation, keyPath, valuePath) => Effect.gen(function* () {
250
+ const valueKey = yield* collectionDefinitionKeyEffect(definition, value, operation, valuePath);
251
+ if (!Object.is(valueKey, snapshotKey)) {
252
+ return yield* Effect.fail(new CollectionSnapshotCodecError({
253
+ operation,
254
+ path: keyPath,
255
+ reason: `Expected snapshot key ${describeCollectionKey(snapshotKey)} to match decoded value key ${describeCollectionKey(valueKey)}.`,
256
+ }));
257
+ }
258
+ });
259
+ const validateCollectionPlainSnapshotValueEffect = (value, operation, path) => Effect.try({
260
+ try: () => {
261
+ const executable = collectionExecutableValuePath(value, path);
262
+ if (executable !== undefined) {
263
+ throw new CollectionSnapshotCodecError({
264
+ operation,
265
+ path: executable.path,
266
+ reason: executable.reason,
267
+ });
268
+ }
269
+ },
270
+ catch: (cause) => cause instanceof CollectionSnapshotCodecError
271
+ ? cause
272
+ : new CollectionSnapshotCodecError({
273
+ operation,
274
+ path: cause instanceof CollectionValueReadError ? cause.path : path,
275
+ reason: "Expected collection snapshot values to be readable plain data.",
276
+ }),
277
+ });
278
+ export const validateCollectionSnapshotDefinitionEffect = (definition, value, operation = "hydrate", path = "$") => Effect.gen(function* () {
279
+ const snapshot = yield* validateCollectionSnapshotEffect(value, operation, path);
280
+ if (snapshot.name !== definition.name) {
281
+ return yield* Effect.fail(new CollectionSnapshotCodecError({
282
+ operation,
283
+ path: `${path}.name`,
284
+ reason: `Expected collection snapshot for '${definition.name}' but received '${snapshot.name}'.`,
285
+ }));
286
+ }
287
+ const values = [];
288
+ for (const row of snapshot.rows) {
289
+ values.push(row.value);
290
+ }
291
+ for (const pending of snapshot.pendingMutations) {
292
+ for (const mutation of pending.transaction.mutations) {
293
+ switch (mutation._tag) {
294
+ case "Insert":
295
+ values.push(mutation.value);
296
+ if (mutation.previous !== undefined) {
297
+ values.push(mutation.previous);
298
+ }
299
+ break;
300
+ case "Update":
301
+ values.push(mutation.previous, mutation.value);
302
+ break;
303
+ case "Delete":
304
+ values.push(mutation.previous);
305
+ break;
306
+ }
307
+ }
308
+ for (const rollback of pending.rollbackRows) {
309
+ if (rollback.row) {
310
+ values.push(rollback.row.value);
311
+ }
312
+ }
313
+ }
314
+ const decoded = yield* decodeCollectionDefinitionValuesEffect(definition, values, operation, path);
315
+ let index = 0;
316
+ const nextValue = () => decoded[index++];
317
+ const rows = [];
318
+ const pendingMutations = [];
319
+ for (const [rowIndex, row] of snapshot.rows.entries()) {
320
+ const value = nextValue();
321
+ const rowPath = `${path}.rows[${rowIndex}]`;
322
+ yield* validateCollectionPlainSnapshotValueEffect(value, operation, `${rowPath}.value`);
323
+ yield* validateCollectionValueKeyEffect(definition, row.key, value, operation, `${rowPath}.key`, `${rowPath}.value`);
324
+ rows.push({ ...row, value });
325
+ }
326
+ for (const [pendingIndex, pending] of snapshot.pendingMutations.entries()) {
327
+ const pendingPath = `${path}.pendingMutations[${pendingIndex}]`;
328
+ if (pending.transaction.collection !== definition.name) {
329
+ return yield* Effect.fail(new CollectionSnapshotCodecError({
330
+ operation,
331
+ path: `${pendingPath}.transaction.collection`,
332
+ reason: `Expected pending mutation for collection '${definition.name}' but received '${pending.transaction.collection}'.`,
333
+ }));
334
+ }
335
+ const mutations = [];
336
+ for (const [mutationIndex, mutation] of pending.transaction.mutations.entries()) {
337
+ const mutationPath = `${pendingPath}.transaction.mutations[${mutationIndex}]`;
338
+ switch (mutation._tag) {
339
+ case "Insert": {
340
+ const value = nextValue();
341
+ yield* validateCollectionPlainSnapshotValueEffect(value, operation, `${mutationPath}.value`);
342
+ yield* validateCollectionValueKeyEffect(definition, mutation.key, value, operation, `${mutationPath}.key`, `${mutationPath}.value`);
343
+ if (mutation.previous === undefined) {
344
+ mutations.push({ ...mutation, value });
345
+ }
346
+ else {
347
+ const previous = nextValue();
348
+ yield* validateCollectionPlainSnapshotValueEffect(previous, operation, `${mutationPath}.previous`);
349
+ yield* validateCollectionValueKeyEffect(definition, mutation.key, previous, operation, `${mutationPath}.key`, `${mutationPath}.previous`);
350
+ mutations.push({ ...mutation, value, previous });
351
+ }
352
+ break;
353
+ }
354
+ case "Update": {
355
+ const previous = nextValue();
356
+ const value = nextValue();
357
+ yield* validateCollectionPlainSnapshotValueEffect(previous, operation, `${mutationPath}.previous`);
358
+ yield* validateCollectionPlainSnapshotValueEffect(value, operation, `${mutationPath}.value`);
359
+ yield* validateCollectionValueKeyEffect(definition, mutation.key, previous, operation, `${mutationPath}.key`, `${mutationPath}.previous`);
360
+ yield* validateCollectionValueKeyEffect(definition, mutation.key, value, operation, `${mutationPath}.key`, `${mutationPath}.value`);
361
+ mutations.push({
362
+ ...mutation,
363
+ previous,
364
+ value,
365
+ changes: collectionValueChanges(previous, value),
366
+ });
367
+ break;
368
+ }
369
+ case "Delete": {
370
+ const previous = nextValue();
371
+ yield* validateCollectionPlainSnapshotValueEffect(previous, operation, `${mutationPath}.previous`);
372
+ yield* validateCollectionValueKeyEffect(definition, mutation.key, previous, operation, `${mutationPath}.key`, `${mutationPath}.previous`);
373
+ mutations.push({ ...mutation, previous });
374
+ break;
375
+ }
376
+ }
377
+ }
378
+ const rollbackRows = [];
379
+ for (const [rollbackIndex, rollback] of pending.rollbackRows.entries()) {
380
+ if (!rollback.row) {
381
+ rollbackRows.push(rollback);
382
+ continue;
383
+ }
384
+ const value = nextValue();
385
+ const rollbackPath = `${pendingPath}.rollbackRows[${rollbackIndex}].row`;
386
+ yield* validateCollectionPlainSnapshotValueEffect(value, operation, `${rollbackPath}.value`);
387
+ yield* validateCollectionValueKeyEffect(definition, rollback.row.key, value, operation, `${rollbackPath}.key`, `${rollbackPath}.value`);
388
+ rollbackRows.push({
389
+ ...rollback,
390
+ row: {
391
+ ...rollback.row,
392
+ value,
393
+ },
394
+ });
395
+ }
396
+ pendingMutations.push({
397
+ ...pending,
398
+ transaction: {
399
+ ...pending.transaction,
400
+ mutations,
401
+ },
402
+ rollbackRows,
403
+ });
404
+ }
405
+ return {
406
+ ...snapshot,
407
+ rows,
408
+ pendingMutations,
409
+ };
410
+ });
411
+ export const validateCollectionHydrationPayload = (value, operation = "hydrate") => {
412
+ const payload = validateRecord(value, operation, "$", "a collection hydration payload");
413
+ const collections = validateArray(payload.collections, operation, "$.collections", "a collection snapshot array");
414
+ const decodedCollections = collections.map((snapshot, index) => validateCollectionSnapshot(snapshot, operation, `$.collections[${index}]`));
415
+ const names = new Set();
416
+ decodedCollections.forEach((snapshot, index) => {
417
+ assertCodec(!names.has(snapshot.name), operation, `$.collections[${index}].name`, `Duplicate collection '${snapshot.name}' in collection hydration payload.`);
418
+ names.add(snapshot.name);
419
+ });
420
+ return {
421
+ collections: decodedCollections,
422
+ };
423
+ };
424
+ export const validateCollectionHydrationPayloadEffect = (value, operation = "hydrate") => Effect.try({
425
+ try: () => validateCollectionHydrationPayload(value, operation),
426
+ catch: catchSnapshotCodecError(operation, "$"),
427
+ });
428
+ export const storedRowSnapshot = (row) => ({
429
+ key: row.key,
430
+ value: cloneValue(row.value),
431
+ synced: row.synced,
432
+ origin: row.origin,
433
+ });
434
+ export const storedRowFromSnapshot = (snapshot) => {
435
+ const row = validateCollectionRowSnapshot(snapshot, "hydrate", "$.row");
436
+ return {
437
+ key: row.key,
438
+ value: row.value,
439
+ synced: row.synced,
440
+ origin: row.origin,
441
+ };
442
+ };
443
+ const rollbackRowSnapshot = (key, row) => (row ? { key, row: storedRowSnapshot(row) } : { key });
444
+ const cloneTransaction = (transaction) => validateCollectionTransaction(transaction, "snapshot", "$.transaction");
445
+ export const pendingMutationSnapshot = (entry) => ({
446
+ transaction: cloneTransaction(entry.transaction),
447
+ rollbackRows: Array.from(entry.rollbackRows, ([key, row]) => rollbackRowSnapshot(key, row)),
448
+ createdAt: entry.createdAt,
449
+ attempts: entry.attempts,
450
+ });
451
+ export const pendingEntryFromSnapshot = (snapshot) => {
452
+ const pending = validateCollectionPendingMutation(snapshot, "hydrate", "$.pendingMutations[]");
453
+ return {
454
+ transaction: cloneFrozenCollectionTransaction(pending.transaction),
455
+ rollbackRows: new Map(pending.rollbackRows.map((rollback) => [
456
+ rollback.key,
457
+ rollback.row ? storedRowFromSnapshot(rollback.row) : undefined,
458
+ ])),
459
+ createdAt: pending.createdAt,
460
+ attempts: pending.attempts,
461
+ activeAttempt: undefined,
462
+ };
463
+ };
464
+ export const pendingMutationSnapshots = (state) => Array.from(state.pendingMutations.values(), pendingMutationSnapshot);
465
+ export const collectionSnapshotFromState = (definition, state, updatedAt) => {
466
+ state.version.get();
467
+ return {
468
+ name: definition.name,
469
+ rows: Array.from(state.rows.values(), storedRowSnapshot),
470
+ pendingMutations: Array.from(state.pendingMutations.values(), pendingMutationSnapshot),
471
+ updatedAt,
472
+ };
473
+ };
474
+ export const collectionSnapshotFromValues = (name, values, getKey, updatedAt) => ({
475
+ name,
476
+ rows: values.map((value) => ({
477
+ key: getKey(value),
478
+ value: cloneValue(value),
479
+ synced: true,
480
+ origin: "remote",
481
+ })),
482
+ pendingMutations: [],
483
+ updatedAt,
484
+ });
485
+ export const collectionSnapshotFromValuesEffect = (name, values, getKey, updatedAt) => Effect.try({
486
+ try: () => collectionSnapshotFromValues(name, values, getKey, updatedAt),
487
+ catch: (cause) => new EffectInputCallbackError({
488
+ operation: `Collection.snapshot(${name}).getKey`,
489
+ cause,
490
+ guidance: "Collection snapshot key callbacks must be synchronous, pure, and total. Move Effectful work into collection loaders or mutation handlers.",
491
+ }),
492
+ });
493
+ export const validateCollectionSnapshotStateHydration = (state, snapshot, options) => {
494
+ snapshot.pendingMutations.forEach((pending, index) => {
495
+ const id = pending.transaction.id;
496
+ if (options.replace === false && state.pendingMutations.has(id)) {
497
+ failCodec("hydrate", `$.pendingMutations[${index}].transaction.id`, `Pending transaction id '${id}' already exists in the target collection state.`);
498
+ }
499
+ });
500
+ };
501
+ export const validateCollectionSnapshotStateHydrationEffect = (state, snapshot, options) => Effect.try({
502
+ try: () => validateCollectionSnapshotStateHydration(state, snapshot, options),
503
+ catch: catchSnapshotCodecError("hydrate", "$"),
504
+ });
505
+ const applyValidatedCollectionSnapshotState = (state, snapshot, options, advanceTransactionIdentity) => {
506
+ validateCollectionSnapshotStateHydration(state, snapshot, options);
507
+ if (options.replace !== false) {
508
+ state.rows.clear();
509
+ state.pendingMutations.clear();
510
+ state.optimisticRows.clear();
511
+ }
512
+ const incomingPendingKeys = new Set();
513
+ for (const pending of snapshot.pendingMutations) {
514
+ for (const mutation of pending.transaction.mutations) {
515
+ incomingPendingKeys.add(mutation.key);
516
+ }
517
+ }
518
+ const rebaseKeys = new Set();
519
+ for (const row of snapshot.rows) {
520
+ if (incomingPendingKeys.has(row.key)) {
521
+ if (!state.optimisticRows.has(row.key)) {
522
+ state.rows.set(row.key, cloneStoredRow(storedRowFromSnapshot(row)));
523
+ }
524
+ continue;
525
+ }
526
+ applyCollectionBaseRow(state, storedRowFromSnapshot(row), rebaseKeys);
527
+ }
528
+ for (const pending of snapshot.pendingMutations) {
529
+ advanceTransactionIdentity(pending.transaction.id);
530
+ state.pendingMutations.set(pending.transaction.id, pendingEntryFromSnapshot(pending));
531
+ }
532
+ if (snapshot.pendingMutations.length > 0) {
533
+ syncOptimisticRowsFromPendingMutations(state);
534
+ }
535
+ else {
536
+ rebaseCollectionBaseRows(state, rebaseKeys);
537
+ }
538
+ state.loadState.set({
539
+ _tag: "Ready",
540
+ waiting: false,
541
+ updatedAt: snapshot.updatedAt,
542
+ });
543
+ return snapshot;
544
+ };
545
+ export const hydrateCollectionSnapshotState = (state, value, options, advanceTransactionIdentity) => applyValidatedCollectionSnapshotState(state, validateCollectionSnapshot(value, "hydrate"), options, advanceTransactionIdentity);
546
+ export const hydrateCollectionSnapshotStateEffect = (state, value, options, advanceTransactionIdentity) => Effect.flatMap(validateCollectionSnapshotEffect(value, "hydrate"), (snapshot) => Effect.try({
547
+ try: () => applyValidatedCollectionSnapshotState(state, snapshot, options, advanceTransactionIdentity),
548
+ catch: catchSnapshotCodecError("hydrate", "$"),
549
+ }));
550
+ export const encodeCollectionSnapshotEffect = (value) => Effect.try({
551
+ try: () => {
552
+ const snapshot = validateCollectionSnapshot(value, "encode");
553
+ const encoded = JSON.stringify(snapshot);
554
+ assertCodec(typeof encoded === "string", "encode", "$", "Expected JSON.stringify to return a string.");
555
+ return encoded;
556
+ },
557
+ catch: catchSnapshotCodecError("encode", "$"),
558
+ });
559
+ export const decodeCollectionSnapshotEffect = (encoded) => Effect.try({
560
+ try: () => validateCollectionSnapshot(JSON.parse(encoded), "decode"),
561
+ catch: catchSnapshotCodecError("decode", "$"),
562
+ });
563
+ //# sourceMappingURL=collection-snapshot-codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection-snapshot-codec.js","sourceRoot":"","sources":["../src/collection-snapshot-codec.ts"],"names":[],"mappings":"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"}