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
@@ -0,0 +1,105 @@
1
+ /**
2
+ * _variables.scss 編集機能
3
+ * SCSS変数(カラー、サイズ、ブレークポイント)を解析・更新する
4
+ */
5
+ /**
6
+ * _variables.scss の内容を解析
7
+ */
8
+ export function parseScssVariables(content) {
9
+ const colors = {};
10
+ const layout = {};
11
+ const fontSizes = {};
12
+ // カラー変数を抽出
13
+ const colorPattern = /\$color-([\w-]+):\s*([^;]+);/g;
14
+ let match;
15
+ while ((match = colorPattern.exec(content)) !== null) {
16
+ const key = `color-${match[1]}`;
17
+ colors[key] = match[2].trim();
18
+ }
19
+ // レイアウト変数を抽出
20
+ const brakePointMatch = content.match(/\$brakePoint:\s*(\d+);/);
21
+ if (brakePointMatch) {
22
+ layout.brakePoint = parseInt(brakePointMatch[1]);
23
+ }
24
+ const containerSizeMatch = content.match(/\$containerSize:\s*(\d+);/);
25
+ if (containerSizeMatch) {
26
+ layout.containerSize = parseInt(containerSizeMatch[1]);
27
+ }
28
+ const containerPaddingMatch = content.match(/\$containerPadding:\s*(\d+);/);
29
+ if (containerPaddingMatch) {
30
+ layout.containerPadding = parseInt(containerPaddingMatch[1]);
31
+ }
32
+ // フォントサイズ変数を抽出(例: $h1: 64, 40;)
33
+ const fontSizePattern = /\$(h[1-5]|xl|lg|base|sm|xs):\s*(\d+),\s*(\d+);/g;
34
+ while ((match = fontSizePattern.exec(content)) !== null) {
35
+ const key = match[1];
36
+ fontSizes[key] = {
37
+ pc: parseInt(match[2]),
38
+ sp: parseInt(match[3]),
39
+ };
40
+ }
41
+ return { colors, layout, fontSizes };
42
+ }
43
+ /**
44
+ * カラー変数を更新
45
+ */
46
+ export function updateScssColors(originalContent, colors) {
47
+ let updatedContent = originalContent;
48
+ for (const [key, value] of Object.entries(colors)) {
49
+ if (value !== undefined) {
50
+ // $color-prime: #1d4ed8; のような行を置換
51
+ const varName = key.replace('color-', '');
52
+ const regex = new RegExp(`\\$color-${varName}:\\s*[^;]+;`, 'g');
53
+ const replacement = `$color-${varName}: ${value};`;
54
+ updatedContent = updatedContent.replace(regex, replacement);
55
+ }
56
+ }
57
+ return updatedContent;
58
+ }
59
+ /**
60
+ * レイアウト変数を更新
61
+ */
62
+ export function updateScssLayout(originalContent, layout) {
63
+ let updatedContent = originalContent;
64
+ if (layout.brakePoint !== undefined) {
65
+ updatedContent = updatedContent.replace(/\$brakePoint:\s*\d+;/, `$brakePoint: ${layout.brakePoint};`);
66
+ }
67
+ if (layout.containerSize !== undefined) {
68
+ updatedContent = updatedContent.replace(/\$containerSize:\s*\d+;/, `$containerSize: ${layout.containerSize};`);
69
+ }
70
+ if (layout.containerPadding !== undefined) {
71
+ updatedContent = updatedContent.replace(/\$containerPadding:\s*\d+;/, `$containerPadding: ${layout.containerPadding};`);
72
+ }
73
+ return updatedContent;
74
+ }
75
+ /**
76
+ * フォントサイズ変数を更新
77
+ */
78
+ export function updateScssFontSizes(originalContent, fontSizes) {
79
+ let updatedContent = originalContent;
80
+ for (const [key, value] of Object.entries(fontSizes)) {
81
+ if (value !== undefined) {
82
+ const regex = new RegExp(`\\$${key}:\\s*\\d+,\\s*\\d+;`, 'g');
83
+ const replacement = `$${key}: ${value.pc}, ${value.sp};`;
84
+ updatedContent = updatedContent.replace(regex, replacement);
85
+ }
86
+ }
87
+ return updatedContent;
88
+ }
89
+ /**
90
+ * _variables.scss 全体を更新
91
+ */
92
+ export function updateScssVariables(originalContent, config) {
93
+ let updatedContent = originalContent;
94
+ if (config.colors) {
95
+ updatedContent = updateScssColors(updatedContent, config.colors);
96
+ }
97
+ if (config.layout) {
98
+ updatedContent = updateScssLayout(updatedContent, config.layout);
99
+ }
100
+ if (config.fontSizes) {
101
+ updatedContent = updateScssFontSizes(updatedContent, config.fontSizes);
102
+ }
103
+ return updatedContent;
104
+ }
105
+ //# sourceMappingURL=scssVariablesEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scssVariablesEditor.js","sourceRoot":"","sources":["../../src/editors/scssVariablesEditor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ interface AstroComponentConfig {
2
+ name: string;
3
+ props: Record<string, any>;
4
+ accessibility: boolean;
5
+ }
6
+ /**
7
+ * Astroコンポーネントコード生成
8
+ */
9
+ export declare function generateAstroComponent(config: AstroComponentConfig): Promise<string>;
10
+ /**
11
+ * グローバルナビゲーションコンポーネント生成(開発環境準拠)
12
+ */
13
+ export declare function generateGnaviComponent(): string;
14
+ export {};
15
+ //# sourceMappingURL=astroGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astroGenerator.d.ts","sourceRoot":"","sources":["../../src/generators/astroGenerator.ts"],"names":[],"mappings":"AAAA,UAAU,oBAAoB;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAqHD;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAoF/C"}
@@ -0,0 +1,192 @@
1
+ /**
2
+ * Astroコンポーネントコード生成
3
+ */
4
+ export async function generateAstroComponent(config) {
5
+ const { name, props, accessibility = true } = config;
6
+ // Props定義からTypeScript interfaceを生成
7
+ const propsInterface = generatePropsInterface(props);
8
+ // Props destructuringを生成
9
+ const propsDestructuring = Object.keys(props).join(", ");
10
+ // コンポーネント本体を生成
11
+ const componentBody = generateComponentBody(name, props, accessibility);
12
+ return `---
13
+ /**
14
+ * ${name} コンポーネント
15
+ */
16
+ ${propsInterface}
17
+
18
+ const { ${propsDestructuring} } = Astro.props;
19
+ ---
20
+
21
+ ${componentBody}
22
+ `;
23
+ }
24
+ function generatePropsInterface(props) {
25
+ const lines = ["interface Props {"];
26
+ for (const [key, config] of Object.entries(props)) {
27
+ const typeInfo = typeof config === "object" ? config : { type: config };
28
+ const optional = typeInfo.optional ? "?" : "";
29
+ const type = mapTypeToTS(typeInfo.type || "string");
30
+ const comment = typeInfo.description
31
+ ? ` /** ${typeInfo.description} */\n`
32
+ : "";
33
+ lines.push(`${comment} ${key}${optional}: ${type};`);
34
+ }
35
+ lines.push("}");
36
+ return lines.join("\n");
37
+ }
38
+ function mapTypeToTS(type) {
39
+ const typeMap = {
40
+ text: "string",
41
+ string: "string",
42
+ number: "number",
43
+ boolean: "boolean",
44
+ date: "string",
45
+ url: "string",
46
+ array: "string[]",
47
+ object: "Record<string, any>",
48
+ };
49
+ return typeMap[type] || "string";
50
+ }
51
+ function generateAriaAttributes(props) {
52
+ // Props に応じた適切なARIA属性を生成
53
+ const hasInteraction = Object.keys(props).some((key) => ["onClick", "onSubmit", "href"].includes(key));
54
+ if (hasInteraction) {
55
+ return ' role="button" tabindex="0"';
56
+ }
57
+ return "";
58
+ }
59
+ function generateComponentBody(name, props, accessibility) {
60
+ const className = `c_${toSnakeCase(name)}`;
61
+ // シンプルなカード型コンポーネントのテンプレート
62
+ const propKeys = Object.keys(props);
63
+ const hasImage = propKeys.some((key) => key.includes("img") || key === "src");
64
+ const hasTitle = propKeys.some((key) => key.includes("ttl") || key === "title");
65
+ const hasDesc = propKeys.some((key) => key.includes("desc") || key === "description");
66
+ // アクセシビリティ対応のaria属性
67
+ const ariaAttrs = accessibility ? generateAriaAttributes(props) : "";
68
+ let body = `<div class="${className}"${ariaAttrs}>`;
69
+ if (hasImage) {
70
+ const imgProp = propKeys.find((key) => key.includes("img") || key === "src");
71
+ const altProp = propKeys.find((key) => key.includes("alt")) || "alt";
72
+ const altRequired = accessibility ? ` alt={${altProp}}` : "";
73
+ body += `\n <div class="${className}_img">
74
+ <img src={${imgProp}}${altRequired} loading="lazy" />
75
+ </div>`;
76
+ }
77
+ body += `\n <div class="${className}_body">`;
78
+ if (hasTitle) {
79
+ const titleProp = propKeys.find((key) => key.includes("ttl") || key === "title");
80
+ body += `\n <h3 class="${className}_ttl">{${titleProp}}</h3>`;
81
+ }
82
+ if (hasDesc) {
83
+ const descProp = propKeys.find((key) => key.includes("desc") || key === "description");
84
+ body += `\n <p class="${className}_desc">{${descProp}}</p>`;
85
+ }
86
+ // その他のpropsを表示
87
+ for (const key of propKeys) {
88
+ if (!key.includes("img") &&
89
+ !key.includes("alt") &&
90
+ !key.includes("ttl") &&
91
+ !key.includes("desc") &&
92
+ !key.includes("title") &&
93
+ !key.includes("description")) {
94
+ body += `\n <div class="${className}_${toSnakeCase(key)}">{${key}}</div>`;
95
+ }
96
+ }
97
+ body += `\n </div>`;
98
+ body += `\n</div>`;
99
+ return body;
100
+ }
101
+ function toSnakeCase(str) {
102
+ return str.replace(/([a-z])([A-Z])/g, "$1_$2").toLowerCase();
103
+ }
104
+ /**
105
+ * グローバルナビゲーションコンポーネント生成(開発環境準拠)
106
+ */
107
+ export function generateGnaviComponent() {
108
+ return `---
109
+ /**
110
+ * グローバルナビゲーションコンポーネント
111
+ * Hamburger.ts と連携してSPメニューの開閉を制御
112
+ */
113
+ interface MenuItem {
114
+ link: string;
115
+ txt: string;
116
+ blank?: boolean;
117
+ anchor?: boolean;
118
+ child?: MenuItem[];
119
+ }
120
+
121
+ interface Props {
122
+ /**
123
+ * グローバルナビゲーションのメニュー項目を定義する配列。
124
+ */
125
+ menu: MenuItem[];
126
+ /**
127
+ * 現在のページのスラッグ。アンカーリンクの条件分岐に使用されます。
128
+ */
129
+ slug: string;
130
+ }
131
+
132
+ const { menu, slug } = Astro.props;
133
+ ---
134
+
135
+ <nav class="c_nav">
136
+ <h2 class="txtHidden">グローバルナビゲーション</h2>
137
+ <button type="button" class="c_nav_btn" aria-expanded="false">
138
+ <span>メニューを開く</span>
139
+ </button>
140
+ <div class="c_nav_wrapper">
141
+ <ul id="navi">
142
+ {
143
+ menu.map((item) => {
144
+ // 現在のページと一致するか判定
145
+ const isActive =
146
+ item.link === "/"
147
+ ? slug === "top"
148
+ : item.link.replace(/\\/$/, "").endsWith(\`/\${slug}\`);
149
+
150
+ return (
151
+ <li class={item.child ? "has-child" : undefined}>
152
+ <a
153
+ href={item.link}
154
+ target={item.blank ? "_blank" : "_self"}
155
+ class={isActive ? "-active" : undefined}
156
+ set:html={item.txt}
157
+ />
158
+ {item.child && (
159
+ <>
160
+ <button type="button" class="spAccordion">
161
+ <span class="txtHidden">子メニューを表示します</span>
162
+ </button>
163
+ <ul class="subMenu">
164
+ {item.child.map((child) => (
165
+ <li>
166
+ <a
167
+ href={
168
+ child.anchor && child.link.startsWith("#")
169
+ ? slug === "sample"
170
+ ? child.link
171
+ : \`/sample/\${child.link}\`
172
+ : child.link
173
+ }
174
+ target={child.blank ? "_blank" : "_self"}
175
+ set:html={child.txt}
176
+ />
177
+ </li>
178
+ ))}
179
+ </ul>
180
+ </>
181
+ )}
182
+ </li>
183
+ );
184
+ })
185
+ }
186
+ </ul>
187
+ <button type="button" class="c_nav_close txtHidden">メニューを閉じる</button>
188
+ </div>
189
+ </nav>
190
+ `;
191
+ }
192
+ //# sourceMappingURL=astroGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astroGenerator.js","sourceRoot":"","sources":["../../src/generators/astroGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ interface ScssConfig {
2
+ name: string;
3
+ design?: {
4
+ colors?: Record<string, string>;
5
+ typography?: Record<string, string>;
6
+ layout?: "grid" | "flex" | "block";
7
+ };
8
+ }
9
+ /**
10
+ * SCSSコード生成
11
+ * 開発環境のmixin・変数を活用
12
+ */
13
+ export declare function generateScss(config: ScssConfig): Promise<string>;
14
+ export {};
15
+ //# sourceMappingURL=scssGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scssGenerator.d.ts","sourceRoot":"","sources":["../../src/generators/scssGenerator.ts"],"names":[],"mappings":"AAAA,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACpC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;KACpC,CAAC;CACH;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAmEtE"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * SCSSコード生成
3
+ * 開発環境のmixin・変数を活用
4
+ */
5
+ export async function generateScss(config) {
6
+ const { name, design = {} } = config;
7
+ const className = `.c_${toSnakeCase(name)}`;
8
+ const { colors = { primary: "$color-prime", background: "$color-body" }, typography = { size: "$text-lg", lineHeight: "1.6" }, layout = "flex", } = design;
9
+ return `${className} {
10
+ display: ${layout === "grid" ? "grid" : layout === "flex" ? "flex" : "block"};
11
+ ${layout === "flex" ? "flex-direction: column;" : ""}
12
+ ${layout === "grid" ? "grid-template-columns: 1fr;\n gap: 1.6rem;" : ""}
13
+ padding: 2rem;
14
+ background: ${colors.background || "$color-body"};
15
+ border-radius: 0.4rem;
16
+ transition: transform $easing;
17
+
18
+ @include mq() {
19
+ padding: 2.4rem;
20
+ ${layout === "grid" ? "grid-template-columns: repeat(2, 1fr);" : ""}
21
+ }
22
+
23
+ @include hover {
24
+ transform: translateY(-0.4rem);
25
+ }
26
+
27
+ &_img {
28
+ aspect-ratio: 16 / 9;
29
+ overflow: hidden;
30
+ border-radius: 0.4rem;
31
+
32
+ img {
33
+ width: 100%;
34
+ height: 100%;
35
+ object-fit: cover;
36
+ transition: transform $easing;
37
+ }
38
+
39
+ @include hover {
40
+ img {
41
+ transform: scale(1.05);
42
+ }
43
+ }
44
+ }
45
+
46
+ &_body {
47
+ display: flex;
48
+ flex-direction: column;
49
+ gap: 1.2rem;
50
+ }
51
+
52
+ &_ttl {
53
+ font-size: ${typography.size || "$text-lg"};
54
+ font-weight: 700;
55
+ line-height: ${typography.lineHeight || "1.6"};
56
+ color: ${colors.primary || "$color-prime"};
57
+ }
58
+
59
+ &_desc {
60
+ font-size: $text-sm;
61
+ line-height: 1.7;
62
+ color: $color-txt;
63
+ }
64
+ }
65
+ `;
66
+ }
67
+ function toSnakeCase(str) {
68
+ return str.replace(/([a-z])([A-Z])/g, "$1_$2").toLowerCase();
69
+ }
70
+ //# sourceMappingURL=scssGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scssGenerator.js","sourceRoot":"","sources":["../../src/generators/scssGenerator.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAkB;IACnD,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;IACrC,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;IAE5C,MAAM,EACJ,MAAM,GAAG,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,EAC/D,UAAU,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,EACpD,MAAM,GAAG,MAAM,GAChB,GAAG,MAAM,CAAC;IAEX,OAAO,GAAG,SAAS;aACR,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;IAC1E,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE;IAClD,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,6CAA6C,CAAC,CAAC,CAAC,EAAE;;gBAE1D,MAAM,CAAC,UAAU,IAAI,aAAa;;;;;;MAM5C,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiCtD,UAAU,CAAC,IAAI,IAAI,UAAU;;mBAE3B,UAAU,CAAC,UAAU,IAAI,KAAK;aACpC,MAAM,CAAC,OAAO,IAAI,cAAc;;;;;;;;;CAS5C,CAAC;AACF,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * TypeScript型定義生成
3
+ */
4
+ export declare function generateTypeDefinition(name: string, data: Record<string, any>): string;
5
+ //# sourceMappingURL=typeGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeGenerator.d.ts","sourceRoot":"","sources":["../../src/generators/typeGenerator.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxB,MAAM,CAWR"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * TypeScript型定義生成
3
+ */
4
+ export function generateTypeDefinition(name, data) {
5
+ const interfaceBody = generateInterfaceBody(data, 1);
6
+ return `/**
7
+ * ${name} 型定義
8
+ * 自動生成されたインターフェース
9
+ */
10
+ export interface ${name} {
11
+ ${interfaceBody}
12
+ }
13
+ `;
14
+ }
15
+ function generateInterfaceBody(data, indent) {
16
+ const indentation = " ".repeat(indent);
17
+ const lines = [];
18
+ for (const [key, value] of Object.entries(data)) {
19
+ const type = inferTypeFromValue(value, indent + 1);
20
+ lines.push(`${indentation}${key}: ${type};`);
21
+ }
22
+ return lines.join("\n");
23
+ }
24
+ function inferTypeFromValue(value, indent) {
25
+ const indentation = " ".repeat(indent);
26
+ if (value === null || value === undefined) {
27
+ return "any";
28
+ }
29
+ if (Array.isArray(value)) {
30
+ if (value.length === 0) {
31
+ return "any[]";
32
+ }
33
+ const firstItem = value[0];
34
+ if (typeof firstItem === "object" && firstItem !== null) {
35
+ const itemType = `{\n${generateInterfaceBody(firstItem, indent + 1)}\n${indentation}}`;
36
+ return `${itemType}[]`;
37
+ }
38
+ return `${typeof firstItem}[]`;
39
+ }
40
+ if (typeof value === "object") {
41
+ return `{\n${generateInterfaceBody(value, indent + 1)}\n${indentation}}`;
42
+ }
43
+ return typeof value;
44
+ }
45
+ //# sourceMappingURL=typeGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeGenerator.js","sourceRoot":"","sources":["../../src/generators/typeGenerator.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAY,EACZ,IAAyB;IAEzB,MAAM,aAAa,GAAG,qBAAqB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAErD,OAAO;KACJ,IAAI;;;mBAGU,IAAI;EACrB,aAAa;;CAEd,CAAC;AACF,CAAC;AAED,SAAS,qBAAqB,CAC5B,IAAyB,EACzB,MAAc;IAEd,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,GAAG,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAU,EAAE,MAAc;IACpD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAExC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACxD,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,WAAW,GAAG,CAAC;YACvF,OAAO,GAAG,QAAQ,IAAI,CAAC;QACzB,CAAC;QAED,OAAO,GAAG,OAAO,SAAS,IAAI,CAAC;IACjC,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,MAAM,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,WAAW,GAAG,CAAC;IAC3E,CAAC;IAED,OAAO,OAAO,KAAK,CAAC;AACtB,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}