spacetimedb 2.1.0 → 2.3.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 (125) 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 +43 -3
  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/reducers.d.ts +2 -0
  27. package/dist/lib/reducers.d.ts.map +1 -1
  28. package/dist/lib/table.d.ts +6 -0
  29. package/dist/lib/table.d.ts.map +1 -1
  30. package/dist/min/index.browser.mjs +1 -1
  31. package/dist/min/index.browser.mjs.map +1 -1
  32. package/dist/min/react/index.mjs +1 -1
  33. package/dist/min/react/index.mjs.map +1 -1
  34. package/dist/min/sdk/index.browser.mjs +1 -1
  35. package/dist/min/sdk/index.browser.mjs.map +1 -1
  36. package/dist/react/index.cjs +57 -5
  37. package/dist/react/index.cjs.map +1 -1
  38. package/dist/react/index.d.ts +1 -0
  39. package/dist/react/index.d.ts.map +1 -1
  40. package/dist/react/index.mjs +57 -6
  41. package/dist/react/index.mjs.map +1 -1
  42. package/dist/react/useProcedure.d.ts +4 -0
  43. package/dist/react/useProcedure.d.ts.map +1 -0
  44. package/dist/react/useTable.d.ts +2 -0
  45. package/dist/react/useTable.d.ts.map +1 -1
  46. package/dist/sdk/db_connection_builder.d.ts +3 -3
  47. package/dist/sdk/db_connection_builder.d.ts.map +1 -1
  48. package/dist/sdk/db_connection_impl.d.ts +3 -3
  49. package/dist/sdk/db_connection_impl.d.ts.map +1 -1
  50. package/dist/sdk/decompress.d.ts +1 -1
  51. package/dist/sdk/decompress.d.ts.map +1 -1
  52. package/dist/sdk/index.browser.mjs +459 -138
  53. package/dist/sdk/index.browser.mjs.map +1 -1
  54. package/dist/sdk/index.cjs +459 -138
  55. package/dist/sdk/index.cjs.map +1 -1
  56. package/dist/sdk/index.mjs +459 -138
  57. package/dist/sdk/index.mjs.map +1 -1
  58. package/dist/sdk/table_cache.d.ts +1 -0
  59. package/dist/sdk/table_cache.d.ts.map +1 -1
  60. package/dist/sdk/type_utils.d.ts +4 -1
  61. package/dist/sdk/type_utils.d.ts.map +1 -1
  62. package/dist/sdk/websocket_decompress_adapter.d.ts +5 -21
  63. package/dist/sdk/websocket_decompress_adapter.d.ts.map +1 -1
  64. package/dist/sdk/websocket_protocols.d.ts +6 -0
  65. package/dist/sdk/websocket_protocols.d.ts.map +1 -0
  66. package/dist/sdk/websocket_test_adapter.d.ts +14 -18
  67. package/dist/sdk/websocket_test_adapter.d.ts.map +1 -1
  68. package/dist/sdk/websocket_v3_frames.d.ts +9 -0
  69. package/dist/sdk/websocket_v3_frames.d.ts.map +1 -0
  70. package/dist/sdk/ws.d.ts +26 -1
  71. package/dist/sdk/ws.d.ts.map +1 -1
  72. package/dist/server/http_internal.d.ts.map +1 -1
  73. package/dist/server/index.d.ts +1 -1
  74. package/dist/server/index.d.ts.map +1 -1
  75. package/dist/server/index.mjs +61 -8
  76. package/dist/server/index.mjs.map +1 -1
  77. package/dist/server/procedures.d.ts +2 -0
  78. package/dist/server/procedures.d.ts.map +1 -1
  79. package/dist/server/runtime.d.ts +30 -2
  80. package/dist/server/runtime.d.ts.map +1 -1
  81. package/dist/svelte/index.cjs +7 -2
  82. package/dist/svelte/index.cjs.map +1 -1
  83. package/dist/svelte/index.mjs +7 -2
  84. package/dist/svelte/index.mjs.map +1 -1
  85. package/dist/tanstack/index.cjs +41 -2
  86. package/dist/tanstack/index.cjs.map +1 -1
  87. package/dist/tanstack/index.d.ts +1 -0
  88. package/dist/tanstack/index.d.ts.map +1 -1
  89. package/dist/tanstack/index.mjs +41 -3
  90. package/dist/tanstack/index.mjs.map +1 -1
  91. package/dist/vue/index.cjs +43 -2
  92. package/dist/vue/index.cjs.map +1 -1
  93. package/dist/vue/index.d.ts +1 -0
  94. package/dist/vue/index.d.ts.map +1 -1
  95. package/dist/vue/index.mjs +43 -3
  96. package/dist/vue/index.mjs.map +1 -1
  97. package/dist/vue/useProcedure.d.ts +4 -0
  98. package/dist/vue/useProcedure.d.ts.map +1 -0
  99. package/package.json +2 -2
  100. package/src/lib/binary_reader.ts +5 -2
  101. package/src/lib/binary_writer.ts +7 -1
  102. package/src/lib/filter.ts +12 -1
  103. package/src/lib/reducers.ts +2 -0
  104. package/src/lib/table.ts +9 -1
  105. package/src/react/index.ts +1 -0
  106. package/src/react/useProcedure.ts +60 -0
  107. package/src/react/useTable.ts +17 -2
  108. package/src/sdk/db_connection_builder.ts +16 -7
  109. package/src/sdk/db_connection_impl.ts +404 -89
  110. package/src/sdk/decompress.ts +7 -23
  111. package/src/sdk/table_cache.ts +5 -5
  112. package/src/sdk/type_utils.ts +10 -1
  113. package/src/sdk/websocket_decompress_adapter.ts +15 -77
  114. package/src/sdk/websocket_protocols.ts +25 -0
  115. package/src/sdk/websocket_test_adapter.ts +65 -29
  116. package/src/sdk/websocket_v3_frames.ts +126 -0
  117. package/src/sdk/ws.ts +81 -3
  118. package/src/server/http_internal.ts +10 -1
  119. package/src/server/index.ts +1 -1
  120. package/src/server/procedures.ts +7 -1
  121. package/src/server/runtime.ts +44 -2
  122. package/src/server/sys.d.ts +4 -0
  123. package/src/tanstack/index.ts +1 -0
  124. package/src/vue/index.ts +1 -0
  125. package/src/vue/useProcedure.ts +62 -0
@@ -1,4 +1,5 @@
1
1
  import * as _syscalls2_0 from 'spacetime:sys@2.0';
2
+ import * as _syscalls2_1 from 'spacetime:sys@2.1';
2
3
 
3
4
  import type { ModuleHooks, u128, u16, u256, u32 } from 'spacetime:sys@2.0';
4
5
  import {
@@ -45,7 +46,7 @@ import type { SchemaInner } from './schema';
45
46
 
46
47
  const { freeze } = Object;
47
48
 
48
- export const sys = _syscalls2_0;
49
+ export const sys = { ..._syscalls2_0, ..._syscalls2_1 };
49
50
 
50
51
  export function parseJsonObject(json: string): JsonObject {
51
52
  let value: unknown;
@@ -220,10 +221,14 @@ export const ReducerCtxImpl = class ReducerCtx<
220
221
  me.#senderAuth = undefined;
221
222
  }
222
223
 
223
- get identity() {
224
+ get databaseIdentity() {
224
225
  return (this.#identity ??= new Identity(sys.identity()));
225
226
  }
226
227
 
228
+ get identity() {
229
+ return this.databaseIdentity;
230
+ }
231
+
227
232
  get senderAuth() {
228
233
  return (this.#senderAuth ??= AuthCtxImpl.fromSystemTables(
229
234
  this.connectionId,
@@ -508,6 +513,7 @@ function makeTableView(
508
513
  );
509
514
  return count > 0;
510
515
  },
516
+ clear: () => sys.datastore_clear(table_id),
511
517
  };
512
518
 
513
519
  const tableView = Object.assign(
@@ -667,9 +673,37 @@ function makeTableView(
667
673
  index = base as UniqueIndex<any, any>;
668
674
  } else if (serializeSinglePoint) {
669
675
  // numColumns == 1
676
+
677
+ const serializeSingleRange = !isHashIndex
678
+ ? (buffer: ResizableBuffer, range: Range<any>): IndexScanArgs => {
679
+ BINARY_WRITER.reset(buffer);
680
+ const writer = BINARY_WRITER;
681
+ const writeBound = (bound: Bound<any>) => {
682
+ const tags = { included: 0, excluded: 1, unbounded: 2 };
683
+ writer.writeU8(tags[bound.tag]);
684
+ if (bound.tag !== 'unbounded')
685
+ serializeSingleElement!(writer, bound.value);
686
+ };
687
+ writeBound(range.from);
688
+ const rstartLen = writer.offset;
689
+ writeBound(range.to);
690
+ const rendLen = writer.offset - rstartLen;
691
+ return [0, 0, rstartLen, rendLen];
692
+ }
693
+ : null;
694
+
670
695
  const rawIndex = {
671
696
  filter: (range: any): IteratorObject<RowType<any>> => {
672
697
  const buf = LEAF_BUF;
698
+ if (serializeSingleRange && range instanceof Range) {
699
+ const args = serializeSingleRange(buf, range);
700
+ const iter_id = sys.datastore_index_scan_range_bsatn(
701
+ index_id,
702
+ buf.buffer,
703
+ ...args
704
+ );
705
+ return tableIterator(iter_id, deserializeRow);
706
+ }
673
707
  const point_len = serializeSinglePoint(buf, range);
674
708
  const iter_id = sys.datastore_index_scan_point_bsatn(
675
709
  index_id,
@@ -680,6 +714,14 @@ function makeTableView(
680
714
  },
681
715
  delete: (range: any): u32 => {
682
716
  const buf = LEAF_BUF;
717
+ if (serializeSingleRange && range instanceof Range) {
718
+ const args = serializeSingleRange(buf, range);
719
+ return sys.datastore_delete_by_index_scan_range_bsatn(
720
+ index_id,
721
+ buf.buffer,
722
+ ...args
723
+ );
724
+ }
683
725
  const point_len = serializeSinglePoint(buf, range);
684
726
  return sys.datastore_delete_by_index_scan_point_bsatn(
685
727
  index_id,
@@ -112,3 +112,7 @@ declare module 'spacetime:sys@2.0' {
112
112
  point_len: u32
113
113
  ): u32;
114
114
  }
115
+
116
+ declare module 'spacetime:sys@2.1' {
117
+ export function datastore_clear(table_id: u32): u64;
118
+ }
@@ -13,3 +13,4 @@ export {
13
13
  export * from '../react/SpacetimeDBProvider';
14
14
  export { useSpacetimeDB } from '../react/useSpacetimeDB';
15
15
  export { useReducer } from '../react/useReducer';
16
+ export { useProcedure } from '../react/useProcedure';
package/src/vue/index.ts CHANGED
@@ -2,3 +2,4 @@ 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';
@@ -0,0 +1,62 @@
1
+ import { shallowRef, watch, onUnmounted } from 'vue';
2
+ import { useSpacetimeDB } from './useSpacetimeDB';
3
+ import type { UntypedProcedureDef } from '../sdk/procedures';
4
+ import type {
5
+ ProcedureParamsType,
6
+ ProcedureReturnType,
7
+ } from '../sdk/type_utils';
8
+
9
+ export function useProcedure<ProcedureDef extends UntypedProcedureDef>(
10
+ procedureDef: ProcedureDef
11
+ ): (
12
+ ...params: ProcedureParamsType<ProcedureDef>
13
+ ) => Promise<ProcedureReturnType<ProcedureDef>> {
14
+ const conn = useSpacetimeDB();
15
+ const procedureName = procedureDef.accessorName;
16
+
17
+ const queueRef = shallowRef<
18
+ {
19
+ params: ProcedureParamsType<ProcedureDef>;
20
+ resolve: (val: any) => void;
21
+ reject: (err: unknown) => void;
22
+ }[]
23
+ >([]);
24
+
25
+ const stopWatch = watch(
26
+ () => conn.isActive,
27
+ () => {
28
+ const connection = conn.getConnection();
29
+ if (!connection) return;
30
+
31
+ const fn = (connection.procedures as any)[procedureName] as (
32
+ ...p: ProcedureParamsType<ProcedureDef>
33
+ ) => Promise<ProcedureReturnType<ProcedureDef>>;
34
+ if (queueRef.value.length) {
35
+ const pending = queueRef.value.splice(0);
36
+ for (const item of pending) {
37
+ fn(...item.params).then(item.resolve, item.reject);
38
+ }
39
+ }
40
+ },
41
+ { immediate: true }
42
+ );
43
+
44
+ onUnmounted(() => {
45
+ stopWatch();
46
+ });
47
+
48
+ return (...params: ProcedureParamsType<ProcedureDef>) => {
49
+ const connection = conn.getConnection();
50
+ if (!connection) {
51
+ return new Promise<ProcedureReturnType<ProcedureDef>>(
52
+ (resolve, reject) => {
53
+ queueRef.value.push({ params, resolve, reject });
54
+ }
55
+ );
56
+ }
57
+ const fn = (connection.procedures as any)[procedureName] as (
58
+ ...p: ProcedureParamsType<ProcedureDef>
59
+ ) => Promise<ProcedureReturnType<ProcedureDef>>;
60
+ return fn(...params);
61
+ };
62
+ }