@salesforce/b2c-cli 1.19.1 → 1.20.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.
- package/dist/commands/{setup/ide/prophet.d.ts → docs/cache.d.ts} +12 -18
- package/dist/commands/docs/cache.js +55 -0
- package/dist/commands/docs/cache.js.map +1 -0
- package/dist/commands/docs/read.d.ts +3 -0
- package/dist/commands/docs/read.js +18 -2
- package/dist/commands/docs/read.js.map +1 -1
- package/dist/commands/docs/search.d.ts +3 -6
- package/dist/commands/docs/search.js +11 -48
- package/dist/commands/docs/search.js.map +1 -1
- package/dist/commands/preferences/global/get.d.ts +16 -0
- package/dist/commands/preferences/global/get.js +53 -0
- package/dist/commands/preferences/global/get.js.map +1 -0
- package/dist/commands/preferences/global/list.d.ts +15 -0
- package/dist/commands/preferences/global/list.js +80 -0
- package/dist/commands/preferences/global/list.js.map +1 -0
- package/dist/commands/preferences/global/update.d.ts +18 -0
- package/dist/commands/preferences/global/update.js +102 -0
- package/dist/commands/preferences/global/update.js.map +1 -0
- package/dist/commands/preferences/site/get.d.ts +16 -0
- package/dist/commands/preferences/site/get.js +53 -0
- package/dist/commands/preferences/site/get.js.map +1 -0
- package/dist/commands/preferences/site/list.d.ts +16 -0
- package/dist/commands/preferences/site/list.js +84 -0
- package/dist/commands/preferences/site/list.js.map +1 -0
- package/dist/commands/preferences/site/preference/get.d.ts +16 -0
- package/dist/commands/preferences/site/preference/get.js +52 -0
- package/dist/commands/preferences/site/preference/get.js.map +1 -0
- package/dist/commands/preferences/site/preference/update.d.ts +19 -0
- package/dist/commands/preferences/site/preference/update.js +107 -0
- package/dist/commands/preferences/site/preference/update.js.map +1 -0
- package/dist/commands/preferences/site/search.d.ts +28 -0
- package/dist/commands/preferences/site/search.js +177 -0
- package/dist/commands/preferences/site/search.js.map +1 -0
- package/dist/commands/preferences/site/update.d.ts +19 -0
- package/dist/commands/preferences/site/update.js +103 -0
- package/dist/commands/preferences/site/update.js.map +1 -0
- package/dist/commands/setup/ide/index.js +1 -1
- package/dist/commands/setup/ide/index.js.map +1 -1
- package/dist/commands/setup/index.js +1 -1
- package/dist/commands/setup/index.js.map +1 -1
- package/dist/utils/docs/workspace.d.ts +31 -0
- package/dist/utils/docs/workspace.js +68 -0
- package/dist/utils/docs/workspace.js.map +1 -0
- package/dist/utils/preferences.d.ts +48 -0
- package/dist/utils/preferences.js +125 -0
- package/dist/utils/preferences.js.map +1 -0
- package/oclif.manifest.json +15349 -12530
- package/package.json +18 -2
- package/dist/commands/setup/ide/prophet.js +0 -327
- package/dist/commands/setup/ide/prophet.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@salesforce/b2c-cli",
|
|
3
3
|
"description": "A Salesforce B2C Commerce CLI",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.20.1",
|
|
5
5
|
"author": "Charles Lavery",
|
|
6
6
|
"bin": {
|
|
7
7
|
"b2c": "./bin/run.js"
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"marked": "15.0.12",
|
|
26
26
|
"marked-terminal": "7.3.0",
|
|
27
27
|
"open": "11.0.0",
|
|
28
|
-
"@salesforce/b2c-tooling-sdk": "1.
|
|
28
|
+
"@salesforce/b2c-tooling-sdk": "1.20.1"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@eslint/compat": "^1",
|
|
@@ -248,6 +248,22 @@
|
|
|
248
248
|
}
|
|
249
249
|
}
|
|
250
250
|
},
|
|
251
|
+
"preferences": {
|
|
252
|
+
"description": "Commands for managing custom global and site preferences\n\nDocs: https://salesforcecommercecloud.github.io/b2c-developer-tooling/cli/preferences.html",
|
|
253
|
+
"subtopics": {
|
|
254
|
+
"global": {
|
|
255
|
+
"description": "Read and update custom preferences at the organization (global) level"
|
|
256
|
+
},
|
|
257
|
+
"site": {
|
|
258
|
+
"description": "Read, update, and search custom preferences at the site level",
|
|
259
|
+
"subtopics": {
|
|
260
|
+
"preference": {
|
|
261
|
+
"description": "Read and update a single preference value across sites in a site preference group"
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
},
|
|
251
267
|
"metrics": {
|
|
252
268
|
"description": "[CLOSED BETA] Retrieve observability metrics from SCAPI Metrics API\n\nDocs: https://salesforcecommercecloud.github.io/b2c-developer-tooling/cli/metrics.html"
|
|
253
269
|
},
|
|
@@ -1,327 +0,0 @@
|
|
|
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 * as fs from 'node:fs/promises';
|
|
7
|
-
import { existsSync } from 'node:fs';
|
|
8
|
-
import path from 'node:path';
|
|
9
|
-
import { Flags, ux } from '@oclif/core';
|
|
10
|
-
import { BaseCommand } from '@salesforce/b2c-tooling-sdk/cli';
|
|
11
|
-
import { withDocs } from '../../../i18n/index.js';
|
|
12
|
-
/**
|
|
13
|
-
* Build the dw.js script for Prophet integration.
|
|
14
|
-
*/
|
|
15
|
-
function buildDwJsScript(inspectArgs) {
|
|
16
|
-
return `/**
|
|
17
|
-
* Auto-generated by "b2c setup ide prophet".
|
|
18
|
-
* Purpose: Provide Prophet VS Code extension with dw.json-compatible configuration
|
|
19
|
-
* by exporting the resolved B2C CLI config as module.exports.
|
|
20
|
-
* support dwJson multi-config in prophet and other tools that support dw.js loading
|
|
21
|
-
* when this is present prophet will ignore dw.json and instead load the configuration exported
|
|
22
|
-
* This script shells out to: b2c setup inspect --json --unmask
|
|
23
|
-
*/
|
|
24
|
-
var childProcess = require('node:child_process');
|
|
25
|
-
var path = require('node:path');
|
|
26
|
-
var INSPECT_ARGS = ${JSON.stringify(inspectArgs)};
|
|
27
|
-
var dwJson = {};
|
|
28
|
-
|
|
29
|
-
function logProphetDw(message, error) {
|
|
30
|
-
var suffix = error && error.message ? ': ' + String(error.message) : '';
|
|
31
|
-
var line = '[b2c setup ide prophet] ' + message + suffix;
|
|
32
|
-
|
|
33
|
-
// Best-effort logging: this script is loaded by external tools (Prophet) where
|
|
34
|
-
// console may be redirected or unavailable. A failure to log a log message is
|
|
35
|
-
// not actionable and must not interfere with returning the resolved config.
|
|
36
|
-
try {
|
|
37
|
-
console.error(line);
|
|
38
|
-
} catch (logError) {
|
|
39
|
-
/* ignore */
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
try {
|
|
43
|
-
console.log(line);
|
|
44
|
-
} catch (logError) {
|
|
45
|
-
/* ignore */
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
function loadDotEnv() {
|
|
50
|
-
try {
|
|
51
|
-
require('dotenv').config({override: true});
|
|
52
|
-
} catch (error) {
|
|
53
|
-
// optional dependency
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
function getWorkspaceRoot() {
|
|
58
|
-
if (process.env.SFCC_PROJECT_DIRECTORY && process.env.SFCC_PROJECT_DIRECTORY.trim()) {
|
|
59
|
-
return process.env.SFCC_PROJECT_DIRECTORY.trim();
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
if (process.env.SFCC_WORKING_DIRECTORY && process.env.SFCC_WORKING_DIRECTORY.trim()) {
|
|
63
|
-
return process.env.SFCC_WORKING_DIRECTORY.trim();
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
if (process.env.SFCC_CONFIG && process.env.SFCC_CONFIG.trim()) {
|
|
67
|
-
return path.dirname(process.env.SFCC_CONFIG.trim());
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
if (typeof __dirname === 'string' && __dirname) {
|
|
71
|
-
return __dirname;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
if (typeof module !== 'undefined' && module && module.filename) {
|
|
75
|
-
return path.dirname(module.filename);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
if (typeof workspace !== 'undefined' && workspace && Array.isArray(workspace.workspaceFolders)) {
|
|
79
|
-
for (var i = 0; i < workspace.workspaceFolders.length; i += 1) {
|
|
80
|
-
var folder = workspace.workspaceFolders[i];
|
|
81
|
-
if (folder && folder.uri && typeof folder.uri.fsPath === 'string' && folder.uri.fsPath) {
|
|
82
|
-
return folder.uri.fsPath;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
return process.cwd();
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
function withProjectDirectory(args, projectDirectory) {
|
|
91
|
-
if (!projectDirectory || args.indexOf('--project-directory') !== -1 || args.indexOf('--working-directory') !== -1) {
|
|
92
|
-
return args.slice();
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
return args.concat(['--project-directory', projectDirectory]);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
function pickInspectConfig(parsed) {
|
|
99
|
-
if (!parsed || typeof parsed !== 'object') {
|
|
100
|
-
return {};
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
var root = parsed.result && typeof parsed.result === 'object' ? parsed.result : parsed;
|
|
104
|
-
|
|
105
|
-
if (root.config && typeof root.config === 'object') {
|
|
106
|
-
return root.config;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
if (root.result && root.result.config && typeof root.result.config === 'object') {
|
|
110
|
-
return root.result.config;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
return root;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
function runSetupInspect(projectDirectory) {
|
|
117
|
-
var inspectArgs = withProjectDirectory(INSPECT_ARGS, projectDirectory);
|
|
118
|
-
var candidates = [];
|
|
119
|
-
|
|
120
|
-
if (process.env.B2C_CLI_BIN && process.env.B2C_CLI_BIN.trim()) {
|
|
121
|
-
candidates.push({cmd: process.env.B2C_CLI_BIN.trim(), args: inspectArgs});
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
candidates.push({cmd: 'b2c', args: inspectArgs});
|
|
125
|
-
candidates.push({cmd: 'npx', args: ['--yes', '@salesforce/b2c-cli'].concat(inspectArgs)});
|
|
126
|
-
|
|
127
|
-
var lastError;
|
|
128
|
-
|
|
129
|
-
for (var i = 0; i < candidates.length; i += 1) {
|
|
130
|
-
var candidate = candidates[i];
|
|
131
|
-
try {
|
|
132
|
-
var execOptions = {
|
|
133
|
-
encoding: 'utf8',
|
|
134
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
135
|
-
};
|
|
136
|
-
if (projectDirectory) {
|
|
137
|
-
execOptions.cwd = projectDirectory;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
var stdout = childProcess.execFileSync(candidate.cmd, candidate.args, execOptions);
|
|
141
|
-
return pickInspectConfig(JSON.parse(stdout));
|
|
142
|
-
} catch (error) {
|
|
143
|
-
logProphetDw('setup inspect candidate failed (' + candidate.cmd + ')', error);
|
|
144
|
-
lastError = error;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
throw lastError || new Error('No setup inspect candidate succeeded');
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
function resolveDwJsonConfig(raw) {
|
|
152
|
-
if (!raw || typeof raw !== 'object') {
|
|
153
|
-
return {};
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
var instanceName = process.env.SFCC_INSTANCE;
|
|
157
|
-
|
|
158
|
-
if (!instanceName || raw.name !== instanceName) {
|
|
159
|
-
if (instanceName && Array.isArray(raw.configs)) {
|
|
160
|
-
return raw.configs.find(function (item) {
|
|
161
|
-
return item && item.name === instanceName;
|
|
162
|
-
}) || raw;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
if (Array.isArray(raw.configs) && raw.active !== true) {
|
|
166
|
-
return raw.configs.find(function (item) {
|
|
167
|
-
return item && item.active === true;
|
|
168
|
-
}) || raw;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
return raw;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
function loadDwJsonFallback(projectDirectory) {
|
|
176
|
-
try {
|
|
177
|
-
var dwJsonPath = process.env.SFCC_CONFIG ? process.env.SFCC_CONFIG : path.join(projectDirectory, 'dw.json');
|
|
178
|
-
if (!path.isAbsolute(dwJsonPath)) {
|
|
179
|
-
dwJsonPath = path.resolve(projectDirectory || process.cwd(), dwJsonPath);
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
return resolveDwJsonConfig(require(dwJsonPath));
|
|
183
|
-
} catch (error) {
|
|
184
|
-
logProphetDw('dw.json fallback failed', error);
|
|
185
|
-
return {};
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
function toProphetConfig(config) {
|
|
190
|
-
if (!config || typeof config !== 'object') {
|
|
191
|
-
return {};
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
var result = {};
|
|
195
|
-
var codeVersion = config['code-version'] || config.codeVersion || config.version;
|
|
196
|
-
|
|
197
|
-
if (config.hostname || config.server) {
|
|
198
|
-
result.hostname = config.hostname || config.server;
|
|
199
|
-
}
|
|
200
|
-
if (config.username) {
|
|
201
|
-
result.username = config.username;
|
|
202
|
-
}
|
|
203
|
-
if (config.password) {
|
|
204
|
-
result.password = config.password;
|
|
205
|
-
}
|
|
206
|
-
if (codeVersion) {
|
|
207
|
-
result['code-version'] = codeVersion;
|
|
208
|
-
result.version = codeVersion;
|
|
209
|
-
}
|
|
210
|
-
if (config.cartridgesPath !== undefined) {
|
|
211
|
-
result.cartridgesPath = config.cartridgesPath;
|
|
212
|
-
}
|
|
213
|
-
if (config.siteID !== undefined || config.siteId !== undefined) {
|
|
214
|
-
result.siteID = config.siteID || config.siteId;
|
|
215
|
-
}
|
|
216
|
-
if (config.storefrontPassword !== undefined) {
|
|
217
|
-
result.storefrontPassword = config.storefrontPassword;
|
|
218
|
-
}
|
|
219
|
-
if (config.cartridge !== undefined) {
|
|
220
|
-
result.cartridge = config.cartridge;
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
return result;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
function loadDwConfig() {
|
|
227
|
-
loadDotEnv();
|
|
228
|
-
var projectDirectory = getWorkspaceRoot();
|
|
229
|
-
|
|
230
|
-
try {
|
|
231
|
-
var inspectConfig = runSetupInspect(projectDirectory);
|
|
232
|
-
var inspectMapped = toProphetConfig(inspectConfig);
|
|
233
|
-
if (inspectMapped.hostname) {
|
|
234
|
-
return inspectMapped;
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
logProphetDw('setup inspect returned no hostname; falling back to dw.json');
|
|
238
|
-
} catch (error) {
|
|
239
|
-
logProphetDw('setup inspect failed; falling back to dw.json', error);
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
try {
|
|
243
|
-
var fallbackMapped = toProphetConfig(loadDwJsonFallback(projectDirectory));
|
|
244
|
-
if (!fallbackMapped.hostname) {
|
|
245
|
-
logProphetDw('dw.json fallback returned no hostname');
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
return fallbackMapped;
|
|
249
|
-
} catch (error) {
|
|
250
|
-
logProphetDw('dw.json mapping failed; returning empty config', error);
|
|
251
|
-
return {};
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
try {
|
|
256
|
-
dwJson = loadDwConfig();
|
|
257
|
-
} catch (error) {
|
|
258
|
-
logProphetDw('unexpected dw.js error; returning empty config', error);
|
|
259
|
-
dwJson = {};
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
module.exports = dwJson;
|
|
263
|
-
`;
|
|
264
|
-
}
|
|
265
|
-
/**
|
|
266
|
-
* Create dw.js integration script for Prophet VS Code extension.
|
|
267
|
-
*/
|
|
268
|
-
export default class SetupIdeProphet extends BaseCommand {
|
|
269
|
-
static description = withDocs('Generate a dw.js script that exposes B2C CLI config for Prophet VS Code', '/cli/setup.html#b2c-setup-ide-prophet');
|
|
270
|
-
static enableJsonFlag = true;
|
|
271
|
-
static examples = [
|
|
272
|
-
'<%= config.bin %> <%= command.id %>',
|
|
273
|
-
'<%= config.bin %> <%= command.id %> --force',
|
|
274
|
-
'<%= config.bin %> <%= command.id %> --output .vscode/dw.js',
|
|
275
|
-
'<%= config.bin %> <%= command.id %> --instance staging',
|
|
276
|
-
];
|
|
277
|
-
static flags = {
|
|
278
|
-
...BaseCommand.baseFlags,
|
|
279
|
-
output: Flags.string({
|
|
280
|
-
char: 'o',
|
|
281
|
-
description: 'Path for generated script file',
|
|
282
|
-
default: 'dw.js',
|
|
283
|
-
}),
|
|
284
|
-
force: Flags.boolean({
|
|
285
|
-
char: 'f',
|
|
286
|
-
description: 'Overwrite output file if it already exists',
|
|
287
|
-
default: false,
|
|
288
|
-
}),
|
|
289
|
-
};
|
|
290
|
-
async run() {
|
|
291
|
-
const outputPath = path.resolve(this.flags.output);
|
|
292
|
-
const alreadyExists = existsSync(outputPath);
|
|
293
|
-
if (alreadyExists && !this.flags.force) {
|
|
294
|
-
this.error(`File already exists at ${outputPath}. Use --force to overwrite.`);
|
|
295
|
-
}
|
|
296
|
-
const inspectArgs = this.buildInspectArgs();
|
|
297
|
-
const script = buildDwJsScript(inspectArgs);
|
|
298
|
-
await fs.mkdir(path.dirname(outputPath), { recursive: true });
|
|
299
|
-
await fs.writeFile(outputPath, script, 'utf8');
|
|
300
|
-
const result = {
|
|
301
|
-
path: outputPath,
|
|
302
|
-
overwritten: alreadyExists,
|
|
303
|
-
};
|
|
304
|
-
if (!this.jsonEnabled()) {
|
|
305
|
-
ux.stdout(`Created ${outputPath}`);
|
|
306
|
-
}
|
|
307
|
-
return result;
|
|
308
|
-
}
|
|
309
|
-
/**
|
|
310
|
-
* Build setup inspect arguments for the generated script.
|
|
311
|
-
* Includes setup context flags so runtime resolution matches command intent.
|
|
312
|
-
*/
|
|
313
|
-
buildInspectArgs() {
|
|
314
|
-
const args = ['setup', 'inspect', '--json', '--unmask'];
|
|
315
|
-
if (this.flags.instance) {
|
|
316
|
-
args.push('--instance', this.flags.instance);
|
|
317
|
-
}
|
|
318
|
-
if (this.flags.config) {
|
|
319
|
-
args.push('--config', this.flags.config);
|
|
320
|
-
}
|
|
321
|
-
if (this.flags['project-directory']) {
|
|
322
|
-
args.push('--project-directory', this.flags['project-directory']);
|
|
323
|
-
}
|
|
324
|
-
return args;
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
//# sourceMappingURL=prophet.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prophet.js","sourceRoot":"","sources":["../../../../src/commands/setup/ide/prophet.ts"],"names":[],"mappings":"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"}
|