@zenstackhq/server 2.14.2 → 2.15.0

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.
@@ -0,0 +1,44 @@
1
+ import { Elysia, Context as ElysiaContext } from 'elysia';
2
+ import { AdapterBaseOptions } from '../types';
3
+ /**
4
+ * Options for initializing an Elysia middleware.
5
+ */
6
+ export interface ElysiaOptions extends AdapterBaseOptions {
7
+ /**
8
+ * Callback method for getting a Prisma instance for the given request context.
9
+ */
10
+ getPrisma: (context: ElysiaContext) => Promise<unknown> | unknown;
11
+ /**
12
+ * Optional base path to strip from the request path before passing to the API handler.
13
+ */
14
+ basePath?: string;
15
+ }
16
+ /**
17
+ * Creates an Elysia middleware handler for ZenStack.
18
+ * This handler provides automatic CRUD APIs through Elysia's routing system.
19
+ */
20
+ export declare function createElysiaHandler(options: ElysiaOptions): (app: Elysia) => Promise<Elysia<"", {
21
+ decorator: {};
22
+ store: {};
23
+ derive: {};
24
+ resolve: {};
25
+ }, {
26
+ typebox: {};
27
+ error: {};
28
+ }, {
29
+ schema: {};
30
+ standaloneSchema: {};
31
+ macro: {};
32
+ macroFn: {};
33
+ parser: {};
34
+ }, {}, {
35
+ derive: {};
36
+ resolve: {};
37
+ schema: {};
38
+ standaloneSchema: {};
39
+ }, {
40
+ derive: {};
41
+ resolve: {};
42
+ schema: {};
43
+ standaloneSchema: {};
44
+ }>>;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createElysiaHandler = createElysiaHandler;
4
+ const api_1 = require("../api");
5
+ const shared_1 = require("../shared");
6
+ /**
7
+ * Creates an Elysia middleware handler for ZenStack.
8
+ * This handler provides automatic CRUD APIs through Elysia's routing system.
9
+ */
10
+ function createElysiaHandler(options) {
11
+ const { modelMeta, zodSchemas } = (0, shared_1.loadAssets)(options);
12
+ const requestHandler = options.handler ?? (0, api_1.RPCApiHandler)();
13
+ return async (app) => {
14
+ app.all('/*', async (ctx) => {
15
+ const { request, body, set } = ctx;
16
+ const prisma = (await options.getPrisma(ctx));
17
+ if (!prisma) {
18
+ set.status = 500;
19
+ return {
20
+ message: 'unable to get prisma from request context',
21
+ };
22
+ }
23
+ const url = new URL(request.url);
24
+ const query = Object.fromEntries(url.searchParams);
25
+ let path = url.pathname;
26
+ if (options.basePath && path.startsWith(options.basePath)) {
27
+ path = path.slice(options.basePath.length);
28
+ if (!path.startsWith('/')) {
29
+ path = '/' + path;
30
+ }
31
+ }
32
+ if (!path || path === '/') {
33
+ set.status = 400;
34
+ return {
35
+ message: 'missing path parameter',
36
+ };
37
+ }
38
+ try {
39
+ const r = await requestHandler({
40
+ method: request.method,
41
+ path,
42
+ query,
43
+ requestBody: body,
44
+ prisma,
45
+ modelMeta,
46
+ zodSchemas,
47
+ logger: options.logger,
48
+ });
49
+ set.status = r.status;
50
+ return r.body;
51
+ }
52
+ catch (err) {
53
+ set.status = 500;
54
+ return {
55
+ message: 'An internal server error occurred',
56
+ };
57
+ }
58
+ });
59
+ return app;
60
+ };
61
+ }
62
+ //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/elysia/handler.ts"],"names":[],"mappings":";;AAwBA,kDAyDC;AA/ED,gCAAuC;AACvC,sCAAuC;AAiBvC;;;GAGG;AACH,SAAgB,mBAAmB,CAAC,OAAsB;IACtD,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,IAAA,mBAAU,EAAC,OAAO,CAAC,CAAC;IACtD,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,IAAI,IAAA,mBAAa,GAAE,CAAC;IAE1D,OAAO,KAAK,EAAE,GAAW,EAAE,EAAE;QACzB,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAkB,EAAE,EAAE;YACvC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;YACnC,MAAM,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAqB,CAAC;YAClE,IAAI,CAAC,MAAM,EAAE,CAAC;gBACV,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;gBACjB,OAAO;oBACH,OAAO,EAAE,2CAA2C;iBACvD,CAAC;YACN,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACnD,IAAI,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;YAExB,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACxD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC3C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxB,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;gBACtB,CAAC;YACL,CAAC;YAED,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACxB,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;gBACjB,OAAO;oBACH,OAAO,EAAE,wBAAwB;iBACpC,CAAC;YACN,CAAC;YAED,IAAI,CAAC;gBACD,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC;oBAC3B,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,IAAI;oBACJ,KAAK;oBACL,WAAW,EAAE,IAAI;oBACjB,MAAM;oBACN,SAAS;oBACT,UAAU;oBACV,MAAM,EAAE,OAAO,CAAC,MAAM;iBACzB,CAAC,CAAC;gBAEH,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;gBACtB,OAAO,CAAC,CAAC,IAAI,CAAC;YAClB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;gBACjB,OAAO;oBACH,OAAO,EAAE,mCAAmC;iBAC/C,CAAC;YACN,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACf,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1 @@
1
+ export * from './handler';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./handler"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/elysia/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zenstackhq/server",
3
- "version": "2.14.2",
3
+ "version": "2.15.0",
4
4
  "displayName": "ZenStack Server-side Adapters",
5
5
  "description": "ZenStack server-side adapters",
6
6
  "homepage": "https://zenstack.dev",
@@ -13,7 +13,8 @@
13
13
  "express",
14
14
  "nextjs",
15
15
  "sveltekit",
16
- "nuxtjs"
16
+ "nuxtjs",
17
+ "elysia"
17
18
  ],
18
19
  "author": "ZenStack Team",
19
20
  "license": "MIT",
@@ -28,7 +29,7 @@
28
29
  "zod": "^3.22.4",
29
30
  "zod-validation-error": "^1.5.0",
30
31
  "decimal.js": "^10.4.2",
31
- "@zenstackhq/runtime": "2.14.2"
32
+ "@zenstackhq/runtime": "2.15.0"
32
33
  },
33
34
  "devDependencies": {
34
35
  "@nestjs/common": "^10.3.7",
@@ -39,6 +40,7 @@
39
40
  "@types/express": "^4.17.17",
40
41
  "@types/supertest": "^2.0.12",
41
42
  "body-parser": "^1.20.2",
43
+ "elysia": "^1.3.1",
42
44
  "express": "^4.19.2",
43
45
  "fastify": "^4.14.1",
44
46
  "fastify-plugin": "^4.5.0",
@@ -49,7 +51,7 @@
49
51
  "nuxt": "^3.7.4",
50
52
  "reflect-metadata": "^0.2.2",
51
53
  "supertest": "^6.3.3",
52
- "@zenstackhq/testtools": "2.14.2"
54
+ "@zenstackhq/testtools": "2.15.0"
53
55
  },
54
56
  "exports": {
55
57
  "./package.json": "./package.json",
@@ -65,6 +67,7 @@
65
67
  "./nuxt": "./nuxt/index.js",
66
68
  "./nestjs": "./nestjs/index.js",
67
69
  "./hono": "./hono/index.js",
70
+ "./elysia": "./elysia/index.js",
68
71
  "./types": "./types.js"
69
72
  },
70
73
  "scripts": {