@jahia/jahia-cli 0.1.4 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (292) hide show
  1. package/README.md +271 -56
  2. package/bin/dev.js +5 -1
  3. package/dist/commands/config/init.d.ts +12 -0
  4. package/dist/commands/config/init.d.ts.map +1 -0
  5. package/dist/commands/config/init.js +76 -0
  6. package/dist/commands/config/init.js.map +1 -0
  7. package/dist/commands/environment/create.d.ts +27 -0
  8. package/dist/commands/environment/create.d.ts.map +1 -0
  9. package/dist/commands/environment/create.js +192 -0
  10. package/dist/commands/environment/create.js.map +1 -0
  11. package/dist/commands/environment/delete.d.ts +12 -0
  12. package/dist/commands/environment/delete.d.ts.map +1 -0
  13. package/dist/commands/environment/delete.js +69 -0
  14. package/dist/commands/environment/delete.js.map +1 -0
  15. package/dist/commands/environment/doctor.d.ts +13 -0
  16. package/dist/commands/environment/doctor.d.ts.map +1 -0
  17. package/dist/commands/environment/doctor.js +63 -0
  18. package/dist/commands/environment/doctor.js.map +1 -0
  19. package/dist/commands/environment/export.d.ts +35 -0
  20. package/dist/commands/environment/export.d.ts.map +1 -0
  21. package/dist/commands/environment/export.js +127 -0
  22. package/dist/commands/environment/export.js.map +1 -0
  23. package/dist/commands/environment/list.d.ts +11 -0
  24. package/dist/commands/environment/list.d.ts.map +1 -0
  25. package/dist/commands/environment/list.js +70 -0
  26. package/dist/commands/environment/list.js.map +1 -0
  27. package/dist/commands/environment/logs.d.ts +13 -0
  28. package/dist/commands/environment/logs.d.ts.map +1 -0
  29. package/dist/commands/environment/logs.js +77 -0
  30. package/dist/commands/environment/logs.js.map +1 -0
  31. package/dist/commands/environment/start.d.ts +12 -0
  32. package/dist/commands/environment/start.d.ts.map +1 -0
  33. package/dist/commands/environment/start.js +71 -0
  34. package/dist/commands/environment/start.js.map +1 -0
  35. package/dist/commands/environment/stop.d.ts +12 -0
  36. package/dist/commands/environment/stop.d.ts.map +1 -0
  37. package/dist/commands/environment/stop.js +71 -0
  38. package/dist/commands/environment/stop.js.map +1 -0
  39. package/dist/commands/init.d.ts +39 -0
  40. package/dist/commands/init.d.ts.map +1 -0
  41. package/dist/commands/init.js +178 -0
  42. package/dist/commands/init.js.map +1 -0
  43. package/dist/commands/jahia/alive.d.ts +18 -0
  44. package/dist/commands/jahia/alive.d.ts.map +1 -0
  45. package/dist/commands/jahia/alive.js +118 -0
  46. package/dist/commands/jahia/alive.js.map +1 -0
  47. package/dist/commands/jahia/provision.d.ts +33 -0
  48. package/dist/commands/jahia/provision.d.ts.map +1 -0
  49. package/dist/commands/jahia/provision.js +164 -0
  50. package/dist/commands/jahia/provision.js.map +1 -0
  51. package/dist/commands/tests/init.d.ts +56 -0
  52. package/dist/commands/tests/init.d.ts.map +1 -0
  53. package/dist/commands/tests/init.js +195 -0
  54. package/dist/commands/tests/init.js.map +1 -0
  55. package/dist/commands/workflow/init.d.ts +21 -0
  56. package/dist/commands/workflow/init.d.ts.map +1 -0
  57. package/dist/commands/workflow/init.js +83 -0
  58. package/dist/commands/workflow/init.js.map +1 -0
  59. package/dist/commands/workflow/run.d.ts +21 -0
  60. package/dist/commands/workflow/run.d.ts.map +1 -0
  61. package/dist/commands/workflow/run.js +97 -0
  62. package/dist/commands/workflow/run.js.map +1 -0
  63. package/dist/lib/components/index.d.ts +59 -0
  64. package/dist/lib/components/index.d.ts.map +1 -0
  65. package/dist/lib/components/index.js +111 -0
  66. package/dist/lib/components/index.js.map +1 -0
  67. package/dist/lib/components/jahia.d.ts +3 -0
  68. package/dist/lib/components/jahia.d.ts.map +1 -0
  69. package/dist/lib/components/jahia.js +37 -0
  70. package/dist/lib/components/jahia.js.map +1 -0
  71. package/dist/lib/components/smtp-server.d.ts +3 -0
  72. package/dist/lib/components/smtp-server.d.ts.map +1 -0
  73. package/dist/lib/components/smtp-server.js +29 -0
  74. package/dist/lib/components/smtp-server.js.map +1 -0
  75. package/dist/lib/components/types.d.ts +89 -0
  76. package/dist/lib/components/types.d.ts.map +1 -0
  77. package/dist/lib/components/types.js +2 -0
  78. package/dist/lib/components/types.js.map +1 -0
  79. package/dist/lib/components/victorialogs.d.ts +3 -0
  80. package/dist/lib/components/victorialogs.d.ts.map +1 -0
  81. package/dist/lib/components/victorialogs.js +29 -0
  82. package/dist/lib/components/victorialogs.js.map +1 -0
  83. package/dist/lib/config/build-blank-config.d.ts +6 -0
  84. package/dist/lib/config/build-blank-config.d.ts.map +1 -0
  85. package/dist/lib/config/build-blank-config.js +19 -0
  86. package/dist/lib/config/build-blank-config.js.map +1 -0
  87. package/dist/lib/config/config-to-yaml-with-comments.d.ts +11 -0
  88. package/dist/lib/config/config-to-yaml-with-comments.d.ts.map +1 -0
  89. package/dist/lib/config/config-to-yaml-with-comments.js +75 -0
  90. package/dist/lib/config/config-to-yaml-with-comments.js.map +1 -0
  91. package/dist/lib/config/config-to-yaml.d.ts +7 -0
  92. package/dist/lib/config/config-to-yaml.d.ts.map +1 -0
  93. package/dist/lib/config/config-to-yaml.js +26 -0
  94. package/dist/lib/config/config-to-yaml.js.map +1 -0
  95. package/dist/lib/config/defaults.d.ts +15 -0
  96. package/dist/lib/config/defaults.d.ts.map +1 -0
  97. package/dist/lib/config/defaults.js +19 -0
  98. package/dist/lib/config/defaults.js.map +1 -0
  99. package/dist/lib/config/export-config.d.ts +15 -0
  100. package/dist/lib/config/export-config.d.ts.map +1 -0
  101. package/dist/lib/config/export-config.js +27 -0
  102. package/dist/lib/config/export-config.js.map +1 -0
  103. package/dist/lib/config/initialize-config-file.d.ts +12 -0
  104. package/dist/lib/config/initialize-config-file.d.ts.map +1 -0
  105. package/dist/lib/config/initialize-config-file.js +16 -0
  106. package/dist/lib/config/initialize-config-file.js.map +1 -0
  107. package/dist/lib/config/parser.d.ts +46 -0
  108. package/dist/lib/config/parser.d.ts.map +1 -0
  109. package/dist/lib/config/parser.js +196 -0
  110. package/dist/lib/config/parser.js.map +1 -0
  111. package/dist/lib/config/resolve-env-vars.d.ts +29 -0
  112. package/dist/lib/config/resolve-env-vars.d.ts.map +1 -0
  113. package/dist/lib/config/resolve-env-vars.js +47 -0
  114. package/dist/lib/config/resolve-env-vars.js.map +1 -0
  115. package/dist/lib/config/types.d.ts +74 -0
  116. package/dist/lib/config/types.d.ts.map +1 -0
  117. package/dist/lib/config/types.js +2 -0
  118. package/dist/lib/config/types.js.map +1 -0
  119. package/dist/lib/config/with-tests-version.d.ts +6 -0
  120. package/dist/lib/config/with-tests-version.d.ts.map +1 -0
  121. package/dist/lib/config/with-tests-version.js +11 -0
  122. package/dist/lib/config/with-tests-version.js.map +1 -0
  123. package/dist/lib/output/formatter.d.ts +38 -0
  124. package/dist/lib/output/formatter.d.ts.map +1 -0
  125. package/dist/lib/output/formatter.js +172 -0
  126. package/dist/lib/output/formatter.js.map +1 -0
  127. package/dist/lib/providers/docker/container.d.ts +61 -0
  128. package/dist/lib/providers/docker/container.d.ts.map +1 -0
  129. package/dist/lib/providers/docker/container.js +101 -0
  130. package/dist/lib/providers/docker/container.js.map +1 -0
  131. package/dist/lib/providers/docker/get-container-logs.d.ts +5 -0
  132. package/dist/lib/providers/docker/get-container-logs.d.ts.map +1 -0
  133. package/dist/lib/providers/docker/get-container-logs.js +17 -0
  134. package/dist/lib/providers/docker/get-container-logs.js.map +1 -0
  135. package/dist/lib/providers/docker/index.d.ts +8 -0
  136. package/dist/lib/providers/docker/index.d.ts.map +1 -0
  137. package/dist/lib/providers/docker/index.js +424 -0
  138. package/dist/lib/providers/docker/index.js.map +1 -0
  139. package/dist/lib/providers/docker/network.d.ts +17 -0
  140. package/dist/lib/providers/docker/network.d.ts.map +1 -0
  141. package/dist/lib/providers/docker/network.js +36 -0
  142. package/dist/lib/providers/docker/network.js.map +1 -0
  143. package/dist/lib/providers/docker/start-container.d.ts +5 -0
  144. package/dist/lib/providers/docker/start-container.d.ts.map +1 -0
  145. package/dist/lib/providers/docker/start-container.js +10 -0
  146. package/dist/lib/providers/docker/start-container.js.map +1 -0
  147. package/dist/lib/providers/docker/stop-container.d.ts +5 -0
  148. package/dist/lib/providers/docker/stop-container.d.ts.map +1 -0
  149. package/dist/lib/providers/docker/stop-container.js +10 -0
  150. package/dist/lib/providers/docker/stop-container.js.map +1 -0
  151. package/dist/lib/providers/docker/volume.d.ts +13 -0
  152. package/dist/lib/providers/docker/volume.d.ts.map +1 -0
  153. package/dist/lib/providers/docker/volume.js +23 -0
  154. package/dist/lib/providers/docker/volume.js.map +1 -0
  155. package/dist/lib/providers/index.d.ts +13 -0
  156. package/dist/lib/providers/index.d.ts.map +1 -0
  157. package/dist/lib/providers/index.js +22 -0
  158. package/dist/lib/providers/index.js.map +1 -0
  159. package/dist/lib/providers/jahiacloudv1/index.d.ts +7 -0
  160. package/dist/lib/providers/jahiacloudv1/index.d.ts.map +1 -0
  161. package/dist/lib/providers/jahiacloudv1/index.js +16 -0
  162. package/dist/lib/providers/jahiacloudv1/index.js.map +1 -0
  163. package/dist/lib/providers/types.d.ts +84 -0
  164. package/dist/lib/providers/types.d.ts.map +1 -0
  165. package/dist/lib/providers/types.js +2 -0
  166. package/dist/lib/providers/types.js.map +1 -0
  167. package/dist/lib/provisioning/detect-manifest-source.d.ts +7 -0
  168. package/dist/lib/provisioning/detect-manifest-source.d.ts.map +1 -0
  169. package/dist/lib/provisioning/detect-manifest-source.js +6 -0
  170. package/dist/lib/provisioning/detect-manifest-source.js.map +1 -0
  171. package/dist/lib/provisioning/fetch-manifest.d.ts +9 -0
  172. package/dist/lib/provisioning/fetch-manifest.d.ts.map +1 -0
  173. package/dist/lib/provisioning/fetch-manifest.js +17 -0
  174. package/dist/lib/provisioning/fetch-manifest.js.map +1 -0
  175. package/dist/lib/provisioning/read-manifest.d.ts +9 -0
  176. package/dist/lib/provisioning/read-manifest.d.ts.map +1 -0
  177. package/dist/lib/provisioning/read-manifest.js +12 -0
  178. package/dist/lib/provisioning/read-manifest.js.map +1 -0
  179. package/dist/lib/provisioning/resolve-asset-paths.d.ts +7 -0
  180. package/dist/lib/provisioning/resolve-asset-paths.d.ts.map +1 -0
  181. package/dist/lib/provisioning/resolve-asset-paths.js +22 -0
  182. package/dist/lib/provisioning/resolve-asset-paths.js.map +1 -0
  183. package/dist/lib/provisioning/submit-provisioning.d.ts +12 -0
  184. package/dist/lib/provisioning/submit-provisioning.d.ts.map +1 -0
  185. package/dist/lib/provisioning/submit-provisioning.js +70 -0
  186. package/dist/lib/provisioning/submit-provisioning.js.map +1 -0
  187. package/dist/lib/provisioning/types.d.ts +34 -0
  188. package/dist/lib/provisioning/types.d.ts.map +1 -0
  189. package/dist/lib/provisioning/types.js +2 -0
  190. package/dist/lib/provisioning/types.js.map +1 -0
  191. package/dist/lib/sam/index.d.ts +4 -0
  192. package/dist/lib/sam/index.d.ts.map +1 -0
  193. package/dist/lib/sam/index.js +3 -0
  194. package/dist/lib/sam/index.js.map +1 -0
  195. package/dist/lib/sam/query-sam-status.d.ts +6 -0
  196. package/dist/lib/sam/query-sam-status.d.ts.map +1 -0
  197. package/dist/lib/sam/query-sam-status.js +54 -0
  198. package/dist/lib/sam/query-sam-status.js.map +1 -0
  199. package/dist/lib/sam/types.d.ts +41 -0
  200. package/dist/lib/sam/types.d.ts.map +1 -0
  201. package/dist/lib/sam/types.js +2 -0
  202. package/dist/lib/sam/types.js.map +1 -0
  203. package/dist/lib/sam/wait-for-sam.d.ts +7 -0
  204. package/dist/lib/sam/wait-for-sam.d.ts.map +1 -0
  205. package/dist/lib/sam/wait-for-sam.js +31 -0
  206. package/dist/lib/sam/wait-for-sam.js.map +1 -0
  207. package/dist/lib/state/delete-state.d.ts +6 -0
  208. package/dist/lib/state/delete-state.d.ts.map +1 -0
  209. package/dist/lib/state/delete-state.js +16 -0
  210. package/dist/lib/state/delete-state.js.map +1 -0
  211. package/dist/lib/state/get-active-environment.d.ts +6 -0
  212. package/dist/lib/state/get-active-environment.d.ts.map +1 -0
  213. package/dist/lib/state/get-active-environment.js +9 -0
  214. package/dist/lib/state/get-active-environment.js.map +1 -0
  215. package/dist/lib/state/get-jahia-connection-defaults.d.ts +16 -0
  216. package/dist/lib/state/get-jahia-connection-defaults.d.ts.map +1 -0
  217. package/dist/lib/state/get-jahia-connection-defaults.js +28 -0
  218. package/dist/lib/state/get-jahia-connection-defaults.js.map +1 -0
  219. package/dist/lib/state/has-active-environment.d.ts +5 -0
  220. package/dist/lib/state/has-active-environment.d.ts.map +1 -0
  221. package/dist/lib/state/has-active-environment.js +9 -0
  222. package/dist/lib/state/has-active-environment.js.map +1 -0
  223. package/dist/lib/state/index.d.ts +11 -0
  224. package/dist/lib/state/index.d.ts.map +1 -0
  225. package/dist/lib/state/index.js +9 -0
  226. package/dist/lib/state/index.js.map +1 -0
  227. package/dist/lib/state/load-state.d.ts +7 -0
  228. package/dist/lib/state/load-state.d.ts.map +1 -0
  229. package/dist/lib/state/load-state.js +17 -0
  230. package/dist/lib/state/load-state.js.map +1 -0
  231. package/dist/lib/state/reconcile-with-docker.d.ts +19 -0
  232. package/dist/lib/state/reconcile-with-docker.d.ts.map +1 -0
  233. package/dist/lib/state/reconcile-with-docker.js +36 -0
  234. package/dist/lib/state/reconcile-with-docker.js.map +1 -0
  235. package/dist/lib/state/save-state.d.ts +7 -0
  236. package/dist/lib/state/save-state.d.ts.map +1 -0
  237. package/dist/lib/state/save-state.js +13 -0
  238. package/dist/lib/state/save-state.js.map +1 -0
  239. package/dist/lib/state/state-file-path.d.ts +8 -0
  240. package/dist/lib/state/state-file-path.d.ts.map +1 -0
  241. package/dist/lib/state/state-file-path.js +14 -0
  242. package/dist/lib/state/state-file-path.js.map +1 -0
  243. package/dist/lib/state/state-flag.d.ts +6 -0
  244. package/dist/lib/state/state-flag.d.ts.map +1 -0
  245. package/dist/lib/state/state-flag.js +12 -0
  246. package/dist/lib/state/state-flag.js.map +1 -0
  247. package/dist/lib/state/types.d.ts +30 -0
  248. package/dist/lib/state/types.d.ts.map +1 -0
  249. package/dist/lib/state/types.js +2 -0
  250. package/dist/lib/state/types.js.map +1 -0
  251. package/dist/lib/tests/clone-scaffolding.d.ts +16 -0
  252. package/dist/lib/tests/clone-scaffolding.d.ts.map +1 -0
  253. package/dist/lib/tests/clone-scaffolding.js +64 -0
  254. package/dist/lib/tests/clone-scaffolding.js.map +1 -0
  255. package/dist/lib/tests/exclusion-list.d.ts +11 -0
  256. package/dist/lib/tests/exclusion-list.d.ts.map +1 -0
  257. package/dist/lib/tests/exclusion-list.js +19 -0
  258. package/dist/lib/tests/exclusion-list.js.map +1 -0
  259. package/dist/lib/tests/gitignore-manager.d.ts +21 -0
  260. package/dist/lib/tests/gitignore-manager.d.ts.map +1 -0
  261. package/dist/lib/tests/gitignore-manager.js +47 -0
  262. package/dist/lib/tests/gitignore-manager.js.map +1 -0
  263. package/dist/lib/tests/index.d.ts +6 -0
  264. package/dist/lib/tests/index.d.ts.map +1 -0
  265. package/dist/lib/tests/index.js +5 -0
  266. package/dist/lib/tests/index.js.map +1 -0
  267. package/dist/lib/tests/sync-missing-files.d.ts +3 -0
  268. package/dist/lib/tests/sync-missing-files.d.ts.map +1 -0
  269. package/dist/lib/tests/sync-missing-files.js +65 -0
  270. package/dist/lib/tests/sync-missing-files.js.map +1 -0
  271. package/dist/lib/tests/types.d.ts +26 -0
  272. package/dist/lib/tests/types.d.ts.map +1 -0
  273. package/dist/lib/tests/types.js +2 -0
  274. package/dist/lib/tests/types.js.map +1 -0
  275. package/dist/lib/workflow/build-sample-workflow.d.ts +7 -0
  276. package/dist/lib/workflow/build-sample-workflow.d.ts.map +1 -0
  277. package/dist/lib/workflow/build-sample-workflow.js +35 -0
  278. package/dist/lib/workflow/build-sample-workflow.js.map +1 -0
  279. package/dist/lib/workflow/executor.d.ts +21 -0
  280. package/dist/lib/workflow/executor.d.ts.map +1 -0
  281. package/dist/lib/workflow/executor.js +100 -0
  282. package/dist/lib/workflow/executor.js.map +1 -0
  283. package/dist/lib/workflow/merge-workflow-into-config.d.ts +7 -0
  284. package/dist/lib/workflow/merge-workflow-into-config.d.ts.map +1 -0
  285. package/dist/lib/workflow/merge-workflow-into-config.js +9 -0
  286. package/dist/lib/workflow/merge-workflow-into-config.js.map +1 -0
  287. package/dist/lib/workflow/types.d.ts +30 -0
  288. package/dist/lib/workflow/types.d.ts.map +1 -0
  289. package/dist/lib/workflow/types.js +25 -0
  290. package/dist/lib/workflow/types.js.map +1 -0
  291. package/oclif.manifest.json +856 -1
  292. package/package.json +9 -4
@@ -0,0 +1,6 @@
1
+ import type { JahiaCliConfig } from './types.js';
2
+ /**
3
+ * Builds a blank Jahia CLI configuration scaffold.
4
+ */
5
+ export declare const buildBlankConfig: () => JahiaCliConfig;
6
+ //# sourceMappingURL=build-blank-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-blank-config.d.ts","sourceRoot":"","sources":["../../../src/lib/config/build-blank-config.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;GAEG;AACH,eAAO,MAAM,gBAAgB,QAAO,cAalC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { DEFAULT_PROVIDER, DEFAULT_SCAFFOLDING_PATH, DEFAULT_SCAFFOLDING_REPOSITORY, DEFAULT_SCAFFOLDING_VERSION, generateEnvName, } from './defaults.js';
2
+ /**
3
+ * Builds a blank Jahia CLI configuration scaffold.
4
+ */
5
+ export const buildBlankConfig = () => ({
6
+ environment: {
7
+ name: generateEnvName(),
8
+ provider: DEFAULT_PROVIDER,
9
+ components: [],
10
+ },
11
+ tests: {
12
+ scaffolding: {
13
+ repository: DEFAULT_SCAFFOLDING_REPOSITORY,
14
+ path: DEFAULT_SCAFFOLDING_PATH,
15
+ version: DEFAULT_SCAFFOLDING_VERSION,
16
+ },
17
+ },
18
+ });
19
+ //# sourceMappingURL=build-blank-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-blank-config.js","sourceRoot":"","sources":["../../../src/lib/config/build-blank-config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,8BAA8B,EAC9B,2BAA2B,EAC3B,eAAe,GAChB,MAAM,eAAe,CAAC;AAGvB;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAmB,EAAE,CAAC,CAAC;IACrD,WAAW,EAAE;QACX,IAAI,EAAE,eAAe,EAAE;QACvB,QAAQ,EAAE,gBAAgB;QAC1B,UAAU,EAAE,EAAE;KACf;IACD,KAAK,EAAE;QACL,WAAW,EAAE;YACX,UAAU,EAAE,8BAA8B;YAC1C,IAAI,EAAE,wBAAwB;YAC9B,OAAO,EAAE,2BAA2B;SACrC;KACF;CACF,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { JahiaCliConfig } from './types.js';
2
+ /**
3
+ * Takes the plain YAML output from configToYaml and inserts section-level
4
+ * comment headers above each top-level section (environment, tests, workflow).
5
+ */
6
+ export declare const insertSectionComments: (yamlContent: string) => string;
7
+ /**
8
+ * Serializes JahiaCliConfig to YAML with section-level documentation comments.
9
+ */
10
+ export declare const configToYamlWithComments: (config: JahiaCliConfig) => string;
11
+ //# sourceMappingURL=config-to-yaml-with-comments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-to-yaml-with-comments.d.ts","sourceRoot":"","sources":["../../../src/lib/config/config-to-yaml-with-comments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAmDjD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAI,aAAa,MAAM,KAAG,MA2B3D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,GAAI,QAAQ,cAAc,KAAG,MACrB,CAAC"}
@@ -0,0 +1,75 @@
1
+ import { configToYaml } from './config-to-yaml.js';
2
+ /**
3
+ * Section-level comment headers for the config file.
4
+ * Provides lightweight documentation embedded directly in the generated YAML.
5
+ */
6
+ const ENVIRONMENT_COMMENT = `# ── Environment ──────────────────────────────────────────────────────────
7
+ # Defines the Jahia environment to create via Docker.
8
+ # - name: unique identifier for the environment (auto-generated if omitted)
9
+ # - provider: "docker" (default) or "jahiacloudv1" (future)
10
+ # - components: list of services to start (e.g. jahia, smtp-server)
11
+ # Each component can be a plain string or an object with overrides:
12
+ # - jahia # uses default image and tag
13
+ # - { name: jahia, overrides: { tag: "8.3.0.0" } } # custom version
14
+ # - { name: jahia, overrides: { image: "jahia/jahia-ee:8.3.0.0" } }
15
+ # - { name: jahia, overrides: { image: "my-registry.example.com/jahia/jahia-ee:8.3.0.0" } }
16
+ # - smtp-server # Mailpit for email testing
17
+ #
18
+ # The "image" override accepts the full image:tag format in a single value.
19
+ # A separate "tag" override takes precedence over the tag embedded in "image".
20
+ #
21
+ # Overrides support environment variable substitution (resolved at parse time):
22
+ # \${VAR} — resolves from process.env; errors if not set
23
+ # \${VAR:-default} — resolves from process.env, falls back to default
24
+ #
25
+ # Example — parameterize the full image reference for CI/CD pipelines:
26
+ # - name: jahia
27
+ # overrides:
28
+ # image: "\${JAHIA_IMAGE:-jahia/jahia-ee:8.2.1.0}"
29
+ #
30
+ # Env vars are the same ones available in workflow "run:" steps.
31
+ # Set them in your shell before running jahia-cli:
32
+ # export JAHIA_IMAGE=jahia/jahia-ee:8.3.0.0 && jahia-cli environment create --config this-file.yml`;
33
+ const TESTS_COMMENT = `# ── Tests ────────────────────────────────────────────────────────────────
34
+ # Configures test scaffolding pulled from a remote Git repository.
35
+ # - scaffolding.repository: Git URL of the test scaffolding source
36
+ # - scaffolding.path: subdirectory within the repo containing scaffolding files
37
+ # - scaffolding.version: Git ref to checkout ("latest" resolves to newest tag)`;
38
+ const WORKFLOW_COMMENT = `# ── Workflow ─────────────────────────────────────────────────────────────
39
+ # Sequential steps executed by "jahia-cli workflow run".
40
+ # Each step is either a shell command (run:) or a jahia-cli command (uses:).
41
+ # - name: human-readable label (optional)
42
+ # - run: shell command executed via execa
43
+ # - uses: jahia-cli command name (e.g. "environment:create")
44
+ # - with: flags passed to the command (e.g. { timeout: "300" })
45
+ # - working_dir: override the working directory for this step
46
+ # Steps run in order; the workflow stops on the first failure.`;
47
+ /**
48
+ * Takes the plain YAML output from configToYaml and inserts section-level
49
+ * comment headers above each top-level section (environment, tests, workflow).
50
+ */
51
+ export const insertSectionComments = (yamlContent) => {
52
+ const commentMap = {
53
+ 'environment:': ENVIRONMENT_COMMENT,
54
+ 'tests:': TESTS_COMMENT,
55
+ 'workflow:': WORKFLOW_COMMENT,
56
+ };
57
+ const lines = yamlContent.split('\n');
58
+ const result = [];
59
+ lines.forEach((line) => {
60
+ const matchedKey = Object.keys(commentMap).find((key) => line.startsWith(key));
61
+ if (matchedKey !== undefined) {
62
+ if (result.length > 0) {
63
+ result.push('');
64
+ }
65
+ result.push(commentMap[matchedKey] ?? '');
66
+ }
67
+ result.push(line);
68
+ });
69
+ return result.join('\n');
70
+ };
71
+ /**
72
+ * Serializes JahiaCliConfig to YAML with section-level documentation comments.
73
+ */
74
+ export const configToYamlWithComments = (config) => insertSectionComments(configToYaml(config));
75
+ //# sourceMappingURL=config-to-yaml-with-comments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-to-yaml-with-comments.js","sourceRoot":"","sources":["../../../src/lib/config/config-to-yaml-with-comments.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;;GAGG;AACH,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;uGA0B2E,CAAC;AAExG,MAAM,aAAa,GAAG;;;;+EAIyD,CAAC;AAEhF,MAAM,gBAAgB,GAAG;;;;;;;;+DAQsC,CAAC;AAEhE;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,WAAmB,EAAU,EAAE;IACnE,MAAM,UAAU,GAAqC;QACnD,cAAc,EAAE,mBAAmB;QACnC,QAAQ,EAAE,aAAa;QACvB,WAAW,EAAE,gBAAgB;KAC9B,CAAC;IAEF,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACrB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAC7C,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAC9B,CAAC;QAEF,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,MAAsB,EAAU,EAAE,CACzE,qBAAqB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { JahiaCliConfig } from './types.js';
2
+ /**
3
+ * Serializes JahiaCliConfig to YAML.
4
+ * Components without overrides are emitted as plain strings for readability.
5
+ */
6
+ export declare const configToYaml: (config: JahiaCliConfig) => string;
7
+ //# sourceMappingURL=config-to-yaml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-to-yaml.d.ts","sourceRoot":"","sources":["../../../src/lib/config/config-to-yaml.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,QAAQ,cAAc,KAAG,MAyBnD,CAAC"}
@@ -0,0 +1,26 @@
1
+ import yaml from 'js-yaml';
2
+ /**
3
+ * Serializes JahiaCliConfig to YAML.
4
+ * Components without overrides are emitted as plain strings for readability.
5
+ */
6
+ export const configToYaml = (config) => yaml.dump({
7
+ ...(config.environment === undefined
8
+ ? {}
9
+ : {
10
+ environment: {
11
+ ...config.environment,
12
+ components: config.environment.components.map((component) => component.overrides === undefined
13
+ ? component.name
14
+ : {
15
+ name: component.name,
16
+ overrides: component.overrides,
17
+ }),
18
+ },
19
+ }),
20
+ ...(config.tests === undefined ? {} : { tests: config.tests }),
21
+ ...(config.workflow === undefined ? {} : { workflow: config.workflow }),
22
+ }, {
23
+ lineWidth: -1,
24
+ noRefs: true,
25
+ });
26
+ //# sourceMappingURL=config-to-yaml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-to-yaml.js","sourceRoot":"","sources":["../../../src/lib/config/config-to-yaml.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,SAAS,CAAC;AAI3B;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAsB,EAAU,EAAE,CAC7D,IAAI,CAAC,IAAI,CACP;IACE,GAAG,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS;QAClC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC;YACE,WAAW,EAAE;gBACX,GAAG,MAAM,CAAC,WAAW;gBACrB,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAC1D,SAAS,CAAC,SAAS,KAAK,SAAS;oBAC/B,CAAC,CAAC,SAAS,CAAC,IAAI;oBAChB,CAAC,CAAC;wBACE,IAAI,EAAE,SAAS,CAAC,IAAI;wBACpB,SAAS,EAAE,SAAS,CAAC,SAAS;qBAC/B,CACN;aACF;SACF,CAAC;IACN,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IAC9D,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;CACxE,EACD;IACE,SAAS,EAAE,CAAC,CAAC;IACb,MAAM,EAAE,IAAI;CACb,CACF,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Generates a default environment name using a short random suffix.
3
+ */
4
+ export declare const generateEnvName: () => string;
5
+ /**
6
+ * Default provider when none is specified.
7
+ */
8
+ export declare const DEFAULT_PROVIDER = "docker";
9
+ /**
10
+ * Default scaffolding configuration for tests.
11
+ */
12
+ export declare const DEFAULT_SCAFFOLDING_REPOSITORY = "https://github.com/Jahia/jahia-cypress";
13
+ export declare const DEFAULT_SCAFFOLDING_PATH = "scaffolding/";
14
+ export declare const DEFAULT_SCAFFOLDING_VERSION = "latest";
15
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/lib/config/defaults.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,eAAe,QAAO,MAGlC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,WAAW,CAAC;AAEzC;;GAEG;AACH,eAAO,MAAM,8BAA8B,2CAA2C,CAAC;AACvF,eAAO,MAAM,wBAAwB,iBAAiB,CAAC;AACvD,eAAO,MAAM,2BAA2B,WAAW,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { randomBytes } from 'node:crypto';
2
+ /**
3
+ * Generates a default environment name using a short random suffix.
4
+ */
5
+ export const generateEnvName = () => {
6
+ const suffix = randomBytes(4).toString('hex');
7
+ return `env-${suffix}`;
8
+ };
9
+ /**
10
+ * Default provider when none is specified.
11
+ */
12
+ export const DEFAULT_PROVIDER = 'docker';
13
+ /**
14
+ * Default scaffolding configuration for tests.
15
+ */
16
+ export const DEFAULT_SCAFFOLDING_REPOSITORY = 'https://github.com/Jahia/jahia-cypress';
17
+ export const DEFAULT_SCAFFOLDING_PATH = 'scaffolding/';
18
+ export const DEFAULT_SCAFFOLDING_VERSION = 'latest';
19
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../../src/lib/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,GAAW,EAAE;IAC1C,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,OAAO,MAAM,EAAE,CAAC;AACzB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AAEzC;;GAEG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,wCAAwC,CAAC;AACvF,MAAM,CAAC,MAAM,wBAAwB,GAAG,cAAc,CAAC;AACvD,MAAM,CAAC,MAAM,2BAA2B,GAAG,QAAQ,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { PersistedEnvironment } from '../state/types.js';
2
+ import type { EnvironmentConfig, JahiaCliConfig } from './types.js';
3
+ /**
4
+ * Extracts an exportable EnvironmentConfig from a persisted environment.
5
+ * Strips runtime data (container IDs, timestamps, network names) and
6
+ * excludes transparent infrastructure components (e.g., VictoriaLogs).
7
+ * The result is a minimal spec that can recreate the environment.
8
+ */
9
+ export declare const extractExportableConfig: (environment: PersistedEnvironment) => EnvironmentConfig;
10
+ /**
11
+ * Merges an exported environment config into an existing JahiaCliConfig,
12
+ * replacing only the environment section and preserving all other properties.
13
+ */
14
+ export declare const mergeEnvironmentIntoConfig: (existing: JahiaCliConfig, environmentConfig: EnvironmentConfig) => JahiaCliConfig;
15
+ //# sourceMappingURL=export-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-config.d.ts","sourceRoot":"","sources":["../../../src/lib/config/export-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAmB,MAAM,YAAY,CAAC;AAGrF;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,GAAI,aAAa,oBAAoB,KAAG,iBAa3E,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,0BAA0B,GACrC,UAAU,cAAc,EACxB,mBAAmB,iBAAiB,KACnC,cAGD,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { getComponent } from '../components/index.js';
2
+ /**
3
+ * Extracts an exportable EnvironmentConfig from a persisted environment.
4
+ * Strips runtime data (container IDs, timestamps, network names) and
5
+ * excludes transparent infrastructure components (e.g., VictoriaLogs).
6
+ * The result is a minimal spec that can recreate the environment.
7
+ */
8
+ export const extractExportableConfig = (environment) => {
9
+ const filteredComponents = environment.config.components.filter((component) => {
10
+ const definition = getComponent(component.name);
11
+ return definition !== undefined && !definition.isTransparent;
12
+ });
13
+ return {
14
+ name: environment.config.name,
15
+ provider: environment.config.provider,
16
+ components: filteredComponents,
17
+ };
18
+ };
19
+ /**
20
+ * Merges an exported environment config into an existing JahiaCliConfig,
21
+ * replacing only the environment section and preserving all other properties.
22
+ */
23
+ export const mergeEnvironmentIntoConfig = (existing, environmentConfig) => ({
24
+ ...existing,
25
+ environment: environmentConfig,
26
+ });
27
+ //# sourceMappingURL=export-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-config.js","sourceRoot":"","sources":["../../../src/lib/config/export-config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,WAAiC,EAAqB,EAAE;IAC9F,MAAM,kBAAkB,GAA+B,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CACzF,CAAC,SAAS,EAAE,EAAE;QACZ,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO,UAAU,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;IAC/D,CAAC,CACF,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,IAAI;QAC7B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ;QACrC,UAAU,EAAE,kBAAkB;KAC/B,CAAC;AACJ,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,QAAwB,EACxB,iBAAoC,EACpB,EAAE,CAAC,CAAC;IACpB,GAAG,QAAQ;IACX,WAAW,EAAE,iBAAiB;CAC/B,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { JahiaCliConfig } from './types.js';
2
+ export interface InitializeConfigFileParams {
3
+ readonly outputFile: string;
4
+ readonly config: JahiaCliConfig;
5
+ readonly force: boolean;
6
+ }
7
+ export interface InitializeConfigFileResult {
8
+ readonly written: boolean;
9
+ readonly outputFile: string;
10
+ }
11
+ export declare const initializeConfigFile: (params: InitializeConfigFileParams) => Promise<InitializeConfigFileResult>;
12
+ //# sourceMappingURL=initialize-config-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initialize-config-file.d.ts","sourceRoot":"","sources":["../../../src/lib/config/initialize-config-file.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,0BAA0B,KACjC,OAAO,CAAC,0BAA0B,CAcpC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { access, mkdir, writeFile } from 'node:fs/promises';
2
+ import { dirname } from 'node:path';
3
+ import { configToYaml } from './config-to-yaml.js';
4
+ export const initializeConfigFile = async (params) => {
5
+ const outputExists = await access(params.outputFile)
6
+ .then(() => true)
7
+ .catch(() => false);
8
+ if (outputExists && !params.force) {
9
+ return { written: false, outputFile: params.outputFile };
10
+ }
11
+ const yamlContent = configToYaml(params.config);
12
+ await mkdir(dirname(params.outputFile), { recursive: true });
13
+ await writeFile(params.outputFile, yamlContent, 'utf-8');
14
+ return { written: true, outputFile: params.outputFile };
15
+ };
16
+ //# sourceMappingURL=initialize-config-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initialize-config-file.js","sourceRoot":"","sources":["../../../src/lib/config/initialize-config-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAcnD,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EACvC,MAAkC,EACG,EAAE;IACvC,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;SACjD,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;SAChB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IAEtB,IAAI,YAAY,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;IAC3D,CAAC;IAED,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAEzD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;AAC1D,CAAC,CAAC"}
@@ -0,0 +1,46 @@
1
+ import type { ResolvedComponent } from '../components/types.js';
2
+ import type { EnvironmentConfig, JahiaCliConfig, RawConfig, RawEnvironmentConfig, ScaffoldingConfig, TestsConfig, WorkflowConfig, WorkflowStep } from './types.js';
3
+ /**
4
+ * Parses and validates the optional scaffolding section within tests.
5
+ */
6
+ export declare const parseScaffoldingConfig: (rawScaffolding: unknown) => ScaffoldingConfig;
7
+ /**
8
+ * Parses and validates the optional tests section.
9
+ */
10
+ export declare const parseTestsConfig: (rawTests: unknown) => TestsConfig | undefined;
11
+ /**
12
+ * Resolves environment variable substitution in component overrides.
13
+ * Applies `${VAR}` and `${VAR:-default}` resolution to `image`, `tag`,
14
+ * and `env` values — the same env vars available in workflow `run:` steps.
15
+ */
16
+ export declare const resolveComponentOverrides: (rawOverrides: Readonly<Record<string, unknown>>) => Record<string, unknown>;
17
+ /**
18
+ * Validates and parses a raw environment section into a typed EnvironmentConfig.
19
+ * Throws descriptive errors for invalid configurations.
20
+ */
21
+ export declare const validateEnvironmentConfig: (raw: RawEnvironmentConfig) => EnvironmentConfig;
22
+ /**
23
+ * Validates a single workflow step entry.
24
+ * Each step must have either `run` (shell command) or `uses` (CLI command), not both.
25
+ */
26
+ export declare const validateWorkflowStep: (raw: unknown, index: number) => WorkflowStep;
27
+ /**
28
+ * Parses and validates the optional workflow section.
29
+ */
30
+ export declare const parseWorkflowConfig: (rawWorkflow: unknown) => WorkflowConfig | undefined;
31
+ /**
32
+ * Validates and parses a raw YAML object into a typed JahiaCliConfig.
33
+ * All sections (environment, tests, workflow) are optional — commands validate
34
+ * the presence of the sections they need.
35
+ */
36
+ export declare const validateConfig: (raw: RawConfig) => JahiaCliConfig;
37
+ /**
38
+ * Loads and parses a YAML config file from disk.
39
+ */
40
+ export declare const loadConfigFile: (filePath: string) => Promise<JahiaCliConfig>;
41
+ /**
42
+ * Resolves all components in a config to their full definitions with overrides applied.
43
+ * Throws if any component name is not found in the registry.
44
+ */
45
+ export declare const resolveConfigComponents: (config: EnvironmentConfig) => readonly ResolvedComponent[];
46
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/lib/config/parser.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAUhE,OAAO,KAAK,EAEV,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,eAAO,MAAM,sBAAsB,GAAI,gBAAgB,OAAO,KAAG,iBAsBhE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,UAAU,OAAO,KAAG,WAAW,GAAG,SAyBlE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,GACpC,cAAc,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KAC9C,MAAM,CAAC,MAAM,EAAE,OAAO,CAqBxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,GAAI,KAAK,oBAAoB,KAAG,iBAkCrE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAAI,KAAK,OAAO,EAAE,OAAO,MAAM,KAAG,YAmClE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,aAAa,OAAO,KAAG,cAAc,GAAG,SAwB3E,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,KAAK,SAAS,KAAG,cAqB/C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,cAAc,CAI7E,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAAI,QAAQ,iBAAiB,KAAG,SAAS,iBAAiB,EAS1F,CAAC"}
@@ -0,0 +1,196 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import yaml from 'js-yaml';
3
+ import { getComponent, resolveComponent } from '../components/index.js';
4
+ import { DEFAULT_PROVIDER, DEFAULT_SCAFFOLDING_PATH, DEFAULT_SCAFFOLDING_REPOSITORY, DEFAULT_SCAFFOLDING_VERSION, generateEnvName, } from './defaults.js';
5
+ import { resolveEnvVars, resolveEnvVarsInRecord } from './resolve-env-vars.js';
6
+ /**
7
+ * Parses and validates the optional scaffolding section within tests.
8
+ */
9
+ export const parseScaffoldingConfig = (rawScaffolding) => {
10
+ if (typeof rawScaffolding !== 'object' || rawScaffolding === null || Array.isArray(rawScaffolding)) {
11
+ throw new Error('Configuration "tests.scaffolding" must be an object when provided.');
12
+ }
13
+ const record = rawScaffolding;
14
+ if (record['repository'] !== undefined && typeof record['repository'] !== 'string') {
15
+ throw new Error('Configuration "tests.scaffolding.repository" must be a string when provided.');
16
+ }
17
+ if (record['path'] !== undefined && typeof record['path'] !== 'string') {
18
+ throw new Error('Configuration "tests.scaffolding.path" must be a string when provided.');
19
+ }
20
+ if (record['version'] !== undefined && typeof record['version'] !== 'string') {
21
+ throw new Error('Configuration "tests.scaffolding.version" must be a string when provided.');
22
+ }
23
+ return {
24
+ repository: typeof record['repository'] === 'string' ? record['repository'] : DEFAULT_SCAFFOLDING_REPOSITORY,
25
+ path: typeof record['path'] === 'string' ? record['path'] : DEFAULT_SCAFFOLDING_PATH,
26
+ version: typeof record['version'] === 'string' ? record['version'] : DEFAULT_SCAFFOLDING_VERSION,
27
+ };
28
+ };
29
+ /**
30
+ * Parses and validates the optional tests section.
31
+ */
32
+ export const parseTestsConfig = (rawTests) => {
33
+ if (rawTests === undefined) {
34
+ return undefined;
35
+ }
36
+ if (typeof rawTests !== 'object' || rawTests === null || Array.isArray(rawTests)) {
37
+ throw new Error('Configuration "tests" field must be an object when provided.');
38
+ }
39
+ const testsRecord = rawTests;
40
+ const jahiaCypress = testsRecord['jahia-cypress'];
41
+ if (jahiaCypress !== undefined && typeof jahiaCypress !== 'string') {
42
+ throw new Error('Configuration "tests.jahia-cypress" must be a string when provided.');
43
+ }
44
+ const scaffolding = testsRecord['scaffolding'] !== undefined
45
+ ? parseScaffoldingConfig(testsRecord['scaffolding'])
46
+ : undefined;
47
+ return {
48
+ ...(jahiaCypress === undefined ? {} : { 'jahia-cypress': jahiaCypress }),
49
+ ...(scaffolding === undefined ? {} : { scaffolding }),
50
+ };
51
+ };
52
+ /**
53
+ * Resolves environment variable substitution in component overrides.
54
+ * Applies `${VAR}` and `${VAR:-default}` resolution to `image`, `tag`,
55
+ * and `env` values — the same env vars available in workflow `run:` steps.
56
+ */
57
+ export const resolveComponentOverrides = (rawOverrides) => {
58
+ const result = { ...rawOverrides };
59
+ if (typeof result['image'] === 'string') {
60
+ result['image'] = resolveEnvVars(result['image']);
61
+ }
62
+ if (typeof result['tag'] === 'string') {
63
+ result['tag'] = resolveEnvVars(result['tag']);
64
+ }
65
+ if (result['env'] !== undefined &&
66
+ typeof result['env'] === 'object' &&
67
+ result['env'] !== null &&
68
+ !Array.isArray(result['env'])) {
69
+ result['env'] = resolveEnvVarsInRecord(result['env']);
70
+ }
71
+ return result;
72
+ };
73
+ /**
74
+ * Validates and parses a raw environment section into a typed EnvironmentConfig.
75
+ * Throws descriptive errors for invalid configurations.
76
+ */
77
+ export const validateEnvironmentConfig = (raw) => {
78
+ const name = typeof raw.name === 'string' ? raw.name : generateEnvName();
79
+ const provider = typeof raw.provider === 'string' ? raw.provider : DEFAULT_PROVIDER;
80
+ if (!Array.isArray(raw.components) || raw.components.length === 0) {
81
+ throw new Error('Configuration "environment" must include at least one component in the "components" array.');
82
+ }
83
+ const components = raw.components.map((entry, index) => {
84
+ if (typeof entry === 'string') {
85
+ return { name: entry };
86
+ }
87
+ if (typeof entry === 'object' && entry !== null && 'name' in entry) {
88
+ const obj = entry;
89
+ if (typeof obj['name'] !== 'string') {
90
+ throw new Error(`Component at index ${String(index)} must have a string "name" field.`);
91
+ }
92
+ const rawOverrides = obj['overrides'];
93
+ const resolvedOverrides = rawOverrides !== undefined
94
+ ? resolveComponentOverrides(rawOverrides)
95
+ : undefined;
96
+ return {
97
+ name: obj['name'],
98
+ overrides: resolvedOverrides,
99
+ };
100
+ }
101
+ throw new Error(`Component at index ${String(index)} must be a string or an object with a "name" field.`);
102
+ });
103
+ return { name, provider, components };
104
+ };
105
+ /**
106
+ * Validates a single workflow step entry.
107
+ * Each step must have either `run` (shell command) or `uses` (CLI command), not both.
108
+ */
109
+ export const validateWorkflowStep = (raw, index) => {
110
+ if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) {
111
+ throw new Error(`Workflow step at index ${String(index)} must be an object.`);
112
+ }
113
+ const record = raw;
114
+ const name = typeof record['name'] === 'string' ? record['name'] : undefined;
115
+ const run = typeof record['run'] === 'string' ? record['run'] : undefined;
116
+ const uses = typeof record['uses'] === 'string' ? record['uses'] : undefined;
117
+ const workingDir = typeof record['working_dir'] === 'string' ? record['working_dir'] : undefined;
118
+ if (run === undefined && uses === undefined) {
119
+ throw new Error(`Workflow step at index ${String(index)} must have either "run" (shell command) or "uses" (CLI command).`);
120
+ }
121
+ if (run !== undefined && uses !== undefined) {
122
+ throw new Error(`Workflow step at index ${String(index)} must have either "run" or "uses", not both.`);
123
+ }
124
+ const withRecord = record['with'] !== undefined && typeof record['with'] === 'object' && record['with'] !== null && !Array.isArray(record['with'])
125
+ ? record['with']
126
+ : undefined;
127
+ return {
128
+ ...(name === undefined ? {} : { name }),
129
+ ...(run === undefined ? {} : { run }),
130
+ ...(uses === undefined ? {} : { uses }),
131
+ ...(withRecord === undefined ? {} : { with: withRecord }),
132
+ ...(workingDir === undefined ? {} : { working_dir: workingDir }),
133
+ };
134
+ };
135
+ /**
136
+ * Parses and validates the optional workflow section.
137
+ */
138
+ export const parseWorkflowConfig = (rawWorkflow) => {
139
+ if (rawWorkflow === undefined) {
140
+ return undefined;
141
+ }
142
+ if (typeof rawWorkflow !== 'object' || rawWorkflow === null || Array.isArray(rawWorkflow)) {
143
+ throw new Error('Configuration "workflow" field must be an object when provided.');
144
+ }
145
+ const record = rawWorkflow;
146
+ if (!Array.isArray(record['steps'])) {
147
+ throw new Error('Configuration "workflow" must include a "steps" array.');
148
+ }
149
+ if (record['steps'].length === 0) {
150
+ throw new Error('Configuration "workflow.steps" must contain at least one step.');
151
+ }
152
+ const steps = record['steps'].map((entry, index) => validateWorkflowStep(entry, index));
153
+ return { steps };
154
+ };
155
+ /**
156
+ * Validates and parses a raw YAML object into a typed JahiaCliConfig.
157
+ * All sections (environment, tests, workflow) are optional — commands validate
158
+ * the presence of the sections they need.
159
+ */
160
+ export const validateConfig = (raw) => {
161
+ const rawEnv = raw.environment !== undefined && typeof raw.environment === 'object' && raw.environment !== null
162
+ ? raw.environment
163
+ : undefined;
164
+ // Only validate environment if it has a non-empty components array.
165
+ // Commands that require environment will check for its presence themselves.
166
+ const environment = rawEnv !== undefined && Array.isArray(rawEnv.components) && rawEnv.components.length > 0
167
+ ? validateEnvironmentConfig(rawEnv)
168
+ : undefined;
169
+ const tests = parseTestsConfig(raw.tests);
170
+ const workflow = parseWorkflowConfig(raw.workflow);
171
+ return {
172
+ ...(environment === undefined ? {} : { environment }),
173
+ ...(tests === undefined ? {} : { tests }),
174
+ ...(workflow === undefined ? {} : { workflow }),
175
+ };
176
+ };
177
+ /**
178
+ * Loads and parses a YAML config file from disk.
179
+ */
180
+ export const loadConfigFile = async (filePath) => {
181
+ const content = await readFile(filePath, 'utf-8');
182
+ const raw = yaml.load(content);
183
+ return validateConfig(raw);
184
+ };
185
+ /**
186
+ * Resolves all components in a config to their full definitions with overrides applied.
187
+ * Throws if any component name is not found in the registry.
188
+ */
189
+ export const resolveConfigComponents = (config) => config.components.map((entry) => {
190
+ const definition = getComponent(entry.name);
191
+ if (!definition) {
192
+ throw new Error(`Unknown component "${entry.name}". Use "jahia-cli environment create --help" to see available components.`);
193
+ }
194
+ return resolveComponent(definition, entry.overrides);
195
+ });
196
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/lib/config/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Environment variable substitution for config values.
3
+ *
4
+ * Supports two patterns:
5
+ * - `${VAR}` — resolves to the value of VAR; throws if VAR is not set
6
+ * - `${VAR:-default}` — resolves to VAR if set, otherwise uses the default value
7
+ *
8
+ * This is consistent with bash variable expansion and with how the workflow
9
+ * engine passes environment variables to `run:` steps via `process.env`.
10
+ * All env vars come from the same source: the shell session's environment.
11
+ *
12
+ * Bare `$` characters and malformed patterns are left as-is.
13
+ */
14
+ /**
15
+ * Resolves `${VAR}` and `${VAR:-default}` patterns in a string
16
+ * using `process.env`.
17
+ *
18
+ * - `${VAR}` with no default throws if VAR is not defined in the environment.
19
+ * - `${VAR:-default}` falls back to `default` when VAR is not defined.
20
+ * - Patterns are resolved in a single pass (no nested resolution).
21
+ * - Bare `$` characters and malformed patterns are left unchanged.
22
+ */
23
+ export declare const resolveEnvVars: (value: string) => string;
24
+ /**
25
+ * Applies `resolveEnvVars` to every value in a string record.
26
+ * Returns a new record with all values resolved.
27
+ */
28
+ export declare const resolveEnvVarsInRecord: (record: Readonly<Record<string, string>>) => Readonly<Record<string, string>>;
29
+ //# sourceMappingURL=resolve-env-vars.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-env-vars.d.ts","sourceRoot":"","sources":["../../../src/lib/config/resolve-env-vars.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAUH;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,KAAG,MAiB3C,CAAC;AAEL;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GACjC,QAAQ,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KACvC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAG/B,CAAC"}