@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.
- package/CHANGELOG.md +45 -0
- package/README.md +285 -0
- package/dist/__tests__/bundle/bundler-integration.test.d.ts +2 -0
- package/dist/__tests__/bundle/bundler-integration.test.d.ts.map +1 -0
- package/dist/__tests__/bundle/bundler-integration.test.js +106 -0
- package/dist/__tests__/bundle/bundler-integration.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 +281 -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 +118 -0
- package/dist/__tests__/bundle/programmatic.test.js.map +1 -0
- package/dist/__tests__/bundle/serializer.test.d.ts +2 -0
- package/dist/__tests__/bundle/serializer.test.d.ts.map +1 -0
- package/dist/__tests__/bundle/serializer.test.js +173 -0
- package/dist/__tests__/bundle/serializer.test.js.map +1 -0
- package/dist/__tests__/bundle/template-engine.test.d.ts +2 -0
- package/dist/__tests__/bundle/template-engine.test.d.ts.map +1 -0
- package/dist/__tests__/bundle/template-engine.test.js +107 -0
- package/dist/__tests__/bundle/template-engine.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 +144 -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 +255 -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 +393 -0
- package/dist/__tests__/config-loader.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 +72 -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__/simulate/programmatic.test.d.ts +2 -0
- package/dist/__tests__/simulate/programmatic.test.d.ts.map +1 -0
- package/dist/__tests__/simulate/programmatic.test.js +51 -0
- package/dist/__tests__/simulate/programmatic.test.js.map +1 -0
- package/dist/__tests__/simulate/simulator.test.d.ts +2 -0
- package/dist/__tests__/simulate/simulator.test.d.ts.map +1 -0
- package/dist/__tests__/simulate/simulator.test.js +29 -0
- package/dist/__tests__/simulate/simulator.test.js.map +1 -0
- package/dist/commands/bundle/bundler.d.ts +14 -0
- package/dist/commands/bundle/bundler.d.ts.map +1 -0
- package/dist/commands/bundle/bundler.js +372 -0
- package/dist/commands/bundle/bundler.js.map +1 -0
- package/dist/commands/bundle/index.d.ts +51 -0
- package/dist/commands/bundle/index.d.ts.map +1 -0
- package/dist/commands/bundle/index.js +200 -0
- package/dist/commands/bundle/index.js.map +1 -0
- package/dist/commands/bundle/package-manager.d.ts +7 -0
- package/dist/commands/bundle/package-manager.d.ts.map +1 -0
- package/dist/commands/bundle/package-manager.js +170 -0
- package/dist/commands/bundle/package-manager.js.map +1 -0
- package/dist/commands/bundle/serializer.d.ts +23 -0
- package/dist/commands/bundle/serializer.d.ts.map +1 -0
- package/dist/commands/bundle/serializer.js +127 -0
- package/dist/commands/bundle/serializer.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/bundle/template-engine.d.ts +18 -0
- package/dist/commands/bundle/template-engine.d.ts.map +1 -0
- package/dist/commands/bundle/template-engine.js +49 -0
- package/dist/commands/bundle/template-engine.js.map +1 -0
- package/dist/commands/run/__tests__/run.integration.test.d.ts +8 -0
- package/dist/commands/run/__tests__/run.integration.test.d.ts.map +1 -0
- package/dist/commands/run/__tests__/run.integration.test.js +53 -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/index.d.ts +39 -0
- package/dist/commands/run/index.d.ts.map +1 -0
- package/dist/commands/run/index.js +251 -0
- package/dist/commands/run/index.js.map +1 -0
- package/dist/commands/run/types.d.ts +56 -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/validators.d.ts +29 -0
- package/dist/commands/run/validators.d.ts.map +1 -0
- package/dist/commands/run/validators.js +54 -0
- package/dist/commands/run/validators.js.map +1 -0
- package/dist/commands/simulate/index.d.ts +47 -0
- package/dist/commands/simulate/index.d.ts.map +1 -0
- package/dist/commands/simulate/index.js +121 -0
- package/dist/commands/simulate/index.js.map +1 -0
- package/dist/commands/simulate/simulator.d.ts +18 -0
- package/dist/commands/simulate/simulator.d.ts.map +1 -0
- package/dist/commands/simulate/simulator.js +236 -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 +18 -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/defaults.d.ts +33 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +73 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +14 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +16 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +74 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +136 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/parser.d.ts +64 -0
- package/dist/config/parser.d.ts.map +1 -0
- package/dist/config/parser.js +137 -0
- package/dist/config/parser.js.map +1 -0
- package/dist/config/utils.d.ts +38 -0
- package/dist/config/utils.d.ts.map +1 -0
- package/dist/config/utils.js +66 -0
- package/dist/config/utils.js.map +1 -0
- package/dist/config/validators.d.ts +23 -0
- package/dist/config/validators.d.ts.map +1 -0
- package/dist/config/validators.js +45 -0
- package/dist/config/validators.js.map +1 -0
- package/dist/core/docker.d.ts +42 -0
- package/dist/core/docker.d.ts.map +1 -0
- package/dist/core/docker.js +114 -0
- package/dist/core/docker.js.map +1 -0
- package/dist/core/execution.d.ts +33 -0
- package/dist/core/execution.d.ts.map +1 -0
- package/dist/core/execution.js +57 -0
- package/dist/core/execution.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/logger.d.ts +17 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +74 -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/index.d.ts +614 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1940 -0
- package/dist/index.js.map +1 -0
- package/dist/types/bundle.d.ts +251 -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 +51 -0
- package/dist/types/global.d.ts.map +1 -0
- package/dist/types/global.js +30 -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/types/template.d.ts +108 -0
- package/dist/types/template.d.ts.map +1 -0
- package/dist/types/template.js +10 -0
- package/dist/types/template.js.map +1 -0
- package/package.json +59 -0
- package/templates/base.hbs +44 -0
- package/templates/server.hbs +29 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { simulateCore as simulate } from '../../commands/simulate/simulator';
|
|
3
|
+
// Mock package-manager to avoid network calls and return empty results
|
|
4
|
+
jest.mock('../../commands/bundle/package-manager', () => ({
|
|
5
|
+
downloadPackages: jest.fn().mockResolvedValue(new Map()),
|
|
6
|
+
}));
|
|
7
|
+
describe('Simulate', () => {
|
|
8
|
+
it('should handle package manager errors gracefully', async () => {
|
|
9
|
+
const configPath = path.resolve(__dirname, '../../../examples/web-serve.json');
|
|
10
|
+
const event = { name: 'product view', data: { id: 'P123' } };
|
|
11
|
+
const result = await simulate(configPath, event, {
|
|
12
|
+
json: true,
|
|
13
|
+
verbose: true,
|
|
14
|
+
});
|
|
15
|
+
// With mocked packages that return empty map, this will fail to bundle
|
|
16
|
+
// but should fail gracefully without crashing
|
|
17
|
+
expect(result).toBeDefined();
|
|
18
|
+
expect(typeof result).toBe('object');
|
|
19
|
+
expect(typeof result.success).toBe('boolean');
|
|
20
|
+
// Either succeeds or fails gracefully
|
|
21
|
+
if (result.success) {
|
|
22
|
+
expect(result.error).toBeUndefined();
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
expect(typeof result.error).toBe('string');
|
|
26
|
+
}
|
|
27
|
+
}, 30000);
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=simulator.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simulator.test.js","sourceRoot":"","sources":["../../../src/__tests__/simulate/simulator.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,YAAY,IAAI,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAG7E,uEAAuE;AACvE,IAAI,CAAC,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE,CAAC,CAAC;IACxD,gBAAgB,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,GAAG,EAAE,CAAC;CACzD,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAC7B,SAAS,EACT,kCAAkC,CACnC,CAAC;QACF,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC;QAE7D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE;YAC/C,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,uEAAuE;QACvE,8CAA8C;QAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7B,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE9C,sCAAsC;QACtC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,EAAE,KAAK,CAAC,CAAC;AACZ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Flow } from '@walkeros/core';
|
|
2
|
+
import type { BuildOptions } from '../../types/bundle';
|
|
3
|
+
import type { Logger } from '../../core';
|
|
4
|
+
export interface BundleStats {
|
|
5
|
+
totalSize: number;
|
|
6
|
+
packages: {
|
|
7
|
+
name: string;
|
|
8
|
+
size: number;
|
|
9
|
+
}[];
|
|
10
|
+
buildTime: number;
|
|
11
|
+
treeshakingEffective: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function bundleCore(flowConfig: Flow.Config, buildOptions: BuildOptions, logger: Logger, showStats?: boolean): Promise<BundleStats | void>;
|
|
14
|
+
//# sourceMappingURL=bundler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundler.d.ts","sourceRoot":"","sources":["../../../src/commands/bundle/bundler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,wBAAsB,UAAU,CAC9B,UAAU,EAAE,IAAI,CAAC,MAAM,EACvB,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,SAAS,UAAQ,GAChB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CA6H7B"}
|
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
import esbuild from 'esbuild';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
import { downloadPackages } from './package-manager';
|
|
5
|
+
import { TemplateEngine } from './template-engine';
|
|
6
|
+
import { getTempDir } from '../../config';
|
|
7
|
+
export async function bundleCore(flowConfig, buildOptions, logger, showStats = false) {
|
|
8
|
+
const bundleStartTime = Date.now();
|
|
9
|
+
// Only generate a new temp dir if one isn't explicitly provided
|
|
10
|
+
// This allows simulator to share its temp dir with the bundler
|
|
11
|
+
// Ensure TEMP_DIR is always absolute (esbuild requirement)
|
|
12
|
+
const TEMP_DIR = buildOptions.tempDir
|
|
13
|
+
? path.isAbsolute(buildOptions.tempDir)
|
|
14
|
+
? buildOptions.tempDir
|
|
15
|
+
: path.resolve(buildOptions.tempDir)
|
|
16
|
+
: getTempDir();
|
|
17
|
+
try {
|
|
18
|
+
// Step 1: Prepare temporary directory
|
|
19
|
+
// Only clean if we created a new temp dir (don't clean shared simulator temp)
|
|
20
|
+
if (!buildOptions.tempDir) {
|
|
21
|
+
await fs.emptyDir(TEMP_DIR);
|
|
22
|
+
}
|
|
23
|
+
logger.debug('Cleaned temporary directory');
|
|
24
|
+
// Step 2: Download packages
|
|
25
|
+
logger.info('📥 Downloading packages...');
|
|
26
|
+
// Convert packages object to array format expected by downloadPackages
|
|
27
|
+
const packagesArray = Object.entries(buildOptions.packages).map(([name, packageConfig]) => ({
|
|
28
|
+
name,
|
|
29
|
+
version: packageConfig.version || 'latest',
|
|
30
|
+
}));
|
|
31
|
+
// downloadPackages adds 'node_modules' subdirectory automatically
|
|
32
|
+
const packagePaths = await downloadPackages(packagesArray, TEMP_DIR, logger, buildOptions.cache);
|
|
33
|
+
// Fix @walkeros packages to have proper ESM exports
|
|
34
|
+
// This ensures Node resolves to .mjs files instead of .js (CJS)
|
|
35
|
+
for (const [pkgName, pkgPath] of packagePaths.entries()) {
|
|
36
|
+
if (pkgName.startsWith('@walkeros/')) {
|
|
37
|
+
const pkgJsonPath = path.join(pkgPath, 'package.json');
|
|
38
|
+
const pkgJson = await fs.readJSON(pkgJsonPath);
|
|
39
|
+
// Add exports field to force ESM resolution
|
|
40
|
+
if (!pkgJson.exports && pkgJson.module) {
|
|
41
|
+
pkgJson.exports = {
|
|
42
|
+
'.': {
|
|
43
|
+
import: pkgJson.module,
|
|
44
|
+
require: pkgJson.main,
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
await fs.writeJSON(pkgJsonPath, pkgJson, { spaces: 2 });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Step 3: Create package.json to enable ESM in temp directory
|
|
52
|
+
// This ensures Node treats all .js files as ESM and resolves @walkeros packages correctly
|
|
53
|
+
const packageJsonPath = path.join(TEMP_DIR, 'package.json');
|
|
54
|
+
await fs.writeFile(packageJsonPath, JSON.stringify({ type: 'module' }, null, 2));
|
|
55
|
+
// Step 4: Create entry point
|
|
56
|
+
logger.info('📝 Creating entry point...');
|
|
57
|
+
const entryContent = await createEntryPoint(flowConfig, buildOptions, packagePaths);
|
|
58
|
+
const entryPath = path.join(TEMP_DIR, 'entry.js');
|
|
59
|
+
await fs.writeFile(entryPath, entryContent);
|
|
60
|
+
// Step 4: Bundle with esbuild
|
|
61
|
+
logger.info('⚡ Bundling with esbuild...');
|
|
62
|
+
const outputPath = path.resolve(buildOptions.output);
|
|
63
|
+
// Ensure output directory exists
|
|
64
|
+
await fs.ensureDir(path.dirname(outputPath));
|
|
65
|
+
const esbuildOptions = createEsbuildOptions(buildOptions, entryPath, outputPath, TEMP_DIR, packagePaths, logger);
|
|
66
|
+
try {
|
|
67
|
+
await esbuild.build(esbuildOptions);
|
|
68
|
+
}
|
|
69
|
+
catch (buildError) {
|
|
70
|
+
// Enhanced error handling for build failures
|
|
71
|
+
throw createBuildError(buildError, buildOptions.code);
|
|
72
|
+
}
|
|
73
|
+
logger.gray(`Output: ${outputPath}`);
|
|
74
|
+
// Step 5: Collect stats if requested
|
|
75
|
+
let stats;
|
|
76
|
+
if (showStats) {
|
|
77
|
+
stats = await collectBundleStats(outputPath, buildOptions.packages, bundleStartTime, entryContent);
|
|
78
|
+
}
|
|
79
|
+
// Step 6: Cleanup
|
|
80
|
+
// Only cleanup if we created our own temp dir (not shared with simulator)
|
|
81
|
+
if (!buildOptions.tempDir) {
|
|
82
|
+
await fs.remove(TEMP_DIR);
|
|
83
|
+
logger.debug('Cleaned up temporary files');
|
|
84
|
+
}
|
|
85
|
+
return stats;
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
// Cleanup on error (only if we created our own temp dir)
|
|
89
|
+
if (!buildOptions.tempDir) {
|
|
90
|
+
await fs.remove(TEMP_DIR).catch(() => { });
|
|
91
|
+
}
|
|
92
|
+
throw error;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async function collectBundleStats(outputPath, packages, startTime, entryContent) {
|
|
96
|
+
const stats = await fs.stat(outputPath);
|
|
97
|
+
const totalSize = stats.size;
|
|
98
|
+
const buildTime = Date.now() - startTime;
|
|
99
|
+
// Estimate package sizes by analyzing imports in entry content
|
|
100
|
+
const packageStats = Object.entries(packages).map(([name, pkg]) => {
|
|
101
|
+
const importPattern = new RegExp(`from\\s+['"]${name}['"]`, 'g');
|
|
102
|
+
const namedImportPattern = new RegExp(`import\\s+\\{[^}]*\\}\\s+from\\s+['"]${name}['"]`, 'g');
|
|
103
|
+
const hasImports = importPattern.test(entryContent) || namedImportPattern.test(entryContent);
|
|
104
|
+
// Rough estimation: if package is imported, assign proportional size
|
|
105
|
+
const packagesCount = Object.keys(packages).length;
|
|
106
|
+
const estimatedSize = hasImports
|
|
107
|
+
? Math.floor(totalSize / packagesCount)
|
|
108
|
+
: 0;
|
|
109
|
+
return {
|
|
110
|
+
name: `${name}@${pkg.version || 'latest'}`,
|
|
111
|
+
size: estimatedSize,
|
|
112
|
+
};
|
|
113
|
+
});
|
|
114
|
+
// Tree-shaking is effective if we use named imports (not wildcard imports)
|
|
115
|
+
const hasWildcardImports = /import\s+\*\s+as\s+\w+\s+from/.test(entryContent);
|
|
116
|
+
const treeshakingEffective = !hasWildcardImports;
|
|
117
|
+
return {
|
|
118
|
+
totalSize,
|
|
119
|
+
packages: packageStats,
|
|
120
|
+
buildTime,
|
|
121
|
+
treeshakingEffective,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
function createEsbuildOptions(buildOptions, entryPath, outputPath, tempDir, packagePaths, logger) {
|
|
125
|
+
// Don't use aliases - they cause esbuild to bundle even external packages
|
|
126
|
+
// Instead, use absWorkingDir to point to temp directory where node_modules is
|
|
127
|
+
const alias = {};
|
|
128
|
+
const baseOptions = {
|
|
129
|
+
entryPoints: [entryPath],
|
|
130
|
+
bundle: true,
|
|
131
|
+
format: buildOptions.format,
|
|
132
|
+
platform: buildOptions.platform,
|
|
133
|
+
outfile: outputPath,
|
|
134
|
+
absWorkingDir: tempDir, // Resolve modules from temp directory
|
|
135
|
+
// alias removed - not needed with absWorkingDir
|
|
136
|
+
mainFields: ['module', 'main'], // Prefer ESM over CJS
|
|
137
|
+
treeShaking: true,
|
|
138
|
+
logLevel: 'error',
|
|
139
|
+
minify: buildOptions.minify,
|
|
140
|
+
sourcemap: buildOptions.sourcemap,
|
|
141
|
+
resolveExtensions: ['.mjs', '.js', '.ts', '.json'], // Prefer .mjs
|
|
142
|
+
// Enhanced minification options when minify is enabled
|
|
143
|
+
...(buildOptions.minify && {
|
|
144
|
+
minifyWhitespace: buildOptions.minifyOptions?.whitespace ?? true,
|
|
145
|
+
minifyIdentifiers: buildOptions.minifyOptions?.identifiers ?? true,
|
|
146
|
+
minifySyntax: buildOptions.minifyOptions?.syntax ?? true,
|
|
147
|
+
legalComments: buildOptions.minifyOptions?.legalComments ?? 'none',
|
|
148
|
+
keepNames: buildOptions.minifyOptions?.keepNames ?? false,
|
|
149
|
+
charset: 'utf8',
|
|
150
|
+
}),
|
|
151
|
+
};
|
|
152
|
+
// Platform-specific configurations
|
|
153
|
+
if (buildOptions.platform === 'browser') {
|
|
154
|
+
baseOptions.define = {
|
|
155
|
+
'process.env.NODE_ENV': '"production"',
|
|
156
|
+
global: 'globalThis',
|
|
157
|
+
};
|
|
158
|
+
// For browser bundles, let users handle Node.js built-ins as needed
|
|
159
|
+
baseOptions.external = buildOptions.external || [];
|
|
160
|
+
}
|
|
161
|
+
else if (buildOptions.platform === 'node') {
|
|
162
|
+
// For Node.js bundles, mark Node built-ins as external
|
|
163
|
+
const nodeBuiltins = [
|
|
164
|
+
'crypto',
|
|
165
|
+
'fs',
|
|
166
|
+
'path',
|
|
167
|
+
'os',
|
|
168
|
+
'util',
|
|
169
|
+
'stream',
|
|
170
|
+
'buffer',
|
|
171
|
+
'events',
|
|
172
|
+
'http',
|
|
173
|
+
'https',
|
|
174
|
+
'url',
|
|
175
|
+
'querystring',
|
|
176
|
+
'zlib',
|
|
177
|
+
];
|
|
178
|
+
// Mark runtime dependencies as external
|
|
179
|
+
// These packages are installed in the Docker container and should not be bundled
|
|
180
|
+
// - zod: Prevents double-loading issues (used by @walkeros/core)
|
|
181
|
+
// - express/cors: Runtime dependencies for server sources
|
|
182
|
+
// Use wildcard patterns to match both ESM and CJS imports
|
|
183
|
+
const npmPackages = [
|
|
184
|
+
'zod',
|
|
185
|
+
'zod/*',
|
|
186
|
+
'express',
|
|
187
|
+
'express/*',
|
|
188
|
+
'cors',
|
|
189
|
+
'cors/*',
|
|
190
|
+
];
|
|
191
|
+
// All downloaded @walkeros packages will be bundled into the output
|
|
192
|
+
// Only Node.js built-ins and problematic packages (zod) are marked external
|
|
193
|
+
baseOptions.external = buildOptions.external
|
|
194
|
+
? [...nodeBuiltins, ...npmPackages, ...buildOptions.external]
|
|
195
|
+
: [...nodeBuiltins, ...npmPackages];
|
|
196
|
+
}
|
|
197
|
+
// Set target if specified
|
|
198
|
+
if (buildOptions.target) {
|
|
199
|
+
baseOptions.target = buildOptions.target;
|
|
200
|
+
}
|
|
201
|
+
else if (buildOptions.platform === 'node') {
|
|
202
|
+
baseOptions.target = 'node18';
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
baseOptions.target = 'es2018';
|
|
206
|
+
}
|
|
207
|
+
// Set global name for IIFE format
|
|
208
|
+
if (buildOptions.globalName && buildOptions.format === 'iife') {
|
|
209
|
+
baseOptions.globalName = buildOptions.globalName;
|
|
210
|
+
}
|
|
211
|
+
return baseOptions;
|
|
212
|
+
}
|
|
213
|
+
// Helper function to convert package name to JS variable name
|
|
214
|
+
function packageNameToVariable(packageName) {
|
|
215
|
+
return packageName
|
|
216
|
+
.replace('@', '_')
|
|
217
|
+
.replace(/[/-]/g, '_')
|
|
218
|
+
.split('_')
|
|
219
|
+
.map((part, i) => i === 0 ? part : part.charAt(0).toUpperCase() + part.slice(1))
|
|
220
|
+
.join('');
|
|
221
|
+
}
|
|
222
|
+
async function createEntryPoint(flowConfig, buildOptions, packagePaths) {
|
|
223
|
+
// Generate import statements from packages
|
|
224
|
+
const importStatements = [];
|
|
225
|
+
const examplesMappings = [];
|
|
226
|
+
// For simulation mode, automatically import examples from destination packages
|
|
227
|
+
// This ensures examples are loaded in the SAME execution context as the bundle
|
|
228
|
+
// preventing zod double-loading issues
|
|
229
|
+
const destinationPackages = new Set();
|
|
230
|
+
const destinations = flowConfig.destinations;
|
|
231
|
+
if (destinations) {
|
|
232
|
+
for (const [destKey, destConfig] of Object.entries(destinations)) {
|
|
233
|
+
// Require explicit package field - no inference for any packages
|
|
234
|
+
if (typeof destConfig === 'object' &&
|
|
235
|
+
destConfig !== null &&
|
|
236
|
+
'package' in destConfig &&
|
|
237
|
+
typeof destConfig.package === 'string') {
|
|
238
|
+
destinationPackages.add(destConfig.package);
|
|
239
|
+
}
|
|
240
|
+
// If no package field, skip auto-importing examples for this destination
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
for (const [packageName, packageConfig] of Object.entries(buildOptions.packages)) {
|
|
244
|
+
if (packageConfig.imports && packageConfig.imports.length > 0) {
|
|
245
|
+
// Remove duplicates within the same package
|
|
246
|
+
const uniqueImports = [...new Set(packageConfig.imports)];
|
|
247
|
+
// Handle special "default as X" syntax
|
|
248
|
+
const defaultImports = [];
|
|
249
|
+
const namedImports = [];
|
|
250
|
+
for (const imp of uniqueImports) {
|
|
251
|
+
if (imp.startsWith('default as ')) {
|
|
252
|
+
defaultImports.push(imp.replace('default as ', ''));
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
namedImports.push(imp);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
// Generate import statements
|
|
259
|
+
if (defaultImports.length > 0) {
|
|
260
|
+
for (const defaultImport of defaultImports) {
|
|
261
|
+
importStatements.push(`import ${defaultImport} from '${packageName}';`);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
if (namedImports.length > 0) {
|
|
265
|
+
const importList = namedImports.join(', ');
|
|
266
|
+
importStatements.push(`import { ${importList} } from '${packageName}';`);
|
|
267
|
+
}
|
|
268
|
+
// Check if this package imports examples and create mappings
|
|
269
|
+
const examplesImport = uniqueImports.find((imp) => imp.includes('examples as '));
|
|
270
|
+
if (examplesImport) {
|
|
271
|
+
// Extract destination name and examples variable name
|
|
272
|
+
// Format: "examples as gtagExamples" -> gtagExamples
|
|
273
|
+
const examplesVarName = examplesImport.split(' as ')[1];
|
|
274
|
+
// Get destination name from package (assumes @walkeros/web-destination-xxx format)
|
|
275
|
+
const destinationMatch = packageName.match(/@walkeros\/web-destination-(.+)$/);
|
|
276
|
+
if (destinationMatch) {
|
|
277
|
+
const destinationName = destinationMatch[1];
|
|
278
|
+
examplesMappings.push(` ${destinationName}: typeof ${examplesVarName} !== 'undefined' ? ${examplesVarName} : undefined`);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
// No imports specified - import as namespace with a warning comment
|
|
284
|
+
// User should specify explicit imports for better tree-shaking
|
|
285
|
+
const varName = packageNameToVariable(packageName);
|
|
286
|
+
importStatements.push(`import * as ${varName} from '${packageName}'; // Consider specifying explicit imports`);
|
|
287
|
+
}
|
|
288
|
+
// Auto-import examples for destination packages
|
|
289
|
+
if (destinationPackages.has(packageName)) {
|
|
290
|
+
const destinationMatch = packageName.match(/@walkeros\/(?:(?:web|server)-)?destination-(.+)$/);
|
|
291
|
+
if (destinationMatch) {
|
|
292
|
+
const destinationName = destinationMatch[1];
|
|
293
|
+
const examplesVarName = `${destinationName.replace(/-/g, '_')}_examples`;
|
|
294
|
+
// Try importing from /examples subpath first (standard packages)
|
|
295
|
+
// Fall back to importing { examples } from main module (demo packages)
|
|
296
|
+
const isDemoPackage = packageName.includes('-demo');
|
|
297
|
+
if (isDemoPackage) {
|
|
298
|
+
importStatements.push(`import { examples as ${examplesVarName} } from '${packageName}';`);
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
importStatements.push(`import * as ${examplesVarName} from '${packageName}/examples';`);
|
|
302
|
+
}
|
|
303
|
+
examplesMappings.push(` ${destinationName}: ${examplesVarName}`);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
// Create examples object if we have any mappings
|
|
308
|
+
const examplesObject = examplesMappings.length > 0
|
|
309
|
+
? `const examples = {\n${examplesMappings.join(',\n')}\n};\n\n`
|
|
310
|
+
: '';
|
|
311
|
+
// Separate imports from template processing
|
|
312
|
+
const importsCode = importStatements.join('\n');
|
|
313
|
+
// Apply template if configured, otherwise just use code directly
|
|
314
|
+
let templatedCode;
|
|
315
|
+
if (buildOptions.template) {
|
|
316
|
+
const templateEngine = new TemplateEngine();
|
|
317
|
+
const flowWithProps = flowConfig;
|
|
318
|
+
templatedCode = await templateEngine.process(buildOptions.template, buildOptions.code, // Pass user code as parameter
|
|
319
|
+
(flowWithProps.sources || {}), (flowWithProps.destinations || {}), (flowWithProps.collector || {}), buildOptions);
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
// No template - just use the code directly
|
|
323
|
+
templatedCode = buildOptions.code;
|
|
324
|
+
}
|
|
325
|
+
// Apply module format wrapping if needed
|
|
326
|
+
let wrappedCode = templatedCode;
|
|
327
|
+
// Check if code already has any export statements (default, named, etc.)
|
|
328
|
+
const hasExport = /^\s*export\s/m.test(templatedCode);
|
|
329
|
+
if (!hasExport) {
|
|
330
|
+
if (buildOptions.format === 'esm') {
|
|
331
|
+
// Export as default for ESM
|
|
332
|
+
wrappedCode = `export default ${templatedCode}`;
|
|
333
|
+
}
|
|
334
|
+
else if (buildOptions.platform === 'browser' && buildOptions.globalName) {
|
|
335
|
+
// Assign to window for browser builds with globalName
|
|
336
|
+
wrappedCode = `window['${buildOptions.globalName}'] = ${templatedCode}`;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
// Combine imports, examples object, and wrapped code
|
|
340
|
+
let finalCode = importsCode
|
|
341
|
+
? `${importsCode}\n\n${examplesObject}${wrappedCode}`
|
|
342
|
+
: `${examplesObject}${wrappedCode}`;
|
|
343
|
+
// If we have examples, export them as a named export
|
|
344
|
+
if (examplesObject && buildOptions.format === 'esm') {
|
|
345
|
+
finalCode += `\n\nexport { examples };`;
|
|
346
|
+
}
|
|
347
|
+
return finalCode;
|
|
348
|
+
}
|
|
349
|
+
function createBuildError(buildError, code) {
|
|
350
|
+
if (!buildError.errors || buildError.errors.length === 0) {
|
|
351
|
+
return new Error(`Build failed: ${buildError.message || buildError}`);
|
|
352
|
+
}
|
|
353
|
+
const firstError = buildError.errors[0];
|
|
354
|
+
const location = firstError.location;
|
|
355
|
+
if (location && location.file && location.file.includes('entry.js')) {
|
|
356
|
+
// Error is in our generated entry point (code)
|
|
357
|
+
const line = location.line;
|
|
358
|
+
const column = location.column;
|
|
359
|
+
const codeLines = code.split('\n');
|
|
360
|
+
const errorLine = codeLines[line - 1] || '';
|
|
361
|
+
return new Error(`Code syntax error at line ${line}, column ${column}:\n` +
|
|
362
|
+
` ${errorLine}\n` +
|
|
363
|
+
` ${' '.repeat(column - 1)}^\n` +
|
|
364
|
+
`${firstError.text}`);
|
|
365
|
+
}
|
|
366
|
+
// Error is in package code or other build issue
|
|
367
|
+
return new Error(`Build error: ${firstError.text}\n` +
|
|
368
|
+
(location
|
|
369
|
+
? ` at ${location.file}:${location.line}:${location.column}`
|
|
370
|
+
: ''));
|
|
371
|
+
}
|
|
372
|
+
//# sourceMappingURL=bundler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundler.js","sourceRoot":"","sources":["../../../src/commands/bundle/bundler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bundle Command
|
|
3
|
+
*
|
|
4
|
+
* Supports both single-environment and multi-environment builds.
|
|
5
|
+
*/
|
|
6
|
+
import type { GlobalOptions } from '../../types';
|
|
7
|
+
export interface BundleCommandOptions extends GlobalOptions {
|
|
8
|
+
config: string;
|
|
9
|
+
env?: string;
|
|
10
|
+
all?: boolean;
|
|
11
|
+
stats?: boolean;
|
|
12
|
+
json?: boolean;
|
|
13
|
+
cache?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function bundleCommand(options: BundleCommandOptions): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* High-level bundle function for programmatic usage.
|
|
18
|
+
*
|
|
19
|
+
* Handles configuration loading, parsing, and logger creation internally.
|
|
20
|
+
*
|
|
21
|
+
* @param configOrPath - Bundle configuration object or path to config file
|
|
22
|
+
* @param options - Bundle options
|
|
23
|
+
* @param options.silent - Suppress all output (default: false)
|
|
24
|
+
* @param options.verbose - Enable verbose logging (default: false)
|
|
25
|
+
* @param options.stats - Collect and return bundle statistics (default: false)
|
|
26
|
+
* @param options.cache - Enable package caching (default: true)
|
|
27
|
+
* @returns Bundle statistics if stats option is true, otherwise void
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* // With config object
|
|
32
|
+
* await bundle({
|
|
33
|
+
* platform: 'web',
|
|
34
|
+
* packages: { '@walkeros/collector': { imports: ['startFlow'] } },
|
|
35
|
+
* sources: { browser: { code: 'sourceBrowser' } },
|
|
36
|
+
* destinations: { api: { code: 'destinationApi' } },
|
|
37
|
+
* code: 'export default startFlow({ sources, destinations })',
|
|
38
|
+
* output: './dist/walker.js'
|
|
39
|
+
* });
|
|
40
|
+
*
|
|
41
|
+
* // With config file
|
|
42
|
+
* await bundle('./walker.config.json', { stats: true });
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare function bundle(configOrPath: unknown, options?: {
|
|
46
|
+
silent?: boolean;
|
|
47
|
+
verbose?: boolean;
|
|
48
|
+
stats?: boolean;
|
|
49
|
+
cache?: boolean;
|
|
50
|
+
}): Promise<import('./bundler').BundleStats | void>;
|
|
51
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/bundle/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiBH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,MAAM,WAAW,oBAAqB,SAAQ,aAAa;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CA2Kf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,MAAM,CAC1B,YAAY,EAAE,OAAO,EACrB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACZ,GACL,OAAO,CAAC,OAAO,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC,CA8BjD"}
|