@salesforce/b2c-cli 1.19.0 → 1.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/commands/{setup/ide/prophet.d.ts → docs/cache.d.ts} +12 -18
  2. package/dist/commands/docs/cache.js +55 -0
  3. package/dist/commands/docs/cache.js.map +1 -0
  4. package/dist/commands/docs/read.d.ts +3 -0
  5. package/dist/commands/docs/read.js +18 -2
  6. package/dist/commands/docs/read.js.map +1 -1
  7. package/dist/commands/docs/search.d.ts +3 -6
  8. package/dist/commands/docs/search.js +11 -48
  9. package/dist/commands/docs/search.js.map +1 -1
  10. package/dist/commands/preferences/global/get.d.ts +16 -0
  11. package/dist/commands/preferences/global/get.js +53 -0
  12. package/dist/commands/preferences/global/get.js.map +1 -0
  13. package/dist/commands/preferences/global/list.d.ts +15 -0
  14. package/dist/commands/preferences/global/list.js +80 -0
  15. package/dist/commands/preferences/global/list.js.map +1 -0
  16. package/dist/commands/preferences/global/update.d.ts +18 -0
  17. package/dist/commands/preferences/global/update.js +102 -0
  18. package/dist/commands/preferences/global/update.js.map +1 -0
  19. package/dist/commands/preferences/site/get.d.ts +16 -0
  20. package/dist/commands/preferences/site/get.js +53 -0
  21. package/dist/commands/preferences/site/get.js.map +1 -0
  22. package/dist/commands/preferences/site/list.d.ts +16 -0
  23. package/dist/commands/preferences/site/list.js +84 -0
  24. package/dist/commands/preferences/site/list.js.map +1 -0
  25. package/dist/commands/preferences/site/preference/get.d.ts +16 -0
  26. package/dist/commands/preferences/site/preference/get.js +52 -0
  27. package/dist/commands/preferences/site/preference/get.js.map +1 -0
  28. package/dist/commands/preferences/site/preference/update.d.ts +19 -0
  29. package/dist/commands/preferences/site/preference/update.js +107 -0
  30. package/dist/commands/preferences/site/preference/update.js.map +1 -0
  31. package/dist/commands/preferences/site/search.d.ts +28 -0
  32. package/dist/commands/preferences/site/search.js +177 -0
  33. package/dist/commands/preferences/site/search.js.map +1 -0
  34. package/dist/commands/preferences/site/update.d.ts +19 -0
  35. package/dist/commands/preferences/site/update.js +103 -0
  36. package/dist/commands/preferences/site/update.js.map +1 -0
  37. package/dist/commands/setup/ide/index.js +1 -1
  38. package/dist/commands/setup/ide/index.js.map +1 -1
  39. package/dist/commands/setup/index.js +1 -1
  40. package/dist/commands/setup/index.js.map +1 -1
  41. package/dist/utils/docs/workspace.d.ts +31 -0
  42. package/dist/utils/docs/workspace.js +68 -0
  43. package/dist/utils/docs/workspace.js.map +1 -0
  44. package/dist/utils/preferences.d.ts +48 -0
  45. package/dist/utils/preferences.js +125 -0
  46. package/dist/utils/preferences.js.map +1 -0
  47. package/oclif.manifest.json +16562 -13743
  48. package/package.json +18 -2
  49. package/dist/commands/setup/ide/prophet.js +0 -327
  50. package/dist/commands/setup/ide/prophet.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/commands/preferences/global/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { PreferencesCommand } from '../../../utils/preferences.js';
2
+ import { type SitePreferences } from '@salesforce/b2c-tooling-sdk';
3
+ export default class PreferencesSiteGet extends PreferencesCommand<typeof PreferencesSiteGet> {
4
+ static args: {
5
+ 'group-id': 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
+ 'instance-type': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
12
+ 'site-id': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
13
+ 'mask-passwords': import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ };
15
+ run(): Promise<SitePreferences>;
16
+ }
@@ -0,0 +1,53 @@
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, ux } from '@oclif/core';
7
+ import { PreferencesCommand, instanceTypeFlag, maskPasswordsFlag } from '../../../utils/preferences.js';
8
+ import { getApiErrorMessage } from '@salesforce/b2c-tooling-sdk';
9
+ import { t, withDocs } from '../../../i18n/index.js';
10
+ export default class PreferencesSiteGet extends PreferencesCommand {
11
+ static args = {
12
+ 'group-id': Args.string({
13
+ description: 'Preference group ID',
14
+ required: true,
15
+ }),
16
+ };
17
+ static description = withDocs(t('commands.preferences.site.get.description', 'Read custom preferences in a site preference group for a given instance type'), '/cli/preferences.html#get-site');
18
+ static enableJsonFlag = true;
19
+ static examples = [
20
+ '<%= config.bin %> <%= command.id %> CustomGroupId --site-id RefArch --tenant-id zzxy_prd',
21
+ '<%= config.bin %> <%= command.id %> CustomGroupId --instance-type staging --site-id RefArch --tenant-id zzxy_prd',
22
+ ];
23
+ static flags = {
24
+ 'instance-type': instanceTypeFlag,
25
+ 'site-id': Flags.string({
26
+ char: 's',
27
+ description: 'Site ID',
28
+ required: true,
29
+ }),
30
+ 'mask-passwords': maskPasswordsFlag,
31
+ };
32
+ async run() {
33
+ this.requireOAuthCredentials();
34
+ const { 'group-id': groupId } = this.args;
35
+ const { 'instance-type': instanceType, 'site-id': siteId, 'mask-passwords': maskPasswords } = this.flags;
36
+ const organizationId = this.getOrganizationId();
37
+ const result = await this.preferencesClient.GET('/organizations/{organizationId}/site-preference-groups/{groupId}/{instanceType}', {
38
+ params: {
39
+ path: { organizationId, groupId, instanceType: instanceType },
40
+ query: { siteId, maskPasswords },
41
+ },
42
+ });
43
+ if (!result.data) {
44
+ const message = getApiErrorMessage(result.error, result.response);
45
+ this.error(t('commands.preferences.site.get.error', 'Failed to read site preference group: {{message}}', { message }));
46
+ }
47
+ if (this.jsonEnabled())
48
+ return result.data;
49
+ ux.stdout(JSON.stringify(result.data, null, 2) + '\n');
50
+ return result.data;
51
+ }
52
+ }
53
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../src/commands/preferences/site/get.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAC,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAC,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAAC,MAAM,+BAA+B,CAAC;AACtG,OAAO,EAAC,kBAAkB,EAAoD,MAAM,6BAA6B,CAAC;AAClH,OAAO,EAAC,CAAC,EAAE,QAAQ,EAAC,MAAM,wBAAwB,CAAC;AAEnD,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,kBAA6C;IAC3F,MAAM,CAAC,IAAI,GAAG;QACZ,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;YACtB,WAAW,EAAE,qBAAqB;YAClC,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAC;IAEF,MAAM,CAAC,WAAW,GAAG,QAAQ,CAC3B,CAAC,CACC,2CAA2C,EAC3C,8EAA8E,CAC/E,EACD,gCAAgC,CACjC,CAAC;IAEF,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;IAE7B,MAAM,CAAC,QAAQ,GAAG;QAChB,0FAA0F;QAC1F,kHAAkH;KACnH,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG;QACb,eAAe,EAAE,gBAAgB;QACjC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC;YACtB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,SAAS;YACtB,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,gBAAgB,EAAE,iBAAiB;KACpC,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAE/B,MAAM,EAAC,UAAU,EAAE,OAAO,EAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QACxC,MAAM,EAAC,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,aAAa,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QACvG,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEhD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAC7C,iFAAiF,EACjF;YACE,MAAM,EAAE;gBACN,IAAI,EAAE,EAAC,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,YAAsC,EAAC;gBACrF,KAAK,EAAE,EAAC,MAAM,EAAE,aAAa,EAAC;aAC/B;SACF,CACF,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YAClE,IAAI,CAAC,KAAK,CACR,CAAC,CAAC,qCAAqC,EAAE,mDAAmD,EAAE,EAAC,OAAO,EAAC,CAAC,CACzG,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,EAAE;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC;QAE3C,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACvD,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { PreferencesCommand } from '../../../utils/preferences.js';
2
+ import { type CustomPreferenceList } from '@salesforce/b2c-tooling-sdk';
3
+ export default class PreferencesSiteList extends PreferencesCommand<typeof PreferencesSiteList> {
4
+ static description: string;
5
+ static enableJsonFlag: boolean;
6
+ static examples: string[];
7
+ static flags: {
8
+ columns: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ extended: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ 'site-id': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
11
+ limit: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
12
+ offset: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
13
+ 'mask-password': import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ };
15
+ run(): Promise<CustomPreferenceList>;
16
+ }
@@ -0,0 +1,84 @@
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, ux } from '@oclif/core';
7
+ import { PreferencesCommand } from '../../../utils/preferences.js';
8
+ import { TableRenderer, columnFlagsFor, selectColumns } from '@salesforce/b2c-tooling-sdk/cli';
9
+ import { getApiErrorMessage } from '@salesforce/b2c-tooling-sdk';
10
+ import { t, withDocs } from '../../../i18n/index.js';
11
+ const COLUMNS = {
12
+ id: { header: 'ID', get: (p) => p.id || '-' },
13
+ value: { header: 'Value', get: (p) => formatValue(p.value) },
14
+ groupId: { header: 'Group ID', get: (p) => p.groupId || '-', extended: true },
15
+ };
16
+ const DEFAULT_COLUMNS = ['id', 'value'];
17
+ const tableRenderer = new TableRenderer(COLUMNS);
18
+ function formatValue(value) {
19
+ if (value === null || value === undefined)
20
+ return '-';
21
+ if (typeof value === 'object')
22
+ return JSON.stringify(value);
23
+ return String(value);
24
+ }
25
+ export default class PreferencesSiteList extends PreferencesCommand {
26
+ static description = withDocs(t('commands.preferences.site.list.description', 'List custom preferences for a site'), '/cli/preferences.html#list-site');
27
+ static enableJsonFlag = true;
28
+ static examples = [
29
+ '<%= config.bin %> <%= command.id %> --site-id RefArch --tenant-id zzxy_prd',
30
+ '<%= config.bin %> <%= command.id %> --site-id RefArch --limit 50 --tenant-id zzxy_prd',
31
+ '<%= config.bin %> <%= command.id %> --site-id RefArch --tenant-id zzxy_prd --extended',
32
+ ];
33
+ static flags = {
34
+ 'site-id': Flags.string({
35
+ char: 's',
36
+ description: 'Site ID to list preferences for',
37
+ required: true,
38
+ }),
39
+ limit: Flags.integer({
40
+ char: 'l',
41
+ description: 'Maximum number of results (1-200)',
42
+ default: 200,
43
+ min: 1,
44
+ max: 200,
45
+ }),
46
+ offset: Flags.integer({
47
+ char: 'o',
48
+ description: 'Result offset for pagination',
49
+ default: 0,
50
+ min: 0,
51
+ }),
52
+ 'mask-password': Flags.boolean({
53
+ description: 'Mask values of type password',
54
+ default: false,
55
+ allowNo: true,
56
+ }),
57
+ ...columnFlagsFor(COLUMNS),
58
+ };
59
+ async run() {
60
+ this.requireOAuthCredentials();
61
+ const { 'site-id': siteId, limit, offset, 'mask-password': maskPassword } = this.flags;
62
+ const organizationId = this.getOrganizationId();
63
+ const result = await this.preferencesClient.GET('/organizations/{organizationId}/site-custom-preferences', {
64
+ params: {
65
+ path: { organizationId },
66
+ query: { siteId, limit, offset, maskPassword },
67
+ },
68
+ });
69
+ if (!result.data) {
70
+ const message = getApiErrorMessage(result.error, result.response);
71
+ this.error(t('commands.preferences.site.list.error', 'Failed to list site custom preferences: {{message}}', { message }));
72
+ }
73
+ if (this.jsonEnabled())
74
+ return result.data;
75
+ const data = result.data.data || [];
76
+ ux.stdout('\n');
77
+ tableRenderer.render(data, selectColumns(this.flags, tableRenderer, DEFAULT_COLUMNS, this.warn.bind(this)));
78
+ ux.stdout(t('commands.preferences.site.list.total', '\nTotal: {{total}} preferences\n', {
79
+ total: result.data.total ?? data.length,
80
+ }));
81
+ return result.data;
82
+ }
83
+ }
84
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/preferences/site/list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAC,KAAK,EAAE,EAAE,EAAC,MAAM,aAAa,CAAC;AACtC,OAAO,EAAC,kBAAkB,EAAC,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAC,aAAa,EAAE,cAAc,EAAE,aAAa,EAAiB,MAAM,iCAAiC,CAAC;AAC7G,OAAO,EAAC,kBAAkB,EAAmD,MAAM,6BAA6B,CAAC;AACjH,OAAO,EAAC,CAAC,EAAE,QAAQ,EAAC,MAAM,wBAAwB,CAAC;AAEnD,MAAM,OAAO,GAAgD;IAC3D,EAAE,EAAE,EAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,EAAC;IAC3C,KAAK,EAAE,EAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,EAAC;IAC1D,OAAO,EAAE,EAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAC;CAC5E,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACxC,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;AAEjD,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC;IACtD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC5D,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,kBAA8C;IAC7F,MAAM,CAAC,WAAW,GAAG,QAAQ,CAC3B,CAAC,CAAC,4CAA4C,EAAE,oCAAoC,CAAC,EACrF,iCAAiC,CAClC,CAAC;IAEF,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;IAE7B,MAAM,CAAC,QAAQ,GAAG;QAChB,4EAA4E;QAC5E,uFAAuF;QACvF,uFAAuF;KACxF,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG;QACb,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC;YACtB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,iCAAiC;YAC9C,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,mCAAmC;YAChD,OAAO,EAAE,GAAG;YACZ,GAAG,EAAE,CAAC;YACN,GAAG,EAAE,GAAG;SACT,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC;YACpB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,8BAA8B;YAC3C,OAAO,EAAE,CAAC;YACV,GAAG,EAAE,CAAC;SACP,CAAC;QACF,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC;YAC7B,WAAW,EAAE,8BAA8B;YAC3C,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,IAAI;SACd,CAAC;QACF,GAAG,cAAc,CAAC,OAAO,CAAC;KAC3B,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAE/B,MAAM,EAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,YAAY,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QACrF,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEhD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,yDAAyD,EAAE;YACzG,MAAM,EAAE;gBACN,IAAI,EAAE,EAAC,cAAc,EAAC;gBACtB,KAAK,EAAE,EAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAC;aAC7C;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YAClE,IAAI,CAAC,KAAK,CACR,CAAC,CAAC,sCAAsC,EAAE,qDAAqD,EAAE,EAAC,OAAO,EAAC,CAAC,CAC5G,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,EAAE;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC;QAE3C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QACpC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChB,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5G,EAAE,CAAC,MAAM,CACP,CAAC,CAAC,sCAAsC,EAAE,kCAAkC,EAAE;YAC5E,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM;SACxC,CAAC,CACH,CAAC;QAEF,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { PreferencesCommand } from '../../../../utils/preferences.js';
2
+ import { type PreferenceValue } from '@salesforce/b2c-tooling-sdk';
3
+ export default class PreferencesSitePreferenceGet extends PreferencesCommand<typeof PreferencesSitePreferenceGet> {
4
+ static args: {
5
+ 'group-id': import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
6
+ 'preference-id': import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static description: string;
9
+ static enableJsonFlag: boolean;
10
+ static examples: string[];
11
+ static flags: {
12
+ 'instance-type': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
13
+ 'mask-passwords': import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ };
15
+ run(): Promise<PreferenceValue>;
16
+ }
@@ -0,0 +1,52 @@
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 { PreferencesCommand, instanceTypeFlag, maskPasswordsFlag } from '../../../../utils/preferences.js';
8
+ import { getApiErrorMessage } from '@salesforce/b2c-tooling-sdk';
9
+ import { t, withDocs } from '../../../../i18n/index.js';
10
+ export default class PreferencesSitePreferenceGet extends PreferencesCommand {
11
+ static args = {
12
+ 'group-id': Args.string({
13
+ description: 'Preference group ID',
14
+ required: true,
15
+ }),
16
+ 'preference-id': Args.string({
17
+ description: 'Preference attribute ID',
18
+ required: true,
19
+ }),
20
+ };
21
+ static description = withDocs(t('commands.preferences.site.preference.get.description', 'Read a single preference value across sites in a site preference group'), '/cli/preferences.html#get-site-preference');
22
+ static enableJsonFlag = true;
23
+ static examples = [
24
+ '<%= config.bin %> <%= command.id %> CustomGroupId WapiStringAttr --tenant-id zzxy_prd',
25
+ '<%= config.bin %> <%= command.id %> CustomGroupId WapiStringAttr --instance-type staging --tenant-id zzxy_prd',
26
+ ];
27
+ static flags = {
28
+ 'instance-type': instanceTypeFlag,
29
+ 'mask-passwords': maskPasswordsFlag,
30
+ };
31
+ async run() {
32
+ this.requireOAuthCredentials();
33
+ const { 'group-id': groupId, 'preference-id': preferenceId } = this.args;
34
+ const { 'instance-type': instanceType, 'mask-passwords': maskPasswords } = this.flags;
35
+ const organizationId = this.getOrganizationId();
36
+ const result = await this.preferencesClient.GET('/organizations/{organizationId}/site-preference-groups/{groupId}/{instanceType}/preferences/{preferenceId}', {
37
+ params: {
38
+ path: { organizationId, groupId, instanceType: instanceType, preferenceId },
39
+ query: { maskPasswords },
40
+ },
41
+ });
42
+ if (!result.data) {
43
+ const message = getApiErrorMessage(result.error, result.response);
44
+ this.error(t('commands.preferences.site.preference.get.error', 'Failed to read site preference: {{message}}', { message }));
45
+ }
46
+ if (this.jsonEnabled())
47
+ return result.data;
48
+ ux.stdout(JSON.stringify(result.data, null, 2) + '\n');
49
+ return result.data;
50
+ }
51
+ }
52
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../../src/commands/preferences/site/preference/get.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAC,IAAI,EAAE,EAAE,EAAC,MAAM,aAAa,CAAC;AACrC,OAAO,EAAC,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAAC,MAAM,kCAAkC,CAAC;AACzG,OAAO,EAAC,kBAAkB,EAAoD,MAAM,6BAA6B,CAAC;AAClH,OAAO,EAAC,CAAC,EAAE,QAAQ,EAAC,MAAM,2BAA2B,CAAC;AAEtD,MAAM,CAAC,OAAO,OAAO,4BAA6B,SAAQ,kBAAuD;IAC/G,MAAM,CAAC,IAAI,GAAG;QACZ,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;YACtB,WAAW,EAAE,qBAAqB;YAClC,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC;YAC3B,WAAW,EAAE,yBAAyB;YACtC,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAC;IAEF,MAAM,CAAC,WAAW,GAAG,QAAQ,CAC3B,CAAC,CACC,sDAAsD,EACtD,wEAAwE,CACzE,EACD,2CAA2C,CAC5C,CAAC;IAEF,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;IAE7B,MAAM,CAAC,QAAQ,GAAG;QAChB,uFAAuF;QACvF,+GAA+G;KAChH,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG;QACb,eAAe,EAAE,gBAAgB;QACjC,gBAAgB,EAAE,iBAAiB;KACpC,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAE/B,MAAM,EAAC,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QACvE,MAAM,EAAC,eAAe,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QACpF,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEhD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAC7C,4GAA4G,EAC5G;YACE,MAAM,EAAE;gBACN,IAAI,EAAE,EAAC,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,YAAsC,EAAE,YAAY,EAAC;gBACnG,KAAK,EAAE,EAAC,aAAa,EAAC;aACvB;SACF,CACF,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YAClE,IAAI,CAAC,KAAK,CACR,CAAC,CAAC,gDAAgD,EAAE,6CAA6C,EAAE,EAAC,OAAO,EAAC,CAAC,CAC9G,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,EAAE;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC;QAE3C,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACvD,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { PreferencesCommand } from '../../../../utils/preferences.js';
2
+ import { type PreferenceValue } from '@salesforce/b2c-tooling-sdk';
3
+ export default class PreferencesSitePreferenceUpdate extends PreferencesCommand<typeof PreferencesSitePreferenceUpdate> {
4
+ static args: {
5
+ 'group-id': import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
6
+ 'preference-id': import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static description: string;
9
+ static enableJsonFlag: boolean;
10
+ static examples: string[];
11
+ static flags: {
12
+ 'instance-type': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
13
+ 'site-value': import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ file: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ body: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ 'mask-passwords': import("@oclif/core/interfaces").BooleanFlag<boolean>;
17
+ };
18
+ run(): Promise<PreferenceValue>;
19
+ }
@@ -0,0 +1,107 @@
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';
7
+ import { Args, Flags, ux } from '@oclif/core';
8
+ import { PreferencesCommand, buildAssignmentMap, instanceTypeFlag, maskPasswordsFlag, } from '../../../../utils/preferences.js';
9
+ import { getApiErrorMessage } from '@salesforce/b2c-tooling-sdk';
10
+ import { t, withDocs } from '../../../../i18n/index.js';
11
+ export default class PreferencesSitePreferenceUpdate extends PreferencesCommand {
12
+ static args = {
13
+ 'group-id': Args.string({
14
+ description: 'Preference group ID',
15
+ required: true,
16
+ }),
17
+ 'preference-id': Args.string({
18
+ description: 'Preference attribute ID',
19
+ required: true,
20
+ }),
21
+ };
22
+ static description = withDocs(t('commands.preferences.site.preference.update.description', 'Update a single preference value across sites in a site preference group. Use repeatable --site-value SITE=val (operators: =, :=, =@file, :=@file, =) or --file/--body for bulk edits.'), '/cli/preferences.html#update-site-preference');
23
+ static enableJsonFlag = true;
24
+ static examples = [
25
+ '<%= config.bin %> <%= command.id %> CustomGroupId WapiStringAttr --site-value RefArch=hello --tenant-id zzxy_prd',
26
+ '<%= config.bin %> <%= command.id %> CustomGroupId c_count --site-value RefArch:=5 --site-value RefArchGlobal:=42 --tenant-id zzxy_prd',
27
+ '<%= config.bin %> <%= command.id %> CustomGroupId WapiStringAttr -I staging --file pref.json --tenant-id zzxy_prd',
28
+ ];
29
+ static flags = {
30
+ 'instance-type': instanceTypeFlag,
31
+ 'site-value': Flags.string({
32
+ description: 'Per-site assignment SITE=val (repeatable). Operators: =, :=, =@file, :=@file, = (null).',
33
+ multiple: true,
34
+ }),
35
+ file: Flags.string({
36
+ char: 'f',
37
+ description: 'JSON file with PreferenceValue body (use siteValues map keyed by site ID)',
38
+ exclusive: ['body'],
39
+ }),
40
+ body: Flags.string({
41
+ description: 'Inline JSON PreferenceValue body (use siteValues map keyed by site ID)',
42
+ exclusive: ['file'],
43
+ }),
44
+ 'mask-passwords': maskPasswordsFlag,
45
+ };
46
+ async run() {
47
+ this.requireOAuthCredentials();
48
+ const { 'group-id': groupId, 'preference-id': preferenceId } = this.args;
49
+ const { 'instance-type': instanceType, 'site-value': siteValueExprs, file, body, 'mask-passwords': maskPasswords, } = this.flags;
50
+ const organizationId = this.getOrganizationId();
51
+ const haveSiteValues = Array.isArray(siteValueExprs) && siteValueExprs.length > 0;
52
+ if (haveSiteValues && (file || body)) {
53
+ this.error(t('commands.preferences.siteValueAndBodyExclusive', 'Provide either --site-value flags or --file/--body, not both.'));
54
+ }
55
+ if (!haveSiteValues && !file && !body) {
56
+ this.error(t('commands.preferences.bodyRequired', 'Provide --site-value flags or --file/--body with the preferences to update.'));
57
+ }
58
+ let requestBody;
59
+ if (haveSiteValues) {
60
+ try {
61
+ requestBody = {
62
+ id: preferenceId,
63
+ siteValues: buildAssignmentMap(siteValueExprs),
64
+ };
65
+ }
66
+ catch (error) {
67
+ this.error(error.message);
68
+ }
69
+ }
70
+ else {
71
+ let raw;
72
+ if (file) {
73
+ if (!fs.existsSync(file)) {
74
+ this.error(t('commands.preferences.fileNotFound', 'File not found: {{file}}', { file }));
75
+ }
76
+ raw = fs.readFileSync(file, 'utf8');
77
+ }
78
+ else {
79
+ raw = body;
80
+ }
81
+ try {
82
+ requestBody = JSON.parse(raw);
83
+ }
84
+ catch {
85
+ this.error(t('commands.preferences.parseError', 'Failed to parse JSON body'));
86
+ }
87
+ }
88
+ const result = await this.preferencesRwClient.PATCH('/organizations/{organizationId}/site-preference-groups/{groupId}/{instanceType}/preferences/{preferenceId}', {
89
+ params: {
90
+ path: { organizationId, groupId, instanceType: instanceType, preferenceId },
91
+ query: { maskPasswords },
92
+ },
93
+ body: requestBody,
94
+ });
95
+ if (!result.data) {
96
+ const message = getApiErrorMessage(result.error, result.response);
97
+ this.error(t('commands.preferences.site.preference.update.error', 'Failed to update site preference: {{message}}', {
98
+ message,
99
+ }));
100
+ }
101
+ if (this.jsonEnabled())
102
+ return result.data;
103
+ ux.stdout(JSON.stringify(result.data, null, 2) + '\n');
104
+ return result.data;
105
+ }
106
+ }
107
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../../src/commands/preferences/site/preference/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { PreferencesCommand } from '../../../utils/preferences.js';
2
+ import { type PreferenceValueSearchResult } from '@salesforce/b2c-tooling-sdk';
3
+ export default class PreferencesSiteSearch extends PreferencesCommand<typeof PreferencesSiteSearch> {
4
+ static args: {
5
+ 'group-id': 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
+ columns: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ extended: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ 'instance-type': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
14
+ 'search-phrase': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ 'value-type': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ query: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ 'query-file': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ 'sort-by': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
+ 'sort-order': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
20
+ limit: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
21
+ offset: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
22
+ expand: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
23
+ 'mask-passwords': import("@oclif/core/interfaces").BooleanFlag<boolean>;
24
+ };
25
+ run(): Promise<PreferenceValueSearchResult>;
26
+ private buildSearchRequest;
27
+ private readFile;
28
+ }
@@ -0,0 +1,177 @@
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';
7
+ import { Args, Flags, ux } from '@oclif/core';
8
+ import { PreferencesCommand, instanceTypeFlag, maskPasswordsFlag } from '../../../utils/preferences.js';
9
+ import { TableRenderer, columnFlagsFor, selectColumns } from '@salesforce/b2c-tooling-sdk/cli';
10
+ import { getApiErrorMessage, } from '@salesforce/b2c-tooling-sdk';
11
+ import { t, withDocs } from '../../../i18n/index.js';
12
+ const SEARCHABLE_FIELDS = ['id', 'displayName', 'description'];
13
+ const VALUE_TYPE_FIELD = 'valueType';
14
+ const SORTABLE_FIELDS = [...SEARCHABLE_FIELDS, VALUE_TYPE_FIELD];
15
+ const COLUMNS = {
16
+ id: { header: 'ID', get: (p) => p.id || '-' },
17
+ valueType: { header: 'Type', get: (p) => p.valueType || '-' },
18
+ displayName: {
19
+ header: 'Display Name',
20
+ get: (p) => p.displayName?.default || Object.values(p.displayName ?? {})[0] || '-',
21
+ },
22
+ siteValues: {
23
+ header: 'Site Values',
24
+ get: (p) => (p.siteValues ? JSON.stringify(p.siteValues) : '-'),
25
+ extended: true,
26
+ },
27
+ };
28
+ const DEFAULT_COLUMNS = ['id', 'valueType', 'displayName'];
29
+ const tableRenderer = new TableRenderer(COLUMNS);
30
+ export default class PreferencesSiteSearch extends PreferencesCommand {
31
+ static args = {
32
+ 'group-id': Args.string({
33
+ description: 'Preference group ID',
34
+ required: true,
35
+ }),
36
+ };
37
+ static description = withDocs(t('commands.preferences.site.search.description', 'Search preferences across sites in a site preference group for a given instance type'), '/cli/preferences.html#search-site');
38
+ static enableJsonFlag = true;
39
+ static examples = [
40
+ '<%= config.bin %> <%= command.id %> CustomGroupId --tenant-id zzxy_prd',
41
+ '<%= config.bin %> <%= command.id %> CustomGroupId --instance-type staging --search-phrase Wapi --tenant-id zzxy_prd',
42
+ '<%= config.bin %> <%= command.id %> CustomGroupId --value-type string --sort-by id --tenant-id zzxy_prd',
43
+ '<%= config.bin %> <%= command.id %> CustomGroupId --query-file query.json --tenant-id zzxy_prd',
44
+ '<%= config.bin %> <%= command.id %> CustomGroupId --query \'{"matchAllQuery":{}}\' --expand value --tenant-id zzxy_prd',
45
+ ];
46
+ static flags = {
47
+ 'instance-type': instanceTypeFlag,
48
+ 'search-phrase': Flags.string({
49
+ description: 'Free-text phrase searched across id, displayName, description',
50
+ exclusive: ['query', 'query-file'],
51
+ }),
52
+ 'value-type': Flags.string({
53
+ description: 'Filter by valueType (combined with --search-phrase via AND)',
54
+ exclusive: ['query', 'query-file'],
55
+ }),
56
+ query: Flags.string({
57
+ description: 'Inline JSON Query body (overrides convenience flags)',
58
+ exclusive: ['query-file', 'search-phrase', 'value-type'],
59
+ }),
60
+ 'query-file': Flags.string({
61
+ description: 'JSON file containing a Query body (overrides convenience flags)',
62
+ exclusive: ['query', 'search-phrase', 'value-type'],
63
+ }),
64
+ 'sort-by': Flags.string({
65
+ description: 'Sort field',
66
+ options: SORTABLE_FIELDS,
67
+ }),
68
+ 'sort-order': Flags.string({
69
+ description: 'Sort order',
70
+ options: ['asc', 'desc'],
71
+ default: 'asc',
72
+ }),
73
+ limit: Flags.integer({
74
+ char: 'l',
75
+ description: 'Maximum number of results (1-200)',
76
+ default: 25,
77
+ min: 1,
78
+ max: 200,
79
+ }),
80
+ offset: Flags.integer({
81
+ char: 'o',
82
+ description: 'Result offset for pagination',
83
+ default: 0,
84
+ min: 0,
85
+ }),
86
+ expand: Flags.string({
87
+ description: 'Expand option ("value" returns attribute value definitions)',
88
+ options: ['value'],
89
+ }),
90
+ 'mask-passwords': maskPasswordsFlag,
91
+ ...columnFlagsFor(COLUMNS),
92
+ };
93
+ async run() {
94
+ this.requireOAuthCredentials();
95
+ const { 'group-id': groupId } = this.args;
96
+ const { 'instance-type': instanceType, 'search-phrase': searchPhrase, 'value-type': valueType, query: queryFlag, 'query-file': queryFile, 'sort-by': sortBy, 'sort-order': sortOrder, limit, offset, expand, 'mask-passwords': maskPasswords, } = this.flags;
97
+ const organizationId = this.getOrganizationId();
98
+ const requestBody = this.buildSearchRequest({
99
+ searchPhrase,
100
+ valueType,
101
+ queryFlag,
102
+ queryFile,
103
+ sortBy,
104
+ sortOrder,
105
+ limit,
106
+ offset,
107
+ });
108
+ const result = await this.preferencesClient.POST('/organizations/{organizationId}/site-preference-groups/{groupId}/{instanceType}/preference-search', {
109
+ params: {
110
+ path: { organizationId, groupId, instanceType: instanceType },
111
+ query: { maskPasswords, expand: expand ? [expand] : undefined },
112
+ },
113
+ body: requestBody,
114
+ });
115
+ if (!result.data) {
116
+ const message = getApiErrorMessage(result.error, result.response);
117
+ this.error(t('commands.preferences.site.search.error', 'Failed to search site preferences: {{message}}', { message }));
118
+ }
119
+ if (this.jsonEnabled())
120
+ return result.data;
121
+ const hits = result.data.hits || [];
122
+ ux.stdout('\n');
123
+ tableRenderer.render(hits, selectColumns(this.flags, tableRenderer, DEFAULT_COLUMNS, this.warn.bind(this)));
124
+ ux.stdout(t('commands.preferences.site.search.total', '\nTotal: {{total}} preferences\n', {
125
+ total: result.data.total ?? hits.length,
126
+ }));
127
+ return result.data;
128
+ }
129
+ buildSearchRequest(opts) {
130
+ const { searchPhrase, valueType, queryFlag, queryFile, sortBy, sortOrder, limit, offset } = opts;
131
+ let query;
132
+ if (queryFile || queryFlag) {
133
+ const raw = queryFile ? this.readFile(queryFile) : queryFlag;
134
+ try {
135
+ query = JSON.parse(raw);
136
+ }
137
+ catch {
138
+ this.error(t('commands.preferences.parseError', 'Failed to parse JSON body'));
139
+ }
140
+ }
141
+ else if (searchPhrase && valueType) {
142
+ query = {
143
+ boolQuery: {
144
+ must: [
145
+ { textQuery: { fields: SEARCHABLE_FIELDS, searchPhrase } },
146
+ { termQuery: { fields: [VALUE_TYPE_FIELD], operator: 'is', values: [valueType] } },
147
+ ],
148
+ },
149
+ };
150
+ }
151
+ else if (searchPhrase) {
152
+ query = {
153
+ textQuery: { fields: SEARCHABLE_FIELDS, searchPhrase },
154
+ };
155
+ }
156
+ else if (valueType) {
157
+ query = {
158
+ termQuery: { fields: [VALUE_TYPE_FIELD], operator: 'is', values: [valueType] },
159
+ };
160
+ }
161
+ else {
162
+ query = { matchAllQuery: {} };
163
+ }
164
+ const request = { query, limit, offset };
165
+ if (sortBy) {
166
+ request.sorts = [{ field: sortBy, sortOrder: sortOrder }];
167
+ }
168
+ return request;
169
+ }
170
+ readFile(path) {
171
+ if (!fs.existsSync(path)) {
172
+ this.error(t('commands.preferences.fileNotFound', 'File not found: {{file}}', { file: path }));
173
+ }
174
+ return fs.readFileSync(path, 'utf8');
175
+ }
176
+ }
177
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../../src/commands/preferences/site/search.ts"],"names":[],"mappings":"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"}