@sebspark/openapi-typegen 1.1.0 → 1.2.1

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 +51 -5
  2. 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)}`;
@@ -208,7 +208,8 @@ var generateObject = (parsed) => {
208
208
  };
209
209
  var generateArray = (parsed) => {
210
210
  const lines = [];
211
- lines.push(`${preamble(parsed)}${parsed.items.type}[]`);
211
+ const items = generateType(parsed.items);
212
+ lines.push(`${preamble(parsed)}${items}[]`);
212
213
  return lines.join("\n");
213
214
  };
214
215
  var generateEnum = (parsed) => {
@@ -217,7 +218,7 @@ var generateEnum = (parsed) => {
217
218
  var generateHeader = (header) => {
218
219
  return `${preamble(header)}{ ${propertyName(header.name)}${header.optional ? "?" : ""}: ${generateType(header.type)} }`;
219
220
  };
220
- var generateResponseBody = (type) => {
221
+ var generateResponseBody = (type, optional = true) => {
221
222
  const customType = type.type;
222
223
  if (customType)
223
224
  return typeName(customType);
@@ -227,7 +228,9 @@ var generateResponseBody = (type) => {
227
228
  const tokens = [];
228
229
  tokens.push(preamble(body));
229
230
  tokens.push("APIResponse<");
230
- tokens.push(body.data ? generateType(body.data) : "undefined");
231
+ tokens.push(
232
+ body.data ? generateType(serialized(body.data, optional)) : "undefined"
233
+ );
231
234
  if (body.headers) {
232
235
  tokens.push(", ");
233
236
  tokens.push(body.headers ? generateHeaders(body.headers) : "undefined");
@@ -235,6 +238,36 @@ var generateResponseBody = (type) => {
235
238
  tokens.push(">");
236
239
  return tokens.join("");
237
240
  };
241
+ var serialized = (orig, optional = true) => {
242
+ switch (orig.type) {
243
+ case "bigint":
244
+ case "boolean":
245
+ case "enum":
246
+ case "null":
247
+ case "number":
248
+ case "string":
249
+ case "symbol":
250
+ case "undefined": {
251
+ return orig;
252
+ }
253
+ case "Date": {
254
+ return { ...orig, type: "string" };
255
+ }
256
+ case "array": {
257
+ return {
258
+ ...orig,
259
+ items: serialized(orig.items, optional)
260
+ };
261
+ }
262
+ case "object": {
263
+ return orig;
264
+ }
265
+ default: {
266
+ const wrapper = optional ? "PartiallySerialized" : "Serialized";
267
+ return { ...orig, type: `${wrapper}<${typeName(orig.type)}>` };
268
+ }
269
+ }
270
+ };
238
271
  var generateHeaders = (headers) => {
239
272
  const tokens = [];
240
273
  for (const header of headers) {
@@ -306,7 +339,7 @@ var generateCall = (path) => {
306
339
  url: '${path.url}', ${generateClientArgs(path.args)}opts?: RequestOptions,
307
340
  ): Promise<${responses}>`;
308
341
  };
309
- var generateResponses = (path) => Object.entries(path.responses).filter(([code]) => parseInt(code, 10) < 400).map(([, type]) => generateResponseBody(type)).join(OR);
342
+ var generateResponses = (path) => Object.entries(path.responses).filter(([code]) => parseInt(code, 10) < 400).map(([, type]) => generateResponseBody(type, false)).join(OR);
310
343
 
311
344
  // src/generator/server.ts
312
345
  var generateServer = (name, paths) => {
@@ -353,7 +386,9 @@ var generate = (name, doc) => `
353
386
  APIServerDefinition,
354
387
  BaseClient,
355
388
  GenericRouteHandler,
389
+ PartiallySerialized,
356
390
  RequestOptions,
391
+ Serialized,
357
392
  } from '@sebspark/openapi-core'
358
393
  import type { Request } from 'express'
359
394
 
@@ -508,6 +543,17 @@ var parsePropertyType = (property) => {
508
543
  case "integer": {
509
544
  return { type: "number", ...parseDocumentation(schemaObject) };
510
545
  }
546
+ case "string": {
547
+ switch (schemaObject.format) {
548
+ case "date":
549
+ case "date-time": {
550
+ return { type: "Date", ...parseDocumentation(schemaObject) };
551
+ }
552
+ default: {
553
+ return { type, ...parseDocumentation(schemaObject) };
554
+ }
555
+ }
556
+ }
511
557
  default: {
512
558
  return { type, ...parseDocumentation(schemaObject) };
513
559
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sebspark/openapi-typegen",
3
- "version": "1.1.0",
3
+ "version": "1.2.1",
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.4",
30
+ "prettier": "3.2.5",
31
31
  "yaml": "2.3.4",
32
32
  "yargs": "17.7.2",
33
33
  "yarn": "1.22.21"