Skip to content

Commit 549f84c

Browse files
coolreader18jdetter
authored andcommitted
Specify the name of a view in an options object
1 parent 50b1b62 commit 549f84c

3 files changed

Lines changed: 20 additions & 14 deletions

File tree

crates/bindings-typescript/src/server/schema.ts

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import {
2626
defineView,
2727
type AnonymousViewFn,
2828
type ViewFn,
29+
type ViewOpts,
2930
type ViewReturnTypeBuilder,
3031
} from './views';
3132

@@ -282,27 +283,27 @@ class Schema<S extends UntypedSchemaDef> {
282283
}
283284

284285
view<Ret extends ViewReturnTypeBuilder>(
285-
name: string,
286+
opts: ViewOpts,
286287
ret: Ret,
287288
fn: ViewFn<S, {}, Ret>
288289
): void {
289-
defineView(name, false, {}, ret, fn);
290+
defineView(opts, false, {}, ret, fn);
290291
}
291292

292293
// TODO: re-enable once parameterized views are supported in SQL
293294
// view<Ret extends ViewReturnTypeBuilder>(
294-
// name: string,
295+
// opts: ViewOpts,
295296
// ret: Ret,
296297
// fn: ViewFn<S, {}, Ret>
297298
// ): void;
298299
// view<Params extends ParamsObj, Ret extends ViewReturnTypeBuilder>(
299-
// name: string,
300+
// opts: ViewOpts,
300301
// params: Params,
301302
// ret: Ret,
302303
// fn: ViewFn<S, {}, Ret>
303304
// ): void;
304305
// view<Params extends ParamsObj, Ret extends ViewReturnTypeBuilder>(
305-
// name: string,
306+
// opts: ViewOpts,
306307
// paramsOrRet: Ret | Params,
307308
// retOrFn: ViewFn<S, {}, Ret> | Ret,
308309
// maybeFn?: ViewFn<S, Params, Ret>
@@ -315,27 +316,27 @@ class Schema<S extends UntypedSchemaDef> {
315316
// }
316317

317318
anyonymousView<Ret extends ViewReturnTypeBuilder>(
318-
name: string,
319+
opts: ViewOpts,
319320
ret: Ret,
320321
fn: AnonymousViewFn<S, {}, Ret>
321322
): void {
322-
defineView(name, true, {}, ret, fn);
323+
defineView(opts, true, {}, ret, fn);
323324
}
324325

325326
// TODO: re-enable once parameterized views are supported in SQL
326327
// anyonymousView<Ret extends ViewReturnTypeBuilder>(
327-
// name: string,
328+
// opts: ViewOpts,
328329
// ret: Ret,
329330
// fn: AnonymousViewFn<S, {}, Ret>
330331
// ): void;
331332
// anyonymousView<Params extends ParamsObj, Ret extends ViewReturnTypeBuilder>(
332-
// name: string,
333+
// opts: ViewOpts,
333334
// params: Params,
334335
// ret: Ret,
335336
// fn: AnonymousViewFn<S, {}, Ret>
336337
// ): void;
337338
// anyonymousView<Params extends ParamsObj, Ret extends ViewReturnTypeBuilder>(
338-
// name: string,
339+
// opts: ViewOpts,
339340
// paramsOrRet: Ret | Params,
340341
// retOrFn: AnonymousViewFn<S, {}, Ret> | Ret,
341342
// maybeFn?: AnonymousViewFn<S, Params, Ret>

crates/bindings-typescript/src/server/views.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ export type ReadonlyDbView<SchemaDef extends UntypedSchemaDef> = {
2424
readonly [Tbl in SchemaDef['tables'][number] as Tbl['name']]: ReadonlyTable<Tbl>;
2525
};
2626

27+
export type ViewOpts = {
28+
name: string;
29+
public: true;
30+
};
31+
2732
export type ViewFn<
2833
S extends UntypedSchemaDef,
2934
Params extends ParamsObj,
@@ -52,7 +57,7 @@ export function defineView<
5257
Params extends ParamsObj,
5358
Ret extends ViewReturnTypeBuilder,
5459
>(
55-
name: string,
60+
opts: ViewOpts,
5661
anon: Anonymous,
5762
params: Params,
5863
ret: Ret,
@@ -70,9 +75,9 @@ export function defineView<
7075
MODULE_DEF.miscExports.push({
7176
tag: 'View',
7277
value: {
73-
name,
78+
name: opts.name,
7479
index: (anon ? ANON_VIEWS : VIEWS).length,
75-
isPublic: true,
80+
isPublic: opts.public,
7681
isAnonymous: anon,
7782
params: paramType,
7883
returnType: ret.algebraicType,

modules/module-test-ts/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ const spacetimedb = schema(
219219
// ─────────────────────────────────────────────────────────────────────────────
220220

221221
spacetimedb.view(
222-
'my_player',
222+
{ name: 'my_player', public: true },
223223
playerLikeRow.optional(),
224224
// FIXME: this should not be necessary; change `OptionBuilder` to accept `null|undefined` for `none`
225225
ctx => ctx.db.player.identity.find(ctx.sender) ?? undefined

0 commit comments

Comments
 (0)