@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,409 @@
1
+ import { wrapWasmError, isCorruptionError } from "./internal-wasm-error.js";
2
+ const PENDING_SYNC_DEFINITION = {
3
+ fields: [
4
+ { name: 'id', type: 'string', required: true },
5
+ { name: 'op', type: 'string', required: true },
6
+ { name: 'entity', type: 'string', required: true },
7
+ { name: 'entityId', type: 'string', required: true },
8
+ { name: 'scopeId', type: 'string', required: true },
9
+ { name: 'userId', type: 'string', required: true },
10
+ { name: 'data', type: 'object' },
11
+ { name: 'createdAt', type: 'number' },
12
+ ],
13
+ indexes: ['scopeId', 'entity'],
14
+ };
15
+ class PersistenceLayerImpl {
16
+ db = null;
17
+ dbName = null;
18
+ dbRecovering = false;
19
+ _dbNeedsRecovery = false;
20
+ shuttingDown = false;
21
+ _opQueue = Promise.resolve();
22
+ config;
23
+ allSyncedEntities;
24
+ allLocalEntities;
25
+ entitySubscriptions = new Map();
26
+ wasmSubscriptionIds = new Map();
27
+ suppressEntityNotifications = false;
28
+ constructor(config) {
29
+ this.config = config;
30
+ this.allSyncedEntities = [
31
+ config.scope.rootEntity,
32
+ ...config.scope.childEntities,
33
+ ...(config.topLevelEntities?.map((t) => t.entity) ?? []),
34
+ ];
35
+ this.allLocalEntities = Object.keys(config.localOnlyEntities ?? {});
36
+ }
37
+ get isOpen() {
38
+ return this.db !== null;
39
+ }
40
+ async open(dbName) {
41
+ if (this.db)
42
+ return;
43
+ const wasmMod = await import('mqdb-wasm');
44
+ try {
45
+ await wasmMod.default();
46
+ }
47
+ catch (err) {
48
+ throw wrapWasmError('init', err);
49
+ }
50
+ try {
51
+ this.db = await wasmMod.Database.openPersistent(dbName);
52
+ this.dbName = dbName;
53
+ }
54
+ catch (err) {
55
+ throw wrapWasmError(`openPersistent:${dbName}`, err);
56
+ }
57
+ await this.setupSchemas();
58
+ this.setupWasmSubscriptions();
59
+ }
60
+ close() {
61
+ this.shuttingDown = true;
62
+ this._opQueue = Promise.resolve();
63
+ this.unsubscribeAllWasm();
64
+ this.entitySubscriptions.clear();
65
+ if (this.db) {
66
+ try {
67
+ this.db.free();
68
+ }
69
+ catch { }
70
+ }
71
+ this.db = null;
72
+ this.shuttingDown = false;
73
+ }
74
+ notifyCorruption() {
75
+ this._dbNeedsRecovery = true;
76
+ this.serialized('proactiveRecovery', async () => { }).catch(() => { });
77
+ }
78
+ setSuppressNotifications(suppress) {
79
+ this.suppressEntityNotifications = suppress;
80
+ }
81
+ serialized(label, fn, timeoutMs = 10000) {
82
+ if (this.shuttingDown)
83
+ return Promise.reject(new Error('Service shutting down'));
84
+ const result = this._opQueue.then(async () => {
85
+ await new Promise((resolve) => setTimeout(resolve, 0));
86
+ if (this._dbNeedsRecovery) {
87
+ this._dbNeedsRecovery = false;
88
+ await this.recoverDb();
89
+ }
90
+ let timer;
91
+ const timeout = new Promise((_, reject) => {
92
+ timer = setTimeout(() => {
93
+ this._dbNeedsRecovery = true;
94
+ reject(new Error(`serialized('${label}') timed out after ${timeoutMs}ms`));
95
+ }, timeoutMs);
96
+ });
97
+ return Promise.race([fn(), timeout]).finally(() => {
98
+ clearTimeout(timer);
99
+ });
100
+ });
101
+ this._opQueue = result.then(() => undefined, () => undefined);
102
+ return result;
103
+ }
104
+ async create(entity, data) {
105
+ await this.serialized('create:' + entity, async () => {
106
+ if (!this.db)
107
+ throw new Error('Database not open');
108
+ try {
109
+ await this.db.create(entity, data);
110
+ }
111
+ catch (err) {
112
+ if (this.isDbCorrupted(err) && (await this.recoverDb())) {
113
+ try {
114
+ await this.db.create(entity, data);
115
+ }
116
+ catch (retryErr) {
117
+ throw wrapWasmError(`create:${entity}`, retryErr);
118
+ }
119
+ }
120
+ else {
121
+ throw wrapWasmError(`create:${entity}`, err);
122
+ }
123
+ }
124
+ });
125
+ }
126
+ async read(entity, id) {
127
+ return this.serialized('read:' + entity, async () => {
128
+ if (!this.db)
129
+ throw new Error('Database not open');
130
+ try {
131
+ return (await this.db.read(entity, id));
132
+ }
133
+ catch (err) {
134
+ if (this.isDbCorrupted(err) && (await this.recoverDb())) {
135
+ try {
136
+ return (await this.db.read(entity, id));
137
+ }
138
+ catch (retryErr) {
139
+ throw wrapWasmError(`read:${entity}`, retryErr);
140
+ }
141
+ }
142
+ throw wrapWasmError(`read:${entity}`, err);
143
+ }
144
+ });
145
+ }
146
+ async update(entity, id, data) {
147
+ await this.serialized('update:' + entity, async () => {
148
+ if (!this.db)
149
+ throw new Error('Database not open');
150
+ try {
151
+ await this.db.update(entity, id, data);
152
+ }
153
+ catch (err) {
154
+ if (this.isDbCorrupted(err) && (await this.recoverDb())) {
155
+ try {
156
+ await this.db.update(entity, id, data);
157
+ }
158
+ catch (retryErr) {
159
+ throw wrapWasmError(`update:${entity}`, retryErr);
160
+ }
161
+ }
162
+ else {
163
+ throw wrapWasmError(`update:${entity}`, err);
164
+ }
165
+ }
166
+ });
167
+ }
168
+ async delete(entity, id) {
169
+ await this.serialized('delete:' + entity, async () => {
170
+ if (!this.db)
171
+ throw new Error('Database not open');
172
+ try {
173
+ await this.db.delete(entity, id);
174
+ }
175
+ catch (err) {
176
+ if (this.isDbCorrupted(err) && (await this.recoverDb())) {
177
+ try {
178
+ await this.db.delete(entity, id);
179
+ }
180
+ catch (retryErr) {
181
+ throw wrapWasmError(`delete:${entity}`, retryErr);
182
+ }
183
+ }
184
+ else {
185
+ throw wrapWasmError(`delete:${entity}`, err);
186
+ }
187
+ }
188
+ });
189
+ }
190
+ async list(entity, options) {
191
+ return this.serialized('list:' + entity, async () => {
192
+ if (!this.db)
193
+ return [];
194
+ try {
195
+ return (await this.db.list(entity, options ?? {}));
196
+ }
197
+ catch (err) {
198
+ if (this.isDbCorrupted(err) && (await this.recoverDb())) {
199
+ try {
200
+ return (await this.db.list(entity, options ?? {}));
201
+ }
202
+ catch {
203
+ return [];
204
+ }
205
+ }
206
+ throw wrapWasmError(`list:${entity}`, err);
207
+ }
208
+ });
209
+ }
210
+ async count(entity, options) {
211
+ return this.serialized('count:' + entity, async () => {
212
+ if (!this.db)
213
+ return 0;
214
+ try {
215
+ return await this.db.count(entity, options ?? {});
216
+ }
217
+ catch (err) {
218
+ if (this.isDbCorrupted(err) && (await this.recoverDb())) {
219
+ try {
220
+ return await this.db.count(entity, options ?? {});
221
+ }
222
+ catch {
223
+ return 0;
224
+ }
225
+ }
226
+ return 0;
227
+ }
228
+ });
229
+ }
230
+ subscribe(entity, callback) {
231
+ let set = this.entitySubscriptions.get(entity);
232
+ if (!set) {
233
+ set = new Set();
234
+ this.entitySubscriptions.set(entity, set);
235
+ }
236
+ set.add(callback);
237
+ return () => {
238
+ const current = this.entitySubscriptions.get(entity);
239
+ if (!current)
240
+ return;
241
+ current.delete(callback);
242
+ if (current.size === 0)
243
+ this.entitySubscriptions.delete(entity);
244
+ };
245
+ }
246
+ notifyAllEntitySubscribers() {
247
+ for (const entity of this.entitySubscriptions.keys()) {
248
+ this.notifyEntitySubscribers(entity, null, 'update');
249
+ }
250
+ }
251
+ async readLocalState(entity, id) {
252
+ return this.serialized('readLocalState', async () => {
253
+ if (!this.db)
254
+ return null;
255
+ try {
256
+ return (await this.db.read(entity, id));
257
+ }
258
+ catch (err) {
259
+ if (this.isDbCorrupted(err) && (await this.recoverDb())) {
260
+ try {
261
+ return (await this.db.read(entity, id));
262
+ }
263
+ catch {
264
+ return null;
265
+ }
266
+ }
267
+ return null;
268
+ }
269
+ });
270
+ }
271
+ async updateLocalState(entity, id, fields) {
272
+ await this.serialized('updateLocalState', async () => {
273
+ if (!this.db)
274
+ return;
275
+ try {
276
+ await this.db.update(entity, id, fields);
277
+ }
278
+ catch {
279
+ try {
280
+ await this.db.create(entity, { id, ...fields });
281
+ }
282
+ catch { }
283
+ }
284
+ }, 5000);
285
+ }
286
+ notifyEntitySubscribers(entity, data, op) {
287
+ const subscribers = this.entitySubscriptions.get(entity);
288
+ if (subscribers) {
289
+ for (const callback of subscribers) {
290
+ callback(data, op);
291
+ }
292
+ }
293
+ }
294
+ parseOperationFromEvent(operation) {
295
+ if (!operation)
296
+ return null;
297
+ if (operation === 'create')
298
+ return 'insert';
299
+ if (operation === 'update')
300
+ return 'update';
301
+ if (operation === 'delete')
302
+ return 'delete';
303
+ return null;
304
+ }
305
+ async setupSchemas() {
306
+ if (!this.db)
307
+ return;
308
+ const db = this.db;
309
+ const { entities, localOnlyEntities } = this.config;
310
+ const pendingSyncDef = localOnlyEntities?.['pending_sync'];
311
+ const schemaDefs = [
312
+ ...Object.entries(entities),
313
+ ...Object.entries(localOnlyEntities ?? {}),
314
+ ];
315
+ if (!pendingSyncDef) {
316
+ schemaDefs.push(['pending_sync', PENDING_SYNC_DEFINITION]);
317
+ }
318
+ await Promise.all(schemaDefs.map(async ([entity, def]) => {
319
+ try {
320
+ await db.addSchemaAsync(entity, def);
321
+ }
322
+ catch (err) {
323
+ throw wrapWasmError(`addSchema:${entity}`, err);
324
+ }
325
+ }));
326
+ await Promise.all(schemaDefs.flatMap(([entity, def]) => [
327
+ ...(def.foreignKeys ?? []).map(async (fk) => {
328
+ try {
329
+ await db.addForeignKeyAsync(entity, fk.field, fk.references, 'id', fk.onDelete);
330
+ }
331
+ catch (err) {
332
+ throw wrapWasmError(`addForeignKey:${entity}.${fk.field}`, err);
333
+ }
334
+ }),
335
+ ...(def.indexes ?? []).map(async (field) => {
336
+ try {
337
+ await db.addIndexAsync(entity, [field]);
338
+ }
339
+ catch (err) {
340
+ throw wrapWasmError(`addIndex:${entity}.${field}`, err);
341
+ }
342
+ }),
343
+ ]));
344
+ }
345
+ unsubscribeAllWasm() {
346
+ if (this.db) {
347
+ for (const subId of this.wasmSubscriptionIds.values()) {
348
+ try {
349
+ this.db.unsubscribe(subId);
350
+ }
351
+ catch { }
352
+ }
353
+ }
354
+ this.wasmSubscriptionIds.clear();
355
+ }
356
+ setupWasmSubscriptions() {
357
+ if (!this.db)
358
+ return;
359
+ this.unsubscribeAllWasm();
360
+ const allEntities = [...this.allSyncedEntities, ...this.allLocalEntities];
361
+ for (const entity of allEntities) {
362
+ let subId;
363
+ try {
364
+ subId = this.db.subscribe('#', entity, (event) => {
365
+ if (this.suppressEntityNotifications)
366
+ return;
367
+ const evt = event;
368
+ const op = this.parseOperationFromEvent(evt.operation);
369
+ if (op) {
370
+ this.notifyEntitySubscribers(entity, evt.data, op);
371
+ }
372
+ });
373
+ }
374
+ catch (err) {
375
+ throw wrapWasmError(`subscribe:${entity}`, err);
376
+ }
377
+ this.wasmSubscriptionIds.set(entity, subId);
378
+ }
379
+ }
380
+ isDbCorrupted(err) {
381
+ return isCorruptionError(err, ['index out of bounds', 'database is busy']);
382
+ }
383
+ async recoverDb() {
384
+ if (this.dbRecovering)
385
+ return false;
386
+ this.dbRecovering = true;
387
+ const oldDb = this.db;
388
+ try {
389
+ if (!this.dbName)
390
+ return false;
391
+ const wasmMod = await import('mqdb-wasm');
392
+ this.db = await wasmMod.Database.openPersistent(this.dbName);
393
+ await this.setupSchemas();
394
+ this.setupWasmSubscriptions();
395
+ return true;
396
+ }
397
+ catch {
398
+ this.db = oldDb;
399
+ return false;
400
+ }
401
+ finally {
402
+ this.dbRecovering = false;
403
+ }
404
+ }
405
+ }
406
+ export function createPersistenceLayer(config) {
407
+ return new PersistenceLayerImpl(config);
408
+ }
409
+ //# sourceMappingURL=persistence-layer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence-layer.js","sourceRoot":"","sources":["../src/persistence-layer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { ConnectionStatus, Store } from '../types.ts';
2
+ export interface StoreContextValue {
3
+ store: Store;
4
+ initialized: boolean;
5
+ connectionStatus: ConnectionStatus;
6
+ error: Error | null;
7
+ }
8
+ export declare const StoreContext: import("react").Context<StoreContextValue | null>;
9
+ export declare function useStore(): StoreContextValue;
10
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/react/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAE3D,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED,eAAO,MAAM,YAAY,mDAAgD,CAAC;AAE1E,wBAAgB,QAAQ,IAAI,iBAAiB,CAI5C"}
@@ -0,0 +1,9 @@
1
+ import { createContext, useContext } from 'react';
2
+ export const StoreContext = createContext(null);
3
+ export function useStore() {
4
+ const ctx = useContext(StoreContext);
5
+ if (!ctx)
6
+ throw new Error('useStore must be used within a StoreProvider');
7
+ return ctx;
8
+ }
9
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/react/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAUlD,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAA2B,IAAI,CAAC,CAAC;AAE1E,MAAM,UAAU,QAAQ;IACtB,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACrC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAC1E,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Store } from '../../types.ts';
2
+ export declare function useChildCounts(store: Store, entity: string): Map<string, number>;
3
+ //# sourceMappingURL=useChildCounts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useChildCounts.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useChildCounts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAuFhF"}
@@ -0,0 +1,85 @@
1
+ import { useEffect, useState } from 'react';
2
+ export function useChildCounts(store, entity) {
3
+ const scopeField = store.config.scope.scopeField;
4
+ const [counts, setCounts] = useState(new Map());
5
+ useEffect(() => {
6
+ let fetched = false;
7
+ let cancelled = false;
8
+ const buffer = [];
9
+ const fetchAll = () => {
10
+ store
11
+ .list(entity, { projection: ['id', scopeField] })
12
+ .then((records) => {
13
+ if (cancelled)
14
+ return;
15
+ const countMap = new Map();
16
+ for (const record of records) {
17
+ const sid = record[scopeField];
18
+ if (sid) {
19
+ countMap.set(sid, (countMap.get(sid) ?? 0) + 1);
20
+ }
21
+ }
22
+ for (const { entity: e, op } of buffer) {
23
+ if (op === 'update')
24
+ continue;
25
+ const n = e;
26
+ const sid = n[scopeField];
27
+ if (!sid)
28
+ continue;
29
+ const current = countMap.get(sid) ?? 0;
30
+ if (op === 'insert') {
31
+ countMap.set(sid, current + 1);
32
+ }
33
+ else if (op === 'delete') {
34
+ countMap.set(sid, Math.max(0, current - 1));
35
+ }
36
+ }
37
+ buffer.length = 0;
38
+ fetched = true;
39
+ setCounts(countMap);
40
+ })
41
+ .catch(() => {
42
+ if (cancelled)
43
+ return;
44
+ fetched = true;
45
+ buffer.length = 0;
46
+ });
47
+ };
48
+ const unsubscribe = store.subscribeToEntity(entity, (entityData, op) => {
49
+ if (entityData === null) {
50
+ fetchAll();
51
+ return;
52
+ }
53
+ if (op === 'update')
54
+ return;
55
+ if (typeof entityData !== 'object')
56
+ return;
57
+ if (!fetched) {
58
+ buffer.push({ entity: entityData, op });
59
+ return;
60
+ }
61
+ const record = entityData;
62
+ const sid = record[scopeField];
63
+ if (!sid)
64
+ return;
65
+ setCounts((prev) => {
66
+ const next = new Map(prev);
67
+ const current = next.get(sid) ?? 0;
68
+ if (op === 'insert') {
69
+ next.set(sid, current + 1);
70
+ }
71
+ else if (op === 'delete') {
72
+ next.set(sid, Math.max(0, current - 1));
73
+ }
74
+ return next;
75
+ });
76
+ });
77
+ fetchAll();
78
+ return () => {
79
+ cancelled = true;
80
+ unsubscribe();
81
+ };
82
+ }, [store, entity, scopeField]);
83
+ return counts;
84
+ }
85
+ //# sourceMappingURL=useChildCounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useChildCounts.js","sourceRoot":"","sources":["../../../src/react/hooks/useChildCounts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ConnectionStatus, Store } from '../../types.ts';
2
+ export declare function useConnectionStatus(store: Store): ConnectionStatus;
3
+ //# sourceMappingURL=useConnectionStatus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useConnectionStatus.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useConnectionStatus.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE9D,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,gBAAgB,CAQlE"}
@@ -0,0 +1,9 @@
1
+ import { useEffect, useState } from 'react';
2
+ export function useConnectionStatus(store) {
3
+ const [status, setStatus] = useState(store.connectionStatus);
4
+ useEffect(() => {
5
+ return store.subscribeToConnectionStatus(setStatus);
6
+ }, [store]);
7
+ return status;
8
+ }
9
+ //# sourceMappingURL=useConnectionStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useConnectionStatus.js","sourceRoot":"","sources":["../../../src/react/hooks/useConnectionStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAG5C,MAAM,UAAU,mBAAmB,CAAC,KAAY;IAC9C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAmB,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAE/E,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,KAAK,CAAC,2BAA2B,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { MemoryStore, Store } from '../../types.ts';
2
+ export declare function useEntitySnapshot(store: MemoryStore | Store, scopeId: string, entity: string): Record<string, unknown>[];
3
+ export declare function useEntitySnapshotAsMap(store: MemoryStore | Store, scopeId: string, entity: string): Record<string, Record<string, unknown>>;
4
+ //# sourceMappingURL=useEntitySnapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEntitySnapshot.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useEntitySnapshot.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAUzD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,WAAW,GAAG,KAAK,EAC1B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAY3B;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,WAAW,GAAG,KAAK,EAC1B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAYzC"}
@@ -0,0 +1,33 @@
1
+ import { useSyncExternalStore } from 'react';
2
+ const EMPTY_ARRAY = [];
3
+ const EMPTY_MAP = {};
4
+ function resolveMemory(storeOrMemory) {
5
+ if ('memory' in storeOrMemory)
6
+ return storeOrMemory.memory;
7
+ return storeOrMemory;
8
+ }
9
+ export function useEntitySnapshot(store, scopeId, entity) {
10
+ const memory = resolveMemory(store);
11
+ return useSyncExternalStore((onStoreChange) => {
12
+ if (!scopeId)
13
+ return () => { };
14
+ return memory.subscribeToScope(scopeId, entity, onStoreChange);
15
+ }, () => {
16
+ if (!scopeId)
17
+ return EMPTY_ARRAY;
18
+ return memory.getSnapshot(entity, scopeId);
19
+ });
20
+ }
21
+ export function useEntitySnapshotAsMap(store, scopeId, entity) {
22
+ const memory = resolveMemory(store);
23
+ return useSyncExternalStore((onStoreChange) => {
24
+ if (!scopeId)
25
+ return () => { };
26
+ return memory.subscribeToScope(scopeId, entity, onStoreChange);
27
+ }, () => {
28
+ if (!scopeId)
29
+ return EMPTY_MAP;
30
+ return memory.getSnapshotAsMap(entity, scopeId);
31
+ });
32
+ }
33
+ //# sourceMappingURL=useEntitySnapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEntitySnapshot.js","sourceRoot":"","sources":["../../../src/react/hooks/useEntitySnapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAG7C,MAAM,WAAW,GAA8B,EAAE,CAAC;AAClD,MAAM,SAAS,GAA4C,EAAE,CAAC;AAE9D,SAAS,aAAa,CAAC,aAAkC;IACvD,IAAI,QAAQ,IAAI,aAAa;QAAE,OAAQ,aAAuB,CAAC,MAAM,CAAC;IACtE,OAAO,aAA4B,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,KAA0B,EAC1B,OAAe,EACf,MAAc;IAEd,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,OAAO,oBAAoB,CACzB,CAAC,aAAa,EAAE,EAAE;QAChB,IAAI,CAAC,OAAO;YAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;QAC9B,OAAO,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IACjE,CAAC,EACD,GAAG,EAAE;QACH,IAAI,CAAC,OAAO;YAAE,OAAO,WAAW,CAAC;QACjC,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC,CACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,KAA0B,EAC1B,OAAe,EACf,MAAc;IAEd,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,OAAO,oBAAoB,CACzB,CAAC,aAAa,EAAE,EAAE;QAChB,IAAI,CAAC,OAAO;YAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;QAC9B,OAAO,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IACjE,CAAC,EACD,GAAG,EAAE;QACH,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAC/B,OAAO,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Store } from '../../types.ts';
2
+ import { type ListItem } from '../../internal-list-apply.ts';
3
+ export declare function useRootEntityList(store: Store): {
4
+ items: ListItem[];
5
+ loading: boolean;
6
+ error: Error | null;
7
+ refetch: () => Promise<void>;
8
+ };
9
+ //# sourceMappingURL=useRootEntityList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRootEntityList.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useRootEntityList.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAEzE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG;IAC/C,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CAwEA"}