typespec-fastify 0.1.0 → 0.3.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.
- package/LICENSE +21 -0
- package/dist/src/components/ModelsDirectory.js +8 -2
- package/dist/src/components/ModelsDirectory.js.map +1 -1
- package/dist/src/components/ModelsDirectory.jsx +4 -0
- package/dist/src/components/ModelsDirectory.jsx.map +1 -1
- package/dist/src/components/OperationInterface.js +45 -30
- package/dist/src/components/OperationInterface.js.map +1 -1
- package/dist/src/components/OperationInterface.jsx +30 -23
- package/dist/src/components/OperationInterface.jsx.map +1 -1
- package/dist/src/components/OperationsDirectory.js +12 -4
- package/dist/src/components/OperationsDirectory.js.map +1 -1
- package/dist/src/components/OperationsDirectory.jsx +14 -1
- package/dist/src/components/OperationsDirectory.jsx.map +1 -1
- package/dist/src/components/ResponseTypes.d.ts +4 -0
- package/dist/src/components/ResponseTypes.js +21 -0
- package/dist/src/components/ResponseTypes.js.map +1 -0
- package/dist/src/components/ResponseTypes.jsx +27 -0
- package/dist/src/components/ResponseTypes.jsx.map +1 -0
- package/dist/src/components/RouteRegistration.d.ts +2 -2
- package/dist/src/components/RouteRegistration.js +142 -71
- package/dist/src/components/RouteRegistration.js.map +1 -1
- package/dist/src/components/RouteRegistration.jsx +148 -49
- package/dist/src/components/RouteRegistration.jsx.map +1 -1
- package/dist/src/components/RouterFile.js +19 -15
- package/dist/src/components/RouterFile.js.map +1 -1
- package/dist/src/components/RouterFile.jsx +11 -9
- package/dist/src/components/RouterFile.jsx.map +1 -1
- package/dist/src/components/RoutesDirectory.js +27 -26
- package/dist/src/components/RoutesDirectory.js.map +1 -1
- package/dist/src/components/RoutesDirectory.jsx +12 -15
- package/dist/src/components/RoutesDirectory.jsx.map +1 -1
- package/dist/src/components/ZodSchemasDirectory.d.ts +9 -0
- package/dist/src/components/ZodSchemasDirectory.js +37 -0
- package/dist/src/components/ZodSchemasDirectory.js.map +1 -0
- package/dist/src/components/ZodSchemasDirectory.jsx +25 -0
- package/dist/src/components/ZodSchemasDirectory.jsx.map +1 -0
- package/dist/src/emitter.js +13 -1
- package/dist/src/emitter.js.map +1 -1
- package/dist/src/emitter.jsx +6 -1
- package/dist/src/emitter.jsx.map +1 -1
- package/dist/src/external-packages/fastify-type-provider-zod.d.ts +5 -0
- package/dist/src/external-packages/fastify-type-provider-zod.js +11 -0
- package/dist/src/external-packages/fastify-type-provider-zod.js.map +1 -0
- package/dist/src/lib.d.ts +8 -1
- package/dist/src/lib.js +8 -1
- package/dist/src/lib.js.map +1 -1
- package/dist/src/utils/http-helpers.d.ts +0 -13
- package/dist/src/utils/http-helpers.js +0 -22
- package/dist/src/utils/http-helpers.js.map +1 -1
- package/package.json +55 -24
- package/dist/test/hello.test.d.ts +0 -1
- package/dist/test/hello.test.js +0 -187
- package/dist/test/hello.test.js.map +0 -1
- package/dist/test/test-host.d.ts +0 -5
- package/dist/test/test-host.js +0 -52
- package/dist/test/test-host.js.map +0 -1
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { For, List, refkey } from "@alloy-js/core";
|
|
1
|
+
import { memo as _$memo, createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
|
|
2
|
+
import { code, For, List, refkey } from "@alloy-js/core";
|
|
3
3
|
import * as ts from "@alloy-js/typescript";
|
|
4
|
-
import {
|
|
4
|
+
import { useTSNamePolicy } from "@alloy-js/typescript";
|
|
5
|
+
import { isVoidType } from "@typespec/compiler";
|
|
6
|
+
import { getHttpVerb } from "../utils/http-helpers.js";
|
|
5
7
|
import { fastifyLib } from "../external-packages/fastify.js";
|
|
8
|
+
import { fastifyTypeProviderZod } from "../external-packages/fastify-type-provider-zod.js";
|
|
6
9
|
import { getOperationInterfaceRef } from "./OperationInterface.js";
|
|
10
|
+
import { ZodSchema, zod } from "typespec-zod";
|
|
7
11
|
/**
|
|
8
12
|
* Creates a refkey for a route registration function.
|
|
9
13
|
* This allows the loadRoutes function to reference it with automatic imports.
|
|
@@ -13,15 +17,16 @@ export function getRouteRegistrationRef(containerName) {
|
|
|
13
17
|
}
|
|
14
18
|
|
|
15
19
|
/**
|
|
16
|
-
* Generates Fastify route registration functions.
|
|
17
|
-
*
|
|
20
|
+
* Generates Fastify route registration functions with Zod schema validation.
|
|
21
|
+
* Uses fastify-type-provider-zod for automatic type inference and runtime validation.
|
|
18
22
|
*/
|
|
19
23
|
export function RouteRegistration(props) {
|
|
20
24
|
const {
|
|
21
25
|
containerName,
|
|
22
26
|
operations
|
|
23
27
|
} = props;
|
|
24
|
-
const
|
|
28
|
+
const namePolicy = useTSNamePolicy();
|
|
29
|
+
const functionName = namePolicy.getName(`register_${containerName}_routes`, "function");
|
|
25
30
|
const interfaceRef = getOperationInterfaceRef(containerName);
|
|
26
31
|
const routeRegRef = getRouteRegistrationRef(containerName);
|
|
27
32
|
return _$createComponent(ts.FunctionDeclaration, {
|
|
@@ -42,71 +47,165 @@ export function RouteRegistration(props) {
|
|
|
42
47
|
get children() {
|
|
43
48
|
return _$createComponent(List, {
|
|
44
49
|
get children() {
|
|
45
|
-
return _$createComponent(
|
|
50
|
+
return [_$createComponent(ts.VarDeclaration, {
|
|
51
|
+
name: "server",
|
|
52
|
+
"const": true,
|
|
53
|
+
get children() {
|
|
54
|
+
return ["fastify.withTypeProvider", "<", _$memo(() => fastifyTypeProviderZod.ZodTypeProvider), ">", "()"];
|
|
55
|
+
}
|
|
56
|
+
}), _$createComponent(For, {
|
|
46
57
|
each: operations,
|
|
47
58
|
hardline: true,
|
|
48
|
-
children:
|
|
59
|
+
children: operation => {
|
|
49
60
|
const verb = getHttpVerb(operation);
|
|
50
|
-
const
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
},
|
|
56
|
-
get args() {
|
|
57
|
-
return [["'", path, "'"], generateRouteHandler(operation, opName)];
|
|
61
|
+
const rawPath = operation.uriTemplate || operation.path;
|
|
62
|
+
const optionalParams = new Set();
|
|
63
|
+
for (const param of operation.parameters.parameters) {
|
|
64
|
+
if (param.type === "path" && param.param.optional) {
|
|
65
|
+
optionalParams.add(param.param.name);
|
|
58
66
|
}
|
|
59
|
-
}
|
|
67
|
+
}
|
|
68
|
+
const path = rawPath.replace(/\{([^}]+)\}/g, function (_match, p1) {
|
|
69
|
+
const paramName = p1.startsWith("/") ? p1.slice(1) : p1;
|
|
70
|
+
const prefix = p1.startsWith("/") ? "/:" : ":";
|
|
71
|
+
const suffix = optionalParams.has(paramName) ? "?" : "";
|
|
72
|
+
return prefix + paramName + suffix;
|
|
73
|
+
});
|
|
74
|
+
const opName = namePolicy.getName(operation.operation.name, "function");
|
|
75
|
+
const routeSchema = generateZodRouteSchema(operation);
|
|
76
|
+
return [_$memo(() => code`server.${verb}('${path}', ${routeSchema}, ${generateRouteHandler(operation, opName, namePolicy)});`)];
|
|
60
77
|
}
|
|
61
|
-
});
|
|
78
|
+
})];
|
|
62
79
|
}
|
|
63
80
|
});
|
|
64
81
|
}
|
|
65
82
|
});
|
|
66
83
|
}
|
|
67
|
-
function
|
|
84
|
+
function generateZodRouteSchema(operation) {
|
|
85
|
+
const schemaProps = [];
|
|
86
|
+
const pathParams = operation.parameters.parameters.filter(function (p) {
|
|
87
|
+
return p.type === "path";
|
|
88
|
+
});
|
|
89
|
+
if (pathParams.length > 0) {
|
|
90
|
+
const pathProperties = [];
|
|
91
|
+
for (let i = 0; i < pathParams.length; i++) {
|
|
92
|
+
const param = pathParams[i];
|
|
93
|
+
const paramName = param.param.name;
|
|
94
|
+
const isOptional = param.param.optional;
|
|
95
|
+
if (i > 0) pathProperties.push([", "]);
|
|
96
|
+
if (isOptional) {
|
|
97
|
+
pathProperties.push([paramName, ": ", _$createComponent(ZodSchema, {
|
|
98
|
+
get type() {
|
|
99
|
+
return param.param.type;
|
|
100
|
+
}
|
|
101
|
+
}), ".optional()"]);
|
|
102
|
+
} else {
|
|
103
|
+
pathProperties.push([paramName, ": ", _$createComponent(ZodSchema, {
|
|
104
|
+
get type() {
|
|
105
|
+
return param.param.type;
|
|
106
|
+
}
|
|
107
|
+
})]);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
schemaProps.push(["params: ", _$memo(() => zod.z), ".object(", "{", pathProperties, "}", ")"]);
|
|
111
|
+
}
|
|
112
|
+
const queryParams = operation.parameters.parameters.filter(function (p) {
|
|
113
|
+
return p.type === "query";
|
|
114
|
+
});
|
|
115
|
+
if (queryParams.length > 0) {
|
|
116
|
+
if (schemaProps.length > 0) schemaProps.push([", "]);
|
|
117
|
+
const queryProperties = [];
|
|
118
|
+
for (let i = 0; i < queryParams.length; i++) {
|
|
119
|
+
const param = queryParams[i];
|
|
120
|
+
const paramName = param.param.name;
|
|
121
|
+
const isOptional = param.param.optional;
|
|
122
|
+
if (i > 0) queryProperties.push([", "]);
|
|
123
|
+
if (isOptional) {
|
|
124
|
+
queryProperties.push([paramName, ": ", _$createComponent(ZodSchema, {
|
|
125
|
+
get type() {
|
|
126
|
+
return param.param.type;
|
|
127
|
+
}
|
|
128
|
+
}), ".optional()"]);
|
|
129
|
+
} else {
|
|
130
|
+
queryProperties.push([paramName, ": ", _$createComponent(ZodSchema, {
|
|
131
|
+
get type() {
|
|
132
|
+
return param.param.type;
|
|
133
|
+
}
|
|
134
|
+
})]);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
schemaProps.push(["querystring: ", _$memo(() => zod.z), ".object(", "{", queryProperties, "}", ")"]);
|
|
138
|
+
}
|
|
139
|
+
if (operation.parameters.body) {
|
|
140
|
+
const bodyParam = operation.parameters.body;
|
|
141
|
+
const isOptional = bodyParam.property?.optional ?? false;
|
|
142
|
+
if (!isOptional) {
|
|
143
|
+
if (schemaProps.length > 0) schemaProps.push([", "]);
|
|
144
|
+
schemaProps.push(["body: ", _$createComponent(ZodSchema, {
|
|
145
|
+
get type() {
|
|
146
|
+
return bodyParam.type;
|
|
147
|
+
}
|
|
148
|
+
})]);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (schemaProps.length === 0) {
|
|
152
|
+
return _$createComponent(ts.ObjectExpression, {});
|
|
153
|
+
}
|
|
154
|
+
return _$createComponent(ts.ObjectExpression, {
|
|
155
|
+
get children() {
|
|
156
|
+
return ["schema: ", "{", schemaProps, "}"];
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
function generateRouteHandler(operation, opName, namePolicy) {
|
|
68
161
|
const callArgs = [];
|
|
69
162
|
for (const param of operation.parameters.parameters) {
|
|
70
163
|
if (param.type === "path") {
|
|
71
|
-
const paramName =
|
|
72
|
-
callArgs.push(["
|
|
164
|
+
const paramName = namePolicy.getName(param.param.name, "parameter");
|
|
165
|
+
callArgs.push(["request.params.", paramName]);
|
|
73
166
|
}
|
|
74
167
|
}
|
|
75
168
|
if (operation.parameters.body) {
|
|
76
|
-
|
|
169
|
+
const bodyParam = operation.parameters.body;
|
|
170
|
+
const isOptional = bodyParam.property?.optional ?? false;
|
|
171
|
+
if (isOptional) {
|
|
172
|
+
callArgs.push(["request.body as any"]);
|
|
173
|
+
} else {
|
|
174
|
+
callArgs.push(["request.body"]);
|
|
175
|
+
}
|
|
77
176
|
}
|
|
78
177
|
for (const param of operation.parameters.parameters) {
|
|
79
178
|
if (param.type === "header") {
|
|
80
179
|
const headerKey = param.name.toLowerCase();
|
|
81
180
|
const headerAccess = ["request.headers['", headerKey, "']"];
|
|
82
|
-
callArgs.push(["Array.isArray(", headerAccess, ") ? ", headerAccess, "[0] : ", headerAccess]);
|
|
181
|
+
callArgs.push(["(Array.isArray(", headerAccess, ") ? ", headerAccess, "[0] : ", headerAccess, ") as string"]);
|
|
83
182
|
}
|
|
84
183
|
}
|
|
85
|
-
const queryParams = operation.parameters.parameters.filter(
|
|
86
|
-
return p.type === "query";
|
|
87
|
-
});
|
|
184
|
+
const queryParams = operation.parameters.parameters.filter(p => p.type === "query");
|
|
88
185
|
if (queryParams.length > 0) {
|
|
89
186
|
const optionsObj = _$createComponent(ts.ObjectExpression, {
|
|
90
187
|
get children() {
|
|
91
|
-
return queryParams.map(function
|
|
92
|
-
const paramName =
|
|
93
|
-
|
|
94
|
-
|
|
188
|
+
return queryParams.map(function (param, index) {
|
|
189
|
+
const paramName = namePolicy.getName(param.param.name, "object-member-data");
|
|
190
|
+
const separator = index > 0 ? ", " : "";
|
|
191
|
+
return `${separator}${paramName}: request.query.${paramName}`;
|
|
192
|
+
}).join("");
|
|
95
193
|
}
|
|
96
194
|
});
|
|
97
195
|
callArgs.push(optionsObj);
|
|
98
196
|
}
|
|
197
|
+
const isVoid = isVoidType(operation.operation.returnType);
|
|
198
|
+
const is204Response = operation.responses.some(function (r) {
|
|
199
|
+
return r.statusCodes === 204;
|
|
200
|
+
});
|
|
201
|
+
const isNoContent = isVoid || is204Response;
|
|
99
202
|
return _$createComponent(ts.FunctionExpression, {
|
|
100
203
|
async: true,
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
name: "reply",
|
|
107
|
-
type: fastifyLib.FastifyReply
|
|
108
|
-
}];
|
|
109
|
-
},
|
|
204
|
+
parameters: [{
|
|
205
|
+
name: "request"
|
|
206
|
+
}, {
|
|
207
|
+
name: "reply"
|
|
208
|
+
}],
|
|
110
209
|
get children() {
|
|
111
210
|
return _$createComponent(List, {
|
|
112
211
|
get children() {
|
|
@@ -122,41 +221,13 @@ function generateRouteHandler(operation, opName) {
|
|
|
122
221
|
args: callArgs
|
|
123
222
|
})];
|
|
124
223
|
}
|
|
125
|
-
}),
|
|
126
|
-
get target() {
|
|
127
|
-
return ["reply.code"];
|
|
128
|
-
},
|
|
129
|
-
get args() {
|
|
130
|
-
return [["200"]];
|
|
131
|
-
}
|
|
132
|
-
}), ".", _$createComponent(ts.FunctionCallExpression, {
|
|
133
|
-
get target() {
|
|
134
|
-
return ["send"];
|
|
135
|
-
},
|
|
136
|
-
get args() {
|
|
137
|
-
return [["result"]];
|
|
138
|
-
}
|
|
139
|
-
}), ";"]];
|
|
224
|
+
}), _$memo(() => isNoContent ? ["reply.code(result.statusCode).send();"] : ["reply.code(result.statusCode).send(result.body);"])];
|
|
140
225
|
}
|
|
141
|
-
}), "}", " catch (error) ", "{", _$createComponent(List, {
|
|
226
|
+
}), ["}", " catch (error) ", "{"], _$createComponent(List, {
|
|
142
227
|
get children() {
|
|
143
|
-
return [
|
|
144
|
-
get target() {
|
|
145
|
-
return ["reply.code"];
|
|
146
|
-
},
|
|
147
|
-
get args() {
|
|
148
|
-
return [["500"]];
|
|
149
|
-
}
|
|
150
|
-
}), ".", _$createComponent(ts.FunctionCallExpression, {
|
|
151
|
-
get target() {
|
|
152
|
-
return ["send"];
|
|
153
|
-
},
|
|
154
|
-
get args() {
|
|
155
|
-
return [["{", " error: error instanceof Error ? error.message : 'Internal server error' ", "}"]];
|
|
156
|
-
}
|
|
157
|
-
}), ";"];
|
|
228
|
+
return ["reply.code(500).send(", "{", " error: error instanceof Error ? error.message : 'Internal server error' ", "}", ");"];
|
|
158
229
|
}
|
|
159
|
-
}), "}"];
|
|
230
|
+
}), ["}"]];
|
|
160
231
|
}
|
|
161
232
|
});
|
|
162
233
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["For","List","refkey","ts","
|
|
1
|
+
{"version":3,"names":["code","For","List","refkey","ts","useTSNamePolicy","isVoidType","getHttpVerb","fastifyLib","fastifyTypeProviderZod","getOperationInterfaceRef","ZodSchema","zod","getRouteRegistrationRef","containerName","RouteRegistration","props","operations","namePolicy","functionName","getName","interfaceRef","routeRegRef","_$createComponent","FunctionDeclaration","name","async","parameters","type","FastifyInstance","returnType","children","VarDeclaration","_$memo","ZodTypeProvider","each","hardline","operation","verb","rawPath","uriTemplate","path","optionalParams","Set","param","optional","add","replace","_match","p1","paramName","startsWith","slice","prefix","suffix","has","opName","routeSchema","generateZodRouteSchema","generateRouteHandler","schemaProps","pathParams","filter","p","length","pathProperties","i","isOptional","push","z","queryParams","queryProperties","body","bodyParam","property","ObjectExpression","callArgs","headerKey","toLowerCase","headerAccess","optionsObj","map","index","separator","join","isVoid","is204Response","responses","some","r","statusCodes","isNoContent","FunctionExpression","FunctionCallExpression","target","args"],"sources":["../../../src/components/RouteRegistration.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
import { For, List, refkey } from "@alloy-js/core";
|
|
1
|
+
import { code, For, List, refkey, } from "@alloy-js/core";
|
|
2
2
|
import * as ts from "@alloy-js/typescript";
|
|
3
|
-
import {
|
|
3
|
+
import { useTSNamePolicy } from "@alloy-js/typescript";
|
|
4
|
+
import { isVoidType } from "@typespec/compiler";
|
|
5
|
+
import { getHttpVerb } from "../utils/http-helpers.js";
|
|
4
6
|
import { fastifyLib } from "../external-packages/fastify.js";
|
|
7
|
+
import { fastifyTypeProviderZod } from "../external-packages/fastify-type-provider-zod.js";
|
|
5
8
|
import { getOperationInterfaceRef } from "./OperationInterface.js";
|
|
9
|
+
import { ZodSchema, zod } from "typespec-zod";
|
|
6
10
|
/**
|
|
7
11
|
* Creates a refkey for a route registration function.
|
|
8
12
|
* This allows the loadRoutes function to reference it with automatic imports.
|
|
@@ -11,12 +15,13 @@ export function getRouteRegistrationRef(containerName) {
|
|
|
11
15
|
return refkey(containerName, "route-registration");
|
|
12
16
|
}
|
|
13
17
|
/**
|
|
14
|
-
* Generates Fastify route registration functions.
|
|
15
|
-
*
|
|
18
|
+
* Generates Fastify route registration functions with Zod schema validation.
|
|
19
|
+
* Uses fastify-type-provider-zod for automatic type inference and runtime validation.
|
|
16
20
|
*/
|
|
17
21
|
export function RouteRegistration(props) {
|
|
18
22
|
const { containerName, operations } = props;
|
|
19
|
-
const
|
|
23
|
+
const namePolicy = useTSNamePolicy();
|
|
24
|
+
const functionName = namePolicy.getName(`register_${containerName}_routes`, "function");
|
|
20
25
|
const interfaceRef = getOperationInterfaceRef(containerName);
|
|
21
26
|
const routeRegRef = getRouteRegistrationRef(containerName);
|
|
22
27
|
return (<ts.FunctionDeclaration name={functionName} export refkey={routeRegRef} async parameters={[
|
|
@@ -24,62 +29,166 @@ export function RouteRegistration(props) {
|
|
|
24
29
|
{ name: "operations", type: interfaceRef },
|
|
25
30
|
]} returnType="void">
|
|
26
31
|
<List>
|
|
32
|
+
<ts.VarDeclaration name="server" const>
|
|
33
|
+
fastify.withTypeProvider{"<"}
|
|
34
|
+
{fastifyTypeProviderZod.ZodTypeProvider}
|
|
35
|
+
{">"}()
|
|
36
|
+
</ts.VarDeclaration>
|
|
27
37
|
<For each={operations} hardline>
|
|
28
|
-
{
|
|
38
|
+
{(operation) => {
|
|
29
39
|
const verb = getHttpVerb(operation);
|
|
30
|
-
const
|
|
31
|
-
const
|
|
40
|
+
const rawPath = operation.uriTemplate || operation.path;
|
|
41
|
+
const optionalParams = new Set();
|
|
42
|
+
for (const param of operation.parameters.parameters) {
|
|
43
|
+
if (param.type === "path" && param.param.optional) {
|
|
44
|
+
optionalParams.add(param.param.name);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
const path = rawPath.replace(/\{([^}]+)\}/g, function (_match, p1) {
|
|
48
|
+
const paramName = p1.startsWith("/") ? p1.slice(1) : p1;
|
|
49
|
+
const prefix = p1.startsWith("/") ? "/:" : ":";
|
|
50
|
+
const suffix = optionalParams.has(paramName) ? "?" : "";
|
|
51
|
+
return prefix + paramName + suffix;
|
|
52
|
+
});
|
|
53
|
+
const opName = namePolicy.getName(operation.operation.name, "function");
|
|
54
|
+
const routeSchema = generateZodRouteSchema(operation);
|
|
32
55
|
return (<>
|
|
33
|
-
|
|
34
|
-
<>'{path}'</>,
|
|
35
|
-
generateRouteHandler(operation, opName),
|
|
36
|
-
]}/>
|
|
37
|
-
{";"}
|
|
56
|
+
{code `server.${verb}('${path}', ${routeSchema}, ${generateRouteHandler(operation, opName, namePolicy)});`}
|
|
38
57
|
</>);
|
|
39
58
|
}}
|
|
40
59
|
</For>
|
|
41
60
|
</List>
|
|
42
61
|
</ts.FunctionDeclaration>);
|
|
43
62
|
}
|
|
44
|
-
function
|
|
63
|
+
function generateZodRouteSchema(operation) {
|
|
64
|
+
const schemaProps = [];
|
|
65
|
+
const pathParams = operation.parameters.parameters.filter(function (p) {
|
|
66
|
+
return p.type === "path";
|
|
67
|
+
});
|
|
68
|
+
if (pathParams.length > 0) {
|
|
69
|
+
const pathProperties = [];
|
|
70
|
+
for (let i = 0; i < pathParams.length; i++) {
|
|
71
|
+
const param = pathParams[i];
|
|
72
|
+
const paramName = param.param.name;
|
|
73
|
+
const isOptional = param.param.optional;
|
|
74
|
+
if (i > 0)
|
|
75
|
+
pathProperties.push(<>, </>);
|
|
76
|
+
if (isOptional) {
|
|
77
|
+
pathProperties.push(<>
|
|
78
|
+
{paramName}: <ZodSchema type={param.param.type}/>
|
|
79
|
+
.optional()
|
|
80
|
+
</>);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
pathProperties.push(<>
|
|
84
|
+
{paramName}: <ZodSchema type={param.param.type}/>
|
|
85
|
+
</>);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
schemaProps.push(<>
|
|
89
|
+
params: {zod.z}.object({"{"}
|
|
90
|
+
{pathProperties}
|
|
91
|
+
{"}"})
|
|
92
|
+
</>);
|
|
93
|
+
}
|
|
94
|
+
const queryParams = operation.parameters.parameters.filter(function (p) {
|
|
95
|
+
return p.type === "query";
|
|
96
|
+
});
|
|
97
|
+
if (queryParams.length > 0) {
|
|
98
|
+
if (schemaProps.length > 0)
|
|
99
|
+
schemaProps.push(<>, </>);
|
|
100
|
+
const queryProperties = [];
|
|
101
|
+
for (let i = 0; i < queryParams.length; i++) {
|
|
102
|
+
const param = queryParams[i];
|
|
103
|
+
const paramName = param.param.name;
|
|
104
|
+
const isOptional = param.param.optional;
|
|
105
|
+
if (i > 0)
|
|
106
|
+
queryProperties.push(<>, </>);
|
|
107
|
+
if (isOptional) {
|
|
108
|
+
queryProperties.push(<>
|
|
109
|
+
{paramName}: <ZodSchema type={param.param.type}/>
|
|
110
|
+
.optional()
|
|
111
|
+
</>);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
queryProperties.push(<>
|
|
115
|
+
{paramName}: <ZodSchema type={param.param.type}/>
|
|
116
|
+
</>);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
schemaProps.push(<>
|
|
120
|
+
querystring: {zod.z}.object({"{"}
|
|
121
|
+
{queryProperties}
|
|
122
|
+
{"}"})
|
|
123
|
+
</>);
|
|
124
|
+
}
|
|
125
|
+
if (operation.parameters.body) {
|
|
126
|
+
const bodyParam = operation.parameters.body;
|
|
127
|
+
const isOptional = bodyParam.property?.optional ?? false;
|
|
128
|
+
if (!isOptional) {
|
|
129
|
+
if (schemaProps.length > 0)
|
|
130
|
+
schemaProps.push(<>, </>);
|
|
131
|
+
schemaProps.push(<>
|
|
132
|
+
body: <ZodSchema type={bodyParam.type}/>
|
|
133
|
+
</>);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
if (schemaProps.length === 0) {
|
|
137
|
+
return <ts.ObjectExpression />;
|
|
138
|
+
}
|
|
139
|
+
return (<ts.ObjectExpression>
|
|
140
|
+
schema: {"{"}
|
|
141
|
+
{schemaProps}
|
|
142
|
+
{"}"}
|
|
143
|
+
</ts.ObjectExpression>);
|
|
144
|
+
}
|
|
145
|
+
function generateRouteHandler(operation, opName, namePolicy) {
|
|
45
146
|
const callArgs = [];
|
|
46
147
|
for (const param of operation.parameters.parameters) {
|
|
47
148
|
if (param.type === "path") {
|
|
48
|
-
const paramName =
|
|
49
|
-
callArgs.push(<>
|
|
149
|
+
const paramName = namePolicy.getName(param.param.name, "parameter");
|
|
150
|
+
callArgs.push(<>request.params.{paramName}</>);
|
|
50
151
|
}
|
|
51
152
|
}
|
|
52
153
|
if (operation.parameters.body) {
|
|
53
|
-
|
|
154
|
+
const bodyParam = operation.parameters.body;
|
|
155
|
+
const isOptional = bodyParam.property?.optional ?? false;
|
|
156
|
+
if (isOptional) {
|
|
157
|
+
callArgs.push(<>request.body as any</>);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
callArgs.push(<>request.body</>);
|
|
161
|
+
}
|
|
54
162
|
}
|
|
55
163
|
for (const param of operation.parameters.parameters) {
|
|
56
164
|
if (param.type === "header") {
|
|
57
165
|
const headerKey = param.name.toLowerCase();
|
|
58
166
|
const headerAccess = <>request.headers['{headerKey}']</>;
|
|
59
167
|
callArgs.push(<>
|
|
60
|
-
Array.isArray({headerAccess}) ? {headerAccess}[0] : {headerAccess}
|
|
168
|
+
(Array.isArray({headerAccess}) ? {headerAccess}[0] : {headerAccess})
|
|
169
|
+
as string
|
|
61
170
|
</>);
|
|
62
171
|
}
|
|
63
172
|
}
|
|
64
|
-
const queryParams = operation.parameters.parameters.filter(
|
|
65
|
-
return p.type === "query";
|
|
66
|
-
});
|
|
173
|
+
const queryParams = operation.parameters.parameters.filter((p) => p.type === "query");
|
|
67
174
|
if (queryParams.length > 0) {
|
|
68
175
|
const optionsObj = (<ts.ObjectExpression>
|
|
69
|
-
{queryParams
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
176
|
+
{queryParams
|
|
177
|
+
.map(function (param, index) {
|
|
178
|
+
const paramName = namePolicy.getName(param.param.name, "object-member-data");
|
|
179
|
+
const separator = index > 0 ? ", " : "";
|
|
180
|
+
return `${separator}${paramName}: request.query.${paramName}`;
|
|
181
|
+
})
|
|
182
|
+
.join("")}
|
|
76
183
|
</ts.ObjectExpression>);
|
|
77
184
|
callArgs.push(optionsObj);
|
|
78
185
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
186
|
+
const isVoid = isVoidType(operation.operation.returnType);
|
|
187
|
+
const is204Response = operation.responses.some(function (r) {
|
|
188
|
+
return r.statusCodes === 204;
|
|
189
|
+
});
|
|
190
|
+
const isNoContent = isVoid || is204Response;
|
|
191
|
+
return (<ts.FunctionExpression async parameters={[{ name: "request" }, { name: "reply" }]}>
|
|
83
192
|
<List>
|
|
84
193
|
<>try {"{"}</>
|
|
85
194
|
<List>
|
|
@@ -87,28 +196,18 @@ function generateRouteHandler(operation, opName) {
|
|
|
87
196
|
await{" "}
|
|
88
197
|
<ts.FunctionCallExpression target={<>operations.{opName}</>} args={callArgs}/>
|
|
89
198
|
</ts.VarDeclaration>
|
|
90
|
-
<>
|
|
91
|
-
<ts.FunctionCallExpression target={<>reply.code</>} args={[<>200</>]}/>
|
|
92
|
-
.
|
|
93
|
-
<ts.FunctionCallExpression target={<>send</>} args={[<>result</>]}/>
|
|
94
|
-
{";"}
|
|
95
|
-
</>
|
|
199
|
+
{isNoContent ? (<>reply.code(result.statusCode).send();</>) : (<>reply.code(result.statusCode).send(result.body);</>)}
|
|
96
200
|
</List>
|
|
97
|
-
|
|
201
|
+
<>
|
|
202
|
+
{"}"} catch (error) {"{"}
|
|
203
|
+
</>
|
|
98
204
|
<List>
|
|
99
205
|
<>
|
|
100
|
-
|
|
101
|
-
.
|
|
102
|
-
<ts.FunctionCallExpression target={<>send</>} args={[
|
|
103
|
-
<>
|
|
104
|
-
{"{"} error: error instanceof Error ? error.message :
|
|
105
|
-
'Internal server error' {"}"}
|
|
106
|
-
</>,
|
|
107
|
-
]}/>
|
|
108
|
-
{";"}
|
|
206
|
+
reply.code(500).send({"{"} error: error instanceof Error ?
|
|
207
|
+
error.message : 'Internal server error' {"}"});
|
|
109
208
|
</>
|
|
110
209
|
</List>
|
|
111
|
-
{"}"}
|
|
210
|
+
<>{"}"}</>
|
|
112
211
|
</List>
|
|
113
212
|
</ts.FunctionExpression>);
|
|
114
213
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouteRegistration.jsx","sourceRoot":"","sources":["../../../src/components/RouteRegistration.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"RouteRegistration.jsx","sourceRoot":"","sources":["../../../src/components/RouteRegistration.tsx"],"names":[],"mappings":"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"}
|