@zenstackhq/server 3.0.0-beta.12 → 3.0.0-beta.14
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/dist/api.cjs +1767 -19
- package/dist/api.cjs.map +1 -1
- package/dist/api.d.cts +123 -4
- package/dist/api.d.ts +123 -4
- package/dist/api.js +1762 -15
- package/dist/api.js.map +1 -1
- package/dist/common-6DG-xEmM.d.cts +14 -0
- package/dist/common-CyapsM8n.d.ts +14 -0
- package/dist/elysia.cjs +118 -0
- package/dist/elysia.cjs.map +1 -0
- package/dist/elysia.d.cts +53 -0
- package/dist/elysia.d.ts +53 -0
- package/dist/elysia.js +83 -0
- package/dist/elysia.js.map +1 -0
- package/dist/express.cjs +41 -3
- package/dist/express.cjs.map +1 -1
- package/dist/express.d.cts +7 -7
- package/dist/express.d.ts +7 -7
- package/dist/express.js +30 -2
- package/dist/express.js.map +1 -1
- package/dist/fastify.cjs +103 -0
- package/dist/fastify.cjs.map +1 -0
- package/dist/fastify.d.cts +22 -0
- package/dist/fastify.d.ts +22 -0
- package/dist/fastify.js +68 -0
- package/dist/fastify.js.map +1 -0
- package/dist/hono.cjs +111 -0
- package/dist/hono.cjs.map +1 -0
- package/dist/hono.d.cts +18 -0
- package/dist/hono.d.ts +18 -0
- package/dist/hono.js +76 -0
- package/dist/hono.js.map +1 -0
- package/dist/next.cjs +178 -0
- package/dist/next.cjs.map +1 -0
- package/dist/next.d.cts +61 -0
- package/dist/next.d.ts +61 -0
- package/dist/next.js +143 -0
- package/dist/next.js.map +1 -0
- package/dist/nuxt.cjs +109 -0
- package/dist/nuxt.cjs.map +1 -0
- package/dist/nuxt.d.cts +19 -0
- package/dist/nuxt.d.ts +19 -0
- package/dist/nuxt.js +74 -0
- package/dist/nuxt.js.map +1 -0
- package/dist/sveltekit.cjs +134 -0
- package/dist/sveltekit.cjs.map +1 -0
- package/dist/sveltekit.d.cts +25 -0
- package/dist/sveltekit.d.ts +25 -0
- package/dist/sveltekit.js +99 -0
- package/dist/sveltekit.js.map +1 -0
- package/dist/tanstack-start.cjs +139 -0
- package/dist/tanstack-start.cjs.map +1 -0
- package/dist/tanstack-start.d.cts +32 -0
- package/dist/tanstack-start.d.ts +32 -0
- package/dist/tanstack-start.js +104 -0
- package/dist/tanstack-start.js.map +1 -0
- package/dist/{types-BH-88xJo.d.cts → types-D5t0sUEw.d.cts} +6 -2
- package/dist/{types-BH-88xJo.d.ts → types-D5t0sUEw.d.ts} +6 -2
- package/package.json +120 -8
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
|
|
4
|
+
// src/api/utils.ts
|
|
5
|
+
import { Decimal } from "decimal.js";
|
|
6
|
+
import SuperJSON from "superjson";
|
|
7
|
+
import { match } from "ts-pattern";
|
|
8
|
+
import { fromError as fromError3 } from "zod-validation-error/v3";
|
|
9
|
+
import { fromError as fromError4 } from "zod-validation-error/v4";
|
|
10
|
+
function log(logger, level, message, error) {
|
|
11
|
+
if (!logger) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const getMessage = typeof message === "function" ? message : () => message;
|
|
15
|
+
if (typeof logger === "function") {
|
|
16
|
+
logger(level, getMessage(), error);
|
|
17
|
+
} else if (logger.includes(level)) {
|
|
18
|
+
const logFn = match(level).with("debug", () => console.debug).with("info", () => console.info).with("warn", () => console.warn).with("error", () => console.error).exhaustive();
|
|
19
|
+
logFn(`@zenstackhq/server: [${level}] ${getMessage()}${error ? `
|
|
20
|
+
${error}` : ""}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
__name(log, "log");
|
|
24
|
+
|
|
25
|
+
// src/adapter/common.ts
|
|
26
|
+
function logInternalError(logger, err) {
|
|
27
|
+
log(logger, "error", `An unhandled error occurred while processing the request: ${err}${err instanceof Error ? "\n" + err.stack : ""}`);
|
|
28
|
+
}
|
|
29
|
+
__name(logInternalError, "logInternalError");
|
|
30
|
+
|
|
31
|
+
// src/adapter/sveltekit/handler.ts
|
|
32
|
+
function createHandler(options) {
|
|
33
|
+
return async ({ event, resolve }) => {
|
|
34
|
+
if (event.url.pathname.startsWith(options.prefix)) {
|
|
35
|
+
const client = await options.getClient(event);
|
|
36
|
+
if (!client) {
|
|
37
|
+
return new Response(JSON.stringify({
|
|
38
|
+
message: "unable to get ZenStackClient from request context"
|
|
39
|
+
}), {
|
|
40
|
+
status: 400,
|
|
41
|
+
headers: {
|
|
42
|
+
"content-type": "application/json"
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
const query = Object.fromEntries(event.url.searchParams);
|
|
47
|
+
let requestBody;
|
|
48
|
+
if (event.request.body) {
|
|
49
|
+
try {
|
|
50
|
+
const text = await event.request.text();
|
|
51
|
+
if (text) {
|
|
52
|
+
requestBody = JSON.parse(text);
|
|
53
|
+
}
|
|
54
|
+
} catch {
|
|
55
|
+
return new Response(JSON.stringify({
|
|
56
|
+
message: "invalid JSON payload"
|
|
57
|
+
}), {
|
|
58
|
+
status: 400,
|
|
59
|
+
headers: {
|
|
60
|
+
"content-type": "application/json"
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const path = event.url.pathname.substring(options.prefix.length);
|
|
66
|
+
try {
|
|
67
|
+
const r = await options.apiHandler.handleRequest({
|
|
68
|
+
method: event.request.method,
|
|
69
|
+
path,
|
|
70
|
+
query,
|
|
71
|
+
requestBody,
|
|
72
|
+
client
|
|
73
|
+
});
|
|
74
|
+
return new Response(JSON.stringify(r.body), {
|
|
75
|
+
status: r.status,
|
|
76
|
+
headers: {
|
|
77
|
+
"content-type": "application/json"
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
} catch (err) {
|
|
81
|
+
logInternalError(options.apiHandler.log, err);
|
|
82
|
+
return new Response(JSON.stringify({
|
|
83
|
+
message: "An internal server error occurred"
|
|
84
|
+
}), {
|
|
85
|
+
status: 500,
|
|
86
|
+
headers: {
|
|
87
|
+
"content-type": "application/json"
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return resolve(event);
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
__name(createHandler, "createHandler");
|
|
96
|
+
export {
|
|
97
|
+
createHandler as SvelteKitHandler
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=sveltekit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/api/utils.ts","../src/adapter/common.ts","../src/adapter/sveltekit/handler.ts"],"sourcesContent":["import { Decimal } from 'decimal.js';\nimport SuperJSON from 'superjson';\nimport { match } from 'ts-pattern';\nimport { ZodError } from 'zod';\nimport { fromError as fromError3 } from 'zod-validation-error/v3';\nimport { fromError as fromError4 } from 'zod-validation-error/v4';\nimport type { LogConfig, LogLevel } from '../types';\n\nexport function log(logger: LogConfig | undefined, level: LogLevel, message: string | (() => string), error?: unknown) {\n if (!logger) {\n return;\n }\n\n const getMessage = typeof message === 'function' ? message : () => message;\n\n if (typeof logger === 'function') {\n logger(level, getMessage(), error);\n } else if (logger.includes(level)) {\n const logFn = match(level)\n .with('debug', () => console.debug)\n .with('info', () => console.info)\n .with('warn', () => console.warn)\n .with('error', () => console.error)\n .exhaustive();\n logFn(`@zenstackhq/server: [${level}] ${getMessage()}${error ? `\\n${error}` : ''}`);\n }\n}\n\n/**\n * Registers custom superjson serializers.\n */\nexport function registerCustomSerializers() {\n SuperJSON.registerCustom<Decimal, string>(\n {\n isApplicable: (v): v is Decimal => Decimal.isDecimal(v),\n serialize: (v) => v.toJSON(),\n deserialize: (v) => new Decimal(v),\n },\n 'Decimal',\n );\n\n // `Buffer` is not available in edge runtime\n if (globalThis.Buffer) {\n SuperJSON.registerCustom<Buffer, string>(\n {\n isApplicable: (v): v is Buffer => Buffer.isBuffer(v),\n serialize: (v) => v.toString('base64'),\n deserialize: (v) => Buffer.from(v, 'base64'),\n },\n 'Bytes',\n );\n }\n}\n\n/**\n * Format ZodError into a readable string\n */\nexport function getZodErrorMessage(error: ZodError): string {\n if ('_zod' in error) {\n return fromError4(error).toString();\n } else {\n return fromError3(error).toString();\n }\n}\n","import type { SchemaDef } from '@zenstackhq/orm/schema';\nimport { log } from '../api/utils';\nimport type { ApiHandler, LogConfig } from '../types';\n\n/**\n * Options common to all adapters\n */\nexport interface CommonAdapterOptions<Schema extends SchemaDef> {\n /**\n * The API handler to process requests\n */\n apiHandler: ApiHandler<Schema>;\n}\n\nexport function logInternalError(logger: LogConfig | undefined, err: unknown) {\n log(\n logger,\n 'error',\n `An unhandled error occurred while processing the request: ${err}${err instanceof Error ? '\\n' + err.stack : ''}`,\n );\n}\n","import { type Handle, type RequestEvent } from '@sveltejs/kit';\nimport type { ClientContract } from '@zenstackhq/orm';\nimport type { SchemaDef } from '@zenstackhq/orm/schema';\nimport { logInternalError, type CommonAdapterOptions } from '../common';\n\n/**\n * SvelteKit request handler options\n */\nexport interface SvelteKitHandlerOptions<Schema extends SchemaDef> extends CommonAdapterOptions<Schema> {\n /**\n * Url prefix, e.g.: /api\n */\n prefix: string;\n\n /**\n * Callback for getting a ZenStackClient for the given request\n */\n getClient: (event: RequestEvent) => ClientContract<Schema> | Promise<ClientContract<Schema>>;\n}\n\n/**\n * SvelteKit server hooks handler for handling CRUD requests.\n */\nexport default function createHandler<Schema extends SchemaDef>(options: SvelteKitHandlerOptions<Schema>): Handle {\n return async ({ event, resolve }) => {\n if (event.url.pathname.startsWith(options.prefix)) {\n const client = await options.getClient(event);\n if (!client) {\n return new Response(JSON.stringify({ message: 'unable to get ZenStackClient from request context' }), {\n status: 400,\n headers: {\n 'content-type': 'application/json',\n },\n });\n }\n\n const query = Object.fromEntries(event.url.searchParams);\n let requestBody: unknown;\n if (event.request.body) {\n try {\n const text = await event.request.text();\n if (text) {\n requestBody = JSON.parse(text);\n }\n } catch {\n return new Response(JSON.stringify({ message: 'invalid JSON payload' }), {\n status: 400,\n headers: {\n 'content-type': 'application/json',\n },\n });\n }\n }\n\n const path = event.url.pathname.substring(options.prefix.length);\n\n try {\n const r = await options.apiHandler.handleRequest({\n method: event.request.method,\n path,\n query,\n requestBody,\n client,\n });\n\n return new Response(JSON.stringify(r.body), {\n status: r.status,\n headers: {\n 'content-type': 'application/json',\n },\n });\n } catch (err) {\n logInternalError(options.apiHandler.log, err);\n return new Response(JSON.stringify({ message: 'An internal server error occurred' }), {\n status: 500,\n headers: {\n 'content-type': 'application/json',\n },\n });\n }\n }\n\n return resolve(event);\n };\n}\n\nexport { createHandler as SvelteKitHandler };\n"],"mappings":";;;;AAAA,SAASA,eAAe;AACxB,OAAOC,eAAe;AACtB,SAASC,aAAa;AAEtB,SAASC,aAAaC,kBAAkB;AACxC,SAASD,aAAaE,kBAAkB;AAGjC,SAASC,IAAIC,QAA+BC,OAAiBC,SAAkCC,OAAe;AACjH,MAAI,CAACH,QAAQ;AACT;EACJ;AAEA,QAAMI,aAAa,OAAOF,YAAY,aAAaA,UAAU,MAAMA;AAEnE,MAAI,OAAOF,WAAW,YAAY;AAC9BA,WAAOC,OAAOG,WAAAA,GAAcD,KAAAA;EAChC,WAAWH,OAAOK,SAASJ,KAAAA,GAAQ;AAC/B,UAAMK,QAAQC,MAAMN,KAAAA,EACfO,KAAK,SAAS,MAAMC,QAAQC,KAAK,EACjCF,KAAK,QAAQ,MAAMC,QAAQE,IAAI,EAC/BH,KAAK,QAAQ,MAAMC,QAAQG,IAAI,EAC/BJ,KAAK,SAAS,MAAMC,QAAQN,KAAK,EACjCU,WAAU;AACfP,UAAM,wBAAwBL,KAAAA,KAAUG,WAAAA,CAAAA,GAAeD,QAAQ;EAAKA,KAAAA,KAAU,EAAA,EAAI;EACtF;AACJ;AAlBgBJ;;;ACMT,SAASe,iBAAiBC,QAA+BC,KAAY;AACxEC,MACIF,QACA,SACA,6DAA6DC,GAAAA,GAAMA,eAAeE,QAAQ,OAAOF,IAAIG,QAAQ,EAAA,EAAI;AAEzH;AANgBL;;;ACSD,SAAf,cAAgEM,SAAwC;AACpG,SAAO,OAAO,EAAEC,OAAOC,QAAO,MAAE;AAC5B,QAAID,MAAME,IAAIC,SAASC,WAAWL,QAAQM,MAAM,GAAG;AAC/C,YAAMC,SAAS,MAAMP,QAAQQ,UAAUP,KAAAA;AACvC,UAAI,CAACM,QAAQ;AACT,eAAO,IAAIE,SAASC,KAAKC,UAAU;UAAEC,SAAS;QAAoD,CAAA,GAAI;UAClGC,QAAQ;UACRC,SAAS;YACL,gBAAgB;UACpB;QACJ,CAAA;MACJ;AAEA,YAAMC,QAAQC,OAAOC,YAAYhB,MAAME,IAAIe,YAAY;AACvD,UAAIC;AACJ,UAAIlB,MAAMmB,QAAQC,MAAM;AACpB,YAAI;AACA,gBAAMC,OAAO,MAAMrB,MAAMmB,QAAQE,KAAI;AACrC,cAAIA,MAAM;AACNH,0BAAcT,KAAKa,MAAMD,IAAAA;UAC7B;QACJ,QAAQ;AACJ,iBAAO,IAAIb,SAASC,KAAKC,UAAU;YAAEC,SAAS;UAAuB,CAAA,GAAI;YACrEC,QAAQ;YACRC,SAAS;cACL,gBAAgB;YACpB;UACJ,CAAA;QACJ;MACJ;AAEA,YAAMU,OAAOvB,MAAME,IAAIC,SAASqB,UAAUzB,QAAQM,OAAOoB,MAAM;AAE/D,UAAI;AACA,cAAMC,IAAI,MAAM3B,QAAQ4B,WAAWC,cAAc;UAC7CC,QAAQ7B,MAAMmB,QAAQU;UACtBN;UACAT;UACAI;UACAZ;QACJ,CAAA;AAEA,eAAO,IAAIE,SAASC,KAAKC,UAAUgB,EAAEN,IAAI,GAAG;UACxCR,QAAQc,EAAEd;UACVC,SAAS;YACL,gBAAgB;UACpB;QACJ,CAAA;MACJ,SAASiB,KAAK;AACVC,yBAAiBhC,QAAQ4B,WAAWK,KAAKF,GAAAA;AACzC,eAAO,IAAItB,SAASC,KAAKC,UAAU;UAAEC,SAAS;QAAoC,CAAA,GAAI;UAClFC,QAAQ;UACRC,SAAS;YACL,gBAAgB;UACpB;QACJ,CAAA;MACJ;IACJ;AAEA,WAAOZ,QAAQD,KAAAA;EACnB;AACJ;AA7DwBiC;","names":["Decimal","SuperJSON","match","fromError","fromError3","fromError4","log","logger","level","message","error","getMessage","includes","logFn","match","with","console","debug","info","warn","exhaustive","logInternalError","logger","err","log","Error","stack","options","event","resolve","url","pathname","startsWith","prefix","client","getClient","Response","JSON","stringify","message","status","headers","query","Object","fromEntries","searchParams","requestBody","request","body","text","parse","path","substring","length","r","apiHandler","handleRequest","method","err","logInternalError","log","createHandler"]}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
9
|
+
var __export = (target, all) => {
|
|
10
|
+
for (var name in all)
|
|
11
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from))
|
|
16
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
17
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
18
|
+
}
|
|
19
|
+
return to;
|
|
20
|
+
};
|
|
21
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
24
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
25
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
26
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
27
|
+
mod
|
|
28
|
+
));
|
|
29
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
|
+
|
|
31
|
+
// src/adapter/tanstack-start/index.ts
|
|
32
|
+
var tanstack_start_exports = {};
|
|
33
|
+
__export(tanstack_start_exports, {
|
|
34
|
+
TanStackStartHandler: () => TanStackStartHandler,
|
|
35
|
+
default: () => tanstack_start_default
|
|
36
|
+
});
|
|
37
|
+
module.exports = __toCommonJS(tanstack_start_exports);
|
|
38
|
+
|
|
39
|
+
// src/api/utils.ts
|
|
40
|
+
var import_decimal = require("decimal.js");
|
|
41
|
+
var import_superjson = __toESM(require("superjson"), 1);
|
|
42
|
+
var import_ts_pattern = require("ts-pattern");
|
|
43
|
+
var import_v3 = require("zod-validation-error/v3");
|
|
44
|
+
var import_v4 = require("zod-validation-error/v4");
|
|
45
|
+
function log(logger, level, message, error) {
|
|
46
|
+
if (!logger) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const getMessage = typeof message === "function" ? message : () => message;
|
|
50
|
+
if (typeof logger === "function") {
|
|
51
|
+
logger(level, getMessage(), error);
|
|
52
|
+
} else if (logger.includes(level)) {
|
|
53
|
+
const logFn = (0, import_ts_pattern.match)(level).with("debug", () => console.debug).with("info", () => console.info).with("warn", () => console.warn).with("error", () => console.error).exhaustive();
|
|
54
|
+
logFn(`@zenstackhq/server: [${level}] ${getMessage()}${error ? `
|
|
55
|
+
${error}` : ""}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
__name(log, "log");
|
|
59
|
+
|
|
60
|
+
// src/adapter/common.ts
|
|
61
|
+
function logInternalError(logger, err) {
|
|
62
|
+
log(logger, "error", `An unhandled error occurred while processing the request: ${err}${err instanceof Error ? "\n" + err.stack : ""}`);
|
|
63
|
+
}
|
|
64
|
+
__name(logInternalError, "logInternalError");
|
|
65
|
+
|
|
66
|
+
// src/adapter/tanstack-start/handler.ts
|
|
67
|
+
function factory(options) {
|
|
68
|
+
return async ({ request, params }) => {
|
|
69
|
+
const client = await options.getClient(request, params);
|
|
70
|
+
if (!client) {
|
|
71
|
+
return new Response(JSON.stringify({
|
|
72
|
+
message: "unable to get ZenStackClient from request context"
|
|
73
|
+
}), {
|
|
74
|
+
status: 500,
|
|
75
|
+
headers: {
|
|
76
|
+
"Content-Type": "application/json"
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
const url = new URL(request.url);
|
|
81
|
+
const query = Object.fromEntries(url.searchParams);
|
|
82
|
+
const path = params["_splat"];
|
|
83
|
+
if (!path) {
|
|
84
|
+
return new Response(JSON.stringify({
|
|
85
|
+
message: "missing path parameter"
|
|
86
|
+
}), {
|
|
87
|
+
status: 400,
|
|
88
|
+
headers: {
|
|
89
|
+
"Content-Type": "application/json"
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
let requestBody;
|
|
94
|
+
if (request.body) {
|
|
95
|
+
try {
|
|
96
|
+
requestBody = await request.json();
|
|
97
|
+
} catch {
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
const r = await options.apiHandler.handleRequest({
|
|
102
|
+
method: request.method,
|
|
103
|
+
path,
|
|
104
|
+
query,
|
|
105
|
+
requestBody,
|
|
106
|
+
client
|
|
107
|
+
});
|
|
108
|
+
return new Response(JSON.stringify(r.body), {
|
|
109
|
+
status: r.status,
|
|
110
|
+
headers: {
|
|
111
|
+
"Content-Type": "application/json"
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
} catch (err) {
|
|
115
|
+
logInternalError(options.apiHandler.log, err);
|
|
116
|
+
return new Response(JSON.stringify({
|
|
117
|
+
message: "An internal server error occurred"
|
|
118
|
+
}), {
|
|
119
|
+
status: 500,
|
|
120
|
+
headers: {
|
|
121
|
+
"Content-Type": "application/json"
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
__name(factory, "factory");
|
|
128
|
+
|
|
129
|
+
// src/adapter/tanstack-start/index.ts
|
|
130
|
+
function TanStackStartHandler(options) {
|
|
131
|
+
return factory(options);
|
|
132
|
+
}
|
|
133
|
+
__name(TanStackStartHandler, "TanStackStartHandler");
|
|
134
|
+
var tanstack_start_default = TanStackStartHandler;
|
|
135
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
136
|
+
0 && (module.exports = {
|
|
137
|
+
TanStackStartHandler
|
|
138
|
+
});
|
|
139
|
+
//# sourceMappingURL=tanstack-start.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/adapter/tanstack-start/index.ts","../src/api/utils.ts","../src/adapter/common.ts","../src/adapter/tanstack-start/handler.ts"],"sourcesContent":["import type { ClientContract } from '@zenstackhq/orm';\nimport type { SchemaDef } from '@zenstackhq/orm/schema';\nimport type { CommonAdapterOptions } from '../common';\nimport { default as Handler } from './handler';\n\n/**\n * Options for initializing a TanStack Start server route handler.\n */\nexport interface TanStackStartOptions<Schema extends SchemaDef> extends CommonAdapterOptions<Schema> {\n /**\n * Callback method for getting a ZenStackClient instance for the given request and params.\n */\n getClient: (\n request: Request,\n params: Record<string, string>,\n ) => ClientContract<Schema> | Promise<ClientContract<Schema>>;\n}\n\n/**\n * Creates a TanStack Start server route handler.\n * @see https://zenstack.dev/docs/reference/server-adapters/tanstack-start\n */\nexport function TanStackStartHandler<Schema extends SchemaDef>(\n options: TanStackStartOptions<Schema>,\n): ReturnType<typeof Handler> {\n return Handler(options);\n}\n\nexport default TanStackStartHandler;\n","import { Decimal } from 'decimal.js';\nimport SuperJSON from 'superjson';\nimport { match } from 'ts-pattern';\nimport { ZodError } from 'zod';\nimport { fromError as fromError3 } from 'zod-validation-error/v3';\nimport { fromError as fromError4 } from 'zod-validation-error/v4';\nimport type { LogConfig, LogLevel } from '../types';\n\nexport function log(logger: LogConfig | undefined, level: LogLevel, message: string | (() => string), error?: unknown) {\n if (!logger) {\n return;\n }\n\n const getMessage = typeof message === 'function' ? message : () => message;\n\n if (typeof logger === 'function') {\n logger(level, getMessage(), error);\n } else if (logger.includes(level)) {\n const logFn = match(level)\n .with('debug', () => console.debug)\n .with('info', () => console.info)\n .with('warn', () => console.warn)\n .with('error', () => console.error)\n .exhaustive();\n logFn(`@zenstackhq/server: [${level}] ${getMessage()}${error ? `\\n${error}` : ''}`);\n }\n}\n\n/**\n * Registers custom superjson serializers.\n */\nexport function registerCustomSerializers() {\n SuperJSON.registerCustom<Decimal, string>(\n {\n isApplicable: (v): v is Decimal => Decimal.isDecimal(v),\n serialize: (v) => v.toJSON(),\n deserialize: (v) => new Decimal(v),\n },\n 'Decimal',\n );\n\n // `Buffer` is not available in edge runtime\n if (globalThis.Buffer) {\n SuperJSON.registerCustom<Buffer, string>(\n {\n isApplicable: (v): v is Buffer => Buffer.isBuffer(v),\n serialize: (v) => v.toString('base64'),\n deserialize: (v) => Buffer.from(v, 'base64'),\n },\n 'Bytes',\n );\n }\n}\n\n/**\n * Format ZodError into a readable string\n */\nexport function getZodErrorMessage(error: ZodError): string {\n if ('_zod' in error) {\n return fromError4(error).toString();\n } else {\n return fromError3(error).toString();\n }\n}\n","import type { SchemaDef } from '@zenstackhq/orm/schema';\nimport { log } from '../api/utils';\nimport type { ApiHandler, LogConfig } from '../types';\n\n/**\n * Options common to all adapters\n */\nexport interface CommonAdapterOptions<Schema extends SchemaDef> {\n /**\n * The API handler to process requests\n */\n apiHandler: ApiHandler<Schema>;\n}\n\nexport function logInternalError(logger: LogConfig | undefined, err: unknown) {\n log(\n logger,\n 'error',\n `An unhandled error occurred while processing the request: ${err}${err instanceof Error ? '\\n' + err.stack : ''}`,\n );\n}\n","import type { SchemaDef } from '@zenstackhq/orm/schema';\nimport type { TanStackStartOptions } from '.';\nimport { logInternalError } from '../common';\n\n/**\n * Creates a TanStack Start server route handler which encapsulates ZenStack CRUD operations.\n *\n * @param options Options for initialization\n * @returns A TanStack Start server route handler\n */\nexport default function factory<Schema extends SchemaDef>(\n options: TanStackStartOptions<Schema>,\n): ({ request, params }: { request: Request; params: Record<string, string> }) => Promise<Response> {\n return async ({ request, params }: { request: Request; params: Record<string, string> }) => {\n const client = await options.getClient(request, params);\n if (!client) {\n return new Response(JSON.stringify({ message: 'unable to get ZenStackClient from request context' }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n }\n\n const url = new URL(request.url);\n const query = Object.fromEntries(url.searchParams);\n\n // Extract path from params._splat for catch-all routes\n const path = params['_splat'];\n\n if (!path) {\n return new Response(JSON.stringify({ message: 'missing path parameter' }), {\n status: 400,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n }\n\n let requestBody: unknown;\n if (request.body) {\n try {\n requestBody = await request.json();\n } catch {\n // noop\n }\n }\n\n try {\n const r = await options.apiHandler.handleRequest({\n method: request.method!,\n path,\n query,\n requestBody,\n client,\n });\n return new Response(JSON.stringify(r.body), {\n status: r.status,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n } catch (err) {\n logInternalError(options.apiHandler.log, err);\n return new Response(JSON.stringify({ message: 'An internal server error occurred' }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n }\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;;;;;;;;ACHA,qBAAwB;AACxB,uBAAsB;AACtB,wBAAsB;AAEtB,gBAAwC;AACxC,gBAAwC;AAGjC,SAASA,IAAIC,QAA+BC,OAAiBC,SAAkCC,OAAe;AACjH,MAAI,CAACH,QAAQ;AACT;EACJ;AAEA,QAAMI,aAAa,OAAOF,YAAY,aAAaA,UAAU,MAAMA;AAEnE,MAAI,OAAOF,WAAW,YAAY;AAC9BA,WAAOC,OAAOG,WAAAA,GAAcD,KAAAA;EAChC,WAAWH,OAAOK,SAASJ,KAAAA,GAAQ;AAC/B,UAAMK,YAAQC,yBAAMN,KAAAA,EACfO,KAAK,SAAS,MAAMC,QAAQC,KAAK,EACjCF,KAAK,QAAQ,MAAMC,QAAQE,IAAI,EAC/BH,KAAK,QAAQ,MAAMC,QAAQG,IAAI,EAC/BJ,KAAK,SAAS,MAAMC,QAAQN,KAAK,EACjCU,WAAU;AACfP,UAAM,wBAAwBL,KAAAA,KAAUG,WAAAA,CAAAA,GAAeD,QAAQ;EAAKA,KAAAA,KAAU,EAAA,EAAI;EACtF;AACJ;AAlBgBJ;;;ACMT,SAASe,iBAAiBC,QAA+BC,KAAY;AACxEC,MACIF,QACA,SACA,6DAA6DC,GAAAA,GAAMA,eAAeE,QAAQ,OAAOF,IAAIG,QAAQ,EAAA,EAAI;AAEzH;AANgBL;;;ACJD,SAAf,QACIM,SAAqC;AAErC,SAAO,OAAO,EAAEC,SAASC,OAAM,MAAwD;AACnF,UAAMC,SAAS,MAAMH,QAAQI,UAAUH,SAASC,MAAAA;AAChD,QAAI,CAACC,QAAQ;AACT,aAAO,IAAIE,SAASC,KAAKC,UAAU;QAAEC,SAAS;MAAoD,CAAA,GAAI;QAClGC,QAAQ;QACRC,SAAS;UACL,gBAAgB;QACpB;MACJ,CAAA;IACJ;AAEA,UAAMC,MAAM,IAAIC,IAAIX,QAAQU,GAAG;AAC/B,UAAME,QAAQC,OAAOC,YAAYJ,IAAIK,YAAY;AAGjD,UAAMC,OAAOf,OAAO,QAAA;AAEpB,QAAI,CAACe,MAAM;AACP,aAAO,IAAIZ,SAASC,KAAKC,UAAU;QAAEC,SAAS;MAAyB,CAAA,GAAI;QACvEC,QAAQ;QACRC,SAAS;UACL,gBAAgB;QACpB;MACJ,CAAA;IACJ;AAEA,QAAIQ;AACJ,QAAIjB,QAAQkB,MAAM;AACd,UAAI;AACAD,sBAAc,MAAMjB,QAAQmB,KAAI;MACpC,QAAQ;MAER;IACJ;AAEA,QAAI;AACA,YAAMC,IAAI,MAAMrB,QAAQsB,WAAWC,cAAc;QAC7CC,QAAQvB,QAAQuB;QAChBP;QACAJ;QACAK;QACAf;MACJ,CAAA;AACA,aAAO,IAAIE,SAASC,KAAKC,UAAUc,EAAEF,IAAI,GAAG;QACxCV,QAAQY,EAAEZ;QACVC,SAAS;UACL,gBAAgB;QACpB;MACJ,CAAA;IACJ,SAASe,KAAK;AACVC,uBAAiB1B,QAAQsB,WAAWK,KAAKF,GAAAA;AACzC,aAAO,IAAIpB,SAASC,KAAKC,UAAU;QAAEC,SAAS;MAAoC,CAAA,GAAI;QAClFC,QAAQ;QACRC,SAAS;UACL,gBAAgB;QACpB;MACJ,CAAA;IACJ;EACJ;AACJ;AA9DwBkB;;;AHYjB,SAASC,qBACZC,SAAqC;AAErC,SAAOC,QAAQD,OAAAA;AACnB;AAJgBD;AAMhB,IAAA,yBAAeA;","names":["log","logger","level","message","error","getMessage","includes","logFn","match","with","console","debug","info","warn","exhaustive","logInternalError","logger","err","log","Error","stack","options","request","params","client","getClient","Response","JSON","stringify","message","status","headers","url","URL","query","Object","fromEntries","searchParams","path","requestBody","body","json","r","apiHandler","handleRequest","method","err","logInternalError","log","factory","TanStackStartHandler","options","Handler"]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ClientContract } from '@zenstackhq/orm';
|
|
2
|
+
import { SchemaDef } from '@zenstackhq/orm/schema';
|
|
3
|
+
import { C as CommonAdapterOptions } from './common-6DG-xEmM.cjs';
|
|
4
|
+
import './types-D5t0sUEw.cjs';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Creates a TanStack Start server route handler which encapsulates ZenStack CRUD operations.
|
|
8
|
+
*
|
|
9
|
+
* @param options Options for initialization
|
|
10
|
+
* @returns A TanStack Start server route handler
|
|
11
|
+
*/
|
|
12
|
+
declare function factory<Schema extends SchemaDef>(options: TanStackStartOptions<Schema>): ({ request, params }: {
|
|
13
|
+
request: Request;
|
|
14
|
+
params: Record<string, string>;
|
|
15
|
+
}) => Promise<Response>;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Options for initializing a TanStack Start server route handler.
|
|
19
|
+
*/
|
|
20
|
+
interface TanStackStartOptions<Schema extends SchemaDef> extends CommonAdapterOptions<Schema> {
|
|
21
|
+
/**
|
|
22
|
+
* Callback method for getting a ZenStackClient instance for the given request and params.
|
|
23
|
+
*/
|
|
24
|
+
getClient: (request: Request, params: Record<string, string>) => ClientContract<Schema> | Promise<ClientContract<Schema>>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Creates a TanStack Start server route handler.
|
|
28
|
+
* @see https://zenstack.dev/docs/reference/server-adapters/tanstack-start
|
|
29
|
+
*/
|
|
30
|
+
declare function TanStackStartHandler<Schema extends SchemaDef>(options: TanStackStartOptions<Schema>): ReturnType<typeof factory>;
|
|
31
|
+
|
|
32
|
+
export { TanStackStartHandler, type TanStackStartOptions, TanStackStartHandler as default };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ClientContract } from '@zenstackhq/orm';
|
|
2
|
+
import { SchemaDef } from '@zenstackhq/orm/schema';
|
|
3
|
+
import { C as CommonAdapterOptions } from './common-CyapsM8n.js';
|
|
4
|
+
import './types-D5t0sUEw.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Creates a TanStack Start server route handler which encapsulates ZenStack CRUD operations.
|
|
8
|
+
*
|
|
9
|
+
* @param options Options for initialization
|
|
10
|
+
* @returns A TanStack Start server route handler
|
|
11
|
+
*/
|
|
12
|
+
declare function factory<Schema extends SchemaDef>(options: TanStackStartOptions<Schema>): ({ request, params }: {
|
|
13
|
+
request: Request;
|
|
14
|
+
params: Record<string, string>;
|
|
15
|
+
}) => Promise<Response>;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Options for initializing a TanStack Start server route handler.
|
|
19
|
+
*/
|
|
20
|
+
interface TanStackStartOptions<Schema extends SchemaDef> extends CommonAdapterOptions<Schema> {
|
|
21
|
+
/**
|
|
22
|
+
* Callback method for getting a ZenStackClient instance for the given request and params.
|
|
23
|
+
*/
|
|
24
|
+
getClient: (request: Request, params: Record<string, string>) => ClientContract<Schema> | Promise<ClientContract<Schema>>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Creates a TanStack Start server route handler.
|
|
28
|
+
* @see https://zenstack.dev/docs/reference/server-adapters/tanstack-start
|
|
29
|
+
*/
|
|
30
|
+
declare function TanStackStartHandler<Schema extends SchemaDef>(options: TanStackStartOptions<Schema>): ReturnType<typeof factory>;
|
|
31
|
+
|
|
32
|
+
export { TanStackStartHandler, type TanStackStartOptions, TanStackStartHandler as default };
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
|
|
4
|
+
// src/api/utils.ts
|
|
5
|
+
import { Decimal } from "decimal.js";
|
|
6
|
+
import SuperJSON from "superjson";
|
|
7
|
+
import { match } from "ts-pattern";
|
|
8
|
+
import { fromError as fromError3 } from "zod-validation-error/v3";
|
|
9
|
+
import { fromError as fromError4 } from "zod-validation-error/v4";
|
|
10
|
+
function log(logger, level, message, error) {
|
|
11
|
+
if (!logger) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const getMessage = typeof message === "function" ? message : () => message;
|
|
15
|
+
if (typeof logger === "function") {
|
|
16
|
+
logger(level, getMessage(), error);
|
|
17
|
+
} else if (logger.includes(level)) {
|
|
18
|
+
const logFn = match(level).with("debug", () => console.debug).with("info", () => console.info).with("warn", () => console.warn).with("error", () => console.error).exhaustive();
|
|
19
|
+
logFn(`@zenstackhq/server: [${level}] ${getMessage()}${error ? `
|
|
20
|
+
${error}` : ""}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
__name(log, "log");
|
|
24
|
+
|
|
25
|
+
// src/adapter/common.ts
|
|
26
|
+
function logInternalError(logger, err) {
|
|
27
|
+
log(logger, "error", `An unhandled error occurred while processing the request: ${err}${err instanceof Error ? "\n" + err.stack : ""}`);
|
|
28
|
+
}
|
|
29
|
+
__name(logInternalError, "logInternalError");
|
|
30
|
+
|
|
31
|
+
// src/adapter/tanstack-start/handler.ts
|
|
32
|
+
function factory(options) {
|
|
33
|
+
return async ({ request, params }) => {
|
|
34
|
+
const client = await options.getClient(request, params);
|
|
35
|
+
if (!client) {
|
|
36
|
+
return new Response(JSON.stringify({
|
|
37
|
+
message: "unable to get ZenStackClient from request context"
|
|
38
|
+
}), {
|
|
39
|
+
status: 500,
|
|
40
|
+
headers: {
|
|
41
|
+
"Content-Type": "application/json"
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
const url = new URL(request.url);
|
|
46
|
+
const query = Object.fromEntries(url.searchParams);
|
|
47
|
+
const path = params["_splat"];
|
|
48
|
+
if (!path) {
|
|
49
|
+
return new Response(JSON.stringify({
|
|
50
|
+
message: "missing path parameter"
|
|
51
|
+
}), {
|
|
52
|
+
status: 400,
|
|
53
|
+
headers: {
|
|
54
|
+
"Content-Type": "application/json"
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
let requestBody;
|
|
59
|
+
if (request.body) {
|
|
60
|
+
try {
|
|
61
|
+
requestBody = await request.json();
|
|
62
|
+
} catch {
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
const r = await options.apiHandler.handleRequest({
|
|
67
|
+
method: request.method,
|
|
68
|
+
path,
|
|
69
|
+
query,
|
|
70
|
+
requestBody,
|
|
71
|
+
client
|
|
72
|
+
});
|
|
73
|
+
return new Response(JSON.stringify(r.body), {
|
|
74
|
+
status: r.status,
|
|
75
|
+
headers: {
|
|
76
|
+
"Content-Type": "application/json"
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
} catch (err) {
|
|
80
|
+
logInternalError(options.apiHandler.log, err);
|
|
81
|
+
return new Response(JSON.stringify({
|
|
82
|
+
message: "An internal server error occurred"
|
|
83
|
+
}), {
|
|
84
|
+
status: 500,
|
|
85
|
+
headers: {
|
|
86
|
+
"Content-Type": "application/json"
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
__name(factory, "factory");
|
|
93
|
+
|
|
94
|
+
// src/adapter/tanstack-start/index.ts
|
|
95
|
+
function TanStackStartHandler(options) {
|
|
96
|
+
return factory(options);
|
|
97
|
+
}
|
|
98
|
+
__name(TanStackStartHandler, "TanStackStartHandler");
|
|
99
|
+
var tanstack_start_default = TanStackStartHandler;
|
|
100
|
+
export {
|
|
101
|
+
TanStackStartHandler,
|
|
102
|
+
tanstack_start_default as default
|
|
103
|
+
};
|
|
104
|
+
//# sourceMappingURL=tanstack-start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/api/utils.ts","../src/adapter/common.ts","../src/adapter/tanstack-start/handler.ts","../src/adapter/tanstack-start/index.ts"],"sourcesContent":["import { Decimal } from 'decimal.js';\nimport SuperJSON from 'superjson';\nimport { match } from 'ts-pattern';\nimport { ZodError } from 'zod';\nimport { fromError as fromError3 } from 'zod-validation-error/v3';\nimport { fromError as fromError4 } from 'zod-validation-error/v4';\nimport type { LogConfig, LogLevel } from '../types';\n\nexport function log(logger: LogConfig | undefined, level: LogLevel, message: string | (() => string), error?: unknown) {\n if (!logger) {\n return;\n }\n\n const getMessage = typeof message === 'function' ? message : () => message;\n\n if (typeof logger === 'function') {\n logger(level, getMessage(), error);\n } else if (logger.includes(level)) {\n const logFn = match(level)\n .with('debug', () => console.debug)\n .with('info', () => console.info)\n .with('warn', () => console.warn)\n .with('error', () => console.error)\n .exhaustive();\n logFn(`@zenstackhq/server: [${level}] ${getMessage()}${error ? `\\n${error}` : ''}`);\n }\n}\n\n/**\n * Registers custom superjson serializers.\n */\nexport function registerCustomSerializers() {\n SuperJSON.registerCustom<Decimal, string>(\n {\n isApplicable: (v): v is Decimal => Decimal.isDecimal(v),\n serialize: (v) => v.toJSON(),\n deserialize: (v) => new Decimal(v),\n },\n 'Decimal',\n );\n\n // `Buffer` is not available in edge runtime\n if (globalThis.Buffer) {\n SuperJSON.registerCustom<Buffer, string>(\n {\n isApplicable: (v): v is Buffer => Buffer.isBuffer(v),\n serialize: (v) => v.toString('base64'),\n deserialize: (v) => Buffer.from(v, 'base64'),\n },\n 'Bytes',\n );\n }\n}\n\n/**\n * Format ZodError into a readable string\n */\nexport function getZodErrorMessage(error: ZodError): string {\n if ('_zod' in error) {\n return fromError4(error).toString();\n } else {\n return fromError3(error).toString();\n }\n}\n","import type { SchemaDef } from '@zenstackhq/orm/schema';\nimport { log } from '../api/utils';\nimport type { ApiHandler, LogConfig } from '../types';\n\n/**\n * Options common to all adapters\n */\nexport interface CommonAdapterOptions<Schema extends SchemaDef> {\n /**\n * The API handler to process requests\n */\n apiHandler: ApiHandler<Schema>;\n}\n\nexport function logInternalError(logger: LogConfig | undefined, err: unknown) {\n log(\n logger,\n 'error',\n `An unhandled error occurred while processing the request: ${err}${err instanceof Error ? '\\n' + err.stack : ''}`,\n );\n}\n","import type { SchemaDef } from '@zenstackhq/orm/schema';\nimport type { TanStackStartOptions } from '.';\nimport { logInternalError } from '../common';\n\n/**\n * Creates a TanStack Start server route handler which encapsulates ZenStack CRUD operations.\n *\n * @param options Options for initialization\n * @returns A TanStack Start server route handler\n */\nexport default function factory<Schema extends SchemaDef>(\n options: TanStackStartOptions<Schema>,\n): ({ request, params }: { request: Request; params: Record<string, string> }) => Promise<Response> {\n return async ({ request, params }: { request: Request; params: Record<string, string> }) => {\n const client = await options.getClient(request, params);\n if (!client) {\n return new Response(JSON.stringify({ message: 'unable to get ZenStackClient from request context' }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n }\n\n const url = new URL(request.url);\n const query = Object.fromEntries(url.searchParams);\n\n // Extract path from params._splat for catch-all routes\n const path = params['_splat'];\n\n if (!path) {\n return new Response(JSON.stringify({ message: 'missing path parameter' }), {\n status: 400,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n }\n\n let requestBody: unknown;\n if (request.body) {\n try {\n requestBody = await request.json();\n } catch {\n // noop\n }\n }\n\n try {\n const r = await options.apiHandler.handleRequest({\n method: request.method!,\n path,\n query,\n requestBody,\n client,\n });\n return new Response(JSON.stringify(r.body), {\n status: r.status,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n } catch (err) {\n logInternalError(options.apiHandler.log, err);\n return new Response(JSON.stringify({ message: 'An internal server error occurred' }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n }\n };\n}\n","import type { ClientContract } from '@zenstackhq/orm';\nimport type { SchemaDef } from '@zenstackhq/orm/schema';\nimport type { CommonAdapterOptions } from '../common';\nimport { default as Handler } from './handler';\n\n/**\n * Options for initializing a TanStack Start server route handler.\n */\nexport interface TanStackStartOptions<Schema extends SchemaDef> extends CommonAdapterOptions<Schema> {\n /**\n * Callback method for getting a ZenStackClient instance for the given request and params.\n */\n getClient: (\n request: Request,\n params: Record<string, string>,\n ) => ClientContract<Schema> | Promise<ClientContract<Schema>>;\n}\n\n/**\n * Creates a TanStack Start server route handler.\n * @see https://zenstack.dev/docs/reference/server-adapters/tanstack-start\n */\nexport function TanStackStartHandler<Schema extends SchemaDef>(\n options: TanStackStartOptions<Schema>,\n): ReturnType<typeof Handler> {\n return Handler(options);\n}\n\nexport default TanStackStartHandler;\n"],"mappings":";;;;AAAA,SAASA,eAAe;AACxB,OAAOC,eAAe;AACtB,SAASC,aAAa;AAEtB,SAASC,aAAaC,kBAAkB;AACxC,SAASD,aAAaE,kBAAkB;AAGjC,SAASC,IAAIC,QAA+BC,OAAiBC,SAAkCC,OAAe;AACjH,MAAI,CAACH,QAAQ;AACT;EACJ;AAEA,QAAMI,aAAa,OAAOF,YAAY,aAAaA,UAAU,MAAMA;AAEnE,MAAI,OAAOF,WAAW,YAAY;AAC9BA,WAAOC,OAAOG,WAAAA,GAAcD,KAAAA;EAChC,WAAWH,OAAOK,SAASJ,KAAAA,GAAQ;AAC/B,UAAMK,QAAQC,MAAMN,KAAAA,EACfO,KAAK,SAAS,MAAMC,QAAQC,KAAK,EACjCF,KAAK,QAAQ,MAAMC,QAAQE,IAAI,EAC/BH,KAAK,QAAQ,MAAMC,QAAQG,IAAI,EAC/BJ,KAAK,SAAS,MAAMC,QAAQN,KAAK,EACjCU,WAAU;AACfP,UAAM,wBAAwBL,KAAAA,KAAUG,WAAAA,CAAAA,GAAeD,QAAQ;EAAKA,KAAAA,KAAU,EAAA,EAAI;EACtF;AACJ;AAlBgBJ;;;ACMT,SAASe,iBAAiBC,QAA+BC,KAAY;AACxEC,MACIF,QACA,SACA,6DAA6DC,GAAAA,GAAMA,eAAeE,QAAQ,OAAOF,IAAIG,QAAQ,EAAA,EAAI;AAEzH;AANgBL;;;ACJD,SAAf,QACIM,SAAqC;AAErC,SAAO,OAAO,EAAEC,SAASC,OAAM,MAAwD;AACnF,UAAMC,SAAS,MAAMH,QAAQI,UAAUH,SAASC,MAAAA;AAChD,QAAI,CAACC,QAAQ;AACT,aAAO,IAAIE,SAASC,KAAKC,UAAU;QAAEC,SAAS;MAAoD,CAAA,GAAI;QAClGC,QAAQ;QACRC,SAAS;UACL,gBAAgB;QACpB;MACJ,CAAA;IACJ;AAEA,UAAMC,MAAM,IAAIC,IAAIX,QAAQU,GAAG;AAC/B,UAAME,QAAQC,OAAOC,YAAYJ,IAAIK,YAAY;AAGjD,UAAMC,OAAOf,OAAO,QAAA;AAEpB,QAAI,CAACe,MAAM;AACP,aAAO,IAAIZ,SAASC,KAAKC,UAAU;QAAEC,SAAS;MAAyB,CAAA,GAAI;QACvEC,QAAQ;QACRC,SAAS;UACL,gBAAgB;QACpB;MACJ,CAAA;IACJ;AAEA,QAAIQ;AACJ,QAAIjB,QAAQkB,MAAM;AACd,UAAI;AACAD,sBAAc,MAAMjB,QAAQmB,KAAI;MACpC,QAAQ;MAER;IACJ;AAEA,QAAI;AACA,YAAMC,IAAI,MAAMrB,QAAQsB,WAAWC,cAAc;QAC7CC,QAAQvB,QAAQuB;QAChBP;QACAJ;QACAK;QACAf;MACJ,CAAA;AACA,aAAO,IAAIE,SAASC,KAAKC,UAAUc,EAAEF,IAAI,GAAG;QACxCV,QAAQY,EAAEZ;QACVC,SAAS;UACL,gBAAgB;QACpB;MACJ,CAAA;IACJ,SAASe,KAAK;AACVC,uBAAiB1B,QAAQsB,WAAWK,KAAKF,GAAAA;AACzC,aAAO,IAAIpB,SAASC,KAAKC,UAAU;QAAEC,SAAS;MAAoC,CAAA,GAAI;QAClFC,QAAQ;QACRC,SAAS;UACL,gBAAgB;QACpB;MACJ,CAAA;IACJ;EACJ;AACJ;AA9DwBkB;;;ACYjB,SAASC,qBACZC,SAAqC;AAErC,SAAOC,QAAQD,OAAAA;AACnB;AAJgBD;AAMhB,IAAA,yBAAeA;","names":["Decimal","SuperJSON","match","fromError","fromError3","fromError4","log","logger","level","message","error","getMessage","includes","logFn","match","with","console","debug","info","warn","exhaustive","logInternalError","logger","err","log","Error","stack","options","request","params","client","getClient","Response","JSON","stringify","message","status","headers","url","URL","query","Object","fromEntries","searchParams","path","requestBody","body","json","r","apiHandler","handleRequest","method","err","logInternalError","log","factory","TanStackStartHandler","options","Handler"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ClientContract } from '@zenstackhq/
|
|
2
|
-
import { SchemaDef } from '@zenstackhq/
|
|
1
|
+
import { ClientContract } from '@zenstackhq/orm';
|
|
2
|
+
import { SchemaDef } from '@zenstackhq/orm/schema';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Log levels
|
|
@@ -59,6 +59,10 @@ interface ApiHandler<Schema extends SchemaDef> {
|
|
|
59
59
|
* The schema associated with this handler.
|
|
60
60
|
*/
|
|
61
61
|
get schema(): Schema;
|
|
62
|
+
/**
|
|
63
|
+
* Logging configuration.
|
|
64
|
+
*/
|
|
65
|
+
get log(): LogConfig | undefined;
|
|
62
66
|
/**
|
|
63
67
|
* Handle an API request.
|
|
64
68
|
*/
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ClientContract } from '@zenstackhq/
|
|
2
|
-
import { SchemaDef } from '@zenstackhq/
|
|
1
|
+
import { ClientContract } from '@zenstackhq/orm';
|
|
2
|
+
import { SchemaDef } from '@zenstackhq/orm/schema';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Log levels
|
|
@@ -59,6 +59,10 @@ interface ApiHandler<Schema extends SchemaDef> {
|
|
|
59
59
|
* The schema associated with this handler.
|
|
60
60
|
*/
|
|
61
61
|
get schema(): Schema;
|
|
62
|
+
/**
|
|
63
|
+
* Logging configuration.
|
|
64
|
+
*/
|
|
65
|
+
get log(): LogConfig | undefined;
|
|
62
66
|
/**
|
|
63
67
|
* Handle an API request.
|
|
64
68
|
*/
|