neex 0.6.36 → 0.6.38

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/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  </picture>
7
7
  </a>
8
8
 
9
- # Neex v0.6.34
9
+ # Neex v0.6.37
10
10
 
11
11
  ### 🚀 Neex: The Modern Build System for Polyrepo-in-Monorepo Architecture
12
12
 
@@ -69,12 +69,11 @@ class BuildManager {
69
69
  clean: false,
70
70
  sourceMap: false,
71
71
  target: 'es2020',
72
- module: 'commonjs',
73
- silent: false,
72
+ module: 'commonjs'
74
73
  };
75
74
  this.options = {
76
75
  ...defaultOptions,
77
- ...options,
76
+ ...options
78
77
  };
79
78
  }
80
79
  setupFileWatcher() {
@@ -97,7 +96,7 @@ class BuildManager {
97
96
  });
98
97
  }
99
98
  async handleFileChange(event) {
100
- if (this.options.showInfo && !this.options.silent) {
99
+ if (this.options.showInfo) {
101
100
  const prefix = chalk_1.default.cyan(`[${this.options.runnerName}]`);
102
101
  logger_1.default.printLine(`${prefix} File changed: ${chalk_1.default.yellow(event.relativePath)}`, 'info');
103
102
  }
@@ -108,7 +107,7 @@ class BuildManager {
108
107
  await fs.mkdir(this.options.outputDir, { recursive: true });
109
108
  }
110
109
  catch (error) {
111
- if (this.options.showInfo && !this.options.silent) {
110
+ if (this.options.showInfo) {
112
111
  logger_1.default.printLine(`Failed to create output directory: ${error.message}`, 'error');
113
112
  }
114
113
  throw error;
@@ -120,13 +119,13 @@ class BuildManager {
120
119
  }
121
120
  try {
122
121
  await fs.rm(this.options.outputDir, { recursive: true, force: true });
123
- if (this.options.showInfo && !this.options.silent) {
122
+ if (this.options.showInfo) {
124
123
  const prefix = chalk_1.default.cyan(`[${this.options.runnerName}]`);
125
124
  logger_1.default.printLine(`${prefix} Cleaned output directory: ${chalk_1.default.yellow(this.options.outputDir)}`, 'info');
126
125
  }
127
126
  }
128
127
  catch (error) {
129
- if (this.options.showInfo && !this.options.silent) {
128
+ if (this.options.showInfo) {
130
129
  logger_1.default.printLine(`Failed to clean output directory: ${error.message}`, 'error');
131
130
  }
132
131
  throw error;
@@ -157,8 +156,7 @@ class BuildManager {
157
156
  printOutput: (_a = this.options.showInfo) !== null && _a !== void 0 ? _a : false,
158
157
  showTiming: (_b = this.options.showInfo) !== null && _b !== void 0 ? _b : false,
159
158
  prefix: (_c = this.options.showInfo) !== null && _c !== void 0 ? _c : false,
160
- customPrefix: this.options.showInfo ? () => `build` : undefined,
161
- silent: this.options.silent, // Pass silent option to the runner
159
+ customPrefix: this.options.showInfo ? () => `build` : undefined
162
160
  };
163
161
  this.runner = new runner_1.Runner(runnerOptions);
164
162
  try {
@@ -252,7 +250,7 @@ class BuildManager {
252
250
  // Set up graceful shutdown
253
251
  this.setupGracefulShutdown();
254
252
  if (this.options.watch) {
255
- if (this.options.showInfo && !this.options.silent) {
253
+ if (this.options.showInfo) {
256
254
  const prefix = chalk_1.default.cyan(`[${this.options.runnerName}]`);
257
255
  logger_1.default.printLine(`${prefix} Build completed. Watching for changes...`, 'info');
258
256
  logger_1.default.printLine(`${prefix} Press ${chalk_1.default.cyan('Ctrl+C')} to stop`, 'info');
@@ -263,7 +261,7 @@ class BuildManager {
263
261
  if (this.isBuilding) {
264
262
  return;
265
263
  }
266
- if (this.options.showInfo && !this.options.silent) {
264
+ if (this.options.showInfo) {
267
265
  const prefix = chalk_1.default.cyan(`[${this.options.runnerName}]`);
268
266
  logger_1.default.printLine(`${prefix} Rebuilding due to file changes...`, 'info');
269
267
  }
@@ -279,7 +277,7 @@ class BuildManager {
279
277
  }
280
278
  // Run build again
281
279
  await this.runBuild();
282
- if (this.options.showInfo && !this.options.silent) {
280
+ if (this.options.showInfo) {
283
281
  const prefix = chalk_1.default.cyan(`[${this.options.runnerName}]`);
284
282
  logger_1.default.printLine(`${prefix} Rebuild completed. Watching for changes...`, 'info');
285
283
  }
@@ -292,7 +290,7 @@ class BuildManager {
292
290
  if (!this.isBuilding && !this.options.watch) {
293
291
  return;
294
292
  }
295
- if (this.options.showInfo && !this.options.silent) {
293
+ if (this.options.showInfo) {
296
294
  const prefix = chalk_1.default.cyan(`[${this.options.runnerName}]`);
297
295
  logger_1.default.printLine(`${prefix} Stopping build process...`, 'info');
298
296
  }
@@ -304,7 +302,7 @@ class BuildManager {
304
302
  if (this.runner) {
305
303
  this.runner.cleanup('SIGTERM');
306
304
  }
307
- if (this.options.showInfo && !this.options.silent) {
305
+ if (this.options.showInfo) {
308
306
  const prefix = chalk_1.default.cyan(`[${this.options.runnerName}]`);
309
307
  const uptime = Math.floor((Date.now() - this.startTime.getTime()) / 1000);
310
308
  const uptimeStr = this.formatUptime(uptime);
@@ -316,7 +314,7 @@ class BuildManager {
316
314
  }
317
315
  setupGracefulShutdown() {
318
316
  const handleSignal = (signal) => {
319
- if (this.options.showInfo && !this.options.silent) {
317
+ if (this.options.showInfo) {
320
318
  console.log(`\n${chalk_1.default.yellow(`${figures_1.default.warning} Received ${signal}. Shutting down build process...`)}`);
321
319
  }
322
320
  this.stop().then(() => {
package/dist/src/cli.js CHANGED
@@ -20,8 +20,8 @@ function cli() {
20
20
  // Add all command groups
21
21
  (0, index_js_1.addRunCommands)(program);
22
22
  (0, index_js_1.addServerCommands)(program);
23
- const devCmds = (0, index_js_1.devCommands)(program);
24
- cleanupHandlers.push(devCmds.cleanupDev);
23
+ const devCommands = (0, index_js_1.addDevCommands)(program);
24
+ cleanupHandlers.push(devCommands.cleanupDev);
25
25
  const buildCommands = (0, index_js_1.addBuildCommands)(program);
26
26
  cleanupHandlers.push(buildCommands.cleanupBuild);
27
27
  const startCommands = (0, index_js_1.addStartCommands)(program);
@@ -1,42 +1,234 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
27
  };
5
28
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.devCommands = void 0;
29
+ exports.addDevCommands = void 0;
7
30
  const dev_runner_js_1 = require("../dev-runner.js");
8
31
  const chalk_1 = __importDefault(require("chalk"));
9
- const config_js_1 = require("../config.js");
10
- function devCommands(program) {
32
+ const figures_1 = __importDefault(require("figures"));
33
+ const path = __importStar(require("path"));
34
+ const fs = __importStar(require("fs/promises"));
35
+ // Simple logger class - no spinners, no complex features
36
+ class SimpleLogger {
37
+ info(message) {
38
+ console.log(chalk_1.default.blue(`${figures_1.default.info} ${message}`));
39
+ }
40
+ success(message) {
41
+ console.log(chalk_1.default.green(`${figures_1.default.tick} ${message}`));
42
+ }
43
+ warning(message) {
44
+ console.log(chalk_1.default.yellow(`${figures_1.default.warning} ${message}`));
45
+ }
46
+ error(message) {
47
+ console.log(chalk_1.default.red(`${figures_1.default.cross} ${message}`));
48
+ }
49
+ gray(message) {
50
+ console.log(chalk_1.default.gray(message));
51
+ }
52
+ cyan(message) {
53
+ console.log(chalk_1.default.cyan(message));
54
+ }
55
+ log(message) {
56
+ console.log(message);
57
+ }
58
+ }
59
+ const logger = new SimpleLogger();
60
+ // Helper function to check if file exists
61
+ async function fileExists(filePath) {
62
+ try {
63
+ await fs.access(filePath);
64
+ return true;
65
+ }
66
+ catch (_a) {
67
+ return false;
68
+ }
69
+ }
70
+ // Helper function to determine the best command to run the file
71
+ async function getBestCommand(filePath, showInfo) {
72
+ const ext = path.extname(filePath).toLowerCase();
73
+ const absolutePath = path.resolve(process.cwd(), filePath);
74
+ // Check if file exists
75
+ if (!(await fileExists(absolutePath))) {
76
+ throw new Error(`File not found: ${filePath}`);
77
+ }
78
+ if (showInfo) {
79
+ logger.info(`neex dev: Analyzing ${chalk_1.default.cyan(path.basename(filePath))}`);
80
+ }
81
+ switch (ext) {
82
+ case '.ts':
83
+ case '.mts':
84
+ case '.cts':
85
+ if (showInfo) {
86
+ logger.success(`neex dev: TypeScript detected, ready to run`);
87
+ }
88
+ return `npx ts-node ${filePath}`;
89
+ case '.js':
90
+ case '.mjs':
91
+ case '.cjs':
92
+ if (showInfo) {
93
+ logger.success(`neex dev: JavaScript detected, ready to run`);
94
+ }
95
+ return `node ${filePath}`;
96
+ default:
97
+ if (showInfo) {
98
+ logger.warning(`neex dev: Unknown file type, using Node.js`);
99
+ }
100
+ return `node ${filePath}`;
101
+ }
102
+ }
103
+ function addDevCommands(program) {
104
+ let devRunner = null;
105
+ // Dev command - file watching and auto-restart like nodemon/ts-node-dev
11
106
  program
12
- .command('dev')
13
- .description('Run commands in development mode')
14
- .option('-c, --config <path>', 'Path to the neex.config.js file')
15
- .action(async (options) => {
107
+ .command('dev <file>') // Made file mandatory
108
+ .alias('d')
109
+ .description('Run TypeScript/JavaScript files with file watching and auto-restart (like nodemon/ts-node-dev but better)')
110
+ .option('-c, --no-color', 'Disable colored output')
111
+ .option('-t, --no-timing', 'Hide timing information')
112
+ .option('-p, --no-prefix', 'Hide command prefix')
113
+ .option('-s, --stop-on-error', 'Stop on first error')
114
+ .option('-o, --no-output', 'Hide command output')
115
+ .option('-m, --minimal', 'Use minimal output format')
116
+ .option('-w, --watch <paths...>', 'Additional paths to watch (default: current directory)')
117
+ .option('-i, --ignore <patterns...>', 'Patterns to ignore')
118
+ .option('-e, --ext <extensions...>', 'File extensions to watch (default: js,mjs,json,ts,tsx,jsx)')
119
+ .option('-d, --delay <ms>', 'Delay before restart in milliseconds', parseInt)
120
+ .option('--clear', 'Clear console on restart')
121
+ .option('--verbose', 'Verbose output')
122
+ .option('--info', 'Show detailed information during startup')
123
+ .option('--signal <signal>', 'Signal to send to processes on restart', 'SIGTERM')
124
+ .action(async (file, options) => {
16
125
  try {
17
- const config = await (0, config_js_1.loadConfig)(options.config);
18
- if (!config.commands || config.commands.length === 0) {
19
- console.error(chalk_1.default.red('No commands found in the configuration file.'));
126
+ const showInfo = options.info || false;
127
+ if (showInfo) {
128
+ logger.info(`neex dev: Starting enhanced development server...`);
129
+ logger.info(`neex dev: Target file: ${chalk_1.default.cyan(file)}`);
130
+ }
131
+ // Validate file parameter
132
+ if (!file || file.trim() === '') {
133
+ logger.error(`neex dev: Error - No file specified!`);
134
+ logger.log(chalk_1.default.yellow(`${figures_1.default.pointer} Usage: neex dev <file>`));
135
+ logger.log(chalk_1.default.yellow(`${figures_1.default.pointer} Example: neex dev src/server.ts`));
20
136
  process.exit(1);
21
137
  }
22
- const commandsToRun = config.commands.map((cmd) => ({
23
- name: cmd.name,
24
- command: cmd.command,
25
- cwd: cmd.cwd,
26
- }));
27
- console.log(chalk_1.default.blue('Starting development mode...'));
28
- (0, dev_runner_js_1.runDev)(commandsToRun);
138
+ // Get the best command to run the file
139
+ let commandToExecute;
140
+ let fileExtension;
141
+ try {
142
+ commandToExecute = await getBestCommand(file, showInfo);
143
+ fileExtension = path.extname(file).toLowerCase();
144
+ }
145
+ catch (error) {
146
+ logger.error(`neex dev: ${error instanceof Error ? error.message : 'Unknown error occurred'}`);
147
+ process.exit(1);
148
+ }
149
+ // Setup watch configuration
150
+ const watchPaths = options.watch ? [...options.watch, './'] : ['./'];
151
+ const ignorePatterns = options.ignore || [
152
+ 'node_modules/**',
153
+ '.git/**',
154
+ '*.log',
155
+ 'dist/**',
156
+ 'build/**',
157
+ 'coverage/**',
158
+ '.nyc_output/**',
159
+ '*.tmp',
160
+ '*.temp',
161
+ '.DS_Store',
162
+ 'Thumbs.db'
163
+ ];
164
+ const extensions = options.ext || ['js', 'mjs', 'json', 'ts', 'tsx', 'jsx', 'vue', 'svelte'];
165
+ // Log configuration only if --info flag is set
166
+ if (showInfo) {
167
+ logger.info(`neex dev: Configuration:`);
168
+ logger.log(chalk_1.default.blue(` ${figures_1.default.arrowRight} Target: ${chalk_1.default.cyan(file)}`));
169
+ logger.log(chalk_1.default.blue(` ${figures_1.default.arrowRight} Runtime: ${chalk_1.default.cyan(fileExtension === '.ts' || fileExtension === '.mts' || fileExtension === '.cts' ? 'TypeScript' : 'JavaScript')}`));
170
+ logger.log(chalk_1.default.blue(` ${figures_1.default.arrowRight} Watch paths: ${chalk_1.default.cyan(watchPaths.join(', '))}`));
171
+ logger.log(chalk_1.default.blue(` ${figures_1.default.arrowRight} Extensions: ${chalk_1.default.cyan(extensions.join(', '))}`));
172
+ logger.log(chalk_1.default.blue(` ${figures_1.default.arrowRight} Restart delay: ${chalk_1.default.cyan(options.delay || 1000)}ms`));
173
+ logger.log(chalk_1.default.blue(` ${figures_1.default.arrowRight} Clear console: ${chalk_1.default.cyan(options.clear ? 'Yes' : 'No')}`));
174
+ if (options.verbose) {
175
+ logger.info(`neex dev: Verbose mode enabled - showing detailed logs`);
176
+ }
177
+ logger.success(`neex dev: Starting file watcher and process manager...`);
178
+ logger.success(`neex dev: Launching ${chalk_1.default.cyan(path.basename(file))} with auto-restart capability...`);
179
+ logger.info(`neex dev: Press Ctrl+C to stop the development server`);
180
+ logger.gray(`${'='.repeat(60)}`);
181
+ }
182
+ // Create DevRunner instance
183
+ devRunner = new dev_runner_js_1.DevRunner({
184
+ runnerName: 'neex dev',
185
+ parallel: false,
186
+ color: options.color,
187
+ showTiming: options.timing,
188
+ prefix: options.prefix,
189
+ stopOnError: options.stopOnError,
190
+ printOutput: options.output,
191
+ minimalOutput: options.minimal,
192
+ watch: watchPaths,
193
+ ignore: ignorePatterns,
194
+ ext: extensions,
195
+ delay: options.delay || 1000,
196
+ clearConsole: options.clear,
197
+ verbose: options.verbose,
198
+ showInfo: showInfo,
199
+ signal: options.signal,
200
+ restartOnChange: true,
201
+ groupOutput: false,
202
+ isServerMode: false
203
+ });
204
+ // Start the development server
205
+ await devRunner.start([commandToExecute]);
29
206
  }
30
207
  catch (error) {
31
- console.error(chalk_1.default.red(`Error during dev command: ${error.message}`));
208
+ logger.error(`neex dev: Fatal error occurred`);
209
+ if (error instanceof Error) {
210
+ logger.error(`Details: ${error.message}`);
211
+ if (options.verbose && error.stack) {
212
+ logger.gray(`Stack trace:\n${error.stack}`);
213
+ }
214
+ }
215
+ else {
216
+ logger.error(`Unknown error occurred`);
217
+ }
218
+ logger.log(chalk_1.default.yellow(`${figures_1.default.pointer} Try running with --verbose flag for more details`));
32
219
  process.exit(1);
33
220
  }
34
221
  });
222
+ // Return cleanup function for dev runner
35
223
  return {
224
+ getDevRunner: () => devRunner,
36
225
  cleanupDev: () => {
37
- // In the new model, cleanup is handled by runDev itself via process signals.
38
- // This function can be used for any additional cleanup if needed in the future.
226
+ if (devRunner && devRunner.isActive()) {
227
+ logger.info(`neex dev: Stopping development server...`);
228
+ devRunner.stop();
229
+ logger.success(`neex dev: Development server stopped successfully`);
230
+ }
39
231
  }
40
232
  };
41
233
  }
42
- exports.devCommands = devCommands;
234
+ exports.addDevCommands = addDevCommands;
@@ -1,14 +1,22 @@
1
1
  "use strict";
2
- // src/commands/index.ts
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
3
16
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.addStartCommands = exports.addBuildCommands = exports.devCommands = exports.addServerCommands = exports.addRunCommands = void 0;
5
- var run_commands_js_1 = require("./run-commands.js");
6
- Object.defineProperty(exports, "addRunCommands", { enumerable: true, get: function () { return run_commands_js_1.addRunCommands; } });
7
- var server_commands_js_1 = require("./server-commands.js");
8
- Object.defineProperty(exports, "addServerCommands", { enumerable: true, get: function () { return server_commands_js_1.addServerCommands; } });
9
- var dev_commands_js_1 = require("./dev-commands.js");
10
- Object.defineProperty(exports, "devCommands", { enumerable: true, get: function () { return dev_commands_js_1.devCommands; } });
11
- var build_commands_js_1 = require("./build-commands.js");
12
- Object.defineProperty(exports, "addBuildCommands", { enumerable: true, get: function () { return build_commands_js_1.addBuildCommands; } });
13
- var start_commands_js_1 = require("./start-commands.js");
14
- Object.defineProperty(exports, "addStartCommands", { enumerable: true, get: function () { return start_commands_js_1.addStartCommands; } });
17
+ // src/commands/index.ts - Export all commands
18
+ __exportStar(require("./run-commands.js"), exports);
19
+ __exportStar(require("./dev-commands.js"), exports);
20
+ __exportStar(require("./server-commands.js"), exports);
21
+ __exportStar(require("./start-commands.js"), exports);
22
+ __exportStar(require("./build-commands"), exports);
@@ -3,15 +3,37 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.runDev = exports.DevRunner = void 0;
6
+ exports.DevRunner = void 0;
7
7
  // src/dev-runner.ts - Development runner with file watching (nodemon functionality)
8
8
  const watcher_1 = require("./watcher");
9
9
  const runner_1 = require("./runner");
10
10
  const chalk_1 = __importDefault(require("chalk"));
11
11
  const figures_1 = __importDefault(require("figures"));
12
- const logger_1 = __importDefault(require("./logger"));
13
- const logger_process_1 = require("./logger-process");
14
- const child_process_1 = require("child_process");
12
+ // Simple logger class - no spinners, no complex features
13
+ class SimpleLogger {
14
+ info(message) {
15
+ console.log(chalk_1.default.blue(`${figures_1.default.info} ${message}`));
16
+ }
17
+ success(message) {
18
+ console.log(chalk_1.default.green(`${figures_1.default.tick} ${message}`));
19
+ }
20
+ warning(message) {
21
+ console.log(chalk_1.default.yellow(`${figures_1.default.warning} ${message}`));
22
+ }
23
+ error(message) {
24
+ console.log(chalk_1.default.red(`${figures_1.default.cross} ${message}`));
25
+ }
26
+ gray(message) {
27
+ console.log(chalk_1.default.gray(message));
28
+ }
29
+ cyan(message) {
30
+ console.log(chalk_1.default.cyan(message));
31
+ }
32
+ log(message) {
33
+ console.log(message);
34
+ }
35
+ }
36
+ const logger = new SimpleLogger();
15
37
  class DevRunner {
16
38
  constructor(options) {
17
39
  this.commands = [];
@@ -72,7 +94,7 @@ class DevRunner {
72
94
  async handleFileChange(event) {
73
95
  const prefix = chalk_1.default.cyan(`[${this.options.runnerName}]`);
74
96
  if (this.options.showInfo) {
75
- logger_1.default.printLine(`${prefix} File changed: ${chalk_1.default.yellow(event.relativePath)}`, 'info');
97
+ logger.log(`${prefix} File changed: ${chalk_1.default.yellow(event.relativePath)}`);
76
98
  }
77
99
  if (this.options.clearConsole) {
78
100
  console.clear();
@@ -100,13 +122,12 @@ class DevRunner {
100
122
  };
101
123
  this.runner = new runner_1.Runner(runnerOptions);
102
124
  try {
103
- const commandStrings = this.commands.map(c => c.command);
104
- const results = await this.runner.run(commandStrings);
125
+ const results = await this.runner.run(this.commands);
105
126
  return results;
106
127
  }
107
128
  catch (error) {
108
129
  if (this.options.showInfo) {
109
- logger_1.default.printLine(`Execution failed: ${error.message}`, 'error');
130
+ logger.error(`Execution failed: ${error.message}`);
110
131
  }
111
132
  return [];
112
133
  }
@@ -160,14 +181,14 @@ class DevRunner {
160
181
  // Run initial commands
161
182
  const prefix = chalk_1.default.cyan(`[${this.options.runnerName}]`);
162
183
  if (this.options.showInfo) {
163
- logger_1.default.printLine(`${prefix} Starting development server...`, 'info');
184
+ logger.log(`${prefix} Starting development server...`);
164
185
  }
165
186
  await this.runCommands();
166
187
  // Set up graceful shutdown
167
188
  this.setupGracefulShutdown();
168
189
  if (this.options.showInfo) {
169
- logger_1.default.printLine(`${prefix} Development server started. Watching for changes...`, 'info');
170
- logger_1.default.printLine(`${prefix} Press ${chalk_1.default.cyan('Ctrl+C')} to stop`, 'info');
190
+ logger.log(`${prefix} Development server started. Watching for changes...`);
191
+ logger.log(`${prefix} Press ${chalk_1.default.cyan('Ctrl+C')} to stop`);
171
192
  }
172
193
  }
173
194
  async restart() {
@@ -176,7 +197,7 @@ class DevRunner {
176
197
  return;
177
198
  }
178
199
  if (this.options.showInfo) {
179
- logger_1.default.printLine(`${prefix} Restarting due to file changes...`, 'info');
200
+ logger.log(`${prefix} Restarting due to file changes...`);
180
201
  }
181
202
  this.restartCount++;
182
203
  // Stop current processes
@@ -190,7 +211,7 @@ class DevRunner {
190
211
  // Run commands again
191
212
  await this.runCommands();
192
213
  if (this.options.showInfo) {
193
- logger_1.default.printLine(`${prefix} Restart completed. Watching for changes...`, 'info');
214
+ logger.log(`${prefix} Restart completed. Watching for changes...`);
194
215
  }
195
216
  }
196
217
  async stop() {
@@ -199,7 +220,7 @@ class DevRunner {
199
220
  return;
200
221
  }
201
222
  if (this.options.showInfo) {
202
- logger_1.default.printLine(`${prefix} Stopping development server...`, 'info');
223
+ logger.log(`${prefix} Stopping development server...`);
203
224
  }
204
225
  this.isRunning = false;
205
226
  // Stop file watcher
@@ -213,9 +234,9 @@ class DevRunner {
213
234
  const uptime = Math.floor((Date.now() - this.startTime.getTime()) / 1000);
214
235
  const uptimeStr = this.formatUptime(uptime);
215
236
  if (this.options.showInfo) {
216
- logger_1.default.printLine(`${prefix} ${this.options.runnerName} development server stopped after ${uptimeStr}`, 'info');
237
+ logger.log(`${prefix} ${this.options.runnerName} development server stopped after ${uptimeStr}`);
217
238
  if (this.restartCount > 0) {
218
- logger_1.default.printLine(`${prefix} Total restarts: ${this.restartCount}`, 'info');
239
+ logger.log(`${prefix} Total restarts: ${this.restartCount}`);
219
240
  }
220
241
  }
221
242
  }
@@ -247,41 +268,3 @@ class DevRunner {
247
268
  }
248
269
  }
249
270
  exports.DevRunner = DevRunner;
250
- function runDev(commands) {
251
- const processes = [];
252
- commands.forEach(cmd => {
253
- const logger = new logger_process_1.LoggerProcess(cmd.name);
254
- logger.info(`Starting command: ${cmd.command}`);
255
- const child = (0, child_process_1.spawn)(cmd.command, {
256
- shell: true,
257
- stdio: 'pipe',
258
- cwd: cmd.cwd || process.cwd(),
259
- });
260
- child.stdout.on('data', (data) => {
261
- logger.log(data);
262
- });
263
- child.stderr.on('data', (data) => {
264
- logger.error(data);
265
- });
266
- child.on('close', (code) => {
267
- if (code === 0) {
268
- logger.info(`Command finished successfully.`);
269
- }
270
- else {
271
- logger.error(`Command failed with code ${code}.`);
272
- }
273
- });
274
- child.on('error', (err) => {
275
- logger.error(`Failed to start command: ${err.message}`);
276
- });
277
- processes.push(child);
278
- });
279
- function cleanup() {
280
- console.log('\nShutting down dev processes...');
281
- processes.forEach(p => p.kill());
282
- process.exit();
283
- }
284
- process.on('SIGINT', cleanup);
285
- process.on('SIGTERM', cleanup);
286
- }
287
- exports.runDev = runDev;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neex",
3
- "version": "0.6.36",
3
+ "version": "0.6.38",
4
4
  "description": "The Modern Build System for Polyrepo-in-Monorepo Architecture",
5
5
  "main": "dist/src/index.js",
6
6
  "types": "dist/src/index.d.ts",