@salesforce/b2c-cli 0.0.0-nightly.20260119053920

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 (169) hide show
  1. package/README.md +222 -0
  2. package/bin/dev.cmd +3 -0
  3. package/bin/dev.js +17 -0
  4. package/bin/run.cmd +3 -0
  5. package/bin/run.js +17 -0
  6. package/dist/commands/_test/index.d.ts +6 -0
  7. package/dist/commands/_test/index.js +39 -0
  8. package/dist/commands/_test/index.js.map +1 -0
  9. package/dist/commands/auth/token.d.ts +16 -0
  10. package/dist/commands/auth/token.js +35 -0
  11. package/dist/commands/auth/token.js.map +1 -0
  12. package/dist/commands/code/activate.d.ts +33 -0
  13. package/dist/commands/code/activate.js +83 -0
  14. package/dist/commands/code/activate.js.map +1 -0
  15. package/dist/commands/code/delete.d.ts +33 -0
  16. package/dist/commands/code/delete.js +67 -0
  17. package/dist/commands/code/delete.js.map +1 -0
  18. package/dist/commands/code/deploy.d.ts +38 -0
  19. package/dist/commands/code/deploy.js +141 -0
  20. package/dist/commands/code/deploy.js.map +1 -0
  21. package/dist/commands/code/list.d.ts +8 -0
  22. package/dist/commands/code/list.js +64 -0
  23. package/dist/commands/code/list.js.map +1 -0
  24. package/dist/commands/code/watch.d.ts +34 -0
  25. package/dist/commands/code/watch.js +70 -0
  26. package/dist/commands/code/watch.js.map +1 -0
  27. package/dist/commands/docs/download.d.ts +35 -0
  28. package/dist/commands/docs/download.js +58 -0
  29. package/dist/commands/docs/download.js.map +1 -0
  30. package/dist/commands/docs/read.d.ts +29 -0
  31. package/dist/commands/docs/read.js +70 -0
  32. package/dist/commands/docs/read.js.map +1 -0
  33. package/dist/commands/docs/schema.d.ts +32 -0
  34. package/dist/commands/docs/schema.js +68 -0
  35. package/dist/commands/docs/schema.js.map +1 -0
  36. package/dist/commands/docs/search.d.ts +33 -0
  37. package/dist/commands/docs/search.js +102 -0
  38. package/dist/commands/docs/search.js.map +1 -0
  39. package/dist/commands/job/export.d.ts +50 -0
  40. package/dist/commands/job/export.js +270 -0
  41. package/dist/commands/job/export.js.map +1 -0
  42. package/dist/commands/job/import.d.ts +38 -0
  43. package/dist/commands/job/import.js +143 -0
  44. package/dist/commands/job/import.js.map +1 -0
  45. package/dist/commands/job/run.d.ts +45 -0
  46. package/dist/commands/job/run.js +205 -0
  47. package/dist/commands/job/run.js.map +1 -0
  48. package/dist/commands/job/search.d.ts +37 -0
  49. package/dist/commands/job/search.js +102 -0
  50. package/dist/commands/job/search.js.map +1 -0
  51. package/dist/commands/job/wait.d.ts +38 -0
  52. package/dist/commands/job/wait.js +85 -0
  53. package/dist/commands/job/wait.js.map +1 -0
  54. package/dist/commands/mrt/env/create.d.ts +41 -0
  55. package/dist/commands/mrt/env/create.js +226 -0
  56. package/dist/commands/mrt/env/create.js.map +1 -0
  57. package/dist/commands/mrt/env/delete.d.ts +34 -0
  58. package/dist/commands/mrt/env/delete.js +94 -0
  59. package/dist/commands/mrt/env/delete.js.map +1 -0
  60. package/dist/commands/mrt/env/var/delete.d.ts +34 -0
  61. package/dist/commands/mrt/env/var/delete.js +53 -0
  62. package/dist/commands/mrt/env/var/delete.js.map +1 -0
  63. package/dist/commands/mrt/env/var/list.d.ts +28 -0
  64. package/dist/commands/mrt/env/var/list.js +71 -0
  65. package/dist/commands/mrt/env/var/list.js.map +1 -0
  66. package/dist/commands/mrt/env/var/set.d.ts +35 -0
  67. package/dist/commands/mrt/env/var/set.js +84 -0
  68. package/dist/commands/mrt/env/var/set.js.map +1 -0
  69. package/dist/commands/mrt/push.d.ts +37 -0
  70. package/dist/commands/mrt/push.js +122 -0
  71. package/dist/commands/mrt/push.js.map +1 -0
  72. package/dist/commands/ods/create.d.ts +42 -0
  73. package/dist/commands/ods/create.js +255 -0
  74. package/dist/commands/ods/create.js.map +1 -0
  75. package/dist/commands/ods/delete.d.ts +15 -0
  76. package/dist/commands/ods/delete.js +86 -0
  77. package/dist/commands/ods/delete.js.map +1 -0
  78. package/dist/commands/ods/get.d.ts +17 -0
  79. package/dist/commands/ods/get.js +99 -0
  80. package/dist/commands/ods/get.js.map +1 -0
  81. package/dist/commands/ods/info.d.ts +27 -0
  82. package/dist/commands/ods/info.js +109 -0
  83. package/dist/commands/ods/info.js.map +1 -0
  84. package/dist/commands/ods/list.d.ts +31 -0
  85. package/dist/commands/ods/list.js +166 -0
  86. package/dist/commands/ods/list.js.map +1 -0
  87. package/dist/commands/ods/restart.d.ts +16 -0
  88. package/dist/commands/ods/restart.js +51 -0
  89. package/dist/commands/ods/restart.js.map +1 -0
  90. package/dist/commands/ods/start.d.ts +16 -0
  91. package/dist/commands/ods/start.js +51 -0
  92. package/dist/commands/ods/start.js.map +1 -0
  93. package/dist/commands/ods/stop.d.ts +16 -0
  94. package/dist/commands/ods/stop.js +51 -0
  95. package/dist/commands/ods/stop.js.map +1 -0
  96. package/dist/commands/scapi/custom/status.d.ts +81 -0
  97. package/dist/commands/scapi/custom/status.js +321 -0
  98. package/dist/commands/scapi/custom/status.js.map +1 -0
  99. package/dist/commands/scapi/schemas/get.d.ts +86 -0
  100. package/dist/commands/scapi/schemas/get.js +317 -0
  101. package/dist/commands/scapi/schemas/get.js.map +1 -0
  102. package/dist/commands/scapi/schemas/list.d.ts +48 -0
  103. package/dist/commands/scapi/schemas/list.js +148 -0
  104. package/dist/commands/scapi/schemas/list.js.map +1 -0
  105. package/dist/commands/sites/list.d.ts +10 -0
  106. package/dist/commands/sites/list.js +56 -0
  107. package/dist/commands/sites/list.js.map +1 -0
  108. package/dist/commands/slas/client/create.d.ts +38 -0
  109. package/dist/commands/slas/client/create.js +168 -0
  110. package/dist/commands/slas/client/create.js.map +1 -0
  111. package/dist/commands/slas/client/delete.d.ts +34 -0
  112. package/dist/commands/slas/client/delete.js +54 -0
  113. package/dist/commands/slas/client/delete.js.map +1 -0
  114. package/dist/commands/slas/client/get.d.ts +29 -0
  115. package/dist/commands/slas/client/get.js +51 -0
  116. package/dist/commands/slas/client/get.js.map +1 -0
  117. package/dist/commands/slas/client/list.d.ts +30 -0
  118. package/dist/commands/slas/client/list.js +64 -0
  119. package/dist/commands/slas/client/list.js.map +1 -0
  120. package/dist/commands/slas/client/open.d.ts +25 -0
  121. package/dist/commands/slas/client/open.js +56 -0
  122. package/dist/commands/slas/client/open.js.map +1 -0
  123. package/dist/commands/slas/client/update.d.ts +60 -0
  124. package/dist/commands/slas/client/update.js +183 -0
  125. package/dist/commands/slas/client/update.js.map +1 -0
  126. package/dist/commands/webdav/get.d.ts +41 -0
  127. package/dist/commands/webdav/get.js +61 -0
  128. package/dist/commands/webdav/get.js.map +1 -0
  129. package/dist/commands/webdav/ls.d.ts +17 -0
  130. package/dist/commands/webdav/ls.js +101 -0
  131. package/dist/commands/webdav/ls.js.map +1 -0
  132. package/dist/commands/webdav/mkdir.d.ts +19 -0
  133. package/dist/commands/webdav/mkdir.js +48 -0
  134. package/dist/commands/webdav/mkdir.js.map +1 -0
  135. package/dist/commands/webdav/put.d.ts +23 -0
  136. package/dist/commands/webdav/put.js +107 -0
  137. package/dist/commands/webdav/put.js.map +1 -0
  138. package/dist/commands/webdav/rm.d.ts +40 -0
  139. package/dist/commands/webdav/rm.js +67 -0
  140. package/dist/commands/webdav/rm.js.map +1 -0
  141. package/dist/commands/webdav/unzip.d.ts +15 -0
  142. package/dist/commands/webdav/unzip.js +48 -0
  143. package/dist/commands/webdav/unzip.js.map +1 -0
  144. package/dist/commands/webdav/zip.d.ts +15 -0
  145. package/dist/commands/webdav/zip.js +47 -0
  146. package/dist/commands/webdav/zip.js.map +1 -0
  147. package/dist/i18n/index.d.ts +29 -0
  148. package/dist/i18n/index.js +43 -0
  149. package/dist/i18n/index.js.map +1 -0
  150. package/dist/i18n/locales/de.d.ts +51 -0
  151. package/dist/i18n/locales/de.js +57 -0
  152. package/dist/i18n/locales/de.js.map +1 -0
  153. package/dist/i18n/locales/en.d.ts +118 -0
  154. package/dist/i18n/locales/en.js +124 -0
  155. package/dist/i18n/locales/en.js.map +1 -0
  156. package/dist/i18n/locales/index.d.ts +177 -0
  157. package/dist/i18n/locales/index.js +26 -0
  158. package/dist/i18n/locales/index.js.map +1 -0
  159. package/dist/index.d.ts +3 -0
  160. package/dist/index.js +13 -0
  161. package/dist/index.js.map +1 -0
  162. package/dist/utils/scapi/schemas.d.ts +40 -0
  163. package/dist/utils/scapi/schemas.js +49 -0
  164. package/dist/utils/scapi/schemas.js.map +1 -0
  165. package/dist/utils/slas/client.d.ts +65 -0
  166. package/dist/utils/slas/client.js +146 -0
  167. package/dist/utils/slas/client.js.map +1 -0
  168. package/oclif.manifest.json +10942 -0
  169. package/package.json +154 -0
@@ -0,0 +1,141 @@
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 { Flags } from '@oclif/core';
7
+ import { uploadCartridges, deleteCartridges, getActiveCodeVersion, reloadCodeVersion, } from '@salesforce/b2c-tooling-sdk/operations/code';
8
+ import { CartridgeCommand } from '@salesforce/b2c-tooling-sdk/cli';
9
+ import { t } from '../../i18n/index.js';
10
+ export default class CodeDeploy extends CartridgeCommand {
11
+ static args = {
12
+ ...CartridgeCommand.baseArgs,
13
+ };
14
+ static description = t('commands.code.deploy.description', 'Deploy cartridges to a B2C Commerce instance');
15
+ static enableJsonFlag = true;
16
+ static examples = [
17
+ '<%= config.bin %> <%= command.id %>',
18
+ '<%= config.bin %> <%= command.id %> ./my-cartridges',
19
+ '<%= config.bin %> <%= command.id %> --server my-sandbox.demandware.net --code-version v1',
20
+ '<%= config.bin %> <%= command.id %> --reload',
21
+ '<%= config.bin %> <%= command.id %> --delete --reload',
22
+ '<%= config.bin %> <%= command.id %> -c app_storefront_base -c plugin_applepay',
23
+ '<%= config.bin %> <%= command.id %> -x test_cartridge',
24
+ ];
25
+ static flags = {
26
+ ...CartridgeCommand.baseFlags,
27
+ ...CartridgeCommand.cartridgeFlags,
28
+ reload: Flags.boolean({
29
+ char: 'r',
30
+ description: 'Reload (re-activate) code version after deploy',
31
+ default: false,
32
+ }),
33
+ delete: Flags.boolean({
34
+ description: 'Delete existing cartridges before upload',
35
+ default: false,
36
+ }),
37
+ };
38
+ async run() {
39
+ this.requireWebDavCredentials();
40
+ this.requireOAuthCredentials();
41
+ const hostname = this.resolvedConfig.values.hostname;
42
+ let version = this.resolvedConfig.values.codeVersion;
43
+ // If no code version specified, discover the active one
44
+ if (!version) {
45
+ this.warn(t('commands.code.deploy.noCodeVersion', 'No code version specified, discovering active code version...'));
46
+ const activeVersion = await getActiveCodeVersion(this.instance);
47
+ if (!activeVersion?.id) {
48
+ this.error(t('commands.code.deploy.noActiveVersion', 'No active code version found. Specify one with --code-version.'));
49
+ }
50
+ version = activeVersion.id;
51
+ // Update the instance config so findAndDeployCartridges uses it
52
+ this.instance.config.codeVersion = version;
53
+ }
54
+ // Create lifecycle context
55
+ const context = this.createContext('code:deploy', {
56
+ cartridgePath: this.cartridgePath,
57
+ hostname,
58
+ codeVersion: version,
59
+ reload: this.flags.reload,
60
+ delete: this.flags.delete,
61
+ ...this.cartridgeOptions,
62
+ });
63
+ // Run beforeOperation hooks - check for skip
64
+ const beforeResult = await this.runBeforeHooks(context);
65
+ if (beforeResult.skip) {
66
+ this.log(t('commands.code.deploy.skipped', 'Deployment skipped: {{reason}}', {
67
+ reason: beforeResult.skipReason || 'skipped by plugin',
68
+ }));
69
+ return {
70
+ cartridges: [],
71
+ codeVersion: version,
72
+ reloaded: false,
73
+ };
74
+ }
75
+ // Find cartridges using providers (supports custom discovery plugins)
76
+ const cartridges = await this.findCartridgesWithProviders();
77
+ if (cartridges.length === 0) {
78
+ this.error(t('commands.code.deploy.noCartridges', 'No cartridges found in {{path}}', { path: this.cartridgePath }));
79
+ }
80
+ this.logger?.info({ path: this.cartridgePath, server: hostname, codeVersion: version }, t('commands.code.deploy.deploying', 'Deploying {{path}} to {{hostname}} ({{version}})', {
81
+ path: this.cartridgePath,
82
+ hostname,
83
+ version,
84
+ }));
85
+ // Log found cartridges
86
+ for (const c of cartridges) {
87
+ this.logger?.debug({ cartridgeName: c.name, path: c.src }, ` ${c.name}`);
88
+ }
89
+ try {
90
+ // Optionally delete existing cartridges first
91
+ if (this.flags.delete) {
92
+ await deleteCartridges(this.instance, cartridges);
93
+ }
94
+ // Upload cartridges
95
+ await uploadCartridges(this.instance, cartridges);
96
+ // Optionally reload code version
97
+ let reloaded = false;
98
+ if (this.flags.reload) {
99
+ try {
100
+ await reloadCodeVersion(this.instance, version);
101
+ reloaded = true;
102
+ }
103
+ catch (error) {
104
+ this.logger?.debug(`Could not reload code version: ${error instanceof Error ? error.message : error}`);
105
+ }
106
+ }
107
+ const result = {
108
+ cartridges,
109
+ codeVersion: version,
110
+ reloaded,
111
+ };
112
+ this.logger?.info({ codeVersion: result.codeVersion, cartridgeCount: result.cartridges.length }, t('commands.code.deploy.summary', 'Deployed {{count}} cartridge(s) to {{codeVersion}}', {
113
+ count: result.cartridges.length,
114
+ codeVersion: result.codeVersion,
115
+ }));
116
+ if (result.reloaded) {
117
+ this.log(t('commands.code.deploy.reloaded', 'Code version reloaded'));
118
+ }
119
+ // Run afterOperation hooks with success
120
+ await this.runAfterHooks(context, {
121
+ success: true,
122
+ duration: Date.now() - context.startTime,
123
+ data: result,
124
+ });
125
+ return result;
126
+ }
127
+ catch (error) {
128
+ // Run afterOperation hooks with failure
129
+ await this.runAfterHooks(context, {
130
+ success: false,
131
+ error: error instanceof Error ? error : new Error(String(error)),
132
+ duration: Date.now() - context.startTime,
133
+ });
134
+ if (error instanceof Error) {
135
+ this.error(t('commands.code.deploy.failed', 'Deployment failed: {{message}}', { message: error.message }));
136
+ }
137
+ throw error;
138
+ }
139
+ }
140
+ }
141
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../src/commands/code/deploy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAC;AAClC,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,GAElB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAC,gBAAgB,EAAC,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAC,CAAC,EAAC,MAAM,qBAAqB,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,gBAAmC;IACzE,MAAM,CAAC,IAAI,GAAG;QACZ,GAAG,gBAAgB,CAAC,QAAQ;KAC7B,CAAC;IAEF,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,kCAAkC,EAAE,8CAA8C,CAAC,CAAC;IAE3G,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;IAE7B,MAAM,CAAC,QAAQ,GAAG;QAChB,qCAAqC;QACrC,qDAAqD;QACrD,0FAA0F;QAC1F,8CAA8C;QAC9C,uDAAuD;QACvD,+EAA+E;QAC/E,uDAAuD;KACxD,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,gBAAgB,CAAC,SAAS;QAC7B,GAAG,gBAAgB,CAAC,cAAc;QAClC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC;YACpB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,gDAAgD;YAC7D,OAAO,EAAE,KAAK;SACf,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC;YACpB,WAAW,EAAE,0CAA0C;YACvD,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAE/B,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAS,CAAC;QACtD,IAAI,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC;QAErD,wDAAwD;QACxD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CACP,CAAC,CAAC,oCAAoC,EAAE,+DAA+D,CAAC,CACzG,CAAC;YACF,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAChE,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE,CAAC;gBACvB,IAAI,CAAC,KAAK,CACR,CAAC,CAAC,sCAAsC,EAAE,gEAAgE,CAAC,CAC5G,CAAC;YACJ,CAAC;YACD,OAAO,GAAG,aAAa,CAAC,EAAE,CAAC;YAC3B,gEAAgE;YAChE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC;QAC7C,CAAC;QAED,2BAA2B;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;YAChD,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,QAAQ;YACR,WAAW,EAAE,OAAO;YACpB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YACzB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YACzB,GAAG,IAAI,CAAC,gBAAgB;SACzB,CAAC,CAAC;QAEH,6CAA6C;QAC7C,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACxD,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,CACN,CAAC,CAAC,8BAA8B,EAAE,gCAAgC,EAAE;gBAClE,MAAM,EAAE,YAAY,CAAC,UAAU,IAAI,mBAAmB;aACvD,CAAC,CACH,CAAC;YACF,OAAO;gBACL,UAAU,EAAE,EAAE;gBACd,WAAW,EAAE,OAAO;gBACpB,QAAQ,EAAE,KAAK;aAChB,CAAC;QACJ,CAAC;QAED,sEAAsE;QACtE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,2BAA2B,EAAE,CAAC;QAE5D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,mCAAmC,EAAE,iCAAiC,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAC,CAAC,CAAC,CAAC;QACpH,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,IAAI,CACf,EAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAC,EAClE,CAAC,CAAC,gCAAgC,EAAE,kDAAkD,EAAE;YACtF,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,QAAQ;YACR,OAAO;SACR,CAAC,CACH,CAAC;QAEF,uBAAuB;QACvB,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAC,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,EAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,CAAC;YACH,8CAA8C;YAC9C,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACtB,MAAM,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACpD,CAAC;YAED,oBAAoB;YACpB,MAAM,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAElD,iCAAiC;YACjC,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACtB,IAAI,CAAC;oBACH,MAAM,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;oBAChD,QAAQ,GAAG,IAAI,CAAC;gBAClB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,kCAAkC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;gBACzG,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAiB;gBAC3B,UAAU;gBACV,WAAW,EAAE,OAAO;gBACpB,QAAQ;aACT,CAAC;YAEF,IAAI,CAAC,MAAM,EAAE,IAAI,CACf,EAAC,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,EAAC,EAC3E,CAAC,CAAC,8BAA8B,EAAE,oDAAoD,EAAE;gBACtF,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM;gBAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;aAChC,CAAC,CACH,CAAC;YAEF,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,+BAA+B,EAAE,uBAAuB,CAAC,CAAC,CAAC;YACxE,CAAC;YAED,wCAAwC;YACxC,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;gBAChC,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS;gBACxC,IAAI,EAAE,MAAM;aACb,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wCAAwC;YACxC,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;gBAChC,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS;aACzC,CAAC,CAAC;YAEH,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,6BAA6B,EAAE,gCAAgC,EAAE,EAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAC,CAAC,CAAC,CAAC;YAC3G,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { InstanceCommand } from '@salesforce/b2c-tooling-sdk/cli';
2
+ import { type CodeVersionResult } from '@salesforce/b2c-tooling-sdk/operations/code';
3
+ export default class CodeList extends InstanceCommand<typeof CodeList> {
4
+ static description: string;
5
+ static enableJsonFlag: boolean;
6
+ static examples: string[];
7
+ run(): Promise<CodeVersionResult>;
8
+ }
@@ -0,0 +1,64 @@
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 { ux } from '@oclif/core';
7
+ import { InstanceCommand, createTable } from '@salesforce/b2c-tooling-sdk/cli';
8
+ import { listCodeVersions } from '@salesforce/b2c-tooling-sdk/operations/code';
9
+ import { t } from '../../i18n/index.js';
10
+ const COLUMNS = {
11
+ id: {
12
+ header: 'ID',
13
+ get: (v) => v.id || '-',
14
+ },
15
+ active: {
16
+ header: 'Active',
17
+ get: (v) => (v.active ? 'Yes' : 'No'),
18
+ },
19
+ rollback: {
20
+ header: 'Rollback',
21
+ get: (v) => (v.rollback ? 'Yes' : 'No'),
22
+ },
23
+ lastModified: {
24
+ header: 'Last Modified',
25
+ get: (v) => (v.last_modification_time ? new Date(v.last_modification_time).toLocaleString() : '-'),
26
+ },
27
+ cartridges: {
28
+ header: 'Cartridges',
29
+ get: (v) => String(v.cartridges?.length ?? 0),
30
+ },
31
+ };
32
+ const DEFAULT_COLUMNS = ['id', 'active', 'rollback', 'lastModified', 'cartridges'];
33
+ export default class CodeList extends InstanceCommand {
34
+ static description = t('commands.code.list.description', 'List code versions on a B2C Commerce instance');
35
+ static enableJsonFlag = true;
36
+ static examples = [
37
+ '<%= config.bin %> <%= command.id %>',
38
+ '<%= config.bin %> <%= command.id %> --server my-sandbox.demandware.net',
39
+ '<%= config.bin %> <%= command.id %> --json',
40
+ ];
41
+ async run() {
42
+ this.requireOAuthCredentials();
43
+ const hostname = this.resolvedConfig.values.hostname;
44
+ this.log(t('commands.code.list.fetching', 'Fetching code versions from {{hostname}}...', { hostname }));
45
+ const versions = await listCodeVersions(this.instance);
46
+ const result = {
47
+ count: versions.length,
48
+ data: versions,
49
+ total: versions.length,
50
+ };
51
+ // In JSON mode, just return the data - oclif handles output to stdout
52
+ if (this.jsonEnabled()) {
53
+ return result;
54
+ }
55
+ // Human-readable table output to stdout
56
+ if (versions.length === 0) {
57
+ ux.stdout(t('commands.code.list.noVersions', 'No code versions found.'));
58
+ return result;
59
+ }
60
+ createTable(COLUMNS).render(versions, DEFAULT_COLUMNS);
61
+ return result;
62
+ }
63
+ }
64
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/code/list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAC,EAAE,EAAC,MAAM,aAAa,CAAC;AAC/B,OAAO,EAAC,eAAe,EAAE,WAAW,EAAiB,MAAM,iCAAiC,CAAC;AAC7F,OAAO,EAAC,gBAAgB,EAA2C,MAAM,6CAA6C,CAAC;AACvH,OAAO,EAAC,CAAC,EAAC,MAAM,qBAAqB,CAAC;AAEtC,MAAM,OAAO,GAA2C;IACtD,EAAE,EAAE;QACF,MAAM,EAAE,IAAI;QACZ,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG;KACxB;IACD,MAAM,EAAE;QACN,MAAM,EAAE,QAAQ;QAChB,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;KACtC;IACD,QAAQ,EAAE;QACR,MAAM,EAAE,UAAU;QAClB,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;KACxC;IACD,YAAY,EAAE;QACZ,MAAM,EAAE,eAAe;QACvB,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;KACnG;IACD,UAAU,EAAE;QACV,MAAM,EAAE,YAAY;QACpB,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC;KAC9C;CACF,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;AAEnF,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,eAAgC;IACpE,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,gCAAgC,EAAE,+CAA+C,CAAC,CAAC;IAE1G,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;IAE7B,MAAM,CAAC,QAAQ,GAAG;QAChB,qCAAqC;QACrC,wEAAwE;QACxE,4CAA4C;KAC7C,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAE/B,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAS,CAAC;QAEtD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,6BAA6B,EAAE,6CAA6C,EAAE,EAAC,QAAQ,EAAC,CAAC,CAAC,CAAC;QAEtG,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEvD,MAAM,MAAM,GAAsB;YAChC,KAAK,EAAE,QAAQ,CAAC,MAAM;YACtB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,QAAQ,CAAC,MAAM;SACvB,CAAC;QAEF,sEAAsE;QACtE,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,wCAAwC;QACxC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,+BAA+B,EAAE,yBAAyB,CAAC,CAAC,CAAC;YACzE,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QAEvD,OAAO,MAAM,CAAC;IAChB,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { CartridgeCommand } from '@salesforce/b2c-tooling-sdk/cli';
2
+ export default class CodeWatch extends CartridgeCommand<typeof CodeWatch> {
3
+ static args: {
4
+ cartridgePath: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
5
+ };
6
+ static description: string;
7
+ static examples: string[];
8
+ static flags: {
9
+ cartridge: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ 'exclude-cartridge': import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ server: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ 'webdav-server': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ 'code-version': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ username: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ password: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ 'client-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ 'client-secret': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ scope: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
+ 'short-code': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
20
+ 'auth-methods': import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
21
+ 'account-manager-host': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
22
+ 'log-level': import("@oclif/core/interfaces").OptionFlag<"trace" | "debug" | "info" | "warn" | "error" | "silent" | undefined, import("@oclif/core/interfaces").CustomOptions>;
23
+ debug: import("@oclif/core/interfaces").BooleanFlag<boolean>;
24
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
25
+ lang: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
26
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
27
+ instance: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
28
+ 'working-directory': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
29
+ 'extra-query': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
30
+ 'extra-body': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
31
+ 'extra-headers': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
32
+ };
33
+ run(): Promise<void>;
34
+ }
@@ -0,0 +1,70 @@
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 { watchCartridges } from '@salesforce/b2c-tooling-sdk/operations/code';
7
+ import { CartridgeCommand } from '@salesforce/b2c-tooling-sdk/cli';
8
+ import { t } from '../../i18n/index.js';
9
+ export default class CodeWatch extends CartridgeCommand {
10
+ static args = {
11
+ ...CartridgeCommand.baseArgs,
12
+ };
13
+ static description = t('commands.code.watch.description', 'Watch cartridges and upload changes to an instance');
14
+ static examples = [
15
+ '<%= config.bin %> <%= command.id %>',
16
+ '<%= config.bin %> <%= command.id %> ./my-cartridges',
17
+ '<%= config.bin %> <%= command.id %> --server my-sandbox.demandware.net --code-version v1',
18
+ '<%= config.bin %> <%= command.id %> -c app_storefront_base',
19
+ '<%= config.bin %> <%= command.id %> -x test_cartridge',
20
+ ];
21
+ static flags = {
22
+ ...CartridgeCommand.baseFlags,
23
+ ...CartridgeCommand.cartridgeFlags,
24
+ };
25
+ async run() {
26
+ this.requireWebDavCredentials();
27
+ this.requireOAuthCredentials();
28
+ const hostname = this.resolvedConfig.values.hostname;
29
+ const version = this.resolvedConfig.values.codeVersion;
30
+ this.log(t('commands.code.watch.starting', 'Starting watcher for {{path}}', { path: this.cartridgePath }));
31
+ this.log(t('commands.code.watch.target', 'Target: {{hostname}}', { hostname }));
32
+ if (version) {
33
+ this.log(t('commands.code.watch.codeVersion', 'Code Version: {{version}}', { version }));
34
+ }
35
+ try {
36
+ const result = await watchCartridges(this.instance, this.cartridgePath, {
37
+ ...this.cartridgeOptions,
38
+ onUpload: (files) => {
39
+ this.log(t('commands.code.watch.uploaded', '[UPLOAD] {{count}} file(s)', { count: files.length }));
40
+ },
41
+ onDelete: (files) => {
42
+ this.log(t('commands.code.watch.deleted', '[DELETE] {{count}} file(s)', { count: files.length }));
43
+ },
44
+ onError: (error) => {
45
+ this.warn(t('commands.code.watch.error', 'Error: {{message}}', { message: error.message }));
46
+ },
47
+ });
48
+ this.log(t('commands.code.watch.watching', 'Watching {{count}} cartridge(s)...', { count: result.cartridges.length }));
49
+ this.log(t('commands.code.watch.pressCtrlC', 'Press Ctrl+C to stop'));
50
+ // Keep the process running until interrupted
51
+ await new Promise((resolve) => {
52
+ const cleanup = () => {
53
+ this.log(t('commands.code.watch.stopping', '\nStopping watcher...'));
54
+ result.stop().then(() => {
55
+ resolve();
56
+ });
57
+ };
58
+ process.on('SIGINT', cleanup);
59
+ process.on('SIGTERM', cleanup);
60
+ });
61
+ }
62
+ catch (error) {
63
+ if (error instanceof Error) {
64
+ this.error(t('commands.code.watch.failed', 'Watch failed: {{message}}', { message: error.message }));
65
+ }
66
+ throw error;
67
+ }
68
+ }
69
+ }
70
+ //# sourceMappingURL=watch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/commands/code/watch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { InstanceCommand } from '@salesforce/b2c-tooling-sdk/cli';
2
+ import { type DownloadDocsResult } from '@salesforce/b2c-tooling-sdk/operations/docs';
3
+ export default class DocsDownload extends InstanceCommand<typeof DocsDownload> {
4
+ static args: {
5
+ output: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
6
+ };
7
+ static description: string;
8
+ static enableJsonFlag: boolean;
9
+ static examples: string[];
10
+ static flags: {
11
+ 'keep-archive': import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ server: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ 'webdav-server': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ 'code-version': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ username: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ password: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ 'client-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ 'client-secret': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
+ scope: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
20
+ 'short-code': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
21
+ 'auth-methods': import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
22
+ 'account-manager-host': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
23
+ 'log-level': import("@oclif/core/interfaces").OptionFlag<"trace" | "debug" | "info" | "warn" | "error" | "silent" | undefined, import("@oclif/core/interfaces").CustomOptions>;
24
+ debug: import("@oclif/core/interfaces").BooleanFlag<boolean>;
25
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
26
+ lang: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
27
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
28
+ instance: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
29
+ 'working-directory': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
30
+ 'extra-query': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
31
+ 'extra-body': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
32
+ 'extra-headers': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
33
+ };
34
+ run(): Promise<DownloadDocsResult>;
35
+ }
@@ -0,0 +1,58 @@
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 { InstanceCommand } from '@salesforce/b2c-tooling-sdk/cli';
8
+ import { downloadDocs } from '@salesforce/b2c-tooling-sdk/operations/docs';
9
+ import { t } from '../../i18n/index.js';
10
+ export default class DocsDownload extends InstanceCommand {
11
+ static args = {
12
+ output: Args.string({
13
+ description: 'Output directory for extracted documentation',
14
+ required: true,
15
+ }),
16
+ };
17
+ static description = t('commands.docs.download.description', 'Download Script API documentation from a B2C Commerce instance');
18
+ static enableJsonFlag = true;
19
+ static examples = [
20
+ '<%= config.bin %> <%= command.id %> ./docs',
21
+ '<%= config.bin %> <%= command.id %> ./docs --keep-archive',
22
+ '<%= config.bin %> <%= command.id %> --server sandbox.demandware.net ./my-docs',
23
+ ];
24
+ static flags = {
25
+ ...InstanceCommand.baseFlags,
26
+ 'keep-archive': Flags.boolean({
27
+ description: 'Keep the downloaded archive file',
28
+ default: false,
29
+ }),
30
+ };
31
+ async run() {
32
+ this.requireServer();
33
+ this.requireWebDavCredentials();
34
+ const outputDir = this.args.output;
35
+ const keepArchive = this.flags['keep-archive'];
36
+ this.log(t('commands.docs.download.downloading', 'Downloading documentation from {{hostname}}...', {
37
+ hostname: this.resolvedConfig.values.hostname,
38
+ }));
39
+ const result = await downloadDocs(this.instance, {
40
+ outputDir,
41
+ keepArchive,
42
+ });
43
+ if (this.jsonEnabled()) {
44
+ return result;
45
+ }
46
+ this.log(t('commands.docs.download.success', 'Downloaded {{count}} documentation files to {{path}}', {
47
+ count: result.fileCount,
48
+ path: result.outputPath,
49
+ }));
50
+ if (result.archivePath) {
51
+ this.log(t('commands.docs.download.archiveKept', 'Archive saved to: {{path}}', {
52
+ path: result.archivePath,
53
+ }));
54
+ }
55
+ return result;
56
+ }
57
+ }
58
+ //# sourceMappingURL=download.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download.js","sourceRoot":"","sources":["../../../src/commands/docs/download.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAC,IAAI,EAAE,KAAK,EAAC,MAAM,aAAa,CAAC;AACxC,OAAO,EAAC,eAAe,EAAC,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAC,YAAY,EAA0B,MAAM,6CAA6C,CAAC;AAClG,OAAO,EAAC,CAAC,EAAC,MAAM,qBAAqB,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,eAAoC;IAC5E,MAAM,CAAC,IAAI,GAAG;QACZ,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;YAClB,WAAW,EAAE,8CAA8C;YAC3D,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAC;IAEF,MAAM,CAAC,WAAW,GAAG,CAAC,CACpB,oCAAoC,EACpC,gEAAgE,CACjE,CAAC;IAEF,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;IAE7B,MAAM,CAAC,QAAQ,GAAG;QAChB,4CAA4C;QAC5C,2DAA2D;QAC3D,+EAA+E;KAChF,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,eAAe,CAAC,SAAS;QAC5B,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC;YAC5B,WAAW,EAAE,kCAAkC;YAC/C,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAEhC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACnC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAE/C,IAAI,CAAC,GAAG,CACN,CAAC,CAAC,oCAAoC,EAAE,gDAAgD,EAAE;YACxF,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ;SAC9C,CAAC,CACH,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC/C,SAAS;YACT,WAAW;SACZ,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,GAAG,CACN,CAAC,CAAC,gCAAgC,EAAE,sDAAsD,EAAE;YAC1F,KAAK,EAAE,MAAM,CAAC,SAAS;YACvB,IAAI,EAAE,MAAM,CAAC,UAAU;SACxB,CAAC,CACH,CAAC;QAEF,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,IAAI,CAAC,GAAG,CACN,CAAC,CAAC,oCAAoC,EAAE,4BAA4B,EAAE;gBACpE,IAAI,EAAE,MAAM,CAAC,WAAW;aACzB,CAAC,CACH,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { BaseCommand } from '@salesforce/b2c-tooling-sdk/cli';
2
+ import { type DocEntry } from '@salesforce/b2c-tooling-sdk/operations/docs';
3
+ interface ReadDocsResult {
4
+ entry: DocEntry;
5
+ content: string;
6
+ }
7
+ export default class DocsRead extends BaseCommand<typeof DocsRead> {
8
+ static args: {
9
+ query: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
10
+ };
11
+ static description: string;
12
+ static enableJsonFlag: boolean;
13
+ static examples: string[];
14
+ static flags: {
15
+ raw: import("@oclif/core/interfaces").BooleanFlag<boolean>;
16
+ 'log-level': import("@oclif/core/interfaces").OptionFlag<"trace" | "debug" | "info" | "warn" | "error" | "silent" | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ debug: import("@oclif/core/interfaces").BooleanFlag<boolean>;
18
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
19
+ lang: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
20
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
21
+ instance: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
22
+ 'working-directory': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
23
+ 'extra-query': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
24
+ 'extra-body': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
25
+ 'extra-headers': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
26
+ };
27
+ run(): Promise<ReadDocsResult>;
28
+ }
29
+ export {};
@@ -0,0 +1,70 @@
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 { marked } from 'marked';
8
+ // eslint-disable-next-line import/namespace
9
+ import { markedTerminal } from 'marked-terminal';
10
+ import { BaseCommand } from '@salesforce/b2c-tooling-sdk/cli';
11
+ import { readDocByQuery } from '@salesforce/b2c-tooling-sdk/operations/docs';
12
+ import { t } from '../../i18n/index.js';
13
+ // Configure marked with terminal renderer
14
+ marked.use(markedTerminal({
15
+ width: 80,
16
+ reflowText: true,
17
+ tableOptions: {
18
+ wordWrap: true,
19
+ colWidths: [35, 45],
20
+ },
21
+ }));
22
+ export default class DocsRead extends BaseCommand {
23
+ static args = {
24
+ query: Args.string({
25
+ description: 'Search query for documentation (class name, module path, or partial match)',
26
+ required: true,
27
+ }),
28
+ };
29
+ static description = t('commands.docs.read.description', 'Read Script API documentation for a class or module');
30
+ static enableJsonFlag = true;
31
+ static examples = [
32
+ '<%= config.bin %> <%= command.id %> ProductMgr',
33
+ '<%= config.bin %> <%= command.id %> dw.catalog.ProductMgr',
34
+ '<%= config.bin %> <%= command.id %> "dw system Status"',
35
+ '<%= config.bin %> <%= command.id %> ProductMgr --raw',
36
+ '<%= config.bin %> <%= command.id %> ProductMgr --json',
37
+ ];
38
+ static flags = {
39
+ ...BaseCommand.baseFlags,
40
+ raw: Flags.boolean({
41
+ char: 'r',
42
+ description: 'Output raw markdown without terminal formatting',
43
+ default: false,
44
+ }),
45
+ };
46
+ async run() {
47
+ const { query } = this.args;
48
+ const { raw } = this.flags;
49
+ const result = readDocByQuery(query);
50
+ if (!result) {
51
+ this.error(t('commands.docs.read.notFound', 'No documentation found matching: {{query}}', { query }), {
52
+ suggestions: ['Try a broader search term', 'Use "b2c docs search <query>" to see available matches'],
53
+ });
54
+ }
55
+ if (this.jsonEnabled()) {
56
+ return result;
57
+ }
58
+ // Determine if we should render markdown for terminal
59
+ const useRaw = raw || !process.stdout.isTTY;
60
+ if (useRaw) {
61
+ process.stdout.write(result.content);
62
+ }
63
+ else {
64
+ const rendered = marked.parse(result.content);
65
+ process.stdout.write(rendered);
66
+ }
67
+ return result;
68
+ }
69
+ }
70
+ //# sourceMappingURL=read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/commands/docs/read.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAC,IAAI,EAAE,KAAK,EAAC,MAAM,aAAa,CAAC;AACxC,OAAO,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;AAC9B,4CAA4C;AAC5C,OAAO,EAAC,cAAc,EAAC,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAC,WAAW,EAAC,MAAM,iCAAiC,CAAC;AAC5D,OAAO,EAAC,cAAc,EAAgB,MAAM,6CAA6C,CAAC;AAC1F,OAAO,EAAC,CAAC,EAAC,MAAM,qBAAqB,CAAC;AAOtC,0CAA0C;AAC1C,MAAM,CAAC,GAAG,CACR,cAAc,CAAC;IACb,KAAK,EAAE,EAAE;IACT,UAAU,EAAE,IAAI;IAChB,YAAY,EAAE;QACZ,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;KACpB;CACF,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,WAA4B;IAChE,MAAM,CAAC,IAAI,GAAG;QACZ,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;YACjB,WAAW,EAAE,4EAA4E;YACzF,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAC;IAEF,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,gCAAgC,EAAE,qDAAqD,CAAC,CAAC;IAEhH,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;IAE7B,MAAM,CAAC,QAAQ,GAAG;QAChB,gDAAgD;QAChD,2DAA2D;QAC3D,wDAAwD;QACxD,sDAAsD;QACtD,uDAAuD;KACxD,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,WAAW,CAAC,SAAS;QACxB,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC;YACjB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,iDAAiD;YAC9D,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAC,KAAK,EAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QAC1B,MAAM,EAAC,GAAG,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAEzB,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAErC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,6BAA6B,EAAE,4CAA4C,EAAE,EAAC,KAAK,EAAC,CAAC,EAAE;gBAClG,WAAW,EAAE,CAAC,2BAA2B,EAAE,wDAAwD,CAAC;aACrG,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,sDAAsD;QACtD,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;QAE5C,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAkB,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { BaseCommand } from '@salesforce/b2c-tooling-sdk/cli';
2
+ import { type SchemaEntry } from '@salesforce/b2c-tooling-sdk/operations/docs';
3
+ interface SchemaResult {
4
+ entry: SchemaEntry;
5
+ content: string;
6
+ }
7
+ interface ListResult {
8
+ entries: SchemaEntry[];
9
+ }
10
+ export default class DocsSchema extends BaseCommand<typeof DocsSchema> {
11
+ static args: {
12
+ query: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
13
+ };
14
+ static description: string;
15
+ static enableJsonFlag: boolean;
16
+ static examples: string[];
17
+ static flags: {
18
+ list: import("@oclif/core/interfaces").BooleanFlag<boolean>;
19
+ 'log-level': import("@oclif/core/interfaces").OptionFlag<"trace" | "debug" | "info" | "warn" | "error" | "silent" | undefined, import("@oclif/core/interfaces").CustomOptions>;
20
+ debug: import("@oclif/core/interfaces").BooleanFlag<boolean>;
21
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
22
+ lang: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
23
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
24
+ instance: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
25
+ 'working-directory': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
26
+ 'extra-query': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
27
+ 'extra-body': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
28
+ 'extra-headers': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
29
+ };
30
+ run(): Promise<ListResult | SchemaResult>;
31
+ }
32
+ export {};