@mrmtsu/mcms-cli 0.1.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/LICENSE +21 -0
- package/README.ja.md +184 -0
- package/README.md +185 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +143 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/api.d.ts +2 -0
- package/dist/commands/api.js +27 -0
- package/dist/commands/api.js.map +1 -0
- package/dist/commands/auth.d.ts +2 -0
- package/dist/commands/auth.js +238 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/completion.d.ts +2 -0
- package/dist/commands/completion.js +390 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/config.d.ts +2 -0
- package/dist/commands/config.js +63 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/content.d.ts +2 -0
- package/dist/commands/content.js +191 -0
- package/dist/commands/content.js.map +1 -0
- package/dist/commands/media.d.ts +2 -0
- package/dist/commands/media.js +47 -0
- package/dist/commands/media.js.map +1 -0
- package/dist/commands/schema.d.ts +2 -0
- package/dist/commands/schema.js +71 -0
- package/dist/commands/schema.js.map +1 -0
- package/dist/commands/types.d.ts +2 -0
- package/dist/commands/types.js +85 -0
- package/dist/commands/types.js.map +1 -0
- package/dist/commands/utils.d.ts +8 -0
- package/dist/commands/utils.js +56 -0
- package/dist/commands/utils.js.map +1 -0
- package/dist/commands/validate.d.ts +2 -0
- package/dist/commands/validate.js +38 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/core/auth-store.d.ts +11 -0
- package/dist/core/auth-store.js +83 -0
- package/dist/core/auth-store.js.map +1 -0
- package/dist/core/client.d.ts +33 -0
- package/dist/core/client.js +416 -0
- package/dist/core/client.js.map +1 -0
- package/dist/core/config.d.ts +11 -0
- package/dist/core/config.js +73 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/context.d.ts +39 -0
- package/dist/core/context.js +382 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/errors.d.ts +26 -0
- package/dist/core/errors.js +167 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/exit-codes.d.ts +10 -0
- package/dist/core/exit-codes.js +10 -0
- package/dist/core/exit-codes.js.map +1 -0
- package/dist/core/http.d.ts +24 -0
- package/dist/core/http.js +237 -0
- package/dist/core/http.js.map +1 -0
- package/dist/core/io.d.ts +2 -0
- package/dist/core/io.js +39 -0
- package/dist/core/io.js.map +1 -0
- package/dist/core/output.d.ts +4 -0
- package/dist/core/output.js +182 -0
- package/dist/core/output.js.map +1 -0
- package/dist/core/schema.d.ts +23 -0
- package/dist/core/schema.js +319 -0
- package/dist/core/schema.js.map +1 -0
- package/dist/validation/payload.d.ts +6 -0
- package/dist/validation/payload.js +204 -0
- package/dist/validation/payload.js.map +1 -0
- package/package.json +39 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Yusuke
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.ja.md
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# mcms-cli
|
|
2
|
+
|
|
3
|
+
[English](./README.md) | 日本語
|
|
4
|
+
|
|
5
|
+
> 非公式プロジェクトです。このCLIは microCMS 公式とは無関係であり、承認・運営されていません。
|
|
6
|
+
|
|
7
|
+
`--json` の安定出力と終了コード設計を備えた、microCMS向けの AI/CI フレンドリー CLI です。
|
|
8
|
+
|
|
9
|
+
## 命名の整理
|
|
10
|
+
|
|
11
|
+
- GitHub リポジトリ名: `mcms-cli`
|
|
12
|
+
- npm パッケージ名: `@mrmtsu/mcms-cli`
|
|
13
|
+
- 実際に実行するコマンド名: `microcms`
|
|
14
|
+
- ローカル保存時の識別子(configディレクトリ / keychain service): `mcms-cli`
|
|
15
|
+
|
|
16
|
+
`microcms` を実行コマンド名にしているのは可読性のためです。
|
|
17
|
+
非公式であることは README 先頭に明記しています。
|
|
18
|
+
|
|
19
|
+
## インストール
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm i -g @mrmtsu/mcms-cli
|
|
23
|
+
# or
|
|
24
|
+
npx @mrmtsu/mcms-cli --help
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## 認証
|
|
28
|
+
|
|
29
|
+
現状は API キー認証のみです(OAuth は未対応)。
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# CI / 非対話実行の推奨:
|
|
33
|
+
export MICROCMS_SERVICE_DOMAIN=<service>
|
|
34
|
+
export MICROCMS_API_KEY=<key>
|
|
35
|
+
|
|
36
|
+
# 任意: named profile
|
|
37
|
+
microcms auth profile add work --service-domain <service> --set-default
|
|
38
|
+
microcms auth profile list --json
|
|
39
|
+
|
|
40
|
+
# キーチェーン保存:
|
|
41
|
+
printf '%s' '<key>' | microcms auth login --service-domain <service> --api-key-stdin
|
|
42
|
+
# TTY 対話入力(非表示):
|
|
43
|
+
microcms auth login --service-domain <service> --prompt
|
|
44
|
+
microcms auth status --json
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
API キー解決順:
|
|
48
|
+
1. `--api-key` / `--api-key-stdin`
|
|
49
|
+
2. `MICROCMS_API_KEY`
|
|
50
|
+
3. 選択中 profile の OS キーチェーン
|
|
51
|
+
4. 解決済み service domain の OS キーチェーンエントリ
|
|
52
|
+
|
|
53
|
+
service domain 解決順:
|
|
54
|
+
1. `--service-domain`
|
|
55
|
+
2. `MICROCMS_SERVICE_DOMAIN`
|
|
56
|
+
3. config の選択 profile(`--profile`, `MICROCMS_PROFILE`, default profile)
|
|
57
|
+
4. config ファイル値(`$XDG_CONFIG_HOME/mcms-cli/config.json`)
|
|
58
|
+
|
|
59
|
+
## コマンド
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
microcms api list --json
|
|
63
|
+
microcms api info <endpoint> --json
|
|
64
|
+
|
|
65
|
+
microcms content list <endpoint> --json
|
|
66
|
+
microcms content list <endpoint> --all --json
|
|
67
|
+
microcms content get <endpoint> <id> --json
|
|
68
|
+
microcms content create <endpoint> --file payload.json --json
|
|
69
|
+
microcms content create <endpoint> --file payload.json --dry-run --json
|
|
70
|
+
microcms content update <endpoint> <id> --file payload.json --json
|
|
71
|
+
microcms content delete <endpoint> <id> --json
|
|
72
|
+
|
|
73
|
+
microcms media upload <path> --json
|
|
74
|
+
microcms media upload <path> --dry-run --json
|
|
75
|
+
microcms validate <endpoint> --file payload.json --json
|
|
76
|
+
|
|
77
|
+
microcms schema pull --out microcms-schema.json --json
|
|
78
|
+
microcms types generate --schema microcms-schema.json --out microcms-types.d.ts --json
|
|
79
|
+
|
|
80
|
+
microcms config doctor --json
|
|
81
|
+
microcms completion install zsh --json
|
|
82
|
+
microcms completion uninstall --json
|
|
83
|
+
|
|
84
|
+
microcms auth profile list --json
|
|
85
|
+
microcms auth profile add <name> --service-domain <service> [--set-default] --json
|
|
86
|
+
microcms auth profile use <name> --json
|
|
87
|
+
microcms auth profile remove <name> --json
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
`validate` は API メタデータが取得できる場合、required/unknown/type/enum 相当チェックを行います。
|
|
91
|
+
|
|
92
|
+
## グローバルオプション
|
|
93
|
+
|
|
94
|
+
- `--json`
|
|
95
|
+
- `--plain`
|
|
96
|
+
- `--table`
|
|
97
|
+
- `--select <fields>`
|
|
98
|
+
- `--profile <name>`
|
|
99
|
+
- `--service-domain <serviceDomain>`
|
|
100
|
+
- `--api-key <apiKey>`(非推奨: シェル履歴/プロセス一覧に露出しうる)
|
|
101
|
+
- `--api-key-stdin`
|
|
102
|
+
- `--timeout <ms>`
|
|
103
|
+
- `--retry <count>`
|
|
104
|
+
- `--retry-max-delay <ms>`
|
|
105
|
+
- `--verbose`
|
|
106
|
+
- `--no-color`
|
|
107
|
+
|
|
108
|
+
補完では `microcms completion endpoints` を使って endpoint 候補を動的取得します。
|
|
109
|
+
`--retry` はデフォルトで retry-safe なリクエスト(GET)に適用されます。
|
|
110
|
+
|
|
111
|
+
## JSON 契約 (v0)
|
|
112
|
+
|
|
113
|
+
Success:
|
|
114
|
+
|
|
115
|
+
```json
|
|
116
|
+
{
|
|
117
|
+
"ok": true,
|
|
118
|
+
"data": {},
|
|
119
|
+
"meta": {
|
|
120
|
+
"requestId": null,
|
|
121
|
+
"version": "0.x"
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Error:
|
|
127
|
+
|
|
128
|
+
```json
|
|
129
|
+
{
|
|
130
|
+
"ok": false,
|
|
131
|
+
"error": {
|
|
132
|
+
"code": "AUTH_FAILED",
|
|
133
|
+
"message": "...",
|
|
134
|
+
"retryable": false
|
|
135
|
+
},
|
|
136
|
+
"meta": {
|
|
137
|
+
"requestId": null,
|
|
138
|
+
"version": "0.x"
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
`error.details` は `--verbose` 指定時のみ含まれます。
|
|
144
|
+
|
|
145
|
+
## 終了コード
|
|
146
|
+
|
|
147
|
+
- `0`: success
|
|
148
|
+
- `2`: invalid input
|
|
149
|
+
- `3`: auth error
|
|
150
|
+
- `4`: permission error
|
|
151
|
+
- `5`: network/timeout
|
|
152
|
+
- `6`: conflict
|
|
153
|
+
- `1`: unknown error
|
|
154
|
+
|
|
155
|
+
## 開発
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
npm install
|
|
159
|
+
npm run test
|
|
160
|
+
npm run build
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## 補足
|
|
164
|
+
|
|
165
|
+
- `api list/info` と `media upload` は microCMS Management API を利用します。
|
|
166
|
+
- Management API base URL のデフォルト: `https://<serviceDomain>.microcms-management.io`
|
|
167
|
+
- `MICROCMS_MANAGEMENT_API_BASE_URL` で上書き可能です。
|
|
168
|
+
- Content API base URL: `https://<serviceDomain>.microcms.io`
|
|
169
|
+
- `MICROCMS_CONTENT_API_BASE_URL` で上書き可能です(主にテスト用途)。
|
|
170
|
+
- ネットワーク不要の contract テストでは `MICROCMS_CONTENT_MOCK_FILE` を使えます。
|
|
171
|
+
- `MICROCMS_*_BASE_URL` の override 先は localhost または microcms ドメインのみ許可します。
|
|
172
|
+
|
|
173
|
+
## 免責事項
|
|
174
|
+
|
|
175
|
+
- 本プロジェクトは非公式のコミュニティ製ツールであり、microCMS 公式とは無関係です。
|
|
176
|
+
- 本ソフトウェアは MIT License の下で「現状有姿(as is)」で提供され、いかなる保証もありません。
|
|
177
|
+
- 本番利用前に、必ずご自身の環境で検証し、必要なバックアップを取得してください。
|
|
178
|
+
- API キーの管理および本CLIで実行した操作の責任は利用者にあります。
|
|
179
|
+
|
|
180
|
+
## OSS ドキュメント
|
|
181
|
+
|
|
182
|
+
- [Contributing](./CONTRIBUTING.md)
|
|
183
|
+
- [Security](./SECURITY.md)
|
|
184
|
+
- [Changelog](./CHANGELOG.md)
|
package/README.md
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
# mcms-cli
|
|
2
|
+
|
|
3
|
+
English | [日本語](./README.ja.md)
|
|
4
|
+
|
|
5
|
+
> Unofficial project. This CLI is not affiliated with, endorsed by, or maintained by microCMS.
|
|
6
|
+
|
|
7
|
+
AI/CI friendly CLI for microCMS with stable `--json` output and deterministic exit codes.
|
|
8
|
+
|
|
9
|
+
## Naming
|
|
10
|
+
|
|
11
|
+
- GitHub repository name: `mcms-cli`
|
|
12
|
+
- npm package name: `@mrmtsu/mcms-cli`
|
|
13
|
+
- command you run: `microcms`
|
|
14
|
+
- local storage identifier (config dir / keychain service): `mcms-cli`
|
|
15
|
+
|
|
16
|
+
`microcms` as the command name is intentional for readability.
|
|
17
|
+
This project is unofficial, and that is explicitly stated in this README.
|
|
18
|
+
|
|
19
|
+
## Install
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm i -g @mrmtsu/mcms-cli
|
|
23
|
+
# or
|
|
24
|
+
npx @mrmtsu/mcms-cli --help
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Auth
|
|
28
|
+
|
|
29
|
+
This MVP uses API keys (not OAuth).
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# Recommended for CI/non-interactive:
|
|
33
|
+
export MICROCMS_SERVICE_DOMAIN=<service>
|
|
34
|
+
export MICROCMS_API_KEY=<key>
|
|
35
|
+
|
|
36
|
+
# Optional: use a named profile
|
|
37
|
+
microcms auth profile add work --service-domain <service> --set-default
|
|
38
|
+
microcms auth profile list --json
|
|
39
|
+
|
|
40
|
+
# Or store key in keychain:
|
|
41
|
+
printf '%s' '<key>' | microcms auth login --service-domain <service> --api-key-stdin
|
|
42
|
+
# Interactive TTY prompt (hidden input):
|
|
43
|
+
microcms auth login --service-domain <service> --prompt
|
|
44
|
+
microcms auth status --json
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Resolution order for API key:
|
|
48
|
+
1. `--api-key` / `--api-key-stdin`
|
|
49
|
+
2. `MICROCMS_API_KEY`
|
|
50
|
+
3. OS keychain for selected profile (if available)
|
|
51
|
+
4. OS keychain entry for resolved service domain
|
|
52
|
+
|
|
53
|
+
Resolution order for service domain:
|
|
54
|
+
1. `--service-domain`
|
|
55
|
+
2. `MICROCMS_SERVICE_DOMAIN`
|
|
56
|
+
3. selected profile in config (`--profile`, `MICROCMS_PROFILE`, default profile)
|
|
57
|
+
4. config file value (`$XDG_CONFIG_HOME/mcms-cli/config.json`)
|
|
58
|
+
|
|
59
|
+
## Commands
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
microcms api list --json
|
|
63
|
+
microcms api info <endpoint> --json
|
|
64
|
+
|
|
65
|
+
microcms content list <endpoint> --json
|
|
66
|
+
microcms content list <endpoint> --all --json
|
|
67
|
+
microcms content get <endpoint> <id> --json
|
|
68
|
+
microcms content create <endpoint> --file payload.json --json
|
|
69
|
+
microcms content create <endpoint> --file payload.json --dry-run --json
|
|
70
|
+
microcms content update <endpoint> <id> --file payload.json --json
|
|
71
|
+
microcms content delete <endpoint> <id> --json
|
|
72
|
+
|
|
73
|
+
microcms media upload <path> --json
|
|
74
|
+
microcms media upload <path> --dry-run --json
|
|
75
|
+
microcms validate <endpoint> --file payload.json --json
|
|
76
|
+
|
|
77
|
+
microcms schema pull --out microcms-schema.json --json
|
|
78
|
+
microcms types generate --schema microcms-schema.json --out microcms-types.d.ts --json
|
|
79
|
+
|
|
80
|
+
microcms config doctor --json
|
|
81
|
+
microcms completion install zsh --json
|
|
82
|
+
microcms completion uninstall --json
|
|
83
|
+
|
|
84
|
+
microcms auth profile list --json
|
|
85
|
+
microcms auth profile add <name> --service-domain <service> [--set-default] --json
|
|
86
|
+
microcms auth profile use <name> --json
|
|
87
|
+
microcms auth profile remove <name> --json
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
`validate` is schema-aware when API metadata is available (required/unknown/type/enum-like checks).
|
|
91
|
+
|
|
92
|
+
Global options:
|
|
93
|
+
|
|
94
|
+
- `--json`
|
|
95
|
+
- `--plain`
|
|
96
|
+
- `--table`
|
|
97
|
+
- `--select <fields>`
|
|
98
|
+
- `--profile <name>`
|
|
99
|
+
- `--service-domain <serviceDomain>`
|
|
100
|
+
- `--api-key <apiKey>` (less secure)
|
|
101
|
+
- `--api-key-stdin`
|
|
102
|
+
- `--timeout <ms>`
|
|
103
|
+
- `--retry <count>`
|
|
104
|
+
- `--retry-max-delay <ms>`
|
|
105
|
+
- `--verbose`
|
|
106
|
+
- `--no-color`
|
|
107
|
+
|
|
108
|
+
Completion scripts use dynamic endpoint suggestions via `microcms completion endpoints` (internal helper).
|
|
109
|
+
`--retry` is applied to retry-safe requests (GET) by default.
|
|
110
|
+
|
|
111
|
+
## JSON contract (v0)
|
|
112
|
+
|
|
113
|
+
Success:
|
|
114
|
+
|
|
115
|
+
```json
|
|
116
|
+
{
|
|
117
|
+
"ok": true,
|
|
118
|
+
"data": {},
|
|
119
|
+
"meta": {
|
|
120
|
+
"requestId": null,
|
|
121
|
+
"version": "0.x"
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Error:
|
|
127
|
+
|
|
128
|
+
```json
|
|
129
|
+
{
|
|
130
|
+
"ok": false,
|
|
131
|
+
"error": {
|
|
132
|
+
"code": "AUTH_FAILED",
|
|
133
|
+
"message": "...",
|
|
134
|
+
"retryable": false
|
|
135
|
+
},
|
|
136
|
+
"meta": {
|
|
137
|
+
"requestId": null,
|
|
138
|
+
"version": "0.x"
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
`error.details` is included only when `--verbose` is enabled.
|
|
144
|
+
|
|
145
|
+
## Exit codes
|
|
146
|
+
|
|
147
|
+
- `0`: success
|
|
148
|
+
- `2`: invalid input
|
|
149
|
+
- `3`: auth error
|
|
150
|
+
- `4`: permission error
|
|
151
|
+
- `5`: network/timeout
|
|
152
|
+
- `6`: conflict
|
|
153
|
+
- `1`: unknown error
|
|
154
|
+
|
|
155
|
+
## Development
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
npm install
|
|
159
|
+
npm run test
|
|
160
|
+
npm run build
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Notes
|
|
164
|
+
|
|
165
|
+
- `api list/info` and `media upload` use microCMS Management API.
|
|
166
|
+
- Default management API base URL is `https://<serviceDomain>.microcms-management.io`.
|
|
167
|
+
- You can override with `MICROCMS_MANAGEMENT_API_BASE_URL`.
|
|
168
|
+
- Content API base URL is `https://<serviceDomain>.microcms.io`.
|
|
169
|
+
- You can override content API base URL with `MICROCMS_CONTENT_API_BASE_URL` (primarily for tests).
|
|
170
|
+
- For contract tests without network, use `MICROCMS_CONTENT_MOCK_FILE` to run content CRUD against a local JSON fixture store.
|
|
171
|
+
- `MICROCMS_*_BASE_URL` overrides only allow localhost or microcms domains.
|
|
172
|
+
|
|
173
|
+
## Disclaimer
|
|
174
|
+
|
|
175
|
+
- This is an unofficial community project and is not affiliated with microCMS.
|
|
176
|
+
- The software is provided "as is" under the MIT License, without warranty.
|
|
177
|
+
- Validate behavior in your environment and take backups before production use.
|
|
178
|
+
- You are responsible for API key management and all operations executed with this CLI.
|
|
179
|
+
|
|
180
|
+
## OSS Docs
|
|
181
|
+
|
|
182
|
+
- [Contributing](./CONTRIBUTING.md)
|
|
183
|
+
- [Security](./SECURITY.md)
|
|
184
|
+
- [Changelog](./CHANGELOG.md)
|
|
185
|
+
# mcms-cli
|
package/dist/cli.d.ts
ADDED
package/dist/cli.js
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import { Command, CommanderError } from "commander";
|
|
4
|
+
import { registerApiCommands } from "./commands/api.js";
|
|
5
|
+
import { registerAuthCommands } from "./commands/auth.js";
|
|
6
|
+
import { registerCompletionCommands } from "./commands/completion.js";
|
|
7
|
+
import { registerConfigCommands } from "./commands/config.js";
|
|
8
|
+
import { registerContentCommands } from "./commands/content.js";
|
|
9
|
+
import { registerMediaCommands } from "./commands/media.js";
|
|
10
|
+
import { registerSchemaCommands } from "./commands/schema.js";
|
|
11
|
+
import { registerTypesCommands } from "./commands/types.js";
|
|
12
|
+
import { registerValidateCommand } from "./commands/validate.js";
|
|
13
|
+
import { CliError, normalizeError } from "./core/errors.js";
|
|
14
|
+
import { EXIT_CODE } from "./core/exit-codes.js";
|
|
15
|
+
import { printError } from "./core/output.js";
|
|
16
|
+
const VERSION = resolveVersion();
|
|
17
|
+
function resolveVersion() {
|
|
18
|
+
try {
|
|
19
|
+
const require = createRequire(import.meta.url);
|
|
20
|
+
const pkg = require("../package.json");
|
|
21
|
+
if (typeof pkg.version === "string" && pkg.version.length > 0) {
|
|
22
|
+
return pkg.version;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// fallback for non-standard runtime layouts
|
|
27
|
+
}
|
|
28
|
+
return "0.1.0";
|
|
29
|
+
}
|
|
30
|
+
async function main(argv) {
|
|
31
|
+
const isJsonMode = argv.includes("--json");
|
|
32
|
+
const program = new Command();
|
|
33
|
+
program
|
|
34
|
+
.name("microcms")
|
|
35
|
+
.description("AI/CI friendly microCMS CLI")
|
|
36
|
+
.version(VERSION)
|
|
37
|
+
.option("--json", "machine-readable JSON output")
|
|
38
|
+
.option("--plain", "human output mode (line-oriented)")
|
|
39
|
+
.option("--table", "human output mode (table)")
|
|
40
|
+
.option("--select <fields>", "comma-separated field names for --table output")
|
|
41
|
+
.option("--profile <name>", "profile name to resolve service domain / keychain key")
|
|
42
|
+
.option("--service-domain <serviceDomain>", "microCMS service domain")
|
|
43
|
+
.option("--api-key <apiKey>", "microCMS API key (less secure: may leak via shell history/process list)")
|
|
44
|
+
.option("--api-key-stdin", "read microCMS API key from stdin")
|
|
45
|
+
.option("--timeout <ms>", "request timeout in milliseconds", "10000")
|
|
46
|
+
.option("--retry <count>", "retry count for retryable failures (0-10)", "2")
|
|
47
|
+
.option("--retry-max-delay <ms>", "max retry delay in milliseconds (100-120000)", "3000")
|
|
48
|
+
.option("--verbose", "verbose error output")
|
|
49
|
+
.option("--no-color", "disable colorized output")
|
|
50
|
+
.showHelpAfterError();
|
|
51
|
+
program.configureOutput({
|
|
52
|
+
writeOut: (text) => {
|
|
53
|
+
if (!isJsonMode) {
|
|
54
|
+
process.stdout.write(text);
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
writeErr: (text) => {
|
|
58
|
+
if (!isJsonMode) {
|
|
59
|
+
process.stderr.write(text);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
registerAuthCommands(program);
|
|
64
|
+
registerApiCommands(program);
|
|
65
|
+
registerConfigCommands(program);
|
|
66
|
+
registerCompletionCommands(program);
|
|
67
|
+
registerContentCommands(program);
|
|
68
|
+
registerMediaCommands(program);
|
|
69
|
+
registerSchemaCommands(program);
|
|
70
|
+
registerTypesCommands(program);
|
|
71
|
+
registerValidateCommand(program);
|
|
72
|
+
program.exitOverride();
|
|
73
|
+
try {
|
|
74
|
+
await program.parseAsync(argv, { from: "user" });
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
if (error instanceof CommanderError && (error.code === "commander.helpDisplayed" || error.exitCode === 0)) {
|
|
78
|
+
process.exit(EXIT_CODE.SUCCESS);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const fallbackContext = createFallbackContext(argv);
|
|
82
|
+
const normalized = normalizeCommander(error) ?? normalizeError(error);
|
|
83
|
+
printError(fallbackContext, normalized);
|
|
84
|
+
process.exit(normalized.exitCode);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function createFallbackContext(argv) {
|
|
88
|
+
const json = argv.includes("--json");
|
|
89
|
+
const plain = argv.includes("--plain");
|
|
90
|
+
const table = argv.includes("--table");
|
|
91
|
+
const selectFields = parseSelectFieldsFromArgv(argv);
|
|
92
|
+
const outputMode = table ? "table" : plain ? "plain" : "inspect";
|
|
93
|
+
return {
|
|
94
|
+
json,
|
|
95
|
+
verbose: argv.includes("--verbose"),
|
|
96
|
+
color: !argv.includes("--no-color"),
|
|
97
|
+
timeoutMs: 10_000,
|
|
98
|
+
retry: 2,
|
|
99
|
+
retryMaxDelayMs: 3_000,
|
|
100
|
+
outputMode,
|
|
101
|
+
selectFields,
|
|
102
|
+
profile: undefined,
|
|
103
|
+
profileSource: "none",
|
|
104
|
+
serviceDomain: undefined,
|
|
105
|
+
serviceDomainSource: "none",
|
|
106
|
+
apiKey: undefined,
|
|
107
|
+
apiKeySource: "none",
|
|
108
|
+
apiKeySourceDetail: "none"
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
function parseSelectFieldsFromArgv(argv) {
|
|
112
|
+
const selectIndex = argv.indexOf("--select");
|
|
113
|
+
if (selectIndex === -1) {
|
|
114
|
+
return undefined;
|
|
115
|
+
}
|
|
116
|
+
const raw = argv.at(selectIndex + 1);
|
|
117
|
+
if (!raw || raw.startsWith("--")) {
|
|
118
|
+
return undefined;
|
|
119
|
+
}
|
|
120
|
+
const fields = raw
|
|
121
|
+
.split(",")
|
|
122
|
+
.map((field) => field.trim())
|
|
123
|
+
.filter((field) => field.length > 0);
|
|
124
|
+
return fields.length > 0 ? fields : undefined;
|
|
125
|
+
}
|
|
126
|
+
function normalizeCommander(error) {
|
|
127
|
+
if (!(error instanceof CommanderError)) {
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
if (error.exitCode === 0) {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
return new CliError({
|
|
134
|
+
code: "INVALID_INPUT",
|
|
135
|
+
message: error.message,
|
|
136
|
+
exitCode: EXIT_CODE.INVALID_INPUT,
|
|
137
|
+
details: {
|
|
138
|
+
commanderCode: error.code
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
void main(process.argv.slice(2));
|
|
143
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { getApiInfo, listApis } from "../core/client.js";
|
|
2
|
+
import { printSuccess } from "../core/output.js";
|
|
3
|
+
import { contextFromCommand, getActionCommand } from "./utils.js";
|
|
4
|
+
export function registerApiCommands(program) {
|
|
5
|
+
const api = program.command("api").description("Inspect APIs");
|
|
6
|
+
api
|
|
7
|
+
.command("list")
|
|
8
|
+
.description("List APIs")
|
|
9
|
+
.action(async (...actionArgs) => {
|
|
10
|
+
const command = getActionCommand(actionArgs);
|
|
11
|
+
const ctx = await contextFromCommand(command);
|
|
12
|
+
const result = await listApis(ctx);
|
|
13
|
+
printSuccess(ctx, result.data, result.requestId);
|
|
14
|
+
});
|
|
15
|
+
api
|
|
16
|
+
.command("info")
|
|
17
|
+
.argument("<endpoint>", "API endpoint")
|
|
18
|
+
.description("Show API details")
|
|
19
|
+
.action(async (...actionArgs) => {
|
|
20
|
+
const endpoint = actionArgs[0];
|
|
21
|
+
const command = getActionCommand(actionArgs);
|
|
22
|
+
const ctx = await contextFromCommand(command);
|
|
23
|
+
const result = await getApiInfo(ctx, endpoint);
|
|
24
|
+
printSuccess(ctx, result.data, result.requestId);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/commands/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAElE,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAE/D,GAAG;SACA,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,WAAW,CAAC;SACxB,MAAM,CAAC,KAAK,EAAE,GAAG,UAAqB,EAAE,EAAE;QACzC,MAAM,OAAO,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;QACnC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,MAAM,CAAC;SACf,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAC;SACtC,WAAW,CAAC,kBAAkB,CAAC;SAC/B,MAAM,CAAC,KAAK,EAAE,GAAG,UAAqB,EAAE,EAAE;QACzC,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAW,CAAC;QACzC,MAAM,OAAO,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC/C,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACP,CAAC"}
|