zephyr-cli 0.0.3 → 0.1.3-next.6

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 (55) hide show
  1. package/.eslintignore +3 -0
  2. package/.eslintrc.json +22 -0
  3. package/LICENSE +40 -21
  4. package/README.md +90 -17
  5. package/dist/cli.d.ts +25 -0
  6. package/dist/cli.js +141 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/deploy.d.ts +12 -0
  9. package/dist/commands/deploy.js +60 -0
  10. package/dist/commands/deploy.js.map +1 -0
  11. package/dist/commands/run.d.ts +9 -0
  12. package/dist/commands/run.js +161 -0
  13. package/dist/commands/run.js.map +1 -0
  14. package/dist/index.js +48 -60
  15. package/dist/index.js.map +1 -0
  16. package/dist/lib/build-stats.d.ts +7 -0
  17. package/dist/lib/build-stats.js +12 -0
  18. package/dist/lib/build-stats.js.map +1 -0
  19. package/dist/lib/command-detector.d.ts +38 -0
  20. package/dist/lib/command-detector.js +453 -0
  21. package/dist/lib/command-detector.js.map +1 -0
  22. package/dist/lib/config-readers.d.ts +37 -0
  23. package/dist/lib/config-readers.js +239 -0
  24. package/dist/lib/config-readers.js.map +1 -0
  25. package/dist/lib/extract-assets.d.ts +6 -0
  26. package/dist/lib/extract-assets.js +95 -0
  27. package/dist/lib/extract-assets.js.map +1 -0
  28. package/dist/lib/shell-parser.d.ts +40 -0
  29. package/dist/lib/shell-parser.js +190 -0
  30. package/dist/lib/shell-parser.js.map +1 -0
  31. package/dist/lib/spawn-helper.d.ts +14 -0
  32. package/dist/lib/spawn-helper.js +36 -0
  33. package/dist/lib/spawn-helper.js.map +1 -0
  34. package/dist/lib/upload.d.ts +14 -0
  35. package/dist/lib/upload.js +32 -0
  36. package/dist/lib/upload.js.map +1 -0
  37. package/dist/package.json +48 -0
  38. package/dist/tsconfig.tsbuildinfo +1 -0
  39. package/jest.config.ts +10 -0
  40. package/package.json +38 -21
  41. package/project.json +34 -0
  42. package/src/cli.ts +150 -0
  43. package/src/commands/deploy.ts +74 -0
  44. package/src/commands/run.ts +196 -0
  45. package/src/index.ts +58 -0
  46. package/src/lib/build-stats.ts +13 -0
  47. package/src/lib/command-detector.ts +600 -0
  48. package/src/lib/config-readers.ts +269 -0
  49. package/src/lib/extract-assets.ts +111 -0
  50. package/src/lib/shell-parser.ts +229 -0
  51. package/src/lib/spawn-helper.ts +49 -0
  52. package/src/lib/upload.ts +39 -0
  53. package/tsconfig.json +22 -0
  54. package/tsconfig.lib.json +10 -0
  55. package/tsconfig.spec.json +14 -0
package/dist/index.js CHANGED
@@ -1,68 +1,56 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
- if (k2 === undefined) k2 = k;
5
- var desc = Object.getOwnPropertyDescriptor(m, k);
6
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
- desc = { enumerable: true, get: function() { return m[k]; } };
8
- }
9
- Object.defineProperty(o, k2, desc);
10
- }) : (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- o[k2] = m[k];
13
- }));
14
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
- Object.defineProperty(o, "default", { enumerable: true, value: v });
16
- }) : function(o, v) {
17
- o["default"] = v;
18
- });
19
- var __importStar = (this && this.__importStar) || function (mod) {
20
- if (mod && mod.__esModule) return mod;
21
- var result = {};
22
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
23
- __setModuleDefault(result, mod);
24
- return result;
25
- };
26
- var __importDefault = (this && this.__importDefault) || function (mod) {
27
- return (mod && mod.__esModule) ? mod : { "default": mod };
28
- };
29
3
  Object.defineProperty(exports, "__esModule", { value: true });
30
- const child_process_1 = require("child_process");
31
- const fs_1 = require("fs");
32
- const path_1 = require("path");
33
- const os = __importStar(require("os"));
34
- const chalk_1 = __importDefault(require("chalk"));
35
- function main() {
36
- const args = process.argv.slice(2);
37
- if (args.length >= 2 && args[0] === 'clean' && args[1] === 'cache') {
38
- cleanCache();
39
- }
40
- else {
41
- printUsage();
42
- }
43
- }
44
- function cleanCache() {
45
- const homeDir = os.homedir();
46
- const cacheDir = (0, path_1.join)(homeDir, '.zephyr');
47
- console.log(chalk_1.default.blue('🧹 Cleaning Zephyr cache...'));
48
- if (!(0, fs_1.existsSync)(cacheDir)) {
49
- console.log(chalk_1.default.yellow("Cache directory doesn't exist. Nothing to clean."));
50
- return;
51
- }
4
+ const node_process_1 = require("node:process");
5
+ const zephyr_agent_1 = require("zephyr-agent");
6
+ const cli_1 = require("./cli");
7
+ const deploy_1 = require("./commands/deploy");
8
+ const run_1 = require("./commands/run");
9
+ async function main() {
52
10
  try {
53
- const command = process.platform === 'win32'
54
- ? `rd /s /q "${cacheDir}"`
55
- : `rm -rf "${cacheDir}"`;
56
- (0, child_process_1.execSync)(command);
57
- console.log(chalk_1.default.green('✨ Cache cleaned successfully!'));
11
+ // Parse command line arguments
12
+ const args = process.argv.slice(2);
13
+ const options = (0, cli_1.parseArgs)(args);
14
+ // Get current working directory
15
+ const workingDir = (0, node_process_1.cwd)();
16
+ // Dispatch to the appropriate command
17
+ if (options.command === 'deploy') {
18
+ if (!options.directory) {
19
+ throw new zephyr_agent_1.ZephyrError(zephyr_agent_1.ZeErrors.ERR_UNKNOWN, {
20
+ message: 'Directory is required for deploy command',
21
+ });
22
+ }
23
+ await (0, deploy_1.deployCommand)({
24
+ directory: options.directory,
25
+ target: options.target,
26
+ verbose: options.verbose,
27
+ ssr: options.ssr,
28
+ cwd: workingDir,
29
+ });
30
+ }
31
+ else if (options.command === 'run') {
32
+ if (!options.commandLine) {
33
+ throw new zephyr_agent_1.ZephyrError(zephyr_agent_1.ZeErrors.ERR_UNKNOWN, {
34
+ message: 'Command line is required for run command',
35
+ });
36
+ }
37
+ await (0, run_1.runCommand)({
38
+ commandLine: options.commandLine,
39
+ target: options.target,
40
+ verbose: options.verbose,
41
+ ssr: options.ssr,
42
+ cwd: workingDir,
43
+ });
44
+ }
58
45
  }
59
46
  catch (error) {
60
- console.error(chalk_1.default.red(`Error cleaning cache: ${error instanceof Error ? error.message : String(error)}`));
47
+ console.error('[ze-cli] Error:', zephyr_agent_1.ZephyrError.format(error));
48
+ process.exit(1);
61
49
  }
62
50
  }
63
- function printUsage() {
64
- console.log(chalk_1.default.cyan('Zephyr CLI'));
65
- console.log(chalk_1.default.yellow('Usage:'));
66
- console.log(' zephyr clean cache - Clean the Zephyr cache directory');
67
- }
68
- main();
51
+ // Run the CLI
52
+ main().catch((error) => {
53
+ console.error('[ze-cli] Fatal error:', zephyr_agent_1.ZephyrError.format(error));
54
+ process.exit(1);
55
+ });
56
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,+CAAmC;AACnC,+CAAqD;AACrD,+BAAkC;AAClC,8CAAkD;AAClD,wCAA4C;AAE5C,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,+BAA+B;QAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,IAAA,eAAS,EAAC,IAAI,CAAC,CAAC;QAEhC,gCAAgC;QAChC,MAAM,UAAU,GAAG,IAAA,kBAAG,GAAE,CAAC;QAEzB,sCAAsC;QACtC,IAAI,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;gBACvB,MAAM,IAAI,0BAAW,CAAC,uBAAQ,CAAC,WAAW,EAAE;oBAC1C,OAAO,EAAE,0CAA0C;iBACpD,CAAC,CAAC;YACL,CAAC;YAED,MAAM,IAAA,sBAAa,EAAC;gBAClB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,GAAG,EAAE,UAAU;aAChB,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YACrC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBACzB,MAAM,IAAI,0BAAW,CAAC,uBAAQ,CAAC,WAAW,EAAE;oBAC1C,OAAO,EAAE,0CAA0C;iBACpD,CAAC,CAAC;YACL,CAAC;YAED,MAAM,IAAA,gBAAU,EAAC;gBACf,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,GAAG,EAAE,UAAU;aAChB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,0BAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,cAAc;AACd,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,0BAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ZephyrBuildStats } from 'zephyr-edge-contract';
2
+ import type { ZephyrEngine } from 'zephyr-agent';
3
+ /**
4
+ * Generate build stats from ZephyrEngine. This is a simple wrapper around zeBuildDashData
5
+ * for consistency.
6
+ */
7
+ export declare function getBuildStats(zephyr_engine: ZephyrEngine): Promise<ZephyrBuildStats>;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getBuildStats = getBuildStats;
4
+ const zephyr_agent_1 = require("zephyr-agent");
5
+ /**
6
+ * Generate build stats from ZephyrEngine. This is a simple wrapper around zeBuildDashData
7
+ * for consistency.
8
+ */
9
+ async function getBuildStats(zephyr_engine) {
10
+ return await (0, zephyr_agent_1.zeBuildDashData)(zephyr_engine);
11
+ }
12
+ //# sourceMappingURL=build-stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-stats.js","sourceRoot":"","sources":["../../src/lib/build-stats.ts"],"names":[],"mappings":";;AAQA,sCAIC;AAVD,+CAA+C;AAE/C;;;GAGG;AACI,KAAK,UAAU,aAAa,CACjC,aAA2B;IAE3B,OAAO,MAAM,IAAA,8BAAe,EAAC,aAAa,CAAC,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,38 @@
1
+ import type { ParsedCommand } from './shell-parser';
2
+ export interface DetectedCommand {
3
+ /** The build tool detected (e.g., 'tsc', 'webpack', 'npm') */
4
+ tool: string;
5
+ /** The configuration file path, if detected */
6
+ configFile: string | null;
7
+ /** Whether the config file is JavaScript (dynamic config) */
8
+ isDynamicConfig: boolean;
9
+ /** The inferred output directory, if detectable */
10
+ outputDir: string | null;
11
+ /** Warnings to display to the user */
12
+ warnings: string[];
13
+ /**
14
+ * Sub-commands detected when a command expands to multiple commands (e.g., npm script
15
+ * with &&)
16
+ */
17
+ subCommands?: DetectedCommand[];
18
+ }
19
+ /**
20
+ * Find the common ancestor directory of multiple paths, bounded by the project root.
21
+ *
22
+ * @param paths - Array of absolute paths
23
+ * @param projectRoot - The project root directory (boundary)
24
+ * @returns The common ancestor path, or null if paths are empty or no common ancestor
25
+ * within project root
26
+ */
27
+ export declare function findCommonAncestor(paths: string[], projectRoot: string): string | null;
28
+ /**
29
+ * Detect multiple commands from a command line that may contain shell operators (;, &&).
30
+ * Returns output directories from all detected commands.
31
+ */
32
+ export declare function detectMultipleCommands(commandLine: string, cwd: string): Promise<{
33
+ commands: DetectedCommand[];
34
+ outputDirs: string[];
35
+ commonOutputDir: string | null;
36
+ }>;
37
+ /** Detect the build tool and its configuration from a parsed command */
38
+ export declare function detectCommand(parsed: ParsedCommand, cwd: string, depth?: number): Promise<DetectedCommand>;
@@ -0,0 +1,453 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.findCommonAncestor = findCommonAncestor;
4
+ exports.detectMultipleCommands = detectMultipleCommands;
5
+ exports.detectCommand = detectCommand;
6
+ const node_fs_1 = require("node:fs");
7
+ const node_path_1 = require("node:path");
8
+ const config_readers_1 = require("./config-readers");
9
+ const shell_parser_1 = require("./shell-parser");
10
+ /**
11
+ * Find the value of a command-line argument, supporting both formats:
12
+ *
13
+ * - `--flag value` (space-separated)
14
+ * - `--flag=value` (equals-separated)
15
+ * - `-f value` (short flag with space)
16
+ * - `-f=value` (short flag with equals)
17
+ */
18
+ function findArgValue(args, ...flags) {
19
+ for (const flag of flags) {
20
+ // Look for space-separated format: --flag value
21
+ const index = args.indexOf(flag);
22
+ if (index !== -1 && index + 1 < args.length) {
23
+ return args[index + 1];
24
+ }
25
+ // Look for equals format: --flag=value
26
+ const prefix = `${flag}=`;
27
+ for (const arg of args) {
28
+ if (arg.startsWith(prefix)) {
29
+ return arg.substring(prefix.length);
30
+ }
31
+ }
32
+ }
33
+ return null;
34
+ }
35
+ /**
36
+ * Find the common ancestor directory of multiple paths, bounded by the project root.
37
+ *
38
+ * @param paths - Array of absolute paths
39
+ * @param projectRoot - The project root directory (boundary)
40
+ * @returns The common ancestor path, or null if paths are empty or no common ancestor
41
+ * within project root
42
+ */
43
+ function findCommonAncestor(paths, projectRoot) {
44
+ if (paths.length === 0) {
45
+ return null;
46
+ }
47
+ if (paths.length === 1) {
48
+ return paths[0];
49
+ }
50
+ // Normalize all paths to absolute
51
+ const normalizedPaths = paths.map((p) => (0, node_path_1.resolve)(p));
52
+ const normalizedRoot = (0, node_path_1.resolve)(projectRoot);
53
+ // Split each path into segments
54
+ const pathSegments = normalizedPaths.map((p) => p.split(node_path_1.sep));
55
+ const rootSegments = normalizedRoot.split(node_path_1.sep);
56
+ // Find the common prefix across all paths
57
+ const commonSegments = [];
58
+ const minLength = Math.min(...pathSegments.map((p) => p.length));
59
+ for (let i = 0; i < minLength; i++) {
60
+ const segment = pathSegments[0][i];
61
+ // Check if all paths have the same segment at this position
62
+ if (pathSegments.every((p) => p[i] === segment)) {
63
+ commonSegments.push(segment);
64
+ }
65
+ else {
66
+ break;
67
+ }
68
+ }
69
+ // Ensure the common ancestor is within or equal to the project root
70
+ const commonPath = commonSegments.join(node_path_1.sep) || node_path_1.sep;
71
+ // Check if common path is within project root
72
+ const relativeToRoot = (0, node_path_1.relative)(normalizedRoot, commonPath);
73
+ // If relative path starts with '..' or is absolute, it's outside project root
74
+ if (relativeToRoot.startsWith('..') || (0, node_path_1.resolve)(commonPath) !== commonPath) {
75
+ return normalizedRoot;
76
+ }
77
+ // If common path is shallower than project root, use project root
78
+ if (commonSegments.length < rootSegments.length) {
79
+ return normalizedRoot;
80
+ }
81
+ return commonPath;
82
+ }
83
+ /**
84
+ * Detect multiple commands from a command line that may contain shell operators (;, &&).
85
+ * Returns output directories from all detected commands.
86
+ */
87
+ async function detectMultipleCommands(commandLine, cwd) {
88
+ const individualCommands = (0, shell_parser_1.splitCommands)(commandLine);
89
+ const detectedCommands = [];
90
+ const outputDirs = [];
91
+ for (const cmd of individualCommands) {
92
+ try {
93
+ const parsed = (0, shell_parser_1.parseShellCommand)(cmd);
94
+ const detected = await detectCommand(parsed, cwd);
95
+ detectedCommands.push(detected);
96
+ if (detected.outputDir) {
97
+ const absoluteOutputDir = (0, node_path_1.resolve)(cwd, detected.outputDir);
98
+ outputDirs.push(absoluteOutputDir);
99
+ }
100
+ }
101
+ catch (_a) {
102
+ // Skip commands that fail to parse
103
+ console.error(`[ze-cli] Warning: Failed to parse command: ${cmd}`);
104
+ }
105
+ }
106
+ // Find common ancestor of all output directories
107
+ const commonOutputDir = outputDirs.length > 0 ? findCommonAncestor(outputDirs, cwd) : null;
108
+ return {
109
+ commands: detectedCommands,
110
+ outputDirs,
111
+ commonOutputDir,
112
+ };
113
+ }
114
+ /** Detect the build tool and its configuration from a parsed command */
115
+ async function detectCommand(parsed, cwd, depth = 0) {
116
+ const { command, args } = parsed;
117
+ const warnings = [];
118
+ // Prevent infinite recursion
119
+ if (depth > 3) {
120
+ warnings.push('Max recursion depth reached while parsing scripts');
121
+ return {
122
+ tool: command,
123
+ configFile: null,
124
+ isDynamicConfig: false,
125
+ outputDir: null,
126
+ warnings,
127
+ };
128
+ }
129
+ // Detect npm/yarn/pnpm commands
130
+ if (['npm', 'yarn', 'pnpm'].includes(command)) {
131
+ return await detectPackageManagerCommand(command, args, cwd, warnings, depth);
132
+ }
133
+ // Detect tsc (TypeScript compiler)
134
+ if (command === 'tsc') {
135
+ return detectTscCommand(args, cwd, warnings);
136
+ }
137
+ // Detect webpack
138
+ if (command === 'webpack' || command === 'webpack-cli') {
139
+ return await detectWebpackCommand(cwd, warnings);
140
+ }
141
+ // Detect rollup
142
+ if (command === 'rollup') {
143
+ return await detectRollupCommand(cwd, warnings);
144
+ }
145
+ // Detect esbuild
146
+ if (command === 'esbuild') {
147
+ return detectEsbuildCommand(args, warnings);
148
+ }
149
+ // Detect vite
150
+ if (command === 'vite') {
151
+ return await detectViteCommand(cwd, warnings);
152
+ }
153
+ // Detect swc
154
+ if (command === 'swc') {
155
+ return await detectSwcCommand(cwd, warnings);
156
+ }
157
+ // Unknown command
158
+ return {
159
+ tool: command,
160
+ configFile: null,
161
+ isDynamicConfig: false,
162
+ outputDir: null,
163
+ warnings: [
164
+ `Unknown build tool: ${command}`,
165
+ 'Output directory detection may not work correctly.',
166
+ ],
167
+ };
168
+ }
169
+ async function detectPackageManagerCommand(command, args, cwd, warnings, depth) {
170
+ var _a;
171
+ const packageJson = (0, config_readers_1.readPackageJson)(cwd);
172
+ if (!packageJson) {
173
+ warnings.push('package.json not found');
174
+ return {
175
+ tool: command,
176
+ configFile: null,
177
+ isDynamicConfig: false,
178
+ outputDir: null,
179
+ warnings,
180
+ };
181
+ }
182
+ // Find the script name
183
+ let scriptName = null;
184
+ if (command === 'npm' && args[0] === 'run' && args[1]) {
185
+ scriptName = args[1];
186
+ }
187
+ else if ((command === 'yarn' || command === 'pnpm') && args[0]) {
188
+ scriptName = args[0];
189
+ }
190
+ if (!scriptName || !((_a = packageJson.scripts) === null || _a === void 0 ? void 0 : _a[scriptName])) {
191
+ warnings.push(`Script "${scriptName || 'unknown'}" not found in package.json`);
192
+ return {
193
+ tool: command,
194
+ configFile: (0, node_path_1.join)(cwd, 'package.json'),
195
+ isDynamicConfig: false,
196
+ outputDir: null,
197
+ warnings,
198
+ };
199
+ }
200
+ const script = packageJson.scripts[scriptName];
201
+ // Parse the script command - check if there are multiple commands with shell operators
202
+ try {
203
+ const individualCommands = (0, shell_parser_1.splitCommands)(script);
204
+ // If there are multiple commands in the script, detect each one
205
+ if (individualCommands.length > 1) {
206
+ const detectedCommands = [];
207
+ const allWarnings = [...warnings];
208
+ const outputDirs = [];
209
+ for (const cmd of individualCommands) {
210
+ try {
211
+ const parsedScript = (0, shell_parser_1.parseShellCommand)(cmd);
212
+ const detected = await detectCommand(parsedScript, cwd, depth + 1);
213
+ detectedCommands.push(detected);
214
+ if (detected.outputDir) {
215
+ outputDirs.push((0, node_path_1.resolve)(cwd, detected.outputDir));
216
+ }
217
+ allWarnings.push(...detected.warnings);
218
+ }
219
+ catch (_b) {
220
+ // Skip commands that fail to parse
221
+ allWarnings.push(`Failed to parse sub-command: ${cmd}`);
222
+ }
223
+ }
224
+ // Find the last command that produces output
225
+ let primaryDetected = detectedCommands.find((d) => d.outputDir) ||
226
+ detectedCommands[detectedCommands.length - 1];
227
+ // If multiple output directories, use common ancestor
228
+ if (outputDirs.length > 1) {
229
+ const commonOutputDir = findCommonAncestor(outputDirs, cwd);
230
+ if (commonOutputDir) {
231
+ primaryDetected = Object.assign(Object.assign({}, primaryDetected), { outputDir: (0, node_path_1.relative)(cwd, commonOutputDir) || '.' });
232
+ }
233
+ }
234
+ else if (outputDirs.length === 1) {
235
+ primaryDetected = Object.assign(Object.assign({}, primaryDetected), { outputDir: (0, node_path_1.relative)(cwd, outputDirs[0]) || '.' });
236
+ }
237
+ // Preserve the package.json reference
238
+ if (!primaryDetected.configFile) {
239
+ primaryDetected.configFile = (0, node_path_1.join)(cwd, 'package.json');
240
+ }
241
+ primaryDetected.warnings = allWarnings;
242
+ // Store sub-commands for logging purposes
243
+ primaryDetected.subCommands = detectedCommands;
244
+ return primaryDetected;
245
+ }
246
+ // Single command - parse normally
247
+ const parsedScript = (0, shell_parser_1.parseShellCommand)(script);
248
+ // Recursively detect the actual build tool
249
+ const detected = await detectCommand(parsedScript, cwd, depth + 1);
250
+ // Preserve the package.json reference
251
+ if (!detected.configFile) {
252
+ detected.configFile = (0, node_path_1.join)(cwd, 'package.json');
253
+ }
254
+ return detected;
255
+ }
256
+ catch (error) {
257
+ warnings.push(`Failed to parse package.json script "${scriptName}": ${script}`);
258
+ warnings.push(`Parse error: ${error.message}`);
259
+ return {
260
+ tool: command,
261
+ configFile: (0, node_path_1.join)(cwd, 'package.json'),
262
+ isDynamicConfig: false,
263
+ outputDir: null,
264
+ warnings,
265
+ };
266
+ }
267
+ }
268
+ function detectTscCommand(args, cwd, warnings) {
269
+ var _a;
270
+ // Look for -p or --project flag
271
+ const configPath = findArgValue(args, '-p', '--project') || 'tsconfig.json';
272
+ const fullConfigPath = (0, node_path_1.join)(cwd, configPath);
273
+ const configExists = (0, node_fs_1.existsSync)(fullConfigPath);
274
+ if (!configExists) {
275
+ warnings.push(`TypeScript config not found: ${configPath}`);
276
+ return {
277
+ tool: 'tsc',
278
+ configFile: null,
279
+ isDynamicConfig: false,
280
+ outputDir: null,
281
+ warnings,
282
+ };
283
+ }
284
+ // Try to read outDir from tsconfig
285
+ const tsConfig = (0, config_readers_1.readTsConfig)(cwd, configPath);
286
+ const outDir = ((_a = tsConfig === null || tsConfig === void 0 ? void 0 : tsConfig.compilerOptions) === null || _a === void 0 ? void 0 : _a.outDir) || null;
287
+ return {
288
+ tool: 'tsc',
289
+ configFile: fullConfigPath,
290
+ isDynamicConfig: false,
291
+ outputDir: outDir,
292
+ warnings,
293
+ };
294
+ }
295
+ async function detectWebpackCommand(cwd, warnings) {
296
+ const configFile = (0, config_readers_1.configFileExists)(cwd, 'webpack.config');
297
+ const isDynamicConfig = (0, config_readers_1.isJavaScriptConfig)(cwd, 'webpack.config');
298
+ // Try to load the config using cosmiconfig if it's a JS config
299
+ if (isDynamicConfig) {
300
+ try {
301
+ const loadedConfig = await (0, config_readers_1.loadWebpackConfig)(cwd);
302
+ if (loadedConfig && loadedConfig.outputDir) {
303
+ // Successfully loaded and extracted output directory
304
+ return {
305
+ tool: 'webpack',
306
+ configFile: loadedConfig.filepath,
307
+ isDynamicConfig: true,
308
+ outputDir: loadedConfig.outputDir,
309
+ warnings,
310
+ };
311
+ }
312
+ // Config loaded but couldn't extract output directory
313
+ warnings.push('Webpack configuration loaded but output directory could not be determined.', 'Consider using @zephyrcloud/webpack-plugin or ze-cli deploy after building.');
314
+ }
315
+ catch (_a) {
316
+ warnings.push('Failed to load Webpack configuration.', 'Consider using @zephyrcloud/webpack-plugin or ze-cli deploy after building.');
317
+ }
318
+ }
319
+ return {
320
+ tool: 'webpack',
321
+ configFile,
322
+ isDynamicConfig,
323
+ outputDir: isDynamicConfig ? null : 'dist',
324
+ warnings,
325
+ };
326
+ }
327
+ async function detectRollupCommand(cwd, warnings) {
328
+ const configFile = (0, config_readers_1.configFileExists)(cwd, 'rollup.config');
329
+ const isDynamicConfig = (0, config_readers_1.isJavaScriptConfig)(cwd, 'rollup.config');
330
+ // Try to load the config using cosmiconfig if it's a JS config
331
+ if (isDynamicConfig) {
332
+ try {
333
+ const loadedConfig = await (0, config_readers_1.loadRollupConfig)(cwd);
334
+ if (loadedConfig && loadedConfig.outputDir) {
335
+ // Successfully loaded and extracted output directory
336
+ return {
337
+ tool: 'rollup',
338
+ configFile: loadedConfig.filepath,
339
+ isDynamicConfig: true,
340
+ outputDir: loadedConfig.outputDir,
341
+ warnings,
342
+ };
343
+ }
344
+ // Config loaded but couldn't extract output directory
345
+ warnings.push('Rollup configuration loaded but output directory could not be determined.', 'Consider using @zephyrcloud/rollup-plugin or ze-cli deploy after building.');
346
+ }
347
+ catch (_a) {
348
+ warnings.push('Failed to load Rollup configuration.', 'Consider using @zephyrcloud/rollup-plugin or ze-cli deploy after building.');
349
+ }
350
+ }
351
+ return {
352
+ tool: 'rollup',
353
+ configFile,
354
+ isDynamicConfig,
355
+ outputDir: isDynamicConfig ? null : 'dist',
356
+ warnings,
357
+ };
358
+ }
359
+ function detectEsbuildCommand(args, warnings) {
360
+ // Look for --outdir or --outfile in args
361
+ let outputDir = null;
362
+ const outdir = findArgValue(args, '--outdir');
363
+ const outfile = findArgValue(args, '--outfile');
364
+ if (outdir) {
365
+ outputDir = outdir;
366
+ }
367
+ else if (outfile) {
368
+ // Extract directory from outfile
369
+ const lastSlash = Math.max(outfile.lastIndexOf('/'), outfile.lastIndexOf('\\'));
370
+ outputDir = lastSlash !== -1 ? outfile.substring(0, lastSlash) : '.';
371
+ }
372
+ if (!outputDir) {
373
+ warnings.push('Could not detect esbuild output directory from arguments');
374
+ }
375
+ return {
376
+ tool: 'esbuild',
377
+ configFile: null,
378
+ isDynamicConfig: false,
379
+ outputDir,
380
+ warnings,
381
+ };
382
+ }
383
+ async function detectViteCommand(cwd, warnings) {
384
+ const configFile = (0, config_readers_1.configFileExists)(cwd, 'vite.config');
385
+ const isDynamicConfig = (0, config_readers_1.isJavaScriptConfig)(cwd, 'vite.config');
386
+ // Try to load the config using cosmiconfig if it's a JS config
387
+ if (isDynamicConfig) {
388
+ try {
389
+ const loadedConfig = await (0, config_readers_1.loadViteConfig)(cwd);
390
+ if (loadedConfig && loadedConfig.outputDir) {
391
+ // Successfully loaded and extracted output directory
392
+ return {
393
+ tool: 'vite',
394
+ configFile: loadedConfig.filepath,
395
+ isDynamicConfig: true,
396
+ outputDir: loadedConfig.outputDir,
397
+ warnings,
398
+ };
399
+ }
400
+ // Config loaded but couldn't extract output directory (fallback to default)
401
+ if (loadedConfig) {
402
+ return {
403
+ tool: 'vite',
404
+ configFile: loadedConfig.filepath,
405
+ isDynamicConfig: true,
406
+ outputDir: 'dist', // Vite default
407
+ warnings,
408
+ };
409
+ }
410
+ warnings.push('Failed to load Vite configuration.', 'Consider using @zephyrcloud/vite-plugin or ze-cli deploy after building.');
411
+ }
412
+ catch (_a) {
413
+ warnings.push('Failed to load Vite configuration.', 'Consider using @zephyrcloud/vite-plugin or ze-cli deploy after building.');
414
+ }
415
+ }
416
+ return {
417
+ tool: 'vite',
418
+ configFile,
419
+ isDynamicConfig,
420
+ outputDir: isDynamicConfig ? null : 'dist',
421
+ warnings,
422
+ };
423
+ }
424
+ async function detectSwcCommand(cwd, warnings) {
425
+ const configFile = (0, config_readers_1.configFileExists)(cwd, '.swcrc');
426
+ const isDynamicConfig = (0, config_readers_1.isJavaScriptConfig)(cwd, '.swcrc');
427
+ // Try to load the config using cosmiconfig if it's a JS config
428
+ if (isDynamicConfig) {
429
+ try {
430
+ const loadedConfig = await (0, config_readers_1.loadSwcConfig)(cwd);
431
+ if (loadedConfig) {
432
+ return {
433
+ tool: 'swc',
434
+ configFile: loadedConfig.filepath,
435
+ isDynamicConfig: true,
436
+ outputDir: 'dist', // SWC doesn't have standard output config
437
+ warnings,
438
+ };
439
+ }
440
+ }
441
+ catch (_a) {
442
+ warnings.push('Failed to load SWC configuration.');
443
+ }
444
+ }
445
+ return {
446
+ tool: 'swc',
447
+ configFile,
448
+ isDynamicConfig,
449
+ outputDir: 'dist', // Common default
450
+ warnings,
451
+ };
452
+ }
453
+ //# sourceMappingURL=command-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-detector.js","sourceRoot":"","sources":["../../src/lib/command-detector.ts"],"names":[],"mappings":"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"}