@walkeros/cli 0.3.1

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 (181) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/README.md +285 -0
  3. package/dist/__tests__/bundle/bundler-integration.test.d.ts +2 -0
  4. package/dist/__tests__/bundle/bundler-integration.test.d.ts.map +1 -0
  5. package/dist/__tests__/bundle/bundler-integration.test.js +106 -0
  6. package/dist/__tests__/bundle/bundler-integration.test.js.map +1 -0
  7. package/dist/__tests__/bundle/bundler.test.d.ts +2 -0
  8. package/dist/__tests__/bundle/bundler.test.d.ts.map +1 -0
  9. package/dist/__tests__/bundle/bundler.test.js +281 -0
  10. package/dist/__tests__/bundle/bundler.test.js.map +1 -0
  11. package/dist/__tests__/bundle/programmatic.test.d.ts +2 -0
  12. package/dist/__tests__/bundle/programmatic.test.d.ts.map +1 -0
  13. package/dist/__tests__/bundle/programmatic.test.js +118 -0
  14. package/dist/__tests__/bundle/programmatic.test.js.map +1 -0
  15. package/dist/__tests__/bundle/serializer.test.d.ts +2 -0
  16. package/dist/__tests__/bundle/serializer.test.d.ts.map +1 -0
  17. package/dist/__tests__/bundle/serializer.test.js +173 -0
  18. package/dist/__tests__/bundle/serializer.test.js.map +1 -0
  19. package/dist/__tests__/bundle/template-engine.test.d.ts +2 -0
  20. package/dist/__tests__/bundle/template-engine.test.d.ts.map +1 -0
  21. package/dist/__tests__/bundle/template-engine.test.js +107 -0
  22. package/dist/__tests__/bundle/template-engine.test.js.map +1 -0
  23. package/dist/__tests__/cli-e2e.test.d.ts +8 -0
  24. package/dist/__tests__/cli-e2e.test.d.ts.map +1 -0
  25. package/dist/__tests__/cli-e2e.test.js +144 -0
  26. package/dist/__tests__/cli-e2e.test.js.map +1 -0
  27. package/dist/__tests__/cli.test.d.ts +2 -0
  28. package/dist/__tests__/cli.test.d.ts.map +1 -0
  29. package/dist/__tests__/cli.test.js +255 -0
  30. package/dist/__tests__/cli.test.js.map +1 -0
  31. package/dist/__tests__/config-loader.test.d.ts +7 -0
  32. package/dist/__tests__/config-loader.test.d.ts.map +1 -0
  33. package/dist/__tests__/config-loader.test.js +393 -0
  34. package/dist/__tests__/config-loader.test.js.map +1 -0
  35. package/dist/__tests__/core/config.test.d.ts +2 -0
  36. package/dist/__tests__/core/config.test.d.ts.map +1 -0
  37. package/dist/__tests__/core/config.test.js +72 -0
  38. package/dist/__tests__/core/config.test.js.map +1 -0
  39. package/dist/__tests__/core/logger.test.d.ts +2 -0
  40. package/dist/__tests__/core/logger.test.d.ts.map +1 -0
  41. package/dist/__tests__/core/logger.test.js +53 -0
  42. package/dist/__tests__/core/logger.test.js.map +1 -0
  43. package/dist/__tests__/simulate/programmatic.test.d.ts +2 -0
  44. package/dist/__tests__/simulate/programmatic.test.d.ts.map +1 -0
  45. package/dist/__tests__/simulate/programmatic.test.js +51 -0
  46. package/dist/__tests__/simulate/programmatic.test.js.map +1 -0
  47. package/dist/__tests__/simulate/simulator.test.d.ts +2 -0
  48. package/dist/__tests__/simulate/simulator.test.d.ts.map +1 -0
  49. package/dist/__tests__/simulate/simulator.test.js +29 -0
  50. package/dist/__tests__/simulate/simulator.test.js.map +1 -0
  51. package/dist/commands/bundle/bundler.d.ts +14 -0
  52. package/dist/commands/bundle/bundler.d.ts.map +1 -0
  53. package/dist/commands/bundle/bundler.js +372 -0
  54. package/dist/commands/bundle/bundler.js.map +1 -0
  55. package/dist/commands/bundle/index.d.ts +51 -0
  56. package/dist/commands/bundle/index.d.ts.map +1 -0
  57. package/dist/commands/bundle/index.js +200 -0
  58. package/dist/commands/bundle/index.js.map +1 -0
  59. package/dist/commands/bundle/package-manager.d.ts +7 -0
  60. package/dist/commands/bundle/package-manager.d.ts.map +1 -0
  61. package/dist/commands/bundle/package-manager.js +170 -0
  62. package/dist/commands/bundle/package-manager.js.map +1 -0
  63. package/dist/commands/bundle/serializer.d.ts +23 -0
  64. package/dist/commands/bundle/serializer.d.ts.map +1 -0
  65. package/dist/commands/bundle/serializer.js +127 -0
  66. package/dist/commands/bundle/serializer.js.map +1 -0
  67. package/dist/commands/bundle/stats.d.ts +23 -0
  68. package/dist/commands/bundle/stats.d.ts.map +1 -0
  69. package/dist/commands/bundle/stats.js +52 -0
  70. package/dist/commands/bundle/stats.js.map +1 -0
  71. package/dist/commands/bundle/template-engine.d.ts +18 -0
  72. package/dist/commands/bundle/template-engine.d.ts.map +1 -0
  73. package/dist/commands/bundle/template-engine.js +49 -0
  74. package/dist/commands/bundle/template-engine.js.map +1 -0
  75. package/dist/commands/run/__tests__/run.integration.test.d.ts +8 -0
  76. package/dist/commands/run/__tests__/run.integration.test.d.ts.map +1 -0
  77. package/dist/commands/run/__tests__/run.integration.test.js +53 -0
  78. package/dist/commands/run/__tests__/run.integration.test.js.map +1 -0
  79. package/dist/commands/run/__tests__/validators.test.d.ts +2 -0
  80. package/dist/commands/run/__tests__/validators.test.d.ts.map +1 -0
  81. package/dist/commands/run/__tests__/validators.test.js +80 -0
  82. package/dist/commands/run/__tests__/validators.test.js.map +1 -0
  83. package/dist/commands/run/index.d.ts +39 -0
  84. package/dist/commands/run/index.d.ts.map +1 -0
  85. package/dist/commands/run/index.js +251 -0
  86. package/dist/commands/run/index.js.map +1 -0
  87. package/dist/commands/run/types.d.ts +56 -0
  88. package/dist/commands/run/types.d.ts.map +1 -0
  89. package/dist/commands/run/types.js +7 -0
  90. package/dist/commands/run/types.js.map +1 -0
  91. package/dist/commands/run/validators.d.ts +29 -0
  92. package/dist/commands/run/validators.d.ts.map +1 -0
  93. package/dist/commands/run/validators.js +54 -0
  94. package/dist/commands/run/validators.js.map +1 -0
  95. package/dist/commands/simulate/index.d.ts +47 -0
  96. package/dist/commands/simulate/index.d.ts.map +1 -0
  97. package/dist/commands/simulate/index.js +121 -0
  98. package/dist/commands/simulate/index.js.map +1 -0
  99. package/dist/commands/simulate/simulator.d.ts +18 -0
  100. package/dist/commands/simulate/simulator.d.ts.map +1 -0
  101. package/dist/commands/simulate/simulator.js +236 -0
  102. package/dist/commands/simulate/simulator.js.map +1 -0
  103. package/dist/commands/simulate/tracker.d.ts +30 -0
  104. package/dist/commands/simulate/tracker.d.ts.map +1 -0
  105. package/dist/commands/simulate/tracker.js +96 -0
  106. package/dist/commands/simulate/tracker.js.map +1 -0
  107. package/dist/commands/simulate/types.d.ts +18 -0
  108. package/dist/commands/simulate/types.d.ts.map +1 -0
  109. package/dist/commands/simulate/types.js +2 -0
  110. package/dist/commands/simulate/types.js.map +1 -0
  111. package/dist/config/defaults.d.ts +33 -0
  112. package/dist/config/defaults.d.ts.map +1 -0
  113. package/dist/config/defaults.js +73 -0
  114. package/dist/config/defaults.js.map +1 -0
  115. package/dist/config/index.d.ts +14 -0
  116. package/dist/config/index.d.ts.map +1 -0
  117. package/dist/config/index.js +16 -0
  118. package/dist/config/index.js.map +1 -0
  119. package/dist/config/loader.d.ts +74 -0
  120. package/dist/config/loader.d.ts.map +1 -0
  121. package/dist/config/loader.js +136 -0
  122. package/dist/config/loader.js.map +1 -0
  123. package/dist/config/parser.d.ts +64 -0
  124. package/dist/config/parser.d.ts.map +1 -0
  125. package/dist/config/parser.js +137 -0
  126. package/dist/config/parser.js.map +1 -0
  127. package/dist/config/utils.d.ts +38 -0
  128. package/dist/config/utils.d.ts.map +1 -0
  129. package/dist/config/utils.js +66 -0
  130. package/dist/config/utils.js.map +1 -0
  131. package/dist/config/validators.d.ts +23 -0
  132. package/dist/config/validators.d.ts.map +1 -0
  133. package/dist/config/validators.js +45 -0
  134. package/dist/config/validators.js.map +1 -0
  135. package/dist/core/docker.d.ts +42 -0
  136. package/dist/core/docker.d.ts.map +1 -0
  137. package/dist/core/docker.js +114 -0
  138. package/dist/core/docker.js.map +1 -0
  139. package/dist/core/execution.d.ts +33 -0
  140. package/dist/core/execution.d.ts.map +1 -0
  141. package/dist/core/execution.js +57 -0
  142. package/dist/core/execution.js.map +1 -0
  143. package/dist/core/index.d.ts +6 -0
  144. package/dist/core/index.d.ts.map +1 -0
  145. package/dist/core/index.js +6 -0
  146. package/dist/core/index.js.map +1 -0
  147. package/dist/core/logger.d.ts +17 -0
  148. package/dist/core/logger.d.ts.map +1 -0
  149. package/dist/core/logger.js +74 -0
  150. package/dist/core/logger.js.map +1 -0
  151. package/dist/core/output.d.ts +30 -0
  152. package/dist/core/output.d.ts.map +1 -0
  153. package/dist/core/output.js +46 -0
  154. package/dist/core/output.js.map +1 -0
  155. package/dist/core/timer.d.ts +14 -0
  156. package/dist/core/timer.d.ts.map +1 -0
  157. package/dist/core/timer.js +29 -0
  158. package/dist/core/timer.js.map +1 -0
  159. package/dist/index.d.ts +614 -0
  160. package/dist/index.d.ts.map +1 -0
  161. package/dist/index.js +1940 -0
  162. package/dist/index.js.map +1 -0
  163. package/dist/types/bundle.d.ts +251 -0
  164. package/dist/types/bundle.d.ts.map +1 -0
  165. package/dist/types/bundle.js +10 -0
  166. package/dist/types/bundle.js.map +1 -0
  167. package/dist/types/global.d.ts +51 -0
  168. package/dist/types/global.d.ts.map +1 -0
  169. package/dist/types/global.js +30 -0
  170. package/dist/types/global.js.map +1 -0
  171. package/dist/types/index.d.ts +8 -0
  172. package/dist/types/index.d.ts.map +1 -0
  173. package/dist/types/index.js +8 -0
  174. package/dist/types/index.js.map +1 -0
  175. package/dist/types/template.d.ts +108 -0
  176. package/dist/types/template.d.ts.map +1 -0
  177. package/dist/types/template.js +10 -0
  178. package/dist/types/template.js.map +1 -0
  179. package/package.json +59 -0
  180. package/templates/base.hbs +44 -0
  181. package/templates/server.hbs +29 -0
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Bundle Command
3
+ *
4
+ * Supports both single-environment and multi-environment builds.
5
+ */
6
+ import path from 'path';
7
+ import { createLogger, createTimer, createSuccessOutput, createErrorOutput, executeCommand, } from '../../core';
8
+ import { loadJsonConfig, loadBundleConfig, loadAllEnvironments, parseBundleConfig, } from '../../config';
9
+ import { bundleCore } from './bundler';
10
+ import { displayStats } from './stats';
11
+ export async function bundleCommand(options) {
12
+ const timer = createTimer();
13
+ timer.start();
14
+ const logger = createLogger({
15
+ verbose: options.verbose,
16
+ silent: options.silent ?? false,
17
+ json: options.json,
18
+ });
19
+ // Build Docker args
20
+ const dockerArgs = [options.config];
21
+ if (options.env)
22
+ dockerArgs.push('--env', options.env);
23
+ if (options.all)
24
+ dockerArgs.push('--all');
25
+ if (options.stats)
26
+ dockerArgs.push('--stats');
27
+ if (options.json)
28
+ dockerArgs.push('--json');
29
+ if (options.cache === false)
30
+ dockerArgs.push('--no-cache');
31
+ if (options.verbose)
32
+ dockerArgs.push('--verbose');
33
+ if (options.silent)
34
+ dockerArgs.push('--silent');
35
+ await executeCommand(async () => {
36
+ try {
37
+ // Validate flag combination
38
+ if (options.env && options.all) {
39
+ throw new Error('Cannot use both --env and --all flags together');
40
+ }
41
+ // Step 1: Read configuration file
42
+ logger.info('šŸ“¦ Reading configuration...');
43
+ const configPath = path.resolve(options.config);
44
+ const rawConfig = await loadJsonConfig(configPath);
45
+ // Step 2: Load configuration(s) based on flags
46
+ const configsToBundle = options.all
47
+ ? loadAllEnvironments(rawConfig, { configPath, logger })
48
+ : [
49
+ loadBundleConfig(rawConfig, {
50
+ configPath,
51
+ environment: options.env,
52
+ logger,
53
+ }),
54
+ ];
55
+ // Step 3: Bundle each configuration
56
+ const results = [];
57
+ for (const { flowConfig, buildOptions, environment, isMultiEnvironment, } of configsToBundle) {
58
+ try {
59
+ // Override cache setting from CLI if provided
60
+ if (options.cache !== undefined) {
61
+ buildOptions.cache = options.cache;
62
+ }
63
+ // Log environment being built (for multi-environment setups)
64
+ if (isMultiEnvironment || options.all) {
65
+ logger.info(`\nšŸ”§ Building environment: ${environment}`);
66
+ }
67
+ else {
68
+ logger.info('šŸ”§ Starting bundle process...');
69
+ }
70
+ // Run bundler
71
+ const shouldCollectStats = options.stats || options.json;
72
+ const stats = await bundleCore(flowConfig, buildOptions, logger, shouldCollectStats);
73
+ results.push({
74
+ environment,
75
+ success: true,
76
+ stats,
77
+ });
78
+ // Show stats if requested (for non-JSON, non-multi builds)
79
+ if (!options.json && !options.all && options.stats && stats) {
80
+ displayStats(stats, logger);
81
+ }
82
+ }
83
+ catch (error) {
84
+ const errorMessage = error instanceof Error ? error.message : String(error);
85
+ results.push({
86
+ environment,
87
+ success: false,
88
+ error: errorMessage,
89
+ });
90
+ if (!options.all) {
91
+ throw error; // Re-throw for single environment builds
92
+ }
93
+ }
94
+ }
95
+ // Step 4: Report results
96
+ const duration = timer.end() / 1000;
97
+ const successCount = results.filter((r) => r.success).length;
98
+ const failureCount = results.filter((r) => !r.success).length;
99
+ if (options.json) {
100
+ // JSON output for CI/CD
101
+ const outputLogger = createLogger({ silent: false, json: false });
102
+ const output = failureCount === 0
103
+ ? createSuccessOutput({
104
+ environments: results,
105
+ summary: {
106
+ total: results.length,
107
+ success: successCount,
108
+ failed: failureCount,
109
+ },
110
+ }, duration)
111
+ : createErrorOutput(`${failureCount} environment(s) failed to build`, duration);
112
+ outputLogger.log('white', JSON.stringify(output, null, 2));
113
+ }
114
+ else {
115
+ if (options.all) {
116
+ logger.info(`\nšŸ“Š Build Summary:`);
117
+ logger.info(` Total: ${results.length}`);
118
+ logger.success(` āœ… Success: ${successCount}`);
119
+ if (failureCount > 0) {
120
+ logger.error(` āŒ Failed: ${failureCount}`);
121
+ }
122
+ }
123
+ if (failureCount === 0) {
124
+ logger.success(`\nāœ… Bundle created successfully in ${timer.format()}`);
125
+ }
126
+ else {
127
+ throw new Error(`${failureCount} environment(s) failed to build`);
128
+ }
129
+ }
130
+ }
131
+ catch (error) {
132
+ const duration = timer.getElapsed() / 1000;
133
+ const errorMessage = error instanceof Error ? error.message : String(error);
134
+ if (options.json) {
135
+ // JSON error output for CI/CD
136
+ const outputLogger = createLogger({ silent: false, json: false });
137
+ const output = createErrorOutput(errorMessage, duration);
138
+ outputLogger.log('white', JSON.stringify(output, null, 2));
139
+ }
140
+ else {
141
+ logger.error('āŒ Bundle failed:');
142
+ logger.error(errorMessage);
143
+ }
144
+ process.exit(1);
145
+ }
146
+ }, 'bundle', dockerArgs, options, logger);
147
+ }
148
+ /**
149
+ * High-level bundle function for programmatic usage.
150
+ *
151
+ * Handles configuration loading, parsing, and logger creation internally.
152
+ *
153
+ * @param configOrPath - Bundle configuration object or path to config file
154
+ * @param options - Bundle options
155
+ * @param options.silent - Suppress all output (default: false)
156
+ * @param options.verbose - Enable verbose logging (default: false)
157
+ * @param options.stats - Collect and return bundle statistics (default: false)
158
+ * @param options.cache - Enable package caching (default: true)
159
+ * @returns Bundle statistics if stats option is true, otherwise void
160
+ *
161
+ * @example
162
+ * ```typescript
163
+ * // With config object
164
+ * await bundle({
165
+ * platform: 'web',
166
+ * packages: { '@walkeros/collector': { imports: ['startFlow'] } },
167
+ * sources: { browser: { code: 'sourceBrowser' } },
168
+ * destinations: { api: { code: 'destinationApi' } },
169
+ * code: 'export default startFlow({ sources, destinations })',
170
+ * output: './dist/walker.js'
171
+ * });
172
+ *
173
+ * // With config file
174
+ * await bundle('./walker.config.json', { stats: true });
175
+ * ```
176
+ */
177
+ export async function bundle(configOrPath, options = {}) {
178
+ // 1. Load config if path provided
179
+ let rawConfig;
180
+ if (typeof configOrPath === 'string') {
181
+ rawConfig = await loadJsonConfig(configOrPath);
182
+ }
183
+ else {
184
+ rawConfig = configOrPath;
185
+ }
186
+ // 2. Parse and normalize config
187
+ const { flowConfig, buildOptions } = parseBundleConfig(rawConfig);
188
+ // 3. Handle cache option
189
+ if (options.cache !== undefined) {
190
+ buildOptions.cache = options.cache;
191
+ }
192
+ // 4. Create logger internally
193
+ const logger = createLogger({
194
+ silent: options.silent ?? false,
195
+ verbose: options.verbose ?? false,
196
+ });
197
+ // 5. Call core bundler
198
+ return await bundleCore(flowConfig, buildOptions, logger, options.stats ?? false);
199
+ }
200
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/bundle/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Logger } from '../../core';
2
+ export interface Package {
3
+ name: string;
4
+ version: string;
5
+ }
6
+ export declare function downloadPackages(packages: Package[], targetDir: string, logger: Logger, useCache?: boolean): Promise<Map<string, string>>;
7
+ //# 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,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AA6GD,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,OAAO,EAAE,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,UAAO,GACd,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAmG9B"}
@@ -0,0 +1,170 @@
1
+ import pacote from 'pacote';
2
+ import path from 'path';
3
+ import fs from 'fs-extra';
4
+ /**
5
+ * Gets the proper node_modules directory path for a package.
6
+ * Creates standard npm structure: node_modules/@scope/package or node_modules/package
7
+ * Supports multiple versions by appending version to non-scoped packages if needed.
8
+ *
9
+ * @example
10
+ * getPackageDirectory('node_modules', '@walkeros/core', '0.2.0')
11
+ * // → 'node_modules/@walkeros/core'
12
+ *
13
+ * getPackageDirectory('node_modules', 'lodash', '4.17.21')
14
+ * // → 'node_modules/lodash'
15
+ */
16
+ function getPackageDirectory(baseDir, packageName, version) {
17
+ // For scoped packages like @walkeros/core, preserve the scope structure
18
+ // This creates: node_modules/@walkeros/core (standard npm structure)
19
+ return path.join(baseDir, 'node_modules', packageName);
20
+ }
21
+ function getCachedPackagePath(pkg, tempDir) {
22
+ const cacheDir = path.join('.tmp', 'cache', 'packages');
23
+ // Use safe file system name for cache (replace / with -)
24
+ const safeName = pkg.name.replace(/\//g, '-').replace(/@/g, '');
25
+ return path.join(cacheDir, `${safeName}-${pkg.version}`);
26
+ }
27
+ async function isPackageCached(pkg, tempDir) {
28
+ const cachedPath = getCachedPackagePath(pkg, tempDir);
29
+ return fs.pathExists(cachedPath);
30
+ }
31
+ function validateNoDuplicatePackages(packages) {
32
+ const packageMap = new Map();
33
+ // Group packages by name and collect their versions
34
+ for (const pkg of packages) {
35
+ if (!packageMap.has(pkg.name)) {
36
+ packageMap.set(pkg.name, []);
37
+ }
38
+ packageMap.get(pkg.name).push(pkg.version);
39
+ }
40
+ // Check for duplicate packages with different versions
41
+ const conflicts = [];
42
+ for (const [name, versions] of packageMap.entries()) {
43
+ const uniqueVersions = [...new Set(versions)];
44
+ if (uniqueVersions.length > 1) {
45
+ conflicts.push(`${name}: [${uniqueVersions.join(', ')}]`);
46
+ }
47
+ }
48
+ if (conflicts.length > 0) {
49
+ throw new Error(`Version conflicts detected:\n${conflicts.map((c) => ` - ${c}`).join('\n')}\n\n` +
50
+ 'Each package must use the same version across all declarations. ' +
51
+ 'Please update your configuration to use consistent versions.');
52
+ }
53
+ }
54
+ /**
55
+ * Recursively resolve and download package dependencies
56
+ */
57
+ async function resolveDependencies(pkg, packageDir, logger, visited = new Set()) {
58
+ const dependencies = [];
59
+ const pkgKey = `${pkg.name}@${pkg.version}`;
60
+ if (visited.has(pkgKey)) {
61
+ return dependencies;
62
+ }
63
+ visited.add(pkgKey);
64
+ try {
65
+ const packageJsonPath = path.join(packageDir, 'package.json');
66
+ if (await fs.pathExists(packageJsonPath)) {
67
+ const packageJson = await fs.readJson(packageJsonPath);
68
+ const deps = {
69
+ ...packageJson.dependencies,
70
+ ...packageJson.peerDependencies,
71
+ };
72
+ for (const [name, versionSpec] of Object.entries(deps)) {
73
+ if (typeof versionSpec === 'string') {
74
+ // Use the version spec as-is (pacote will resolve it)
75
+ // This respects the package.json dependency requirements
76
+ dependencies.push({ name, version: versionSpec });
77
+ }
78
+ }
79
+ }
80
+ }
81
+ catch (error) {
82
+ logger.debug(`Failed to read dependencies for ${pkgKey}: ${error}`);
83
+ }
84
+ return dependencies;
85
+ }
86
+ export async function downloadPackages(packages, targetDir, logger, useCache = true) {
87
+ const packagePaths = new Map();
88
+ const downloadQueue = [...packages];
89
+ const processed = new Set();
90
+ // Validate no duplicate packages with different versions in initial list
91
+ validateNoDuplicatePackages(packages);
92
+ // Ensure target directory exists
93
+ await fs.ensureDir(targetDir);
94
+ while (downloadQueue.length > 0) {
95
+ const pkg = downloadQueue.shift();
96
+ const pkgKey = `${pkg.name}@${pkg.version}`;
97
+ if (processed.has(pkgKey)) {
98
+ continue;
99
+ }
100
+ processed.add(pkgKey);
101
+ const packageSpec = `${pkg.name}@${pkg.version}`;
102
+ // Use proper node_modules structure: node_modules/@scope/package
103
+ const packageDir = getPackageDirectory(targetDir, pkg.name, pkg.version);
104
+ const cachedPath = getCachedPackagePath(pkg, targetDir);
105
+ if (useCache && (await isPackageCached(pkg, targetDir))) {
106
+ logger.debug(`Using cached ${packageSpec}...`);
107
+ try {
108
+ // Ensure parent directories exist for scoped packages (@scope/package)
109
+ await fs.ensureDir(path.dirname(packageDir));
110
+ await fs.copy(cachedPath, packageDir);
111
+ packagePaths.set(pkg.name, packageDir);
112
+ // Resolve and queue dependencies for cached package too
113
+ const deps = await resolveDependencies(pkg, packageDir, logger);
114
+ for (const dep of deps) {
115
+ const depKey = `${dep.name}@${dep.version}`;
116
+ if (!processed.has(depKey)) {
117
+ downloadQueue.push(dep);
118
+ }
119
+ }
120
+ continue;
121
+ }
122
+ catch (error) {
123
+ logger.debug(`Failed to use cache for ${packageSpec}, downloading fresh: ${error}`);
124
+ }
125
+ }
126
+ logger.debug(`Downloading ${packageSpec}...`);
127
+ try {
128
+ // Ensure parent directories exist for scoped packages (@scope/package)
129
+ await fs.ensureDir(path.dirname(packageDir));
130
+ // Extract package to proper node_modules structure
131
+ // Use environment variable for cache location (Docker-friendly)
132
+ const cacheDir = process.env.NPM_CACHE_DIR || path.join(process.cwd(), '.npm-cache');
133
+ await pacote.extract(packageSpec, packageDir, {
134
+ // Force npm registry download, prevent workspace resolution
135
+ registry: 'https://registry.npmjs.org',
136
+ // Force online fetching from registry (don't use cached workspace packages)
137
+ preferOnline: true,
138
+ // Cache for performance
139
+ cache: cacheDir,
140
+ // Don't resolve relative to workspace context
141
+ where: undefined,
142
+ });
143
+ // Cache the downloaded package for future use
144
+ if (useCache) {
145
+ try {
146
+ await fs.ensureDir(path.dirname(cachedPath));
147
+ await fs.copy(packageDir, cachedPath);
148
+ logger.debug(`Cached ${packageSpec} for future use`);
149
+ }
150
+ catch (cacheError) {
151
+ logger.debug(`Failed to cache ${packageSpec}: ${cacheError}`);
152
+ }
153
+ }
154
+ packagePaths.set(pkg.name, packageDir);
155
+ // Resolve and queue dependencies
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
+ }
164
+ catch (error) {
165
+ throw new Error(`Failed to download ${packageSpec}: ${error}`);
166
+ }
167
+ }
168
+ return packagePaths;
169
+ }
170
+ //# 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
+ /**
2
+ * JSON to JavaScript serializer for config objects
3
+ * Converts JSON objects to valid JavaScript code for use in templates
4
+ */
5
+ import type { ProcessedTemplateVariables } from '../../types/template';
6
+ export interface SerializerOptions {
7
+ indent?: number;
8
+ singleQuotes?: boolean;
9
+ }
10
+ /**
11
+ * Serialize a value to JavaScript code
12
+ */
13
+ export declare function serializeToJS(value: unknown, options?: SerializerOptions): string;
14
+ /**
15
+ * Serialize config object for template usage
16
+ * Handles special cases for walkerOS configurations
17
+ */
18
+ export declare function serializeConfig(config: Record<string, unknown>): string;
19
+ /**
20
+ * Process template variables to serialize config objects
21
+ */
22
+ export declare function processTemplateVariables(variables: Record<string, unknown>): ProcessedTemplateVariables;
23
+ //# sourceMappingURL=serializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../../src/commands/bundle/serializer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAGV,0BAA0B,EAC3B,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,iBAAsB,GAC9B,MAAM,CAyER;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAOvE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,0BAA0B,CAmD5B"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * JSON to JavaScript serializer for config objects
3
+ * Converts JSON objects to valid JavaScript code for use in templates
4
+ */
5
+ import { isObject } from '../../config';
6
+ /**
7
+ * Serialize a value to JavaScript code
8
+ */
9
+ export function serializeToJS(value, options = {}) {
10
+ const { indent = 2, singleQuotes = false } = options;
11
+ const quote = singleQuotes ? "'" : '"';
12
+ function serialize(val, currentIndent = 0) {
13
+ if (val === null)
14
+ return 'null';
15
+ if (val === undefined)
16
+ return 'undefined';
17
+ if (typeof val === 'boolean' || typeof val === 'number') {
18
+ return String(val);
19
+ }
20
+ if (typeof val === 'string') {
21
+ // Check if string contains arrow function syntax
22
+ if (val.includes('=>')) {
23
+ // More comprehensive check for arrow function patterns
24
+ const arrowPatterns = [
25
+ /^\s*\([^)]*\)\s*=>/, // (param) => or () =>
26
+ /^\s*\w+\s*=>/, // param =>
27
+ /^\s*\([^)]*\)\s*=>\s*\{/, // (param) => {
28
+ /^\s*\w+\s*=>\s*\{/, // param => {
29
+ ];
30
+ if (arrowPatterns.some((pattern) => pattern.test(val))) {
31
+ // Likely a function - return as-is without quotes
32
+ return val;
33
+ }
34
+ }
35
+ // Regular string - escape and quote
36
+ return (quote +
37
+ val.replace(/\\/g, '\\\\').replace(/'/g, "\\'").replace(/"/g, '\\"') +
38
+ quote);
39
+ }
40
+ if (Array.isArray(val)) {
41
+ if (val.length === 0)
42
+ return '[]';
43
+ const nextIndent = currentIndent + indent;
44
+ const spacing = ' '.repeat(nextIndent);
45
+ const items = val
46
+ .map((item) => spacing + serialize(item, nextIndent))
47
+ .join(',\n');
48
+ return `[\n${items}\n${' '.repeat(currentIndent)}]`;
49
+ }
50
+ if (isObject(val)) {
51
+ const entries = Object.entries(val);
52
+ if (entries.length === 0)
53
+ return '{}';
54
+ const nextIndent = currentIndent + indent;
55
+ const spacing = ' '.repeat(nextIndent);
56
+ const props = entries
57
+ .map(([key, value]) => {
58
+ // Check if key needs quotes (contains special characters or starts with number)
59
+ const needsQuotes = /[^a-zA-Z0-9_$]/.test(key) || /^[0-9]/.test(key);
60
+ const keyStr = needsQuotes ? quote + key + quote : key;
61
+ return spacing + keyStr + ': ' + serialize(value, nextIndent);
62
+ })
63
+ .join(',\n');
64
+ return `{\n${props}\n${' '.repeat(currentIndent)}}`;
65
+ }
66
+ // Fallback for other types
67
+ return String(val);
68
+ }
69
+ return serialize(value);
70
+ }
71
+ /**
72
+ * Serialize config object for template usage
73
+ * Handles special cases for walkerOS configurations
74
+ */
75
+ export function serializeConfig(config) {
76
+ // Handle empty config
77
+ if (!config || Object.keys(config).length === 0) {
78
+ return '{}';
79
+ }
80
+ return serializeToJS(config, { indent: 2, singleQuotes: true });
81
+ }
82
+ /**
83
+ * Process template variables to serialize config objects
84
+ */
85
+ export function processTemplateVariables(variables) {
86
+ const processed = { ...variables };
87
+ // Process sources object
88
+ if (isObject(processed.sources)) {
89
+ const sourcesObj = processed.sources;
90
+ const processedSources = {};
91
+ for (const [name, source] of Object.entries(sourcesObj)) {
92
+ const typedSource = source;
93
+ const { env: _, ...sourceWithoutEnv } = typedSource;
94
+ processedSources[name] = {
95
+ ...sourceWithoutEnv,
96
+ config: isObject(typedSource.config)
97
+ ? serializeConfig(typedSource.config)
98
+ : typedSource.config, // Pass through string configs unchanged
99
+ ...(typedSource.env !== undefined && { env: typedSource.env }),
100
+ };
101
+ }
102
+ processed.sources = processedSources;
103
+ }
104
+ // Process destinations object
105
+ if (isObject(processed.destinations)) {
106
+ const destinationsObj = processed.destinations;
107
+ const processedDestinations = {};
108
+ for (const [name, dest] of Object.entries(destinationsObj)) {
109
+ const typedDest = dest;
110
+ const { env: _, ...destWithoutEnv } = typedDest;
111
+ processedDestinations[name] = {
112
+ ...destWithoutEnv,
113
+ config: isObject(typedDest.config)
114
+ ? serializeConfig(typedDest.config)
115
+ : typedDest.config,
116
+ ...(typedDest.env !== undefined && { env: typedDest.env }),
117
+ };
118
+ }
119
+ processed.destinations = processedDestinations;
120
+ }
121
+ // Process collector object (if present)
122
+ if (isObject(processed.collector)) {
123
+ processed.collector = serializeConfig(processed.collector);
124
+ }
125
+ return processed;
126
+ }
127
+ //# sourceMappingURL=serializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializer.js","sourceRoot":"","sources":["../../../src/commands/bundle/serializer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { BundleStats } from './bundler';
2
+ import type { Logger } from '../../core';
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,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC;;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';
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,YAAY,CAAC;AAIzC;;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"}