@zenstackhq/server 1.0.0-alpha.71 → 1.0.0-alpha.73

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.
@@ -1,9 +1,26 @@
1
+ import { ModelZodSchema } from '@zenstackhq/runtime/zod';
1
2
  import { FastifyPluginCallback, FastifyReply, FastifyRequest } from 'fastify';
2
3
  import { LoggerConfig } from '../openapi';
4
+ /**
5
+ * Fastify plugin options
6
+ */
3
7
  export interface PluginOptions {
8
+ /**
9
+ * Url prefix, e.g.: /api
10
+ */
4
11
  prefix: string;
12
+ /**
13
+ * Callback for gettign a PrismaClient for the given request
14
+ */
5
15
  getPrisma: (request: FastifyRequest, reply: FastifyReply) => unknown | Promise<unknown>;
16
+ /**
17
+ * Logger settings
18
+ */
6
19
  logger?: LoggerConfig;
20
+ /**
21
+ * Path to the generated zod schemas
22
+ */
23
+ zodSchemas?: ModelZodSchema;
7
24
  }
8
25
  declare const _default: FastifyPluginCallback<PluginOptions, import("fastify").RawServerDefault, import("fastify").FastifyTypeProviderDefault, import("fastify").FastifyBaseLogger>;
9
26
  export default _default;
package/fastify/plugin.js CHANGED
@@ -36,6 +36,7 @@ const pluginHandler = (fastify, options, done) => {
36
36
  requestBody: request.body,
37
37
  prisma,
38
38
  logger: options.logger,
39
+ zodSchemas: options.zodSchemas,
39
40
  });
40
41
  reply.status(response.status).send(response.body);
41
42
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/fastify/plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAGA,oEAAgC;AAChC,wCAAyD;AAQzD,MAAM,aAAa,GAAyC,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;;IACnF,MAAM,MAAM,GAAG,MAAA,OAAO,CAAC,MAAM,mCAAI,EAAE,CAAC;IAEpC,IAAI,CAAA,MAAA,OAAO,CAAC,MAAM,0CAAE,IAAI,MAAK,SAAS,EAAE;QACpC,OAAO,CAAC,GAAG,CAAC,+CAA+C,MAAM,EAAE,CAAC,CAAC;KACxE;SAAM;QACH,MAAA,MAAA,OAAO,CAAC,MAAM,0CAAE,IAAI,mDAAG,+CAA+C,MAAM,EAAE,CAAC,CAAC;KACnF;IAED,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,EAAE,CAAO,OAAO,EAAE,KAAK,EAAE,EAAE;QAChD,MAAM,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAqB,CAAC;QAC7E,IAAI,CAAC,MAAM,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;SAChE;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAA+B,CAAC;QAEtD,MAAM,QAAQ,GAAG,MAAM,IAAA,uBAAa,EAAC;YACjC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI,EAAG,OAAO,CAAC,MAAc,CAAC,GAAG,CAAC;YAClC,KAAK;YACL,WAAW,EAAE,OAAO,CAAC,IAAI;YACzB,MAAM;YACN,MAAM,EAAE,OAAO,CAAC,MAAM;SACzB,CAAC,CAAC;QAEH,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC,CAAA,CAAC,CAAC;IAEH,IAAI,EAAE,CAAC;AACX,CAAC,CAAC;AAEF,kBAAe,IAAA,wBAAE,EAAC,aAAa,CAAC,CAAC"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/fastify/plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAIA,oEAAgC;AAChC,wCAAyD;AA2BzD,MAAM,aAAa,GAAyC,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;;IACnF,MAAM,MAAM,GAAG,MAAA,OAAO,CAAC,MAAM,mCAAI,EAAE,CAAC;IAEpC,IAAI,CAAA,MAAA,OAAO,CAAC,MAAM,0CAAE,IAAI,MAAK,SAAS,EAAE;QACpC,OAAO,CAAC,GAAG,CAAC,+CAA+C,MAAM,EAAE,CAAC,CAAC;KACxE;SAAM;QACH,MAAA,MAAA,OAAO,CAAC,MAAM,0CAAE,IAAI,mDAAG,+CAA+C,MAAM,EAAE,CAAC,CAAC;KACnF;IAED,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,EAAE,CAAO,OAAO,EAAE,KAAK,EAAE,EAAE;QAChD,MAAM,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAqB,CAAC;QAC7E,IAAI,CAAC,MAAM,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;SAChE;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAA+B,CAAC;QAEtD,MAAM,QAAQ,GAAG,MAAM,IAAA,uBAAa,EAAC;YACjC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI,EAAG,OAAO,CAAC,MAAc,CAAC,GAAG,CAAC;YAClC,KAAK;YACL,WAAW,EAAE,OAAO,CAAC,IAAI;YACzB,MAAM;YACN,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,UAAU,EAAE,OAAO,CAAC,UAAU;SACjC,CAAC,CAAC;QAEH,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC,CAAA,CAAC,CAAC;IAEH,IAAI,EAAE,CAAC;AACX,CAAC,CAAC;AAEF,kBAAe,IAAA,wBAAE,EAAC,aAAa,CAAC,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { DbClientContract } from '@zenstackhq/runtime';
2
+ import { ModelZodSchema } from '@zenstackhq/runtime/zod';
2
3
  type LoggerMethod = (message: string, code?: string) => void;
3
4
  /**
4
5
  * Logger config.
@@ -19,17 +20,27 @@ export type RequestHandlerOptions = {
19
20
  */
20
21
  logger?: LoggerConfig | null;
21
22
  };
23
+ /**
24
+ * OpenApi request context.
25
+ */
22
26
  export type RequestContext = {
23
27
  method: string;
24
28
  path: string;
25
- query: Record<string, string | string[]>;
26
- requestBody: unknown;
29
+ query?: Record<string, string | string[]>;
30
+ requestBody?: unknown;
27
31
  prisma: DbClientContract;
28
32
  logger?: LoggerConfig;
33
+ zodSchemas?: ModelZodSchema;
29
34
  };
35
+ /**
36
+ * OpenApi response.
37
+ */
30
38
  export type Response = {
31
39
  status: number;
32
40
  body: unknown;
33
41
  };
34
- export declare function handleRequest({ method, path, query, requestBody, prisma, logger, }: RequestContext): Promise<Response>;
42
+ /**
43
+ * Handles OpenApi requests
44
+ */
45
+ export declare function handleRequest({ method, path, query, requestBody, prisma, logger, zodSchemas, }: RequestContext): Promise<Response>;
35
46
  export {};
package/openapi/index.js CHANGED
@@ -14,22 +14,51 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.handleRequest = void 0;
16
16
  const runtime_1 = require("@zenstackhq/runtime");
17
+ const zod_1 = require("@zenstackhq/runtime/zod");
18
+ const change_case_1 = require("change-case");
17
19
  const tiny_invariant_1 = __importDefault(require("tiny-invariant"));
18
- function logError(logger, message, code) {
19
- if (logger === undefined) {
20
- console.error(`@zenstackhq/openapi: error ${code ? '[' + code + ']' : ''}, ${message}`);
20
+ const zod_validation_error_1 = require("zod-validation-error");
21
+ const utils_1 = require("./utils");
22
+ function getZodSchema(zodSchemas, model, operation) {
23
+ if (!zodSchemas) {
24
+ zodSchemas = (0, zod_1.getModelZodSchemas)();
21
25
  }
22
- else if (logger === null || logger === void 0 ? void 0 : logger.error) {
23
- logger.error(message, code);
26
+ if (zodSchemas[model]) {
27
+ return zodSchemas[model][operation];
28
+ }
29
+ else if (zodSchemas[(0, change_case_1.capitalCase)(model)]) {
30
+ return zodSchemas[(0, change_case_1.capitalCase)(model)][operation];
31
+ }
32
+ else {
33
+ return undefined;
34
+ }
35
+ }
36
+ function zodValidate(zodSchemas, model, operation, args) {
37
+ const zodSchema = getZodSchema(zodSchemas, model, operation);
38
+ if (zodSchema) {
39
+ const parseResult = zodSchema.safeParse(args);
40
+ if (parseResult.success) {
41
+ return { data: parseResult.data, error: undefined };
42
+ }
43
+ else {
44
+ return { data: undefined, error: (0, zod_validation_error_1.fromZodError)(parseResult.error).message };
45
+ }
46
+ }
47
+ else {
48
+ return { data: args, error: undefined };
24
49
  }
25
50
  }
26
- function handleRequest({ method, path, query, requestBody, prisma, logger, }) {
51
+ /**
52
+ * Handles OpenApi requests
53
+ */
54
+ function handleRequest({ method, path, query, requestBody, prisma, logger, zodSchemas, }) {
27
55
  var _a, _b;
28
56
  return __awaiter(this, void 0, void 0, function* () {
29
57
  const parts = path.split('/');
30
58
  if (parts.length < 2) {
31
59
  return { status: 400, body: { error: 'invalid request path' } };
32
60
  }
61
+ method = method.toUpperCase();
33
62
  const op = parts.pop();
34
63
  const model = parts.pop();
35
64
  (0, tiny_invariant_1.default)(op);
@@ -44,6 +73,9 @@ function handleRequest({ method, path, query, requestBody, prisma, logger, }) {
44
73
  if (method !== 'POST') {
45
74
  return { status: 400, body: { message: 'invalid request method, only POST is supported' } };
46
75
  }
76
+ if (!requestBody) {
77
+ return { status: 400, body: { message: 'missing request body' } };
78
+ }
47
79
  args = requestBody;
48
80
  // TODO: upsert's status code should be conditional
49
81
  resCode = 201;
@@ -57,13 +89,16 @@ function handleRequest({ method, path, query, requestBody, prisma, logger, }) {
57
89
  if (method !== 'GET') {
58
90
  return { status: 400, body: { message: 'invalid request method, only GET is supported' } };
59
91
  }
60
- args = query.q ? unmarshal(query.q) : {};
92
+ args = (query === null || query === void 0 ? void 0 : query.q) ? unmarshal(query.q) : {};
61
93
  break;
62
94
  case 'update':
63
95
  case 'updateMany':
64
96
  if (method !== 'PUT' && method !== 'PATCH') {
65
97
  return { status: 400, body: { message: 'invalid request method, only PUT AND PATCH are supported' } };
66
98
  }
99
+ if (!requestBody) {
100
+ return { status: 400, body: { message: 'missing request body' } };
101
+ }
67
102
  args = requestBody;
68
103
  break;
69
104
  case 'delete':
@@ -71,16 +106,24 @@ function handleRequest({ method, path, query, requestBody, prisma, logger, }) {
71
106
  if (method !== 'DELETE') {
72
107
  return { status: 400, body: { message: 'invalid request method, only DELETE is supported' } };
73
108
  }
74
- args = query.q ? unmarshal(query.q) : {};
109
+ args = (query === null || query === void 0 ? void 0 : query.q) ? unmarshal(query.q) : {};
75
110
  break;
76
111
  default:
77
112
  return { status: 400, body: { message: 'invalid operation: ' + op } };
78
113
  }
114
+ const { data, error } = zodValidate(zodSchemas, model, dbOp, args);
115
+ if (error) {
116
+ return { status: 400, body: { message: error } };
117
+ }
118
+ else {
119
+ args = data;
120
+ }
79
121
  try {
80
122
  if (!prisma[model]) {
81
123
  return { status: 400, body: { message: `unknown model name: ${model}` } };
82
124
  }
83
125
  const result = yield prisma[model][dbOp](args);
126
+ (0, utils_1.stripAuxFields)(result);
84
127
  return { status: resCode, body: result };
85
128
  }
86
129
  catch (err) {
@@ -137,4 +180,12 @@ exports.handleRequest = handleRequest;
137
180
  function unmarshal(value) {
138
181
  return JSON.parse(value);
139
182
  }
183
+ function logError(logger, message, code) {
184
+ if (logger === undefined) {
185
+ console.error(`@zenstackhq/openapi: error ${code ? '[' + code + ']' : ''}, ${message}`);
186
+ }
187
+ else if (logger === null || logger === void 0 ? void 0 : logger.error) {
188
+ logger.error(message, code);
189
+ }
190
+ }
140
191
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/openapi/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/openapi/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Recursively strip auxiliary fields from the given data.
3
+ */
4
+ export declare function stripAuxFields(data: unknown): void;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stripAuxFields = void 0;
4
+ const sdk_1 = require("@zenstackhq/sdk");
5
+ /**
6
+ * Recursively strip auxiliary fields from the given data.
7
+ */
8
+ function stripAuxFields(data) {
9
+ if (Array.isArray(data)) {
10
+ return data.forEach(stripAuxFields);
11
+ }
12
+ else if (data && typeof data === 'object') {
13
+ for (const [key, value] of Object.entries(data)) {
14
+ if (sdk_1.AUXILIARY_FIELDS.includes(key)) {
15
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
+ delete data[key];
17
+ }
18
+ else {
19
+ stripAuxFields(value);
20
+ }
21
+ }
22
+ }
23
+ }
24
+ exports.stripAuxFields = stripAuxFields;
25
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/openapi/utils.ts"],"names":[],"mappings":";;;AAAA,yCAAmD;AAEnD;;GAEG;AACH,SAAgB,cAAc,CAAC,IAAa;IACxC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;KACvC;SAAM,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QACzC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC7C,IAAI,sBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBAChC,8DAA8D;gBAC9D,OAAQ,IAAY,CAAC,GAAG,CAAC,CAAC;aAC7B;iBAAM;gBACH,cAAc,CAAC,KAAK,CAAC,CAAC;aACzB;SACJ;KACJ;AACL,CAAC;AAbD,wCAaC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zenstackhq/server",
3
- "version": "1.0.0-alpha.71",
3
+ "version": "1.0.0-alpha.73",
4
4
  "displayName": "ZenStack Server-side Adapters",
5
5
  "description": "ZenStack server-side adapters",
6
6
  "homepage": "https://zenstack.dev",
@@ -14,26 +14,23 @@
14
14
  "author": "",
15
15
  "license": "MIT",
16
16
  "dependencies": {
17
+ "change-case": "^4.1.2",
17
18
  "tiny-invariant": "^1.3.1",
18
- "tmp": "^0.2.1",
19
- "@zenstackhq/openapi": "1.0.0-alpha.71",
20
- "@zenstackhq/runtime": "1.0.0-alpha.71",
21
- "@zenstackhq/testtools": "1.0.0-alpha.71"
19
+ "zod-validation-error": "^0.2.1",
20
+ "@zenstackhq/runtime": "1.0.0-alpha.73",
21
+ "@zenstackhq/sdk": "1.0.0-alpha.73",
22
+ "@zenstackhq/openapi": "1.0.0-alpha.73"
22
23
  },
23
24
  "devDependencies": {
24
25
  "@types/jest": "^29.4.0",
25
- "@types/react": "^18.0.26",
26
- "@types/supertest": "^2.0.12",
27
26
  "copyfiles": "^2.4.1",
28
27
  "fastify": "^4.14.1",
29
28
  "fastify-plugin": "^4.5.0",
30
29
  "jest": "^29.4.3",
31
- "react": "^17.0.2 || ^18",
32
30
  "rimraf": "^3.0.2",
33
- "superjson": "^1.11.0",
34
- "supertest": "^6.3.3",
35
31
  "ts-jest": "^29.0.5",
36
- "typescript": "^4.9.4"
32
+ "typescript": "^4.9.4",
33
+ "@zenstackhq/testtools": "1.0.0-alpha.73"
37
34
  },
38
35
  "scripts": {
39
36
  "clean": "rimraf dist",