spacetimedb 2.4.0 → 2.4.1

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.
@@ -7,7 +7,7 @@ import { TypeBuilder } from '../lib/type_builders';
7
7
  import { Router, type HandlerFn, type HttpHandlerExport, type HttpHandlerOpts } from './http_handlers';
8
8
  import { type ProcedureExport, type ProcedureFn, type ProcedureOpts, type Procedures } from './procedures';
9
9
  import { type ReducerExport, type ReducerOpts, type Reducers } from './reducers';
10
- import { type AnonViews, type AnonymousViewFn, type ViewExport, type ViewFn, type ViewOpts, type ViewReturnTypeBuilder, type Views } from './views';
10
+ import { type AnonViews, type AnonymousViewFn, type ViewExport, type ViewFn, type ViewOpts, type ViewReturnTypeBuilder, type ValidateViewPrimaryKey, type Views } from './views';
11
11
  export declare class SchemaInner<S extends UntypedSchemaDef = UntypedSchemaDef> extends ModuleContext {
12
12
  schemaType: S;
13
13
  existingFunctions: Set<string>;
@@ -216,8 +216,8 @@ export declare class Schema<S extends UntypedSchemaDef> implements ModuleDefault
216
216
  */
217
217
  clientDisconnected(fn: Reducer<S, {}>): ReducerExport<S, {}>;
218
218
  clientDisconnected(opts: ReducerOpts, fn: Reducer<S, {}>): ReducerExport<S, {}>;
219
- view<Ret extends ViewReturnTypeBuilder, F extends ViewFn<S, {}, Ret>>(opts: ViewOpts, ret: Ret, fn: F): ViewExport<F>;
220
- anonymousView<Ret extends ViewReturnTypeBuilder, F extends AnonymousViewFn<S, {}, Ret>>(opts: ViewOpts, ret: Ret, fn: F): ViewExport<F>;
219
+ view<Ret extends ViewReturnTypeBuilder, F extends ViewFn<S, {}, Ret>>(opts: ViewOpts, ret: Ret, fn: F, ..._: ValidateViewPrimaryKey<Ret>): ViewExport<F>;
220
+ anonymousView<Ret extends ViewReturnTypeBuilder, F extends AnonymousViewFn<S, {}, Ret>>(opts: ViewOpts, ret: Ret, fn: F, ..._: ValidateViewPrimaryKey<Ret>): ViewExport<F>;
221
221
  procedure<Params extends ParamsObj, Ret extends TypeBuilder<any, any>>(params: Params, ret: Ret, fn: ProcedureFn<S, Params, Ret>): ProcedureFn<S, Params, Ret>;
222
222
  procedure<Ret extends TypeBuilder<any, any>>(ret: Ret, fn: ProcedureFn<S, {}, Ret>): ProcedureFn<S, {}, Ret>;
223
223
  procedure<Params extends ParamsObj, Ret extends TypeBuilder<any, any>>(opts: ProcedureOpts, params: Params, ret: Ret, fn: ProcedureFn<S, Params, Ret>): ProcedureFn<S, Params, Ret>;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/server/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/server/schema.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import type { Identity } from '../lib/identity';
3
3
  import type { OptionAlgebraicType } from '../lib/option';
4
4
  import type { ParamsObj } from '../lib/reducers';
5
5
  import { type UntypedSchemaDef } from '../lib/schema';
6
- import { type Infer, type InferSpacetimeTypeOfTypeBuilder, type InferTypeOfRow, type TypeBuilder } from '../lib/type_builders';
6
+ import { ArrayBuilder, OptionBuilder, RowBuilder, type ColumnBuilder, type Infer, type InferSpacetimeTypeOfTypeBuilder, type InferTypeOfRow, type RowObj, type TypeBuilder } from '../lib/type_builders';
7
7
  import type { ReadonlyDbView } from './db_view';
8
8
  import { type QueryBuilder, type RowTypedQuery } from './query';
9
9
  import { type ModuleExport, type SchemaInner } from './schema';
@@ -24,6 +24,22 @@ export type ViewOpts = {
24
24
  public: true;
25
25
  };
26
26
  type FlattenedArray<T> = T extends readonly (infer E)[] ? E : never;
27
+ type ViewReturnRow<Ret extends ViewReturnTypeBuilder> = Ret extends ArrayBuilder<infer Element> ? Element extends RowBuilder<infer Row> ? Row : never : Ret extends OptionBuilder<infer Value> ? Value extends RowBuilder<infer Row> ? Row : never : never;
28
+ type PrimaryKeyColumnNames<Row extends RowObj> = {
29
+ [K in keyof Row & string]: Row[K] extends ColumnBuilder<any, any, infer M> ? M extends {
30
+ isPrimaryKey: true;
31
+ } ? K : never : never;
32
+ }[keyof Row & string];
33
+ type IsUnion<T, U = T> = [T] extends [never] ? false : T extends any ? [U] extends [T] ? false : true : false;
34
+ type HasMultiplePrimaryKeys<Row extends RowObj> = string extends PrimaryKeyColumnNames<Row> ? false : IsUnion<PrimaryKeyColumnNames<Row>>;
35
+ type MultiplePrimaryKeyColumns<Ret extends ViewReturnTypeBuilder> = PrimaryKeyColumnNames<ViewReturnRow<Ret>>;
36
+ type ERROR_view_return_type_can_have_at_most_one_primaryKey<Columns extends string> = {
37
+ _primaryKeyColumns: Columns;
38
+ _fix: 'Remove primaryKey() from all but one column on the returned row type';
39
+ };
40
+ export type ValidateViewPrimaryKey<Ret extends ViewReturnTypeBuilder> = HasMultiplePrimaryKeys<ViewReturnRow<Ret>> extends true ? [
41
+ error: ERROR_view_return_type_can_have_at_most_one_primaryKey<MultiplePrimaryKeyColumns<Ret>>
42
+ ] : [];
27
43
  export type ViewFn<S extends UntypedSchemaDef, Params extends ParamsObj, Ret extends ViewReturnTypeBuilder> = ((ctx: ViewCtx<S>, params: InferTypeOfRow<Params>) => Infer<Ret>) | ((ctx: ViewCtx<S>, params: InferTypeOfRow<Params>) => RowTypedQuery<FlattenedArray<Infer<Ret>>, ExtractArrayProduct<Ret>>);
28
44
  export type AnonymousViewFn<S extends UntypedSchemaDef, Params extends ParamsObj, Ret extends ViewReturnTypeBuilder> = ((ctx: AnonymousViewCtx<S>, params: InferTypeOfRow<Params>) => Infer<Ret>) | ((ctx: AnonymousViewCtx<S>, params: InferTypeOfRow<Params>) => RowTypedQuery<FlattenedArray<Infer<Ret>>, ExtractArrayProduct<Ret>>);
29
45
  export type ViewReturnTypeBuilder = TypeBuilder<readonly object[], {
@@ -1 +1 @@
1
- {"version":3,"file":"views.d.ts","sourceRoot":"","sources":["../../src/server/views.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"views.d.ts","sourceRoot":"","sources":["../../src/server/views.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spacetimedb",
3
- "version": "2.4.0",
3
+ "version": "2.4.1",
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": {
@@ -387,6 +387,9 @@ export const RawModuleDefV10Section = __t.enum('RawModuleDefV10Section', {
387
387
  get HttpRoutes() {
388
388
  return __t.array(RawHttpRouteDefV10);
389
389
  },
390
+ get ViewPrimaryKeys() {
391
+ return __t.array(RawViewPrimaryKeyDefV10);
392
+ },
390
393
  });
391
394
  export type RawModuleDefV10Section = __Infer<typeof RawModuleDefV10Section>;
392
395
 
@@ -671,6 +674,12 @@ export const RawViewDefV9 = __t.object('RawViewDefV9', {
671
674
  });
672
675
  export type RawViewDefV9 = __Infer<typeof RawViewDefV9>;
673
676
 
677
+ export const RawViewPrimaryKeyDefV10 = __t.object('RawViewPrimaryKeyDefV10', {
678
+ viewSourceName: __t.string(),
679
+ columns: __t.array(__t.string()),
680
+ });
681
+ export type RawViewPrimaryKeyDefV10 = __Infer<typeof RawViewPrimaryKeyDefV10>;
682
+
674
683
  export const ReducerDef = __t.object('ReducerDef', {
675
684
  name: __t.string(),
676
685
  get args() {
package/src/lib/schema.ts CHANGED
@@ -194,6 +194,7 @@ export class ModuleContext {
194
194
  schedules: [],
195
195
  procedures: [],
196
196
  views: [],
197
+ viewPrimaryKeys: [],
197
198
  lifeCycleReducers: [],
198
199
  httpHandlers: [],
199
200
  httpRoutes: [],
@@ -222,6 +223,12 @@ export class ModuleContext {
222
223
  push(module.reducers && { tag: 'Reducers', value: module.reducers });
223
224
  push(module.procedures && { tag: 'Procedures', value: module.procedures });
224
225
  push(module.views && { tag: 'Views', value: module.views });
226
+ push(
227
+ module.viewPrimaryKeys && {
228
+ tag: 'ViewPrimaryKeys',
229
+ value: module.viewPrimaryKeys,
230
+ }
231
+ );
225
232
  push(module.schedules && { tag: 'Schedules', value: module.schedules });
226
233
  push(
227
234
  module.lifeCycleReducers && {
@@ -50,6 +50,7 @@ import {
50
50
  type ViewFn,
51
51
  type ViewOpts,
52
52
  type ViewReturnTypeBuilder,
53
+ type ValidateViewPrimaryKey,
53
54
  type Views,
54
55
  } from './views';
55
56
  import type { UntypedTableDef } from '../lib/table';
@@ -395,7 +396,11 @@ export class Schema<S extends UntypedSchemaDef> implements ModuleDefaultExport {
395
396
  view<Ret extends ViewReturnTypeBuilder, F extends ViewFn<S, {}, Ret>>(
396
397
  opts: ViewOpts,
397
398
  ret: Ret,
398
- fn: F
399
+ fn: F,
400
+ // Compile-time-only guard: this rest parameter is `[]` for valid return
401
+ // builders, but becomes a required error tuple when a returned row builder
402
+ // marks more than one column with `.primaryKey()`.
403
+ ..._: ValidateViewPrimaryKey<Ret>
399
404
  ): ViewExport<F> {
400
405
  return makeViewExport<S, {}, Ret, F>(this.#ctx, opts, {}, ret, fn);
401
406
  }
@@ -428,7 +433,15 @@ export class Schema<S extends UntypedSchemaDef> implements ModuleDefaultExport {
428
433
  anonymousView<
429
434
  Ret extends ViewReturnTypeBuilder,
430
435
  F extends AnonymousViewFn<S, {}, Ret>,
431
- >(opts: ViewOpts, ret: Ret, fn: F): ViewExport<F> {
436
+ >(
437
+ opts: ViewOpts,
438
+ ret: Ret,
439
+ fn: F,
440
+ // Compile-time-only guard: this rest parameter is `[]` for valid return
441
+ // builders, but becomes a required error tuple when a returned row builder
442
+ // marks more than one column with `.primaryKey()`.
443
+ ..._: ValidateViewPrimaryKey<Ret>
444
+ ): ViewExport<F> {
432
445
  return makeAnonViewExport<S, {}, Ret, F>(this.#ctx, opts, {}, ret, fn);
433
446
  }
434
447
 
@@ -73,11 +73,33 @@ const spacetime = schema({
73
73
 
74
74
  const arrayRetValue = t.array(person.rowType);
75
75
  const optionalPerson = t.option(person.rowType);
76
+ const multiplePrimaryKeyRows = t.array(
77
+ t.row('MultiplePrimaryKeyRows', {
78
+ id: t.u32().primaryKey(),
79
+ name: t.string().primaryKey(),
80
+ })
81
+ );
76
82
 
77
83
  spacetime.anonymousView({ name: 'v1', public: true }, arrayRetValue, ctx => {
78
84
  return ctx.from.person.build();
79
85
  });
80
86
 
87
+ // @ts-expect-error views can have at most one primaryKey column on the returned row type.
88
+ spacetime.anonymousView(
89
+ { name: 'multiplePrimaryRows', public: true },
90
+ multiplePrimaryKeyRows,
91
+ () => []
92
+ );
93
+
94
+ // @ts-expect-error the same multiple-primary-key check also applies to query-builder views.
95
+ spacetime.anonymousView(
96
+ { name: 'multiplePrimaryRowsQuery', public: true },
97
+ multiplePrimaryKeyRows,
98
+ ctx => {
99
+ return ctx.from.person;
100
+ }
101
+ );
102
+
81
103
  spacetime.anonymousView(
82
104
  { name: 'optionalPerson', public: true },
83
105
  optionalPerson,
@@ -10,10 +10,15 @@ import type { OptionAlgebraicType } from '../lib/option';
10
10
  import type { ParamsObj } from '../lib/reducers';
11
11
  import { type UntypedSchemaDef } from '../lib/schema';
12
12
  import {
13
+ ArrayBuilder,
14
+ OptionBuilder,
13
15
  RowBuilder,
16
+ type ColumnBuilder,
17
+ type ColumnMetadata,
14
18
  type Infer,
15
19
  type InferSpacetimeTypeOfTypeBuilder,
16
20
  type InferTypeOfRow,
21
+ type RowObj,
17
22
  type TypeBuilder,
18
23
  } from '../lib/type_builders';
19
24
  import { bsatnBaseSize, toPascalCase } from '../lib/util';
@@ -90,6 +95,77 @@ export type ViewOpts = {
90
95
 
91
96
  type FlattenedArray<T> = T extends readonly (infer E)[] ? E : never;
92
97
 
98
+ // Compile-time mirror of `viewReturnRow` below. Views currently return either
99
+ // `array(row(...))` or `option(row(...))`; this extracts the row object type
100
+ // from those builders so we can inspect column metadata at the type level.
101
+ // Non-row returns collapse to `never`, which makes the primary-key validation
102
+ // below a no-op for unsupported shapes.
103
+ type ViewReturnRow<Ret extends ViewReturnTypeBuilder> =
104
+ Ret extends ArrayBuilder<infer Element>
105
+ ? Element extends RowBuilder<infer Row>
106
+ ? Row
107
+ : never
108
+ : Ret extends OptionBuilder<infer Value>
109
+ ? Value extends RowBuilder<infer Row>
110
+ ? Row
111
+ : never
112
+ : never;
113
+
114
+ // Produces a union of the returned row's column names marked with
115
+ // `.primaryKey()`. For example, `{ id: t.u32().primaryKey(), name: t.string() }`
116
+ // becomes `"id"`, while two marked columns becomes `"id" | "name"`.
117
+ type PrimaryKeyColumnNames<Row extends RowObj> = {
118
+ [K in keyof Row & string]: Row[K] extends ColumnBuilder<any, any, infer M>
119
+ ? M extends { isPrimaryKey: true }
120
+ ? K
121
+ : never
122
+ : never;
123
+ }[keyof Row & string];
124
+
125
+ // Standard conditional-type trick for distinguishing a single type from a
126
+ // union. We use it because zero or one primary-key column is valid, but a union
127
+ // of two or more column names means the row builder marked multiple primary
128
+ // keys.
129
+ type IsUnion<T, U = T> = [T] extends [never]
130
+ ? false
131
+ : T extends any
132
+ ? [U] extends [T]
133
+ ? false
134
+ : true
135
+ : false;
136
+
137
+ // In generic code, row keys may widen from literal names like "id" | "name"
138
+ // to plain `string`. That means "unknown column name", not "multiple primary
139
+ // keys", so avoid a false-positive type error and rely on the runtime check.
140
+ type HasMultiplePrimaryKeys<Row extends RowObj> =
141
+ string extends PrimaryKeyColumnNames<Row>
142
+ ? false
143
+ : IsUnion<PrimaryKeyColumnNames<Row>>;
144
+
145
+ type MultiplePrimaryKeyColumns<Ret extends ViewReturnTypeBuilder> =
146
+ PrimaryKeyColumnNames<ViewReturnRow<Ret>>;
147
+
148
+ type ERROR_view_return_type_can_have_at_most_one_primaryKey<
149
+ Columns extends string,
150
+ > = {
151
+ _primaryKeyColumns: Columns;
152
+ _fix: 'Remove primaryKey() from all but one column on the returned row type';
153
+ };
154
+
155
+ // Used as a rest parameter type on `Schema.view` and `Schema.anonymousView`.
156
+ // Valid return builders produce `[]`, so callers pass no extra arguments. If
157
+ // the returned row has multiple `.primaryKey()` columns, this becomes a
158
+ // one-element tuple containing an explanatory error type, which makes the
159
+ // normal three-argument call fail to type-check.
160
+ export type ValidateViewPrimaryKey<Ret extends ViewReturnTypeBuilder> =
161
+ HasMultiplePrimaryKeys<ViewReturnRow<Ret>> extends true
162
+ ? [
163
+ error: ERROR_view_return_type_can_have_at_most_one_primaryKey<
164
+ MultiplePrimaryKeyColumns<Ret>
165
+ >,
166
+ ]
167
+ : [];
168
+
93
169
  // // If we allowed functions to return either.
94
170
  // type ViewReturn<Ret extends ViewReturnTypeBuilder> =
95
171
  // | Infer<Ret>
@@ -164,6 +240,22 @@ export function registerView<
164
240
  returnType,
165
241
  });
166
242
 
243
+ // Runtime counterpart to `ValidateViewPrimaryKey`: the type-level check gives
244
+ // users an early diagnostic in normal code, but this still protects dynamic
245
+ // or widened builders and is the source of the raw module-def metadata.
246
+ const primaryKeyColumns = viewPrimaryKeyColumns(ret);
247
+ if (primaryKeyColumns.length > 1) {
248
+ throw new TypeError(
249
+ `View '${exportName}' can have at most one primaryKey() column on its returned row type; found ${primaryKeyColumns.join(', ')}`
250
+ );
251
+ }
252
+ if (primaryKeyColumns.length === 1) {
253
+ ctx.moduleDef.viewPrimaryKeys.push({
254
+ viewSourceName: exportName,
255
+ columns: primaryKeyColumns,
256
+ });
257
+ }
258
+
167
259
  if (opts.name != null) {
168
260
  ctx.moduleDef.explicitNames.entries.push({
169
261
  tag: 'Function',
@@ -194,6 +286,40 @@ export function registerView<
194
286
  });
195
287
  }
196
288
 
289
+ // Inspect the returned row builder and collect the column property names marked
290
+ // with `.primaryKey()`. These names are the TypeScript row-builder keys, which
291
+ // are also the raw column names in the module definition emitted by the TS SDK.
292
+ function viewPrimaryKeyColumns(ret: ViewReturnTypeBuilder): string[] {
293
+ const row = viewReturnRow(ret);
294
+ if (row == null) {
295
+ return [];
296
+ }
297
+
298
+ return Object.entries(row.row)
299
+ .filter(
300
+ (
301
+ entry
302
+ ): entry is [string, ColumnBuilder<any, any, ColumnMetadata<any>>] =>
303
+ entry[1].columnMetadata.isPrimaryKey === true
304
+ )
305
+ .map(([name]) => name);
306
+ }
307
+
308
+ // Views can return either `array(row(...))` or `option(row(...))`. The primary
309
+ // key marker lives on the inner `RowBuilder`, so unwrap those two supported
310
+ // shapes and ignore anything else.
311
+ function viewReturnRow(
312
+ ret: ViewReturnTypeBuilder
313
+ ): RowBuilder<any> | undefined {
314
+ if (ret instanceof ArrayBuilder && ret.element instanceof RowBuilder) {
315
+ return ret.element;
316
+ }
317
+ if (ret instanceof OptionBuilder && ret.value instanceof RowBuilder) {
318
+ return ret.value;
319
+ }
320
+ return undefined;
321
+ }
322
+
197
323
  type ViewInfo<F> = {
198
324
  fn: F;
199
325
  deserializeParams: Deserializer<any>;