@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,113 @@
|
|
|
1
|
+
import { simulateCore, formatSimulationResult } from './simulator.js';
|
|
2
|
+
import { createCommandLogger, getErrorMessage } from '../../core/index.js';
|
|
3
|
+
import { loadJsonFromSource } from '../../config/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* CLI command handler for simulate command
|
|
6
|
+
*/
|
|
7
|
+
export async function simulateCommand(options) {
|
|
8
|
+
const logger = createCommandLogger(options);
|
|
9
|
+
// Handle dry-run
|
|
10
|
+
if (options.dryRun) {
|
|
11
|
+
logger.log(`[DRY-RUN] Would execute simulate with config: ${options.config}`);
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const startTime = Date.now();
|
|
15
|
+
try {
|
|
16
|
+
// Load event from inline JSON, file path, or URL
|
|
17
|
+
const event = await loadJsonFromSource(options.event, {
|
|
18
|
+
name: 'event',
|
|
19
|
+
});
|
|
20
|
+
// Execute simulation
|
|
21
|
+
const result = await simulateCore(options.config, event, {
|
|
22
|
+
json: options.json,
|
|
23
|
+
verbose: options.verbose,
|
|
24
|
+
silent: options.silent,
|
|
25
|
+
});
|
|
26
|
+
// Add duration to result
|
|
27
|
+
const resultWithDuration = {
|
|
28
|
+
...result,
|
|
29
|
+
duration: (Date.now() - startTime) / 1000,
|
|
30
|
+
};
|
|
31
|
+
// Output results
|
|
32
|
+
if (options.json) {
|
|
33
|
+
logger.json(resultWithDuration);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
const output = formatSimulationResult(resultWithDuration, {
|
|
37
|
+
json: false,
|
|
38
|
+
});
|
|
39
|
+
logger.log(output);
|
|
40
|
+
}
|
|
41
|
+
// Exit with error code if simulation failed
|
|
42
|
+
if (!result.success) {
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
const errorMessage = getErrorMessage(error);
|
|
48
|
+
if (options.json) {
|
|
49
|
+
logger.json({
|
|
50
|
+
success: false,
|
|
51
|
+
error: errorMessage,
|
|
52
|
+
duration: (Date.now() - startTime) / 1000,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
logger.error(`Error: ${errorMessage}`);
|
|
57
|
+
}
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* High-level simulate function for programmatic usage.
|
|
63
|
+
*
|
|
64
|
+
* Handles configuration loading internally and returns structured results.
|
|
65
|
+
*
|
|
66
|
+
* @param configOrPath - Bundle configuration object or path to config file
|
|
67
|
+
* @param event - Event object to simulate
|
|
68
|
+
* @param options - Simulation options
|
|
69
|
+
* @param options.silent - Suppress all output (default: false)
|
|
70
|
+
* @param options.verbose - Enable verbose logging (default: false)
|
|
71
|
+
* @param options.json - Format output as JSON (default: false)
|
|
72
|
+
* @returns Simulation result with success status, elb result, and usage data
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```typescript
|
|
76
|
+
* // With config file
|
|
77
|
+
* const result = await simulate('./walker.config.json', {
|
|
78
|
+
* name: 'page view',
|
|
79
|
+
* data: { title: 'Home Page', path: '/', url: 'https://example.com' }
|
|
80
|
+
* });
|
|
81
|
+
*
|
|
82
|
+
* // With config object
|
|
83
|
+
* const result = await simulate(
|
|
84
|
+
* {
|
|
85
|
+
* platform: 'web',
|
|
86
|
+
* packages: { '@walkeros/collector': { imports: ['startFlow'] } },
|
|
87
|
+
* code: '...',
|
|
88
|
+
* output: './bundle.js'
|
|
89
|
+
* },
|
|
90
|
+
* { name: 'page view' },
|
|
91
|
+
* { silent: true }
|
|
92
|
+
* );
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
export async function simulate(configOrPath, event, options = {}) {
|
|
96
|
+
// simulateCore currently only accepts file paths, so we need to handle that
|
|
97
|
+
// For now, if configOrPath is not a string, throw an error with guidance
|
|
98
|
+
if (typeof configOrPath !== 'string') {
|
|
99
|
+
throw new Error('simulate() currently only supports config file paths. ' +
|
|
100
|
+
'Config object support will be added in a future version. ' +
|
|
101
|
+
'Please provide a path to a configuration file.');
|
|
102
|
+
}
|
|
103
|
+
// Call core simulator
|
|
104
|
+
return await simulateCore(configOrPath, event, {
|
|
105
|
+
json: options.json ?? false,
|
|
106
|
+
verbose: options.verbose ?? false,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
// Re-export types and utilities for testing
|
|
110
|
+
export * from './types.js';
|
|
111
|
+
export * from './simulator.js';
|
|
112
|
+
export { executeInNode } from './node-executor.js';
|
|
113
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/simulate/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSDOM-based executor for simulating IIFE bundles
|
|
3
|
+
*
|
|
4
|
+
* Executes actual production IIFE bundles in a virtual DOM environment
|
|
5
|
+
* with env-based mocking from destination examples.
|
|
6
|
+
*/
|
|
7
|
+
import type { Elb } from '@walkeros/core';
|
|
8
|
+
import type { CallTracker, ApiCall } from './tracker.js';
|
|
9
|
+
export interface ExecutionResult {
|
|
10
|
+
collector: unknown;
|
|
11
|
+
elb: unknown;
|
|
12
|
+
elbResult: Elb.PushResult | undefined;
|
|
13
|
+
usage: Record<string, ApiCall[]>;
|
|
14
|
+
duration: number;
|
|
15
|
+
}
|
|
16
|
+
interface DestinationEnv {
|
|
17
|
+
init?: Record<string, unknown>;
|
|
18
|
+
push: Record<string, unknown>;
|
|
19
|
+
simulation?: string[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Execute production IIFE bundle in JSDOM with env-based mocking
|
|
23
|
+
*
|
|
24
|
+
* Main orchestration function that:
|
|
25
|
+
* 1. Creates JSDOM virtual DOM
|
|
26
|
+
* 2. Builds sandbox from dynamically loaded envs
|
|
27
|
+
* 3. Executes IIFE in JSDOM
|
|
28
|
+
* 4. Waits for window.collector/elb assignment
|
|
29
|
+
* 5. Runs event through elb
|
|
30
|
+
* 6. Returns tracked API calls
|
|
31
|
+
*/
|
|
32
|
+
export declare function executeInJSDOM(bundlePath: string, destinations: Record<string, unknown>, event: {
|
|
33
|
+
name: string;
|
|
34
|
+
data?: unknown;
|
|
35
|
+
}, tracker: CallTracker, envs: Record<string, DestinationEnv>, timeout?: number): Promise<ExecutionResult>;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=jsdom-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsdom-executor.d.ts","sourceRoot":"","sources":["../../../src/commands/simulate/jsdom-executor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,GAAG,CAAC,UAAU,GAAG,SAAS,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AA2FD;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,EACvC,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EACpC,OAAO,GAAE,MAAc,GACtB,OAAO,CAAC,eAAe,CAAC,CAsE1B"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSDOM-based executor for simulating IIFE bundles
|
|
3
|
+
*
|
|
4
|
+
* Executes actual production IIFE bundles in a virtual DOM environment
|
|
5
|
+
* with env-based mocking from destination examples.
|
|
6
|
+
*/
|
|
7
|
+
import { JSDOM, VirtualConsole } from 'jsdom';
|
|
8
|
+
import fs from 'fs-extra';
|
|
9
|
+
import { getErrorMessage } from '../../core/index.js';
|
|
10
|
+
/**
|
|
11
|
+
* Build sandbox from destination-provided envs
|
|
12
|
+
*
|
|
13
|
+
* Merges env mocks from each destination's envs, wrapping
|
|
14
|
+
* specified paths with CallTracker for API call tracking.
|
|
15
|
+
*/
|
|
16
|
+
function buildSandboxFromEnvs(envs, destinations, tracker) {
|
|
17
|
+
// Base browser APIs (not provided by destinations)
|
|
18
|
+
const baseBrowserMocks = {
|
|
19
|
+
Image: class MockImage {
|
|
20
|
+
src = '';
|
|
21
|
+
onload = (() => { });
|
|
22
|
+
onerror = (() => { });
|
|
23
|
+
},
|
|
24
|
+
fetch: async () => ({ ok: true, json: async () => ({}) }),
|
|
25
|
+
location: { href: 'http://localhost' },
|
|
26
|
+
navigator: { userAgent: 'Mozilla/5.0 (walkerOS Simulation)' },
|
|
27
|
+
};
|
|
28
|
+
const sandbox = {
|
|
29
|
+
window: { ...baseBrowserMocks },
|
|
30
|
+
document: {},
|
|
31
|
+
};
|
|
32
|
+
// Add destination-specific env mocks
|
|
33
|
+
for (const [destKey, destConfig] of Object.entries(destinations)) {
|
|
34
|
+
const destEnv = envs[destKey];
|
|
35
|
+
if (!destEnv?.push)
|
|
36
|
+
continue;
|
|
37
|
+
const mockEnv = destEnv.push;
|
|
38
|
+
const trackPaths = destEnv.simulation || [];
|
|
39
|
+
// Use existing CallTracker to wrap env
|
|
40
|
+
const trackedEnv = tracker.wrapEnv(mockEnv, trackPaths.map((p) => `${destKey}:${p}`));
|
|
41
|
+
// Merge window properties
|
|
42
|
+
if (trackedEnv.window && typeof trackedEnv.window === 'object') {
|
|
43
|
+
Object.assign(sandbox.window, trackedEnv.window);
|
|
44
|
+
}
|
|
45
|
+
// Merge document properties
|
|
46
|
+
if (trackedEnv.document && typeof trackedEnv.document === 'object') {
|
|
47
|
+
Object.assign(sandbox.document, trackedEnv.document);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return sandbox;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Wait for async window property assignment
|
|
54
|
+
*
|
|
55
|
+
* IIFE bundles execute asynchronously and assign to window.
|
|
56
|
+
* This helper polls until the property appears or timeout occurs.
|
|
57
|
+
*/
|
|
58
|
+
function waitForWindowProperty(window, prop, timeout = 5000) {
|
|
59
|
+
return new Promise((resolve, reject) => {
|
|
60
|
+
const start = Date.now();
|
|
61
|
+
const check = () => {
|
|
62
|
+
if (window[prop] !== undefined) {
|
|
63
|
+
resolve();
|
|
64
|
+
}
|
|
65
|
+
else if (Date.now() - start > timeout) {
|
|
66
|
+
reject(new Error(`Timeout waiting for window.${prop}. ` +
|
|
67
|
+
`IIFE may have failed to execute or assign to window.`));
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
setImmediate(check);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
check();
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Execute production IIFE bundle in JSDOM with env-based mocking
|
|
78
|
+
*
|
|
79
|
+
* Main orchestration function that:
|
|
80
|
+
* 1. Creates JSDOM virtual DOM
|
|
81
|
+
* 2. Builds sandbox from dynamically loaded envs
|
|
82
|
+
* 3. Executes IIFE in JSDOM
|
|
83
|
+
* 4. Waits for window.collector/elb assignment
|
|
84
|
+
* 5. Runs event through elb
|
|
85
|
+
* 6. Returns tracked API calls
|
|
86
|
+
*/
|
|
87
|
+
export async function executeInJSDOM(bundlePath, destinations, event, tracker, envs, timeout = 10000) {
|
|
88
|
+
const start = Date.now();
|
|
89
|
+
// 1. Create JSDOM virtual DOM with console suppression
|
|
90
|
+
const virtualConsole = new VirtualConsole();
|
|
91
|
+
// Silent mode - don't pipe console output to process stdout/stderr
|
|
92
|
+
const dom = new JSDOM('<!DOCTYPE html><html><body></body></html>', {
|
|
93
|
+
url: 'http://localhost',
|
|
94
|
+
runScripts: 'dangerously', // Allow script execution
|
|
95
|
+
resources: 'usable',
|
|
96
|
+
virtualConsole,
|
|
97
|
+
});
|
|
98
|
+
const { window } = dom;
|
|
99
|
+
// 2. Build sandbox from dynamically loaded envs and inject into window
|
|
100
|
+
const sandbox = buildSandboxFromEnvs(envs, destinations, tracker);
|
|
101
|
+
Object.assign(window, sandbox.window);
|
|
102
|
+
Object.assign(window.document, sandbox.document);
|
|
103
|
+
// 3. Load and execute bundle code
|
|
104
|
+
const bundleCode = await fs.readFile(bundlePath, 'utf8');
|
|
105
|
+
try {
|
|
106
|
+
window.eval(bundleCode);
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
throw new Error(`Bundle execution failed: ${getErrorMessage(error)}`);
|
|
110
|
+
}
|
|
111
|
+
// 4. Wait for window.collector and window.elb assignments
|
|
112
|
+
try {
|
|
113
|
+
await waitForWindowProperty(window, 'collector', timeout);
|
|
114
|
+
await waitForWindowProperty(window, 'elb', timeout);
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
throw new Error(`Window property assignment failed: ${getErrorMessage(error)}`);
|
|
118
|
+
}
|
|
119
|
+
const { collector, elb } = window;
|
|
120
|
+
// 5. Run event through elb
|
|
121
|
+
let elbResult;
|
|
122
|
+
try {
|
|
123
|
+
elbResult = (await elb(event.name, event.data));
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
throw new Error(`Event execution failed: ${getErrorMessage(error)}`);
|
|
127
|
+
}
|
|
128
|
+
// 6. Return results with tracked calls
|
|
129
|
+
return {
|
|
130
|
+
collector,
|
|
131
|
+
elb,
|
|
132
|
+
elbResult,
|
|
133
|
+
usage: tracker.getCalls(),
|
|
134
|
+
duration: Date.now() - start,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=jsdom-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsdom-executor.js","sourceRoot":"","sources":["../../../src/commands/simulate/jsdom-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js-based executor for simulating ESM server bundles
|
|
3
|
+
*
|
|
4
|
+
* Executes server bundles via dynamic import with env-based mocking.
|
|
5
|
+
*/
|
|
6
|
+
import type { Elb } from '@walkeros/core';
|
|
7
|
+
import type { CallTracker, ApiCall } from './tracker.js';
|
|
8
|
+
export interface ExecutionResult {
|
|
9
|
+
collector: unknown;
|
|
10
|
+
elb: unknown;
|
|
11
|
+
elbResult: Elb.PushResult | undefined;
|
|
12
|
+
usage: Record<string, ApiCall[]>;
|
|
13
|
+
duration: number;
|
|
14
|
+
}
|
|
15
|
+
interface DestinationEnv {
|
|
16
|
+
init?: Record<string, unknown>;
|
|
17
|
+
push: Record<string, unknown>;
|
|
18
|
+
simulation?: string[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Execute server ESM bundle in Node.js with env-based mocking
|
|
22
|
+
*/
|
|
23
|
+
export declare function executeInNode(bundlePath: string, destinations: Record<string, unknown>, event: {
|
|
24
|
+
name: string;
|
|
25
|
+
data?: unknown;
|
|
26
|
+
}, tracker: CallTracker, envs: Record<string, DestinationEnv>, timeout?: number): Promise<ExecutionResult>;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=node-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-executor.d.ts","sourceRoot":"","sources":["../../../src/commands/simulate/node-executor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,GAAG,CAAC,UAAU,GAAG,SAAS,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAoDD;;GAEG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,EACvC,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EACpC,OAAO,GAAE,MAAc,GACtB,OAAO,CAAC,eAAe,CAAC,CA6D1B"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js-based executor for simulating ESM server bundles
|
|
3
|
+
*
|
|
4
|
+
* Executes server bundles via dynamic import with env-based mocking.
|
|
5
|
+
*/
|
|
6
|
+
import { pathToFileURL } from 'url';
|
|
7
|
+
import { getErrorMessage } from '../../core/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Build global mocks from destination-provided envs
|
|
10
|
+
*/
|
|
11
|
+
function buildGlobalMocksFromEnvs(envs, destinations, tracker) {
|
|
12
|
+
const globalMocks = {};
|
|
13
|
+
for (const [destKey] of Object.entries(destinations)) {
|
|
14
|
+
const destEnv = envs[destKey];
|
|
15
|
+
if (!destEnv?.push)
|
|
16
|
+
continue;
|
|
17
|
+
const mockEnv = destEnv.push;
|
|
18
|
+
const trackPaths = destEnv.simulation || [];
|
|
19
|
+
const trackedEnv = tracker.wrapEnv(mockEnv, trackPaths.map((p) => `${destKey}:${p}`));
|
|
20
|
+
Object.assign(globalMocks, trackedEnv);
|
|
21
|
+
}
|
|
22
|
+
return globalMocks;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Inject mocks into global scope and return cleanup function
|
|
26
|
+
*/
|
|
27
|
+
function injectGlobalMocks(mocks) {
|
|
28
|
+
const originalValues = {};
|
|
29
|
+
for (const [key, value] of Object.entries(mocks)) {
|
|
30
|
+
originalValues[key] = globalThis[key];
|
|
31
|
+
globalThis[key] = value;
|
|
32
|
+
}
|
|
33
|
+
return () => {
|
|
34
|
+
for (const [key, value] of Object.entries(originalValues)) {
|
|
35
|
+
if (value === undefined) {
|
|
36
|
+
delete globalThis[key];
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
globalThis[key] = value;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Execute server ESM bundle in Node.js with env-based mocking
|
|
46
|
+
*/
|
|
47
|
+
export async function executeInNode(bundlePath, destinations, event, tracker, envs, timeout = 30000) {
|
|
48
|
+
const start = Date.now();
|
|
49
|
+
const globalMocks = buildGlobalMocksFromEnvs(envs, destinations, tracker);
|
|
50
|
+
const cleanupMocks = injectGlobalMocks(globalMocks);
|
|
51
|
+
try {
|
|
52
|
+
const executeWithTimeout = async () => {
|
|
53
|
+
// Jest has issues with file:// URLs in dynamic imports, use path directly
|
|
54
|
+
// Outside Jest, use file:// URL with cache-busting to prevent module caching
|
|
55
|
+
const importUrl = process.env.JEST_WORKER_ID
|
|
56
|
+
? bundlePath
|
|
57
|
+
: `${pathToFileURL(bundlePath).href}?t=${Date.now()}`;
|
|
58
|
+
const module = await import(importUrl);
|
|
59
|
+
if (!module.default || typeof module.default !== 'function') {
|
|
60
|
+
throw new Error('Bundle does not export default factory function');
|
|
61
|
+
}
|
|
62
|
+
const result = await module.default();
|
|
63
|
+
if (!result || !result.elb || typeof result.elb !== 'function') {
|
|
64
|
+
throw new Error('Factory function did not return valid result with elb');
|
|
65
|
+
}
|
|
66
|
+
const { collector, elb } = result;
|
|
67
|
+
let elbResult;
|
|
68
|
+
try {
|
|
69
|
+
elbResult = (await elb(event.name, event.data));
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
throw new Error(`Event execution failed: ${getErrorMessage(error)}`);
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
collector,
|
|
76
|
+
elb,
|
|
77
|
+
elbResult,
|
|
78
|
+
usage: tracker.getCalls(),
|
|
79
|
+
duration: Date.now() - start,
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
83
|
+
setTimeout(() => reject(new Error(`Server simulation timeout after ${timeout}ms`)), timeout);
|
|
84
|
+
});
|
|
85
|
+
return await Promise.race([executeWithTimeout(), timeoutPromise]);
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
throw new Error(`Node execution failed: ${getErrorMessage(error)}`);
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
cleanupMocks();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=node-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-executor.js","sourceRoot":"","sources":["../../../src/commands/simulate/node-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { SimulateCommandOptions, SimulationResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Main simulation orchestrator
|
|
4
|
+
*/
|
|
5
|
+
export declare function simulateCore(configPath: string, event: unknown, options?: Pick<SimulateCommandOptions, 'json' | 'verbose' | 'silent'>): Promise<SimulationResult>;
|
|
6
|
+
/**
|
|
7
|
+
* Simple result formatting
|
|
8
|
+
*/
|
|
9
|
+
export declare function formatSimulationResult(result: SimulationResult, options?: Pick<SimulateCommandOptions, 'json'>): string;
|
|
10
|
+
/**
|
|
11
|
+
* Execute simulation using destination-provided mock environments
|
|
12
|
+
*/
|
|
13
|
+
export declare function executeSimulation(event: unknown, configPath: string): Promise<SimulationResult>;
|
|
14
|
+
//# sourceMappingURL=simulator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simulator.d.ts","sourceRoot":"","sources":["../../../src/commands/simulate/simulator.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAS3E;;GAEG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,IAAI,CAAC,sBAAsB,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAM,GACxE,OAAO,CAAC,gBAAgB,CAAC,CAqC3B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAM,GACjD,MAAM,CAeR;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,OAAO,EACd,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,CAAC,CA6H3B"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import { getPlatform } from '@walkeros/core';
|
|
4
|
+
import { createLogger, getErrorMessage } from '../../core/index.js';
|
|
5
|
+
import { loadJsonConfig, loadBundleConfig, isObject, } from '../../config/index.js';
|
|
6
|
+
import { getTmpPath } from '../../core/tmp.js';
|
|
7
|
+
import { bundleCore } from '../bundle/bundler.js';
|
|
8
|
+
import { CallTracker } from './tracker.js';
|
|
9
|
+
import { executeInJSDOM } from './jsdom-executor.js';
|
|
10
|
+
import { executeInNode } from './node-executor.js';
|
|
11
|
+
import { loadDestinationEnvs } from './env-loader.js';
|
|
12
|
+
/**
|
|
13
|
+
* Generate a unique ID for temp files
|
|
14
|
+
*/
|
|
15
|
+
function generateId() {
|
|
16
|
+
return `${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Main simulation orchestrator
|
|
20
|
+
*/
|
|
21
|
+
export async function simulateCore(configPath, event, options = {}) {
|
|
22
|
+
const logger = createLogger({
|
|
23
|
+
verbose: options.verbose || false,
|
|
24
|
+
silent: options.silent || false,
|
|
25
|
+
json: options.json || false,
|
|
26
|
+
});
|
|
27
|
+
try {
|
|
28
|
+
logger.info('🎯 Starting walkerOS simulation...');
|
|
29
|
+
// Load and validate configuration
|
|
30
|
+
logger.info('📦 Loading bundle configuration...');
|
|
31
|
+
const fullConfigPath = path.resolve(configPath);
|
|
32
|
+
const rawConfig = await loadJsonConfig(fullConfigPath);
|
|
33
|
+
loadBundleConfig(rawConfig, { configPath: fullConfigPath });
|
|
34
|
+
// Execute simulation
|
|
35
|
+
logger.info(`🚀 Executing simulation with event: ${JSON.stringify(event)}`);
|
|
36
|
+
const result = await executeSimulation(event, fullConfigPath);
|
|
37
|
+
// Report results
|
|
38
|
+
if (result.success) {
|
|
39
|
+
logger.info(`✅ Simulation completed successfully`);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
logger.error(`❌ Simulation failed: ${result.error}`);
|
|
43
|
+
}
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
const errorMessage = getErrorMessage(error);
|
|
48
|
+
logger.error(`💥 Simulation error: ${errorMessage}`);
|
|
49
|
+
return {
|
|
50
|
+
success: false,
|
|
51
|
+
error: errorMessage,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Simple result formatting
|
|
57
|
+
*/
|
|
58
|
+
export function formatSimulationResult(result, options = {}) {
|
|
59
|
+
if (options.json) {
|
|
60
|
+
const output = {
|
|
61
|
+
result: result.elbResult,
|
|
62
|
+
usage: result.usage,
|
|
63
|
+
duration: result.duration,
|
|
64
|
+
};
|
|
65
|
+
return JSON.stringify(output, null, 2);
|
|
66
|
+
}
|
|
67
|
+
if (result.success) {
|
|
68
|
+
return '✅ Simulation completed successfully';
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
return `❌ Simulation failed: ${result.error}`;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Execute simulation using destination-provided mock environments
|
|
76
|
+
*/
|
|
77
|
+
export async function executeSimulation(event, configPath) {
|
|
78
|
+
const startTime = Date.now();
|
|
79
|
+
let bundlePath;
|
|
80
|
+
const tempDir = getTmpPath();
|
|
81
|
+
try {
|
|
82
|
+
// Validate event format
|
|
83
|
+
if (!isObject(event) ||
|
|
84
|
+
!('name' in event) ||
|
|
85
|
+
typeof event.name !== 'string') {
|
|
86
|
+
throw new Error('Event must be an object with a "name" property of type string');
|
|
87
|
+
}
|
|
88
|
+
const typedEvent = event;
|
|
89
|
+
// Ensure temp directory exists
|
|
90
|
+
await fs.ensureDir(tempDir);
|
|
91
|
+
// 1. Load config
|
|
92
|
+
const rawConfig = await loadJsonConfig(configPath);
|
|
93
|
+
const { flowConfig, buildOptions } = loadBundleConfig(rawConfig, {
|
|
94
|
+
configPath,
|
|
95
|
+
});
|
|
96
|
+
// Detect platform from flowConfig
|
|
97
|
+
const platform = getPlatform(flowConfig);
|
|
98
|
+
// 2. Create tracker
|
|
99
|
+
const tracker = new CallTracker();
|
|
100
|
+
// 3. Create temporary bundle
|
|
101
|
+
const tempOutput = path.join(tempDir, `simulation-bundle-${generateId()}.${platform === 'web' ? 'js' : 'mjs'}`);
|
|
102
|
+
const destinations = flowConfig.destinations;
|
|
103
|
+
// Create build options for simulation - platform-aware bundling
|
|
104
|
+
const simulationBuildOptions = {
|
|
105
|
+
...buildOptions,
|
|
106
|
+
code: buildOptions.code || '',
|
|
107
|
+
output: tempOutput,
|
|
108
|
+
tempDir,
|
|
109
|
+
...(platform === 'web'
|
|
110
|
+
? {
|
|
111
|
+
format: 'iife',
|
|
112
|
+
platform: 'browser',
|
|
113
|
+
windowCollector: 'collector',
|
|
114
|
+
windowElb: 'elb',
|
|
115
|
+
}
|
|
116
|
+
: {
|
|
117
|
+
format: 'esm',
|
|
118
|
+
platform: 'node',
|
|
119
|
+
}),
|
|
120
|
+
};
|
|
121
|
+
// 4. Bundle (downloads packages internally)
|
|
122
|
+
await bundleCore(flowConfig, simulationBuildOptions, createLogger({ silent: true }), false);
|
|
123
|
+
bundlePath = tempOutput;
|
|
124
|
+
// 5. Load env examples dynamically from destination packages
|
|
125
|
+
const envs = await loadDestinationEnvs(destinations || {});
|
|
126
|
+
// 6. Execute based on platform
|
|
127
|
+
let result;
|
|
128
|
+
if (platform === 'web') {
|
|
129
|
+
result = await executeInJSDOM(tempOutput, destinations || {}, typedEvent, tracker, envs, 10000);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
result = await executeInNode(tempOutput, destinations || {}, typedEvent, tracker, envs, 30000);
|
|
133
|
+
}
|
|
134
|
+
const elbResult = result.elbResult;
|
|
135
|
+
const usage = result.usage;
|
|
136
|
+
const duration = Date.now() - startTime;
|
|
137
|
+
return {
|
|
138
|
+
success: true,
|
|
139
|
+
elbResult,
|
|
140
|
+
usage,
|
|
141
|
+
duration,
|
|
142
|
+
logs: [],
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
const duration = Date.now() - startTime;
|
|
147
|
+
return {
|
|
148
|
+
success: false,
|
|
149
|
+
error: getErrorMessage(error),
|
|
150
|
+
duration,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
finally {
|
|
154
|
+
// Cleanup temp directory and all its contents
|
|
155
|
+
if (tempDir) {
|
|
156
|
+
await fs.remove(tempDir).catch(() => {
|
|
157
|
+
// Ignore cleanup errors - temp dirs will be cleaned eventually
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
// Note: JSDOM automatically cleans up its own isolated environment
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=simulator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simulator.js","sourceRoot":"","sources":["../../../src/commands/simulate/simulator.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,QAAQ,GAET,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGtD;;GAEG;AACH,SAAS,UAAU;IACjB,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,UAAkB,EAClB,KAAc,EACd,UAAuE,EAAE;IAEzE,MAAM,MAAM,GAAG,YAAY,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;QACjC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;QAC/B,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,KAAK;KAC5B,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAElD,kCAAkC;QAClC,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAClD,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,cAAc,CAAC,CAAC;QACvD,gBAAgB,CAAC,SAAS,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,CAAC;QAE5D,qBAAqB;QACrB,MAAM,CAAC,IAAI,CAAC,uCAAuC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAE9D,iBAAiB;QACjB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,wBAAwB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,wBAAwB,YAAY,EAAE,CAAC,CAAC;QAErD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,YAAY;SACpB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAwB,EACxB,UAAgD,EAAE;IAElD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG;YACb,MAAM,EAAE,MAAM,CAAC,SAAS;YACxB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC;QACF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,qCAAqC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,OAAO,wBAAwB,MAAM,CAAC,KAAK,EAAE,CAAC;IAChD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAAc,EACd,UAAkB;IAElB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,UAA8B,CAAC;IACnC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,wBAAwB;QACxB,IACE,CAAC,QAAQ,CAAC,KAAK,CAAC;YAChB,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC;YAClB,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAC9B,CAAC;YACD,MAAM,IAAI,KAAK,CACb,+DAA+D,CAChE,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,KAAyC,CAAC;QAE7D,+BAA+B;QAC/B,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAE5B,iBAAiB;QACjB,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,gBAAgB,CAAC,SAAS,EAAE;YAC/D,UAAU;SACX,CAAC,CAAC;QAEH,kCAAkC;QAClC,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QAEzC,oBAAoB;QACpB,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAElC,6BAA6B;QAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAC1B,OAAO,EACP,qBAAqB,UAAU,EAAE,IAAI,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CACzE,CAAC;QAEF,MAAM,YAAY,GAChB,UACD,CAAC,YAAY,CAAC;QAEf,gEAAgE;QAChE,MAAM,sBAAsB,GAAiB;YAC3C,GAAG,YAAY;YACf,IAAI,EAAE,YAAY,CAAC,IAAI,IAAI,EAAE;YAC7B,MAAM,EAAE,UAAU;YAClB,OAAO;YACP,GAAG,CAAC,QAAQ,KAAK,KAAK;gBACpB,CAAC,CAAC;oBACE,MAAM,EAAE,MAAe;oBACvB,QAAQ,EAAE,SAAkB;oBAC5B,eAAe,EAAE,WAAW;oBAC5B,SAAS,EAAE,KAAK;iBACjB;gBACH,CAAC,CAAC;oBACE,MAAM,EAAE,KAAc;oBACtB,QAAQ,EAAE,MAAe;iBAC1B,CAAC;SACP,CAAC;QAEF,4CAA4C;QAC5C,MAAM,UAAU,CACd,UAAU,EACV,sBAAsB,EACtB,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAC9B,KAAK,CACN,CAAC;QACF,UAAU,GAAG,UAAU,CAAC;QAExB,6DAA6D;QAC7D,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;QAE3D,+BAA+B;QAC/B,IAAI,MAAM,CAAC;QACX,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YACvB,MAAM,GAAG,MAAM,cAAc,CAC3B,UAAU,EACV,YAAY,IAAI,EAAE,EAClB,UAAU,EACV,OAAO,EACP,IAAI,EACJ,KAAK,CACN,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,MAAM,aAAa,CAC1B,UAAU,EACV,YAAY,IAAI,EAAE,EAClB,UAAU,EACV,OAAO,EACP,IAAI,EACJ,KAAK,CACN,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAE3B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAExC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,SAAS;YACT,KAAK;YACL,QAAQ;YACR,IAAI,EAAE,EAAE;SACT,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACxC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC;YAC7B,QAAQ;SACT,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,8CAA8C;QAC9C,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBAClC,+DAA+D;YACjE,CAAC,CAAC,CAAC;QACL,CAAC;QACD,mEAAmE;IACrE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Call Tracker for Simulation
|
|
3
|
+
*
|
|
4
|
+
* Wraps mock environment functions to track API calls.
|
|
5
|
+
* Used with destination-provided examples/env.ts mocks.
|
|
6
|
+
*/
|
|
7
|
+
export interface ApiCall {
|
|
8
|
+
type: 'call';
|
|
9
|
+
path: string;
|
|
10
|
+
args: unknown[];
|
|
11
|
+
timestamp: number;
|
|
12
|
+
}
|
|
13
|
+
export declare class CallTracker {
|
|
14
|
+
private calls;
|
|
15
|
+
/**
|
|
16
|
+
* Wrap a function to track its calls
|
|
17
|
+
*/
|
|
18
|
+
wrapFunction(name: string, fn?: (...args: unknown[]) => unknown): (...args: unknown[]) => unknown;
|
|
19
|
+
/**
|
|
20
|
+
* Wrap an environment object, tracking specified paths
|
|
21
|
+
*
|
|
22
|
+
* @param env - Environment object (from destination's examples/env.ts)
|
|
23
|
+
* @param paths - Paths to track (e.g., ['gtag:window.gtag', 'gtag:window.dataLayer.push'])
|
|
24
|
+
*/
|
|
25
|
+
wrapEnv<T extends Record<string, unknown>>(env: T, paths: string[]): T;
|
|
26
|
+
private logCall;
|
|
27
|
+
getCalls(): Record<string, ApiCall[]>;
|
|
28
|
+
reset(): void;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=tracker.d.ts.map
|