astro-dev-mcp 0.6.0 → 0.7.1
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/dist/editors/appJsEditor.d.ts.map +1 -1
- package/dist/editors/appJsEditor.js +4 -2
- package/dist/editors/appJsEditor.js.map +1 -1
- package/dist/editors/commonEditor.d.ts +0 -4
- package/dist/editors/commonEditor.d.ts.map +1 -1
- package/dist/editors/commonEditor.js +3 -2
- package/dist/editors/commonEditor.js.map +1 -1
- package/dist/editors/scssVariablesEditor.d.ts +0 -4
- package/dist/editors/scssVariablesEditor.d.ts.map +1 -1
- package/dist/editors/scssVariablesEditor.js +3 -2
- package/dist/editors/scssVariablesEditor.js.map +1 -1
- package/dist/index.js +54 -0
- package/dist/index.js.map +1 -1
- package/dist/parsers/excelParser.d.ts.map +1 -1
- package/dist/parsers/excelParser.js +29 -6
- package/dist/parsers/excelParser.js.map +1 -1
- package/dist/templates/pageTemplates.js +6 -2
- package/dist/templates/pageTemplates.js.map +1 -1
- package/dist/templates/sectionTemplates.js +21 -21
- package/dist/templates/sectionTemplates.js.map +1 -1
- package/dist/templates/uiPatterns.js +76 -1
- package/dist/templates/uiPatterns.js.map +1 -1
- package/dist/tools/generateComponent.d.ts.map +1 -1
- package/dist/tools/generateComponent.js +8 -2
- package/dist/tools/generateComponent.js.map +1 -1
- package/dist/tools/generatePage.d.ts.map +1 -1
- package/dist/tools/generatePage.js +18 -4
- package/dist/tools/generatePage.js.map +1 -1
- package/dist/tools/generateSchema.d.ts.map +1 -1
- package/dist/tools/generateSchema.js +9 -1
- package/dist/tools/generateSchema.js.map +1 -1
- package/dist/tools/generateSection.d.ts.map +1 -1
- package/dist/tools/generateSection.js +10 -1
- package/dist/tools/generateSection.js.map +1 -1
- package/dist/tools/getComponentInterface.d.ts +11 -0
- package/dist/tools/getComponentInterface.d.ts.map +1 -0
- package/dist/tools/getComponentInterface.js +111 -0
- package/dist/tools/getComponentInterface.js.map +1 -0
- package/dist/tools/getProjectContext.d.ts +10 -0
- package/dist/tools/getProjectContext.d.ts.map +1 -0
- package/dist/tools/getProjectContext.js +175 -0
- package/dist/tools/getProjectContext.js.map +1 -0
- package/dist/utils/projectContext.d.ts +6 -0
- package/dist/utils/projectContext.d.ts.map +1 -0
- package/dist/utils/projectContext.js +72 -0
- package/dist/utils/projectContext.js.map +1 -0
- package/dist/utils/security.d.ts +16 -0
- package/dist/utils/security.d.ts.map +1 -0
- package/dist/utils/security.js +37 -0
- package/dist/utils/security.js.map +1 -0
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateComponent.d.ts","sourceRoot":"","sources":["../../src/tools/generateComponent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generateComponent.d.ts","sourceRoot":"","sources":["../../src/tools/generateComponent.ts"],"names":[],"mappings":"AAoBA;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,GAAG;;;;;GAsEhD"}
|
|
@@ -3,12 +3,16 @@ import { generateScss } from "../generators/scssGenerator.js";
|
|
|
3
3
|
import { formatCode } from "../utils/formatter.js";
|
|
4
4
|
import { writeFileSync, mkdirSync } from "fs";
|
|
5
5
|
import { resolve, dirname } from "path";
|
|
6
|
+
import { getGenerationContext } from "../utils/projectContext.js";
|
|
7
|
+
import { validateName, assertPathWithinProject } from "../utils/security.js";
|
|
6
8
|
/**
|
|
7
9
|
* Astroコンポーネント生成ツール
|
|
8
10
|
*/
|
|
9
11
|
export async function generateComponent(args) {
|
|
10
12
|
const { componentName, props, design = {}, accessibility = true, projectRoot = process.cwd(), } = args;
|
|
11
13
|
try {
|
|
14
|
+
// 入力バリデーション
|
|
15
|
+
validateName(componentName, "コンポーネント名");
|
|
12
16
|
const writeLogs = [];
|
|
13
17
|
// 1. Astroコンポーネント生成
|
|
14
18
|
const astroCode = await generateAstroComponent({
|
|
@@ -24,9 +28,11 @@ export async function generateComponent(args) {
|
|
|
24
28
|
// 3. コード整形
|
|
25
29
|
const formattedAstro = await formatCode(astroCode, "astro");
|
|
26
30
|
const formattedScss = await formatCode(scssCode, "scss");
|
|
27
|
-
// 4. ファイルパス解決
|
|
31
|
+
// 4. ファイルパス解決 & 境界チェック
|
|
28
32
|
const astroPath = resolve(projectRoot, `src/components/${componentName}.astro`);
|
|
29
33
|
const scssPath = resolve(projectRoot, `src/scss/components/_c_${toSnakeCase(componentName)}.scss`);
|
|
34
|
+
assertPathWithinProject(astroPath, projectRoot);
|
|
35
|
+
assertPathWithinProject(scssPath, projectRoot);
|
|
30
36
|
// 5. ディレクトリ作成 & ファイル書き込み
|
|
31
37
|
try {
|
|
32
38
|
// Astroコンポーネント
|
|
@@ -45,7 +51,7 @@ export async function generateComponent(args) {
|
|
|
45
51
|
content: [
|
|
46
52
|
{
|
|
47
53
|
type: "text",
|
|
48
|
-
text: `✅ コンポーネント「${componentName}」を生成しました\n\n### ファイル出力\n${writeLogs.join("\n")}\n\n## Astroコンポーネント\n\`\`\`astro\n${formattedAstro}\n\`\`\`\n\n## SCSS\n\`\`\`scss\n${formattedScss}\n
|
|
54
|
+
text: `✅ コンポーネント「${componentName}」を生成しました\n\n### ファイル出力\n${writeLogs.join("\n")}\n\n## Astroコンポーネント\n\`\`\`astro\n${formattedAstro}\n\`\`\`\n\n## SCSS\n\`\`\`scss\n${formattedScss}\n\`\`\`${getGenerationContext(projectRoot)}`,
|
|
49
55
|
},
|
|
50
56
|
],
|
|
51
57
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateComponent.js","sourceRoot":"","sources":["../../src/tools/generateComponent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"generateComponent.js","sourceRoot":"","sources":["../../src/tools/generateComponent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAc7E;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAS;IAC/C,MAAM,EACJ,aAAa,EACb,KAAK,EACL,MAAM,GAAG,EAAE,EACX,aAAa,GAAG,IAAI,EACpB,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,GAC5B,GAAG,IAAqB,CAAC;IAE1B,IAAI,CAAC;QACH,YAAY;QACZ,YAAY,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QAExC,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,oBAAoB;QACpB,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC;YAC7C,IAAI,EAAE,aAAa;YACnB,KAAK;YACL,aAAa;SACd,CAAC,CAAC;QAEH,YAAY;QACZ,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC;YAClC,IAAI,EAAE,aAAa;YACnB,MAAM;SACP,CAAC,CAAC;QAEH,WAAW;QACX,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEzD,uBAAuB;QACvB,MAAM,SAAS,GAAG,OAAO,CACvB,WAAW,EACX,kBAAkB,aAAa,QAAQ,CACxC,CAAC;QACF,MAAM,QAAQ,GAAG,OAAO,CACtB,WAAW,EACX,0BAA0B,WAAW,CAAC,aAAa,CAAC,OAAO,CAC5D,CAAC;QACF,uBAAuB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAChD,uBAAuB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAE/C,yBAAyB;QACzB,IAAI,CAAC;YACH,eAAe;YACf,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACnD,aAAa,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;YAClD,SAAS,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC;YAEjC,WAAW;YACX,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;YAChD,SAAS,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,UAAU,EAAE,CAAC;YACpB,SAAS,CAAC,IAAI,CAAC,kBAAkB,UAAU,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,aAAa,aAAa,2BAA2B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,qCAAqC,cAAc,oCAAoC,aAAa,WAAW,oBAAoB,CAAC,WAAW,CAAC,EAAE;iBAClO;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AAC/D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generatePage.d.ts","sourceRoot":"","sources":["../../src/tools/generatePage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generatePage.d.ts","sourceRoot":"","sources":["../../src/tools/generatePage.ts"],"names":[],"mappings":"AAyCA;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,GAAG;;;;;GAiJ3C"}
|
|
@@ -5,12 +5,17 @@ import { updateCommonAstro, } from "../editors/commonEditor.js";
|
|
|
5
5
|
import { updateScssVariables, } from "../editors/scssVariablesEditor.js";
|
|
6
6
|
import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
|
|
7
7
|
import { resolve, dirname } from "path";
|
|
8
|
+
import { getGenerationContext } from "../utils/projectContext.js";
|
|
9
|
+
import { validateName, assertPathWithinProject } from "../utils/security.js";
|
|
8
10
|
/**
|
|
9
11
|
* ページ生成ツール(サイト設定更新統合版)
|
|
10
12
|
*/
|
|
11
13
|
export async function generatePage(args) {
|
|
12
14
|
const { pageName, prompt, pageData, sections, siteConfig, scssConfig, projectRoot = process.cwd(), } = args;
|
|
13
15
|
try {
|
|
16
|
+
// 入力バリデーション
|
|
17
|
+
validateName(pageName, "ページ名");
|
|
18
|
+
sections.forEach((s) => validateName(s, "セクション名"));
|
|
14
19
|
const updateLogs = [];
|
|
15
20
|
// ページタイプ自動判定
|
|
16
21
|
let pageType;
|
|
@@ -66,7 +71,15 @@ export async function generatePage(args) {
|
|
|
66
71
|
updateLogs.push(`⚠️ _variables.scss が見つかりません: ${scssPath}`);
|
|
67
72
|
}
|
|
68
73
|
}
|
|
69
|
-
// 3.
|
|
74
|
+
// 3. セクションファイルの存在チェック
|
|
75
|
+
const missingSections = sections.filter((section) => {
|
|
76
|
+
const partPath = resolve(projectRoot, `src/pages/_parts/_${pageName}/_${section}.astro`);
|
|
77
|
+
return !existsSync(partPath);
|
|
78
|
+
});
|
|
79
|
+
if (missingSections.length > 0) {
|
|
80
|
+
updateLogs.push(`⚠️ 以下のセクションファイルが未作成です:\n${missingSections.map((s) => ` - _${s}.astro`).join("\n")}\n → 先に generate-section で作成することを推奨します`);
|
|
81
|
+
}
|
|
82
|
+
// 4. ページテンプレート生成
|
|
70
83
|
const pageCode = generatePageTemplate({
|
|
71
84
|
pageName,
|
|
72
85
|
pageType,
|
|
@@ -75,9 +88,10 @@ export async function generatePage(args) {
|
|
|
75
88
|
});
|
|
76
89
|
// コード整形
|
|
77
90
|
const formatted = await formatCode(pageCode, "astro");
|
|
78
|
-
//
|
|
91
|
+
// 5. ファイルパス解決 & 境界チェック
|
|
79
92
|
const pagePath = resolve(projectRoot, `src/pages/${pageName}/index.astro`);
|
|
80
|
-
|
|
93
|
+
assertPathWithinProject(pagePath, projectRoot);
|
|
94
|
+
// 6. ページファイル書き込み
|
|
81
95
|
try {
|
|
82
96
|
mkdirSync(dirname(pagePath), { recursive: true });
|
|
83
97
|
writeFileSync(pagePath, formatted, "utf-8");
|
|
@@ -94,7 +108,7 @@ export async function generatePage(args) {
|
|
|
94
108
|
content: [
|
|
95
109
|
{
|
|
96
110
|
type: "text",
|
|
97
|
-
text: `${updateSection}### ページ生成\n✅ ページ「${pageName}」を生成しました\n\n\`\`\`astro\n${formatted}\n\`\`\`\n\n### 必要なセクション\n${sections.map((s) => `- \`src/pages/_parts/_${pageName}/_${s}.astro\``).join("\n")}`,
|
|
111
|
+
text: `${updateSection}### ページ生成\n✅ ページ「${pageName}」を生成しました\n\n\`\`\`astro\n${formatted}\n\`\`\`\n\n### 必要なセクション\n${sections.map((s) => `- \`src/pages/_parts/_${pageName}/_${s}.astro\``).join("\n")}${getGenerationContext(projectRoot)}`,
|
|
98
112
|
},
|
|
99
113
|
],
|
|
100
114
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generatePage.js","sourceRoot":"","sources":["../../src/tools/generatePage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAGL,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAEL,mBAAmB,GACpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"generatePage.js","sourceRoot":"","sources":["../../src/tools/generatePage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateSchema.d.ts","sourceRoot":"","sources":["../../src/tools/generateSchema.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generateSchema.d.ts","sourceRoot":"","sources":["../../src/tools/generateSchema.ts"],"names":[],"mappings":"AAYA;;GAEG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,GAAG;;;;;GAiD7C"}
|
|
@@ -2,12 +2,15 @@ import { parseExcel } from "../parsers/excelParser.js";
|
|
|
2
2
|
import { parseMarkdown } from "../parsers/markdownParser.js";
|
|
3
3
|
import { generateTypeDefinition } from "../generators/typeGenerator.js";
|
|
4
4
|
import { formatCode } from "../utils/formatter.js";
|
|
5
|
+
import { validateName } from "../utils/security.js";
|
|
5
6
|
/**
|
|
6
7
|
* スキーマ生成ツール
|
|
7
8
|
*/
|
|
8
9
|
export async function generateSchema(args) {
|
|
9
10
|
const { sourceType, sourceData, schemaName } = args;
|
|
10
11
|
try {
|
|
12
|
+
// 入力バリデーション
|
|
13
|
+
validateName(schemaName, "スキーマ名");
|
|
11
14
|
let parsedData;
|
|
12
15
|
// データソースに応じてパース
|
|
13
16
|
switch (sourceType) {
|
|
@@ -18,7 +21,12 @@ export async function generateSchema(args) {
|
|
|
18
21
|
parsedData = await parseMarkdown(sourceData);
|
|
19
22
|
break;
|
|
20
23
|
case "json":
|
|
21
|
-
|
|
24
|
+
try {
|
|
25
|
+
parsedData = JSON.parse(sourceData);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
throw new Error("無効なJSONデータです");
|
|
29
|
+
}
|
|
22
30
|
break;
|
|
23
31
|
case "text":
|
|
24
32
|
// テキストから構造を推測
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateSchema.js","sourceRoot":"","sources":["../../src/tools/generateSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"generateSchema.js","sourceRoot":"","sources":["../../src/tools/generateSchema.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateSection.d.ts","sourceRoot":"","sources":["../../src/tools/generateSection.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generateSection.d.ts","sourceRoot":"","sources":["../../src/tools/generateSection.ts"],"names":[],"mappings":"AA2CA;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,GAAG;;;;;GAqJ9C"}
|
|
@@ -5,12 +5,18 @@ import { generateScssPattern } from '../templates/scssPatterns.js';
|
|
|
5
5
|
import { getRequiredScripts, updateAppJs, needsAppJsUpdate, } from '../editors/appJsEditor.js';
|
|
6
6
|
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
|
|
7
7
|
import { resolve, dirname } from 'path';
|
|
8
|
+
import { getGenerationContext } from '../utils/projectContext.js';
|
|
9
|
+
import { validateName, assertPathWithinProject } from '../utils/security.js';
|
|
8
10
|
/**
|
|
9
11
|
* セクション生成ツール(SCSS生成・app.js更新統合版)
|
|
10
12
|
*/
|
|
11
13
|
export async function generateSection(args) {
|
|
12
14
|
const { prompt, sectionType, uiPattern, pageName, content, components = [], generateScss = true, scssOptions = {}, projectRoot = process.cwd(), } = args;
|
|
13
15
|
try {
|
|
16
|
+
// 入力バリデーション
|
|
17
|
+
validateName(pageName, 'ページ名');
|
|
18
|
+
if (sectionType)
|
|
19
|
+
validateName(sectionType, 'セクション種類');
|
|
14
20
|
const updateLogs = [];
|
|
15
21
|
let finalSectionType;
|
|
16
22
|
let finalUIPattern;
|
|
@@ -68,9 +74,11 @@ export async function generateSection(args) {
|
|
|
68
74
|
options: scssOptions,
|
|
69
75
|
});
|
|
70
76
|
}
|
|
71
|
-
// 4. ファイルパス解決
|
|
77
|
+
// 4. ファイルパス解決 & 境界チェック
|
|
72
78
|
const astroPath = resolve(projectRoot, `src/pages/_parts/_${pageName}/_${finalSectionType}.astro`);
|
|
73
79
|
const scssPath = resolve(projectRoot, `src/scss/pages/_${pageName}.scss`);
|
|
80
|
+
assertPathWithinProject(astroPath, projectRoot);
|
|
81
|
+
assertPathWithinProject(scssPath, projectRoot);
|
|
74
82
|
// 5. ファイル書き込み
|
|
75
83
|
try {
|
|
76
84
|
// Astroセクションファイル
|
|
@@ -104,6 +112,7 @@ export async function generateSection(args) {
|
|
|
104
112
|
if (scssCode) {
|
|
105
113
|
resultText += `\n\n#### SCSSファイル\n\`\`\`scss\n${scssCode}\n\`\`\``;
|
|
106
114
|
}
|
|
115
|
+
resultText += getGenerationContext(projectRoot);
|
|
107
116
|
return {
|
|
108
117
|
content: [
|
|
109
118
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateSection.js","sourceRoot":"","sources":["../../src/tools/generateSection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,EACN,kBAAkB,EAClB,WAAW,EACX,gBAAgB,GAChB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"generateSection.js","sourceRoot":"","sources":["../../src/tools/generateSection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* コンポーネントインターフェース取得ツール
|
|
3
|
+
* .astroファイルの---フェンス内からProps interfaceを抽出して返す
|
|
4
|
+
*/
|
|
5
|
+
export declare function getComponentInterface(args: any): Promise<{
|
|
6
|
+
content: {
|
|
7
|
+
type: string;
|
|
8
|
+
text: string;
|
|
9
|
+
}[];
|
|
10
|
+
}>;
|
|
11
|
+
//# sourceMappingURL=getComponentInterface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getComponentInterface.d.ts","sourceRoot":"","sources":["../../src/tools/getComponentInterface.ts"],"names":[],"mappings":"AAeA;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,GAAG;;;;;GA6EpD"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { readFileSync, existsSync, readdirSync } from "fs";
|
|
2
|
+
import { resolve, basename } from "path";
|
|
3
|
+
import { validateName, assertPathWithinProject } from "../utils/security.js";
|
|
4
|
+
/**
|
|
5
|
+
* コンポーネントインターフェース取得ツール
|
|
6
|
+
* .astroファイルの---フェンス内からProps interfaceを抽出して返す
|
|
7
|
+
*/
|
|
8
|
+
export async function getComponentInterface(args) {
|
|
9
|
+
const { componentName, projectRoot = process.cwd() } = args;
|
|
10
|
+
const componentsDir = resolve(projectRoot, "src/components");
|
|
11
|
+
if (!existsSync(componentsDir)) {
|
|
12
|
+
return {
|
|
13
|
+
content: [
|
|
14
|
+
{
|
|
15
|
+
type: "text",
|
|
16
|
+
text: "⚠️ src/components/ ディレクトリが見つかりません",
|
|
17
|
+
},
|
|
18
|
+
],
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
// 特定コンポーネント指定の場合
|
|
22
|
+
if (componentName) {
|
|
23
|
+
const rawName = componentName.endsWith(".astro")
|
|
24
|
+
? componentName.slice(0, -6)
|
|
25
|
+
: componentName;
|
|
26
|
+
validateName(rawName, "コンポーネント名");
|
|
27
|
+
const fileName = `${rawName}.astro`;
|
|
28
|
+
const filePath = resolve(componentsDir, fileName);
|
|
29
|
+
assertPathWithinProject(filePath, projectRoot);
|
|
30
|
+
if (!existsSync(filePath)) {
|
|
31
|
+
return {
|
|
32
|
+
content: [
|
|
33
|
+
{
|
|
34
|
+
type: "text",
|
|
35
|
+
text: `⚠️ コンポーネントが見つかりません: ${fileName}`,
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
const summary = extractComponentSummary(filePath);
|
|
41
|
+
return {
|
|
42
|
+
content: [
|
|
43
|
+
{
|
|
44
|
+
type: "text",
|
|
45
|
+
text: formatSummary(summary),
|
|
46
|
+
},
|
|
47
|
+
],
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
// 全コンポーネント一括取得
|
|
51
|
+
const files = readdirSync(componentsDir).filter((f) => f.endsWith(".astro"));
|
|
52
|
+
if (files.length === 0) {
|
|
53
|
+
return {
|
|
54
|
+
content: [
|
|
55
|
+
{
|
|
56
|
+
type: "text",
|
|
57
|
+
text: "ℹ️ src/components/ にAstroコンポーネントがありません",
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
const summaries = files.map((file) => extractComponentSummary(resolve(componentsDir, file)));
|
|
63
|
+
const output = summaries.map(formatSummary).join("\n\n---\n\n");
|
|
64
|
+
return {
|
|
65
|
+
content: [
|
|
66
|
+
{
|
|
67
|
+
type: "text",
|
|
68
|
+
text: `## コンポーネント一覧(${summaries.length}件)\n\n${output}`,
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* .astroファイルからProps interfaceとJSDocコメントを抽出
|
|
75
|
+
*/
|
|
76
|
+
function extractComponentSummary(filePath) {
|
|
77
|
+
const name = basename(filePath, ".astro");
|
|
78
|
+
const content = readFileSync(filePath, "utf-8");
|
|
79
|
+
// ---フェンス内を抽出
|
|
80
|
+
const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
|
|
81
|
+
if (!frontmatterMatch) {
|
|
82
|
+
return { name, props: "(Props定義なし)", description: "" };
|
|
83
|
+
}
|
|
84
|
+
const frontmatter = frontmatterMatch[1];
|
|
85
|
+
// Props interface を抽出(interface Props { ... } のブロック全体)
|
|
86
|
+
const propsMatch = frontmatter.match(/interface\s+Props\s*\{([\s\S]*?)^\}/m);
|
|
87
|
+
const props = propsMatch
|
|
88
|
+
? `interface Props {${propsMatch[1]}}`
|
|
89
|
+
: "(Props定義なし)";
|
|
90
|
+
// JSDocコメントを抽出(Props直前の /** ... */ )
|
|
91
|
+
const jsdocMatch = frontmatter.match(/\/\*\*[\s\S]*?\*\/\s*(?=\n\s*interface\s+Props)/);
|
|
92
|
+
const description = jsdocMatch
|
|
93
|
+
? jsdocMatch[0]
|
|
94
|
+
.replace(/\/\*\*|\*\//g, "")
|
|
95
|
+
.replace(/^\s*\*\s?/gm, "")
|
|
96
|
+
.trim()
|
|
97
|
+
: "";
|
|
98
|
+
return { name, props, description };
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* サマリーを整形して返す
|
|
102
|
+
*/
|
|
103
|
+
function formatSummary(summary) {
|
|
104
|
+
const lines = [`### ${summary.name}`];
|
|
105
|
+
if (summary.description) {
|
|
106
|
+
lines.push(summary.description);
|
|
107
|
+
}
|
|
108
|
+
lines.push(`\`\`\`typescript\n${summary.props}\n\`\`\``);
|
|
109
|
+
return lines.join("\n");
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=getComponentInterface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getComponentInterface.js","sourceRoot":"","sources":["../../src/tools/getComponentInterface.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getProjectContext.d.ts","sourceRoot":"","sources":["../../src/tools/getProjectContext.ts"],"names":[],"mappings":"AA0FA;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,GAAG;;;;;GAmEhD"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { readFileSync, existsSync, readdirSync, statSync } from "fs";
|
|
2
|
+
import { resolve } from "path";
|
|
3
|
+
import { assertPathWithinProject, escapeRegExp } from "../utils/security.js";
|
|
4
|
+
/**
|
|
5
|
+
* デフォルトのAstro開発規約(ai-context.md が見つからない場合のフォールバック)
|
|
6
|
+
*/
|
|
7
|
+
const DEFAULT_CONTEXT = `# Astro-dev プロジェクト規約
|
|
8
|
+
|
|
9
|
+
## ディレクトリ構造
|
|
10
|
+
- src/layouts/ - レイアウトテンプレート(Layout.astro, Common.astro)
|
|
11
|
+
- src/components/ - 再利用可能なコンポーネント
|
|
12
|
+
- src/pages/ - ページファイル({pageName}/index.astro)
|
|
13
|
+
- src/pages/_parts/ - ページセクション(_{pageName}/_{section}.astro)
|
|
14
|
+
- src/scss/ - スタイルシート
|
|
15
|
+
- abstracts/ - 変数・ミックスイン(_variables.scss, _mixins.scss)
|
|
16
|
+
- components/ - コンポーネント用SCSS(_c_{name}.scss)
|
|
17
|
+
- pages/ - ページ用SCSS(_{pageName}.scss)
|
|
18
|
+
- src/js/ - JavaScript(app.js がエントリーポイント)
|
|
19
|
+
- public/_assets/img/ - 画像ファイル
|
|
20
|
+
|
|
21
|
+
## コーディング規約
|
|
22
|
+
- テキスト出力: set:html={data.ttl} を使用(HTMLタグ対応のため)
|
|
23
|
+
- 画像: <img>ではなくPictureコンポーネントを使用
|
|
24
|
+
- コンテンツ幅: section > .contentInner でラップ
|
|
25
|
+
- Props: セクションコンポーネントは常に data で受け取る
|
|
26
|
+
- CSSクラス: スネークスタイル(.tech_card)、状態・子要素はケバブ(.tech_card-active)
|
|
27
|
+
- レスポンシブ: モバイルファースト、@include mq() でPC対応
|
|
28
|
+
- target="_blank": rel="noopener noreferrer" は不要(モダンブラウザで暗黙適用)
|
|
29
|
+
|
|
30
|
+
## データ駆動設計
|
|
31
|
+
- ページデータは const page = { head, breadcrumbs, contents } で定義
|
|
32
|
+
- セクションには data={page.contents.xxx} で渡す
|
|
33
|
+
- imgPath は "/_assets/img/" + page.head.slug + "/" で定義
|
|
34
|
+
|
|
35
|
+
## 使用可能なUIパターン
|
|
36
|
+
tab, accordion, grid, carousel, list, modal
|
|
37
|
+
(上記以外はフォールバックで自動生成)
|
|
38
|
+
|
|
39
|
+
## 技術スタック
|
|
40
|
+
- Astro(SSG)
|
|
41
|
+
- SCSS(Tailwind不使用)
|
|
42
|
+
- TypeScript
|
|
43
|
+
- カスタムmixin: @include mq(), @include hover(), @include fontsize()
|
|
44
|
+
`;
|
|
45
|
+
/**
|
|
46
|
+
* プロジェクト構造をスキャンして返す
|
|
47
|
+
*/
|
|
48
|
+
function scanProjectStructure(projectRoot) {
|
|
49
|
+
const structure = {};
|
|
50
|
+
const scanDir = (dir, key, depth = 1) => {
|
|
51
|
+
const fullPath = resolve(projectRoot, dir);
|
|
52
|
+
if (!existsSync(fullPath))
|
|
53
|
+
return;
|
|
54
|
+
try {
|
|
55
|
+
const entries = readdirSync(fullPath);
|
|
56
|
+
structure[key] = entries
|
|
57
|
+
.filter((e) => {
|
|
58
|
+
// 不要なディレクトリ・ファイルを除外
|
|
59
|
+
if (e.startsWith(".") || e === "node_modules")
|
|
60
|
+
return false;
|
|
61
|
+
if (depth === 0)
|
|
62
|
+
return !statSync(resolve(fullPath, e)).isDirectory();
|
|
63
|
+
return true;
|
|
64
|
+
})
|
|
65
|
+
.map((e) => {
|
|
66
|
+
const entryPath = resolve(fullPath, e);
|
|
67
|
+
const isDir = statSync(entryPath).isDirectory();
|
|
68
|
+
return isDir ? `${e}/` : e;
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// 読み込みエラーは無視
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
scanDir("src/layouts", "layouts");
|
|
76
|
+
scanDir("src/components", "components");
|
|
77
|
+
scanDir("src/pages", "pages");
|
|
78
|
+
scanDir("src/scss/abstracts", "scss/abstracts");
|
|
79
|
+
scanDir("src/scss/components", "scss/components");
|
|
80
|
+
scanDir("src/scss/pages", "scss/pages");
|
|
81
|
+
scanDir("src/js", "js", 0);
|
|
82
|
+
return structure;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* プロジェクトコンテキスト取得ツール
|
|
86
|
+
*/
|
|
87
|
+
export async function getProjectContext(args) {
|
|
88
|
+
const { projectRoot = process.cwd() } = args;
|
|
89
|
+
const sections = [];
|
|
90
|
+
// 1. コーディング規約の読み込み(優先順位順)
|
|
91
|
+
const contextFiles = ["ai-context.md", ".cursorrules"];
|
|
92
|
+
let rulesSource = "";
|
|
93
|
+
let rulesContent = "";
|
|
94
|
+
for (const file of contextFiles) {
|
|
95
|
+
const filePath = resolve(projectRoot, file);
|
|
96
|
+
assertPathWithinProject(filePath, projectRoot);
|
|
97
|
+
if (existsSync(filePath)) {
|
|
98
|
+
try {
|
|
99
|
+
rulesContent = readFileSync(filePath, "utf-8")
|
|
100
|
+
.replace(/\n{3,}/g, "\n\n") // 3行以上の空行を2行に
|
|
101
|
+
.trim();
|
|
102
|
+
rulesSource = file;
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
// 読み込みエラーは次のファイルへ
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (rulesContent) {
|
|
111
|
+
sections.push(`## コーディング規約(${rulesSource} より)\n${rulesContent}`);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
sections.push(DEFAULT_CONTEXT.trim());
|
|
115
|
+
}
|
|
116
|
+
// 2. プロジェクト構造のスキャン
|
|
117
|
+
const structure = scanProjectStructure(projectRoot);
|
|
118
|
+
if (Object.keys(structure).length > 0) {
|
|
119
|
+
const structureLines = Object.entries(structure)
|
|
120
|
+
.map(([dir, files]) => `### ${dir}\n${files.map((f) => `- ${f}`).join("\n")}`)
|
|
121
|
+
.join("\n\n");
|
|
122
|
+
sections.push(`## プロジェクト構造\n${structureLines}`);
|
|
123
|
+
}
|
|
124
|
+
// 3. SCSS変数の要約(存在する場合)
|
|
125
|
+
const variablesPath = resolve(projectRoot, "src/scss/abstracts/_variables.scss");
|
|
126
|
+
if (existsSync(variablesPath)) {
|
|
127
|
+
try {
|
|
128
|
+
const varsContent = readFileSync(variablesPath, "utf-8");
|
|
129
|
+
const summary = extractScssVariablesSummary(varsContent);
|
|
130
|
+
if (summary) {
|
|
131
|
+
sections.push(`## SCSS変数(_variables.scss)\n${summary}`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
// 読み込みエラーは無視
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return {
|
|
139
|
+
content: [
|
|
140
|
+
{
|
|
141
|
+
type: "text",
|
|
142
|
+
text: sections.join("\n\n---\n\n"),
|
|
143
|
+
},
|
|
144
|
+
],
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* SCSS変数ファイルからカラー・レイアウト・フォントサイズの要約を抽出
|
|
149
|
+
*/
|
|
150
|
+
function extractScssVariablesSummary(content) {
|
|
151
|
+
const lines = [];
|
|
152
|
+
// カラー変数
|
|
153
|
+
const colorMatches = content.match(/\$color-[\w-]+:\s*[^;]+;/g);
|
|
154
|
+
if (colorMatches) {
|
|
155
|
+
lines.push("### カラー", ...colorMatches.map((m) => `- ${m.trim()}`));
|
|
156
|
+
}
|
|
157
|
+
// レイアウト変数
|
|
158
|
+
const layoutVars = ["$brakePoint", "$containerSize", "$containerPadding"];
|
|
159
|
+
const layoutMatches = layoutVars
|
|
160
|
+
.map((v) => {
|
|
161
|
+
const match = content.match(new RegExp(`${escapeRegExp(v)}:\\s*[^;]+;`));
|
|
162
|
+
return match ? `- ${match[0].trim()}` : null;
|
|
163
|
+
})
|
|
164
|
+
.filter(Boolean);
|
|
165
|
+
if (layoutMatches.length > 0) {
|
|
166
|
+
lines.push("### レイアウト", ...layoutMatches);
|
|
167
|
+
}
|
|
168
|
+
// フォントサイズ変数
|
|
169
|
+
const fontMatches = content.match(/\$font-[\w-]+:\s*[^;]+;/g);
|
|
170
|
+
if (fontMatches) {
|
|
171
|
+
lines.push("### フォントサイズ", ...fontMatches.map((m) => `- ${m.trim()}`));
|
|
172
|
+
}
|
|
173
|
+
return lines.join("\n");
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=getProjectContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getProjectContext.js","sourceRoot":"","sources":["../../src/tools/getProjectContext.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projectContext.d.ts","sourceRoot":"","sources":["../../src/utils/projectContext.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAkBhE"}
|