sfdx-hardis 6.0.6-beta202508141313.0 → 6.0.7-beta202508191748.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.
- package/CHANGELOG.md +12 -0
- package/defaults/refresh-sandbox/package-certificates-to-save.xml +8 -0
- package/defaults/refresh-sandbox/package-metadatas-to-save.xml +44 -0
- package/lib/commands/hardis/auth/login.js +3 -1
- package/lib/commands/hardis/auth/login.js.map +1 -1
- package/lib/commands/hardis/doc/fieldusage.js +3 -1
- package/lib/commands/hardis/doc/fieldusage.js.map +1 -1
- package/lib/commands/hardis/doc/flow2markdown.js +3 -1
- package/lib/commands/hardis/doc/flow2markdown.js.map +1 -1
- package/lib/commands/hardis/doc/mkdocs-to-cf.js +3 -1
- package/lib/commands/hardis/doc/mkdocs-to-cf.js.map +1 -1
- package/lib/commands/hardis/doc/mkdocs-to-salesforce.js +40 -38
- package/lib/commands/hardis/doc/mkdocs-to-salesforce.js.map +1 -1
- package/lib/commands/hardis/doc/override-prompts.js +3 -1
- package/lib/commands/hardis/doc/override-prompts.js.map +1 -1
- package/lib/commands/hardis/doc/packagexml2markdown.js +28 -26
- package/lib/commands/hardis/doc/packagexml2markdown.js.map +1 -1
- package/lib/commands/hardis/doc/plugin/generate.js +3 -1
- package/lib/commands/hardis/doc/plugin/generate.js.map +1 -1
- package/lib/commands/hardis/git/pull-requests/extract.js +3 -1
- package/lib/commands/hardis/git/pull-requests/extract.js.map +1 -1
- package/lib/commands/hardis/lint/access.js +3 -1
- package/lib/commands/hardis/lint/access.js.map +1 -1
- package/lib/commands/hardis/lint/metadatastatus.js +3 -1
- package/lib/commands/hardis/lint/metadatastatus.js.map +1 -1
- package/lib/commands/hardis/lint/missingattributes.js +3 -1
- package/lib/commands/hardis/lint/missingattributes.js.map +1 -1
- package/lib/commands/hardis/lint/unusedmetadatas.js +3 -1
- package/lib/commands/hardis/lint/unusedmetadatas.js.map +1 -1
- package/lib/commands/hardis/mdapi/deploy.d.ts +1 -1
- package/lib/commands/hardis/mdapi/deploy.js +3 -1
- package/lib/commands/hardis/mdapi/deploy.js.map +1 -1
- package/lib/commands/hardis/misc/custom-label-translations.js +3 -1
- package/lib/commands/hardis/misc/custom-label-translations.js.map +1 -1
- package/lib/commands/hardis/misc/purge-references.js +3 -1
- package/lib/commands/hardis/misc/purge-references.js.map +1 -1
- package/lib/commands/hardis/misc/toml2csv.js +3 -1
- package/lib/commands/hardis/misc/toml2csv.js.map +1 -1
- package/lib/commands/hardis/org/community/update.d.ts +1 -1
- package/lib/commands/hardis/org/community/update.js +3 -1
- package/lib/commands/hardis/org/community/update.js.map +1 -1
- package/lib/commands/hardis/org/configure/data.js +3 -1
- package/lib/commands/hardis/org/configure/data.js.map +1 -1
- package/lib/commands/hardis/org/configure/files.js +3 -1
- package/lib/commands/hardis/org/configure/files.js.map +1 -1
- package/lib/commands/hardis/org/configure/monitoring.js +3 -1
- package/lib/commands/hardis/org/configure/monitoring.js.map +1 -1
- package/lib/commands/hardis/org/connect.js +3 -1
- package/lib/commands/hardis/org/connect.js.map +1 -1
- package/lib/commands/hardis/org/create.js +3 -1
- package/lib/commands/hardis/org/create.js.map +1 -1
- package/lib/commands/hardis/org/data/delete.js +3 -1
- package/lib/commands/hardis/org/data/delete.js.map +1 -1
- package/lib/commands/hardis/org/data/export.js +3 -1
- package/lib/commands/hardis/org/data/export.js.map +1 -1
- package/lib/commands/hardis/org/diagnose/instanceupgrade.js +3 -1
- package/lib/commands/hardis/org/diagnose/instanceupgrade.js.map +1 -1
- package/lib/commands/hardis/org/diagnose/licenses.js +3 -1
- package/lib/commands/hardis/org/diagnose/licenses.js.map +1 -1
- package/lib/commands/hardis/org/diagnose/unused-connected-apps.js +3 -1
- package/lib/commands/hardis/org/diagnose/unused-connected-apps.js.map +1 -1
- package/lib/commands/hardis/org/diagnose/unusedlicenses.js +15 -3
- package/lib/commands/hardis/org/diagnose/unusedlicenses.js.map +1 -1
- package/lib/commands/hardis/org/diagnose/unusedusers.js +6 -4
- package/lib/commands/hardis/org/diagnose/unusedusers.js.map +1 -1
- package/lib/commands/hardis/org/files/export.js +3 -1
- package/lib/commands/hardis/org/files/export.js.map +1 -1
- package/lib/commands/hardis/org/files/import.js +3 -1
- package/lib/commands/hardis/org/files/import.js.map +1 -1
- package/lib/commands/hardis/org/generate/packagexmlfull.js +3 -1
- package/lib/commands/hardis/org/generate/packagexmlfull.js.map +1 -1
- package/lib/commands/hardis/org/monitor/limits.js +3 -1
- package/lib/commands/hardis/org/monitor/limits.js.map +1 -1
- package/lib/commands/hardis/org/multi-org-query.js +3 -1
- package/lib/commands/hardis/org/multi-org-query.js.map +1 -1
- package/lib/commands/hardis/org/purge/apexlog.js +3 -1
- package/lib/commands/hardis/org/purge/apexlog.js.map +1 -1
- package/lib/commands/hardis/org/purge/flow.js +3 -1
- package/lib/commands/hardis/org/purge/flow.js.map +1 -1
- package/lib/commands/hardis/org/refresh/after-refresh.d.ts +22 -0
- package/lib/commands/hardis/org/refresh/after-refresh.js +272 -0
- package/lib/commands/hardis/org/refresh/after-refresh.js.map +1 -0
- package/lib/commands/hardis/org/refresh/before-refresh.d.ts +42 -0
- package/lib/commands/hardis/org/refresh/before-refresh.js +725 -0
- package/lib/commands/hardis/org/refresh/before-refresh.js.map +1 -0
- package/lib/commands/hardis/org/retrieve/packageconfig.js +3 -1
- package/lib/commands/hardis/org/retrieve/packageconfig.js.map +1 -1
- package/lib/commands/hardis/org/retrieve/sources/analytics.js +3 -1
- package/lib/commands/hardis/org/retrieve/sources/analytics.js.map +1 -1
- package/lib/commands/hardis/org/retrieve/sources/dx.js +3 -1
- package/lib/commands/hardis/org/retrieve/sources/dx.js.map +1 -1
- package/lib/commands/hardis/org/retrieve/sources/dx2.js +3 -1
- package/lib/commands/hardis/org/retrieve/sources/dx2.js.map +1 -1
- package/lib/commands/hardis/org/retrieve/sources/metadata.js +3 -1
- package/lib/commands/hardis/org/retrieve/sources/metadata.js.map +1 -1
- package/lib/commands/hardis/org/select.js +3 -1
- package/lib/commands/hardis/org/select.js.map +1 -1
- package/lib/commands/hardis/org/user/freeze.js +3 -1
- package/lib/commands/hardis/org/user/freeze.js.map +1 -1
- package/lib/commands/hardis/org/user/unfreeze.js +3 -1
- package/lib/commands/hardis/org/user/unfreeze.js.map +1 -1
- package/lib/commands/hardis/package/create.js +3 -1
- package/lib/commands/hardis/package/create.js.map +1 -1
- package/lib/commands/hardis/package/mergexml.js +3 -1
- package/lib/commands/hardis/package/mergexml.js.map +1 -1
- package/lib/commands/hardis/package/version/create.js +3 -1
- package/lib/commands/hardis/package/version/create.js.map +1 -1
- package/lib/commands/hardis/package/version/list.js +3 -1
- package/lib/commands/hardis/package/version/list.js.map +1 -1
- package/lib/commands/hardis/package/version/promote.js +3 -1
- package/lib/commands/hardis/package/version/promote.js.map +1 -1
- package/lib/commands/hardis/packagexml/append.d.ts +1 -1
- package/lib/commands/hardis/packagexml/append.js +3 -1
- package/lib/commands/hardis/packagexml/append.js.map +1 -1
- package/lib/commands/hardis/packagexml/remove.d.ts +1 -1
- package/lib/commands/hardis/packagexml/remove.js +3 -1
- package/lib/commands/hardis/packagexml/remove.js.map +1 -1
- package/lib/commands/hardis/project/audit/callincallout.js +3 -1
- package/lib/commands/hardis/project/audit/callincallout.js.map +1 -1
- package/lib/commands/hardis/project/audit/duplicatefiles.js +3 -1
- package/lib/commands/hardis/project/audit/duplicatefiles.js.map +1 -1
- package/lib/commands/hardis/project/audit/remotesites.js +3 -1
- package/lib/commands/hardis/project/audit/remotesites.js.map +1 -1
- package/lib/commands/hardis/project/clean/emptyitems.js +3 -1
- package/lib/commands/hardis/project/clean/emptyitems.js.map +1 -1
- package/lib/commands/hardis/project/clean/filter-xml-content.d.ts +1 -1
- package/lib/commands/hardis/project/clean/filter-xml-content.js +3 -1
- package/lib/commands/hardis/project/clean/filter-xml-content.js.map +1 -1
- package/lib/commands/hardis/project/clean/hiddenitems.js +3 -1
- package/lib/commands/hardis/project/clean/hiddenitems.js.map +1 -1
- package/lib/commands/hardis/project/clean/manageditems.js +3 -1
- package/lib/commands/hardis/project/clean/manageditems.js.map +1 -1
- package/lib/commands/hardis/project/clean/orgmissingitems.js +3 -1
- package/lib/commands/hardis/project/clean/orgmissingitems.js.map +1 -1
- package/lib/commands/hardis/project/clean/references.js +3 -1
- package/lib/commands/hardis/project/clean/references.js.map +1 -1
- package/lib/commands/hardis/project/clean/retrievefolders.js +3 -1
- package/lib/commands/hardis/project/clean/retrievefolders.js.map +1 -1
- package/lib/commands/hardis/project/clean/standarditems.js +3 -1
- package/lib/commands/hardis/project/clean/standarditems.js.map +1 -1
- package/lib/commands/hardis/project/clean/systemdebug.js +3 -1
- package/lib/commands/hardis/project/clean/systemdebug.js.map +1 -1
- package/lib/commands/hardis/project/configure/auth.js +2 -1
- package/lib/commands/hardis/project/configure/auth.js.map +1 -1
- package/lib/commands/hardis/project/convert/profilestopermsets.js +3 -1
- package/lib/commands/hardis/project/convert/profilestopermsets.js.map +1 -1
- package/lib/commands/hardis/project/deploy/simulate.js +3 -1
- package/lib/commands/hardis/project/deploy/simulate.js.map +1 -1
- package/lib/commands/hardis/project/fix/profiletabs.js +3 -1
- package/lib/commands/hardis/project/fix/profiletabs.js.map +1 -1
- package/lib/commands/hardis/project/fix/v53flexipages.js +3 -1
- package/lib/commands/hardis/project/fix/v53flexipages.js.map +1 -1
- package/lib/commands/hardis/project/generate/bypass.js +3 -1
- package/lib/commands/hardis/project/generate/bypass.js.map +1 -1
- package/lib/commands/hardis/project/generate/gitdelta.js +3 -1
- package/lib/commands/hardis/project/generate/gitdelta.js.map +1 -1
- package/lib/commands/hardis/project/lint.js +3 -1
- package/lib/commands/hardis/project/lint.js.map +1 -1
- package/lib/commands/hardis/scratch/delete.js +3 -1
- package/lib/commands/hardis/scratch/delete.js.map +1 -1
- package/lib/commands/hardis/scratch/pool/localauth.js +3 -1
- package/lib/commands/hardis/scratch/pool/localauth.js.map +1 -1
- package/lib/commands/hardis/scratch/pool/refresh.js +3 -1
- package/lib/commands/hardis/scratch/pool/refresh.js.map +1 -1
- package/lib/commands/hardis/scratch/pool/reset.js +3 -1
- package/lib/commands/hardis/scratch/pool/reset.js.map +1 -1
- package/lib/commands/hardis/scratch/pool/view.js +3 -1
- package/lib/commands/hardis/scratch/pool/view.js.map +1 -1
- package/lib/commands/hardis/scratch/pull.js +3 -1
- package/lib/commands/hardis/scratch/pull.js.map +1 -1
- package/lib/commands/hardis/scratch/push.js +3 -1
- package/lib/commands/hardis/scratch/push.js.map +1 -1
- package/lib/commands/hardis/source/retrieve.d.ts +1 -1
- package/lib/commands/hardis/source/retrieve.js +3 -1
- package/lib/commands/hardis/source/retrieve.js.map +1 -1
- package/lib/commands/hardis/work/new.js +26 -10
- package/lib/commands/hardis/work/new.js.map +1 -1
- package/lib/commands/hardis/work/refresh.js +3 -1
- package/lib/commands/hardis/work/refresh.js.map +1 -1
- package/lib/commands/hardis/work/resetselection.js +3 -1
- package/lib/commands/hardis/work/resetselection.js.map +1 -1
- package/lib/commands/hardis/work/save.js +3 -1
- package/lib/commands/hardis/work/save.js.map +1 -1
- package/lib/commands/hardis/work/ws.js +3 -1
- package/lib/commands/hardis/work/ws.js.map +1 -1
- package/lib/commands/hello/world.d.ts +1 -1
- package/lib/commands/hello/world.js +3 -1
- package/lib/commands/hello/world.js.map +1 -1
- package/lib/common/utils/apiUtils.js +4 -4
- package/lib/common/utils/apiUtils.js.map +1 -1
- package/lib/common/utils/deployUtils.js +2 -2
- package/lib/common/utils/deployUtils.js.map +1 -1
- package/lib/common/utils/filesUtils.d.ts +1 -0
- package/lib/common/utils/filesUtils.js +5 -3
- package/lib/common/utils/filesUtils.js.map +1 -1
- package/lib/common/utils/orgConfigUtils.d.ts +6 -0
- package/lib/common/utils/orgConfigUtils.js +17 -8
- package/lib/common/utils/orgConfigUtils.js.map +1 -1
- package/lib/common/utils/orgUtils.js +14 -1
- package/lib/common/utils/orgUtils.js.map +1 -1
- package/lib/common/utils/refresh/connectedAppUtils.d.ts +68 -0
- package/lib/common/utils/refresh/connectedAppUtils.js +340 -0
- package/lib/common/utils/refresh/connectedAppUtils.js.map +1 -0
- package/oclif.lock +730 -699
- package/oclif.manifest.json +428 -189
- package/package.json +5 -5
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import c from 'chalk';
|
|
4
|
+
import { glob } from 'glob';
|
|
5
|
+
import { execCommand, createTempDir, uxLog } from '../index.js';
|
|
6
|
+
import { writeXmlFile } from '../xmlUtils.js';
|
|
7
|
+
import { getApiVersion } from '../../../config/index.js';
|
|
8
|
+
import { prompts } from '../prompts.js';
|
|
9
|
+
import { GLOB_IGNORE_PATTERNS } from '../projectUtils.js';
|
|
10
|
+
export function generateConnectedAppPackageXml(connectedApps) {
|
|
11
|
+
return {
|
|
12
|
+
Package: {
|
|
13
|
+
$: {
|
|
14
|
+
xmlns: 'http://soap.sforce.com/2006/04/metadata'
|
|
15
|
+
},
|
|
16
|
+
types: [
|
|
17
|
+
{
|
|
18
|
+
members: connectedApps.map(app => app.fullName),
|
|
19
|
+
name: ['ConnectedApp']
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
version: [getApiVersion()]
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export function generateEmptyPackageXml() {
|
|
27
|
+
return {
|
|
28
|
+
Package: {
|
|
29
|
+
$: {
|
|
30
|
+
xmlns: 'http://soap.sforce.com/2006/04/metadata'
|
|
31
|
+
},
|
|
32
|
+
version: [getApiVersion()]
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export async function createConnectedAppManifest(connectedApps, command) {
|
|
37
|
+
// Create a temporary directory for the manifest
|
|
38
|
+
const tmpDir = await createTempDir();
|
|
39
|
+
const manifestPath = path.join(tmpDir, 'connected-apps-manifest.xml');
|
|
40
|
+
// Generate and write the package.xml content
|
|
41
|
+
const packageXml = generateConnectedAppPackageXml(connectedApps);
|
|
42
|
+
await writeXmlFile(manifestPath, packageXml);
|
|
43
|
+
// Display the XML content for the manifest
|
|
44
|
+
const manifestContent = await fs.readFile(manifestPath, 'utf8');
|
|
45
|
+
uxLog("log", command, c.cyan(`Package.xml manifest for ${connectedApps.length} Connected App(s):\n${manifestContent}`));
|
|
46
|
+
return { manifestPath, tmpDir };
|
|
47
|
+
}
|
|
48
|
+
export async function withConnectedAppIgnoreHandling(operationFn, command) {
|
|
49
|
+
// Temporarily modify .forceignore to allow Connected App operations
|
|
50
|
+
const backupInfo = await disableConnectedAppIgnore(command);
|
|
51
|
+
try {
|
|
52
|
+
// Perform the operation
|
|
53
|
+
return await operationFn(backupInfo);
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
// Always restore .forceignore
|
|
57
|
+
await restoreConnectedAppIgnore(backupInfo, command);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export async function createDestructiveChangesManifest(connectedApps, command) {
|
|
61
|
+
// Create a temporary directory for the manifest
|
|
62
|
+
const tmpDir = await createTempDir();
|
|
63
|
+
const destructiveChangesPath = path.join(tmpDir, 'destructiveChanges.xml');
|
|
64
|
+
const packageXmlPath = path.join(tmpDir, 'package.xml');
|
|
65
|
+
// Generate destructiveChanges.xml using the Connected App Package XML generator
|
|
66
|
+
const destructiveChangesXml = generateConnectedAppPackageXml(connectedApps);
|
|
67
|
+
// Generate empty package.xml required for deployment
|
|
68
|
+
const packageXml = generateEmptyPackageXml();
|
|
69
|
+
await writeXmlFile(destructiveChangesPath, destructiveChangesXml);
|
|
70
|
+
await writeXmlFile(packageXmlPath, packageXml);
|
|
71
|
+
// Display the XML content for destructive changes
|
|
72
|
+
const destructiveXmlContent = await fs.readFile(destructiveChangesPath, 'utf8');
|
|
73
|
+
uxLog("log", command, c.cyan(`Destructive Changes XML for deleting ${connectedApps.length} Connected App(s):\n${destructiveXmlContent}`));
|
|
74
|
+
return { destructiveChangesPath, packageXmlPath, tmpDir };
|
|
75
|
+
}
|
|
76
|
+
export async function deleteConnectedApps(orgUsername, connectedApps, command, saveProjectPath) {
|
|
77
|
+
await withConnectedAppValidation(orgUsername, connectedApps, command, 'delete', async () => {
|
|
78
|
+
if (!orgUsername)
|
|
79
|
+
return; // This should never happen due to validation, but TypeScript needs it
|
|
80
|
+
// Use withConnectedAppIgnoreHandling to handle .forceignore modifications
|
|
81
|
+
await withConnectedAppIgnoreHandling(async () => {
|
|
82
|
+
// Create destructive changes manifests
|
|
83
|
+
const { destructiveChangesPath, packageXmlPath, tmpDir } = await createDestructiveChangesManifest(connectedApps, command);
|
|
84
|
+
// Deploy the destructive changes
|
|
85
|
+
uxLog("log", command, c.grey(`Deploying destructive changes to delete ${connectedApps.length} Connected App(s) from org...`));
|
|
86
|
+
try {
|
|
87
|
+
await execCommand(`sf project deploy start --manifest ${packageXmlPath} --post-destructive-changes ${destructiveChangesPath} --target-org ${orgUsername} --ignore-warnings --ignore-conflicts --json`, command, { output: true, fail: true, cwd: saveProjectPath });
|
|
88
|
+
}
|
|
89
|
+
catch (deleteError) {
|
|
90
|
+
throw new Error(`Failed to delete Connected Apps: ${deleteError.message || String(deleteError)}`);
|
|
91
|
+
}
|
|
92
|
+
// Clean up
|
|
93
|
+
await fs.remove(tmpDir);
|
|
94
|
+
uxLog("log", command, c.grey('Removed temporary deployment files'));
|
|
95
|
+
}, command);
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
export async function disableConnectedAppIgnore(command) {
|
|
99
|
+
const forceignorePath = path.join(process.cwd(), '.forceignore');
|
|
100
|
+
// Check if .forceignore exists
|
|
101
|
+
if (!await fs.pathExists(forceignorePath)) {
|
|
102
|
+
uxLog("log", command, c.grey('No .forceignore file found, no modification needed'));
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
// Create backup
|
|
106
|
+
const tempBackupPath = path.join(process.cwd(), '.forceignore.backup');
|
|
107
|
+
const originalContent = await fs.readFile(forceignorePath, 'utf8');
|
|
108
|
+
await fs.writeFile(tempBackupPath, originalContent);
|
|
109
|
+
// Read content and remove lines that would ignore Connected Apps
|
|
110
|
+
const lines = originalContent.split('\n');
|
|
111
|
+
const filteredLines = lines.filter(line => {
|
|
112
|
+
const trimmedLine = line.trim();
|
|
113
|
+
return !(trimmedLine.includes('connectedApp') ||
|
|
114
|
+
trimmedLine.includes('ConnectedApp') ||
|
|
115
|
+
trimmedLine.includes('connectedApps'));
|
|
116
|
+
});
|
|
117
|
+
// Check if any lines were filtered out
|
|
118
|
+
if (lines.length === filteredLines.length) {
|
|
119
|
+
uxLog("log", command, c.grey('No Connected App ignore patterns found in .forceignore'));
|
|
120
|
+
return { forceignorePath, originalContent, tempBackupPath };
|
|
121
|
+
}
|
|
122
|
+
// Write modified .forceignore
|
|
123
|
+
await fs.writeFile(forceignorePath, filteredLines.join('\n'));
|
|
124
|
+
uxLog("warning", command, c.cyan('Temporarily modified .forceignore to allow Connected App metadata operations'));
|
|
125
|
+
return { forceignorePath, originalContent, tempBackupPath };
|
|
126
|
+
}
|
|
127
|
+
export async function restoreConnectedAppIgnore(backupInfo, command) {
|
|
128
|
+
if (!backupInfo)
|
|
129
|
+
return;
|
|
130
|
+
try {
|
|
131
|
+
// Restore original .forceignore if backup exists
|
|
132
|
+
if (await fs.pathExists(backupInfo.tempBackupPath)) {
|
|
133
|
+
await fs.writeFile(backupInfo.forceignorePath, backupInfo.originalContent);
|
|
134
|
+
await fs.remove(backupInfo.tempBackupPath);
|
|
135
|
+
uxLog("log", command, c.grey('Restored original .forceignore file'));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
uxLog("warning", command, c.yellow(`Error restoring .forceignore: ${error}`));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
export async function retrieveConnectedApps(orgUsername, connectedApps, command, saveProjectPath) {
|
|
143
|
+
await withConnectedAppValidation(orgUsername, connectedApps, command, 'retrieve', async () => {
|
|
144
|
+
if (!orgUsername)
|
|
145
|
+
return; // This should never happen due to validation, but TypeScript needs it
|
|
146
|
+
await performConnectedAppOperationWithManifest(orgUsername, connectedApps, command, 'retrieve', async (manifestPath, orgUsername, command) => {
|
|
147
|
+
await execCommand(`sf project retrieve start --manifest ${manifestPath} --target-org ${orgUsername} --ignore-conflicts --json`, command, { output: true, fail: true, cwd: saveProjectPath });
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
export async function deployConnectedApps(orgUsername, connectedApps, command, saveProjectPath) {
|
|
152
|
+
await withConnectedAppValidation(orgUsername, connectedApps, command, 'deploy', async () => {
|
|
153
|
+
if (!orgUsername)
|
|
154
|
+
return; // This should never happen due to validation, but TypeScript needs it
|
|
155
|
+
await performConnectedAppOperationWithManifest(orgUsername, connectedApps, command, 'deploy', async (manifestPath, orgUsername, command) => {
|
|
156
|
+
await execCommand(`sf project deploy start --manifest ${manifestPath} --target-org ${orgUsername} --ignore-warnings --json`, command, { output: true, fail: true, cwd: saveProjectPath });
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
export function toConnectedAppFormat(apps) {
|
|
161
|
+
return apps.map(app => {
|
|
162
|
+
return {
|
|
163
|
+
fullName: app.fullName,
|
|
164
|
+
fileName: app.fileName || app.fullName || (app.filePath ? path.basename(app.filePath, '.connectedApp-meta.xml') : app.fullName),
|
|
165
|
+
type: 'ConnectedApp'
|
|
166
|
+
};
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
export function validateConnectedApps(requestedApps, availableApps, command, context) {
|
|
170
|
+
// Case-insensitive matching for app names
|
|
171
|
+
const missingApps = requestedApps.filter(name => !availableApps.some(availableName => availableName.toLowerCase() === name.toLowerCase()));
|
|
172
|
+
if (missingApps.length > 0) {
|
|
173
|
+
const errorMsg = `The following Connected App(s) could not be found in the ${context}: ${missingApps.join(', ')}`;
|
|
174
|
+
uxLog("error", command, c.red(errorMsg));
|
|
175
|
+
if (availableApps.length > 0) {
|
|
176
|
+
uxLog("warning", command, c.yellow(`Available Connected Apps in the ${context}:`));
|
|
177
|
+
availableApps.forEach(name => {
|
|
178
|
+
uxLog("log", command, c.grey(` - ${name}`));
|
|
179
|
+
});
|
|
180
|
+
// Suggest similar names to help the user
|
|
181
|
+
missingApps.forEach(missingApp => {
|
|
182
|
+
const similarNames = availableApps
|
|
183
|
+
.filter(name => name.toLowerCase().includes(missingApp.toLowerCase()) ||
|
|
184
|
+
missingApp.toLowerCase().includes(name.toLowerCase()))
|
|
185
|
+
.slice(0, 3);
|
|
186
|
+
if (similarNames.length > 0) {
|
|
187
|
+
uxLog("warning", command, c.yellow(`Did you mean one of these instead of "${missingApp}"?`));
|
|
188
|
+
similarNames.forEach(name => {
|
|
189
|
+
uxLog("log", command, c.grey(` - ${name}`));
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
uxLog("warning", command, c.yellow(`No Connected Apps were found in the ${context}.`));
|
|
196
|
+
}
|
|
197
|
+
uxLog("warning", command, c.yellow('Please check the app name(s) and try again.'));
|
|
198
|
+
throw new Error(errorMsg);
|
|
199
|
+
}
|
|
200
|
+
// Return the list of valid apps
|
|
201
|
+
const validApps = requestedApps.filter(name => availableApps.some(availableName => availableName.toLowerCase() === name.toLowerCase()));
|
|
202
|
+
return { missingApps, validApps };
|
|
203
|
+
}
|
|
204
|
+
export function validateConnectedAppParams(orgUsername, connectedApps) {
|
|
205
|
+
if (!orgUsername) {
|
|
206
|
+
throw new Error('Organization username is required');
|
|
207
|
+
}
|
|
208
|
+
if (!connectedApps || connectedApps.length === 0) {
|
|
209
|
+
throw new Error('No Connected Apps specified');
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
export async function promptForConnectedAppSelection(connectedApps, initialSelection = [], promptMessage) {
|
|
213
|
+
// Create choices for the prompt
|
|
214
|
+
const choices = connectedApps.map(app => {
|
|
215
|
+
return { title: app.fullName, value: app.fullName };
|
|
216
|
+
});
|
|
217
|
+
// Prompt user for selection
|
|
218
|
+
const promptResponse = await prompts({
|
|
219
|
+
type: 'multiselect',
|
|
220
|
+
name: 'selectedApps',
|
|
221
|
+
message: promptMessage,
|
|
222
|
+
description: 'Select Connected Apps to process',
|
|
223
|
+
choices: choices,
|
|
224
|
+
initial: initialSelection,
|
|
225
|
+
});
|
|
226
|
+
if (!promptResponse.selectedApps || promptResponse.selectedApps.length === 0) {
|
|
227
|
+
return [];
|
|
228
|
+
}
|
|
229
|
+
// Filter apps based on selection
|
|
230
|
+
const selectedApps = connectedApps.filter(app => promptResponse.selectedApps.includes(app.fullName));
|
|
231
|
+
return selectedApps;
|
|
232
|
+
}
|
|
233
|
+
export async function findConnectedAppFile(appName, command, saveProjectPath) {
|
|
234
|
+
uxLog("other", command, c.cyan(`Searching for Connected App: ${appName}`));
|
|
235
|
+
try {
|
|
236
|
+
// First, try an exact case-sensitive match
|
|
237
|
+
const exactPattern = `**/${appName}.connectedApp-meta.xml`;
|
|
238
|
+
const exactMatches = await glob(exactPattern, { ignore: GLOB_IGNORE_PATTERNS, cwd: saveProjectPath });
|
|
239
|
+
if (exactMatches.length > 0) {
|
|
240
|
+
uxLog("success", command, c.green(`✓ Found Connected App: ${exactMatches[0]}`));
|
|
241
|
+
return path.join(saveProjectPath, exactMatches[0]);
|
|
242
|
+
}
|
|
243
|
+
// Try standard locations with possible name variations
|
|
244
|
+
const possiblePaths = [
|
|
245
|
+
path.join(saveProjectPath, `force-app/main/default/connectedApps/${appName}.connectedApp-meta.xml`),
|
|
246
|
+
path.join(saveProjectPath, `force-app/main/default/connectedApps/${appName.replace(/\s/g, '_')}.connectedApp-meta.xml`),
|
|
247
|
+
path.join(saveProjectPath, `force-app/main/default/connectedApps/${appName.replace(/\s/g, '')}.connectedApp-meta.xml`)
|
|
248
|
+
];
|
|
249
|
+
for (const potentialPath of possiblePaths) {
|
|
250
|
+
if (fs.existsSync(potentialPath)) {
|
|
251
|
+
uxLog("success", command, c.green(`✓ Found Connected App at standard path: ${potentialPath}`));
|
|
252
|
+
return potentialPath;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
// If no exact match, try case-insensitive search by getting all ConnectedApp files
|
|
256
|
+
uxLog("warning", command, c.yellow(`No exact match found, trying case-insensitive search...`));
|
|
257
|
+
const allConnectedAppFiles = await glob('**/*.connectedApp-meta.xml', { ignore: GLOB_IGNORE_PATTERNS, cwd: saveProjectPath });
|
|
258
|
+
if (allConnectedAppFiles.length === 0) {
|
|
259
|
+
uxLog("error", command, c.red(`No Connected App files found in the project.`));
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
// Find a case-insensitive match
|
|
263
|
+
const caseInsensitiveMatch = allConnectedAppFiles.find(file => {
|
|
264
|
+
const baseName = path.basename(file, '.connectedApp-meta.xml');
|
|
265
|
+
return baseName.toLowerCase() === appName.toLowerCase() ||
|
|
266
|
+
baseName.toLowerCase() === appName.toLowerCase().replace(/\s/g, '_') ||
|
|
267
|
+
baseName.toLowerCase() === appName.toLowerCase().replace(/\s/g, '');
|
|
268
|
+
});
|
|
269
|
+
if (caseInsensitiveMatch) {
|
|
270
|
+
uxLog("success", command, c.green(`✓ Found case-insensitive match: ${caseInsensitiveMatch}`));
|
|
271
|
+
return path.join(saveProjectPath, caseInsensitiveMatch);
|
|
272
|
+
}
|
|
273
|
+
// If still not found, list available Connected Apps
|
|
274
|
+
uxLog("error", command, c.red(`✗ Could not find Connected App "${appName}"`));
|
|
275
|
+
const allConnectedAppNames = allConnectedAppFiles.map(file => "- " + path.basename(file, '.connectedApp-meta.xml')).join('\n');
|
|
276
|
+
uxLog("warning", command, c.yellow(`Available Connected Apps:\n${allConnectedAppNames}`));
|
|
277
|
+
return null;
|
|
278
|
+
}
|
|
279
|
+
catch (error) {
|
|
280
|
+
uxLog("error", command, c.red(`Error searching for Connected App: ${error}`));
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
export async function selectConnectedAppsForProcessing(connectedApps, initialSelection = [], processAll, nameFilter, promptMessage, command) {
|
|
285
|
+
// If all flag or name is provided, use all connected apps from the list without prompting
|
|
286
|
+
if (processAll || nameFilter) {
|
|
287
|
+
const selectionReason = processAll ? 'all flag' : 'name filter';
|
|
288
|
+
uxLog("action", command, c.cyan(`Processing ${connectedApps.length} Connected App(s) based on ${selectionReason}`));
|
|
289
|
+
return connectedApps;
|
|
290
|
+
}
|
|
291
|
+
// Otherwise, prompt for selection
|
|
292
|
+
return await promptForConnectedAppSelection(connectedApps, initialSelection, promptMessage);
|
|
293
|
+
}
|
|
294
|
+
export async function withConnectedAppValidation(orgUsername, connectedApps, command, operationName, operationFn) {
|
|
295
|
+
try {
|
|
296
|
+
validateConnectedAppParams(orgUsername, connectedApps);
|
|
297
|
+
}
|
|
298
|
+
catch (error) {
|
|
299
|
+
uxLog("log", command, c.yellow(`Skipping ${operationName} operation: ${error.message}`));
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
await operationFn();
|
|
303
|
+
}
|
|
304
|
+
export async function performConnectedAppOperationWithManifest(orgUsername, connectedApps, command, operationName, commandFn) {
|
|
305
|
+
// Use withConnectedAppIgnoreHandling to handle .forceignore modifications
|
|
306
|
+
await withConnectedAppIgnoreHandling(async () => {
|
|
307
|
+
// Create a manifest for the Connected Apps
|
|
308
|
+
const { manifestPath, tmpDir } = await createConnectedAppManifest(connectedApps, command);
|
|
309
|
+
// Execute the operation using the manifest
|
|
310
|
+
uxLog("log", command, c.cyan(`${operationName === 'retrieve' ? 'Retrieving' : 'Deploying'} ${connectedApps.length} Connected App(s) ${operationName === 'retrieve' ? 'from' : 'to'} org...`));
|
|
311
|
+
try {
|
|
312
|
+
await commandFn(manifestPath, orgUsername, command);
|
|
313
|
+
// Wait a moment to ensure files are written to disk (especially for retrieve operations)
|
|
314
|
+
if (operationName === 'retrieve') {
|
|
315
|
+
uxLog("log", command, c.grey('Waiting for files to be written to disk...'));
|
|
316
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
catch (error) {
|
|
320
|
+
throw new Error(`Failed to ${operationName} Connected Apps: ${error.message || String(error)}`);
|
|
321
|
+
}
|
|
322
|
+
// Clean up
|
|
323
|
+
await fs.remove(tmpDir);
|
|
324
|
+
uxLog("log", command, c.grey('Removed temporary manifest file'));
|
|
325
|
+
}, command);
|
|
326
|
+
}
|
|
327
|
+
export function createConnectedAppSuccessResponse(message, processedApps, additionalData = {}) {
|
|
328
|
+
return {
|
|
329
|
+
success: true,
|
|
330
|
+
message,
|
|
331
|
+
connectedAppsProcessed: processedApps,
|
|
332
|
+
...additionalData
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
export function handleConnectedAppError(error, command) {
|
|
336
|
+
const errorMessage = error.message || JSON.stringify(error);
|
|
337
|
+
uxLog("error", command, c.red(`Error: ${errorMessage}`));
|
|
338
|
+
return { success: false, error: errorMessage };
|
|
339
|
+
}
|
|
340
|
+
//# sourceMappingURL=connectedAppUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectedAppUtils.js","sourceRoot":"","sources":["../../../../src/common/utils/refresh/connectedAppUtils.ts"],"names":[],"mappings":"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"}
|