@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.
@@ -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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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tacho CLI - Comprehensive developer tooling for TachUI
3
+ */
4
+ export declare function main(): Promise<void>;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -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
+ }