@sebspark/openapi-typegen 1.1.0 → 1.2.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/dist/index.js +49 -4
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -185,6 +185,7 @@ var generateProperty = (property) => {
|
|
|
185
185
|
return `${document(property)}${propertyName(property.name)}${property.optional ? "?" : ""}: ${types.join(OR) || "unknown"}`;
|
|
186
186
|
};
|
|
187
187
|
var preamble = (type) => type.name ? `${document(type)}export type ${typeName(type.name)} = ` : "";
|
|
188
|
+
var rxProperVariable = /^[a-zA-Z_<>$][a-zA-Z0-9_<>$]*$/;
|
|
188
189
|
var typeName = (name) => {
|
|
189
190
|
if (rxProperVariable.test(name))
|
|
190
191
|
return name;
|
|
@@ -195,7 +196,6 @@ var propertyName = (name) => {
|
|
|
195
196
|
return name;
|
|
196
197
|
return `'${name}'`;
|
|
197
198
|
};
|
|
198
|
-
var rxProperVariable = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;
|
|
199
199
|
var extensions = (type) => type.extends.map(generateType).concat("").join(AND);
|
|
200
200
|
var generatePrimitive = (parsed) => `${preamble(parsed)}${parsed.type}`;
|
|
201
201
|
var generateCustom = (parsed) => `${preamble(parsed)}${typeName(parsed.type)}`;
|
|
@@ -217,7 +217,7 @@ var generateEnum = (parsed) => {
|
|
|
217
217
|
var generateHeader = (header) => {
|
|
218
218
|
return `${preamble(header)}{ ${propertyName(header.name)}${header.optional ? "?" : ""}: ${generateType(header.type)} }`;
|
|
219
219
|
};
|
|
220
|
-
var generateResponseBody = (type) => {
|
|
220
|
+
var generateResponseBody = (type, optional = true) => {
|
|
221
221
|
const customType = type.type;
|
|
222
222
|
if (customType)
|
|
223
223
|
return typeName(customType);
|
|
@@ -227,7 +227,9 @@ var generateResponseBody = (type) => {
|
|
|
227
227
|
const tokens = [];
|
|
228
228
|
tokens.push(preamble(body));
|
|
229
229
|
tokens.push("APIResponse<");
|
|
230
|
-
tokens.push(
|
|
230
|
+
tokens.push(
|
|
231
|
+
body.data ? generateType(serialized(body.data, optional)) : "undefined"
|
|
232
|
+
);
|
|
231
233
|
if (body.headers) {
|
|
232
234
|
tokens.push(", ");
|
|
233
235
|
tokens.push(body.headers ? generateHeaders(body.headers) : "undefined");
|
|
@@ -235,6 +237,36 @@ var generateResponseBody = (type) => {
|
|
|
235
237
|
tokens.push(">");
|
|
236
238
|
return tokens.join("");
|
|
237
239
|
};
|
|
240
|
+
var serialized = (orig, optional = true) => {
|
|
241
|
+
switch (orig.type) {
|
|
242
|
+
case "bigint":
|
|
243
|
+
case "boolean":
|
|
244
|
+
case "enum":
|
|
245
|
+
case "null":
|
|
246
|
+
case "number":
|
|
247
|
+
case "string":
|
|
248
|
+
case "symbol":
|
|
249
|
+
case "undefined": {
|
|
250
|
+
return orig;
|
|
251
|
+
}
|
|
252
|
+
case "Date": {
|
|
253
|
+
return { ...orig, type: "string" };
|
|
254
|
+
}
|
|
255
|
+
case "array": {
|
|
256
|
+
return {
|
|
257
|
+
...orig,
|
|
258
|
+
items: serialized(orig.items, optional)
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
case "object": {
|
|
262
|
+
return orig;
|
|
263
|
+
}
|
|
264
|
+
default: {
|
|
265
|
+
const wrapper = optional ? "PartiallySerialized" : "Serialized";
|
|
266
|
+
return { ...orig, type: `${wrapper}<${typeName(orig.type)}>` };
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
};
|
|
238
270
|
var generateHeaders = (headers) => {
|
|
239
271
|
const tokens = [];
|
|
240
272
|
for (const header of headers) {
|
|
@@ -306,7 +338,7 @@ var generateCall = (path) => {
|
|
|
306
338
|
url: '${path.url}', ${generateClientArgs(path.args)}opts?: RequestOptions,
|
|
307
339
|
): Promise<${responses}>`;
|
|
308
340
|
};
|
|
309
|
-
var generateResponses = (path) => Object.entries(path.responses).filter(([code]) => parseInt(code, 10) < 400).map(([, type]) => generateResponseBody(type)).join(OR);
|
|
341
|
+
var generateResponses = (path) => Object.entries(path.responses).filter(([code]) => parseInt(code, 10) < 400).map(([, type]) => generateResponseBody(type, false)).join(OR);
|
|
310
342
|
|
|
311
343
|
// src/generator/server.ts
|
|
312
344
|
var generateServer = (name, paths) => {
|
|
@@ -353,7 +385,9 @@ var generate = (name, doc) => `
|
|
|
353
385
|
APIServerDefinition,
|
|
354
386
|
BaseClient,
|
|
355
387
|
GenericRouteHandler,
|
|
388
|
+
PartiallySerialized,
|
|
356
389
|
RequestOptions,
|
|
390
|
+
Serialized,
|
|
357
391
|
} from '@sebspark/openapi-core'
|
|
358
392
|
import type { Request } from 'express'
|
|
359
393
|
|
|
@@ -508,6 +542,17 @@ var parsePropertyType = (property) => {
|
|
|
508
542
|
case "integer": {
|
|
509
543
|
return { type: "number", ...parseDocumentation(schemaObject) };
|
|
510
544
|
}
|
|
545
|
+
case "string": {
|
|
546
|
+
switch (schemaObject.format) {
|
|
547
|
+
case "date":
|
|
548
|
+
case "date-time": {
|
|
549
|
+
return { type: "Date", ...parseDocumentation(schemaObject) };
|
|
550
|
+
}
|
|
551
|
+
default: {
|
|
552
|
+
return { type, ...parseDocumentation(schemaObject) };
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
}
|
|
511
556
|
default: {
|
|
512
557
|
return { type, ...parseDocumentation(schemaObject) };
|
|
513
558
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sebspark/openapi-typegen",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"boxen": "<6",
|
|
28
28
|
"chalk": "<5",
|
|
29
29
|
"change-case": "4.1.2",
|
|
30
|
-
"prettier": "3.2.
|
|
30
|
+
"prettier": "3.2.5",
|
|
31
31
|
"yaml": "2.3.4",
|
|
32
32
|
"yargs": "17.7.2",
|
|
33
33
|
"yarn": "1.22.21"
|