@bedrockkit/cli 1.0.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.en.md +122 -0
- package/README.md +123 -0
- package/dist/cli.js +118 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/build.js +154 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/bump.js +156 -0
- package/dist/commands/bump.js.map +1 -0
- package/dist/commands/config.js +29 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/deps.js +116 -0
- package/dist/commands/deps.js.map +1 -0
- package/dist/commands/import.js +328 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/index.js +84 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.js +445 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/package.js +143 -0
- package/dist/commands/package.js.map +1 -0
- package/dist/commands/setting.js +48 -0
- package/dist/commands/setting.js.map +1 -0
- package/dist/commands/sync.js +173 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/template.js +144 -0
- package/dist/commands/template.js.map +1 -0
- package/dist/commands/validate.js +180 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/watch.js +117 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/config.js +76 -0
- package/dist/config.js.map +1 -0
- package/dist/core/config.js +137 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/constants.js +47 -0
- package/dist/core/constants.js.map +1 -0
- package/dist/core/logger.js +10 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/manifest.js +147 -0
- package/dist/core/manifest.js.map +1 -0
- package/dist/core/scaffold.js +14 -0
- package/dist/core/scaffold.js.map +1 -0
- package/dist/core/script-api.js +111 -0
- package/dist/core/script-api.js.map +1 -0
- package/dist/core/templates.js +92 -0
- package/dist/core/templates.js.map +1 -0
- package/dist/help.js +35 -0
- package/dist/help.js.map +1 -0
- package/dist/manifest.js +155 -0
- package/dist/manifest.js.map +1 -0
- package/dist/templates.js +92 -0
- package/dist/templates.js.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/archive.js +27 -0
- package/dist/utils/archive.js.map +1 -0
- package/dist/utils/args.js +39 -0
- package/dist/utils/args.js.map +1 -0
- package/dist/utils/config-discovery.js +48 -0
- package/dist/utils/config-discovery.js.map +1 -0
- package/dist/utils/fs.js +29 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/i18n.js +356 -0
- package/dist/utils/i18n.js.map +1 -0
- package/dist/utils/ignore.js +36 -0
- package/dist/utils/ignore.js.map +1 -0
- package/dist/utils/js-to-ts.js +90 -0
- package/dist/utils/js-to-ts.js.map +1 -0
- package/dist/utils/npm-install.js +153 -0
- package/dist/utils/npm-install.js.map +1 -0
- package/dist/utils/npm.js +74 -0
- package/dist/utils/npm.js.map +1 -0
- package/dist/utils/settings.js +46 -0
- package/dist/utils/settings.js.map +1 -0
- package/dist/utils/tooling.js +158 -0
- package/dist/utils/tooling.js.map +1 -0
- package/dist/utils/ui.js +61 -0
- package/dist/utils/ui.js.map +1 -0
- package/dist/utils/version.js +23 -0
- package/dist/utils/version.js.map +1 -0
- package/package.json +59 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 kaaariyaaa
|
|
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.en.md
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# BedrockKit
|
|
2
|
+
|
|
3
|
+
A CLI tool for all-in-one Minecraft Bedrock Edition addon/resource pack development. Manage initialization, dependency management, building, packaging, and syncing to your development environment with the `bkit` command.
|
|
4
|
+
|
|
5
|
+
[日本語版はこちら (Japanese version is here)](./README.md)
|
|
6
|
+
|
|
7
|
+
## Requirements
|
|
8
|
+
- **Node.js**: 20 or higher
|
|
9
|
+
- **npm / git**: Used for template fetching and dependency installation
|
|
10
|
+
- **OS**: Compatible with Windows, macOS, and Linux. Appropriate permissions are required when syncing to game development folders.
|
|
11
|
+
|
|
12
|
+
## Installation
|
|
13
|
+
Install globally from GitHub:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm i -g @bedrockkit/cli
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
If you want to use a local clone:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
git clone https://github.com/kaaariyaaa/BedrockKit.git
|
|
23
|
+
cd BedrockKit
|
|
24
|
+
npm install
|
|
25
|
+
npm run build
|
|
26
|
+
npm install -g . # or "npm link" for local linking
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
For direct testing from source during development, you can run `src/cli.ts` using `npm run dev -- <command>`.
|
|
30
|
+
|
|
31
|
+
## Quick Start
|
|
32
|
+
```bash
|
|
33
|
+
# Interactively initialize a project (extracted under ./project/<name>)
|
|
34
|
+
bkit init
|
|
35
|
+
|
|
36
|
+
# Build and create outputs in dist/
|
|
37
|
+
bkit build
|
|
38
|
+
|
|
39
|
+
# Sync build outputs to development folder
|
|
40
|
+
bkit sync
|
|
41
|
+
|
|
42
|
+
# Create .mcpack/.mcaddon for distribution
|
|
43
|
+
bkit package
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Example Structure
|
|
47
|
+
The standard structure created by `bkit init` is as follows:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
project/<addon-name>/
|
|
51
|
+
├─ bkit.config.json # bkit configuration
|
|
52
|
+
├─ .bkitignore # Exclusion settings for build/sync
|
|
53
|
+
├─ packs/
|
|
54
|
+
│ ├─ behavior/ # Behavior Pack
|
|
55
|
+
│ │ ├─ manifest.json
|
|
56
|
+
│ │ └─ scripts/main.ts # Script entry (if selected)
|
|
57
|
+
│ └─ resource/ # Resource Pack
|
|
58
|
+
│ └─ manifest.json
|
|
59
|
+
└─ dist/ # Output destination for build/package
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Minimal example of `bkit.config.json`:
|
|
63
|
+
|
|
64
|
+
```json
|
|
65
|
+
{
|
|
66
|
+
"project": { "name": "example-addon", "version": "1.0.0" },
|
|
67
|
+
"template": "bkit-default",
|
|
68
|
+
"packSelection": { "behavior": true, "resource": true },
|
|
69
|
+
"packs": { "behavior": "packs/behavior", "resource": "packs/resource" },
|
|
70
|
+
"build": { "outDir": "dist", "target": "dev" },
|
|
71
|
+
"sync": {
|
|
72
|
+
"defaultTarget": "gdk",
|
|
73
|
+
"targets": { "gdk": { "product": "BedrockGDK", "projectName": "example-addon" } }
|
|
74
|
+
},
|
|
75
|
+
"paths": { "root": "." },
|
|
76
|
+
"script": {
|
|
77
|
+
"entry": "packs/behavior/scripts/main.ts",
|
|
78
|
+
"language": "typescript",
|
|
79
|
+
"dependencies": [{ "module_name": "@minecraft/server", "version": "1.11.0" }],
|
|
80
|
+
"apiVersion": "1.11.0"
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Main Commands
|
|
86
|
+
- `bkit init` (`new`) – Create a workspace from a template. You can interactively select Script API packages and versions. ESLint rules can be toggled interactively or via `--eslint-rules <csv>` / `--no-eslint` flags.
|
|
87
|
+
- `bkit import <mcpack|mcaddon|zip>` – Extract an existing archive and generate `bkit.config.json` for workspace conversion. JS to TS conversion is optional (`--convert-ts`). Automatic conversion is recommended only when necessary due to compatibility risks.
|
|
88
|
+
- `bkit build [--out-dir <dir>]` – Copy packs to `dist/`. If scripts are in TypeScript, they are bundled using `@minecraft/core-build-tasks`.
|
|
89
|
+
- `bkit package [--out <name>]` – Create `.mcpack` (both packs) or `.mcaddon` (if both exist) from the `dist/` folder.
|
|
90
|
+
- `bkit sync [--target <name>] [--build=false]` – Copy build outputs to locations defined in `config.sync.targets`. Specifying `product` allows deployment to Minecraft development environments.
|
|
91
|
+
- `bkit deps` – Install selected Script API dependencies via npm and sync `bkit.config.json` and `manifest.json`.
|
|
92
|
+
- `bkit bump [major|minor|patch] [--to <version>] [--min-engine <x.y.z>]` – Update project/manifest versions (optionally override min_engine_version).
|
|
93
|
+
- `bkit validate [--strict] [--json]` – Check consistency between config and manifest files.
|
|
94
|
+
- `bkit template <list|add|pull|rm>` – Manage the template registry (`.bkit/templates*.json`). Any repository can be registered as `custom-git`.
|
|
95
|
+
- `bkit watch` – Watch the project folder and automatically perform build and sync on changes.
|
|
96
|
+
- `bkit config [--path <file>] [--json]` – View and verify the loaded configuration.
|
|
97
|
+
- `npm run build:local` / `npm run package:local` – Each generated/imported project ships with `tools/local-build.mjs` and `tools/local-package.mjs`. You can build and create `.mcpack/.mcaddon` archives without the BedrockKit CLI.
|
|
98
|
+
|
|
99
|
+
## Sync Targets
|
|
100
|
+
- **Via core-build-tasks** (Deploy to dev Minecraft)
|
|
101
|
+
Specify product type in `sync.targets.<name>.product` (`BedrockUWP | PreviewUWP | BedrockGDK | PreviewGDK`). You can override the project folder name with `projectName`.
|
|
102
|
+
- **Path-based Copy**
|
|
103
|
+
Specify direct paths in `sync.targets.<name>.behavior` / `resource`. Use `bkit sync --dry-run` to check the operations without copying.
|
|
104
|
+
|
|
105
|
+
## Template Management
|
|
106
|
+
- `official-sample` is registered by default. Check via `bkit template list`.
|
|
107
|
+
- Register any Git repository with `bkit template add <name> <git-url>` and use it via `bkit init --template <name>`.
|
|
108
|
+
- Templates are cloned to `.bkit/templates/<name>`. Private repositories are supported (SSH keys can be specified via `BKIT_SSH_KEY`).
|
|
109
|
+
|
|
110
|
+
## Useful Options
|
|
111
|
+
- **--config <path>**: Specify the target project. If multiple projects exist, you can select one interactively.
|
|
112
|
+
- **--json**: Output in machine-readable JSON format.
|
|
113
|
+
- **-q | --quiet**: Suppress log output.
|
|
114
|
+
- **--lang <ja|en>**: Toggle display language (default is Japanese). Environment variable `BKIT_LANG` is also supported.
|
|
115
|
+
- **--build=false**: Common option to skip the pre-build step.
|
|
116
|
+
- **.bkitignore**: Patterns listed in `.bkitignore` are ignored during build and sync.
|
|
117
|
+
|
|
118
|
+
## Common Workflow
|
|
119
|
+
1. `bkit init`: Initialize a project.
|
|
120
|
+
2. `bkit build`: Build the project.
|
|
121
|
+
3. `bkit sync` or `bkit watch`: Sync to the development environment.
|
|
122
|
+
4. `bkit package`: Generate distribution archives.
|
package/README.md
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# BedrockKit
|
|
2
|
+
|
|
3
|
+
Minecraft Bedrock Edition 向けのアドオン/リソースパック開発を一括で回すための CLI です。初期化・依存管理・ビルド・配布パッケージ作成・開発環境への同期までを `bkit` コマンドで扱えます。
|
|
4
|
+
|
|
5
|
+
[English version is here](./README.en.md)
|
|
6
|
+
|
|
7
|
+
## 動作要件
|
|
8
|
+
- **Node.js**: 20 以上
|
|
9
|
+
- **npm / git**: テンプレート取得や依存インストールに使用
|
|
10
|
+
- **OS**: Windows / macOS / Linux いずれでも利用可能。Sync でゲームの開発用フォルダへコピーする際は、対象環境に合わせた権限が必要です。
|
|
11
|
+
|
|
12
|
+
## インストール
|
|
13
|
+
GitHub からグローバルにインストールできます。
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm i -g @bedrockkit/cli
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
リポジトリをクローンして使う場合は次のとおりです。
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
git clone https://github.com/kaaariyaaa/BedrockKit.git
|
|
23
|
+
cd BedrockKit
|
|
24
|
+
npm install
|
|
25
|
+
npm run build
|
|
26
|
+
npm install -g . # もしくは npm link でローカルリンク
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
開発中にソースから直接試す場合は `npm run dev -- <command>` で `src/cli.ts` を起動できます。
|
|
30
|
+
|
|
31
|
+
## クイックスタート
|
|
32
|
+
```bash
|
|
33
|
+
# プロジェクトを対話的に初期化(./project/<name> 以下に展開)
|
|
34
|
+
bkit init
|
|
35
|
+
|
|
36
|
+
# ビルドして dist/ に成果物を作成
|
|
37
|
+
bkit build
|
|
38
|
+
|
|
39
|
+
# ビルド成果物を開発用フォルダに同期
|
|
40
|
+
bkit sync
|
|
41
|
+
|
|
42
|
+
# 配布用 .mcpack/.mcaddon を作成
|
|
43
|
+
bkit package
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## 生成される構成例
|
|
47
|
+
`bkit init` で作られる標準構成は次のとおりです。
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
project/<addon-name>/
|
|
51
|
+
├─ bkit.config.json # bkit の設定
|
|
52
|
+
├─ .bkitignore # ビルド/コピー時の除外設定
|
|
53
|
+
├─ packs/
|
|
54
|
+
│ ├─ behavior/ # ビヘイビアパック
|
|
55
|
+
│ │ ├─ manifest.json
|
|
56
|
+
│ │ └─ scripts/main.ts # スクリプトエントリ(選択時)
|
|
57
|
+
│ └─ resource/ # リソースパック
|
|
58
|
+
│ └─ manifest.json
|
|
59
|
+
└─ dist/ # build/package の出力先
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
`bkit.config.json` の最小例:
|
|
63
|
+
|
|
64
|
+
```json
|
|
65
|
+
{
|
|
66
|
+
"project": { "name": "example-addon", "version": "1.0.0" },
|
|
67
|
+
"template": "bkit-default",
|
|
68
|
+
"packSelection": { "behavior": true, "resource": true },
|
|
69
|
+
"packs": { "behavior": "packs/behavior", "resource": "packs/resource" },
|
|
70
|
+
"build": { "outDir": "dist", "target": "dev" },
|
|
71
|
+
"sync": {
|
|
72
|
+
"defaultTarget": "gdk",
|
|
73
|
+
"targets": { "gdk": { "product": "BedrockGDK", "projectName": "example-addon" } }
|
|
74
|
+
},
|
|
75
|
+
"paths": { "root": "." },
|
|
76
|
+
"script": {
|
|
77
|
+
"entry": "packs/behavior/scripts/main.ts",
|
|
78
|
+
"language": "typescript",
|
|
79
|
+
"dependencies": [{ "module_name": "@minecraft/server", "version": "1.11.0" }],
|
|
80
|
+
"apiVersion": "1.11.0"
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## 主なコマンド
|
|
86
|
+
- `bkit init` (`new`) – テンプレートからワークスペースを作成。スクリプト API のパッケージとバージョンも対話的に選択可能。ESLint ルールは有効/無効を対話選択でき、フラグ `--eslint-rules <csv>` / `--no-eslint` でも指定可能。
|
|
87
|
+
- `bkit import <mcpack|mcaddon|zip>` – 既存アーカイブを展開し、`bkit.config.json` を生成してワークスペース化。JS→TS 変換はオプション(`--convert-ts`)。自動変換は互換性リスクがあるため、必要な場合のみ利用を推奨します。
|
|
88
|
+
- `bkit build [--out-dir <dir>]` – ビヘイビア/リソースパックを `dist/` にコピー。スクリプトが TypeScript の場合は `@minecraft/core-build-tasks` でバンドルを実行。
|
|
89
|
+
- `bkit package [--out <name>]` – `dist/` 以下から `.mcpack`(両パック)、両方揃っていれば `.mcaddon` も作成。
|
|
90
|
+
- `bkit sync [--target <name>] [--build=false]` – ビルド成果物を `config.sync.targets` で指定した場所へコピー。`product` 指定で Minecraft 開発環境へデプロイ。
|
|
91
|
+
- `bkit deps` – 選択した Script API 依存を npm にインストールし、`bkit.config.json` と `manifest.json` を同期。
|
|
92
|
+
- `bkit bump [major|minor|patch] [--to <version>] [--min-engine <x.y.z>]` – プロジェクト/マニフェストのバージョンを更新(任意で min_engine_version も上書き)。
|
|
93
|
+
- `bkit validate [--strict] [--json]` – config / manifest の整合性チェック。
|
|
94
|
+
- `bkit template <list|add|pull|rm>` – テンプレートレジストリ(`.bkit/templates*.json`)の管理。`custom-git` で任意のリポジトリを登録可能。
|
|
95
|
+
- `bkit watch` – `./project/<name>` 配下を監視し、変更ごとにビルドと同期を自動実行。
|
|
96
|
+
- `bkit config [--path <file>] [--json]` – 読み込んだ設定を確認。
|
|
97
|
+
- `bkit setting [--lang <ja|en>]` – CLI 設定を変更(現在は表示言語の切り替えに対応)。フラグ未指定時は対話で選択。
|
|
98
|
+
- `npm run build:local` / `npm run package:local` – 生成/インポートされた各プロジェクトには `tools/local-build.mjs` と `tools/local-package.mjs` を同梱。BedrockKit CLI がなくても、プロジェクト単体でビルド&.mcpack/.mcaddon パッケージ化が可能です。
|
|
99
|
+
|
|
100
|
+
## 同期ターゲットの書き方
|
|
101
|
+
- **core-build-tasks 経由**(開発版 Minecraft へデプロイ)
|
|
102
|
+
`sync.targets.<name>.product` に `BedrockUWP | PreviewUWP | BedrockGDK | PreviewGDK` を指定し、`projectName` で開発フォルダ名を上書き可能。
|
|
103
|
+
- **パス指定コピー**
|
|
104
|
+
`sync.targets.<name>.behavior` / `resource` にそれぞれのコピー先パスを直接記載。`bkit sync --dry-run` で内容を確認できます。
|
|
105
|
+
|
|
106
|
+
## テンプレート運用
|
|
107
|
+
- 既定で `official-sample` が登録されています。`bkit template list` で確認可能です。
|
|
108
|
+
- 任意の Git リポジトリを `bkit template add <name> <git-url>` で登録し、`bkit init --template <name>` で利用できます。
|
|
109
|
+
- `.bkit/templates/<name>` にクローンされるため、社内リポジトリ等も扱えます(SSH キーは `BKIT_SSH_KEY` 環境変数で指定可能)。
|
|
110
|
+
|
|
111
|
+
## 便利なオプション
|
|
112
|
+
- **--config <path>**: 対象プロジェクトを指定。複数ある場合は対話選択も可能。
|
|
113
|
+
- **--json**: 機械可読な形式で出力。
|
|
114
|
+
- **-q | --quiet**: ログ出力を抑制。
|
|
115
|
+
- **--lang <ja|en>**: 表示言語を切り替え。デフォルトは日本語です。環境変数 `BKIT_LANG` もサポートしています。
|
|
116
|
+
- **--build=false**: 共通オプション。事前ビルドをスキップします。
|
|
117
|
+
- **.bkitignore**: ビルド/同期時に無視するパターンを記載。
|
|
118
|
+
|
|
119
|
+
## よくある流れ
|
|
120
|
+
1. `bkit init` で土台を作成(または `bkit import` で既存アドオンを取り込み)。
|
|
121
|
+
2. `bkit build` で成果物を作成し、`bkit validate` で整合性確認。
|
|
122
|
+
3. `bkit sync` でゲームの開発用フォルダに反映、`bkit watch` で自動同期しながら開発。
|
|
123
|
+
4. リリース時に `bkit bump` でバージョンを上げ、`bkit package` で配布用アーカイブを生成。
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { dirname, resolve } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { intro, isCancel, outro, select } from "@clack/prompts";
|
|
6
|
+
import pc from "picocolors";
|
|
7
|
+
import { buildCommands } from "./commands/index.js";
|
|
8
|
+
import { printBanner, printCommandHeader } from "./utils/ui.js";
|
|
9
|
+
import { printHelp } from "./help.js";
|
|
10
|
+
import { resolveLang, t } from "./utils/i18n.js";
|
|
11
|
+
import { ensureSettings, loadSettings } from "./utils/settings.js";
|
|
12
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
13
|
+
const __dirname = dirname(__filename);
|
|
14
|
+
const root = resolve(__dirname, "..");
|
|
15
|
+
const pkg = JSON.parse(readFileSync(resolve(root, "package.json"), { encoding: "utf8" }));
|
|
16
|
+
function findCommand(name, commands) {
|
|
17
|
+
if (!name)
|
|
18
|
+
return undefined;
|
|
19
|
+
return commands.find((cmd) => cmd.name === name || cmd.aliases?.includes(name));
|
|
20
|
+
}
|
|
21
|
+
function extractLang(argv) {
|
|
22
|
+
const eq = argv.find((a) => a.startsWith("--lang="));
|
|
23
|
+
if (eq)
|
|
24
|
+
return eq.split("=", 2)[1];
|
|
25
|
+
const idx = argv.findIndex((a) => a === "--lang" || a === "-l");
|
|
26
|
+
if (idx >= 0 && argv[idx + 1])
|
|
27
|
+
return argv[idx + 1];
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
function stripLang(argv) {
|
|
31
|
+
const args = [];
|
|
32
|
+
let langInput;
|
|
33
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
34
|
+
const arg = argv[i];
|
|
35
|
+
if (arg === "--lang" || arg === "-l") {
|
|
36
|
+
langInput = argv[i + 1];
|
|
37
|
+
i += 1;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (arg.startsWith("--lang=")) {
|
|
41
|
+
langInput = arg.split("=", 2)[1];
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
args.push(arg);
|
|
45
|
+
}
|
|
46
|
+
return { args, langInput };
|
|
47
|
+
}
|
|
48
|
+
async function runInteractive(commands, lang) {
|
|
49
|
+
printBanner();
|
|
50
|
+
intro(pc.inverse(" Interactive Mode "));
|
|
51
|
+
const choice = await select({
|
|
52
|
+
message: t("cli.menuPrompt", lang),
|
|
53
|
+
options: commands
|
|
54
|
+
.filter((cmd) => cmd.name !== "help")
|
|
55
|
+
.map((cmd) => ({
|
|
56
|
+
value: cmd.name,
|
|
57
|
+
label: cmd.name,
|
|
58
|
+
hint: cmd.description,
|
|
59
|
+
})),
|
|
60
|
+
});
|
|
61
|
+
if (isCancel(choice)) {
|
|
62
|
+
outro(t("common.cancelled", lang));
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const selected = findCommand(String(choice), commands);
|
|
66
|
+
if (!selected) {
|
|
67
|
+
console.error(t("cli.menuNotFound", lang));
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
await Promise.resolve(selected.run({ argv: [], root, lang }));
|
|
71
|
+
outro(t("common.done", lang));
|
|
72
|
+
}
|
|
73
|
+
async function main() {
|
|
74
|
+
const [, , ...argvRaw] = process.argv;
|
|
75
|
+
const { args: argvNoLang, langInput } = stripLang(argvRaw);
|
|
76
|
+
const langFlag = langInput ?? extractLang(argvRaw);
|
|
77
|
+
let settings = await loadSettings();
|
|
78
|
+
if (!settings.initialized) {
|
|
79
|
+
try {
|
|
80
|
+
settings = await ensureSettings(langFlag);
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
process.exitCode = 1;
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const lang = resolveLang(langFlag, settings.lang);
|
|
88
|
+
const interactiveFlag = argvNoLang.includes("--interactive") || argvNoLang.includes("-i");
|
|
89
|
+
const argv = argvNoLang.filter((arg) => arg !== "--interactive" && arg !== "-i");
|
|
90
|
+
const [first, ...rest] = argv;
|
|
91
|
+
const commands = buildCommands(lang, () => printHelp(commands));
|
|
92
|
+
if (interactiveFlag || !first) {
|
|
93
|
+
await runInteractive(commands, lang);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (first === "-h" || first === "--help") {
|
|
97
|
+
printHelp(commands);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (first === "-v" || first === "--version") {
|
|
101
|
+
console.log(pkg.version ?? "0.0.0");
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const cmd = findCommand(first, commands);
|
|
105
|
+
if (!cmd) {
|
|
106
|
+
console.error(`Unknown command: ${first}`);
|
|
107
|
+
printHelp(commands);
|
|
108
|
+
process.exitCode = 1;
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
printCommandHeader(cmd.name, cmd.description);
|
|
112
|
+
await Promise.resolve(cmd.run({ argv: rest, root, lang }));
|
|
113
|
+
}
|
|
114
|
+
main().catch((err) => {
|
|
115
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
116
|
+
process.exitCode = 1;
|
|
117
|
+
});
|
|
118
|
+
//# 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,154 @@
|
|
|
1
|
+
import { rm, cp, stat } from "node:fs/promises";
|
|
2
|
+
import { dirname, resolve, relative } from "node:path";
|
|
3
|
+
import { spawn } from "node:child_process";
|
|
4
|
+
import { createLogger } from "../core/logger.js";
|
|
5
|
+
import { loadConfigContext, resolveConfigPath, resolveOutDir } from "../core/config.js";
|
|
6
|
+
import { parseArgs } from "../utils/args.js";
|
|
7
|
+
import { ensureDir, pathExists } from "../utils/fs.js";
|
|
8
|
+
import { loadIgnoreRules, isIgnored } from "../utils/ignore.js";
|
|
9
|
+
import { resolveLang } from "../utils/i18n.js";
|
|
10
|
+
function shouldSkipTsScript(entryRel, scriptEntry, src, root) {
|
|
11
|
+
if (!scriptEntry)
|
|
12
|
+
return false;
|
|
13
|
+
const rel = relative(root, src).replace(/\\/g, "/");
|
|
14
|
+
return rel.startsWith(entryRel) && rel.endsWith(".ts");
|
|
15
|
+
}
|
|
16
|
+
export async function handleBuild(ctx) {
|
|
17
|
+
const parsed = parseArgs(ctx.argv);
|
|
18
|
+
const lang = ctx.lang ?? resolveLang(parsed.flags.lang);
|
|
19
|
+
const jsonOut = !!parsed.flags.json;
|
|
20
|
+
const quiet = !!parsed.flags.quiet || !!parsed.flags.q;
|
|
21
|
+
const { info: log } = createLogger({ json: jsonOut, quiet });
|
|
22
|
+
const outDirOverride = (typeof parsed.flags["out-dir"] === "string" && parsed.flags["out-dir"]) ||
|
|
23
|
+
(typeof parsed.flags.outdir === "string" && parsed.flags.outdir) ||
|
|
24
|
+
undefined;
|
|
25
|
+
const configPath = await resolveConfigPath(parsed.flags.config, lang);
|
|
26
|
+
if (!configPath) {
|
|
27
|
+
console.error("Config selection cancelled.");
|
|
28
|
+
process.exitCode = 1;
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
if (!(await pathExists(configPath))) {
|
|
32
|
+
console.error(`Config not found: ${configPath}`);
|
|
33
|
+
process.exitCode = 1;
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const configCtx = await loadConfigContext(configPath);
|
|
37
|
+
const { config, rootDir } = configCtx;
|
|
38
|
+
const ignoreRules = await loadIgnoreRules(rootDir);
|
|
39
|
+
const outDir = resolveOutDir(configCtx, outDirOverride);
|
|
40
|
+
const behaviorEnabled = configCtx.behavior.enabled;
|
|
41
|
+
const resourceEnabled = configCtx.resource.enabled;
|
|
42
|
+
const behaviorSrc = configCtx.behavior.path;
|
|
43
|
+
const resourceSrc = configCtx.resource.path;
|
|
44
|
+
const behaviorDest = behaviorSrc ? resolve(outDir, config.packs.behavior) : null;
|
|
45
|
+
const resourceDest = resourceSrc ? resolve(outDir, config.packs.resource) : null;
|
|
46
|
+
await rm(outDir, { recursive: true, force: true });
|
|
47
|
+
const scriptEntryRel = config.script?.entry;
|
|
48
|
+
// ESLint (if script present)
|
|
49
|
+
if (behaviorEnabled && config.script) {
|
|
50
|
+
try {
|
|
51
|
+
await runEslint(rootDir, quiet || jsonOut);
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
55
|
+
process.exitCode = 1;
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (behaviorEnabled && config.script && scriptEntryRel) {
|
|
60
|
+
const entryAbs = resolve(behaviorSrc, scriptEntryRel);
|
|
61
|
+
const outFile = resolve(behaviorDest, scriptEntryRel.replace(/\.ts$/, ".js"));
|
|
62
|
+
await ensureDir(dirname(outFile));
|
|
63
|
+
const bundleTask = await getBundleTask();
|
|
64
|
+
const externals = config.script.dependencies
|
|
65
|
+
?.filter((d) => d.module_name !== "@minecraft/math" && d.module_name !== "@minecraft/vanilla-data")
|
|
66
|
+
.map((d) => d.module_name) ?? [];
|
|
67
|
+
const bundle = bundleTask({
|
|
68
|
+
entryPoint: entryAbs,
|
|
69
|
+
outfile: outFile,
|
|
70
|
+
sourcemap: true,
|
|
71
|
+
external: externals,
|
|
72
|
+
minifyWhitespace: false,
|
|
73
|
+
});
|
|
74
|
+
log(`Bundling script: ${entryAbs} -> ${outFile}`);
|
|
75
|
+
await runTask(bundle);
|
|
76
|
+
}
|
|
77
|
+
// Copy behavior pack, skipping TS script source if a bundle was produced.
|
|
78
|
+
if (behaviorEnabled && behaviorSrc && behaviorDest) {
|
|
79
|
+
await ensureDir(dirname(behaviorDest));
|
|
80
|
+
await cp(behaviorSrc, behaviorDest, {
|
|
81
|
+
recursive: true,
|
|
82
|
+
force: true,
|
|
83
|
+
filter: (src) => !isIgnored(src, rootDir, ignoreRules) &&
|
|
84
|
+
!shouldSkipTsScript(scriptEntryRel ? dirname(scriptEntryRel).replace(/\\/g, "/") : "", scriptEntryRel, src, behaviorSrc),
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
// Copy resource pack as-is.
|
|
88
|
+
if (resourceEnabled && resourceSrc && resourceDest) {
|
|
89
|
+
await ensureDir(dirname(resourceDest));
|
|
90
|
+
await cp(resourceSrc, resourceDest, {
|
|
91
|
+
recursive: true,
|
|
92
|
+
force: true,
|
|
93
|
+
filter: (src) => !isIgnored(src, rootDir, ignoreRules),
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
// Optionally ensure outDir exists if packs missing.
|
|
97
|
+
await ensureDir(outDir);
|
|
98
|
+
const outStat = await stat(outDir);
|
|
99
|
+
if (!outStat.isDirectory()) {
|
|
100
|
+
console.error(`Build output is not a directory: ${outDir}`);
|
|
101
|
+
process.exitCode = 1;
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (jsonOut) {
|
|
105
|
+
console.log(JSON.stringify({ ok: true, outDir }, null, 2));
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
log(`Build completed -> ${outDir}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async function getBundleTask() {
|
|
112
|
+
const coreBuild = await import("@minecraft/core-build-tasks");
|
|
113
|
+
const task = coreBuild.bundleTask;
|
|
114
|
+
if (!task)
|
|
115
|
+
throw new Error("bundleTask not found in @minecraft/core-build-tasks");
|
|
116
|
+
return task;
|
|
117
|
+
}
|
|
118
|
+
function runTask(task) {
|
|
119
|
+
return new Promise((resolve, reject) => {
|
|
120
|
+
const done = (err) => {
|
|
121
|
+
if (err)
|
|
122
|
+
reject(err);
|
|
123
|
+
else
|
|
124
|
+
resolve();
|
|
125
|
+
};
|
|
126
|
+
const maybePromise = task(done);
|
|
127
|
+
if (maybePromise && typeof maybePromise.then === "function") {
|
|
128
|
+
maybePromise.then(() => resolve()).catch((err) => reject(err));
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
async function runEslint(rootDir, quiet) {
|
|
133
|
+
const eslintPath = resolve(rootDir, "node_modules/.bin/eslint");
|
|
134
|
+
if (!(await pathExists(eslintPath))) {
|
|
135
|
+
throw new Error("eslint not found in project. Run npm install.");
|
|
136
|
+
}
|
|
137
|
+
const args = ["packs/behavior/scripts/**/*.{ts,js}"];
|
|
138
|
+
const useShell = process.platform === "win32";
|
|
139
|
+
await new Promise((resolve, reject) => {
|
|
140
|
+
const child = spawn(eslintPath, args, {
|
|
141
|
+
cwd: rootDir,
|
|
142
|
+
stdio: quiet ? "ignore" : "inherit",
|
|
143
|
+
shell: useShell,
|
|
144
|
+
});
|
|
145
|
+
child.on("error", reject);
|
|
146
|
+
child.on("exit", (code) => {
|
|
147
|
+
if (code === 0)
|
|
148
|
+
resolve();
|
|
149
|
+
else
|
|
150
|
+
reject(new Error(`eslint exited with code ${code}`));
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
|