@zenstackhq/server 2.19.2 → 2.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zenstackhq/server",
3
- "version": "2.19.2",
3
+ "version": "2.20.1",
4
4
  "displayName": "ZenStack Server-side Adapters",
5
5
  "description": "ZenStack server-side adapters",
6
6
  "homepage": "https://zenstack.dev",
@@ -14,7 +14,8 @@
14
14
  "nextjs",
15
15
  "sveltekit",
16
16
  "nuxtjs",
17
- "elysia"
17
+ "elysia",
18
+ "tanstack-start"
18
19
  ],
19
20
  "author": "ZenStack Team",
20
21
  "license": "MIT",
@@ -23,7 +24,7 @@
23
24
  "ts-japi": "^1.10.1",
24
25
  "url-pattern": "^1.0.3",
25
26
  "decimal.js": "^10.4.2",
26
- "@zenstackhq/runtime": "2.19.2"
27
+ "@zenstackhq/runtime": "2.20.1"
27
28
  },
28
29
  "peerDependencies": {
29
30
  "zod": "^3.25.0 || ^4.0.0"
@@ -49,7 +50,7 @@
49
50
  "reflect-metadata": "^0.2.2",
50
51
  "supertest": "^6.3.3",
51
52
  "zod": "^3.25.0",
52
- "@zenstackhq/testtools": "2.19.2"
53
+ "@zenstackhq/testtools": "2.20.1"
53
54
  },
54
55
  "exports": {
55
56
  "./package.json": "./package.json",
@@ -66,6 +67,7 @@
66
67
  "./nestjs": "./nestjs/index.js",
67
68
  "./hono": "./hono/index.js",
68
69
  "./elysia": "./elysia/index.js",
70
+ "./tanstack-start": "./tanstack-start/index.js",
69
71
  "./types": "./types.js"
70
72
  },
71
73
  "scripts": {
@@ -0,0 +1,11 @@
1
+ import { TanStackStartOptions } from '.';
2
+ /**
3
+ * Creates a TanStack Start server route handler which encapsulates Prisma CRUD operations.
4
+ *
5
+ * @param options Options for initialization
6
+ * @returns A TanStack Start server route handler
7
+ */
8
+ export default function factory(options: TanStackStartOptions): ({ request, params }: {
9
+ request: Request;
10
+ params: Record<string, string>;
11
+ }) => Promise<Response>;
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ /* eslint-disable @typescript-eslint/no-non-null-assertion */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.default = factory;
5
+ const api_1 = require("../api");
6
+ const shared_1 = require("../shared");
7
+ /**
8
+ * Creates a TanStack Start server route handler which encapsulates Prisma CRUD operations.
9
+ *
10
+ * @param options Options for initialization
11
+ * @returns A TanStack Start server route handler
12
+ */
13
+ function factory(options) {
14
+ const { modelMeta, zodSchemas } = (0, shared_1.loadAssets)(options);
15
+ const requestHandler = options.handler || (0, api_1.RPCApiHandler)();
16
+ return async ({ request, params }) => {
17
+ const prisma = (await options.getPrisma(request, params));
18
+ if (!prisma) {
19
+ return new Response(JSON.stringify({ message: 'unable to get prisma from request context' }), {
20
+ status: 500,
21
+ headers: {
22
+ 'Content-Type': 'application/json',
23
+ },
24
+ });
25
+ }
26
+ const url = new URL(request.url);
27
+ const query = Object.fromEntries(url.searchParams);
28
+ // Extract path from params._splat for catch-all routes
29
+ const path = params._splat;
30
+ if (!path) {
31
+ return new Response(JSON.stringify({ message: 'missing path parameter' }), {
32
+ status: 400,
33
+ headers: {
34
+ 'Content-Type': 'application/json',
35
+ },
36
+ });
37
+ }
38
+ let requestBody;
39
+ if (request.body) {
40
+ try {
41
+ requestBody = await request.json();
42
+ }
43
+ catch {
44
+ // noop
45
+ }
46
+ }
47
+ try {
48
+ const r = await requestHandler({
49
+ method: request.method,
50
+ path,
51
+ query,
52
+ requestBody,
53
+ prisma,
54
+ modelMeta,
55
+ zodSchemas,
56
+ logger: options.logger,
57
+ });
58
+ return new Response(JSON.stringify(r.body), {
59
+ status: r.status,
60
+ headers: {
61
+ 'Content-Type': 'application/json',
62
+ },
63
+ });
64
+ }
65
+ catch (err) {
66
+ return new Response(JSON.stringify({ message: `An unhandled error occurred: ${err}` }), {
67
+ status: 500,
68
+ headers: {
69
+ 'Content-Type': 'application/json',
70
+ },
71
+ });
72
+ }
73
+ };
74
+ }
75
+ //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/tanstack-start/handler.ts"],"names":[],"mappings":";AAAA,6DAA6D;;AAa7D,0BAoEC;AA7ED,gCAAuC;AACvC,sCAAuC;AAEvC;;;;;GAKG;AACH,SAAwB,OAAO,CAC3B,OAA6B;IAE7B,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,IAAA,mBAAU,EAAC,OAAO,CAAC,CAAC;IAEtD,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,IAAI,IAAA,mBAAa,GAAE,CAAC;IAE1D,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAwD,EAAE,EAAE;QACvF,MAAM,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAqB,CAAC;QAC9E,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAC,EAAE;gBAC1F,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE;oBACL,cAAc,EAAE,kBAAkB;iBACrC;aACJ,CAAC,CAAC;QACP,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAEnD,uDAAuD;QACvD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;QAE3B,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,EAAE;gBACvE,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE;oBACL,cAAc,EAAE,kBAAkB;iBACrC;aACJ,CAAC,CAAC;QACP,CAAC;QAED,IAAI,WAAoB,CAAC;QACzB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC;gBACD,WAAW,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YACvC,CAAC;YAAC,MAAM,CAAC;gBACL,OAAO;YACX,CAAC;QACL,CAAC;QAED,IAAI,CAAC;YACD,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC;gBAC3B,MAAM,EAAE,OAAO,CAAC,MAAO;gBACvB,IAAI;gBACJ,KAAK;gBACL,WAAW;gBACX,MAAM;gBACN,SAAS;gBACT,UAAU;gBACV,MAAM,EAAE,OAAO,CAAC,MAAM;aACzB,CAAC,CAAC;YACH,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;gBACxC,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,OAAO,EAAE;oBACL,cAAc,EAAE,kBAAkB;iBACrC;aACJ,CAAC,CAAC;QACP,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,gCAAgC,GAAG,EAAE,EAAE,CAAC,EAAE;gBACpF,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE;oBACL,cAAc,EAAE,kBAAkB;iBACrC;aACJ,CAAC,CAAC;QACP,CAAC;IACL,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { AdapterBaseOptions } from '../types';
2
+ import { default as Handler } from './handler';
3
+ /**
4
+ * Options for initializing a TanStack Start server route handler.
5
+ */
6
+ export interface TanStackStartOptions extends AdapterBaseOptions {
7
+ /**
8
+ * Callback method for getting a Prisma instance for the given request and params.
9
+ */
10
+ getPrisma: (request: Request, params: Record<string, string>) => Promise<unknown> | unknown;
11
+ }
12
+ /**
13
+ * Creates a TanStack Start server route handler.
14
+ * @see https://zenstack.dev/docs/reference/server-adapters/tanstack-start
15
+ */
16
+ export declare function TanStackStartHandler(options: TanStackStartOptions): ReturnType<typeof Handler>;
17
+ export default TanStackStartHandler;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TanStackStartHandler = TanStackStartHandler;
7
+ const handler_1 = __importDefault(require("./handler"));
8
+ /**
9
+ * Creates a TanStack Start server route handler.
10
+ * @see https://zenstack.dev/docs/reference/server-adapters/tanstack-start
11
+ */
12
+ function TanStackStartHandler(options) {
13
+ return (0, handler_1.default)(options);
14
+ }
15
+ exports.default = TanStackStartHandler;
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tanstack-start/index.ts"],"names":[],"mappings":";;;;;AAiBA,oDAEC;AAlBD,wDAA+C;AAY/C;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,OAA6B;IAC9D,OAAO,IAAA,iBAAO,EAAC,OAAO,CAAC,CAAC;AAC5B,CAAC;AAED,kBAAe,oBAAoB,CAAC"}