@salesforce/b2c-tooling-sdk 0.3.0 → 0.4.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 (350) hide show
  1. package/README.md +180 -13
  2. package/data/scaffolds/cartridge/files/.project.ejs +17 -0
  3. package/data/scaffolds/cartridge/files/cartridge/cartridge.properties.ejs +4 -0
  4. package/data/scaffolds/cartridge/files/cartridge/controllers/Example.js.ejs +19 -0
  5. package/data/scaffolds/cartridge/files/cartridge/models/example.js.ejs +14 -0
  6. package/data/scaffolds/cartridge/files/cartridge/scripts/helpers/exampleHelpers.js.ejs +18 -0
  7. package/data/scaffolds/cartridge/files/cartridge/static/default/css/example.css +6 -0
  8. package/data/scaffolds/cartridge/files/cartridge/templates/default/example/show.isml.ejs +11 -0
  9. package/data/scaffolds/cartridge/scaffold.json +88 -0
  10. package/data/scaffolds/controller/files/controller.js.ejs +134 -0
  11. package/data/scaffolds/controller/files/template.isml.ejs +22 -0
  12. package/data/scaffolds/controller/scaffold.json +64 -0
  13. package/data/scaffolds/custom-api/files/api.json.ejs +11 -0
  14. package/data/scaffolds/custom-api/files/schema.yaml.ejs +188 -0
  15. package/data/scaffolds/custom-api/files/script.js.ejs +95 -0
  16. package/data/scaffolds/custom-api/scaffold.json +65 -0
  17. package/data/scaffolds/hook/files/hook.js.ejs +99 -0
  18. package/data/scaffolds/hook/files/hooks-entry.json.ejs +6 -0
  19. package/data/scaffolds/hook/scaffold.json +60 -0
  20. package/data/scaffolds/job-step/files/step-chunk.js.ejs +136 -0
  21. package/data/scaffolds/job-step/files/step-task.js.ejs +47 -0
  22. package/data/scaffolds/job-step/files/steptypes-entry.json.ejs +41 -0
  23. package/data/scaffolds/job-step/scaffold.json +64 -0
  24. package/data/scaffolds/page-designer-component/files/component.isml.ejs +23 -0
  25. package/data/scaffolds/page-designer-component/files/component.js.ejs +35 -0
  26. package/data/scaffolds/page-designer-component/files/component.json.ejs +50 -0
  27. package/data/scaffolds/page-designer-component/scaffold.json +66 -0
  28. package/data/scaffolds/service/files/service-http.js.ejs +245 -0
  29. package/data/scaffolds/service/files/service-sftp.js.ejs +371 -0
  30. package/data/scaffolds/service/files/service-soap.js.ejs +230 -0
  31. package/data/scaffolds/service/scaffold.json +83 -0
  32. package/data/script-api/dw.extensions.payments.SalesforcePaymentsMgr.md +48 -0
  33. package/data/script-api/dw.system.Request.md +5 -0
  34. package/data/script-api/dw.web.Cookie.md +108 -31
  35. package/data/script-api/index.json +2 -2
  36. package/data/script-api/index.md +1 -1
  37. package/dist/cjs/auth/oauth-implicit.d.ts +1 -0
  38. package/dist/cjs/auth/oauth-implicit.js +8 -3
  39. package/dist/cjs/auth/oauth-implicit.js.map +1 -1
  40. package/dist/cjs/auth/oauth.d.ts +1 -0
  41. package/dist/cjs/auth/oauth.js +8 -3
  42. package/dist/cjs/auth/oauth.js.map +1 -1
  43. package/dist/cjs/auth/types.d.ts +5 -0
  44. package/dist/cjs/auth/types.js.map +1 -1
  45. package/dist/cjs/cli/am-command.d.ts +74 -0
  46. package/dist/cjs/cli/am-command.js +189 -0
  47. package/dist/cjs/cli/am-command.js.map +1 -0
  48. package/dist/cjs/cli/base-command.d.ts +38 -0
  49. package/dist/cjs/cli/base-command.js +142 -0
  50. package/dist/cjs/cli/base-command.js.map +1 -1
  51. package/dist/cjs/cli/config.d.ts +9 -0
  52. package/dist/cjs/cli/config.js +19 -2
  53. package/dist/cjs/cli/config.js.map +1 -1
  54. package/dist/cjs/cli/index.d.ts +1 -0
  55. package/dist/cjs/cli/index.js +1 -0
  56. package/dist/cjs/cli/index.js.map +1 -1
  57. package/dist/cjs/cli/instance-command.d.ts +1 -0
  58. package/dist/cjs/cli/oauth-command.d.ts +21 -1
  59. package/dist/cjs/cli/oauth-command.js +52 -7
  60. package/dist/cjs/cli/oauth-command.js.map +1 -1
  61. package/dist/cjs/cli/ods-command.d.ts +5 -1
  62. package/dist/cjs/cli/ods-command.js +10 -4
  63. package/dist/cjs/cli/ods-command.js.map +1 -1
  64. package/dist/cjs/cli/webdav-command.d.ts +1 -0
  65. package/dist/cjs/clients/am-api.d.ts +491 -0
  66. package/dist/cjs/clients/am-api.js +944 -0
  67. package/dist/cjs/clients/am-api.js.map +1 -0
  68. package/dist/cjs/clients/am-apiclients-api.generated.d.ts +803 -0
  69. package/dist/cjs/clients/am-apiclients-api.generated.js +6 -0
  70. package/dist/cjs/clients/am-apiclients-api.generated.js.map +1 -0
  71. package/dist/cjs/clients/am-roles-api.generated.d.ts +298 -0
  72. package/dist/cjs/clients/am-roles-api.generated.js +6 -0
  73. package/dist/cjs/clients/am-roles-api.generated.js.map +1 -0
  74. package/dist/cjs/clients/am-users-api.generated.d.ts +891 -0
  75. package/dist/cjs/clients/am-users-api.generated.js +6 -0
  76. package/dist/cjs/clients/am-users-api.generated.js.map +1 -0
  77. package/dist/cjs/clients/index.d.ts +4 -2
  78. package/dist/cjs/clients/index.js +2 -1
  79. package/dist/cjs/clients/index.js.map +1 -1
  80. package/dist/cjs/clients/middleware-registry.d.ts +1 -1
  81. package/dist/cjs/clients/middleware-registry.js.map +1 -1
  82. package/dist/cjs/clients/middleware.d.ts +49 -2
  83. package/dist/cjs/clients/middleware.js +214 -2
  84. package/dist/cjs/clients/middleware.js.map +1 -1
  85. package/dist/cjs/clients/mrt.js +5 -1
  86. package/dist/cjs/clients/mrt.js.map +1 -1
  87. package/dist/cjs/config/dw-json.d.ts +104 -33
  88. package/dist/cjs/config/dw-json.js +167 -2
  89. package/dist/cjs/config/dw-json.js.map +1 -1
  90. package/dist/cjs/config/index.d.ts +6 -4
  91. package/dist/cjs/config/index.js +6 -2
  92. package/dist/cjs/config/index.js.map +1 -1
  93. package/dist/cjs/config/instance-manager.d.ts +97 -0
  94. package/dist/cjs/config/instance-manager.js +166 -0
  95. package/dist/cjs/config/instance-manager.js.map +1 -0
  96. package/dist/cjs/config/mapping.d.ts +63 -5
  97. package/dist/cjs/config/mapping.js +165 -20
  98. package/dist/cjs/config/mapping.js.map +1 -1
  99. package/dist/cjs/config/sources/dw-json-source.d.ts +17 -1
  100. package/dist/cjs/config/sources/dw-json-source.js +70 -3
  101. package/dist/cjs/config/sources/dw-json-source.js.map +1 -1
  102. package/dist/cjs/config/sources/package-json-source.js +6 -3
  103. package/dist/cjs/config/sources/package-json-source.js.map +1 -1
  104. package/dist/cjs/config/types.d.ts +72 -0
  105. package/dist/cjs/defaults.d.ts +6 -0
  106. package/dist/cjs/defaults.js +6 -0
  107. package/dist/cjs/defaults.js.map +1 -1
  108. package/dist/cjs/i18n/index.js +3 -0
  109. package/dist/cjs/i18n/index.js.map +1 -1
  110. package/dist/cjs/index.d.ts +8 -4
  111. package/dist/cjs/index.js +9 -3
  112. package/dist/cjs/index.js.map +1 -1
  113. package/dist/cjs/logging/logger.js +13 -1
  114. package/dist/cjs/logging/logger.js.map +1 -1
  115. package/dist/cjs/operations/content/asset-query.d.ts +22 -0
  116. package/dist/cjs/operations/content/asset-query.js +77 -0
  117. package/dist/cjs/operations/content/asset-query.js.map +1 -0
  118. package/dist/cjs/operations/content/export.d.ts +57 -0
  119. package/dist/cjs/operations/content/export.js +224 -0
  120. package/dist/cjs/operations/content/export.js.map +1 -0
  121. package/dist/cjs/operations/content/index.d.ts +43 -0
  122. package/dist/cjs/operations/content/index.js +48 -0
  123. package/dist/cjs/operations/content/index.js.map +1 -0
  124. package/dist/cjs/operations/content/library.d.ts +137 -0
  125. package/dist/cjs/operations/content/library.js +392 -0
  126. package/dist/cjs/operations/content/library.js.map +1 -0
  127. package/dist/cjs/operations/content/types.d.ts +144 -0
  128. package/dist/cjs/operations/content/types.js +7 -0
  129. package/dist/cjs/operations/content/types.js.map +1 -0
  130. package/dist/cjs/operations/mrt/b2c-config.js +19 -4
  131. package/dist/cjs/operations/mrt/b2c-config.js.map +1 -1
  132. package/dist/cjs/operations/mrt/index.d.ts +2 -0
  133. package/dist/cjs/operations/mrt/index.js +2 -0
  134. package/dist/cjs/operations/mrt/index.js.map +1 -1
  135. package/dist/cjs/operations/mrt/tail-logs.d.ts +130 -0
  136. package/dist/cjs/operations/mrt/tail-logs.js +223 -0
  137. package/dist/cjs/operations/mrt/tail-logs.js.map +1 -0
  138. package/dist/cjs/operations/ods/index.d.ts +2 -0
  139. package/dist/cjs/operations/ods/index.js +1 -0
  140. package/dist/cjs/operations/ods/index.js.map +1 -1
  141. package/dist/cjs/operations/ods/wait-for-sandbox.d.ts +64 -0
  142. package/dist/cjs/operations/ods/wait-for-sandbox.js +114 -0
  143. package/dist/cjs/operations/ods/wait-for-sandbox.js.map +1 -0
  144. package/dist/cjs/operations/orgs/index.d.ts +74 -0
  145. package/dist/cjs/operations/orgs/index.js +33 -0
  146. package/dist/cjs/operations/orgs/index.js.map +1 -0
  147. package/dist/cjs/operations/roles/index.d.ts +43 -0
  148. package/dist/cjs/operations/roles/index.js +48 -0
  149. package/dist/cjs/operations/roles/index.js.map +1 -0
  150. package/dist/cjs/operations/users/index.d.ts +143 -0
  151. package/dist/cjs/operations/users/index.js +141 -0
  152. package/dist/cjs/operations/users/index.js.map +1 -0
  153. package/dist/cjs/scaffold/engine.d.ts +68 -0
  154. package/dist/cjs/scaffold/engine.js +149 -0
  155. package/dist/cjs/scaffold/engine.js.map +1 -0
  156. package/dist/cjs/scaffold/executor.d.ts +36 -0
  157. package/dist/cjs/scaffold/executor.js +285 -0
  158. package/dist/cjs/scaffold/executor.js.map +1 -0
  159. package/dist/cjs/scaffold/index.d.ts +74 -0
  160. package/dist/cjs/scaffold/index.js +23 -0
  161. package/dist/cjs/scaffold/index.js.map +1 -0
  162. package/dist/cjs/scaffold/merge.d.ts +56 -0
  163. package/dist/cjs/scaffold/merge.js +183 -0
  164. package/dist/cjs/scaffold/merge.js.map +1 -0
  165. package/dist/cjs/scaffold/parameter-resolver.d.ts +86 -0
  166. package/dist/cjs/scaffold/parameter-resolver.js +179 -0
  167. package/dist/cjs/scaffold/parameter-resolver.js.map +1 -0
  168. package/dist/cjs/scaffold/registry.d.ts +45 -0
  169. package/dist/cjs/scaffold/registry.js +219 -0
  170. package/dist/cjs/scaffold/registry.js.map +1 -0
  171. package/dist/cjs/scaffold/sources.d.ts +45 -0
  172. package/dist/cjs/scaffold/sources.js +113 -0
  173. package/dist/cjs/scaffold/sources.js.map +1 -0
  174. package/dist/cjs/scaffold/types.d.ts +280 -0
  175. package/dist/cjs/scaffold/types.js +14 -0
  176. package/dist/cjs/scaffold/types.js.map +1 -0
  177. package/dist/cjs/scaffold/validation.d.ts +81 -0
  178. package/dist/cjs/scaffold/validation.js +250 -0
  179. package/dist/cjs/scaffold/validation.js.map +1 -0
  180. package/dist/cjs/scaffold/validators.d.ts +33 -0
  181. package/dist/cjs/scaffold/validators.js +334 -0
  182. package/dist/cjs/scaffold/validators.js.map +1 -0
  183. package/dist/cjs/telemetry/index.d.ts +26 -0
  184. package/dist/cjs/telemetry/index.js +32 -0
  185. package/dist/cjs/telemetry/index.js.map +1 -0
  186. package/dist/cjs/telemetry/telemetry.d.ts +90 -0
  187. package/dist/cjs/telemetry/telemetry.js +283 -0
  188. package/dist/cjs/telemetry/telemetry.js.map +1 -0
  189. package/dist/cjs/telemetry/types.d.ts +62 -0
  190. package/dist/cjs/telemetry/types.js +7 -0
  191. package/dist/cjs/telemetry/types.js.map +1 -0
  192. package/dist/esm/auth/oauth-implicit.d.ts +1 -0
  193. package/dist/esm/auth/oauth-implicit.js +8 -3
  194. package/dist/esm/auth/oauth-implicit.js.map +1 -1
  195. package/dist/esm/auth/oauth.d.ts +1 -0
  196. package/dist/esm/auth/oauth.js +8 -3
  197. package/dist/esm/auth/oauth.js.map +1 -1
  198. package/dist/esm/auth/types.d.ts +5 -0
  199. package/dist/esm/auth/types.js.map +1 -1
  200. package/dist/esm/cli/am-command.d.ts +74 -0
  201. package/dist/esm/cli/am-command.js +196 -0
  202. package/dist/esm/cli/am-command.js.map +1 -0
  203. package/dist/esm/cli/base-command.d.ts +38 -0
  204. package/dist/esm/cli/base-command.js +142 -0
  205. package/dist/esm/cli/base-command.js.map +1 -1
  206. package/dist/esm/cli/config.d.ts +9 -0
  207. package/dist/esm/cli/config.js +19 -2
  208. package/dist/esm/cli/config.js.map +1 -1
  209. package/dist/esm/cli/index.d.ts +1 -0
  210. package/dist/esm/cli/index.js +1 -0
  211. package/dist/esm/cli/index.js.map +1 -1
  212. package/dist/esm/cli/instance-command.d.ts +1 -0
  213. package/dist/esm/cli/oauth-command.d.ts +21 -1
  214. package/dist/esm/cli/oauth-command.js +52 -7
  215. package/dist/esm/cli/oauth-command.js.map +1 -1
  216. package/dist/esm/cli/ods-command.d.ts +5 -1
  217. package/dist/esm/cli/ods-command.js +10 -4
  218. package/dist/esm/cli/ods-command.js.map +1 -1
  219. package/dist/esm/cli/webdav-command.d.ts +1 -0
  220. package/dist/esm/clients/am-api.d.ts +491 -0
  221. package/dist/esm/clients/am-api.js +944 -0
  222. package/dist/esm/clients/am-api.js.map +1 -0
  223. package/dist/esm/clients/am-apiclients-api.generated.d.ts +803 -0
  224. package/dist/esm/clients/am-apiclients-api.generated.js +6 -0
  225. package/dist/esm/clients/am-apiclients-api.generated.js.map +1 -0
  226. package/dist/esm/clients/am-roles-api.generated.d.ts +298 -0
  227. package/dist/esm/clients/am-roles-api.generated.js +6 -0
  228. package/dist/esm/clients/am-roles-api.generated.js.map +1 -0
  229. package/dist/esm/clients/am-users-api.generated.d.ts +891 -0
  230. package/dist/esm/clients/am-users-api.generated.js +6 -0
  231. package/dist/esm/clients/am-users-api.generated.js.map +1 -0
  232. package/dist/esm/clients/index.d.ts +4 -2
  233. package/dist/esm/clients/index.js +2 -1
  234. package/dist/esm/clients/index.js.map +1 -1
  235. package/dist/esm/clients/middleware-registry.d.ts +1 -1
  236. package/dist/esm/clients/middleware-registry.js.map +1 -1
  237. package/dist/esm/clients/middleware.d.ts +49 -2
  238. package/dist/esm/clients/middleware.js +214 -2
  239. package/dist/esm/clients/middleware.js.map +1 -1
  240. package/dist/esm/clients/mrt.js +5 -1
  241. package/dist/esm/clients/mrt.js.map +1 -1
  242. package/dist/esm/config/dw-json.d.ts +104 -33
  243. package/dist/esm/config/dw-json.js +167 -2
  244. package/dist/esm/config/dw-json.js.map +1 -1
  245. package/dist/esm/config/index.d.ts +6 -4
  246. package/dist/esm/config/index.js +6 -2
  247. package/dist/esm/config/index.js.map +1 -1
  248. package/dist/esm/config/instance-manager.d.ts +97 -0
  249. package/dist/esm/config/instance-manager.js +166 -0
  250. package/dist/esm/config/instance-manager.js.map +1 -0
  251. package/dist/esm/config/mapping.d.ts +63 -5
  252. package/dist/esm/config/mapping.js +165 -20
  253. package/dist/esm/config/mapping.js.map +1 -1
  254. package/dist/esm/config/sources/dw-json-source.d.ts +17 -1
  255. package/dist/esm/config/sources/dw-json-source.js +70 -3
  256. package/dist/esm/config/sources/dw-json-source.js.map +1 -1
  257. package/dist/esm/config/sources/package-json-source.js +6 -3
  258. package/dist/esm/config/sources/package-json-source.js.map +1 -1
  259. package/dist/esm/config/types.d.ts +72 -0
  260. package/dist/esm/defaults.d.ts +6 -0
  261. package/dist/esm/defaults.js +6 -0
  262. package/dist/esm/defaults.js.map +1 -1
  263. package/dist/esm/i18n/index.js +3 -0
  264. package/dist/esm/i18n/index.js.map +1 -1
  265. package/dist/esm/index.d.ts +8 -4
  266. package/dist/esm/index.js +9 -3
  267. package/dist/esm/index.js.map +1 -1
  268. package/dist/esm/logging/logger.js +13 -1
  269. package/dist/esm/logging/logger.js.map +1 -1
  270. package/dist/esm/operations/content/asset-query.d.ts +22 -0
  271. package/dist/esm/operations/content/asset-query.js +77 -0
  272. package/dist/esm/operations/content/asset-query.js.map +1 -0
  273. package/dist/esm/operations/content/export.d.ts +57 -0
  274. package/dist/esm/operations/content/export.js +224 -0
  275. package/dist/esm/operations/content/export.js.map +1 -0
  276. package/dist/esm/operations/content/index.d.ts +43 -0
  277. package/dist/esm/operations/content/index.js +48 -0
  278. package/dist/esm/operations/content/index.js.map +1 -0
  279. package/dist/esm/operations/content/library.d.ts +137 -0
  280. package/dist/esm/operations/content/library.js +392 -0
  281. package/dist/esm/operations/content/library.js.map +1 -0
  282. package/dist/esm/operations/content/types.d.ts +144 -0
  283. package/dist/esm/operations/content/types.js +7 -0
  284. package/dist/esm/operations/content/types.js.map +1 -0
  285. package/dist/esm/operations/mrt/b2c-config.js +19 -4
  286. package/dist/esm/operations/mrt/b2c-config.js.map +1 -1
  287. package/dist/esm/operations/mrt/index.d.ts +2 -0
  288. package/dist/esm/operations/mrt/index.js +2 -0
  289. package/dist/esm/operations/mrt/index.js.map +1 -1
  290. package/dist/esm/operations/mrt/tail-logs.d.ts +130 -0
  291. package/dist/esm/operations/mrt/tail-logs.js +223 -0
  292. package/dist/esm/operations/mrt/tail-logs.js.map +1 -0
  293. package/dist/esm/operations/ods/index.d.ts +2 -0
  294. package/dist/esm/operations/ods/index.js +1 -0
  295. package/dist/esm/operations/ods/index.js.map +1 -1
  296. package/dist/esm/operations/ods/wait-for-sandbox.d.ts +64 -0
  297. package/dist/esm/operations/ods/wait-for-sandbox.js +114 -0
  298. package/dist/esm/operations/ods/wait-for-sandbox.js.map +1 -0
  299. package/dist/esm/operations/orgs/index.d.ts +74 -0
  300. package/dist/esm/operations/orgs/index.js +33 -0
  301. package/dist/esm/operations/orgs/index.js.map +1 -0
  302. package/dist/esm/operations/roles/index.d.ts +43 -0
  303. package/dist/esm/operations/roles/index.js +48 -0
  304. package/dist/esm/operations/roles/index.js.map +1 -0
  305. package/dist/esm/operations/users/index.d.ts +143 -0
  306. package/dist/esm/operations/users/index.js +141 -0
  307. package/dist/esm/operations/users/index.js.map +1 -0
  308. package/dist/esm/scaffold/engine.d.ts +68 -0
  309. package/dist/esm/scaffold/engine.js +149 -0
  310. package/dist/esm/scaffold/engine.js.map +1 -0
  311. package/dist/esm/scaffold/executor.d.ts +36 -0
  312. package/dist/esm/scaffold/executor.js +285 -0
  313. package/dist/esm/scaffold/executor.js.map +1 -0
  314. package/dist/esm/scaffold/index.d.ts +74 -0
  315. package/dist/esm/scaffold/index.js +23 -0
  316. package/dist/esm/scaffold/index.js.map +1 -0
  317. package/dist/esm/scaffold/merge.d.ts +56 -0
  318. package/dist/esm/scaffold/merge.js +183 -0
  319. package/dist/esm/scaffold/merge.js.map +1 -0
  320. package/dist/esm/scaffold/parameter-resolver.d.ts +86 -0
  321. package/dist/esm/scaffold/parameter-resolver.js +179 -0
  322. package/dist/esm/scaffold/parameter-resolver.js.map +1 -0
  323. package/dist/esm/scaffold/registry.d.ts +45 -0
  324. package/dist/esm/scaffold/registry.js +219 -0
  325. package/dist/esm/scaffold/registry.js.map +1 -0
  326. package/dist/esm/scaffold/sources.d.ts +45 -0
  327. package/dist/esm/scaffold/sources.js +113 -0
  328. package/dist/esm/scaffold/sources.js.map +1 -0
  329. package/dist/esm/scaffold/types.d.ts +280 -0
  330. package/dist/esm/scaffold/types.js +14 -0
  331. package/dist/esm/scaffold/types.js.map +1 -0
  332. package/dist/esm/scaffold/validation.d.ts +81 -0
  333. package/dist/esm/scaffold/validation.js +250 -0
  334. package/dist/esm/scaffold/validation.js.map +1 -0
  335. package/dist/esm/scaffold/validators.d.ts +33 -0
  336. package/dist/esm/scaffold/validators.js +334 -0
  337. package/dist/esm/scaffold/validators.js.map +1 -0
  338. package/dist/esm/telemetry/index.d.ts +26 -0
  339. package/dist/esm/telemetry/index.js +32 -0
  340. package/dist/esm/telemetry/index.js.map +1 -0
  341. package/dist/esm/telemetry/telemetry.d.ts +90 -0
  342. package/dist/esm/telemetry/telemetry.js +283 -0
  343. package/dist/esm/telemetry/telemetry.js.map +1 -0
  344. package/dist/esm/telemetry/types.d.ts +62 -0
  345. package/dist/esm/telemetry/types.js +7 -0
  346. package/dist/esm/telemetry/types.js.map +1 -0
  347. package/package.json +86 -17
  348. package/specs/am-apiclients-api-v1.yaml +965 -0
  349. package/specs/am-roles-api-v1.yaml +316 -0
  350. package/specs/am-users-api-v1.yaml +1102 -0
@@ -0,0 +1,219 @@
1
+ /*
2
+ * Copyright (c) 2025, Salesforce, Inc.
3
+ * SPDX-License-Identifier: Apache-2
4
+ * For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
5
+ */
6
+ import fs from 'node:fs/promises';
7
+ import path from 'node:path';
8
+ import os from 'node:os';
9
+ import { glob } from 'glob';
10
+ import { SCAFFOLDS_DATA_DIR } from './types.js';
11
+ import { validateScaffoldManifest } from './validators.js';
12
+ import { getLogger } from '../logging/logger.js';
13
+ /**
14
+ * Load a scaffold manifest from a directory
15
+ * @param scaffoldDir - Path to the scaffold directory
16
+ * @param source - Source type for this scaffold
17
+ * @returns Scaffold object or null if invalid
18
+ */
19
+ async function loadScaffold(scaffoldDir, source) {
20
+ const manifestPath = path.join(scaffoldDir, 'scaffold.json');
21
+ try {
22
+ const manifestContent = await fs.readFile(manifestPath, 'utf-8');
23
+ const manifest = JSON.parse(manifestContent);
24
+ // Validate manifest
25
+ const errors = validateScaffoldManifest(manifest);
26
+ if (errors.length > 0) {
27
+ const logger = getLogger();
28
+ logger.warn({ manifestPath, errors }, 'Invalid scaffold manifest');
29
+ return null;
30
+ }
31
+ const filesPath = path.join(scaffoldDir, 'files');
32
+ // Check if files directory exists
33
+ try {
34
+ await fs.access(filesPath);
35
+ }
36
+ catch {
37
+ const logger = getLogger();
38
+ logger.warn({ scaffoldDir }, 'Scaffold has no files/ directory');
39
+ return null;
40
+ }
41
+ return {
42
+ id: manifest.name,
43
+ manifest,
44
+ path: scaffoldDir,
45
+ filesPath,
46
+ source,
47
+ };
48
+ }
49
+ catch {
50
+ // Manifest doesn't exist or is invalid JSON
51
+ return null;
52
+ }
53
+ }
54
+ /**
55
+ * Discover scaffolds from a directory
56
+ * @param baseDir - Base directory to search
57
+ * @param source - Source type for scaffolds found here
58
+ * @returns Array of discovered scaffolds
59
+ */
60
+ async function discoverScaffoldsFromDir(baseDir, source) {
61
+ const scaffolds = [];
62
+ try {
63
+ await fs.access(baseDir);
64
+ }
65
+ catch {
66
+ // Directory doesn't exist
67
+ return scaffolds;
68
+ }
69
+ // Find all scaffold.json files
70
+ const manifestPaths = await glob('*/scaffold.json', {
71
+ cwd: baseDir,
72
+ absolute: false,
73
+ });
74
+ for (const manifestPath of manifestPaths) {
75
+ const scaffoldDir = path.join(baseDir, path.dirname(manifestPath));
76
+ const scaffold = await loadScaffold(scaffoldDir, source);
77
+ if (scaffold) {
78
+ scaffolds.push(scaffold);
79
+ }
80
+ }
81
+ return scaffolds;
82
+ }
83
+ /**
84
+ * Filter scaffolds based on discovery options
85
+ */
86
+ function filterScaffolds(scaffolds, options) {
87
+ let filtered = scaffolds;
88
+ // Filter by category
89
+ if (options.category) {
90
+ filtered = filtered.filter((s) => s.manifest.category === options.category);
91
+ }
92
+ // Filter by source
93
+ if (options.sources && options.sources.length > 0) {
94
+ filtered = filtered.filter((s) => options.sources.includes(s.source));
95
+ }
96
+ // Filter by search query
97
+ if (options.query) {
98
+ const query = options.query.toLowerCase();
99
+ filtered = filtered.filter((s) => {
100
+ const searchText = [s.manifest.name, s.manifest.displayName, s.manifest.description].join(' ').toLowerCase();
101
+ return searchText.includes(query);
102
+ });
103
+ }
104
+ return filtered;
105
+ }
106
+ /**
107
+ * Scaffold registry for discovering and managing scaffolds
108
+ */
109
+ export class ScaffoldRegistry {
110
+ providers = [];
111
+ transformers = [];
112
+ scaffoldCache = new Map();
113
+ /**
114
+ * Add scaffold providers
115
+ */
116
+ addProviders(providers) {
117
+ this.providers.push(...providers);
118
+ this.clearCache();
119
+ }
120
+ /**
121
+ * Add scaffold transformers
122
+ */
123
+ addTransformers(transformers) {
124
+ this.transformers.push(...transformers);
125
+ this.clearCache();
126
+ }
127
+ /**
128
+ * Clear the scaffold cache
129
+ */
130
+ clearCache() {
131
+ this.scaffoldCache.clear();
132
+ }
133
+ /**
134
+ * Get all scaffolds from all sources
135
+ * @param options - Discovery options
136
+ * @returns Array of scaffolds (deduplicated by name, later sources override earlier)
137
+ */
138
+ async getScaffolds(options = {}) {
139
+ const cacheKey = JSON.stringify(options);
140
+ if (this.scaffoldCache.has(cacheKey)) {
141
+ return this.scaffoldCache.get(cacheKey);
142
+ }
143
+ // Collect scaffolds from all sources in priority order
144
+ const allScaffolds = [];
145
+ // 1. Run 'before' providers
146
+ const beforeProviders = this.providers.filter((p) => p.priority === 'before');
147
+ for (const provider of beforeProviders) {
148
+ const providerScaffolds = await provider.getScaffolds(options);
149
+ allScaffolds.push(...providerScaffolds);
150
+ }
151
+ // 2. Built-in scaffolds (lowest priority for built-ins)
152
+ const builtInScaffolds = await discoverScaffoldsFromDir(SCAFFOLDS_DATA_DIR, 'built-in');
153
+ allScaffolds.push(...builtInScaffolds);
154
+ // 3. User scaffolds (~/.b2c/scaffolds/)
155
+ const userScaffoldsDir = path.join(os.homedir(), '.b2c', 'scaffolds');
156
+ const userScaffolds = await discoverScaffoldsFromDir(userScaffoldsDir, 'user');
157
+ allScaffolds.push(...userScaffolds);
158
+ // 4. Project scaffolds (.b2c/scaffolds/) - highest priority
159
+ if (options.projectRoot) {
160
+ const projectScaffoldsDir = path.join(options.projectRoot, '.b2c', 'scaffolds');
161
+ const projectScaffolds = await discoverScaffoldsFromDir(projectScaffoldsDir, 'project');
162
+ allScaffolds.push(...projectScaffolds);
163
+ }
164
+ // 5. Run 'after' providers
165
+ const afterProviders = this.providers.filter((p) => p.priority === 'after');
166
+ for (const provider of afterProviders) {
167
+ const providerScaffolds = await provider.getScaffolds(options);
168
+ allScaffolds.push(...providerScaffolds);
169
+ }
170
+ // Deduplicate by ID (later sources override earlier)
171
+ const scaffoldMap = new Map();
172
+ for (const scaffold of allScaffolds) {
173
+ scaffoldMap.set(scaffold.id, scaffold);
174
+ }
175
+ let scaffolds = Array.from(scaffoldMap.values());
176
+ // Apply transformers
177
+ for (const transformer of this.transformers) {
178
+ scaffolds = await Promise.all(scaffolds.map((s) => transformer.transform(s, {
179
+ outputDir: process.cwd(),
180
+ variables: {},
181
+ dryRun: false,
182
+ force: false,
183
+ interactive: false,
184
+ })));
185
+ }
186
+ // Apply filters
187
+ scaffolds = filterScaffolds(scaffolds, options);
188
+ // Sort by name
189
+ scaffolds.sort((a, b) => a.id.localeCompare(b.id));
190
+ this.scaffoldCache.set(cacheKey, scaffolds);
191
+ return scaffolds;
192
+ }
193
+ /**
194
+ * Get a specific scaffold by ID
195
+ * @param id - Scaffold ID
196
+ * @param options - Discovery options
197
+ * @returns Scaffold or null if not found
198
+ */
199
+ async getScaffold(id, options = {}) {
200
+ const scaffolds = await this.getScaffolds(options);
201
+ return scaffolds.find((s) => s.id === id) || null;
202
+ }
203
+ /**
204
+ * Search scaffolds by query
205
+ * @param query - Search query
206
+ * @param options - Additional discovery options
207
+ * @returns Matching scaffolds
208
+ */
209
+ async searchScaffolds(query, options = {}) {
210
+ return this.getScaffolds({ ...options, query });
211
+ }
212
+ }
213
+ /**
214
+ * Create a new scaffold registry instance
215
+ */
216
+ export function createScaffoldRegistry() {
217
+ return new ScaffoldRegistry();
218
+ }
219
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/scaffold/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { B2CInstance } from '../instance/index.js';
2
+ import type { ScaffoldChoice, DynamicParameterSource, SourceResult } from './types.js';
3
+ /**
4
+ * Common B2C Commerce hook extension points.
5
+ */
6
+ export declare const HOOK_POINTS: ScaffoldChoice[];
7
+ /**
8
+ * Resolve a local (non-remote) parameter source.
9
+ * Does not require authentication.
10
+ *
11
+ * @param source - The source type to resolve
12
+ * @param projectRoot - Project root directory for cartridge discovery
13
+ * @returns Resolved choices and optional path mapping
14
+ */
15
+ export declare function resolveLocalSource(source: DynamicParameterSource, projectRoot: string): SourceResult;
16
+ /**
17
+ * Resolve a remote parameter source.
18
+ * Requires authenticated B2CInstance (follows SDK operation pattern).
19
+ *
20
+ * @param source - The source type
21
+ * @param instance - Authenticated B2C instance
22
+ * @returns Promise resolving to choices array
23
+ * @throws Error if API call fails
24
+ */
25
+ export declare function resolveRemoteSource(source: DynamicParameterSource, instance: B2CInstance): Promise<ScaffoldChoice[]>;
26
+ /**
27
+ * Check if a source requires remote API access.
28
+ *
29
+ * @param source - The source type to check
30
+ * @returns True if the source requires remote access
31
+ */
32
+ export declare function isRemoteSource(source: DynamicParameterSource): boolean;
33
+ /**
34
+ * Validate a value against a dynamic source (local only).
35
+ * Used for non-interactive validation of provided values.
36
+ *
37
+ * @param source - The source type
38
+ * @param value - The value to validate
39
+ * @param projectRoot - Project root for local sources
40
+ * @returns Object with valid status and available choices if invalid
41
+ */
42
+ export declare function validateAgainstSource(source: DynamicParameterSource, value: string, projectRoot: string): {
43
+ valid: boolean;
44
+ availableChoices?: string[];
45
+ };
@@ -0,0 +1,113 @@
1
+ /*
2
+ * Copyright (c) 2025, Salesforce, Inc.
3
+ * SPDX-License-Identifier: Apache-2
4
+ * For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
5
+ */
6
+ import { findCartridges } from '../operations/code/cartridges.js';
7
+ /**
8
+ * Common B2C Commerce hook extension points.
9
+ */
10
+ export const HOOK_POINTS = [
11
+ { value: 'dw.order.calculate', label: 'Order Calculate' },
12
+ { value: 'dw.order.calculateShipping', label: 'Calculate Shipping' },
13
+ { value: 'dw.order.createOrder', label: 'Create Order' },
14
+ { value: 'dw.order.afterPOST', label: 'OCAPI Order afterPOST' },
15
+ { value: 'dw.order.beforePOST', label: 'OCAPI Order beforePOST' },
16
+ { value: 'dw.ocapi.shop.basket.afterPOST', label: 'OCAPI Basket afterPOST' },
17
+ { value: 'dw.ocapi.shop.basket.modifyGETResponse', label: 'OCAPI Basket modifyGET' },
18
+ { value: 'dw.ocapi.shop.order.afterPOST', label: 'OCAPI Shop Order afterPOST' },
19
+ { value: 'dw.ocapi.shop.order.beforePOST', label: 'OCAPI Shop Order beforePOST' },
20
+ { value: 'dw.ocapi.data.order.afterPATCH', label: 'OCAPI Data Order afterPATCH' },
21
+ { value: 'dw.customer.registration', label: 'Customer Registration' },
22
+ { value: 'dw.customer.afterCreate', label: 'Customer afterCreate' },
23
+ { value: 'app.payment.processor', label: 'Payment Processor' },
24
+ { value: 'app.payment.form.processor', label: 'Payment Form Processor' },
25
+ { value: 'dw.system.request.onSession', label: 'On Session' },
26
+ { value: 'dw.extensions.csv.onFileProcess', label: 'CSV File Process' },
27
+ ];
28
+ /**
29
+ * Resolve a local (non-remote) parameter source.
30
+ * Does not require authentication.
31
+ *
32
+ * @param source - The source type to resolve
33
+ * @param projectRoot - Project root directory for cartridge discovery
34
+ * @returns Resolved choices and optional path mapping
35
+ */
36
+ export function resolveLocalSource(source, projectRoot) {
37
+ switch (source) {
38
+ case 'cartridges': {
39
+ const cartridges = findCartridges(projectRoot);
40
+ const pathMap = new Map(cartridges.map((c) => [c.name, c.src]));
41
+ return {
42
+ choices: cartridges.map((c) => ({ value: c.name, label: c.name })),
43
+ pathMap,
44
+ };
45
+ }
46
+ case 'hook-points': {
47
+ return { choices: HOOK_POINTS };
48
+ }
49
+ default: {
50
+ return { choices: [] };
51
+ }
52
+ }
53
+ }
54
+ /**
55
+ * Resolve a remote parameter source.
56
+ * Requires authenticated B2CInstance (follows SDK operation pattern).
57
+ *
58
+ * @param source - The source type
59
+ * @param instance - Authenticated B2C instance
60
+ * @returns Promise resolving to choices array
61
+ * @throws Error if API call fails
62
+ */
63
+ export async function resolveRemoteSource(source, instance) {
64
+ switch (source) {
65
+ case 'sites': {
66
+ const { data, error } = await instance.ocapi.GET('/sites', {
67
+ params: { query: { select: '(**)' } },
68
+ });
69
+ if (error) {
70
+ throw new Error('Failed to fetch sites from B2C instance');
71
+ }
72
+ const sites = data;
73
+ return (sites.data ?? []).map((s) => ({
74
+ value: s.id ?? '',
75
+ label: s.display_name?.default || s.id || '',
76
+ }));
77
+ }
78
+ default: {
79
+ return [];
80
+ }
81
+ }
82
+ }
83
+ /**
84
+ * Check if a source requires remote API access.
85
+ *
86
+ * @param source - The source type to check
87
+ * @returns True if the source requires remote access
88
+ */
89
+ export function isRemoteSource(source) {
90
+ return source === 'sites';
91
+ }
92
+ /**
93
+ * Validate a value against a dynamic source (local only).
94
+ * Used for non-interactive validation of provided values.
95
+ *
96
+ * @param source - The source type
97
+ * @param value - The value to validate
98
+ * @param projectRoot - Project root for local sources
99
+ * @returns Object with valid status and available choices if invalid
100
+ */
101
+ export function validateAgainstSource(source, value, projectRoot) {
102
+ if (source === 'cartridges') {
103
+ const { choices } = resolveLocalSource(source, projectRoot);
104
+ const valid = choices.some((c) => c.value === value);
105
+ return {
106
+ valid,
107
+ availableChoices: valid ? undefined : choices.map((c) => c.value),
108
+ };
109
+ }
110
+ // For hook-points and other sources, no validation (allow any value)
111
+ return { valid: true };
112
+ }
113
+ //# sourceMappingURL=sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sources.js","sourceRoot":"","sources":["../../../src/scaffold/sources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,280 @@
1
+ /**
2
+ * Path to the built-in scaffolds data directory
3
+ */
4
+ export declare const SCAFFOLDS_DATA_DIR: string;
5
+ /**
6
+ * Scaffold category. Built-in scaffolds use 'cartridge', but custom scaffolds
7
+ * can define their own categories.
8
+ */
9
+ export type ScaffoldCategory = string;
10
+ /**
11
+ * Parameter types supported by scaffold parameters
12
+ */
13
+ export type ScaffoldParameterType = 'string' | 'boolean' | 'choice' | 'multi-choice';
14
+ /**
15
+ * Dynamic sources for populating parameter choices at runtime.
16
+ *
17
+ * - `cartridges`: Discovers cartridges in project via .project files
18
+ * - `hook-points`: Static list of common hook extension points
19
+ * - `sites`: Remote - fetches sites from connected B2C instance
20
+ */
21
+ export type DynamicParameterSource = 'cartridges' | 'hook-points' | 'sites';
22
+ /**
23
+ * Overwrite behavior for generated files
24
+ */
25
+ export type OverwriteBehavior = 'never' | 'always' | 'prompt' | 'merge';
26
+ /**
27
+ * Choice option for choice/multi-choice parameters
28
+ */
29
+ export interface ScaffoldChoice {
30
+ /** The value to use when this choice is selected */
31
+ value: string;
32
+ /** Human-readable label for this choice */
33
+ label: string;
34
+ }
35
+ /**
36
+ * Parameter definition for scaffold prompts and flags
37
+ */
38
+ export interface ScaffoldParameter {
39
+ /** Parameter name (camelCase), used in templates as variable name */
40
+ name: string;
41
+ /** Prompt message shown in interactive mode */
42
+ prompt: string;
43
+ /** Type of the parameter */
44
+ type: ScaffoldParameterType;
45
+ /** Whether this parameter is required */
46
+ required: boolean;
47
+ /** Default value if not provided */
48
+ default?: string | boolean | string[];
49
+ /** Regex pattern for validation (string types only) */
50
+ pattern?: string;
51
+ /** Error message shown when validation fails */
52
+ validationMessage?: string;
53
+ /** Available choices for choice/multi-choice types */
54
+ choices?: ScaffoldChoice[];
55
+ /** CLI flag name override (e.g., "--name"). If not set, uses --{paramName} */
56
+ flag?: string;
57
+ /** Conditional expression: only prompt if condition is met (e.g., "otherParam=value") */
58
+ when?: string;
59
+ /** Dynamic source for populating choices at runtime */
60
+ source?: DynamicParameterSource;
61
+ }
62
+ /**
63
+ * File mapping from template to destination
64
+ */
65
+ export interface FileMapping {
66
+ /** Template file path relative to the scaffold's files/ directory */
67
+ template: string;
68
+ /** Destination path (supports {{variable}} substitution) */
69
+ destination: string;
70
+ /** Conditional expression: only generate if truthy */
71
+ condition?: string;
72
+ /** Overwrite behavior for existing files */
73
+ overwrite?: OverwriteBehavior;
74
+ }
75
+ /**
76
+ * File modification definition for modifying existing files
77
+ */
78
+ export interface FileModification {
79
+ /** Target file path (supports {{variable}} substitution) */
80
+ target: string;
81
+ /** Type of modification */
82
+ type: 'json-merge' | 'insert-after' | 'insert-before' | 'append' | 'prepend';
83
+ /** Content to insert/merge (for text modifications) */
84
+ content?: string;
85
+ /** Template file for the content */
86
+ contentTemplate?: string;
87
+ /** Marker string to find (for insert-after/insert-before) */
88
+ marker?: string;
89
+ /** JSON path for json-merge operations (e.g., "scripts") */
90
+ jsonPath?: string;
91
+ /** Conditional expression */
92
+ condition?: string;
93
+ }
94
+ /**
95
+ * Scaffold manifest (scaffold.json)
96
+ */
97
+ export interface ScaffoldManifest {
98
+ /** Unique identifier (kebab-case) */
99
+ name: string;
100
+ /** Human-readable display name */
101
+ displayName: string;
102
+ /** Description of what this scaffold creates */
103
+ description: string;
104
+ /** Category for filtering and organization */
105
+ category: ScaffoldCategory;
106
+ /** Parameters for user input (prompts/flags) */
107
+ parameters: ScaffoldParameter[];
108
+ /** File mappings (optional - defaults to all files in files/ directory) */
109
+ files?: FileMapping[];
110
+ /** Modifications to existing files (optional) */
111
+ modifications?: FileModification[];
112
+ /** Instructions to show after generation */
113
+ postInstructions?: string;
114
+ /** Default output directory relative to cwd (created if needed) */
115
+ defaultOutputDir?: string;
116
+ }
117
+ /**
118
+ * Resolved scaffold with full paths and source information
119
+ */
120
+ export interface Scaffold {
121
+ /** Unique identifier */
122
+ id: string;
123
+ /** The manifest definition */
124
+ manifest: ScaffoldManifest;
125
+ /** Full path to the scaffold directory */
126
+ path: string;
127
+ /** Full path to the files/ directory within the scaffold */
128
+ filesPath: string;
129
+ /** Source of this scaffold */
130
+ source: ScaffoldSource;
131
+ }
132
+ /**
133
+ * Source/origin of a scaffold
134
+ */
135
+ export type ScaffoldSource = 'built-in' | 'user' | 'project' | 'plugin';
136
+ /**
137
+ * Priority ordering for scaffold providers
138
+ */
139
+ export type ScaffoldProviderPriority = 'before' | 'after';
140
+ /**
141
+ * Options for scaffold discovery
142
+ */
143
+ export interface ScaffoldDiscoveryOptions {
144
+ /** Filter by category */
145
+ category?: ScaffoldCategory;
146
+ /** Search query for name/description */
147
+ query?: string;
148
+ /** Include only scaffolds from specific sources */
149
+ sources?: ScaffoldSource[];
150
+ /** Project root directory (for project-local scaffolds) */
151
+ projectRoot?: string;
152
+ }
153
+ /**
154
+ * Scaffold provider interface for extensibility
155
+ */
156
+ export interface ScaffoldProvider {
157
+ /** Provider name for identification */
158
+ readonly name: string;
159
+ /** Priority: 'before' runs before built-in, 'after' runs after */
160
+ readonly priority: ScaffoldProviderPriority;
161
+ /** Get scaffolds from this provider */
162
+ getScaffolds(options: ScaffoldDiscoveryOptions): Promise<Scaffold[]>;
163
+ }
164
+ /**
165
+ * Scaffold transformer interface for modifying scaffolds
166
+ */
167
+ export interface ScaffoldTransformer {
168
+ /** Transformer name for identification */
169
+ readonly name: string;
170
+ /** Transform a scaffold definition */
171
+ transform(scaffold: Scaffold, context: ScaffoldContext): Promise<Scaffold>;
172
+ }
173
+ /**
174
+ * Context passed during scaffold operations
175
+ */
176
+ export interface ScaffoldContext {
177
+ /** Output directory for generated files */
178
+ outputDir: string;
179
+ /** Resolved parameter values */
180
+ variables: Record<string, string | boolean | string[]>;
181
+ /** Whether running in dry-run mode */
182
+ dryRun: boolean;
183
+ /** Whether to force overwrite existing files */
184
+ force: boolean;
185
+ /** Whether running in interactive mode */
186
+ interactive: boolean;
187
+ }
188
+ /**
189
+ * Options for scaffold generation
190
+ */
191
+ export interface ScaffoldGenerateOptions {
192
+ /** Output directory (defaults to cwd) */
193
+ outputDir?: string;
194
+ /** Pre-supplied variable values (from flags/env) */
195
+ variables?: Record<string, string | boolean | string[]>;
196
+ /** Preview without writing files */
197
+ dryRun?: boolean;
198
+ /** Skip prompts and overwrite existing files */
199
+ force?: boolean;
200
+ /** Enable interactive prompts (defaults to true if TTY) */
201
+ interactive?: boolean;
202
+ }
203
+ /**
204
+ * Result of a file generation operation
205
+ */
206
+ export interface GeneratedFile {
207
+ /** Relative path from output directory */
208
+ path: string;
209
+ /** Absolute path to the file */
210
+ absolutePath: string;
211
+ /** Action taken */
212
+ action: 'created' | 'skipped' | 'overwritten' | 'merged';
213
+ /** Reason for skip (if action is 'skipped') */
214
+ skipReason?: string;
215
+ }
216
+ /**
217
+ * Result of scaffold generation
218
+ */
219
+ export interface ScaffoldGenerateResult {
220
+ /** The scaffold that was used */
221
+ scaffold: Scaffold;
222
+ /** Files that were generated */
223
+ files: GeneratedFile[];
224
+ /** Post-generation instructions */
225
+ postInstructions?: string;
226
+ /** Whether this was a dry run */
227
+ dryRun: boolean;
228
+ /** Output directory */
229
+ outputDir: string;
230
+ }
231
+ /**
232
+ * Validation error for scaffold parameters
233
+ */
234
+ export interface ParameterValidationError {
235
+ /** Parameter name */
236
+ parameter: string;
237
+ /** Error message */
238
+ message: string;
239
+ /** The invalid value */
240
+ value?: unknown;
241
+ }
242
+ /**
243
+ * Result of parameter validation
244
+ */
245
+ export interface ParameterValidationResult {
246
+ /** Whether validation passed */
247
+ valid: boolean;
248
+ /** Validation errors (if any) */
249
+ errors: ParameterValidationError[];
250
+ /** Resolved parameter values */
251
+ values: Record<string, string | boolean | string[]>;
252
+ }
253
+ /**
254
+ * Template rendering helpers available in EJS templates
255
+ */
256
+ export interface TemplateHelpers {
257
+ /** Convert to kebab-case */
258
+ kebabCase: (str: string) => string;
259
+ /** Convert to camelCase */
260
+ camelCase: (str: string) => string;
261
+ /** Convert to PascalCase */
262
+ pascalCase: (str: string) => string;
263
+ /** Convert to snake_case */
264
+ snakeCase: (str: string) => string;
265
+ /** Current year */
266
+ year: number;
267
+ /** Current date (YYYY-MM-DD) */
268
+ date: string;
269
+ /** Generate a UUID v4 */
270
+ uuid: () => string;
271
+ }
272
+ /**
273
+ * Result of resolving a dynamic parameter source.
274
+ */
275
+ export interface SourceResult {
276
+ /** Available choices */
277
+ choices: ScaffoldChoice[];
278
+ /** For cartridges: map of name to absolute path */
279
+ pathMap?: Map<string, string>;
280
+ }