bunderstack 0.17.0-beta.0 → 0.17.0-beta.3
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/CHANGELOG.md +227 -0
- package/README.md +11 -1
- package/dist/access.d.ts +116 -0
- package/dist/access.d.ts.map +1 -0
- package/dist/access.js +325 -0
- package/dist/access.js.map +1 -0
- package/dist/api/builder.d.ts +145 -0
- package/dist/api/builder.d.ts.map +1 -0
- package/dist/api/builder.js +28 -0
- package/dist/api/builder.js.map +1 -0
- package/dist/api/context.d.ts +34 -0
- package/dist/api/context.d.ts.map +1 -0
- package/dist/api/context.js +32 -0
- package/dist/api/context.js.map +1 -0
- package/dist/api/crud-router.d.ts +290 -0
- package/dist/api/crud-router.d.ts.map +1 -0
- package/dist/api/crud-router.js +249 -0
- package/dist/api/crud-router.js.map +1 -0
- package/dist/api/openapi.d.ts +6 -0
- package/dist/api/openapi.d.ts.map +1 -0
- package/dist/api/openapi.js +146 -0
- package/dist/api/openapi.js.map +1 -0
- package/dist/api/realtime-router.d.ts +76 -0
- package/dist/api/realtime-router.d.ts.map +1 -0
- package/dist/api/realtime-router.js +41 -0
- package/dist/api/realtime-router.js.map +1 -0
- package/dist/api/registry.d.ts +30 -0
- package/dist/api/registry.d.ts.map +1 -0
- package/dist/api/registry.js +239 -0
- package/dist/api/registry.js.map +1 -0
- package/dist/api/router.d.ts +9 -0
- package/dist/api/router.d.ts.map +1 -0
- package/dist/api/router.js +19 -0
- package/dist/api/router.js.map +1 -0
- package/dist/api/storage-router.d.ts +279 -0
- package/dist/api/storage-router.d.ts.map +1 -0
- package/dist/api/storage-router.js +155 -0
- package/dist/api/storage-router.js.map +1 -0
- package/dist/api/types.d.ts +55 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +2 -0
- package/dist/api/types.js.map +1 -0
- package/dist/auth.d.ts +31 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +102 -0
- package/dist/auth.js.map +1 -0
- package/dist/blueprint-generator.d.ts +18 -0
- package/dist/blueprint-generator.d.ts.map +1 -0
- package/dist/blueprint-generator.js +125 -0
- package/dist/blueprint-generator.js.map +1 -0
- package/dist/blueprint.d.ts +46 -0
- package/dist/blueprint.d.ts.map +1 -0
- package/dist/blueprint.js +162 -0
- package/dist/blueprint.js.map +1 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +68 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +76 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +81 -0
- package/dist/config.js.map +1 -0
- package/dist/cron.d.ts +4 -0
- package/dist/cron.d.ts.map +1 -0
- package/dist/cron.js +3 -0
- package/dist/cron.js.map +1 -0
- package/dist/crud-operations.d.ts +43 -0
- package/dist/crud-operations.d.ts.map +1 -0
- package/dist/crud-operations.js +238 -0
- package/dist/crud-operations.js.map +1 -0
- package/dist/database/adapter.d.ts +20 -0
- package/dist/database/adapter.d.ts.map +1 -0
- package/dist/database/adapter.js +2 -0
- package/dist/database/adapter.js.map +1 -0
- package/dist/database/bun-sql.d.ts +3 -0
- package/dist/database/bun-sql.d.ts.map +1 -0
- package/dist/database/bun-sql.js +21 -0
- package/dist/database/bun-sql.js.map +1 -0
- package/dist/database/libsql.d.ts +3 -0
- package/dist/database/libsql.d.ts.map +1 -0
- package/dist/database/libsql.js +22 -0
- package/dist/database/libsql.js.map +1 -0
- package/dist/database/pglite.d.ts +3 -0
- package/dist/database/pglite.d.ts.map +1 -0
- package/dist/database/pglite.js +27 -0
- package/dist/database/pglite.js.map +1 -0
- package/dist/database/postgres-js.d.ts +3 -0
- package/dist/database/postgres-js.d.ts.map +1 -0
- package/dist/database/postgres-js.js +21 -0
- package/dist/database/postgres-js.js.map +1 -0
- package/dist/db.d.ts +18 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +26 -0
- package/dist/db.js.map +1 -0
- package/dist/dialect.d.ts +17 -0
- package/dist/dialect.d.ts.map +1 -0
- package/dist/dialect.js +22 -0
- package/dist/dialect.js.map +1 -0
- package/dist/email/smtp.d.ts +14 -0
- package/dist/email/smtp.d.ts.map +1 -0
- package/dist/email/smtp.js +27 -0
- package/dist/email/smtp.js.map +1 -0
- package/dist/email.d.ts +39 -0
- package/dist/email.d.ts.map +1 -0
- package/dist/email.js +97 -0
- package/dist/email.js.map +1 -0
- package/dist/env.d.ts +47 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +99 -0
- package/dist/env.js.map +1 -0
- package/dist/errors.d.ts +125 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +92 -0
- package/dist/errors.js.map +1 -0
- package/dist/handler.d.ts +9 -0
- package/dist/handler.d.ts.map +1 -0
- package/dist/handler.js +22 -0
- package/dist/handler.js.map +1 -0
- package/dist/idempotency.d.ts +17 -0
- package/dist/idempotency.d.ts.map +1 -0
- package/dist/idempotency.js +65 -0
- package/dist/idempotency.js.map +1 -0
- package/dist/index.d.ts +134 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +477 -0
- package/dist/index.js.map +1 -0
- package/dist/internal-tables-pg.d.ts +481 -0
- package/dist/internal-tables-pg.d.ts.map +1 -0
- package/{src/internal-tables-pg.ts → dist/internal-tables-pg.js} +10 -34
- package/dist/internal-tables-pg.js.map +1 -0
- package/dist/internal-tables.d.ts +2509 -0
- package/dist/internal-tables.d.ts.map +1 -0
- package/dist/internal-tables.js +108 -0
- package/dist/internal-tables.js.map +1 -0
- package/dist/jobs/cron.d.ts +15 -0
- package/dist/jobs/cron.d.ts.map +1 -0
- package/dist/jobs/cron.js +74 -0
- package/dist/jobs/cron.js.map +1 -0
- package/dist/jobs/define.d.ts +133 -0
- package/dist/jobs/define.d.ts.map +1 -0
- package/dist/jobs/define.js +74 -0
- package/dist/jobs/define.js.map +1 -0
- package/dist/jobs/index.d.ts +11 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/index.js +8 -0
- package/dist/jobs/index.js.map +1 -0
- package/dist/jobs/queue.d.ts +6 -0
- package/dist/jobs/queue.d.ts.map +1 -0
- package/dist/jobs/queue.js +55 -0
- package/dist/jobs/queue.js.map +1 -0
- package/dist/jobs/runtime.d.ts +13 -0
- package/dist/jobs/runtime.d.ts.map +1 -0
- package/dist/jobs/runtime.js +46 -0
- package/dist/jobs/runtime.js.map +1 -0
- package/dist/jobs/slots.d.ts +25 -0
- package/dist/jobs/slots.d.ts.map +1 -0
- package/dist/jobs/slots.js +41 -0
- package/dist/jobs/slots.js.map +1 -0
- package/dist/jobs/worker.d.ts +12 -0
- package/dist/jobs/worker.d.ts.map +1 -0
- package/dist/jobs/worker.js +311 -0
- package/dist/jobs/worker.js.map +1 -0
- package/dist/lifecycle.d.ts +10 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +37 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/list-query.d.ts +62 -0
- package/dist/list-query.d.ts.map +1 -0
- package/dist/list-query.js +194 -0
- package/dist/list-query.js.map +1 -0
- package/dist/manifest.d.ts +59 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +167 -0
- package/dist/manifest.js.map +1 -0
- package/dist/provision-internals.d.ts +24 -0
- package/dist/provision-internals.d.ts.map +1 -0
- package/dist/provision-internals.js +7 -0
- package/dist/provision-internals.js.map +1 -0
- package/dist/provision.d.ts +23 -0
- package/dist/provision.d.ts.map +1 -0
- package/dist/provision.js +96 -0
- package/dist/provision.js.map +1 -0
- package/dist/rate-limit.d.ts +7 -0
- package/dist/rate-limit.d.ts.map +1 -0
- package/dist/rate-limit.js +49 -0
- package/dist/rate-limit.js.map +1 -0
- package/dist/realtime/facade.d.ts +18 -0
- package/dist/realtime/facade.d.ts.map +1 -0
- package/dist/realtime/facade.js +36 -0
- package/dist/realtime/facade.js.map +1 -0
- package/dist/realtime/filter.d.ts +13 -0
- package/dist/realtime/filter.d.ts.map +1 -0
- package/dist/realtime/filter.js +48 -0
- package/dist/realtime/filter.js.map +1 -0
- package/dist/realtime/heartbeat.d.ts +14 -0
- package/dist/realtime/heartbeat.d.ts.map +1 -0
- package/dist/realtime/heartbeat.js +64 -0
- package/dist/realtime/heartbeat.js.map +1 -0
- package/dist/realtime/publisher.d.ts +21 -0
- package/dist/realtime/publisher.d.ts.map +1 -0
- package/dist/realtime/publisher.js +17 -0
- package/dist/realtime/publisher.js.map +1 -0
- package/dist/schema-export-pg.d.ts +2 -0
- package/dist/schema-export-pg.d.ts.map +1 -0
- package/dist/schema-export-pg.js +4 -0
- package/dist/schema-export-pg.js.map +1 -0
- package/dist/schema-export.d.ts +2 -0
- package/dist/schema-export.d.ts.map +1 -0
- package/dist/schema-export.js +2 -0
- package/dist/schema-export.js.map +1 -0
- package/dist/scope.d.ts +4 -0
- package/dist/scope.d.ts.map +1 -0
- package/dist/scope.js +13 -0
- package/dist/scope.js.map +1 -0
- package/dist/standard-schema.d.ts +13 -0
- package/dist/standard-schema.d.ts.map +1 -0
- package/dist/standard-schema.js +34 -0
- package/dist/standard-schema.js.map +1 -0
- package/dist/storage/buckets.d.ts +80 -0
- package/dist/storage/buckets.d.ts.map +1 -0
- package/dist/storage/buckets.js +178 -0
- package/dist/storage/buckets.js.map +1 -0
- package/dist/storage/delete.d.ts +11 -0
- package/dist/storage/delete.d.ts.map +1 -0
- package/dist/storage/delete.js +18 -0
- package/dist/storage/delete.js.map +1 -0
- package/dist/storage/file-meta.d.ts +37 -0
- package/dist/storage/file-meta.d.ts.map +1 -0
- package/dist/storage/file-meta.js +166 -0
- package/dist/storage/file-meta.js.map +1 -0
- package/dist/storage/index.d.ts +28 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +5 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/local.d.ts +15 -0
- package/dist/storage/local.d.ts.map +1 -0
- package/dist/storage/local.js +56 -0
- package/dist/storage/local.js.map +1 -0
- package/dist/storage/operations.d.ts +54 -0
- package/dist/storage/operations.d.ts.map +1 -0
- package/dist/storage/operations.js +250 -0
- package/dist/storage/operations.js.map +1 -0
- package/dist/storage/registry.d.ts +10 -0
- package/dist/storage/registry.d.ts.map +1 -0
- package/dist/storage/registry.js +23 -0
- package/dist/storage/registry.js.map +1 -0
- package/dist/storage/s3.d.ts +28 -0
- package/dist/storage/s3.d.ts.map +1 -0
- package/dist/storage/s3.js +71 -0
- package/dist/storage/s3.js.map +1 -0
- package/dist/storage/sweep.d.ts +9 -0
- package/dist/storage/sweep.d.ts.map +1 -0
- package/dist/storage/sweep.js +17 -0
- package/dist/storage/sweep.js.map +1 -0
- package/dist/storage/thumbnails.d.ts +11 -0
- package/dist/storage/thumbnails.d.ts.map +1 -0
- package/dist/storage/thumbnails.js +60 -0
- package/dist/storage/thumbnails.js.map +1 -0
- package/dist/testing.d.ts +27 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +11 -0
- package/dist/testing.js.map +1 -0
- package/dist/typeid-pg.d.ts +19 -0
- package/dist/typeid-pg.d.ts.map +1 -0
- package/{src/typeid-pg.ts → dist/typeid-pg.js} +10 -13
- package/dist/typeid-pg.js.map +1 -0
- package/dist/typeid.d.ts +45 -0
- package/dist/typeid.d.ts.map +1 -0
- package/dist/typeid.js +100 -0
- package/dist/typeid.js.map +1 -0
- package/package.json +81 -29
- package/src/access.ts +0 -552
- package/src/api/api-types.types.ts +0 -106
- package/src/api/builder.ts +0 -52
- package/src/api/context.ts +0 -83
- package/src/api/crud-router.ts +0 -321
- package/src/api/openapi.ts +0 -184
- package/src/api/realtime-router.ts +0 -75
- package/src/api/registry.ts +0 -338
- package/src/api/router.ts +0 -34
- package/src/api/storage-router.ts +0 -224
- package/src/api/types.ts +0 -84
- package/src/auth.ts +0 -117
- package/src/blueprint-generator.ts +0 -203
- package/src/blueprint.ts +0 -264
- package/src/cli.ts +0 -90
- package/src/config.ts +0 -215
- package/src/cron.ts +0 -3
- package/src/crud-operations.ts +0 -488
- package/src/database/adapter.ts +0 -26
- package/src/database/bun-sql.ts +0 -23
- package/src/database/libsql.ts +0 -28
- package/src/database/pglite.ts +0 -33
- package/src/database/postgres-js.ts +0 -33
- package/src/db.ts +0 -61
- package/src/dialect.ts +0 -38
- package/src/email/smtp.ts +0 -45
- package/src/email.ts +0 -154
- package/src/env.ts +0 -180
- package/src/errors.ts +0 -118
- package/src/handler.ts +0 -30
- package/src/idempotency.ts +0 -97
- package/src/index.ts +0 -822
- package/src/internal-tables.ts +0 -149
- package/src/jobs/cron.ts +0 -87
- package/src/jobs/define.ts +0 -283
- package/src/jobs/index.ts +0 -37
- package/src/jobs/queue.ts +0 -67
- package/src/jobs/runtime.ts +0 -58
- package/src/jobs/slots.ts +0 -52
- package/src/jobs/worker.ts +0 -369
- package/src/lifecycle.ts +0 -49
- package/src/list-query.ts +0 -416
- package/src/manifest.ts +0 -297
- package/src/provision-internals.ts +0 -29
- package/src/provision.ts +0 -128
- package/src/rate-limit.ts +0 -71
- package/src/realtime/facade.ts +0 -55
- package/src/realtime/filter.ts +0 -77
- package/src/realtime/heartbeat.ts +0 -80
- package/src/realtime/publisher.ts +0 -46
- package/src/schema-export-pg.ts +0 -7
- package/src/schema-export.ts +0 -5
- package/src/scope.ts +0 -17
- package/src/standard-schema.ts +0 -59
- package/src/storage/buckets.ts +0 -308
- package/src/storage/delete.ts +0 -26
- package/src/storage/file-meta.ts +0 -222
- package/src/storage/index.ts +0 -39
- package/src/storage/local.ts +0 -69
- package/src/storage/operations.ts +0 -398
- package/src/storage/registry.ts +0 -40
- package/src/storage/s3.ts +0 -99
- package/src/storage/sweep.ts +0 -25
- package/src/storage/thumbnails.ts +0 -65
- package/src/testing.ts +0 -31
- package/src/typeid.ts +0 -116
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import { type Table } from 'drizzle-orm';
|
|
2
|
+
import '@orpc/openapi/extensions/route';
|
|
3
|
+
import * as v from 'valibot';
|
|
4
|
+
import type { AnyDb } from '../dialect.js';
|
|
5
|
+
import type { IdempotencyConfig } from '../idempotency.js';
|
|
6
|
+
import type { RealtimeFacade } from '../realtime/facade.js';
|
|
7
|
+
import type { CrudApiRouterFor } from './types.js';
|
|
8
|
+
import { type ResolvedAccess, type ResolvedTableAccess, type TableAccessInput } from '../access.js';
|
|
9
|
+
import { type CrudOperations } from '../crud-operations.js';
|
|
10
|
+
import { createApiBuilder } from './builder.js';
|
|
11
|
+
export type CrudApiRouterOptions<TSchema extends Record<string, unknown> = Record<string, unknown>> = {
|
|
12
|
+
access: ResolvedAccess;
|
|
13
|
+
idempotency?: boolean | IdempotencyConfig;
|
|
14
|
+
realtime?: RealtimeFacade<TSchema>;
|
|
15
|
+
};
|
|
16
|
+
type CrudUpdate<TTable extends Table> = Partial<Omit<TTable['$inferInsert'], 'id'>>;
|
|
17
|
+
/** A filter accepts one value (`=`), a list (`IN`), or null (`IS NULL`). */
|
|
18
|
+
export type ListFilterValue<T> = T | readonly T[] | null | 'null';
|
|
19
|
+
export type ListFilters<TTable extends Table, TFilterable extends string> = {
|
|
20
|
+
[K in Extract<keyof TTable['$inferSelect'], TFilterable>]?: ListFilterValue<TTable['$inferSelect'][K]>;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* The `list` input as callers see it. Filter columns and sortable columns come
|
|
24
|
+
* from the table's `access` entry, so `filters` autocompletes to real columns
|
|
25
|
+
* and rejects wrong value types at compile time.
|
|
26
|
+
*/
|
|
27
|
+
export type ListInputFor<TTable extends Table, TFilterable extends string, TSortable extends string> = {
|
|
28
|
+
limit?: number;
|
|
29
|
+
offset?: number;
|
|
30
|
+
cursor?: string;
|
|
31
|
+
sort?: TSortable;
|
|
32
|
+
order?: 'asc' | 'desc';
|
|
33
|
+
q?: string;
|
|
34
|
+
count?: boolean;
|
|
35
|
+
filters?: ListFilters<TTable, TFilterable>;
|
|
36
|
+
} | undefined;
|
|
37
|
+
export type BuildTableCrudProceduresArgs<TSchema extends Record<string, unknown>, TTable extends Table> = {
|
|
38
|
+
table: TTable;
|
|
39
|
+
operations: CrudOperations;
|
|
40
|
+
builder: ReturnType<typeof createApiBuilder<TSchema>>;
|
|
41
|
+
access: ResolvedTableAccess;
|
|
42
|
+
};
|
|
43
|
+
export declare function buildTableCrudProcedures<TSchema extends Record<string, unknown>, TTable extends Table, TFilterable extends string = string, TSortable extends string = string>(args: BuildTableCrudProceduresArgs<TSchema, TTable>): {
|
|
44
|
+
list: import("@orpc/server").DecoratedProcedure<import("./context.js").ApiContext<TSchema, Record<string, unknown>> & object, object, v.GenericSchema<ListInputFor<TTable, TFilterable, TSortable>, ListInputFor<TTable, TFilterable, TSortable>>, v.StrictObjectSchema<{
|
|
45
|
+
readonly items: v.ArraySchema<v.GenericSchema<TTable["$inferSelect"], TTable["$inferSelect"]>, undefined>;
|
|
46
|
+
readonly nextCursor: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
47
|
+
readonly hasMore: v.BooleanSchema<undefined>;
|
|
48
|
+
readonly total: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
49
|
+
readonly limit: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
50
|
+
readonly offset: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
51
|
+
readonly cursor: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
52
|
+
readonly q: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
53
|
+
readonly sort: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
54
|
+
readonly order: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
55
|
+
}, undefined>, {
|
|
56
|
+
readonly BAD_REQUEST: {
|
|
57
|
+
readonly data: v.StrictObjectSchema<{
|
|
58
|
+
readonly code: v.LiteralSchema<"BAD_REQUEST", undefined>;
|
|
59
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
60
|
+
}, undefined>;
|
|
61
|
+
};
|
|
62
|
+
readonly UNAUTHORIZED: {
|
|
63
|
+
readonly data: v.StrictObjectSchema<{
|
|
64
|
+
readonly code: v.LiteralSchema<"UNAUTHORIZED", undefined>;
|
|
65
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
66
|
+
}, undefined>;
|
|
67
|
+
};
|
|
68
|
+
readonly FORBIDDEN: {
|
|
69
|
+
readonly data: v.StrictObjectSchema<{
|
|
70
|
+
readonly code: v.LiteralSchema<"FORBIDDEN", undefined>;
|
|
71
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
72
|
+
}, undefined>;
|
|
73
|
+
};
|
|
74
|
+
readonly NOT_FOUND: {
|
|
75
|
+
readonly data: v.StrictObjectSchema<{
|
|
76
|
+
readonly code: v.LiteralSchema<"NOT_FOUND", undefined>;
|
|
77
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
78
|
+
}, undefined>;
|
|
79
|
+
};
|
|
80
|
+
readonly CONFLICT: {
|
|
81
|
+
readonly data: v.StrictObjectSchema<{
|
|
82
|
+
readonly code: v.LiteralSchema<"CONFLICT", undefined>;
|
|
83
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
84
|
+
}, undefined>;
|
|
85
|
+
};
|
|
86
|
+
readonly PAYLOAD_TOO_LARGE: {
|
|
87
|
+
readonly data: v.StrictObjectSchema<{
|
|
88
|
+
readonly code: v.LiteralSchema<"PAYLOAD_TOO_LARGE", undefined>;
|
|
89
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
90
|
+
}, undefined>;
|
|
91
|
+
};
|
|
92
|
+
readonly TOO_MANY_REQUESTS: {
|
|
93
|
+
readonly data: v.StrictObjectSchema<{
|
|
94
|
+
readonly code: v.LiteralSchema<"TOO_MANY_REQUESTS", undefined>;
|
|
95
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
96
|
+
}, undefined>;
|
|
97
|
+
};
|
|
98
|
+
}, never>;
|
|
99
|
+
get: import("@orpc/server").DecoratedProcedure<import("./context.js").ApiContext<TSchema, Record<string, unknown>> & object, object, v.StrictObjectSchema<{
|
|
100
|
+
readonly id: v.StringSchema<undefined>;
|
|
101
|
+
}, undefined>, v.GenericSchema<TTable["$inferSelect"], TTable["$inferSelect"]>, {
|
|
102
|
+
readonly BAD_REQUEST: {
|
|
103
|
+
readonly data: v.StrictObjectSchema<{
|
|
104
|
+
readonly code: v.LiteralSchema<"BAD_REQUEST", undefined>;
|
|
105
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
106
|
+
}, undefined>;
|
|
107
|
+
};
|
|
108
|
+
readonly UNAUTHORIZED: {
|
|
109
|
+
readonly data: v.StrictObjectSchema<{
|
|
110
|
+
readonly code: v.LiteralSchema<"UNAUTHORIZED", undefined>;
|
|
111
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
112
|
+
}, undefined>;
|
|
113
|
+
};
|
|
114
|
+
readonly FORBIDDEN: {
|
|
115
|
+
readonly data: v.StrictObjectSchema<{
|
|
116
|
+
readonly code: v.LiteralSchema<"FORBIDDEN", undefined>;
|
|
117
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
118
|
+
}, undefined>;
|
|
119
|
+
};
|
|
120
|
+
readonly NOT_FOUND: {
|
|
121
|
+
readonly data: v.StrictObjectSchema<{
|
|
122
|
+
readonly code: v.LiteralSchema<"NOT_FOUND", undefined>;
|
|
123
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
124
|
+
}, undefined>;
|
|
125
|
+
};
|
|
126
|
+
readonly CONFLICT: {
|
|
127
|
+
readonly data: v.StrictObjectSchema<{
|
|
128
|
+
readonly code: v.LiteralSchema<"CONFLICT", undefined>;
|
|
129
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
130
|
+
}, undefined>;
|
|
131
|
+
};
|
|
132
|
+
readonly PAYLOAD_TOO_LARGE: {
|
|
133
|
+
readonly data: v.StrictObjectSchema<{
|
|
134
|
+
readonly code: v.LiteralSchema<"PAYLOAD_TOO_LARGE", undefined>;
|
|
135
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
136
|
+
}, undefined>;
|
|
137
|
+
};
|
|
138
|
+
readonly TOO_MANY_REQUESTS: {
|
|
139
|
+
readonly data: v.StrictObjectSchema<{
|
|
140
|
+
readonly code: v.LiteralSchema<"TOO_MANY_REQUESTS", undefined>;
|
|
141
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
142
|
+
}, undefined>;
|
|
143
|
+
};
|
|
144
|
+
}, Extract<TTable["$inferSelect"], import("@orpc/server").AnyORPCError>>;
|
|
145
|
+
create: import("@orpc/server").DecoratedProcedure<import("./context.js").ApiContext<TSchema, Record<string, unknown>> & object, object, v.GenericSchema<Partial<TTable["$inferInsert"]>, Partial<TTable["$inferInsert"]>>, v.GenericSchema<TTable["$inferSelect"], TTable["$inferSelect"]>, {
|
|
146
|
+
readonly BAD_REQUEST: {
|
|
147
|
+
readonly data: v.StrictObjectSchema<{
|
|
148
|
+
readonly code: v.LiteralSchema<"BAD_REQUEST", undefined>;
|
|
149
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
150
|
+
}, undefined>;
|
|
151
|
+
};
|
|
152
|
+
readonly UNAUTHORIZED: {
|
|
153
|
+
readonly data: v.StrictObjectSchema<{
|
|
154
|
+
readonly code: v.LiteralSchema<"UNAUTHORIZED", undefined>;
|
|
155
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
156
|
+
}, undefined>;
|
|
157
|
+
};
|
|
158
|
+
readonly FORBIDDEN: {
|
|
159
|
+
readonly data: v.StrictObjectSchema<{
|
|
160
|
+
readonly code: v.LiteralSchema<"FORBIDDEN", undefined>;
|
|
161
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
162
|
+
}, undefined>;
|
|
163
|
+
};
|
|
164
|
+
readonly NOT_FOUND: {
|
|
165
|
+
readonly data: v.StrictObjectSchema<{
|
|
166
|
+
readonly code: v.LiteralSchema<"NOT_FOUND", undefined>;
|
|
167
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
168
|
+
}, undefined>;
|
|
169
|
+
};
|
|
170
|
+
readonly CONFLICT: {
|
|
171
|
+
readonly data: v.StrictObjectSchema<{
|
|
172
|
+
readonly code: v.LiteralSchema<"CONFLICT", undefined>;
|
|
173
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
174
|
+
}, undefined>;
|
|
175
|
+
};
|
|
176
|
+
readonly PAYLOAD_TOO_LARGE: {
|
|
177
|
+
readonly data: v.StrictObjectSchema<{
|
|
178
|
+
readonly code: v.LiteralSchema<"PAYLOAD_TOO_LARGE", undefined>;
|
|
179
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
180
|
+
}, undefined>;
|
|
181
|
+
};
|
|
182
|
+
readonly TOO_MANY_REQUESTS: {
|
|
183
|
+
readonly data: v.StrictObjectSchema<{
|
|
184
|
+
readonly code: v.LiteralSchema<"TOO_MANY_REQUESTS", undefined>;
|
|
185
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
186
|
+
}, undefined>;
|
|
187
|
+
};
|
|
188
|
+
}, Extract<TTable["$inferSelect"], import("@orpc/server").AnyORPCError>>;
|
|
189
|
+
update: import("@orpc/server").DecoratedProcedure<import("./context.js").ApiContext<TSchema, Record<string, unknown>> & object, object, v.StrictObjectSchema<{
|
|
190
|
+
readonly params: v.StrictObjectSchema<{
|
|
191
|
+
readonly id: v.StringSchema<undefined>;
|
|
192
|
+
}, undefined>;
|
|
193
|
+
readonly query: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, {}>;
|
|
194
|
+
readonly headers: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, {}>;
|
|
195
|
+
readonly body: v.GenericSchema<CrudUpdate<TTable>, CrudUpdate<TTable>>;
|
|
196
|
+
}, undefined>, v.GenericSchema<TTable["$inferSelect"], TTable["$inferSelect"]>, {
|
|
197
|
+
readonly BAD_REQUEST: {
|
|
198
|
+
readonly data: v.StrictObjectSchema<{
|
|
199
|
+
readonly code: v.LiteralSchema<"BAD_REQUEST", undefined>;
|
|
200
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
201
|
+
}, undefined>;
|
|
202
|
+
};
|
|
203
|
+
readonly UNAUTHORIZED: {
|
|
204
|
+
readonly data: v.StrictObjectSchema<{
|
|
205
|
+
readonly code: v.LiteralSchema<"UNAUTHORIZED", undefined>;
|
|
206
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
207
|
+
}, undefined>;
|
|
208
|
+
};
|
|
209
|
+
readonly FORBIDDEN: {
|
|
210
|
+
readonly data: v.StrictObjectSchema<{
|
|
211
|
+
readonly code: v.LiteralSchema<"FORBIDDEN", undefined>;
|
|
212
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
213
|
+
}, undefined>;
|
|
214
|
+
};
|
|
215
|
+
readonly NOT_FOUND: {
|
|
216
|
+
readonly data: v.StrictObjectSchema<{
|
|
217
|
+
readonly code: v.LiteralSchema<"NOT_FOUND", undefined>;
|
|
218
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
219
|
+
}, undefined>;
|
|
220
|
+
};
|
|
221
|
+
readonly CONFLICT: {
|
|
222
|
+
readonly data: v.StrictObjectSchema<{
|
|
223
|
+
readonly code: v.LiteralSchema<"CONFLICT", undefined>;
|
|
224
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
225
|
+
}, undefined>;
|
|
226
|
+
};
|
|
227
|
+
readonly PAYLOAD_TOO_LARGE: {
|
|
228
|
+
readonly data: v.StrictObjectSchema<{
|
|
229
|
+
readonly code: v.LiteralSchema<"PAYLOAD_TOO_LARGE", undefined>;
|
|
230
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
231
|
+
}, undefined>;
|
|
232
|
+
};
|
|
233
|
+
readonly TOO_MANY_REQUESTS: {
|
|
234
|
+
readonly data: v.StrictObjectSchema<{
|
|
235
|
+
readonly code: v.LiteralSchema<"TOO_MANY_REQUESTS", undefined>;
|
|
236
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
237
|
+
}, undefined>;
|
|
238
|
+
};
|
|
239
|
+
}, Extract<TTable["$inferSelect"], import("@orpc/server").AnyORPCError>>;
|
|
240
|
+
delete: import("@orpc/server").DecoratedProcedure<import("./context.js").ApiContext<TSchema, Record<string, unknown>> & object, object, v.StrictObjectSchema<{
|
|
241
|
+
readonly id: v.StringSchema<undefined>;
|
|
242
|
+
}, undefined>, v.UndefinedSchema<undefined>, {
|
|
243
|
+
readonly BAD_REQUEST: {
|
|
244
|
+
readonly data: v.StrictObjectSchema<{
|
|
245
|
+
readonly code: v.LiteralSchema<"BAD_REQUEST", undefined>;
|
|
246
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
247
|
+
}, undefined>;
|
|
248
|
+
};
|
|
249
|
+
readonly UNAUTHORIZED: {
|
|
250
|
+
readonly data: v.StrictObjectSchema<{
|
|
251
|
+
readonly code: v.LiteralSchema<"UNAUTHORIZED", undefined>;
|
|
252
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
253
|
+
}, undefined>;
|
|
254
|
+
};
|
|
255
|
+
readonly FORBIDDEN: {
|
|
256
|
+
readonly data: v.StrictObjectSchema<{
|
|
257
|
+
readonly code: v.LiteralSchema<"FORBIDDEN", undefined>;
|
|
258
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
259
|
+
}, undefined>;
|
|
260
|
+
};
|
|
261
|
+
readonly NOT_FOUND: {
|
|
262
|
+
readonly data: v.StrictObjectSchema<{
|
|
263
|
+
readonly code: v.LiteralSchema<"NOT_FOUND", undefined>;
|
|
264
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
265
|
+
}, undefined>;
|
|
266
|
+
};
|
|
267
|
+
readonly CONFLICT: {
|
|
268
|
+
readonly data: v.StrictObjectSchema<{
|
|
269
|
+
readonly code: v.LiteralSchema<"CONFLICT", undefined>;
|
|
270
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
271
|
+
}, undefined>;
|
|
272
|
+
};
|
|
273
|
+
readonly PAYLOAD_TOO_LARGE: {
|
|
274
|
+
readonly data: v.StrictObjectSchema<{
|
|
275
|
+
readonly code: v.LiteralSchema<"PAYLOAD_TOO_LARGE", undefined>;
|
|
276
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
277
|
+
}, undefined>;
|
|
278
|
+
};
|
|
279
|
+
readonly TOO_MANY_REQUESTS: {
|
|
280
|
+
readonly data: v.StrictObjectSchema<{
|
|
281
|
+
readonly code: v.LiteralSchema<"TOO_MANY_REQUESTS", undefined>;
|
|
282
|
+
readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
|
|
283
|
+
}, undefined>;
|
|
284
|
+
};
|
|
285
|
+
}, never>;
|
|
286
|
+
};
|
|
287
|
+
export type TableCrudProcedures<TTable extends Table, TFilterable extends string = string, TSortable extends string = string> = ReturnType<typeof buildTableCrudProcedures<Record<string, unknown>, TTable, TFilterable, TSortable>>;
|
|
288
|
+
export declare function buildCrudApiRouter<TSchema extends Record<string, unknown>, TAccess extends Record<string, TableAccessInput> | undefined = undefined>(schema: TSchema, db: AnyDb, options: CrudApiRouterOptions<TSchema>): CrudApiRouterFor<TSchema, TAccess>;
|
|
289
|
+
export {};
|
|
290
|
+
//# sourceMappingURL=crud-router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crud-router.d.ts","sourceRoot":"","sources":["../../src/api/crud-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import { getTableColumns, getTableName, isTable } from 'drizzle-orm';
|
|
2
|
+
import { createInsertSchema, createSelectSchema, createUpdateSchema, } from 'drizzle-valibot';
|
|
3
|
+
import '@orpc/openapi/extensions/route';
|
|
4
|
+
import * as v from 'valibot';
|
|
5
|
+
import { tableEntryForName, } from '../access.js';
|
|
6
|
+
import { createCrudOperations } from '../crud-operations.js';
|
|
7
|
+
import { MAX_LIST_LIMIT } from '../list-query.js';
|
|
8
|
+
import { createApiBuilder } from './builder.js';
|
|
9
|
+
function strictObject(schema) {
|
|
10
|
+
return v.strictObject(schema.entries);
|
|
11
|
+
}
|
|
12
|
+
export function buildTableCrudProcedures(args) {
|
|
13
|
+
const { table, operations, builder, access } = args;
|
|
14
|
+
const name = getTableName(table);
|
|
15
|
+
// drizzle-valibot infers its schemas through internal generics. Left as-is,
|
|
16
|
+
// declaration emit inlines those generics by name into the published `.d.ts`,
|
|
17
|
+
// where they are unbound — every column silently becomes optional for the
|
|
18
|
+
// consumer. Restating the type keeps the runtime schema and makes the emitted
|
|
19
|
+
// one both correct and readable.
|
|
20
|
+
const selectSchema = strictObject(createSelectSchema(table));
|
|
21
|
+
const generatedInsertSchema = strictObject(createInsertSchema(table));
|
|
22
|
+
const generatedColumns = Object.keys(generatedInsertSchema.entries);
|
|
23
|
+
const columns = getTableColumns(table);
|
|
24
|
+
const serverManagedColumns = [
|
|
25
|
+
...access.readonlyColumns,
|
|
26
|
+
...(access.writeScope && generatedColumns.includes('organizationId')
|
|
27
|
+
? ['organizationId']
|
|
28
|
+
: []),
|
|
29
|
+
...Object.entries(columns)
|
|
30
|
+
.filter(([, column]) => !column.notNull || column.hasDefault)
|
|
31
|
+
.map(([column]) => column),
|
|
32
|
+
].filter((column) => generatedColumns.includes(column));
|
|
33
|
+
const insertEntries = {
|
|
34
|
+
...generatedInsertSchema.entries,
|
|
35
|
+
};
|
|
36
|
+
for (const column of serverManagedColumns) {
|
|
37
|
+
const schema = insertEntries[column];
|
|
38
|
+
if (schema)
|
|
39
|
+
insertEntries[column] = v.optional(schema);
|
|
40
|
+
}
|
|
41
|
+
const insertSchema = v.strictObject(insertEntries);
|
|
42
|
+
const generatedUpdateSchema = createUpdateSchema(table);
|
|
43
|
+
const updateBodySchema = v.omit(generatedUpdateSchema, [
|
|
44
|
+
'id',
|
|
45
|
+
]);
|
|
46
|
+
const updateInputSchema = v.strictObject({
|
|
47
|
+
params: v.strictObject({ id: v.string() }),
|
|
48
|
+
query: v.optional(v.record(v.string(), v.unknown()), {}),
|
|
49
|
+
headers: v.optional(v.record(v.string(), v.unknown()), {}),
|
|
50
|
+
// Same reason as `selectSchema`: state the type instead of letting
|
|
51
|
+
// declaration emit inline drizzle-valibot's generics.
|
|
52
|
+
body: strictObject(updateBodySchema),
|
|
53
|
+
});
|
|
54
|
+
// One filter field per allowed column, typed by the column itself: a scalar
|
|
55
|
+
// for `=`, a list for `IN`, and `null` for `IS NULL`. Query strings are
|
|
56
|
+
// coerced to these types by SmartCoercionHandlerPlugin, so REST and RPC share
|
|
57
|
+
// one contract and nothing has to re-read the raw URL.
|
|
58
|
+
const selectEntries = createSelectSchema(table).entries;
|
|
59
|
+
const filterEntries = {};
|
|
60
|
+
for (const column of access.filterableColumns) {
|
|
61
|
+
const base = selectEntries[column];
|
|
62
|
+
if (!base)
|
|
63
|
+
continue;
|
|
64
|
+
filterEntries[column] = v.optional(v.union([
|
|
65
|
+
// `?filters[col]=null` — a query string cannot carry a real null.
|
|
66
|
+
v.pipe(v.literal('null'), v.transform(() => null)),
|
|
67
|
+
base,
|
|
68
|
+
v.pipe(v.array(base), v.maxLength(MAX_LIST_LIMIT)),
|
|
69
|
+
v.null(),
|
|
70
|
+
]));
|
|
71
|
+
}
|
|
72
|
+
// Built from runtime column lists, so the schema's own inferred type cannot
|
|
73
|
+
// name the columns; the cast restates it with the literals the caller's
|
|
74
|
+
// `access` config carries. Runtime shape and this type are the same object.
|
|
75
|
+
const listQuerySchema = v.optional(v.strictObject({
|
|
76
|
+
limit: v.optional(v.pipe(v.number(), v.integer(), v.minValue(1))),
|
|
77
|
+
offset: v.optional(v.pipe(v.number(), v.integer(), v.minValue(0))),
|
|
78
|
+
cursor: v.optional(v.string()),
|
|
79
|
+
sort: v.optional(v.picklist(access.sortableColumns)),
|
|
80
|
+
order: v.optional(v.picklist(['asc', 'desc'])),
|
|
81
|
+
q: v.optional(v.pipe(v.string(), v.maxLength(100))),
|
|
82
|
+
count: v.optional(v.boolean()),
|
|
83
|
+
// Always present, even with no filterable columns: clients send `{}`.
|
|
84
|
+
filters: v.optional(v.strictObject(filterEntries)),
|
|
85
|
+
}));
|
|
86
|
+
const listOutputSchema = v.strictObject({
|
|
87
|
+
items: v.array(selectSchema),
|
|
88
|
+
nextCursor: v.optional(v.string()),
|
|
89
|
+
hasMore: v.boolean(),
|
|
90
|
+
total: v.optional(v.number()),
|
|
91
|
+
limit: v.optional(v.number()),
|
|
92
|
+
offset: v.optional(v.number()),
|
|
93
|
+
cursor: v.optional(v.string()),
|
|
94
|
+
q: v.optional(v.string()),
|
|
95
|
+
sort: v.optional(v.string()),
|
|
96
|
+
order: v.optional(v.string()),
|
|
97
|
+
});
|
|
98
|
+
// 1. LIST procedure
|
|
99
|
+
const list = builder.public
|
|
100
|
+
.route({
|
|
101
|
+
method: 'GET',
|
|
102
|
+
path: `/api/${name}`,
|
|
103
|
+
summary: `List ${name}`,
|
|
104
|
+
tags: [name],
|
|
105
|
+
})
|
|
106
|
+
.input(listQuerySchema)
|
|
107
|
+
.output(listOutputSchema)
|
|
108
|
+
.handler(async ({ input, context }) => {
|
|
109
|
+
const session = await context.getSession();
|
|
110
|
+
const execCtx = {
|
|
111
|
+
request: context.request,
|
|
112
|
+
user: session.user,
|
|
113
|
+
session: { activeOrganizationId: session.activeOrganizationId },
|
|
114
|
+
};
|
|
115
|
+
const result = await operations.list(name, input ?? {}, execCtx);
|
|
116
|
+
return {
|
|
117
|
+
...result,
|
|
118
|
+
items: result.items,
|
|
119
|
+
};
|
|
120
|
+
});
|
|
121
|
+
// 2. GET procedure
|
|
122
|
+
const get = builder.public
|
|
123
|
+
.route({
|
|
124
|
+
method: 'GET',
|
|
125
|
+
path: `/api/${name}/{id}`,
|
|
126
|
+
summary: `Get ${name} by ID`,
|
|
127
|
+
tags: [name],
|
|
128
|
+
})
|
|
129
|
+
.input(v.strictObject({ id: v.string() }))
|
|
130
|
+
.output(selectSchema)
|
|
131
|
+
.handler(async ({ input, context }) => {
|
|
132
|
+
const session = await context.getSession();
|
|
133
|
+
const execCtx = {
|
|
134
|
+
request: context.request,
|
|
135
|
+
user: session.user,
|
|
136
|
+
session: { activeOrganizationId: session.activeOrganizationId },
|
|
137
|
+
};
|
|
138
|
+
return (await operations.get(name, input.id, execCtx));
|
|
139
|
+
});
|
|
140
|
+
// 3. CREATE procedure
|
|
141
|
+
const create = builder.public
|
|
142
|
+
.route({
|
|
143
|
+
method: 'POST',
|
|
144
|
+
path: `/api/${name}`,
|
|
145
|
+
summary: `Create ${name}`,
|
|
146
|
+
tags: [name],
|
|
147
|
+
successStatus: 201,
|
|
148
|
+
})
|
|
149
|
+
.input(insertSchema)
|
|
150
|
+
.output(selectSchema)
|
|
151
|
+
.handler(async ({ input, context }) => {
|
|
152
|
+
const session = await context.getSession();
|
|
153
|
+
const execCtx = {
|
|
154
|
+
request: context.request,
|
|
155
|
+
user: session.user,
|
|
156
|
+
session: { activeOrganizationId: session.activeOrganizationId },
|
|
157
|
+
};
|
|
158
|
+
const idempotencyKey = context.request.headers
|
|
159
|
+
.get('Idempotency-Key')
|
|
160
|
+
?.trim();
|
|
161
|
+
const rawBody = await context.getRawBody();
|
|
162
|
+
const res = await operations.create(name, input, rawBody, idempotencyKey, execCtx);
|
|
163
|
+
if (res.type === 'replay') {
|
|
164
|
+
context.resHeaders.set('Idempotency-Replayed', 'true');
|
|
165
|
+
return res.record;
|
|
166
|
+
}
|
|
167
|
+
return res.record;
|
|
168
|
+
});
|
|
169
|
+
// 4. UPDATE procedure
|
|
170
|
+
const update = builder.public
|
|
171
|
+
.route({
|
|
172
|
+
method: 'PATCH',
|
|
173
|
+
path: `/api/${name}/{id}`,
|
|
174
|
+
summary: `Update ${name}`,
|
|
175
|
+
tags: [name],
|
|
176
|
+
inputStructure: 'detailed',
|
|
177
|
+
})
|
|
178
|
+
.input(updateInputSchema)
|
|
179
|
+
.output(selectSchema)
|
|
180
|
+
.handler(async ({ input, context }) => {
|
|
181
|
+
const session = await context.getSession();
|
|
182
|
+
const execCtx = {
|
|
183
|
+
request: context.request,
|
|
184
|
+
user: session.user,
|
|
185
|
+
session: { activeOrganizationId: session.activeOrganizationId },
|
|
186
|
+
};
|
|
187
|
+
return (await operations.update(name, input.params.id, input.body, execCtx));
|
|
188
|
+
});
|
|
189
|
+
// 5. DELETE procedure
|
|
190
|
+
const deleteProc = builder.public
|
|
191
|
+
.route({
|
|
192
|
+
method: 'DELETE',
|
|
193
|
+
path: `/api/${name}/{id}`,
|
|
194
|
+
summary: `Delete ${name}`,
|
|
195
|
+
tags: [name],
|
|
196
|
+
successStatus: 204,
|
|
197
|
+
})
|
|
198
|
+
.input(v.strictObject({ id: v.string() }))
|
|
199
|
+
.output(v.undefined())
|
|
200
|
+
.handler(async ({ input, context }) => {
|
|
201
|
+
const session = await context.getSession();
|
|
202
|
+
const execCtx = {
|
|
203
|
+
request: context.request,
|
|
204
|
+
user: session.user,
|
|
205
|
+
session: { activeOrganizationId: session.activeOrganizationId },
|
|
206
|
+
};
|
|
207
|
+
await operations.delete(name, input.id, execCtx);
|
|
208
|
+
return undefined;
|
|
209
|
+
});
|
|
210
|
+
return {
|
|
211
|
+
list,
|
|
212
|
+
get,
|
|
213
|
+
create,
|
|
214
|
+
update,
|
|
215
|
+
delete: deleteProc,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
export function buildCrudApiRouter(schema, db, options) {
|
|
219
|
+
const { access, realtime, idempotency } = options;
|
|
220
|
+
const builder = createApiBuilder();
|
|
221
|
+
const operations = createCrudOperations({
|
|
222
|
+
schema,
|
|
223
|
+
db,
|
|
224
|
+
access,
|
|
225
|
+
idempotency,
|
|
226
|
+
realtime,
|
|
227
|
+
});
|
|
228
|
+
const routerObj = {};
|
|
229
|
+
for (const [tableKey, table] of Object.entries(schema)) {
|
|
230
|
+
if (!isTable(table))
|
|
231
|
+
continue;
|
|
232
|
+
const name = getTableName(table);
|
|
233
|
+
const tableAccess = tableEntryForName(access, name);
|
|
234
|
+
if (!tableAccess?.enabled)
|
|
235
|
+
continue;
|
|
236
|
+
const idCol = getTableColumns(table)['id'];
|
|
237
|
+
if (!idCol)
|
|
238
|
+
continue;
|
|
239
|
+
const procedures = buildTableCrudProcedures({
|
|
240
|
+
table: table,
|
|
241
|
+
operations,
|
|
242
|
+
builder,
|
|
243
|
+
access: tableAccess,
|
|
244
|
+
});
|
|
245
|
+
routerObj[tableKey] = procedures;
|
|
246
|
+
}
|
|
247
|
+
return routerObj;
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=crud-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crud-router.js","sourceRoot":"","sources":["../../src/api/crud-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../../src/api/openapi.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAC/B;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,wBAAwB,GAChC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAsKrB"}
|