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
@@ -450,8 +450,8 @@ var BinaryReader = class {
450
450
  this.view = input instanceof DataView ? input : new DataView(input.buffer, input.byteOffset, input.byteLength);
451
451
  this.offset = 0;
452
452
  }
453
- reset(view) {
454
- this.view = view;
453
+ reset(input) {
454
+ this.view = input instanceof DataView ? input : new DataView(input.buffer, input.byteOffset, input.byteLength);
455
455
  this.offset = 0;
456
456
  }
457
457
  get remaining() {
@@ -643,6 +643,11 @@ var BinaryWriter = class {
643
643
  this.view.setUint8(this.offset, value);
644
644
  this.offset += 1;
645
645
  }
646
+ writeBytes(value) {
647
+ this.expandBuffer(value.length);
648
+ new Uint8Array(this.buffer.buffer, this.offset, value.length).set(value);
649
+ this.offset += value.length;
650
+ }
646
651
  writeI8(value) {
647
652
  this.expandBuffer(1);
648
653
  this.view.setInt8(this.offset, value);
@@ -1715,6 +1720,7 @@ function classifyMembership(whereExpr, oldRow, newRow) {
1715
1720
  return "stayOut";
1716
1721
  }
1717
1722
  function useTable(query, callbacks) {
1723
+ const enabled = callbacks?.enabled ?? true;
1718
1724
  const accessorName = getQueryAccessorName(query);
1719
1725
  const whereExpr = getQueryWhereClause(query);
1720
1726
  const [subscribeApplied, setSubscribeApplied] = React.useState(false);
@@ -1730,6 +1736,9 @@ function useTable(query, callbacks) {
1730
1736
  const latestTransactionEventId = React.useRef(null);
1731
1737
  const lastSnapshotRef = React.useRef(null);
1732
1738
  const computeSnapshot = React.useCallback(() => {
1739
+ if (!enabled) {
1740
+ return [[], true];
1741
+ }
1733
1742
  const connection = connectionState.getConnection();
1734
1743
  if (!connection) {
1735
1744
  return [[], false];
@@ -1739,11 +1748,15 @@ function useTable(query, callbacks) {
1739
1748
  (row) => evaluateBooleanExpr(whereExpr, row)
1740
1749
  ) : Array.from(table.iter());
1741
1750
  return [result, subscribeApplied];
1742
- }, [connectionState, accessorName, querySql, subscribeApplied]);
1751
+ }, [connectionState, accessorName, querySql, subscribeApplied, enabled]);
1743
1752
  React.useEffect(() => {
1744
1753
  lastSnapshotRef.current = null;
1745
1754
  }, [computeSnapshot]);
1746
1755
  React.useEffect(() => {
1756
+ if (!enabled) {
1757
+ setSubscribeApplied(false);
1758
+ return;
1759
+ }
1747
1760
  const connection = connectionState.getConnection();
1748
1761
  if (connectionState.isActive && connection) {
1749
1762
  const cancel = connection.subscriptionBuilder().onApplied(() => {
@@ -1753,9 +1766,13 @@ function useTable(query, callbacks) {
1753
1766
  cancel.unsubscribe();
1754
1767
  };
1755
1768
  }
1756
- }, [querySql, connectionState.isActive, connectionState]);
1769
+ }, [querySql, connectionState.isActive, connectionState, enabled]);
1757
1770
  const subscribe = React.useCallback(
1758
1771
  (onStoreChange) => {
1772
+ if (!enabled) {
1773
+ return () => {
1774
+ };
1775
+ }
1759
1776
  const onInsert = (ctx, row) => {
1760
1777
  if (whereExpr && !evaluateBooleanExpr(whereExpr, row)) {
1761
1778
  return;
@@ -1824,7 +1841,8 @@ function useTable(query, callbacks) {
1824
1841
  computeSnapshot,
1825
1842
  callbacks?.onDelete,
1826
1843
  callbacks?.onInsert,
1827
- callbacks?.onUpdate
1844
+ callbacks?.onUpdate,
1845
+ enabled
1828
1846
  ]
1829
1847
  );
1830
1848
  const getSnapshot = React.useCallback(() => {
@@ -1866,8 +1884,42 @@ function useReducer(reducerDef) {
1866
1884
  [getConnection, reducerName]
1867
1885
  );
1868
1886
  }
1887
+ function useProcedure(procedureDef) {
1888
+ const { getConnection, isActive } = useSpacetimeDB();
1889
+ const procedureName = procedureDef.accessorName;
1890
+ const queueRef = React.useRef([]);
1891
+ React.useEffect(() => {
1892
+ const conn = getConnection();
1893
+ if (!conn) {
1894
+ return;
1895
+ }
1896
+ const fn = conn.procedures[procedureName];
1897
+ if (queueRef.current.length) {
1898
+ const pending = queueRef.current.splice(0);
1899
+ for (const item of pending) {
1900
+ fn(...item.params).then(item.resolve, item.reject);
1901
+ }
1902
+ }
1903
+ }, [getConnection, procedureName, isActive]);
1904
+ return React.useCallback(
1905
+ (...params) => {
1906
+ const conn = getConnection();
1907
+ if (!conn) {
1908
+ return new Promise(
1909
+ (resolve, reject) => {
1910
+ queueRef.current.push({ params, resolve, reject });
1911
+ }
1912
+ );
1913
+ }
1914
+ const fn = conn.procedures[procedureName];
1915
+ return fn(...params);
1916
+ },
1917
+ [getConnection, procedureName]
1918
+ );
1919
+ }
1869
1920
 
1870
1921
  exports.SpacetimeDBProvider = SpacetimeDBProvider;
1922
+ exports.useProcedure = useProcedure;
1871
1923
  exports.useReducer = useReducer;
1872
1924
  exports.useSpacetimeDB = useSpacetimeDB;
1873
1925
  exports.useTable = useTable;