spacetimedb 2.5.0 → 2.6.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.
- package/LICENSE.txt +759 -759
- package/README.md +211 -211
- package/dist/angular/index.cjs.map +1 -1
- package/dist/angular/index.mjs.map +1 -1
- package/dist/browser/angular/index.mjs.map +1 -1
- package/dist/browser/react/index.mjs +129 -57
- package/dist/browser/react/index.mjs.map +1 -1
- package/dist/browser/solid/index.mjs +120 -50
- package/dist/browser/solid/index.mjs.map +1 -1
- package/dist/browser/svelte/index.mjs.map +1 -1
- package/dist/browser/vue/index.mjs.map +1 -1
- package/dist/index.browser.mjs +10 -2
- package/dist/index.browser.mjs.map +1 -1
- package/dist/index.cjs +10 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +10 -2
- package/dist/index.mjs.map +1 -1
- package/dist/min/index.browser.mjs +1 -1
- package/dist/min/index.browser.mjs.map +1 -1
- package/dist/min/react/index.mjs +1 -1
- package/dist/min/react/index.mjs.map +1 -1
- package/dist/min/sdk/index.browser.mjs +1 -1
- package/dist/min/sdk/index.browser.mjs.map +1 -1
- package/dist/react/index.cjs +129 -57
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.mjs +129 -57
- package/dist/react/index.mjs.map +1 -1
- package/dist/react/useTable.d.ts.map +1 -1
- package/dist/sdk/connection_manager.d.ts +8 -0
- package/dist/sdk/connection_manager.d.ts.map +1 -1
- package/dist/sdk/db_connection_impl.d.ts +7 -0
- package/dist/sdk/db_connection_impl.d.ts.map +1 -1
- package/dist/sdk/index.browser.mjs +10 -2
- package/dist/sdk/index.browser.mjs.map +1 -1
- package/dist/sdk/index.cjs +10 -2
- package/dist/sdk/index.cjs.map +1 -1
- package/dist/sdk/index.mjs +10 -2
- package/dist/sdk/index.mjs.map +1 -1
- package/dist/sdk/websocket_test_adapter.d.ts +2 -1
- package/dist/sdk/websocket_test_adapter.d.ts.map +1 -1
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/runtime.d.ts.map +1 -1
- package/dist/solid/index.cjs +120 -50
- package/dist/solid/index.cjs.map +1 -1
- package/dist/solid/index.mjs +120 -50
- package/dist/solid/index.mjs.map +1 -1
- package/dist/svelte/index.cjs.map +1 -1
- package/dist/svelte/index.mjs.map +1 -1
- package/dist/tanstack/index.cjs +120 -50
- package/dist/tanstack/index.cjs.map +1 -1
- package/dist/tanstack/index.mjs +120 -50
- package/dist/tanstack/index.mjs.map +1 -1
- package/dist/vue/index.cjs.map +1 -1
- package/dist/vue/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/angular/connection_state.ts +19 -19
- package/src/angular/index.ts +3 -3
- package/src/angular/injectors/index.ts +4 -4
- package/src/angular/injectors/inject-reducer.ts +62 -62
- package/src/angular/injectors/inject-spacetimedb-connected.ts +13 -13
- package/src/angular/injectors/inject-spacetimedb.ts +10 -10
- package/src/angular/injectors/inject-table.ts +234 -234
- package/src/angular/providers/index.ts +1 -1
- package/src/angular/providers/provide-spacetimedb.ts +96 -96
- package/src/index.ts +16 -16
- package/src/lib/algebraic_type.ts +819 -819
- package/src/lib/algebraic_type_variants.ts +26 -26
- package/src/lib/algebraic_value.ts +10 -10
- package/src/lib/autogen/types.ts +746 -746
- package/src/lib/binary_reader.ts +188 -188
- package/src/lib/binary_writer.ts +213 -213
- package/src/lib/connection_id.ts +102 -102
- package/src/lib/constraints.ts +48 -48
- package/src/lib/errors.ts +26 -26
- package/src/lib/filter.ts +195 -195
- package/src/lib/identity.ts +83 -83
- package/src/lib/indexes.ts +251 -251
- package/src/lib/option.ts +34 -34
- package/src/lib/query.ts +1019 -1019
- package/src/lib/reducer_schema.ts +38 -38
- package/src/lib/reducers.ts +116 -116
- package/src/lib/result.ts +36 -36
- package/src/lib/schedule_at.ts +86 -86
- package/src/lib/schema.ts +420 -420
- package/src/lib/table.ts +548 -548
- package/src/lib/table_schema.ts +64 -64
- package/src/lib/time_duration.ts +77 -77
- package/src/lib/timestamp.ts +148 -148
- package/src/lib/type_builders.test-d.ts +128 -128
- package/src/lib/type_builders.ts +4014 -4014
- package/src/lib/type_util.ts +124 -124
- package/src/lib/util.ts +196 -196
- package/src/lib/uuid.ts +337 -337
- package/src/react/SpacetimeDBProvider.ts +84 -84
- package/src/react/connection_state.ts +6 -6
- package/src/react/index.ts +5 -5
- package/src/react/useProcedure.ts +60 -60
- package/src/react/useReducer.ts +53 -53
- package/src/react/useSpacetimeDB.ts +18 -18
- package/src/react/useTable.ts +256 -251
- package/src/sdk/client_api/index.ts +114 -114
- package/src/sdk/client_api/types/procedures.ts +8 -8
- package/src/sdk/client_api/types/reducers.ts +8 -8
- package/src/sdk/client_api/types.ts +288 -288
- package/src/sdk/client_cache.ts +129 -129
- package/src/sdk/client_table.ts +179 -179
- package/src/sdk/connection_manager.ts +352 -237
- package/src/sdk/db_connection_builder.ts +290 -290
- package/src/sdk/db_connection_impl.ts +1356 -1347
- package/src/sdk/db_context.ts +28 -28
- package/src/sdk/db_view.ts +12 -12
- package/src/sdk/decompress.ts +51 -51
- package/src/sdk/event.ts +18 -18
- package/src/sdk/event_context.ts +51 -51
- package/src/sdk/event_emitter.ts +32 -32
- package/src/sdk/index.ts +14 -14
- package/src/sdk/internal.ts +2 -2
- package/src/sdk/json_api.ts +46 -46
- package/src/sdk/logger.ts +134 -134
- package/src/sdk/message_types.ts +46 -46
- package/src/sdk/procedures.ts +83 -83
- package/src/sdk/reducer_event.ts +20 -20
- package/src/sdk/reducer_handle.ts +12 -12
- package/src/sdk/reducers.ts +159 -159
- package/src/sdk/schema.ts +45 -45
- package/src/sdk/spacetime_module.ts +28 -28
- package/src/sdk/subscription_builder_impl.ts +275 -275
- package/src/sdk/table_cache.ts +581 -581
- package/src/sdk/type_utils.ts +19 -19
- package/src/sdk/version.ts +133 -133
- package/src/sdk/websocket_decompress_adapter.ts +63 -63
- package/src/sdk/websocket_protocols.ts +25 -25
- package/src/sdk/websocket_test_adapter.ts +107 -100
- package/src/sdk/websocket_v3_frames.ts +126 -126
- package/src/sdk/ws.ts +105 -105
- package/src/server/console.ts +81 -81
- package/src/server/db_view.ts +21 -21
- package/src/server/errors.ts +138 -138
- package/src/server/http.test-d.ts +80 -80
- package/src/server/http.ts +14 -14
- package/src/server/http_handlers.ts +413 -413
- package/src/server/http_internal.ts +79 -79
- package/src/server/http_shared.ts +186 -186
- package/src/server/index.ts +37 -37
- package/src/server/polyfills.ts +4 -4
- package/src/server/procedures.ts +239 -239
- package/src/server/query.ts +1 -1
- package/src/server/range.ts +53 -53
- package/src/server/reducers.ts +113 -113
- package/src/server/rng.ts +113 -113
- package/src/server/runtime.ts +1102 -1102
- package/src/server/schema.test-d.ts +99 -99
- package/src/server/schema.ts +663 -663
- package/src/server/sys.d.ts +125 -125
- package/src/server/view.test-d.ts +194 -194
- package/src/server/views.ts +340 -340
- package/src/solid/SpacetimeDBProvider.ts +97 -97
- package/src/solid/connection_state.ts +6 -6
- package/src/solid/index.ts +5 -5
- package/src/solid/useProcedure.ts +57 -57
- package/src/solid/useReducer.ts +50 -50
- package/src/solid/useSpacetimeDB.ts +18 -18
- package/src/solid/useTable.ts +203 -203
- package/src/svelte/SpacetimeDBProvider.ts +101 -101
- package/src/svelte/connection_state.ts +16 -16
- package/src/svelte/index.ts +4 -4
- package/src/svelte/useReducer.ts +61 -61
- package/src/svelte/useSpacetimeDB.ts +22 -22
- package/src/svelte/useTable.ts +218 -218
- package/src/tanstack/SpacetimeDBQueryClient.ts +330 -330
- package/src/tanstack/hooks.ts +83 -83
- package/src/tanstack/index.ts +16 -16
- package/src/util-stub.ts +1 -1
- package/src/vue/SpacetimeDBProvider.ts +157 -157
- package/src/vue/connection_state.ts +19 -19
- package/src/vue/index.ts +5 -5
- package/src/vue/useProcedure.ts +62 -62
- package/src/vue/useReducer.ts +55 -55
- package/src/vue/useSpacetimeDB.ts +18 -18
- package/src/vue/useTable.ts +229 -229
|
@@ -1,97 +1,97 @@
|
|
|
1
|
-
import {
|
|
2
|
-
DbConnectionBuilder,
|
|
3
|
-
type DbConnectionImpl,
|
|
4
|
-
} from '../sdk/db_connection_impl';
|
|
5
|
-
import { onCleanup, createMemo, createComputed } from 'solid-js';
|
|
6
|
-
import { createStore } from 'solid-js/store';
|
|
7
|
-
import { SpacetimeDBContext } from './useSpacetimeDB';
|
|
8
|
-
import type { ConnectionState } from './connection_state';
|
|
9
|
-
import { ConnectionId } from '../lib/connection_id';
|
|
10
|
-
import {
|
|
11
|
-
ConnectionManager,
|
|
12
|
-
type ConnectionState as ManagerConnectionState,
|
|
13
|
-
} from '../sdk/connection_manager';
|
|
14
|
-
|
|
15
|
-
export interface SpacetimeDBProviderProps<
|
|
16
|
-
DbConnection extends DbConnectionImpl<any>,
|
|
17
|
-
> {
|
|
18
|
-
connectionBuilder: DbConnectionBuilder<DbConnection>;
|
|
19
|
-
children?: any;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export function SpacetimeDBProvider<DbConnection extends DbConnectionImpl<any>>(
|
|
23
|
-
props: SpacetimeDBProviderProps<DbConnection>
|
|
24
|
-
) {
|
|
25
|
-
const uri = () => props.connectionBuilder.getUri();
|
|
26
|
-
const moduleName = () => props.connectionBuilder.getModuleName();
|
|
27
|
-
|
|
28
|
-
const key = createMemo(() => ConnectionManager.getKey(uri(), moduleName()));
|
|
29
|
-
|
|
30
|
-
const fallbackState: ManagerConnectionState = {
|
|
31
|
-
isActive: false,
|
|
32
|
-
identity: undefined,
|
|
33
|
-
token: undefined,
|
|
34
|
-
connectionId: ConnectionId.random(),
|
|
35
|
-
connectionError: undefined,
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
const [state, setState] = createStore<ManagerConnectionState>(fallbackState);
|
|
39
|
-
|
|
40
|
-
// Subscribe to ConnectionManager state changes
|
|
41
|
-
createComputed(() => {
|
|
42
|
-
const currentKey = key();
|
|
43
|
-
|
|
44
|
-
const unsubscribe = ConnectionManager.subscribe(currentKey, () => {
|
|
45
|
-
const snapshot =
|
|
46
|
-
ConnectionManager.getSnapshot(currentKey) ?? fallbackState;
|
|
47
|
-
setState(snapshot);
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
// Load initial snapshot
|
|
51
|
-
const snapshot = ConnectionManager.getSnapshot(currentKey) ?? fallbackState;
|
|
52
|
-
setState(snapshot);
|
|
53
|
-
|
|
54
|
-
onCleanup(() => {
|
|
55
|
-
unsubscribe();
|
|
56
|
-
});
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
const getConnection = () =>
|
|
60
|
-
ConnectionManager.getConnection<DbConnection>(key());
|
|
61
|
-
|
|
62
|
-
const contextValue: ConnectionState = {
|
|
63
|
-
get isActive() {
|
|
64
|
-
return state.isActive;
|
|
65
|
-
},
|
|
66
|
-
get identity() {
|
|
67
|
-
return state.identity;
|
|
68
|
-
},
|
|
69
|
-
get token() {
|
|
70
|
-
return state.token;
|
|
71
|
-
},
|
|
72
|
-
get connectionId() {
|
|
73
|
-
return state.connectionId;
|
|
74
|
-
},
|
|
75
|
-
get connectionError() {
|
|
76
|
-
return state.connectionError;
|
|
77
|
-
},
|
|
78
|
-
getConnection,
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
// Retain / release lifecycle
|
|
82
|
-
createComputed(() => {
|
|
83
|
-
const currentKey = key();
|
|
84
|
-
ConnectionManager.retain(currentKey, props.connectionBuilder);
|
|
85
|
-
|
|
86
|
-
onCleanup(() => {
|
|
87
|
-
ConnectionManager.release(currentKey);
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
return SpacetimeDBContext.Provider({
|
|
92
|
-
value: contextValue,
|
|
93
|
-
get children() {
|
|
94
|
-
return props.children;
|
|
95
|
-
},
|
|
96
|
-
});
|
|
97
|
-
}
|
|
1
|
+
import {
|
|
2
|
+
DbConnectionBuilder,
|
|
3
|
+
type DbConnectionImpl,
|
|
4
|
+
} from '../sdk/db_connection_impl';
|
|
5
|
+
import { onCleanup, createMemo, createComputed } from 'solid-js';
|
|
6
|
+
import { createStore } from 'solid-js/store';
|
|
7
|
+
import { SpacetimeDBContext } from './useSpacetimeDB';
|
|
8
|
+
import type { ConnectionState } from './connection_state';
|
|
9
|
+
import { ConnectionId } from '../lib/connection_id';
|
|
10
|
+
import {
|
|
11
|
+
ConnectionManager,
|
|
12
|
+
type ConnectionState as ManagerConnectionState,
|
|
13
|
+
} from '../sdk/connection_manager';
|
|
14
|
+
|
|
15
|
+
export interface SpacetimeDBProviderProps<
|
|
16
|
+
DbConnection extends DbConnectionImpl<any>,
|
|
17
|
+
> {
|
|
18
|
+
connectionBuilder: DbConnectionBuilder<DbConnection>;
|
|
19
|
+
children?: any;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function SpacetimeDBProvider<DbConnection extends DbConnectionImpl<any>>(
|
|
23
|
+
props: SpacetimeDBProviderProps<DbConnection>
|
|
24
|
+
) {
|
|
25
|
+
const uri = () => props.connectionBuilder.getUri();
|
|
26
|
+
const moduleName = () => props.connectionBuilder.getModuleName();
|
|
27
|
+
|
|
28
|
+
const key = createMemo(() => ConnectionManager.getKey(uri(), moduleName()));
|
|
29
|
+
|
|
30
|
+
const fallbackState: ManagerConnectionState = {
|
|
31
|
+
isActive: false,
|
|
32
|
+
identity: undefined,
|
|
33
|
+
token: undefined,
|
|
34
|
+
connectionId: ConnectionId.random(),
|
|
35
|
+
connectionError: undefined,
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const [state, setState] = createStore<ManagerConnectionState>(fallbackState);
|
|
39
|
+
|
|
40
|
+
// Subscribe to ConnectionManager state changes
|
|
41
|
+
createComputed(() => {
|
|
42
|
+
const currentKey = key();
|
|
43
|
+
|
|
44
|
+
const unsubscribe = ConnectionManager.subscribe(currentKey, () => {
|
|
45
|
+
const snapshot =
|
|
46
|
+
ConnectionManager.getSnapshot(currentKey) ?? fallbackState;
|
|
47
|
+
setState(snapshot);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
// Load initial snapshot
|
|
51
|
+
const snapshot = ConnectionManager.getSnapshot(currentKey) ?? fallbackState;
|
|
52
|
+
setState(snapshot);
|
|
53
|
+
|
|
54
|
+
onCleanup(() => {
|
|
55
|
+
unsubscribe();
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
const getConnection = () =>
|
|
60
|
+
ConnectionManager.getConnection<DbConnection>(key());
|
|
61
|
+
|
|
62
|
+
const contextValue: ConnectionState = {
|
|
63
|
+
get isActive() {
|
|
64
|
+
return state.isActive;
|
|
65
|
+
},
|
|
66
|
+
get identity() {
|
|
67
|
+
return state.identity;
|
|
68
|
+
},
|
|
69
|
+
get token() {
|
|
70
|
+
return state.token;
|
|
71
|
+
},
|
|
72
|
+
get connectionId() {
|
|
73
|
+
return state.connectionId;
|
|
74
|
+
},
|
|
75
|
+
get connectionError() {
|
|
76
|
+
return state.connectionError;
|
|
77
|
+
},
|
|
78
|
+
getConnection,
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
// Retain / release lifecycle
|
|
82
|
+
createComputed(() => {
|
|
83
|
+
const currentKey = key();
|
|
84
|
+
ConnectionManager.retain(currentKey, props.connectionBuilder);
|
|
85
|
+
|
|
86
|
+
onCleanup(() => {
|
|
87
|
+
ConnectionManager.release(currentKey);
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
return SpacetimeDBContext.Provider({
|
|
92
|
+
value: contextValue,
|
|
93
|
+
get children() {
|
|
94
|
+
return props.children;
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { DbConnectionImpl } from '../sdk/db_connection_impl';
|
|
2
|
-
import type { ConnectionState as ManagerConnectionState } from '../sdk/connection_manager';
|
|
3
|
-
|
|
4
|
-
export type ConnectionState = ManagerConnectionState & {
|
|
5
|
-
getConnection(): DbConnectionImpl<any> | null;
|
|
6
|
-
};
|
|
1
|
+
import type { DbConnectionImpl } from '../sdk/db_connection_impl';
|
|
2
|
+
import type { ConnectionState as ManagerConnectionState } from '../sdk/connection_manager';
|
|
3
|
+
|
|
4
|
+
export type ConnectionState = ManagerConnectionState & {
|
|
5
|
+
getConnection(): DbConnectionImpl<any> | null;
|
|
6
|
+
};
|
package/src/solid/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export * from './SpacetimeDBProvider.ts';
|
|
2
|
-
export { useSpacetimeDB } from './useSpacetimeDB.ts';
|
|
3
|
-
export { useTable } from './useTable.ts';
|
|
4
|
-
export { useReducer } from './useReducer.ts';
|
|
5
|
-
export { useProcedure } from './useProcedure.ts';
|
|
1
|
+
export * from './SpacetimeDBProvider.ts';
|
|
2
|
+
export { useSpacetimeDB } from './useSpacetimeDB.ts';
|
|
3
|
+
export { useTable } from './useTable.ts';
|
|
4
|
+
export { useReducer } from './useReducer.ts';
|
|
5
|
+
export { useProcedure } from './useProcedure.ts';
|
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
import { createEffect } from 'solid-js';
|
|
2
|
-
import type { UntypedProcedureDef } from '../sdk/procedures';
|
|
3
|
-
import { useSpacetimeDB } from './useSpacetimeDB';
|
|
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 { getConnection, isActive } = useSpacetimeDB();
|
|
15
|
-
const procedureName = procedureDef.accessorName;
|
|
16
|
-
|
|
17
|
-
// Holds calls made before the connection exists
|
|
18
|
-
const queue: {
|
|
19
|
-
params: ProcedureParamsType<ProcedureDef>;
|
|
20
|
-
resolve: (val: any) => void;
|
|
21
|
-
reject: (err: unknown) => void;
|
|
22
|
-
}[] = [];
|
|
23
|
-
|
|
24
|
-
// Flush when we finally have a connection
|
|
25
|
-
createEffect(() => {
|
|
26
|
-
if (!isActive) return;
|
|
27
|
-
|
|
28
|
-
const conn = getConnection();
|
|
29
|
-
if (!conn) return;
|
|
30
|
-
|
|
31
|
-
const fn = (conn.procedures as any)[procedureName] as (
|
|
32
|
-
...p: ProcedureParamsType<ProcedureDef>
|
|
33
|
-
) => Promise<ProcedureReturnType<ProcedureDef>>;
|
|
34
|
-
|
|
35
|
-
if (queue.length) {
|
|
36
|
-
const pending = queue.splice(0);
|
|
37
|
-
for (const item of pending) {
|
|
38
|
-
fn(...item.params).then(item.resolve, item.reject);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
return (...params: ProcedureParamsType<ProcedureDef>) => {
|
|
44
|
-
const conn = getConnection();
|
|
45
|
-
if (!conn) {
|
|
46
|
-
return new Promise<ProcedureReturnType<ProcedureDef>>(
|
|
47
|
-
(resolve, reject) => {
|
|
48
|
-
queue.push({ params, resolve, reject });
|
|
49
|
-
}
|
|
50
|
-
);
|
|
51
|
-
}
|
|
52
|
-
const fn = (conn.procedures as any)[procedureName] as (
|
|
53
|
-
...p: ProcedureParamsType<ProcedureDef>
|
|
54
|
-
) => Promise<ProcedureReturnType<ProcedureDef>>;
|
|
55
|
-
return fn(...params);
|
|
56
|
-
};
|
|
57
|
-
}
|
|
1
|
+
import { createEffect } from 'solid-js';
|
|
2
|
+
import type { UntypedProcedureDef } from '../sdk/procedures';
|
|
3
|
+
import { useSpacetimeDB } from './useSpacetimeDB';
|
|
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 { getConnection, isActive } = useSpacetimeDB();
|
|
15
|
+
const procedureName = procedureDef.accessorName;
|
|
16
|
+
|
|
17
|
+
// Holds calls made before the connection exists
|
|
18
|
+
const queue: {
|
|
19
|
+
params: ProcedureParamsType<ProcedureDef>;
|
|
20
|
+
resolve: (val: any) => void;
|
|
21
|
+
reject: (err: unknown) => void;
|
|
22
|
+
}[] = [];
|
|
23
|
+
|
|
24
|
+
// Flush when we finally have a connection
|
|
25
|
+
createEffect(() => {
|
|
26
|
+
if (!isActive) return;
|
|
27
|
+
|
|
28
|
+
const conn = getConnection();
|
|
29
|
+
if (!conn) return;
|
|
30
|
+
|
|
31
|
+
const fn = (conn.procedures as any)[procedureName] as (
|
|
32
|
+
...p: ProcedureParamsType<ProcedureDef>
|
|
33
|
+
) => Promise<ProcedureReturnType<ProcedureDef>>;
|
|
34
|
+
|
|
35
|
+
if (queue.length) {
|
|
36
|
+
const pending = queue.splice(0);
|
|
37
|
+
for (const item of pending) {
|
|
38
|
+
fn(...item.params).then(item.resolve, item.reject);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
return (...params: ProcedureParamsType<ProcedureDef>) => {
|
|
44
|
+
const conn = getConnection();
|
|
45
|
+
if (!conn) {
|
|
46
|
+
return new Promise<ProcedureReturnType<ProcedureDef>>(
|
|
47
|
+
(resolve, reject) => {
|
|
48
|
+
queue.push({ params, resolve, reject });
|
|
49
|
+
}
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
const fn = (conn.procedures as any)[procedureName] as (
|
|
53
|
+
...p: ProcedureParamsType<ProcedureDef>
|
|
54
|
+
) => Promise<ProcedureReturnType<ProcedureDef>>;
|
|
55
|
+
return fn(...params);
|
|
56
|
+
};
|
|
57
|
+
}
|
package/src/solid/useReducer.ts
CHANGED
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
import { createEffect } from 'solid-js';
|
|
2
|
-
import type { UntypedReducerDef } from '../sdk/reducers';
|
|
3
|
-
import { useSpacetimeDB } from './useSpacetimeDB';
|
|
4
|
-
import type { ParamsType } from '../sdk';
|
|
5
|
-
|
|
6
|
-
export function useReducer<ReducerDef extends UntypedReducerDef>(
|
|
7
|
-
reducerDef: ReducerDef
|
|
8
|
-
): (...params: ParamsType<ReducerDef>) => Promise<void> {
|
|
9
|
-
const { getConnection, isActive } = useSpacetimeDB();
|
|
10
|
-
const reducerName = reducerDef.accessorName;
|
|
11
|
-
|
|
12
|
-
// Holds calls made before the connection exists
|
|
13
|
-
const queue: {
|
|
14
|
-
params: ParamsType<ReducerDef>;
|
|
15
|
-
resolve: () => void;
|
|
16
|
-
reject: (err: unknown) => void;
|
|
17
|
-
}[] = [];
|
|
18
|
-
|
|
19
|
-
// Flush when we finally have a connection
|
|
20
|
-
createEffect(() => {
|
|
21
|
-
if (!isActive) return;
|
|
22
|
-
|
|
23
|
-
const conn = getConnection();
|
|
24
|
-
if (!conn) return;
|
|
25
|
-
|
|
26
|
-
const fn = (conn.reducers as any)[reducerName] as (
|
|
27
|
-
...p: ParamsType<ReducerDef>
|
|
28
|
-
) => Promise<void>;
|
|
29
|
-
|
|
30
|
-
if (queue.length) {
|
|
31
|
-
const pending = queue.splice(0);
|
|
32
|
-
for (const item of pending) {
|
|
33
|
-
fn(...item.params).then(item.resolve, item.reject);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
return (...params: ParamsType<ReducerDef>) => {
|
|
39
|
-
const conn = getConnection();
|
|
40
|
-
if (!conn) {
|
|
41
|
-
return new Promise<void>((resolve, reject) => {
|
|
42
|
-
queue.push({ params, resolve, reject });
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
const fn = (conn.reducers as any)[reducerName] as (
|
|
46
|
-
...p: ParamsType<ReducerDef>
|
|
47
|
-
) => Promise<void>;
|
|
48
|
-
return fn(...params);
|
|
49
|
-
};
|
|
50
|
-
}
|
|
1
|
+
import { createEffect } from 'solid-js';
|
|
2
|
+
import type { UntypedReducerDef } from '../sdk/reducers';
|
|
3
|
+
import { useSpacetimeDB } from './useSpacetimeDB';
|
|
4
|
+
import type { ParamsType } from '../sdk';
|
|
5
|
+
|
|
6
|
+
export function useReducer<ReducerDef extends UntypedReducerDef>(
|
|
7
|
+
reducerDef: ReducerDef
|
|
8
|
+
): (...params: ParamsType<ReducerDef>) => Promise<void> {
|
|
9
|
+
const { getConnection, isActive } = useSpacetimeDB();
|
|
10
|
+
const reducerName = reducerDef.accessorName;
|
|
11
|
+
|
|
12
|
+
// Holds calls made before the connection exists
|
|
13
|
+
const queue: {
|
|
14
|
+
params: ParamsType<ReducerDef>;
|
|
15
|
+
resolve: () => void;
|
|
16
|
+
reject: (err: unknown) => void;
|
|
17
|
+
}[] = [];
|
|
18
|
+
|
|
19
|
+
// Flush when we finally have a connection
|
|
20
|
+
createEffect(() => {
|
|
21
|
+
if (!isActive) return;
|
|
22
|
+
|
|
23
|
+
const conn = getConnection();
|
|
24
|
+
if (!conn) return;
|
|
25
|
+
|
|
26
|
+
const fn = (conn.reducers as any)[reducerName] as (
|
|
27
|
+
...p: ParamsType<ReducerDef>
|
|
28
|
+
) => Promise<void>;
|
|
29
|
+
|
|
30
|
+
if (queue.length) {
|
|
31
|
+
const pending = queue.splice(0);
|
|
32
|
+
for (const item of pending) {
|
|
33
|
+
fn(...item.params).then(item.resolve, item.reject);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
return (...params: ParamsType<ReducerDef>) => {
|
|
39
|
+
const conn = getConnection();
|
|
40
|
+
if (!conn) {
|
|
41
|
+
return new Promise<void>((resolve, reject) => {
|
|
42
|
+
queue.push({ params, resolve, reject });
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
const fn = (conn.reducers as any)[reducerName] as (
|
|
46
|
+
...p: ParamsType<ReducerDef>
|
|
47
|
+
) => Promise<void>;
|
|
48
|
+
return fn(...params);
|
|
49
|
+
};
|
|
50
|
+
}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { createContext, useContext } from 'solid-js';
|
|
2
|
-
import type { ConnectionState } from './connection_state';
|
|
3
|
-
|
|
4
|
-
export const SpacetimeDBContext = createContext<ConnectionState | undefined>(
|
|
5
|
-
undefined
|
|
6
|
-
);
|
|
7
|
-
|
|
8
|
-
// Throws an error if used outside of a SpacetimeDBProvider
|
|
9
|
-
// Error is caught by other hooks like useTable so they can provide better error messages
|
|
10
|
-
export function useSpacetimeDB(): ConnectionState {
|
|
11
|
-
const context = useContext(SpacetimeDBContext) as ConnectionState | undefined;
|
|
12
|
-
if (!context) {
|
|
13
|
-
throw new Error(
|
|
14
|
-
'useSpacetimeDB must be used within a SpacetimeDBProvider component. Did you forget to add a `SpacetimeDBProvider` to your component tree?'
|
|
15
|
-
);
|
|
16
|
-
}
|
|
17
|
-
return context;
|
|
18
|
-
}
|
|
1
|
+
import { createContext, useContext } from 'solid-js';
|
|
2
|
+
import type { ConnectionState } from './connection_state';
|
|
3
|
+
|
|
4
|
+
export const SpacetimeDBContext = createContext<ConnectionState | undefined>(
|
|
5
|
+
undefined
|
|
6
|
+
);
|
|
7
|
+
|
|
8
|
+
// Throws an error if used outside of a SpacetimeDBProvider
|
|
9
|
+
// Error is caught by other hooks like useTable so they can provide better error messages
|
|
10
|
+
export function useSpacetimeDB(): ConnectionState {
|
|
11
|
+
const context = useContext(SpacetimeDBContext) as ConnectionState | undefined;
|
|
12
|
+
if (!context) {
|
|
13
|
+
throw new Error(
|
|
14
|
+
'useSpacetimeDB must be used within a SpacetimeDBProvider component. Did you forget to add a `SpacetimeDBProvider` to your component tree?'
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
return context;
|
|
18
|
+
}
|