@sebspark/openapi-typegen 1.5.1 → 1.6.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 +140 -10
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -336,7 +336,7 @@ var serializeValue = (value) => {
336
336
  var generateClientArgs = (args) => generateArgs(args, false);
337
337
  var generateServerArgs = (args) => args ? generateArgs(args, true) : "args: Req";
338
338
  var parts = ["body", "header", "path", "query"];
339
- var generateArgs = (args, extendsReq) => {
339
+ var generateArgs = (args, isServer) => {
340
340
  if (args) {
341
341
  const tokens = [];
342
342
  for (const part of parts) {
@@ -344,17 +344,25 @@ var generateArgs = (args, extendsReq) => {
344
344
  if (arg) {
345
345
  const partName = part === "path" ? "params" : part === "header" ? "headers" : part;
346
346
  tokens.push(
347
- `${partName}${arg.optional ? "?" : ""}: ${generateType(arg)}`
347
+ `${partName}${arg.optional ? "?" : ""}: ${wrapArgs(
348
+ generateType(arg),
349
+ isServer && part === "header"
350
+ )}`
348
351
  );
349
352
  }
350
353
  }
351
354
  if (!tokens.length)
352
355
  return "";
353
356
  const optional = argsOptional(args);
354
- return `args${optional ? "?" : ""}: ${extendsReq ? "Req & " : ""}{ ${tokens.join(", ")} }, `;
357
+ return `args${optional ? "?" : ""}: ${isServer ? "Req & " : ""}{ ${tokens.join(", ")} }, `;
355
358
  }
356
359
  return "";
357
360
  };
361
+ var wrapArgs = (args, wrap) => {
362
+ if (!wrap)
363
+ return args;
364
+ return `LowerCaseHeaders<${args}>`;
365
+ };
358
366
  var argsOptional = (args) => (
359
367
  // biome-ignore lint/style/noNonNullAssertion: <explanation>
360
368
  parts.reduce((o, p) => o && (!args[p] || args[p].optional), true)
@@ -435,6 +443,7 @@ var generate = (name, doc) => `
435
443
  APIServerDefinition,
436
444
  BaseClient,
437
445
  GenericRouteHandler,
446
+ LowerCaseHeaders,
438
447
  PartiallySerialized,
439
448
  RequestOptions,
440
449
  Serialized,
@@ -482,6 +491,21 @@ var generateComponents = (components) => {
482
491
  for (const res of components.responseBodies) {
483
492
  tokens.push(generateResponseBody(res));
484
493
  }
494
+ for (const param2 of components.securitySchemes) {
495
+ tokens.push(
496
+ generateType({
497
+ type: "object",
498
+ name: param2.name,
499
+ properties: [
500
+ {
501
+ name: param2.parameterName,
502
+ type: [param2.type],
503
+ optional: param2.optional
504
+ }
505
+ ]
506
+ })
507
+ );
508
+ }
485
509
  return tokens.join("\n\n");
486
510
  };
487
511
 
@@ -670,13 +694,14 @@ var parseParameter = (name, schema) => {
670
694
 
671
695
  // src/parser/args.ts
672
696
  var parseArgs = (path, components) => {
673
- var _a;
674
- if (!((_a = path.parameters) == null ? void 0 : _a.length) && !path.requestBody)
697
+ var _a, _b;
698
+ if (!((_a = path.parameters) == null ? void 0 : _a.length) && !((_b = path.security) == null ? void 0 : _b.length) && !path.requestBody)
675
699
  return void 0;
676
- const args = {
677
- ...parseParameters2(path.parameters, components),
678
- ...parseRequestBody(path.requestBody, components)
679
- };
700
+ const args = joinArgs([
701
+ parseParameters2(path.parameters, components),
702
+ parseSecurity(path.security, components),
703
+ parseRequestBody(path.requestBody, components)
704
+ ]);
680
705
  return args;
681
706
  };
682
707
  var createArgs = (initializer = {}) => ({
@@ -685,6 +710,56 @@ var createArgs = (initializer = {}) => ({
685
710
  optional: true,
686
711
  ...initializer
687
712
  });
713
+ var joinArgs = (args) => {
714
+ const reqArg = {};
715
+ for (const arg of args) {
716
+ for (const [prop, val] of Object.entries(arg)) {
717
+ const key = prop;
718
+ if (reqArg[key]) {
719
+ reqArg[key] = joinArg(reqArg[key], val);
720
+ } else {
721
+ reqArg[key] = val;
722
+ }
723
+ }
724
+ }
725
+ return reqArg;
726
+ };
727
+ var joinArg = (arg1, arg2) => {
728
+ const arg = {
729
+ type: "object",
730
+ optional: arg1.optional && arg2.optional,
731
+ properties: arg1.properties.concat(arg2.properties)
732
+ };
733
+ if (arg1.allOf || arg2.allOf)
734
+ arg.allOf = (arg1.allOf || []).concat(arg2.allOf || []);
735
+ if (arg1.anyOf || arg2.anyOf)
736
+ arg.anyOf = (arg1.anyOf || []).concat(arg2.anyOf || []);
737
+ if (arg1.oneOf || arg2.oneOf)
738
+ arg.oneOf = (arg1.oneOf || []).concat(arg2.oneOf || []);
739
+ if (arg1.description || arg2.description)
740
+ arg.description = arg1.description || arg2.description;
741
+ if (arg1.title || arg2.title)
742
+ arg.title = arg1.title || arg2.title;
743
+ return arg;
744
+ };
745
+ var parseSecurity = (security = [], components = {}) => {
746
+ const args = {};
747
+ for (const secReq of security) {
748
+ for (const [name, claims] of Object.entries(secReq)) {
749
+ const param2 = findRef(
750
+ components,
751
+ `#/components/securitySchemes/${name}`
752
+ );
753
+ const arg = args.header || createArgs({ ...parseDocumentation(param2) });
754
+ arg.optional = false;
755
+ if (!arg.allOf)
756
+ arg.allOf = [];
757
+ arg.allOf.push({ type: parseRef(name) });
758
+ args.header = arg;
759
+ }
760
+ }
761
+ return args;
762
+ };
688
763
  var parseParameters2 = (parameters = [], components = {}) => {
689
764
  const args = {};
690
765
  for (const p of parameters) {
@@ -863,6 +938,60 @@ var parseRequestBodies = (requestBodies = {}) => {
863
938
  return definitions;
864
939
  };
865
940
 
941
+ // src/parser/securitySchemes.ts
942
+ var parseSecuritySchemes = (schemes = {}) => {
943
+ const parameters = [];
944
+ for (const [name, scheme] of Object.entries(schemes)) {
945
+ parameters.push(parseSecurityScheme(name, scheme));
946
+ }
947
+ return parameters;
948
+ };
949
+ var parseSecurityScheme = (name, scheme) => {
950
+ switch (scheme.type) {
951
+ case "apiKey":
952
+ return parseApiKey(name, scheme);
953
+ case "http":
954
+ return parseHttpSecurity(name, scheme);
955
+ case "oauth2":
956
+ return parseOAuth(name, scheme);
957
+ case "openIdConnect":
958
+ return parseOpenIdConnect(name, scheme);
959
+ }
960
+ throw new Error(`Unknown security scheme '${scheme.type}'`);
961
+ };
962
+ var parseApiKey = (name, scheme) => {
963
+ const _in = scheme.in || "header";
964
+ const parameterName = scheme.name;
965
+ return {
966
+ name,
967
+ parameterName,
968
+ in: _in,
969
+ optional: false,
970
+ type: { type: "string" }
971
+ };
972
+ };
973
+ var parseHttpSecurity = (name, _scheme) => ({
974
+ name,
975
+ in: "header",
976
+ parameterName: "Authorization",
977
+ optional: false,
978
+ type: { type: "string" }
979
+ });
980
+ var parseOAuth = (name, _scheme) => ({
981
+ name,
982
+ in: "header",
983
+ parameterName: "Authorization",
984
+ optional: false,
985
+ type: { type: "string" }
986
+ });
987
+ var parseOpenIdConnect = (name, _scheme) => ({
988
+ name,
989
+ in: "header",
990
+ parameterName: "Authorization",
991
+ optional: false,
992
+ type: { type: "string" }
993
+ });
994
+
866
995
  // src/parser/index.ts
867
996
  var parseDocument = (schema) => ({
868
997
  paths: parsePaths(schema),
@@ -873,7 +1002,8 @@ var parseComponents = (components = {}) => ({
873
1002
  headers: parseHeaders(components.headers),
874
1003
  parameters: parseParameters(components.parameters),
875
1004
  requestBodies: parseRequestBodies(components.requestBodies),
876
- responseBodies: parseResponseBodies(components.responses)
1005
+ responseBodies: parseResponseBodies(components.responses),
1006
+ securitySchemes: parseSecuritySchemes(components.securitySchemes)
877
1007
  });
878
1008
 
879
1009
  // 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.6.0",
4
4
  "license": "Apache-2.0",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",