@walkeros/cli 0.5.1-next.0 → 0.6.0
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/CHANGELOG.md +35 -0
- package/README.md +51 -28
- package/dist/__tests__/bundle/bundler-helpers.test.d.ts +2 -0
- package/dist/__tests__/bundle/bundler-helpers.test.d.ts.map +1 -0
- package/dist/__tests__/bundle/bundler-helpers.test.js +151 -0
- package/dist/__tests__/bundle/bundler-helpers.test.js.map +1 -0
- package/dist/__tests__/bundle/bundler.test.d.ts +2 -0
- package/dist/__tests__/bundle/bundler.test.d.ts.map +1 -0
- package/dist/__tests__/bundle/bundler.test.js +352 -0
- package/dist/__tests__/bundle/bundler.test.js.map +1 -0
- package/dist/__tests__/bundle/programmatic.test.d.ts +2 -0
- package/dist/__tests__/bundle/programmatic.test.d.ts.map +1 -0
- package/dist/__tests__/bundle/programmatic.test.js +148 -0
- package/dist/__tests__/bundle/programmatic.test.js.map +1 -0
- package/dist/__tests__/cli-e2e.test.d.ts +8 -0
- package/dist/__tests__/cli-e2e.test.d.ts.map +1 -0
- package/dist/__tests__/cli-e2e.test.js +145 -0
- package/dist/__tests__/cli-e2e.test.js.map +1 -0
- package/dist/__tests__/cli.test.d.ts +2 -0
- package/dist/__tests__/cli.test.d.ts.map +1 -0
- package/dist/__tests__/cli.test.js +179 -0
- package/dist/__tests__/cli.test.js.map +1 -0
- package/dist/__tests__/config-loader.test.d.ts +7 -0
- package/dist/__tests__/config-loader.test.d.ts.map +1 -0
- package/dist/__tests__/config-loader.test.js +414 -0
- package/dist/__tests__/config-loader.test.js.map +1 -0
- package/dist/__tests__/core/asset-resolver.test.d.ts +2 -0
- package/dist/__tests__/core/asset-resolver.test.d.ts.map +1 -0
- package/dist/__tests__/core/asset-resolver.test.js +14 -0
- package/dist/__tests__/core/asset-resolver.test.js.map +1 -0
- package/dist/__tests__/core/build-cache.test.d.ts +2 -0
- package/dist/__tests__/core/build-cache.test.d.ts.map +1 -0
- package/dist/__tests__/core/build-cache.test.js +55 -0
- package/dist/__tests__/core/build-cache.test.js.map +1 -0
- package/dist/__tests__/core/cache-utils.test.d.ts +2 -0
- package/dist/__tests__/core/cache-utils.test.d.ts.map +1 -0
- package/dist/__tests__/core/cache-utils.test.js +70 -0
- package/dist/__tests__/core/cache-utils.test.js.map +1 -0
- package/dist/__tests__/core/config.test.d.ts +2 -0
- package/dist/__tests__/core/config.test.d.ts.map +1 -0
- package/dist/__tests__/core/config.test.js +79 -0
- package/dist/__tests__/core/config.test.js.map +1 -0
- package/dist/__tests__/core/logger.test.d.ts +2 -0
- package/dist/__tests__/core/logger.test.d.ts.map +1 -0
- package/dist/__tests__/core/logger.test.js +53 -0
- package/dist/__tests__/core/logger.test.js.map +1 -0
- package/dist/__tests__/integration/bundle-run.integration.test.d.ts +8 -0
- package/dist/__tests__/integration/bundle-run.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/bundle-run.integration.test.js +54 -0
- package/dist/__tests__/integration/bundle-run.integration.test.js.map +1 -0
- package/dist/__tests__/push/push.test.d.ts +7 -0
- package/dist/__tests__/push/push.test.d.ts.map +1 -0
- package/dist/__tests__/push/push.test.js +197 -0
- package/dist/__tests__/push/push.test.js.map +1 -0
- package/dist/__tests__/simulate/env-loader.test.d.ts +2 -0
- package/dist/__tests__/simulate/env-loader.test.d.ts.map +1 -0
- package/dist/__tests__/simulate/env-loader.test.js +47 -0
- package/dist/__tests__/simulate/env-loader.test.js.map +1 -0
- package/dist/__tests__/simulate/node-executor.test.d.ts +5 -0
- package/dist/__tests__/simulate/node-executor.test.d.ts.map +1 -0
- package/dist/__tests__/simulate/node-executor.test.js +25 -0
- package/dist/__tests__/simulate/node-executor.test.js.map +1 -0
- package/dist/__tests__/simulate/server-simulate.integration.test.d.ts +5 -0
- package/dist/__tests__/simulate/server-simulate.integration.test.d.ts.map +1 -0
- package/dist/__tests__/simulate/server-simulate.integration.test.js +58 -0
- package/dist/__tests__/simulate/server-simulate.integration.test.js.map +1 -0
- package/dist/__tests__/smoke/production.smoke.test.d.ts +8 -0
- package/dist/__tests__/smoke/production.smoke.test.d.ts.map +1 -0
- package/dist/__tests__/smoke/production.smoke.test.js +65 -0
- package/dist/__tests__/smoke/production.smoke.test.js.map +1 -0
- package/dist/commands/bundle/bundler.d.ts +32 -0
- package/dist/commands/bundle/bundler.d.ts.map +1 -0
- package/dist/commands/bundle/bundler.js +569 -0
- package/dist/commands/bundle/bundler.js.map +1 -0
- package/dist/commands/bundle/index.d.ts +59 -0
- package/dist/commands/bundle/index.d.ts.map +1 -0
- package/dist/commands/bundle/index.js +184 -0
- package/dist/commands/bundle/index.js.map +1 -0
- package/dist/commands/bundle/package-manager.d.ts +8 -0
- package/dist/commands/bundle/package-manager.d.ts.map +1 -0
- package/dist/commands/bundle/package-manager.js +220 -0
- package/dist/commands/bundle/package-manager.js.map +1 -0
- package/dist/commands/bundle/stats.d.ts +23 -0
- package/dist/commands/bundle/stats.d.ts.map +1 -0
- package/dist/commands/bundle/stats.js +52 -0
- package/dist/commands/bundle/stats.js.map +1 -0
- package/dist/commands/cache.d.ts +7 -0
- package/dist/commands/cache.d.ts.map +1 -0
- package/dist/commands/cache.js +68 -0
- package/dist/commands/cache.js.map +1 -0
- package/dist/commands/push/index.d.ts +7 -0
- package/dist/commands/push/index.d.ts.map +1 -0
- package/dist/commands/push/index.js +247 -0
- package/dist/commands/push/index.js.map +1 -0
- package/dist/commands/push/types.d.ts +22 -0
- package/dist/commands/push/types.d.ts.map +1 -0
- package/dist/commands/push/types.js +2 -0
- package/dist/commands/push/types.js.map +1 -0
- package/dist/commands/run/__tests__/run.integration.test.d.ts +7 -0
- package/dist/commands/run/__tests__/run.integration.test.d.ts.map +1 -0
- package/dist/commands/run/__tests__/run.integration.test.js +51 -0
- package/dist/commands/run/__tests__/run.integration.test.js.map +1 -0
- package/dist/commands/run/__tests__/validators.test.d.ts +2 -0
- package/dist/commands/run/__tests__/validators.test.d.ts.map +1 -0
- package/dist/commands/run/__tests__/validators.test.js +80 -0
- package/dist/commands/run/__tests__/validators.test.js.map +1 -0
- package/dist/commands/run/execution.d.ts +14 -0
- package/dist/commands/run/execution.d.ts.map +1 -0
- package/dist/commands/run/execution.js +41 -0
- package/dist/commands/run/execution.js.map +1 -0
- package/dist/commands/run/index.d.ts +38 -0
- package/dist/commands/run/index.d.ts.map +1 -0
- package/dist/commands/run/index.js +154 -0
- package/dist/commands/run/index.js.map +1 -0
- package/dist/commands/run/types.d.ts +65 -0
- package/dist/commands/run/types.d.ts.map +1 -0
- package/dist/commands/run/types.js +7 -0
- package/dist/commands/run/types.js.map +1 -0
- package/dist/commands/run/utils.d.ts +29 -0
- package/dist/commands/run/utils.d.ts.map +1 -0
- package/dist/commands/run/utils.js +52 -0
- package/dist/commands/run/utils.js.map +1 -0
- package/dist/commands/run/validators.d.ts +33 -0
- package/dist/commands/run/validators.d.ts.map +1 -0
- package/dist/commands/run/validators.js +58 -0
- package/dist/commands/run/validators.js.map +1 -0
- package/dist/commands/simulate/env-loader.d.ts +19 -0
- package/dist/commands/simulate/env-loader.d.ts.map +1 -0
- package/dist/commands/simulate/env-loader.js +44 -0
- package/dist/commands/simulate/env-loader.js.map +1 -0
- package/dist/commands/simulate/index.d.ts +48 -0
- package/dist/commands/simulate/index.d.ts.map +1 -0
- package/dist/commands/simulate/index.js +113 -0
- package/dist/commands/simulate/index.js.map +1 -0
- package/dist/commands/simulate/jsdom-executor.d.ts +37 -0
- package/dist/commands/simulate/jsdom-executor.d.ts.map +1 -0
- package/dist/commands/simulate/jsdom-executor.js +137 -0
- package/dist/commands/simulate/jsdom-executor.js.map +1 -0
- package/dist/commands/simulate/node-executor.d.ts +28 -0
- package/dist/commands/simulate/node-executor.d.ts.map +1 -0
- package/dist/commands/simulate/node-executor.js +94 -0
- package/dist/commands/simulate/node-executor.js.map +1 -0
- package/dist/commands/simulate/simulator.d.ts +14 -0
- package/dist/commands/simulate/simulator.d.ts.map +1 -0
- package/dist/commands/simulate/simulator.js +163 -0
- package/dist/commands/simulate/simulator.js.map +1 -0
- package/dist/commands/simulate/tracker.d.ts +30 -0
- package/dist/commands/simulate/tracker.d.ts.map +1 -0
- package/dist/commands/simulate/tracker.js +96 -0
- package/dist/commands/simulate/tracker.js.map +1 -0
- package/dist/commands/simulate/types.d.ts +20 -0
- package/dist/commands/simulate/types.d.ts.map +1 -0
- package/dist/commands/simulate/types.js +2 -0
- package/dist/commands/simulate/types.js.map +1 -0
- package/dist/config/build-defaults.d.ts +49 -0
- package/dist/config/build-defaults.d.ts.map +1 -0
- package/dist/config/build-defaults.js +68 -0
- package/dist/config/build-defaults.js.map +1 -0
- package/dist/config/index.d.ts +13 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +15 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +81 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +153 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/utils.d.ts +101 -0
- package/dist/config/utils.d.ts.map +1 -0
- package/dist/config/utils.js +235 -0
- package/dist/config/utils.js.map +1 -0
- package/dist/config/validators.d.ts +52 -0
- package/dist/config/validators.d.ts.map +1 -0
- package/dist/config/validators.js +85 -0
- package/dist/config/validators.js.map +1 -0
- package/dist/core/asset-resolver.d.ts +34 -0
- package/dist/core/asset-resolver.d.ts.map +1 -0
- package/dist/core/asset-resolver.js +70 -0
- package/dist/core/asset-resolver.js.map +1 -0
- package/dist/core/build-cache.d.ts +23 -0
- package/dist/core/build-cache.d.ts.map +1 -0
- package/dist/core/build-cache.js +44 -0
- package/dist/core/build-cache.js.map +1 -0
- package/dist/core/cache-utils.d.ts +27 -0
- package/dist/core/cache-utils.d.ts.map +1 -0
- package/dist/core/cache-utils.js +60 -0
- package/dist/core/cache-utils.js.map +1 -0
- package/dist/core/index.d.ts +8 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +8 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/local-packages.d.ts +19 -0
- package/dist/core/local-packages.d.ts.map +1 -0
- package/dist/core/local-packages.js +60 -0
- package/dist/core/local-packages.js.map +1 -0
- package/dist/core/logger.d.ts +30 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +85 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/output.d.ts +30 -0
- package/dist/core/output.d.ts.map +1 -0
- package/dist/core/output.js +46 -0
- package/dist/core/output.js.map +1 -0
- package/dist/core/timer.d.ts +14 -0
- package/dist/core/timer.d.ts.map +1 -0
- package/dist/core/timer.js +29 -0
- package/dist/core/timer.js.map +1 -0
- package/dist/core/tmp.d.ts +27 -0
- package/dist/core/tmp.d.ts.map +1 -0
- package/dist/core/tmp.js +36 -0
- package/dist/core/tmp.js.map +1 -0
- package/dist/core/utils.d.ts +10 -0
- package/dist/core/utils.d.ts.map +1 -0
- package/dist/core/utils.js +12 -0
- package/dist/core/utils.js.map +1 -0
- package/dist/index.d.ts +20 -13
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +633 -761
- package/dist/index.js.map +1 -1
- package/dist/runtime/index.d.ts +10 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +10 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/main.d.ts +2 -0
- package/dist/runtime/main.d.ts.map +1 -0
- package/dist/runtime/main.js +268 -0
- package/dist/runtime/main.js.map +1 -0
- package/dist/runtime/runner.d.ts +20 -0
- package/dist/runtime/runner.d.ts.map +1 -0
- package/dist/runtime/runner.js +72 -0
- package/dist/runtime/runner.js.map +1 -0
- package/dist/runtime/serve.d.ts +19 -0
- package/dist/runtime/serve.d.ts.map +1 -0
- package/dist/runtime/serve.js +97 -0
- package/dist/runtime/serve.js.map +1 -0
- package/dist/schemas/index.d.ts +9 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +9 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/primitives.d.ts +37 -0
- package/dist/schemas/primitives.d.ts.map +1 -0
- package/dist/schemas/primitives.js +43 -0
- package/dist/schemas/primitives.js.map +1 -0
- package/dist/schemas/run.d.ts +23 -0
- package/dist/schemas/run.d.ts.map +1 -0
- package/dist/schemas/run.js +20 -0
- package/dist/schemas/run.js.map +1 -0
- package/dist/types/bundle.d.ts +141 -0
- package/dist/types/bundle.d.ts.map +1 -0
- package/dist/types/bundle.js +10 -0
- package/dist/types/bundle.js.map +1 -0
- package/dist/types/global.d.ts +38 -0
- package/dist/types/global.d.ts.map +1 -0
- package/dist/types/global.js +24 -0
- package/dist/types/global.js.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +27 -0
- package/dist/version.js.map +1 -0
- package/dist/walker.js +1 -0
- package/package.json +7 -4
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bundle Command
|
|
3
|
+
*
|
|
4
|
+
* Supports both single-flow and multi-flow builds.
|
|
5
|
+
*/
|
|
6
|
+
import path from 'path';
|
|
7
|
+
import { createCommandLogger, createTimer, createSuccessOutput, createErrorOutput, getErrorMessage, resolveAsset, } from '../../core/index.js';
|
|
8
|
+
import { loadJsonConfig, loadBundleConfig, loadAllFlows, } from '../../config/index.js';
|
|
9
|
+
import { bundleCore } from './bundler.js';
|
|
10
|
+
import { displayStats } from './stats.js';
|
|
11
|
+
export async function bundleCommand(options) {
|
|
12
|
+
const timer = createTimer();
|
|
13
|
+
timer.start();
|
|
14
|
+
const logger = createCommandLogger(options);
|
|
15
|
+
// Handle dry-run
|
|
16
|
+
if (options.dryRun) {
|
|
17
|
+
logger.log(`[DRY-RUN] Would execute bundle with config: ${options.config}`);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
// Validate flag combination
|
|
22
|
+
if (options.flow && options.all) {
|
|
23
|
+
throw new Error('Cannot use both --flow and --all flags together');
|
|
24
|
+
}
|
|
25
|
+
// Step 1: Read configuration file
|
|
26
|
+
// Resolve bare names to examples directory, keep paths/URLs as-is
|
|
27
|
+
const configPath = resolveAsset(options.config, 'config');
|
|
28
|
+
const rawConfig = await loadJsonConfig(configPath);
|
|
29
|
+
// Step 2: Load configuration(s) based on flags
|
|
30
|
+
const configsToBundle = options.all
|
|
31
|
+
? loadAllFlows(rawConfig, { configPath, logger })
|
|
32
|
+
: [
|
|
33
|
+
loadBundleConfig(rawConfig, {
|
|
34
|
+
configPath,
|
|
35
|
+
flowName: options.flow,
|
|
36
|
+
logger,
|
|
37
|
+
}),
|
|
38
|
+
];
|
|
39
|
+
// Step 3: Bundle each configuration
|
|
40
|
+
const results = [];
|
|
41
|
+
for (const { flowConfig, buildOptions, flowName, isMultiFlow, } of configsToBundle) {
|
|
42
|
+
try {
|
|
43
|
+
// Override cache setting from CLI if provided
|
|
44
|
+
if (options.cache !== undefined) {
|
|
45
|
+
buildOptions.cache = options.cache;
|
|
46
|
+
}
|
|
47
|
+
// Log flow being built
|
|
48
|
+
const configBasename = path.basename(configPath);
|
|
49
|
+
if (isMultiFlow || options.all) {
|
|
50
|
+
logger.log(`Bundling ${configBasename} (flow: ${flowName})...`);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
logger.log(`Bundling ${configBasename}...`);
|
|
54
|
+
}
|
|
55
|
+
// Run bundler
|
|
56
|
+
const shouldCollectStats = options.stats || options.json;
|
|
57
|
+
const stats = await bundleCore(flowConfig, buildOptions, logger, shouldCollectStats);
|
|
58
|
+
results.push({
|
|
59
|
+
flowName,
|
|
60
|
+
success: true,
|
|
61
|
+
stats,
|
|
62
|
+
});
|
|
63
|
+
// Show stats if requested (for non-JSON, non-multi builds)
|
|
64
|
+
if (!options.json && !options.all && options.stats && stats) {
|
|
65
|
+
displayStats(stats, logger);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
const errorMessage = getErrorMessage(error);
|
|
70
|
+
results.push({
|
|
71
|
+
flowName,
|
|
72
|
+
success: false,
|
|
73
|
+
error: errorMessage,
|
|
74
|
+
});
|
|
75
|
+
if (!options.all) {
|
|
76
|
+
throw error; // Re-throw for single flow builds
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Step 4: Report results
|
|
81
|
+
const duration = timer.end() / 1000;
|
|
82
|
+
const successCount = results.filter((r) => r.success).length;
|
|
83
|
+
const failureCount = results.filter((r) => !r.success).length;
|
|
84
|
+
if (options.json) {
|
|
85
|
+
// JSON output for CI/CD
|
|
86
|
+
const output = failureCount === 0
|
|
87
|
+
? createSuccessOutput({
|
|
88
|
+
flows: results,
|
|
89
|
+
summary: {
|
|
90
|
+
total: results.length,
|
|
91
|
+
success: successCount,
|
|
92
|
+
failed: failureCount,
|
|
93
|
+
},
|
|
94
|
+
}, duration)
|
|
95
|
+
: createErrorOutput(`${failureCount} flow(s) failed to build`, duration);
|
|
96
|
+
logger.json(output);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
if (options.all) {
|
|
100
|
+
logger.log(`\nBuild Summary: ${successCount}/${results.length} succeeded`);
|
|
101
|
+
if (failureCount > 0) {
|
|
102
|
+
logger.error(`Failed: ${failureCount}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (failureCount > 0) {
|
|
106
|
+
throw new Error(`${failureCount} flow(s) failed to build`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
const duration = timer.getElapsed() / 1000;
|
|
112
|
+
const errorMessage = getErrorMessage(error);
|
|
113
|
+
if (options.json) {
|
|
114
|
+
// JSON error output for CI/CD
|
|
115
|
+
const output = createErrorOutput(errorMessage, duration);
|
|
116
|
+
logger.json(output);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
logger.error(`Error: ${errorMessage}`);
|
|
120
|
+
}
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* High-level bundle function for programmatic usage.
|
|
126
|
+
*
|
|
127
|
+
* Handles configuration loading, parsing, and logger creation internally.
|
|
128
|
+
*
|
|
129
|
+
* @param configOrPath - Bundle configuration (Flow.Setup) or path to config file
|
|
130
|
+
* @param options - Bundle options
|
|
131
|
+
* @param options.silent - Suppress all output (default: false)
|
|
132
|
+
* @param options.verbose - Enable verbose logging (default: false)
|
|
133
|
+
* @param options.stats - Collect and return bundle statistics (default: false)
|
|
134
|
+
* @param options.cache - Enable package caching (default: true)
|
|
135
|
+
* @param options.flowName - Flow to use (required for multi-flow configs)
|
|
136
|
+
* @returns Bundle statistics if stats option is true, otherwise void
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```typescript
|
|
140
|
+
* // With Flow.Setup config object
|
|
141
|
+
* await bundle({
|
|
142
|
+
* version: 1,
|
|
143
|
+
* flows: {
|
|
144
|
+
* default: {
|
|
145
|
+
* web: {},
|
|
146
|
+
* packages: { '@walkeros/collector': { imports: ['startFlow'] } },
|
|
147
|
+
* destinations: { api: { code: 'destinationApi' } },
|
|
148
|
+
* }
|
|
149
|
+
* }
|
|
150
|
+
* });
|
|
151
|
+
*
|
|
152
|
+
* // With config file
|
|
153
|
+
* await bundle('./walker.config.json', { stats: true });
|
|
154
|
+
* ```
|
|
155
|
+
*/
|
|
156
|
+
export async function bundle(configOrPath, options = {}) {
|
|
157
|
+
// 1. Load config if path provided
|
|
158
|
+
let rawConfig;
|
|
159
|
+
// Use current working directory as base when config is passed as object
|
|
160
|
+
let configPath = path.resolve(process.cwd(), 'walkeros.config.json');
|
|
161
|
+
if (typeof configOrPath === 'string') {
|
|
162
|
+
// Resolve bare names to examples directory, keep paths as-is
|
|
163
|
+
configPath = resolveAsset(configOrPath, 'config');
|
|
164
|
+
rawConfig = await loadJsonConfig(configPath);
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
rawConfig = configOrPath;
|
|
168
|
+
}
|
|
169
|
+
// 2. Load and resolve config using Flow.Setup format
|
|
170
|
+
const { flowConfig, buildOptions } = loadBundleConfig(rawConfig, {
|
|
171
|
+
configPath,
|
|
172
|
+
flowName: options.flowName,
|
|
173
|
+
buildOverrides: options.buildOverrides,
|
|
174
|
+
});
|
|
175
|
+
// 3. Handle cache option
|
|
176
|
+
if (options.cache !== undefined) {
|
|
177
|
+
buildOptions.cache = options.cache;
|
|
178
|
+
}
|
|
179
|
+
// 4. Create logger internally
|
|
180
|
+
const logger = createCommandLogger(options);
|
|
181
|
+
// 5. Call core bundler
|
|
182
|
+
return await bundleCore(flowConfig, buildOptions, logger, options.stats ?? false);
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/bundle/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,YAAY,GACb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,YAAY,GAEb,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAsB,MAAM,YAAY,CAAC;AAc9D,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAA6B;IAE7B,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAC5B,KAAK,CAAC,KAAK,EAAE,CAAC;IAEd,MAAM,MAAM,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAE5C,iBAAiB;IACjB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,CAAC,GAAG,CAAC,+CAA+C,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5E,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,4BAA4B;QAC5B,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QAED,kCAAkC;QAClC,kEAAkE;QAClE,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;QAEnD,+CAA+C;QAC/C,MAAM,eAAe,GAAuB,OAAO,CAAC,GAAG;YACrD,CAAC,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;YACjD,CAAC,CAAC;gBACE,gBAAgB,CAAC,SAAS,EAAE;oBAC1B,UAAU;oBACV,QAAQ,EAAE,OAAO,CAAC,IAAI;oBACtB,MAAM;iBACP,CAAC;aACH,CAAC;QAEN,oCAAoC;QACpC,MAAM,OAAO,GAKR,EAAE,CAAC;QAER,KAAK,MAAM,EACT,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,WAAW,GACZ,IAAI,eAAe,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,8CAA8C;gBAC9C,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBAChC,YAAY,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;gBACrC,CAAC;gBAED,uBAAuB;gBACvB,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACjD,IAAI,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;oBAC/B,MAAM,CAAC,GAAG,CAAC,YAAY,cAAc,WAAW,QAAQ,MAAM,CAAC,CAAC;gBAClE,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,GAAG,CAAC,YAAY,cAAc,KAAK,CAAC,CAAC;gBAC9C,CAAC;gBAED,cAAc;gBACd,MAAM,kBAAkB,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;gBACzD,MAAM,KAAK,GAAG,MAAM,UAAU,CAC5B,UAAU,EACV,YAAY,EACZ,MAAM,EACN,kBAAkB,CACnB,CAAC;gBAEF,OAAO,CAAC,IAAI,CAAC;oBACX,QAAQ;oBACR,OAAO,EAAE,IAAI;oBACb,KAAK;iBACN,CAAC,CAAC;gBAEH,2DAA2D;gBAC3D,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,KAAK,IAAI,KAAK,EAAE,CAAC;oBAC5D,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;gBAC5C,OAAO,CAAC,IAAI,CAAC;oBACX,QAAQ;oBACR,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,YAAY;iBACpB,CAAC,CAAC;gBAEH,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;oBACjB,MAAM,KAAK,CAAC,CAAC,kCAAkC;gBACjD,CAAC;YACH,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QACpC,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QAC7D,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QAE9D,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,wBAAwB;YACxB,MAAM,MAAM,GACV,YAAY,KAAK,CAAC;gBAChB,CAAC,CAAC,mBAAmB,CACjB;oBACE,KAAK,EAAE,OAAO;oBACd,OAAO,EAAE;wBACP,KAAK,EAAE,OAAO,CAAC,MAAM;wBACrB,OAAO,EAAE,YAAY;wBACrB,MAAM,EAAE,YAAY;qBACrB;iBACF,EACD,QAAQ,CACT;gBACH,CAAC,CAAC,iBAAiB,CACf,GAAG,YAAY,0BAA0B,EACzC,QAAQ,CACT,CAAC;YACR,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;gBAChB,MAAM,CAAC,GAAG,CACR,oBAAoB,YAAY,IAAI,OAAO,CAAC,MAAM,YAAY,CAC/D,CAAC;gBACF,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;oBACrB,MAAM,CAAC,KAAK,CAAC,WAAW,YAAY,EAAE,CAAC,CAAC;gBAC1C,CAAC;YACH,CAAC;YAED,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,IAAI,KAAK,CAAC,GAAG,YAAY,0BAA0B,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC;QAC3C,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAE5C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,8BAA8B;YAC9B,MAAM,MAAM,GAAG,iBAAiB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YACzD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,UAAU,YAAY,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,YAAqB,EACrB,UAOI,EAAE;IAEN,kCAAkC;IAClC,IAAI,SAAkB,CAAC;IACvB,wEAAwE;IACxE,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,sBAAsB,CAAC,CAAC;IACrE,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;QACrC,6DAA6D;QAC7D,UAAU,GAAG,YAAY,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAClD,SAAS,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,SAAS,GAAG,YAAY,CAAC;IAC3B,CAAC;IAED,qDAAqD;IACrD,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,gBAAgB,CAAC,SAAS,EAAE;QAC/D,UAAU;QACV,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,cAAc,EAAE,OAAO,CAAC,cAAc;KACvC,CAAC,CAAC;IAEH,yBAAyB;IACzB,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAChC,YAAY,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IACrC,CAAC;IAED,8BAA8B;IAC9B,MAAM,MAAM,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAE5C,uBAAuB;IACvB,OAAO,MAAM,UAAU,CACrB,UAAU,EACV,YAAY,EACZ,MAAM,EACN,OAAO,CAAC,KAAK,IAAI,KAAK,CACvB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Logger } from '../../core/index.js';
|
|
2
|
+
export interface Package {
|
|
3
|
+
name: string;
|
|
4
|
+
version: string;
|
|
5
|
+
path?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function downloadPackages(packages: Package[], targetDir: string, logger: Logger, useCache?: boolean, configDir?: string): Promise<Map<string, string>>;
|
|
8
|
+
//# sourceMappingURL=package-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../../src/commands/bundle/package-manager.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,MAAM,EAGP,MAAM,qBAAqB,CAAC;AAqB7B,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA+GD,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,OAAO,EAAE,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,UAAO,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAyJ9B"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import pacote from 'pacote';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
import { resolveLocalPackage, copyLocalPackage, } from '../../core/index.js';
|
|
5
|
+
import { getPackageCacheKey } from '../../core/cache-utils.js';
|
|
6
|
+
import { getTmpPath } from '../../core/tmp.js';
|
|
7
|
+
/** Timeout for individual package downloads (60 seconds) */
|
|
8
|
+
const PACKAGE_DOWNLOAD_TIMEOUT_MS = 60000;
|
|
9
|
+
/**
|
|
10
|
+
* Wraps a promise with a timeout. Rejects with clear error if timeout exceeded.
|
|
11
|
+
*/
|
|
12
|
+
async function withTimeout(promise, ms, errorMessage) {
|
|
13
|
+
const timeout = new Promise((_, reject) => setTimeout(() => reject(new Error(errorMessage)), ms));
|
|
14
|
+
return Promise.race([promise, timeout]);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Gets the proper node_modules directory path for a package.
|
|
18
|
+
* Creates standard npm structure: node_modules/@scope/package or node_modules/package
|
|
19
|
+
* Supports multiple versions by appending version to non-scoped packages if needed.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* getPackageDirectory('node_modules', '@walkeros/core', '0.2.0')
|
|
23
|
+
* // → 'node_modules/@walkeros/core'
|
|
24
|
+
*
|
|
25
|
+
* getPackageDirectory('node_modules', 'lodash', '4.17.21')
|
|
26
|
+
* // → 'node_modules/lodash'
|
|
27
|
+
*/
|
|
28
|
+
function getPackageDirectory(baseDir, packageName, version) {
|
|
29
|
+
// For scoped packages like @walkeros/core, preserve the scope structure
|
|
30
|
+
// This creates: node_modules/@walkeros/core (standard npm structure)
|
|
31
|
+
return path.join(baseDir, 'node_modules', packageName);
|
|
32
|
+
}
|
|
33
|
+
async function getCachedPackagePath(pkg, tmpDir) {
|
|
34
|
+
const cacheDir = getTmpPath(tmpDir, 'cache', 'packages');
|
|
35
|
+
const cacheKey = await getPackageCacheKey(pkg.name, pkg.version);
|
|
36
|
+
return path.join(cacheDir, cacheKey);
|
|
37
|
+
}
|
|
38
|
+
async function isPackageCached(pkg, tmpDir) {
|
|
39
|
+
const cachedPath = await getCachedPackagePath(pkg, tmpDir);
|
|
40
|
+
return fs.pathExists(cachedPath);
|
|
41
|
+
}
|
|
42
|
+
function validateNoDuplicatePackages(packages) {
|
|
43
|
+
const packageMap = new Map();
|
|
44
|
+
// Group packages by name and collect their versions
|
|
45
|
+
for (const pkg of packages) {
|
|
46
|
+
if (!packageMap.has(pkg.name)) {
|
|
47
|
+
packageMap.set(pkg.name, []);
|
|
48
|
+
}
|
|
49
|
+
packageMap.get(pkg.name).push(pkg.version);
|
|
50
|
+
}
|
|
51
|
+
// Check for duplicate packages with different versions
|
|
52
|
+
const conflicts = [];
|
|
53
|
+
for (const [name, versions] of packageMap.entries()) {
|
|
54
|
+
const uniqueVersions = [...new Set(versions)];
|
|
55
|
+
if (uniqueVersions.length > 1) {
|
|
56
|
+
conflicts.push(`${name}: [${uniqueVersions.join(', ')}]`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (conflicts.length > 0) {
|
|
60
|
+
throw new Error(`Version conflicts detected:\n${conflicts.map((c) => ` - ${c}`).join('\n')}\n\n` +
|
|
61
|
+
'Each package must use the same version across all declarations. ' +
|
|
62
|
+
'Please update your configuration to use consistent versions.');
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Recursively resolve and download package dependencies
|
|
67
|
+
*/
|
|
68
|
+
async function resolveDependencies(pkg, packageDir, logger, visited = new Set()) {
|
|
69
|
+
const dependencies = [];
|
|
70
|
+
const pkgKey = `${pkg.name}@${pkg.version}`;
|
|
71
|
+
if (visited.has(pkgKey)) {
|
|
72
|
+
return dependencies;
|
|
73
|
+
}
|
|
74
|
+
visited.add(pkgKey);
|
|
75
|
+
try {
|
|
76
|
+
const packageJsonPath = path.join(packageDir, 'package.json');
|
|
77
|
+
if (await fs.pathExists(packageJsonPath)) {
|
|
78
|
+
const packageJson = await fs.readJson(packageJsonPath);
|
|
79
|
+
const deps = {
|
|
80
|
+
...packageJson.dependencies,
|
|
81
|
+
...packageJson.peerDependencies,
|
|
82
|
+
};
|
|
83
|
+
for (const [name, versionSpec] of Object.entries(deps)) {
|
|
84
|
+
if (typeof versionSpec === 'string') {
|
|
85
|
+
// Use the version spec as-is (pacote will resolve it)
|
|
86
|
+
// This respects the package.json dependency requirements
|
|
87
|
+
dependencies.push({ name, version: versionSpec });
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
logger.debug(`Failed to read dependencies for ${pkgKey}: ${error}`);
|
|
94
|
+
}
|
|
95
|
+
return dependencies;
|
|
96
|
+
}
|
|
97
|
+
export async function downloadPackages(packages, targetDir, logger, useCache = true, configDir) {
|
|
98
|
+
const packagePaths = new Map();
|
|
99
|
+
const downloadQueue = [...packages];
|
|
100
|
+
const processed = new Set();
|
|
101
|
+
// Track user-specified packages (only these are logged per design)
|
|
102
|
+
const userSpecifiedPackages = new Set(packages.map((p) => p.name));
|
|
103
|
+
// Track packages that should use local paths (to prevent npm overwriting them)
|
|
104
|
+
const localPackageMap = new Map();
|
|
105
|
+
for (const pkg of packages) {
|
|
106
|
+
if (pkg.path) {
|
|
107
|
+
localPackageMap.set(pkg.name, pkg.path);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Validate no duplicate packages with different versions in initial list
|
|
111
|
+
validateNoDuplicatePackages(packages);
|
|
112
|
+
// Ensure target directory exists
|
|
113
|
+
await fs.ensureDir(targetDir);
|
|
114
|
+
while (downloadQueue.length > 0) {
|
|
115
|
+
const pkg = downloadQueue.shift();
|
|
116
|
+
const pkgKey = `${pkg.name}@${pkg.version}`;
|
|
117
|
+
if (processed.has(pkgKey)) {
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
processed.add(pkgKey);
|
|
121
|
+
// If this package was specified with a local path, use it even if discovered as a dependency
|
|
122
|
+
if (!pkg.path && localPackageMap.has(pkg.name)) {
|
|
123
|
+
pkg.path = localPackageMap.get(pkg.name);
|
|
124
|
+
}
|
|
125
|
+
// Handle local packages first
|
|
126
|
+
if (pkg.path) {
|
|
127
|
+
const localPkg = await resolveLocalPackage(pkg.name, pkg.path, configDir || process.cwd(), logger);
|
|
128
|
+
const installedPath = await copyLocalPackage(localPkg, targetDir, logger);
|
|
129
|
+
packagePaths.set(pkg.name, installedPath);
|
|
130
|
+
// Resolve dependencies from local package
|
|
131
|
+
const deps = await resolveDependencies(pkg, installedPath, logger);
|
|
132
|
+
for (const dep of deps) {
|
|
133
|
+
const depKey = `${dep.name}@${dep.version}`;
|
|
134
|
+
if (!processed.has(depKey)) {
|
|
135
|
+
downloadQueue.push(dep);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
const packageSpec = `${pkg.name}@${pkg.version}`;
|
|
141
|
+
// Use proper node_modules structure: node_modules/@scope/package
|
|
142
|
+
const packageDir = getPackageDirectory(targetDir, pkg.name, pkg.version);
|
|
143
|
+
// Cache always uses the default .tmp/cache/packages location
|
|
144
|
+
const cachedPath = await getCachedPackagePath(pkg);
|
|
145
|
+
if (useCache && (await isPackageCached(pkg))) {
|
|
146
|
+
// Only log user-specified packages per design
|
|
147
|
+
if (userSpecifiedPackages.has(pkg.name)) {
|
|
148
|
+
logger.debug(`Downloading ${packageSpec} (cached)`);
|
|
149
|
+
}
|
|
150
|
+
try {
|
|
151
|
+
// Ensure parent directories exist for scoped packages (@scope/package)
|
|
152
|
+
await fs.ensureDir(path.dirname(packageDir));
|
|
153
|
+
await fs.copy(cachedPath, packageDir);
|
|
154
|
+
packagePaths.set(pkg.name, packageDir);
|
|
155
|
+
// Resolve and queue dependencies for cached package too
|
|
156
|
+
const deps = await resolveDependencies(pkg, packageDir, logger);
|
|
157
|
+
for (const dep of deps) {
|
|
158
|
+
const depKey = `${dep.name}@${dep.version}`;
|
|
159
|
+
if (!processed.has(depKey)) {
|
|
160
|
+
downloadQueue.push(dep);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
logger.debug(`Failed to use cache for ${packageSpec}, downloading fresh: ${error}`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
try {
|
|
170
|
+
// Ensure parent directories exist for scoped packages (@scope/package)
|
|
171
|
+
await fs.ensureDir(path.dirname(packageDir));
|
|
172
|
+
// Extract package to proper node_modules structure
|
|
173
|
+
// Use environment variable for cache location (Docker-friendly)
|
|
174
|
+
const cacheDir = process.env.NPM_CACHE_DIR || getTmpPath(undefined, 'cache', 'npm');
|
|
175
|
+
await withTimeout(pacote.extract(packageSpec, packageDir, {
|
|
176
|
+
// Force npm registry download, prevent workspace resolution
|
|
177
|
+
registry: 'https://registry.npmjs.org',
|
|
178
|
+
// Force online fetching from registry (don't use cached workspace packages)
|
|
179
|
+
preferOnline: true,
|
|
180
|
+
// Cache for performance
|
|
181
|
+
cache: cacheDir,
|
|
182
|
+
// Don't resolve relative to workspace context
|
|
183
|
+
where: undefined,
|
|
184
|
+
}), PACKAGE_DOWNLOAD_TIMEOUT_MS, `Package download timed out after ${PACKAGE_DOWNLOAD_TIMEOUT_MS / 1000}s: ${packageSpec}`);
|
|
185
|
+
// Only log user-specified packages per design
|
|
186
|
+
if (userSpecifiedPackages.has(pkg.name)) {
|
|
187
|
+
// Get package size for display
|
|
188
|
+
const pkgStats = await fs.stat(path.join(packageDir, 'package.json'));
|
|
189
|
+
const pkgJsonSize = pkgStats.size;
|
|
190
|
+
// Estimate total package size from package.json (rough approximation)
|
|
191
|
+
const sizeKB = (pkgJsonSize / 1024).toFixed(1);
|
|
192
|
+
logger.debug(`Downloading ${packageSpec} (${sizeKB} KB)`);
|
|
193
|
+
}
|
|
194
|
+
// Cache the downloaded package for future use
|
|
195
|
+
if (useCache) {
|
|
196
|
+
try {
|
|
197
|
+
await fs.ensureDir(path.dirname(cachedPath));
|
|
198
|
+
await fs.copy(packageDir, cachedPath);
|
|
199
|
+
}
|
|
200
|
+
catch (cacheError) {
|
|
201
|
+
// Silent cache failures
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
packagePaths.set(pkg.name, packageDir);
|
|
205
|
+
// Resolve and queue dependencies
|
|
206
|
+
const deps = await resolveDependencies(pkg, packageDir, logger);
|
|
207
|
+
for (const dep of deps) {
|
|
208
|
+
const depKey = `${dep.name}@${dep.version}`;
|
|
209
|
+
if (!processed.has(depKey)) {
|
|
210
|
+
downloadQueue.push(dep);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
throw new Error(`Failed to download ${packageSpec}: ${error}`);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return packagePaths;
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=package-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../../src/commands/bundle/package-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { BundleStats } from './bundler.js';
|
|
2
|
+
import type { Logger } from '../../core/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Display detailed bundle statistics to console
|
|
5
|
+
*/
|
|
6
|
+
export declare function displayStats(stats: BundleStats, logger: Logger): void;
|
|
7
|
+
/**
|
|
8
|
+
* Create stats summary for JSON output
|
|
9
|
+
*/
|
|
10
|
+
export declare function createStatsSummary(stats: BundleStats): {
|
|
11
|
+
totalSize: number;
|
|
12
|
+
totalSizeFormatted: string;
|
|
13
|
+
buildTime: number;
|
|
14
|
+
buildTimeFormatted: string;
|
|
15
|
+
treeshakingEffective: boolean;
|
|
16
|
+
packageCount: number;
|
|
17
|
+
packages: {
|
|
18
|
+
name: string;
|
|
19
|
+
size: number;
|
|
20
|
+
sizeFormatted: string;
|
|
21
|
+
}[];
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=stats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/commands/bundle/stats.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CA8BrE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW;;;;;;;;;;;;EAcpD"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bundle statistics display utilities
|
|
3
|
+
*/
|
|
4
|
+
import { formatBytes } from '../../core/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Display detailed bundle statistics to console
|
|
7
|
+
*/
|
|
8
|
+
export function displayStats(stats, logger) {
|
|
9
|
+
logger.info('\n📊 Bundle Statistics');
|
|
10
|
+
logger.info('─'.repeat(50));
|
|
11
|
+
// Total size
|
|
12
|
+
const sizeKB = formatBytes(stats.totalSize);
|
|
13
|
+
logger.info(`Total Size: ${sizeKB} KB`);
|
|
14
|
+
// Build time
|
|
15
|
+
const timeSeconds = (stats.buildTime / 1000).toFixed(2);
|
|
16
|
+
logger.info(`Build Time: ${timeSeconds}s`);
|
|
17
|
+
// Tree-shaking effectiveness
|
|
18
|
+
const treeshakingStatus = stats.treeshakingEffective
|
|
19
|
+
? '✅ Effective'
|
|
20
|
+
: '⚠️ Not optimal (consider using named imports)';
|
|
21
|
+
logger.info(`Tree-shaking: ${treeshakingStatus}`);
|
|
22
|
+
// Package breakdown
|
|
23
|
+
if (stats.packages.length > 0) {
|
|
24
|
+
logger.info(`\nPackage Breakdown:`);
|
|
25
|
+
stats.packages.forEach((pkg) => {
|
|
26
|
+
if (pkg.size > 0) {
|
|
27
|
+
const pkgSizeKB = formatBytes(pkg.size);
|
|
28
|
+
logger.info(` • ${pkg.name}: ${pkgSizeKB} KB`);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
logger.info('─'.repeat(50));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Create stats summary for JSON output
|
|
36
|
+
*/
|
|
37
|
+
export function createStatsSummary(stats) {
|
|
38
|
+
return {
|
|
39
|
+
totalSize: stats.totalSize,
|
|
40
|
+
totalSizeFormatted: `${formatBytes(stats.totalSize)} KB`,
|
|
41
|
+
buildTime: stats.buildTime,
|
|
42
|
+
buildTimeFormatted: `${(stats.buildTime / 1000).toFixed(2)}s`,
|
|
43
|
+
treeshakingEffective: stats.treeshakingEffective,
|
|
44
|
+
packageCount: stats.packages.length,
|
|
45
|
+
packages: stats.packages.map((pkg) => ({
|
|
46
|
+
name: pkg.name,
|
|
47
|
+
size: pkg.size,
|
|
48
|
+
sizeFormatted: `${formatBytes(pkg.size)} KB`,
|
|
49
|
+
})),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/commands/bundle/stats.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIlD;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAkB,EAAE,MAAc;IAC7D,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACtC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5B,aAAa;IACb,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,CAAC,IAAI,CAAC,eAAe,MAAM,KAAK,CAAC,CAAC;IAExC,aAAa;IACb,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,CAAC,IAAI,CAAC,eAAe,WAAW,GAAG,CAAC,CAAC;IAE3C,6BAA6B;IAC7B,MAAM,iBAAiB,GAAG,KAAK,CAAC,oBAAoB;QAClD,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,gDAAgD,CAAC;IACrD,MAAM,CAAC,IAAI,CAAC,iBAAiB,iBAAiB,EAAE,CAAC,CAAC;IAElD,oBAAoB;IACpB,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACpC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC7B,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACxC,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,KAAK,SAAS,KAAK,CAAC,CAAC;YAClD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAkB;IACnD,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,kBAAkB,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK;QACxD,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,kBAAkB,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;QAC7D,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;QAChD,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;QACnC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACrC,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,aAAa,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK;SAC7C,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
export declare function registerCacheCommand(program: Command): void;
|
|
3
|
+
/**
|
|
4
|
+
* Register the clean command to clear entire temp directory
|
|
5
|
+
*/
|
|
6
|
+
export declare function registerCleanCommand(program: Command): void;
|
|
7
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/commands/cache.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2C3D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAY3D"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import { getTmpPath, getDefaultTmpRoot } from '../core/tmp.js';
|
|
3
|
+
import { createLogger } from '../core/logger.js';
|
|
4
|
+
export function registerCacheCommand(program) {
|
|
5
|
+
const cache = program.command('cache').description('Manage the CLI cache');
|
|
6
|
+
cache
|
|
7
|
+
.command('clear')
|
|
8
|
+
.description('Clear all cached packages and builds')
|
|
9
|
+
.option('--packages', 'Clear only package cache')
|
|
10
|
+
.option('--builds', 'Clear only build cache')
|
|
11
|
+
.option('--tmp-dir <dir>', 'Custom temp directory')
|
|
12
|
+
.option('--silent', 'Suppress output')
|
|
13
|
+
.action(async (options) => {
|
|
14
|
+
const logger = createLogger({ silent: options.silent });
|
|
15
|
+
const tmpDir = options.tmpDir;
|
|
16
|
+
if (options.packages) {
|
|
17
|
+
await fs.remove(getTmpPath(tmpDir, 'cache', 'packages'));
|
|
18
|
+
logger.log('Package cache cleared');
|
|
19
|
+
}
|
|
20
|
+
else if (options.builds) {
|
|
21
|
+
await fs.remove(getTmpPath(tmpDir, 'cache', 'builds'));
|
|
22
|
+
logger.log('Build cache cleared');
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
await fs.remove(getTmpPath(tmpDir, 'cache'));
|
|
26
|
+
logger.log('All caches cleared');
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
cache
|
|
30
|
+
.command('info')
|
|
31
|
+
.description('Show cache statistics')
|
|
32
|
+
.option('--tmp-dir <dir>', 'Custom temp directory')
|
|
33
|
+
.option('--silent', 'Suppress output')
|
|
34
|
+
.action(async (options) => {
|
|
35
|
+
const logger = createLogger({ silent: options.silent });
|
|
36
|
+
const tmpDir = options.tmpDir;
|
|
37
|
+
const packagesDir = getTmpPath(tmpDir, 'cache', 'packages');
|
|
38
|
+
const buildsDir = getTmpPath(tmpDir, 'cache', 'builds');
|
|
39
|
+
const packageCount = await countEntries(packagesDir);
|
|
40
|
+
const buildCount = await countEntries(buildsDir);
|
|
41
|
+
logger.log(`Cache directory: ${getTmpPath(tmpDir, 'cache')}`);
|
|
42
|
+
logger.log(`Cached packages: ${packageCount}`);
|
|
43
|
+
logger.log(`Cached builds: ${buildCount}`);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Register the clean command to clear entire temp directory
|
|
48
|
+
*/
|
|
49
|
+
export function registerCleanCommand(program) {
|
|
50
|
+
program
|
|
51
|
+
.command('clean')
|
|
52
|
+
.description('Clear the entire temp directory (.tmp/)')
|
|
53
|
+
.option('--tmp-dir <dir>', 'Custom temp directory')
|
|
54
|
+
.option('--silent', 'Suppress output')
|
|
55
|
+
.action(async (options) => {
|
|
56
|
+
const logger = createLogger({ silent: options.silent });
|
|
57
|
+
const tmpDir = options.tmpDir || getDefaultTmpRoot();
|
|
58
|
+
await fs.remove(tmpDir);
|
|
59
|
+
logger.log(`Temp directory cleared: ${tmpDir}`);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
async function countEntries(dir) {
|
|
63
|
+
if (!(await fs.pathExists(dir)))
|
|
64
|
+
return 0;
|
|
65
|
+
const entries = await fs.readdir(dir);
|
|
66
|
+
return entries.length;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/commands/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { PushCommandOptions, PushResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* CLI command handler for push command
|
|
4
|
+
*/
|
|
5
|
+
export declare function pushCommand(options: PushCommandOptions): Promise<void>;
|
|
6
|
+
export type { PushCommandOptions, PushResult };
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/push/index.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEjE;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0J5E;AA0KD,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,CAAC"}
|