astro-dev-mcp 0.3.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.
Files changed (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +425 -0
  3. package/dist/editors/commonEditor.d.ts +47 -0
  4. package/dist/editors/commonEditor.d.ts.map +1 -0
  5. package/dist/editors/commonEditor.js +108 -0
  6. package/dist/editors/commonEditor.js.map +1 -0
  7. package/dist/editors/scssVariablesEditor.d.ts +64 -0
  8. package/dist/editors/scssVariablesEditor.d.ts.map +1 -0
  9. package/dist/editors/scssVariablesEditor.js +105 -0
  10. package/dist/editors/scssVariablesEditor.js.map +1 -0
  11. package/dist/generators/astroGenerator.d.ts +15 -0
  12. package/dist/generators/astroGenerator.d.ts.map +1 -0
  13. package/dist/generators/astroGenerator.js +192 -0
  14. package/dist/generators/astroGenerator.js.map +1 -0
  15. package/dist/generators/scssGenerator.d.ts +15 -0
  16. package/dist/generators/scssGenerator.d.ts.map +1 -0
  17. package/dist/generators/scssGenerator.js +70 -0
  18. package/dist/generators/scssGenerator.js.map +1 -0
  19. package/dist/generators/typeGenerator.d.ts +5 -0
  20. package/dist/generators/typeGenerator.d.ts.map +1 -0
  21. package/dist/generators/typeGenerator.js +45 -0
  22. package/dist/generators/typeGenerator.js.map +1 -0
  23. package/dist/index.d.ts +3 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +285 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/parsers/excelParser.d.ts +5 -0
  28. package/dist/parsers/excelParser.d.ts.map +1 -0
  29. package/dist/parsers/excelParser.js +55 -0
  30. package/dist/parsers/excelParser.js.map +1 -0
  31. package/dist/parsers/markdownParser.d.ts +5 -0
  32. package/dist/parsers/markdownParser.d.ts.map +1 -0
  33. package/dist/parsers/markdownParser.js +69 -0
  34. package/dist/parsers/markdownParser.js.map +1 -0
  35. package/dist/templates/pageTemplates.d.ts +24 -0
  36. package/dist/templates/pageTemplates.d.ts.map +1 -0
  37. package/dist/templates/pageTemplates.js +69 -0
  38. package/dist/templates/pageTemplates.js.map +1 -0
  39. package/dist/templates/sectionTemplates.d.ts +14 -0
  40. package/dist/templates/sectionTemplates.d.ts.map +1 -0
  41. package/dist/templates/sectionTemplates.js +199 -0
  42. package/dist/templates/sectionTemplates.js.map +1 -0
  43. package/dist/templates/uiPatterns.d.ts +23 -0
  44. package/dist/templates/uiPatterns.d.ts.map +1 -0
  45. package/dist/templates/uiPatterns.js +330 -0
  46. package/dist/templates/uiPatterns.js.map +1 -0
  47. package/dist/tools/generateComponent.d.ts +10 -0
  48. package/dist/tools/generateComponent.d.ts.map +1 -0
  49. package/dist/tools/generateComponent.js +40 -0
  50. package/dist/tools/generateComponent.js.map +1 -0
  51. package/dist/tools/generatePage.d.ts +10 -0
  52. package/dist/tools/generatePage.d.ts.map +1 -0
  53. package/dist/tools/generatePage.js +95 -0
  54. package/dist/tools/generatePage.js.map +1 -0
  55. package/dist/tools/generateSchema.d.ts +10 -0
  56. package/dist/tools/generateSchema.d.ts.map +1 -0
  57. package/dist/tools/generateSchema.js +70 -0
  58. package/dist/tools/generateSchema.js.map +1 -0
  59. package/dist/tools/generateSection.d.ts +10 -0
  60. package/dist/tools/generateSection.d.ts.map +1 -0
  61. package/dist/tools/generateSection.js +50 -0
  62. package/dist/tools/generateSection.js.map +1 -0
  63. package/dist/utils/formatter.d.ts +6 -0
  64. package/dist/utils/formatter.d.ts.map +1 -0
  65. package/dist/utils/formatter.js +11 -0
  66. package/dist/utils/formatter.js.map +1 -0
  67. package/dist/utils/promptParser.d.ts +58 -0
  68. package/dist/utils/promptParser.d.ts.map +1 -0
  69. package/dist/utils/promptParser.js +200 -0
  70. package/dist/utils/promptParser.js.map +1 -0
  71. package/package.json +54 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 astro-mcp contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,425 @@
1
+ # Astro Generator MCP Server
2
+
3
+ データ駆動型Astroプロジェクトを自動生成するMCP(Model Context Protocol)サーバー
4
+
5
+ ## 概要
6
+
7
+ このMCPサーバーは、デザインデータ、ワイヤーフレーム、コンテンツ資料から、Astroコンポーネント、セクション、ページテンプレートを自動生成します。
8
+
9
+ ### 主な機能
10
+
11
+ - ✅ **コンポーネント生成**: Props定義から再利用可能なAstroコンポーネントを生成
12
+ - ✅ **セクション生成**: コンテンツデータから`_parts`配下のセクションを生成
13
+ - ✅ **ページ生成**: ページ構造全体を一括生成
14
+ - ✅ **スキーマ生成**: Excel/Markdown/JSONからTypeScript型定義を自動生成
15
+
16
+ ## インストール
17
+
18
+ ### 方法1: npxで直接実行(推奨)
19
+
20
+ ```bash
21
+ npx astro-dev-mcp
22
+ ```
23
+
24
+ ### 方法2: グローバルインストール
25
+
26
+ ```bash
27
+ npm install -g astro-dev-mcp
28
+ ```
29
+
30
+ ### 方法3: ローカル開発
31
+
32
+ ```bash
33
+ git clone https://github.com/YoshiokaY/astro-dev-mcp.git
34
+ cd astro-dev-mcp
35
+ npm install
36
+ npm run build
37
+ npm link
38
+ ```
39
+
40
+ ## Claude Desktop設定
41
+
42
+ `~/Library/Application Support/Claude/claude_desktop_config.json` に以下を追加:
43
+
44
+ ### npx使用の場合
45
+
46
+ ```json
47
+ {
48
+ "mcpServers": {
49
+ "astro-generator": {
50
+ "command": "npx",
51
+ "args": ["astro-dev-mcp"]
52
+ }
53
+ }
54
+ }
55
+ ```
56
+
57
+ ### グローバルインストールの場合
58
+
59
+ ```json
60
+ {
61
+ "mcpServers": {
62
+ "astro-generator": {
63
+ "command": "astro-dev-mcp"
64
+ }
65
+ }
66
+ }
67
+ ```
68
+
69
+ ### ローカル開発の場合
70
+
71
+ ```json
72
+ {
73
+ "mcpServers": {
74
+ "astro-generator": {
75
+ "command": "node",
76
+ "args": ["/absolute/path/to/astro-dev-mcp/dist/index.js"]
77
+ }
78
+ }
79
+ }
80
+ ```
81
+
82
+ ## 使い方
83
+
84
+ ### 1. コンポーネント生成
85
+
86
+ **プロンプト例**:
87
+
88
+ ```
89
+ ArticleCardコンポーネントを生成してください。
90
+
91
+ Props:
92
+ - ttl: タイトル(文字列)
93
+ - desc: 説明文(文字列)
94
+ - date: 投稿日(文字列)
95
+ - category: カテゴリ(文字列)
96
+ - img: 画像パス(文字列)
97
+ - imgAlt: 画像の代替テキスト(文字列)
98
+
99
+ デザイン:
100
+ - プライマリカラー: #0ea5e9
101
+ - レイアウト: grid
102
+ - フォントサイズ: 1.6rem
103
+ ```
104
+
105
+ **実行されるMCPツール**:
106
+
107
+ ```json
108
+ {
109
+ "name": "generate-component",
110
+ "arguments": {
111
+ "componentName": "ArticleCard",
112
+ "props": {
113
+ "ttl": { "type": "string", "description": "タイトル" },
114
+ "desc": { "type": "string", "description": "説明文" },
115
+ "date": { "type": "string", "description": "投稿日" },
116
+ "category": { "type": "string", "description": "カテゴリ" },
117
+ "img": { "type": "string", "description": "画像パス" },
118
+ "imgAlt": { "type": "string", "description": "画像の代替テキスト" }
119
+ },
120
+ "design": {
121
+ "colors": { "primary": "#0ea5e9" },
122
+ "layout": "grid",
123
+ "typography": { "size": "1.6rem" }
124
+ },
125
+ "accessibility": true
126
+ }
127
+ }
128
+ ```
129
+
130
+ **出力**:
131
+
132
+ - `src/components/ArticleCard.astro`
133
+ - `src/scss/components/_c_article_card.scss`
134
+
135
+ ---
136
+
137
+ ### 2. セクション生成
138
+
139
+ **プロンプト例**:
140
+
141
+ ```
142
+ sampleページ用のarticlesセクションを生成してください。
143
+
144
+ コンテンツ:
145
+ - タイトル: 最新記事
146
+ - 記事数: 4件
147
+ - 各記事にタイトル、説明文、投稿日、カテゴリ、画像が必要
148
+
149
+ 使用コンポーネント:
150
+ - Picture
151
+ - SetTime
152
+ ```
153
+
154
+ **実行されるMCPツール**:
155
+
156
+ ```json
157
+ {
158
+ "name": "generate-section",
159
+ "arguments": {
160
+ "sectionType": "articles",
161
+ "pageName": "sample",
162
+ "content": {
163
+ "ttl": "最新記事",
164
+ "items": []
165
+ },
166
+ "components": ["Picture", "SetTime"]
167
+ }
168
+ }
169
+ ```
170
+
171
+ **出力**:
172
+
173
+ - `src/pages/_parts/_sample/_articles.astro`
174
+
175
+ ---
176
+
177
+ ### 3. ページ全体生成
178
+
179
+ **プロンプト例**:
180
+
181
+ ```
182
+ blogページを生成してください。
183
+
184
+ ページ情報:
185
+ - slug: blog
186
+ - タイトル: 技術ブログ
187
+ - 説明: Web開発に関する最新情報
188
+ - URL: /blog/
189
+
190
+ セクション構成:
191
+ 1. hero(ヒーローセクション)
192
+ 2. articles(記事一覧)
193
+ 3. categories(カテゴリー)
194
+ 4. qa(よくある質問)
195
+
196
+ パンくずリスト:
197
+ - ホーム > 技術ブログ
198
+ ```
199
+
200
+ **実行されるMCPツール**:
201
+
202
+ ```json
203
+ {
204
+ "name": "generate-page",
205
+ "arguments": {
206
+ "pageName": "blog",
207
+ "pageData": {
208
+ "head": {
209
+ "slug": "blog",
210
+ "ttl": "技術ブログ",
211
+ "description": "Web開発に関する最新情報",
212
+ "url": "/blog/"
213
+ },
214
+ "breadcrumbs": [
215
+ { "text": "ホーム", "link": "/" },
216
+ { "text": "技術ブログ", "link": "/blog/" }
217
+ ],
218
+ "contents": {
219
+ "hero": { "ttl": "Tech Blog", "subtitle": "最新の技術情報を発信" },
220
+ "articles": { "ttl": "最新記事", "items": [] },
221
+ "categories": { "ttl": "カテゴリー", "items": [] },
222
+ "qa": { "ttl": "よくある質問", "items": [] }
223
+ }
224
+ },
225
+ "sections": ["hero", "articles", "categories", "qa"]
226
+ }
227
+ }
228
+ ```
229
+
230
+ **出力**:
231
+
232
+ - `src/pages/blog/index.astro`
233
+
234
+ ---
235
+
236
+ ### 4. Excelからスキーマ生成
237
+
238
+ **プロンプト例**:
239
+
240
+ ```
241
+ 以下のExcelデータからPageData型を生成してください。
242
+
243
+ | セクション種類 | タイトル | 説明文 | 投稿日 | カテゴリ |
244
+ |--------------|---------|--------|--------|---------|
245
+ | articles | 記事1 | 説明1 | 2025-01-01 | フロントエンド |
246
+ | articles | 記事2 | 説明2 | 2025-01-02 | バックエンド |
247
+ ```
248
+
249
+ **実行されるMCPツール**:
250
+
251
+ ```json
252
+ {
253
+ "name": "generate-schema",
254
+ "arguments": {
255
+ "sourceType": "excel",
256
+ "sourceData": "/path/to/data.xlsx",
257
+ "schemaName": "PageData"
258
+ }
259
+ }
260
+ ```
261
+
262
+ **出力**:
263
+
264
+ ```typescript
265
+ export interface PageData {
266
+ head: {
267
+ slug: string;
268
+ ttl: string;
269
+ description: string;
270
+ url: string;
271
+ };
272
+ contents: {
273
+ articles: {
274
+ ttl: string;
275
+ items: {
276
+ タイトル: string;
277
+ 説明文: string;
278
+ 投稿日: string;
279
+ カテゴリ: string;
280
+ }[];
281
+ };
282
+ };
283
+ }
284
+ ```
285
+
286
+ ---
287
+
288
+ ## 実践ワークフロー例
289
+
290
+ ### ケース1: デザインカンプからLP制作
291
+
292
+ ```
293
+ 1. デザインカンプのスクリーンショットをアップロード
294
+
295
+ 「このデザインからヒーローセクションを生成してください」
296
+
297
+ 2. MCPがセクションを生成
298
+
299
+ 3. 「同じデザインで、特徴セクションも生成してください」
300
+
301
+ 4. 「これらのセクションを組み合わせて、LPページ全体を生成してください」
302
+ ```
303
+
304
+ ---
305
+
306
+ ### ケース2: Excelコンテンツ資料から自動生成
307
+
308
+ ```
309
+ 1. Excelファイルのパスを指定
310
+
311
+ 「このExcelからブログページのデータ構造を生成してください」
312
+
313
+ 2. スキーマ生成
314
+
315
+ 3. 「生成されたスキーマに基づいて、ページ全体を生成してください」
316
+ ```
317
+
318
+ ---
319
+
320
+ ## 開発
321
+
322
+ ### ビルド
323
+
324
+ ```bash
325
+ npm run build
326
+ ```
327
+
328
+ ### 開発モード(ウォッチ)
329
+
330
+ ```bash
331
+ npm run dev
332
+ ```
333
+
334
+ ### MCP Inspector(デバッグ)
335
+
336
+ ```bash
337
+ npm run inspector
338
+ ```
339
+
340
+ ---
341
+
342
+ ## プロジェクト構造
343
+
344
+ ```
345
+ astro-mcp/
346
+ ├── src/
347
+ │ ├── index.ts # MCPサーバーエントリーポイント
348
+ │ ├── tools/ # MCPツール実装
349
+ │ │ ├── generateComponent.ts
350
+ │ │ ├── generateSection.ts
351
+ │ │ ├── generatePage.ts
352
+ │ │ └── generateSchema.ts
353
+ │ ├── generators/ # コード生成ロジック
354
+ │ │ ├── astroGenerator.ts
355
+ │ │ ├── scssGenerator.ts
356
+ │ │ └── typeGenerator.ts
357
+ │ ├── templates/ # テンプレート
358
+ │ │ ├── sectionTemplates.ts
359
+ │ │ └── pageTemplates.ts
360
+ │ ├── parsers/ # データパーサー
361
+ │ │ ├── excelParser.ts
362
+ │ │ └── markdownParser.ts
363
+ │ └── utils/ # ユーティリティ
364
+ │ └── formatter.ts
365
+ ├── package.json
366
+ ├── tsconfig.json
367
+ └── README.md
368
+ ```
369
+
370
+ ---
371
+
372
+ ## サポートするセクションタイプ
373
+
374
+ - `hero`: ヒーローセクション
375
+ - `articles`: 記事一覧
376
+ - `categories`: カテゴリー一覧
377
+ - `qa`: Q&A/FAQ
378
+ - `features`: 特徴・機能紹介
379
+ - `tech`: 技術スタック
380
+ - `concept`: コンセプト説明
381
+ - `videos`: 動画コンテンツ
382
+ - `custom`: カスタムセクション
383
+
384
+ ---
385
+
386
+ ## ロードマップ
387
+
388
+ ### Phase 1: プロトタイプ(完了)
389
+
390
+ - [x] 基本的なMCPサーバー構築
391
+ - [x] コンポーネント生成機能
392
+ - [x] セクション生成機能
393
+ - [x] ページ生成機能
394
+ - [x] スキーマ生成機能
395
+
396
+ ### Phase 2: 拡張機能(次期)
397
+
398
+ - [ ] Figma API連携(デザイントークン自動抽出)
399
+ - [ ] 画像OCR対応(デザインカンプ解析)
400
+ - [ ] レスポンシブSCSS自動生成
401
+ - [ ] アクセシビリティチェック機能
402
+
403
+ ### Phase 3: AI強化(将来)
404
+
405
+ - [ ] 自然言語からの直接生成
406
+ - [ ] デザインシステム学習機能
407
+ - [ ] コンポーネントライブラリ管理
408
+
409
+ ---
410
+
411
+ ## ライセンス
412
+
413
+ MIT
414
+
415
+ ---
416
+
417
+ ## 貢献
418
+
419
+ Issue、Pull Requestを歓迎します。
420
+
421
+ ---
422
+
423
+ ## お問い合わせ
424
+
425
+ プロジェクトに関する質問は、GitHubのIssueでお願いします。
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Common.astro 編集機能
3
+ * サイト全体の設定(head, menu)を解析・更新する
4
+ */
5
+ export interface HeadConfig {
6
+ siteName?: string;
7
+ domain?: string;
8
+ favicon?: string;
9
+ ogImg?: string;
10
+ logo?: string;
11
+ copyright?: string;
12
+ webfont?: string;
13
+ twitterName?: string;
14
+ facebookID?: string;
15
+ }
16
+ export interface MenuItem {
17
+ link: string;
18
+ txt: string;
19
+ child?: MenuItem[];
20
+ anchor?: boolean;
21
+ blank?: boolean;
22
+ }
23
+ export interface CommonUpdateConfig {
24
+ head?: HeadConfig;
25
+ menu?: MenuItem[];
26
+ }
27
+ /**
28
+ * Common.astro の内容を解析
29
+ */
30
+ export declare function parseCommonAstro(content: string): {
31
+ head: HeadConfig;
32
+ menu: MenuItem[];
33
+ fullContent: string;
34
+ };
35
+ /**
36
+ * Common.astro の head セクションを更新
37
+ */
38
+ export declare function updateCommonHead(originalContent: string, updates: HeadConfig): string;
39
+ /**
40
+ * Common.astro の menu セクションを更新
41
+ */
42
+ export declare function updateCommonMenu(originalContent: string, menuItems: MenuItem[]): string;
43
+ /**
44
+ * Common.astro全体を更新
45
+ */
46
+ export declare function updateCommonAstro(originalContent: string, config: CommonUpdateConfig): string;
47
+ //# sourceMappingURL=commonEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commonEditor.d.ts","sourceRoot":"","sources":["../../src/editors/commonEditor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;IACjD,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,CAmCA;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,UAAU,GAClB,MAAM,CAiBR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,QAAQ,EAAE,GACpB,MAAM,CASR;AAkCD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,kBAAkB,GACzB,MAAM,CAcR"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Common.astro 編集機能
3
+ * サイト全体の設定(head, menu)を解析・更新する
4
+ */
5
+ /**
6
+ * Common.astro の内容を解析
7
+ */
8
+ export function parseCommonAstro(content) {
9
+ // head セクションの抽出
10
+ const headMatch = content.match(/head:\s*{([^}]+)}/s);
11
+ const head = {};
12
+ if (headMatch) {
13
+ const headContent = headMatch[1];
14
+ // 各プロパティを正規表現で抽出
15
+ const extractValue = (key) => {
16
+ const match = headContent.match(new RegExp(`${key}:\\s*"([^"]*)"`, 's'));
17
+ return match ? match[1] : undefined;
18
+ };
19
+ head.siteName = extractValue('siteName');
20
+ head.domain = extractValue('domain');
21
+ head.favicon = extractValue('favicon');
22
+ head.ogImg = extractValue('ogImg');
23
+ head.logo = extractValue('logo');
24
+ head.copyright = extractValue('copyright');
25
+ head.webfont = extractValue('webfont');
26
+ head.twitterName = extractValue('twitterName');
27
+ head.facebookID = extractValue('facebookID');
28
+ }
29
+ // menu セクションの抽出(簡易版、実際のパースは複雑)
30
+ const menuMatch = content.match(/menu:\s*\[([^\]]+)\]/s);
31
+ const menu = [];
32
+ // 既存の完全なコンテンツを保持
33
+ return {
34
+ head,
35
+ menu,
36
+ fullContent: content,
37
+ };
38
+ }
39
+ /**
40
+ * Common.astro の head セクションを更新
41
+ */
42
+ export function updateCommonHead(originalContent, updates) {
43
+ let updatedContent = originalContent;
44
+ // 各プロパティを更新
45
+ for (const [key, value] of Object.entries(updates)) {
46
+ if (value !== undefined) {
47
+ // 既存の行を置換
48
+ const regex = new RegExp(`(${key}:\\s*)"[^"]*"`, 'g');
49
+ const replacement = `$1"${value}"`;
50
+ if (updatedContent.match(regex)) {
51
+ updatedContent = updatedContent.replace(regex, replacement);
52
+ }
53
+ }
54
+ }
55
+ return updatedContent;
56
+ }
57
+ /**
58
+ * Common.astro の menu セクションを更新
59
+ */
60
+ export function updateCommonMenu(originalContent, menuItems) {
61
+ // menu配列を文字列化
62
+ const menuString = formatMenuArray(menuItems);
63
+ // 既存のmenu配列を置換
64
+ const regex = /menu:\s*\[[^\]]*\]/s;
65
+ const replacement = `menu: ${menuString}`;
66
+ return originalContent.replace(regex, replacement);
67
+ }
68
+ /**
69
+ * MenuItem配列をAstro形式の文字列に変換
70
+ */
71
+ function formatMenuArray(items, indent = 2) {
72
+ const spaces = ' '.repeat(indent);
73
+ const lines = ['['];
74
+ items.forEach((item, index) => {
75
+ lines.push(`${spaces} {`);
76
+ lines.push(`${spaces} link: "${item.link}",`);
77
+ lines.push(`${spaces} txt: "${item.txt}",`);
78
+ if (item.anchor !== undefined) {
79
+ lines.push(`${spaces} anchor: ${item.anchor},`);
80
+ }
81
+ if (item.blank !== undefined) {
82
+ lines.push(`${spaces} blank: ${item.blank},`);
83
+ }
84
+ if (item.child && item.child.length > 0) {
85
+ const childString = formatMenuArray(item.child, indent + 4);
86
+ lines.push(`${spaces} child: ${childString},`);
87
+ }
88
+ lines.push(`${spaces} }${index < items.length - 1 ? ',' : ''}`);
89
+ });
90
+ lines.push(`${spaces}]`);
91
+ return lines.join('\n');
92
+ }
93
+ /**
94
+ * Common.astro全体を更新
95
+ */
96
+ export function updateCommonAstro(originalContent, config) {
97
+ let updatedContent = originalContent;
98
+ // head セクションの更新
99
+ if (config.head) {
100
+ updatedContent = updateCommonHead(updatedContent, config.head);
101
+ }
102
+ // menu セクションの更新
103
+ if (config.menu) {
104
+ updatedContent = updateCommonMenu(updatedContent, config.menu);
105
+ }
106
+ return updatedContent;
107
+ }
108
+ //# sourceMappingURL=commonEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commonEditor.js","sourceRoot":"","sources":["../../src/editors/commonEditor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * _variables.scss 編集機能
3
+ * SCSS変数(カラー、サイズ、ブレークポイント)を解析・更新する
4
+ */
5
+ export interface ColorVariables {
6
+ 'color-body'?: string;
7
+ 'color-txt'?: string;
8
+ 'color-reversal'?: string;
9
+ 'color-gray'?: string;
10
+ 'color-prime'?: string;
11
+ 'color-second'?: string;
12
+ 'color-third'?: string;
13
+ }
14
+ export interface LayoutVariables {
15
+ brakePoint?: number;
16
+ containerSize?: number;
17
+ containerPadding?: number;
18
+ }
19
+ export interface FontSizeConfig {
20
+ pc: number;
21
+ sp: number;
22
+ }
23
+ export interface FontSizeVariables {
24
+ h1?: FontSizeConfig;
25
+ h2?: FontSizeConfig;
26
+ h3?: FontSizeConfig;
27
+ h4?: FontSizeConfig;
28
+ h5?: FontSizeConfig;
29
+ xl?: FontSizeConfig;
30
+ lg?: FontSizeConfig;
31
+ base?: FontSizeConfig;
32
+ sm?: FontSizeConfig;
33
+ xs?: FontSizeConfig;
34
+ }
35
+ export interface ScssVariablesConfig {
36
+ colors?: ColorVariables;
37
+ layout?: LayoutVariables;
38
+ fontSizes?: FontSizeVariables;
39
+ }
40
+ /**
41
+ * _variables.scss の内容を解析
42
+ */
43
+ export declare function parseScssVariables(content: string): {
44
+ colors: ColorVariables;
45
+ layout: LayoutVariables;
46
+ fontSizes: FontSizeVariables;
47
+ };
48
+ /**
49
+ * カラー変数を更新
50
+ */
51
+ export declare function updateScssColors(originalContent: string, colors: ColorVariables): string;
52
+ /**
53
+ * レイアウト変数を更新
54
+ */
55
+ export declare function updateScssLayout(originalContent: string, layout: LayoutVariables): string;
56
+ /**
57
+ * フォントサイズ変数を更新
58
+ */
59
+ export declare function updateScssFontSizes(originalContent: string, fontSizes: FontSizeVariables): string;
60
+ /**
61
+ * _variables.scss 全体を更新
62
+ */
63
+ export declare function updateScssVariables(originalContent: string, config: ScssVariablesConfig): string;
64
+ //# sourceMappingURL=scssVariablesEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scssVariablesEditor.d.ts","sourceRoot":"","sources":["../../src/editors/scssVariablesEditor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,CAAC,EAAE,cAAc,CAAC;IACpB,EAAE,CAAC,EAAE,cAAc,CAAC;IACpB,EAAE,CAAC,EAAE,cAAc,CAAC;IACpB,EAAE,CAAC,EAAE,cAAc,CAAC;IACpB,EAAE,CAAC,EAAE,cAAc,CAAC;IACpB,EAAE,CAAC,EAAE,cAAc,CAAC;IACpB,EAAE,CAAC,EAAE,cAAc,CAAC;IACpB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,EAAE,CAAC,EAAE,cAAc,CAAC;IACpB,EAAE,CAAC,EAAE,cAAc,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG;IACnD,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,eAAe,CAAC;IACxB,SAAS,EAAE,iBAAiB,CAAC;CAC9B,CAwCA;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,cAAc,GACrB,MAAM,CAeR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,eAAe,GACtB,MAAM,CAyBR;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,iBAAiB,GAC3B,MAAM,CAaR;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,mBAAmB,GAC1B,MAAM,CAgBR"}