@sebspark/openapi-typegen 1.5.0 → 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 +154 -13
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -188,10 +188,21 @@ var generateProperty = (property) => {
188
188
  };
189
189
  var preamble = (type) => type.name ? `${document(type)}export type ${typeName(type.name)} = ` : "";
190
190
  var rxProperVariable = /^[a-zA-Z_<>$][a-zA-Z0-9_<>$]*$/;
191
- var typeName = (name) => {
192
- const namingConventionRegex = /^([a-z_]\w*)(<([a-z_]\w*(,\s*)?)+>)?$/;
191
+ var isValidName = (name) => {
192
+ const namingConventionRegex = /^([A-Z_]\w*)([a-z_]\w*)(<([a-z_]\w*(,\s*)?)+>)?$/;
193
193
  const hasCapitalLetterRegex = /[A-Z]/;
194
- if (namingConventionRegex.test(name) && hasCapitalLetterRegex.test(name)) {
194
+ if (!namingConventionRegex.test(name))
195
+ return false;
196
+ if (!hasCapitalLetterRegex.test(name)) {
197
+ return false;
198
+ }
199
+ if (name[0] !== name[0].toUpperCase() && !name.includes("_")) {
200
+ return false;
201
+ }
202
+ return true;
203
+ };
204
+ var typeName = (name) => {
205
+ if (isValidName(name)) {
195
206
  return name;
196
207
  }
197
208
  if (name.includes("<")) {
@@ -325,7 +336,7 @@ var serializeValue = (value) => {
325
336
  var generateClientArgs = (args) => generateArgs(args, false);
326
337
  var generateServerArgs = (args) => args ? generateArgs(args, true) : "args: Req";
327
338
  var parts = ["body", "header", "path", "query"];
328
- var generateArgs = (args, extendsReq) => {
339
+ var generateArgs = (args, isServer) => {
329
340
  if (args) {
330
341
  const tokens = [];
331
342
  for (const part of parts) {
@@ -333,17 +344,25 @@ var generateArgs = (args, extendsReq) => {
333
344
  if (arg) {
334
345
  const partName = part === "path" ? "params" : part === "header" ? "headers" : part;
335
346
  tokens.push(
336
- `${partName}${arg.optional ? "?" : ""}: ${generateType(arg)}`
347
+ `${partName}${arg.optional ? "?" : ""}: ${wrapArgs(
348
+ generateType(arg),
349
+ isServer && part === "header"
350
+ )}`
337
351
  );
338
352
  }
339
353
  }
340
354
  if (!tokens.length)
341
355
  return "";
342
356
  const optional = argsOptional(args);
343
- return `args${optional ? "?" : ""}: ${extendsReq ? "Req & " : ""}{ ${tokens.join(", ")} }, `;
357
+ return `args${optional ? "?" : ""}: ${isServer ? "Req & " : ""}{ ${tokens.join(", ")} }, `;
344
358
  }
345
359
  return "";
346
360
  };
361
+ var wrapArgs = (args, wrap) => {
362
+ if (!wrap)
363
+ return args;
364
+ return `LowerCaseHeaders<${args}>`;
365
+ };
347
366
  var argsOptional = (args) => (
348
367
  // biome-ignore lint/style/noNonNullAssertion: <explanation>
349
368
  parts.reduce((o, p) => o && (!args[p] || args[p].optional), true)
@@ -424,6 +443,7 @@ var generate = (name, doc) => `
424
443
  APIServerDefinition,
425
444
  BaseClient,
426
445
  GenericRouteHandler,
446
+ LowerCaseHeaders,
427
447
  PartiallySerialized,
428
448
  RequestOptions,
429
449
  Serialized,
@@ -471,6 +491,21 @@ var generateComponents = (components) => {
471
491
  for (const res of components.responseBodies) {
472
492
  tokens.push(generateResponseBody(res));
473
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
+ }
474
509
  return tokens.join("\n\n");
475
510
  };
476
511
 
@@ -659,13 +694,14 @@ var parseParameter = (name, schema) => {
659
694
 
660
695
  // src/parser/args.ts
661
696
  var parseArgs = (path, components) => {
662
- var _a;
663
- 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)
664
699
  return void 0;
665
- const args = {
666
- ...parseParameters2(path.parameters, components),
667
- ...parseRequestBody(path.requestBody, components)
668
- };
700
+ const args = joinArgs([
701
+ parseParameters2(path.parameters, components),
702
+ parseSecurity(path.security, components),
703
+ parseRequestBody(path.requestBody, components)
704
+ ]);
669
705
  return args;
670
706
  };
671
707
  var createArgs = (initializer = {}) => ({
@@ -674,6 +710,56 @@ var createArgs = (initializer = {}) => ({
674
710
  optional: true,
675
711
  ...initializer
676
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
+ };
677
763
  var parseParameters2 = (parameters = [], components = {}) => {
678
764
  const args = {};
679
765
  for (const p of parameters) {
@@ -852,6 +938,60 @@ var parseRequestBodies = (requestBodies = {}) => {
852
938
  return definitions;
853
939
  };
854
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
+
855
995
  // src/parser/index.ts
856
996
  var parseDocument = (schema) => ({
857
997
  paths: parsePaths(schema),
@@ -862,7 +1002,8 @@ var parseComponents = (components = {}) => ({
862
1002
  headers: parseHeaders(components.headers),
863
1003
  parameters: parseParameters(components.parameters),
864
1004
  requestBodies: parseRequestBodies(components.requestBodies),
865
- responseBodies: parseResponseBodies(components.responses)
1005
+ responseBodies: parseResponseBodies(components.responses),
1006
+ securitySchemes: parseSecuritySchemes(components.securitySchemes)
866
1007
  });
867
1008
 
868
1009
  // src/index.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sebspark/openapi-typegen",
3
- "version": "1.5.0",
3
+ "version": "1.6.0",
4
4
  "license": "Apache-2.0",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",