spacetimedb 2.3.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.
- package/LICENSE.txt +2 -2
- package/dist/index.browser.mjs +64 -4
- package/dist/index.browser.mjs.map +1 -1
- package/dist/index.cjs +64 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +64 -4
- package/dist/index.mjs.map +1 -1
- package/dist/lib/autogen/types.d.ts +675 -2
- package/dist/lib/autogen/types.d.ts.map +1 -1
- package/dist/lib/schema.d.ts.map +1 -1
- package/dist/min/index.browser.mjs +1 -1
- package/dist/min/index.browser.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/sdk/decompress.d.ts.map +1 -1
- package/dist/sdk/index.browser.mjs +64 -4
- package/dist/sdk/index.browser.mjs.map +1 -1
- package/dist/sdk/index.cjs +64 -4
- package/dist/sdk/index.cjs.map +1 -1
- package/dist/sdk/index.mjs +64 -4
- package/dist/sdk/index.mjs.map +1 -1
- package/dist/server/http.d.ts +1 -2
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.test-d.d.ts +2 -0
- package/dist/server/http.test-d.d.ts.map +1 -0
- package/dist/server/http_handlers.d.ts +82 -0
- package/dist/server/http_handlers.d.ts.map +1 -0
- package/dist/server/http_internal.d.ts +1 -32
- package/dist/server/http_internal.d.ts.map +1 -1
- package/dist/server/http_shared.d.ts +44 -0
- package/dist/server/http_shared.d.ts.map +1 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.mjs +628 -136
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/runtime.d.ts +1 -0
- package/dist/server/runtime.d.ts.map +1 -1
- package/dist/server/schema.d.ts +19 -4
- package/dist/server/schema.d.ts.map +1 -1
- package/dist/server/views.d.ts +17 -1
- package/dist/server/views.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/lib/autogen/types.ts +38 -0
- package/src/lib/schema.ts +21 -0
- package/src/sdk/decompress.ts +19 -4
- package/src/sdk/logger.ts +1 -1
- package/src/server/http.test-d.ts +80 -0
- package/src/server/http.ts +14 -2
- package/src/server/http_handlers.ts +413 -0
- package/src/server/http_internal.ts +15 -142
- package/src/server/http_shared.ts +186 -0
- package/src/server/index.ts +11 -0
- package/src/server/procedures.ts +8 -30
- package/src/server/runtime.ts +137 -1
- package/src/server/schema.ts +86 -4
- package/src/server/sys.d.ts +7 -0
- package/src/server/view.test-d.ts +22 -0
- package/src/server/views.ts +127 -0
- package/dist/lib/http_types.d.ts +0 -2
- package/dist/lib/http_types.d.ts.map +0 -1
- package/src/lib/http_types.ts +0 -8
package/dist/server/runtime.d.ts
CHANGED
|
@@ -82,5 +82,6 @@ export declare const ReducerCtxImpl: {
|
|
|
82
82
|
* be the root of the call stack.
|
|
83
83
|
*/
|
|
84
84
|
export declare const callUserFunction: <Args extends any[], R>(fn: (...args: Args) => R, ...args: Args) => R;
|
|
85
|
+
export declare function runWithTx<T, Ctx>(makeCtx: (timestamp: Timestamp) => Ctx, body: (ctx: Ctx) => T): T;
|
|
85
86
|
export declare const makeHooks: (schema: SchemaInner) => ModuleHooks;
|
|
86
87
|
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/server/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAC;AAGlD,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAY3E,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/server/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAC;AAGlD,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAY3E,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAuBnC,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,SAAS,EAEf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAKtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGxC,OAAO,EAAc,KAAK,MAAM,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAK5C,eAAO,MAAM,GAAG;oCAmD2B,GAAI;;;;;;;;;;;;;;;;;;;;;;;;;;CAnDQ,CAAC;AAsBxD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAexD;AAsHD,eAAO,MAAM,cAAc;SACzB,SAAS,SAAS,gBAAgB,UAaxB,QAAQ,aACL,SAAS,gBACN,YAAY,GAAG,IAAI,UACzB,MAAM,CAAC,GAAG,CAAC;gCAbV,QAAQ,GAAG,SAAS;;;;;;mCAEjB;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,GAAG,SAAS;8BAClC,MAAM,GAAG,SAAS;gBACnB,QAAQ;mBACL,SAAS;sBACN,YAAY,GAAG,IAAI;YAC7B,MAAM,CAAC,SAAS,CAAC;;;;;;;;;QAgDrB;;WAEG;qBACU,IAAI;QAKjB;;;WAGG;qBACU,IAAI;;IA7CjB,8DAA8D;cAExD,YAAY,gBAAa,UACrB,QAAQ,aACL,SAAS,gBACN,YAAY,GAAG,IAAI;CA6CpC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,IAAI,SAAS,GAAG,EAAE,EAClB,CAAC,EACD,IAAI,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,MAAM,IAAI,KAAG,CAE3C,CAAC;AAEF,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,EAC9B,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,GAAG,EACtC,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GACpB,CAAC,CA2BH;AAED,eAAO,MAAM,SAAS,GAAI,QAAQ,WAAW,KAAG,WACnB,CAAC"}
|
package/dist/server/schema.d.ts
CHANGED
|
@@ -1,32 +1,44 @@
|
|
|
1
1
|
import { moduleHooks, type ModuleDefaultExport } from 'spacetime:sys@2.0';
|
|
2
|
-
import { CaseConversionPolicy } from '../lib/autogen/types';
|
|
2
|
+
import { CaseConversionPolicy, type MethodOrAny } from '../lib/autogen/types';
|
|
3
3
|
import { type ParamsObj, type Reducer } from '../lib/reducers';
|
|
4
4
|
import { ModuleContext, type TablesToSchema, type UntypedSchemaDef } from '../lib/schema';
|
|
5
5
|
import type { UntypedTableSchema } from '../lib/table_schema';
|
|
6
6
|
import { TypeBuilder } from '../lib/type_builders';
|
|
7
|
+
import { Router, type HandlerFn, type HttpHandlerExport, type HttpHandlerOpts } from './http_handlers';
|
|
7
8
|
import { type ProcedureExport, type ProcedureFn, type ProcedureOpts, type Procedures } from './procedures';
|
|
8
9
|
import { type ReducerExport, type ReducerOpts, type Reducers } from './reducers';
|
|
9
|
-
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';
|
|
10
11
|
export declare class SchemaInner<S extends UntypedSchemaDef = UntypedSchemaDef> extends ModuleContext {
|
|
11
12
|
schemaType: S;
|
|
12
13
|
existingFunctions: Set<string>;
|
|
14
|
+
existingHttpHandlers: Set<string>;
|
|
13
15
|
reducers: Reducers;
|
|
14
16
|
procedures: Procedures;
|
|
15
17
|
views: Views;
|
|
16
18
|
anonViews: AnonViews;
|
|
19
|
+
httpHandlers: HandlerFn[];
|
|
17
20
|
/**
|
|
18
21
|
* Maps ReducerExport objects to the name of the reducer.
|
|
19
22
|
* Used for resolving the reducers of scheduled tables.
|
|
20
23
|
*/
|
|
21
24
|
functionExports: Map<ReducerExport<UntypedSchemaDef, any> | ProcedureExport<UntypedSchemaDef, any, any>, string>;
|
|
25
|
+
httpHandlerExports: Map<HttpHandlerExport<UntypedSchemaDef>, string>;
|
|
22
26
|
pendingSchedules: PendingSchedule[];
|
|
27
|
+
pendingHttpRoutes: PendingHttpRoute[];
|
|
23
28
|
constructor(getSchemaType: (ctx: SchemaInner<S>) => S);
|
|
24
29
|
defineFunction(name: string): void;
|
|
30
|
+
defineHttpHandler(name: string): void;
|
|
25
31
|
resolveSchedules(): void;
|
|
32
|
+
resolveHttpRoutes(): void;
|
|
26
33
|
}
|
|
27
34
|
type PendingSchedule = UntypedTableSchema['schedule'] & {
|
|
28
35
|
tableName: string;
|
|
29
36
|
};
|
|
37
|
+
type PendingHttpRoute = {
|
|
38
|
+
handler: HttpHandlerExport<UntypedSchemaDef>;
|
|
39
|
+
method: MethodOrAny;
|
|
40
|
+
path: string;
|
|
41
|
+
};
|
|
30
42
|
/**
|
|
31
43
|
* The Schema class represents the database schema for a SpacetimeDB application.
|
|
32
44
|
* It encapsulates the table definitions and typespace, and provides methods to define
|
|
@@ -204,12 +216,15 @@ export declare class Schema<S extends UntypedSchemaDef> implements ModuleDefault
|
|
|
204
216
|
*/
|
|
205
217
|
clientDisconnected(fn: Reducer<S, {}>): ReducerExport<S, {}>;
|
|
206
218
|
clientDisconnected(opts: ReducerOpts, fn: Reducer<S, {}>): ReducerExport<S, {}>;
|
|
207
|
-
view<Ret extends ViewReturnTypeBuilder, F extends ViewFn<S, {}, Ret>>(opts: ViewOpts, ret: Ret, fn: F): ViewExport<F>;
|
|
208
|
-
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>;
|
|
209
221
|
procedure<Params extends ParamsObj, Ret extends TypeBuilder<any, any>>(params: Params, ret: Ret, fn: ProcedureFn<S, Params, Ret>): ProcedureFn<S, Params, Ret>;
|
|
210
222
|
procedure<Ret extends TypeBuilder<any, any>>(ret: Ret, fn: ProcedureFn<S, {}, Ret>): ProcedureFn<S, {}, Ret>;
|
|
211
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>;
|
|
212
224
|
procedure<Ret extends TypeBuilder<any, any>>(opts: ProcedureOpts, ret: Ret, fn: ProcedureFn<S, {}, Ret>): ProcedureFn<S, {}, Ret>;
|
|
225
|
+
httpHandler(fn: HandlerFn<S>): HttpHandlerExport<S>;
|
|
226
|
+
httpHandler(opts: HttpHandlerOpts, fn: HandlerFn<S>): HttpHandlerExport<S>;
|
|
227
|
+
httpRouter(router: Router): ModuleExport;
|
|
213
228
|
/**
|
|
214
229
|
* Bundle multiple reducers, procedures, etc into one value to export.
|
|
215
230
|
* The name they will be exported with is their corresponding key in the `exports` argument.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/server/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/server/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/server/views.d.ts
CHANGED
|
@@ -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":"AAAA,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EACjB,KAAK,UAAU,EAChB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,
|
|
1
|
+
{"version":3,"file":"views.d.ts","sourceRoot":"","sources":["../../src/server/views.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EACjB,KAAK,UAAU,EAChB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EACL,YAAY,EACZ,aAAa,EACb,UAAU,EACV,KAAK,aAAa,EAElB,KAAK,KAAK,EACV,KAAK,+BAA+B,EACpC,KAAK,cAAc,EACnB,KAAK,MAAM,EACX,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,WAAW,EACjB,MAAM,UAAU,CAAC;AAElB,MAAM,MAAM,UAAU,CAAC,MAAM,IAAI,MAAM,GAAG,YAAY,CAAC;AAEvD,wBAAgB,cAAc,CAC5B,CAAC,SAAS,gBAAgB,EAC1B,MAAM,SAAS,SAAS,EACxB,GAAG,SAAS,qBAAqB,EACjC,CAAC,SAAS,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAEhC,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,CAAC,GACJ,UAAU,CAAC,CAAC,CAAC,CASf;AAED,wBAAgB,kBAAkB,CAChC,CAAC,SAAS,gBAAgB,EAC1B,MAAM,SAAS,SAAS,EACxB,GAAG,SAAS,qBAAqB,EACjC,CAAC,SAAS,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAEzC,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,CAAC,GACJ,UAAU,CAAC,CAAC,CAAC,CASf;AAED,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,gBAAgB,IAAI,QAAQ,CAAC;IACzD,MAAM,EAAE,QAAQ,CAAC;IACjB,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;CACvB,CAAC,CAAC;AAEH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,gBAAgB,IAAI,QAAQ,CAAC;IAClE,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;CACvB,CAAC,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,IAAI,CAAC;CACd,CAAC;AAEF,KAAK,cAAc,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;AAOpE,KAAK,aAAa,CAAC,GAAG,SAAS,qBAAqB,IAClD,GAAG,SAAS,YAAY,CAAC,MAAM,OAAO,CAAC,GACnC,OAAO,SAAS,UAAU,CAAC,MAAM,GAAG,CAAC,GACnC,GAAG,GACH,KAAK,GACP,GAAG,SAAS,aAAa,CAAC,MAAM,KAAK,CAAC,GACpC,KAAK,SAAS,UAAU,CAAC,MAAM,GAAG,CAAC,GACjC,GAAG,GACH,KAAK,GACP,KAAK,CAAC;AAKd,KAAK,qBAAqB,CAAC,GAAG,SAAS,MAAM,IAAI;KAC9C,CAAC,IAAI,MAAM,GAAG,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,GACtE,CAAC,SAAS;QAAE,YAAY,EAAE,IAAI,CAAA;KAAE,GAC9B,CAAC,GACD,KAAK,GACP,KAAK;CACV,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC;AAMtB,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GACxC,KAAK,GACL,CAAC,SAAS,GAAG,GACX,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GACb,KAAK,GACL,IAAI,GACN,KAAK,CAAC;AAKZ,KAAK,sBAAsB,CAAC,GAAG,SAAS,MAAM,IAC5C,MAAM,SAAS,qBAAqB,CAAC,GAAG,CAAC,GACrC,KAAK,GACL,OAAO,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1C,KAAK,yBAAyB,CAAC,GAAG,SAAS,qBAAqB,IAC9D,qBAAqB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;AAE5C,KAAK,sDAAsD,CACzD,OAAO,SAAS,MAAM,IACpB;IACF,kBAAkB,EAAE,OAAO,CAAC;IAC5B,IAAI,EAAE,sEAAsE,CAAC;CAC9E,CAAC;AAOF,MAAM,MAAM,sBAAsB,CAAC,GAAG,SAAS,qBAAqB,IAClE,sBAAsB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,SAAS,IAAI,GACnD;IACE,KAAK,EAAE,sDAAsD,CAC3D,yBAAyB,CAAC,GAAG,CAAC,CAC/B;CACF,GACD,EAAE,CAAC;AAOT,MAAM,MAAM,MAAM,CAChB,CAAC,SAAS,gBAAgB,EAC1B,MAAM,SAAS,SAAS,EACxB,GAAG,SAAS,qBAAqB,IAE/B,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,GACjE,CAAC,CACC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EACf,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,KAC3B,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE9E,MAAM,MAAM,eAAe,CACzB,CAAC,SAAS,gBAAgB,EAC1B,MAAM,SAAS,SAAS,EACxB,GAAG,SAAS,qBAAqB,IAE/B,CAAC,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,GAC1E,CAAC,CACC,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC,EACxB,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,KAC3B,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE9E,MAAM,MAAM,qBAAqB,GAC7B,WAAW,CACT,SAAS,MAAM,EAAE,EACjB;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,qBAAqB,CAAC,OAAO,CAAA;CAAE,CACvD,GACD,WAAW,CACT,MAAM,GAAG,SAAS,EAClB,mBAAmB,CAAC,qBAAqB,CAAC,OAAO,CAAC,CACnD,CAAC;AAEN,wBAAgB,YAAY,CAC1B,CAAC,SAAS,gBAAgB,EAC1B,KAAK,CAAC,SAAS,SAAS,OAAO,EAC/B,MAAM,SAAS,SAAS,EACxB,GAAG,SAAS,qBAAqB,EAEjC,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,QAAQ,EACd,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,SAAS,SAAS,IAAI,GACtB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,GAC/B,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,QAmE3B;AAoCD,KAAK,QAAQ,CAAC,CAAC,IAAI;IACjB,EAAE,EAAE,CAAC,CAAC;IACN,iBAAiB,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;IACrC,eAAe,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;IACjC,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;AACtD,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;AAInE,KAAK,mBAAmB,CAAC,CAAC,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,IACtD,+BAA+B,CAAC,CAAC,CAAC,SAAS;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,CAAA;CAAE,GACvE,CAAC,SAAS;IAAE,GAAG,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,CAAA;CAAE,GAC1C,CAAC,GACD,KAAK,GACP,KAAK,CAAC"}
|
package/package.json
CHANGED
package/src/lib/autogen/types.ts
CHANGED
|
@@ -158,6 +158,15 @@ export const Lifecycle = __t.enum('Lifecycle', {
|
|
|
158
158
|
});
|
|
159
159
|
export type Lifecycle = __Infer<typeof Lifecycle>;
|
|
160
160
|
|
|
161
|
+
// The tagged union or sum type for the algebraic type `MethodOrAny`.
|
|
162
|
+
export const MethodOrAny = __t.enum('MethodOrAny', {
|
|
163
|
+
Any: __t.unit(),
|
|
164
|
+
get Method() {
|
|
165
|
+
return HttpMethod;
|
|
166
|
+
},
|
|
167
|
+
});
|
|
168
|
+
export type MethodOrAny = __Infer<typeof MethodOrAny>;
|
|
169
|
+
|
|
161
170
|
// The tagged union or sum type for the algebraic type `MiscModuleExport`.
|
|
162
171
|
export const MiscModuleExport = __t.enum('MiscModuleExport', {
|
|
163
172
|
get TypeAlias() {
|
|
@@ -239,6 +248,20 @@ export const RawConstraintDefV9 = __t.object('RawConstraintDefV9', {
|
|
|
239
248
|
});
|
|
240
249
|
export type RawConstraintDefV9 = __Infer<typeof RawConstraintDefV9>;
|
|
241
250
|
|
|
251
|
+
export const RawHttpHandlerDefV10 = __t.object('RawHttpHandlerDefV10', {
|
|
252
|
+
sourceName: __t.string(),
|
|
253
|
+
});
|
|
254
|
+
export type RawHttpHandlerDefV10 = __Infer<typeof RawHttpHandlerDefV10>;
|
|
255
|
+
|
|
256
|
+
export const RawHttpRouteDefV10 = __t.object('RawHttpRouteDefV10', {
|
|
257
|
+
handlerFunction: __t.string(),
|
|
258
|
+
get method() {
|
|
259
|
+
return MethodOrAny;
|
|
260
|
+
},
|
|
261
|
+
path: __t.string(),
|
|
262
|
+
});
|
|
263
|
+
export type RawHttpRouteDefV10 = __Infer<typeof RawHttpRouteDefV10>;
|
|
264
|
+
|
|
242
265
|
// The tagged union or sum type for the algebraic type `RawIndexAlgorithm`.
|
|
243
266
|
export const RawIndexAlgorithm = __t.enum('RawIndexAlgorithm', {
|
|
244
267
|
BTree: __t.array(__t.u16()),
|
|
@@ -358,6 +381,15 @@ export const RawModuleDefV10Section = __t.enum('RawModuleDefV10Section', {
|
|
|
358
381
|
get ExplicitNames() {
|
|
359
382
|
return ExplicitNames;
|
|
360
383
|
},
|
|
384
|
+
get HttpHandlers() {
|
|
385
|
+
return __t.array(RawHttpHandlerDefV10);
|
|
386
|
+
},
|
|
387
|
+
get HttpRoutes() {
|
|
388
|
+
return __t.array(RawHttpRouteDefV10);
|
|
389
|
+
},
|
|
390
|
+
get ViewPrimaryKeys() {
|
|
391
|
+
return __t.array(RawViewPrimaryKeyDefV10);
|
|
392
|
+
},
|
|
361
393
|
});
|
|
362
394
|
export type RawModuleDefV10Section = __Infer<typeof RawModuleDefV10Section>;
|
|
363
395
|
|
|
@@ -642,6 +674,12 @@ export const RawViewDefV9 = __t.object('RawViewDefV9', {
|
|
|
642
674
|
});
|
|
643
675
|
export type RawViewDefV9 = __Infer<typeof RawViewDefV9>;
|
|
644
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
|
+
|
|
645
683
|
export const ReducerDef = __t.object('ReducerDef', {
|
|
646
684
|
name: __t.string(),
|
|
647
685
|
get args() {
|
package/src/lib/schema.ts
CHANGED
|
@@ -194,7 +194,10 @@ export class ModuleContext {
|
|
|
194
194
|
schedules: [],
|
|
195
195
|
procedures: [],
|
|
196
196
|
views: [],
|
|
197
|
+
viewPrimaryKeys: [],
|
|
197
198
|
lifeCycleReducers: [],
|
|
199
|
+
httpHandlers: [],
|
|
200
|
+
httpRoutes: [],
|
|
198
201
|
caseConversionPolicy: { tag: 'SnakeCase' },
|
|
199
202
|
explicitNames: {
|
|
200
203
|
entries: [],
|
|
@@ -220,6 +223,12 @@ export class ModuleContext {
|
|
|
220
223
|
push(module.reducers && { tag: 'Reducers', value: module.reducers });
|
|
221
224
|
push(module.procedures && { tag: 'Procedures', value: module.procedures });
|
|
222
225
|
push(module.views && { tag: 'Views', value: module.views });
|
|
226
|
+
push(
|
|
227
|
+
module.viewPrimaryKeys && {
|
|
228
|
+
tag: 'ViewPrimaryKeys',
|
|
229
|
+
value: module.viewPrimaryKeys,
|
|
230
|
+
}
|
|
231
|
+
);
|
|
223
232
|
push(module.schedules && { tag: 'Schedules', value: module.schedules });
|
|
224
233
|
push(
|
|
225
234
|
module.lifeCycleReducers && {
|
|
@@ -227,6 +236,18 @@ export class ModuleContext {
|
|
|
227
236
|
value: module.lifeCycleReducers,
|
|
228
237
|
}
|
|
229
238
|
);
|
|
239
|
+
push(
|
|
240
|
+
module.httpHandlers && {
|
|
241
|
+
tag: 'HttpHandlers',
|
|
242
|
+
value: module.httpHandlers,
|
|
243
|
+
}
|
|
244
|
+
);
|
|
245
|
+
push(
|
|
246
|
+
module.httpRoutes && {
|
|
247
|
+
tag: 'HttpRoutes',
|
|
248
|
+
value: module.httpRoutes,
|
|
249
|
+
}
|
|
250
|
+
);
|
|
230
251
|
push(
|
|
231
252
|
module.rowLevelSecurity && {
|
|
232
253
|
tag: 'RowLevelSecurity',
|
package/src/sdk/decompress.ts
CHANGED
|
@@ -28,9 +28,24 @@ export async function decompress(
|
|
|
28
28
|
const decompressedStream = readableStream.pipeThrough(decompressionStream);
|
|
29
29
|
|
|
30
30
|
// Collect the decompressed chunks efficiently
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
const reader = decompressedStream.getReader();
|
|
32
|
+
const chunks: Uint8Array[] = [];
|
|
33
|
+
let totalLength = 0;
|
|
34
|
+
let result: any;
|
|
35
|
+
|
|
36
|
+
while (!(result = await reader.read()).done) {
|
|
37
|
+
chunks.push(result.value);
|
|
38
|
+
totalLength += result.value.length;
|
|
34
39
|
}
|
|
35
|
-
|
|
40
|
+
|
|
41
|
+
// Allocate a single Uint8Array for the decompressed data
|
|
42
|
+
const decompressedArray = new Uint8Array(totalLength);
|
|
43
|
+
let chunkOffset = 0;
|
|
44
|
+
|
|
45
|
+
for (const chunk of chunks) {
|
|
46
|
+
decompressedArray.set(chunk, chunkOffset);
|
|
47
|
+
chunkOffset += chunk.length;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return decompressedArray;
|
|
36
51
|
}
|
package/src/sdk/logger.ts
CHANGED
|
@@ -73,7 +73,7 @@ const SENSITIVE_KEYS = new Set([
|
|
|
73
73
|
]);
|
|
74
74
|
|
|
75
75
|
export const stringify = (value: unknown): string | undefined =>
|
|
76
|
-
ssStringify(value, (key, current) => {
|
|
76
|
+
ssStringify(value, (key: string, current: unknown) => {
|
|
77
77
|
if (SENSITIVE_KEYS.has(key)) {
|
|
78
78
|
return '[REDACTED]';
|
|
79
79
|
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { table } from '../lib/table';
|
|
2
|
+
import t from '../lib/type_builders';
|
|
3
|
+
import {
|
|
4
|
+
type HandlerContext,
|
|
5
|
+
Request,
|
|
6
|
+
SyncResponse,
|
|
7
|
+
Router,
|
|
8
|
+
schema,
|
|
9
|
+
} from './index';
|
|
10
|
+
|
|
11
|
+
const person = table(
|
|
12
|
+
{},
|
|
13
|
+
{
|
|
14
|
+
id: t.u32().primaryKey(),
|
|
15
|
+
name: t.string(),
|
|
16
|
+
}
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
const stdb = schema({ person });
|
|
20
|
+
|
|
21
|
+
const hello = stdb.httpHandler((ctx, req) => {
|
|
22
|
+
void ctx.identity;
|
|
23
|
+
void ctx.random;
|
|
24
|
+
req.text();
|
|
25
|
+
req.json();
|
|
26
|
+
|
|
27
|
+
ctx.withTx(tx => {
|
|
28
|
+
tx.db.person.insert({ id: 1, name: 'alice' });
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
return new SyncResponse('hello', {
|
|
32
|
+
headers: { 'content-type': 'text/plain' },
|
|
33
|
+
status: 200,
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
const _typedHello: (ctx: HandlerContext<any>, req: Request) => SyncResponse = (
|
|
38
|
+
ctx,
|
|
39
|
+
req
|
|
40
|
+
) => {
|
|
41
|
+
void ctx.timestamp;
|
|
42
|
+
return new SyncResponse(req.text());
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const named = stdb.httpHandler({ name: 'hello' }, (_ctx, _req) => {
|
|
46
|
+
return new SyncResponse('named');
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
const routes = stdb.httpRouter(
|
|
50
|
+
new Router()
|
|
51
|
+
.get('/hello', hello)
|
|
52
|
+
.get('/named', named)
|
|
53
|
+
.post('/hello-post', hello)
|
|
54
|
+
.nest('/api', new Router().any('/v1', hello))
|
|
55
|
+
.merge(new Router().get('', hello))
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
void routes;
|
|
59
|
+
|
|
60
|
+
// @ts-expect-error handlers must return SyncResponse
|
|
61
|
+
stdb.httpHandler((_ctx, _req) => 123);
|
|
62
|
+
|
|
63
|
+
// @ts-expect-error handlers must take HandlerContext as the first argument
|
|
64
|
+
stdb.httpHandler((_ctx: number, _req: Request) => new SyncResponse('bad'));
|
|
65
|
+
|
|
66
|
+
// @ts-expect-error handlers must take a Request as the second argument
|
|
67
|
+
stdb.httpHandler((_ctx, _req: number) => new SyncResponse('bad'));
|
|
68
|
+
|
|
69
|
+
stdb.httpHandler((ctx, req) => {
|
|
70
|
+
// @ts-expect-error HTTP handlers do not expose sender directly
|
|
71
|
+
void ctx.sender;
|
|
72
|
+
// @ts-expect-error HTTP handlers do not expose connectionId directly
|
|
73
|
+
void ctx.connectionId;
|
|
74
|
+
// @ts-expect-error HTTP handlers do not expose db directly
|
|
75
|
+
void ctx.db;
|
|
76
|
+
return new SyncResponse(req.text());
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
// @ts-expect-error routers must reference exported http handlers, not raw functions
|
|
80
|
+
new Router().get('/raw', (_ctx, _req) => new SyncResponse('bad'));
|
package/src/server/http.ts
CHANGED
|
@@ -1,2 +1,14 @@
|
|
|
1
|
-
export {
|
|
2
|
-
|
|
1
|
+
export {
|
|
2
|
+
type BodyInit,
|
|
3
|
+
type HeadersInit,
|
|
4
|
+
type RequestInit,
|
|
5
|
+
type ResponseInit,
|
|
6
|
+
Headers,
|
|
7
|
+
Request,
|
|
8
|
+
SyncResponse,
|
|
9
|
+
Router,
|
|
10
|
+
type HandlerContext,
|
|
11
|
+
type HandlerFn,
|
|
12
|
+
type HttpHandlerExport,
|
|
13
|
+
type HttpHandlerOpts,
|
|
14
|
+
} from './http_handlers';
|