@sebspark/openapi-typegen 1.5.1 → 1.7.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 +154 -13
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -257,7 +257,10 @@ var generateDiscriminator = (discriminator, name) => {
257
257
  };
258
258
  var generateArray = (parsed) => {
259
259
  const lines = [];
260
- const items = generateType(parsed.items);
260
+ let items = generateType(parsed.items);
261
+ if (parsed.items.type === "enum") {
262
+ items = `(${items})`;
263
+ }
261
264
  lines.push(`${preamble(parsed)}${items}[]`);
262
265
  return lines.join("\n");
263
266
  };
@@ -336,7 +339,7 @@ var serializeValue = (value) => {
336
339
  var generateClientArgs = (args) => generateArgs(args, false);
337
340
  var generateServerArgs = (args) => args ? generateArgs(args, true) : "args: Req";
338
341
  var parts = ["body", "header", "path", "query"];
339
- var generateArgs = (args, extendsReq) => {
342
+ var generateArgs = (args, isServer) => {
340
343
  if (args) {
341
344
  const tokens = [];
342
345
  for (const part of parts) {
@@ -344,17 +347,25 @@ var generateArgs = (args, extendsReq) => {
344
347
  if (arg) {
345
348
  const partName = part === "path" ? "params" : part === "header" ? "headers" : part;
346
349
  tokens.push(
347
- `${partName}${arg.optional ? "?" : ""}: ${generateType(arg)}`
350
+ `${partName}${arg.optional ? "?" : ""}: ${wrapArgs(
351
+ generateType(arg),
352
+ isServer && part === "header"
353
+ )}`
348
354
  );
349
355
  }
350
356
  }
351
357
  if (!tokens.length)
352
358
  return "";
353
359
  const optional = argsOptional(args);
354
- return `args${optional ? "?" : ""}: ${extendsReq ? "Req & " : ""}{ ${tokens.join(", ")} }, `;
360
+ return `args${optional ? "?" : ""}: ${isServer ? "Req & " : ""}{ ${tokens.join(", ")} }, `;
355
361
  }
356
362
  return "";
357
363
  };
364
+ var wrapArgs = (args, wrap) => {
365
+ if (!wrap)
366
+ return args;
367
+ return `LowerCaseHeaders<${args}>`;
368
+ };
358
369
  var argsOptional = (args) => (
359
370
  // biome-ignore lint/style/noNonNullAssertion: <explanation>
360
371
  parts.reduce((o, p) => o && (!args[p] || args[p].optional), true)
@@ -435,6 +446,7 @@ var generate = (name, doc) => `
435
446
  APIServerDefinition,
436
447
  BaseClient,
437
448
  GenericRouteHandler,
449
+ LowerCaseHeaders,
438
450
  PartiallySerialized,
439
451
  RequestOptions,
440
452
  Serialized,
@@ -482,6 +494,21 @@ var generateComponents = (components) => {
482
494
  for (const res of components.responseBodies) {
483
495
  tokens.push(generateResponseBody(res));
484
496
  }
497
+ for (const param2 of components.securitySchemes) {
498
+ tokens.push(
499
+ generateType({
500
+ type: "object",
501
+ name: param2.name,
502
+ properties: [
503
+ {
504
+ name: param2.parameterName,
505
+ type: [param2.type],
506
+ optional: param2.optional
507
+ }
508
+ ]
509
+ })
510
+ );
511
+ }
485
512
  return tokens.join("\n\n");
486
513
  };
487
514
 
@@ -571,12 +598,12 @@ var parseObjectSchema = (name, schema) => {
571
598
  return type;
572
599
  };
573
600
  var parseArraySchema = (name, schema) => {
574
- if (schema.type !== "array" || !schema.items)
601
+ if (schema.type !== "array")
575
602
  throw new Error("Not an array");
576
603
  return {
577
604
  name,
578
605
  type: "array",
579
- items: parsePropertyType(schema.items)[0],
606
+ items: schema.items ? parsePropertyType(schema.items)[0] : { type: "unknown" },
580
607
  ...parseDocumentation(schema)
581
608
  };
582
609
  };
@@ -595,6 +622,14 @@ var parsePropertyType = (property) => {
595
622
  return [{ type: parseRef(ref) }];
596
623
  }
597
624
  const schemaObject = property;
625
+ if (schemaObject.enum) {
626
+ const enumType = {
627
+ type: "enum",
628
+ values: schemaObject.enum,
629
+ ...parseDocumentation(schemaObject)
630
+ };
631
+ return [enumType];
632
+ }
598
633
  if (schemaObject.type) {
599
634
  return (Array.isArray(schemaObject.type) ? schemaObject.type : [schemaObject.type]).map((type) => {
600
635
  switch (type) {
@@ -670,13 +705,14 @@ var parseParameter = (name, schema) => {
670
705
 
671
706
  // src/parser/args.ts
672
707
  var parseArgs = (path, components) => {
673
- var _a;
674
- if (!((_a = path.parameters) == null ? void 0 : _a.length) && !path.requestBody)
708
+ var _a, _b;
709
+ if (!((_a = path.parameters) == null ? void 0 : _a.length) && !((_b = path.security) == null ? void 0 : _b.length) && !path.requestBody)
675
710
  return void 0;
676
- const args = {
677
- ...parseParameters2(path.parameters, components),
678
- ...parseRequestBody(path.requestBody, components)
679
- };
711
+ const args = joinArgs([
712
+ parseParameters2(path.parameters, components),
713
+ parseSecurity(path.security, components),
714
+ parseRequestBody(path.requestBody, components)
715
+ ]);
680
716
  return args;
681
717
  };
682
718
  var createArgs = (initializer = {}) => ({
@@ -685,6 +721,56 @@ var createArgs = (initializer = {}) => ({
685
721
  optional: true,
686
722
  ...initializer
687
723
  });
724
+ var joinArgs = (args) => {
725
+ const reqArg = {};
726
+ for (const arg of args) {
727
+ for (const [prop, val] of Object.entries(arg)) {
728
+ const key = prop;
729
+ if (reqArg[key]) {
730
+ reqArg[key] = joinArg(reqArg[key], val);
731
+ } else {
732
+ reqArg[key] = val;
733
+ }
734
+ }
735
+ }
736
+ return reqArg;
737
+ };
738
+ var joinArg = (arg1, arg2) => {
739
+ const arg = {
740
+ type: "object",
741
+ optional: arg1.optional && arg2.optional,
742
+ properties: arg1.properties.concat(arg2.properties)
743
+ };
744
+ if (arg1.allOf || arg2.allOf)
745
+ arg.allOf = (arg1.allOf || []).concat(arg2.allOf || []);
746
+ if (arg1.anyOf || arg2.anyOf)
747
+ arg.anyOf = (arg1.anyOf || []).concat(arg2.anyOf || []);
748
+ if (arg1.oneOf || arg2.oneOf)
749
+ arg.oneOf = (arg1.oneOf || []).concat(arg2.oneOf || []);
750
+ if (arg1.description || arg2.description)
751
+ arg.description = arg1.description || arg2.description;
752
+ if (arg1.title || arg2.title)
753
+ arg.title = arg1.title || arg2.title;
754
+ return arg;
755
+ };
756
+ var parseSecurity = (security = [], components = {}) => {
757
+ const args = {};
758
+ for (const secReq of security) {
759
+ for (const [name, claims] of Object.entries(secReq)) {
760
+ const param2 = findRef(
761
+ components,
762
+ `#/components/securitySchemes/${name}`
763
+ );
764
+ const arg = args.header || createArgs({ ...parseDocumentation(param2) });
765
+ arg.optional = false;
766
+ if (!arg.allOf)
767
+ arg.allOf = [];
768
+ arg.allOf.push({ type: parseRef(name) });
769
+ args.header = arg;
770
+ }
771
+ }
772
+ return args;
773
+ };
688
774
  var parseParameters2 = (parameters = [], components = {}) => {
689
775
  const args = {};
690
776
  for (const p of parameters) {
@@ -863,6 +949,60 @@ var parseRequestBodies = (requestBodies = {}) => {
863
949
  return definitions;
864
950
  };
865
951
 
952
+ // src/parser/securitySchemes.ts
953
+ var parseSecuritySchemes = (schemes = {}) => {
954
+ const parameters = [];
955
+ for (const [name, scheme] of Object.entries(schemes)) {
956
+ parameters.push(parseSecurityScheme(name, scheme));
957
+ }
958
+ return parameters;
959
+ };
960
+ var parseSecurityScheme = (name, scheme) => {
961
+ switch (scheme.type) {
962
+ case "apiKey":
963
+ return parseApiKey(name, scheme);
964
+ case "http":
965
+ return parseHttpSecurity(name, scheme);
966
+ case "oauth2":
967
+ return parseOAuth(name, scheme);
968
+ case "openIdConnect":
969
+ return parseOpenIdConnect(name, scheme);
970
+ }
971
+ throw new Error(`Unknown security scheme '${scheme.type}'`);
972
+ };
973
+ var parseApiKey = (name, scheme) => {
974
+ const _in = scheme.in || "header";
975
+ const parameterName = scheme.name;
976
+ return {
977
+ name,
978
+ parameterName,
979
+ in: _in,
980
+ optional: false,
981
+ type: { type: "string" }
982
+ };
983
+ };
984
+ var parseHttpSecurity = (name, _scheme) => ({
985
+ name,
986
+ in: "header",
987
+ parameterName: "Authorization",
988
+ optional: false,
989
+ type: { type: "string" }
990
+ });
991
+ var parseOAuth = (name, _scheme) => ({
992
+ name,
993
+ in: "header",
994
+ parameterName: "Authorization",
995
+ optional: false,
996
+ type: { type: "string" }
997
+ });
998
+ var parseOpenIdConnect = (name, _scheme) => ({
999
+ name,
1000
+ in: "header",
1001
+ parameterName: "Authorization",
1002
+ optional: false,
1003
+ type: { type: "string" }
1004
+ });
1005
+
866
1006
  // src/parser/index.ts
867
1007
  var parseDocument = (schema) => ({
868
1008
  paths: parsePaths(schema),
@@ -873,7 +1013,8 @@ var parseComponents = (components = {}) => ({
873
1013
  headers: parseHeaders(components.headers),
874
1014
  parameters: parseParameters(components.parameters),
875
1015
  requestBodies: parseRequestBodies(components.requestBodies),
876
- responseBodies: parseResponseBodies(components.responses)
1016
+ responseBodies: parseResponseBodies(components.responses),
1017
+ securitySchemes: parseSecuritySchemes(components.securitySchemes)
877
1018
  });
878
1019
 
879
1020
  // src/index.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sebspark/openapi-typegen",
3
- "version": "1.5.1",
3
+ "version": "1.7.0",
4
4
  "license": "Apache-2.0",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -28,7 +28,7 @@
28
28
  "chalk": "<5",
29
29
  "change-case": "4.1.2",
30
30
  "prettier": "3.2.5",
31
- "yaml": "2.3.4",
31
+ "yaml": "2.4.0",
32
32
  "yargs": "17.7.2",
33
33
  "yarn": "1.22.21"
34
34
  }