spacetimedb 2.2.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.
@@ -0,0 +1,4 @@
1
+ import type { UntypedProcedureDef } from '../sdk/procedures';
2
+ import type { ProcedureParamsType, ProcedureReturnType } from '../sdk/type_utils';
3
+ export declare function useProcedure<ProcedureDef extends UntypedProcedureDef>(procedureDef: ProcedureDef): (...params: ProcedureParamsType<ProcedureDef>) => Promise<ProcedureReturnType<ProcedureDef>>;
4
+ //# sourceMappingURL=useProcedure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useProcedure.d.ts","sourceRoot":"","sources":["../../src/vue/useProcedure.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAE3B,wBAAgB,YAAY,CAAC,YAAY,SAAS,mBAAmB,EACnE,YAAY,EAAE,YAAY,GACzB,CACD,GAAG,MAAM,EAAE,mBAAmB,CAAC,YAAY,CAAC,KACzC,OAAO,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAiD9C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spacetimedb",
3
- "version": "2.2.0",
3
+ "version": "2.3.0",
4
4
  "description": "API and ABI bindings for the SpacetimeDB TypeScript module library",
5
5
  "homepage": "https://github.com/clockworklabs/SpacetimeDB#readme",
6
6
  "bugs": {
@@ -103,6 +103,8 @@ export interface JwtClaims {
103
103
  */
104
104
  export type ReducerCtx<SchemaDef extends UntypedSchemaDef> = Readonly<{
105
105
  sender: Identity;
106
+ databaseIdentity: Identity;
107
+ /** @deprecated Use `databaseIdentity` instead. */
106
108
  identity: Identity;
107
109
  timestamp: Timestamp;
108
110
  connectionId: ConnectionId | null;
@@ -75,6 +75,8 @@ export interface ProcedureOpts {
75
75
 
76
76
  export interface ProcedureCtx<S extends UntypedSchemaDef> {
77
77
  readonly sender: Identity;
78
+ readonly databaseIdentity: Identity;
79
+ /** @deprecated Use `databaseIdentity` instead. */
78
80
  readonly identity: Identity;
79
81
  readonly timestamp: Timestamp;
80
82
  readonly connectionId: ConnectionId | null;
@@ -195,10 +197,14 @@ const ProcedureCtxImpl = class ProcedureCtx<S extends UntypedSchemaDef>
195
197
  this.#dbView = dbView;
196
198
  }
197
199
 
198
- get identity() {
200
+ get databaseIdentity() {
199
201
  return (this.#identity ??= new Identity(sys.identity()));
200
202
  }
201
203
 
204
+ get identity() {
205
+ return this.databaseIdentity;
206
+ }
207
+
202
208
  get random() {
203
209
  return (this.#random ??= makeRandom(this.timestamp));
204
210
  }
@@ -221,10 +221,14 @@ export const ReducerCtxImpl = class ReducerCtx<
221
221
  me.#senderAuth = undefined;
222
222
  }
223
223
 
224
- get identity() {
224
+ get databaseIdentity() {
225
225
  return (this.#identity ??= new Identity(sys.identity()));
226
226
  }
227
227
 
228
+ get identity() {
229
+ return this.databaseIdentity;
230
+ }
231
+
228
232
  get senderAuth() {
229
233
  return (this.#senderAuth ??= AuthCtxImpl.fromSystemTables(
230
234
  this.connectionId,
@@ -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
+ }