ksk-design-system 1.56.0 → 1.58.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/AGENTS.md +11 -0
- package/CLAUDE.md +11 -0
- package/DESIGN.md +46 -0
- package/MIGRATION.md +43 -0
- package/bin/check-migration.js +517 -0
- package/bin/init.js +3 -2
- package/bin/lint.js +79 -4
- package/bin/product-theme-override.js +52 -0
- package/contracts/components.json +61 -13
- package/contracts/deprecations.json +92 -0
- package/contracts/product-theme-overrides.json +171 -0
- package/contracts/rules.json +14 -2
- package/contracts/token-hex-cache.json +1 -1
- package/dist/class-names.js +1 -1
- package/dist/index.js +4533 -4361
- package/dist/native/ui.js +1665 -1552
- package/dist/{native-VkkXnB0e.js → native-DlR32_Lk.js} +8 -0
- package/dist/native.js +1 -1
- package/dist/{server-variants-usol4GK5.js → server-variants-B3uIQjUG.js} +24 -24
- package/dist/types/components/patterns/admin/data-table.d.ts +53 -4
- package/dist/types/components/patterns/chip-selector.d.ts +23 -7
- package/dist/types/components/patterns/list-item.d.ts +35 -2
- package/dist/types/components/patterns/search-bar.d.ts +9 -1
- package/dist/types/components/ui/alert-dialog.d.ts +1 -1
- package/dist/types/components/ui/dialog.d.ts +1 -1
- package/dist/types/components/ui/dropdown-menu.d.ts +1 -1
- package/dist/types/components/ui/pagination.d.ts +21 -4
- package/dist/types/components/ui/portal-container.d.ts +50 -0
- package/dist/types/components/ui/select.d.ts +3 -0
- package/dist/types/index.d.ts +7 -1
- package/dist/types/lib/build-page-items.d.ts +22 -0
- package/dist/types/lib/server-variants/button-variants.d.ts +7 -0
- package/dist/types/native/components/AppHeader.d.ts +9 -1
- package/dist/types/native/components/ChipSelector.d.ts +22 -1
- package/dist/types/native/components/Dialog.d.ts +17 -1
- package/dist/types/native/components/ListItem.d.ts +28 -1
- package/dist/types/native/components/Sheet.d.ts +10 -0
- package/dist/types/native/components/index.d.ts +3 -3
- package/dist/types/native/index.d.ts +2 -0
- package/dist/types/native/safe-area.d.ts +62 -0
- package/dist/types/native/theme/SafeAreaInsetsProvider.d.ts +18 -0
- package/dist/types/tokens/native/scales.d.ts +8 -0
- package/package.json +5 -2
- package/scripts/codemod/README.md +10 -8
- package/src/components/COMPONENT_LOOKUP.md +6 -5
- package/src/preset.css +8 -0
- package/src/styles/product-theme.css +90 -0
- package/src/styles/source-safelist.css +36 -4
- package/tokens.json +3 -1
- package/scripts/codemod/check-migration.mjs +0 -129
package/AGENTS.md
CHANGED
|
@@ -38,6 +38,7 @@ UI を書く前に必ず確認すること:
|
|
|
38
38
|
- [ ] CSS でベンダープレフィックス併記する場合、**`-webkit-` を先・標準形を後**に書いたか(消費側の minifier が同一プロパティとして dedupe し後勝ちのみ残すため。逆順だと Firefox で静かに無効化。`node scripts/check-prefix-order.mjs` が CI で検出)
|
|
39
39
|
- [ ] flex 行(flex-col でない flex)で shrink-0 の兄弟と可変テキストを並べるとき、テキスト側に `flex-1`(+ 必要なら `min-w-[...]` 下限)を付けたか(`min-w-0` だけだと 1 文字ずつ折り返すまで潰れる。issue #293。`node scripts/check-flex-shrink.mjs` が CI で検出、例外は `ksk-lint-ignore KFX001 -- 理由`)
|
|
40
40
|
- [ ] クラス名は**完全な文字列**で書いたか(`` `bg-${color}` `` のような動的合成は静的抽出できず消費側で CSS が生成されない。分岐は三項演算子か cva variant で。`scripts/generate-source-safelist.mjs` が検出)
|
|
41
|
+
- [ ] コントロールの寸法(高さ・横 padding・角丸・カード余白)を書くとき、固定の `h-10` / `px-4` / `p-6` ではなく product theme の公開変数(`h-[var(--Control-Height-Md)]` / `p-[var(--Product-Card-Padding)]`)を参照したか(issue #364。許可リストは `contracts/product-theme-overrides.json`。Button 系は `--Control-*`、Input/Textarea/SelectTrigger は `--Field-*` とスケールが別)
|
|
41
42
|
- [ ] `.tsx` 編集後に `bash scripts/lint-scratch.sh`、コンポーネント増減時は `npm run check` を実行したか
|
|
42
43
|
- [ ] `FormField` を import する前にどちらか確認したか(react-hook-form の Controller と統合するなら `RhfFormField`=`ui/form` の `FormField` を index.ts で別名 export したもの。単純な label+error 表示は `patterns/form-field` の `FormField`。迷ったら後者)
|
|
43
44
|
|
|
@@ -77,6 +78,7 @@ tokens.json # カラー・スペーシング・シ
|
|
|
77
78
|
contracts/token-hex-cache.json # semantic トークンのデフォルトテーマ解決済み hex(テーマ依存キーは meta.themeDependentKeys 参照・自動生成)
|
|
78
79
|
src/components/COMPONENT_LOOKUP.md # バリアント・インポートパス一覧(自動生成)
|
|
79
80
|
contracts/screen-patterns.json # 画面実装前にどのシェル/パターンを使うかの decisionTree・crudMatrix
|
|
81
|
+
contracts/product-theme-overrides.json # プロダクト単位で上書きしてよい CSS 変数の許可リスト(寸法・面)
|
|
80
82
|
contracts/composition.json # 選んだパターン内部の並べ方(骨格構造・余白リズム・カード階層・テキスト階層・CTA優先度)
|
|
81
83
|
```
|
|
82
84
|
|
|
@@ -220,6 +222,8 @@ Brand色を差し替え(10行)→ Primitive Layer → Semantic Layer → Bri
|
|
|
220
222
|
| **src/components/COMPONENT_LOOKUP.md** | 全コンポーネントのバリアント・インポートパス一覧(自動生成) |
|
|
221
223
|
| **DESIGN.md** | AI エージェント向け視覚言語サマリ(トークン+意図・voice・motion) |
|
|
222
224
|
| **contracts/screen-patterns.json** | 画面実装前にどのシェル/パターンを使うかを決める decisionTree・crudMatrix |
|
|
225
|
+
| **contracts/deprecations.json** | 非推奨 API の正本台帳(移行先・削除予定。MIGRATION.md の一覧節と check-migration CLI の入力) |
|
|
226
|
+
| **contracts/product-theme-overrides.json** | プロダクト単位で上書きしてよい CSS 変数の許可リスト(寸法・面。既定値は src/styles/product-theme.css・lint は P049) |
|
|
223
227
|
| **contracts/composition.json** | 選んだパターン内部の並べ方(骨格構造・余白リズム・カード階層・テキスト階層・CTA優先度) |
|
|
224
228
|
|
|
225
229
|
---
|
|
@@ -241,6 +245,7 @@ src/
|
|
|
241
245
|
│ ├── semantic.css # Layer 2: 用途別トークン
|
|
242
246
|
│ ├── typography.css # typo-* ユーティリティ
|
|
243
247
|
│ ├── motion.css # duration / easing トークン(--Motion-*)
|
|
248
|
+
│ ├── product-theme.css # プロダクト単位で上書きしてよい寸法・面の公開変数(issue #364)
|
|
244
249
|
│ └── source-safelist.css # @source safelist(自動生成・手で編集しない / issue #258)
|
|
245
250
|
├── themes/ # default / orange / green / violet / blue
|
|
246
251
|
├── preset.css # 外部プロジェクト向けプリセット
|
|
@@ -270,6 +275,12 @@ npm run generate:lookup
|
|
|
270
275
|
# DESIGN.md contract 検査
|
|
271
276
|
npm run lint:design
|
|
272
277
|
|
|
278
|
+
# 非推奨 API 台帳の整合検査(台帳 ⇔ 実ソースの @deprecated JSDoc)
|
|
279
|
+
npm run lint:deprecations
|
|
280
|
+
|
|
281
|
+
# MIGRATION.md の「非推奨 API 一覧」節を台帳から再生成
|
|
282
|
+
npm run generate:migration-doc
|
|
283
|
+
|
|
273
284
|
# @source safelist 再生成(新しい Tailwind クラスを使ったら実行)
|
|
274
285
|
npm run generate:safelist
|
|
275
286
|
|
package/CLAUDE.md
CHANGED
|
@@ -38,6 +38,7 @@ UI を書く前に必ず確認すること:
|
|
|
38
38
|
- [ ] CSS でベンダープレフィックス併記する場合、**`-webkit-` を先・標準形を後**に書いたか(消費側の minifier が同一プロパティとして dedupe し後勝ちのみ残すため。逆順だと Firefox で静かに無効化。`node scripts/check-prefix-order.mjs` が CI で検出)
|
|
39
39
|
- [ ] flex 行(flex-col でない flex)で shrink-0 の兄弟と可変テキストを並べるとき、テキスト側に `flex-1`(+ 必要なら `min-w-[...]` 下限)を付けたか(`min-w-0` だけだと 1 文字ずつ折り返すまで潰れる。issue #293。`node scripts/check-flex-shrink.mjs` が CI で検出、例外は `ksk-lint-ignore KFX001 -- 理由`)
|
|
40
40
|
- [ ] クラス名は**完全な文字列**で書いたか(`` `bg-${color}` `` のような動的合成は静的抽出できず消費側で CSS が生成されない。分岐は三項演算子か cva variant で。`scripts/generate-source-safelist.mjs` が検出)
|
|
41
|
+
- [ ] コントロールの寸法(高さ・横 padding・角丸・カード余白)を書くとき、固定の `h-10` / `px-4` / `p-6` ではなく product theme の公開変数(`h-[var(--Control-Height-Md)]` / `p-[var(--Product-Card-Padding)]`)を参照したか(issue #364。許可リストは `contracts/product-theme-overrides.json`。Button 系は `--Control-*`、Input/Textarea/SelectTrigger は `--Field-*` とスケールが別)
|
|
41
42
|
- [ ] `.tsx` 編集後に `bash scripts/lint-scratch.sh`、コンポーネント増減時は `npm run check` を実行したか
|
|
42
43
|
- [ ] `FormField` を import する前にどちらか確認したか(react-hook-form の Controller と統合するなら `RhfFormField`=`ui/form` の `FormField` を index.ts で別名 export したもの。単純な label+error 表示は `patterns/form-field` の `FormField`。迷ったら後者)
|
|
43
44
|
|
|
@@ -67,6 +68,7 @@ tokens.json # カラー・スペーシング・シ
|
|
|
67
68
|
contracts/token-hex-cache.json # semantic トークンのデフォルトテーマ解決済み hex(テーマ依存キーは meta.themeDependentKeys 参照・自動生成)
|
|
68
69
|
src/components/COMPONENT_LOOKUP.md # バリアント・インポートパス一覧(自動生成)
|
|
69
70
|
contracts/screen-patterns.json # 画面実装前にどのシェル/パターンを使うかの decisionTree・crudMatrix
|
|
71
|
+
contracts/product-theme-overrides.json # プロダクト単位で上書きしてよい CSS 変数の許可リスト(寸法・面)
|
|
70
72
|
contracts/composition.json # 選んだパターン内部の並べ方(骨格構造・余白リズム・カード階層・テキスト階層・CTA優先度)
|
|
71
73
|
```
|
|
72
74
|
|
|
@@ -220,6 +222,8 @@ Brand色を差し替え(10行)→ Primitive Layer → Semantic Layer → Bri
|
|
|
220
222
|
| **src/components/COMPONENT_LOOKUP.md** | 全コンポーネントのバリアント・インポートパス一覧(自動生成) |
|
|
221
223
|
| **DESIGN.md** | AI エージェント向け視覚言語サマリ(トークン+意図・voice・motion) |
|
|
222
224
|
| **contracts/screen-patterns.json** | 画面実装前にどのシェル/パターンを使うかを決める decisionTree・crudMatrix |
|
|
225
|
+
| **contracts/deprecations.json** | 非推奨 API の正本台帳(移行先・削除予定。MIGRATION.md の一覧節と check-migration CLI の入力) |
|
|
226
|
+
| **contracts/product-theme-overrides.json** | プロダクト単位で上書きしてよい CSS 変数の許可リスト(寸法・面。既定値は src/styles/product-theme.css・lint は P049) |
|
|
223
227
|
| **contracts/composition.json** | 選んだパターン内部の並べ方(骨格構造・余白リズム・カード階層・テキスト階層・CTA優先度) |
|
|
224
228
|
|
|
225
229
|
---
|
|
@@ -241,6 +245,7 @@ src/
|
|
|
241
245
|
│ ├── semantic.css # Layer 2: 用途別トークン
|
|
242
246
|
│ ├── typography.css # typo-* ユーティリティ
|
|
243
247
|
│ ├── motion.css # duration / easing トークン(--Motion-*)
|
|
248
|
+
│ ├── product-theme.css # プロダクト単位で上書きしてよい寸法・面の公開変数(issue #364)
|
|
244
249
|
│ └── source-safelist.css # @source safelist(自動生成・手で編集しない / issue #258)
|
|
245
250
|
├── themes/ # default / orange / green / violet / blue
|
|
246
251
|
├── preset.css # 外部プロジェクト向けプリセット
|
|
@@ -270,6 +275,12 @@ npm run generate:lookup
|
|
|
270
275
|
# DESIGN.md contract 検査
|
|
271
276
|
npm run lint:design
|
|
272
277
|
|
|
278
|
+
# 非推奨 API 台帳の整合検査(台帳 ⇔ 実ソースの @deprecated JSDoc)
|
|
279
|
+
npm run lint:deprecations
|
|
280
|
+
|
|
281
|
+
# MIGRATION.md の「非推奨 API 一覧」節を台帳から再生成
|
|
282
|
+
npm run generate:migration-doc
|
|
283
|
+
|
|
273
284
|
# @source safelist 再生成(新しい Tailwind クラスを使ったら実行)
|
|
274
285
|
npm run generate:safelist
|
|
275
286
|
|
package/DESIGN.md
CHANGED
|
@@ -171,6 +171,10 @@ KSK の必須正本・publish 依存にせず、KSK 固有の multi-theme / nati
|
|
|
171
171
|
影は5段(`--shadow-sm/md/lg/dialog/tooltip`)。面は md、浮く要素(dropdown/popover)は lg、
|
|
172
172
|
モーダルは dialog。**境界は影+1px罫線**で表現し、濃い影の多用は避ける。
|
|
173
173
|
|
|
174
|
+
横スクロール中の固定列だけは方向付きの影を使う(`--shadow-sticky-inline-start` /
|
|
175
|
+
`--shadow-sticky-inline-end`)。命名は論理方向で、inline-start = 行の先頭側に固定された列が
|
|
176
|
+
末尾方向へ落とす影。生の `rgba()` を直書きせず、必ずこのトークンを参照する。
|
|
177
|
+
|
|
174
178
|
## Shapes
|
|
175
179
|
|
|
176
180
|
角丸はトークン化(ベタ書き禁止)。**面 < モーダル < シート**の順で丸くなる。
|
|
@@ -265,6 +269,48 @@ Portal に載る要素(Dialog / Sheet / Popover / Toast 等)は DOM 上の
|
|
|
265
269
|
`z-10` / `z-20` のような小さい素の値は「コンポーネント内部の重なり」用途で、
|
|
266
270
|
このグローバルスケールの対象外。
|
|
267
271
|
|
|
272
|
+
## Product Theme Override(プロダクト単位の寸法調整)
|
|
273
|
+
|
|
274
|
+
マルチテーマ(Brand 10行差し替え)が切り替えるのは**色だけ**。コントロールの高さ・横 padding・
|
|
275
|
+
角丸・カードの余白は、消費プロダクトが CSS 変数を上書きして調整する。className を何十箇所も
|
|
276
|
+
書き換える運用(exam-kit の Card 角丸13箇所 = issue #332)を、変数1行に畳むための層。
|
|
277
|
+
|
|
278
|
+
既定値は `src/styles/product-theme.css`、**上書きしてよい変数の許可リストは
|
|
279
|
+
`contracts/product-theme-overrides.json` が正本**。ここに無い変数(`--Hover-*` / `--Z-*` /
|
|
280
|
+
`--glass-*` など)は内部実装で、上書きすると DS を上げた瞬間に静かに壊れる。
|
|
281
|
+
`npx ksk-ds lint <consumer>/src` の **P049** が消費側 CSS を検査する。
|
|
282
|
+
|
|
283
|
+
| family | 変数 | 既定値 | 使う部品 |
|
|
284
|
+
|---|---|---|---|
|
|
285
|
+
| Control | `--Control-Height-{Xs,Sm,Md,Lg,Xl}` | 24 / 32 / 40 / 48 / 56px | Button の size |
|
|
286
|
+
| Control | `--Control-Padding-X-{Xs,Sm,Md,Lg,Xl}` | 8 / 12 / 16 / 24 / 32px | Button の size |
|
|
287
|
+
| Control | `--Control-Gap` / `--Control-Radius` | 8px / ピル | Button のアイコン間隔・角丸 |
|
|
288
|
+
| Field | `--Field-Height-{Sm,Md,Lg}` | 36 / 48 / 56px | Input / SelectTrigger |
|
|
289
|
+
| Field | `--Field-Padding-X-{Sm,Md,Lg}` / `--Field-Padding-Y` | 10 / 12 / 16px / 8px | Input / Textarea / SelectTrigger |
|
|
290
|
+
| Field | `--Field-Min-Height` / `--Field-Radius` | 80px / 8px | Textarea / フィールド共通の角丸 |
|
|
291
|
+
| Product | `--Product-Card-Padding` / `--Product-Card-Gap` | 24px / 24px | Card(default バリアント) |
|
|
292
|
+
| Product | `--Product-Page-Padding-Y` | 24px | AdminShell の `<main>` 縦 padding |
|
|
293
|
+
| Chip | `--Chip-Radius` | ピル | Chip の pill 角丸 |
|
|
294
|
+
| Tabs | `--Control-Height-Md` / `--Control-Padding-X-{Sm,Md}` / `--Control-Radius` / `--Field-Radius` | 40px / 12・16px / ピル / 8px | TabsList / TabsTrigger(Control・Field を再利用) |
|
|
295
|
+
|
|
296
|
+
- **Control と Field はスケールが別**。ksk のフィールドは元々ボタンより背が高く(Input は 48px、
|
|
297
|
+
Button の既定は 40px)、横 padding も狭い。片方に畳むとどちらかの実寸が変わるので分けている。
|
|
298
|
+
- 参照は arbitrary value(`h-[var(--Control-Height-Md)]`)。Motion / Layering / Radius と同じ
|
|
299
|
+
「semantic 変数を Tailwind の任意値で読む」流儀に揃えてある。`@theme` のユーティリティ化はしない
|
|
300
|
+
(`:root` 以外のスコープに当てた上書きが効かなくなるため)。
|
|
301
|
+
- 上書きは `:root` でも任意の要素でもよい。カスケードだけで解決するので Server Component のまま使える。
|
|
302
|
+
- タップ領域(`Button size="icon-xl"` = 44px)と FAB(58px)は意図的にこのスケールの外に置いている。
|
|
303
|
+
product theme で縮められると HIG の最小タップ領域を割るため。同じ理由で **Chip の高さ・横 padding**
|
|
304
|
+
(sm/md/lg の縦 margin が「44px タッチターゲット - 本体高さ」の手計算値)と **Tabs の pill 高さ
|
|
305
|
+
(44px、Control スケールの 40/48px のどちらとも不一致)** も配線していない。
|
|
306
|
+
- **Checkbox / RadioGroup / Switch**(20px の `size-5` トグル)は「コントロールの高さ」という概念が
|
|
307
|
+
当てはまらないため、この契約の対象外。
|
|
308
|
+
- **AppShell / MarketingShell / MobileAppShell** はページ本文の padding をシェル自身が持たず
|
|
309
|
+
(`Container` の gutter か呼び出し側の `contentClassName` に委ねている)、対象外。
|
|
310
|
+
`AdminShell` の `<main>` だけが `--Product-Page-Padding-Y` を持つ。
|
|
311
|
+
- 色は従来どおり semantic トークン(`--Surface-*` / `--Text-*` / `--Brand-*`)と Brand ランプの
|
|
312
|
+
上書きで調整する。カードの面は `--card-surface`、角丸は `--Radius-Surface` が既存の公開シーム。
|
|
313
|
+
|
|
268
314
|
## Components
|
|
269
315
|
|
|
270
316
|
代表例(トークン参照で構成)。
|
package/MIGRATION.md
CHANGED
|
@@ -3,6 +3,40 @@
|
|
|
3
3
|
メジャーバージョン間の移行ガイド。
|
|
4
4
|
patch / minor は原則破壊変更なし、自動アップグレード可(例外: **v1.34.0 で npm パッケージ名を変更**。import の置換が必要。下記参照)。
|
|
5
5
|
|
|
6
|
+
<!-- deprecations:start(自動生成・手で編集しない) -->
|
|
7
|
+
|
|
8
|
+
## 非推奨 API 一覧
|
|
9
|
+
|
|
10
|
+
正本は [`contracts/deprecations.json`](./contracts/deprecations.json)。この節はそこから生成しています。
|
|
11
|
+
|
|
12
|
+
消費側での残存件数は次のコマンドで数えられます(read-only・残件があれば exit 1):
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npx ksk-ds check-migration ./src
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
| API | 使われ方 | 移行先 | 非推奨にした版 | 削除予定 |
|
|
19
|
+
| --- | --- | --- | --- | --- |
|
|
20
|
+
| `ListItem.interactive` | `<ListItem interactive>` | href または onClick を ListItem 自体へ渡す | 1.46.0 | v2.0.0 |
|
|
21
|
+
| `ChipSelector.multiple` | `<ChipSelector multiple>` | selectionMode(multiple={false} は selectionMode="single"、multiple は selectionMode="multiple") | unreleased | v2.0.0 |
|
|
22
|
+
| `PillToggle.onValueChange` | `<PillToggle onValueChange>` | onChange | 1.49.0 | v2.0.0 |
|
|
23
|
+
| `ProductCard.deliveryLabel` | `<ProductCard deliveryLabel>` | なし(v1.30.0 以降は描画されないため、渡している箇所は削除する) | 1.30.1 | v2.0.0 |
|
|
24
|
+
| `Progress.tone` | `<Progress tone>` | variant | 1.40.1 | v2.0.0 |
|
|
25
|
+
|
|
26
|
+
各エントリの補足:
|
|
27
|
+
|
|
28
|
+
- **ListItem.interactive**(issue #207) — 外側の Link / button でラップする既存コードの視覚互換用に残している。 実装: src/components/patterns/list-item.tsx
|
|
29
|
+
- **ChipSelector.multiple**(issue #352) — 既定が true(複数選択)で「渡し忘れると静かに壊れる側」に倒れているため新規実装では使わない。 実装: src/components/patterns/chip-selector.tsx / src/native/components/ChipSelector.tsx
|
|
30
|
+
- **PillToggle.onValueChange**(issue #264) — 後方互換エイリアス。onChange を併せて渡した場合は onChange が優先される。 実装: src/components/ui/pill-toggle.tsx
|
|
31
|
+
- **ProductCard.deliveryLabel** — 既存 consumer の型互換のためだけに残している no-op prop。 実装: src/components/patterns/commerce/product-card.tsx
|
|
32
|
+
- **Progress.tone** — React Native 版のみ。既存 RN consumer 向けの互換。 実装: src/native/components/Progress.tsx
|
|
33
|
+
|
|
34
|
+
削除は「全消費リポで `check-migration` の残件が 0」を条件に、`削除予定` のメジャーリリースで行います。
|
|
35
|
+
|
|
36
|
+
<!-- deprecations:end -->
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
6
40
|
## v2.0 (未リリース)
|
|
7
41
|
|
|
8
42
|
まだメジャー破壊変更の予定はなし。
|
|
@@ -133,6 +167,15 @@ export default [
|
|
|
133
167
|
|
|
134
168
|
これで codemod が拾えなかった旧 API の使用を検出できる。
|
|
135
169
|
|
|
170
|
+
### Step 3.5. 非推奨 API の残存を数える
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
npx ksk-ds check-migration ./src
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
`contracts/deprecations.json` の非推奨 API が何件残っているかを、識別子別・ファイル別に出す
|
|
177
|
+
(read-only・残件があれば exit 1 なので CI にも置ける)。
|
|
178
|
+
|
|
136
179
|
### Step 4. 動作確認
|
|
137
180
|
|
|
138
181
|
```bash
|