Skip to content

Commit aaa95c1

Browse files
committed
feat: add option to dump before and after script definition for debugging purpose using the debug-activation flag
1 parent f756e3c commit aaa95c1

File tree

1 file changed

+33
-2
lines changed

1 file changed

+33
-2
lines changed

packages/cli/src/commands/activate.ts

+33-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { Logger, LogManager } from '@vlocode/core';
2-
import { OmniScriptActivator, OmniScriptVersionDetail } from '@vlocode/vlocity-deploy';
1+
import { Logger, LogManager, FileSystem } from '@vlocode/core';
2+
import { OmniScriptActivator, OmniScriptVersionDetail, ScriptDefinitionProvider } from '@vlocode/vlocity-deploy';
33
import { Argument, Option } from '../command';
44
import * as logSymbols from 'log-symbols';
55
import { forEachAsyncParallel, getErrorMessage, groupBy, isSalesforceId, Iterable, sortBy, Timer } from '@vlocode/util';
@@ -40,6 +40,8 @@ export default class extends SalesforceCommand {
4040
new Option('--remote-activation', 'use anonymous apex to activate OmniScripts.' +
4141
'By default Vlocode will generate script definitions locally which is faster and more reliable than remote activation. ' +
4242
'Enable this when you experience issues or inconsistencies in scripts deployed through Vlocode.').default(false),
43+
new Option('--debug-activation', 'save the updated script definitions as JSON file. ' +
44+
'Use this option while debugging to compare scripts activate with `--remote-activation` and local activation').default(false),
4345
];
4446

4547
constructor(private logger: Logger = LogManager.get('vlocode-cli')) {
@@ -73,8 +75,13 @@ export default class extends SalesforceCommand {
7375
}
7476

7577
await forEachAsyncParallel(scriptsToActivate, async info => {
78+
if (options.debugActivation) {
79+
// Save scripts before running activator when debugging
80+
await this.saveDefinition(info.script, { preFix: 'before' });
81+
}
7682
this.logger.info(`Activating ${info.type} (version: ${info.script.version}, id: ${info.script.id})`);
7783
try {
84+
// Activation
7885
await activator.activate(info.script.id, {
7986
toolingApi: !options.useMetadataApi,
8087
skipLwcDeployment: options.skipLwc,
@@ -83,6 +90,10 @@ export default class extends SalesforceCommand {
8390
});
8491
info.status = 'activated';
8592
this.logger.info(`${logSymbols.success} Activated: ${info.type} (${info.script.id})`);
93+
94+
if (options.debugActivation) {
95+
await this.saveDefinition(info.script, { preFix: 'after' });
96+
}
8697
} catch (error) {
8798
info.status = 'error';
8899
errors.push({ script: info.type, error });
@@ -108,6 +119,26 @@ export default class extends SalesforceCommand {
108119
}
109120
}
110121

122+
123+
private async saveDefinition(script: OmniScriptVersionDetail, options?: { preFix?: string, postFix?: string } ) {
124+
const fileNameParts = [
125+
options?.preFix ?? '',
126+
script.type,
127+
script.subType,
128+
options?.postFix ?? ''
129+
];
130+
const fileName = (fileNameParts.filter(f => !!f).join('-').replace(/[\s]+/g, '').replace(/[^a-z0-9_-]+/ig, '') + `.json`).toLowerCase();
131+
try {
132+
const definition = await this.container.get(ScriptDefinitionProvider).getScriptDefinition(script.id);
133+
if (definition) {
134+
this.logger.info(`Saving definition for ${script.id} to ${fileName}`);
135+
await this.container.get(FileSystem).outputFile(fileName, JSON.stringify(definition, null, 4));
136+
}
137+
} catch (error) {
138+
this.logger.error(`Failed to save definition for ${script.id} to ${fileName}: ${getErrorMessage(error)}`);
139+
}
140+
}
141+
111142
private *getScriptsToActivate(scripts: Map<string, ScriptActivationInfo>) {
112143
for (const [, script] of scripts) {
113144
if (script.status === 'activated' || script.status === 'error') {

0 commit comments

Comments
 (0)