@zenstackhq/server 3.0.0 → 3.1.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.
@@ -31,7 +31,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
31
31
  // src/adapter/sveltekit/index.ts
32
32
  var sveltekit_exports = {};
33
33
  __export(sveltekit_exports, {
34
- SvelteKitHandler: () => createHandler
34
+ SvelteKitHandler: () => createHandler,
35
+ SvelteKitRouteHandler: () => createHandler2
35
36
  });
36
37
  module.exports = __toCommonJS(sveltekit_exports);
37
38
 
@@ -127,8 +128,65 @@ function createHandler(options) {
127
128
  };
128
129
  }
129
130
  __name(createHandler, "createHandler");
131
+
132
+ // src/adapter/sveltekit/route-handler.ts
133
+ var import_kit = require("@sveltejs/kit");
134
+ function createHandler2(options) {
135
+ return async (event) => {
136
+ const client = await options.getClient(event);
137
+ if (!client) {
138
+ return (0, import_kit.json)({
139
+ message: "unable to get ZenStackClient from request context"
140
+ }, {
141
+ status: 400
142
+ });
143
+ }
144
+ const query = Object.fromEntries(event.url.searchParams);
145
+ let requestBody;
146
+ if (event.request.body) {
147
+ try {
148
+ requestBody = await event.request.json();
149
+ } catch {
150
+ return (0, import_kit.json)({
151
+ message: "invalid JSON payload"
152
+ }, {
153
+ status: 400
154
+ });
155
+ }
156
+ }
157
+ const path = event.params["path"];
158
+ if (!path) {
159
+ return (0, import_kit.json)({
160
+ message: "route is missing path parameter"
161
+ }, {
162
+ status: 400
163
+ });
164
+ }
165
+ try {
166
+ const r = await options.apiHandler.handleRequest({
167
+ method: event.request.method,
168
+ path,
169
+ query,
170
+ requestBody,
171
+ client
172
+ });
173
+ return (0, import_kit.json)(r.body, {
174
+ status: r.status
175
+ });
176
+ } catch (err) {
177
+ logInternalError(options.apiHandler.log, err);
178
+ return (0, import_kit.json)({
179
+ message: "An internal server error occurred"
180
+ }, {
181
+ status: 500
182
+ });
183
+ }
184
+ };
185
+ }
186
+ __name(createHandler2, "createHandler");
130
187
  // Annotate the CommonJS export names for ESM import in node:
131
188
  0 && (module.exports = {
132
- SvelteKitHandler
189
+ SvelteKitHandler,
190
+ SvelteKitRouteHandler
133
191
  });
134
192
  //# sourceMappingURL=sveltekit.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/adapter/sveltekit/index.ts","../src/api/utils.ts","../src/adapter/common.ts","../src/adapter/sveltekit/handler.ts"],"sourcesContent":["export { SvelteKitHandler, type SvelteKitHandlerOptions } from './handler';\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 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;;;;;;;ACAA,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;;;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":["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"]}
1
+ {"version":3,"sources":["../src/adapter/sveltekit/index.ts","../src/api/utils.ts","../src/adapter/common.ts","../src/adapter/sveltekit/handler.ts","../src/adapter/sveltekit/route-handler.ts"],"sourcesContent":["export { SvelteKitHandler, type SvelteKitHandlerOptions } from './handler';\nexport { SvelteKitRouteHandler, type SvelteKitRouteHandlerOptions } from './route-handler';\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 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. This handler is to be used in `hooks.server.ts`.\n * @deprecated use `SvelteKitRouteHandler` instead.\n */\nfunction 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","import { json, type RequestEvent, type RequestHandler } 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 route handler options\n */\nexport interface SvelteKitRouteHandlerOptions<Schema extends SchemaDef> extends CommonAdapterOptions<Schema> {\n /**\n * Callback for getting a ZenStackClient for the given request event\n */\n getClient: (event: RequestEvent) => ClientContract<Schema> | Promise<ClientContract<Schema>>;\n}\n\n/**\n * SvelteKit server route handler for handling CRUD requests. This handler is to be used in a `+server.ts`\n * API route file.\n */\nfunction createHandler<Schema extends SchemaDef>(options: SvelteKitRouteHandlerOptions<Schema>): RequestHandler {\n return async (event) => {\n const client = await options.getClient(event);\n if (!client) {\n return json({ message: 'unable to get ZenStackClient from request context' }, { status: 400 });\n }\n\n const query = Object.fromEntries(event.url.searchParams);\n let requestBody: unknown;\n if (event.request.body) {\n try {\n requestBody = await event.request.json();\n } catch {\n return json({ message: 'invalid JSON payload' }, { status: 400 });\n }\n }\n\n const path = event.params['path'];\n if (!path) {\n return json({ message: 'route is missing path parameter' }, { status: 400 });\n }\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 json(r.body, { status: r.status });\n } catch (err) {\n logInternalError(options.apiHandler.log, err);\n return json({ message: 'An internal server error occurred' }, { status: 500 });\n }\n };\n}\n\nexport { createHandler as SvelteKitRouteHandler };\n"],"mappings":"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","names":["createHandler","log","logger","level","message","error","getMessage","includes","logFn","match","with","console","debug","info","warn","exhaustive","logInternalError","logger","err","log","Error","stack","createHandler","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","options","event","client","getClient","json","message","status","query","Object","fromEntries","url","searchParams","requestBody","request","body","path","params","r","apiHandler","handleRequest","method","err","logInternalError","log"]}
@@ -1,4 +1,4 @@
1
- import { RequestEvent, Handle } from '@sveltejs/kit';
1
+ import { RequestEvent, Handle, RequestHandler } from '@sveltejs/kit';
2
2
  import { ClientContract } from '@zenstackhq/orm';
3
3
  import { SchemaDef } from '@zenstackhq/orm/schema';
4
4
  import { C as CommonAdapterOptions } from './common-Cuu8bjzK.cjs';
@@ -18,8 +18,24 @@ interface SvelteKitHandlerOptions<Schema extends SchemaDef> extends CommonAdapte
18
18
  getClient: (event: RequestEvent) => ClientContract<Schema> | Promise<ClientContract<Schema>>;
19
19
  }
20
20
  /**
21
- * SvelteKit server hooks handler for handling CRUD requests.
21
+ * SvelteKit server hooks handler for handling CRUD requests. This handler is to be used in `hooks.server.ts`.
22
+ * @deprecated use `SvelteKitRouteHandler` instead.
22
23
  */
23
- declare function createHandler<Schema extends SchemaDef>(options: SvelteKitHandlerOptions<Schema>): Handle;
24
+ declare function createHandler$1<Schema extends SchemaDef>(options: SvelteKitHandlerOptions<Schema>): Handle;
24
25
 
25
- export { createHandler as SvelteKitHandler, type SvelteKitHandlerOptions };
26
+ /**
27
+ * SvelteKit route handler options
28
+ */
29
+ interface SvelteKitRouteHandlerOptions<Schema extends SchemaDef> extends CommonAdapterOptions<Schema> {
30
+ /**
31
+ * Callback for getting a ZenStackClient for the given request event
32
+ */
33
+ getClient: (event: RequestEvent) => ClientContract<Schema> | Promise<ClientContract<Schema>>;
34
+ }
35
+ /**
36
+ * SvelteKit server route handler for handling CRUD requests. This handler is to be used in a `+server.ts`
37
+ * API route file.
38
+ */
39
+ declare function createHandler<Schema extends SchemaDef>(options: SvelteKitRouteHandlerOptions<Schema>): RequestHandler;
40
+
41
+ export { createHandler$1 as SvelteKitHandler, type SvelteKitHandlerOptions, createHandler as SvelteKitRouteHandler, type SvelteKitRouteHandlerOptions };
@@ -1,4 +1,4 @@
1
- import { RequestEvent, Handle } from '@sveltejs/kit';
1
+ import { RequestEvent, Handle, RequestHandler } from '@sveltejs/kit';
2
2
  import { ClientContract } from '@zenstackhq/orm';
3
3
  import { SchemaDef } from '@zenstackhq/orm/schema';
4
4
  import { C as CommonAdapterOptions } from './common-WHbiInuf.js';
@@ -18,8 +18,24 @@ interface SvelteKitHandlerOptions<Schema extends SchemaDef> extends CommonAdapte
18
18
  getClient: (event: RequestEvent) => ClientContract<Schema> | Promise<ClientContract<Schema>>;
19
19
  }
20
20
  /**
21
- * SvelteKit server hooks handler for handling CRUD requests.
21
+ * SvelteKit server hooks handler for handling CRUD requests. This handler is to be used in `hooks.server.ts`.
22
+ * @deprecated use `SvelteKitRouteHandler` instead.
22
23
  */
23
- declare function createHandler<Schema extends SchemaDef>(options: SvelteKitHandlerOptions<Schema>): Handle;
24
+ declare function createHandler$1<Schema extends SchemaDef>(options: SvelteKitHandlerOptions<Schema>): Handle;
24
25
 
25
- export { createHandler as SvelteKitHandler, type SvelteKitHandlerOptions };
26
+ /**
27
+ * SvelteKit route handler options
28
+ */
29
+ interface SvelteKitRouteHandlerOptions<Schema extends SchemaDef> extends CommonAdapterOptions<Schema> {
30
+ /**
31
+ * Callback for getting a ZenStackClient for the given request event
32
+ */
33
+ getClient: (event: RequestEvent) => ClientContract<Schema> | Promise<ClientContract<Schema>>;
34
+ }
35
+ /**
36
+ * SvelteKit server route handler for handling CRUD requests. This handler is to be used in a `+server.ts`
37
+ * API route file.
38
+ */
39
+ declare function createHandler<Schema extends SchemaDef>(options: SvelteKitRouteHandlerOptions<Schema>): RequestHandler;
40
+
41
+ export { createHandler$1 as SvelteKitHandler, type SvelteKitHandlerOptions, createHandler as SvelteKitRouteHandler, type SvelteKitRouteHandlerOptions };
package/dist/sveltekit.js CHANGED
@@ -93,7 +93,64 @@ function createHandler(options) {
93
93
  };
94
94
  }
95
95
  __name(createHandler, "createHandler");
96
+
97
+ // src/adapter/sveltekit/route-handler.ts
98
+ import { json } from "@sveltejs/kit";
99
+ function createHandler2(options) {
100
+ return async (event) => {
101
+ const client = await options.getClient(event);
102
+ if (!client) {
103
+ return json({
104
+ message: "unable to get ZenStackClient from request context"
105
+ }, {
106
+ status: 400
107
+ });
108
+ }
109
+ const query = Object.fromEntries(event.url.searchParams);
110
+ let requestBody;
111
+ if (event.request.body) {
112
+ try {
113
+ requestBody = await event.request.json();
114
+ } catch {
115
+ return json({
116
+ message: "invalid JSON payload"
117
+ }, {
118
+ status: 400
119
+ });
120
+ }
121
+ }
122
+ const path = event.params["path"];
123
+ if (!path) {
124
+ return json({
125
+ message: "route is missing path parameter"
126
+ }, {
127
+ status: 400
128
+ });
129
+ }
130
+ try {
131
+ const r = await options.apiHandler.handleRequest({
132
+ method: event.request.method,
133
+ path,
134
+ query,
135
+ requestBody,
136
+ client
137
+ });
138
+ return json(r.body, {
139
+ status: r.status
140
+ });
141
+ } catch (err) {
142
+ logInternalError(options.apiHandler.log, err);
143
+ return json({
144
+ message: "An internal server error occurred"
145
+ }, {
146
+ status: 500
147
+ });
148
+ }
149
+ };
150
+ }
151
+ __name(createHandler2, "createHandler");
96
152
  export {
97
- createHandler as SvelteKitHandler
153
+ createHandler as SvelteKitHandler,
154
+ createHandler2 as SvelteKitRouteHandler
98
155
  };
99
156
  //# sourceMappingURL=sveltekit.js.map
@@ -1 +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"]}
1
+ {"version":3,"sources":["../src/api/utils.ts","../src/adapter/common.ts","../src/adapter/sveltekit/handler.ts","../src/adapter/sveltekit/route-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. This handler is to be used in `hooks.server.ts`.\n * @deprecated use `SvelteKitRouteHandler` instead.\n */\nfunction 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","import { json, type RequestEvent, type RequestHandler } 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 route handler options\n */\nexport interface SvelteKitRouteHandlerOptions<Schema extends SchemaDef> extends CommonAdapterOptions<Schema> {\n /**\n * Callback for getting a ZenStackClient for the given request event\n */\n getClient: (event: RequestEvent) => ClientContract<Schema> | Promise<ClientContract<Schema>>;\n}\n\n/**\n * SvelteKit server route handler for handling CRUD requests. This handler is to be used in a `+server.ts`\n * API route file.\n */\nfunction createHandler<Schema extends SchemaDef>(options: SvelteKitRouteHandlerOptions<Schema>): RequestHandler {\n return async (event) => {\n const client = await options.getClient(event);\n if (!client) {\n return json({ message: 'unable to get ZenStackClient from request context' }, { status: 400 });\n }\n\n const query = Object.fromEntries(event.url.searchParams);\n let requestBody: unknown;\n if (event.request.body) {\n try {\n requestBody = await event.request.json();\n } catch {\n return json({ message: 'invalid JSON payload' }, { status: 400 });\n }\n }\n\n const path = event.params['path'];\n if (!path) {\n return json({ message: 'route is missing path parameter' }, { status: 400 });\n }\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 json(r.body, { status: r.status });\n } catch (err) {\n logInternalError(options.apiHandler.log, err);\n return json({ message: 'An internal server error occurred' }, { status: 500 });\n }\n };\n}\n\nexport { createHandler as SvelteKitRouteHandler };\n"],"mappings":"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","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","createHandler","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","json","createHandler","options","event","client","getClient","json","message","status","query","Object","fromEntries","url","searchParams","requestBody","request","body","path","params","r","apiHandler","handleRequest","method","err","logInternalError","log"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zenstackhq/server",
3
- "version": "3.0.0",
3
+ "version": "3.1.1",
4
4
  "description": "ZenStack automatic CRUD API handlers and server adapters",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -120,8 +120,8 @@
120
120
  "ts-pattern": "^5.7.1",
121
121
  "url-pattern": "^1.0.3",
122
122
  "zod-validation-error": "^4.0.1",
123
- "@zenstackhq/common-helpers": "3.0.0",
124
- "@zenstackhq/orm": "3.0.0"
123
+ "@zenstackhq/common-helpers": "3.1.1",
124
+ "@zenstackhq/orm": "3.1.1"
125
125
  },
126
126
  "devDependencies": {
127
127
  "@sveltejs/kit": "^2.48.3",
@@ -136,13 +136,13 @@
136
136
  "h3": "^1.15.4",
137
137
  "hono": "^4.6.3",
138
138
  "next": "16.0.10",
139
- "nuxt": "^4.2.0",
139
+ "nuxt": "4.2.2",
140
140
  "supertest": "^7.1.4",
141
141
  "zod": "^4.1.0",
142
- "@zenstackhq/eslint-config": "3.0.0",
143
- "@zenstackhq/testtools": "3.0.0",
144
- "@zenstackhq/typescript-config": "3.0.0",
145
- "@zenstackhq/vitest-config": "3.0.0"
142
+ "@zenstackhq/eslint-config": "3.1.1",
143
+ "@zenstackhq/testtools": "3.1.1",
144
+ "@zenstackhq/vitest-config": "3.1.1",
145
+ "@zenstackhq/typescript-config": "3.1.1"
146
146
  },
147
147
  "peerDependencies": {
148
148
  "@sveltejs/kit": "^2.0.0",