Skip to content

Commit ea1df18

Browse files
authored
Use c12 for wider configuration file format support (#1144)
Signed-off-by: Sora Morimoto <[email protected]>
1 parent 821bfad commit ea1df18

File tree

4 files changed

+162
-20
lines changed

4 files changed

+162
-20
lines changed

Diff for: .changeset/fancy-actors-wait.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"swagger-typescript-api": minor
3+
---
4+
5+
Use `c12` for wider configuration file format support.

Diff for: index.ts

+6-20
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
#!/usr/bin/env node
22

33
import * as path from "node:path";
4-
import * as url from "node:url";
4+
import { loadConfig } from "c12";
55
import { defineCommand, runMain } from "citty";
6-
import { consola } from "consola";
76
import packageJson from "./package.json" with { type: "json" };
87
import { TemplatesGenConfig } from "./src/commands/generate-templates/configuration.js";
98
import { CodeGenConfig } from "./src/configuration.js";
109
import { HTTP_CLIENT } from "./src/constants.js";
1110
import { generateApi, generateTemplates } from "./src/index.js";
12-
import type { HttpClientType } from "./types/index.js";
11+
import type { GenerateApiParams, HttpClientType } from "./types/index.js";
1312

1413
const templateGenBaseConfig = new TemplatesGenConfig({});
1514

@@ -288,22 +287,9 @@ const generateCommand = defineCommand({
288287
},
289288
},
290289
run: async ({ args }) => {
291-
let customConfig = undefined;
292-
293-
if (args["custom-config"]) {
294-
try {
295-
const customConfigPath = url
296-
.pathToFileURL(path.resolve(process.cwd(), args["custom-config"]))
297-
.toString();
298-
customConfig = await import(customConfigPath);
299-
customConfig = customConfig.default || customConfig;
300-
if (customConfig) {
301-
consola.info(`Found custom config at: ${customConfigPath}`);
302-
}
303-
} catch (error) {
304-
consola.error("Error loading custom config:", error);
305-
}
306-
}
290+
const customConfig = await loadConfig<GenerateApiParams>({
291+
configFile: args["custom-config"],
292+
});
307293

308294
await generateApi({
309295
addReadonly: args["add-readonly"],
@@ -346,7 +332,7 @@ const generateCommand = defineCommand({
346332
typeSuffix: args["type-suffix"],
347333
unwrapResponseData: args["unwrap-response-data"],
348334
url: args.path,
349-
...customConfig,
335+
...customConfig.config,
350336
});
351337
},
352338
});

Diff for: package.json

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
},
4545
"dependencies": {
4646
"@types/swagger-schema-official": "^2.0.25",
47+
"c12": "3.0.2",
4748
"citty": "^0.1.6",
4849
"consola": "^3.4.2",
4950
"cosmiconfig": "^9.0.0",

Diff for: yarn.lock

+150
Original file line numberDiff line numberDiff line change
@@ -1156,6 +1156,31 @@ __metadata:
11561156
languageName: node
11571157
linkType: hard
11581158

1159+
"c12@npm:3.0.2":
1160+
version: 3.0.2
1161+
resolution: "c12@npm:3.0.2"
1162+
dependencies:
1163+
chokidar: "npm:^4.0.3"
1164+
confbox: "npm:^0.1.8"
1165+
defu: "npm:^6.1.4"
1166+
dotenv: "npm:^16.4.7"
1167+
exsolve: "npm:^1.0.0"
1168+
giget: "npm:^2.0.0"
1169+
jiti: "npm:^2.4.2"
1170+
ohash: "npm:^2.0.5"
1171+
pathe: "npm:^2.0.3"
1172+
perfect-debounce: "npm:^1.0.0"
1173+
pkg-types: "npm:^2.0.0"
1174+
rc9: "npm:^2.1.2"
1175+
peerDependencies:
1176+
magicast: ^0.3.5
1177+
peerDependenciesMeta:
1178+
magicast:
1179+
optional: true
1180+
checksum: 10c0/5ff4193c396f7ab05b52bcce9146b954e16cda16c317e018b8aa8d810b7cc678978fdcb203f6dde99276949ec25bb49104c7022d6c8915245425404abcb39750
1181+
languageName: node
1182+
linkType: hard
1183+
11591184
"cac@npm:^6.7.14":
11601185
version: 6.7.14
11611186
resolution: "cac@npm:6.7.14"
@@ -1309,6 +1334,20 @@ __metadata:
13091334
languageName: node
13101335
linkType: hard
13111336

1337+
"confbox@npm:^0.1.8":
1338+
version: 0.1.8
1339+
resolution: "confbox@npm:0.1.8"
1340+
checksum: 10c0/fc2c68d97cb54d885b10b63e45bd8da83a8a71459d3ecf1825143dd4c7f9f1b696b3283e07d9d12a144c1301c2ebc7842380bdf0014e55acc4ae1c9550102418
1341+
languageName: node
1342+
linkType: hard
1343+
1344+
"confbox@npm:^0.2.1":
1345+
version: 0.2.1
1346+
resolution: "confbox@npm:0.2.1"
1347+
checksum: 10c0/bd47ab24bf2c3c6ec3386ca59e934b34421c39b0a50aa8c47ab5da7fdf663965ed4793240e5377e74d91b73d3dcd05568c0e91608a72b327877f60cc51ec39e2
1348+
languageName: node
1349+
linkType: hard
1350+
13121351
"consola@npm:^3.2.3, consola@npm:^3.4.0, consola@npm:^3.4.2":
13131352
version: 3.4.2
13141353
resolution: "consola@npm:3.4.2"
@@ -1370,13 +1409,27 @@ __metadata:
13701409
languageName: node
13711410
linkType: hard
13721411

1412+
"defu@npm:^6.1.4":
1413+
version: 6.1.4
1414+
resolution: "defu@npm:6.1.4"
1415+
checksum: 10c0/2d6cc366262dc0cb8096e429368e44052fdf43ed48e53ad84cc7c9407f890301aa5fcb80d0995abaaf842b3949f154d060be4160f7a46cb2bc2f7726c81526f5
1416+
languageName: node
1417+
linkType: hard
1418+
13731419
"delayed-stream@npm:~1.0.0":
13741420
version: 1.0.0
13751421
resolution: "delayed-stream@npm:1.0.0"
13761422
checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19
13771423
languageName: node
13781424
linkType: hard
13791425

1426+
"destr@npm:^2.0.3":
1427+
version: 2.0.3
1428+
resolution: "destr@npm:2.0.3"
1429+
checksum: 10c0/10e7eff5149e2839a4dd29a1e9617c3c675a3b53608d78d74fc6f4abc31daa977e6de08e0eea78965527a0d5a35467ae2f9624e0a4646d54aa1162caa094473e
1430+
languageName: node
1431+
linkType: hard
1432+
13801433
"detect-indent@npm:^6.0.0":
13811434
version: 6.1.0
13821435
resolution: "detect-indent@npm:6.1.0"
@@ -1393,6 +1446,13 @@ __metadata:
13931446
languageName: node
13941447
linkType: hard
13951448

1449+
"dotenv@npm:^16.4.7":
1450+
version: 16.4.7
1451+
resolution: "dotenv@npm:16.4.7"
1452+
checksum: 10c0/be9f597e36a8daf834452daa1f4cc30e5375a5968f98f46d89b16b983c567398a330580c88395069a77473943c06b877d1ca25b4afafcdd6d4adb549e8293462
1453+
languageName: node
1454+
linkType: hard
1455+
13961456
"dotenv@npm:^8.1.0":
13971457
version: 8.6.0
13981458
resolution: "dotenv@npm:8.6.0"
@@ -1656,6 +1716,13 @@ __metadata:
16561716
languageName: node
16571717
linkType: hard
16581718

1719+
"exsolve@npm:^1.0.0, exsolve@npm:^1.0.1":
1720+
version: 1.0.4
1721+
resolution: "exsolve@npm:1.0.4"
1722+
checksum: 10c0/475a5cb8961fdc91dfe0ff7d5fad601cce3ac27226e3966d18277c10ddace696adc986871115383c449bac110c02e6eaaf5ae9d983b2cc731df805ecb55f2482
1723+
languageName: node
1724+
linkType: hard
1725+
16591726
"extendable-error@npm:^0.1.5":
16601727
version: 0.1.7
16611728
resolution: "extendable-error@npm:0.1.7"
@@ -1858,6 +1925,22 @@ __metadata:
18581925
languageName: node
18591926
linkType: hard
18601927

1928+
"giget@npm:^2.0.0":
1929+
version: 2.0.0
1930+
resolution: "giget@npm:2.0.0"
1931+
dependencies:
1932+
citty: "npm:^0.1.6"
1933+
consola: "npm:^3.4.0"
1934+
defu: "npm:^6.1.4"
1935+
node-fetch-native: "npm:^1.6.6"
1936+
nypm: "npm:^0.6.0"
1937+
pathe: "npm:^2.0.3"
1938+
bin:
1939+
giget: dist/cli.mjs
1940+
checksum: 10c0/606d81652643936ee7f76653b4dcebc09703524ff7fd19692634ce69e3fc6775a377760d7508162379451c03bf43cc6f46716aeadeb803f7cef3fc53d0671396
1941+
languageName: node
1942+
linkType: hard
1943+
18611944
"glob-parent@npm:^5.1.2":
18621945
version: 5.1.2
18631946
resolution: "glob-parent@npm:5.1.2"
@@ -2111,6 +2194,15 @@ __metadata:
21112194
languageName: node
21122195
linkType: hard
21132196

2197+
"jiti@npm:^2.4.2":
2198+
version: 2.4.2
2199+
resolution: "jiti@npm:2.4.2"
2200+
bin:
2201+
jiti: lib/jiti-cli.mjs
2202+
checksum: 10c0/4ceac133a08c8faff7eac84aabb917e85e8257f5ad659e843004ce76e981c457c390a220881748ac67ba1b940b9b729b30fb85cbaf6e7989f04b6002c94da331
2203+
languageName: node
2204+
linkType: hard
2205+
21142206
"joycon@npm:^3.1.1":
21152207
version: 3.1.1
21162208
resolution: "joycon@npm:3.1.1"
@@ -2461,6 +2553,13 @@ __metadata:
24612553
languageName: node
24622554
linkType: hard
24632555

2556+
"node-fetch-native@npm:^1.6.6":
2557+
version: 1.6.6
2558+
resolution: "node-fetch-native@npm:1.6.6"
2559+
checksum: 10c0/8c12dab0e640d8bc126a03d604af9cf3fc1b87f2cda5af0c71601079d5ed835c1dc149c7042b61c83f252a382e1cf1e541788f4c9e8e6c089af77497190f5dc3
2560+
languageName: node
2561+
linkType: hard
2562+
24642563
"node-fetch@npm:^2.5.0, node-fetch@npm:^2.6.1":
24652564
version: 2.7.0
24662565
resolution: "node-fetch@npm:2.7.0"
@@ -2515,6 +2614,21 @@ __metadata:
25152614
languageName: node
25162615
linkType: hard
25172616

2617+
"nypm@npm:^0.6.0":
2618+
version: 0.6.0
2619+
resolution: "nypm@npm:0.6.0"
2620+
dependencies:
2621+
citty: "npm:^0.1.6"
2622+
consola: "npm:^3.4.0"
2623+
pathe: "npm:^2.0.3"
2624+
pkg-types: "npm:^2.0.0"
2625+
tinyexec: "npm:^0.3.2"
2626+
bin:
2627+
nypm: dist/cli.mjs
2628+
checksum: 10c0/899f16c2df1bdf3ef4de5f7d4ed5530e2e1ca097cc7dedbaa25abb6b8e44bb470c25cd26639f6e3e4f5734867e61f7f77c4ed5dfbe86b2a1bdef4525a2dc0026
2629+
languageName: node
2630+
linkType: hard
2631+
25182632
"oas-kit-common@npm:^1.0.8":
25192633
version: 1.0.8
25202634
resolution: "oas-kit-common@npm:1.0.8"
@@ -2580,6 +2694,13 @@ __metadata:
25802694
languageName: node
25812695
linkType: hard
25822696

2697+
"ohash@npm:^2.0.5":
2698+
version: 2.0.11
2699+
resolution: "ohash@npm:2.0.11"
2700+
checksum: 10c0/d07c8d79cc26da082c1a7c8d5b56c399dd4ed3b2bd069fcae6bae78c99a9bcc3ad813b1e1f49ca2f335292846d689c6141a762cf078727d2302a33d414e69c79
2701+
languageName: node
2702+
linkType: hard
2703+
25832704
"openapi-types@npm:12.1.3, openapi-types@npm:^12.1.0":
25842705
version: 12.1.3
25852706
resolution: "openapi-types@npm:12.1.3"
@@ -2731,6 +2852,13 @@ __metadata:
27312852
languageName: node
27322853
linkType: hard
27332854

2855+
"perfect-debounce@npm:^1.0.0":
2856+
version: 1.0.0
2857+
resolution: "perfect-debounce@npm:1.0.0"
2858+
checksum: 10c0/e2baac416cae046ef1b270812cf9ccfb0f91c04ea36ac7f5b00bc84cb7f41bdbba087c0ab21b4e02a7ef3a1f1f6db399f137cecec46868bd7d8d88c2a9ee431f
2859+
languageName: node
2860+
linkType: hard
2861+
27342862
"picocolors@npm:^1.0.0, picocolors@npm:^1.1.0, picocolors@npm:^1.1.1":
27352863
version: 1.1.1
27362864
resolution: "picocolors@npm:1.1.1"
@@ -2766,6 +2894,17 @@ __metadata:
27662894
languageName: node
27672895
linkType: hard
27682896

2897+
"pkg-types@npm:^2.0.0":
2898+
version: 2.1.0
2899+
resolution: "pkg-types@npm:2.1.0"
2900+
dependencies:
2901+
confbox: "npm:^0.2.1"
2902+
exsolve: "npm:^1.0.1"
2903+
pathe: "npm:^2.0.3"
2904+
checksum: 10c0/7729d0a2367ba0aa2caf0f84a6ff0b73b13f4e9a3d62c229ddfa6d45d1f3898f590acdbaa64d779d56737d4ebea2d085961efd59094b8adf8baa34d829599b75
2905+
languageName: node
2906+
linkType: hard
2907+
27692908
"postcss-load-config@npm:^6.0.1":
27702909
version: 6.0.1
27712910
resolution: "postcss-load-config@npm:6.0.1"
@@ -2863,6 +3002,16 @@ __metadata:
28633002
languageName: node
28643003
linkType: hard
28653004

3005+
"rc9@npm:^2.1.2":
3006+
version: 2.1.2
3007+
resolution: "rc9@npm:2.1.2"
3008+
dependencies:
3009+
defu: "npm:^6.1.4"
3010+
destr: "npm:^2.0.3"
3011+
checksum: 10c0/a2ead3b94bf033e35e4ea40d70062a09feddb8f589c3f5a8fe4e9342976974296aee9f6e9e72bd5e78e6ae4b7bc16dc244f63699fd7322c16314e3238db982c9
3012+
languageName: node
3013+
linkType: hard
3014+
28663015
"read-yaml-file@npm:^1.1.0":
28673016
version: 1.1.0
28683017
resolution: "read-yaml-file@npm:1.1.0"
@@ -3313,6 +3462,7 @@ __metadata:
33133462
"@types/swagger-schema-official": "npm:^2.0.25"
33143463
"@types/swagger2openapi": "npm:7.0.4"
33153464
axios: "npm:1.8.4"
3465+
c12: "npm:3.0.2"
33163466
citty: "npm:^0.1.6"
33173467
consola: "npm:^3.4.2"
33183468
cosmiconfig: "npm:^9.0.0"

0 commit comments

Comments
 (0)