@nextsparkjs/cli 0.1.0-beta.10 → 0.1.0-beta.100

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,435 @@
1
+ // src/utils/paths.ts
2
+ import { existsSync } from "fs";
3
+ import { resolve, join, dirname } from "path";
4
+ import { fileURLToPath } from "url";
5
+ var __filename = fileURLToPath(import.meta.url);
6
+ var __dirname = dirname(__filename);
7
+ function getCoreDir() {
8
+ const cwd = process.cwd();
9
+ const npmCorePath = resolve(cwd, "node_modules", "@nextsparkjs", "core");
10
+ if (existsSync(npmCorePath)) {
11
+ return npmCorePath;
12
+ }
13
+ const monorepoCorePath = resolve(__dirname, "..", "..", "..", "..", "core");
14
+ if (existsSync(monorepoCorePath)) {
15
+ return monorepoCorePath;
16
+ }
17
+ const cwdMonorepoCorePath = resolve(cwd, "..", "..", "packages", "core");
18
+ if (existsSync(cwdMonorepoCorePath)) {
19
+ return cwdMonorepoCorePath;
20
+ }
21
+ throw new Error(
22
+ "Could not find @nextsparkjs/core. Make sure it is installed as a dependency or you are running from within the monorepo."
23
+ );
24
+ }
25
+ function getCoreScriptPath(scriptName) {
26
+ const coreDir = getCoreDir();
27
+ return resolve(coreDir, "scripts", `${scriptName}.js`);
28
+ }
29
+ function getProjectRoot() {
30
+ return process.cwd();
31
+ }
32
+ function isMonorepoMode() {
33
+ const cwd = process.cwd();
34
+ const npmCorePath = resolve(cwd, "node_modules", "@nextsparkjs", "core");
35
+ return !existsSync(npmCorePath);
36
+ }
37
+ function getAIWorkflowDir() {
38
+ const cwd = process.cwd();
39
+ const nmPath = join(cwd, "node_modules", "@nextsparkjs", "ai-workflow");
40
+ if (existsSync(nmPath)) return nmPath;
41
+ const webNmPath = join(cwd, "web", "node_modules", "@nextsparkjs", "ai-workflow");
42
+ if (existsSync(webNmPath)) return webNmPath;
43
+ const monoPath = join(cwd, "packages", "ai-workflow");
44
+ if (existsSync(monoPath)) return monoPath;
45
+ return null;
46
+ }
47
+
48
+ // src/commands/dev.ts
49
+ import { spawn } from "child_process";
50
+ import chalk from "chalk";
51
+ import ora from "ora";
52
+ async function devCommand(options) {
53
+ const spinner = ora("Starting development environment...").start();
54
+ try {
55
+ const coreDir = getCoreDir();
56
+ const projectRoot = getProjectRoot();
57
+ const mode = isMonorepoMode() ? "monorepo" : "npm";
58
+ spinner.succeed(`Core found at: ${coreDir} (${mode} mode)`);
59
+ const processes = [];
60
+ if (options.registry) {
61
+ console.log(chalk.blue("\n[Registry] Starting registry builder with watch mode..."));
62
+ const registryProcess = spawn("node", ["scripts/build/registry.mjs", "--watch"], {
63
+ cwd: coreDir,
64
+ stdio: "inherit",
65
+ env: {
66
+ ...process.env,
67
+ NEXTSPARK_PROJECT_ROOT: projectRoot
68
+ }
69
+ });
70
+ processes.push(registryProcess);
71
+ registryProcess.on("error", (err) => {
72
+ console.error(chalk.red(`[Registry] Error: ${err.message}`));
73
+ });
74
+ }
75
+ console.log(chalk.green(`
76
+ [Dev] Starting Next.js dev server on port ${options.port}...`));
77
+ const devProcess = spawn("npx", ["next", "dev", "-p", options.port], {
78
+ cwd: projectRoot,
79
+ stdio: "inherit",
80
+ shell: true,
81
+ env: {
82
+ ...process.env,
83
+ NEXTSPARK_CORE_DIR: coreDir
84
+ }
85
+ });
86
+ processes.push(devProcess);
87
+ devProcess.on("error", (err) => {
88
+ console.error(chalk.red(`[Dev] Error: ${err.message}`));
89
+ process.exit(1);
90
+ });
91
+ const cleanup = () => {
92
+ console.log(chalk.yellow("\nShutting down..."));
93
+ processes.forEach((p) => {
94
+ if (!p.killed) {
95
+ p.kill("SIGTERM");
96
+ }
97
+ });
98
+ process.exit(0);
99
+ };
100
+ process.on("SIGINT", cleanup);
101
+ process.on("SIGTERM", cleanup);
102
+ devProcess.on("exit", (code) => {
103
+ cleanup();
104
+ process.exit(code ?? 0);
105
+ });
106
+ } catch (error) {
107
+ spinner.fail("Failed to start development environment");
108
+ if (error instanceof Error) {
109
+ console.error(chalk.red(error.message));
110
+ }
111
+ process.exit(1);
112
+ }
113
+ }
114
+
115
+ // src/commands/build.ts
116
+ import { spawn as spawn2 } from "child_process";
117
+ import { existsSync as existsSync2, readFileSync } from "fs";
118
+ import { join as join2 } from "path";
119
+ import chalk2 from "chalk";
120
+ import ora2 from "ora";
121
+ function loadProjectEnv(projectRoot) {
122
+ const envPath = join2(projectRoot, ".env");
123
+ const envVars = {};
124
+ if (existsSync2(envPath)) {
125
+ const content = readFileSync(envPath, "utf-8");
126
+ for (const line of content.split("\n")) {
127
+ const trimmed = line.trim();
128
+ if (trimmed && !trimmed.startsWith("#")) {
129
+ const [key, ...valueParts] = trimmed.split("=");
130
+ if (key && valueParts.length > 0) {
131
+ let value = valueParts.join("=");
132
+ if (value.startsWith('"') && value.endsWith('"') || value.startsWith("'") && value.endsWith("'")) {
133
+ value = value.slice(1, -1);
134
+ }
135
+ envVars[key] = value;
136
+ }
137
+ }
138
+ }
139
+ }
140
+ return envVars;
141
+ }
142
+ async function buildCommand(options) {
143
+ const spinner = ora2("Preparing production build...").start();
144
+ try {
145
+ const coreDir = getCoreDir();
146
+ const projectRoot = getProjectRoot();
147
+ spinner.succeed("Core package found");
148
+ const projectEnv = loadProjectEnv(projectRoot);
149
+ if (options.registry) {
150
+ spinner.start("Generating registries...");
151
+ await new Promise((resolve2, reject) => {
152
+ const registryProcess = spawn2("node", ["scripts/build/registry.mjs"], {
153
+ cwd: coreDir,
154
+ stdio: "pipe",
155
+ env: {
156
+ ...projectEnv,
157
+ ...process.env,
158
+ NEXTSPARK_PROJECT_ROOT: projectRoot
159
+ }
160
+ });
161
+ let stderr = "";
162
+ registryProcess.stderr?.on("data", (data) => {
163
+ stderr += data.toString();
164
+ });
165
+ registryProcess.on("close", (code) => {
166
+ if (code === 0) {
167
+ resolve2();
168
+ } else {
169
+ reject(new Error(`Registry generation failed: ${stderr}`));
170
+ }
171
+ });
172
+ registryProcess.on("error", reject);
173
+ });
174
+ spinner.succeed("Registries generated");
175
+ }
176
+ spinner.start("Building for production...");
177
+ const buildProcess = spawn2("npx", ["next", "build"], {
178
+ cwd: projectRoot,
179
+ stdio: "inherit",
180
+ shell: true,
181
+ env: {
182
+ ...projectEnv,
183
+ ...process.env,
184
+ NEXTSPARK_CORE_DIR: coreDir,
185
+ NODE_ENV: "production"
186
+ }
187
+ });
188
+ buildProcess.on("error", (err) => {
189
+ spinner.fail("Build failed");
190
+ console.error(chalk2.red(err.message));
191
+ process.exit(1);
192
+ });
193
+ buildProcess.on("close", (code) => {
194
+ if (code === 0) {
195
+ console.log(chalk2.green("\nBuild completed successfully!"));
196
+ process.exit(0);
197
+ } else {
198
+ console.error(chalk2.red(`
199
+ Build failed with exit code ${code}`));
200
+ process.exit(code ?? 1);
201
+ }
202
+ });
203
+ } catch (error) {
204
+ spinner.fail("Build preparation failed");
205
+ if (error instanceof Error) {
206
+ console.error(chalk2.red(error.message));
207
+ }
208
+ process.exit(1);
209
+ }
210
+ }
211
+
212
+ // src/commands/generate.ts
213
+ import { spawn as spawn3 } from "child_process";
214
+ import { existsSync as existsSync3, readFileSync as readFileSync2 } from "fs";
215
+ import { join as join3 } from "path";
216
+ import chalk3 from "chalk";
217
+ import ora3 from "ora";
218
+ function loadProjectEnv2(projectRoot) {
219
+ const envPath = join3(projectRoot, ".env");
220
+ const envVars = {};
221
+ if (existsSync3(envPath)) {
222
+ const content = readFileSync2(envPath, "utf-8");
223
+ for (const line of content.split("\n")) {
224
+ const trimmed = line.trim();
225
+ if (trimmed && !trimmed.startsWith("#")) {
226
+ const [key, ...valueParts] = trimmed.split("=");
227
+ if (key && valueParts.length > 0) {
228
+ let value = valueParts.join("=");
229
+ if (value.startsWith('"') && value.endsWith('"') || value.startsWith("'") && value.endsWith("'")) {
230
+ value = value.slice(1, -1);
231
+ }
232
+ envVars[key] = value;
233
+ }
234
+ }
235
+ }
236
+ }
237
+ return envVars;
238
+ }
239
+ async function generateCommand(options) {
240
+ const spinner = ora3("Preparing registry generation...").start();
241
+ try {
242
+ const coreDir = getCoreDir();
243
+ const projectRoot = getProjectRoot();
244
+ const mode = isMonorepoMode() ? "monorepo" : "npm";
245
+ spinner.succeed(`Core found at: ${coreDir} (${mode} mode)`);
246
+ const projectEnv = loadProjectEnv2(projectRoot);
247
+ const watchArg = options.watch ? ["--watch"] : [];
248
+ const action = options.watch ? "Watching" : "Generating";
249
+ console.log(chalk3.blue(`
250
+ ${action} registries...`));
251
+ const generateProcess = spawn3("node", ["scripts/build/registry.mjs", ...watchArg], {
252
+ cwd: coreDir,
253
+ stdio: "inherit",
254
+ env: {
255
+ ...projectEnv,
256
+ ...process.env,
257
+ NEXTSPARK_PROJECT_ROOT: projectRoot
258
+ }
259
+ });
260
+ generateProcess.on("error", (err) => {
261
+ console.error(chalk3.red(`Error: ${err.message}`));
262
+ process.exit(1);
263
+ });
264
+ generateProcess.on("close", (code) => {
265
+ if (code === 0) {
266
+ if (!options.watch) {
267
+ console.log(chalk3.green("\nRegistry generation completed!"));
268
+ }
269
+ process.exit(0);
270
+ } else {
271
+ console.error(chalk3.red(`
272
+ Registry generation failed with exit code ${code}`));
273
+ process.exit(code ?? 1);
274
+ }
275
+ });
276
+ if (options.watch) {
277
+ const cleanup = () => {
278
+ console.log(chalk3.yellow("\nStopping watcher..."));
279
+ if (!generateProcess.killed) {
280
+ generateProcess.kill("SIGTERM");
281
+ }
282
+ process.exit(0);
283
+ };
284
+ process.on("SIGINT", cleanup);
285
+ process.on("SIGTERM", cleanup);
286
+ }
287
+ } catch (error) {
288
+ spinner.fail("Registry generation failed");
289
+ if (error instanceof Error) {
290
+ console.error(chalk3.red(error.message));
291
+ }
292
+ process.exit(1);
293
+ }
294
+ }
295
+
296
+ // src/commands/registry.ts
297
+ import { spawn as spawn4 } from "child_process";
298
+ import { existsSync as existsSync4, readFileSync as readFileSync3 } from "fs";
299
+ import { join as join4 } from "path";
300
+ import chalk4 from "chalk";
301
+ import ora4 from "ora";
302
+ function loadProjectEnv3(projectRoot) {
303
+ const envPath = join4(projectRoot, ".env");
304
+ const envVars = {};
305
+ if (existsSync4(envPath)) {
306
+ const content = readFileSync3(envPath, "utf-8");
307
+ for (const line of content.split("\n")) {
308
+ const trimmed = line.trim();
309
+ if (trimmed && !trimmed.startsWith("#")) {
310
+ const [key, ...valueParts] = trimmed.split("=");
311
+ if (key && valueParts.length > 0) {
312
+ let value = valueParts.join("=");
313
+ if (value.startsWith('"') && value.endsWith('"') || value.startsWith("'") && value.endsWith("'")) {
314
+ value = value.slice(1, -1);
315
+ }
316
+ envVars[key] = value;
317
+ }
318
+ }
319
+ }
320
+ }
321
+ return envVars;
322
+ }
323
+ async function registryBuildCommand() {
324
+ const spinner = ora4("Building registries...").start();
325
+ try {
326
+ const coreDir = getCoreDir();
327
+ const projectRoot = getProjectRoot();
328
+ const mode = isMonorepoMode() ? "monorepo" : "npm";
329
+ const projectEnv = loadProjectEnv3(projectRoot);
330
+ spinner.text = `Building registries (${mode} mode)...`;
331
+ const buildProcess = spawn4("node", ["scripts/build/registry.mjs"], {
332
+ cwd: coreDir,
333
+ stdio: "pipe",
334
+ env: {
335
+ ...projectEnv,
336
+ ...process.env,
337
+ NEXTSPARK_PROJECT_ROOT: projectRoot
338
+ }
339
+ });
340
+ let stdout = "";
341
+ let stderr = "";
342
+ buildProcess.stdout?.on("data", (data) => {
343
+ stdout += data.toString();
344
+ });
345
+ buildProcess.stderr?.on("data", (data) => {
346
+ stderr += data.toString();
347
+ });
348
+ buildProcess.on("close", (code) => {
349
+ if (code === 0) {
350
+ spinner.succeed("Registries built successfully");
351
+ if (stdout.trim()) {
352
+ console.log(chalk4.gray(stdout.trim()));
353
+ }
354
+ process.exit(0);
355
+ } else {
356
+ spinner.fail("Registry build failed");
357
+ if (stderr.trim()) {
358
+ console.error(chalk4.red(stderr.trim()));
359
+ }
360
+ process.exit(code ?? 1);
361
+ }
362
+ });
363
+ buildProcess.on("error", (err) => {
364
+ spinner.fail("Registry build failed");
365
+ console.error(chalk4.red(err.message));
366
+ process.exit(1);
367
+ });
368
+ } catch (error) {
369
+ spinner.fail("Registry build failed");
370
+ if (error instanceof Error) {
371
+ console.error(chalk4.red(error.message));
372
+ }
373
+ process.exit(1);
374
+ }
375
+ }
376
+ async function registryWatchCommand() {
377
+ const spinner = ora4("Starting registry watcher...").start();
378
+ try {
379
+ const coreDir = getCoreDir();
380
+ const projectRoot = getProjectRoot();
381
+ const mode = isMonorepoMode() ? "monorepo" : "npm";
382
+ spinner.succeed(`Registry watcher started (${mode} mode)`);
383
+ console.log(chalk4.blue("\nWatching for changes... Press Ctrl+C to stop.\n"));
384
+ const projectEnv = loadProjectEnv3(projectRoot);
385
+ const watchProcess = spawn4("node", ["scripts/build/registry.mjs", "--watch"], {
386
+ cwd: coreDir,
387
+ stdio: "inherit",
388
+ env: {
389
+ ...projectEnv,
390
+ ...process.env,
391
+ NEXTSPARK_PROJECT_ROOT: projectRoot
392
+ }
393
+ });
394
+ watchProcess.on("error", (err) => {
395
+ console.error(chalk4.red(`Watcher error: ${err.message}`));
396
+ process.exit(1);
397
+ });
398
+ const cleanup = () => {
399
+ console.log(chalk4.yellow("\nStopping registry watcher..."));
400
+ if (!watchProcess.killed) {
401
+ watchProcess.kill("SIGTERM");
402
+ }
403
+ process.exit(0);
404
+ };
405
+ process.on("SIGINT", cleanup);
406
+ process.on("SIGTERM", cleanup);
407
+ watchProcess.on("close", (code) => {
408
+ if (code !== 0) {
409
+ console.error(chalk4.red(`
410
+ Watcher exited with code ${code}`));
411
+ }
412
+ process.exit(code ?? 0);
413
+ });
414
+ } catch (error) {
415
+ spinner.fail("Failed to start registry watcher");
416
+ if (error instanceof Error) {
417
+ console.error(chalk4.red(error.message));
418
+ }
419
+ process.exit(1);
420
+ }
421
+ }
422
+
423
+ export {
424
+ getCoreDir,
425
+ getCoreScriptPath,
426
+ getProjectRoot,
427
+ isMonorepoMode,
428
+ getAIWorkflowDir,
429
+ devCommand,
430
+ buildCommand,
431
+ generateCommand,
432
+ registryBuildCommand,
433
+ registryWatchCommand
434
+ };
435
+ //# sourceMappingURL=chunk-QXD4PBX6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/paths.ts","../src/commands/dev.ts","../src/commands/build.ts","../src/commands/generate.ts","../src/commands/registry.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { resolve, join, dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * Detects the core package location\n * Priority:\n * 1. node_modules/@nextsparkjs/core (npm mode)\n * 2. ../../packages/core relative to cli (monorepo mode)\n */\nexport function getCoreDir(): string {\n const cwd = process.cwd();\n\n // Option 1: npm mode - look in node_modules\n const npmCorePath = resolve(cwd, 'node_modules', '@nextsparkjs', 'core');\n if (existsSync(npmCorePath)) {\n return npmCorePath;\n }\n\n // Option 2: monorepo mode - look relative to cli package\n // From packages/cli/dist/utils, go up to packages/core\n const monorepoCorePath = resolve(__dirname, '..', '..', '..', '..', 'core');\n if (existsSync(monorepoCorePath)) {\n return monorepoCorePath;\n }\n\n // Option 3: monorepo mode - look relative to cwd\n // If running from apps/dev, look in ../../packages/core\n const cwdMonorepoCorePath = resolve(cwd, '..', '..', 'packages', 'core');\n if (existsSync(cwdMonorepoCorePath)) {\n return cwdMonorepoCorePath;\n }\n\n throw new Error(\n 'Could not find @nextsparkjs/core. Make sure it is installed as a dependency ' +\n 'or you are running from within the monorepo.'\n );\n}\n\n/**\n * Gets the path to a core script\n */\nexport function getCoreScriptPath(scriptName: string): string {\n const coreDir = getCoreDir();\n return resolve(coreDir, 'scripts', `${scriptName}.js`);\n}\n\n/**\n * Gets the current working directory (where the CLI is being run from)\n */\nexport function getProjectRoot(): string {\n return process.cwd();\n}\n\n/**\n * Checks if we are running in monorepo mode\n */\nexport function isMonorepoMode(): boolean {\n const cwd = process.cwd();\n const npmCorePath = resolve(cwd, 'node_modules', '@nextsparkjs', 'core');\n return !existsSync(npmCorePath);\n}\n\n/**\n * Resolve the ai-workflow package path.\n * Checks node_modules first, then monorepo workspace.\n */\nexport function getAIWorkflowDir(): string | null {\n const cwd = process.cwd();\n\n // Check node_modules (consumer project — flat or workspace root)\n const nmPath = join(cwd, 'node_modules', '@nextsparkjs', 'ai-workflow');\n if (existsSync(nmPath)) return nmPath;\n\n // Check web/node_modules (monorepo with hoisted deps in web/)\n const webNmPath = join(cwd, 'web', 'node_modules', '@nextsparkjs', 'ai-workflow');\n if (existsSync(webNmPath)) return webNmPath;\n\n // Check monorepo workspace (packages/ai-workflow relative to project root)\n const monoPath = join(cwd, 'packages', 'ai-workflow');\n if (existsSync(monoPath)) return monoPath;\n\n return null;\n}\n","import { spawn, ChildProcess } from 'node:child_process';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { getCoreDir, getProjectRoot, isMonorepoMode } from '../utils/paths.js';\n\ninterface DevOptions {\n port: string;\n registry: boolean;\n}\n\nexport async function devCommand(options: DevOptions): Promise<void> {\n const spinner = ora('Starting development environment...').start();\n\n try {\n const coreDir = getCoreDir();\n const projectRoot = getProjectRoot();\n const mode = isMonorepoMode() ? 'monorepo' : 'npm';\n\n spinner.succeed(`Core found at: ${coreDir} (${mode} mode)`);\n\n const processes: ChildProcess[] = [];\n\n // Start registry watcher if enabled\n if (options.registry) {\n console.log(chalk.blue('\\n[Registry] Starting registry builder with watch mode...'));\n\n // Use the unified registry builder with watch mode\n // It loads .env internally via dotenv, so NEXT_PUBLIC_ACTIVE_THEME is available\n const registryProcess = spawn('node', ['scripts/build/registry.mjs', '--watch'], {\n cwd: coreDir,\n stdio: 'inherit',\n env: {\n ...process.env,\n NEXTSPARK_PROJECT_ROOT: projectRoot,\n },\n });\n\n processes.push(registryProcess);\n\n registryProcess.on('error', (err) => {\n console.error(chalk.red(`[Registry] Error: ${err.message}`));\n });\n }\n\n // Start Next.js dev server\n console.log(chalk.green(`\\n[Dev] Starting Next.js dev server on port ${options.port}...`));\n\n const devProcess = spawn('npx', ['next', 'dev', '-p', options.port], {\n cwd: projectRoot,\n stdio: 'inherit',\n shell: true,\n env: {\n ...process.env,\n NEXTSPARK_CORE_DIR: coreDir,\n },\n });\n\n processes.push(devProcess);\n\n devProcess.on('error', (err) => {\n console.error(chalk.red(`[Dev] Error: ${err.message}`));\n process.exit(1);\n });\n\n // Handle process termination\n const cleanup = () => {\n console.log(chalk.yellow('\\nShutting down...'));\n processes.forEach((p) => {\n if (!p.killed) {\n p.kill('SIGTERM');\n }\n });\n process.exit(0);\n };\n\n process.on('SIGINT', cleanup);\n process.on('SIGTERM', cleanup);\n\n // Wait for dev process to exit\n devProcess.on('exit', (code) => {\n cleanup();\n process.exit(code ?? 0);\n });\n } catch (error) {\n spinner.fail('Failed to start development environment');\n if (error instanceof Error) {\n console.error(chalk.red(error.message));\n }\n process.exit(1);\n }\n}\n","import { spawn } from 'node:child_process';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { getCoreDir, getProjectRoot } from '../utils/paths.js';\n\n/**\n * Load environment variables from project root .env file\n */\nfunction loadProjectEnv(projectRoot: string): Record<string, string> {\n const envPath = join(projectRoot, '.env');\n const envVars: Record<string, string> = {};\n\n if (existsSync(envPath)) {\n const content = readFileSync(envPath, 'utf-8');\n for (const line of content.split('\\n')) {\n const trimmed = line.trim();\n if (trimmed && !trimmed.startsWith('#')) {\n const [key, ...valueParts] = trimmed.split('=');\n if (key && valueParts.length > 0) {\n let value = valueParts.join('=');\n // Remove surrounding quotes\n if ((value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))) {\n value = value.slice(1, -1);\n }\n envVars[key] = value;\n }\n }\n }\n }\n\n return envVars;\n}\n\ninterface BuildOptions {\n registry: boolean;\n}\n\nexport async function buildCommand(options: BuildOptions): Promise<void> {\n const spinner = ora('Preparing production build...').start();\n\n try {\n const coreDir = getCoreDir();\n const projectRoot = getProjectRoot();\n\n spinner.succeed('Core package found');\n\n // Load project .env file\n const projectEnv = loadProjectEnv(projectRoot);\n\n // Step 1: Generate registries if enabled\n if (options.registry) {\n spinner.start('Generating registries...');\n\n await new Promise<void>((resolve, reject) => {\n const registryProcess = spawn('node', ['scripts/build/registry.mjs'], {\n cwd: coreDir,\n stdio: 'pipe',\n env: {\n ...projectEnv,\n ...process.env,\n NEXTSPARK_PROJECT_ROOT: projectRoot,\n },\n });\n\n let stderr = '';\n\n registryProcess.stderr?.on('data', (data) => {\n stderr += data.toString();\n });\n\n registryProcess.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`Registry generation failed: ${stderr}`));\n }\n });\n\n registryProcess.on('error', reject);\n });\n\n spinner.succeed('Registries generated');\n }\n\n // Step 2: Run Next.js build\n spinner.start('Building for production...');\n\n const buildProcess = spawn('npx', ['next', 'build'], {\n cwd: projectRoot,\n stdio: 'inherit',\n shell: true,\n env: {\n ...projectEnv,\n ...process.env,\n NEXTSPARK_CORE_DIR: coreDir,\n NODE_ENV: 'production',\n },\n });\n\n buildProcess.on('error', (err) => {\n spinner.fail('Build failed');\n console.error(chalk.red(err.message));\n process.exit(1);\n });\n\n buildProcess.on('close', (code) => {\n if (code === 0) {\n console.log(chalk.green('\\nBuild completed successfully!'));\n process.exit(0);\n } else {\n console.error(chalk.red(`\\nBuild failed with exit code ${code}`));\n process.exit(code ?? 1);\n }\n });\n } catch (error) {\n spinner.fail('Build preparation failed');\n if (error instanceof Error) {\n console.error(chalk.red(error.message));\n }\n process.exit(1);\n }\n}\n","import { spawn } from 'node:child_process';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { getCoreDir, getProjectRoot, isMonorepoMode } from '../utils/paths.js';\n\n/**\n * Load environment variables from project root .env file\n */\nfunction loadProjectEnv(projectRoot: string): Record<string, string> {\n const envPath = join(projectRoot, '.env');\n const envVars: Record<string, string> = {};\n\n if (existsSync(envPath)) {\n const content = readFileSync(envPath, 'utf-8');\n for (const line of content.split('\\n')) {\n const trimmed = line.trim();\n if (trimmed && !trimmed.startsWith('#')) {\n const [key, ...valueParts] = trimmed.split('=');\n if (key && valueParts.length > 0) {\n let value = valueParts.join('=');\n // Remove surrounding quotes\n if ((value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))) {\n value = value.slice(1, -1);\n }\n envVars[key] = value;\n }\n }\n }\n }\n\n return envVars;\n}\n\ninterface GenerateOptions {\n watch?: boolean;\n}\n\nexport async function generateCommand(options: GenerateOptions): Promise<void> {\n const spinner = ora('Preparing registry generation...').start();\n\n try {\n const coreDir = getCoreDir();\n const projectRoot = getProjectRoot();\n const mode = isMonorepoMode() ? 'monorepo' : 'npm';\n\n spinner.succeed(`Core found at: ${coreDir} (${mode} mode)`);\n\n // Load project .env file\n const projectEnv = loadProjectEnv(projectRoot);\n\n const watchArg = options.watch ? ['--watch'] : [];\n const action = options.watch ? 'Watching' : 'Generating';\n\n console.log(chalk.blue(`\\n${action} registries...`));\n\n const generateProcess = spawn('node', ['scripts/build/registry.mjs', ...watchArg], {\n cwd: coreDir,\n stdio: 'inherit',\n env: {\n ...projectEnv,\n ...process.env,\n NEXTSPARK_PROJECT_ROOT: projectRoot,\n },\n });\n\n generateProcess.on('error', (err) => {\n console.error(chalk.red(`Error: ${err.message}`));\n process.exit(1);\n });\n\n generateProcess.on('close', (code) => {\n if (code === 0) {\n if (!options.watch) {\n console.log(chalk.green('\\nRegistry generation completed!'));\n }\n process.exit(0);\n } else {\n console.error(chalk.red(`\\nRegistry generation failed with exit code ${code}`));\n process.exit(code ?? 1);\n }\n });\n\n // Handle termination for watch mode\n if (options.watch) {\n const cleanup = () => {\n console.log(chalk.yellow('\\nStopping watcher...'));\n if (!generateProcess.killed) {\n generateProcess.kill('SIGTERM');\n }\n process.exit(0);\n };\n\n process.on('SIGINT', cleanup);\n process.on('SIGTERM', cleanup);\n }\n } catch (error) {\n spinner.fail('Registry generation failed');\n if (error instanceof Error) {\n console.error(chalk.red(error.message));\n }\n process.exit(1);\n }\n}\n","import { spawn } from 'node:child_process';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { getCoreDir, getProjectRoot, isMonorepoMode } from '../utils/paths.js';\n\n/**\n * Load environment variables from project root .env file\n */\nfunction loadProjectEnv(projectRoot: string): Record<string, string> {\n const envPath = join(projectRoot, '.env');\n const envVars: Record<string, string> = {};\n\n if (existsSync(envPath)) {\n const content = readFileSync(envPath, 'utf-8');\n for (const line of content.split('\\n')) {\n const trimmed = line.trim();\n if (trimmed && !trimmed.startsWith('#')) {\n const [key, ...valueParts] = trimmed.split('=');\n if (key && valueParts.length > 0) {\n let value = valueParts.join('=');\n // Remove surrounding quotes\n if ((value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))) {\n value = value.slice(1, -1);\n }\n envVars[key] = value;\n }\n }\n }\n }\n\n return envVars;\n}\n\n/**\n * Build all registries (one-time generation)\n */\nexport async function registryBuildCommand(): Promise<void> {\n const spinner = ora('Building registries...').start();\n\n try {\n const coreDir = getCoreDir();\n const projectRoot = getProjectRoot();\n const mode = isMonorepoMode() ? 'monorepo' : 'npm';\n\n // Load project .env file\n const projectEnv = loadProjectEnv(projectRoot);\n\n spinner.text = `Building registries (${mode} mode)...`;\n\n const buildProcess = spawn('node', ['scripts/build/registry.mjs'], {\n cwd: coreDir,\n stdio: 'pipe',\n env: {\n ...projectEnv,\n ...process.env,\n NEXTSPARK_PROJECT_ROOT: projectRoot,\n },\n });\n\n let stdout = '';\n let stderr = '';\n\n buildProcess.stdout?.on('data', (data) => {\n stdout += data.toString();\n });\n\n buildProcess.stderr?.on('data', (data) => {\n stderr += data.toString();\n });\n\n buildProcess.on('close', (code) => {\n if (code === 0) {\n spinner.succeed('Registries built successfully');\n if (stdout.trim()) {\n console.log(chalk.gray(stdout.trim()));\n }\n process.exit(0);\n } else {\n spinner.fail('Registry build failed');\n if (stderr.trim()) {\n console.error(chalk.red(stderr.trim()));\n }\n process.exit(code ?? 1);\n }\n });\n\n buildProcess.on('error', (err) => {\n spinner.fail('Registry build failed');\n console.error(chalk.red(err.message));\n process.exit(1);\n });\n } catch (error) {\n spinner.fail('Registry build failed');\n if (error instanceof Error) {\n console.error(chalk.red(error.message));\n }\n process.exit(1);\n }\n}\n\n/**\n * Watch registries for changes and rebuild automatically\n */\nexport async function registryWatchCommand(): Promise<void> {\n const spinner = ora('Starting registry watcher...').start();\n\n try {\n const coreDir = getCoreDir();\n const projectRoot = getProjectRoot();\n const mode = isMonorepoMode() ? 'monorepo' : 'npm';\n\n spinner.succeed(`Registry watcher started (${mode} mode)`);\n console.log(chalk.blue('\\nWatching for changes... Press Ctrl+C to stop.\\n'));\n\n // Load project .env file\n const projectEnv = loadProjectEnv(projectRoot);\n\n const watchProcess = spawn('node', ['scripts/build/registry.mjs', '--watch'], {\n cwd: coreDir,\n stdio: 'inherit',\n env: {\n ...projectEnv,\n ...process.env,\n NEXTSPARK_PROJECT_ROOT: projectRoot,\n },\n });\n\n watchProcess.on('error', (err) => {\n console.error(chalk.red(`Watcher error: ${err.message}`));\n process.exit(1);\n });\n\n // Handle termination\n const cleanup = () => {\n console.log(chalk.yellow('\\nStopping registry watcher...'));\n if (!watchProcess.killed) {\n watchProcess.kill('SIGTERM');\n }\n process.exit(0);\n };\n\n process.on('SIGINT', cleanup);\n process.on('SIGTERM', cleanup);\n\n watchProcess.on('close', (code) => {\n if (code !== 0) {\n console.error(chalk.red(`\\nWatcher exited with code ${code}`));\n }\n process.exit(code ?? 0);\n });\n } catch (error) {\n spinner.fail('Failed to start registry watcher');\n if (error instanceof Error) {\n console.error(chalk.red(error.message));\n }\n process.exit(1);\n }\n}\n"],"mappings":"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","names":["spawn","existsSync","join","chalk","ora","join","existsSync","ora","resolve","spawn","chalk","spawn","existsSync","readFileSync","join","chalk","ora","loadProjectEnv","join","existsSync","readFileSync","ora","chalk","spawn","spawn","existsSync","readFileSync","join","chalk","ora","loadProjectEnv","join","existsSync","readFileSync","ora","spawn","chalk"]}