@walkeros/cli 0.6.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +53 -8
  3. package/dist/examples/flow-order-complete.json +0 -1
  4. package/dist/examples/flow-simple.json +0 -3
  5. package/dist/examples/flow.json +0 -1
  6. package/dist/index.d.ts +3 -0
  7. package/dist/index.js +390 -196
  8. package/dist/index.js.map +1 -1
  9. package/dist/runtime/main.js +3 -2
  10. package/dist/runtime/main.js.map +1 -1
  11. package/examples/flow-order-complete.json +0 -1
  12. package/examples/flow-simple.json +0 -3
  13. package/examples/flow.json +0 -1
  14. package/package.json +2 -2
  15. package/dist/__tests__/bundle/bundler-helpers.test.d.ts +0 -2
  16. package/dist/__tests__/bundle/bundler-helpers.test.d.ts.map +0 -1
  17. package/dist/__tests__/bundle/bundler-helpers.test.js +0 -151
  18. package/dist/__tests__/bundle/bundler-helpers.test.js.map +0 -1
  19. package/dist/__tests__/bundle/bundler.test.d.ts +0 -2
  20. package/dist/__tests__/bundle/bundler.test.d.ts.map +0 -1
  21. package/dist/__tests__/bundle/bundler.test.js +0 -352
  22. package/dist/__tests__/bundle/bundler.test.js.map +0 -1
  23. package/dist/__tests__/bundle/programmatic.test.d.ts +0 -2
  24. package/dist/__tests__/bundle/programmatic.test.d.ts.map +0 -1
  25. package/dist/__tests__/bundle/programmatic.test.js +0 -148
  26. package/dist/__tests__/bundle/programmatic.test.js.map +0 -1
  27. package/dist/__tests__/cli-e2e.test.d.ts +0 -8
  28. package/dist/__tests__/cli-e2e.test.d.ts.map +0 -1
  29. package/dist/__tests__/cli-e2e.test.js +0 -145
  30. package/dist/__tests__/cli-e2e.test.js.map +0 -1
  31. package/dist/__tests__/cli.test.d.ts +0 -2
  32. package/dist/__tests__/cli.test.d.ts.map +0 -1
  33. package/dist/__tests__/cli.test.js +0 -179
  34. package/dist/__tests__/cli.test.js.map +0 -1
  35. package/dist/__tests__/config-loader.test.d.ts +0 -7
  36. package/dist/__tests__/config-loader.test.d.ts.map +0 -1
  37. package/dist/__tests__/config-loader.test.js +0 -414
  38. package/dist/__tests__/config-loader.test.js.map +0 -1
  39. package/dist/__tests__/core/asset-resolver.test.d.ts +0 -2
  40. package/dist/__tests__/core/asset-resolver.test.d.ts.map +0 -1
  41. package/dist/__tests__/core/asset-resolver.test.js +0 -14
  42. package/dist/__tests__/core/asset-resolver.test.js.map +0 -1
  43. package/dist/__tests__/core/build-cache.test.d.ts +0 -2
  44. package/dist/__tests__/core/build-cache.test.d.ts.map +0 -1
  45. package/dist/__tests__/core/build-cache.test.js +0 -55
  46. package/dist/__tests__/core/build-cache.test.js.map +0 -1
  47. package/dist/__tests__/core/cache-utils.test.d.ts +0 -2
  48. package/dist/__tests__/core/cache-utils.test.d.ts.map +0 -1
  49. package/dist/__tests__/core/cache-utils.test.js +0 -70
  50. package/dist/__tests__/core/cache-utils.test.js.map +0 -1
  51. package/dist/__tests__/core/config.test.d.ts +0 -2
  52. package/dist/__tests__/core/config.test.d.ts.map +0 -1
  53. package/dist/__tests__/core/config.test.js +0 -79
  54. package/dist/__tests__/core/config.test.js.map +0 -1
  55. package/dist/__tests__/core/logger.test.d.ts +0 -2
  56. package/dist/__tests__/core/logger.test.d.ts.map +0 -1
  57. package/dist/__tests__/core/logger.test.js +0 -53
  58. package/dist/__tests__/core/logger.test.js.map +0 -1
  59. package/dist/__tests__/integration/bundle-run.integration.test.d.ts +0 -8
  60. package/dist/__tests__/integration/bundle-run.integration.test.d.ts.map +0 -1
  61. package/dist/__tests__/integration/bundle-run.integration.test.js +0 -54
  62. package/dist/__tests__/integration/bundle-run.integration.test.js.map +0 -1
  63. package/dist/__tests__/push/push.test.d.ts +0 -7
  64. package/dist/__tests__/push/push.test.d.ts.map +0 -1
  65. package/dist/__tests__/push/push.test.js +0 -197
  66. package/dist/__tests__/push/push.test.js.map +0 -1
  67. package/dist/__tests__/simulate/env-loader.test.d.ts +0 -2
  68. package/dist/__tests__/simulate/env-loader.test.d.ts.map +0 -1
  69. package/dist/__tests__/simulate/env-loader.test.js +0 -47
  70. package/dist/__tests__/simulate/env-loader.test.js.map +0 -1
  71. package/dist/__tests__/simulate/node-executor.test.d.ts +0 -5
  72. package/dist/__tests__/simulate/node-executor.test.d.ts.map +0 -1
  73. package/dist/__tests__/simulate/node-executor.test.js +0 -25
  74. package/dist/__tests__/simulate/node-executor.test.js.map +0 -1
  75. package/dist/__tests__/simulate/server-simulate.integration.test.d.ts +0 -5
  76. package/dist/__tests__/simulate/server-simulate.integration.test.d.ts.map +0 -1
  77. package/dist/__tests__/simulate/server-simulate.integration.test.js +0 -58
  78. package/dist/__tests__/simulate/server-simulate.integration.test.js.map +0 -1
  79. package/dist/__tests__/smoke/production.smoke.test.d.ts +0 -8
  80. package/dist/__tests__/smoke/production.smoke.test.d.ts.map +0 -1
  81. package/dist/__tests__/smoke/production.smoke.test.js +0 -65
  82. package/dist/__tests__/smoke/production.smoke.test.js.map +0 -1
  83. package/dist/commands/bundle/bundler.d.ts +0 -32
  84. package/dist/commands/bundle/bundler.d.ts.map +0 -1
  85. package/dist/commands/bundle/bundler.js +0 -569
  86. package/dist/commands/bundle/bundler.js.map +0 -1
  87. package/dist/commands/bundle/index.d.ts +0 -59
  88. package/dist/commands/bundle/index.d.ts.map +0 -1
  89. package/dist/commands/bundle/index.js +0 -184
  90. package/dist/commands/bundle/index.js.map +0 -1
  91. package/dist/commands/bundle/package-manager.d.ts +0 -8
  92. package/dist/commands/bundle/package-manager.d.ts.map +0 -1
  93. package/dist/commands/bundle/package-manager.js +0 -220
  94. package/dist/commands/bundle/package-manager.js.map +0 -1
  95. package/dist/commands/bundle/stats.d.ts +0 -23
  96. package/dist/commands/bundle/stats.d.ts.map +0 -1
  97. package/dist/commands/bundle/stats.js +0 -52
  98. package/dist/commands/bundle/stats.js.map +0 -1
  99. package/dist/commands/cache.d.ts +0 -7
  100. package/dist/commands/cache.d.ts.map +0 -1
  101. package/dist/commands/cache.js +0 -68
  102. package/dist/commands/cache.js.map +0 -1
  103. package/dist/commands/push/index.d.ts +0 -7
  104. package/dist/commands/push/index.d.ts.map +0 -1
  105. package/dist/commands/push/index.js +0 -247
  106. package/dist/commands/push/index.js.map +0 -1
  107. package/dist/commands/push/types.d.ts +0 -22
  108. package/dist/commands/push/types.d.ts.map +0 -1
  109. package/dist/commands/push/types.js +0 -2
  110. package/dist/commands/push/types.js.map +0 -1
  111. package/dist/commands/run/__tests__/run.integration.test.d.ts +0 -7
  112. package/dist/commands/run/__tests__/run.integration.test.d.ts.map +0 -1
  113. package/dist/commands/run/__tests__/run.integration.test.js +0 -51
  114. package/dist/commands/run/__tests__/run.integration.test.js.map +0 -1
  115. package/dist/commands/run/__tests__/validators.test.d.ts +0 -2
  116. package/dist/commands/run/__tests__/validators.test.d.ts.map +0 -1
  117. package/dist/commands/run/__tests__/validators.test.js +0 -80
  118. package/dist/commands/run/__tests__/validators.test.js.map +0 -1
  119. package/dist/commands/run/execution.d.ts +0 -14
  120. package/dist/commands/run/execution.d.ts.map +0 -1
  121. package/dist/commands/run/execution.js +0 -41
  122. package/dist/commands/run/execution.js.map +0 -1
  123. package/dist/commands/run/index.d.ts +0 -38
  124. package/dist/commands/run/index.d.ts.map +0 -1
  125. package/dist/commands/run/index.js +0 -154
  126. package/dist/commands/run/index.js.map +0 -1
  127. package/dist/commands/run/types.d.ts +0 -65
  128. package/dist/commands/run/types.d.ts.map +0 -1
  129. package/dist/commands/run/types.js +0 -7
  130. package/dist/commands/run/types.js.map +0 -1
  131. package/dist/commands/run/utils.d.ts +0 -29
  132. package/dist/commands/run/utils.d.ts.map +0 -1
  133. package/dist/commands/run/utils.js +0 -52
  134. package/dist/commands/run/utils.js.map +0 -1
  135. package/dist/commands/run/validators.d.ts +0 -33
  136. package/dist/commands/run/validators.d.ts.map +0 -1
  137. package/dist/commands/run/validators.js +0 -58
  138. package/dist/commands/run/validators.js.map +0 -1
  139. package/dist/commands/simulate/env-loader.d.ts +0 -19
  140. package/dist/commands/simulate/env-loader.d.ts.map +0 -1
  141. package/dist/commands/simulate/env-loader.js +0 -44
  142. package/dist/commands/simulate/env-loader.js.map +0 -1
  143. package/dist/commands/simulate/index.d.ts +0 -48
  144. package/dist/commands/simulate/index.d.ts.map +0 -1
  145. package/dist/commands/simulate/index.js +0 -113
  146. package/dist/commands/simulate/index.js.map +0 -1
  147. package/dist/commands/simulate/jsdom-executor.d.ts +0 -37
  148. package/dist/commands/simulate/jsdom-executor.d.ts.map +0 -1
  149. package/dist/commands/simulate/jsdom-executor.js +0 -137
  150. package/dist/commands/simulate/jsdom-executor.js.map +0 -1
  151. package/dist/commands/simulate/node-executor.d.ts +0 -28
  152. package/dist/commands/simulate/node-executor.d.ts.map +0 -1
  153. package/dist/commands/simulate/node-executor.js +0 -94
  154. package/dist/commands/simulate/node-executor.js.map +0 -1
  155. package/dist/commands/simulate/simulator.d.ts +0 -14
  156. package/dist/commands/simulate/simulator.d.ts.map +0 -1
  157. package/dist/commands/simulate/simulator.js +0 -163
  158. package/dist/commands/simulate/simulator.js.map +0 -1
  159. package/dist/commands/simulate/tracker.d.ts +0 -30
  160. package/dist/commands/simulate/tracker.d.ts.map +0 -1
  161. package/dist/commands/simulate/tracker.js +0 -96
  162. package/dist/commands/simulate/tracker.js.map +0 -1
  163. package/dist/commands/simulate/types.d.ts +0 -20
  164. package/dist/commands/simulate/types.d.ts.map +0 -1
  165. package/dist/commands/simulate/types.js +0 -2
  166. package/dist/commands/simulate/types.js.map +0 -1
  167. package/dist/config/build-defaults.d.ts +0 -49
  168. package/dist/config/build-defaults.d.ts.map +0 -1
  169. package/dist/config/build-defaults.js +0 -68
  170. package/dist/config/build-defaults.js.map +0 -1
  171. package/dist/config/index.d.ts +0 -13
  172. package/dist/config/index.d.ts.map +0 -1
  173. package/dist/config/index.js +0 -15
  174. package/dist/config/index.js.map +0 -1
  175. package/dist/config/loader.d.ts +0 -81
  176. package/dist/config/loader.d.ts.map +0 -1
  177. package/dist/config/loader.js +0 -153
  178. package/dist/config/loader.js.map +0 -1
  179. package/dist/config/utils.d.ts +0 -101
  180. package/dist/config/utils.d.ts.map +0 -1
  181. package/dist/config/utils.js +0 -235
  182. package/dist/config/utils.js.map +0 -1
  183. package/dist/config/validators.d.ts +0 -52
  184. package/dist/config/validators.d.ts.map +0 -1
  185. package/dist/config/validators.js +0 -85
  186. package/dist/config/validators.js.map +0 -1
  187. package/dist/core/asset-resolver.d.ts +0 -34
  188. package/dist/core/asset-resolver.d.ts.map +0 -1
  189. package/dist/core/asset-resolver.js +0 -70
  190. package/dist/core/asset-resolver.js.map +0 -1
  191. package/dist/core/build-cache.d.ts +0 -23
  192. package/dist/core/build-cache.d.ts.map +0 -1
  193. package/dist/core/build-cache.js +0 -44
  194. package/dist/core/build-cache.js.map +0 -1
  195. package/dist/core/cache-utils.d.ts +0 -27
  196. package/dist/core/cache-utils.d.ts.map +0 -1
  197. package/dist/core/cache-utils.js +0 -60
  198. package/dist/core/cache-utils.js.map +0 -1
  199. package/dist/core/index.d.ts +0 -8
  200. package/dist/core/index.d.ts.map +0 -1
  201. package/dist/core/index.js +0 -8
  202. package/dist/core/index.js.map +0 -1
  203. package/dist/core/local-packages.d.ts +0 -19
  204. package/dist/core/local-packages.d.ts.map +0 -1
  205. package/dist/core/local-packages.js +0 -60
  206. package/dist/core/local-packages.js.map +0 -1
  207. package/dist/core/logger.d.ts +0 -30
  208. package/dist/core/logger.d.ts.map +0 -1
  209. package/dist/core/logger.js +0 -85
  210. package/dist/core/logger.js.map +0 -1
  211. package/dist/core/output.d.ts +0 -30
  212. package/dist/core/output.d.ts.map +0 -1
  213. package/dist/core/output.js +0 -46
  214. package/dist/core/output.js.map +0 -1
  215. package/dist/core/timer.d.ts +0 -14
  216. package/dist/core/timer.d.ts.map +0 -1
  217. package/dist/core/timer.js +0 -29
  218. package/dist/core/timer.js.map +0 -1
  219. package/dist/core/tmp.d.ts +0 -27
  220. package/dist/core/tmp.d.ts.map +0 -1
  221. package/dist/core/tmp.js +0 -36
  222. package/dist/core/tmp.js.map +0 -1
  223. package/dist/core/utils.d.ts +0 -10
  224. package/dist/core/utils.d.ts.map +0 -1
  225. package/dist/core/utils.js +0 -12
  226. package/dist/core/utils.js.map +0 -1
  227. package/dist/index.d.ts.map +0 -1
  228. package/dist/runtime/index.d.ts +0 -10
  229. package/dist/runtime/index.d.ts.map +0 -1
  230. package/dist/runtime/index.js +0 -10
  231. package/dist/runtime/index.js.map +0 -1
  232. package/dist/runtime/main.d.ts.map +0 -1
  233. package/dist/runtime/runner.d.ts +0 -20
  234. package/dist/runtime/runner.d.ts.map +0 -1
  235. package/dist/runtime/runner.js +0 -72
  236. package/dist/runtime/runner.js.map +0 -1
  237. package/dist/runtime/serve.d.ts +0 -19
  238. package/dist/runtime/serve.d.ts.map +0 -1
  239. package/dist/runtime/serve.js +0 -97
  240. package/dist/runtime/serve.js.map +0 -1
  241. package/dist/schemas/index.d.ts +0 -9
  242. package/dist/schemas/index.d.ts.map +0 -1
  243. package/dist/schemas/index.js +0 -9
  244. package/dist/schemas/index.js.map +0 -1
  245. package/dist/schemas/primitives.d.ts +0 -37
  246. package/dist/schemas/primitives.d.ts.map +0 -1
  247. package/dist/schemas/primitives.js +0 -43
  248. package/dist/schemas/primitives.js.map +0 -1
  249. package/dist/schemas/run.d.ts +0 -23
  250. package/dist/schemas/run.d.ts.map +0 -1
  251. package/dist/schemas/run.js +0 -20
  252. package/dist/schemas/run.js.map +0 -1
  253. package/dist/types/bundle.d.ts +0 -141
  254. package/dist/types/bundle.d.ts.map +0 -1
  255. package/dist/types/bundle.js +0 -10
  256. package/dist/types/bundle.js.map +0 -1
  257. package/dist/types/global.d.ts +0 -38
  258. package/dist/types/global.d.ts.map +0 -1
  259. package/dist/types/global.js +0 -24
  260. package/dist/types/global.js.map +0 -1
  261. package/dist/types/index.d.ts +0 -8
  262. package/dist/types/index.d.ts.map +0 -1
  263. package/dist/types/index.js +0 -8
  264. package/dist/types/index.js.map +0 -1
  265. package/dist/version.d.ts +0 -3
  266. package/dist/version.d.ts.map +0 -1
  267. package/dist/version.js +0 -27
  268. package/dist/version.js.map +0 -1
  269. package/dist/walker.js +0 -1
@@ -3,7 +3,7 @@
3
3
  // src/runtime/runner.ts
4
4
  import { pathToFileURL } from "url";
5
5
  import { resolve, dirname } from "path";
6
- async function runFlow(file, config, logger) {
6
+ async function runFlow(file, config, logger, loggerConfig) {
7
7
  logger.info(`Loading flow from ${file}`);
8
8
  try {
9
9
  const absolutePath = resolve(file);
@@ -16,7 +16,8 @@ async function runFlow(file, config, logger) {
16
16
  `Invalid flow bundle: ${file} must export a default function`
17
17
  );
18
18
  }
19
- const result = await module.default(config);
19
+ const flowContext = loggerConfig ? { ...config, logger: loggerConfig } : config;
20
+ const result = await module.default(flowContext);
20
21
  if (!result || !result.collector) {
21
22
  logger.throw(`Invalid flow bundle: ${file} must return { collector }`);
22
23
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/runtime/runner.ts","../../src/runtime/serve.ts","../../src/version.ts","../../src/core/logger.ts","../../src/runtime/main.ts"],"sourcesContent":["/**\n * Runtime executor for pre-built walkerOS flows\n *\n * This module runs pre-built .mjs flow bundles without any build-time operations.\n * All bundling, package downloading, and code generation happens BEFORE this runs.\n */\n\nimport { pathToFileURL } from 'url';\nimport { resolve, dirname } from 'path';\nimport type { Logger } from '@walkeros/core';\n\nexport interface RuntimeConfig {\n port?: number;\n host?: string;\n}\n\n/**\n * Run a pre-built flow bundle\n *\n * @param file - Absolute path to pre-built .mjs flow file\n * @param config - Optional runtime configuration\n * @param logger - Logger instance for output\n */\nexport async function runFlow(\n file: string,\n config: RuntimeConfig | undefined,\n logger: Logger.Instance,\n): Promise<void> {\n logger.info(`Loading flow from ${file}`);\n\n try {\n const absolutePath = resolve(file);\n const flowDir = dirname(absolutePath);\n\n // Change working directory to flow's directory\n // This ensures relative paths (e.g., ./shared/credentials.json) work\n // consistently in both local and Docker execution modes\n process.chdir(flowDir);\n\n const fileUrl = pathToFileURL(absolutePath).href;\n const module = await import(fileUrl);\n\n if (!module.default || typeof module.default !== 'function') {\n logger.throw(\n `Invalid flow bundle: ${file} must export a default function`,\n );\n }\n\n // Execute the flow's factory function\n const result = await module.default(config);\n\n if (!result || !result.collector) {\n logger.throw(`Invalid flow bundle: ${file} must return { collector }`);\n }\n\n const { collector } = result;\n\n logger.info('Flow running');\n if (config?.port) {\n logger.info(`Port: ${config.port}`);\n }\n\n // Graceful shutdown handler\n const shutdown = async (signal: string) => {\n logger.info(`Received ${signal}, shutting down gracefully...`);\n\n try {\n // Use collector's shutdown command if available\n if (collector.command) {\n await collector.command('shutdown');\n }\n logger.info('Shutdown complete');\n process.exit(0);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error during shutdown: ${message}`);\n process.exit(1);\n }\n };\n\n // Register shutdown handlers\n process.on('SIGTERM', () => shutdown('SIGTERM'));\n process.on('SIGINT', () => shutdown('SIGINT'));\n\n // Keep process alive\n await new Promise(() => {});\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Failed to run flow: ${message}`);\n if (error instanceof Error && error.stack) {\n logger.debug('Stack trace:', { stack: error.stack });\n }\n throw error;\n }\n}\n","/**\n * Serve mode - serve single file (typically generated bundle)\n */\n\nimport express from 'express';\nimport { resolve } from 'path';\nimport type { Logger } from '@walkeros/core';\nimport { VERSION } from '../version';\n\nexport interface ServeConfig {\n port?: number;\n host?: string;\n servePath?: string;\n serveName?: string;\n file?: string;\n}\n\n/**\n * Run serve mode - serve single file (typically generated bundle)\n *\n * @param config - Server configuration\n * @param logger - Logger instance for output\n */\nexport async function runServeMode(\n config: ServeConfig | undefined,\n logger: Logger.Instance,\n): Promise<void> {\n // Port priority: ENV variable > config > default\n const port = process.env.PORT\n ? parseInt(process.env.PORT, 10)\n : config?.port || 8080;\n\n // Host priority: ENV variable > config > default\n const host = process.env.HOST || config?.host || '0.0.0.0';\n\n // File path: ENV variable > config > default (resolve to absolute)\n const file = resolve(process.env.FILE || config?.file || './dist/walker.js');\n\n // Serve name (filename in URL): ENV variable > config > default\n const serveName = process.env.SERVE_NAME || config?.serveName || 'walker.js';\n\n // Serve path (URL directory): ENV variable > config > default (empty = root)\n const servePath = process.env.SERVE_PATH || config?.servePath || '';\n\n // Build full URL path\n const urlPath = servePath ? `/${servePath}/${serveName}` : `/${serveName}`;\n\n logger.info('Starting single-file server...');\n logger.info(`File: ${file}`);\n logger.info(`URL: http://${host}:${port}${urlPath}`);\n\n try {\n const app = express();\n\n // Health check\n app.get('/health', (req, res) => {\n res.json({\n status: 'ok',\n version: VERSION,\n timestamp: Date.now(),\n mode: 'serve',\n file: file,\n url: urlPath,\n });\n });\n\n // Serve single file at custom URL path\n app.get(urlPath, (req, res) => {\n // Set content type before streaming\n res.type('application/javascript');\n\n // Allow dotfiles since file paths may include dotfile directories\n res.sendFile(file, { dotfiles: 'allow' }, (err) => {\n if (err && !res.headersSent) {\n const errCode = (err as NodeJS.ErrnoException).code;\n // Express 5 uses HTTP-style errors with status/statusCode\n const errStatus =\n (err as { status?: number; statusCode?: number }).status ||\n (err as { status?: number; statusCode?: number }).statusCode;\n\n // Log errors (except client disconnections)\n if (errCode !== 'ECONNABORTED') {\n logger.error(\n `sendFile error for ${file}: ${err.message} (code: ${errCode}, status: ${errStatus})`,\n );\n }\n\n // Send appropriate error response (check both Node.js codes and HTTP status)\n if (\n errStatus === 404 ||\n errCode === 'ENOENT' ||\n errCode === 'EISDIR' ||\n errCode === 'ENOTDIR'\n ) {\n res.status(404).send('File not found');\n } else if (errCode !== 'ECONNABORTED') {\n res.status(500).send('Internal server error');\n }\n }\n });\n });\n\n // Start server\n const server = app.listen(port, host, () => {\n logger.info(`Server listening on http://${host}:${port}`);\n logger.info(`GET ${urlPath} - Bundle file`);\n logger.info(`GET /health - Health check`);\n });\n\n // Graceful shutdown\n const shutdownHandler = (signal: string) => {\n logger.info(`Received ${signal}, shutting down...`);\n server.close(() => {\n logger.info('Server closed');\n process.exit(0);\n });\n };\n\n process.on('SIGTERM', () => shutdownHandler('SIGTERM'));\n process.on('SIGINT', () => shutdownHandler('SIGINT'));\n\n // Keep process alive\n await new Promise(() => {});\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Server failed: ${message}`);\n process.exit(1);\n }\n}\n","import { readFileSync } from 'fs';\nimport { fileURLToPath } from 'url';\nimport { dirname, join } from 'path';\n\nconst versionFilename = fileURLToPath(import.meta.url);\nconst versionDirname = dirname(versionFilename);\n\n/**\n * Find package.json in parent directories\n * Handles both source (src/) and bundled (dist/) contexts\n */\nfunction findPackageJson(): string {\n const paths = [\n join(versionDirname, '../package.json'), // dist/ or src/\n join(versionDirname, '../../package.json'), // src/core/ (not used, but safe)\n ];\n for (const p of paths) {\n try {\n return readFileSync(p, 'utf-8');\n } catch {\n // Continue to next path\n }\n }\n return JSON.stringify({ version: '0.0.0' });\n}\n\n/** CLI package version */\nexport const VERSION: string = JSON.parse(findPackageJson()).version;\n","/* eslint-disable no-console */\nimport chalk from 'chalk';\nimport type { GlobalOptions } from '../types/global.js';\n\nconst BRAND_COLOR = '#01b5e2';\n\nexport interface LoggerOptions {\n verbose?: boolean;\n silent?: boolean;\n json?: boolean;\n}\n\nexport interface Logger {\n log: (...args: unknown[]) => void;\n brand: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n debug: (...args: unknown[]) => void;\n json: (data: unknown) => void;\n // Backward-compatible methods (map to default terminal color per design)\n info: (...args: unknown[]) => void;\n success: (...args: unknown[]) => void;\n warning: (...args: unknown[]) => void;\n warn: (...args: unknown[]) => void;\n gray: (...args: unknown[]) => void;\n}\n\nexport function createLogger(options: LoggerOptions = {}): Logger {\n const { verbose = false, silent = false, json = false } = options;\n\n const shouldLog = !silent && !json;\n const shouldDebug = verbose && !silent && !json;\n\n return {\n log: (...args: unknown[]) => {\n if (shouldLog) {\n const message = args.map((arg) => String(arg)).join(' ');\n console.log(message);\n }\n },\n\n brand: (...args: unknown[]) => {\n if (shouldLog) {\n const message = args.map((arg) => String(arg)).join(' ');\n console.log(chalk.hex(BRAND_COLOR)(message));\n }\n },\n\n error: (...args: unknown[]) => {\n if (!json) {\n const message = args.map((arg) => String(arg)).join(' ');\n console.error(chalk.red(message));\n }\n },\n\n debug: (...args: unknown[]) => {\n if (shouldDebug) {\n const message = args.map((arg) => String(arg)).join(' ');\n console.log(` ${message}`);\n }\n },\n\n json: (data: unknown) => {\n if (!silent) {\n console.log(JSON.stringify(data, null, 2));\n }\n },\n\n // Backward-compatible methods (all use default terminal color per design)\n info: (...args: unknown[]) => {\n if (shouldLog) {\n const message = args.map((arg) => String(arg)).join(' ');\n console.log(message);\n }\n },\n\n success: (...args: unknown[]) => {\n if (shouldLog) {\n const message = args.map((arg) => String(arg)).join(' ');\n console.log(message);\n }\n },\n\n warning: (...args: unknown[]) => {\n if (shouldLog) {\n const message = args.map((arg) => String(arg)).join(' ');\n console.log(message);\n }\n },\n\n warn: (...args: unknown[]) => {\n if (shouldLog) {\n const message = args.map((arg) => String(arg)).join(' ');\n console.log(message);\n }\n },\n\n gray: (...args: unknown[]) => {\n if (shouldLog) {\n const message = args.map((arg) => String(arg)).join(' ');\n console.log(message);\n }\n },\n };\n}\n\n/**\n * Create logger from command options\n * Factory function that standardizes logger creation across commands\n *\n * @param options - Command options containing verbose, silent, and json flags\n * @returns Configured logger instance\n */\nexport function createCommandLogger(\n options: GlobalOptions & { json?: boolean },\n): Logger {\n return createLogger({\n verbose: options.verbose,\n silent: options.silent ?? false,\n json: options.json,\n });\n}\n","/**\n * Entry point for walkeros/flow Docker container\n * Reads environment variables and starts the appropriate mode\n */\n\nimport { runFlow } from './runner.js';\nimport { runServeMode } from './serve.js';\nimport { createLogger } from '../core/logger.js';\nimport type { Logger } from '@walkeros/core';\n\n/**\n * Adapt CLI logger to core Logger.Instance interface\n */\nfunction adaptLogger(\n cliLogger: ReturnType<typeof createLogger>,\n): Logger.Instance {\n return {\n error: (message: string | Error) => {\n const msg = message instanceof Error ? message.message : message;\n cliLogger.error(msg);\n },\n info: (message: string | Error) => {\n const msg = message instanceof Error ? message.message : message;\n cliLogger.info(msg);\n },\n debug: (message: string | Error) => {\n const msg = message instanceof Error ? message.message : message;\n cliLogger.debug(msg);\n },\n throw: (message: string | Error): never => {\n const msg = message instanceof Error ? message.message : message;\n cliLogger.error(msg);\n throw message instanceof Error ? message : new Error(msg);\n },\n scope: (name: string) => {\n // Simple pass-through for scoped loggers - CLI logger doesn't use scopes\n return adaptLogger(cliLogger);\n },\n };\n}\n\nasync function main() {\n const mode = process.env.MODE || 'collect';\n const file = process.env.FILE || '/flow/bundle.mjs';\n const port = parseInt(process.env.PORT || '8080', 10);\n\n const cliLogger = createLogger({ silent: false, verbose: true });\n const logger = adaptLogger(cliLogger);\n\n cliLogger.log(`Starting walkeros/flow in ${mode} mode`);\n cliLogger.log(`File: ${file}`);\n cliLogger.log(`Port: ${port}`);\n\n try {\n if (mode === 'collect') {\n await runFlow(file, { port }, logger);\n } else if (mode === 'serve') {\n await runServeMode({ file, port }, logger);\n } else {\n cliLogger.error(`Unknown mode: ${mode}. Use 'collect' or 'serve'.`);\n process.exit(1);\n }\n } catch (error) {\n cliLogger.error(`Failed to start: ${error}`);\n process.exit(1);\n }\n}\n\nmain();\n"],"mappings":"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","names":["resolve","dirname","resolve"]}
1
+ {"version":3,"sources":["../../src/runtime/runner.ts","../../src/runtime/serve.ts","../../src/version.ts","../../src/core/logger.ts","../../src/runtime/main.ts"],"sourcesContent":["/**\n * Runtime executor for pre-built walkerOS flows\n *\n * This module runs pre-built .mjs flow bundles without any build-time operations.\n * All bundling, package downloading, and code generation happens BEFORE this runs.\n */\n\nimport { pathToFileURL } from 'url';\nimport { resolve, dirname } from 'path';\nimport type { Logger } from '@walkeros/core';\n\nexport interface RuntimeConfig {\n port?: number;\n host?: string;\n}\n\n/**\n * Run a pre-built flow bundle\n *\n * @param file - Absolute path to pre-built .mjs flow file\n * @param config - Optional runtime configuration\n * @param logger - Logger instance for output\n * @param loggerConfig - Optional logger config to forward to the flow's collector\n */\nexport async function runFlow(\n file: string,\n config: RuntimeConfig | undefined,\n logger: Logger.Instance,\n loggerConfig?: Logger.Config,\n): Promise<void> {\n logger.info(`Loading flow from ${file}`);\n\n try {\n const absolutePath = resolve(file);\n const flowDir = dirname(absolutePath);\n\n // Change working directory to flow's directory\n // This ensures relative paths (e.g., ./shared/credentials.json) work\n // consistently in both local and Docker execution modes\n process.chdir(flowDir);\n\n const fileUrl = pathToFileURL(absolutePath).href;\n const module = await import(fileUrl);\n\n if (!module.default || typeof module.default !== 'function') {\n logger.throw(\n `Invalid flow bundle: ${file} must export a default function`,\n );\n }\n\n // Execute the flow's factory function with runtime config and logger\n const flowContext = loggerConfig\n ? { ...config, logger: loggerConfig }\n : config;\n const result = await module.default(flowContext);\n\n if (!result || !result.collector) {\n logger.throw(`Invalid flow bundle: ${file} must return { collector }`);\n }\n\n const { collector } = result;\n\n logger.info('Flow running');\n if (config?.port) {\n logger.info(`Port: ${config.port}`);\n }\n\n // Graceful shutdown handler\n const shutdown = async (signal: string) => {\n logger.info(`Received ${signal}, shutting down gracefully...`);\n\n try {\n // Use collector's shutdown command if available\n if (collector.command) {\n await collector.command('shutdown');\n }\n logger.info('Shutdown complete');\n process.exit(0);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error during shutdown: ${message}`);\n process.exit(1);\n }\n };\n\n // Register shutdown handlers\n process.on('SIGTERM', () => shutdown('SIGTERM'));\n process.on('SIGINT', () => shutdown('SIGINT'));\n\n // Keep process alive\n await new Promise(() => {});\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Failed to run flow: ${message}`);\n if (error instanceof Error && error.stack) {\n logger.debug('Stack trace:', { stack: error.stack });\n }\n throw error;\n }\n}\n","/**\n * Serve mode - serve single file (typically generated bundle)\n */\n\nimport express from 'express';\nimport { resolve } from 'path';\nimport type { Logger } from '@walkeros/core';\nimport { VERSION } from '../version';\n\nexport interface ServeConfig {\n port?: number;\n host?: string;\n servePath?: string;\n serveName?: string;\n file?: string;\n}\n\n/**\n * Run serve mode - serve single file (typically generated bundle)\n *\n * @param config - Server configuration\n * @param logger - Logger instance for output\n */\nexport async function runServeMode(\n config: ServeConfig | undefined,\n logger: Logger.Instance,\n): Promise<void> {\n // Port priority: ENV variable > config > default\n const port = process.env.PORT\n ? parseInt(process.env.PORT, 10)\n : config?.port || 8080;\n\n // Host priority: ENV variable > config > default\n const host = process.env.HOST || config?.host || '0.0.0.0';\n\n // File path: ENV variable > config > default (resolve to absolute)\n const file = resolve(process.env.FILE || config?.file || './dist/walker.js');\n\n // Serve name (filename in URL): ENV variable > config > default\n const serveName = process.env.SERVE_NAME || config?.serveName || 'walker.js';\n\n // Serve path (URL directory): ENV variable > config > default (empty = root)\n const servePath = process.env.SERVE_PATH || config?.servePath || '';\n\n // Build full URL path\n const urlPath = servePath ? `/${servePath}/${serveName}` : `/${serveName}`;\n\n logger.info('Starting single-file server...');\n logger.info(`File: ${file}`);\n logger.info(`URL: http://${host}:${port}${urlPath}`);\n\n try {\n const app = express();\n\n // Health check\n app.get('/health', (req, res) => {\n res.json({\n status: 'ok',\n version: VERSION,\n timestamp: Date.now(),\n mode: 'serve',\n file: file,\n url: urlPath,\n });\n });\n\n // Serve single file at custom URL path\n app.get(urlPath, (req, res) => {\n // Set content type before streaming\n res.type('application/javascript');\n\n // Allow dotfiles since file paths may include dotfile directories\n res.sendFile(file, { dotfiles: 'allow' }, (err) => {\n if (err && !res.headersSent) {\n const errCode = (err as NodeJS.ErrnoException).code;\n // Express 5 uses HTTP-style errors with status/statusCode\n const errStatus =\n (err as { status?: number; statusCode?: number }).status ||\n (err as { status?: number; statusCode?: number }).statusCode;\n\n // Log errors (except client disconnections)\n if (errCode !== 'ECONNABORTED') {\n logger.error(\n `sendFile error for ${file}: ${err.message} (code: ${errCode}, status: ${errStatus})`,\n );\n }\n\n // Send appropriate error response (check both Node.js codes and HTTP status)\n if (\n errStatus === 404 ||\n errCode === 'ENOENT' ||\n errCode === 'EISDIR' ||\n errCode === 'ENOTDIR'\n ) {\n res.status(404).send('File not found');\n } else if (errCode !== 'ECONNABORTED') {\n res.status(500).send('Internal server error');\n }\n }\n });\n });\n\n // Start server\n const server = app.listen(port, host, () => {\n logger.info(`Server listening on http://${host}:${port}`);\n logger.info(`GET ${urlPath} - Bundle file`);\n logger.info(`GET /health - Health check`);\n });\n\n // Graceful shutdown\n const shutdownHandler = (signal: string) => {\n logger.info(`Received ${signal}, shutting down...`);\n server.close(() => {\n logger.info('Server closed');\n process.exit(0);\n });\n };\n\n process.on('SIGTERM', () => shutdownHandler('SIGTERM'));\n process.on('SIGINT', () => shutdownHandler('SIGINT'));\n\n // Keep process alive\n await new Promise(() => {});\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Server failed: ${message}`);\n process.exit(1);\n }\n}\n","import { readFileSync } from 'fs';\nimport { fileURLToPath } from 'url';\nimport { dirname, join } from 'path';\n\nconst versionFilename = fileURLToPath(import.meta.url);\nconst versionDirname = dirname(versionFilename);\n\n/**\n * Find package.json in parent directories\n * Handles both source (src/) and bundled (dist/) contexts\n */\nfunction findPackageJson(): string {\n const paths = [\n join(versionDirname, '../package.json'), // dist/ or src/\n join(versionDirname, '../../package.json'), // src/core/ (not used, but safe)\n ];\n for (const p of paths) {\n try {\n return readFileSync(p, 'utf-8');\n } catch {\n // Continue to next path\n }\n }\n return JSON.stringify({ version: '0.0.0' });\n}\n\n/** CLI package version */\nexport const VERSION: string = JSON.parse(findPackageJson()).version;\n","/* eslint-disable no-console */\nimport chalk from 'chalk';\nimport type { GlobalOptions } from '../types/global.js';\n\nconst BRAND_COLOR = '#01b5e2';\n\nexport interface LoggerOptions {\n verbose?: boolean;\n silent?: boolean;\n json?: boolean;\n}\n\nexport interface Logger {\n log: (...args: unknown[]) => void;\n brand: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n debug: (...args: unknown[]) => void;\n json: (data: unknown) => void;\n // Backward-compatible methods (map to default terminal color per design)\n info: (...args: unknown[]) => void;\n success: (...args: unknown[]) => void;\n warning: (...args: unknown[]) => void;\n warn: (...args: unknown[]) => void;\n gray: (...args: unknown[]) => void;\n}\n\nexport function createLogger(options: LoggerOptions = {}): Logger {\n const { verbose = false, silent = false, json = false } = options;\n\n const shouldLog = !silent && !json;\n const shouldDebug = verbose && !silent && !json;\n\n return {\n log: (...args: unknown[]) => {\n if (shouldLog) {\n const message = args.map((arg) => String(arg)).join(' ');\n console.log(message);\n }\n },\n\n brand: (...args: unknown[]) => {\n if (shouldLog) {\n const message = args.map((arg) => String(arg)).join(' ');\n console.log(chalk.hex(BRAND_COLOR)(message));\n }\n },\n\n error: (...args: unknown[]) => {\n if (!json) {\n const message = args.map((arg) => String(arg)).join(' ');\n console.error(chalk.red(message));\n }\n },\n\n debug: (...args: unknown[]) => {\n if (shouldDebug) {\n const message = args.map((arg) => String(arg)).join(' ');\n console.log(` ${message}`);\n }\n },\n\n json: (data: unknown) => {\n if (!silent) {\n console.log(JSON.stringify(data, null, 2));\n }\n },\n\n // Backward-compatible methods (all use default terminal color per design)\n info: (...args: unknown[]) => {\n if (shouldLog) {\n const message = args.map((arg) => String(arg)).join(' ');\n console.log(message);\n }\n },\n\n success: (...args: unknown[]) => {\n if (shouldLog) {\n const message = args.map((arg) => String(arg)).join(' ');\n console.log(message);\n }\n },\n\n warning: (...args: unknown[]) => {\n if (shouldLog) {\n const message = args.map((arg) => String(arg)).join(' ');\n console.log(message);\n }\n },\n\n warn: (...args: unknown[]) => {\n if (shouldLog) {\n const message = args.map((arg) => String(arg)).join(' ');\n console.log(message);\n }\n },\n\n gray: (...args: unknown[]) => {\n if (shouldLog) {\n const message = args.map((arg) => String(arg)).join(' ');\n console.log(message);\n }\n },\n };\n}\n\n/**\n * Create logger from command options\n * Factory function that standardizes logger creation across commands\n *\n * @param options - Command options containing verbose, silent, and json flags\n * @returns Configured logger instance\n */\nexport function createCommandLogger(\n options: GlobalOptions & { json?: boolean },\n): Logger {\n return createLogger({\n verbose: options.verbose,\n silent: options.silent ?? false,\n json: options.json,\n });\n}\n","/**\n * Entry point for walkeros/flow Docker container\n * Reads environment variables and starts the appropriate mode\n */\n\nimport { runFlow } from './runner.js';\nimport { runServeMode } from './serve.js';\nimport { createLogger } from '../core/logger.js';\nimport type { Logger } from '@walkeros/core';\n\n/**\n * Adapt CLI logger to core Logger.Instance interface\n */\nfunction adaptLogger(\n cliLogger: ReturnType<typeof createLogger>,\n): Logger.Instance {\n return {\n error: (message: string | Error) => {\n const msg = message instanceof Error ? message.message : message;\n cliLogger.error(msg);\n },\n info: (message: string | Error) => {\n const msg = message instanceof Error ? message.message : message;\n cliLogger.info(msg);\n },\n debug: (message: string | Error) => {\n const msg = message instanceof Error ? message.message : message;\n cliLogger.debug(msg);\n },\n throw: (message: string | Error): never => {\n const msg = message instanceof Error ? message.message : message;\n cliLogger.error(msg);\n throw message instanceof Error ? message : new Error(msg);\n },\n scope: (name: string) => {\n // Simple pass-through for scoped loggers - CLI logger doesn't use scopes\n return adaptLogger(cliLogger);\n },\n };\n}\n\nasync function main() {\n const mode = process.env.MODE || 'collect';\n const file = process.env.FILE || '/flow/bundle.mjs';\n const port = parseInt(process.env.PORT || '8080', 10);\n\n const cliLogger = createLogger({ silent: false, verbose: true });\n const logger = adaptLogger(cliLogger);\n\n cliLogger.log(`Starting walkeros/flow in ${mode} mode`);\n cliLogger.log(`File: ${file}`);\n cliLogger.log(`Port: ${port}`);\n\n try {\n if (mode === 'collect') {\n await runFlow(file, { port }, logger);\n } else if (mode === 'serve') {\n await runServeMode({ file, port }, logger);\n } else {\n cliLogger.error(`Unknown mode: ${mode}. Use 'collect' or 'serve'.`);\n process.exit(1);\n }\n } catch (error) {\n cliLogger.error(`Failed to start: ${error}`);\n process.exit(1);\n }\n}\n\nmain();\n"],"mappings":"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","names":["resolve","dirname","resolve"]}
@@ -56,7 +56,6 @@
56
56
  }
57
57
  },
58
58
  "collector": {
59
- "run": true,
60
59
  "globals": {
61
60
  "environment": "production",
62
61
  "version": "1.0.0"
@@ -22,9 +22,6 @@
22
22
  }
23
23
  }
24
24
  }
25
- },
26
- "collector": {
27
- "run": true
28
25
  }
29
26
  }
30
27
  }
@@ -71,7 +71,6 @@
71
71
  }
72
72
  },
73
73
  "collector": {
74
- "run": true,
75
74
  "globals": {
76
75
  "environment": "production",
77
76
  "version": "1.0.0"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@walkeros/cli",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "description": "walkerOS CLI - Bundle and deploy walkerOS components",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -26,7 +26,7 @@
26
26
  "dev": "tsx src/index.ts",
27
27
  "start": "node dist/index.js",
28
28
  "test": "jest --colors",
29
- "lint": "tsc && eslint \"src/**/*.ts*\"",
29
+ "lint": "tsc --noEmit && eslint \"src/**/*.ts*\"",
30
30
  "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist && rm -rf coverage && rm -rf .temp && rm -rf .tmp",
31
31
  "docker:build": "bash scripts/build-docker.sh",
32
32
  "docker:test": "bash scripts/test-docker.sh",
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=bundler-helpers.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bundler-helpers.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/bundle/bundler-helpers.test.ts"],"names":[],"mappings":""}
@@ -1,151 +0,0 @@
1
- // Import helper functions - we need to access them for testing
2
- // Since they're not exported, we'll test through createEntryPoint's behavior
3
- // Or we can temporarily export them for testing
4
- // For now, let's create focused unit tests for each logical section
5
- describe('Bundler Helper Functions', () => {
6
- describe('detectDestinationPackages', () => {
7
- it('should detect destination packages with explicit package field', () => {
8
- const flowConfig = {
9
- destinations: {
10
- gtag: {
11
- package: '@walkeros/web-destination-gtag',
12
- config: {},
13
- },
14
- api: {
15
- package: '@walkeros/web-destination-api',
16
- config: {},
17
- },
18
- },
19
- };
20
- // We'll need to export the helper or test indirectly
21
- // For this test file, we're documenting expected behavior
22
- expect(flowConfig.destinations).toBeDefined();
23
- });
24
- it('should skip destinations without package field', () => {
25
- const flowConfig = {
26
- destinations: {
27
- custom: {
28
- // No package field
29
- config: {},
30
- },
31
- },
32
- };
33
- expect(flowConfig.destinations).toBeDefined();
34
- });
35
- it('should handle empty destinations', () => {
36
- const flowConfig = {};
37
- expect(flowConfig.destinations).toBeUndefined();
38
- });
39
- });
40
- describe('generateImportStatements', () => {
41
- it('should generate default imports', () => {
42
- const packages = {
43
- '@walkeros/core': {
44
- imports: ['default as walkerCore'],
45
- },
46
- };
47
- // Expected output:
48
- // import walkerCore from '@walkeros/core';
49
- expect(packages).toBeDefined();
50
- });
51
- it('should generate named imports', () => {
52
- const packages = {
53
- '@walkeros/core': {
54
- imports: ['getId', 'trim'],
55
- },
56
- };
57
- // Expected output:
58
- // import { getId, trim } from '@walkeros/core';
59
- expect(packages).toBeDefined();
60
- });
61
- it('should generate namespace import when no imports specified', () => {
62
- const packages = {
63
- '@walkeros/core': {},
64
- };
65
- // Expected output:
66
- // import * as _walkerosCore from '@walkeros/core'; // Consider specifying explicit imports
67
- expect(packages).toBeDefined();
68
- });
69
- it('should handle examples imports', () => {
70
- const packages = {
71
- '@walkeros/web-destination-gtag': {
72
- imports: ['examples as gtagExamples', 'destinationGtag'],
73
- },
74
- };
75
- // Expected output:
76
- // import { destinationGtag } from '@walkeros/web-destination-gtag';
77
- // Example mapping: gtag: typeof gtagExamples !== 'undefined' ? gtagExamples : undefined
78
- expect(packages).toBeDefined();
79
- });
80
- it('should auto-import examples for destination packages', () => {
81
- const packages = {
82
- '@walkeros/web-destination-gtag': {
83
- imports: ['destinationGtag'],
84
- },
85
- };
86
- const destinationPackages = new Set(['@walkeros/web-destination-gtag']);
87
- // Expected output:
88
- // import { examples as gtag_examples } from '@walkeros/web-destination-gtag/dev';
89
- // Example mapping: gtag: gtag_examples
90
- expect(destinationPackages.has('@walkeros/web-destination-gtag')).toBe(true);
91
- });
92
- it('should handle demo packages differently for examples', () => {
93
- const packages = {
94
- '@walkeros/web-destination-gtag-demo': {
95
- imports: [],
96
- },
97
- };
98
- // Expected output for demo packages:
99
- // import { examples as gtag_demo_examples } from '@walkeros/web-destination-gtag-demo';
100
- // (not from /dev subpath)
101
- expect(packages).toBeDefined();
102
- });
103
- it('should remove duplicate imports', () => {
104
- const packages = {
105
- '@walkeros/core': {
106
- imports: ['getId', 'getId', 'trim'],
107
- },
108
- };
109
- // Should deduplicate to: import { getId, trim } from '@walkeros/core';
110
- expect(packages).toBeDefined();
111
- });
112
- });
113
- describe('Integration: createEntryPoint refactored behavior', () => {
114
- it('should maintain backward compatibility with original implementation', () => {
115
- // This test documents that the refactored version should produce
116
- // identical output to the original 189-line implementation
117
- // The helper extraction is purely for maintainability and testability
118
- const flowConfig = {
119
- destinations: {
120
- gtag: {
121
- package: '@walkeros/web-destination-gtag',
122
- },
123
- },
124
- };
125
- const buildOptions = {
126
- packages: {
127
- '@walkeros/core': {
128
- imports: ['getId'],
129
- },
130
- '@walkeros/web-destination-gtag': {
131
- imports: ['destinationGtag', 'examples as gtagExamples'],
132
- },
133
- },
134
- code: 'export const flow = startFlow();',
135
- format: 'esm',
136
- platform: 'browser',
137
- };
138
- // The refactored createEntryPoint should:
139
- // 1. Detect @walkeros/web-destination-gtag as a destination package
140
- // 2. Generate imports for @walkeros/core and gtag destination
141
- // 3. Create examples object with gtag mapping
142
- // 4. Process code (no template, so return as-is)
143
- // 5. Wrap code (ESM, already has export, so no wrapping)
144
- // 6. Assemble: imports + examples + code + export { examples }
145
- expect(buildOptions.format).toBe('esm');
146
- expect(flowConfig.destinations).toBeDefined();
147
- });
148
- });
149
- });
150
- export {};
151
- //# sourceMappingURL=bundler-helpers.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bundler-helpers.test.js","sourceRoot":"","sources":["../../../src/__tests__/bundle/bundler-helpers.test.ts"],"names":[],"mappings":"AAGA,+DAA+D;AAC/D,6EAA6E;AAC7E,gDAAgD;AAChD,oEAAoE;AAEpE,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACzC,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;YACxE,MAAM,UAAU,GAAgB;gBAC9B,YAAY,EAAE;oBACZ,IAAI,EAAE;wBACJ,OAAO,EAAE,gCAAgC;wBACzC,MAAM,EAAE,EAAE;qBACX;oBACD,GAAG,EAAE;wBACH,OAAO,EAAE,+BAA+B;wBACxC,MAAM,EAAE,EAAE;qBACX;iBACF;aACwB,CAAC;YAE5B,qDAAqD;YACrD,0DAA0D;YAC1D,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,UAAU,GAAgB;gBAC9B,YAAY,EAAE;oBACZ,MAAM,EAAE;wBACN,mBAAmB;wBACnB,MAAM,EAAE,EAAE;qBACX;iBACF;aACwB,CAAC;YAE5B,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,UAAU,GAAgB,EAAiB,CAAC;YAClD,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,aAAa,EAAE,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,QAAQ,GAA6B;gBACzC,gBAAgB,EAAE;oBAChB,OAAO,EAAE,CAAC,uBAAuB,CAAC;iBACnC;aACF,CAAC;YAEF,mBAAmB;YACnB,2CAA2C;YAC3C,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,QAAQ,GAA6B;gBACzC,gBAAgB,EAAE;oBAChB,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;iBAC3B;aACF,CAAC;YAEF,mBAAmB;YACnB,gDAAgD;YAChD,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;YACpE,MAAM,QAAQ,GAA6B;gBACzC,gBAAgB,EAAE,EAAE;aACrB,CAAC;YAEF,mBAAmB;YACnB,2FAA2F;YAC3F,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,QAAQ,GAA6B;gBACzC,gCAAgC,EAAE;oBAChC,OAAO,EAAE,CAAC,0BAA0B,EAAE,iBAAiB,CAAC;iBACzD;aACF,CAAC;YAEF,mBAAmB;YACnB,oEAAoE;YACpE,wFAAwF;YACxF,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,MAAM,QAAQ,GAA6B;gBACzC,gCAAgC,EAAE;oBAChC,OAAO,EAAE,CAAC,iBAAiB,CAAC;iBAC7B;aACF,CAAC;YACF,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC;YAExE,mBAAmB;YACnB,kFAAkF;YAClF,uCAAuC;YACvC,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC,IAAI,CACpE,IAAI,CACL,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,MAAM,QAAQ,GAA6B;gBACzC,qCAAqC,EAAE;oBACrC,OAAO,EAAE,EAAE;iBACZ;aACF,CAAC;YAEF,qCAAqC;YACrC,wFAAwF;YACxF,0BAA0B;YAC1B,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,QAAQ,GAA6B;gBACzC,gBAAgB,EAAE;oBAChB,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;iBACpC;aACF,CAAC;YAEF,uEAAuE;YACvE,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mDAAmD,EAAE,GAAG,EAAE;QACjE,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;YAC7E,iEAAiE;YACjE,2DAA2D;YAC3D,sEAAsE;YAEtE,MAAM,UAAU,GAAgB;gBAC9B,YAAY,EAAE;oBACZ,IAAI,EAAE;wBACJ,OAAO,EAAE,gCAAgC;qBAC1C;iBACF;aACwB,CAAC;YAE5B,MAAM,YAAY,GAAG;gBACnB,QAAQ,EAAE;oBACR,gBAAgB,EAAE;wBAChB,OAAO,EAAE,CAAC,OAAO,CAAC;qBACnB;oBACD,gCAAgC,EAAE;wBAChC,OAAO,EAAE,CAAC,iBAAiB,EAAE,0BAA0B,CAAC;qBACzD;iBACF;gBACD,IAAI,EAAE,kCAAkC;gBACxC,MAAM,EAAE,KAAc;gBACtB,QAAQ,EAAE,SAAkB;aACF,CAAC;YAE7B,0CAA0C;YAC1C,oEAAoE;YACpE,8DAA8D;YAC9D,8CAA8C;YAC9C,iDAAiD;YACjD,yDAAyD;YACzD,+DAA+D;YAE/D,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=bundler.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bundler.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/bundle/bundler.test.ts"],"names":[],"mappings":""}