sfdx-hardis 5.43.2 → 5.43.3
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
CHANGED
|
@@ -4,6 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
Note: Can be used with `sfdx plugins:install sfdx-hardis@beta` and docker image `hardisgroupcom/sfdx-hardis@beta`
|
|
6
6
|
|
|
7
|
+
## [5.43.3] 2025-06-25
|
|
8
|
+
|
|
9
|
+
- [hardis:project:audit:apiversion](https://sfdx-hardis.cloudity.com/hardis/project/audit/apiversion/): Add the newApiVersion parameter to specify the target version for the upgrade.
|
|
10
|
+
|
|
7
11
|
## [5.43.2] 2025-06-25
|
|
8
12
|
|
|
9
13
|
- Update default API version to 63.0, but if --skipauth is not used, get the apiVersion of default org
|
|
@@ -8,22 +8,24 @@ import sortArray from 'sort-array';
|
|
|
8
8
|
import { catchMatches, generateReports, uxLog } from '../../../../common/utils/index.js';
|
|
9
9
|
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
10
10
|
const messages = Messages.loadMessages('sfdx-hardis', 'org');
|
|
11
|
-
import { CONSTANTS } from '../../../../config/index.js';
|
|
12
11
|
import { GLOB_IGNORE_PATTERNS } from '../../../../common/utils/projectUtils.js';
|
|
13
12
|
export default class CallInCallOut extends SfCommand {
|
|
14
13
|
static title = 'Audit Metadatas API Version';
|
|
15
|
-
static description = `This command
|
|
14
|
+
static description = `This command identifies metadata with an apiVersion lower than the value specified in the --minimumapiversion parameter.
|
|
16
15
|
|
|
17
|
-
It can also
|
|
16
|
+
It can also update the apiVersion to a specific value:
|
|
17
|
+
- When --fix parameter is provided (updates to minimumapiversion)
|
|
18
|
+
- When --newapiversion is specified (updates to that version)
|
|
18
19
|
|
|
19
20
|
Example to handle [ApexClass / Trigger & ApexPage mandatory version upgrade](https://help.salesforce.com/s/articleView?id=sf.admin_locales_update_api.htm&type=5) :
|
|
20
21
|
|
|
21
|
-
\`sf hardis:project:audit:apiversion --metadatatype ApexClass,ApexTrigger,ApexPage --minimumapiversion 45
|
|
22
|
+
\`sf hardis:project:audit:apiversion --metadatatype ApexClass,ApexTrigger,ApexPage --minimumapiversion 45 --newapiversion 50\`
|
|
22
23
|
`;
|
|
23
24
|
static examples = [
|
|
24
25
|
'$ sf hardis:project:audit:apiversion',
|
|
25
26
|
'$ sf hardis:project:audit:apiversion --metadatatype ApexClass,ApexTrigger,ApexPage --minimumapiversion 45',
|
|
26
|
-
'$ sf hardis:project:audit:apiversion --metadatatype ApexClass,ApexTrigger,ApexPage --minimumapiversion 45 --fix'
|
|
27
|
+
'$ sf hardis:project:audit:apiversion --metadatatype ApexClass,ApexTrigger,ApexPage --minimumapiversion 45 --fix',
|
|
28
|
+
'$ sf hardis:project:audit:apiversion --metadatatype ApexClass,ApexTrigger,ApexPage --minimumapiversion 45 --newapiversion 50'
|
|
27
29
|
];
|
|
28
30
|
// public static args = [{name: 'file'}];
|
|
29
31
|
static flags = {
|
|
@@ -54,7 +56,11 @@ export default class CallInCallOut extends SfCommand {
|
|
|
54
56
|
fix: Flags.boolean({
|
|
55
57
|
// can't use "f", already use for failiferror
|
|
56
58
|
default: false,
|
|
57
|
-
description: '
|
|
59
|
+
description: 'Automatically update API versions in files that are below the minimum version threshold to match the minimum version',
|
|
60
|
+
}),
|
|
61
|
+
newapiversion: Flags.integer({
|
|
62
|
+
char: 'n',
|
|
63
|
+
description: 'Define an API version value to apply when updating files',
|
|
58
64
|
}),
|
|
59
65
|
};
|
|
60
66
|
// Set this to true if your command requires a project workspace; 'requiresProject' is false by default
|
|
@@ -64,7 +70,10 @@ export default class CallInCallOut extends SfCommand {
|
|
|
64
70
|
const { flags } = await this.parse(CallInCallOut);
|
|
65
71
|
const minimumApiVersion = flags.minimumapiversion || false;
|
|
66
72
|
const failIfError = flags.failiferror || false;
|
|
67
|
-
const
|
|
73
|
+
const newApiVersion = flags.newapiversion;
|
|
74
|
+
// Apply fixes if either fix flag is present or a new API version is specified
|
|
75
|
+
const shouldFix = flags.fix || (newApiVersion !== undefined);
|
|
76
|
+
const fixApiVersion = newApiVersion || minimumApiVersion;
|
|
68
77
|
const metadataType = flags.metadatatype || '';
|
|
69
78
|
const fixAllowedExtensions = {
|
|
70
79
|
"ApexClass": "cls",
|
|
@@ -74,7 +83,7 @@ export default class CallInCallOut extends SfCommand {
|
|
|
74
83
|
const fixAllowedMetadataTypes = Object.keys(fixAllowedExtensions);
|
|
75
84
|
const fixTargetedMetadataTypes = metadataType.trim() === '' ? [] : (metadataType || '').replace(/\s+/g, '').split(',');
|
|
76
85
|
const fixInvalidMetadataTypes = fixTargetedMetadataTypes.filter(value => !fixAllowedMetadataTypes.includes(value));
|
|
77
|
-
if (fixTargetedMetadataTypes.length > 0 && fixInvalidMetadataTypes.length > 0 &&
|
|
86
|
+
if (fixTargetedMetadataTypes.length > 0 && fixInvalidMetadataTypes.length > 0 && shouldFix) {
|
|
78
87
|
uxLog(this, c.yellow(`[sfdx-hardis] WARNING: --fix Invalid Metadata Type(s) found: ${c.bold(fixInvalidMetadataTypes.join(', '))}. Only ${c.bold(fixAllowedMetadataTypes.join(', '))} Metadata Types are allowed for the fix.`));
|
|
79
88
|
if (failIfError) {
|
|
80
89
|
throw new SfError(c.red(`[sfdx-hardis] WARNING: --fix Invalid Metadata Type(s) found: ${c.bold(fixInvalidMetadataTypes.join(', '))}. Only ${c.bold(fixAllowedMetadataTypes.join(', '))} Metadata Types are allowed for the fix.`));
|
|
@@ -85,7 +94,13 @@ export default class CallInCallOut extends SfCommand {
|
|
|
85
94
|
const fixTargetedMetadataTypesPattern = new RegExp(`\\.(${fixTargetedMetadataTypesExtensions.join('|')})-meta\\.xml$`);
|
|
86
95
|
let pattern = '**/*.xml';
|
|
87
96
|
if (fixTargetedMetadataTypes.length > 0) {
|
|
88
|
-
|
|
97
|
+
// Check if there's only one extension type
|
|
98
|
+
if (fixTargetedMetadataTypesExtensions.length === 1) {
|
|
99
|
+
pattern = `**/*.${fixTargetedMetadataTypesExtensions[0]}-meta.xml`;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
pattern = `**/*.{${fixTargetedMetadataTypesExtensions.join(',')}}-meta.xml`;
|
|
103
|
+
}
|
|
89
104
|
}
|
|
90
105
|
const catchers = [
|
|
91
106
|
{
|
|
@@ -104,11 +119,17 @@ export default class CallInCallOut extends SfCommand {
|
|
|
104
119
|
const fileText = await fs.readFile(file, 'utf8');
|
|
105
120
|
// Update ApiVersion on file
|
|
106
121
|
let fixed = false;
|
|
107
|
-
if (
|
|
108
|
-
const
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
122
|
+
if (shouldFix && fixTargetedMetadataTypes.length > 0 && fixTargetedMetadataTypesPattern.test(file)) {
|
|
123
|
+
const apiVersionMatch = fileText.match(/<apiVersion>(.*?)<\/apiVersion>/);
|
|
124
|
+
if (apiVersionMatch && apiVersionMatch[1]) {
|
|
125
|
+
const currentApiVersion = parseFloat(apiVersionMatch[1]);
|
|
126
|
+
if (currentApiVersion < minimumApiVersion) {
|
|
127
|
+
const updatedContent = fileText.replace(/<apiVersion>(.*?)<\/apiVersion>/, `<apiVersion>${fixApiVersion}.0</apiVersion>`);
|
|
128
|
+
await fs.promises.writeFile(file, updatedContent, 'utf-8');
|
|
129
|
+
fixed = true;
|
|
130
|
+
uxLog(this, `Updated apiVersion in file: ${file} from ${currentApiVersion}.0 to ${fixApiVersion}.0`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
112
133
|
}
|
|
113
134
|
// Loop on criteria to find matches in this file
|
|
114
135
|
for (const catcher of catchers) {
|
|
@@ -128,7 +149,7 @@ export default class CallInCallOut extends SfCommand {
|
|
|
128
149
|
fileName: item.fileName,
|
|
129
150
|
nameSpace: item.fileName.includes('__') ? item.fileName.split('__')[0] : 'Custom',
|
|
130
151
|
apiVersion: parseFloat(item.detail['apiVersion']),
|
|
131
|
-
valid: parseFloat(item.detail['apiVersion'])
|
|
152
|
+
valid: parseFloat(item.detail['apiVersion']) >= (minimumApiVersion || 100) ? 'yes' : 'no',
|
|
132
153
|
fixed: item.fixed ? 'yes' : 'no',
|
|
133
154
|
};
|
|
134
155
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiversion.js","sourceRoot":"","sources":["../../../../../src/commands/hardis/project/audit/apiversion.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,CAAC,MAAM,OAAO,CAAC;AACtB,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAEzF,QAAQ,CAAC,kCAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;AAE7D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"apiversion.js","sourceRoot":"","sources":["../../../../../src/commands/hardis/project/audit/apiversion.ts"],"names":[],"mappings":"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"}
|