@sebspark/openapi-typegen 1.2.0 → 1.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.
Files changed (2) hide show
  1. package/dist/index.js +60 -12
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -100,7 +100,7 @@ var requestArgs = (args, name, title) => {
100
100
  if (!args)
101
101
  return [];
102
102
  const tokens = [];
103
- const type = args.extends.map((e) => e.type).join(AND) || "Object";
103
+ const type = (args.allOf || []).map((e) => e.type).join(AND) || "Object";
104
104
  tokens.push(
105
105
  param(
106
106
  buildPath("args", name),
@@ -178,7 +178,7 @@ var generateType = (parsed) => {
178
178
  type = generateCustom(parsed);
179
179
  }
180
180
  }
181
- return type.replace(/ & \{\s*\}/g, "");
181
+ return type.replace(/ [&|] \{\s*\}/g, "");
182
182
  };
183
183
  var generateProperty = (property) => {
184
184
  const types = property.type.map(generateType);
@@ -196,7 +196,37 @@ var propertyName = (name) => {
196
196
  return name;
197
197
  return `'${name}'`;
198
198
  };
199
- var extensions = (type) => type.extends.map(generateType).concat("").join(AND);
199
+ var extensions = (type) => (type.allOf || []).map(generateType).concat("").join(AND) + parseOptional(type.oneOf, type.discriminator);
200
+ var parseOptional = (optional, discriminator) => {
201
+ const tokens = [];
202
+ const map = reverseDiscriminator(discriminator);
203
+ for (const type of optional || []) {
204
+ if (type.type === "object")
205
+ tokens.push(generateType(type));
206
+ else {
207
+ const custom = type;
208
+ if (!map[custom.type])
209
+ tokens.push(generateType(custom));
210
+ else {
211
+ tokens.push(
212
+ `(${generateType(custom)} & { ${discriminator == null ? void 0 : discriminator.propertyName}: '${map[custom.type]}' })`
213
+ );
214
+ }
215
+ }
216
+ }
217
+ if (tokens.length)
218
+ tokens.push("");
219
+ return tokens.join(OR);
220
+ };
221
+ var reverseDiscriminator = (discriminator) => {
222
+ const reverse = {};
223
+ if (!discriminator)
224
+ return reverse;
225
+ for (const [val, { type }] of Object.entries(discriminator.mapping)) {
226
+ reverse[type] = val;
227
+ }
228
+ return reverse;
229
+ };
200
230
  var generatePrimitive = (parsed) => `${preamble(parsed)}${parsed.type}`;
201
231
  var generateCustom = (parsed) => `${preamble(parsed)}${typeName(parsed.type)}`;
202
232
  var generateObject = (parsed) => {
@@ -208,7 +238,8 @@ var generateObject = (parsed) => {
208
238
  };
209
239
  var generateArray = (parsed) => {
210
240
  const lines = [];
211
- lines.push(`${preamble(parsed)}${parsed.items.type}[]`);
241
+ const items = generateType(parsed.items);
242
+ lines.push(`${preamble(parsed)}${items}[]`);
212
243
  return lines.join("\n");
213
244
  };
214
245
  var generateEnum = (parsed) => {
@@ -415,7 +446,6 @@ var generateComponents = (components) => {
415
446
  tokens.push(
416
447
  generateType({
417
448
  type: "object",
418
- extends: [],
419
449
  name: param2.name,
420
450
  properties: [
421
451
  {
@@ -488,11 +518,11 @@ var parseSchema = (name, schemaOrRef) => {
488
518
  }
489
519
  };
490
520
  var parseObjectSchema = (name, schema) => {
521
+ var _a;
491
522
  const type = {
492
523
  name,
493
524
  type: "object",
494
525
  properties: [],
495
- extends: [],
496
526
  ...parseDocumentation(schema)
497
527
  };
498
528
  if (schema.properties) {
@@ -501,7 +531,23 @@ var parseObjectSchema = (name, schema) => {
501
531
  );
502
532
  }
503
533
  if (schema.allOf) {
504
- type.extends = schema.allOf.flatMap(parsePropertyType);
534
+ type.allOf = schema.allOf.flatMap(parsePropertyType);
535
+ }
536
+ if (schema.oneOf) {
537
+ type.oneOf = schema.oneOf.flatMap(parsePropertyType);
538
+ }
539
+ if (schema.anyOf) {
540
+ type.oneOf = schema.anyOf.flatMap(parsePropertyType);
541
+ }
542
+ if ((_a = schema.discriminator) == null ? void 0 : _a.mapping) {
543
+ const mapping = {};
544
+ for (const [prop, ref] of Object.entries(schema.discriminator.mapping)) {
545
+ mapping[prop] = { type: parseRef(ref) };
546
+ }
547
+ type.discriminator = {
548
+ propertyName: schema.discriminator.propertyName,
549
+ mapping
550
+ };
505
551
  }
506
552
  return type;
507
553
  };
@@ -616,7 +662,6 @@ var parseArgs = (path, components) => {
616
662
  };
617
663
  var createArgs = (initializer = {}) => ({
618
664
  type: "object",
619
- extends: [],
620
665
  properties: [],
621
666
  optional: true,
622
667
  ...initializer
@@ -632,7 +677,9 @@ var parseParameters2 = (parameters = [], components = {}) => {
632
677
  const param2 = findRef(components, ref);
633
678
  const arg = args[param2.in] || createArgs({ ...parseDocumentation(param2) });
634
679
  arg.optional = arg.optional && !param2.required;
635
- arg.extends.push({ type: parseRef(ref) });
680
+ if (!arg.allOf)
681
+ arg.allOf = [];
682
+ arg.allOf.push({ type: parseRef(ref) });
636
683
  args[param2.in] = arg;
637
684
  break;
638
685
  }
@@ -666,6 +713,7 @@ var parseParameters2 = (parameters = [], components = {}) => {
666
713
  return args;
667
714
  };
668
715
  var parseRequestBody = (requestBody, components = {}) => {
716
+ var _a, _b;
669
717
  const args = {};
670
718
  if (!requestBody)
671
719
  return args;
@@ -674,7 +722,7 @@ var parseRequestBody = (requestBody, components = {}) => {
674
722
  const refBody = findRef(components, ref);
675
723
  args.body = createArgs({
676
724
  optional: !refBody.required,
677
- extends: [{ type: parseRef(ref) }]
725
+ allOf: [{ type: parseRef(ref) }]
678
726
  });
679
727
  } else {
680
728
  const body = requestBody;
@@ -691,13 +739,13 @@ var parseRequestBody = (requestBody, components = {}) => {
691
739
  } else if (parsed.type) {
692
740
  args.body = createArgs({
693
741
  optional: !body.required,
694
- extends: [parsed],
742
+ allOf: [parsed],
695
743
  ...parseDocumentation(body)
696
744
  });
697
745
  }
698
746
  }
699
747
  }
700
- if (bodyArgs.extends.length || bodyArgs.properties.length) {
748
+ if (((_a = bodyArgs.allOf) == null ? void 0 : _a.length) || ((_b = bodyArgs.oneOf) == null ? void 0 : _b.length) || bodyArgs.properties.length) {
701
749
  args.body = bodyArgs;
702
750
  }
703
751
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sebspark/openapi-typegen",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "license": "Apache-2.0",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",