@walkeros/cli 0.5.1-next.1 → 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.
Files changed (129) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +51 -28
  3. package/dist/__tests__/bundle/bundler.test.js +0 -1
  4. package/dist/__tests__/bundle/bundler.test.js.map +1 -1
  5. package/dist/__tests__/cli-e2e.test.js +26 -11
  6. package/dist/__tests__/cli-e2e.test.js.map +1 -1
  7. package/dist/__tests__/cli.test.js +2 -3
  8. package/dist/__tests__/cli.test.js.map +1 -1
  9. package/dist/__tests__/config-loader.test.js +6 -6
  10. package/dist/__tests__/config-loader.test.js.map +1 -1
  11. package/dist/__tests__/core/config.test.js +19 -12
  12. package/dist/__tests__/core/config.test.js.map +1 -1
  13. package/dist/__tests__/integration/bundle-run.integration.test.js +5 -5
  14. package/dist/__tests__/integration/bundle-run.integration.test.js.map +1 -1
  15. package/dist/__tests__/smoke/production.smoke.test.js +6 -6
  16. package/dist/__tests__/smoke/production.smoke.test.js.map +1 -1
  17. package/dist/commands/bundle/bundler.d.ts.map +1 -1
  18. package/dist/commands/bundle/bundler.js +18 -32
  19. package/dist/commands/bundle/bundler.js.map +1 -1
  20. package/dist/commands/bundle/index.d.ts +4 -2
  21. package/dist/commands/bundle/index.d.ts.map +1 -1
  22. package/dist/commands/bundle/index.js +99 -115
  23. package/dist/commands/bundle/index.js.map +1 -1
  24. package/dist/commands/bundle/package-manager.d.ts.map +1 -1
  25. package/dist/commands/bundle/package-manager.js +36 -13
  26. package/dist/commands/bundle/package-manager.js.map +1 -1
  27. package/dist/commands/cache.d.ts +4 -0
  28. package/dist/commands/cache.d.ts.map +1 -1
  29. package/dist/commands/cache.js +38 -14
  30. package/dist/commands/cache.js.map +1 -1
  31. package/dist/commands/push/index.d.ts.map +1 -1
  32. package/dist/commands/push/index.js +121 -131
  33. package/dist/commands/push/index.js.map +1 -1
  34. package/dist/commands/push/types.d.ts +3 -2
  35. package/dist/commands/push/types.d.ts.map +1 -1
  36. package/dist/commands/run/__tests__/run.integration.test.d.ts +1 -2
  37. package/dist/commands/run/__tests__/run.integration.test.d.ts.map +1 -1
  38. package/dist/commands/run/__tests__/run.integration.test.js +8 -9
  39. package/dist/commands/run/__tests__/run.integration.test.js.map +1 -1
  40. package/dist/commands/run/execution.js +1 -1
  41. package/dist/commands/run/execution.js.map +1 -1
  42. package/dist/commands/run/index.d.ts +1 -2
  43. package/dist/commands/run/index.d.ts.map +1 -1
  44. package/dist/commands/run/index.js +22 -59
  45. package/dist/commands/run/index.js.map +1 -1
  46. package/dist/commands/run/types.d.ts +8 -3
  47. package/dist/commands/run/types.d.ts.map +1 -1
  48. package/dist/commands/run/types.js +1 -1
  49. package/dist/commands/simulate/env-loader.d.ts.map +1 -1
  50. package/dist/commands/simulate/env-loader.js +1 -3
  51. package/dist/commands/simulate/env-loader.js.map +1 -1
  52. package/dist/commands/simulate/index.d.ts.map +1 -1
  53. package/dist/commands/simulate/index.js +47 -50
  54. package/dist/commands/simulate/index.js.map +1 -1
  55. package/dist/commands/simulate/simulator.js +3 -2
  56. package/dist/commands/simulate/simulator.js.map +1 -1
  57. package/dist/commands/simulate/types.d.ts +4 -2
  58. package/dist/commands/simulate/types.d.ts.map +1 -1
  59. package/dist/config/build-defaults.d.ts.map +1 -1
  60. package/dist/config/build-defaults.js +0 -2
  61. package/dist/config/build-defaults.js.map +1 -1
  62. package/dist/config/index.d.ts +1 -1
  63. package/dist/config/index.d.ts.map +1 -1
  64. package/dist/config/index.js +1 -1
  65. package/dist/config/index.js.map +1 -1
  66. package/dist/config/loader.d.ts.map +1 -1
  67. package/dist/config/loader.js +9 -11
  68. package/dist/config/loader.js.map +1 -1
  69. package/dist/config/utils.d.ts +0 -13
  70. package/dist/config/utils.d.ts.map +1 -1
  71. package/dist/config/utils.js +6 -28
  72. package/dist/config/utils.js.map +1 -1
  73. package/dist/core/build-cache.d.ts +4 -4
  74. package/dist/core/build-cache.d.ts.map +1 -1
  75. package/dist/core/build-cache.js +10 -9
  76. package/dist/core/build-cache.js.map +1 -1
  77. package/dist/core/index.d.ts +1 -3
  78. package/dist/core/index.d.ts.map +1 -1
  79. package/dist/core/index.js +1 -3
  80. package/dist/core/index.js.map +1 -1
  81. package/dist/core/logger.d.ts +5 -3
  82. package/dist/core/logger.d.ts.map +1 -1
  83. package/dist/core/logger.js +31 -34
  84. package/dist/core/logger.js.map +1 -1
  85. package/dist/core/tmp.d.ts +27 -0
  86. package/dist/core/tmp.d.ts.map +1 -0
  87. package/dist/core/tmp.js +36 -0
  88. package/dist/core/tmp.js.map +1 -0
  89. package/dist/index.d.ts +20 -13
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +630 -761
  92. package/dist/index.js.map +1 -1
  93. package/dist/runtime/index.d.ts +10 -0
  94. package/dist/runtime/index.d.ts.map +1 -0
  95. package/dist/runtime/index.js +10 -0
  96. package/dist/runtime/index.js.map +1 -0
  97. package/dist/runtime/main.d.ts +2 -0
  98. package/dist/runtime/main.d.ts.map +1 -0
  99. package/dist/runtime/main.js +268 -0
  100. package/dist/runtime/main.js.map +1 -0
  101. package/dist/runtime/runner.d.ts +20 -0
  102. package/dist/runtime/runner.d.ts.map +1 -0
  103. package/dist/runtime/runner.js +72 -0
  104. package/dist/runtime/runner.js.map +1 -0
  105. package/dist/runtime/serve.d.ts +19 -0
  106. package/dist/runtime/serve.d.ts.map +1 -0
  107. package/dist/runtime/serve.js +97 -0
  108. package/dist/runtime/serve.js.map +1 -0
  109. package/dist/types/global.d.ts +0 -13
  110. package/dist/types/global.d.ts.map +1 -1
  111. package/dist/types/global.js +0 -6
  112. package/dist/types/global.js.map +1 -1
  113. package/dist/version.d.ts +3 -0
  114. package/dist/version.d.ts.map +1 -0
  115. package/dist/version.js +27 -0
  116. package/dist/version.js.map +1 -0
  117. package/package.json +7 -4
  118. package/dist/core/docker.d.ts +0 -99
  119. package/dist/core/docker.d.ts.map +0 -1
  120. package/dist/core/docker.js +0 -253
  121. package/dist/core/docker.js.map +0 -1
  122. package/dist/core/execution.d.ts +0 -34
  123. package/dist/core/execution.d.ts.map +0 -1
  124. package/dist/core/execution.js +0 -64
  125. package/dist/core/execution.js.map +0 -1
  126. package/dist/core/temp-manager.d.ts +0 -51
  127. package/dist/core/temp-manager.d.ts.map +0 -1
  128. package/dist/core/temp-manager.js +0 -73
  129. package/dist/core/temp-manager.js.map +0 -1
@@ -0,0 +1,27 @@
1
+ import { readFileSync } from 'fs';
2
+ import { fileURLToPath } from 'url';
3
+ import { dirname, join } from 'path';
4
+ const versionFilename = fileURLToPath(import.meta.url);
5
+ const versionDirname = dirname(versionFilename);
6
+ /**
7
+ * Find package.json in parent directories
8
+ * Handles both source (src/) and bundled (dist/) contexts
9
+ */
10
+ function findPackageJson() {
11
+ const paths = [
12
+ join(versionDirname, '../package.json'), // dist/ or src/
13
+ join(versionDirname, '../../package.json'), // src/core/ (not used, but safe)
14
+ ];
15
+ for (const p of paths) {
16
+ try {
17
+ return readFileSync(p, 'utf-8');
18
+ }
19
+ catch {
20
+ // Continue to next path
21
+ }
22
+ }
23
+ return JSON.stringify({ version: '0.0.0' });
24
+ }
25
+ /** CLI package version */
26
+ export const VERSION = JSON.parse(findPackageJson()).version;
27
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAErC,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvD,MAAM,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AAEhD;;;GAGG;AACH,SAAS,eAAe;IACtB,MAAM,KAAK,GAAG;QACZ,IAAI,CAAC,cAAc,EAAE,iBAAiB,CAAC,EAAE,gBAAgB;QACzD,IAAI,CAAC,cAAc,EAAE,oBAAoB,CAAC,EAAE,iCAAiC;KAC9E,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,0BAA0B;AAC1B,MAAM,CAAC,MAAM,OAAO,GAAW,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@walkeros/cli",
3
- "version": "0.5.1-next.1",
3
+ "version": "0.6.0",
4
4
  "description": "walkerOS CLI - Bundle and deploy walkerOS components",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -33,17 +33,20 @@
33
33
  "docker:publish": "bash scripts/publish-docker.sh"
34
34
  },
35
35
  "dependencies": {
36
- "@walkeros/core": "^0.5.1-next.0",
37
- "@walkeros/docker": "0.3.1-next.0",
38
- "@walkeros/server-core": "0.5.1-next.0",
36
+ "@walkeros/core": "0.6.0",
37
+ "@walkeros/server-core": "0.6.0",
39
38
  "chalk": "^5.6.2",
40
39
  "commander": "^14.0.2",
40
+ "cors": "^2.8.5",
41
41
  "esbuild": "^0.27.1",
42
+ "express": "^4.21.2",
42
43
  "fs-extra": "^11.3.2",
43
44
  "jsdom": "^27.3.0",
44
45
  "pacote": "^21.0.4"
45
46
  },
46
47
  "devDependencies": {
48
+ "@types/cors": "^2.8.17",
49
+ "@types/express": "^5.0.0",
47
50
  "@types/fs-extra": "^11.0.4",
48
51
  "@types/jsdom": "^27.0.0",
49
52
  "@types/pacote": "^11.1.8",
@@ -1,99 +0,0 @@
1
- /**
2
- * Docker Execution Utilities
3
- *
4
- * Handles Docker container execution for CLI commands.
5
- */
6
- import type { GlobalOptions } from '../types/global.js';
7
- /**
8
- * Docker image for CLI/build tools (bundle, simulate)
9
- * Uses explicit version by default, can be overridden with env var
10
- */
11
- export declare const CLI_DOCKER_IMAGE: string;
12
- /**
13
- * Docker image for production runtime (run command)
14
- * Uses explicit version by default, can be overridden with env var
15
- */
16
- export declare const RUNTIME_DOCKER_IMAGE: string;
17
- /**
18
- * @deprecated Use CLI_DOCKER_IMAGE or RUNTIME_DOCKER_IMAGE instead
19
- */
20
- export declare const DOCKER_IMAGE: string;
21
- /**
22
- * Build common Docker arguments from CLI options
23
- *
24
- * Extracts common flags (config, json, verbose, silent) that are shared
25
- * across bundle and simulate commands. Command-specific flags should be
26
- * added after calling this function.
27
- *
28
- * @param options - CLI options containing common flags
29
- * @returns Array of command-line arguments starting with config path
30
- */
31
- export declare function buildCommonDockerArgs(options: {
32
- config: string;
33
- json?: boolean;
34
- verbose?: boolean;
35
- silent?: boolean;
36
- }): string[];
37
- /**
38
- * Build Docker command for executing CLI commands
39
- *
40
- * @param command - CLI command (bundle, simulate, run)
41
- * @param args - Command arguments
42
- * @param options - Global options
43
- * @param configFile - Optional config file path to mount in Docker
44
- * @returns Docker command array
45
- */
46
- export declare function buildDockerCommand(command: string, args: string[], options?: GlobalOptions, configFile?: string): string[];
47
- /**
48
- * Execute command in Docker container
49
- *
50
- * @param command - CLI command
51
- * @param args - Command arguments
52
- * @param options - Global options
53
- * @param configFile - Optional config file path to mount in Docker
54
- * @returns Promise that resolves when command completes
55
- */
56
- export declare function executeInDocker(command: string, args: string[], options?: GlobalOptions, configFile?: string): Promise<void>;
57
- /**
58
- * Check if Docker is available
59
- *
60
- * @returns Promise resolving to true if Docker is available
61
- */
62
- export declare function isDockerAvailable(): Promise<boolean>;
63
- /**
64
- * Check if Docker image exists locally
65
- *
66
- * @param image - Docker image name
67
- * @returns Promise resolving to true if image exists
68
- */
69
- export declare function imageExists(image?: string): Promise<boolean>;
70
- /**
71
- * Build Docker command for run command (production runtime)
72
- *
73
- * @param mode - Run mode (collect | serve)
74
- * @param flowPath - Path to pre-built .mjs bundle (for collect mode) or custom file (for serve mode)
75
- * @param options - Runtime options
76
- * @returns Docker command array
77
- */
78
- export declare function buildDockerRunCommand(mode: 'collect' | 'serve', flowPath: string | null, options?: {
79
- port?: number;
80
- host?: string;
81
- serveName?: string;
82
- servePath?: string;
83
- }): string[];
84
- /**
85
- * Execute run command in Docker container (production runtime)
86
- *
87
- * @param mode - Run mode (collect | serve)
88
- * @param flowPath - Path to pre-built .mjs bundle (for collect mode) or custom file (for serve mode)
89
- * @param options - Runtime and global options
90
- * @returns Promise that resolves when command completes
91
- */
92
- export declare function executeRunInDocker(mode: 'collect' | 'serve', flowPath: string | null, options?: {
93
- port?: number;
94
- host?: string;
95
- serveName?: string;
96
- servePath?: string;
97
- silent?: boolean;
98
- }): Promise<void>;
99
- //# sourceMappingURL=docker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/core/docker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMxD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,QAC2C,CAAC;AAEzE;;;GAGG;AACH,eAAO,MAAM,oBAAoB,QAEI,CAAC;AAEtC;;GAEG;AACH,eAAO,MAAM,YAAY,QAAmB,CAAC;AAE7C;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,GAAG,MAAM,EAAE,CASX;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,aAAkB,EAC3B,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,EAAE,CAiDV;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,aAAkB,EAC3B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAS1D;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,KAAK,GAAE,MAAyB,GAC/B,OAAO,CAAC,OAAO,CAAC,CASlB;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,SAAS,GAAG,OAAO,EACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,OAAO,GAAE;IACP,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACf,GACL,MAAM,EAAE,CA8DV;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,SAAS,GAAG,OAAO,EACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,OAAO,GAAE;IACP,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CACb,GACL,OAAO,CAAC,IAAI,CAAC,CAuBf"}
@@ -1,253 +0,0 @@
1
- /**
2
- * Docker Execution Utilities
3
- *
4
- * Handles Docker container execution for CLI commands.
5
- */
6
- import { spawn } from 'child_process';
7
- import path from 'path';
8
- import { VERSION as DOCKER_VERSION } from '@walkeros/docker';
9
- import { isUrl } from '../config/utils.js';
10
- const CLI_VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : '0.0.0';
11
- /**
12
- * Docker image for CLI/build tools (bundle, simulate)
13
- * Uses explicit version by default, can be overridden with env var
14
- */
15
- export const CLI_DOCKER_IMAGE = process.env.WALKEROS_CLI_DOCKER_IMAGE || `walkeros/cli:${CLI_VERSION}`;
16
- /**
17
- * Docker image for production runtime (run command)
18
- * Uses explicit version by default, can be overridden with env var
19
- */
20
- export const RUNTIME_DOCKER_IMAGE = process.env.WALKEROS_RUNTIME_DOCKER_IMAGE ||
21
- `walkeros/docker:${DOCKER_VERSION}`;
22
- /**
23
- * @deprecated Use CLI_DOCKER_IMAGE or RUNTIME_DOCKER_IMAGE instead
24
- */
25
- export const DOCKER_IMAGE = CLI_DOCKER_IMAGE;
26
- /**
27
- * Build common Docker arguments from CLI options
28
- *
29
- * Extracts common flags (config, json, verbose, silent) that are shared
30
- * across bundle and simulate commands. Command-specific flags should be
31
- * added after calling this function.
32
- *
33
- * @param options - CLI options containing common flags
34
- * @returns Array of command-line arguments starting with config path
35
- */
36
- export function buildCommonDockerArgs(options) {
37
- const args = [options.config];
38
- // Common flags
39
- if (options.json)
40
- args.push('--json');
41
- if (options.verbose)
42
- args.push('--verbose');
43
- if (options.silent)
44
- args.push('--silent');
45
- return args;
46
- }
47
- /**
48
- * Build Docker command for executing CLI commands
49
- *
50
- * @param command - CLI command (bundle, simulate, run)
51
- * @param args - Command arguments
52
- * @param options - Global options
53
- * @param configFile - Optional config file path to mount in Docker
54
- * @returns Docker command array
55
- */
56
- export function buildDockerCommand(command, args, options = {}, configFile) {
57
- const cwd = process.cwd();
58
- const cmd = ['docker', 'run', '--rm'];
59
- // Mount config file if provided (only for local files, not URLs)
60
- if (configFile && !isUrl(configFile)) {
61
- const configPath = path.resolve(cwd, configFile);
62
- // Mount config file at /config/flow.json (read-only, separate from workspace)
63
- cmd.push('-v', `${configPath}:/config/flow.json:ro`);
64
- // Update args to use container path - replace first occurrence of config file path
65
- args = args.map((arg) => (arg === configFile ? '/config/flow.json' : arg));
66
- }
67
- // For URLs, pass them through as-is - container will download them
68
- // Mount current directory for output files
69
- cmd.push('-v', `${cwd}:/workspace`);
70
- cmd.push('-w', '/workspace');
71
- // Add user mapping on Linux/Mac to prevent permission issues
72
- if (process.platform !== 'win32') {
73
- try {
74
- const uid = process.getuid?.();
75
- const gid = process.getgid?.();
76
- if (uid !== undefined && gid !== undefined) {
77
- cmd.push('--user', `${uid}:${gid}`);
78
- }
79
- }
80
- catch {
81
- // Ignore if not available
82
- }
83
- }
84
- // Pass through environment variables
85
- if (options.verbose) {
86
- cmd.push('-e', 'VERBOSE=true');
87
- }
88
- if (options.silent) {
89
- cmd.push('-e', 'SILENT=true');
90
- }
91
- // Add the Docker image (CLI tools for bundle/simulate)
92
- cmd.push(CLI_DOCKER_IMAGE);
93
- // Add the command and arguments
94
- cmd.push(command, ...args);
95
- return cmd;
96
- }
97
- /**
98
- * Execute command in Docker container
99
- *
100
- * @param command - CLI command
101
- * @param args - Command arguments
102
- * @param options - Global options
103
- * @param configFile - Optional config file path to mount in Docker
104
- * @returns Promise that resolves when command completes
105
- */
106
- export async function executeInDocker(command, args, options = {}, configFile) {
107
- // Force --local execution inside container to prevent nested Docker attempts
108
- // Architecture: Host CLI decides environment (Docker vs local),
109
- // Container CLI always executes locally (no Docker-in-Docker)
110
- const containerArgs = [...args, '--local'];
111
- const dockerCmd = buildDockerCommand(command, containerArgs, options, configFile);
112
- return new Promise((resolve, reject) => {
113
- const proc = spawn(dockerCmd[0], dockerCmd.slice(1), {
114
- stdio: options.silent ? 'ignore' : 'inherit',
115
- shell: false,
116
- });
117
- proc.on('error', (error) => {
118
- reject(new Error(`Docker execution failed: ${error.message}`));
119
- });
120
- proc.on('exit', (code) => {
121
- if (code === 0) {
122
- resolve();
123
- }
124
- else {
125
- // Docker already logged the error via stdio inherit
126
- // Just exit with same code - no duplicate message
127
- process.exit(code || 1);
128
- }
129
- });
130
- });
131
- }
132
- /**
133
- * Check if Docker is available
134
- *
135
- * @returns Promise resolving to true if Docker is available
136
- */
137
- export async function isDockerAvailable() {
138
- return new Promise((resolve) => {
139
- const proc = spawn('docker', ['--version'], {
140
- stdio: 'ignore',
141
- });
142
- proc.on('error', () => resolve(false));
143
- proc.on('exit', (code) => resolve(code === 0));
144
- });
145
- }
146
- /**
147
- * Check if Docker image exists locally
148
- *
149
- * @param image - Docker image name
150
- * @returns Promise resolving to true if image exists
151
- */
152
- export async function imageExists(image = CLI_DOCKER_IMAGE) {
153
- return new Promise((resolve) => {
154
- const proc = spawn('docker', ['image', 'inspect', image], {
155
- stdio: 'ignore',
156
- });
157
- proc.on('error', () => resolve(false));
158
- proc.on('exit', (code) => resolve(code === 0));
159
- });
160
- }
161
- /**
162
- * Build Docker command for run command (production runtime)
163
- *
164
- * @param mode - Run mode (collect | serve)
165
- * @param flowPath - Path to pre-built .mjs bundle (for collect mode) or custom file (for serve mode)
166
- * @param options - Runtime options
167
- * @returns Docker command array
168
- */
169
- export function buildDockerRunCommand(mode, flowPath, options = {}) {
170
- const cwd = process.cwd();
171
- const cmd = ['docker', 'run', '--rm'];
172
- // Set MODE environment variable
173
- cmd.push('-e', `MODE=${mode}`);
174
- // Mount entire dist folder for collect mode (includes bundle + shared folders)
175
- // Must mount to /app/dist (not /app) to preserve container's node_modules
176
- // This allows relative paths like ./shared/credentials/sa.json to work
177
- if (mode === 'collect' && flowPath) {
178
- const absoluteFlowPath = path.resolve(cwd, flowPath);
179
- const flowDir = path.dirname(absoluteFlowPath);
180
- const flowFile = path.basename(absoluteFlowPath);
181
- cmd.push('-v', `${flowDir}:/app/dist:ro`);
182
- cmd.push('-e', `FLOW=/app/dist/${flowFile}`);
183
- }
184
- // Mount custom file for serve mode
185
- if (mode === 'serve' && flowPath) {
186
- const absoluteFilePath = path.resolve(cwd, flowPath);
187
- cmd.push('-v', `${absoluteFilePath}:/app/bundle.mjs:ro`);
188
- cmd.push('-e', 'FILE_PATH=/app/bundle.mjs');
189
- }
190
- // Port mapping - always map port for serve mode, use default if not specified
191
- const port = options.port !== undefined ? options.port : 8080;
192
- cmd.push('-p', `${port}:${port}`);
193
- cmd.push('-e', `PORT=${port}`);
194
- // Host
195
- if (options.host) {
196
- cmd.push('-e', `HOST=${options.host}`);
197
- }
198
- // Serve name (filename in URL)
199
- if (options.serveName) {
200
- cmd.push('-e', `SERVE_NAME=${options.serveName}`);
201
- }
202
- // Serve path (URL directory path)
203
- if (options.servePath) {
204
- cmd.push('-e', `SERVE_PATH=${options.servePath}`);
205
- }
206
- // Add user mapping on Linux/Mac to prevent permission issues
207
- if (process.platform !== 'win32') {
208
- try {
209
- const uid = process.getuid?.();
210
- const gid = process.getgid?.();
211
- if (uid !== undefined && gid !== undefined) {
212
- cmd.push('--user', `${uid}:${gid}`);
213
- }
214
- }
215
- catch {
216
- // Ignore if not available
217
- }
218
- }
219
- // Add the runtime Docker image
220
- cmd.push(RUNTIME_DOCKER_IMAGE);
221
- return cmd;
222
- }
223
- /**
224
- * Execute run command in Docker container (production runtime)
225
- *
226
- * @param mode - Run mode (collect | serve)
227
- * @param flowPath - Path to pre-built .mjs bundle (for collect mode) or custom file (for serve mode)
228
- * @param options - Runtime and global options
229
- * @returns Promise that resolves when command completes
230
- */
231
- export async function executeRunInDocker(mode, flowPath, options = {}) {
232
- const dockerCmd = buildDockerRunCommand(mode, flowPath, options);
233
- return new Promise((resolve, reject) => {
234
- const proc = spawn(dockerCmd[0], dockerCmd.slice(1), {
235
- stdio: options.silent ? 'ignore' : 'inherit',
236
- shell: false,
237
- });
238
- proc.on('error', (error) => {
239
- reject(new Error(`Docker execution failed: ${error.message}`));
240
- });
241
- proc.on('exit', (code) => {
242
- if (code === 0) {
243
- resolve();
244
- }
245
- else {
246
- // Docker already logged the error via stdio inherit
247
- // Just exit with same code - no duplicate message
248
- process.exit(code || 1);
249
- }
250
- });
251
- });
252
- }
253
- //# sourceMappingURL=docker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/core/docker.ts"],"names":[],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- /**
2
- * Execution Mode Handler
3
- *
4
- * Determines whether to execute commands locally or in Docker.
5
- */
6
- import type { GlobalOptions } from '../types/global.js';
7
- import type { Logger } from './logger.js';
8
- /**
9
- * Execution mode
10
- */
11
- export type ExecutionMode = 'local' | 'docker';
12
- /**
13
- * Get execution mode from options
14
- *
15
- * @param options - Global options
16
- * @returns Execution mode
17
- */
18
- export declare function getExecutionMode(options: GlobalOptions): ExecutionMode;
19
- /**
20
- * Execute command handler type
21
- */
22
- export type ExecuteHandler = () => Promise<void>;
23
- /**
24
- * Execute command based on mode
25
- *
26
- * @param localHandler - Function to execute locally
27
- * @param dockerCommand - Docker command name
28
- * @param dockerArgs - Docker command arguments
29
- * @param options - Global options
30
- * @param logger - Logger instance
31
- * @param configFile - Optional config file path to mount in Docker
32
- */
33
- export declare function executeCommand(localHandler: ExecuteHandler, dockerCommand: string, dockerArgs: string[], options: GlobalOptions, logger?: Logger, configFile?: string): Promise<void>;
34
- //# sourceMappingURL=execution.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/core/execution.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE/C;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CAQtE;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAEjD;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,YAAY,EAAE,cAAc,EAC5B,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAAE,EACpB,OAAO,EAAE,aAAa,EACtB,MAAM,CAAC,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAoCf"}
@@ -1,64 +0,0 @@
1
- /**
2
- * Execution Mode Handler
3
- *
4
- * Determines whether to execute commands locally or in Docker.
5
- */
6
- import { executeInDocker, isDockerAvailable, } from './docker.js';
7
- /**
8
- * Get execution mode from options
9
- *
10
- * @param options - Global options
11
- * @returns Execution mode
12
- */
13
- export function getExecutionMode(options) {
14
- // Force local mode if:
15
- // 1. --local flag is provided, OR
16
- // 2. Running inside a Docker container (WALKEROS_CONTAINER env var)
17
- if (options.local || process.env.WALKEROS_CONTAINER === 'true') {
18
- return 'local';
19
- }
20
- return 'docker';
21
- }
22
- /**
23
- * Execute command based on mode
24
- *
25
- * @param localHandler - Function to execute locally
26
- * @param dockerCommand - Docker command name
27
- * @param dockerArgs - Docker command arguments
28
- * @param options - Global options
29
- * @param logger - Logger instance
30
- * @param configFile - Optional config file path to mount in Docker
31
- */
32
- export async function executeCommand(localHandler, dockerCommand, dockerArgs, options, logger, configFile) {
33
- const mode = getExecutionMode(options);
34
- // Handle dry-run
35
- if (options.dryRun) {
36
- if (mode === 'docker') {
37
- const cmd = `docker run walkeros/cli:latest ${dockerCommand} ${dockerArgs.join(' ')}`;
38
- logger?.info(`[DRY-RUN] Would execute: ${cmd}`);
39
- }
40
- else {
41
- logger?.info(`[DRY-RUN] Would execute locally: ${dockerCommand} ${dockerArgs.join(' ')}`);
42
- }
43
- return;
44
- }
45
- // Execute based on mode
46
- if (mode === 'local') {
47
- if (logger && !options.silent) {
48
- logger.info('🖥️ Executing locally...');
49
- }
50
- await localHandler();
51
- }
52
- else {
53
- // Docker mode
54
- const dockerAvailable = await isDockerAvailable();
55
- if (!dockerAvailable) {
56
- throw new Error('Docker is not available. Please install Docker or use --local flag to execute locally.');
57
- }
58
- if (logger && !options.silent) {
59
- logger.info('🐳 Executing in Docker container...');
60
- }
61
- await executeInDocker(dockerCommand, dockerArgs, options, configFile);
62
- }
63
- }
64
- //# sourceMappingURL=execution.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"execution.js","sourceRoot":"","sources":["../../src/core/execution.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,eAAe,EAEf,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAQrB;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAsB;IACrD,uBAAuB;IACvB,kCAAkC;IAClC,oEAAoE;IACpE,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,MAAM,EAAE,CAAC;QAC/D,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAOD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,YAA4B,EAC5B,aAAqB,EACrB,UAAoB,EACpB,OAAsB,EACtB,MAAe,EACf,UAAmB;IAEnB,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAEvC,iBAAiB;IACjB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,kCAAkC,aAAa,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACtF,MAAM,EAAE,IAAI,CAAC,4BAA4B,GAAG,EAAE,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,IAAI,CACV,oCAAoC,aAAa,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAC5E,CAAC;QACJ,CAAC;QACD,OAAO;IACT,CAAC;IAED,wBAAwB;IACxB,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM,YAAY,EAAE,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,cAAc;QACd,MAAM,eAAe,GAAG,MAAM,iBAAiB,EAAE,CAAC;QAClD,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,wFAAwF,CACzF,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,eAAe,CAAC,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IACxE,CAAC;AACH,CAAC"}
@@ -1,51 +0,0 @@
1
- /**
2
- * Unified Temporary Directory Manager
3
- *
4
- * Manages temporary directories for CLI operations using hash-based naming.
5
- * This provides a single location for all temp files per operation, making
6
- * cleanup simple and Docker mounting straightforward.
7
- */
8
- export interface TempDirPaths {
9
- root: string;
10
- nodeModules: string;
11
- cache: string;
12
- bundle: string;
13
- entry: string;
14
- }
15
- /**
16
- * Manages a unified temporary directory structure for CLI operations
17
- */
18
- export declare class TempDirManager {
19
- private hash;
20
- readonly paths: TempDirPaths;
21
- /**
22
- * Create a new TempDirManager with hash-based directory naming
23
- *
24
- * @param configPath - Path to the config file (used in hash)
25
- * @param operation - Operation type ('bundle' | 'simulate')
26
- * @param timestamp - Optional timestamp for uniqueness (defaults to Date.now())
27
- */
28
- static create(configPath: string, operation: 'bundle' | 'simulate', timestamp?: number): Promise<TempDirManager>;
29
- constructor(hash: string);
30
- /**
31
- * Initialize the temporary directory structure
32
- */
33
- initialize(): Promise<void>;
34
- /**
35
- * Clean up the temporary directory
36
- */
37
- cleanup(): Promise<void>;
38
- /**
39
- * Get the hash used for this temp directory
40
- */
41
- getHash(): string;
42
- /**
43
- * Get a path within the temp directory
44
- */
45
- getPath(...parts: string[]): string;
46
- /**
47
- * Check if the temp directory exists
48
- */
49
- exists(): Promise<boolean>;
50
- }
51
- //# sourceMappingURL=temp-manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"temp-manager.d.ts","sourceRoot":"","sources":["../../src/core/temp-manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,IAAI,CAAS;IACrB,SAAgB,KAAK,EAAE,YAAY,CAAC;IAEpC;;;;;;OAMG;WACU,MAAM,CACjB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,QAAQ,GAAG,UAAU,EAChC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,cAAc,CAAC;gBAMd,IAAI,EAAE,MAAM;IAaxB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACH,OAAO,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;IAInC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;CAGjC"}
@@ -1,73 +0,0 @@
1
- /**
2
- * Unified Temporary Directory Manager
3
- *
4
- * Manages temporary directories for CLI operations using hash-based naming.
5
- * This provides a single location for all temp files per operation, making
6
- * cleanup simple and Docker mounting straightforward.
7
- */
8
- import { getHashServer } from '@walkeros/server-core';
9
- import path from 'path';
10
- import fs from 'fs-extra';
11
- /**
12
- * Manages a unified temporary directory structure for CLI operations
13
- */
14
- export class TempDirManager {
15
- hash;
16
- paths;
17
- /**
18
- * Create a new TempDirManager with hash-based directory naming
19
- *
20
- * @param configPath - Path to the config file (used in hash)
21
- * @param operation - Operation type ('bundle' | 'simulate')
22
- * @param timestamp - Optional timestamp for uniqueness (defaults to Date.now())
23
- */
24
- static async create(configPath, operation, timestamp) {
25
- const ts = timestamp || Date.now();
26
- const hash = await getHashServer(`${configPath}:${operation}:${ts}`, 12);
27
- return new TempDirManager(hash);
28
- }
29
- constructor(hash) {
30
- this.hash = hash;
31
- const root = path.join('.tmp', `walkeros-${hash}`);
32
- this.paths = {
33
- root,
34
- nodeModules: path.join(root, 'node_modules'),
35
- cache: path.join(root, 'cache'),
36
- bundle: path.join(root, 'bundle.js'),
37
- entry: path.join(root, 'entry.js'),
38
- };
39
- }
40
- /**
41
- * Initialize the temporary directory structure
42
- */
43
- async initialize() {
44
- await fs.ensureDir(this.paths.root);
45
- await fs.ensureDir(this.paths.nodeModules);
46
- await fs.ensureDir(this.paths.cache);
47
- }
48
- /**
49
- * Clean up the temporary directory
50
- */
51
- async cleanup() {
52
- await fs.remove(this.paths.root);
53
- }
54
- /**
55
- * Get the hash used for this temp directory
56
- */
57
- getHash() {
58
- return this.hash;
59
- }
60
- /**
61
- * Get a path within the temp directory
62
- */
63
- getPath(...parts) {
64
- return path.join(this.paths.root, ...parts);
65
- }
66
- /**
67
- * Check if the temp directory exists
68
- */
69
- async exists() {
70
- return fs.pathExists(this.paths.root);
71
- }
72
- }
73
- //# sourceMappingURL=temp-manager.js.map