@auto-engineer/cli 0.1.3

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 (68) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +245 -0
  3. package/dist/bin/auto.d.ts +3 -0
  4. package/dist/bin/auto.d.ts.map +1 -0
  5. package/dist/bin/auto.js +12 -0
  6. package/dist/bin/auto.js.map +1 -0
  7. package/dist/src/commands/create-example.d.ts +5 -0
  8. package/dist/src/commands/create-example.d.ts.map +1 -0
  9. package/dist/src/commands/create-example.js +60 -0
  10. package/dist/src/commands/create-example.js.map +1 -0
  11. package/dist/src/commands/demo.d.ts +5 -0
  12. package/dist/src/commands/demo.d.ts.map +1 -0
  13. package/dist/src/commands/demo.js +171 -0
  14. package/dist/src/commands/demo.js.map +1 -0
  15. package/dist/src/commands/export-schema.d.ts +5 -0
  16. package/dist/src/commands/export-schema.d.ts.map +1 -0
  17. package/dist/src/commands/export-schema.js +49 -0
  18. package/dist/src/commands/export-schema.js.map +1 -0
  19. package/dist/src/commands/generate-client.d.ts +5 -0
  20. package/dist/src/commands/generate-client.d.ts.map +1 -0
  21. package/dist/src/commands/generate-client.js +63 -0
  22. package/dist/src/commands/generate-client.js.map +1 -0
  23. package/dist/src/commands/generate-gql-schema.d.ts +5 -0
  24. package/dist/src/commands/generate-gql-schema.d.ts.map +1 -0
  25. package/dist/src/commands/generate-gql-schema.js +57 -0
  26. package/dist/src/commands/generate-gql-schema.js.map +1 -0
  27. package/dist/src/commands/generate-ia.d.ts +5 -0
  28. package/dist/src/commands/generate-ia.d.ts.map +1 -0
  29. package/dist/src/commands/generate-ia.js +54 -0
  30. package/dist/src/commands/generate-ia.js.map +1 -0
  31. package/dist/src/commands/generate-server.d.ts +5 -0
  32. package/dist/src/commands/generate-server.d.ts.map +1 -0
  33. package/dist/src/commands/generate-server.js +50 -0
  34. package/dist/src/commands/generate-server.js.map +1 -0
  35. package/dist/src/commands/implement-client.d.ts +5 -0
  36. package/dist/src/commands/implement-client.d.ts.map +1 -0
  37. package/dist/src/commands/implement-client.js +59 -0
  38. package/dist/src/commands/implement-client.js.map +1 -0
  39. package/dist/src/commands/implement-server.d.ts +5 -0
  40. package/dist/src/commands/implement-server.d.ts.map +1 -0
  41. package/dist/src/commands/implement-server.js +69 -0
  42. package/dist/src/commands/implement-server.js.map +1 -0
  43. package/dist/src/commands/import-design-system.d.ts +5 -0
  44. package/dist/src/commands/import-design-system.d.ts.map +1 -0
  45. package/dist/src/commands/import-design-system.js +50 -0
  46. package/dist/src/commands/import-design-system.js.map +1 -0
  47. package/dist/src/index.d.ts +3 -0
  48. package/dist/src/index.d.ts.map +1 -0
  49. package/dist/src/index.js +154 -0
  50. package/dist/src/index.js.map +1 -0
  51. package/dist/src/utils/analytics.d.ts +21 -0
  52. package/dist/src/utils/analytics.d.ts.map +1 -0
  53. package/dist/src/utils/analytics.js +41 -0
  54. package/dist/src/utils/analytics.js.map +1 -0
  55. package/dist/src/utils/config.d.ts +10 -0
  56. package/dist/src/utils/config.d.ts.map +1 -0
  57. package/dist/src/utils/config.js +50 -0
  58. package/dist/src/utils/config.js.map +1 -0
  59. package/dist/src/utils/errors.d.ts +22 -0
  60. package/dist/src/utils/errors.d.ts.map +1 -0
  61. package/dist/src/utils/errors.js +50 -0
  62. package/dist/src/utils/errors.js.map +1 -0
  63. package/dist/src/utils/terminal.d.ts +13 -0
  64. package/dist/src/utils/terminal.d.ts.map +1 -0
  65. package/dist/src/utils/terminal.js +85 -0
  66. package/dist/src/utils/terminal.js.map +1 -0
  67. package/dist/tsconfig.tsbuildinfo +1 -0
  68. package/package.json +66 -0
@@ -0,0 +1,154 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import chalk from 'chalk';
4
+ import gradient from 'gradient-string';
5
+ import figlet from 'figlet';
6
+ import { loadConfig, validateConfig } from './utils/config.js';
7
+ import { handleError } from './utils/errors.js';
8
+ import { createOutput, supportsColor } from './utils/terminal.js';
9
+ import { Analytics } from './utils/analytics.js';
10
+ import { createDemoCommand } from './commands/demo.js';
11
+ import { createCreateExampleCommand } from './commands/create-example.js';
12
+ import { createExportSchemaCommand } from './commands/export-schema.js';
13
+ import { createGenerateServerCommand } from './commands/generate-server.js';
14
+ import { createGenerateGQLSchemaCommand } from './commands/generate-gql-schema.js';
15
+ import { createImplementServerCommand } from './commands/implement-server.js';
16
+ import { createImportDesignSystemCommand } from './commands/import-design-system.js';
17
+ import { createGenerateIACommand } from './commands/generate-ia.js';
18
+ import { createGenerateClientCommand } from './commands/generate-client.js';
19
+ import { createImplementClientCommand } from './commands/implement-client.js';
20
+ const VERSION = process.env.npm_package_version ?? '0.1.2';
21
+ const checkNodeVersion = () => {
22
+ const nodeVersion = process.version;
23
+ const majorVersion = parseInt(nodeVersion.slice(1).split('.')[0]);
24
+ if (majorVersion < 18) {
25
+ console.error(chalk.red(`Error: Node.js version ${nodeVersion} is not supported.`));
26
+ console.error(chalk.yellow('Auto-engineer requires Node.js 18.0.0 or higher.'));
27
+ console.error(chalk.blue('Please upgrade Node.js and try again.'));
28
+ process.exit(1);
29
+ }
30
+ };
31
+ const clearConsole = () => {
32
+ if (process.stdout.isTTY) {
33
+ // Clear console for TTY environments
34
+ process.stdout.write('\x1Bc');
35
+ }
36
+ };
37
+ const setupSignalHandlers = () => {
38
+ process.on('SIGINT', () => {
39
+ console.log('\n' + chalk.yellow('Operation cancelled by user'));
40
+ process.exit(0);
41
+ });
42
+ process.on('SIGTERM', () => {
43
+ console.log('\n' + chalk.yellow('Process terminated'));
44
+ process.exit(0);
45
+ });
46
+ process.on('uncaughtException', (error) => {
47
+ console.error(chalk.red('Uncaught Exception:'), error);
48
+ process.exit(1);
49
+ });
50
+ process.on('unhandledRejection', (reason, promise) => {
51
+ console.error(chalk.red('Unhandled Rejection at:'), promise, chalk.red('reason:'), reason);
52
+ process.exit(1);
53
+ });
54
+ };
55
+ const createCLI = () => {
56
+ const program = new Command();
57
+ program
58
+ .name('auto-engineer')
59
+ .description('Auto Engineer - Build production ready full-stack apps with AI')
60
+ .version(VERSION, '-v, --version')
61
+ .option('-d, --debug', 'Enable debug mode')
62
+ .option('--no-color', 'Disable colored output')
63
+ .option('--json', 'Output in JSON format')
64
+ .option('--api-token <token>', 'API token for external services')
65
+ .option('--project-path <path>', 'Project path to work with');
66
+ return program;
67
+ };
68
+ const displayBanner = (config) => {
69
+ if (config.output === 'text' && supportsColor(config) && process.stdout.isTTY) {
70
+ const asciiText = figlet.textSync('AutoEngineer', { font: 'Slant' });
71
+ console.log(chalk.bgBlack(gradient(['#F44B4B', '#FF9C1A', '#F9F871', '#4CD964', '#4BC6F4'])(asciiText)));
72
+ console.log();
73
+ }
74
+ };
75
+ const setupProgram = (config) => {
76
+ const program = createCLI();
77
+ const analytics = new Analytics(config);
78
+ program.addCommand(createDemoCommand(config, analytics));
79
+ program.addCommand(createCreateExampleCommand(config, analytics));
80
+ program.addCommand(createExportSchemaCommand(config, analytics));
81
+ program.addCommand(createGenerateServerCommand(config, analytics));
82
+ program.addCommand(createGenerateGQLSchemaCommand(config, analytics));
83
+ program.addCommand(createImplementServerCommand(config, analytics));
84
+ program.addCommand(createImportDesignSystemCommand(config, analytics));
85
+ program.addCommand(createGenerateIACommand(config, analytics));
86
+ program.addCommand(createGenerateClientCommand(config, analytics));
87
+ program.addCommand(createImplementClientCommand(config, analytics));
88
+ program.addHelpText('after', `
89
+ Examples:
90
+
91
+ $ auto-engineer create:example shopping-assistant
92
+ $ auto-engineer export:schema --directory .context/flows
93
+ $ auto-engineer generate:server .context/schema.json --destination .
94
+ $ auto-engineer generate:gql-schema ./server
95
+ $ auto-engineer implement:server ./server
96
+ $ auto-engineer import:design-system ./design-system ./.context
97
+ $ auto-engineer generate:ia ./.context ./flows/*.flow.ts
98
+ $ auto-engineer generate:client ./starter ./design-system ./client ./ia-schema.json ./schema.graphql
99
+ $ auto-engineer implement:client ./client ./.context ./preferences.md ./design-system.md
100
+
101
+ Environment Variables:
102
+ DEBUG=auto-engineer Enable debug mode
103
+ NO_COLOR=1 Disable colored output
104
+ OUTPUT_FORMAT=json Set output format
105
+ AUTO_ENGINEER_API_TOKEN=<token> Set API token
106
+ AUTO_ENGINEER_ANALYTICS=false Disable analytics (enabled by default)
107
+
108
+ For more information, visit: https://github.com/SamHatoum/auto-engineer
109
+ `);
110
+ return program;
111
+ };
112
+ const main = async () => {
113
+ try {
114
+ checkNodeVersion();
115
+ clearConsole();
116
+ setupSignalHandlers();
117
+ const program = createCLI();
118
+ program.parse(process.argv, { from: 'user' });
119
+ const globalOptions = program.opts();
120
+ const config = loadConfig({
121
+ debug: Boolean(globalOptions.debug),
122
+ noColor: Boolean(globalOptions.noColor),
123
+ output: globalOptions.json === true ? 'json' : 'text',
124
+ apiToken: typeof globalOptions.apiToken === 'string' ? globalOptions.apiToken : undefined,
125
+ projectPath: typeof globalOptions.projectPath === 'string' ? globalOptions.projectPath : undefined,
126
+ });
127
+ validateConfig(config);
128
+ createOutput(config);
129
+ displayBanner(config);
130
+ const fullProgram = setupProgram(config);
131
+ await fullProgram.parseAsync(process.argv);
132
+ }
133
+ catch (error) {
134
+ if (error instanceof Error &&
135
+ (error.message.includes('commander') ||
136
+ error.message.includes('helpDisplayed') ||
137
+ error.message.includes('version'))) {
138
+ process.exit(0);
139
+ }
140
+ if (error instanceof Error) {
141
+ handleError(error);
142
+ }
143
+ else {
144
+ console.error(chalk.red('Unknown error:'), error);
145
+ process.exit(1);
146
+ }
147
+ }
148
+ };
149
+ main().catch((error) => {
150
+ const errorMessage = error instanceof Error ? error.message : String(error);
151
+ console.error(chalk.red('Fatal error:'), errorMessage);
152
+ process.exit(1);
153
+ });
154
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,+BAA+B,EAAE,MAAM,iCAAiC,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAE3E,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC;AAE3D,MAAM,gBAAgB,GAAG,GAAG,EAAE;IAC5B,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IACpC,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAElE,IAAI,YAAY,GAAG,EAAE,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,WAAW,oBAAoB,CAAC,CAAC,CAAC;QACpF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,kDAAkD,CAAC,CAAC,CAAC;QAChF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,GAAG,EAAE;IACxB,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACzB,qCAAqC;QACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,GAAG,EAAE;IAC/B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACzB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;QACxC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,KAAK,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QACnD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;QAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,GAAG,EAAE;IACrB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,eAAe,CAAC;SACrB,WAAW,CAAC,gEAAgE,CAAC;SAC7E,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC;SACjC,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC;SAC1C,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC;SAC9C,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,qBAAqB,EAAE,iCAAiC,CAAC;SAChE,MAAM,CAAC,uBAAuB,EAAE,2BAA2B,CAAC,CAAC;IAEhE,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,MAAqC,EAAE,EAAE;IAC9D,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC9E,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACzG,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,MAAqC,EAAE,EAAE;IAC7D,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;IAC5B,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IAExC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,UAAU,CAAC,0BAA0B,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,UAAU,CAAC,yBAAyB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,UAAU,CAAC,2BAA2B,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,UAAU,CAAC,8BAA8B,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,UAAU,CAAC,4BAA4B,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IACpE,OAAO,CAAC,UAAU,CAAC,+BAA+B,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,UAAU,CAAC,uBAAuB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,UAAU,CAAC,2BAA2B,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,UAAU,CAAC,4BAA4B,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IAEpE,OAAO,CAAC,WAAW,CACjB,OAAO,EACP;;;;;;;;;;;;;;;;;;;;;KAqBC,CACF,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;IACtB,IAAI,CAAC;QACH,gBAAgB,EAAE,CAAC;QACnB,YAAY,EAAE,CAAC;QACf,mBAAmB,EAAE,CAAC;QAEtB,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9C,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAErC,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC;YACnC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC;YACvC,MAAM,EAAE,aAAa,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YACrD,QAAQ,EAAE,OAAO,aAAa,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YACzF,WAAW,EAAE,OAAO,aAAa,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;SACnG,CAAC,CAAC;QAEH,cAAc,CAAC,MAAM,CAAC,CAAC;QACvB,YAAY,CAAC,MAAM,CAAC,CAAC;QACrB,aAAa,CAAC,MAAM,CAAC,CAAC;QAEtB,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IACE,KAAK,YAAY,KAAK;YACtB,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAClC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;gBACvC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EACpC,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,WAAW,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,KAAK,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5E,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,YAAY,CAAC,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { Config } from './config';
2
+ export interface AnalyticsData {
3
+ command: string;
4
+ timestamp: number;
5
+ version: string;
6
+ nodeVersion: string;
7
+ platform: string;
8
+ success: boolean;
9
+ errorCode?: string;
10
+ }
11
+ export declare class Analytics {
12
+ private config;
13
+ private output;
14
+ private optedIn;
15
+ constructor(config: Config);
16
+ promptForConsent(): Promise<boolean>;
17
+ private prepareAnalyticsData;
18
+ track(data: Omit<AnalyticsData, 'timestamp' | 'version' | 'nodeVersion' | 'platform'>): Promise<void>;
19
+ trackCommand(command: string, success: boolean, errorCode?: string): Promise<void>;
20
+ }
21
+ //# sourceMappingURL=analytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../../src/utils/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,OAAO,CAAwB;gBAE3B,MAAM,EAAE,MAAM;IAKpB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAU1C,OAAO,CAAC,oBAAoB;IAYtB,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,GAAG,SAAS,GAAG,aAAa,GAAG,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrG,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAOzF"}
@@ -0,0 +1,41 @@
1
+ import { createOutput } from './terminal.js';
2
+ export class Analytics {
3
+ constructor(config) {
4
+ this.optedIn = null;
5
+ this.config = config;
6
+ this.output = createOutput(config);
7
+ }
8
+ async promptForConsent() {
9
+ if (this.optedIn !== null) {
10
+ return this.optedIn;
11
+ }
12
+ const isDisabled = process.env.AUTO_ENGINEER_ANALYTICS === 'false';
13
+ this.optedIn = !isDisabled;
14
+ return this.optedIn;
15
+ }
16
+ prepareAnalyticsData(data) {
17
+ return {
18
+ ...data,
19
+ timestamp: Date.now(),
20
+ version: process.env.npm_package_version ?? '0.1.2',
21
+ nodeVersion: process.version,
22
+ platform: process.platform,
23
+ };
24
+ }
25
+ async track(data) {
26
+ const consented = await this.promptForConsent();
27
+ if (!consented) {
28
+ return;
29
+ }
30
+ const analyticsData = this.prepareAnalyticsData(data);
31
+ this.output.debug(`Analytics: ${JSON.stringify(analyticsData)}`);
32
+ }
33
+ async trackCommand(command, success, errorCode) {
34
+ await this.track({
35
+ command,
36
+ success,
37
+ errorCode,
38
+ });
39
+ }
40
+ }
41
+ //# sourceMappingURL=analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../../src/utils/analytics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAY1C,MAAM,OAAO,SAAS;IAKpB,YAAY,MAAc;QAFlB,YAAO,GAAmB,IAAI,CAAC;QAGrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,OAAO,CAAC;QACtB,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,OAAO,CAAC;QACnE,IAAI,CAAC,OAAO,GAAG,CAAC,UAAU,CAAC;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEO,oBAAoB,CAC1B,IAA+E;QAE/E,OAAO;YACL,GAAG,IAAI;YACP,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO;YACnD,WAAW,EAAE,OAAO,CAAC,OAAO;YAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAA+E;QACzF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAEhD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAe,EAAE,OAAgB,EAAE,SAAkB;QACtE,MAAM,IAAI,CAAC,KAAK,CAAC;YACf,OAAO;YACP,OAAO;YACP,SAAS;SACV,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ export interface Config {
2
+ debug: boolean;
3
+ noColor: boolean;
4
+ output: 'text' | 'json';
5
+ apiToken?: string;
6
+ projectPath?: string;
7
+ }
8
+ export declare const loadConfig: (cliArgs?: Partial<Config>) => Config;
9
+ export declare const validateConfig: (config: Config) => void;
10
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/utils/config.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA0BD,eAAO,MAAM,UAAU,aAAa,OAAO,CAAC,MAAM,CAAC,KAAQ,MAU1D,CAAC;AAiBF,eAAO,MAAM,cAAc,WAAY,MAAM,KAAG,IAK/C,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { createError } from './errors.js';
2
+ const parseNoColor = () => {
3
+ return process.env.NO_COLOR === '1' || process.env.NO_COLOR === 'true';
4
+ };
5
+ const parseOutputFormat = () => {
6
+ return process.env.OUTPUT_FORMAT === 'json' ? 'json' : 'text';
7
+ };
8
+ const getEnvConfig = () => {
9
+ return {
10
+ debug: process.env.DEBUG === 'auto-engineer',
11
+ noColor: parseNoColor(),
12
+ output: parseOutputFormat(),
13
+ apiToken: process.env.AUTO_ENGINEER_API_TOKEN,
14
+ projectPath: process.env.AUTO_ENGINEER_PROJECT_PATH,
15
+ };
16
+ };
17
+ const getDefaultConfig = () => ({
18
+ debug: false,
19
+ noColor: false,
20
+ output: 'text',
21
+ });
22
+ export const loadConfig = (cliArgs = {}) => {
23
+ const envConfig = getEnvConfig();
24
+ const defaultConfig = getDefaultConfig();
25
+ // Merge in order of precedence: CLI args > env vars > defaults
26
+ return {
27
+ ...defaultConfig,
28
+ ...envConfig,
29
+ ...cliArgs,
30
+ };
31
+ };
32
+ const validateApiToken = (apiToken) => {
33
+ if (apiToken !== undefined && apiToken !== null && apiToken.length > 0 && apiToken.length < 10) {
34
+ throw createError('API token must be at least 10 characters long', 'E4003');
35
+ }
36
+ };
37
+ const validateProjectPath = (projectPath) => {
38
+ if (projectPath !== undefined && projectPath !== null && projectPath.length > 0) {
39
+ const isValidPath = projectPath.startsWith('/') || projectPath.startsWith('./');
40
+ if (!isValidPath) {
41
+ throw createError('Project path must be an absolute path or relative path starting with ./', 'E4004');
42
+ }
43
+ }
44
+ };
45
+ export const validateConfig = (config) => {
46
+ const { apiToken, projectPath } = config;
47
+ validateApiToken(apiToken);
48
+ validateProjectPath(projectPath);
49
+ };
50
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAUvC,MAAM,YAAY,GAAG,GAAY,EAAE;IACjC,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC;AACzE,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,GAAoB,EAAE;IAC9C,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AAChE,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,GAAoB,EAAE;IACzC,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,eAAe;QAC5C,OAAO,EAAE,YAAY,EAAE;QACvB,MAAM,EAAE,iBAAiB,EAAE;QAC3B,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB;QAC7C,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B;KACpD,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,GAAW,EAAE,CAAC,CAAC;IACtC,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,MAAM;CACf,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,UAA2B,EAAE,EAAU,EAAE;IAClE,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IAEzC,+DAA+D;IAC/D,OAAO;QACL,GAAG,aAAa;QAChB,GAAG,SAAS;QACZ,GAAG,OAAO;KACX,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,QAA4B,EAAQ,EAAE;IAC9D,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QAC/F,MAAM,WAAW,CAAC,+CAA+C,EAAE,OAAO,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,WAA+B,EAAQ,EAAE;IACpE,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChF,MAAM,WAAW,GAAG,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAChF,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,WAAW,CAAC,yEAAyE,EAAE,OAAO,CAAC,CAAC;QACxG,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAc,EAAQ,EAAE;IACrD,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAEzC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC3B,mBAAmB,CAAC,WAAW,CAAC,CAAC;AACnC,CAAC,CAAC"}
@@ -0,0 +1,22 @@
1
+ export interface CLIError extends Error {
2
+ code: string;
3
+ exitCode: number;
4
+ }
5
+ export declare class ValidationError extends Error implements CLIError {
6
+ code: string;
7
+ exitCode: number;
8
+ constructor(message: string, code?: string, exitCode?: number);
9
+ }
10
+ export declare class ConfigurationError extends Error implements CLIError {
11
+ code: string;
12
+ exitCode: number;
13
+ constructor(message: string, code?: string, exitCode?: number);
14
+ }
15
+ export declare class RuntimeError extends Error implements CLIError {
16
+ code: string;
17
+ exitCode: number;
18
+ constructor(message: string, code?: string, exitCode?: number);
19
+ }
20
+ export declare const handleError: (error: Error | CLIError) => never;
21
+ export declare const createError: (message: string, code: string, exitCode?: number) => CLIError;
22
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/utils/errors.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAS,SAAQ,KAAK;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,eAAgB,SAAQ,KAAM,YAAW,QAAQ;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;gBAEL,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAgB,EAAE,QAAQ,GAAE,MAAU;CAM1E;AAED,qBAAa,kBAAmB,SAAQ,KAAM,YAAW,QAAQ;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;gBAEL,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAgB,EAAE,QAAQ,GAAE,MAAU;CAM1E;AAED,qBAAa,YAAa,SAAQ,KAAM,YAAW,QAAQ;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;gBAEL,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAgB,EAAE,QAAQ,GAAE,MAAU;CAM1E;AAoBD,eAAO,MAAM,WAAW,UAAW,KAAK,GAAG,QAAQ,KAAG,KAQrD,CAAC;AAEF,eAAO,MAAM,WAAW,YAAa,MAAM,QAAQ,MAAM,aAAY,MAAM,KAAO,QAEjF,CAAC"}
@@ -0,0 +1,50 @@
1
+ import chalk from 'chalk';
2
+ export class ValidationError extends Error {
3
+ constructor(message, code = 'E4001', exitCode = 1) {
4
+ super(message);
5
+ this.name = 'ValidationError';
6
+ this.code = code;
7
+ this.exitCode = exitCode;
8
+ }
9
+ }
10
+ export class ConfigurationError extends Error {
11
+ constructor(message, code = 'E4002', exitCode = 1) {
12
+ super(message);
13
+ this.name = 'ConfigurationError';
14
+ this.code = code;
15
+ this.exitCode = exitCode;
16
+ }
17
+ }
18
+ export class RuntimeError extends Error {
19
+ constructor(message, code = 'E5001', exitCode = 1) {
20
+ super(message);
21
+ this.name = 'RuntimeError';
22
+ this.code = code;
23
+ this.exitCode = exitCode;
24
+ }
25
+ }
26
+ const getErrorDetails = (error) => {
27
+ const isCLIError = 'code' in error && 'exitCode' in error;
28
+ const cliError = error;
29
+ return {
30
+ errorCode: isCLIError ? cliError.code : 'E9999',
31
+ exitCode: isCLIError ? cliError.exitCode : 1,
32
+ };
33
+ };
34
+ const logErrorStack = (error) => {
35
+ const isDebugMode = process.env.DEBUG === 'auto-engineer';
36
+ if (isDebugMode && error.stack != null && error.stack.length > 0) {
37
+ console.error(chalk.gray('Stack trace:'));
38
+ console.error(chalk.gray(error.stack));
39
+ }
40
+ };
41
+ export const handleError = (error) => {
42
+ const { errorCode, exitCode } = getErrorDetails(error);
43
+ console.error(chalk.red(`Error (${errorCode}): ${error.message}`));
44
+ logErrorStack(error);
45
+ process.exit(exitCode);
46
+ };
47
+ export const createError = (message, code, exitCode = 1) => {
48
+ return new ValidationError(message, code, exitCode);
49
+ };
50
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAIxC,YAAY,OAAe,EAAE,OAAe,OAAO,EAAE,WAAmB,CAAC;QACvE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAI3C,YAAY,OAAe,EAAE,OAAe,OAAO,EAAE,WAAmB,CAAC;QACvE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,KAAK;IAIrC,YAAY,OAAe,EAAE,OAAe,OAAO,EAAE,WAAmB,CAAC;QACvE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,eAAe,GAAG,CAAC,KAAuB,EAA2C,EAAE;IAC3F,MAAM,UAAU,GAAG,MAAM,IAAI,KAAK,IAAI,UAAU,IAAI,KAAK,CAAC;IAC1D,MAAM,QAAQ,GAAG,KAAiB,CAAC;IAEnC,OAAO;QACL,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO;QAC/C,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;KAC7C,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,KAAY,EAAQ,EAAE;IAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,eAAe,CAAC;IAC1D,IAAI,WAAW,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QAC1C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAuB,EAAS,EAAE;IAC5D,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAEvD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,SAAS,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAEnE,aAAa,CAAC,KAAK,CAAC,CAAC;IAErB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,OAAe,EAAE,IAAY,EAAE,WAAmB,CAAC,EAAY,EAAE;IAC3F,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AACtD,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { Config } from './config';
2
+ export declare const supportsColor: (config: Config) => boolean;
3
+ export declare const createOutput: (config: Config) => {
4
+ success: (message: string) => void;
5
+ error: (message: string) => void;
6
+ info: (message: string) => void;
7
+ warn: (message: string) => void;
8
+ debug: (message: string) => void;
9
+ log: (message: string) => void;
10
+ };
11
+ export declare const isStdinAvailable: () => boolean;
12
+ export declare const readStdin: () => Promise<string>;
13
+ //# sourceMappingURL=terminal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../../src/utils/terminal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,eAAO,MAAM,aAAa,WAAY,MAAM,KAAG,OAG9C,CAAC;AAEF,eAAO,MAAM,YAAY,WAAY,MAAM;uBAcpB,MAAM;qBAQR,MAAM;oBASP,MAAM;oBAQN,MAAM;qBAQL,MAAM;mBAUR,MAAM;CAQxB,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO,OAEnC,CAAC;AAEF,eAAO,MAAM,SAAS,QAAO,OAAO,CAAC,MAAM,CAU1C,CAAC"}
@@ -0,0 +1,85 @@
1
+ import chalk from 'chalk';
2
+ export const supportsColor = (config) => {
3
+ if (config.noColor)
4
+ return false;
5
+ return process.stdout.isTTY && chalk.level > 0;
6
+ };
7
+ export const createOutput = (config) => {
8
+ const useColor = supportsColor(config);
9
+ const isJsonOutput = config.output === 'json';
10
+ const outputJson = (status, message) => {
11
+ console.log(JSON.stringify({ status, message }));
12
+ };
13
+ const outputText = (prefix, message, colorFn) => {
14
+ const text = `${prefix} ${message}`;
15
+ console.log(useColor && colorFn ? colorFn(text) : text);
16
+ };
17
+ return {
18
+ success: (message) => {
19
+ if (isJsonOutput) {
20
+ outputJson('success', message);
21
+ }
22
+ else {
23
+ outputText('✓', message, chalk.green);
24
+ }
25
+ },
26
+ error: (message) => {
27
+ if (isJsonOutput) {
28
+ console.error(JSON.stringify({ status: 'error', message }));
29
+ }
30
+ else {
31
+ const text = `✗ ${message}`;
32
+ console.error(useColor ? chalk.red(text) : text);
33
+ }
34
+ },
35
+ info: (message) => {
36
+ if (isJsonOutput) {
37
+ outputJson('info', message);
38
+ }
39
+ else {
40
+ outputText('ℹ', message, chalk.blue);
41
+ }
42
+ },
43
+ warn: (message) => {
44
+ if (isJsonOutput) {
45
+ outputJson('warning', message);
46
+ }
47
+ else {
48
+ outputText('⚠', message, chalk.yellow);
49
+ }
50
+ },
51
+ debug: (message) => {
52
+ if (!config.debug)
53
+ return;
54
+ if (isJsonOutput) {
55
+ outputJson('debug', message);
56
+ }
57
+ else {
58
+ outputText('🐛', message, chalk.gray);
59
+ }
60
+ },
61
+ log: (message) => {
62
+ if (isJsonOutput) {
63
+ console.log(JSON.stringify({ message }));
64
+ }
65
+ else {
66
+ console.log(message);
67
+ }
68
+ },
69
+ };
70
+ };
71
+ export const isStdinAvailable = () => {
72
+ return !process.stdin.isTTY;
73
+ };
74
+ export const readStdin = () => {
75
+ return new Promise((resolve) => {
76
+ let data = '';
77
+ process.stdin.on('data', (chunk) => {
78
+ data += chunk.toString();
79
+ });
80
+ process.stdin.on('end', () => {
81
+ resolve(data.trim());
82
+ });
83
+ });
84
+ };
85
+ //# sourceMappingURL=terminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../../src/utils/terminal.ts"],"names":[],"mappings":"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"}