@tachui/cli 0.7.0-alpha1
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/LICENSE +363 -0
- package/bin/tacho.js +10 -0
- package/dist/commands/analyze.d.ts +8 -0
- package/dist/commands/analyze.d.ts.map +1 -0
- package/dist/commands/analyze.js +337 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/dev.d.ts +8 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +171 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/generate.d.ts +8 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +716 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +734 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/migrate.d.ts +8 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +335 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/optimize.d.ts +8 -0
- package/dist/commands/optimize.d.ts.map +1 -0
- package/dist/commands/optimize.js +357 -0
- package/dist/commands/optimize.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +51 -0
- package/dist/index.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tacho CLI - Optimize Command
|
|
3
|
+
*
|
|
4
|
+
* Performance optimization tools for TachUI applications
|
|
5
|
+
*/
|
|
6
|
+
import { readFileSync, writeFileSync } from 'node:fs';
|
|
7
|
+
import { resolve } from 'node:path';
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
import { Command } from 'commander';
|
|
10
|
+
import { glob } from 'glob';
|
|
11
|
+
import ora from 'ora';
|
|
12
|
+
import prompts from 'prompts';
|
|
13
|
+
const optimizationRules = [
|
|
14
|
+
// Performance optimizations
|
|
15
|
+
{
|
|
16
|
+
name: 'Memoize expensive computations',
|
|
17
|
+
description: 'Wrap expensive calculations in computed values',
|
|
18
|
+
pattern: /const (\w+) = (\w+)\.map\([^)]+\)\.filter\([^)]+\)/g,
|
|
19
|
+
replacement: (_match, varName, arrayName) => `const ${varName} = createMemo(() => ${arrayName}.map(...).filter(...))`,
|
|
20
|
+
impact: 'high',
|
|
21
|
+
category: 'performance',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: 'Optimize modifier chains',
|
|
25
|
+
description: 'Combine similar modifiers to reduce DOM operations',
|
|
26
|
+
pattern: /\.padding\((\d+)\)\s*\.padding\((\d+)\)/g,
|
|
27
|
+
replacement: '.padding($2)',
|
|
28
|
+
impact: 'medium',
|
|
29
|
+
category: 'performance',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: 'Remove unused imports',
|
|
33
|
+
description: 'Clean up unused TachUI imports',
|
|
34
|
+
pattern: /import\s+{[^}]*(\w+)[^}]*}\s+from\s+['"]@tachui\/core['"]/g,
|
|
35
|
+
replacement: (match, ..._args) => {
|
|
36
|
+
// This would need more sophisticated analysis
|
|
37
|
+
return match; // Placeholder for now
|
|
38
|
+
},
|
|
39
|
+
impact: 'low',
|
|
40
|
+
category: 'bundle',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'Optimize Layout nesting',
|
|
44
|
+
description: 'Flatten unnecessary Layout.VStack nesting',
|
|
45
|
+
pattern: /Layout\.VStack\(\{\s*children:\s*\[\s*Layout\.VStack\(\{/g,
|
|
46
|
+
replacement: 'Layout.VStack({',
|
|
47
|
+
impact: 'medium',
|
|
48
|
+
category: 'performance',
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'Use projectedValue for bindings',
|
|
52
|
+
description: 'Optimize state binding patterns',
|
|
53
|
+
pattern: /createBinding\(\s*\(\) => (\w+)\.wrappedValue,\s*\(value\) => \1\.wrappedValue = value\s*\)/g,
|
|
54
|
+
replacement: '$1.projectedValue',
|
|
55
|
+
impact: 'high',
|
|
56
|
+
category: 'performance',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: 'Consolidate color modifiers',
|
|
60
|
+
description: 'Combine foregroundColor and backgroundColor',
|
|
61
|
+
pattern: /\.foregroundColor\(['"]([^'"]+)['"]\)\s*\.backgroundColor\(['"]([^'"]+)['"]\)/g,
|
|
62
|
+
replacement: '.colors("$1", "$2")',
|
|
63
|
+
impact: 'low',
|
|
64
|
+
category: 'readability',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: 'Extract inline functions',
|
|
68
|
+
description: 'Move inline functions to avoid recreating on each render',
|
|
69
|
+
pattern: /onTap:\s*\(\) => \{[^}]{50,}\}/g,
|
|
70
|
+
replacement: (_match) => {
|
|
71
|
+
return `onTap: handle${Math.random().toString(36).substr(2, 9)}`;
|
|
72
|
+
},
|
|
73
|
+
impact: 'high',
|
|
74
|
+
category: 'performance',
|
|
75
|
+
},
|
|
76
|
+
];
|
|
77
|
+
function applyOptimizations(content, rules) {
|
|
78
|
+
let optimizedContent = content;
|
|
79
|
+
const applied = [];
|
|
80
|
+
for (const rule of rules) {
|
|
81
|
+
const matches = optimizedContent.match(rule.pattern) || [];
|
|
82
|
+
if (matches.length > 0) {
|
|
83
|
+
optimizedContent = optimizedContent.replace(rule.pattern, rule.replacement);
|
|
84
|
+
applied.push({ rule, count: matches.length });
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return { content: optimizedContent, applied };
|
|
88
|
+
}
|
|
89
|
+
function generateOptimizationReport(results) {
|
|
90
|
+
const totalFiles = results.length;
|
|
91
|
+
const totalOptimizations = results.reduce((sum, r) => sum + r.optimizations.length, 0);
|
|
92
|
+
const totalBytesSaved = results.reduce((sum, r) => sum + r.saved.bytes, 0);
|
|
93
|
+
const totalLinesSaved = results.reduce((sum, r) => sum + r.saved.lines, 0);
|
|
94
|
+
const categoryStats = results.reduce((stats, result) => {
|
|
95
|
+
result.optimizations.forEach((opt) => {
|
|
96
|
+
stats[opt.category] = (stats[opt.category] || 0) + opt.count;
|
|
97
|
+
});
|
|
98
|
+
return stats;
|
|
99
|
+
}, {});
|
|
100
|
+
const impactStats = results.reduce((stats, result) => {
|
|
101
|
+
result.optimizations.forEach((opt) => {
|
|
102
|
+
stats[opt.impact] = (stats[opt.impact] || 0) + opt.count;
|
|
103
|
+
});
|
|
104
|
+
return stats;
|
|
105
|
+
}, {});
|
|
106
|
+
return `# TachUI Optimization Report
|
|
107
|
+
|
|
108
|
+
## Summary
|
|
109
|
+
|
|
110
|
+
- **Files Optimized**: ${totalFiles}
|
|
111
|
+
- **Total Optimizations**: ${totalOptimizations}
|
|
112
|
+
- **Bytes Saved**: ${totalBytesSaved.toLocaleString()} bytes (${(totalBytesSaved / 1024).toFixed(1)} KB)
|
|
113
|
+
- **Lines Reduced**: ${totalLinesSaved}
|
|
114
|
+
|
|
115
|
+
## Optimization Categories
|
|
116
|
+
|
|
117
|
+
${Object.entries(categoryStats)
|
|
118
|
+
.map(([category, count]) => `- **${category}**: ${count} optimizations`)
|
|
119
|
+
.join('\n')}
|
|
120
|
+
|
|
121
|
+
## Impact Distribution
|
|
122
|
+
|
|
123
|
+
${Object.entries(impactStats)
|
|
124
|
+
.map(([impact, count]) => `- **${impact} impact**: ${count} optimizations`)
|
|
125
|
+
.join('\n')}
|
|
126
|
+
|
|
127
|
+
## File Details
|
|
128
|
+
|
|
129
|
+
${results
|
|
130
|
+
.map((result) => `
|
|
131
|
+
### ${result.file}
|
|
132
|
+
|
|
133
|
+
**Size Reduction**: ${result.saved.bytes} bytes (${((result.saved.bytes / result.before.size) * 100).toFixed(1)}%)
|
|
134
|
+
**Lines Reduced**: ${result.saved.lines}
|
|
135
|
+
|
|
136
|
+
**Optimizations Applied**:
|
|
137
|
+
${result.optimizations
|
|
138
|
+
.map((opt) => `- ${opt.rule} (${opt.count}x) - ${opt.impact} impact`)
|
|
139
|
+
.join('\n')}
|
|
140
|
+
`)
|
|
141
|
+
.join('\n')}
|
|
142
|
+
|
|
143
|
+
## Recommendations
|
|
144
|
+
|
|
145
|
+
1. **High Impact Optimizations**: Focus on performance and memory improvements
|
|
146
|
+
2. **Bundle Size**: Remove unused imports and consolidate components
|
|
147
|
+
3. **Code Quality**: Apply readability improvements for maintainability
|
|
148
|
+
4. **Regular Optimization**: Run optimization checks before releases
|
|
149
|
+
|
|
150
|
+
## Next Steps
|
|
151
|
+
|
|
152
|
+
1. Review optimized code for correctness
|
|
153
|
+
2. Run tests to ensure functionality is preserved
|
|
154
|
+
3. Measure performance improvements with benchmarks
|
|
155
|
+
4. Consider automating optimizations in your build process
|
|
156
|
+
`;
|
|
157
|
+
}
|
|
158
|
+
export const optimizeCommand = new Command('optimize')
|
|
159
|
+
.description('Optimize TachUI codebase for performance and bundle size')
|
|
160
|
+
.option('-p, --pattern <pattern>', 'File pattern to optimize', 'src/**/*.{js,jsx,ts,tsx}')
|
|
161
|
+
.option('-o, --output <directory>', 'Output directory for optimized files')
|
|
162
|
+
.option('-c, --category <category>', 'Focus on specific category (performance,bundle,memory,readability)', 'all')
|
|
163
|
+
.option('-i, --impact <impact>', 'Minimum impact level (high,medium,low)', 'medium')
|
|
164
|
+
.option('--backup', 'Create backup of original files', true)
|
|
165
|
+
.option('--report', 'Generate optimization report', true)
|
|
166
|
+
.option('--dry-run', 'Show optimizations without applying them', false)
|
|
167
|
+
.option('--interactive', 'Prompt for each optimization', false)
|
|
168
|
+
.action(async (options) => {
|
|
169
|
+
try {
|
|
170
|
+
console.log(chalk.cyan(`
|
|
171
|
+
╭─────────────────────────────────────╮
|
|
172
|
+
│ ⚡ TachUI Performance Optimizer │
|
|
173
|
+
│ Rule-based code improvements │
|
|
174
|
+
╰─────────────────────────────────────╯
|
|
175
|
+
`));
|
|
176
|
+
const spinner = ora('Scanning for optimization opportunities...').start();
|
|
177
|
+
// Find files to optimize
|
|
178
|
+
const files = await glob(options.pattern, {
|
|
179
|
+
cwd: process.cwd(),
|
|
180
|
+
absolute: true,
|
|
181
|
+
});
|
|
182
|
+
if (files.length === 0) {
|
|
183
|
+
spinner.fail('No files found matching pattern');
|
|
184
|
+
console.log(chalk.yellow(`Pattern: ${options.pattern}`));
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
// Filter rules by category and impact
|
|
188
|
+
let rulesToApply = optimizationRules;
|
|
189
|
+
if (options.category !== 'all') {
|
|
190
|
+
rulesToApply = rulesToApply.filter((rule) => rule.category === options.category);
|
|
191
|
+
}
|
|
192
|
+
const impactOrder = { high: 3, medium: 2, low: 1 };
|
|
193
|
+
const minImpact = impactOrder[options.impact] || 2;
|
|
194
|
+
rulesToApply = rulesToApply.filter((rule) => impactOrder[rule.impact] >= minImpact);
|
|
195
|
+
if (rulesToApply.length === 0) {
|
|
196
|
+
spinner.fail('No optimization rules match the criteria');
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
spinner.text = `Found ${files.length} files, applying ${rulesToApply.length} optimization rules...`;
|
|
200
|
+
const results = [];
|
|
201
|
+
let totalOptimizations = 0;
|
|
202
|
+
for (const file of files) {
|
|
203
|
+
try {
|
|
204
|
+
const originalContent = readFileSync(file, 'utf-8');
|
|
205
|
+
const originalSize = Buffer.byteLength(originalContent, 'utf8');
|
|
206
|
+
const originalLines = originalContent.split('\n').length;
|
|
207
|
+
const { content: optimizedContent, applied } = applyOptimizations(originalContent, rulesToApply);
|
|
208
|
+
// Interactive mode - prompt for each optimization
|
|
209
|
+
if (options.interactive && applied.length > 0) {
|
|
210
|
+
const fileName = file.split('/').pop();
|
|
211
|
+
console.log(`\n${chalk.cyan(`Optimizations found in ${fileName}:`)}`);
|
|
212
|
+
for (const { rule, count } of applied) {
|
|
213
|
+
console.log(`${chalk.yellow('•')} ${rule.name} (${count}x) - ${rule.impact} impact`);
|
|
214
|
+
console.log(` ${chalk.gray(rule.description)}`);
|
|
215
|
+
}
|
|
216
|
+
const confirm = await prompts({
|
|
217
|
+
type: 'confirm',
|
|
218
|
+
name: 'apply',
|
|
219
|
+
message: `Apply ${applied.length} optimizations to ${fileName}?`,
|
|
220
|
+
initial: true,
|
|
221
|
+
});
|
|
222
|
+
if (!confirm.apply) {
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
if (applied.length === 0) {
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
const optimizedSize = Buffer.byteLength(optimizedContent, 'utf8');
|
|
230
|
+
const optimizedLines = optimizedContent.split('\n').length;
|
|
231
|
+
const result = {
|
|
232
|
+
file: file.split('/').pop() || file,
|
|
233
|
+
optimizations: applied.map(({ rule, count }) => ({
|
|
234
|
+
rule: rule.name,
|
|
235
|
+
count,
|
|
236
|
+
impact: rule.impact,
|
|
237
|
+
category: rule.category,
|
|
238
|
+
})),
|
|
239
|
+
before: {
|
|
240
|
+
size: originalSize,
|
|
241
|
+
lines: originalLines,
|
|
242
|
+
},
|
|
243
|
+
after: {
|
|
244
|
+
size: optimizedSize,
|
|
245
|
+
lines: optimizedLines,
|
|
246
|
+
},
|
|
247
|
+
saved: {
|
|
248
|
+
bytes: originalSize - optimizedSize,
|
|
249
|
+
lines: originalLines - optimizedLines,
|
|
250
|
+
},
|
|
251
|
+
};
|
|
252
|
+
results.push(result);
|
|
253
|
+
totalOptimizations += applied.length;
|
|
254
|
+
if (!options.dryRun) {
|
|
255
|
+
// Create backup if requested
|
|
256
|
+
if (options.backup) {
|
|
257
|
+
writeFileSync(`${file}.backup`, originalContent);
|
|
258
|
+
}
|
|
259
|
+
// Write optimized content
|
|
260
|
+
const outputPath = options.output ? file.replace(/src\//, `${options.output}/`) : file;
|
|
261
|
+
writeFileSync(outputPath, optimizedContent);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
console.warn(chalk.yellow(`Warning: Could not optimize ${file}`), error.message);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
spinner.succeed(`Optimization scan complete!`);
|
|
269
|
+
if (results.length === 0) {
|
|
270
|
+
console.log(chalk.green('✅ No optimizations needed - your code is already well optimized!'));
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
// Show results summary
|
|
274
|
+
console.log(`\n${chalk.green('📊 Optimization Summary:')}`);
|
|
275
|
+
console.log(`${chalk.gray('Files optimized:')} ${results.length}`);
|
|
276
|
+
console.log(`${chalk.gray('Total optimizations:')} ${totalOptimizations}`);
|
|
277
|
+
const totalBytesSaved = results.reduce((sum, r) => sum + r.saved.bytes, 0);
|
|
278
|
+
const totalLinesSaved = results.reduce((sum, r) => sum + r.saved.lines, 0);
|
|
279
|
+
console.log(`${chalk.gray('Bytes saved:')} ${totalBytesSaved.toLocaleString()} (${(totalBytesSaved / 1024).toFixed(1)} KB)`);
|
|
280
|
+
console.log(`${chalk.gray('Lines reduced:')} ${totalLinesSaved}`);
|
|
281
|
+
// Show category breakdown
|
|
282
|
+
const categoryStats = results.reduce((stats, result) => {
|
|
283
|
+
result.optimizations.forEach((opt) => {
|
|
284
|
+
stats[opt.category] = (stats[opt.category] || 0) + opt.count;
|
|
285
|
+
});
|
|
286
|
+
return stats;
|
|
287
|
+
}, {});
|
|
288
|
+
if (Object.keys(categoryStats).length > 0) {
|
|
289
|
+
console.log(`\n${chalk.yellow('📈 Optimization Categories:')}`);
|
|
290
|
+
Object.entries(categoryStats).forEach(([category, count]) => {
|
|
291
|
+
console.log(`${chalk.gray(`${category}:`)} ${count} optimizations`);
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
// Show impact breakdown
|
|
295
|
+
const impactStats = results.reduce((stats, result) => {
|
|
296
|
+
result.optimizations.forEach((opt) => {
|
|
297
|
+
stats[opt.impact] = (stats[opt.impact] || 0) + opt.count;
|
|
298
|
+
});
|
|
299
|
+
return stats;
|
|
300
|
+
}, {});
|
|
301
|
+
console.log(`\n${chalk.yellow('💥 Impact Distribution:')}`);
|
|
302
|
+
Object.entries(impactStats).forEach(([impact, count]) => {
|
|
303
|
+
const color = impact === 'high' ? chalk.red : impact === 'medium' ? chalk.yellow : chalk.green;
|
|
304
|
+
console.log(`${color(`${impact} impact:`)} ${count} optimizations`);
|
|
305
|
+
});
|
|
306
|
+
// Show top optimized files
|
|
307
|
+
const topFiles = results.sort((a, b) => b.saved.bytes - a.saved.bytes).slice(0, 5);
|
|
308
|
+
if (topFiles.length > 0) {
|
|
309
|
+
console.log(`\n${chalk.yellow('🏆 Top Optimized Files:')}`);
|
|
310
|
+
topFiles.forEach((result, index) => {
|
|
311
|
+
const savedKB = (result.saved.bytes / 1024).toFixed(1);
|
|
312
|
+
const percentage = ((result.saved.bytes / result.before.size) * 100).toFixed(1);
|
|
313
|
+
console.log(`${index + 1}. ${result.file}: ${savedKB} KB saved (${percentage}%)`);
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
if (options.dryRun) {
|
|
317
|
+
console.log(`\n${chalk.yellow('🔍 Dry Run Complete')}`);
|
|
318
|
+
console.log(chalk.gray('Remove --dry-run flag to apply optimizations'));
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
console.log(`\n${chalk.green('✅ Optimizations Applied!')}`);
|
|
322
|
+
if (options.backup) {
|
|
323
|
+
console.log(chalk.blue('💾 Backups created with .backup extension'));
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
// Generate and save report
|
|
327
|
+
if (options.report && !options.dryRun) {
|
|
328
|
+
const reportPath = resolve('tachui-optimization-report.md');
|
|
329
|
+
const report = generateOptimizationReport(results);
|
|
330
|
+
writeFileSync(reportPath, report);
|
|
331
|
+
console.log(`\n${chalk.blue('📋 Optimization report saved:')} ${reportPath}`);
|
|
332
|
+
}
|
|
333
|
+
// Performance tips
|
|
334
|
+
console.log(`\n${chalk.yellow('💡 Performance Tips:')}`);
|
|
335
|
+
console.log(chalk.gray('• Run optimization before production builds'));
|
|
336
|
+
console.log(chalk.gray('• Monitor bundle size with build tools'));
|
|
337
|
+
console.log(chalk.gray('• Use tacho analyze to identify performance issues'));
|
|
338
|
+
console.log(chalk.gray('• Consider code splitting for large applications'));
|
|
339
|
+
// Next steps
|
|
340
|
+
console.log(`\n${chalk.yellow('🚀 Next Steps:')}`);
|
|
341
|
+
console.log(chalk.gray('1. Test optimized code thoroughly'));
|
|
342
|
+
console.log(chalk.gray('2. Run benchmarks to measure improvements'));
|
|
343
|
+
console.log(chalk.gray('3. Set up automated optimization in CI/CD'));
|
|
344
|
+
console.log(chalk.gray('4. Monitor production performance'));
|
|
345
|
+
console.log(`\n${chalk.green('Optimization complete! ⚡')}`);
|
|
346
|
+
}
|
|
347
|
+
catch (error) {
|
|
348
|
+
console.error(chalk.red('Optimization error:'), error.message);
|
|
349
|
+
console.log(chalk.yellow('\n🔍 Troubleshooting:'));
|
|
350
|
+
console.log(chalk.gray('• Check file patterns and permissions'));
|
|
351
|
+
console.log(chalk.gray('• Ensure source files are valid TachUI code'));
|
|
352
|
+
console.log(chalk.gray('• Try with --dry-run first'));
|
|
353
|
+
console.log(chalk.gray('• Use --interactive for selective optimization'));
|
|
354
|
+
process.exit(1);
|
|
355
|
+
}
|
|
356
|
+
});
|
|
357
|
+
//# sourceMappingURL=optimize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimize.js","sourceRoot":"","sources":["../../src/commands/optimize.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAsBH,wBAAsB,IAAI,kBAmCzB"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tacho CLI - Comprehensive developer tooling for TachUI
|
|
3
|
+
*/
|
|
4
|
+
import { readFileSync } from 'node:fs';
|
|
5
|
+
import { dirname, join } from 'node:path';
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import { Command } from 'commander';
|
|
9
|
+
import { analyzeCommand } from './commands/analyze.js';
|
|
10
|
+
import { devCommand } from './commands/dev.js';
|
|
11
|
+
import { generateCommand } from './commands/generate.js';
|
|
12
|
+
// Import commands
|
|
13
|
+
import { initCommand } from './commands/init.js';
|
|
14
|
+
import { migrateCommand } from './commands/migrate.js';
|
|
15
|
+
import { optimizeCommand } from './commands/optimize.js';
|
|
16
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
17
|
+
const __dirname = dirname(__filename);
|
|
18
|
+
// Get package version
|
|
19
|
+
const packagePath = join(__dirname, '../package.json');
|
|
20
|
+
const packageJson = JSON.parse(readFileSync(packagePath, 'utf-8'));
|
|
21
|
+
export async function main() {
|
|
22
|
+
const program = new Command();
|
|
23
|
+
program
|
|
24
|
+
.name('tacho')
|
|
25
|
+
.description('Comprehensive developer tooling for TachUI')
|
|
26
|
+
.version(packageJson.version);
|
|
27
|
+
// Welcome message
|
|
28
|
+
console.log(chalk.cyan(`
|
|
29
|
+
╭─────────────────────────────────────╮
|
|
30
|
+
│ 🚀 Tacho CLI v${packageJson.version} │
|
|
31
|
+
│ TachUI Developer Tooling │
|
|
32
|
+
╰─────────────────────────────────────╯
|
|
33
|
+
`));
|
|
34
|
+
// Register commands
|
|
35
|
+
program.addCommand(initCommand);
|
|
36
|
+
program.addCommand(devCommand);
|
|
37
|
+
program.addCommand(generateCommand);
|
|
38
|
+
program.addCommand(migrateCommand);
|
|
39
|
+
program.addCommand(analyzeCommand);
|
|
40
|
+
program.addCommand(optimizeCommand);
|
|
41
|
+
// Global error handling
|
|
42
|
+
program.exitOverride();
|
|
43
|
+
try {
|
|
44
|
+
await program.parseAsync();
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
console.error(chalk.red('Error:'), error.message);
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,kBAAkB;AAClB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACjD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AAErC,sBAAsB;AACtB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAA;AACtD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAA;AAElE,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;IAE7B,OAAO;SACJ,IAAI,CAAC,OAAO,CAAC;SACb,WAAW,CAAC,4CAA4C,CAAC;SACzD,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;IAE/B,kBAAkB;IAClB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC;;mBAEI,WAAW,CAAC,OAAO;;;CAGrC,CAAC,CACC,CAAA;IAED,oBAAoB;IACpB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;IAC/B,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;IAC9B,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAA;IACnC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;IAClC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;IAClC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAA;IAEnC,wBAAwB;IACxB,OAAO,CAAC,YAAY,EAAE,CAAA;IAEtB,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,UAAU,EAAE,CAAA;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAG,KAAe,CAAC,OAAO,CAAC,CAAA;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tachui/cli",
|
|
3
|
+
"version": "0.7.0-alpha1",
|
|
4
|
+
"description": "Tacho CLI - Comprehensive developer tooling for tachUI",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"tacho": "./bin/tacho.js"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"bin",
|
|
14
|
+
"templates"
|
|
15
|
+
],
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"commander": "^11.0.0",
|
|
18
|
+
"chalk": "^5.0.0",
|
|
19
|
+
"ora": "^7.0.0",
|
|
20
|
+
"prompts": "^2.4.0",
|
|
21
|
+
"fs-extra": "^11.0.0",
|
|
22
|
+
"glob": "^10.0.0",
|
|
23
|
+
"@tachui/core": "0.7.0-alpha1"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@types/fs-extra": "^11.0.0",
|
|
27
|
+
"@types/prompts": "^2.4.0",
|
|
28
|
+
"@types/node": "^20.0.0",
|
|
29
|
+
"typescript": "^5.2.0",
|
|
30
|
+
"vitest": "^1.0.0"
|
|
31
|
+
},
|
|
32
|
+
"keywords": [
|
|
33
|
+
"cli",
|
|
34
|
+
"tachui",
|
|
35
|
+
"developer-tools",
|
|
36
|
+
"code-generation",
|
|
37
|
+
"scaffolding",
|
|
38
|
+
"migration",
|
|
39
|
+
"performance"
|
|
40
|
+
],
|
|
41
|
+
"author": "tachUI Team",
|
|
42
|
+
"license": "MPL-2.0",
|
|
43
|
+
"repository": {
|
|
44
|
+
"type": "git",
|
|
45
|
+
"url": "https://github.com/tachui/tachui",
|
|
46
|
+
"directory": "packages/cli"
|
|
47
|
+
},
|
|
48
|
+
"scripts": {
|
|
49
|
+
"build": "tsc -p tsconfig.build.json",
|
|
50
|
+
"dev": "tsc -p tsconfig.build.json --watch",
|
|
51
|
+
"test": "vitest",
|
|
52
|
+
"test:ci": "vitest run",
|
|
53
|
+
"type-check": "tsc --noEmit",
|
|
54
|
+
"lint": "oxlint src",
|
|
55
|
+
"clean": "rm -rf dist"
|
|
56
|
+
}
|
|
57
|
+
}
|