Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 11 additions & 10 deletions crates/bindings-typescript/src/server/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import {
defineView,
type AnonymousViewFn,
type ViewFn,
type ViewOpts,
type ViewReturnTypeBuilder,
} from './views';

Expand Down Expand Up @@ -282,27 +283,27 @@ class Schema<S extends UntypedSchemaDef> {
}

view<Ret extends ViewReturnTypeBuilder>(
name: string,
opts: ViewOpts,
ret: Ret,
fn: ViewFn<S, {}, Ret>
): void {
defineView(name, false, {}, ret, fn);
defineView(opts, false, {}, ret, fn);
}

// TODO: re-enable once parameterized views are supported in SQL
// view<Ret extends ViewReturnTypeBuilder>(
// name: string,
// opts: ViewOpts,
// ret: Ret,
// fn: ViewFn<S, {}, Ret>
// ): void;
// view<Params extends ParamsObj, Ret extends ViewReturnTypeBuilder>(
// name: string,
// opts: ViewOpts,
// params: Params,
// ret: Ret,
// fn: ViewFn<S, {}, Ret>
// ): void;
// view<Params extends ParamsObj, Ret extends ViewReturnTypeBuilder>(
// name: string,
// opts: ViewOpts,
// paramsOrRet: Ret | Params,
// retOrFn: ViewFn<S, {}, Ret> | Ret,
// maybeFn?: ViewFn<S, Params, Ret>
Expand All @@ -315,27 +316,27 @@ class Schema<S extends UntypedSchemaDef> {
// }

anyonymousView<Ret extends ViewReturnTypeBuilder>(
name: string,
opts: ViewOpts,
ret: Ret,
fn: AnonymousViewFn<S, {}, Ret>
): void {
defineView(name, true, {}, ret, fn);
defineView(opts, true, {}, ret, fn);
}

// TODO: re-enable once parameterized views are supported in SQL
// anyonymousView<Ret extends ViewReturnTypeBuilder>(
// name: string,
// opts: ViewOpts,
// ret: Ret,
// fn: AnonymousViewFn<S, {}, Ret>
// ): void;
// anyonymousView<Params extends ParamsObj, Ret extends ViewReturnTypeBuilder>(
// name: string,
// opts: ViewOpts,
// params: Params,
// ret: Ret,
// fn: AnonymousViewFn<S, {}, Ret>
// ): void;
// anyonymousView<Params extends ParamsObj, Ret extends ViewReturnTypeBuilder>(
// name: string,
// opts: ViewOpts,
// paramsOrRet: Ret | Params,
// retOrFn: AnonymousViewFn<S, {}, Ret> | Ret,
// maybeFn?: AnonymousViewFn<S, Params, Ret>
Expand Down
11 changes: 8 additions & 3 deletions crates/bindings-typescript/src/server/views.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,11 @@ export type ReadonlyDbView<SchemaDef extends UntypedSchemaDef> = {
readonly [Tbl in SchemaDef['tables'][number] as Tbl['name']]: ReadonlyTable<Tbl>;
};

export type ViewOpts = {
name: string;
public: true;
};

export type ViewFn<
S extends UntypedSchemaDef,
Params extends ParamsObj,
Expand Down Expand Up @@ -52,7 +57,7 @@ export function defineView<
Params extends ParamsObj,
Ret extends ViewReturnTypeBuilder,
>(
name: string,
opts: ViewOpts,
anon: Anonymous,
params: Params,
ret: Ret,
Expand All @@ -70,9 +75,9 @@ export function defineView<
MODULE_DEF.miscExports.push({
tag: 'View',
value: {
name,
name: opts.name,
index: (anon ? ANON_VIEWS : VIEWS).length,
isPublic: true,
isPublic: opts.public,
isAnonymous: anon,
params: paramType,
returnType: ret.algebraicType,
Expand Down
2 changes: 1 addition & 1 deletion modules/module-test-ts/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ const spacetimedb = schema(
// ─────────────────────────────────────────────────────────────────────────────

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