foundruu 0.4.2 → 0.5.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 +9 -4
- package/assets/templates/features/docker/docker-compose.yml.hbs +70 -0
- package/dist/cli.js +3 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.js +6 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts +4 -0
- package/dist/commands/init.js +31 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/update.d.ts +2 -0
- package/dist/commands/update.js +1 -0
- package/dist/commands/update.js.map +1 -1
- package/dist/core/sync.d.ts +3 -0
- package/dist/core/sync.js +16 -1
- package/dist/core/sync.js.map +1 -1
- package/dist/doctor/report.d.ts +3 -0
- package/dist/doctor/report.js +89 -0
- package/dist/doctor/report.js.map +1 -0
- package/dist/registry/templates.d.ts +2 -0
- package/dist/registry/templates.js +15 -1
- package/dist/registry/templates.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -22,11 +22,11 @@ npm install && npm run build && npm link
|
|
|
22
22
|
|
|
23
23
|
| コマンド | 説明 |
|
|
24
24
|
|---|---|
|
|
25
|
-
| `foundruu init [--template <id>] [--
|
|
25
|
+
| `foundruu init [--template <id>] [--features <list>]` | テンプレート + Workflow + Rules + Doctor設定を一括導入 |
|
|
26
26
|
| `foundruu workflow install` | Workflow / Prompt / Rules(`.ai/`)のみを既存リポジトリへ導入 |
|
|
27
27
|
| `foundruu doctor [--json]` | リポジトリがAI開発可能な状態か診断(fail ありで exit 1) |
|
|
28
|
-
| `foundruu doctor --deep [--since <ref>]` |
|
|
29
|
-
| `foundruu update [--force]` | Workflow / Prompt / Rules
|
|
28
|
+
| `foundruu doctor --deep [--since <ref>] [--report <dir>]` | AI開発プロセス品質をスコア診断(md/html/json レポート出力可) |
|
|
29
|
+
| `foundruu update [--force] [--diff] [--only <paths...>]` | Workflow / Prompt / Rules を最新へ更新(パス指定・差分確認可) |
|
|
30
30
|
| `foundruu session start <name>` / `session list` | AI開発セッションの作成 / 一覧 |
|
|
31
31
|
| `foundruu templates` | 利用可能なテンプレート一覧 |
|
|
32
32
|
| `foundruu plugins` | 読み込まれているプラグイン一覧 |
|
|
@@ -38,7 +38,7 @@ npm install && npm run build && npm link
|
|
|
38
38
|
```bash
|
|
39
39
|
# ① 新しいリポジトリにAI開発環境を構築
|
|
40
40
|
mkdir my-app && cd my-app && git init
|
|
41
|
-
foundruu init --template typescript --name my-app
|
|
41
|
+
foundruu init --template typescript --name my-app --features docker,vitest
|
|
42
42
|
|
|
43
43
|
# ② 既存リポジトリには Workflow だけ導入
|
|
44
44
|
foundruu workflow install
|
|
@@ -135,6 +135,11 @@ jobs:
|
|
|
135
135
|
|
|
136
136
|
結果はジョブサマリに表形式で出力されます。
|
|
137
137
|
|
|
138
|
+
## VSCode Extension
|
|
139
|
+
|
|
140
|
+
[vscode-extension/](vscode-extension/) にコマンドパレット連携の拡張があります(Doctor / セッション作成 / Workflow 導入・更新)。
|
|
141
|
+
`npx @vscode/vsce package` で .vsix を生成してインストールできます。
|
|
142
|
+
|
|
138
143
|
## 開発
|
|
139
144
|
|
|
140
145
|
```bash
|
|
@@ -1,3 +1,72 @@
|
|
|
1
|
+
{{#eq language "laravel"}}
|
|
2
|
+
services:
|
|
3
|
+
app:
|
|
4
|
+
build: .
|
|
5
|
+
ports:
|
|
6
|
+
- "8000:80"
|
|
7
|
+
env_file:
|
|
8
|
+
- .env
|
|
9
|
+
volumes:
|
|
10
|
+
- .:/var/www
|
|
11
|
+
- /var/www/vendor
|
|
12
|
+
depends_on:
|
|
13
|
+
- db
|
|
14
|
+
restart: unless-stopped
|
|
15
|
+
|
|
16
|
+
db:
|
|
17
|
+
image: mysql:8.4
|
|
18
|
+
environment:
|
|
19
|
+
MYSQL_DATABASE: ${DB_DATABASE:-app}
|
|
20
|
+
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:-secret}
|
|
21
|
+
ports:
|
|
22
|
+
- "3306:3306"
|
|
23
|
+
volumes:
|
|
24
|
+
- db-data:/var/lib/mysql
|
|
25
|
+
restart: unless-stopped
|
|
26
|
+
|
|
27
|
+
volumes:
|
|
28
|
+
db-data:
|
|
29
|
+
{{/eq}}
|
|
30
|
+
{{#eq language "python"}}
|
|
31
|
+
services:
|
|
32
|
+
app:
|
|
33
|
+
build: .
|
|
34
|
+
ports:
|
|
35
|
+
- "8000:8000"
|
|
36
|
+
env_file:
|
|
37
|
+
- .env
|
|
38
|
+
volumes:
|
|
39
|
+
- .:/app
|
|
40
|
+
restart: unless-stopped
|
|
41
|
+
{{/eq}}
|
|
42
|
+
{{#eq language "typescript"}}
|
|
43
|
+
services:
|
|
44
|
+
app:
|
|
45
|
+
build: .
|
|
46
|
+
ports:
|
|
47
|
+
- "3000:3000"
|
|
48
|
+
env_file:
|
|
49
|
+
- .env
|
|
50
|
+
volumes:
|
|
51
|
+
- .:/app
|
|
52
|
+
- /app/node_modules
|
|
53
|
+
restart: unless-stopped
|
|
54
|
+
{{/eq}}
|
|
55
|
+
{{#eq language "nextjs"}}
|
|
56
|
+
services:
|
|
57
|
+
app:
|
|
58
|
+
build: .
|
|
59
|
+
ports:
|
|
60
|
+
- "3000:3000"
|
|
61
|
+
env_file:
|
|
62
|
+
- .env
|
|
63
|
+
volumes:
|
|
64
|
+
- .:/app
|
|
65
|
+
- /app/node_modules
|
|
66
|
+
- /app/.next
|
|
67
|
+
restart: unless-stopped
|
|
68
|
+
{{/eq}}
|
|
69
|
+
{{#eq language "nuxt"}}
|
|
1
70
|
services:
|
|
2
71
|
app:
|
|
3
72
|
build: .
|
|
@@ -9,3 +78,4 @@ services:
|
|
|
9
78
|
- .:/app
|
|
10
79
|
- /app/node_modules
|
|
11
80
|
restart: unless-stopped
|
|
81
|
+
{{/eq}}
|
package/dist/cli.js
CHANGED
|
@@ -37,6 +37,7 @@ program
|
|
|
37
37
|
.option("-t, --template <id>", "使用するテンプレートID(未指定なら対話で選択)")
|
|
38
38
|
.option("-n, --name <name>", "プロジェクト名(デフォルト: ディレクトリ名)")
|
|
39
39
|
.option("-d, --description <text>", "プロジェクトの説明")
|
|
40
|
+
.option("-f, --features <list>", "導入する feature をカンマ区切りで指定(例: docker,vitest)")
|
|
40
41
|
.option("-y, --yes", "対話プロンプトを出さずデフォルト値で実行する")
|
|
41
42
|
.action(async (opts) => {
|
|
42
43
|
await wrap(() => (0, init_1.runInit)(process.cwd(), opts));
|
|
@@ -54,6 +55,7 @@ program
|
|
|
54
55
|
.option("--json", "JSON形式で出力する")
|
|
55
56
|
.option("--deep", "docs/ と git 差分から AI開発プロセスの品質をスコア診断する")
|
|
56
57
|
.option("--since <ref>", "--deep の差分比較基準", "main")
|
|
58
|
+
.option("--report <dir>", "--deep のレポート(md/html/json)を書き出すディレクトリ")
|
|
57
59
|
.action(async (opts) => {
|
|
58
60
|
await wrap(() => (0, doctor_1.runDoctorCommand)(process.cwd(), opts));
|
|
59
61
|
});
|
|
@@ -63,6 +65,7 @@ program
|
|
|
63
65
|
.option("-f, --force", "ユーザー編集済みファイルも上書きする")
|
|
64
66
|
.option("--diff", "差分の表示のみで書き込まない")
|
|
65
67
|
.option("--local", "GitHub から取得せず CLI 同梱アセットを使う")
|
|
68
|
+
.option("--only <paths...>", "指定パスのみ更新する(例: --only .ai/workflows .ai/prompts/session-workflow.md)")
|
|
66
69
|
.action(async (opts) => {
|
|
67
70
|
await wrap(() => (0, update_1.runUpdate)(process.cwd(), opts));
|
|
68
71
|
});
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AACA,yCAAoC;AACpC,0CAA0C;AAC1C,kDAAsD;AACtD,8CAAqD;AACrD,8CAA8C;AAC9C,gDAAgE;AAChE,0CAA2C;AAC3C,0CAAoC;AACpC,oDAAiD;AACjD,4CAA6C;AAC7C,4CAAyC;AAEzC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,sCAAsC,CAAC;KACnD,OAAO,CAAC,IAAA,mBAAU,GAAE,CAAC,CAAC;AAEzB,MAAM,IAAI,GAAG,KAAK,EAAE,EAA8B,EAAiB,EAAE;IACnE,IAAI,CAAC;QACH,MAAM,EAAE,EAAE,CAAC;IACb,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,+BAA+B;QAC/B,IAAK,GAAa,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAC9C,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC;YACvB,OAAO;QACT,CAAC;QACD,YAAG,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;QAClC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC,CAAC;AAEF,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,qDAAqD,CAAC;KAClE,MAAM,CAAC,qBAAqB,EAAE,0BAA0B,CAAC;KACzD,MAAM,CAAC,mBAAmB,EAAE,yBAAyB,CAAC;KACtD,MAAM,CAAC,0BAA0B,EAAE,WAAW,CAAC;KAC/C,MAAM,CAAC,WAAW,EAAE,wBAAwB,CAAC;KAC7C,MAAM,CAAC,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/doctor.js
CHANGED
|
@@ -7,12 +7,18 @@ exports.runDoctorCommand = runDoctorCommand;
|
|
|
7
7
|
const picocolors_1 = __importDefault(require("picocolors"));
|
|
8
8
|
const runner_1 = require("../doctor/runner");
|
|
9
9
|
const deep_1 = require("../doctor/deep");
|
|
10
|
+
const report_1 = require("../doctor/report");
|
|
10
11
|
const logger_1 = require("../core/logger");
|
|
11
12
|
function scoreColor(score) {
|
|
12
13
|
return score >= 80 ? picocolors_1.default.green : score >= 50 ? picocolors_1.default.yellow : picocolors_1.default.red;
|
|
13
14
|
}
|
|
14
15
|
function runDeep(cwd, options) {
|
|
15
16
|
const report = (0, deep_1.runDeepDoctor)(cwd, options.since ?? "main");
|
|
17
|
+
if (options.report) {
|
|
18
|
+
const files = (0, report_1.writeDeepReports)(report, options.report);
|
|
19
|
+
for (const f of files)
|
|
20
|
+
logger_1.log.step(`レポート出力: ${f}`);
|
|
21
|
+
}
|
|
16
22
|
if (options.json) {
|
|
17
23
|
console.log(JSON.stringify(report, null, 2));
|
|
18
24
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -2,7 +2,11 @@ export interface InitOptions {
|
|
|
2
2
|
template?: string;
|
|
3
3
|
name?: string;
|
|
4
4
|
description?: string;
|
|
5
|
+
/** カンマ区切りの feature 指定(テンプレートのデフォルトを上書き) */
|
|
6
|
+
features?: string;
|
|
5
7
|
/** 対話プロンプトを出さずデフォルト値で進める */
|
|
6
8
|
yes?: boolean;
|
|
7
9
|
}
|
|
10
|
+
/** --features のパースと検証。テンプレートデフォルトを上書きする */
|
|
11
|
+
export declare function resolveFeatures(spec: string | undefined, defaults: string[]): string[];
|
|
8
12
|
export declare function runInit(cwd: string, rawOptions: InitOptions): Promise<void>;
|
package/dist/commands/init.js
CHANGED
|
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.resolveFeatures = resolveFeatures;
|
|
6
7
|
exports.runInit = runInit;
|
|
7
8
|
const fs_1 = __importDefault(require("fs"));
|
|
8
9
|
const path_1 = __importDefault(require("path"));
|
|
@@ -12,6 +13,17 @@ const copier_1 = require("../core/copier");
|
|
|
12
13
|
const logger_1 = require("../core/logger");
|
|
13
14
|
const templates_1 = require("../registry/templates");
|
|
14
15
|
const workflow_1 = require("./workflow");
|
|
16
|
+
/** --features のパースと検証。テンプレートデフォルトを上書きする */
|
|
17
|
+
function resolveFeatures(spec, defaults) {
|
|
18
|
+
if (spec === undefined)
|
|
19
|
+
return defaults;
|
|
20
|
+
const requested = spec.split(",").map((f) => f.trim()).filter(Boolean);
|
|
21
|
+
const unknown = requested.filter((f) => !templates_1.availableFeatures.includes(f));
|
|
22
|
+
if (unknown.length > 0) {
|
|
23
|
+
throw new Error(`不明な feature です: ${unknown.join(", ")}(利用可能: ${templates_1.availableFeatures.join(", ")})`);
|
|
24
|
+
}
|
|
25
|
+
return requested;
|
|
26
|
+
}
|
|
15
27
|
/** --template 未指定かつ TTY のとき、対話で不足オプションを埋める */
|
|
16
28
|
async function promptMissing(cwd, options) {
|
|
17
29
|
const interactive = process.stdin.isTTY && !options.yes && !options.template;
|
|
@@ -32,7 +44,21 @@ async function promptMissing(cwd, options) {
|
|
|
32
44
|
});
|
|
33
45
|
const name = options.name ?? (await input({ message: "プロジェクト名", default: path_1.default.basename(cwd) }));
|
|
34
46
|
const description = options.description ?? (await input({ message: "プロジェクトの説明(任意)" }));
|
|
35
|
-
|
|
47
|
+
// feature をチェックボックスで選択(テンプレートのデフォルトが初期チェック)
|
|
48
|
+
let features = options.features;
|
|
49
|
+
if (features === undefined) {
|
|
50
|
+
const { checkbox } = await importEsm("@inquirer/prompts");
|
|
51
|
+
const defaults = (0, templates_1.findTemplate)(template)?.features ?? [];
|
|
52
|
+
const selected = await checkbox({
|
|
53
|
+
message: "導入する feature を選択してください",
|
|
54
|
+
choices: templates_1.availableFeatures.map((f) => ({
|
|
55
|
+
value: f,
|
|
56
|
+
checked: defaults.includes(f),
|
|
57
|
+
})),
|
|
58
|
+
});
|
|
59
|
+
features = selected.join(",");
|
|
60
|
+
}
|
|
61
|
+
return { ...options, template, name, description, features };
|
|
36
62
|
}
|
|
37
63
|
async function runInit(cwd, rawOptions) {
|
|
38
64
|
const options = await promptMissing(cwd, rawOptions);
|
|
@@ -46,6 +72,7 @@ async function runInit(cwd, rawOptions) {
|
|
|
46
72
|
throw new Error(`テンプレート "${templateId}" は準備中です。現在利用可能なテンプレート: ` +
|
|
47
73
|
templates_1.templates.filter((t) => t.status === "available").map((t) => t.id).join(", "));
|
|
48
74
|
}
|
|
75
|
+
const features = resolveFeatures(options.features, template.features);
|
|
49
76
|
const ctx = {
|
|
50
77
|
projectName: options.name ?? path_1.default.basename(cwd),
|
|
51
78
|
description: options.description ?? "",
|
|
@@ -53,8 +80,8 @@ async function runInit(cwd, rawOptions) {
|
|
|
53
80
|
languageLabel: template.languageLabel,
|
|
54
81
|
aiProviders: template.aiProviders,
|
|
55
82
|
aiProviderLabels: template.aiProviders,
|
|
56
|
-
features
|
|
57
|
-
featureLabels:
|
|
83
|
+
features,
|
|
84
|
+
featureLabels: features,
|
|
58
85
|
year: new Date().getFullYear(),
|
|
59
86
|
};
|
|
60
87
|
const root = (0, assets_1.templatesRoot)();
|
|
@@ -63,7 +90,7 @@ async function runInit(cwd, rawOptions) {
|
|
|
63
90
|
const layers = [
|
|
64
91
|
path_1.default.join(root, "base"),
|
|
65
92
|
path_1.default.join(root, "languages", template.language),
|
|
66
|
-
...
|
|
93
|
+
...features.map((f) => path_1.default.join(root, "features", f)),
|
|
67
94
|
path_1.default.join(root, "ai", "_common"),
|
|
68
95
|
...template.aiProviders.map((p) => path_1.default.join(root, "ai", p)),
|
|
69
96
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";;;;;AAoBA,0CAUC;AA0CD,0BAmEC;AA3ID,4CAAoB;AACpB,gDAAwB;AACxB,2CAA+C;AAC/C,2CAAqE;AACrE,2CAA2D;AAC3D,2CAAqC;AACrC,qDAAqG;AACrG,yCAA6C;AAY7C,2CAA2C;AAC3C,SAAgB,eAAe,CAAC,IAAwB,EAAE,QAAkB;IAC1E,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACxC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAE,6BAAuC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/F,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,mBAAmB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,6BAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC/E,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,8CAA8C;AAC9C,KAAK,UAAU,aAAa,CAAC,GAAW,EAAE,OAAoB;IAC5D,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC7E,IAAI,CAAC,WAAW;QAAE,OAAO,OAAO,CAAC;IAEjC,wEAAwE;IACxE,8BAA8B;IAC9B,MAAM,SAAS,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAEtB,CAAC;IACjD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,mBAAmB,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC;QAC5B,OAAO,EAAE,iBAAiB;QAC1B,OAAO,EAAE,qBAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7B,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1D,KAAK,EAAE,CAAC,CAAC,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;SACnD,CAAC,CAAC;QACH,OAAO,EAAE,4BAAgB;KAC1B,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,cAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAChG,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;IAEvF,4CAA4C;IAC5C,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAChC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,IAAA,wBAAY,EAAC,QAAQ,CAAC,EAAE,QAAQ,IAAI,EAAE,CAAC;QACxD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC;YAC9B,OAAO,EAAE,wBAAwB;YACjC,OAAO,EAAG,6BAAuC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC5D,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;aAC9B,CAAC,CAAC;SACJ,CAAC,CAAC;QACH,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;AAC/D,CAAC;AAEM,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,UAAuB;IAChE,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,IAAI,4BAAgB,CAAC;IACxD,MAAM,QAAQ,GAAG,IAAA,wBAAY,EAAC,UAAU,CAAC,CAAC;IAE1C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,SAAS,GAAG,qBAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtG,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,mBAAmB,SAAS,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACb,WAAW,UAAU,0BAA0B;YAC7C,qBAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAChF,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACtE,MAAM,GAAG,GAAoB;QAC3B,WAAW,EAAE,OAAO,CAAC,IAAI,IAAI,cAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC/C,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;QACtC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,gBAAgB,EAAE,QAAQ,CAAC,WAAW;QACtC,QAAQ;QACR,aAAa,EAAE,QAAQ;QACvB,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KAC/B,CAAC;IAEF,MAAM,IAAI,GAAG,IAAA,sBAAa,GAAE,CAAC;IAC7B,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,qDAAqD;IACrD,MAAM,MAAM,GAAa;QACvB,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;QACvB,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC;QAC/C,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;QACtD,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC;QAChC,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;KAC7D,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,YAAG,CAAC,IAAI,CAAC,4BAA4B,cAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YACnE,SAAS;QACX,CAAC;QACD,uCAAuC;QACvC,MAAM,IAAI,GAAG,KAAK,KAAK,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAC7F,MAAM,MAAM,GAAG,IAAA,iBAAQ,EAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAC1C,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;IACnC,CAAC;IAED,4CAA4C;IAC5C,IAAA,0BAAe,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAE3C,MAAM,MAAM,GAAG,IAAA,mBAAU,EAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,IAAA,mBAAU,GAAE,EAAE,CAAC;IAC5D,MAAM,CAAC,OAAO,GAAG,IAAA,mBAAU,GAAE,CAAC;IAC9B,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC;IAC9B,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;IACrC,MAAM,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,IAAA,oBAAW,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAEzB,YAAG,CAAC,OAAO,CAAC,WAAW,QAAQ,CAAC,EAAE,cAAc,OAAO,OAAO,CAAC,CAAC;IAChE,YAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACb,YAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpB,YAAG,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAC9C,YAAG,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;AACzE,CAAC"}
|
package/dist/commands/update.js
CHANGED
|
@@ -32,6 +32,7 @@ function runUpdate(cwd, options) {
|
|
|
32
32
|
const { plan, hashes } = (0, sync_1.syncTree)(root, cwd, recorded, {
|
|
33
33
|
force: options.force,
|
|
34
34
|
dryRun: options.diff,
|
|
35
|
+
only: options.only,
|
|
35
36
|
});
|
|
36
37
|
const changed = plan.filter((e) => e.status !== "unchanged");
|
|
37
38
|
if (changed.length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
package/dist/core/sync.d.ts
CHANGED
|
@@ -20,7 +20,10 @@ export declare function listFiles(dir: string, base?: string): string[];
|
|
|
20
20
|
* - 導入先 != recorded(ユーザーが編集済み) → user-modified(force 時のみ上書き)
|
|
21
21
|
* - recorded が無い(旧バージョン導入等) → user-modified 扱いで保護
|
|
22
22
|
*/
|
|
23
|
+
/** relPath が only 指定(完全一致 or ディレクトリ前置一致)に含まれるか */
|
|
24
|
+
export declare function matchesOnly(relPath: string, only: string[]): boolean;
|
|
23
25
|
export declare function syncTree(srcDir: string, destDir: string, recorded: FileHashes, options?: {
|
|
24
26
|
force?: boolean;
|
|
25
27
|
dryRun?: boolean;
|
|
28
|
+
only?: string[];
|
|
26
29
|
}): SyncResult;
|
package/dist/core/sync.js
CHANGED
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.hashFile = hashFile;
|
|
7
7
|
exports.listFiles = listFiles;
|
|
8
|
+
exports.matchesOnly = matchesOnly;
|
|
8
9
|
exports.syncTree = syncTree;
|
|
9
10
|
const crypto_1 = __importDefault(require("crypto"));
|
|
10
11
|
const fs_1 = __importDefault(require("fs"));
|
|
@@ -33,11 +34,25 @@ function listFiles(dir, base = dir) {
|
|
|
33
34
|
* - 導入先 != recorded(ユーザーが編集済み) → user-modified(force 時のみ上書き)
|
|
34
35
|
* - recorded が無い(旧バージョン導入等) → user-modified 扱いで保護
|
|
35
36
|
*/
|
|
37
|
+
/** relPath が only 指定(完全一致 or ディレクトリ前置一致)に含まれるか */
|
|
38
|
+
function matchesOnly(relPath, only) {
|
|
39
|
+
const normalized = relPath.split(path_1.default.sep).join("/");
|
|
40
|
+
return only.some((o) => {
|
|
41
|
+
const pattern = o.replace(/\/+$/, "");
|
|
42
|
+
return normalized === pattern || normalized.startsWith(pattern + "/");
|
|
43
|
+
});
|
|
44
|
+
}
|
|
36
45
|
function syncTree(srcDir, destDir, recorded, options = {}) {
|
|
37
|
-
const { force = false, dryRun = false } = options;
|
|
46
|
+
const { force = false, dryRun = false, only } = options;
|
|
38
47
|
const plan = [];
|
|
39
48
|
const hashes = {};
|
|
40
49
|
for (const relPath of listFiles(srcDir).sort()) {
|
|
50
|
+
// --only 指定がある場合、対象外ファイルは記録ハッシュを維持したままスキップ
|
|
51
|
+
if (only && only.length > 0 && !matchesOnly(relPath, only)) {
|
|
52
|
+
if (recorded[relPath])
|
|
53
|
+
hashes[relPath] = recorded[relPath];
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
41
56
|
const srcPath = path_1.default.join(srcDir, relPath);
|
|
42
57
|
const destPath = path_1.default.join(destDir, relPath);
|
|
43
58
|
const srcHash = hashFile(srcPath);
|
package/dist/core/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/core/sync.ts"],"names":[],"mappings":";;;;;AAiBA,4BAEC;AAED,8BAQC;
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/core/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.writeDeepReports = writeDeepReports;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
/** doctor --deep のレポートを md / html / json で書き出し、生成ファイルのパスを返す */
|
|
10
|
+
function writeDeepReports(report, outDir) {
|
|
11
|
+
fs_1.default.mkdirSync(outDir, { recursive: true });
|
|
12
|
+
const stamp = new Date().toISOString().replace(/[:.]/g, "-");
|
|
13
|
+
const base = path_1.default.join(outDir, `foundruu-deep-report-${stamp}`);
|
|
14
|
+
const files = [
|
|
15
|
+
writeFile(`${base}.json`, JSON.stringify(report, null, 2) + "\n"),
|
|
16
|
+
writeFile(`${base}.md`, renderMarkdown(report)),
|
|
17
|
+
writeFile(`${base}.html`, renderHtml(report)),
|
|
18
|
+
];
|
|
19
|
+
return files;
|
|
20
|
+
}
|
|
21
|
+
function writeFile(file, content) {
|
|
22
|
+
fs_1.default.writeFileSync(file, content);
|
|
23
|
+
return file;
|
|
24
|
+
}
|
|
25
|
+
function renderMarkdown(report) {
|
|
26
|
+
const lines = [
|
|
27
|
+
"# FoundRuu Deep Report",
|
|
28
|
+
"",
|
|
29
|
+
`- 生成日時: ${new Date().toISOString()}`,
|
|
30
|
+
`- 比較基準: \`${report.since}\``,
|
|
31
|
+
`- 差分: ${report.diff.files}ファイル +${report.diff.insertions} -${report.diff.deletions}`,
|
|
32
|
+
`- **総合スコア: ${report.overall}点**`,
|
|
33
|
+
"",
|
|
34
|
+
"| カテゴリ | スコア | ドキュメント |",
|
|
35
|
+
"|---|---|---|",
|
|
36
|
+
...report.scores.map((s) => `| ${s.label} | ${s.score}点 | ${s.docPath ?? "(なし)"} |`),
|
|
37
|
+
"",
|
|
38
|
+
];
|
|
39
|
+
for (const s of report.scores) {
|
|
40
|
+
if (s.failed.length === 0)
|
|
41
|
+
continue;
|
|
42
|
+
lines.push(`## ${s.label} の改善案`, "");
|
|
43
|
+
for (const f of s.failed) {
|
|
44
|
+
lines.push(`- **${f.label}** — ${f.improvement}`);
|
|
45
|
+
}
|
|
46
|
+
lines.push("");
|
|
47
|
+
}
|
|
48
|
+
return lines.join("\n");
|
|
49
|
+
}
|
|
50
|
+
function renderHtml(report) {
|
|
51
|
+
const color = (score) => (score >= 80 ? "#22a06b" : score >= 50 ? "#b38600" : "#c9372c");
|
|
52
|
+
const rows = report.scores
|
|
53
|
+
.map((s) => `
|
|
54
|
+
<tr>
|
|
55
|
+
<td>${escapeHtml(s.label)}</td>
|
|
56
|
+
<td style="color:${color(s.score)};font-weight:bold">${s.score}点</td>
|
|
57
|
+
<td>${escapeHtml(s.docPath ?? "(なし)")}</td>
|
|
58
|
+
<td><ul>${s.failed.map((f) => `<li><b>${escapeHtml(f.label)}</b> — ${escapeHtml(f.improvement)}</li>`).join("")}</ul></td>
|
|
59
|
+
</tr>`)
|
|
60
|
+
.join("");
|
|
61
|
+
return `<!doctype html>
|
|
62
|
+
<html lang="ja">
|
|
63
|
+
<head>
|
|
64
|
+
<meta charset="utf-8">
|
|
65
|
+
<title>FoundRuu Deep Report</title>
|
|
66
|
+
<style>
|
|
67
|
+
body { font-family: -apple-system, "Hiragino Sans", sans-serif; margin: 2rem auto; max-width: 60rem; padding: 0 1rem; color: #1c1c1c; }
|
|
68
|
+
table { border-collapse: collapse; width: 100%; }
|
|
69
|
+
th, td { border: 1px solid #ddd; padding: .5rem .75rem; text-align: left; vertical-align: top; }
|
|
70
|
+
th { background: #f5f5f5; }
|
|
71
|
+
.overall { font-size: 2rem; font-weight: bold; color: ${color(report.overall)}; }
|
|
72
|
+
</style>
|
|
73
|
+
</head>
|
|
74
|
+
<body>
|
|
75
|
+
<h1>FoundRuu Deep Report</h1>
|
|
76
|
+
<p>比較基準: <code>${escapeHtml(report.since)}</code> / 差分: ${report.diff.files}ファイル +${report.diff.insertions} -${report.diff.deletions}</p>
|
|
77
|
+
<p class="overall">総合スコア: ${report.overall}点</p>
|
|
78
|
+
<table>
|
|
79
|
+
<tr><th>カテゴリ</th><th>スコア</th><th>ドキュメント</th><th>改善案</th></tr>
|
|
80
|
+
${rows}
|
|
81
|
+
</table>
|
|
82
|
+
</body>
|
|
83
|
+
</html>
|
|
84
|
+
`;
|
|
85
|
+
}
|
|
86
|
+
function escapeHtml(s) {
|
|
87
|
+
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/doctor/report.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,4 +15,6 @@ export interface TemplateDefinition {
|
|
|
15
15
|
*/
|
|
16
16
|
export declare const templates: TemplateDefinition[];
|
|
17
17
|
export declare const DEFAULT_TEMPLATE = "typescript";
|
|
18
|
+
/** --features で選択可能な feature 一覧(assets/templates/features/ と対応) */
|
|
19
|
+
export declare const availableFeatures: readonly ["docker", "github-actions", "eslint", "prettier", "vitest", "react", "react-laravel", "vue-laravel", "discord", "line-bot", "lark"];
|
|
18
20
|
export declare function findTemplate(id: string): TemplateDefinition | undefined;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DEFAULT_TEMPLATE = exports.templates = void 0;
|
|
3
|
+
exports.availableFeatures = exports.DEFAULT_TEMPLATE = exports.templates = void 0;
|
|
4
4
|
exports.findTemplate = findTemplate;
|
|
5
5
|
/**
|
|
6
6
|
* テンプレートレジストリ。
|
|
@@ -63,6 +63,20 @@ exports.templates = [
|
|
|
63
63
|
},
|
|
64
64
|
];
|
|
65
65
|
exports.DEFAULT_TEMPLATE = "typescript";
|
|
66
|
+
/** --features で選択可能な feature 一覧(assets/templates/features/ と対応) */
|
|
67
|
+
exports.availableFeatures = [
|
|
68
|
+
"docker",
|
|
69
|
+
"github-actions",
|
|
70
|
+
"eslint",
|
|
71
|
+
"prettier",
|
|
72
|
+
"vitest",
|
|
73
|
+
"react",
|
|
74
|
+
"react-laravel",
|
|
75
|
+
"vue-laravel",
|
|
76
|
+
"discord",
|
|
77
|
+
"line-bot",
|
|
78
|
+
"lark",
|
|
79
|
+
];
|
|
66
80
|
function findTemplate(id) {
|
|
67
81
|
return exports.templates.find((t) => t.id === id);
|
|
68
82
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/registry/templates.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/registry/templates.ts"],"names":[],"mappings":";;;AA0FA,oCAEC;AAhFD;;;GAGG;AACU,QAAA,SAAS,GAAyB;IAC7C;QACE,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,YAAY;QACnB,MAAM,EAAE,WAAW;QACnB,QAAQ,EAAE,YAAY;QACtB,aAAa,EAAE,YAAY;QAC3B,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,CAAC;QACtE,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;KACjC;IACD;QACE,EAAE,EAAE,eAAe;QACnB,KAAK,EAAE,iBAAiB;QACxB,MAAM,EAAE,WAAW;QACnB,QAAQ,EAAE,SAAS;QACnB,aAAa,EAAE,iBAAiB;QAChC,QAAQ,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,gBAAgB,CAAC;QACvD,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;KACjC;IACD;QACE,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,iBAAiB;QACxB,MAAM,EAAE,WAAW;QACnB,QAAQ,EAAE,YAAY;QACtB,aAAa,EAAE,oBAAoB;QACnC,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,CAAC;QAC/E,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;KACjC;IACD;QACE,EAAE,EAAE,aAAa;QACjB,KAAK,EAAE,eAAe;QACtB,MAAM,EAAE,WAAW;QACnB,QAAQ,EAAE,SAAS;QACnB,aAAa,EAAE,eAAe;QAC9B,QAAQ,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,gBAAgB,CAAC;QACrD,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;KACjC;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,WAAW;QACnB,QAAQ,EAAE,QAAQ;QAClB,aAAa,EAAE,SAAS;QACxB,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,gBAAgB,CAAC;QAClD,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;KACjC;IACD;QACE,EAAE,EAAE,MAAM;QACV,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,WAAW;QACnB,QAAQ,EAAE,MAAM;QAChB,aAAa,EAAE,MAAM;QACrB,QAAQ,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC;QACxC,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;KACjC;CACF,CAAC;AAEW,QAAA,gBAAgB,GAAG,YAAY,CAAC;AAE7C,mEAAmE;AACtD,QAAA,iBAAiB,GAAG;IAC/B,QAAQ;IACR,gBAAgB;IAChB,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,OAAO;IACP,eAAe;IACf,aAAa;IACb,SAAS;IACT,UAAU;IACV,MAAM;CACE,CAAC;AAEX,SAAgB,YAAY,CAAC,EAAU;IACrC,OAAO,iBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5C,CAAC"}
|