Skip to content

Use c12 for wider configuration file format support #1144

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Mar 26, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/fancy-actors-wait.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"swagger-typescript-api": minor
---

Use `c12` for wider configuration file format support.
26 changes: 6 additions & 20 deletions index.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
#!/usr/bin/env node

import * as path from "node:path";
import * as url from "node:url";
import { loadConfig } from "c12";
import { defineCommand, runMain } from "citty";
import { consola } from "consola";
import packageJson from "./package.json" with { type: "json" };
import { TemplatesGenConfig } from "./src/commands/generate-templates/configuration.js";
import { CodeGenConfig } from "./src/configuration.js";
import { HTTP_CLIENT } from "./src/constants.js";
import { generateApi, generateTemplates } from "./src/index.js";
import type { HttpClientType } from "./types/index.js";
import type { GenerateApiParams, HttpClientType } from "./types/index.js";

const templateGenBaseConfig = new TemplatesGenConfig({});

Expand Down Expand Up @@ -288,22 +287,9 @@ const generateCommand = defineCommand({
},
},
run: async ({ args }) => {
let customConfig = undefined;

if (args["custom-config"]) {
try {
const customConfigPath = url
.pathToFileURL(path.resolve(process.cwd(), args["custom-config"]))
.toString();
customConfig = await import(customConfigPath);
customConfig = customConfig.default || customConfig;
if (customConfig) {
consola.info(`Found custom config at: ${customConfigPath}`);
}
} catch (error) {
consola.error("Error loading custom config:", error);
}
}
const customConfig = await loadConfig<GenerateApiParams>({
configFile: args["custom-config"],
});

await generateApi({
addReadonly: args["add-readonly"],
Expand Down Expand Up @@ -346,7 +332,7 @@ const generateCommand = defineCommand({
typeSuffix: args["type-suffix"],
unwrapResponseData: args["unwrap-response-data"],
url: args.path,
...customConfig,
...customConfig.config,
});
},
});
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
},
"dependencies": {
"@types/swagger-schema-official": "^2.0.25",
"c12": "3.0.2",
"citty": "^0.1.6",
"consola": "^3.4.2",
"cosmiconfig": "^9.0.0",
Expand Down
150 changes: 150 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1156,6 +1156,31 @@ __metadata:
languageName: node
linkType: hard

"c12@npm:3.0.2":
version: 3.0.2
resolution: "c12@npm:3.0.2"
dependencies:
chokidar: "npm:^4.0.3"
confbox: "npm:^0.1.8"
defu: "npm:^6.1.4"
dotenv: "npm:^16.4.7"
exsolve: "npm:^1.0.0"
giget: "npm:^2.0.0"
jiti: "npm:^2.4.2"
ohash: "npm:^2.0.5"
pathe: "npm:^2.0.3"
perfect-debounce: "npm:^1.0.0"
pkg-types: "npm:^2.0.0"
rc9: "npm:^2.1.2"
peerDependencies:
magicast: ^0.3.5
peerDependenciesMeta:
magicast:
optional: true
checksum: 10c0/5ff4193c396f7ab05b52bcce9146b954e16cda16c317e018b8aa8d810b7cc678978fdcb203f6dde99276949ec25bb49104c7022d6c8915245425404abcb39750
languageName: node
linkType: hard

"cac@npm:^6.7.14":
version: 6.7.14
resolution: "cac@npm:6.7.14"
Expand Down Expand Up @@ -1309,6 +1334,20 @@ __metadata:
languageName: node
linkType: hard

"confbox@npm:^0.1.8":
version: 0.1.8
resolution: "confbox@npm:0.1.8"
checksum: 10c0/fc2c68d97cb54d885b10b63e45bd8da83a8a71459d3ecf1825143dd4c7f9f1b696b3283e07d9d12a144c1301c2ebc7842380bdf0014e55acc4ae1c9550102418
languageName: node
linkType: hard

"confbox@npm:^0.2.1":
version: 0.2.1
resolution: "confbox@npm:0.2.1"
checksum: 10c0/bd47ab24bf2c3c6ec3386ca59e934b34421c39b0a50aa8c47ab5da7fdf663965ed4793240e5377e74d91b73d3dcd05568c0e91608a72b327877f60cc51ec39e2
languageName: node
linkType: hard

"consola@npm:^3.2.3, consola@npm:^3.4.0, consola@npm:^3.4.2":
version: 3.4.2
resolution: "consola@npm:3.4.2"
Expand Down Expand Up @@ -1370,13 +1409,27 @@ __metadata:
languageName: node
linkType: hard

"defu@npm:^6.1.4":
version: 6.1.4
resolution: "defu@npm:6.1.4"
checksum: 10c0/2d6cc366262dc0cb8096e429368e44052fdf43ed48e53ad84cc7c9407f890301aa5fcb80d0995abaaf842b3949f154d060be4160f7a46cb2bc2f7726c81526f5
languageName: node
linkType: hard

"delayed-stream@npm:~1.0.0":
version: 1.0.0
resolution: "delayed-stream@npm:1.0.0"
checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19
languageName: node
linkType: hard

"destr@npm:^2.0.3":
version: 2.0.3
resolution: "destr@npm:2.0.3"
checksum: 10c0/10e7eff5149e2839a4dd29a1e9617c3c675a3b53608d78d74fc6f4abc31daa977e6de08e0eea78965527a0d5a35467ae2f9624e0a4646d54aa1162caa094473e
languageName: node
linkType: hard

"detect-indent@npm:^6.0.0":
version: 6.1.0
resolution: "detect-indent@npm:6.1.0"
Expand All @@ -1393,6 +1446,13 @@ __metadata:
languageName: node
linkType: hard

"dotenv@npm:^16.4.7":
version: 16.4.7
resolution: "dotenv@npm:16.4.7"
checksum: 10c0/be9f597e36a8daf834452daa1f4cc30e5375a5968f98f46d89b16b983c567398a330580c88395069a77473943c06b877d1ca25b4afafcdd6d4adb549e8293462
languageName: node
linkType: hard

"dotenv@npm:^8.1.0":
version: 8.6.0
resolution: "dotenv@npm:8.6.0"
Expand Down Expand Up @@ -1656,6 +1716,13 @@ __metadata:
languageName: node
linkType: hard

"exsolve@npm:^1.0.0, exsolve@npm:^1.0.1":
version: 1.0.4
resolution: "exsolve@npm:1.0.4"
checksum: 10c0/475a5cb8961fdc91dfe0ff7d5fad601cce3ac27226e3966d18277c10ddace696adc986871115383c449bac110c02e6eaaf5ae9d983b2cc731df805ecb55f2482
languageName: node
linkType: hard

"extendable-error@npm:^0.1.5":
version: 0.1.7
resolution: "extendable-error@npm:0.1.7"
Expand Down Expand Up @@ -1858,6 +1925,22 @@ __metadata:
languageName: node
linkType: hard

"giget@npm:^2.0.0":
version: 2.0.0
resolution: "giget@npm:2.0.0"
dependencies:
citty: "npm:^0.1.6"
consola: "npm:^3.4.0"
defu: "npm:^6.1.4"
node-fetch-native: "npm:^1.6.6"
nypm: "npm:^0.6.0"
pathe: "npm:^2.0.3"
bin:
giget: dist/cli.mjs
checksum: 10c0/606d81652643936ee7f76653b4dcebc09703524ff7fd19692634ce69e3fc6775a377760d7508162379451c03bf43cc6f46716aeadeb803f7cef3fc53d0671396
languageName: node
linkType: hard

"glob-parent@npm:^5.1.2":
version: 5.1.2
resolution: "glob-parent@npm:5.1.2"
Expand Down Expand Up @@ -2111,6 +2194,15 @@ __metadata:
languageName: node
linkType: hard

"jiti@npm:^2.4.2":
version: 2.4.2
resolution: "jiti@npm:2.4.2"
bin:
jiti: lib/jiti-cli.mjs
checksum: 10c0/4ceac133a08c8faff7eac84aabb917e85e8257f5ad659e843004ce76e981c457c390a220881748ac67ba1b940b9b729b30fb85cbaf6e7989f04b6002c94da331
languageName: node
linkType: hard

"joycon@npm:^3.1.1":
version: 3.1.1
resolution: "joycon@npm:3.1.1"
Expand Down Expand Up @@ -2461,6 +2553,13 @@ __metadata:
languageName: node
linkType: hard

"node-fetch-native@npm:^1.6.6":
version: 1.6.6
resolution: "node-fetch-native@npm:1.6.6"
checksum: 10c0/8c12dab0e640d8bc126a03d604af9cf3fc1b87f2cda5af0c71601079d5ed835c1dc149c7042b61c83f252a382e1cf1e541788f4c9e8e6c089af77497190f5dc3
languageName: node
linkType: hard

"node-fetch@npm:^2.5.0, node-fetch@npm:^2.6.1":
version: 2.7.0
resolution: "node-fetch@npm:2.7.0"
Expand Down Expand Up @@ -2515,6 +2614,21 @@ __metadata:
languageName: node
linkType: hard

"nypm@npm:^0.6.0":
version: 0.6.0
resolution: "nypm@npm:0.6.0"
dependencies:
citty: "npm:^0.1.6"
consola: "npm:^3.4.0"
pathe: "npm:^2.0.3"
pkg-types: "npm:^2.0.0"
tinyexec: "npm:^0.3.2"
bin:
nypm: dist/cli.mjs
checksum: 10c0/899f16c2df1bdf3ef4de5f7d4ed5530e2e1ca097cc7dedbaa25abb6b8e44bb470c25cd26639f6e3e4f5734867e61f7f77c4ed5dfbe86b2a1bdef4525a2dc0026
languageName: node
linkType: hard

"oas-kit-common@npm:^1.0.8":
version: 1.0.8
resolution: "oas-kit-common@npm:1.0.8"
Expand Down Expand Up @@ -2580,6 +2694,13 @@ __metadata:
languageName: node
linkType: hard

"ohash@npm:^2.0.5":
version: 2.0.11
resolution: "ohash@npm:2.0.11"
checksum: 10c0/d07c8d79cc26da082c1a7c8d5b56c399dd4ed3b2bd069fcae6bae78c99a9bcc3ad813b1e1f49ca2f335292846d689c6141a762cf078727d2302a33d414e69c79
languageName: node
linkType: hard

"openapi-types@npm:12.1.3, openapi-types@npm:^12.1.0":
version: 12.1.3
resolution: "openapi-types@npm:12.1.3"
Expand Down Expand Up @@ -2731,6 +2852,13 @@ __metadata:
languageName: node
linkType: hard

"perfect-debounce@npm:^1.0.0":
version: 1.0.0
resolution: "perfect-debounce@npm:1.0.0"
checksum: 10c0/e2baac416cae046ef1b270812cf9ccfb0f91c04ea36ac7f5b00bc84cb7f41bdbba087c0ab21b4e02a7ef3a1f1f6db399f137cecec46868bd7d8d88c2a9ee431f
languageName: node
linkType: hard

"picocolors@npm:^1.0.0, picocolors@npm:^1.1.0, picocolors@npm:^1.1.1":
version: 1.1.1
resolution: "picocolors@npm:1.1.1"
Expand Down Expand Up @@ -2766,6 +2894,17 @@ __metadata:
languageName: node
linkType: hard

"pkg-types@npm:^2.0.0":
version: 2.1.0
resolution: "pkg-types@npm:2.1.0"
dependencies:
confbox: "npm:^0.2.1"
exsolve: "npm:^1.0.1"
pathe: "npm:^2.0.3"
checksum: 10c0/7729d0a2367ba0aa2caf0f84a6ff0b73b13f4e9a3d62c229ddfa6d45d1f3898f590acdbaa64d779d56737d4ebea2d085961efd59094b8adf8baa34d829599b75
languageName: node
linkType: hard

"postcss-load-config@npm:^6.0.1":
version: 6.0.1
resolution: "postcss-load-config@npm:6.0.1"
Expand Down Expand Up @@ -2863,6 +3002,16 @@ __metadata:
languageName: node
linkType: hard

"rc9@npm:^2.1.2":
version: 2.1.2
resolution: "rc9@npm:2.1.2"
dependencies:
defu: "npm:^6.1.4"
destr: "npm:^2.0.3"
checksum: 10c0/a2ead3b94bf033e35e4ea40d70062a09feddb8f589c3f5a8fe4e9342976974296aee9f6e9e72bd5e78e6ae4b7bc16dc244f63699fd7322c16314e3238db982c9
languageName: node
linkType: hard

"read-yaml-file@npm:^1.1.0":
version: 1.1.0
resolution: "read-yaml-file@npm:1.1.0"
Expand Down Expand Up @@ -3313,6 +3462,7 @@ __metadata:
"@types/swagger-schema-official": "npm:^2.0.25"
"@types/swagger2openapi": "npm:7.0.4"
axios: "npm:1.8.4"
c12: "npm:3.0.2"
citty: "npm:^0.1.6"
consola: "npm:^3.4.2"
cosmiconfig: "npm:^9.0.0"
Expand Down