@laboverwire/stitch 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/CHANGELOG.md +90 -0
  2. package/LICENSE +201 -0
  3. package/README.md +39 -0
  4. package/dist/index.d.ts +10 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +9 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/internal-list-apply.d.ts +5 -0
  9. package/dist/internal-list-apply.d.ts.map +1 -0
  10. package/dist/internal-list-apply.js +30 -0
  11. package/dist/internal-list-apply.js.map +1 -0
  12. package/dist/internal-utils.d.ts +3 -0
  13. package/dist/internal-utils.d.ts.map +1 -0
  14. package/dist/internal-utils.js +15 -0
  15. package/dist/internal-utils.js.map +1 -0
  16. package/dist/internal-wasm-error.d.ts +9 -0
  17. package/dist/internal-wasm-error.d.ts.map +1 -0
  18. package/dist/internal-wasm-error.js +48 -0
  19. package/dist/internal-wasm-error.js.map +1 -0
  20. package/dist/memory-store.d.ts +3 -0
  21. package/dist/memory-store.d.ts.map +1 -0
  22. package/dist/memory-store.js +572 -0
  23. package/dist/memory-store.js.map +1 -0
  24. package/dist/offline-queue.d.ts +6 -0
  25. package/dist/offline-queue.d.ts.map +1 -0
  26. package/dist/offline-queue.js +361 -0
  27. package/dist/offline-queue.js.map +1 -0
  28. package/dist/persistence-layer.d.ts +7 -0
  29. package/dist/persistence-layer.d.ts.map +1 -0
  30. package/dist/persistence-layer.js +409 -0
  31. package/dist/persistence-layer.js.map +1 -0
  32. package/dist/react/context.d.ts +10 -0
  33. package/dist/react/context.d.ts.map +1 -0
  34. package/dist/react/context.js +9 -0
  35. package/dist/react/context.js.map +1 -0
  36. package/dist/react/hooks/useChildCounts.d.ts +3 -0
  37. package/dist/react/hooks/useChildCounts.d.ts.map +1 -0
  38. package/dist/react/hooks/useChildCounts.js +85 -0
  39. package/dist/react/hooks/useChildCounts.js.map +1 -0
  40. package/dist/react/hooks/useConnectionStatus.d.ts +3 -0
  41. package/dist/react/hooks/useConnectionStatus.d.ts.map +1 -0
  42. package/dist/react/hooks/useConnectionStatus.js +9 -0
  43. package/dist/react/hooks/useConnectionStatus.js.map +1 -0
  44. package/dist/react/hooks/useEntitySnapshot.d.ts +4 -0
  45. package/dist/react/hooks/useEntitySnapshot.d.ts.map +1 -0
  46. package/dist/react/hooks/useEntitySnapshot.js +33 -0
  47. package/dist/react/hooks/useEntitySnapshot.js.map +1 -0
  48. package/dist/react/hooks/useRootEntityList.d.ts +9 -0
  49. package/dist/react/hooks/useRootEntityList.d.ts.map +1 -0
  50. package/dist/react/hooks/useRootEntityList.js +69 -0
  51. package/dist/react/hooks/useRootEntityList.js.map +1 -0
  52. package/dist/react/hooks/useScopedEntities.d.ts +9 -0
  53. package/dist/react/hooks/useScopedEntities.d.ts.map +1 -0
  54. package/dist/react/hooks/useScopedEntities.js +82 -0
  55. package/dist/react/hooks/useScopedEntities.js.map +1 -0
  56. package/dist/react/hooks/useSyncScope.d.ts +8 -0
  57. package/dist/react/hooks/useSyncScope.d.ts.map +1 -0
  58. package/dist/react/hooks/useSyncScope.js +49 -0
  59. package/dist/react/hooks/useSyncScope.js.map +1 -0
  60. package/dist/react/hooks/useTopLevelEntities.d.ts +7 -0
  61. package/dist/react/hooks/useTopLevelEntities.d.ts.map +1 -0
  62. package/dist/react/hooks/useTopLevelEntities.js +52 -0
  63. package/dist/react/hooks/useTopLevelEntities.js.map +1 -0
  64. package/dist/react/index.d.ts +11 -0
  65. package/dist/react/index.d.ts.map +1 -0
  66. package/dist/react/index.js +10 -0
  67. package/dist/react/index.js.map +1 -0
  68. package/dist/react/provider.d.ts +32 -0
  69. package/dist/react/provider.d.ts.map +1 -0
  70. package/dist/react/provider.js +94 -0
  71. package/dist/react/provider.js.map +1 -0
  72. package/dist/remote-sync-layer.d.ts +8 -0
  73. package/dist/remote-sync-layer.d.ts.map +1 -0
  74. package/dist/remote-sync-layer.js +439 -0
  75. package/dist/remote-sync-layer.js.map +1 -0
  76. package/dist/store.d.ts +3 -0
  77. package/dist/store.d.ts.map +1 -0
  78. package/dist/store.js +779 -0
  79. package/dist/store.js.map +1 -0
  80. package/dist/sync-engine.d.ts +3 -0
  81. package/dist/sync-engine.d.ts.map +1 -0
  82. package/dist/sync-engine.js +643 -0
  83. package/dist/sync-engine.js.map +1 -0
  84. package/dist/types.d.ts +263 -0
  85. package/dist/types.d.ts.map +1 -0
  86. package/dist/types.js +7 -0
  87. package/dist/types.js.map +1 -0
  88. package/dist/vue/StitchAuth.d.ts +58 -0
  89. package/dist/vue/StitchAuth.d.ts.map +1 -0
  90. package/dist/vue/StitchAuth.js +39 -0
  91. package/dist/vue/StitchAuth.js.map +1 -0
  92. package/dist/vue/StoreRoot.d.ts +41 -0
  93. package/dist/vue/StoreRoot.d.ts.map +1 -0
  94. package/dist/vue/StoreRoot.js +94 -0
  95. package/dist/vue/StoreRoot.js.map +1 -0
  96. package/dist/vue/composables/useChildCounts.d.ts +4 -0
  97. package/dist/vue/composables/useChildCounts.d.ts.map +1 -0
  98. package/dist/vue/composables/useChildCounts.js +85 -0
  99. package/dist/vue/composables/useChildCounts.js.map +1 -0
  100. package/dist/vue/composables/useConnectionStatus.d.ts +4 -0
  101. package/dist/vue/composables/useConnectionStatus.d.ts.map +1 -0
  102. package/dist/vue/composables/useConnectionStatus.js +12 -0
  103. package/dist/vue/composables/useConnectionStatus.js.map +1 -0
  104. package/dist/vue/composables/useEntitySnapshot.d.ts +5 -0
  105. package/dist/vue/composables/useEntitySnapshot.d.ts.map +1 -0
  106. package/dist/vue/composables/useEntitySnapshot.js +41 -0
  107. package/dist/vue/composables/useEntitySnapshot.js.map +1 -0
  108. package/dist/vue/composables/useRootEntityList.d.ts +10 -0
  109. package/dist/vue/composables/useRootEntityList.d.ts.map +1 -0
  110. package/dist/vue/composables/useRootEntityList.js +76 -0
  111. package/dist/vue/composables/useRootEntityList.js.map +1 -0
  112. package/dist/vue/composables/useScopedEntities.d.ts +10 -0
  113. package/dist/vue/composables/useScopedEntities.d.ts.map +1 -0
  114. package/dist/vue/composables/useScopedEntities.js +91 -0
  115. package/dist/vue/composables/useScopedEntities.js.map +1 -0
  116. package/dist/vue/composables/useStore.d.ts +3 -0
  117. package/dist/vue/composables/useStore.d.ts.map +1 -0
  118. package/dist/vue/composables/useStore.js +9 -0
  119. package/dist/vue/composables/useStore.js.map +1 -0
  120. package/dist/vue/composables/useSyncScope.d.ts +9 -0
  121. package/dist/vue/composables/useSyncScope.d.ts.map +1 -0
  122. package/dist/vue/composables/useSyncScope.js +50 -0
  123. package/dist/vue/composables/useSyncScope.js.map +1 -0
  124. package/dist/vue/composables/useTopLevelEntities.d.ts +8 -0
  125. package/dist/vue/composables/useTopLevelEntities.d.ts.map +1 -0
  126. package/dist/vue/composables/useTopLevelEntities.js +58 -0
  127. package/dist/vue/composables/useTopLevelEntities.js.map +1 -0
  128. package/dist/vue/index.d.ts +13 -0
  129. package/dist/vue/index.d.ts.map +1 -0
  130. package/dist/vue/index.js +12 -0
  131. package/dist/vue/index.js.map +1 -0
  132. package/dist/vue/injection-key.d.ts +10 -0
  133. package/dist/vue/injection-key.d.ts.map +1 -0
  134. package/dist/vue/injection-key.js +2 -0
  135. package/dist/vue/injection-key.js.map +1 -0
  136. package/package.json +111 -0
@@ -0,0 +1,361 @@
1
+ import { OwnershipError } from "./types.js";
2
+ import { isTransientSyncError } from "./internal-utils.js";
3
+ function consolidateMutations(records) {
4
+ const grouped = new Map();
5
+ for (const r of records) {
6
+ const key = `${r.entity}:${r.entityId}`;
7
+ const entry = {
8
+ recordId: r.id,
9
+ op: r.op,
10
+ data: r.data || null,
11
+ entity: r.entity,
12
+ entityId: r.entityId,
13
+ scopeId: r.scopeId,
14
+ createdAt: r.createdAt || 0,
15
+ };
16
+ const arr = grouped.get(key);
17
+ if (arr) {
18
+ arr.push(entry);
19
+ }
20
+ else {
21
+ grouped.set(key, [entry]);
22
+ }
23
+ }
24
+ const result = [];
25
+ for (const [, entries] of grouped) {
26
+ entries.sort((a, b) => a.createdAt - b.createdAt);
27
+ const recordIds = entries.map((e) => e.recordId);
28
+ const minCreatedAt = entries[0].createdAt;
29
+ const hasInsert = entries.some((e) => e.op === 'insert');
30
+ const hasDelete = entries.some((e) => e.op === 'delete');
31
+ const { entity, entityId, scopeId } = entries[0];
32
+ if (hasInsert && hasDelete) {
33
+ result.push({
34
+ op: 'delete',
35
+ entity,
36
+ id: entityId,
37
+ scopeId,
38
+ data: null,
39
+ recordIds,
40
+ minCreatedAt,
41
+ });
42
+ continue;
43
+ }
44
+ if (hasInsert) {
45
+ const insertEntry = entries.find((e) => e.op === 'insert');
46
+ const mergedData = insertEntry.data ? { ...insertEntry.data } : {};
47
+ for (const e of entries) {
48
+ if (e !== insertEntry && e.data) {
49
+ Object.assign(mergedData, e.data);
50
+ }
51
+ }
52
+ result.push({
53
+ op: 'insert',
54
+ entity,
55
+ id: entityId,
56
+ scopeId,
57
+ data: mergedData,
58
+ recordIds,
59
+ minCreatedAt,
60
+ });
61
+ continue;
62
+ }
63
+ if (hasDelete) {
64
+ result.push({
65
+ op: 'delete',
66
+ entity,
67
+ id: entityId,
68
+ scopeId,
69
+ data: null,
70
+ recordIds,
71
+ minCreatedAt,
72
+ });
73
+ continue;
74
+ }
75
+ const mergedData = {};
76
+ for (const e of entries) {
77
+ if (e.data)
78
+ Object.assign(mergedData, e.data);
79
+ }
80
+ result.push({
81
+ op: 'update',
82
+ entity,
83
+ id: entityId,
84
+ scopeId,
85
+ data: Object.keys(mergedData).length > 0 ? mergedData : null,
86
+ recordIds,
87
+ minCreatedAt,
88
+ });
89
+ }
90
+ const opPriority = { insert: 0, update: 1, delete: 2 };
91
+ result.sort((a, b) => {
92
+ if (a.minCreatedAt !== b.minCreatedAt)
93
+ return a.minCreatedAt - b.minCreatedAt;
94
+ return (opPriority[a.op] ?? 1) - (opPriority[b.op] ?? 1);
95
+ });
96
+ return result;
97
+ }
98
+ async function flushConsolidated(consolidated, sender, removeRecords, rootEntity) {
99
+ for (const mutation of consolidated) {
100
+ const { op, entity, id, scopeId, data, recordIds } = mutation;
101
+ try {
102
+ switch (op) {
103
+ case 'insert':
104
+ if (data) {
105
+ await sender.syncCreate(entity, scopeId, data);
106
+ }
107
+ break;
108
+ case 'update':
109
+ if (data) {
110
+ await sender.syncUpdate(entity, scopeId, id, data);
111
+ }
112
+ break;
113
+ case 'delete':
114
+ await sender.syncDelete(entity, scopeId, id);
115
+ break;
116
+ }
117
+ await removeRecords(recordIds);
118
+ }
119
+ catch (err) {
120
+ const isNotFound = err instanceof Error && /not found/i.test(err.message);
121
+ const isConflict = err instanceof Error && /already exists|conflict|duplicate/i.test(err.message);
122
+ if (isNotFound && op === 'update' && entity === rootEntity) {
123
+ try {
124
+ await sender.deleteEntity(entity, id);
125
+ }
126
+ catch {
127
+ // already gone
128
+ }
129
+ await removeRecords(recordIds);
130
+ }
131
+ else if (isNotFound && op === 'update') {
132
+ try {
133
+ const full = await sender.readEntity(entity, id);
134
+ await sender.syncCreate(entity, scopeId, full);
135
+ await removeRecords(recordIds);
136
+ }
137
+ catch (upsertErr) {
138
+ if (!isTransientSyncError(upsertErr)) {
139
+ console.error(`[OfflineQueue] Failed to upsert ${entity} during flush:`, upsertErr);
140
+ await removeRecords(recordIds);
141
+ }
142
+ }
143
+ }
144
+ else if (isNotFound && op === 'delete') {
145
+ await removeRecords(recordIds);
146
+ }
147
+ else if (isConflict && op === 'insert') {
148
+ if (data) {
149
+ try {
150
+ await sender.syncUpdate(entity, scopeId, id, data);
151
+ await removeRecords(recordIds);
152
+ }
153
+ catch (updateErr) {
154
+ if (updateErr instanceof OwnershipError) {
155
+ await removeRecords(recordIds);
156
+ }
157
+ else if (!isTransientSyncError(updateErr)) {
158
+ console.error(`[OfflineQueue] Failed to update-on-conflict ${entity} during flush:`, updateErr);
159
+ }
160
+ }
161
+ }
162
+ else {
163
+ await removeRecords(recordIds);
164
+ }
165
+ }
166
+ else if (err instanceof OwnershipError) {
167
+ await removeRecords(recordIds);
168
+ }
169
+ else if (isTransientSyncError(err)) {
170
+ // leave for next flush cycle
171
+ }
172
+ else {
173
+ console.error('[OfflineQueue] Failed to flush mutation:', err);
174
+ }
175
+ }
176
+ }
177
+ }
178
+ class PersistentOfflineQueue {
179
+ persistence;
180
+ rootEntity;
181
+ authenticatedUser = null;
182
+ flushing = false;
183
+ constructor(persistence, rootEntity) {
184
+ this.persistence = persistence;
185
+ this.rootEntity = rootEntity;
186
+ }
187
+ setAuthenticatedUser(userId) {
188
+ this.authenticatedUser = userId;
189
+ }
190
+ async queue(mutation) {
191
+ if (!this.authenticatedUser)
192
+ return;
193
+ try {
194
+ const record = {
195
+ id: crypto.randomUUID(),
196
+ op: mutation.op,
197
+ entity: mutation.entity,
198
+ entityId: mutation.id,
199
+ scopeId: mutation.scopeId,
200
+ userId: this.authenticatedUser,
201
+ createdAt: Date.now(),
202
+ };
203
+ if (mutation.data !== null) {
204
+ record.data = mutation.data;
205
+ }
206
+ await this.persistence.create('pending_sync', record);
207
+ }
208
+ catch (err) {
209
+ console.error('[PersistentOfflineQueue] Failed to persist pending mutation:', err);
210
+ }
211
+ }
212
+ async remove(entity, entityId, scopeId, op) {
213
+ try {
214
+ const filters = [
215
+ { field: 'entity', op: 'eq', value: entity },
216
+ { field: 'entityId', op: 'eq', value: entityId },
217
+ { field: 'scopeId', op: 'eq', value: scopeId },
218
+ { field: 'op', op: 'eq', value: op },
219
+ ];
220
+ if (this.authenticatedUser) {
221
+ filters.push({ field: 'userId', op: 'eq', value: this.authenticatedUser });
222
+ }
223
+ const records = await this.persistence.list('pending_sync', { filters });
224
+ for (const record of records) {
225
+ await this.persistence.delete('pending_sync', record.id);
226
+ }
227
+ }
228
+ catch (err) {
229
+ console.error('[PersistentOfflineQueue] Failed to remove pending mutation:', err);
230
+ }
231
+ }
232
+ async flush(sender) {
233
+ if (this.flushing || !this.authenticatedUser)
234
+ return;
235
+ this.flushing = true;
236
+ try {
237
+ const pendingRecords = await this.persistence.list('pending_sync', {
238
+ filters: [{ field: 'userId', op: 'eq', value: this.authenticatedUser }],
239
+ });
240
+ if (pendingRecords.length === 0)
241
+ return;
242
+ const consolidated = consolidateMutations(pendingRecords);
243
+ const removeRecords = async (ids) => {
244
+ for (const id of ids) {
245
+ try {
246
+ await this.persistence.delete('pending_sync', id);
247
+ }
248
+ catch {
249
+ // already cleaned up
250
+ }
251
+ }
252
+ };
253
+ await flushConsolidated(consolidated, sender, removeRecords, this.rootEntity);
254
+ }
255
+ finally {
256
+ this.flushing = false;
257
+ }
258
+ }
259
+ async clear() {
260
+ if (!this.authenticatedUser)
261
+ return;
262
+ const records = await this.persistence.list('pending_sync', {
263
+ filters: [{ field: 'userId', op: 'eq', value: this.authenticatedUser }],
264
+ });
265
+ for (const record of records) {
266
+ try {
267
+ await this.persistence.delete('pending_sync', record.id);
268
+ }
269
+ catch { }
270
+ }
271
+ }
272
+ async getPendingForScope(scopeId) {
273
+ const filters = [
274
+ { field: 'scopeId', op: 'eq', value: scopeId },
275
+ ];
276
+ if (this.authenticatedUser) {
277
+ filters.push({ field: 'userId', op: 'eq', value: this.authenticatedUser });
278
+ }
279
+ const records = await this.persistence.list('pending_sync', { filters });
280
+ return records.map((r) => ({
281
+ op: r.op,
282
+ entity: r.entity,
283
+ id: r.entityId,
284
+ scopeId: r.scopeId,
285
+ data: r.data || null,
286
+ }));
287
+ }
288
+ async hasPendingInsert(entity, entityId) {
289
+ const records = await this.persistence.list('pending_sync', {
290
+ filters: [
291
+ { field: 'entity', op: 'eq', value: entity },
292
+ { field: 'entityId', op: 'eq', value: entityId },
293
+ { field: 'op', op: 'eq', value: 'insert' },
294
+ ],
295
+ });
296
+ return records.length > 0;
297
+ }
298
+ }
299
+ class InMemoryOfflineQueue {
300
+ pending = [];
301
+ rootEntity;
302
+ flushing = false;
303
+ constructor(rootEntity) {
304
+ this.rootEntity = rootEntity;
305
+ }
306
+ async queue(mutation) {
307
+ this.pending.push({
308
+ ...mutation,
309
+ recordId: crypto.randomUUID(),
310
+ createdAt: Date.now(),
311
+ });
312
+ }
313
+ async remove(entity, entityId, scopeId, op) {
314
+ this.pending = this.pending.filter((p) => !(p.entity === entity && p.id === entityId && p.scopeId === scopeId && p.op === op));
315
+ }
316
+ async flush(sender) {
317
+ if (this.flushing || this.pending.length === 0)
318
+ return;
319
+ this.flushing = true;
320
+ try {
321
+ const records = this.pending.map((p) => ({
322
+ id: p.recordId,
323
+ op: p.op,
324
+ entity: p.entity,
325
+ entityId: p.id,
326
+ scopeId: p.scopeId,
327
+ data: p.data,
328
+ createdAt: p.createdAt,
329
+ }));
330
+ const consolidated = consolidateMutations(records);
331
+ const flushedIds = new Set();
332
+ const removeRecords = async (ids) => {
333
+ for (const id of ids)
334
+ flushedIds.add(id);
335
+ };
336
+ await flushConsolidated(consolidated, sender, removeRecords, this.rootEntity);
337
+ this.pending = this.pending.filter((p) => !flushedIds.has(p.recordId));
338
+ }
339
+ finally {
340
+ this.flushing = false;
341
+ }
342
+ }
343
+ async clear() {
344
+ this.pending = [];
345
+ }
346
+ async getPendingForScope(scopeId) {
347
+ return this.pending
348
+ .filter((p) => p.scopeId === scopeId)
349
+ .map((p) => ({ op: p.op, entity: p.entity, id: p.id, scopeId: p.scopeId, data: p.data }));
350
+ }
351
+ async hasPendingInsert(entity, entityId) {
352
+ return this.pending.some((p) => p.entity === entity && p.id === entityId && p.op === 'insert');
353
+ }
354
+ }
355
+ export function createPersistentOfflineQueue(persistence, rootEntity) {
356
+ return new PersistentOfflineQueue(persistence, rootEntity);
357
+ }
358
+ export function createInMemoryOfflineQueue(rootEntity) {
359
+ return new InMemoryOfflineQueue(rootEntity);
360
+ }
361
+ //# sourceMappingURL=offline-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"offline-queue.js","sourceRoot":"","sources":["../src/offline-queue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { StoreConfig, PersistenceLayer } from './types.ts';
2
+ export declare function createPersistenceLayer(config: StoreConfig): PersistenceLayer & {
3
+ notifyCorruption(): void;
4
+ setSuppressNotifications(suppress: boolean): void;
5
+ notifyAllEntitySubscribers(): void;
6
+ };
7
+ //# sourceMappingURL=persistence-layer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence-layer.d.ts","sourceRoot":"","sources":["../src/persistence-layer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAoB,MAAM,YAAY,CAAC;AAoalF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,WAAW,GAAG,gBAAgB,GAAG;IAC9E,gBAAgB,IAAI,IAAI,CAAC;IACzB,wBAAwB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IAClD,0BAA0B,IAAI,IAAI,CAAC;CACpC,CAEA"}