lism-cli 0.6.0 → 0.8.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/README.md +67 -31
- package/dist/{chunk-G4RBP3W6.js → chunk-RTEZODLP.js} +166 -129
- package/dist/index.js +248 -292
- package/dist/lib.d.ts +70 -93
- package/dist/lib.js +1 -1
- package/package.json +4 -3
- /package/bin/{lism.mjs → lism-cli.mjs} +0 -0
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# lism-cli
|
|
2
2
|
|
|
3
|
-
[Lism CSS](https://lism-css.com) / [Lism UI](https://lism-css.com/ui) のための
|
|
3
|
+
[Lism CSS](https://lism-css.com) / [Lism UI](https://lism-css.com/ui) のためのCLIツール。`lism-cli` コマンドで新規プロジェクト生成・UIコンポーネント追加・AIスキル配置を行います。
|
|
4
4
|
|
|
5
5
|
## 前提条件
|
|
6
6
|
|
|
@@ -9,9 +9,10 @@
|
|
|
9
9
|
## コマンド体系
|
|
10
10
|
|
|
11
11
|
```
|
|
12
|
-
lism create [targetDir] [--template <name|category>]
|
|
13
|
-
lism ui
|
|
14
|
-
lism
|
|
12
|
+
lism-cli create [targetDir] [--template <name|category>] [--lang <ja|en>] # templates から新規プロジェクト
|
|
13
|
+
lism-cli init [--ui-framework <react|astro>] [--ui-dir <path>] # lism.config ファイルの新規生成
|
|
14
|
+
lism-cli ui { add <names...> | list } # Lism UI コンポーネントの追加
|
|
15
|
+
lism-cli skill { add [skill] | check | update } # AI エージェント向け SKILL.md 配置
|
|
15
16
|
```
|
|
16
17
|
|
|
17
18
|
## 使い方
|
|
@@ -34,9 +35,28 @@ pnpm dlx lism-cli create --template blog-astro-minimal --lang en ./my-blog
|
|
|
34
35
|
|
|
35
36
|
同じ動作は `pnpm create lism` / `npm create lism@latest` でも呼び出せます(`create-lism` パッケージ経由)。挙動は両者で共通です。
|
|
36
37
|
|
|
37
|
-
`--lang <ja|en>` は CLI
|
|
38
|
+
`--lang <ja|en>` は CLIの表示言語に加えて、**生成されるテンプレート本体の言語**にも反映されます。`--lang` を指定しない場合は、対話端末(TTY)ではほかのどの選択よりも先に言語選択プロンプトが表示され、選んだ言語で以降の表示とテンプレート生成が確定します(非対話環境・CI等では `en` にフォールバック)。対応言語版を持つテンプレート(`blog-astro-minimal` / `blog-astro-personal` / `blog-astro-techlog` / `lp-astro-corporate` / `lp-astro-interior`)では、指定言語のサイト文言・サンプルコンテンツで生成されます。言語版が無いテンプレートは、指定言語に関わらず既存(ベース)の内容で生成されます。
|
|
38
39
|
|
|
39
|
-
###
|
|
40
|
+
### lism.config の生成
|
|
41
|
+
|
|
42
|
+
既存プロジェクトに Lism CSS を後付けする場合など、設定ファイルのひな形が必要なときは `init` を使います。
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
pnpm dlx lism-cli init
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
core 設定(`tokens` / `props` 等、コメントアウトされたひな形)を持つ `lism.config.js` を新規作成します。対話の中で「Lism UI のコンポーネントも使いますか?」と確認され(デフォルト: No)、Yes と答えた場合のみ `ui` セクション(`framework` / `dir`)も併せて生成されます。
|
|
49
|
+
|
|
50
|
+
`ui` セクションの値はオプションで先渡しできます。指定されなかった質問だけが対話で行われます。
|
|
51
|
+
|
|
52
|
+
- `--ui-framework <react|astro>`: framework の選択をスキップし、UI 利用の確認のみ行います(この場合のデフォルトは Yes)
|
|
53
|
+
- `--ui-dir <path>`: UI コンポーネントの出力先。指定すると UI 利用の意思とみなし、確認を省略して framework の選択のみ行います
|
|
54
|
+
|
|
55
|
+
非対話環境(CI 等)では質問を出せないため、`--ui-framework` があれば `ui` セクション込みで生成し、無ければ `ui` セクション無しで生成します(`--ui-dir` のみの指定はエラーになります)。
|
|
56
|
+
|
|
57
|
+
既に `lism.config.{ts,mjs,js}` がある場合は何も変更しません(`ui` セクションの後付けは、後述の `ui add` 実行時に表示されるスニペットを貼り付けてください)。
|
|
58
|
+
|
|
59
|
+
### UIコンポーネントの追加
|
|
40
60
|
|
|
41
61
|
```bash
|
|
42
62
|
# 単一 / 複数
|
|
@@ -53,27 +73,38 @@ pnpm dlx lism-cli ui list
|
|
|
53
73
|
pnpm dlx lism-cli ui add accordion --ref dev
|
|
54
74
|
```
|
|
55
75
|
|
|
56
|
-
コンポーネントは [`packages/lism-ui/src/components`](https://github.com/lism-css/lism-css/tree/main/packages/lism-ui/src/components) から [giget](https://github.com/unjs/giget)
|
|
76
|
+
コンポーネントは [`packages/lism-ui/src/components`](https://github.com/lism-css/lism-css/tree/main/packages/lism-ui/src/components) から [giget](https://github.com/unjs/giget) 経由で直接取得されるため、既存コンポーネントの実装を更新するだけでCLI側も自動で追従します。ただし、コンポーネントを追加・削除した場合は `lism-ui` 側で `registry-index.json` を再生成(ビルド時の `gen:registry`)してcommitする必要があります(`ui list` / `ui add --all` が参照するカタログのため)。
|
|
57
77
|
|
|
58
|
-
|
|
78
|
+
`ui` セクションの設定が見つからない状態で `ui add` を実行すると、対話式セットアップが走ります。
|
|
59
79
|
|
|
60
80
|
```
|
|
61
81
|
? フレームワークを選択してください: React
|
|
62
|
-
? コンポーネントの出力先ディレクトリ: src/components/ui
|
|
63
|
-
? helper の出力先ディレクトリ: src/components/ui/_helper
|
|
64
|
-
✔ lism.config.js を作成しました。
|
|
65
82
|
```
|
|
66
83
|
|
|
67
|
-
|
|
84
|
+
出力先ディレクトリは既定値(`src/components/ui`)が使われます。変更したい場合は `--ui-dir` フラグで指定してください。
|
|
85
|
+
|
|
86
|
+
`ui add` は入力した値をその回の実行に使うだけで設定ファイルは書き換えず、最後に `lism.config.*` へ貼り付けるための `ui` セクションのスニペットを案内します(CSSカスタマイズ用に先に作られた設定を壊さないため)。
|
|
87
|
+
|
|
88
|
+
設定をファイルとして残すには、`lism.config.*` が無い場合は `lism-cli init`(前述)で `ui` セクション込みの設定ファイルを生成し、既にある場合は上記スニペットを貼り付けてください。
|
|
68
89
|
|
|
69
90
|
### AI エージェント向けスキルの配置
|
|
70
91
|
|
|
71
|
-
|
|
92
|
+
同梱スキル(`SKILL.md` ほか一式)を各種AIツールの所定ディレクトリへ展開します。
|
|
93
|
+
|
|
94
|
+
同梱スキルは以下の2つです:
|
|
95
|
+
|
|
96
|
+
| スキル | 説明 |
|
|
97
|
+
|--------|------|
|
|
98
|
+
| `lism-css-guide` | Lism CSSでUI・ページを実装・修正する時に使う実装ガイド |
|
|
99
|
+
| `lism-css-refactor` | 既存の Lism CSSコードを、見た目や挙動を変えずにLismらしい書き方へ整理するリファクタガイド |
|
|
72
100
|
|
|
73
101
|
```bash
|
|
74
102
|
# 対話モード(使用中のツールを自動検出)
|
|
75
103
|
pnpm dlx lism-cli skill add
|
|
76
104
|
|
|
105
|
+
# スキル名を指定して個別に導入
|
|
106
|
+
pnpm dlx lism-cli skill add lism-css-refactor
|
|
107
|
+
|
|
77
108
|
# ツールを明示指定
|
|
78
109
|
pnpm dlx lism-cli skill add --claude --cursor
|
|
79
110
|
|
|
@@ -87,46 +118,51 @@ pnpm dlx lism-cli skill check
|
|
|
87
118
|
pnpm dlx lism-cli skill update --claude
|
|
88
119
|
```
|
|
89
120
|
|
|
90
|
-
|
|
121
|
+
`skill add` は引数なしで実行すると同梱スキルすべてを一括導入し、`skill add <skill>` でスキル名を指定すると、そのスキルだけを配置します。`check` / `update` はスキル引数を取らず、常に同梱スキル全体が対象です。
|
|
122
|
+
|
|
123
|
+
配置先の対応表(`<skill>` にはスキル名が入ります):
|
|
91
124
|
|
|
92
125
|
| ツール | 配置先 |
|
|
93
126
|
|--------|--------|
|
|
94
|
-
| `--claude` | `.claude/skills
|
|
95
|
-
| `--codex` | `.agents/skills
|
|
96
|
-
| `--cursor` | `.cursor/skills
|
|
97
|
-
| `--windsurf` | `.windsurf/skills
|
|
98
|
-
| `--cline` | `.cline/skills
|
|
99
|
-
| `--copilot` | `.github/skills
|
|
100
|
-
| `--gemini` | `.gemini/skills
|
|
101
|
-
| `--junie` | `.junie/skills
|
|
127
|
+
| `--claude` | `.claude/skills/<skill>` |
|
|
128
|
+
| `--codex` | `.agents/skills/<skill>` |
|
|
129
|
+
| `--cursor` | `.cursor/skills/<skill>` |
|
|
130
|
+
| `--windsurf` | `.windsurf/skills/<skill>` |
|
|
131
|
+
| `--cline` | `.cline/skills/<skill>` |
|
|
132
|
+
| `--copilot` | `.github/skills/<skill>` |
|
|
133
|
+
| `--gemini` | `.gemini/skills/<skill>` |
|
|
134
|
+
| `--junie` | `.junie/skills/<skill>` |
|
|
102
135
|
|
|
103
136
|
## lism.config.js
|
|
104
137
|
|
|
105
|
-
`ui
|
|
138
|
+
`ui add` が読み込む設定ファイル(新規作成するのは `init`)。CSSの設定(`tokens` 等)とUI設定を同居できます。
|
|
106
139
|
|
|
107
140
|
```js
|
|
108
141
|
export default {
|
|
109
|
-
|
|
142
|
+
ui: {
|
|
110
143
|
framework: 'react', // 'react' | 'astro'
|
|
111
|
-
|
|
112
|
-
helperDir: 'src/components/ui/_helper',
|
|
144
|
+
dir: 'src/components/ui',
|
|
113
145
|
},
|
|
114
146
|
};
|
|
115
147
|
```
|
|
116
148
|
|
|
117
|
-
`
|
|
149
|
+
helper の配置先は個別に設定できず、常に `{dir}/_helper` に固定されます。旧キー `ui.componentsDir` は `ui.dir` が無い場合のみ後方互換として読み込まれます。
|
|
118
150
|
|
|
119
|
-
|
|
151
|
+
設定ファイルは `lism.config.ts` / `lism.config.mjs` / `lism.config.js` に対応しており、この順で探索して最初に見つかったものを読み込みます。`lism-css` 本体の設定読込(`@lism-css/plugin` / `lism-css build`)も同じ探索順です。
|
|
152
|
+
|
|
153
|
+
旧 `cli` セクション名も後方互換のため読み込めますが、deprecation警告が出るので `ui` へのリネームを推奨します。
|
|
120
154
|
|
|
121
155
|
## パッケージが見つからないエラーが出る場合
|
|
122
156
|
|
|
123
|
-
npm / pnpm
|
|
157
|
+
npm / pnpmには、公開から間もないバージョンのインストールを一定期間ブロックする仕組みがあります(npmの`min-release-age`設定、pnpmの`minimumReleaseAge`設定)。公開直後の`lism-cli`を実行すると、このガードによりパッケージが見つからないエラーになる場合があります。次のように一時的に無効化して実行できます。
|
|
124
158
|
|
|
125
159
|
```bash
|
|
126
|
-
npm exec --
|
|
127
|
-
pnpm --
|
|
160
|
+
npm exec --min-release-age 0 lism-cli create
|
|
161
|
+
pnpm dlx --config.minimumReleaseAge=0 lism-cli create
|
|
128
162
|
```
|
|
129
163
|
|
|
164
|
+
Aikido Securityのsafe-chainなど、サードパーティのサプライチェーン保護ツールを導入している場合は、そのツール側の設定(例: `SAFE_CHAIN_MINIMUM_PACKAGE_AGE_HOURS=0`)も確認してください。
|
|
165
|
+
|
|
130
166
|
## License
|
|
131
167
|
|
|
132
168
|
MIT
|
|
@@ -1,3 +1,30 @@
|
|
|
1
|
+
// <define:__LISM_PACKAGE_VERSIONS__>
|
|
2
|
+
var define_LISM_PACKAGE_VERSIONS_default = { "lism-css": "0.24.0", "@lism-css/ui": "0.24.0", "@lism-css/plugin": "0.3.0" };
|
|
3
|
+
|
|
4
|
+
// src/logger.ts
|
|
5
|
+
import pc from "picocolors";
|
|
6
|
+
var logger = {
|
|
7
|
+
info(msg) {
|
|
8
|
+
console.log(pc.cyan(msg));
|
|
9
|
+
},
|
|
10
|
+
success(msg) {
|
|
11
|
+
console.log(pc.green(msg));
|
|
12
|
+
},
|
|
13
|
+
warn(msg) {
|
|
14
|
+
console.log(pc.yellow(`WARN: ${msg}`));
|
|
15
|
+
},
|
|
16
|
+
error(msg) {
|
|
17
|
+
console.error(pc.red(`ERROR: ${msg}`));
|
|
18
|
+
},
|
|
19
|
+
log(msg) {
|
|
20
|
+
console.log(msg);
|
|
21
|
+
},
|
|
22
|
+
heading(msg) {
|
|
23
|
+
console.log(pc.bold(pc.cyan(`
|
|
24
|
+
\u25B8 ${msg}`)));
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
|
|
1
28
|
// src/i18n.ts
|
|
2
29
|
import { execFileSync } from "child_process";
|
|
3
30
|
|
|
@@ -31,31 +58,24 @@ var messages = {
|
|
|
31
58
|
ja: "\u65E2\u5B58\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u5F37\u5236\u4E0A\u66F8\u304D",
|
|
32
59
|
en: "Overwrite existing directory"
|
|
33
60
|
},
|
|
61
|
+
// init
|
|
62
|
+
"cli.init.description": {
|
|
63
|
+
ja: "lism.config \u30D5\u30A1\u30A4\u30EB\u3092\u65B0\u898F\u751F\u6210\u3059\u308B",
|
|
64
|
+
en: "Generate a new lism.config file"
|
|
65
|
+
},
|
|
66
|
+
"cli.init.opt.uiFramework": {
|
|
67
|
+
ja: "UI \u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u30D5\u30EC\u30FC\u30E0\u30EF\u30FC\u30AF\uFF08ui.framework\uFF09",
|
|
68
|
+
en: "Framework for UI components (ui.framework)"
|
|
69
|
+
},
|
|
70
|
+
"cli.init.opt.uiDir": {
|
|
71
|
+
ja: "UI \u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u51FA\u529B\u5148\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\uFF08ui.dir\uFF09",
|
|
72
|
+
en: "Output directory for UI components (ui.dir)"
|
|
73
|
+
},
|
|
34
74
|
// ui
|
|
35
75
|
"cli.ui.description": {
|
|
36
76
|
ja: "Lism UI \u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u8FFD\u52A0\u30FB\u7BA1\u7406",
|
|
37
77
|
en: "Manage Lism UI components"
|
|
38
78
|
},
|
|
39
|
-
"cli.ui.init.description": {
|
|
40
|
-
ja: "lism.config.js \u306E cli \u30BB\u30AF\u30B7\u30E7\u30F3\u3092\u751F\u6210\u3059\u308B",
|
|
41
|
-
en: "Generate the cli section of lism.config.js"
|
|
42
|
-
},
|
|
43
|
-
"cli.ui.init.opt.framework": {
|
|
44
|
-
ja: "\u30D5\u30EC\u30FC\u30E0\u30EF\u30FC\u30AF",
|
|
45
|
-
en: "Framework"
|
|
46
|
-
},
|
|
47
|
-
"cli.ui.init.opt.componentsDir": {
|
|
48
|
-
ja: "\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u51FA\u529B\u5148\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA",
|
|
49
|
-
en: "Output directory for components"
|
|
50
|
-
},
|
|
51
|
-
"cli.ui.init.opt.helperDir": {
|
|
52
|
-
ja: "helper \u306E\u51FA\u529B\u5148\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA",
|
|
53
|
-
en: "Output directory for helpers"
|
|
54
|
-
},
|
|
55
|
-
"cli.ui.init.opt.force": {
|
|
56
|
-
ja: "\u65E2\u5B58\u306E cli \u30BB\u30AF\u30B7\u30E7\u30F3\u3092\u4E0A\u66F8\u304D",
|
|
57
|
-
en: "Overwrite the existing cli section"
|
|
58
|
-
},
|
|
59
79
|
"cli.ui.add.description": {
|
|
60
80
|
ja: "\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3092\u8FFD\u52A0\u3059\u308B",
|
|
61
81
|
en: "Add components"
|
|
@@ -89,6 +109,10 @@ var messages = {
|
|
|
89
109
|
ja: "\u30B9\u30AD\u30EB\u3092\u914D\u7F6E\u3059\u308B",
|
|
90
110
|
en: "Deploy skills"
|
|
91
111
|
},
|
|
112
|
+
"cli.skill.add.arg.skill": {
|
|
113
|
+
ja: "\u914D\u7F6E\u3059\u308B\u30B9\u30AD\u30EB\u540D\uFF08\u7701\u7565\u6642\u306F\u5168\u30B9\u30AD\u30EB\uFF09",
|
|
114
|
+
en: "Skill name to deploy (all skills if omitted)"
|
|
115
|
+
},
|
|
92
116
|
"cli.skill.add.opt.overwrite": {
|
|
93
117
|
ja: "\u78BA\u8A8D\u306A\u3057\u3067\u4E0A\u66F8\u304D",
|
|
94
118
|
en: "Overwrite without confirmation"
|
|
@@ -201,25 +225,48 @@ var messages = {
|
|
|
201
225
|
en: "Failed to rewrite package.json name: {reason}"
|
|
202
226
|
},
|
|
203
227
|
"create.workspaceReplaced": {
|
|
204
|
-
ja: " package.json \u306E workspace:* \u3092
|
|
205
|
-
en: " Replaced workspace:* in package.json with
|
|
228
|
+
ja: " package.json \u306E workspace:* \u3092\u516C\u958B\u30D0\u30FC\u30B8\u30E7\u30F3\u306B\u7F6E\u63DB\u3057\u307E\u3057\u305F\u3002",
|
|
229
|
+
en: " Replaced workspace:* in package.json with published versions."
|
|
206
230
|
},
|
|
207
231
|
"create.workspaceFailed": {
|
|
208
232
|
ja: "package.json \u306E\u66F8\u304D\u63DB\u3048\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {reason}",
|
|
209
233
|
en: "Failed to rewrite package.json: {reason}"
|
|
210
234
|
},
|
|
211
235
|
// ---------------------------------------------------------------------------
|
|
236
|
+
// init
|
|
237
|
+
// ---------------------------------------------------------------------------
|
|
238
|
+
"init.alreadyExists": {
|
|
239
|
+
ja: "{filename} \u306F\u65E2\u306B\u5B58\u5728\u3059\u308B\u305F\u3081\u3001\u4F55\u3082\u5909\u66F4\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002",
|
|
240
|
+
en: "{filename} already exists; nothing was changed."
|
|
241
|
+
},
|
|
242
|
+
"init.promptUseUi": {
|
|
243
|
+
ja: "Lism UI \u306E\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3082\u4F7F\u3044\u307E\u3059\u304B\uFF1F\uFF08ui \u30BB\u30AF\u30B7\u30E7\u30F3\u3092\u8FFD\u52A0\u3057\u307E\u3059\uFF09",
|
|
244
|
+
en: "Will you also use Lism UI components? (adds a ui section)"
|
|
245
|
+
},
|
|
246
|
+
"init.created": {
|
|
247
|
+
ja: "{path} \u3092\u4F5C\u6210\u3057\u307E\u3057\u305F\u3002",
|
|
248
|
+
en: "Created {path}."
|
|
249
|
+
},
|
|
250
|
+
"init.uiFrameworkRequired": {
|
|
251
|
+
ja: "\u975E\u5BFE\u8A71\u74B0\u5883\u3067\u306F --ui-dir \u5358\u72EC\u3067 ui \u30BB\u30AF\u30B7\u30E7\u30F3\u3092\u751F\u6210\u3067\u304D\u307E\u305B\u3093\u3002--ui-framework \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
252
|
+
en: "Cannot generate the ui section from --ui-dir alone in a non-interactive environment. Specify --ui-framework."
|
|
253
|
+
},
|
|
254
|
+
// ---------------------------------------------------------------------------
|
|
212
255
|
// ui
|
|
213
256
|
// ---------------------------------------------------------------------------
|
|
214
|
-
// ui 共通(add /
|
|
257
|
+
// ui 共通(add / init で共有)
|
|
258
|
+
"ui.promptFramework": {
|
|
259
|
+
ja: "\u30D5\u30EC\u30FC\u30E0\u30EF\u30FC\u30AF\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044:",
|
|
260
|
+
en: "Select a framework:"
|
|
261
|
+
},
|
|
215
262
|
"ui.catalogFailed": {
|
|
216
263
|
ja: "\u30AB\u30BF\u30ED\u30B0\u306E\u53D6\u5F97\u306B\u5931\u6557\u3057\u307E\u3057\u305F{refInfo}: {reason}",
|
|
217
264
|
en: "Failed to fetch catalog{refInfo}: {reason}"
|
|
218
265
|
},
|
|
219
266
|
// ui add
|
|
220
267
|
"ui.add.noConfig": {
|
|
221
|
-
ja: "
|
|
222
|
-
en: "
|
|
268
|
+
ja: "ui \u30BB\u30AF\u30B7\u30E7\u30F3\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002\u3044\u304F\u3064\u304B\u8CEA\u554F\u3057\u307E\u3059\u3002",
|
|
269
|
+
en: "No ui section found. A few questions to get you started."
|
|
223
270
|
},
|
|
224
271
|
"ui.add.addingAll": {
|
|
225
272
|
ja: "\u5168 {count} \u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3092\u8FFD\u52A0\u3057\u307E\u3059...",
|
|
@@ -285,46 +332,9 @@ var messages = {
|
|
|
285
332
|
ja: " \u30B9\u30AD\u30C3\u30D7: {path}",
|
|
286
333
|
en: " Skipped: {path}"
|
|
287
334
|
},
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
en: "Select a framework:"
|
|
292
|
-
},
|
|
293
|
-
"ui.init.promptComponentsDir": {
|
|
294
|
-
ja: "\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u51FA\u529B\u5148\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA:",
|
|
295
|
-
en: "Output directory for components:"
|
|
296
|
-
},
|
|
297
|
-
"ui.init.promptHelperDir": {
|
|
298
|
-
ja: "helper \u306E\u51FA\u529B\u5148\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA:",
|
|
299
|
-
en: "Output directory for helpers:"
|
|
300
|
-
},
|
|
301
|
-
"ui.init.patchedUpdate": {
|
|
302
|
-
ja: "{path} \u306B cli \u30BB\u30AF\u30B7\u30E7\u30F3\u3092\u66F4\u65B0\u3057\u307E\u3057\u305F\u3002",
|
|
303
|
-
en: "Updated the cli section in {path}."
|
|
304
|
-
},
|
|
305
|
-
"ui.init.patchedAdd": {
|
|
306
|
-
ja: "{path} \u306B cli \u30BB\u30AF\u30B7\u30E7\u30F3\u3092\u8FFD\u8A18\u3057\u307E\u3057\u305F\u3002",
|
|
307
|
-
en: "Added the cli section to {path}."
|
|
308
|
-
},
|
|
309
|
-
"ui.init.notPatched": {
|
|
310
|
-
ja: "{path} \u306B\u65E2\u306B cli \u30BB\u30AF\u30B7\u30E7\u30F3\u304C\u542B\u307E\u308C\u3066\u3044\u308B\u304B\u3001export default \u304C\u691C\u51FA\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u624B\u52D5\u3067\u8FFD\u8A18\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
311
|
-
en: "Either {path} already contains a cli section or no export default was detected. Please add it manually."
|
|
312
|
-
},
|
|
313
|
-
"ui.init.created": {
|
|
314
|
-
ja: "{path} \u3092\u4F5C\u6210\u3057\u307E\u3057\u305F\u3002",
|
|
315
|
-
en: "Created {path}."
|
|
316
|
-
},
|
|
317
|
-
"ui.init.legacyDetected": {
|
|
318
|
-
ja: "{filename} \u3092\u691C\u51FA\u3057\u307E\u3057\u305F\u3002lism.config.js \u3078\u79FB\u884C\u3057\u307E\u3059\u3002\u53E4\u3044\u30D5\u30A1\u30A4\u30EB\u306F\u5F8C\u3067\u524A\u9664\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
319
|
-
en: "Detected {filename}. Migrating to lism.config.js. Please remove the old file afterwards."
|
|
320
|
-
},
|
|
321
|
-
"ui.init.alreadyExists": {
|
|
322
|
-
ja: "{filename} \u306B\u306F\u65E2\u306B cli \u30BB\u30AF\u30B7\u30E7\u30F3\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u4E0A\u66F8\u304D\u3059\u308B\u306B\u306F --force \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
323
|
-
en: "{filename} already has a cli section. Use --force to overwrite."
|
|
324
|
-
},
|
|
325
|
-
"ui.init.willOverwrite": {
|
|
326
|
-
ja: "{filename} \u306E\u65E2\u5B58\u306E cli \u30BB\u30AF\u30B7\u30E7\u30F3\u3092\u4E0A\u66F8\u304D\u3057\u307E\u3059\u3002",
|
|
327
|
-
en: "Overwriting the existing cli section in {filename}."
|
|
335
|
+
"ui.add.snippetGuide": {
|
|
336
|
+
ja: "\u6B21\u56DE\u304B\u3089\u540C\u3058\u8CEA\u554F\u3092\u3055\u308C\u306A\u3044\u305F\u3081\u306B\u3001{filename} \u306E export default \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u5185\u306B\u4EE5\u4E0B\u3092\u8CBC\u308A\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044:\n\n{snippet}\n",
|
|
337
|
+
en: "To avoid being asked these questions again, paste the following inside the exported config object in {filename}:\n\n{snippet}\n"
|
|
328
338
|
},
|
|
329
339
|
// ui list
|
|
330
340
|
"ui.list.fetching": {
|
|
@@ -356,8 +366,12 @@ var messages = {
|
|
|
356
366
|
en: "No target tools were selected."
|
|
357
367
|
},
|
|
358
368
|
"skill.add.fetching": {
|
|
359
|
-
ja: "\u30B9\u30AD\u30EB\u3092\u53D6\u5F97\u4E2D\uFF08ref: {ref}\uFF09...",
|
|
360
|
-
en: "Fetching
|
|
369
|
+
ja: "\u30B9\u30AD\u30EB {skill} \u3092\u53D6\u5F97\u4E2D\uFF08ref: {ref}\uFF09...",
|
|
370
|
+
en: "Fetching skill {skill} (ref: {ref})..."
|
|
371
|
+
},
|
|
372
|
+
"skill.unknownSkill": {
|
|
373
|
+
ja: '\u30B9\u30AD\u30EB "{name}" \u306F\u5B58\u5728\u3057\u307E\u305B\u3093\u3002\u5229\u7528\u53EF\u80FD: {list}',
|
|
374
|
+
en: 'Unknown skill "{name}". Available: {list}'
|
|
361
375
|
},
|
|
362
376
|
"skill.add.skippedSame": {
|
|
363
377
|
ja: " \u30B9\u30AD\u30C3\u30D7\uFF08\u5DEE\u5206\u306A\u3057\uFF09: {label}",
|
|
@@ -397,8 +411,8 @@ var messages = {
|
|
|
397
411
|
en: "No installed skills found. Run `{invoke} skill add` to deploy them."
|
|
398
412
|
},
|
|
399
413
|
"skill.check.fetching": {
|
|
400
|
-
ja: "\u30EA\u30E2\u30FC\u30C8\u30B9\u30AD\u30EB\u3092\u53D6\u5F97\u4E2D\uFF08ref: {ref}\uFF09...",
|
|
401
|
-
en: "Fetching remote
|
|
414
|
+
ja: "\u30EA\u30E2\u30FC\u30C8\u30B9\u30AD\u30EB {skill} \u3092\u53D6\u5F97\u4E2D\uFF08ref: {ref}\uFF09...",
|
|
415
|
+
en: "Fetching remote skill {skill} (ref: {ref})..."
|
|
402
416
|
},
|
|
403
417
|
"skill.check.upToDate": {
|
|
404
418
|
ja: " \u2713 {label} (\u6700\u65B0)",
|
|
@@ -409,8 +423,8 @@ var messages = {
|
|
|
409
423
|
en: "All skills are up to date."
|
|
410
424
|
},
|
|
411
425
|
"skill.check.outdated": {
|
|
412
|
-
ja: "{count} \u4EF6\u306E\
|
|
413
|
-
en: "{count}
|
|
426
|
+
ja: "{count} \u4EF6\u306E\u914D\u7F6E\u306B\u5DEE\u5206\u304C\u3042\u308A\u307E\u3059\u3002`{invoke} skill update` \u3067\u6700\u65B0\u306B\u66F4\u65B0\u3067\u304D\u307E\u3059\u3002",
|
|
427
|
+
en: "{count} deployment(s) differ from the remote. Run `{invoke} skill update` to update them."
|
|
414
428
|
},
|
|
415
429
|
"skill.check.diffModified": {
|
|
416
430
|
ja: "\u5909\u66F4 {count}",
|
|
@@ -427,34 +441,26 @@ var messages = {
|
|
|
427
441
|
// ---------------------------------------------------------------------------
|
|
428
442
|
// config
|
|
429
443
|
// ---------------------------------------------------------------------------
|
|
430
|
-
"config.legacyWarning": {
|
|
431
|
-
ja: '[deprecated] {filename} \u306F\u5EC3\u6B62\u4E88\u5B9A\u3067\u3059\u3002"{invoke} ui init" \u3067 lism.config.js \u3078\u79FB\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002',
|
|
432
|
-
en: '[deprecated] {filename} is deprecated. Run "{invoke} ui init" to migrate to lism.config.js.'
|
|
433
|
-
},
|
|
434
|
-
"config.notFound": {
|
|
435
|
-
ja: "lism.config.js / lism.config.mjs / lism-ui.json \u306E\u3044\u305A\u308C\u3082\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002",
|
|
436
|
-
en: "None of lism.config.js / lism.config.mjs / lism-ui.json were found."
|
|
437
|
-
},
|
|
438
|
-
"config.cliSectionMissing": {
|
|
439
|
-
ja: "{filename} \u304B\u3089 CLI \u8A2D\u5B9A\uFF08cli \u30AD\u30FC\uFF09\u3092\u8AAD\u307F\u8FBC\u3081\u307E\u305B\u3093\u3067\u3057\u305F\u3002",
|
|
440
|
-
en: "Failed to read the CLI config (cli key) from {filename}."
|
|
441
|
-
},
|
|
442
444
|
"config.invalidFramework": {
|
|
443
|
-
ja: '
|
|
444
|
-
en: '
|
|
445
|
+
ja: 'ui.framework \u306F "react" \u307E\u305F\u306F "astro" \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002',
|
|
446
|
+
en: 'ui.framework must be "react" or "astro".'
|
|
445
447
|
},
|
|
446
|
-
"config.
|
|
447
|
-
ja: "
|
|
448
|
-
en: "
|
|
448
|
+
"config.invalidDir": {
|
|
449
|
+
ja: "ui.dir \u306F\u6587\u5B57\u5217\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
450
|
+
en: "ui.dir must be a string."
|
|
449
451
|
},
|
|
450
|
-
"config.
|
|
451
|
-
ja: "cli
|
|
452
|
-
en: "cli
|
|
452
|
+
"config.cliKeyDeprecated": {
|
|
453
|
+
ja: '[deprecated] {filename} \u306E "cli:" \u30AD\u30FC\u306F "ui:" \u3078\u306E\u5909\u66F4\u304C\u63A8\u5968\u3055\u308C\u3066\u3044\u307E\u3059\u3002',
|
|
454
|
+
en: '[deprecated] The "cli:" key in {filename} is recommended to be renamed to "ui:".'
|
|
453
455
|
},
|
|
454
456
|
"config.loadFailed": {
|
|
455
457
|
ja: "{path} \u3092\u8AAD\u307F\u8FBC\u3081\u307E\u305B\u3093\u3067\u3057\u305F\uFF08\u69CB\u6587\u30A8\u30E9\u30FC\u7B49\uFF09\u3002\u4FEE\u6B63\u3057\u3066\u304B\u3089\u518D\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044: {reason}",
|
|
456
458
|
en: "Failed to load {path} (syntax error, etc). Please fix it and retry: {reason}"
|
|
457
459
|
},
|
|
460
|
+
"config.freshConfigExists": {
|
|
461
|
+
ja: "{path} \u306F\u65E2\u306B\u5B58\u5728\u3059\u308B\u305F\u3081\u65B0\u898F\u4F5C\u6210\u3067\u304D\u307E\u305B\u3093\u3002",
|
|
462
|
+
en: "Cannot create {path} because it already exists."
|
|
463
|
+
},
|
|
458
464
|
// ---------------------------------------------------------------------------
|
|
459
465
|
// common
|
|
460
466
|
// ---------------------------------------------------------------------------
|
|
@@ -540,44 +546,25 @@ import path from "path";
|
|
|
540
546
|
import { downloadTemplate } from "giget";
|
|
541
547
|
import { select, input, confirm } from "@inquirer/prompts";
|
|
542
548
|
|
|
543
|
-
// src/logger.ts
|
|
544
|
-
import pc from "picocolors";
|
|
545
|
-
var logger = {
|
|
546
|
-
info(msg) {
|
|
547
|
-
console.log(pc.cyan(msg));
|
|
548
|
-
},
|
|
549
|
-
success(msg) {
|
|
550
|
-
console.log(pc.green(msg));
|
|
551
|
-
},
|
|
552
|
-
warn(msg) {
|
|
553
|
-
console.log(pc.yellow(`WARN: ${msg}`));
|
|
554
|
-
},
|
|
555
|
-
error(msg) {
|
|
556
|
-
console.error(pc.red(`ERROR: ${msg}`));
|
|
557
|
-
},
|
|
558
|
-
log(msg) {
|
|
559
|
-
console.log(msg);
|
|
560
|
-
},
|
|
561
|
-
heading(msg) {
|
|
562
|
-
console.log(pc.bold(pc.cyan(`
|
|
563
|
-
\u25B8 ${msg}`)));
|
|
564
|
-
}
|
|
565
|
-
};
|
|
566
|
-
|
|
567
549
|
// src/version.ts
|
|
568
|
-
var LISM_CSS_VERSION = "0.
|
|
569
|
-
var
|
|
550
|
+
var LISM_CSS_VERSION = "0.24.0" ? "0.24.0" : "unknown";
|
|
551
|
+
var LISM_PACKAGE_VERSIONS = typeof define_LISM_PACKAGE_VERSIONS_default !== "undefined" && define_LISM_PACKAGE_VERSIONS_default ? define_LISM_PACKAGE_VERSIONS_default : {
|
|
552
|
+
"lism-css": LISM_CSS_VERSION
|
|
553
|
+
};
|
|
554
|
+
var CLI_VERSION = "0.8.0" ? "0.8.0" : "unknown";
|
|
570
555
|
|
|
571
556
|
// src/constants.ts
|
|
572
557
|
var SOURCE_REPO = "lism-css/lism-css";
|
|
573
558
|
var RAW_GITHUB_BASE = "https://raw.githubusercontent.com";
|
|
559
|
+
var NPM_REGISTRY_BASE = "https://registry.npmjs.org";
|
|
574
560
|
var DEFAULT_UI_REF = "main";
|
|
575
561
|
var DEFAULT_SKILL_REF = "main";
|
|
576
562
|
var DEFAULT_TEMPLATES_REF = "main";
|
|
577
563
|
var UI_COMPONENTS_PATH = "packages/lism-ui/src/components";
|
|
578
564
|
var UI_HELPER_PATH = "packages/lism-ui/src/helper";
|
|
579
565
|
var UI_REGISTRY_INDEX_PATH = "packages/lism-ui/registry-index.json";
|
|
580
|
-
var
|
|
566
|
+
var SKILL_SOURCE_BASE = "skills";
|
|
567
|
+
var SKILL_NAMES = ["lism-css-guide", "lism-css-refactor"];
|
|
581
568
|
var TEMPLATES_PATH = "templates";
|
|
582
569
|
|
|
583
570
|
// ../../templates/manifest.ts
|
|
@@ -602,6 +589,17 @@ var TEMPLATES = [
|
|
|
602
589
|
description: { ja: "Vite + React \u30D9\u30FC\u30B9\u306E\u6700\u5C0F\u69CB\u6210", en: "Minimal Vite + React setup" },
|
|
603
590
|
previewUrl: `${PREVIEW_ORIGIN}/minimal-vite/`
|
|
604
591
|
},
|
|
592
|
+
{
|
|
593
|
+
slug: "minimal-next",
|
|
594
|
+
kind: "project",
|
|
595
|
+
category: "minimal",
|
|
596
|
+
stack: "next",
|
|
597
|
+
sourcePath: "minimal/next",
|
|
598
|
+
title: { ja: "Minimal Next", en: "Minimal Next" },
|
|
599
|
+
description: { ja: "Next.js (App Router) \u30D9\u30FC\u30B9\u306E\u6700\u5C0F\u69CB\u6210", en: "Minimal Next.js (App Router) setup" },
|
|
600
|
+
// preview サイト未配信・docs カード未整備のため draft(CLI 一覧・docs 本番ビルドから除外)
|
|
601
|
+
draft: true
|
|
602
|
+
},
|
|
605
603
|
{
|
|
606
604
|
slug: "blog-astro-minimal",
|
|
607
605
|
kind: "project",
|
|
@@ -780,7 +778,7 @@ async function runCreateWithTemplates({ template, targetDir, force = false, lang
|
|
|
780
778
|
await downloadTemplateSource(tpl, outDir, ref, force);
|
|
781
779
|
await applyLangOverlay(tpl, outDir, ref, resolvedLang);
|
|
782
780
|
ensureTemplateDownloaded(outDir, tpl);
|
|
783
|
-
postProcessTemplate(outDir, tpl, resolvedLang);
|
|
781
|
+
await postProcessTemplate(outDir, tpl, resolvedLang);
|
|
784
782
|
logger.success(t("create.created", { dir: outDir }));
|
|
785
783
|
printNextSteps(outDir, tpl);
|
|
786
784
|
}
|
|
@@ -911,7 +909,7 @@ async function applyLangOverlay(tpl, outDir, ref, lang) {
|
|
|
911
909
|
fs.rmSync(overlayDir, { recursive: true, force: true });
|
|
912
910
|
}
|
|
913
911
|
}
|
|
914
|
-
function postProcessTemplate(projectDir, tpl, lang) {
|
|
912
|
+
async function postProcessTemplate(projectDir, tpl, lang) {
|
|
915
913
|
if (tpl.kind === "static-html") return;
|
|
916
914
|
if (tpl.kind === "base-overlay" && tpl.rewritePackageName !== false) {
|
|
917
915
|
rewritePackageName(projectDir, tpl.slug);
|
|
@@ -921,7 +919,7 @@ function postProcessTemplate(projectDir, tpl, lang) {
|
|
|
921
919
|
rewritePackageName(projectDir, tpl.packageName ?? tpl.slug);
|
|
922
920
|
}
|
|
923
921
|
cleanupDevArtifacts(projectDir);
|
|
924
|
-
rewriteWorkspaceDeps(projectDir);
|
|
922
|
+
await rewriteWorkspaceDeps(projectDir);
|
|
925
923
|
}
|
|
926
924
|
function cleanupDevArtifacts(projectDir) {
|
|
927
925
|
const screenshotsDir = path.join(projectDir, "screenshots");
|
|
@@ -1078,31 +1076,69 @@ function rewritePackageName(projectDir, name) {
|
|
|
1078
1076
|
logger.warn(t("create.packageNameFailed", { reason: String(err) }));
|
|
1079
1077
|
}
|
|
1080
1078
|
}
|
|
1081
|
-
|
|
1079
|
+
var DEP_SECTIONS = ["dependencies", "devDependencies", "peerDependencies"];
|
|
1080
|
+
var REGISTRY_TIMEOUT_MS = 5e3;
|
|
1081
|
+
async function rewriteWorkspaceDeps(projectDir) {
|
|
1082
1082
|
const pkgPath = path.join(projectDir, "package.json");
|
|
1083
1083
|
if (!fs.existsSync(pkgPath)) return;
|
|
1084
1084
|
try {
|
|
1085
1085
|
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
|
|
1086
|
+
const names = /* @__PURE__ */ new Set();
|
|
1087
|
+
for (const section of DEP_SECTIONS) {
|
|
1088
|
+
const deps = pkg[section];
|
|
1089
|
+
if (!deps) continue;
|
|
1090
|
+
for (const [name, value] of Object.entries(deps)) {
|
|
1091
|
+
if (typeof value === "string" && value.startsWith("workspace:")) names.add(name);
|
|
1092
|
+
}
|
|
1093
|
+
}
|
|
1094
|
+
if (names.size === 0) return;
|
|
1095
|
+
const versions = await resolveWorkspaceVersions([...names]);
|
|
1086
1096
|
let touched = false;
|
|
1087
|
-
for (const
|
|
1088
|
-
const deps = pkg[
|
|
1097
|
+
for (const section of DEP_SECTIONS) {
|
|
1098
|
+
const deps = pkg[section];
|
|
1089
1099
|
if (!deps) continue;
|
|
1090
1100
|
for (const [name, value] of Object.entries(deps)) {
|
|
1091
|
-
if (typeof value
|
|
1092
|
-
|
|
1093
|
-
deps[name] = `^${LISM_CSS_VERSION}`;
|
|
1101
|
+
if (typeof value === "string" && value.startsWith("workspace:")) {
|
|
1102
|
+
deps[name] = `^${versions[name]}`;
|
|
1094
1103
|
touched = true;
|
|
1095
1104
|
}
|
|
1096
1105
|
}
|
|
1097
1106
|
}
|
|
1098
1107
|
if (touched) {
|
|
1099
1108
|
fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + "\n");
|
|
1100
|
-
logger.log(t("create.workspaceReplaced"
|
|
1109
|
+
logger.log(t("create.workspaceReplaced"));
|
|
1101
1110
|
}
|
|
1102
1111
|
} catch (err) {
|
|
1103
1112
|
logger.warn(t("create.workspaceFailed", { reason: String(err) }));
|
|
1104
1113
|
}
|
|
1105
1114
|
}
|
|
1115
|
+
async function resolveWorkspaceVersions(names) {
|
|
1116
|
+
const entries = await Promise.all(names.map(async (name) => [name, await resolveDepVersion(name)]));
|
|
1117
|
+
return Object.fromEntries(entries);
|
|
1118
|
+
}
|
|
1119
|
+
function bakedVersion(name) {
|
|
1120
|
+
return LISM_PACKAGE_VERSIONS[name] ?? LISM_PACKAGE_VERSIONS["lism-css"] ?? "unknown";
|
|
1121
|
+
}
|
|
1122
|
+
async function resolveDepVersion(name) {
|
|
1123
|
+
const baked = bakedVersion(name);
|
|
1124
|
+
if (!LISM_PACKAGE_VERSIONS[name]) return baked;
|
|
1125
|
+
const latest = await fetchLatestVersion(name);
|
|
1126
|
+
return latest ?? baked;
|
|
1127
|
+
}
|
|
1128
|
+
async function fetchLatestVersion(name) {
|
|
1129
|
+
const url = `${NPM_REGISTRY_BASE}/${name.replace(/\//g, "%2F")}/latest`;
|
|
1130
|
+
try {
|
|
1131
|
+
const res = await fetch(url, {
|
|
1132
|
+
headers: { accept: "application/json" },
|
|
1133
|
+
signal: AbortSignal.timeout(REGISTRY_TIMEOUT_MS)
|
|
1134
|
+
});
|
|
1135
|
+
if (!res.ok) return null;
|
|
1136
|
+
const data = await res.json();
|
|
1137
|
+
return typeof data.version === "string" ? data.version : null;
|
|
1138
|
+
} catch {
|
|
1139
|
+
return null;
|
|
1140
|
+
}
|
|
1141
|
+
}
|
|
1106
1142
|
|
|
1107
1143
|
export {
|
|
1108
1144
|
logger,
|
|
@@ -1117,7 +1153,8 @@ export {
|
|
|
1117
1153
|
UI_COMPONENTS_PATH,
|
|
1118
1154
|
UI_HELPER_PATH,
|
|
1119
1155
|
UI_REGISTRY_INDEX_PATH,
|
|
1120
|
-
|
|
1156
|
+
SKILL_SOURCE_BASE,
|
|
1157
|
+
SKILL_NAMES,
|
|
1121
1158
|
CLI_VERSION,
|
|
1122
1159
|
runCreate,
|
|
1123
1160
|
createCommand
|