@getrouter/getrouter-cli 0.1.0 → 0.1.1
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/README.ja.md +2 -2
- package/README.md +2 -2
- package/README.zh-cn.md +2 -2
- package/bun.lock +60 -88
- package/dist/bin.mjs +2 -43
- package/docs/plans/2026-01-04-remove-config-command-design.md +32 -0
- package/docs/plans/2026-01-04-remove-config-command-plan.md +129 -0
- package/package.json +5 -5
- package/src/cmd/index.ts +0 -2
- package/tests/cli.test.ts +20 -3
- package/tests/cmd/keys.test.ts +14 -3
- package/src/cmd/config-helpers.ts +0 -16
- package/src/cmd/config.ts +0 -31
- package/tests/cmd/config-helpers.test.ts +0 -18
- package/tests/cmd/config.test.ts +0 -56
package/README.ja.md
CHANGED
|
@@ -61,8 +61,6 @@ getrouter login
|
|
|
61
61
|
- `getrouter usages` — 直近 7 日間の使用量(チャート + テーブル)
|
|
62
62
|
- `getrouter codex` — Codex を設定(config.toml + auth.json)
|
|
63
63
|
- `getrouter claude --install` — Anthropic 互換の環境変数をインストール
|
|
64
|
-
- `getrouter config` — CLI 設定を表示
|
|
65
|
-
- `getrouter config apiBase https://getrouter.dev` — API Base URL を設定
|
|
66
64
|
|
|
67
65
|
メモ:
|
|
68
66
|
|
|
@@ -107,6 +105,8 @@ ANTHROPIC_API_KEY=<consumer api key>
|
|
|
107
105
|
- `auth.json`: アクセス/リフレッシュトークン
|
|
108
106
|
- `env.sh` / `env.ps1`: 環境変数
|
|
109
107
|
|
|
108
|
+
設定を変更する場合は `~/.getrouter/config.json` を直接編集してください。
|
|
109
|
+
|
|
110
110
|
## 開発
|
|
111
111
|
|
|
112
112
|
- `bun install` — 依存関係をインストール
|
package/README.md
CHANGED
|
@@ -61,8 +61,6 @@ Follow the printed URL in your browser, then the CLI will poll until it receives
|
|
|
61
61
|
- `getrouter usages` — show the last 7 days of usage (chart + table)
|
|
62
62
|
- `getrouter codex` — configure Codex (config.toml + auth.json)
|
|
63
63
|
- `getrouter claude --install` — install Anthropic-compatible env vars
|
|
64
|
-
- `getrouter config` — show current CLI config
|
|
65
|
-
- `getrouter config apiBase https://getrouter.dev` — set API base URL
|
|
66
64
|
|
|
67
65
|
Notes:
|
|
68
66
|
|
|
@@ -107,6 +105,8 @@ Default config dir: `~/.getrouter` (override with `GETROUTER_CONFIG_DIR`)
|
|
|
107
105
|
- `auth.json`: access/refresh tokens
|
|
108
106
|
- `env.sh` / `env.ps1`: environment variables
|
|
109
107
|
|
|
108
|
+
Edit `~/.getrouter/config.json` directly to update CLI settings.
|
|
109
|
+
|
|
110
110
|
## Development
|
|
111
111
|
|
|
112
112
|
- `bun install` — install dependencies
|
package/README.zh-cn.md
CHANGED
|
@@ -61,8 +61,6 @@ getrouter login
|
|
|
61
61
|
- `getrouter usages` — 查看最近 7 天使用量(图表 + 表格)
|
|
62
62
|
- `getrouter codex` — 配置 Codex(config.toml + auth.json)
|
|
63
63
|
- `getrouter claude --install` — 安装 Anthropic 兼容环境变量
|
|
64
|
-
- `getrouter config` — 查看 CLI 配置
|
|
65
|
-
- `getrouter config apiBase https://getrouter.dev` — 设置 API Base URL
|
|
66
64
|
|
|
67
65
|
说明:
|
|
68
66
|
|
|
@@ -107,6 +105,8 @@ ANTHROPIC_API_KEY=<consumer api key>
|
|
|
107
105
|
- `auth.json`:token
|
|
108
106
|
- `env.sh` / `env.ps1`:环境变量
|
|
109
107
|
|
|
108
|
+
如需修改配置,请直接编辑 `~/.getrouter/config.json`。
|
|
109
|
+
|
|
110
110
|
## 开发
|
|
111
111
|
|
|
112
112
|
- `bun install` — 安装依赖
|
package/bun.lock
CHANGED
|
@@ -5,17 +5,17 @@
|
|
|
5
5
|
"": {
|
|
6
6
|
"name": "getrouter",
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"commander": "^
|
|
8
|
+
"commander": "^14.0.2",
|
|
9
9
|
"prompts": "^2.4.2",
|
|
10
10
|
},
|
|
11
11
|
"devDependencies": {
|
|
12
12
|
"@biomejs/biome": "^2.3.10",
|
|
13
|
-
"@types/node": "^
|
|
13
|
+
"@types/node": "^25.0.3",
|
|
14
14
|
"@types/prompts": "^2.4.9",
|
|
15
|
-
"tsdown": "^0.
|
|
15
|
+
"tsdown": "^0.18.4",
|
|
16
16
|
"tsx": "^4.19.2",
|
|
17
17
|
"typescript": "^5.7.3",
|
|
18
|
-
"vitest": "^
|
|
18
|
+
"vitest": "^4.0.16",
|
|
19
19
|
},
|
|
20
20
|
},
|
|
21
21
|
},
|
|
@@ -116,37 +116,37 @@
|
|
|
116
116
|
|
|
117
117
|
"@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.1", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" } }, "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A=="],
|
|
118
118
|
|
|
119
|
-
"@oxc-project/types": ["@oxc-project/types@0.
|
|
119
|
+
"@oxc-project/types": ["@oxc-project/types@0.103.0", "", {}, "sha512-bkiYX5kaXWwUessFRSoXFkGIQTmc6dLGdxuRTrC+h8PSnIdZyuXHHlLAeTmOue5Br/a0/a7dHH0Gca6eXn9MKg=="],
|
|
120
120
|
|
|
121
121
|
"@quansync/fs": ["@quansync/fs@1.0.0", "", { "dependencies": { "quansync": "^1.0.0" } }, "sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ=="],
|
|
122
122
|
|
|
123
|
-
"@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.0-beta.
|
|
123
|
+
"@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.0-beta.57", "", { "os": "android", "cpu": "arm64" }, "sha512-GoOVDy8bjw9z1K30Oo803nSzXJS/vWhFijFsW3kzvZCO8IZwFnNa6pGctmbbJstKl3Fv6UBwyjJQN6msejW0IQ=="],
|
|
124
124
|
|
|
125
|
-
"@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.0-beta.
|
|
125
|
+
"@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.0-beta.57", "", { "os": "darwin", "cpu": "arm64" }, "sha512-9c4FOhRGpl+PX7zBK5p17c5efpF9aSpTPgyigv57hXf5NjQUaJOOiejPLAtFiKNBIfm5Uu6yFkvLKzOafNvlTw=="],
|
|
126
126
|
|
|
127
|
-
"@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.0-beta.
|
|
127
|
+
"@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.0-beta.57", "", { "os": "darwin", "cpu": "x64" }, "sha512-6RsB8Qy4LnGqNGJJC/8uWeLWGOvbRL/KG5aJ8XXpSEupg/KQtlBEiFaYU/Ma5Usj1s+bt3ItkqZYAI50kSplBA=="],
|
|
128
128
|
|
|
129
|
-
"@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.0-beta.
|
|
129
|
+
"@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.0-beta.57", "", { "os": "freebsd", "cpu": "x64" }, "sha512-uA9kG7+MYkHTbqwv67Tx+5GV5YcKd33HCJIi0311iYBd25yuwyIqvJfBdt1VVB8tdOlyTb9cPAgfCki8nhwTQg=="],
|
|
130
130
|
|
|
131
|
-
"@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.
|
|
131
|
+
"@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.57", "", { "os": "linux", "cpu": "arm" }, "sha512-3KkS0cHsllT2T+Te+VZMKHNw6FPQihYsQh+8J4jkzwgvAQpbsbXmrqhkw3YU/QGRrD8qgcOvBr6z5y6Jid+rmw=="],
|
|
132
132
|
|
|
133
|
-
"@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.0-beta.
|
|
133
|
+
"@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.0-beta.57", "", { "os": "linux", "cpu": "arm64" }, "sha512-A3/wu1RgsHhqP3rVH2+sM81bpk+Qd2XaHTl8LtX5/1LNR7QVBFBCpAoiXwjTdGnI5cMdBVi7Z1pi52euW760Fw=="],
|
|
134
134
|
|
|
135
|
-
"@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.0-beta.
|
|
135
|
+
"@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.0-beta.57", "", { "os": "linux", "cpu": "arm64" }, "sha512-d0kIVezTQtazpyWjiJIn5to8JlwfKITDqwsFv0Xc6s31N16CD2PC/Pl2OtKgS7n8WLOJbfqgIp5ixYzTAxCqMg=="],
|
|
136
136
|
|
|
137
|
-
"@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.0-beta.
|
|
137
|
+
"@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.0-beta.57", "", { "os": "linux", "cpu": "x64" }, "sha512-E199LPijo98yrLjPCmETx8EF43sZf9t3guSrLee/ej1rCCc3zDVTR4xFfN9BRAapGVl7/8hYqbbiQPTkv73kUg=="],
|
|
138
138
|
|
|
139
|
-
"@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.0-beta.
|
|
139
|
+
"@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.0-beta.57", "", { "os": "linux", "cpu": "x64" }, "sha512-++EQDpk/UJ33kY/BNsh7A7/P1sr/jbMuQ8cE554ZIy+tCUWCivo9zfyjDUoiMdnxqX6HLJEqqGnbGQOvzm2OMQ=="],
|
|
140
140
|
|
|
141
|
-
"@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.0-beta.
|
|
141
|
+
"@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.0-beta.57", "", { "os": "none", "cpu": "arm64" }, "sha512-voDEBcNqxbUv/GeXKFtxXVWA+H45P/8Dec4Ii/SbyJyGvCqV1j+nNHfnFUIiRQ2Q40DwPe/djvgYBs9PpETiMA=="],
|
|
142
142
|
|
|
143
|
-
"@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.0-beta.
|
|
143
|
+
"@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.0-beta.57", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.1.0" }, "cpu": "none" }, "sha512-bRhcF7NLlCnpkzLVlVhrDEd0KH22VbTPkPTbMjlYvqhSmarxNIq5vtlQS8qmV7LkPKHrNLWyJW/V/sOyFba26Q=="],
|
|
144
144
|
|
|
145
|
-
"@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.0-beta.
|
|
145
|
+
"@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.0-beta.57", "", { "os": "win32", "cpu": "arm64" }, "sha512-rnDVGRks2FQ2hgJ2g15pHtfxqkGFGjJQUDWzYznEkE8Ra2+Vag9OffxdbJMZqBWXHVM0iS4dv8qSiEn7bO+n1Q=="],
|
|
146
146
|
|
|
147
|
-
"@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.0-beta.
|
|
147
|
+
"@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.0-beta.57", "", { "os": "win32", "cpu": "x64" }, "sha512-OqIUyNid1M4xTj6VRXp/Lht/qIP8fo25QyAZlCP+p6D2ATCEhyW4ZIFLnC9zAGN/HMbXoCzvwfa8Jjg/8J4YEg=="],
|
|
148
148
|
|
|
149
|
-
"@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.
|
|
149
|
+
"@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.57", "", {}, "sha512-aQNelgx14tGA+n2tNSa9x6/jeoCL9fkDeCei7nOKnHx0fEFRRMu5ReiITo+zZD5TzWDGGRjbSYCs93IfRIyTuQ=="],
|
|
150
150
|
|
|
151
151
|
"@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.54.0", "", { "os": "android", "cpu": "arm" }, "sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng=="],
|
|
152
152
|
|
|
@@ -192,27 +192,33 @@
|
|
|
192
192
|
|
|
193
193
|
"@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.54.0", "", { "os": "win32", "cpu": "x64" }, "sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg=="],
|
|
194
194
|
|
|
195
|
+
"@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="],
|
|
196
|
+
|
|
195
197
|
"@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="],
|
|
196
198
|
|
|
199
|
+
"@types/chai": ["@types/chai@5.2.3", "", { "dependencies": { "@types/deep-eql": "*", "assertion-error": "^2.0.1" } }, "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA=="],
|
|
200
|
+
|
|
201
|
+
"@types/deep-eql": ["@types/deep-eql@4.0.2", "", {}, "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw=="],
|
|
202
|
+
|
|
197
203
|
"@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="],
|
|
198
204
|
|
|
199
|
-
"@types/node": ["@types/node@
|
|
205
|
+
"@types/node": ["@types/node@25.0.3", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA=="],
|
|
200
206
|
|
|
201
207
|
"@types/prompts": ["@types/prompts@2.4.9", "", { "dependencies": { "@types/node": "*", "kleur": "^3.0.3" } }, "sha512-qTxFi6Buiu8+50/+3DGIWLHM6QuWsEKugJnnP6iv2Mc4ncxE4A/OJkjuVOA+5X0X1S/nq5VJRa8Lu+nwcvbrKA=="],
|
|
202
208
|
|
|
203
|
-
"@vitest/expect": ["@vitest/expect@
|
|
209
|
+
"@vitest/expect": ["@vitest/expect@4.0.16", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.0.16", "@vitest/utils": "4.0.16", "chai": "^6.2.1", "tinyrainbow": "^3.0.3" } }, "sha512-eshqULT2It7McaJkQGLkPjPjNph+uevROGuIMJdG3V+0BSR2w9u6J9Lwu+E8cK5TETlfou8GRijhafIMhXsimA=="],
|
|
204
210
|
|
|
205
|
-
"@vitest/mocker": ["@vitest/mocker@
|
|
211
|
+
"@vitest/mocker": ["@vitest/mocker@4.0.16", "", { "dependencies": { "@vitest/spy": "4.0.16", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-yb6k4AZxJTB+q9ycAvsoxGn+j/po0UaPgajllBgt1PzoMAAmJGYFdDk0uCcRcxb3BrME34I6u8gHZTQlkqSZpg=="],
|
|
206
212
|
|
|
207
|
-
"@vitest/pretty-format": ["@vitest/pretty-format@
|
|
213
|
+
"@vitest/pretty-format": ["@vitest/pretty-format@4.0.16", "", { "dependencies": { "tinyrainbow": "^3.0.3" } }, "sha512-eNCYNsSty9xJKi/UdVD8Ou16alu7AYiS2fCPRs0b1OdhJiV89buAXQLpTbe+X8V9L6qrs9CqyvU7OaAopJYPsA=="],
|
|
208
214
|
|
|
209
|
-
"@vitest/runner": ["@vitest/runner@
|
|
215
|
+
"@vitest/runner": ["@vitest/runner@4.0.16", "", { "dependencies": { "@vitest/utils": "4.0.16", "pathe": "^2.0.3" } }, "sha512-VWEDm5Wv9xEo80ctjORcTQRJ539EGPB3Pb9ApvVRAY1U/WkHXmmYISqU5E79uCwcW7xYUV38gwZD+RV755fu3Q=="],
|
|
210
216
|
|
|
211
|
-
"@vitest/snapshot": ["@vitest/snapshot@
|
|
217
|
+
"@vitest/snapshot": ["@vitest/snapshot@4.0.16", "", { "dependencies": { "@vitest/pretty-format": "4.0.16", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-sf6NcrYhYBsSYefxnry+DR8n3UV4xWZwWxYbCJUt2YdvtqzSPR7VfGrY0zsv090DAbjFZsi7ZaMi1KnSRyK1XA=="],
|
|
212
218
|
|
|
213
|
-
"@vitest/spy": ["@vitest/spy@
|
|
219
|
+
"@vitest/spy": ["@vitest/spy@4.0.16", "", {}, "sha512-4jIOWjKP0ZUaEmJm00E0cOBLU+5WE0BpeNr3XN6TEF05ltro6NJqHWxXD0kA8/Zc8Nh23AT8WQxwNG+WeROupw=="],
|
|
214
220
|
|
|
215
|
-
"@vitest/utils": ["@vitest/utils@
|
|
221
|
+
"@vitest/utils": ["@vitest/utils@4.0.16", "", { "dependencies": { "@vitest/pretty-format": "4.0.16", "tinyrainbow": "^3.0.3" } }, "sha512-h8z9yYhV3e1LEfaQ3zdypIrnAg/9hguReGZoS7Gl0aBG5xgA410zBqECqmaF/+RkTggRsfnzc1XaAHA6bmUufA=="],
|
|
216
222
|
|
|
217
223
|
"ansis": ["ansis@4.2.0", "", {}, "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig=="],
|
|
218
224
|
|
|
@@ -224,15 +230,9 @@
|
|
|
224
230
|
|
|
225
231
|
"cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="],
|
|
226
232
|
|
|
227
|
-
"chai": ["chai@
|
|
228
|
-
|
|
229
|
-
"check-error": ["check-error@2.1.1", "", {}, "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw=="],
|
|
230
|
-
|
|
231
|
-
"commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="],
|
|
233
|
+
"chai": ["chai@6.2.2", "", {}, "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg=="],
|
|
232
234
|
|
|
233
|
-
"
|
|
234
|
-
|
|
235
|
-
"deep-eql": ["deep-eql@5.0.2", "", {}, "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q=="],
|
|
235
|
+
"commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="],
|
|
236
236
|
|
|
237
237
|
"defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="],
|
|
238
238
|
|
|
@@ -262,19 +262,13 @@
|
|
|
262
262
|
|
|
263
263
|
"kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="],
|
|
264
264
|
|
|
265
|
-
"loupe": ["loupe@3.2.1", "", {}, "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ=="],
|
|
266
|
-
|
|
267
265
|
"magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="],
|
|
268
266
|
|
|
269
|
-
"ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
|
|
270
|
-
|
|
271
267
|
"nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="],
|
|
272
268
|
|
|
273
269
|
"obug": ["obug@2.1.1", "", {}, "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ=="],
|
|
274
270
|
|
|
275
|
-
"pathe": ["pathe@
|
|
276
|
-
|
|
277
|
-
"pathval": ["pathval@2.0.1", "", {}, "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ=="],
|
|
271
|
+
"pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="],
|
|
278
272
|
|
|
279
273
|
"picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
|
|
280
274
|
|
|
@@ -288,7 +282,7 @@
|
|
|
288
282
|
|
|
289
283
|
"resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="],
|
|
290
284
|
|
|
291
|
-
"rolldown": ["rolldown@1.0.0-beta.
|
|
285
|
+
"rolldown": ["rolldown@1.0.0-beta.57", "", { "dependencies": { "@oxc-project/types": "=0.103.0", "@rolldown/pluginutils": "1.0.0-beta.57" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.0-beta.57", "@rolldown/binding-darwin-arm64": "1.0.0-beta.57", "@rolldown/binding-darwin-x64": "1.0.0-beta.57", "@rolldown/binding-freebsd-x64": "1.0.0-beta.57", "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-beta.57", "@rolldown/binding-linux-arm64-gnu": "1.0.0-beta.57", "@rolldown/binding-linux-arm64-musl": "1.0.0-beta.57", "@rolldown/binding-linux-x64-gnu": "1.0.0-beta.57", "@rolldown/binding-linux-x64-musl": "1.0.0-beta.57", "@rolldown/binding-openharmony-arm64": "1.0.0-beta.57", "@rolldown/binding-wasm32-wasi": "1.0.0-beta.57", "@rolldown/binding-win32-arm64-msvc": "1.0.0-beta.57", "@rolldown/binding-win32-x64-msvc": "1.0.0-beta.57" }, "bin": { "rolldown": "bin/cli.mjs" } }, "sha512-lMMxcNN71GMsSko8RyeTaFoATHkCh4IWU7pYF73ziMYjhHZWfVesC6GQ+iaJCvZmVjvgSks9Ks1aaqEkBd8udg=="],
|
|
292
286
|
|
|
293
287
|
"rolldown-plugin-dts": ["rolldown-plugin-dts@0.20.0", "", { "dependencies": { "@babel/generator": "^7.28.5", "@babel/parser": "^7.28.5", "@babel/types": "^7.28.5", "ast-kit": "^2.2.0", "birpc": "^4.0.0", "dts-resolver": "^2.1.3", "get-tsconfig": "^4.13.0", "obug": "^2.1.1" }, "peerDependencies": { "@ts-macro/tsc": "^0.3.6", "@typescript/native-preview": ">=7.0.0-dev.20250601.1", "rolldown": "^1.0.0-beta.57", "typescript": "^5.0.0", "vue-tsc": "~3.2.0" }, "optionalPeers": ["@ts-macro/tsc", "@typescript/native-preview", "typescript", "vue-tsc"] }, "sha512-cLAY1kN2ilTYMfZcFlGWbXnu6Nb+8uwUBsi+Mjbh4uIx7IN8uMOmJ7RxrrRgPsO4H7eSz3E+JwGoL1gyugiyUA=="],
|
|
294
288
|
|
|
@@ -312,15 +306,11 @@
|
|
|
312
306
|
|
|
313
307
|
"tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="],
|
|
314
308
|
|
|
315
|
-
"
|
|
316
|
-
|
|
317
|
-
"tinyrainbow": ["tinyrainbow@1.2.0", "", {}, "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ=="],
|
|
318
|
-
|
|
319
|
-
"tinyspy": ["tinyspy@3.0.2", "", {}, "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q=="],
|
|
309
|
+
"tinyrainbow": ["tinyrainbow@3.0.3", "", {}, "sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q=="],
|
|
320
310
|
|
|
321
311
|
"tree-kill": ["tree-kill@1.2.2", "", { "bin": { "tree-kill": "cli.js" } }, "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="],
|
|
322
312
|
|
|
323
|
-
"tsdown": ["tsdown@0.
|
|
313
|
+
"tsdown": ["tsdown@0.18.4", "", { "dependencies": { "ansis": "^4.2.0", "cac": "^6.7.14", "defu": "^6.1.4", "empathic": "^2.0.0", "hookable": "^6.0.1", "import-without-cache": "^0.2.5", "obug": "^2.1.1", "picomatch": "^4.0.3", "rolldown": "1.0.0-beta.57", "rolldown-plugin-dts": "^0.20.0", "semver": "^7.7.3", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tree-kill": "^1.2.2", "unconfig-core": "^7.4.2", "unrun": "^0.2.21" }, "peerDependencies": { "@arethetypeswrong/core": "^0.18.1", "@vitejs/devtools": "*", "publint": "^0.3.0", "typescript": "^5.0.0", "unplugin-lightningcss": "^0.4.0", "unplugin-unused": "^0.5.0" }, "optionalPeers": ["@arethetypeswrong/core", "@vitejs/devtools", "publint", "typescript", "unplugin-lightningcss", "unplugin-unused"], "bin": { "tsdown": "dist/run.mjs" } }, "sha512-J/tRS6hsZTkvqmt4+xdELUCkQYDuUCXgBv0fw3ImV09WPGbEKfsPD65E+WUjSu3E7Z6tji9XZ1iWs8rbGqB/ZA=="],
|
|
324
314
|
|
|
325
315
|
"tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
|
|
326
316
|
|
|
@@ -330,68 +320,50 @@
|
|
|
330
320
|
|
|
331
321
|
"unconfig-core": ["unconfig-core@7.4.2", "", { "dependencies": { "@quansync/fs": "^1.0.0", "quansync": "^1.0.0" } }, "sha512-VgPCvLWugINbXvMQDf8Jh0mlbvNjNC6eSUziHsBCMpxR05OPrNrvDnyatdMjRgcHaaNsCqz+wjNXxNw1kRLHUg=="],
|
|
332
322
|
|
|
333
|
-
"undici-types": ["undici-types@
|
|
323
|
+
"undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="],
|
|
334
324
|
|
|
335
325
|
"unrun": ["unrun@0.2.22", "", { "dependencies": { "rolldown": "1.0.0-beta.58" }, "peerDependencies": { "synckit": "^0.11.11" }, "optionalPeers": ["synckit"], "bin": { "unrun": "dist/cli.mjs" } }, "sha512-vlQce4gTLNyCZxGylEQXGG+fSrrEFWiM/L8aghtp+t6j8xXh+lmsBtQJknG7ZSvv7P+/MRgbQtHWHBWk981uTg=="],
|
|
336
326
|
|
|
337
|
-
"vite": ["vite@
|
|
338
|
-
|
|
339
|
-
"vite-node": ["vite-node@2.1.9", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.3.7", "es-module-lexer": "^1.5.4", "pathe": "^1.1.2", "vite": "^5.0.0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA=="],
|
|
327
|
+
"vite": ["vite@7.3.0", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg=="],
|
|
340
328
|
|
|
341
|
-
"vitest": ["vitest@
|
|
329
|
+
"vitest": ["vitest@4.0.16", "", { "dependencies": { "@vitest/expect": "4.0.16", "@vitest/mocker": "4.0.16", "@vitest/pretty-format": "4.0.16", "@vitest/runner": "4.0.16", "@vitest/snapshot": "4.0.16", "@vitest/spy": "4.0.16", "@vitest/utils": "4.0.16", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^3.10.0", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.0.3", "vite": "^6.0.0 || ^7.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.0.16", "@vitest/browser-preview": "4.0.16", "@vitest/browser-webdriverio": "4.0.16", "@vitest/ui": "4.0.16", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-E4t7DJ9pESL6E3I8nFjPa4xGUd3PmiWDLsDztS2qXSJWfHtbQnwAWylaBvSNY48I3vr8PTqIZlyK8TE3V3CA4Q=="],
|
|
342
330
|
|
|
343
331
|
"why-is-node-running": ["why-is-node-running@2.3.0", "", { "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" }, "bin": { "why-is-node-running": "cli.js" } }, "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w=="],
|
|
344
332
|
|
|
345
|
-
"
|
|
346
|
-
|
|
347
|
-
"vite/esbuild": ["esbuild@0.21.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.21.5", "@esbuild/android-arm": "0.21.5", "@esbuild/android-arm64": "0.21.5", "@esbuild/android-x64": "0.21.5", "@esbuild/darwin-arm64": "0.21.5", "@esbuild/darwin-x64": "0.21.5", "@esbuild/freebsd-arm64": "0.21.5", "@esbuild/freebsd-x64": "0.21.5", "@esbuild/linux-arm": "0.21.5", "@esbuild/linux-arm64": "0.21.5", "@esbuild/linux-ia32": "0.21.5", "@esbuild/linux-loong64": "0.21.5", "@esbuild/linux-mips64el": "0.21.5", "@esbuild/linux-ppc64": "0.21.5", "@esbuild/linux-riscv64": "0.21.5", "@esbuild/linux-s390x": "0.21.5", "@esbuild/linux-x64": "0.21.5", "@esbuild/netbsd-x64": "0.21.5", "@esbuild/openbsd-x64": "0.21.5", "@esbuild/sunos-x64": "0.21.5", "@esbuild/win32-arm64": "0.21.5", "@esbuild/win32-ia32": "0.21.5", "@esbuild/win32-x64": "0.21.5" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw=="],
|
|
348
|
-
|
|
349
|
-
"vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="],
|
|
350
|
-
|
|
351
|
-
"vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.21.5", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ=="],
|
|
352
|
-
|
|
353
|
-
"vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.21.5", "", { "os": "android", "cpu": "arm" }, "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg=="],
|
|
354
|
-
|
|
355
|
-
"vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.21.5", "", { "os": "android", "cpu": "arm64" }, "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A=="],
|
|
356
|
-
|
|
357
|
-
"vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.21.5", "", { "os": "android", "cpu": "x64" }, "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA=="],
|
|
358
|
-
|
|
359
|
-
"vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.21.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ=="],
|
|
360
|
-
|
|
361
|
-
"vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.21.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw=="],
|
|
333
|
+
"@types/prompts/@types/node": ["@types/node@20.19.27", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug=="],
|
|
362
334
|
|
|
363
|
-
"
|
|
335
|
+
"unrun/rolldown": ["rolldown@1.0.0-beta.58", "", { "dependencies": { "@oxc-project/types": "=0.106.0", "@rolldown/pluginutils": "1.0.0-beta.58" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.0-beta.58", "@rolldown/binding-darwin-arm64": "1.0.0-beta.58", "@rolldown/binding-darwin-x64": "1.0.0-beta.58", "@rolldown/binding-freebsd-x64": "1.0.0-beta.58", "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-beta.58", "@rolldown/binding-linux-arm64-gnu": "1.0.0-beta.58", "@rolldown/binding-linux-arm64-musl": "1.0.0-beta.58", "@rolldown/binding-linux-x64-gnu": "1.0.0-beta.58", "@rolldown/binding-linux-x64-musl": "1.0.0-beta.58", "@rolldown/binding-openharmony-arm64": "1.0.0-beta.58", "@rolldown/binding-wasm32-wasi": "1.0.0-beta.58", "@rolldown/binding-win32-arm64-msvc": "1.0.0-beta.58", "@rolldown/binding-win32-x64-msvc": "1.0.0-beta.58" }, "bin": { "rolldown": "bin/cli.mjs" } }, "sha512-v1FCjMZCan7f+xGAHBi+mqiE4MlH7I+SXEHSQSJoMOGNNB2UYtvMiejsq9YuUOiZjNeUeV/a21nSFbrUR+4ZCQ=="],
|
|
364
336
|
|
|
365
|
-
"
|
|
337
|
+
"@types/prompts/@types/node/undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="],
|
|
366
338
|
|
|
367
|
-
"
|
|
339
|
+
"unrun/rolldown/@oxc-project/types": ["@oxc-project/types@0.106.0", "", {}, "sha512-QdsH3rZq480VnOHSHgPYOhjL8O8LBdcnSjM408BpPCCUc0JYYZPG9Gafl9i3OcGk/7137o+gweb4cCv3WAUykg=="],
|
|
368
340
|
|
|
369
|
-
"
|
|
341
|
+
"unrun/rolldown/@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.0-beta.58", "", { "os": "android", "cpu": "arm64" }, "sha512-mWj5eE4Qc8TbPdGGaaLvBb9XfDPvE1EmZkJQgiGKwchkWH4oAJcRAKMTw7ZHnb1L+t7Ah41sBkAecaIsuUgsug=="],
|
|
370
342
|
|
|
371
|
-
"
|
|
343
|
+
"unrun/rolldown/@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.0-beta.58", "", { "os": "darwin", "cpu": "arm64" }, "sha512-wFxUymI/5R8bH8qZFYDfAxAN9CyISEIYke+95oZPiv6EWo88aa5rskjVcCpKA532R+klFmdqjbbaD56GNmTF4Q=="],
|
|
372
344
|
|
|
373
|
-
"
|
|
345
|
+
"unrun/rolldown/@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.0-beta.58", "", { "os": "darwin", "cpu": "x64" }, "sha512-ybp3MkPj23VDV9PhtRwdU5qrGhlViWRV5BjKwO6epaSlUD5lW0WyY+roN3ZAzbma/9RrMTgZ/a/gtQq8YXOcqw=="],
|
|
374
346
|
|
|
375
|
-
"
|
|
347
|
+
"unrun/rolldown/@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.0-beta.58", "", { "os": "freebsd", "cpu": "x64" }, "sha512-Evxj3yh7FWvyklUYZa0qTVT9N2zX9TPDqGF056hl8hlCZ9/ndQ2xMv6uw9PD1VlLpukbsqL+/C6M0qwipL0QMg=="],
|
|
376
348
|
|
|
377
|
-
"
|
|
349
|
+
"unrun/rolldown/@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.58", "", { "os": "linux", "cpu": "arm" }, "sha512-tYeXprDOrEgVHUbPXH6MPso4cM/c6RTkmJNICMQlYdki4hGMh92aj3yU6CKs+4X5gfG0yj5kVUw/L4M685SYag=="],
|
|
378
350
|
|
|
379
|
-
"
|
|
351
|
+
"unrun/rolldown/@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.0-beta.58", "", { "os": "linux", "cpu": "arm64" }, "sha512-N78vmZzP6zG967Ohr+MasCjmKtis0geZ1SOVmxrA0/bklTQSzH5kHEjW5Qn+i1taFno6GEre1E40v0wuWsNOQw=="],
|
|
380
352
|
|
|
381
|
-
"
|
|
353
|
+
"unrun/rolldown/@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.0-beta.58", "", { "os": "linux", "cpu": "arm64" }, "sha512-l+p4QVtG72C7wI2SIkNQw/KQtSjuYwS3rV6AKcWrRBF62ClsFUcif5vLaZIEbPrCXu5OFRXigXFJnxYsVVZqdQ=="],
|
|
382
354
|
|
|
383
|
-
"
|
|
355
|
+
"unrun/rolldown/@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.0-beta.58", "", { "os": "linux", "cpu": "x64" }, "sha512-urzJX0HrXxIh0FfxwWRjfPCMeInU9qsImLQxHBgLp5ivji1EEUnOfux8KxPPnRQthJyneBrN2LeqUix9DYrNaQ=="],
|
|
384
356
|
|
|
385
|
-
"
|
|
357
|
+
"unrun/rolldown/@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.0-beta.58", "", { "os": "linux", "cpu": "x64" }, "sha512-7ijfVK3GISnXIwq/1FZo+KyAUJjL3kWPJ7rViAL6MWeEBhEgRzJ0yEd9I8N9aut8Y8ab+EKFJyRNMWZuUBwQ0A=="],
|
|
386
358
|
|
|
387
|
-
"
|
|
359
|
+
"unrun/rolldown/@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.0-beta.58", "", { "os": "none", "cpu": "arm64" }, "sha512-/m7sKZCS+cUULbzyJTIlv8JbjNohxbpAOA6cM+lgWgqVzPee3U6jpwydrib328JFN/gF9A99IZEnuGYqEDJdww=="],
|
|
388
360
|
|
|
389
|
-
"
|
|
361
|
+
"unrun/rolldown/@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.0-beta.58", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.1.1" }, "cpu": "none" }, "sha512-6SZk7zMgv+y3wFFQ9qE5P9NnRHcRsptL1ypmudD26PDY+PvFCvfHRkJNfclWnvacVGxjowr7JOL3a9fd1wWhUw=="],
|
|
390
362
|
|
|
391
|
-
"
|
|
363
|
+
"unrun/rolldown/@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.0-beta.58", "", { "os": "win32", "cpu": "arm64" }, "sha512-sFqfYPnBZ6xBhMkadB7UD0yjEDRvs7ipR3nCggblN+N4ODCXY6qhg/bKL39+W+dgQybL7ErD4EGERVbW9DAWvg=="],
|
|
392
364
|
|
|
393
|
-
"
|
|
365
|
+
"unrun/rolldown/@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.0-beta.58", "", { "os": "win32", "cpu": "x64" }, "sha512-AnFWJdAqB8+IDPcGrATYs67Kik/6tnndNJV2jGRmwlbeNiQQ8GhRJU8ETRlINfII0pqi9k4WWLnb00p1QCxw/Q=="],
|
|
394
366
|
|
|
395
|
-
"
|
|
367
|
+
"unrun/rolldown/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.58", "", {}, "sha512-qWhDs6yFGR5xDfdrwiSa3CWGIHxD597uGE/A9xGqytBjANvh4rLCTTkq7szhMV4+Ygh+PMS90KVJ8xWG/TkX4w=="],
|
|
396
368
|
}
|
|
397
369
|
}
|
package/dist/bin.mjs
CHANGED
|
@@ -232,7 +232,6 @@ const readConfig = () => ({
|
|
|
232
232
|
...defaultConfig(),
|
|
233
233
|
...readJsonFile(getConfigPath()) ?? {}
|
|
234
234
|
});
|
|
235
|
-
const writeConfig = (cfg) => writeJsonFile(getConfigPath(), cfg);
|
|
236
235
|
const readAuth = () => ({
|
|
237
236
|
...defaultAuthState(),
|
|
238
237
|
...readJsonFile(getAuthPath()) ?? {}
|
|
@@ -945,8 +944,7 @@ const registerCodexCommand = (program) => {
|
|
|
945
944
|
const apiKey = (await consumerService.GetConsumer({ id: selected.id }))?.apiKey ?? "";
|
|
946
945
|
if (!apiKey) throw new Error("API key not found. Please create one or choose another.");
|
|
947
946
|
const reasoningValue = mapReasoningValue(reasoningId);
|
|
948
|
-
const keyName = selected.name
|
|
949
|
-
const keyId = selected.id ?? "-";
|
|
947
|
+
const keyName = selected.name?.trim() || "(unnamed)";
|
|
950
948
|
if (!(await prompts({
|
|
951
949
|
type: "confirm",
|
|
952
950
|
name: "confirm",
|
|
@@ -955,7 +953,7 @@ const registerCodexCommand = (program) => {
|
|
|
955
953
|
`Model: ${model}`,
|
|
956
954
|
`Reasoning: ${formatReasoningLabel(reasoningId)} (${reasoningValue})`,
|
|
957
955
|
"Provider: getrouter",
|
|
958
|
-
`Key: ${keyName}
|
|
956
|
+
`Key: ${keyName}`
|
|
959
957
|
].join("\n"),
|
|
960
958
|
initial: true
|
|
961
959
|
})).confirm) return;
|
|
@@ -975,44 +973,6 @@ const registerCodexCommand = (program) => {
|
|
|
975
973
|
});
|
|
976
974
|
};
|
|
977
975
|
|
|
978
|
-
//#endregion
|
|
979
|
-
//#region src/cmd/config-helpers.ts
|
|
980
|
-
const normalizeApiBase = (value) => value.trim().replace(/\/+$/, "");
|
|
981
|
-
const parseConfigValue = (key, raw) => {
|
|
982
|
-
if (key === "apiBase") {
|
|
983
|
-
const normalized = normalizeApiBase(raw);
|
|
984
|
-
if (!/^https?:\/\//.test(normalized)) throw new Error("apiBase must start with http:// or https://");
|
|
985
|
-
return normalized;
|
|
986
|
-
}
|
|
987
|
-
const lowered = raw.toLowerCase();
|
|
988
|
-
if (["true", "1"].includes(lowered)) return true;
|
|
989
|
-
if (["false", "0"].includes(lowered)) return false;
|
|
990
|
-
throw new Error("json must be true/false or 1/0");
|
|
991
|
-
};
|
|
992
|
-
|
|
993
|
-
//#endregion
|
|
994
|
-
//#region src/cmd/config.ts
|
|
995
|
-
const VALID_KEYS = new Set(["apiBase", "json"]);
|
|
996
|
-
const registerConfigCommands = (program) => {
|
|
997
|
-
program.command("config").description("Manage CLI config").argument("[key]").argument("[value]").action((key, value) => {
|
|
998
|
-
const cfg = readConfig();
|
|
999
|
-
if (!key) {
|
|
1000
|
-
console.log(`apiBase=${cfg.apiBase}`);
|
|
1001
|
-
console.log(`json=${cfg.json}`);
|
|
1002
|
-
return;
|
|
1003
|
-
}
|
|
1004
|
-
if (!value) throw new Error("Missing config value");
|
|
1005
|
-
if (!VALID_KEYS.has(key)) throw new Error("Unknown config key");
|
|
1006
|
-
const parsed = parseConfigValue(key, value);
|
|
1007
|
-
const next = {
|
|
1008
|
-
...cfg,
|
|
1009
|
-
[key]: parsed
|
|
1010
|
-
};
|
|
1011
|
-
writeConfig(next);
|
|
1012
|
-
console.log(`${key}=${next[key]}`);
|
|
1013
|
-
});
|
|
1014
|
-
};
|
|
1015
|
-
|
|
1016
976
|
//#endregion
|
|
1017
977
|
//#region src/core/config/redact.ts
|
|
1018
978
|
const SECRET_KEYS = new Set([
|
|
@@ -1398,7 +1358,6 @@ const registerCommands = (program) => {
|
|
|
1398
1358
|
registerAuthCommands(program);
|
|
1399
1359
|
registerCodexCommand(program);
|
|
1400
1360
|
registerClaudeCommand(program);
|
|
1401
|
-
registerConfigCommands(program);
|
|
1402
1361
|
registerKeysCommands(program);
|
|
1403
1362
|
registerModelsCommands(program);
|
|
1404
1363
|
registerStatusCommand(program);
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Remove Config Command Design
|
|
2
|
+
|
|
3
|
+
## Goals
|
|
4
|
+
- Remove the `getrouter config` command and its subcommand behavior from the CLI.
|
|
5
|
+
- Keep config file usage via `~/.getrouter/config.json` for runtime reads/writes.
|
|
6
|
+
- Update tests and docs to reflect removal.
|
|
7
|
+
|
|
8
|
+
## Non-Goals
|
|
9
|
+
- Do not change config file format or core config read/write logic.
|
|
10
|
+
- Do not add new CLI alternatives for config editing.
|
|
11
|
+
|
|
12
|
+
## Scope
|
|
13
|
+
- Delete `src/cmd/config.ts` and `src/cmd/config-helpers.ts`.
|
|
14
|
+
- Remove `registerConfigCommands` from command registration.
|
|
15
|
+
- Remove/replace tests for config commands and config helpers.
|
|
16
|
+
- Update CLI entrypoint file list test to match remaining commands.
|
|
17
|
+
- Update README docs to remove `getrouter config` references.
|
|
18
|
+
|
|
19
|
+
## Behavior Changes
|
|
20
|
+
- `getrouter config` should no longer be a recognized command.
|
|
21
|
+
- Users should edit `~/.getrouter/config.json` directly to change configuration.
|
|
22
|
+
|
|
23
|
+
## Testing Plan
|
|
24
|
+
- Add a test that asserts `getrouter config` is rejected by the CLI.
|
|
25
|
+
- Remove tests that exercise config subcommands or config helper parsing.
|
|
26
|
+
- Ensure remaining test suite passes unchanged.
|
|
27
|
+
|
|
28
|
+
## Files
|
|
29
|
+
- Remove: `src/cmd/config.ts`, `src/cmd/config-helpers.ts`
|
|
30
|
+
- Modify: `src/cmd/index.ts`, `tests/cli.test.ts`
|
|
31
|
+
- Add/Modify tests: `tests/cli.test.ts` (new assertion), delete `tests/cmd/config*.test.ts`
|
|
32
|
+
- Docs: `README.md`, `README.zh-cn.md`, `README.ja.md`
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# Remove Config Command Implementation Plan
|
|
2
|
+
|
|
3
|
+
> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
|
|
4
|
+
|
|
5
|
+
**Goal:** Remove the `getrouter config` CLI command and keep configuration changes handled via `~/.getrouter/config.json`.
|
|
6
|
+
|
|
7
|
+
**Architecture:** Delete config command entrypoints and helper parsing, update CLI registration and tests, and remove documentation references.
|
|
8
|
+
|
|
9
|
+
**Tech Stack:** TypeScript, Commander.js, Vitest.
|
|
10
|
+
|
|
11
|
+
### Task 1: Add failing tests for config command removal
|
|
12
|
+
|
|
13
|
+
**Files:**
|
|
14
|
+
- Modify: `tests/cli.test.ts`
|
|
15
|
+
|
|
16
|
+
**Step 1: Write the failing test**
|
|
17
|
+
|
|
18
|
+
```ts
|
|
19
|
+
it("rejects removed config command", async () => {
|
|
20
|
+
const program = createProgram();
|
|
21
|
+
program.exitOverride();
|
|
22
|
+
await expect(
|
|
23
|
+
program.parseAsync(["node", "getrouter", "config"]),
|
|
24
|
+
).rejects.toBeTruthy();
|
|
25
|
+
});
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**Step 2: Run test to verify it fails**
|
|
29
|
+
|
|
30
|
+
Run: `bun run test -- tests/cli.test.ts`
|
|
31
|
+
Expected: FAIL (config command still registered).
|
|
32
|
+
|
|
33
|
+
**Step 3: Commit**
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
git add tests/cli.test.ts
|
|
37
|
+
git commit -m "test: remove config command"
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Task 2: Remove config command implementation and helpers
|
|
41
|
+
|
|
42
|
+
**Files:**
|
|
43
|
+
- Delete: `src/cmd/config.ts`
|
|
44
|
+
- Delete: `src/cmd/config-helpers.ts`
|
|
45
|
+
- Modify: `src/cmd/index.ts`
|
|
46
|
+
- Modify: `tests/cli.test.ts`
|
|
47
|
+
|
|
48
|
+
**Step 1: Remove command registration**
|
|
49
|
+
|
|
50
|
+
- Delete import and registration of `registerConfigCommands`.
|
|
51
|
+
- Update the CLI file list test to remove `config.ts` and `config-helpers.ts`.
|
|
52
|
+
|
|
53
|
+
**Step 2: Run tests to verify they pass**
|
|
54
|
+
|
|
55
|
+
Run: `bun run test -- tests/cli.test.ts`
|
|
56
|
+
Expected: PASS
|
|
57
|
+
|
|
58
|
+
**Step 3: Commit**
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
git add src/cmd/index.ts tests/cli.test.ts
|
|
62
|
+
git rm src/cmd/config.ts src/cmd/config-helpers.ts
|
|
63
|
+
git commit -m "feat: remove config command"
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Task 3: Remove config tests
|
|
67
|
+
|
|
68
|
+
**Files:**
|
|
69
|
+
- Delete: `tests/cmd/config.test.ts`
|
|
70
|
+
- Delete: `tests/cmd/config-helpers.test.ts`
|
|
71
|
+
|
|
72
|
+
**Step 1: Remove tests**
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
git rm tests/cmd/config.test.ts tests/cmd/config-helpers.test.ts
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Step 2: Run test to verify it passes**
|
|
79
|
+
|
|
80
|
+
Run: `bun run test -- tests/cmd/config.test.ts`
|
|
81
|
+
Expected: FAIL (file removed) and overall suite should pass after full test run.
|
|
82
|
+
|
|
83
|
+
**Step 3: Commit**
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
git add -A
|
|
87
|
+
git commit -m "test: remove config command coverage"
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Task 4: Update documentation
|
|
91
|
+
|
|
92
|
+
**Files:**
|
|
93
|
+
- Modify: `README.md`
|
|
94
|
+
- Modify: `README.zh-cn.md`
|
|
95
|
+
- Modify: `README.ja.md`
|
|
96
|
+
|
|
97
|
+
**Step 1: Remove config command references**
|
|
98
|
+
|
|
99
|
+
- Remove any `getrouter config` examples.
|
|
100
|
+
- Add a short note that config is edited in `~/.getrouter/config.json`.
|
|
101
|
+
|
|
102
|
+
**Step 2: Commit**
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
git add README.md README.zh-cn.md README.ja.md
|
|
106
|
+
git commit -m "docs: remove config command"
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Task 5: Full verification
|
|
110
|
+
|
|
111
|
+
**Step 1: Run tests**
|
|
112
|
+
|
|
113
|
+
Run: `bun run test`
|
|
114
|
+
Expected: PASS
|
|
115
|
+
|
|
116
|
+
**Step 2: Run typecheck**
|
|
117
|
+
|
|
118
|
+
Run: `bun run typecheck`
|
|
119
|
+
Expected: PASS
|
|
120
|
+
|
|
121
|
+
**Step 3: Run lint**
|
|
122
|
+
|
|
123
|
+
Run: `bun run lint`
|
|
124
|
+
Expected: PASS
|
|
125
|
+
|
|
126
|
+
**Step 4: Run format**
|
|
127
|
+
|
|
128
|
+
Run: `bun run format`
|
|
129
|
+
Expected: PASS
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getrouter/getrouter-cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "CLI for getrouter.dev",
|
|
6
6
|
"bin": {
|
|
@@ -22,16 +22,16 @@
|
|
|
22
22
|
},
|
|
23
23
|
"packageManager": "bun@1.3.5",
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"commander": "^
|
|
25
|
+
"commander": "^14.0.2",
|
|
26
26
|
"prompts": "^2.4.2"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@biomejs/biome": "^2.3.10",
|
|
30
|
-
"@types/node": "^
|
|
30
|
+
"@types/node": "^25.0.3",
|
|
31
31
|
"@types/prompts": "^2.4.9",
|
|
32
|
-
"tsdown": "^0.
|
|
32
|
+
"tsdown": "^0.18.4",
|
|
33
33
|
"tsx": "^4.19.2",
|
|
34
34
|
"typescript": "^5.7.3",
|
|
35
|
-
"vitest": "^
|
|
35
|
+
"vitest": "^4.0.16"
|
|
36
36
|
}
|
|
37
37
|
}
|
package/src/cmd/index.ts
CHANGED
|
@@ -2,7 +2,6 @@ import type { Command } from "commander";
|
|
|
2
2
|
import { registerAuthCommands } from "./auth";
|
|
3
3
|
import { registerClaudeCommand } from "./claude";
|
|
4
4
|
import { registerCodexCommand } from "./codex";
|
|
5
|
-
import { registerConfigCommands } from "./config";
|
|
6
5
|
import { registerKeysCommands } from "./keys";
|
|
7
6
|
import { registerModelsCommands } from "./models";
|
|
8
7
|
import { registerStatusCommand } from "./status";
|
|
@@ -12,7 +11,6 @@ export const registerCommands = (program: Command) => {
|
|
|
12
11
|
registerAuthCommands(program);
|
|
13
12
|
registerCodexCommand(program);
|
|
14
13
|
registerClaudeCommand(program);
|
|
15
|
-
registerConfigCommands(program);
|
|
16
14
|
registerKeysCommands(program);
|
|
17
15
|
registerModelsCommands(program);
|
|
18
16
|
registerStatusCommand(program);
|
package/tests/cli.test.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { readdirSync } from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import { describe, expect, it } from "vitest";
|
|
3
|
+
import { describe, expect, it, vi } from "vitest";
|
|
4
4
|
import { createProgram } from "../src/cli";
|
|
5
5
|
|
|
6
6
|
describe("getrouter cli", () => {
|
|
@@ -10,6 +10,25 @@ describe("getrouter cli", () => {
|
|
|
10
10
|
expect(program.helpInformation()).toContain("getrouter");
|
|
11
11
|
});
|
|
12
12
|
|
|
13
|
+
it("rejects removed config command", async () => {
|
|
14
|
+
const writeErr = vi
|
|
15
|
+
.spyOn(process.stderr, "write")
|
|
16
|
+
.mockImplementation(() => true);
|
|
17
|
+
const program = createProgram();
|
|
18
|
+
program.exitOverride();
|
|
19
|
+
program.configureOutput({
|
|
20
|
+
writeErr: () => {},
|
|
21
|
+
});
|
|
22
|
+
try {
|
|
23
|
+
await expect(
|
|
24
|
+
program.parseAsync(["node", "getrouter", "config"]),
|
|
25
|
+
).rejects.toBeTruthy();
|
|
26
|
+
expect(writeErr).not.toHaveBeenCalled();
|
|
27
|
+
} finally {
|
|
28
|
+
writeErr.mockRestore();
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
|
|
13
32
|
it("only ships registered command entrypoints", () => {
|
|
14
33
|
const cmdDir = path.join(process.cwd(), "src", "cmd");
|
|
15
34
|
const files = readdirSync(cmdDir).filter((file) => file.endsWith(".ts"));
|
|
@@ -17,8 +36,6 @@ describe("getrouter cli", () => {
|
|
|
17
36
|
"auth.ts",
|
|
18
37
|
"claude.ts",
|
|
19
38
|
"codex.ts",
|
|
20
|
-
"config-helpers.ts",
|
|
21
|
-
"config.ts",
|
|
22
39
|
"env.ts",
|
|
23
40
|
"index.ts",
|
|
24
41
|
"keys.ts",
|
package/tests/cmd/keys.test.ts
CHANGED
|
@@ -81,9 +81,20 @@ describe("keys command", () => {
|
|
|
81
81
|
setStdinTTY(false);
|
|
82
82
|
const program = createProgram();
|
|
83
83
|
program.exitOverride();
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
84
|
+
const writeErr = vi
|
|
85
|
+
.spyOn(process.stderr, "write")
|
|
86
|
+
.mockImplementation(() => true);
|
|
87
|
+
program.configureOutput({
|
|
88
|
+
writeErr: () => {},
|
|
89
|
+
});
|
|
90
|
+
try {
|
|
91
|
+
await expect(
|
|
92
|
+
program.parseAsync(["node", "getrouter", "keys", "get", "c1"]),
|
|
93
|
+
).rejects.toBeTruthy();
|
|
94
|
+
expect(writeErr).not.toHaveBeenCalled();
|
|
95
|
+
} finally {
|
|
96
|
+
writeErr.mockRestore();
|
|
97
|
+
}
|
|
87
98
|
});
|
|
88
99
|
|
|
89
100
|
it("creates a key and prints reminder", async () => {
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export const normalizeApiBase = (value: string) =>
|
|
2
|
-
value.trim().replace(/\/+$/, "");
|
|
3
|
-
|
|
4
|
-
export const parseConfigValue = (key: "apiBase" | "json", raw: string) => {
|
|
5
|
-
if (key === "apiBase") {
|
|
6
|
-
const normalized = normalizeApiBase(raw);
|
|
7
|
-
if (!/^https?:\/\//.test(normalized)) {
|
|
8
|
-
throw new Error("apiBase must start with http:// or https://");
|
|
9
|
-
}
|
|
10
|
-
return normalized;
|
|
11
|
-
}
|
|
12
|
-
const lowered = raw.toLowerCase();
|
|
13
|
-
if (["true", "1"].includes(lowered)) return true;
|
|
14
|
-
if (["false", "0"].includes(lowered)) return false;
|
|
15
|
-
throw new Error("json must be true/false or 1/0");
|
|
16
|
-
};
|
package/src/cmd/config.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import type { Command } from "commander";
|
|
2
|
-
import { readConfig, writeConfig } from "../core/config";
|
|
3
|
-
import { parseConfigValue } from "./config-helpers";
|
|
4
|
-
|
|
5
|
-
const VALID_KEYS = new Set(["apiBase", "json"]);
|
|
6
|
-
|
|
7
|
-
export const registerConfigCommands = (program: Command) => {
|
|
8
|
-
program
|
|
9
|
-
.command("config")
|
|
10
|
-
.description("Manage CLI config")
|
|
11
|
-
.argument("[key]")
|
|
12
|
-
.argument("[value]")
|
|
13
|
-
.action((key: string | undefined, value: string | undefined) => {
|
|
14
|
-
const cfg = readConfig();
|
|
15
|
-
if (!key) {
|
|
16
|
-
console.log(`apiBase=${cfg.apiBase}`);
|
|
17
|
-
console.log(`json=${cfg.json}`);
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
if (!value) {
|
|
21
|
-
throw new Error("Missing config value");
|
|
22
|
-
}
|
|
23
|
-
if (!VALID_KEYS.has(key)) {
|
|
24
|
-
throw new Error("Unknown config key");
|
|
25
|
-
}
|
|
26
|
-
const parsed = parseConfigValue(key as "apiBase" | "json", value);
|
|
27
|
-
const next = { ...cfg, [key]: parsed };
|
|
28
|
-
writeConfig(next);
|
|
29
|
-
console.log(`${key}=${(next as Record<string, unknown>)[key]}`);
|
|
30
|
-
});
|
|
31
|
-
};
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import {
|
|
3
|
-
normalizeApiBase,
|
|
4
|
-
parseConfigValue,
|
|
5
|
-
} from "../../src/cmd/config-helpers";
|
|
6
|
-
|
|
7
|
-
describe("config helpers", () => {
|
|
8
|
-
it("normalizes apiBase", () => {
|
|
9
|
-
expect(normalizeApiBase("https://getrouter.dev/")).toBe(
|
|
10
|
-
"https://getrouter.dev",
|
|
11
|
-
);
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
it("parses json values", () => {
|
|
15
|
-
expect(parseConfigValue("json", "true")).toBe(true);
|
|
16
|
-
expect(parseConfigValue("json", "0")).toBe(false);
|
|
17
|
-
});
|
|
18
|
-
});
|
package/tests/cmd/config.test.ts
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import fs from "node:fs";
|
|
2
|
-
import os from "node:os";
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
5
|
-
import { createProgram } from "../../src/cli";
|
|
6
|
-
import { parseConfigValue } from "../../src/cmd/config-helpers";
|
|
7
|
-
|
|
8
|
-
const makeDir = () => fs.mkdtempSync(path.join(os.tmpdir(), "getrouter-"));
|
|
9
|
-
const originalConfigDir = process.env.GETROUTER_CONFIG_DIR;
|
|
10
|
-
|
|
11
|
-
afterEach(() => {
|
|
12
|
-
if (originalConfigDir == null) {
|
|
13
|
-
delete process.env.GETROUTER_CONFIG_DIR;
|
|
14
|
-
} else {
|
|
15
|
-
process.env.GETROUTER_CONFIG_DIR = originalConfigDir;
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
describe("config command", () => {
|
|
20
|
-
it("prints full config when no args", async () => {
|
|
21
|
-
process.env.GETROUTER_CONFIG_DIR = makeDir();
|
|
22
|
-
const log = vi.spyOn(console, "log").mockImplementation(() => {});
|
|
23
|
-
const program = createProgram();
|
|
24
|
-
await program.parseAsync(["node", "getrouter", "config"]);
|
|
25
|
-
const output = log.mock.calls.map((c) => c[0]).join("\n");
|
|
26
|
-
expect(output).toContain("apiBase=");
|
|
27
|
-
expect(output).toContain("json=");
|
|
28
|
-
log.mockRestore();
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
it("sets config key and prints value", async () => {
|
|
32
|
-
process.env.GETROUTER_CONFIG_DIR = makeDir();
|
|
33
|
-
const log = vi.spyOn(console, "log").mockImplementation(() => {});
|
|
34
|
-
const program = createProgram();
|
|
35
|
-
await program.parseAsync([
|
|
36
|
-
"node",
|
|
37
|
-
"getrouter",
|
|
38
|
-
"config",
|
|
39
|
-
"apiBase",
|
|
40
|
-
"https://getrouter.dev",
|
|
41
|
-
]);
|
|
42
|
-
const output = log.mock.calls.map((c) => c[0]).join("\n");
|
|
43
|
-
expect(output).toContain("apiBase=https://getrouter.dev");
|
|
44
|
-
log.mockRestore();
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
describe("config validation", () => {
|
|
49
|
-
it("rejects invalid json value", () => {
|
|
50
|
-
expect(() => parseConfigValue("json", "nope")).toThrow();
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
it("rejects invalid apiBase", () => {
|
|
54
|
-
expect(() => parseConfigValue("apiBase", "ftp://bad")).toThrow();
|
|
55
|
-
});
|
|
56
|
-
});
|