@instantdb/core 0.22.56 → 0.22.57

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 (57) hide show
  1. package/dist/commonjs/Reactor.d.ts +5 -0
  2. package/dist/commonjs/Reactor.d.ts.map +1 -1
  3. package/dist/commonjs/Reactor.js +43 -5
  4. package/dist/commonjs/Reactor.js.map +1 -1
  5. package/dist/commonjs/SyncTable.d.ts +140 -0
  6. package/dist/commonjs/SyncTable.d.ts.map +1 -0
  7. package/dist/commonjs/SyncTable.js +538 -0
  8. package/dist/commonjs/SyncTable.js.map +1 -0
  9. package/dist/commonjs/index.d.ts +21 -1
  10. package/dist/commonjs/index.d.ts.map +1 -1
  11. package/dist/commonjs/index.js +19 -1
  12. package/dist/commonjs/index.js.map +1 -1
  13. package/dist/commonjs/instaql.d.ts +1 -0
  14. package/dist/commonjs/instaql.d.ts.map +1 -1
  15. package/dist/commonjs/instaql.js +9 -5
  16. package/dist/commonjs/instaql.js.map +1 -1
  17. package/dist/commonjs/store.d.ts +5 -0
  18. package/dist/commonjs/store.d.ts.map +1 -1
  19. package/dist/commonjs/store.js +11 -0
  20. package/dist/commonjs/store.js.map +1 -1
  21. package/dist/commonjs/utils/PersistedObject.d.ts +11 -5
  22. package/dist/commonjs/utils/PersistedObject.d.ts.map +1 -1
  23. package/dist/commonjs/utils/PersistedObject.js +12 -2
  24. package/dist/commonjs/utils/PersistedObject.js.map +1 -1
  25. package/dist/esm/Reactor.d.ts +5 -0
  26. package/dist/esm/Reactor.d.ts.map +1 -1
  27. package/dist/esm/Reactor.js +43 -5
  28. package/dist/esm/Reactor.js.map +1 -1
  29. package/dist/esm/SyncTable.d.ts +140 -0
  30. package/dist/esm/SyncTable.d.ts.map +1 -0
  31. package/dist/esm/SyncTable.js +498 -0
  32. package/dist/esm/SyncTable.js.map +1 -0
  33. package/dist/esm/index.d.ts +21 -1
  34. package/dist/esm/index.d.ts.map +1 -1
  35. package/dist/esm/index.js +19 -1
  36. package/dist/esm/index.js.map +1 -1
  37. package/dist/esm/instaql.d.ts +1 -0
  38. package/dist/esm/instaql.d.ts.map +1 -1
  39. package/dist/esm/instaql.js +8 -5
  40. package/dist/esm/instaql.js.map +1 -1
  41. package/dist/esm/store.d.ts +5 -0
  42. package/dist/esm/store.d.ts.map +1 -1
  43. package/dist/esm/store.js +9 -3
  44. package/dist/esm/store.js.map +1 -1
  45. package/dist/esm/utils/PersistedObject.d.ts +11 -5
  46. package/dist/esm/utils/PersistedObject.d.ts.map +1 -1
  47. package/dist/esm/utils/PersistedObject.js +12 -2
  48. package/dist/esm/utils/PersistedObject.js.map +1 -1
  49. package/dist/standalone/index.js +1579 -1135
  50. package/dist/standalone/index.umd.cjs +3 -3
  51. package/package.json +2 -2
  52. package/src/Reactor.js +60 -4
  53. package/src/SyncTable.ts +821 -0
  54. package/src/index.ts +48 -0
  55. package/src/instaql.js +11 -5
  56. package/src/store.js +11 -3
  57. package/src/utils/PersistedObject.ts +15 -6
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@instantdb/core",
3
- "version": "v0.22.56",
3
+ "version": "v0.22.57",
4
4
  "description": "Instant's core local abstraction",
5
5
  "homepage": "https://github.com/instantdb/instant/tree/main/client/packages/core",
6
6
  "repository": {
@@ -53,7 +53,7 @@
53
53
  "dependencies": {
54
54
  "mutative": "^1.0.10",
55
55
  "uuid": "^11.1.0",
56
- "@instantdb/version": "v0.22.56"
56
+ "@instantdb/version": "v0.22.57"
57
57
  },
58
58
  "scripts": {
59
59
  "test": "vitest",
package/src/Reactor.js CHANGED
@@ -29,6 +29,7 @@ import { InstantError } from './InstantError.ts';
29
29
  import { InstantAPIError } from './utils/fetch.ts';
30
30
  import { validate as validateUUID } from 'uuid';
31
31
  import { WSConnection, SSEConnection } from './Connection.ts';
32
+ import { SyncTable } from './SyncTable.ts';
32
33
 
33
34
  /** @typedef {import('./utils/log.ts').Logger} Logger */
34
35
  /** @typedef {import('./Connection.ts').Connection} Connection */
@@ -272,6 +273,23 @@ export default class Reactor {
272
273
 
273
274
  this._initStorage(Storage);
274
275
 
276
+ this._syncTable = new SyncTable(
277
+ this._trySendAuthed.bind(this),
278
+ this._persister,
279
+ {
280
+ useDateObjects: this.config.useDateObjects,
281
+ },
282
+ this._log,
283
+ (triples) =>
284
+ s.createStore(
285
+ this.attrs,
286
+ triples,
287
+ this.config.enableCardinalityInference,
288
+ this._linkIndex,
289
+ this.config.useDateObjects,
290
+ ),
291
+ );
292
+
275
293
  this._oauthCallbackResponse = this._oauthLoginInit();
276
294
 
277
295
  // kick off a request to cache it
@@ -360,6 +378,7 @@ export default class Reactor {
360
378
  for (const cb of this._beforeUnloadCbs) {
361
379
  cb();
362
380
  }
381
+ this._syncTable.beforeUnload();
363
382
  }
364
383
 
365
384
  /**
@@ -501,7 +520,7 @@ export default class Reactor {
501
520
  this._log.info('[receive]', connId, msg.op, msg);
502
521
  }
503
522
  switch (msg.op) {
504
- case 'init-ok':
523
+ case 'init-ok': {
505
524
  this._setStatus(STATUS.AUTHENTICATED);
506
525
  this._reconnectTimeoutMs = 0;
507
526
  this._setAttrs(msg.attrs);
@@ -515,10 +534,12 @@ export default class Reactor {
515
534
  this._tryJoinRoom(roomId, enqueuedUserPresence);
516
535
  }
517
536
  break;
518
- case 'add-query-exists':
537
+ }
538
+ case 'add-query-exists': {
519
539
  this.notifyOneQueryOnce(weakHash(msg.q));
520
540
  break;
521
- case 'add-query-ok':
541
+ }
542
+ case 'add-query-ok': {
522
543
  const { q, result } = msg;
523
544
  const hash = weakHash(q);
524
545
  const pageInfo = result?.[0]?.data?.['page-info'];
@@ -545,7 +566,24 @@ export default class Reactor {
545
566
  this.notifyOneQueryOnce(hash);
546
567
  this._cleanupPendingMutationsTimeout();
547
568
  break;
548
- case 'refresh-ok':
569
+ }
570
+ case 'start-sync-ok': {
571
+ this._syncTable.onStartSyncOk(msg);
572
+ break;
573
+ }
574
+ case 'sync-load-batch': {
575
+ this._syncTable.onSyncLoadBatch(msg);
576
+ break;
577
+ }
578
+ case 'sync-init-finish': {
579
+ this._syncTable.onSyncInitFinish(msg);
580
+ break;
581
+ }
582
+ case 'sync-update-triples': {
583
+ this._syncTable.onSyncUpdateTriples(msg);
584
+ break;
585
+ }
586
+ case 'refresh-ok': {
549
587
  const { computations, attrs } = msg;
550
588
  const processedTxId = msg['processed-tx-id'];
551
589
  if (attrs) {
@@ -604,6 +642,7 @@ export default class Reactor {
604
642
  this.notifyOne(hash);
605
643
  });
606
644
  break;
645
+ }
607
646
  case 'transact-ok': {
608
647
  const { 'client-event-id': eventId, 'tx-id': txId } = msg;
609
648
 
@@ -696,6 +735,7 @@ export default class Reactor {
696
735
  this._handleReceiveError(msg);
697
736
  break;
698
737
  default:
738
+ this._log.info('Uknown op', msg.op, msg);
699
739
  break;
700
740
  }
701
741
  }
@@ -772,6 +812,16 @@ export default class Reactor {
772
812
  this.notifyAll();
773
813
  return;
774
814
  }
815
+
816
+ if (msg['original-event']?.op === 'resync-table') {
817
+ this._syncTable.onResyncError(msg);
818
+ return;
819
+ }
820
+
821
+ if (msg['original-event']?.op === 'start-sync') {
822
+ this._syncTable.onStartSyncError(msg);
823
+ return;
824
+ }
775
825
  // We've caught some error which has no corresponding listener.
776
826
  // Let's console.error to let the user know.
777
827
  const errorObj = { ...msg };
@@ -822,6 +872,10 @@ export default class Reactor {
822
872
  return eventId;
823
873
  }
824
874
 
875
+ subscribeTable(q, cb) {
876
+ return this._syncTable.subscribe(q, cb);
877
+ }
878
+
825
879
  /**
826
880
  * When a user subscribes to a query the following side effects occur:
827
881
  *
@@ -1294,6 +1348,8 @@ export default class Reactor {
1294
1348
  this._sendMutation(eventId, mut);
1295
1349
  }
1296
1350
  });
1351
+
1352
+ this._syncTable.flushPending();
1297
1353
  }
1298
1354
 
1299
1355
  /**