@salesforce/plugin-orchestrator 1.0.18 → 1.0.20
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/lib/commands/orchestrator/app/upgrade.d.ts +32 -0
- package/lib/commands/orchestrator/app/upgrade.js +188 -0
- package/lib/commands/orchestrator/app/upgrade.js.map +1 -0
- package/lib/commands/orchestrator/rules/eval.d.ts +63 -0
- package/lib/commands/orchestrator/rules/eval.js +126 -0
- package/lib/commands/orchestrator/rules/eval.js.map +1 -0
- package/lib/commands/orchestrator/template/list.d.ts +1 -0
- package/lib/commands/orchestrator/template/list.js +12 -2
- package/lib/commands/orchestrator/template/list.js.map +1 -1
- package/messages/appframework.list.template.md +22 -0
- package/messages/orchestrator.app.upgrade.md +141 -0
- package/messages/orchestrator.rules.eval.md +55 -0
- package/npm-shrinkwrap.json +4127 -3689
- package/oclif.lock +3576 -3475
- package/oclif.manifest.json +267 -3
- package/package.json +30 -8
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { SfCommand } from '@salesforce/sf-plugins-core';
|
|
2
|
+
export type OrchestratorAppUpgradeResult = {
|
|
3
|
+
appId: string;
|
|
4
|
+
};
|
|
5
|
+
export default class OrchestratorAppUpgrade extends SfCommand<OrchestratorAppUpgradeResult> {
|
|
6
|
+
static readonly summary: string;
|
|
7
|
+
static readonly description: string;
|
|
8
|
+
static readonly examples: string[];
|
|
9
|
+
static readonly state = "preview";
|
|
10
|
+
static readonly flags: {
|
|
11
|
+
'target-org': import("@oclif/core/interfaces").OptionFlag<import("@salesforce/core").Org, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
'api-version': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
'app-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
'app-name': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
'template-id': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
|
+
'template-values': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
|
+
'runtime-method': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
18
|
+
'log-level': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
19
|
+
'chain-name': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
20
|
+
};
|
|
21
|
+
private static validateRequiredFlags;
|
|
22
|
+
private static validateTemplateMatch;
|
|
23
|
+
private static parseTemplateValues;
|
|
24
|
+
private static buildUpdateOptions;
|
|
25
|
+
private static resolveAppById;
|
|
26
|
+
private static handleUpgradeError;
|
|
27
|
+
run(): Promise<OrchestratorAppUpgradeResult>;
|
|
28
|
+
private resolveApp;
|
|
29
|
+
private resolveAppByName;
|
|
30
|
+
private executeUpgrade;
|
|
31
|
+
private displayUpgradedApp;
|
|
32
|
+
}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2025, Salesforce, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { SfCommand, Flags } from '@salesforce/sf-plugins-core';
|
|
17
|
+
import { Messages, SfError } from '@salesforce/core';
|
|
18
|
+
import AppFrameworkApp from '../../../utils/app/appframeworkapp.js';
|
|
19
|
+
import { AppListUtil } from '../../../utils/app/appListUtils.js';
|
|
20
|
+
import { AppDisplayUtil } from '../../../utils/app/appDisplayUtil.js';
|
|
21
|
+
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
22
|
+
const messages = Messages.loadMessages('@salesforce/plugin-orchestrator', 'orchestrator.app.upgrade');
|
|
23
|
+
export default class OrchestratorAppUpgrade extends SfCommand {
|
|
24
|
+
static summary = messages.getMessage('summary');
|
|
25
|
+
static description = messages.getMessage('description');
|
|
26
|
+
static examples = messages.getMessages('examples');
|
|
27
|
+
static state = 'preview';
|
|
28
|
+
static flags = {
|
|
29
|
+
'target-org': Flags.requiredOrg({
|
|
30
|
+
summary: messages.getMessage('flags.target-org.summary'),
|
|
31
|
+
description: messages.getMessage('flags.target-org.description'),
|
|
32
|
+
required: true,
|
|
33
|
+
}),
|
|
34
|
+
'api-version': Flags.orgApiVersion({
|
|
35
|
+
summary: messages.getMessage('flags.api-version.summary'),
|
|
36
|
+
description: messages.getMessage('flags.api-version.description'),
|
|
37
|
+
}),
|
|
38
|
+
'app-id': Flags.string({
|
|
39
|
+
char: 'i',
|
|
40
|
+
summary: messages.getMessage('flags.app-id.summary'),
|
|
41
|
+
description: messages.getMessage('flags.app-id.description'),
|
|
42
|
+
exclusive: ['app-name'],
|
|
43
|
+
}),
|
|
44
|
+
'app-name': Flags.string({
|
|
45
|
+
char: 'n',
|
|
46
|
+
summary: messages.getMessage('flags.app-name.summary'),
|
|
47
|
+
description: messages.getMessage('flags.app-name.description'),
|
|
48
|
+
exclusive: ['app-id'],
|
|
49
|
+
}),
|
|
50
|
+
'template-id': Flags.string({
|
|
51
|
+
char: 't',
|
|
52
|
+
summary: messages.getMessage('flags.template-id.summary'),
|
|
53
|
+
description: messages.getMessage('flags.template-id.description'),
|
|
54
|
+
required: true,
|
|
55
|
+
}),
|
|
56
|
+
'template-values': Flags.string({
|
|
57
|
+
char: 'v',
|
|
58
|
+
summary: messages.getMessage('flags.template-values.summary'),
|
|
59
|
+
description: messages.getMessage('flags.template-values.description'),
|
|
60
|
+
}),
|
|
61
|
+
'runtime-method': Flags.string({
|
|
62
|
+
char: 'r',
|
|
63
|
+
summary: messages.getMessage('flags.runtime-method.summary'),
|
|
64
|
+
description: messages.getMessage('flags.runtime-method.description'),
|
|
65
|
+
options: ['sync', 'async'],
|
|
66
|
+
}),
|
|
67
|
+
'log-level': Flags.string({
|
|
68
|
+
char: 'l',
|
|
69
|
+
summary: messages.getMessage('flags.log-level.summary'),
|
|
70
|
+
description: messages.getMessage('flags.log-level.description'),
|
|
71
|
+
options: ['debug', 'info', 'warn', 'error'],
|
|
72
|
+
}),
|
|
73
|
+
'chain-name': Flags.string({
|
|
74
|
+
char: 'c',
|
|
75
|
+
summary: messages.getMessage('flags.chain-name.summary'),
|
|
76
|
+
description: messages.getMessage('flags.chain-name.description'),
|
|
77
|
+
}),
|
|
78
|
+
};
|
|
79
|
+
static validateRequiredFlags(flags) {
|
|
80
|
+
if (!flags['app-id'] && !flags['app-name']) {
|
|
81
|
+
throw new SfError(messages.getMessage('noAppSpecified'), 'AppUpgradeError', messages.getMessages('error.UpgradeError.Actions'));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
static validateTemplateMatch(app, templateId) {
|
|
85
|
+
if (app.templateSourceId !== templateId) {
|
|
86
|
+
throw new SfError(`Template ID mismatch. App is using template '${app.templateSourceId ?? 'unknown'}' but you specified '${templateId}'. You cannot change the underlying template during an upgrade.`, 'AppUpgradeError', messages.getMessages('error.UpgradeError.Actions'));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
static parseTemplateValues(templateValuesString) {
|
|
90
|
+
if (!templateValuesString) {
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
const parsed = JSON.parse(templateValuesString);
|
|
95
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
96
|
+
throw new SfError('Template values must be a valid JSON object, not an array or primitive value.', 'AppUpgradeError', messages.getMessages('error.UpgradeError.Actions'));
|
|
97
|
+
}
|
|
98
|
+
return parsed;
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
if (error instanceof SfError) {
|
|
102
|
+
throw error;
|
|
103
|
+
}
|
|
104
|
+
throw new SfError(messages.getMessage('invalidTemplateValues'), 'AppUpgradeError', messages.getMessages('error.UpgradeError.Actions'));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
static buildUpdateOptions(flags, templateValues) {
|
|
108
|
+
const updateOptions = {
|
|
109
|
+
templateSourceId: flags['template-id'],
|
|
110
|
+
templateValues,
|
|
111
|
+
runtimeMethod: flags['runtime-method'],
|
|
112
|
+
logLevel: flags['log-level'],
|
|
113
|
+
};
|
|
114
|
+
if (flags['chain-name']) {
|
|
115
|
+
updateOptions.chainName = flags['chain-name'];
|
|
116
|
+
}
|
|
117
|
+
return updateOptions;
|
|
118
|
+
}
|
|
119
|
+
static async resolveAppById(appId, appFrameworkApp) {
|
|
120
|
+
if (!appId) {
|
|
121
|
+
throw new SfError(messages.getMessage('noAppSpecified'), 'AppUpgradeError', messages.getMessages('error.UpgradeError.Actions'));
|
|
122
|
+
}
|
|
123
|
+
const app = await appFrameworkApp.getApp(appId);
|
|
124
|
+
if (!app) {
|
|
125
|
+
throw new SfError(messages.getMessage('noAppFound'), 'AppUpgradeError', messages.getMessages('error.UpgradeError.Actions'));
|
|
126
|
+
}
|
|
127
|
+
return { appId, app };
|
|
128
|
+
}
|
|
129
|
+
static handleUpgradeError(error) {
|
|
130
|
+
if (error instanceof SfError) {
|
|
131
|
+
throw error;
|
|
132
|
+
}
|
|
133
|
+
throw new SfError(messages.getMessage('error.UpgradeError', [error.message]), 'AppUpgradeError', messages.getMessages('error.UpgradeError.Actions'), undefined, error);
|
|
134
|
+
}
|
|
135
|
+
async run() {
|
|
136
|
+
const { flags } = await this.parse(OrchestratorAppUpgrade);
|
|
137
|
+
OrchestratorAppUpgrade.validateRequiredFlags(flags);
|
|
138
|
+
try {
|
|
139
|
+
const connection = flags['target-org'].getConnection(flags['api-version']);
|
|
140
|
+
const appFrameworkApp = new AppFrameworkApp(connection);
|
|
141
|
+
const { appId, app } = await this.resolveApp(flags, appFrameworkApp);
|
|
142
|
+
OrchestratorAppUpgrade.validateTemplateMatch(app, flags['template-id']);
|
|
143
|
+
const templateValues = OrchestratorAppUpgrade.parseTemplateValues(flags['template-values']);
|
|
144
|
+
const updateOptions = OrchestratorAppUpgrade.buildUpdateOptions(flags, templateValues);
|
|
145
|
+
const upgradedAppId = await this.executeUpgrade(appFrameworkApp, appId, updateOptions);
|
|
146
|
+
await this.displayUpgradedApp(appFrameworkApp, upgradedAppId);
|
|
147
|
+
return { appId: upgradedAppId };
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
this.spinner.stop();
|
|
151
|
+
OrchestratorAppUpgrade.handleUpgradeError(error);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
async resolveApp(flags, appFrameworkApp) {
|
|
155
|
+
if (flags['app-name']) {
|
|
156
|
+
return this.resolveAppByName(flags['app-name'], appFrameworkApp);
|
|
157
|
+
}
|
|
158
|
+
return OrchestratorAppUpgrade.resolveAppById(flags['app-id'], appFrameworkApp);
|
|
159
|
+
}
|
|
160
|
+
async resolveAppByName(appName, appFrameworkApp) {
|
|
161
|
+
this.spinner.start(messages.getMessage('fetchingApp'));
|
|
162
|
+
const apps = await appFrameworkApp.list();
|
|
163
|
+
const foundApp = apps.find((a) => a.name === appName);
|
|
164
|
+
if (!foundApp?.id) {
|
|
165
|
+
this.spinner.stop();
|
|
166
|
+
throw new SfError(messages.getMessage('noAppFound'), 'AppUpgradeError', messages.getMessages('error.UpgradeError.Actions'));
|
|
167
|
+
}
|
|
168
|
+
this.spinner.stop();
|
|
169
|
+
return { appId: foundApp.id, app: foundApp };
|
|
170
|
+
}
|
|
171
|
+
async executeUpgrade(appFrameworkApp, appId, updateOptions) {
|
|
172
|
+
this.spinner.start(messages.getMessage('upgradingApp'));
|
|
173
|
+
const upgradedAppId = await appFrameworkApp.updateApp(appId, updateOptions);
|
|
174
|
+
this.spinner.stop();
|
|
175
|
+
this.log(messages.getMessage('upgradeSuccess', [upgradedAppId]));
|
|
176
|
+
return upgradedAppId;
|
|
177
|
+
}
|
|
178
|
+
async displayUpgradedApp(appFrameworkApp, upgradedAppId) {
|
|
179
|
+
const upgradedApp = await appFrameworkApp.getApp(upgradedAppId);
|
|
180
|
+
if (upgradedApp) {
|
|
181
|
+
const processedApps = AppListUtil.processApps([upgradedApp]);
|
|
182
|
+
if (processedApps.length > 0) {
|
|
183
|
+
AppDisplayUtil.displayAppDetails(this, processedApps[0]);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=upgrade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../../../src/commands/orchestrator/app/upgrade.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { SfCommand } from '@salesforce/sf-plugins-core';
|
|
2
|
+
type TransformationPayload = {
|
|
3
|
+
document: {
|
|
4
|
+
user: {
|
|
5
|
+
firstName: string;
|
|
6
|
+
lastName: string;
|
|
7
|
+
userName: string;
|
|
8
|
+
id: string;
|
|
9
|
+
hello: string;
|
|
10
|
+
};
|
|
11
|
+
company: {
|
|
12
|
+
id: string;
|
|
13
|
+
name: string;
|
|
14
|
+
namespace: string;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
values: {
|
|
18
|
+
Variables: {
|
|
19
|
+
hello: string;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
definition: {
|
|
23
|
+
rules: Array<{
|
|
24
|
+
name: string;
|
|
25
|
+
actions: Array<{
|
|
26
|
+
action: string;
|
|
27
|
+
description: string;
|
|
28
|
+
key: string;
|
|
29
|
+
path: string;
|
|
30
|
+
value: string;
|
|
31
|
+
}>;
|
|
32
|
+
}>;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
type TemplateInfo = {
|
|
36
|
+
name: string;
|
|
37
|
+
path: string;
|
|
38
|
+
source: 'static' | 'local';
|
|
39
|
+
};
|
|
40
|
+
export type TemplatePreviewResult = {
|
|
41
|
+
status: 'success' | 'error';
|
|
42
|
+
template?: TemplateInfo;
|
|
43
|
+
input?: TransformationPayload;
|
|
44
|
+
output?: unknown;
|
|
45
|
+
error?: string;
|
|
46
|
+
executionTime?: string;
|
|
47
|
+
};
|
|
48
|
+
export default class TemplateEval extends SfCommand<TemplatePreviewResult> {
|
|
49
|
+
static readonly summary: string;
|
|
50
|
+
static readonly description: string;
|
|
51
|
+
static readonly examples: string[];
|
|
52
|
+
static readonly flags: {
|
|
53
|
+
'target-org': import("@oclif/core/interfaces").OptionFlag<import("@salesforce/core").Org, import("@oclif/core/interfaces").CustomOptions>;
|
|
54
|
+
'api-version': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
55
|
+
'template-info': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
56
|
+
variables: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
57
|
+
rules: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
58
|
+
};
|
|
59
|
+
run(): Promise<TemplatePreviewResult>;
|
|
60
|
+
private getTemplatePayload;
|
|
61
|
+
private getDirectFilePayload;
|
|
62
|
+
}
|
|
63
|
+
export {};
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2025, Salesforce, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import * as fs from 'node:fs/promises';
|
|
17
|
+
import { SfCommand, Flags } from '@salesforce/sf-plugins-core';
|
|
18
|
+
import { Messages } from '@salesforce/core';
|
|
19
|
+
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
20
|
+
const messages = Messages.loadMessages('@salesforce/plugin-orchestrator', 'orchestrator.rules.eval');
|
|
21
|
+
export default class TemplateEval extends SfCommand {
|
|
22
|
+
static summary = messages.getMessage('summary');
|
|
23
|
+
static description = messages.getMessage('description');
|
|
24
|
+
static examples = messages.getMessages('examples');
|
|
25
|
+
static flags = {
|
|
26
|
+
'target-org': Flags.requiredOrg({
|
|
27
|
+
summary: messages.getMessage('flags.target-org.summary'),
|
|
28
|
+
description: messages.getMessage('flags.target-org.description'),
|
|
29
|
+
required: true,
|
|
30
|
+
}),
|
|
31
|
+
'api-version': Flags.orgApiVersion({
|
|
32
|
+
summary: messages.getMessage('flags.api-version.summary'),
|
|
33
|
+
description: messages.getMessage('flags.api-version.description'),
|
|
34
|
+
}),
|
|
35
|
+
'template-info': Flags.file({
|
|
36
|
+
char: 't',
|
|
37
|
+
summary: messages.getMessage('flags.template-info.summary'),
|
|
38
|
+
description: messages.getMessage('flags.template-info.description'),
|
|
39
|
+
required: true,
|
|
40
|
+
}),
|
|
41
|
+
variables: Flags.file({
|
|
42
|
+
char: 'v',
|
|
43
|
+
summary: messages.getMessage('flags.variables.summary'),
|
|
44
|
+
description: messages.getMessage('flags.variables.description'),
|
|
45
|
+
required: true,
|
|
46
|
+
}),
|
|
47
|
+
rules: Flags.file({
|
|
48
|
+
char: 'r',
|
|
49
|
+
summary: messages.getMessage('flags.rules.summary'),
|
|
50
|
+
description: messages.getMessage('flags.rules.description'),
|
|
51
|
+
required: true,
|
|
52
|
+
}),
|
|
53
|
+
};
|
|
54
|
+
async run() {
|
|
55
|
+
const { flags } = await this.parse(TemplateEval);
|
|
56
|
+
try {
|
|
57
|
+
const connection = flags['target-org'].getConnection(flags['api-version']);
|
|
58
|
+
// Determine template source and payload
|
|
59
|
+
const templateResult = await this.getTemplatePayload(flags);
|
|
60
|
+
this.log(`Testing transformation: ${templateResult.template.name}`);
|
|
61
|
+
this.log(`Source: ${templateResult.template.source}`);
|
|
62
|
+
if (templateResult.template.source === 'local') {
|
|
63
|
+
this.log(`Path: ${templateResult.template.path}`);
|
|
64
|
+
}
|
|
65
|
+
const startTime = Date.now();
|
|
66
|
+
// Make request to jsonxform/transformation endpoint
|
|
67
|
+
const apiPath = `/services/data/v${connection.getApiVersion()}/jsonxform/transformation`;
|
|
68
|
+
const result = await connection.request({
|
|
69
|
+
method: 'POST',
|
|
70
|
+
url: apiPath,
|
|
71
|
+
body: JSON.stringify(templateResult.payload),
|
|
72
|
+
headers: {
|
|
73
|
+
'Content-Type': 'application/json',
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
const executionTime = `${Date.now() - startTime}ms`;
|
|
77
|
+
this.log('Transformation completed successfully!');
|
|
78
|
+
this.log('Results:');
|
|
79
|
+
this.log(JSON.stringify(result, null, 2));
|
|
80
|
+
return {
|
|
81
|
+
status: 'success',
|
|
82
|
+
template: templateResult.template,
|
|
83
|
+
input: templateResult.payload,
|
|
84
|
+
output: result,
|
|
85
|
+
executionTime,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
this.log(`Transformation failed: ${error.message}`);
|
|
90
|
+
return {
|
|
91
|
+
status: 'error',
|
|
92
|
+
error: error.message,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async getTemplatePayload(flags) {
|
|
97
|
+
return this.getDirectFilePayload(flags['template-info'], flags['variables'], flags['rules']);
|
|
98
|
+
}
|
|
99
|
+
async getDirectFilePayload(templateInfoFile, variablesFile, rulesFile) {
|
|
100
|
+
this.log(`Loading template info: ${templateInfoFile}`);
|
|
101
|
+
// Read and parse the template-info file
|
|
102
|
+
const templateInfoContent = await fs.readFile(templateInfoFile, 'utf8');
|
|
103
|
+
const document = JSON.parse(templateInfoContent);
|
|
104
|
+
// Read variables file
|
|
105
|
+
this.log(`Loading variables: ${variablesFile}`);
|
|
106
|
+
const variablesContent = await fs.readFile(variablesFile, 'utf8');
|
|
107
|
+
const values = JSON.parse(variablesContent);
|
|
108
|
+
// Read rules file
|
|
109
|
+
this.log(`Loading rules: ${rulesFile}`);
|
|
110
|
+
const rulesContent = await fs.readFile(rulesFile, 'utf8');
|
|
111
|
+
const definition = JSON.parse(rulesContent);
|
|
112
|
+
return {
|
|
113
|
+
template: {
|
|
114
|
+
name: 'Direct Files',
|
|
115
|
+
path: templateInfoFile,
|
|
116
|
+
source: 'local',
|
|
117
|
+
},
|
|
118
|
+
payload: {
|
|
119
|
+
document: document,
|
|
120
|
+
values: values,
|
|
121
|
+
definition: definition,
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=eval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eval.js","sourceRoot":"","sources":["../../../../src/commands/orchestrator/rules/eval.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ export default class ListTemplate extends SfCommand<TemplateData[]> {
|
|
|
8
8
|
static readonly flags: {
|
|
9
9
|
'target-org': import("@oclif/core/interfaces").OptionFlag<import("@salesforce/core").Org, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
10
|
'api-version': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
all: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
12
|
};
|
|
12
13
|
run(): Promise<TemplateData[]>;
|
|
13
14
|
}
|
|
@@ -35,6 +35,11 @@ export default class ListTemplate extends SfCommand {
|
|
|
35
35
|
summary: messages.getMessage('flags.api-version.summary'),
|
|
36
36
|
description: messages.getMessage('flags.api-version.description'),
|
|
37
37
|
}),
|
|
38
|
+
all: Flags.boolean({
|
|
39
|
+
summary: messages.getMessage('flags.all.summary'),
|
|
40
|
+
description: messages.getMessage('flags.all.description'),
|
|
41
|
+
default: false,
|
|
42
|
+
}),
|
|
38
43
|
};
|
|
39
44
|
async run() {
|
|
40
45
|
const { flags } = await this.parse(ListTemplate);
|
|
@@ -44,12 +49,17 @@ export default class ListTemplate extends SfCommand {
|
|
|
44
49
|
const appFrameworkTemplate = new AppFrameworkTemplate(connection);
|
|
45
50
|
const rawTemplates = await appFrameworkTemplate.list();
|
|
46
51
|
this.spinner.stop();
|
|
47
|
-
|
|
52
|
+
let templates = TemplateListUtil.processTemplates(rawTemplates);
|
|
53
|
+
// Filter out standard templates by default unless --all flag is used
|
|
54
|
+
if (!flags.all) {
|
|
55
|
+
templates = templates.filter((template) => !template.name?.startsWith('sfdc_internal__'));
|
|
56
|
+
}
|
|
48
57
|
if (templates.length > 0) {
|
|
49
58
|
TemplateDisplayUtil.displayTemplateList(this, templates);
|
|
50
59
|
}
|
|
51
60
|
else {
|
|
52
|
-
|
|
61
|
+
const messageKey = flags.all ? 'noResultsFound' : 'noCustomTemplatesFound';
|
|
62
|
+
this.log(messages.getMessage(messageKey));
|
|
53
63
|
}
|
|
54
64
|
return templates;
|
|
55
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/orchestrator/template/list.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAc,MAAM,kBAAkB,CAAC;AAEjE,OAAO,oBAAoB,MAAM,iDAAiD,CAAC;AAEnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,gDAAgD,CAAC;AAErF,QAAQ,CAAC,kCAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,iCAAiC,EAAE,4BAA4B,CAAC,CAAC;AAExG,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,SAAyB;IAC1D,MAAM,CAAU,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,CAAU,WAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACjE,MAAM,CAAU,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAC5D,MAAM,CAAU,KAAK,GAAG,SAAS,CAAC;IAElC,MAAM,CAAU,KAAK,GAAG;QAC7B,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC;YAC9B,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,0BAA0B,CAAC;YACxD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,8BAA8B,CAAC;YAChE,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC;YACjC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,2BAA2B,CAAC;YACzD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,+BAA+B,CAAC;SAClE,CAAC;KACH,CAAC;IAEK,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAEjD,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAI7D,MAAM,UAAU,GAAI,KAAK,CAAC,YAAY,CAAa,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;YACxF,MAAM,oBAAoB,GAAG,IAAI,oBAAoB,CAAC,UAAU,CAAC,CAAC;YAClE,MAAM,YAAY,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,CAAC;YACvD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAEpB,
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/orchestrator/template/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,8 @@ List all available templates in the target org.
|
|
|
6
6
|
|
|
7
7
|
Templates are reusable configurations that define the structure and settings for creating orchestrated apps. Use this command to discover available templates in your org before creating new apps.
|
|
8
8
|
|
|
9
|
+
By default, this command only shows custom templates created in your org. Standard Salesforce-provided templates are filtered out to reduce noise. Use the --all flag to include all templates including the standard ones.
|
|
10
|
+
|
|
9
11
|
Templates are displayed in a table format showing their name, label, ID, type, and other metadata. This information helps you choose the right template for your orchestrated app development.
|
|
10
12
|
|
|
11
13
|
You must have Data Cloud and Tableau Next enabled in your org and the AppFrameworkViewApp user permission to view templates. This command works with production orgs, sandboxes, and scratch orgs.
|
|
@@ -28,6 +30,14 @@ You must have Data Cloud and Tableau Next enabled in your org and the AppFramewo
|
|
|
28
30
|
|
|
29
31
|
<%= config.bin %> <%= command.id %> --target-org mySandbox --api-version 60.0
|
|
30
32
|
|
|
33
|
+
- List all templates including standard Salesforce templates:
|
|
34
|
+
|
|
35
|
+
<%= config.bin %> <%= command.id %> --all
|
|
36
|
+
|
|
37
|
+
- List all templates in a specific org:
|
|
38
|
+
|
|
39
|
+
<%= config.bin %> <%= command.id %> --target-org myOrg --all
|
|
40
|
+
|
|
31
41
|
# flags.target-org.summary
|
|
32
42
|
|
|
33
43
|
Login username or alias for the target org.
|
|
@@ -44,6 +54,14 @@ Override the API version used for API requests.
|
|
|
44
54
|
|
|
45
55
|
Override the API version used for orchestrator API requests. Use this flag to specify a particular API version when the default version doesn't work with your org's configuration.
|
|
46
56
|
|
|
57
|
+
# flags.all.summary
|
|
58
|
+
|
|
59
|
+
Show all templates including standard Salesforce templates.
|
|
60
|
+
|
|
61
|
+
# flags.all.description
|
|
62
|
+
|
|
63
|
+
By default, this command only shows custom templates created in your org. Use this flag to include the standard Salesforce-provided templates (those starting with 'sfdc_internal\_\_') in the results.
|
|
64
|
+
|
|
47
65
|
# templatesFound
|
|
48
66
|
|
|
49
67
|
Found %s templates:
|
|
@@ -52,6 +70,10 @@ Found %s templates:
|
|
|
52
70
|
|
|
53
71
|
No templates found.
|
|
54
72
|
|
|
73
|
+
# noCustomTemplatesFound
|
|
74
|
+
|
|
75
|
+
No custom templates found. Use --all to include standard Salesforce templates.
|
|
76
|
+
|
|
55
77
|
# fetchingTemplates
|
|
56
78
|
|
|
57
79
|
Fetching templates...
|