spacetimedb 2.4.1 → 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 -120
- 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 +1933 -0
- package/dist/browser/solid/index.mjs.map +1 -0
- 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/SpacetimeDBProvider.d.ts +7 -0
- package/dist/solid/SpacetimeDBProvider.d.ts.map +1 -0
- package/dist/solid/connection_state.d.ts +6 -0
- package/dist/solid/connection_state.d.ts.map +1 -0
- package/dist/solid/index.cjs +1939 -0
- package/dist/solid/index.cjs.map +1 -0
- package/dist/solid/index.d.ts +6 -0
- package/dist/solid/index.d.ts.map +1 -0
- package/dist/solid/index.mjs +1933 -0
- package/dist/solid/index.mjs.map +1 -0
- package/dist/solid/useProcedure.d.ts +4 -0
- package/dist/solid/useProcedure.d.ts.map +1 -0
- package/dist/solid/useReducer.d.ts +4 -0
- package/dist/solid/useReducer.d.ts.map +1 -0
- package/dist/solid/useSpacetimeDB.d.ts +4 -0
- package/dist/solid/useSpacetimeDB.d.ts.map +1 -0
- package/dist/solid/useTable.d.ts +32 -0
- package/dist/solid/useTable.d.ts.map +1 -0
- 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 +13 -3
- 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 -0
- package/src/solid/connection_state.ts +6 -0
- package/src/solid/index.ts +5 -0
- package/src/solid/useProcedure.ts +57 -0
- package/src/solid/useReducer.ts +50 -0
- package/src/solid/useSpacetimeDB.ts +18 -0
- package/src/solid/useTable.ts +203 -0
- 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
package/src/sdk/reducers.ts
CHANGED
|
@@ -1,159 +1,159 @@
|
|
|
1
|
-
import type { ProductType } from '../lib/algebraic_type';
|
|
2
|
-
import type { ReducerSchema } from '../lib/reducer_schema';
|
|
3
|
-
import type { ParamsObj } from '../lib/reducers';
|
|
4
|
-
import type { CoerceRow } from '../lib/table';
|
|
5
|
-
import { RowBuilder, type InferTypeOfRow } from '../lib/type_builders';
|
|
6
|
-
import { toCamelCase } from '../lib/util';
|
|
7
|
-
import type { SubscriptionEventContextInterface } from './event_context';
|
|
8
|
-
import type { UntypedRemoteModule } from './spacetime_module';
|
|
9
|
-
|
|
10
|
-
export type SubscriptionEventCallback<
|
|
11
|
-
RemoteModule extends UntypedRemoteModule,
|
|
12
|
-
> = (ctx: SubscriptionEventContextInterface<RemoteModule>) => void;
|
|
13
|
-
|
|
14
|
-
// Utility: detect 'any'
|
|
15
|
-
type IfAny<T, Y, N> = 0 extends 1 & T ? Y : N;
|
|
16
|
-
|
|
17
|
-
// Loose shape that allows all three families even when key names are unknown
|
|
18
|
-
type ReducersViewLoose = {
|
|
19
|
-
// call: camelCase(name)
|
|
20
|
-
[k: string]: (params: any) => Promise<void>;
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
export type ReducersView<RemoteModule> = IfAny<
|
|
24
|
-
RemoteModule,
|
|
25
|
-
ReducersViewLoose,
|
|
26
|
-
RemoteModule extends UntypedRemoteModule
|
|
27
|
-
? {
|
|
28
|
-
[K in RemoteModule['reducers'][number] as K['accessorName']]: (
|
|
29
|
-
params: InferTypeOfRow<K['params']>
|
|
30
|
-
) => Promise<void>;
|
|
31
|
-
}
|
|
32
|
-
: never
|
|
33
|
-
>;
|
|
34
|
-
|
|
35
|
-
export type ReducerEventInfo<
|
|
36
|
-
Name extends string = string,
|
|
37
|
-
Args extends object = object,
|
|
38
|
-
> = {
|
|
39
|
-
name: Name;
|
|
40
|
-
args: Args;
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
export type UntypedReducerDef = {
|
|
44
|
-
name: string;
|
|
45
|
-
accessorName: string;
|
|
46
|
-
params: CoerceRow<ParamsObj>;
|
|
47
|
-
paramsType: ProductType;
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
export type UntypedReducersDef = {
|
|
51
|
-
reducers: readonly UntypedReducerDef[];
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
class Reducers<ReducersDef extends UntypedReducersDef> {
|
|
55
|
-
reducersType: ReducersDef;
|
|
56
|
-
|
|
57
|
-
constructor(handles: readonly ReducerSchema<any, any>[]) {
|
|
58
|
-
this.reducersType = reducersToSchema(handles) as ReducersDef;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Helper type to convert an array of TableSchema into a schema definition
|
|
64
|
-
*/
|
|
65
|
-
type ReducersToSchema<T extends readonly ReducerSchema<any, any>[]> = {
|
|
66
|
-
reducers: {
|
|
67
|
-
/** @type {UntypedReducerDef} */
|
|
68
|
-
readonly [i in keyof T]: {
|
|
69
|
-
name: T[i]['reducerName'];
|
|
70
|
-
accessorName: T[i]['accessorName'];
|
|
71
|
-
params: T[i]['params']['row'];
|
|
72
|
-
paramsType: T[i]['paramsSpacetimeType'];
|
|
73
|
-
};
|
|
74
|
-
};
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
export function reducersToSchema<
|
|
78
|
-
const T extends readonly ReducerSchema<any, any>[],
|
|
79
|
-
>(reducers: T): ReducersToSchema<T> {
|
|
80
|
-
const mapped = reducers.map(r => {
|
|
81
|
-
const paramsRow = r.params.row;
|
|
82
|
-
|
|
83
|
-
return {
|
|
84
|
-
name: r.reducerName,
|
|
85
|
-
// Prefer the schema's own accessorName if present at runtime; otherwise derive it.
|
|
86
|
-
accessorName: r.accessorName,
|
|
87
|
-
params: paramsRow,
|
|
88
|
-
paramsType: r.paramsSpacetimeType,
|
|
89
|
-
} as const;
|
|
90
|
-
}) as {
|
|
91
|
-
readonly [I in keyof T]: {
|
|
92
|
-
name: T[I]['reducerName'];
|
|
93
|
-
accessorName: T[I]['accessorName'];
|
|
94
|
-
params: T[I]['params']['row'];
|
|
95
|
-
paramsType: T[I]['paramsSpacetimeType'];
|
|
96
|
-
};
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
const result = { reducers: mapped } satisfies ReducersToSchema<T>;
|
|
100
|
-
return result;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Creates a schema from table definitions
|
|
105
|
-
* @param handles - Array of table handles created by table() function
|
|
106
|
-
* @returns ColumnBuilder representing the complete database schema
|
|
107
|
-
* @example
|
|
108
|
-
* ```ts
|
|
109
|
-
* const s = schema({
|
|
110
|
-
* user: table({}, userType),
|
|
111
|
-
* post: table({}, postType)
|
|
112
|
-
* });
|
|
113
|
-
* ```
|
|
114
|
-
*/
|
|
115
|
-
export function reducers<const H extends readonly ReducerSchema<any, any>[]>(
|
|
116
|
-
...handles: H
|
|
117
|
-
): Reducers<ReducersToSchema<H>>;
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* Creates a schema from table definitions (array overload)
|
|
121
|
-
* @param handles - Array of table handles created by table() function
|
|
122
|
-
* @returns ColumnBuilder representing the complete database schema
|
|
123
|
-
*/
|
|
124
|
-
export function reducers<const H extends readonly ReducerSchema<any, any>[]>(
|
|
125
|
-
handles: H
|
|
126
|
-
): Reducers<ReducersToSchema<H>>;
|
|
127
|
-
|
|
128
|
-
export function reducers<const H extends readonly ReducerSchema<any, any>[]>(
|
|
129
|
-
...args: [H] | H
|
|
130
|
-
): Reducers<ReducersToSchema<H>> {
|
|
131
|
-
const handles = (
|
|
132
|
-
args.length === 1 && Array.isArray(args[0]) ? args[0] : args
|
|
133
|
-
) as H;
|
|
134
|
-
return new Reducers(handles);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
export function reducerSchema<
|
|
138
|
-
ReducerName extends string,
|
|
139
|
-
Params extends ParamsObj,
|
|
140
|
-
>(name: ReducerName, params: Params): ReducerSchema<ReducerName, Params> {
|
|
141
|
-
const paramType: ProductType = {
|
|
142
|
-
elements: Object.entries(params).map(([n, c]) => ({
|
|
143
|
-
name: n,
|
|
144
|
-
algebraicType:
|
|
145
|
-
'typeBuilder' in c ? c.typeBuilder.algebraicType : c.algebraicType,
|
|
146
|
-
})),
|
|
147
|
-
};
|
|
148
|
-
return {
|
|
149
|
-
reducerName: name,
|
|
150
|
-
accessorName: toCamelCase(name),
|
|
151
|
-
params: new RowBuilder<Params>(params),
|
|
152
|
-
paramsSpacetimeType: paramType,
|
|
153
|
-
reducerDef: {
|
|
154
|
-
name,
|
|
155
|
-
params: paramType,
|
|
156
|
-
lifecycle: undefined,
|
|
157
|
-
},
|
|
158
|
-
};
|
|
159
|
-
}
|
|
1
|
+
import type { ProductType } from '../lib/algebraic_type';
|
|
2
|
+
import type { ReducerSchema } from '../lib/reducer_schema';
|
|
3
|
+
import type { ParamsObj } from '../lib/reducers';
|
|
4
|
+
import type { CoerceRow } from '../lib/table';
|
|
5
|
+
import { RowBuilder, type InferTypeOfRow } from '../lib/type_builders';
|
|
6
|
+
import { toCamelCase } from '../lib/util';
|
|
7
|
+
import type { SubscriptionEventContextInterface } from './event_context';
|
|
8
|
+
import type { UntypedRemoteModule } from './spacetime_module';
|
|
9
|
+
|
|
10
|
+
export type SubscriptionEventCallback<
|
|
11
|
+
RemoteModule extends UntypedRemoteModule,
|
|
12
|
+
> = (ctx: SubscriptionEventContextInterface<RemoteModule>) => void;
|
|
13
|
+
|
|
14
|
+
// Utility: detect 'any'
|
|
15
|
+
type IfAny<T, Y, N> = 0 extends 1 & T ? Y : N;
|
|
16
|
+
|
|
17
|
+
// Loose shape that allows all three families even when key names are unknown
|
|
18
|
+
type ReducersViewLoose = {
|
|
19
|
+
// call: camelCase(name)
|
|
20
|
+
[k: string]: (params: any) => Promise<void>;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export type ReducersView<RemoteModule> = IfAny<
|
|
24
|
+
RemoteModule,
|
|
25
|
+
ReducersViewLoose,
|
|
26
|
+
RemoteModule extends UntypedRemoteModule
|
|
27
|
+
? {
|
|
28
|
+
[K in RemoteModule['reducers'][number] as K['accessorName']]: (
|
|
29
|
+
params: InferTypeOfRow<K['params']>
|
|
30
|
+
) => Promise<void>;
|
|
31
|
+
}
|
|
32
|
+
: never
|
|
33
|
+
>;
|
|
34
|
+
|
|
35
|
+
export type ReducerEventInfo<
|
|
36
|
+
Name extends string = string,
|
|
37
|
+
Args extends object = object,
|
|
38
|
+
> = {
|
|
39
|
+
name: Name;
|
|
40
|
+
args: Args;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export type UntypedReducerDef = {
|
|
44
|
+
name: string;
|
|
45
|
+
accessorName: string;
|
|
46
|
+
params: CoerceRow<ParamsObj>;
|
|
47
|
+
paramsType: ProductType;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export type UntypedReducersDef = {
|
|
51
|
+
reducers: readonly UntypedReducerDef[];
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
class Reducers<ReducersDef extends UntypedReducersDef> {
|
|
55
|
+
reducersType: ReducersDef;
|
|
56
|
+
|
|
57
|
+
constructor(handles: readonly ReducerSchema<any, any>[]) {
|
|
58
|
+
this.reducersType = reducersToSchema(handles) as ReducersDef;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Helper type to convert an array of TableSchema into a schema definition
|
|
64
|
+
*/
|
|
65
|
+
type ReducersToSchema<T extends readonly ReducerSchema<any, any>[]> = {
|
|
66
|
+
reducers: {
|
|
67
|
+
/** @type {UntypedReducerDef} */
|
|
68
|
+
readonly [i in keyof T]: {
|
|
69
|
+
name: T[i]['reducerName'];
|
|
70
|
+
accessorName: T[i]['accessorName'];
|
|
71
|
+
params: T[i]['params']['row'];
|
|
72
|
+
paramsType: T[i]['paramsSpacetimeType'];
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export function reducersToSchema<
|
|
78
|
+
const T extends readonly ReducerSchema<any, any>[],
|
|
79
|
+
>(reducers: T): ReducersToSchema<T> {
|
|
80
|
+
const mapped = reducers.map(r => {
|
|
81
|
+
const paramsRow = r.params.row;
|
|
82
|
+
|
|
83
|
+
return {
|
|
84
|
+
name: r.reducerName,
|
|
85
|
+
// Prefer the schema's own accessorName if present at runtime; otherwise derive it.
|
|
86
|
+
accessorName: r.accessorName,
|
|
87
|
+
params: paramsRow,
|
|
88
|
+
paramsType: r.paramsSpacetimeType,
|
|
89
|
+
} as const;
|
|
90
|
+
}) as {
|
|
91
|
+
readonly [I in keyof T]: {
|
|
92
|
+
name: T[I]['reducerName'];
|
|
93
|
+
accessorName: T[I]['accessorName'];
|
|
94
|
+
params: T[I]['params']['row'];
|
|
95
|
+
paramsType: T[I]['paramsSpacetimeType'];
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
const result = { reducers: mapped } satisfies ReducersToSchema<T>;
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Creates a schema from table definitions
|
|
105
|
+
* @param handles - Array of table handles created by table() function
|
|
106
|
+
* @returns ColumnBuilder representing the complete database schema
|
|
107
|
+
* @example
|
|
108
|
+
* ```ts
|
|
109
|
+
* const s = schema({
|
|
110
|
+
* user: table({}, userType),
|
|
111
|
+
* post: table({}, postType)
|
|
112
|
+
* });
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
115
|
+
export function reducers<const H extends readonly ReducerSchema<any, any>[]>(
|
|
116
|
+
...handles: H
|
|
117
|
+
): Reducers<ReducersToSchema<H>>;
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Creates a schema from table definitions (array overload)
|
|
121
|
+
* @param handles - Array of table handles created by table() function
|
|
122
|
+
* @returns ColumnBuilder representing the complete database schema
|
|
123
|
+
*/
|
|
124
|
+
export function reducers<const H extends readonly ReducerSchema<any, any>[]>(
|
|
125
|
+
handles: H
|
|
126
|
+
): Reducers<ReducersToSchema<H>>;
|
|
127
|
+
|
|
128
|
+
export function reducers<const H extends readonly ReducerSchema<any, any>[]>(
|
|
129
|
+
...args: [H] | H
|
|
130
|
+
): Reducers<ReducersToSchema<H>> {
|
|
131
|
+
const handles = (
|
|
132
|
+
args.length === 1 && Array.isArray(args[0]) ? args[0] : args
|
|
133
|
+
) as H;
|
|
134
|
+
return new Reducers(handles);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export function reducerSchema<
|
|
138
|
+
ReducerName extends string,
|
|
139
|
+
Params extends ParamsObj,
|
|
140
|
+
>(name: ReducerName, params: Params): ReducerSchema<ReducerName, Params> {
|
|
141
|
+
const paramType: ProductType = {
|
|
142
|
+
elements: Object.entries(params).map(([n, c]) => ({
|
|
143
|
+
name: n,
|
|
144
|
+
algebraicType:
|
|
145
|
+
'typeBuilder' in c ? c.typeBuilder.algebraicType : c.algebraicType,
|
|
146
|
+
})),
|
|
147
|
+
};
|
|
148
|
+
return {
|
|
149
|
+
reducerName: name,
|
|
150
|
+
accessorName: toCamelCase(name),
|
|
151
|
+
params: new RowBuilder<Params>(params),
|
|
152
|
+
paramsSpacetimeType: paramType,
|
|
153
|
+
reducerDef: {
|
|
154
|
+
name,
|
|
155
|
+
params: paramType,
|
|
156
|
+
lifecycle: undefined,
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
}
|
package/src/sdk/schema.ts
CHANGED
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ModuleContext,
|
|
3
|
-
tablesToSchema,
|
|
4
|
-
type TablesToSchema,
|
|
5
|
-
type UntypedSchemaDef,
|
|
6
|
-
} from '../lib/schema';
|
|
7
|
-
import type { UntypedTableSchema } from '../lib/table_schema';
|
|
8
|
-
|
|
9
|
-
class Tables<S extends UntypedSchemaDef> {
|
|
10
|
-
constructor(readonly schemaType: S) {}
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Creates a schema from table definitions
|
|
15
|
-
* @param handles - Array of table handles created by table() function
|
|
16
|
-
* @returns ColumnBuilder representing the complete database schema
|
|
17
|
-
* @example
|
|
18
|
-
* ```ts
|
|
19
|
-
* const spacetimedb = schema({
|
|
20
|
-
* user: table({}, userType),
|
|
21
|
-
* post: table({}, postType)
|
|
22
|
-
* });
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
export function schema<const H extends Record<string, UntypedTableSchema>>(
|
|
26
|
-
tables: H
|
|
27
|
-
): Tables<TablesToSchema<H>> {
|
|
28
|
-
const ctx = new ModuleContext();
|
|
29
|
-
|
|
30
|
-
return new Tables(tablesToSchema(ctx, tables));
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
type HasAccessor = { accessorName: PropertyKey };
|
|
34
|
-
|
|
35
|
-
export type ConvertToAccessorMap<TableDefs extends readonly HasAccessor[]> = {
|
|
36
|
-
[Tbl in TableDefs[number] as Tbl['accessorName']]: Tbl;
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
export function convertToAccessorMap<T extends readonly HasAccessor[]>(
|
|
40
|
-
arr: T
|
|
41
|
-
): ConvertToAccessorMap<T> {
|
|
42
|
-
return Object.fromEntries(
|
|
43
|
-
arr.map(v => [v.accessorName, v])
|
|
44
|
-
) as ConvertToAccessorMap<T>;
|
|
45
|
-
}
|
|
1
|
+
import {
|
|
2
|
+
ModuleContext,
|
|
3
|
+
tablesToSchema,
|
|
4
|
+
type TablesToSchema,
|
|
5
|
+
type UntypedSchemaDef,
|
|
6
|
+
} from '../lib/schema';
|
|
7
|
+
import type { UntypedTableSchema } from '../lib/table_schema';
|
|
8
|
+
|
|
9
|
+
class Tables<S extends UntypedSchemaDef> {
|
|
10
|
+
constructor(readonly schemaType: S) {}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Creates a schema from table definitions
|
|
15
|
+
* @param handles - Array of table handles created by table() function
|
|
16
|
+
* @returns ColumnBuilder representing the complete database schema
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* const spacetimedb = schema({
|
|
20
|
+
* user: table({}, userType),
|
|
21
|
+
* post: table({}, postType)
|
|
22
|
+
* });
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export function schema<const H extends Record<string, UntypedTableSchema>>(
|
|
26
|
+
tables: H
|
|
27
|
+
): Tables<TablesToSchema<H>> {
|
|
28
|
+
const ctx = new ModuleContext();
|
|
29
|
+
|
|
30
|
+
return new Tables(tablesToSchema(ctx, tables));
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
type HasAccessor = { accessorName: PropertyKey };
|
|
34
|
+
|
|
35
|
+
export type ConvertToAccessorMap<TableDefs extends readonly HasAccessor[]> = {
|
|
36
|
+
[Tbl in TableDefs[number] as Tbl['accessorName']]: Tbl;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export function convertToAccessorMap<T extends readonly HasAccessor[]>(
|
|
40
|
+
arr: T
|
|
41
|
+
): ConvertToAccessorMap<T> {
|
|
42
|
+
return Object.fromEntries(
|
|
43
|
+
arr.map(v => [v.accessorName, v])
|
|
44
|
+
) as ConvertToAccessorMap<T>;
|
|
45
|
+
}
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
import type { UntypedProceduresDef } from './procedures';
|
|
2
|
-
import type { UntypedSchemaDef } from '../lib/schema';
|
|
3
|
-
import type { UntypedReducersDef } from './reducers';
|
|
4
|
-
|
|
5
|
-
export type RemoteModule<
|
|
6
|
-
SchemaDef extends UntypedSchemaDef,
|
|
7
|
-
ReducersDef extends UntypedReducersDef,
|
|
8
|
-
ProceduresDef extends UntypedProceduresDef,
|
|
9
|
-
CLI extends string = string,
|
|
10
|
-
> = SchemaDef &
|
|
11
|
-
ReducersDef &
|
|
12
|
-
ProceduresDef & {
|
|
13
|
-
versionInfo: {
|
|
14
|
-
cliVersion: CLI;
|
|
15
|
-
};
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
export type UntypedRemoteModule = RemoteModule<
|
|
19
|
-
UntypedSchemaDef,
|
|
20
|
-
UntypedReducersDef,
|
|
21
|
-
UntypedProceduresDef
|
|
22
|
-
>;
|
|
23
|
-
|
|
24
|
-
export type SchemaDef<RemoteModule extends UntypedRemoteModule> =
|
|
25
|
-
RemoteModule['tables'];
|
|
26
|
-
|
|
27
|
-
export type ReducersDef<RemoteModule extends UntypedRemoteModule> =
|
|
28
|
-
RemoteModule['reducers'];
|
|
1
|
+
import type { UntypedProceduresDef } from './procedures';
|
|
2
|
+
import type { UntypedSchemaDef } from '../lib/schema';
|
|
3
|
+
import type { UntypedReducersDef } from './reducers';
|
|
4
|
+
|
|
5
|
+
export type RemoteModule<
|
|
6
|
+
SchemaDef extends UntypedSchemaDef,
|
|
7
|
+
ReducersDef extends UntypedReducersDef,
|
|
8
|
+
ProceduresDef extends UntypedProceduresDef,
|
|
9
|
+
CLI extends string = string,
|
|
10
|
+
> = SchemaDef &
|
|
11
|
+
ReducersDef &
|
|
12
|
+
ProceduresDef & {
|
|
13
|
+
versionInfo: {
|
|
14
|
+
cliVersion: CLI;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export type UntypedRemoteModule = RemoteModule<
|
|
19
|
+
UntypedSchemaDef,
|
|
20
|
+
UntypedReducersDef,
|
|
21
|
+
UntypedProceduresDef
|
|
22
|
+
>;
|
|
23
|
+
|
|
24
|
+
export type SchemaDef<RemoteModule extends UntypedRemoteModule> =
|
|
25
|
+
RemoteModule['tables'];
|
|
26
|
+
|
|
27
|
+
export type ReducersDef<RemoteModule extends UntypedRemoteModule> =
|
|
28
|
+
RemoteModule['reducers'];
|