@salesforce/b2c-cli 0.3.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (260) hide show
  1. package/README.md +70 -1
  2. package/bin/dev.cmd +3 -0
  3. package/bin/dev.js +14 -1
  4. package/dist/commands/am/clients/create.d.ts +28 -0
  5. package/dist/commands/am/clients/create.js +158 -0
  6. package/dist/commands/am/clients/create.js.map +1 -0
  7. package/dist/commands/am/clients/delete.d.ts +13 -0
  8. package/dist/commands/am/clients/delete.js +29 -0
  9. package/dist/commands/am/clients/delete.js.map +1 -0
  10. package/dist/commands/am/clients/get.d.ts +26 -0
  11. package/dist/commands/am/clients/get.js +186 -0
  12. package/dist/commands/am/clients/get.js.map +1 -0
  13. package/dist/commands/am/clients/list.d.ts +18 -0
  14. package/dist/commands/am/clients/list.js +139 -0
  15. package/dist/commands/am/clients/list.js.map +1 -0
  16. package/dist/commands/am/clients/password.d.ts +16 -0
  17. package/dist/commands/am/clients/password.js +51 -0
  18. package/dist/commands/am/clients/password.js.map +1 -0
  19. package/dist/commands/am/clients/update.d.ts +34 -0
  20. package/dist/commands/am/clients/update.js +146 -0
  21. package/dist/commands/am/clients/update.js.map +1 -0
  22. package/dist/commands/am/orgs/get.d.ts +23 -0
  23. package/dist/commands/am/orgs/get.js +175 -0
  24. package/dist/commands/am/orgs/get.js.map +1 -0
  25. package/dist/commands/am/orgs/list.d.ts +18 -0
  26. package/dist/commands/am/orgs/list.js +149 -0
  27. package/dist/commands/am/orgs/list.js.map +1 -0
  28. package/dist/commands/am/roles/get.d.ts +15 -0
  29. package/dist/commands/am/roles/get.js +63 -0
  30. package/dist/commands/am/roles/get.js.map +1 -0
  31. package/dist/commands/am/roles/grant.d.ts +18 -0
  32. package/dist/commands/am/roles/grant.js +72 -0
  33. package/dist/commands/am/roles/grant.js.map +1 -0
  34. package/dist/commands/am/roles/list.d.ts +22 -0
  35. package/dist/commands/am/roles/list.js +142 -0
  36. package/dist/commands/am/roles/list.js.map +1 -0
  37. package/dist/commands/am/roles/revoke.d.ts +18 -0
  38. package/dist/commands/am/roles/revoke.js +72 -0
  39. package/dist/commands/am/roles/revoke.js.map +1 -0
  40. package/dist/commands/am/users/create.d.ts +17 -0
  41. package/dist/commands/am/users/create.js +67 -0
  42. package/dist/commands/am/users/create.js.map +1 -0
  43. package/dist/commands/am/users/delete.d.ts +16 -0
  44. package/dist/commands/am/users/delete.js +63 -0
  45. package/dist/commands/am/users/delete.js.map +1 -0
  46. package/dist/commands/am/users/get.d.ts +18 -0
  47. package/dist/commands/am/users/get.js +96 -0
  48. package/dist/commands/am/users/get.js.map +1 -0
  49. package/dist/commands/am/users/list.d.ts +21 -0
  50. package/dist/commands/am/users/list.js +162 -0
  51. package/dist/commands/am/users/list.js.map +1 -0
  52. package/dist/commands/am/users/reset.d.ts +13 -0
  53. package/dist/commands/am/users/reset.js +43 -0
  54. package/dist/commands/am/users/reset.js.map +1 -0
  55. package/dist/commands/am/users/update.d.ts +18 -0
  56. package/dist/commands/am/users/update.js +63 -0
  57. package/dist/commands/am/users/update.js.map +1 -0
  58. package/dist/commands/auth/token.js +1 -1
  59. package/dist/commands/auth/token.js.map +1 -1
  60. package/dist/commands/code/activate.d.ts +2 -1
  61. package/dist/commands/code/delete.d.ts +2 -1
  62. package/dist/commands/code/deploy.d.ts +2 -1
  63. package/dist/commands/code/watch.d.ts +2 -1
  64. package/dist/commands/content/export.d.ts +57 -0
  65. package/dist/commands/content/export.js +217 -0
  66. package/dist/commands/content/export.js.map +1 -0
  67. package/dist/commands/content/list.d.ts +56 -0
  68. package/dist/commands/content/list.js +133 -0
  69. package/dist/commands/content/list.js.map +1 -0
  70. package/dist/commands/docs/download.d.ts +2 -1
  71. package/dist/commands/ecdn/cache/purge.d.ts +2 -1
  72. package/dist/commands/ecdn/certificates/add.d.ts +2 -1
  73. package/dist/commands/ecdn/certificates/delete.d.ts +2 -1
  74. package/dist/commands/ecdn/certificates/list.d.ts +2 -1
  75. package/dist/commands/ecdn/certificates/update.d.ts +2 -1
  76. package/dist/commands/ecdn/certificates/validate.d.ts +2 -1
  77. package/dist/commands/ecdn/cipher-suites/get.d.ts +2 -1
  78. package/dist/commands/ecdn/cipher-suites/update.d.ts +2 -1
  79. package/dist/commands/ecdn/logpush/jobs/create.d.ts +2 -1
  80. package/dist/commands/ecdn/logpush/jobs/delete.d.ts +2 -1
  81. package/dist/commands/ecdn/logpush/jobs/get.d.ts +2 -1
  82. package/dist/commands/ecdn/logpush/jobs/list.d.ts +2 -1
  83. package/dist/commands/ecdn/logpush/jobs/update.d.ts +2 -1
  84. package/dist/commands/ecdn/logpush/ownership.d.ts +2 -1
  85. package/dist/commands/ecdn/mrt-rules/create.d.ts +2 -1
  86. package/dist/commands/ecdn/mrt-rules/delete.d.ts +2 -1
  87. package/dist/commands/ecdn/mrt-rules/get.d.ts +2 -1
  88. package/dist/commands/ecdn/mrt-rules/rules/delete.d.ts +2 -1
  89. package/dist/commands/ecdn/mrt-rules/rules/update.d.ts +2 -1
  90. package/dist/commands/ecdn/mrt-rules/update.d.ts +2 -1
  91. package/dist/commands/ecdn/mtls/create.d.ts +2 -1
  92. package/dist/commands/ecdn/mtls/delete.d.ts +2 -1
  93. package/dist/commands/ecdn/mtls/get.d.ts +2 -1
  94. package/dist/commands/ecdn/mtls/list.d.ts +2 -1
  95. package/dist/commands/ecdn/origin-headers/delete.d.ts +2 -1
  96. package/dist/commands/ecdn/origin-headers/get.d.ts +2 -1
  97. package/dist/commands/ecdn/origin-headers/set.d.ts +2 -1
  98. package/dist/commands/ecdn/page-shield/notifications/create.d.ts +2 -1
  99. package/dist/commands/ecdn/page-shield/notifications/delete.d.ts +2 -1
  100. package/dist/commands/ecdn/page-shield/notifications/list.d.ts +2 -1
  101. package/dist/commands/ecdn/page-shield/policies/create.d.ts +2 -1
  102. package/dist/commands/ecdn/page-shield/policies/delete.d.ts +2 -1
  103. package/dist/commands/ecdn/page-shield/policies/get.d.ts +2 -1
  104. package/dist/commands/ecdn/page-shield/policies/list.d.ts +2 -1
  105. package/dist/commands/ecdn/page-shield/policies/update.d.ts +2 -1
  106. package/dist/commands/ecdn/page-shield/scripts/get.d.ts +2 -1
  107. package/dist/commands/ecdn/page-shield/scripts/list.d.ts +2 -1
  108. package/dist/commands/ecdn/security/get.d.ts +2 -1
  109. package/dist/commands/ecdn/security/update.d.ts +2 -1
  110. package/dist/commands/ecdn/speed/get.d.ts +2 -1
  111. package/dist/commands/ecdn/speed/update.d.ts +2 -1
  112. package/dist/commands/ecdn/waf/groups/list.d.ts +2 -1
  113. package/dist/commands/ecdn/waf/groups/update.d.ts +2 -1
  114. package/dist/commands/ecdn/waf/managed-rules/list.d.ts +2 -1
  115. package/dist/commands/ecdn/waf/managed-rules/update.d.ts +2 -1
  116. package/dist/commands/ecdn/waf/migrate.d.ts +2 -1
  117. package/dist/commands/ecdn/waf/owasp/get.d.ts +2 -1
  118. package/dist/commands/ecdn/waf/owasp/update.d.ts +2 -1
  119. package/dist/commands/ecdn/waf/rules/get.d.ts +2 -1
  120. package/dist/commands/ecdn/waf/rules/list.d.ts +2 -1
  121. package/dist/commands/ecdn/waf/rules/update.d.ts +2 -1
  122. package/dist/commands/ecdn/waf/rulesets/list.d.ts +2 -1
  123. package/dist/commands/ecdn/waf/rulesets/update.d.ts +2 -1
  124. package/dist/commands/ecdn/zones/create.d.ts +2 -1
  125. package/dist/commands/ecdn/zones/list.d.ts +2 -1
  126. package/dist/commands/job/export.d.ts +2 -1
  127. package/dist/commands/job/import.d.ts +2 -1
  128. package/dist/commands/job/run.d.ts +2 -1
  129. package/dist/commands/job/search.d.ts +2 -1
  130. package/dist/commands/job/wait.d.ts +2 -1
  131. package/dist/commands/logs/get.d.ts +2 -1
  132. package/dist/commands/logs/list.d.ts +2 -1
  133. package/dist/commands/logs/tail.d.ts +2 -1
  134. package/dist/commands/mrt/bundle/deploy.js +24 -4
  135. package/dist/commands/mrt/bundle/deploy.js.map +1 -1
  136. package/dist/commands/mrt/tail-logs.d.ts +27 -0
  137. package/dist/commands/mrt/tail-logs.js +137 -0
  138. package/dist/commands/mrt/tail-logs.js.map +1 -0
  139. package/dist/commands/{ods → sandbox}/create.d.ts +8 -14
  140. package/dist/commands/{ods → sandbox}/create.js +112 -102
  141. package/dist/commands/sandbox/create.js.map +1 -0
  142. package/dist/commands/sandbox/delete.d.ts +19 -0
  143. package/dist/commands/sandbox/delete.js +141 -0
  144. package/dist/commands/sandbox/delete.js.map +1 -0
  145. package/dist/commands/{ods → sandbox}/get.d.ts +2 -1
  146. package/dist/commands/{ods → sandbox}/get.js +5 -4
  147. package/dist/commands/sandbox/get.js.map +1 -0
  148. package/dist/commands/{ods → sandbox}/info.d.ts +2 -1
  149. package/dist/commands/{ods → sandbox}/info.js +6 -5
  150. package/dist/commands/sandbox/info.js.map +1 -0
  151. package/dist/commands/{ods → sandbox}/list.d.ts +2 -1
  152. package/dist/commands/{ods → sandbox}/list.js +6 -5
  153. package/dist/commands/sandbox/list.js.map +1 -0
  154. package/dist/commands/{ods → sandbox}/restart.d.ts +7 -1
  155. package/dist/commands/sandbox/restart.js +107 -0
  156. package/dist/commands/sandbox/restart.js.map +1 -0
  157. package/dist/commands/{ods → sandbox}/start.d.ts +7 -1
  158. package/dist/commands/sandbox/start.js +108 -0
  159. package/dist/commands/sandbox/start.js.map +1 -0
  160. package/dist/commands/{ods → sandbox}/stop.d.ts +7 -1
  161. package/dist/commands/sandbox/stop.js +107 -0
  162. package/dist/commands/sandbox/stop.js.map +1 -0
  163. package/dist/commands/scaffold/generate.d.ts +22 -0
  164. package/dist/commands/scaffold/generate.js +74 -0
  165. package/dist/commands/scaffold/generate.js.map +1 -0
  166. package/dist/commands/scaffold/index.d.ts +24 -0
  167. package/dist/commands/scaffold/index.js +80 -0
  168. package/dist/commands/scaffold/index.js.map +1 -0
  169. package/dist/commands/scaffold/info.d.ts +24 -0
  170. package/dist/commands/scaffold/info.js +89 -0
  171. package/dist/commands/scaffold/info.js.map +1 -0
  172. package/dist/commands/scaffold/init.d.ts +29 -0
  173. package/dist/commands/scaffold/init.js +221 -0
  174. package/dist/commands/scaffold/init.js.map +1 -0
  175. package/dist/commands/scaffold/list.d.ts +38 -0
  176. package/dist/commands/scaffold/list.js +131 -0
  177. package/dist/commands/scaffold/list.js.map +1 -0
  178. package/dist/commands/scaffold/search.d.ts +32 -0
  179. package/dist/commands/scaffold/search.js +97 -0
  180. package/dist/commands/scaffold/search.js.map +1 -0
  181. package/dist/commands/scaffold/validate.d.ts +24 -0
  182. package/dist/commands/scaffold/validate.js +74 -0
  183. package/dist/commands/scaffold/validate.js.map +1 -0
  184. package/dist/commands/scapi/custom/status.d.ts +2 -1
  185. package/dist/commands/scapi/schemas/get.d.ts +2 -1
  186. package/dist/commands/scapi/schemas/list.d.ts +2 -1
  187. package/dist/commands/setup/index.d.ts +12 -0
  188. package/dist/commands/setup/index.js +34 -0
  189. package/dist/commands/setup/index.js.map +1 -0
  190. package/dist/commands/setup/{config.d.ts → inspect.d.ts} +5 -4
  191. package/dist/commands/setup/{config.js → inspect.js} +5 -3
  192. package/dist/commands/setup/inspect.js.map +1 -0
  193. package/dist/commands/setup/instance/create.d.ts +43 -0
  194. package/dist/commands/setup/instance/create.js +269 -0
  195. package/dist/commands/setup/instance/create.js.map +1 -0
  196. package/dist/commands/setup/instance/index.d.ts +9 -0
  197. package/dist/commands/setup/instance/index.js +22 -0
  198. package/dist/commands/setup/instance/index.js.map +1 -0
  199. package/dist/commands/setup/instance/list.d.ts +31 -0
  200. package/dist/commands/setup/instance/list.js +68 -0
  201. package/dist/commands/setup/instance/list.js.map +1 -0
  202. package/dist/commands/setup/instance/remove.d.ts +34 -0
  203. package/dist/commands/setup/instance/remove.js +75 -0
  204. package/dist/commands/setup/instance/remove.js.map +1 -0
  205. package/dist/commands/setup/instance/set-active.d.ts +33 -0
  206. package/dist/commands/setup/instance/set-active.js +78 -0
  207. package/dist/commands/setup/instance/set-active.js.map +1 -0
  208. package/dist/commands/slas/client/create.d.ts +2 -1
  209. package/dist/commands/slas/client/create.js +1 -0
  210. package/dist/commands/slas/client/create.js.map +1 -1
  211. package/dist/commands/slas/client/delete.d.ts +2 -1
  212. package/dist/commands/slas/client/get.d.ts +2 -1
  213. package/dist/commands/slas/client/list.d.ts +2 -1
  214. package/dist/commands/slas/client/list.js +8 -3
  215. package/dist/commands/slas/client/list.js.map +1 -1
  216. package/dist/commands/slas/client/update.d.ts +2 -1
  217. package/dist/commands/webdav/get.d.ts +2 -1
  218. package/dist/commands/webdav/rm.d.ts +2 -1
  219. package/dist/i18n/locales/en.d.ts +42 -0
  220. package/dist/i18n/locales/en.js +42 -0
  221. package/dist/i18n/locales/en.js.map +1 -1
  222. package/dist/i18n/locales/index.d.ts +42 -0
  223. package/dist/lib/scaffold/generate-helper.d.ts +47 -0
  224. package/dist/lib/scaffold/generate-helper.js +271 -0
  225. package/dist/lib/scaffold/generate-helper.js.map +1 -0
  226. package/dist/lib/scaffold/source-resolver.d.ts +25 -0
  227. package/dist/lib/scaffold/source-resolver.js +37 -0
  228. package/dist/lib/scaffold/source-resolver.js.map +1 -0
  229. package/dist/utils/am/resolve-org.d.ts +11 -0
  230. package/dist/utils/am/resolve-org.js +15 -0
  231. package/dist/utils/am/resolve-org.js.map +1 -0
  232. package/dist/utils/am/user-display.d.ts +5 -0
  233. package/dist/utils/am/user-display.js +100 -0
  234. package/dist/utils/am/user-display.js.map +1 -0
  235. package/dist/utils/ecdn/zone-command.d.ts +2 -1
  236. package/dist/utils/mrt-logs/format.d.ts +28 -0
  237. package/dist/utils/mrt-logs/format.js +90 -0
  238. package/dist/utils/mrt-logs/format.js.map +1 -0
  239. package/dist/utils/mrt-logs/index.d.ts +1 -0
  240. package/dist/utils/mrt-logs/index.js +7 -0
  241. package/dist/utils/mrt-logs/index.js.map +1 -0
  242. package/dist/utils/slas/client.d.ts +7 -0
  243. package/dist/utils/slas/client.js +26 -13
  244. package/dist/utils/slas/client.js.map +1 -1
  245. package/oclif.manifest.json +14039 -5107
  246. package/package.json +61 -19
  247. package/dist/commands/ods/create.js.map +0 -1
  248. package/dist/commands/ods/delete.d.ts +0 -15
  249. package/dist/commands/ods/delete.js +0 -86
  250. package/dist/commands/ods/delete.js.map +0 -1
  251. package/dist/commands/ods/get.js.map +0 -1
  252. package/dist/commands/ods/info.js.map +0 -1
  253. package/dist/commands/ods/list.js.map +0 -1
  254. package/dist/commands/ods/restart.js +0 -51
  255. package/dist/commands/ods/restart.js.map +0 -1
  256. package/dist/commands/ods/start.js +0 -51
  257. package/dist/commands/ods/start.js.map +0 -1
  258. package/dist/commands/ods/stop.js +0 -51
  259. package/dist/commands/ods/stop.js.map +0 -1
  260. package/dist/commands/setup/config.js.map +0 -1
@@ -0,0 +1,74 @@
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 { Args, Flags } from '@oclif/core';
7
+ import { BaseCommand } from '@salesforce/b2c-tooling-sdk/cli';
8
+ import { executeScaffoldGenerate } from '../../lib/scaffold/generate-helper.js';
9
+ import { t, withDocs } from '../../i18n/index.js';
10
+ /**
11
+ * Command to generate a project from a scaffold.
12
+ */
13
+ export default class ScaffoldGenerate extends BaseCommand {
14
+ static args = {
15
+ scaffoldId: Args.string({
16
+ description: 'Scaffold ID to generate',
17
+ required: true,
18
+ }),
19
+ };
20
+ static description = withDocs(t('commands.scaffold.generate.description', 'Generate files from a scaffold template'), '/cli/scaffold.html#b2c-scaffold-generate');
21
+ static enableJsonFlag = true;
22
+ static examples = [
23
+ '<%= config.bin %> <%= command.id %> cartridge',
24
+ '<%= config.bin %> <%= command.id %> cartridge --name app_custom',
25
+ '<%= config.bin %> <%= command.id %> custom-api --option apiName=my-api --option cartridgeName=app_custom',
26
+ '<%= config.bin %> <%= command.id %> cartridge --dry-run',
27
+ '<%= config.bin %> <%= command.id %> cartridge --force',
28
+ '<%= config.bin %> <%= command.id %> cartridge --output ./src',
29
+ ];
30
+ static flags = {
31
+ name: Flags.string({
32
+ char: 'n',
33
+ description: 'Primary name parameter (shorthand for --option name=VALUE)',
34
+ }),
35
+ output: Flags.string({
36
+ char: 'o',
37
+ description: 'Output directory (defaults to scaffold default or current directory)',
38
+ }),
39
+ option: Flags.string({
40
+ description: 'Parameter value in key=value format (can be repeated)',
41
+ multiple: true,
42
+ }),
43
+ 'dry-run': Flags.boolean({
44
+ description: 'Preview files without writing them',
45
+ default: false,
46
+ }),
47
+ force: Flags.boolean({
48
+ char: 'f',
49
+ description: 'Skip prompts, use defaults, and overwrite existing files',
50
+ default: false,
51
+ }),
52
+ };
53
+ async run() {
54
+ const projectRoot = this.flags['working-directory'] || process.cwd();
55
+ const response = await executeScaffoldGenerate({
56
+ scaffoldId: this.args.scaffoldId,
57
+ name: this.flags.name,
58
+ output: this.flags.output,
59
+ options: this.flags.option,
60
+ dryRun: this.flags['dry-run'],
61
+ force: this.flags.force,
62
+ projectRoot,
63
+ }, {
64
+ logger: this.logger,
65
+ log: (msg) => this.log(msg),
66
+ warn: (msg) => this.warn(msg),
67
+ error: (msg) => this.error(msg),
68
+ });
69
+ if (this.jsonEnabled()) {
70
+ return response;
71
+ }
72
+ }
73
+ }
74
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/commands/scaffold/generate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAC,IAAI,EAAE,KAAK,EAAC,MAAM,aAAa,CAAC;AACxC,OAAO,EAAC,WAAW,EAAC,MAAM,iCAAiC,CAAC;AAC5D,OAAO,EAAC,uBAAuB,EAAwB,MAAM,uCAAuC,CAAC;AACrG,OAAO,EAAC,CAAC,EAAE,QAAQ,EAAC,MAAM,qBAAqB,CAAC;AAIhD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,WAAoC;IAChF,MAAM,CAAC,IAAI,GAAG;QACZ,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;YACtB,WAAW,EAAE,yBAAyB;YACtC,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAC;IAEF,MAAM,CAAC,WAAW,GAAG,QAAQ,CAC3B,CAAC,CAAC,wCAAwC,EAAE,yCAAyC,CAAC,EACtF,0CAA0C,CAC3C,CAAC;IAEF,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;IAE7B,MAAM,CAAC,QAAQ,GAAG;QAChB,+CAA+C;QAC/C,iEAAiE;QACjE,0GAA0G;QAC1G,yDAAyD;QACzD,uDAAuD;QACvD,8DAA8D;KAC/D,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG;QACb,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;YACjB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,4DAA4D;SAC1E,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,sEAAsE;SACpF,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,WAAW,EAAE,uDAAuD;YACpE,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;YACvB,WAAW,EAAE,oCAAoC;YACjD,OAAO,EAAE,KAAK;SACf,CAAC;QACF,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,0DAA0D;YACvE,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACrE,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAC5C;YACE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU;YAChC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;YACrB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YACzB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YAC1B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;YAC7B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;YACvB,WAAW;SACZ,EACD;YACE,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAC3B,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YAC7B,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;SAChC,CACF,CAAC;QAEF,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { BaseCommand } from '@salesforce/b2c-tooling-sdk/cli';
2
+ import { type GenerateResponse } from '../../lib/scaffold/generate-helper.js';
3
+ /**
4
+ * Default scaffold command - provides topic help and shorthand for `scaffold generate`.
5
+ *
6
+ * - `b2c scaffold` shows topic help with available subcommands
7
+ * - `b2c scaffold cartridge` is shorthand for `b2c scaffold generate cartridge`
8
+ */
9
+ export default class ScaffoldIndex extends BaseCommand<typeof ScaffoldIndex> {
10
+ static args: {
11
+ scaffoldId: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
12
+ };
13
+ static description: string;
14
+ static enableJsonFlag: boolean;
15
+ static examples: string[];
16
+ static flags: {
17
+ name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
+ option: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
20
+ 'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
21
+ force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
22
+ };
23
+ run(): Promise<GenerateResponse | void>;
24
+ }
@@ -0,0 +1,80 @@
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 { Args, Flags } from '@oclif/core';
7
+ import { BaseCommand } from '@salesforce/b2c-tooling-sdk/cli';
8
+ import { executeScaffoldGenerate } from '../../lib/scaffold/generate-helper.js';
9
+ import { t, withDocs } from '../../i18n/index.js';
10
+ /**
11
+ * Default scaffold command - provides topic help and shorthand for `scaffold generate`.
12
+ *
13
+ * - `b2c scaffold` shows topic help with available subcommands
14
+ * - `b2c scaffold cartridge` is shorthand for `b2c scaffold generate cartridge`
15
+ */
16
+ export default class ScaffoldIndex extends BaseCommand {
17
+ static args = {
18
+ scaffoldId: Args.string({
19
+ description: 'Scaffold ID to generate (optional - omit to see available commands)',
20
+ required: false,
21
+ }),
22
+ };
23
+ static description = withDocs(t('commands.scaffold.index.description', 'Work with project scaffolds and templates'), '/cli/scaffold.html');
24
+ static enableJsonFlag = true;
25
+ static examples = [
26
+ '<%= config.bin %> scaffold --help',
27
+ '<%= config.bin %> scaffold list',
28
+ '<%= config.bin %> scaffold cartridge',
29
+ '<%= config.bin %> scaffold cartridge --name app_custom',
30
+ ];
31
+ static flags = {
32
+ name: Flags.string({
33
+ char: 'n',
34
+ description: 'Primary name parameter (shorthand for --option name=VALUE)',
35
+ }),
36
+ output: Flags.string({
37
+ char: 'o',
38
+ description: 'Output directory (defaults to scaffold default or current directory)',
39
+ }),
40
+ option: Flags.string({
41
+ description: 'Parameter value in key=value format (can be repeated)',
42
+ multiple: true,
43
+ }),
44
+ 'dry-run': Flags.boolean({
45
+ description: 'Preview files without writing them',
46
+ default: false,
47
+ }),
48
+ force: Flags.boolean({
49
+ char: 'f',
50
+ description: 'Skip prompts, use defaults, and overwrite existing files',
51
+ default: false,
52
+ }),
53
+ };
54
+ async run() {
55
+ const { scaffoldId } = this.args;
56
+ if (!scaffoldId) {
57
+ // No scaffold specified - show topic help
58
+ await this.config.runCommand('help', ['scaffold']);
59
+ return;
60
+ }
61
+ // Scaffold specified - run generation
62
+ const response = await executeScaffoldGenerate({
63
+ scaffoldId,
64
+ name: this.flags.name,
65
+ output: this.flags.output,
66
+ options: this.flags.option,
67
+ dryRun: this.flags['dry-run'],
68
+ force: this.flags.force,
69
+ }, {
70
+ logger: this.logger,
71
+ log: (msg) => this.log(msg),
72
+ warn: (msg) => this.warn(msg),
73
+ error: (msg) => this.error(msg),
74
+ });
75
+ if (this.jsonEnabled()) {
76
+ return response;
77
+ }
78
+ }
79
+ }
80
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/scaffold/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAC,IAAI,EAAE,KAAK,EAAC,MAAM,aAAa,CAAC;AACxC,OAAO,EAAC,WAAW,EAAC,MAAM,iCAAiC,CAAC;AAC5D,OAAO,EAAC,uBAAuB,EAAwB,MAAM,uCAAuC,CAAC;AACrG,OAAO,EAAC,CAAC,EAAE,QAAQ,EAAC,MAAM,qBAAqB,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAiC;IAC1E,MAAM,CAAC,IAAI,GAAG;QACZ,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;YACtB,WAAW,EAAE,qEAAqE;YAClF,QAAQ,EAAE,KAAK;SAChB,CAAC;KACH,CAAC;IAEF,MAAM,CAAC,WAAW,GAAG,QAAQ,CAC3B,CAAC,CAAC,qCAAqC,EAAE,2CAA2C,CAAC,EACrF,oBAAoB,CACrB,CAAC;IAEF,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;IAE7B,MAAM,CAAC,QAAQ,GAAG;QAChB,mCAAmC;QACnC,iCAAiC;QACjC,sCAAsC;QACtC,wDAAwD;KACzD,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG;QACb,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;YACjB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,4DAA4D;SAC1E,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,sEAAsE;SACpF,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,WAAW,EAAE,uDAAuD;YACpE,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;YACvB,WAAW,EAAE,oCAAoC;YACjD,OAAO,EAAE,KAAK;SACf,CAAC;QACF,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,0DAA0D;YACvE,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAC,UAAU,EAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QAE/B,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,0CAA0C;YAC1C,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;QAED,sCAAsC;QACtC,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAC5C;YACE,UAAU;YACV,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;YACrB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YACzB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YAC1B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;YAC7B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;SACxB,EACD;YACE,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAC3B,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YAC7B,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;SAChC,CACF,CAAC;QAEF,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { BaseCommand } from '@salesforce/b2c-tooling-sdk/cli';
2
+ import { type ScaffoldManifest } from '@salesforce/b2c-tooling-sdk/scaffold';
3
+ /**
4
+ * Response type for the info command.
5
+ */
6
+ interface ScaffoldInfoResponse {
7
+ id: string;
8
+ source: string;
9
+ manifest: ScaffoldManifest;
10
+ path: string;
11
+ }
12
+ /**
13
+ * Command to show detailed information about a scaffold.
14
+ */
15
+ export default class ScaffoldInfo extends BaseCommand<typeof ScaffoldInfo> {
16
+ static args: {
17
+ scaffoldId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
18
+ };
19
+ static description: string;
20
+ static enableJsonFlag: boolean;
21
+ static examples: string[];
22
+ run(): Promise<ScaffoldInfoResponse>;
23
+ }
24
+ export {};
@@ -0,0 +1,89 @@
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 { Args, ux } from '@oclif/core';
7
+ import cliui from 'cliui';
8
+ import { BaseCommand } from '@salesforce/b2c-tooling-sdk/cli';
9
+ import { createScaffoldRegistry } from '@salesforce/b2c-tooling-sdk/scaffold';
10
+ import { t, withDocs } from '../../i18n/index.js';
11
+ /**
12
+ * Command to show detailed information about a scaffold.
13
+ */
14
+ export default class ScaffoldInfo extends BaseCommand {
15
+ static args = {
16
+ scaffoldId: Args.string({
17
+ description: 'Scaffold ID to get info for',
18
+ required: true,
19
+ }),
20
+ };
21
+ static description = withDocs(t('commands.scaffold.info.description', 'Show detailed information about a scaffold'), '/cli/scaffold.html#b2c-scaffold-info');
22
+ static enableJsonFlag = true;
23
+ static examples = [
24
+ '<%= config.bin %> <%= command.id %> cartridge',
25
+ '<%= config.bin %> <%= command.id %> custom-api --json',
26
+ ];
27
+ async run() {
28
+ const { scaffoldId } = this.args;
29
+ const registry = createScaffoldRegistry();
30
+ const projectRoot = this.flags['working-directory'] || process.cwd();
31
+ const scaffold = await registry.getScaffold(scaffoldId, {
32
+ projectRoot,
33
+ });
34
+ if (!scaffold) {
35
+ this.error(t('commands.scaffold.info.scaffoldNotFound', 'Scaffold not found: {{id}}', { id: scaffoldId }));
36
+ }
37
+ const response = {
38
+ id: scaffold.id,
39
+ source: scaffold.source,
40
+ manifest: scaffold.manifest,
41
+ path: scaffold.path,
42
+ };
43
+ if (this.jsonEnabled()) {
44
+ return response;
45
+ }
46
+ // Display formatted output
47
+ const ui = cliui({ width: process.stdout.columns || 80 });
48
+ // Header
49
+ ui.div({ text: `\n${scaffold.manifest.displayName}`, padding: [0, 0, 0, 0] });
50
+ ui.div({ text: '='.repeat(scaffold.manifest.displayName.length), padding: [0, 0, 1, 0] });
51
+ // Basic info
52
+ ui.div({ text: 'ID:', width: 15, padding: [0, 2, 0, 0] }, { text: scaffold.id });
53
+ ui.div({ text: 'Category:', width: 15, padding: [0, 2, 0, 0] }, { text: scaffold.manifest.category });
54
+ ui.div({ text: 'Source:', width: 15, padding: [0, 2, 0, 0] }, { text: scaffold.source });
55
+ ui.div({ text: 'Description:', width: 15, padding: [0, 2, 0, 0] }, { text: scaffold.manifest.description });
56
+ // Parameters
57
+ if (scaffold.manifest.parameters.length > 0) {
58
+ ui.div({ text: '\nParameters:', padding: [1, 0, 0, 0] });
59
+ ui.div({ text: '-'.repeat(11), padding: [0, 0, 1, 0] });
60
+ for (const param of scaffold.manifest.parameters) {
61
+ const required = param.required ? ' (required)' : '';
62
+ const defaultVal = param.default === undefined ? '' : ` [default: ${param.default}]`;
63
+ const conditional = param.when ? ` [when: ${param.when}]` : '';
64
+ ui.div({ text: ` ${param.name}`, width: 25, padding: [0, 2, 0, 0] }, { text: `${param.type}${required}${defaultVal}${conditional}` });
65
+ ui.div({ text: '', width: 25, padding: [0, 2, 0, 0] }, { text: param.prompt });
66
+ if (param.choices && param.choices.length > 0) {
67
+ ui.div({ text: '', width: 25, padding: [0, 2, 0, 0] }, { text: `Choices: ${param.choices.map((c) => c.value).join(', ')}` });
68
+ }
69
+ }
70
+ }
71
+ // Usage example
72
+ ui.div({ text: '\nUsage:', padding: [1, 0, 0, 0] });
73
+ ui.div({ text: '------', padding: [0, 0, 1, 0] });
74
+ const requiredParams = scaffold.manifest.parameters
75
+ .filter((p) => p.required && !p.when)
76
+ .map((p) => `--option ${p.name}=<value>`)
77
+ .join(' ');
78
+ ui.div({ text: ` b2c scaffold generate ${scaffold.id} ${requiredParams}`, padding: [0, 0, 0, 0] });
79
+ // Post instructions
80
+ if (scaffold.manifest.postInstructions) {
81
+ ui.div({ text: '\nPost-generation instructions:', padding: [1, 0, 0, 0] });
82
+ ui.div({ text: '-----------------------------', padding: [0, 0, 1, 0] });
83
+ ui.div({ text: ' (shown after generation completes)', padding: [0, 0, 0, 0] });
84
+ }
85
+ ux.stdout(ui.toString());
86
+ return response;
87
+ }
88
+ }
89
+ //# sourceMappingURL=info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/commands/scaffold/info.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { BaseCommand } from '@salesforce/b2c-tooling-sdk/cli';
2
+ /**
3
+ * Response type for the init command.
4
+ */
5
+ interface ScaffoldInitResponse {
6
+ name: string;
7
+ path: string;
8
+ location: 'custom' | 'project' | 'user';
9
+ files: string[];
10
+ }
11
+ /**
12
+ * Command to initialize a new custom scaffold.
13
+ */
14
+ export default class ScaffoldInit extends BaseCommand<typeof ScaffoldInit> {
15
+ static args: {
16
+ name: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
17
+ };
18
+ static description: string;
19
+ static enableJsonFlag: boolean;
20
+ static examples: string[];
21
+ static flags: {
22
+ project: import("@oclif/core/interfaces").BooleanFlag<boolean>;
23
+ user: import("@oclif/core/interfaces").BooleanFlag<boolean>;
24
+ output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
25
+ force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
26
+ };
27
+ run(): Promise<ScaffoldInitResponse>;
28
+ }
29
+ export {};
@@ -0,0 +1,221 @@
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 os from 'node:os';
8
+ import path from 'node:path';
9
+ import { Args, Flags } from '@oclif/core';
10
+ import { input, select } from '@inquirer/prompts';
11
+ import { BaseCommand } from '@salesforce/b2c-tooling-sdk/cli';
12
+ import { isValidScaffoldName } from '@salesforce/b2c-tooling-sdk/scaffold';
13
+ import { t, withDocs } from '../../i18n/index.js';
14
+ const SCAFFOLD_TEMPLATE = `{
15
+ "name": "{{name}}",
16
+ "displayName": "{{displayName}}",
17
+ "description": "{{description}}",
18
+ "category": "{{category}}",
19
+ "version": "1.0",
20
+ "tags": [],
21
+ "parameters": [
22
+ {
23
+ "name": "exampleParam",
24
+ "prompt": "Enter a value for the example parameter:",
25
+ "type": "string",
26
+ "required": true
27
+ }
28
+ ],
29
+ "files": [
30
+ {
31
+ "template": "example.txt.ejs",
32
+ "destination": "{{exampleParam}}/example.txt"
33
+ }
34
+ ],
35
+ "postInstructions": "Your scaffold has been generated!\\n\\nNext steps:\\n1. Review the generated files\\n2. Customize as needed"
36
+ }`;
37
+ const EXAMPLE_TEMPLATE = `<%# Example template file %>
38
+ <%# Available helpers: kebabCase, camelCase, pascalCase, snakeCase, year, date, uuid %>
39
+
40
+ This is an example file generated by the <%= name %> scaffold.
41
+
42
+ Parameter value: <%= exampleParam %>
43
+ Generated on: <%= date %>
44
+ `;
45
+ /**
46
+ * Command to initialize a new custom scaffold.
47
+ */
48
+ export default class ScaffoldInit extends BaseCommand {
49
+ static args = {
50
+ name: Args.string({
51
+ description: 'Name for the new scaffold (kebab-case)',
52
+ required: false,
53
+ }),
54
+ };
55
+ static description = withDocs(t('commands.scaffold.init.description', 'Create a new custom scaffold template'), '/cli/scaffold.html#b2c-scaffold-init');
56
+ static enableJsonFlag = true;
57
+ static examples = [
58
+ '<%= config.bin %> <%= command.id %> my-scaffold',
59
+ '<%= config.bin %> <%= command.id %> my-scaffold --project',
60
+ '<%= config.bin %> <%= command.id %> my-scaffold --user',
61
+ '<%= config.bin %> <%= command.id %> --output ./scaffolds/custom',
62
+ ];
63
+ static flags = {
64
+ project: Flags.boolean({
65
+ description: 'Create in project scaffolds directory (.b2c/scaffolds/)',
66
+ exclusive: ['user', 'output'],
67
+ }),
68
+ user: Flags.boolean({
69
+ description: 'Create in user scaffolds directory (~/.b2c/scaffolds/)',
70
+ exclusive: ['project', 'output'],
71
+ }),
72
+ output: Flags.string({
73
+ char: 'o',
74
+ description: 'Custom output directory for the scaffold',
75
+ exclusive: ['project', 'user'],
76
+ }),
77
+ force: Flags.boolean({
78
+ char: 'f',
79
+ description: 'Overwrite existing scaffold if it exists',
80
+ default: false,
81
+ }),
82
+ };
83
+ async run() {
84
+ let scaffoldName = this.args.name;
85
+ const isTTY = process.stdin.isTTY && process.stdout.isTTY;
86
+ // Prompt for name if not provided
87
+ if (!scaffoldName && isTTY) {
88
+ scaffoldName = await input({
89
+ message: 'What is the scaffold name?',
90
+ validate(value) {
91
+ if (!value)
92
+ return 'Name is required';
93
+ if (!isValidScaffoldName(value)) {
94
+ return 'Scaffold name must be kebab-case (lowercase letters, numbers, hyphens)';
95
+ }
96
+ return true;
97
+ },
98
+ });
99
+ }
100
+ if (!scaffoldName) {
101
+ this.error('Scaffold name is required');
102
+ }
103
+ if (!isValidScaffoldName(scaffoldName)) {
104
+ this.error('Scaffold name must be kebab-case (lowercase letters, numbers, hyphens)');
105
+ }
106
+ // Determine output location
107
+ let scaffoldDir;
108
+ let location;
109
+ if (this.flags.output) {
110
+ scaffoldDir = path.resolve(this.flags.output, scaffoldName);
111
+ location = 'custom';
112
+ }
113
+ else if (this.flags.user) {
114
+ scaffoldDir = path.join(os.homedir(), '.b2c', 'scaffolds', scaffoldName);
115
+ location = 'user';
116
+ }
117
+ else if (this.flags.project || !isTTY) {
118
+ scaffoldDir = path.join(process.cwd(), '.b2c', 'scaffolds', scaffoldName);
119
+ location = 'project';
120
+ }
121
+ else {
122
+ // Interactive location selection
123
+ const selectedLocation = await select({
124
+ message: 'Where should the scaffold be created?',
125
+ choices: [
126
+ {
127
+ name: 'Project (.b2c/scaffolds/)',
128
+ value: 'project',
129
+ description: 'Scaffold available only in this project',
130
+ },
131
+ {
132
+ name: 'User (~/.b2c/scaffolds/)',
133
+ value: 'user',
134
+ description: 'Scaffold available to all your projects',
135
+ },
136
+ ],
137
+ });
138
+ location = selectedLocation;
139
+ scaffoldDir =
140
+ location === 'user'
141
+ ? path.join(os.homedir(), '.b2c', 'scaffolds', scaffoldName)
142
+ : path.join(process.cwd(), '.b2c', 'scaffolds', scaffoldName);
143
+ }
144
+ // Check if scaffold already exists
145
+ try {
146
+ await fs.access(scaffoldDir);
147
+ if (!this.flags.force) {
148
+ this.error(`Scaffold already exists at ${scaffoldDir}. Use --force to overwrite.`);
149
+ }
150
+ }
151
+ catch {
152
+ // Directory doesn't exist, which is what we want
153
+ }
154
+ // Gather additional info interactively
155
+ let displayName = scaffoldName
156
+ .split('-')
157
+ .map((w) => w.charAt(0).toUpperCase() + w.slice(1))
158
+ .join(' ');
159
+ let description = 'A custom scaffold';
160
+ let category = 'cartridge';
161
+ if (isTTY && !this.jsonEnabled()) {
162
+ displayName = await input({
163
+ message: 'Display name for the scaffold:',
164
+ default: displayName,
165
+ });
166
+ description = await input({
167
+ message: 'Describe what this scaffold creates:',
168
+ default: description,
169
+ });
170
+ category = (await select({
171
+ message: 'Category for the scaffold:',
172
+ choices: [
173
+ { name: 'Cartridge', value: 'cartridge' },
174
+ { name: 'Custom API', value: 'custom-api' },
175
+ { name: 'Page Designer', value: 'page-designer' },
176
+ { name: 'Job', value: 'job' },
177
+ { name: 'Metadata', value: 'metadata' },
178
+ ],
179
+ }));
180
+ }
181
+ // Create the scaffold directory structure
182
+ const filesDir = path.join(scaffoldDir, 'files');
183
+ await fs.mkdir(filesDir, { recursive: true });
184
+ // Generate scaffold.json
185
+ const manifestContent = SCAFFOLD_TEMPLATE.replaceAll('{{name}}', scaffoldName)
186
+ .replaceAll('{{displayName}}', displayName)
187
+ .replaceAll('{{description}}', description)
188
+ .replaceAll('{{category}}', category);
189
+ await fs.writeFile(path.join(scaffoldDir, 'scaffold.json'), manifestContent, 'utf8');
190
+ // Generate example template
191
+ const exampleContent = EXAMPLE_TEMPLATE.replaceAll('{{name}}', scaffoldName);
192
+ await fs.writeFile(path.join(filesDir, 'example.txt.ejs'), exampleContent, 'utf8');
193
+ const createdFiles = ['scaffold.json', 'files/example.txt.ejs'];
194
+ const response = {
195
+ name: scaffoldName,
196
+ path: scaffoldDir,
197
+ location,
198
+ files: createdFiles,
199
+ };
200
+ if (this.jsonEnabled()) {
201
+ return response;
202
+ }
203
+ this.log('');
204
+ this.log(t('commands.scaffold.init.success', 'Scaffold "{{name}}" created successfully!', { name: scaffoldName }));
205
+ this.log('');
206
+ this.log(`Location: ${scaffoldDir}`);
207
+ this.log('');
208
+ this.log('Created files:');
209
+ for (const file of createdFiles) {
210
+ this.log(` + ${file}`);
211
+ }
212
+ this.log('');
213
+ this.log('Next steps:');
214
+ this.log(' 1. Edit scaffold.json to define your parameters');
215
+ this.log(' 2. Add template files in the files/ directory');
216
+ this.log(' 3. Test with: b2c scaffold generate ' + scaffoldName + ' --dry-run');
217
+ this.log(' 4. Validate with: b2c scaffold validate ' + scaffoldDir);
218
+ return response;
219
+ }
220
+ }
221
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/scaffold/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { BaseCommand } from '@salesforce/b2c-tooling-sdk/cli';
2
+ import { type ScaffoldCategory, type ScaffoldSource } from '@salesforce/b2c-tooling-sdk/scaffold';
3
+ /**
4
+ * Response type for the list command.
5
+ */
6
+ interface ScaffoldListResponse {
7
+ count: number;
8
+ categories: ScaffoldCategory[];
9
+ sources: ScaffoldSource[];
10
+ data: Array<{
11
+ id: string;
12
+ displayName: string;
13
+ description: string;
14
+ category: ScaffoldCategory;
15
+ source: string;
16
+ path: string;
17
+ }>;
18
+ }
19
+ /**
20
+ * Command to list available project scaffolds.
21
+ */
22
+ export default class ScaffoldList extends BaseCommand<typeof ScaffoldList> {
23
+ static description: string;
24
+ static enableJsonFlag: boolean;
25
+ static examples: string[];
26
+ static flags: {
27
+ category: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
28
+ source: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
29
+ columns: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
30
+ extended: import("@oclif/core/interfaces").BooleanFlag<boolean>;
31
+ };
32
+ run(): Promise<ScaffoldListResponse>;
33
+ /**
34
+ * Determines which columns to display based on flags.
35
+ */
36
+ private getSelectedColumns;
37
+ }
38
+ export {};