@walkeros/cli 0.0.0-next-20251219153324

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 (284) hide show
  1. package/CHANGELOG.md +175 -0
  2. package/README.md +531 -0
  3. package/dist/__tests__/bundle/bundler-helpers.test.d.ts +2 -0
  4. package/dist/__tests__/bundle/bundler-helpers.test.d.ts.map +1 -0
  5. package/dist/__tests__/bundle/bundler-helpers.test.js +151 -0
  6. package/dist/__tests__/bundle/bundler-helpers.test.js.map +1 -0
  7. package/dist/__tests__/bundle/bundler.test.d.ts +2 -0
  8. package/dist/__tests__/bundle/bundler.test.d.ts.map +1 -0
  9. package/dist/__tests__/bundle/bundler.test.js +352 -0
  10. package/dist/__tests__/bundle/bundler.test.js.map +1 -0
  11. package/dist/__tests__/bundle/programmatic.test.d.ts +2 -0
  12. package/dist/__tests__/bundle/programmatic.test.d.ts.map +1 -0
  13. package/dist/__tests__/bundle/programmatic.test.js +148 -0
  14. package/dist/__tests__/bundle/programmatic.test.js.map +1 -0
  15. package/dist/__tests__/cli-e2e.test.d.ts +8 -0
  16. package/dist/__tests__/cli-e2e.test.d.ts.map +1 -0
  17. package/dist/__tests__/cli-e2e.test.js +145 -0
  18. package/dist/__tests__/cli-e2e.test.js.map +1 -0
  19. package/dist/__tests__/cli.test.d.ts +2 -0
  20. package/dist/__tests__/cli.test.d.ts.map +1 -0
  21. package/dist/__tests__/cli.test.js +179 -0
  22. package/dist/__tests__/cli.test.js.map +1 -0
  23. package/dist/__tests__/config-loader.test.d.ts +7 -0
  24. package/dist/__tests__/config-loader.test.d.ts.map +1 -0
  25. package/dist/__tests__/config-loader.test.js +414 -0
  26. package/dist/__tests__/config-loader.test.js.map +1 -0
  27. package/dist/__tests__/core/asset-resolver.test.d.ts +2 -0
  28. package/dist/__tests__/core/asset-resolver.test.d.ts.map +1 -0
  29. package/dist/__tests__/core/asset-resolver.test.js +14 -0
  30. package/dist/__tests__/core/asset-resolver.test.js.map +1 -0
  31. package/dist/__tests__/core/build-cache.test.d.ts +2 -0
  32. package/dist/__tests__/core/build-cache.test.d.ts.map +1 -0
  33. package/dist/__tests__/core/build-cache.test.js +55 -0
  34. package/dist/__tests__/core/build-cache.test.js.map +1 -0
  35. package/dist/__tests__/core/cache-utils.test.d.ts +2 -0
  36. package/dist/__tests__/core/cache-utils.test.d.ts.map +1 -0
  37. package/dist/__tests__/core/cache-utils.test.js +70 -0
  38. package/dist/__tests__/core/cache-utils.test.js.map +1 -0
  39. package/dist/__tests__/core/config.test.d.ts +2 -0
  40. package/dist/__tests__/core/config.test.d.ts.map +1 -0
  41. package/dist/__tests__/core/config.test.js +79 -0
  42. package/dist/__tests__/core/config.test.js.map +1 -0
  43. package/dist/__tests__/core/logger.test.d.ts +2 -0
  44. package/dist/__tests__/core/logger.test.d.ts.map +1 -0
  45. package/dist/__tests__/core/logger.test.js +53 -0
  46. package/dist/__tests__/core/logger.test.js.map +1 -0
  47. package/dist/__tests__/integration/bundle-run.integration.test.d.ts +8 -0
  48. package/dist/__tests__/integration/bundle-run.integration.test.d.ts.map +1 -0
  49. package/dist/__tests__/integration/bundle-run.integration.test.js +54 -0
  50. package/dist/__tests__/integration/bundle-run.integration.test.js.map +1 -0
  51. package/dist/__tests__/push/push.test.d.ts +7 -0
  52. package/dist/__tests__/push/push.test.d.ts.map +1 -0
  53. package/dist/__tests__/push/push.test.js +197 -0
  54. package/dist/__tests__/push/push.test.js.map +1 -0
  55. package/dist/__tests__/simulate/env-loader.test.d.ts +2 -0
  56. package/dist/__tests__/simulate/env-loader.test.d.ts.map +1 -0
  57. package/dist/__tests__/simulate/env-loader.test.js +47 -0
  58. package/dist/__tests__/simulate/env-loader.test.js.map +1 -0
  59. package/dist/__tests__/simulate/node-executor.test.d.ts +5 -0
  60. package/dist/__tests__/simulate/node-executor.test.d.ts.map +1 -0
  61. package/dist/__tests__/simulate/node-executor.test.js +25 -0
  62. package/dist/__tests__/simulate/node-executor.test.js.map +1 -0
  63. package/dist/__tests__/simulate/server-simulate.integration.test.d.ts +5 -0
  64. package/dist/__tests__/simulate/server-simulate.integration.test.d.ts.map +1 -0
  65. package/dist/__tests__/simulate/server-simulate.integration.test.js +58 -0
  66. package/dist/__tests__/simulate/server-simulate.integration.test.js.map +1 -0
  67. package/dist/__tests__/smoke/production.smoke.test.d.ts +8 -0
  68. package/dist/__tests__/smoke/production.smoke.test.d.ts.map +1 -0
  69. package/dist/__tests__/smoke/production.smoke.test.js +65 -0
  70. package/dist/__tests__/smoke/production.smoke.test.js.map +1 -0
  71. package/dist/commands/bundle/bundler.d.ts +32 -0
  72. package/dist/commands/bundle/bundler.d.ts.map +1 -0
  73. package/dist/commands/bundle/bundler.js +564 -0
  74. package/dist/commands/bundle/bundler.js.map +1 -0
  75. package/dist/commands/bundle/index.d.ts +59 -0
  76. package/dist/commands/bundle/index.d.ts.map +1 -0
  77. package/dist/commands/bundle/index.js +192 -0
  78. package/dist/commands/bundle/index.js.map +1 -0
  79. package/dist/commands/bundle/package-manager.d.ts +8 -0
  80. package/dist/commands/bundle/package-manager.d.ts.map +1 -0
  81. package/dist/commands/bundle/package-manager.js +208 -0
  82. package/dist/commands/bundle/package-manager.js.map +1 -0
  83. package/dist/commands/bundle/stats.d.ts +23 -0
  84. package/dist/commands/bundle/stats.d.ts.map +1 -0
  85. package/dist/commands/bundle/stats.js +52 -0
  86. package/dist/commands/bundle/stats.js.map +1 -0
  87. package/dist/commands/cache.d.ts +7 -0
  88. package/dist/commands/cache.d.ts.map +1 -0
  89. package/dist/commands/cache.js +61 -0
  90. package/dist/commands/cache.js.map +1 -0
  91. package/dist/commands/push/index.d.ts +7 -0
  92. package/dist/commands/push/index.d.ts.map +1 -0
  93. package/dist/commands/push/index.js +250 -0
  94. package/dist/commands/push/index.js.map +1 -0
  95. package/dist/commands/push/types.d.ts +22 -0
  96. package/dist/commands/push/types.d.ts.map +1 -0
  97. package/dist/commands/push/types.js +2 -0
  98. package/dist/commands/push/types.js.map +1 -0
  99. package/dist/commands/run/__tests__/run.integration.test.d.ts +7 -0
  100. package/dist/commands/run/__tests__/run.integration.test.d.ts.map +1 -0
  101. package/dist/commands/run/__tests__/run.integration.test.js +51 -0
  102. package/dist/commands/run/__tests__/run.integration.test.js.map +1 -0
  103. package/dist/commands/run/__tests__/validators.test.d.ts +2 -0
  104. package/dist/commands/run/__tests__/validators.test.d.ts.map +1 -0
  105. package/dist/commands/run/__tests__/validators.test.js +80 -0
  106. package/dist/commands/run/__tests__/validators.test.js.map +1 -0
  107. package/dist/commands/run/execution.d.ts +14 -0
  108. package/dist/commands/run/execution.d.ts.map +1 -0
  109. package/dist/commands/run/execution.js +41 -0
  110. package/dist/commands/run/execution.js.map +1 -0
  111. package/dist/commands/run/index.d.ts +38 -0
  112. package/dist/commands/run/index.d.ts.map +1 -0
  113. package/dist/commands/run/index.js +165 -0
  114. package/dist/commands/run/index.js.map +1 -0
  115. package/dist/commands/run/types.d.ts +65 -0
  116. package/dist/commands/run/types.d.ts.map +1 -0
  117. package/dist/commands/run/types.js +7 -0
  118. package/dist/commands/run/types.js.map +1 -0
  119. package/dist/commands/run/utils.d.ts +29 -0
  120. package/dist/commands/run/utils.d.ts.map +1 -0
  121. package/dist/commands/run/utils.js +52 -0
  122. package/dist/commands/run/utils.js.map +1 -0
  123. package/dist/commands/run/validators.d.ts +33 -0
  124. package/dist/commands/run/validators.d.ts.map +1 -0
  125. package/dist/commands/run/validators.js +58 -0
  126. package/dist/commands/run/validators.js.map +1 -0
  127. package/dist/commands/simulate/env-loader.d.ts +19 -0
  128. package/dist/commands/simulate/env-loader.d.ts.map +1 -0
  129. package/dist/commands/simulate/env-loader.js +46 -0
  130. package/dist/commands/simulate/env-loader.js.map +1 -0
  131. package/dist/commands/simulate/index.d.ts +48 -0
  132. package/dist/commands/simulate/index.d.ts.map +1 -0
  133. package/dist/commands/simulate/index.js +114 -0
  134. package/dist/commands/simulate/index.js.map +1 -0
  135. package/dist/commands/simulate/jsdom-executor.d.ts +37 -0
  136. package/dist/commands/simulate/jsdom-executor.d.ts.map +1 -0
  137. package/dist/commands/simulate/jsdom-executor.js +137 -0
  138. package/dist/commands/simulate/jsdom-executor.js.map +1 -0
  139. package/dist/commands/simulate/node-executor.d.ts +28 -0
  140. package/dist/commands/simulate/node-executor.d.ts.map +1 -0
  141. package/dist/commands/simulate/node-executor.js +94 -0
  142. package/dist/commands/simulate/node-executor.js.map +1 -0
  143. package/dist/commands/simulate/simulator.d.ts +14 -0
  144. package/dist/commands/simulate/simulator.d.ts.map +1 -0
  145. package/dist/commands/simulate/simulator.js +163 -0
  146. package/dist/commands/simulate/simulator.js.map +1 -0
  147. package/dist/commands/simulate/tracker.d.ts +30 -0
  148. package/dist/commands/simulate/tracker.d.ts.map +1 -0
  149. package/dist/commands/simulate/tracker.js +96 -0
  150. package/dist/commands/simulate/tracker.js.map +1 -0
  151. package/dist/commands/simulate/types.d.ts +20 -0
  152. package/dist/commands/simulate/types.d.ts.map +1 -0
  153. package/dist/commands/simulate/types.js +2 -0
  154. package/dist/commands/simulate/types.js.map +1 -0
  155. package/dist/config/build-defaults.d.ts +49 -0
  156. package/dist/config/build-defaults.d.ts.map +1 -0
  157. package/dist/config/build-defaults.js +68 -0
  158. package/dist/config/build-defaults.js.map +1 -0
  159. package/dist/config/index.d.ts +13 -0
  160. package/dist/config/index.d.ts.map +1 -0
  161. package/dist/config/index.js +15 -0
  162. package/dist/config/index.js.map +1 -0
  163. package/dist/config/loader.d.ts +81 -0
  164. package/dist/config/loader.d.ts.map +1 -0
  165. package/dist/config/loader.js +153 -0
  166. package/dist/config/loader.js.map +1 -0
  167. package/dist/config/utils.d.ts +101 -0
  168. package/dist/config/utils.d.ts.map +1 -0
  169. package/dist/config/utils.js +235 -0
  170. package/dist/config/utils.js.map +1 -0
  171. package/dist/config/validators.d.ts +52 -0
  172. package/dist/config/validators.d.ts.map +1 -0
  173. package/dist/config/validators.js +85 -0
  174. package/dist/config/validators.js.map +1 -0
  175. package/dist/core/asset-resolver.d.ts +34 -0
  176. package/dist/core/asset-resolver.d.ts.map +1 -0
  177. package/dist/core/asset-resolver.js +70 -0
  178. package/dist/core/asset-resolver.js.map +1 -0
  179. package/dist/core/build-cache.d.ts +23 -0
  180. package/dist/core/build-cache.d.ts.map +1 -0
  181. package/dist/core/build-cache.js +44 -0
  182. package/dist/core/build-cache.js.map +1 -0
  183. package/dist/core/cache-utils.d.ts +27 -0
  184. package/dist/core/cache-utils.d.ts.map +1 -0
  185. package/dist/core/cache-utils.js +60 -0
  186. package/dist/core/cache-utils.js.map +1 -0
  187. package/dist/core/index.d.ts +8 -0
  188. package/dist/core/index.d.ts.map +1 -0
  189. package/dist/core/index.js +8 -0
  190. package/dist/core/index.js.map +1 -0
  191. package/dist/core/local-packages.d.ts +19 -0
  192. package/dist/core/local-packages.d.ts.map +1 -0
  193. package/dist/core/local-packages.js +60 -0
  194. package/dist/core/local-packages.js.map +1 -0
  195. package/dist/core/logger.d.ts +28 -0
  196. package/dist/core/logger.d.ts.map +1 -0
  197. package/dist/core/logger.js +88 -0
  198. package/dist/core/logger.js.map +1 -0
  199. package/dist/core/output.d.ts +30 -0
  200. package/dist/core/output.d.ts.map +1 -0
  201. package/dist/core/output.js +46 -0
  202. package/dist/core/output.js.map +1 -0
  203. package/dist/core/timer.d.ts +14 -0
  204. package/dist/core/timer.d.ts.map +1 -0
  205. package/dist/core/timer.js +29 -0
  206. package/dist/core/timer.js.map +1 -0
  207. package/dist/core/tmp.d.ts +27 -0
  208. package/dist/core/tmp.d.ts.map +1 -0
  209. package/dist/core/tmp.js +36 -0
  210. package/dist/core/tmp.js.map +1 -0
  211. package/dist/core/utils.d.ts +10 -0
  212. package/dist/core/utils.d.ts.map +1 -0
  213. package/dist/core/utils.js +12 -0
  214. package/dist/core/utils.js.map +1 -0
  215. package/dist/examples/README.md +355 -0
  216. package/dist/examples/event.json +53 -0
  217. package/dist/examples/flow-order-complete.json +67 -0
  218. package/dist/examples/flow-simple.json +31 -0
  219. package/dist/examples/flow.json +82 -0
  220. package/dist/examples/server-collect.json +60 -0
  221. package/dist/examples/server-collect.mjs +13540 -0
  222. package/dist/examples/test.html +43 -0
  223. package/dist/examples/web-serve.js +25503 -0
  224. package/dist/examples/web-serve.json +74 -0
  225. package/dist/index.d.ts +427 -0
  226. package/dist/index.d.ts.map +1 -0
  227. package/dist/index.js +2629 -0
  228. package/dist/index.js.map +1 -0
  229. package/dist/runtime/index.d.ts +10 -0
  230. package/dist/runtime/index.d.ts.map +1 -0
  231. package/dist/runtime/index.js +10 -0
  232. package/dist/runtime/index.js.map +1 -0
  233. package/dist/runtime/main.d.ts +2 -0
  234. package/dist/runtime/main.d.ts.map +1 -0
  235. package/dist/runtime/main.js +269 -0
  236. package/dist/runtime/main.js.map +1 -0
  237. package/dist/runtime/runner.d.ts +20 -0
  238. package/dist/runtime/runner.d.ts.map +1 -0
  239. package/dist/runtime/runner.js +72 -0
  240. package/dist/runtime/runner.js.map +1 -0
  241. package/dist/runtime/serve.d.ts +19 -0
  242. package/dist/runtime/serve.d.ts.map +1 -0
  243. package/dist/runtime/serve.js +97 -0
  244. package/dist/runtime/serve.js.map +1 -0
  245. package/dist/schemas/index.d.ts +9 -0
  246. package/dist/schemas/index.d.ts.map +1 -0
  247. package/dist/schemas/index.js +9 -0
  248. package/dist/schemas/index.js.map +1 -0
  249. package/dist/schemas/primitives.d.ts +37 -0
  250. package/dist/schemas/primitives.d.ts.map +1 -0
  251. package/dist/schemas/primitives.js +43 -0
  252. package/dist/schemas/primitives.js.map +1 -0
  253. package/dist/schemas/run.d.ts +23 -0
  254. package/dist/schemas/run.d.ts.map +1 -0
  255. package/dist/schemas/run.js +20 -0
  256. package/dist/schemas/run.js.map +1 -0
  257. package/dist/types/bundle.d.ts +141 -0
  258. package/dist/types/bundle.d.ts.map +1 -0
  259. package/dist/types/bundle.js +10 -0
  260. package/dist/types/bundle.js.map +1 -0
  261. package/dist/types/global.d.ts +38 -0
  262. package/dist/types/global.d.ts.map +1 -0
  263. package/dist/types/global.js +24 -0
  264. package/dist/types/global.js.map +1 -0
  265. package/dist/types/index.d.ts +8 -0
  266. package/dist/types/index.d.ts.map +1 -0
  267. package/dist/types/index.js +8 -0
  268. package/dist/types/index.js.map +1 -0
  269. package/dist/version.d.ts +3 -0
  270. package/dist/version.d.ts.map +1 -0
  271. package/dist/version.js +27 -0
  272. package/dist/version.js.map +1 -0
  273. package/dist/walker.js +1 -0
  274. package/examples/README.md +355 -0
  275. package/examples/event.json +53 -0
  276. package/examples/flow-order-complete.json +67 -0
  277. package/examples/flow-simple.json +31 -0
  278. package/examples/flow.json +82 -0
  279. package/examples/server-collect.json +60 -0
  280. package/examples/server-collect.mjs +13540 -0
  281. package/examples/test.html +43 -0
  282. package/examples/web-serve.js +25503 -0
  283. package/examples/web-serve.json +74 -0
  284. package/package.json +62 -0
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Configuration Utility Functions
3
+ */
4
+ /**
5
+ * Check if a string is a valid URL
6
+ *
7
+ * @param str - String to check
8
+ * @returns True if string is a valid HTTP/HTTPS URL
9
+ */
10
+ export declare function isUrl(str: string): boolean;
11
+ /**
12
+ * Download a file from a URL to a temporary location
13
+ *
14
+ * @param url - HTTP/HTTPS URL to download
15
+ * @returns Path to downloaded temporary file
16
+ * @throws Error if download fails or response is not OK
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const tempPath = await downloadFromUrl('https://example.com/config.json')
21
+ * // Returns: "/tmp/walkeros-download-1647261462000-abc123.json"
22
+ * ```
23
+ */
24
+ export declare function downloadFromUrl(url: string): Promise<string>;
25
+ /**
26
+ * Substitute environment variables in a string.
27
+ *
28
+ * @param value - String with ${VAR} placeholders
29
+ * @returns String with environment variables substituted
30
+ * @throws Error if environment variable is not found
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * substituteEnvVariables('${HOME}/config') // "/Users/name/config"
35
+ * ```
36
+ */
37
+ export declare function substituteEnvVariables(value: string): string;
38
+ /**
39
+ * Load and parse JSON configuration file from local path or URL.
40
+ *
41
+ * @param configPath - Path to JSON file or HTTP/HTTPS URL
42
+ * @returns Parsed configuration object and cleanup function
43
+ * @throws Error if file not found, download fails, or invalid JSON
44
+ *
45
+ * @example
46
+ * ```typescript
47
+ * // Local file
48
+ * const config = await loadJsonConfig('./config.json')
49
+ *
50
+ * // Remote URL
51
+ * const config = await loadJsonConfig('https://example.com/config.json')
52
+ * ```
53
+ */
54
+ export declare function loadJsonConfig<T>(configPath: string): Promise<T>;
55
+ /**
56
+ * Load JSON from inline string, file path, or URL.
57
+ *
58
+ * Supports three input formats:
59
+ * 1. Inline JSON string - parsed directly
60
+ * 2. Local file path - read and parsed
61
+ * 3. HTTP/HTTPS URL - downloaded and parsed
62
+ *
63
+ * Detection priority:
64
+ * 1. URL (http://, https://) → download and parse
65
+ * 2. Existing file path → read and parse
66
+ * 3. Valid JSON string → parse directly
67
+ * 4. Simple string → treat as {name: string} for backward compatibility
68
+ *
69
+ * @param source - JSON string, file path, or URL
70
+ * @param options - Optional configuration
71
+ * @param options.name - Parameter name for error messages (e.g., "event", "config")
72
+ * @param options.required - Throw error if source is empty (default: false)
73
+ * @param options.fallback - Default value if source is empty
74
+ * @returns Parsed JSON object
75
+ * @throws Error if source is required but empty, or if loading/parsing fails
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * // Inline JSON
80
+ * await loadJsonFromSource('{"name":"order complete","data":{}}')
81
+ *
82
+ * // File path
83
+ * await loadJsonFromSource('./examples/event.json')
84
+ *
85
+ * // URL
86
+ * await loadJsonFromSource('https://example.com/event.json')
87
+ *
88
+ * // With options
89
+ * await loadJsonFromSource(input, {
90
+ * name: 'event',
91
+ * required: true,
92
+ * fallback: { name: 'default' }
93
+ * })
94
+ * ```
95
+ */
96
+ export declare function loadJsonFromSource<T = unknown>(source: string | undefined, options?: {
97
+ name?: string;
98
+ required?: boolean;
99
+ fallback?: T;
100
+ }): Promise<T>;
101
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/config/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAO1C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA+BlE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ5D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,cAAc,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAmCtE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,GAAG,OAAO,EAClD,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,CAAC,EAAE;IACR,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,CAAC;CACd,GACA,OAAO,CAAC,CAAC,CAAC,CAmEZ"}
@@ -0,0 +1,235 @@
1
+ /**
2
+ * Configuration Utility Functions
3
+ */
4
+ import fs from 'fs-extra';
5
+ import path from 'path';
6
+ import { getErrorMessage } from '../core/index.js';
7
+ import { getTmpPath } from '../core/tmp.js';
8
+ /**
9
+ * Check if a string is a valid URL
10
+ *
11
+ * @param str - String to check
12
+ * @returns True if string is a valid HTTP/HTTPS URL
13
+ */
14
+ export function isUrl(str) {
15
+ try {
16
+ const url = new URL(str);
17
+ return url.protocol === 'http:' || url.protocol === 'https:';
18
+ }
19
+ catch {
20
+ return false;
21
+ }
22
+ }
23
+ /**
24
+ * Download a file from a URL to a temporary location
25
+ *
26
+ * @param url - HTTP/HTTPS URL to download
27
+ * @returns Path to downloaded temporary file
28
+ * @throws Error if download fails or response is not OK
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * const tempPath = await downloadFromUrl('https://example.com/config.json')
33
+ * // Returns: "/tmp/walkeros-download-1647261462000-abc123.json"
34
+ * ```
35
+ */
36
+ export async function downloadFromUrl(url) {
37
+ if (!isUrl(url)) {
38
+ throw new Error(`Invalid URL: ${url}`);
39
+ }
40
+ try {
41
+ const response = await fetch(url);
42
+ if (!response.ok) {
43
+ throw new Error(`Failed to download ${url}: ${response.status} ${response.statusText}`);
44
+ }
45
+ const content = await response.text();
46
+ // Write to .tmp/downloads/ directory
47
+ const downloadsDir = getTmpPath(undefined, 'downloads');
48
+ await fs.ensureDir(downloadsDir);
49
+ // Use a consistent filename - always re-downloaded fresh anyway
50
+ const tempPath = path.join(downloadsDir, 'flow.json');
51
+ await fs.writeFile(tempPath, content, 'utf-8');
52
+ return tempPath;
53
+ }
54
+ catch (error) {
55
+ if (error instanceof Error) {
56
+ throw new Error(`Failed to download from URL: ${error.message}`);
57
+ }
58
+ throw error;
59
+ }
60
+ }
61
+ /**
62
+ * Substitute environment variables in a string.
63
+ *
64
+ * @param value - String with ${VAR} placeholders
65
+ * @returns String with environment variables substituted
66
+ * @throws Error if environment variable is not found
67
+ *
68
+ * @example
69
+ * ```typescript
70
+ * substituteEnvVariables('${HOME}/config') // "/Users/name/config"
71
+ * ```
72
+ */
73
+ export function substituteEnvVariables(value) {
74
+ return value.replace(/\${([^}]+)}/g, (_, envVar) => {
75
+ const envValue = process.env[envVar];
76
+ if (!envValue) {
77
+ throw new Error(`Environment variable ${envVar} not found`);
78
+ }
79
+ return envValue;
80
+ });
81
+ }
82
+ /**
83
+ * Load and parse JSON configuration file from local path or URL.
84
+ *
85
+ * @param configPath - Path to JSON file or HTTP/HTTPS URL
86
+ * @returns Parsed configuration object and cleanup function
87
+ * @throws Error if file not found, download fails, or invalid JSON
88
+ *
89
+ * @example
90
+ * ```typescript
91
+ * // Local file
92
+ * const config = await loadJsonConfig('./config.json')
93
+ *
94
+ * // Remote URL
95
+ * const config = await loadJsonConfig('https://example.com/config.json')
96
+ * ```
97
+ */
98
+ export async function loadJsonConfig(configPath) {
99
+ let absolutePath;
100
+ let isTemporary = false;
101
+ // Check if input is a URL
102
+ if (isUrl(configPath)) {
103
+ // Download from URL to temp location
104
+ absolutePath = await downloadFromUrl(configPath);
105
+ isTemporary = true;
106
+ }
107
+ else {
108
+ // Local file path
109
+ absolutePath = path.resolve(configPath);
110
+ if (!(await fs.pathExists(absolutePath))) {
111
+ throw new Error(`Configuration file not found: ${absolutePath}`);
112
+ }
113
+ }
114
+ try {
115
+ const rawConfig = await fs.readJson(absolutePath);
116
+ return rawConfig;
117
+ }
118
+ catch (error) {
119
+ throw new Error(`Invalid JSON in config file: ${configPath}. ${error instanceof Error ? error.message : error}`);
120
+ }
121
+ finally {
122
+ // Clean up temporary downloaded file
123
+ if (isTemporary) {
124
+ try {
125
+ await fs.remove(absolutePath);
126
+ }
127
+ catch {
128
+ // Ignore cleanup errors
129
+ }
130
+ }
131
+ }
132
+ }
133
+ /**
134
+ * Load JSON from inline string, file path, or URL.
135
+ *
136
+ * Supports three input formats:
137
+ * 1. Inline JSON string - parsed directly
138
+ * 2. Local file path - read and parsed
139
+ * 3. HTTP/HTTPS URL - downloaded and parsed
140
+ *
141
+ * Detection priority:
142
+ * 1. URL (http://, https://) → download and parse
143
+ * 2. Existing file path → read and parse
144
+ * 3. Valid JSON string → parse directly
145
+ * 4. Simple string → treat as {name: string} for backward compatibility
146
+ *
147
+ * @param source - JSON string, file path, or URL
148
+ * @param options - Optional configuration
149
+ * @param options.name - Parameter name for error messages (e.g., "event", "config")
150
+ * @param options.required - Throw error if source is empty (default: false)
151
+ * @param options.fallback - Default value if source is empty
152
+ * @returns Parsed JSON object
153
+ * @throws Error if source is required but empty, or if loading/parsing fails
154
+ *
155
+ * @example
156
+ * ```typescript
157
+ * // Inline JSON
158
+ * await loadJsonFromSource('{"name":"order complete","data":{}}')
159
+ *
160
+ * // File path
161
+ * await loadJsonFromSource('./examples/event.json')
162
+ *
163
+ * // URL
164
+ * await loadJsonFromSource('https://example.com/event.json')
165
+ *
166
+ * // With options
167
+ * await loadJsonFromSource(input, {
168
+ * name: 'event',
169
+ * required: true,
170
+ * fallback: { name: 'default' }
171
+ * })
172
+ * ```
173
+ */
174
+ export async function loadJsonFromSource(source, options) {
175
+ const paramName = options?.name || 'input';
176
+ // Handle empty/undefined input
177
+ if (!source || source.trim() === '') {
178
+ if (options?.required) {
179
+ throw new Error(`${paramName} is required`);
180
+ }
181
+ if (options?.fallback !== undefined) {
182
+ return options.fallback;
183
+ }
184
+ return {};
185
+ }
186
+ const trimmedSource = source.trim();
187
+ // 1. Check if URL
188
+ if (isUrl(trimmedSource)) {
189
+ try {
190
+ const tempPath = await downloadFromUrl(trimmedSource);
191
+ try {
192
+ const data = await fs.readJson(tempPath);
193
+ return data;
194
+ }
195
+ finally {
196
+ // Clean up temp file
197
+ try {
198
+ await fs.remove(tempPath);
199
+ }
200
+ catch {
201
+ // Ignore cleanup errors
202
+ }
203
+ }
204
+ }
205
+ catch (error) {
206
+ throw new Error(`Failed to load ${paramName} from URL ${trimmedSource}: ${getErrorMessage(error)}`);
207
+ }
208
+ }
209
+ // 2. Check if file path exists
210
+ const resolvedPath = path.resolve(trimmedSource);
211
+ if (await fs.pathExists(resolvedPath)) {
212
+ try {
213
+ const data = await fs.readJson(resolvedPath);
214
+ return data;
215
+ }
216
+ catch (error) {
217
+ throw new Error(`Failed to parse ${paramName} from file ${trimmedSource}: ${getErrorMessage(error)}`);
218
+ }
219
+ }
220
+ // 3. Try to parse as inline JSON
221
+ try {
222
+ const parsed = JSON.parse(trimmedSource);
223
+ return parsed;
224
+ }
225
+ catch (jsonError) {
226
+ // 4. Fallback: treat as event name string for backward compatibility
227
+ // This allows simple strings like "page view" to work
228
+ if (!trimmedSource.startsWith('{') && !trimmedSource.startsWith('[')) {
229
+ return { name: trimmedSource };
230
+ }
231
+ // If it looks like JSON but failed to parse, throw helpful error
232
+ throw new Error(`Failed to parse ${paramName}. Input appears to be JSON but contains errors: ${jsonError instanceof Error ? jsonError.message : String(jsonError)}`);
233
+ }
234
+ }
235
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/config/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,UAAU,KAAK,CAAC,GAAW;IAC/B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,OAAO,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC;IAC/D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAW;IAC/C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAElC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,sBAAsB,GAAG,KAAK,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CACvE,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEtC,qCAAqC;QACrC,MAAM,YAAY,GAAG,UAAU,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACxD,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAEjC,gEAAgE;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QACtD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAE/C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,OAAO,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QACjD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,YAAY,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAI,UAAkB;IACxD,IAAI,YAAoB,CAAC;IACzB,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,0BAA0B;IAC1B,IAAI,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACtB,qCAAqC;QACrC,YAAY,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;QACjD,WAAW,GAAG,IAAI,CAAC;IACrB,CAAC;SAAM,CAAC;QACN,kBAAkB;QAClB,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAExC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,iCAAiC,YAAY,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAClD,OAAO,SAAc,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,gCAAgC,UAAU,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAChG,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,qCAAqC;QACrC,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAChC,CAAC;YAAC,MAAM,CAAC;gBACP,wBAAwB;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAA0B,EAC1B,OAIC;IAED,MAAM,SAAS,GAAG,OAAO,EAAE,IAAI,IAAI,OAAO,CAAC;IAE3C,+BAA+B;IAC/B,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACpC,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,GAAG,SAAS,cAAc,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,OAAO,EAAE,QAAQ,KAAK,SAAS,EAAE,CAAC;YACpC,OAAO,OAAO,CAAC,QAAQ,CAAC;QAC1B,CAAC;QACD,OAAO,EAAO,CAAC;IACjB,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAEpC,kBAAkB;IAClB,IAAI,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,aAAa,CAAC,CAAC;YACtD,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACzC,OAAO,IAAS,CAAC;YACnB,CAAC;oBAAS,CAAC;gBACT,qBAAqB;gBACrB,IAAI,CAAC;oBACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC5B,CAAC;gBAAC,MAAM,CAAC;oBACP,wBAAwB;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,kBAAkB,SAAS,aAAa,aAAa,KAAK,eAAe,CAAC,KAAK,CAAC,EAAE,CACnF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACjD,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAC7C,OAAO,IAAS,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,mBAAmB,SAAS,cAAc,aAAa,KAAK,eAAe,CAAC,KAAK,CAAC,EAAE,CACrF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACzC,OAAO,MAAW,CAAC;IACrB,CAAC;IAAC,OAAO,SAAS,EAAE,CAAC;QACnB,qEAAqE;QACrE,sDAAsD;QACtD,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAO,CAAC;QACtC,CAAC;QAED,iEAAiE;QACjE,MAAM,IAAI,KAAK,CACb,mBAAmB,SAAS,mDAAmD,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CACpJ,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Configuration Type Guards and Validators
3
+ *
4
+ * Type checking utilities for configuration validation.
5
+ * Uses Zod schemas from @walkeros/core for Flow.Setup validation.
6
+ */
7
+ import type { Flow } from '@walkeros/core';
8
+ /**
9
+ * Type guard: Check if value is a plain object.
10
+ */
11
+ export declare function isObject(value: unknown): value is Record<string, unknown>;
12
+ /**
13
+ * Detect platform from flow config.
14
+ *
15
+ * Platform is determined by the presence of `web` or `server` key.
16
+ */
17
+ export declare function detectPlatform(flowConfig: Record<string, unknown>): 'web' | 'server' | undefined;
18
+ /**
19
+ * Type guard: Check if config is a valid Flow.Setup structure.
20
+ *
21
+ * @remarks
22
+ * Uses Zod validation from @walkeros/core.
23
+ * Returns false instead of throwing on invalid input.
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * if (isFlowSetup(config)) {
28
+ * const flowConfig = getFlowConfig(config, 'production');
29
+ * }
30
+ * ```
31
+ */
32
+ export declare function isFlowSetup(data: unknown): data is Flow.Setup;
33
+ /**
34
+ * Validate Flow.Setup and throw descriptive error if invalid.
35
+ *
36
+ * @remarks
37
+ * Uses Zod validation from @walkeros/core.
38
+ * Provides detailed error messages from Zod.
39
+ *
40
+ * @param data - Raw configuration data
41
+ * @returns Validated Flow.Setup
42
+ * @throws Error with descriptive message if validation fails
43
+ */
44
+ export declare function validateFlowSetup(data: unknown): Flow.Setup;
45
+ /**
46
+ * Get available flow names from a Flow.Setup.
47
+ *
48
+ * @param setup - Flow.Setup configuration
49
+ * @returns Array of flow names
50
+ */
51
+ export declare function getAvailableFlows(setup: Flow.Setup): string[];
52
+ //# sourceMappingURL=validators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/config/validators.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAK3C;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAOzE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,KAAK,GAAG,QAAQ,GAAG,SAAS,CAQ9B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,IAAI,CAAC,KAAK,CAG7D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAkB3D;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,EAAE,CAE7D"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Configuration Type Guards and Validators
3
+ *
4
+ * Type checking utilities for configuration validation.
5
+ * Uses Zod schemas from @walkeros/core for Flow.Setup validation.
6
+ */
7
+ import { schemas } from '@walkeros/core/dev';
8
+ const { safeParseSetup } = schemas;
9
+ /**
10
+ * Type guard: Check if value is a plain object.
11
+ */
12
+ export function isObject(value) {
13
+ return (typeof value === 'object' &&
14
+ value !== null &&
15
+ !Array.isArray(value) &&
16
+ Object.prototype.toString.call(value) === '[object Object]');
17
+ }
18
+ /**
19
+ * Detect platform from flow config.
20
+ *
21
+ * Platform is determined by the presence of `web` or `server` key.
22
+ */
23
+ export function detectPlatform(flowConfig) {
24
+ if ('web' in flowConfig && flowConfig.web !== undefined) {
25
+ return 'web';
26
+ }
27
+ if ('server' in flowConfig && flowConfig.server !== undefined) {
28
+ return 'server';
29
+ }
30
+ return undefined;
31
+ }
32
+ /**
33
+ * Type guard: Check if config is a valid Flow.Setup structure.
34
+ *
35
+ * @remarks
36
+ * Uses Zod validation from @walkeros/core.
37
+ * Returns false instead of throwing on invalid input.
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * if (isFlowSetup(config)) {
42
+ * const flowConfig = getFlowConfig(config, 'production');
43
+ * }
44
+ * ```
45
+ */
46
+ export function isFlowSetup(data) {
47
+ const result = safeParseSetup(data);
48
+ return result.success;
49
+ }
50
+ /**
51
+ * Validate Flow.Setup and throw descriptive error if invalid.
52
+ *
53
+ * @remarks
54
+ * Uses Zod validation from @walkeros/core.
55
+ * Provides detailed error messages from Zod.
56
+ *
57
+ * @param data - Raw configuration data
58
+ * @returns Validated Flow.Setup
59
+ * @throws Error with descriptive message if validation fails
60
+ */
61
+ export function validateFlowSetup(data) {
62
+ const result = safeParseSetup(data);
63
+ if (!result.success) {
64
+ // Format Zod errors for CLI display
65
+ const errors = result.error.issues
66
+ .map((issue) => {
67
+ const path = issue.path.length > 0 ? issue.path.map(String).join('.') : 'root';
68
+ return ` - ${path}: ${issue.message}`;
69
+ })
70
+ .join('\n');
71
+ throw new Error(`Invalid configuration:\n${errors}`);
72
+ }
73
+ // Cast to Flow.Setup since Zod's inferred type is compatible but not identical
74
+ return result.data;
75
+ }
76
+ /**
77
+ * Get available flow names from a Flow.Setup.
78
+ *
79
+ * @param setup - Flow.Setup configuration
80
+ * @returns Array of flow names
81
+ */
82
+ export function getAvailableFlows(setup) {
83
+ return Object.keys(setup.flows);
84
+ }
85
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/config/validators.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;AAEnC;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAC5D,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,UAAmC;IAEnC,IAAI,KAAK,IAAI,UAAU,IAAI,UAAU,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,QAAQ,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9D,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,WAAW,CAAC,IAAa;IACvC,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAa;IAC7C,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAEpC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,oCAAoC;QACpC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM;aAC/B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACb,MAAM,IAAI,GACR,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACpE,OAAO,OAAO,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;QACzC,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,IAAI,KAAK,CAAC,2BAA2B,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,+EAA+E;IAC/E,OAAO,MAAM,CAAC,IAAkB,CAAC;AACnC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAiB;IACjD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Asset Resolver
3
+ *
4
+ * Unified path resolution for package assets (examples) and user assets.
5
+ * Assets are always siblings to the CLI entry point (in dist/ for production).
6
+ */
7
+ /**
8
+ * Get the directory containing CLI assets (examples).
9
+ *
10
+ * In production: assets are in dist/ alongside the bundled CLI
11
+ * In development: assets are at package root
12
+ *
13
+ * @returns Absolute path to assets directory
14
+ */
15
+ export declare function getAssetDir(): string;
16
+ /**
17
+ * Asset type for resolution strategy
18
+ */
19
+ export type AssetType = 'config' | 'bundle';
20
+ /**
21
+ * Resolve asset path using unified strategy
22
+ *
23
+ * Resolution rules:
24
+ * 1. Bare names (no / or \) → Package asset (examples)
25
+ * 2. Relative paths (./ or ../) → User asset relative to base directory
26
+ * 3. Absolute paths → Use as-is
27
+ *
28
+ * @param assetPath - Path to resolve
29
+ * @param assetType - Type of asset (determines package subdirectory)
30
+ * @param baseDir - Base directory for relative paths (defaults to cwd)
31
+ * @returns Absolute path to asset
32
+ */
33
+ export declare function resolveAsset(assetPath: string, assetType: AssetType, baseDir?: string): string;
34
+ //# sourceMappingURL=asset-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-resolver.d.ts","sourceRoot":"","sources":["../../src/core/asset-resolver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH;;;;;;;GAOG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAkBpC;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE5C;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,SAAS,EACpB,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAmBR"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Asset Resolver
3
+ *
4
+ * Unified path resolution for package assets (examples) and user assets.
5
+ * Assets are always siblings to the CLI entry point (in dist/ for production).
6
+ */
7
+ import { fileURLToPath } from 'url';
8
+ import { existsSync } from 'fs';
9
+ import path from 'path';
10
+ import { isUrl } from '../config/utils.js';
11
+ /**
12
+ * Cached asset directory to avoid repeated filesystem checks
13
+ */
14
+ let cachedAssetDir;
15
+ /**
16
+ * Get the directory containing CLI assets (examples).
17
+ *
18
+ * In production: assets are in dist/ alongside the bundled CLI
19
+ * In development: assets are at package root
20
+ *
21
+ * @returns Absolute path to assets directory
22
+ */
23
+ export function getAssetDir() {
24
+ if (cachedAssetDir)
25
+ return cachedAssetDir;
26
+ const currentFile = fileURLToPath(import.meta.url);
27
+ let dir = path.dirname(currentFile);
28
+ // Walk up until we find a directory with examples/ sibling
29
+ while (dir !== path.dirname(dir)) {
30
+ if (existsSync(path.join(dir, 'examples'))) {
31
+ cachedAssetDir = dir;
32
+ return dir;
33
+ }
34
+ dir = path.dirname(dir);
35
+ }
36
+ // Fallback to current file's directory (shouldn't happen if build is correct)
37
+ cachedAssetDir = path.dirname(currentFile);
38
+ return cachedAssetDir;
39
+ }
40
+ /**
41
+ * Resolve asset path using unified strategy
42
+ *
43
+ * Resolution rules:
44
+ * 1. Bare names (no / or \) → Package asset (examples)
45
+ * 2. Relative paths (./ or ../) → User asset relative to base directory
46
+ * 3. Absolute paths → Use as-is
47
+ *
48
+ * @param assetPath - Path to resolve
49
+ * @param assetType - Type of asset (determines package subdirectory)
50
+ * @param baseDir - Base directory for relative paths (defaults to cwd)
51
+ * @returns Absolute path to asset
52
+ */
53
+ export function resolveAsset(assetPath, assetType, baseDir) {
54
+ // URL → pass through unchanged
55
+ if (isUrl(assetPath)) {
56
+ return assetPath;
57
+ }
58
+ // Bare name → package asset (examples directory)
59
+ if (!assetPath.includes('/') && !assetPath.includes('\\')) {
60
+ const assetDir = getAssetDir();
61
+ return path.join(assetDir, 'examples', assetPath);
62
+ }
63
+ // Absolute path → use as-is
64
+ if (path.isAbsolute(assetPath)) {
65
+ return assetPath;
66
+ }
67
+ // Relative path → resolve from base directory
68
+ return path.resolve(baseDir || process.cwd(), assetPath);
69
+ }
70
+ //# sourceMappingURL=asset-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-resolver.js","sourceRoot":"","sources":["../../src/core/asset-resolver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C;;GAEG;AACH,IAAI,cAAkC,CAAC;AAEvC;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW;IACzB,IAAI,cAAc;QAAE,OAAO,cAAc,CAAC;IAE1C,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnD,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAEpC,2DAA2D;IAC3D,OAAO,GAAG,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;YAC3C,cAAc,GAAG,GAAG,CAAC;YACrB,OAAO,GAAG,CAAC;QACb,CAAC;QACD,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,8EAA8E;IAC9E,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC3C,OAAO,cAAc,CAAC;AACxB,CAAC;AAOD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAC1B,SAAiB,EACjB,SAAoB,EACpB,OAAgB;IAEhB,+BAA+B;IAC/B,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QACrB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,iDAAiD;IACjD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1D,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IACpD,CAAC;IAED,4BAA4B;IAC5B,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,8CAA8C;IAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Build artifact cache for flow.json configurations
3
+ *
4
+ * Caches compiled bundles based on configuration content + date.
5
+ * Enables intelligent cache reuse with daily rebuild guarantee.
6
+ */
7
+ /**
8
+ * Get the cache file path for a flow.json configuration
9
+ */
10
+ export declare function getBuildCachePath(configContent: string, tmpDir?: string): Promise<string>;
11
+ /**
12
+ * Check if a cached build exists for the given configuration
13
+ */
14
+ export declare function isBuildCached(configContent: string, tmpDir?: string): Promise<boolean>;
15
+ /**
16
+ * Store a build artifact in the cache
17
+ */
18
+ export declare function cacheBuild(configContent: string, buildOutput: string, tmpDir?: string): Promise<void>;
19
+ /**
20
+ * Retrieve a cached build artifact
21
+ */
22
+ export declare function getCachedBuild(configContent: string, tmpDir?: string): Promise<string | null>;
23
+ //# sourceMappingURL=build-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-cache.d.ts","sourceRoot":"","sources":["../../src/core/build-cache.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,aAAa,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,aAAa,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQxB"}