spacetimedb 2.1.0 → 2.2.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 (110) hide show
  1. package/LICENSE.txt +2 -2
  2. package/dist/angular/index.cjs +7 -2
  3. package/dist/angular/index.cjs.map +1 -1
  4. package/dist/angular/index.mjs +7 -2
  5. package/dist/angular/index.mjs.map +1 -1
  6. package/dist/browser/angular/index.mjs +7 -2
  7. package/dist/browser/angular/index.mjs.map +1 -1
  8. package/dist/browser/react/index.mjs +57 -6
  9. package/dist/browser/react/index.mjs.map +1 -1
  10. package/dist/browser/svelte/index.mjs +7 -2
  11. package/dist/browser/svelte/index.mjs.map +1 -1
  12. package/dist/browser/vue/index.mjs +7 -2
  13. package/dist/browser/vue/index.mjs.map +1 -1
  14. package/dist/index.browser.mjs +459 -138
  15. package/dist/index.browser.mjs.map +1 -1
  16. package/dist/index.cjs +459 -138
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.mjs +459 -138
  19. package/dist/index.mjs.map +1 -1
  20. package/dist/lib/binary_reader.d.ts +1 -1
  21. package/dist/lib/binary_reader.d.ts.map +1 -1
  22. package/dist/lib/binary_writer.d.ts +2 -1
  23. package/dist/lib/binary_writer.d.ts.map +1 -1
  24. package/dist/lib/filter.d.ts +2 -1
  25. package/dist/lib/filter.d.ts.map +1 -1
  26. package/dist/lib/table.d.ts +6 -0
  27. package/dist/lib/table.d.ts.map +1 -1
  28. package/dist/min/index.browser.mjs +1 -1
  29. package/dist/min/index.browser.mjs.map +1 -1
  30. package/dist/min/react/index.mjs +1 -1
  31. package/dist/min/react/index.mjs.map +1 -1
  32. package/dist/min/sdk/index.browser.mjs +1 -1
  33. package/dist/min/sdk/index.browser.mjs.map +1 -1
  34. package/dist/react/index.cjs +57 -5
  35. package/dist/react/index.cjs.map +1 -1
  36. package/dist/react/index.d.ts +1 -0
  37. package/dist/react/index.d.ts.map +1 -1
  38. package/dist/react/index.mjs +57 -6
  39. package/dist/react/index.mjs.map +1 -1
  40. package/dist/react/useProcedure.d.ts +4 -0
  41. package/dist/react/useProcedure.d.ts.map +1 -0
  42. package/dist/react/useTable.d.ts +2 -0
  43. package/dist/react/useTable.d.ts.map +1 -1
  44. package/dist/sdk/db_connection_builder.d.ts +3 -3
  45. package/dist/sdk/db_connection_builder.d.ts.map +1 -1
  46. package/dist/sdk/db_connection_impl.d.ts +3 -3
  47. package/dist/sdk/db_connection_impl.d.ts.map +1 -1
  48. package/dist/sdk/decompress.d.ts +1 -1
  49. package/dist/sdk/decompress.d.ts.map +1 -1
  50. package/dist/sdk/index.browser.mjs +459 -138
  51. package/dist/sdk/index.browser.mjs.map +1 -1
  52. package/dist/sdk/index.cjs +459 -138
  53. package/dist/sdk/index.cjs.map +1 -1
  54. package/dist/sdk/index.mjs +459 -138
  55. package/dist/sdk/index.mjs.map +1 -1
  56. package/dist/sdk/table_cache.d.ts +1 -0
  57. package/dist/sdk/table_cache.d.ts.map +1 -1
  58. package/dist/sdk/type_utils.d.ts +4 -1
  59. package/dist/sdk/type_utils.d.ts.map +1 -1
  60. package/dist/sdk/websocket_decompress_adapter.d.ts +5 -21
  61. package/dist/sdk/websocket_decompress_adapter.d.ts.map +1 -1
  62. package/dist/sdk/websocket_protocols.d.ts +6 -0
  63. package/dist/sdk/websocket_protocols.d.ts.map +1 -0
  64. package/dist/sdk/websocket_test_adapter.d.ts +14 -18
  65. package/dist/sdk/websocket_test_adapter.d.ts.map +1 -1
  66. package/dist/sdk/websocket_v3_frames.d.ts +9 -0
  67. package/dist/sdk/websocket_v3_frames.d.ts.map +1 -0
  68. package/dist/sdk/ws.d.ts +26 -1
  69. package/dist/sdk/ws.d.ts.map +1 -1
  70. package/dist/server/http_internal.d.ts.map +1 -1
  71. package/dist/server/index.d.ts +1 -1
  72. package/dist/server/index.d.ts.map +1 -1
  73. package/dist/server/index.mjs +53 -6
  74. package/dist/server/index.mjs.map +1 -1
  75. package/dist/server/runtime.d.ts +29 -2
  76. package/dist/server/runtime.d.ts.map +1 -1
  77. package/dist/svelte/index.cjs +7 -2
  78. package/dist/svelte/index.cjs.map +1 -1
  79. package/dist/svelte/index.mjs +7 -2
  80. package/dist/svelte/index.mjs.map +1 -1
  81. package/dist/tanstack/index.cjs +7 -2
  82. package/dist/tanstack/index.cjs.map +1 -1
  83. package/dist/tanstack/index.mjs +7 -2
  84. package/dist/tanstack/index.mjs.map +1 -1
  85. package/dist/vue/index.cjs +7 -2
  86. package/dist/vue/index.cjs.map +1 -1
  87. package/dist/vue/index.mjs +7 -2
  88. package/dist/vue/index.mjs.map +1 -1
  89. package/package.json +2 -2
  90. package/src/lib/binary_reader.ts +5 -2
  91. package/src/lib/binary_writer.ts +7 -1
  92. package/src/lib/filter.ts +12 -1
  93. package/src/lib/table.ts +9 -1
  94. package/src/react/index.ts +1 -0
  95. package/src/react/useProcedure.ts +60 -0
  96. package/src/react/useTable.ts +17 -2
  97. package/src/sdk/db_connection_builder.ts +16 -7
  98. package/src/sdk/db_connection_impl.ts +404 -89
  99. package/src/sdk/decompress.ts +7 -23
  100. package/src/sdk/table_cache.ts +5 -5
  101. package/src/sdk/type_utils.ts +10 -1
  102. package/src/sdk/websocket_decompress_adapter.ts +15 -77
  103. package/src/sdk/websocket_protocols.ts +25 -0
  104. package/src/sdk/websocket_test_adapter.ts +65 -29
  105. package/src/sdk/websocket_v3_frames.ts +126 -0
  106. package/src/sdk/ws.ts +81 -3
  107. package/src/server/http_internal.ts +10 -1
  108. package/src/server/index.ts +1 -1
  109. package/src/server/runtime.ts +39 -1
  110. package/src/server/sys.d.ts +4 -0
@@ -2,4 +2,5 @@ export * from './SpacetimeDBProvider.ts';
2
2
  export { useSpacetimeDB } from './useSpacetimeDB.ts';
3
3
  export { useTable } from './useTable.ts';
4
4
  export { useReducer } from './useReducer.ts';
5
+ export { useProcedure } from './useProcedure.ts';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
@@ -429,8 +429,8 @@ var BinaryReader = class {
429
429
  this.view = input instanceof DataView ? input : new DataView(input.buffer, input.byteOffset, input.byteLength);
430
430
  this.offset = 0;
431
431
  }
432
- reset(view) {
433
- this.view = view;
432
+ reset(input) {
433
+ this.view = input instanceof DataView ? input : new DataView(input.buffer, input.byteOffset, input.byteLength);
434
434
  this.offset = 0;
435
435
  }
436
436
  get remaining() {
@@ -622,6 +622,11 @@ var BinaryWriter = class {
622
622
  this.view.setUint8(this.offset, value);
623
623
  this.offset += 1;
624
624
  }
625
+ writeBytes(value) {
626
+ this.expandBuffer(value.length);
627
+ new Uint8Array(this.buffer.buffer, this.offset, value.length).set(value);
628
+ this.offset += value.length;
629
+ }
625
630
  writeI8(value) {
626
631
  this.expandBuffer(1);
627
632
  this.view.setInt8(this.offset, value);
@@ -1694,6 +1699,7 @@ function classifyMembership(whereExpr, oldRow, newRow) {
1694
1699
  return "stayOut";
1695
1700
  }
1696
1701
  function useTable(query, callbacks) {
1702
+ const enabled = callbacks?.enabled ?? true;
1697
1703
  const accessorName = getQueryAccessorName(query);
1698
1704
  const whereExpr = getQueryWhereClause(query);
1699
1705
  const [subscribeApplied, setSubscribeApplied] = useState(false);
@@ -1709,6 +1715,9 @@ function useTable(query, callbacks) {
1709
1715
  const latestTransactionEventId = useRef(null);
1710
1716
  const lastSnapshotRef = useRef(null);
1711
1717
  const computeSnapshot = useCallback(() => {
1718
+ if (!enabled) {
1719
+ return [[], true];
1720
+ }
1712
1721
  const connection = connectionState.getConnection();
1713
1722
  if (!connection) {
1714
1723
  return [[], false];
@@ -1718,11 +1727,15 @@ function useTable(query, callbacks) {
1718
1727
  (row) => evaluateBooleanExpr(whereExpr, row)
1719
1728
  ) : Array.from(table.iter());
1720
1729
  return [result, subscribeApplied];
1721
- }, [connectionState, accessorName, querySql, subscribeApplied]);
1730
+ }, [connectionState, accessorName, querySql, subscribeApplied, enabled]);
1722
1731
  useEffect(() => {
1723
1732
  lastSnapshotRef.current = null;
1724
1733
  }, [computeSnapshot]);
1725
1734
  useEffect(() => {
1735
+ if (!enabled) {
1736
+ setSubscribeApplied(false);
1737
+ return;
1738
+ }
1726
1739
  const connection = connectionState.getConnection();
1727
1740
  if (connectionState.isActive && connection) {
1728
1741
  const cancel = connection.subscriptionBuilder().onApplied(() => {
@@ -1732,9 +1745,13 @@ function useTable(query, callbacks) {
1732
1745
  cancel.unsubscribe();
1733
1746
  };
1734
1747
  }
1735
- }, [querySql, connectionState.isActive, connectionState]);
1748
+ }, [querySql, connectionState.isActive, connectionState, enabled]);
1736
1749
  const subscribe = useCallback(
1737
1750
  (onStoreChange) => {
1751
+ if (!enabled) {
1752
+ return () => {
1753
+ };
1754
+ }
1738
1755
  const onInsert = (ctx, row) => {
1739
1756
  if (whereExpr && !evaluateBooleanExpr(whereExpr, row)) {
1740
1757
  return;
@@ -1803,7 +1820,8 @@ function useTable(query, callbacks) {
1803
1820
  computeSnapshot,
1804
1821
  callbacks?.onDelete,
1805
1822
  callbacks?.onInsert,
1806
- callbacks?.onUpdate
1823
+ callbacks?.onUpdate,
1824
+ enabled
1807
1825
  ]
1808
1826
  );
1809
1827
  const getSnapshot = useCallback(() => {
@@ -1845,7 +1863,40 @@ function useReducer(reducerDef) {
1845
1863
  [getConnection, reducerName]
1846
1864
  );
1847
1865
  }
1866
+ function useProcedure(procedureDef) {
1867
+ const { getConnection, isActive } = useSpacetimeDB();
1868
+ const procedureName = procedureDef.accessorName;
1869
+ const queueRef = useRef([]);
1870
+ useEffect(() => {
1871
+ const conn = getConnection();
1872
+ if (!conn) {
1873
+ return;
1874
+ }
1875
+ const fn = conn.procedures[procedureName];
1876
+ if (queueRef.current.length) {
1877
+ const pending = queueRef.current.splice(0);
1878
+ for (const item of pending) {
1879
+ fn(...item.params).then(item.resolve, item.reject);
1880
+ }
1881
+ }
1882
+ }, [getConnection, procedureName, isActive]);
1883
+ return useCallback(
1884
+ (...params) => {
1885
+ const conn = getConnection();
1886
+ if (!conn) {
1887
+ return new Promise(
1888
+ (resolve, reject) => {
1889
+ queueRef.current.push({ params, resolve, reject });
1890
+ }
1891
+ );
1892
+ }
1893
+ const fn = conn.procedures[procedureName];
1894
+ return fn(...params);
1895
+ },
1896
+ [getConnection, procedureName]
1897
+ );
1898
+ }
1848
1899
 
1849
- export { SpacetimeDBProvider, useReducer, useSpacetimeDB, useTable };
1900
+ export { SpacetimeDBProvider, useProcedure, useReducer, useSpacetimeDB, useTable };
1850
1901
  //# sourceMappingURL=index.mjs.map
1851
1902
  //# sourceMappingURL=index.mjs.map