sfdx-hardis 5.45.1-beta202508100154.0 → 6.0.2-beta202508110129.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 (70) hide show
  1. package/CHANGELOG.md +7 -1
  2. package/lib/commands/hardis/doc/fieldusage.js +4 -2
  3. package/lib/commands/hardis/doc/fieldusage.js.map +1 -1
  4. package/lib/commands/hardis/doc/project2markdown.js +1 -1
  5. package/lib/commands/hardis/doc/project2markdown.js.map +1 -1
  6. package/lib/commands/hardis/lint/access.js +3 -3
  7. package/lib/commands/hardis/lint/access.js.map +1 -1
  8. package/lib/commands/hardis/org/diagnose/licenses.js +2 -2
  9. package/lib/commands/hardis/org/diagnose/licenses.js.map +1 -1
  10. package/lib/commands/hardis/org/diagnose/releaseupdates.js +3 -3
  11. package/lib/commands/hardis/org/diagnose/releaseupdates.js.map +1 -1
  12. package/lib/commands/hardis/org/diagnose/unused-apex-classes.js +3 -4
  13. package/lib/commands/hardis/org/diagnose/unused-apex-classes.js.map +1 -1
  14. package/lib/commands/hardis/org/diagnose/unused-connected-apps.js +3 -4
  15. package/lib/commands/hardis/org/diagnose/unused-connected-apps.js.map +1 -1
  16. package/lib/commands/hardis/org/generate/packagexmlfull.js +1 -1
  17. package/lib/commands/hardis/org/generate/packagexmlfull.js.map +1 -1
  18. package/lib/commands/hardis/org/monitor/all.js +3 -3
  19. package/lib/commands/hardis/org/monitor/all.js.map +1 -1
  20. package/lib/commands/hardis/org/monitor/limits.js +2 -2
  21. package/lib/commands/hardis/org/monitor/limits.js.map +1 -1
  22. package/lib/commands/hardis/org/purge/flow.js +7 -5
  23. package/lib/commands/hardis/org/purge/flow.js.map +1 -1
  24. package/lib/commands/hardis/org/select.js +4 -0
  25. package/lib/commands/hardis/org/select.js.map +1 -1
  26. package/lib/commands/hardis/org/user/activateinvalid.js +6 -4
  27. package/lib/commands/hardis/org/user/activateinvalid.js.map +1 -1
  28. package/lib/commands/hardis/org/user/freeze.js +4 -6
  29. package/lib/commands/hardis/org/user/freeze.js.map +1 -1
  30. package/lib/commands/hardis/org/user/unfreeze.js +4 -6
  31. package/lib/commands/hardis/org/user/unfreeze.js.map +1 -1
  32. package/lib/commands/hardis/project/audit/apiversion.js +3 -3
  33. package/lib/commands/hardis/project/audit/apiversion.js.map +1 -1
  34. package/lib/commands/hardis/project/audit/callincallout.js +4 -2
  35. package/lib/commands/hardis/project/audit/callincallout.js.map +1 -1
  36. package/lib/commands/hardis/project/audit/remotesites.js +4 -2
  37. package/lib/commands/hardis/project/audit/remotesites.js.map +1 -1
  38. package/lib/commands/hardis/project/generate/bypass.js +5 -3
  39. package/lib/commands/hardis/project/generate/bypass.js.map +1 -1
  40. package/lib/commands/hardis/project/generate/gitdelta.js +2 -2
  41. package/lib/commands/hardis/project/generate/gitdelta.js.map +1 -1
  42. package/lib/commands/hardis/scratch/pull.js +2 -0
  43. package/lib/commands/hardis/scratch/pull.js.map +1 -1
  44. package/lib/commands/hardis/work/save.js +13 -7
  45. package/lib/commands/hardis/work/save.js.map +1 -1
  46. package/lib/common/gitProvider/index.d.ts +2 -0
  47. package/lib/common/gitProvider/index.js +55 -0
  48. package/lib/common/gitProvider/index.js.map +1 -1
  49. package/lib/common/utils/deployUtils.js +1 -1
  50. package/lib/common/utils/deployUtils.js.map +1 -1
  51. package/lib/common/utils/filesUtils.js +2 -2
  52. package/lib/common/utils/filesUtils.js.map +1 -1
  53. package/lib/common/utils/index.d.ts +1 -0
  54. package/lib/common/utils/index.js +46 -4
  55. package/lib/common/utils/index.js.map +1 -1
  56. package/lib/common/utils/orgUtils.js +5 -5
  57. package/lib/common/utils/orgUtils.js.map +1 -1
  58. package/lib/common/utils/prompts.js +1 -1
  59. package/lib/common/utils/prompts.js.map +1 -1
  60. package/lib/common/websocketClient.d.ts +4 -2
  61. package/lib/common/websocketClient.js +4 -1
  62. package/lib/common/websocketClient.js.map +1 -1
  63. package/lib/hooks/prerun/check-dependencies.js +143 -0
  64. package/lib/hooks/prerun/check-dependencies.js.map +1 -1
  65. package/oclif.lock +1 -9
  66. package/oclif.manifest.json +703 -703
  67. package/package.json +1 -3
  68. package/lib/hooks/init/check-local-sfdx-hardis-files.d.ts +0 -3
  69. package/lib/hooks/init/check-local-sfdx-hardis-files.js +0 -151
  70. package/lib/hooks/init/check-local-sfdx-hardis-files.js.map +0 -1
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "Swiss-army-knife Toolbox for Salesforce.\n Allows you to define a complete CD/CD Pipeline.\n Orchestrate base commands and assist users with interactive wizards",
4
4
  "author": "NicolasVuillamy @nvuillam",
5
5
  "bugs": "https://github.com/hardisgroupcom/sfdx-hardis/issues",
6
- "version": "5.45.1-beta202508100154.0",
6
+ "version": "6.0.2-beta202508110129.0",
7
7
  "dependencies": {
8
8
  "@actions/github": "^6.0.1",
9
9
  "@cparra/apexdocs": "^3.14.0",
@@ -26,7 +26,6 @@
26
26
  "chalk": "^5.4.1",
27
27
  "chrome-launcher": "^1.2.0",
28
28
  "cloudflare": "^4.4.1",
29
- "columnify": "^1.6.0",
30
29
  "cosmiconfig": "^9.0.0",
31
30
  "cross-spawn": "^7.0.6",
32
31
  "csv-stringify": "^6.6.0",
@@ -169,7 +168,6 @@
169
168
  "init": [
170
169
  "./lib/hooks/init/log",
171
170
  "./lib/hooks/init/check-upgrade",
172
- "./lib/hooks/init/check-local-sfdx-hardis-files",
173
171
  "./lib/hooks/init/start-ws-client"
174
172
  ],
175
173
  "prerun": [
@@ -1,3 +0,0 @@
1
- import { Hook } from '@oclif/core';
2
- declare const hook: Hook<'init'>;
3
- export default hook;
@@ -1,151 +0,0 @@
1
- const hook = async (options) => {
2
- // Skip hooks from other commands than hardis:scratch commands
3
- const commandId = options?.id || '';
4
- if (!commandId.startsWith('hardis')) {
5
- return;
6
- }
7
- if (!options.argv.includes('--json')) {
8
- await manageGitIgnoreForceIgnore(commandId);
9
- }
10
- };
11
- async function manageGitIgnoreForceIgnore(commandId) {
12
- // Dynamic imports to improve performances when other CLI commands are called
13
- const { isCI, isMonitoringJob, uxLog } = await import('../../common/utils/index.js');
14
- // Run this command only during a monitoring job, or a Release Manager local operation
15
- const isMon = await isMonitoringJob();
16
- if (!((isMon && commandId.includes('backup')) || commandId.startsWith("hardis:project:configure:auth") || commandId.startsWith("hardis:doc:mkdocs-to-salesforce") || commandId.startsWith("hardis:doc:project2markdown"))) {
17
- return;
18
- }
19
- // Dynamic imports to improve performances when other CLI commands are called
20
- const c = (await import('chalk')).default;
21
- const fs = (await import('fs-extra')).default;
22
- const { getConfig, setConfig } = await import('../../config/index.js');
23
- const { prompts } = await import('../../common/utils/prompts.js');
24
- const config = await getConfig('user');
25
- // Manage .gitignore
26
- if (!config.skipUpdateGitIgnore === true) {
27
- const gitIgnoreFile = './.gitignore';
28
- if (fs.existsSync(gitIgnoreFile)) {
29
- const gitIgnore = await fs.readFile(gitIgnoreFile, 'utf-8');
30
- const gitIgnoreLines = gitIgnore
31
- .replace('\r\n', '\n')
32
- .split('\n')
33
- .map((line) => line.trim())
34
- .filter((line) => line !== '');
35
- let updated = false;
36
- for (const gitIgnoreMandatoryLine of await getHardisGitRepoIgnoreContent()) {
37
- if (!gitIgnoreLines.includes(gitIgnoreMandatoryLine)) {
38
- gitIgnoreLines.push(gitIgnoreMandatoryLine);
39
- updated = true;
40
- }
41
- }
42
- // Remove duplicates
43
- const gitIgnoreLinesUnique = Array.from(new Set(gitIgnoreLines));
44
- // Propose user to apply updates
45
- if ((updated || gitIgnoreLines.length !== gitIgnoreLinesUnique.length) && !isCI) {
46
- const confirm = await prompts({
47
- type: 'select',
48
- name: 'value',
49
- initial: true,
50
- message: c.cyanBright('Your .gitignore is deprecated, do you agree to upgrade it ?'),
51
- description: 'Updates your .gitignore file with latest sfdx-hardis best practices and removes duplicate entries',
52
- choices: [
53
- { title: 'Yes', value: 'true' },
54
- { title: 'No ', value: 'false' },
55
- { title: 'Never ask again ', value: 'never' },
56
- ],
57
- });
58
- if (confirm.value === 'true' || isCI) {
59
- await fs.writeFile(gitIgnoreFile, gitIgnoreLinesUnique.join('\n') + '\n', 'utf-8');
60
- uxLog(this, c.cyan('[sfdx-hardis] Updated .gitignore'));
61
- }
62
- if (confirm.value === 'never') {
63
- await setConfig('project', { skipUpdateGitIgnore: true });
64
- }
65
- }
66
- }
67
- }
68
- // Manage .forceignore
69
- if (!config.skipUpdateForceIgnore === true) {
70
- const forceIgnoreFile = './.forceignore';
71
- if (fs.existsSync(forceIgnoreFile)) {
72
- const forceIgnore = await fs.readFile(forceIgnoreFile, 'utf-8');
73
- const forceIgnoreLines = forceIgnore
74
- .replace('\r\n', '\n')
75
- .split('\n')
76
- .map((line) => line.trim())
77
- .filter((line) => line !== '');
78
- let updated = false;
79
- for (const forceIgnoreMandatoryLine of await getHardisForceIgnoreContent()) {
80
- if (!forceIgnoreLines.includes(forceIgnoreMandatoryLine)) {
81
- forceIgnoreLines.push(forceIgnoreMandatoryLine);
82
- updated = true;
83
- }
84
- }
85
- // Remove duplicates
86
- const forceIgnoreLinesUnique = Array.from(new Set(forceIgnoreLines));
87
- // Propose user to apply updates
88
- /* jscpd:ignore-start */
89
- if ((updated || forceIgnoreLines.length !== forceIgnoreLinesUnique.length) && !isCI) {
90
- const confirm = await prompts({
91
- type: 'select',
92
- name: 'value',
93
- initial: true,
94
- message: c.cyanBright('Your .forceignore is deprecated, do you agree to upgrade it ?'),
95
- description: 'Updates your .forceignore file with latest sfdx-hardis best practices and removes duplicate entries',
96
- choices: [
97
- { title: 'Yes', value: 'true' },
98
- { title: 'No ', value: 'false' },
99
- { title: 'Never ask again ', value: 'never' },
100
- ],
101
- });
102
- /* jscpd:ignore-end */
103
- if (confirm.value === 'true' || isCI) {
104
- await fs.writeFile(forceIgnoreFile, forceIgnoreLinesUnique.join('\n') + '\n', 'utf-8');
105
- uxLog(this, c.cyan('[sfdx-hardis] Updated .forceignore'));
106
- }
107
- if (confirm.value === 'never') {
108
- await setConfig('project', { skipUpdateForceIgnore: true });
109
- }
110
- }
111
- }
112
- }
113
- }
114
- async function getHardisGitRepoIgnoreContent() {
115
- const gitIgnoreContent = [
116
- '.cache/',
117
- 'config/user/',
118
- 'hardis-report/',
119
- 'site/',
120
- 'tmp/',
121
- '**/__tests__/**',
122
- // Metadatas to be ignored
123
- '**/cleanDataServices/',
124
- '**/siteDotComSites/*.site',
125
- // SFDX Items to be ignored
126
- '**/data/**/source/**',
127
- '**/data/**/target/**',
128
- 'force-app/main/default/appMenus/AppSwitcher.appMenu-meta.xml',
129
- ];
130
- return gitIgnoreContent;
131
- }
132
- async function getHardisForceIgnoreContent() {
133
- const forceIgnoreContent = [
134
- '**/appMenu/**',
135
- '**/appSwitcher/**',
136
- '**/appMenus/AppSwitcher.appMenu-meta.xml',
137
- '**/connectedApps/**',
138
- '**/certs/**',
139
- '**/profilePasswordPolicies/**',
140
- //"**/objectTranslations/**",
141
- // "**/profiles/**",
142
- // "**/settings/**",
143
- '**/jsconfig.json',
144
- '**/.eslintrc.json',
145
- '**/__tests__/**',
146
- '**SfdxHardisDeferSharingRecalc**',
147
- ];
148
- return forceIgnoreContent;
149
- }
150
- export default hook;
151
- //# sourceMappingURL=check-local-sfdx-hardis-files.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"check-local-sfdx-hardis-files.js","sourceRoot":"","sources":["../../../src/hooks/init/check-local-sfdx-hardis-files.ts"],"names":[],"mappings":"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"}