@sebspark/openapi-typegen 1.0.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.
Files changed (2) hide show
  1. package/dist/index.js +59 -5
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -182,9 +182,10 @@ var generateType = (parsed) => {
182
182
  };
183
183
  var generateProperty = (property) => {
184
184
  const types = property.type.map(generateType);
185
- return `${document(property)}${propertyName(property.name)}${property.optional ? "?" : ""}: ${types.join(OR)}`;
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(body.data ? generateType(body.data) : "undefined");
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,12 +542,32 @@ 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
  }
514
559
  }
515
560
  });
516
561
  }
562
+ if (schemaObject.allOf) {
563
+ const types = [];
564
+ for (const allOf of schemaObject.allOf) {
565
+ const type = parseSchema(void 0, allOf);
566
+ delete type.name;
567
+ types.push(type);
568
+ }
569
+ return types;
570
+ }
517
571
  return [];
518
572
  };
519
573
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sebspark/openapi-typegen",
3
- "version": "1.0.0",
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.3",
30
+ "prettier": "3.2.5",
31
31
  "yaml": "2.3.4",
32
32
  "yargs": "17.7.2",
33
33
  "yarn": "1.22.21"