create-specment 0.2.2

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 (113) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +314 -0
  3. package/bin/commands/create.d.ts +3 -0
  4. package/bin/commands/create.d.ts.map +1 -0
  5. package/bin/commands/create.js +30 -0
  6. package/bin/commands/create.js.map +1 -0
  7. package/bin/constants/languages.d.ts +15 -0
  8. package/bin/constants/languages.d.ts.map +1 -0
  9. package/bin/constants/languages.js +14 -0
  10. package/bin/constants/languages.js.map +1 -0
  11. package/bin/core/interactive-setup.d.ts +15 -0
  12. package/bin/core/interactive-setup.d.ts.map +1 -0
  13. package/bin/core/interactive-setup.js +171 -0
  14. package/bin/core/interactive-setup.js.map +1 -0
  15. package/bin/core/interactive-setup.test.d.ts +2 -0
  16. package/bin/core/interactive-setup.test.d.ts.map +1 -0
  17. package/bin/core/interactive-setup.test.js +97 -0
  18. package/bin/core/interactive-setup.test.js.map +1 -0
  19. package/bin/core/project-generator.d.ts +12 -0
  20. package/bin/core/project-generator.d.ts.map +1 -0
  21. package/bin/core/project-generator.js +83 -0
  22. package/bin/core/project-generator.js.map +1 -0
  23. package/bin/features/index.d.ts +3 -0
  24. package/bin/features/index.d.ts.map +1 -0
  25. package/bin/features/index.js +47 -0
  26. package/bin/features/index.js.map +1 -0
  27. package/bin/generators/docusaurus-config.d.ts +3 -0
  28. package/bin/generators/docusaurus-config.d.ts.map +1 -0
  29. package/bin/generators/docusaurus-config.js +285 -0
  30. package/bin/generators/docusaurus-config.js.map +1 -0
  31. package/bin/generators/package-json.d.ts +3 -0
  32. package/bin/generators/package-json.d.ts.map +1 -0
  33. package/bin/generators/package-json.js +98 -0
  34. package/bin/generators/package-json.js.map +1 -0
  35. package/bin/generators/template-files.d.ts +3 -0
  36. package/bin/generators/template-files.d.ts.map +1 -0
  37. package/bin/generators/template-files.js +370 -0
  38. package/bin/generators/template-files.js.map +1 -0
  39. package/bin/index.d.ts +5 -0
  40. package/bin/index.d.ts.map +1 -0
  41. package/bin/index.js +37 -0
  42. package/bin/index.js.map +1 -0
  43. package/bin/plugins/i18n-integration.d.ts +25 -0
  44. package/bin/plugins/i18n-integration.d.ts.map +1 -0
  45. package/bin/plugins/i18n-integration.js +309 -0
  46. package/bin/plugins/i18n-integration.js.map +1 -0
  47. package/bin/plugins/plantuml-integration.d.ts +17 -0
  48. package/bin/plugins/plantuml-integration.d.ts.map +1 -0
  49. package/bin/plugins/plantuml-integration.js +111 -0
  50. package/bin/plugins/plantuml-integration.js.map +1 -0
  51. package/bin/plugins/redoc-integration.d.ts +25 -0
  52. package/bin/plugins/redoc-integration.d.ts.map +1 -0
  53. package/bin/plugins/redoc-integration.js +372 -0
  54. package/bin/plugins/redoc-integration.js.map +1 -0
  55. package/bin/plugins/search-integration.d.ts +20 -0
  56. package/bin/plugins/search-integration.d.ts.map +1 -0
  57. package/bin/plugins/search-integration.js +165 -0
  58. package/bin/plugins/search-integration.js.map +1 -0
  59. package/bin/templates/index.d.ts +4 -0
  60. package/bin/templates/index.d.ts.map +1 -0
  61. package/bin/templates/index.js +60 -0
  62. package/bin/templates/index.js.map +1 -0
  63. package/bin/templates/template-definitions.d.ts +10 -0
  64. package/bin/templates/template-definitions.d.ts.map +1 -0
  65. package/bin/templates/template-definitions.js +296 -0
  66. package/bin/templates/template-definitions.js.map +1 -0
  67. package/bin/tests/integration.test.d.ts +2 -0
  68. package/bin/tests/integration.test.d.ts.map +1 -0
  69. package/bin/tests/integration.test.js +171 -0
  70. package/bin/tests/integration.test.js.map +1 -0
  71. package/bin/types/index.d.ts +44 -0
  72. package/bin/types/index.d.ts.map +1 -0
  73. package/bin/types/index.js +2 -0
  74. package/bin/types/index.js.map +1 -0
  75. package/bin/utils/config-merger.d.ts +32 -0
  76. package/bin/utils/config-merger.d.ts.map +1 -0
  77. package/bin/utils/config-merger.js +216 -0
  78. package/bin/utils/config-merger.js.map +1 -0
  79. package/bin/utils/errors.d.ts +9 -0
  80. package/bin/utils/errors.d.ts.map +1 -0
  81. package/bin/utils/errors.js +22 -0
  82. package/bin/utils/errors.js.map +1 -0
  83. package/bin/utils/install.d.ts +5 -0
  84. package/bin/utils/install.d.ts.map +1 -0
  85. package/bin/utils/install.js +38 -0
  86. package/bin/utils/install.js.map +1 -0
  87. package/bin/utils/message-formatter.d.ts +15 -0
  88. package/bin/utils/message-formatter.d.ts.map +1 -0
  89. package/bin/utils/message-formatter.js +85 -0
  90. package/bin/utils/message-formatter.js.map +1 -0
  91. package/bin/utils/template-processor.d.ts +54 -0
  92. package/bin/utils/template-processor.d.ts.map +1 -0
  93. package/bin/utils/template-processor.js +139 -0
  94. package/bin/utils/template-processor.js.map +1 -0
  95. package/bin/utils/template-processor.test.d.ts +2 -0
  96. package/bin/utils/template-processor.test.d.ts.map +1 -0
  97. package/bin/utils/template-processor.test.js +120 -0
  98. package/bin/utils/template-processor.test.js.map +1 -0
  99. package/bin/utils/version.d.ts +2 -0
  100. package/bin/utils/version.d.ts.map +1 -0
  101. package/bin/utils/version.js +10 -0
  102. package/bin/utils/version.js.map +1 -0
  103. package/package.json +67 -0
  104. package/templates/classic-spec/docusaurus.config.js.template +106 -0
  105. package/templates/classic-spec/package.json.template +36 -0
  106. package/templates/external-design/docusaurus.config.js.template +123 -0
  107. package/templates/external-design/package.json.template +36 -0
  108. package/templates/internal-design/docusaurus.config.js.template +123 -0
  109. package/templates/internal-design/package.json.template +36 -0
  110. package/templates/project-analysis/docusaurus.config.js.template +113 -0
  111. package/templates/project-analysis/package.json.template +36 -0
  112. package/templates/requirements/docusaurus.config.js.template +119 -0
  113. package/templates/requirements/package.json.template +36 -0
@@ -0,0 +1,216 @@
1
+ export class ConfigMerger {
2
+ options;
3
+ constructor(options) {
4
+ this.options = options;
5
+ }
6
+ mergePackageJson(existing, incoming) {
7
+ const result = {
8
+ success: true,
9
+ merged: { ...existing },
10
+ conflicts: [],
11
+ warnings: []
12
+ };
13
+ try {
14
+ // Merge dependencies
15
+ result.merged.dependencies = this.mergeDependencies(existing.dependencies || {}, incoming.dependencies || {}, 'dependencies', result);
16
+ result.merged.devDependencies = this.mergeDependencies(existing.devDependencies || {}, incoming.devDependencies || {}, 'devDependencies', result);
17
+ // Merge scripts
18
+ result.merged.scripts = this.mergeScripts(existing.scripts || {}, incoming.scripts || {}, result);
19
+ // Merge other fields
20
+ this.mergeSimpleFields(existing, incoming, result.merged, result, [
21
+ 'description',
22
+ 'keywords',
23
+ 'author',
24
+ 'license',
25
+ 'homepage',
26
+ 'repository',
27
+ 'bugs'
28
+ ]);
29
+ return result;
30
+ }
31
+ catch (error) {
32
+ result.success = false;
33
+ result.warnings.push(error instanceof Error ? error.message : 'Unknown error during merge');
34
+ return result;
35
+ }
36
+ }
37
+ mergeDocusaurusConfig(existing, incoming) {
38
+ const result = {
39
+ success: true,
40
+ merged: existing,
41
+ conflicts: [],
42
+ warnings: []
43
+ };
44
+ try {
45
+ // For now, we'll use a simple approach of adding comments
46
+ // In production, use a proper AST parser like @babel/parser
47
+ const timestamp = new Date().toISOString();
48
+ const integrationComment = `
49
+ // ============================================================================
50
+ // Specment Integration - ${timestamp}
51
+ // ============================================================================
52
+ // The following configurations were added by Specment integration.
53
+ // Please review and adjust as needed for your project.
54
+ //
55
+ // Note: This is a basic integration. For advanced customization,
56
+ // please refer to the Specment documentation.
57
+ // ============================================================================
58
+
59
+ `;
60
+ // Find a good insertion point (after imports, before config)
61
+ const configMatch = existing.match(/(const\s+config\s*=)/);
62
+ if (configMatch && configMatch.index !== undefined) {
63
+ const insertPosition = configMatch.index;
64
+ result.merged =
65
+ existing.slice(0, insertPosition) +
66
+ integrationComment +
67
+ existing.slice(insertPosition);
68
+ }
69
+ else {
70
+ // Fallback: add at the beginning
71
+ result.merged = integrationComment + existing;
72
+ }
73
+ result.warnings.push('Docusaurus config integration is basic. Please review the generated configuration.');
74
+ return result;
75
+ }
76
+ catch (error) {
77
+ result.success = false;
78
+ result.warnings.push(error instanceof Error ? error.message : 'Unknown error during config merge');
79
+ return result;
80
+ }
81
+ }
82
+ mergeDependencies(existing, incoming, section, result) {
83
+ const merged = { ...existing };
84
+ for (const [pkg, version] of Object.entries(incoming)) {
85
+ if (existing[pkg]) {
86
+ // Check for version conflicts
87
+ if (existing[pkg] !== version) {
88
+ const conflict = {
89
+ path: `${section}.${pkg}`,
90
+ existing: existing[pkg],
91
+ incoming: version,
92
+ resolution: this.options.preserveExisting ? 'keep_existing' : 'use_incoming',
93
+ reason: 'Version conflict detected'
94
+ };
95
+ result.conflicts.push(conflict);
96
+ if (this.options.preserveExisting) {
97
+ // Keep existing version
98
+ result.warnings.push(`Keeping existing version of ${pkg}: ${existing[pkg]} (incoming: ${version})`);
99
+ }
100
+ else {
101
+ // Use incoming version
102
+ merged[pkg] = version;
103
+ result.warnings.push(`Updated ${pkg} from ${existing[pkg]} to ${version}`);
104
+ }
105
+ }
106
+ }
107
+ else {
108
+ // New dependency
109
+ merged[pkg] = version;
110
+ if (this.options.verbose) {
111
+ result.warnings.push(`Added new dependency: ${pkg}@${version}`);
112
+ }
113
+ }
114
+ }
115
+ return merged;
116
+ }
117
+ mergeScripts(existing, incoming, result) {
118
+ const merged = { ...existing };
119
+ for (const [script, command] of Object.entries(incoming)) {
120
+ if (existing[script]) {
121
+ if (existing[script] !== command) {
122
+ const conflict = {
123
+ path: `scripts.${script}`,
124
+ existing: existing[script],
125
+ incoming: command,
126
+ resolution: this.options.preserveExisting ? 'keep_existing' : 'use_incoming',
127
+ reason: 'Script command conflict'
128
+ };
129
+ result.conflicts.push(conflict);
130
+ if (!this.options.preserveExisting && this.options.allowOverwrite) {
131
+ merged[script] = command;
132
+ result.warnings.push(`Updated script '${script}' from '${existing[script]}' to '${command}'`);
133
+ }
134
+ else {
135
+ result.warnings.push(`Keeping existing script '${script}': ${existing[script]} (incoming: ${command})`);
136
+ }
137
+ }
138
+ }
139
+ else {
140
+ // New script
141
+ merged[script] = command;
142
+ if (this.options.verbose) {
143
+ result.warnings.push(`Added new script: ${script}`);
144
+ }
145
+ }
146
+ }
147
+ return merged;
148
+ }
149
+ mergeSimpleFields(existing, incoming, merged, result, fields) {
150
+ for (const field of fields) {
151
+ if (incoming[field] && !existing[field]) {
152
+ merged[field] = incoming[field];
153
+ if (this.options.verbose) {
154
+ result.warnings.push(`Added ${field}: ${incoming[field]}`);
155
+ }
156
+ }
157
+ else if (incoming[field] && existing[field] && incoming[field] !== existing[field]) {
158
+ const conflict = {
159
+ path: field,
160
+ existing: existing[field],
161
+ incoming: incoming[field],
162
+ resolution: 'keep_existing',
163
+ reason: 'Field value conflict'
164
+ };
165
+ result.conflicts.push(conflict);
166
+ result.warnings.push(`Keeping existing ${field}: ${existing[field]} (incoming: ${incoming[field]})`);
167
+ }
168
+ }
169
+ }
170
+ // Static helper methods
171
+ static createSafePackageJsonMerge(existing, incoming, options = {}) {
172
+ const merger = new ConfigMerger({
173
+ preserveExisting: true,
174
+ allowOverwrite: false,
175
+ verbose: false,
176
+ ...options
177
+ });
178
+ return merger.mergePackageJson(existing, incoming);
179
+ }
180
+ static createSafeDocusaurusConfigMerge(existing, incoming, options = {}) {
181
+ const merger = new ConfigMerger({
182
+ preserveExisting: true,
183
+ allowOverwrite: false,
184
+ verbose: false,
185
+ ...options
186
+ });
187
+ return merger.mergeDocusaurusConfig(existing, incoming);
188
+ }
189
+ // Utility method to check if two package versions are compatible
190
+ static areVersionsCompatible(version1, version2) {
191
+ // Remove version prefixes
192
+ const clean1 = version1.replace(/[\^~]/, '');
193
+ const clean2 = version2.replace(/[\^~]/, '');
194
+ // Simple major version check
195
+ const major1 = parseInt(clean1.split('.')[0]);
196
+ const major2 = parseInt(clean2.split('.')[0]);
197
+ return major1 === major2;
198
+ }
199
+ // Utility method to get the higher version
200
+ static getHigherVersion(version1, version2) {
201
+ const clean1 = version1.replace(/[\^~]/, '');
202
+ const clean2 = version2.replace(/[\^~]/, '');
203
+ const parts1 = clean1.split('.').map(Number);
204
+ const parts2 = clean2.split('.').map(Number);
205
+ for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) {
206
+ const v1 = parts1[i] || 0;
207
+ const v2 = parts2[i] || 0;
208
+ if (v1 > v2)
209
+ return version1;
210
+ if (v2 > v1)
211
+ return version2;
212
+ }
213
+ return version1; // Equal versions, return first
214
+ }
215
+ }
216
+ //# sourceMappingURL=config-merger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-merger.js","sourceRoot":"","sources":["../../src/utils/config-merger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare class UserCancelledError extends Error {
2
+ constructor(message?: string);
3
+ }
4
+ export declare class CLIError extends Error {
5
+ constructor(message: string);
6
+ }
7
+ export declare function handleError(error: unknown, context?: string): void;
8
+ export declare function exitWithError(message: string): never;
9
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAEA,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,OAAO,SAAgC;CAIpD;AAED,qBAAa,QAAS,SAAQ,KAAK;gBACrB,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAKlE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAEpD"}
@@ -0,0 +1,22 @@
1
+ import { cancel } from '@clack/prompts';
2
+ export class UserCancelledError extends Error {
3
+ constructor(message = 'Operation cancelled by user') {
4
+ super(message);
5
+ this.name = 'UserCancelledError';
6
+ }
7
+ }
8
+ export class CLIError extends Error {
9
+ constructor(message) {
10
+ super(message);
11
+ this.name = 'CLIError';
12
+ }
13
+ }
14
+ export function handleError(error, context) {
15
+ const message = error instanceof Error ? error.message : String(error);
16
+ const fullMessage = context ? `${context}: ${message}` : message;
17
+ cancel(fullMessage);
18
+ }
19
+ export function exitWithError(message) {
20
+ throw new CLIError(message);
21
+ }
22
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,OAAO,GAAG,6BAA6B;QACjD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AAED,MAAM,UAAU,WAAW,CAAC,KAAc,EAAE,OAAgB;IAC1D,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IAEjE,MAAM,CAAC,WAAW,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,MAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,5 @@
1
+ export interface InstallOptions {
2
+ verbose?: boolean;
3
+ }
4
+ export declare function installDependencies(projectPath: string, options?: InstallOptions): Promise<void>;
5
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/utils/install.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAyCf"}
@@ -0,0 +1,38 @@
1
+ import { spawn } from 'child_process';
2
+ export async function installDependencies(projectPath, options = {}) {
3
+ const { verbose = false } = options;
4
+ return new Promise((resolve, reject) => {
5
+ // niコマンドを使用(パッケージマネージャー統一)
6
+ const child = spawn('ni', [], {
7
+ cwd: projectPath,
8
+ stdio: verbose ? 'inherit' : 'pipe',
9
+ shell: true
10
+ });
11
+ let errorOutput = '';
12
+ if (!verbose) {
13
+ child.stderr?.on('data', (data) => {
14
+ errorOutput += data.toString();
15
+ });
16
+ }
17
+ child.on('close', (code) => {
18
+ if (code === 0) {
19
+ resolve();
20
+ }
21
+ else {
22
+ reject(new Error(`Installation failed with exit code ${code}${errorOutput ? `\n${errorOutput}` : ''}`));
23
+ }
24
+ });
25
+ child.on('error', (error) => {
26
+ reject(new Error(`Failed to execute install command: ${error.message}`));
27
+ });
28
+ // タイムアウト処理(5分)
29
+ const timeout = setTimeout(() => {
30
+ child.kill('SIGTERM');
31
+ reject(new Error('Installation timed out after 5 minutes'));
32
+ }, 5 * 60 * 1000);
33
+ child.on('close', () => {
34
+ clearTimeout(timeout);
35
+ });
36
+ });
37
+ }
38
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/utils/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAMtC,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,WAAmB,EACnB,UAA0B,EAAE;IAE5B,MAAM,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAEpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,2BAA2B;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE;YAC5B,GAAG,EAAE,WAAW;YAChB,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;YACnC,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QAEH,IAAI,WAAW,GAAG,EAAE,CAAC;QAErB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChC,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,sCAAsC,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC1G,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,MAAM,CAAC,IAAI,KAAK,CAAC,sCAAsC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,eAAe;QACf,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtB,MAAM,CAAC,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAC9D,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAElB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACrB,YAAY,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { type Language } from '../constants/languages.js';
2
+ export declare class MessageFormatter {
3
+ static success(message: string): void;
4
+ static error(message: string): void;
5
+ static warning(message: string): void;
6
+ static info(message: string): void;
7
+ static step(message: string): void;
8
+ static subStep(message: string): void;
9
+ static debug(message: string): void;
10
+ static completion(projectName: string, language?: Language): void;
11
+ static installationStart(language?: Language): void;
12
+ static installationSkipped(projectName: string, language?: Language): void;
13
+ static installationFailed(projectName: string, language?: Language): void;
14
+ }
15
+ //# sourceMappingURL=message-formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-formatter.d.ts","sourceRoot":"","sources":["../../src/utils/message-formatter.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAEhE,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIrC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAInC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIrC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIlC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIlC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIrC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAInC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,GAAE,QAAuB,GAAG,IAAI;IAsB/E,MAAM,CAAC,iBAAiB,CAAC,QAAQ,GAAE,QAAuB,GAAG,IAAI;IAWjE,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,GAAE,QAAuB,GAAG,IAAI;IAaxF,MAAM,CAAC,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,GAAE,QAAuB,GAAG,IAAI;CAYxF"}
@@ -0,0 +1,85 @@
1
+ import chalk from 'chalk';
2
+ import { LANG } from '../constants/languages.js';
3
+ export class MessageFormatter {
4
+ static success(message) {
5
+ console.log(chalk.green(`✅ ${message}`));
6
+ }
7
+ static error(message) {
8
+ console.log(chalk.red(`❌ ${message}`));
9
+ }
10
+ static warning(message) {
11
+ console.log(chalk.yellow(`⚠️ ${message}`));
12
+ }
13
+ static info(message) {
14
+ console.log(chalk.blue(`ℹ️ ${message}`));
15
+ }
16
+ static step(message) {
17
+ console.log(chalk.blue(`\n📋 ${message}`));
18
+ }
19
+ static subStep(message) {
20
+ console.log(chalk.gray(` • ${message}`));
21
+ }
22
+ static debug(message) {
23
+ console.log(chalk.gray(`[DEBUG] ${message}`));
24
+ }
25
+ static completion(projectName, language = LANG.EN.code) {
26
+ console.log();
27
+ const isEn = language === LANG.EN.code;
28
+ if (isEn) {
29
+ console.log(chalk.green('🎉 Project created successfully!\n'));
30
+ console.log(chalk.blue('Next steps:'));
31
+ console.log(chalk.gray(` cd ${projectName}`));
32
+ console.log(chalk.gray(' ni # Install dependencies'));
33
+ console.log(chalk.gray(' nr start # Start development server'));
34
+ console.log(chalk.gray(' nr build # Build for production'));
35
+ console.log(chalk.magenta('\n📚 Happy documenting!'));
36
+ }
37
+ else {
38
+ console.log(chalk.green('🎉 プロジェクトが正常に作成されました!\n'));
39
+ console.log(chalk.blue('次のステップ:'));
40
+ console.log(chalk.gray(` cd ${projectName}`));
41
+ console.log(chalk.gray(' ni # 依存関係をインストール'));
42
+ console.log(chalk.gray(' nr start # 開発サーバーを起動'));
43
+ console.log(chalk.gray(' nr build # 本番用ビルド'));
44
+ console.log(chalk.magenta('\n📚 楽しいドキュメント作成を!'));
45
+ }
46
+ }
47
+ static installationStart(language = LANG.EN.code) {
48
+ const isEn = language === LANG.EN.code;
49
+ if (isEn) {
50
+ MessageFormatter.step('Installing dependencies...');
51
+ console.log(chalk.gray('This may take a few minutes depending on your internet connection.'));
52
+ }
53
+ else {
54
+ MessageFormatter.step('依存関係をインストール中...');
55
+ console.log(chalk.gray('インターネット接続によっては数分かかる場合があります。'));
56
+ }
57
+ }
58
+ static installationSkipped(projectName, language = LANG.EN.code) {
59
+ const isEn = language === LANG.EN.code;
60
+ if (isEn) {
61
+ MessageFormatter.warning('Dependency installation was skipped.');
62
+ console.log(chalk.gray('You can install dependencies manually by running:'));
63
+ }
64
+ else {
65
+ MessageFormatter.warning('依存関係のインストールがスキップされました。');
66
+ console.log(chalk.gray('以下のコマンドで手動でインストールできます:'));
67
+ }
68
+ console.log(chalk.gray(` cd ${projectName}`));
69
+ console.log(chalk.gray(' ni'));
70
+ }
71
+ static installationFailed(projectName, language = LANG.EN.code) {
72
+ const isEn = language === LANG.EN.code;
73
+ if (isEn) {
74
+ MessageFormatter.error('Dependency installation failed.');
75
+ console.log(chalk.gray('Please install dependencies manually:'));
76
+ }
77
+ else {
78
+ MessageFormatter.error('依存関係のインストールに失敗しました。');
79
+ console.log(chalk.gray('手動でインストールしてください:'));
80
+ }
81
+ console.log(chalk.gray(` cd ${projectName}`));
82
+ console.log(chalk.gray(' ni'));
83
+ }
84
+ }
85
+ //# sourceMappingURL=message-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-formatter.js","sourceRoot":"","sources":["../../src/utils/message-formatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ export interface TemplateVariables {
2
+ projectName: string;
3
+ author?: string;
4
+ email?: string;
5
+ date: string;
6
+ year: string;
7
+ description?: string;
8
+ [key: string]: string | undefined;
9
+ }
10
+ export declare class TemplateProcessor {
11
+ private variables;
12
+ constructor(variables: Partial<TemplateVariables>);
13
+ /**
14
+ * テンプレート文字列内の変数を置換する
15
+ * 変数は {{variableName}} の形式で記述される
16
+ */
17
+ processTemplate(template: string): string;
18
+ /**
19
+ * テンプレートファイルを読み込んで変数を置換する
20
+ */
21
+ processTemplateFile(templatePath: string): Promise<string>;
22
+ /**
23
+ * 複数のテンプレートファイルを一括処理する
24
+ */
25
+ processTemplateFiles(templatePaths: string[]): Promise<Record<string, string>>;
26
+ /**
27
+ * 変数を追加または更新する
28
+ */
29
+ setVariable(name: string, value: string): void;
30
+ /**
31
+ * 複数の変数を一括設定する
32
+ */
33
+ setVariables(variables: Record<string, string>): void;
34
+ /**
35
+ * 現在の変数一覧を取得する
36
+ */
37
+ getVariables(): TemplateVariables;
38
+ /**
39
+ * プロジェクト名から派生する変数を自動生成する
40
+ */
41
+ generateDerivedVariables(): void;
42
+ }
43
+ /**
44
+ * ユーザー情報を取得する(Git設定から)
45
+ */
46
+ export declare function getUserInfo(): Promise<{
47
+ name?: string;
48
+ email?: string;
49
+ }>;
50
+ /**
51
+ * テンプレートプロセッサーを作成するヘルパー関数
52
+ */
53
+ export declare function createTemplateProcessor(projectName: string, additionalVariables?: Record<string, string>): Promise<TemplateProcessor>;
54
+ //# sourceMappingURL=template-processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-processor.d.ts","sourceRoot":"","sources":["../../src/utils/template-processor.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,SAAS,CAAoB;gBAEzB,SAAS,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAajD;;;OAGG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAWzC;;OAEG;IACG,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAShE;;OAEG;IACG,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAgBpF;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAI9C;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAIrD;;OAEG;IACH,YAAY,IAAI,iBAAiB;IAIjC;;OAEG;IACH,wBAAwB,IAAI,IAAI;CAoBjC;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAuB9E;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,mBAAmB,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAC/C,OAAO,CAAC,iBAAiB,CAAC,CAe5B"}
@@ -0,0 +1,139 @@
1
+ import { readFile } from 'fs/promises';
2
+ export class TemplateProcessor {
3
+ variables;
4
+ constructor(variables) {
5
+ const now = new Date();
6
+ this.variables = {
7
+ projectName: 'my-project',
8
+ author: 'Unknown',
9
+ email: '',
10
+ date: now.toISOString().split('T')[0], // YYYY-MM-DD format
11
+ year: now.getFullYear().toString(),
12
+ description: '',
13
+ ...variables,
14
+ };
15
+ }
16
+ /**
17
+ * テンプレート文字列内の変数を置換する
18
+ * 変数は {{variableName}} の形式で記述される
19
+ */
20
+ processTemplate(template) {
21
+ return template.replace(/\{\{(\w+)\}\}/g, (match, variableName) => {
22
+ const value = this.variables[variableName];
23
+ if (value === undefined) {
24
+ console.warn(`Template variable '${variableName}' is not defined`);
25
+ return match; // 置換できない場合は元の文字列を返す
26
+ }
27
+ return value;
28
+ });
29
+ }
30
+ /**
31
+ * テンプレートファイルを読み込んで変数を置換する
32
+ */
33
+ async processTemplateFile(templatePath) {
34
+ try {
35
+ const templateContent = await readFile(templatePath, 'utf-8');
36
+ return this.processTemplate(templateContent);
37
+ }
38
+ catch (error) {
39
+ throw new Error(`Failed to process template file ${templatePath}: ${error}`);
40
+ }
41
+ }
42
+ /**
43
+ * 複数のテンプレートファイルを一括処理する
44
+ */
45
+ async processTemplateFiles(templatePaths) {
46
+ const results = {};
47
+ for (const templatePath of templatePaths) {
48
+ try {
49
+ const processedContent = await this.processTemplateFile(templatePath);
50
+ results[templatePath] = processedContent;
51
+ }
52
+ catch (error) {
53
+ console.error(`Error processing template ${templatePath}:`, error);
54
+ throw error;
55
+ }
56
+ }
57
+ return results;
58
+ }
59
+ /**
60
+ * 変数を追加または更新する
61
+ */
62
+ setVariable(name, value) {
63
+ this.variables[name] = value;
64
+ }
65
+ /**
66
+ * 複数の変数を一括設定する
67
+ */
68
+ setVariables(variables) {
69
+ Object.assign(this.variables, variables);
70
+ }
71
+ /**
72
+ * 現在の変数一覧を取得する
73
+ */
74
+ getVariables() {
75
+ return { ...this.variables };
76
+ }
77
+ /**
78
+ * プロジェクト名から派生する変数を自動生成する
79
+ */
80
+ generateDerivedVariables() {
81
+ const projectName = this.variables.projectName;
82
+ // kebab-case から camelCase への変換
83
+ const camelCaseName = projectName.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
84
+ // kebab-case から PascalCase への変換
85
+ const pascalCaseName = camelCaseName.charAt(0).toUpperCase() + camelCaseName.slice(1);
86
+ // CONSTANT_CASE への変換
87
+ const constantCaseName = projectName.replace(/-/g, '_').toUpperCase();
88
+ // 派生変数を設定
89
+ this.setVariables({
90
+ projectNameCamel: camelCaseName,
91
+ projectNamePascal: pascalCaseName,
92
+ projectNameConstant: constantCaseName,
93
+ projectNameKebab: projectName, // 明示的に設定
94
+ });
95
+ }
96
+ }
97
+ /**
98
+ * ユーザー情報を取得する(Git設定から)
99
+ */
100
+ export async function getUserInfo() {
101
+ try {
102
+ const { execSync } = await import('child_process');
103
+ let name;
104
+ let email;
105
+ try {
106
+ name = execSync('git config user.name', { encoding: 'utf-8' }).trim();
107
+ }
108
+ catch {
109
+ // Git設定が見つからない場合は無視
110
+ }
111
+ try {
112
+ email = execSync('git config user.email', { encoding: 'utf-8' }).trim();
113
+ }
114
+ catch {
115
+ // Git設定が見つからない場合は無視
116
+ }
117
+ return { name, email };
118
+ }
119
+ catch {
120
+ return {};
121
+ }
122
+ }
123
+ /**
124
+ * テンプレートプロセッサーを作成するヘルパー関数
125
+ */
126
+ export async function createTemplateProcessor(projectName, additionalVariables = {}) {
127
+ const userInfo = await getUserInfo();
128
+ const processor = new TemplateProcessor({
129
+ projectName,
130
+ author: userInfo.name,
131
+ email: userInfo.email,
132
+ description: `Documentation for ${projectName}`,
133
+ ...additionalVariables,
134
+ });
135
+ // 派生変数を生成
136
+ processor.generateDerivedVariables();
137
+ return processor;
138
+ }
139
+ //# sourceMappingURL=template-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-processor.js","sourceRoot":"","sources":["../../src/utils/template-processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=template-processor.test.d.ts.map