@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.
- package/dist/index.js +154 -13
- 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
|
-
|
|
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,
|
|
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 ? "?" : ""}: ${
|
|
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 ? "?" : ""}: ${
|
|
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"
|
|
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
|
-
|
|
678
|
-
|
|
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.
|
|
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.
|
|
31
|
+
"yaml": "2.4.0",
|
|
32
32
|
"yargs": "17.7.2",
|
|
33
33
|
"yarn": "1.22.21"
|
|
34
34
|
}
|