sfdx-hardis 5.18.0 → 5.19.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 +11 -0
- package/defaults/mkdocs-project-doc/mkdocs.yml +9 -5
- package/defaults/monitoring/.github/workflows/org-monitoring.yml +7 -6
- package/lib/commands/hardis/doc/mkdocs-to-cf.d.ts +1 -0
- package/lib/commands/hardis/doc/mkdocs-to-cf.js +16 -12
- package/lib/commands/hardis/doc/mkdocs-to-cf.js.map +1 -1
- package/lib/commands/hardis/doc/mkdocs-to-salesforce.js +1 -1
- package/lib/commands/hardis/doc/mkdocs-to-salesforce.js.map +1 -1
- package/lib/commands/hardis/doc/packagexml2markdown.js +1 -1
- package/lib/commands/hardis/doc/packagexml2markdown.js.map +1 -1
- package/lib/commands/hardis/doc/plugin/generate.js +1 -1
- package/lib/commands/hardis/doc/plugin/generate.js.map +1 -1
- package/lib/commands/hardis/doc/project2markdown.d.ts +2 -1
- package/lib/commands/hardis/doc/project2markdown.js +83 -55
- package/lib/commands/hardis/doc/project2markdown.js.map +1 -1
- package/lib/commands/hardis/org/monitor/backup.js +4 -0
- package/lib/commands/hardis/org/monitor/backup.js.map +1 -1
- package/lib/commands/hardis/project/generate/bypass.d.ts +19 -0
- package/lib/commands/hardis/project/generate/bypass.js +153 -0
- package/lib/commands/hardis/project/generate/bypass.js.map +1 -0
- package/lib/common/{utils → docBuilder}/docUtils.d.ts +1 -0
- package/lib/common/{utils → docBuilder}/docUtils.js +20 -11
- package/lib/common/docBuilder/docUtils.js.map +1 -0
- package/lib/common/docBuilder/objectModelBuilder.d.ts +16 -0
- package/lib/common/docBuilder/objectModelBuilder.js +161 -0
- package/lib/common/docBuilder/objectModelBuilder.js.map +1 -0
- package/oclif.lock +237 -237
- package/oclif.manifest.json +191 -78
- package/package.json +5 -5
- package/lib/common/utils/docUtils.js.map +0 -1
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { requiredOrgFlagWithDeprecations, SfCommand } from '@salesforce/sf-plugins-core';
|
|
2
|
+
import { Flags } from '@salesforce/sf-plugins-core';
|
|
3
|
+
import { SfError } from '@salesforce/core';
|
|
4
|
+
import { soqlQuery } from '../../../../common/utils/apiUtils.js';
|
|
5
|
+
import { uxLog } from '../../../../common/utils/index.js';
|
|
6
|
+
import { prompts } from '../../../../common/utils/prompts.js';
|
|
7
|
+
import c from 'chalk';
|
|
8
|
+
import path from 'path';
|
|
9
|
+
import fs from 'fs';
|
|
10
|
+
const ALLOWED_AUTOMATIONS = ['Flow', 'Trigger', 'VR'];
|
|
11
|
+
export default class HardisProjectGenerateBypass extends SfCommand {
|
|
12
|
+
static flags = {
|
|
13
|
+
'target-org': requiredOrgFlagWithDeprecations,
|
|
14
|
+
'sObjects': Flags.string({
|
|
15
|
+
char: 's',
|
|
16
|
+
description: 'Comma-separated list of sObjects to bypass (e.g., Account,Contact,Opportunity). If omitted, you will be prompted to select.',
|
|
17
|
+
required: false,
|
|
18
|
+
}),
|
|
19
|
+
'automations': Flags.string({
|
|
20
|
+
char: 'a',
|
|
21
|
+
description: `Comma-separated list of automations to bypass. Allowed values: ${ALLOWED_AUTOMATIONS.join(', ')}`,
|
|
22
|
+
required: false,
|
|
23
|
+
}),
|
|
24
|
+
'global': Flags.boolean({
|
|
25
|
+
char: 'g',
|
|
26
|
+
description: 'Generate global bypasses for all automations (Flow, Trigger, VR) without selecting sObjects.',
|
|
27
|
+
required: false,
|
|
28
|
+
default: false
|
|
29
|
+
}),
|
|
30
|
+
};
|
|
31
|
+
static description = `
|
|
32
|
+
Generates bypass custom permissions and permission sets for specified sObjects and automations (Flows, Triggers, and Validation Rules). If no parameters are provided, it prompts for user selection.
|
|
33
|
+
`;
|
|
34
|
+
static examples = [
|
|
35
|
+
'$ sf hardis:project:generate:bypass',
|
|
36
|
+
'$ sf hardis:project:generate:bypass --global',
|
|
37
|
+
'$ sf hardis:project:generate:bypass --sObjects Account,Contact,Opportunity',
|
|
38
|
+
'$ sf hardis:project:generate:bypass --automations Flow,Trigger,VR',
|
|
39
|
+
'$ sf hardis:project:generate:bypass --sObjects Account,Opportunity --automations Flow,Trigger',
|
|
40
|
+
];
|
|
41
|
+
async querySObjects(connection) {
|
|
42
|
+
const sObjectsQuery = `
|
|
43
|
+
Select Id, Label, DeveloperName, DurableId, IsTriggerable, IsCustomizable, IsApexTriggerable, NamespacePrefix, PublisherId FROM EntityDefinition WHERE IsTriggerable = true AND IsCustomizable = true and IsCustomSetting = false ORDER BY DeveloperName`;
|
|
44
|
+
const sObjectResults = await soqlQuery(sObjectsQuery, connection);
|
|
45
|
+
uxLog(this, `Found ${sObjectResults.records.length} sObjects.`);
|
|
46
|
+
return sObjectResults;
|
|
47
|
+
}
|
|
48
|
+
async getFilteredSObjects(connection) {
|
|
49
|
+
const sObjectResults = await this.querySObjects(connection);
|
|
50
|
+
const sObjectsDict = {};
|
|
51
|
+
sObjectResults.records.forEach((record) => {
|
|
52
|
+
if (!record.DeveloperName.endsWith('__Share') && !record.DeveloperName.endsWith('__ChangeEvent')) {
|
|
53
|
+
sObjectsDict[record.DeveloperName] = record.Label;
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
return sObjectsDict;
|
|
57
|
+
}
|
|
58
|
+
generateCustomPermissionXML(sObject, permissionType) {
|
|
59
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
60
|
+
<CustomPermission xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
61
|
+
<isLicensed>false</isLicensed>
|
|
62
|
+
<label>Bypass ${permissionType} for ${sObject}</label>
|
|
63
|
+
<description>Generated by SFDX Hardis : https://sfdx-hardis.cloudity.com/hardis/project/generate/bypass/</description>
|
|
64
|
+
</CustomPermission>`;
|
|
65
|
+
}
|
|
66
|
+
generatePermissionSetXML(sObject, automation) {
|
|
67
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
68
|
+
<PermissionSet xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
69
|
+
<customPermissions>
|
|
70
|
+
<enabled>true</enabled>
|
|
71
|
+
<name>Bypass${sObject}${automation}s</name>
|
|
72
|
+
</customPermissions>
|
|
73
|
+
<hasActivationRequired>false</hasActivationRequired>
|
|
74
|
+
<label>Bypass ${sObject} ${automation}s</label>
|
|
75
|
+
<description>Generated by SFDX Hardis : https://sfdx-hardis.cloudity.com/hardis/project/generate/bypass/</description>
|
|
76
|
+
</PermissionSet>`;
|
|
77
|
+
}
|
|
78
|
+
generateXMLFiles(sObject, automation) {
|
|
79
|
+
const customPermissionFile = path.join(`force-app/main/default/customPermissions/Bypass${sObject}${automation}s.customPermission-meta.xml`);
|
|
80
|
+
const permissionSetFile = path.join(`force-app/main/default/permissionsets/Bypass${sObject}${automation}s.permissionset-meta.xml`);
|
|
81
|
+
fs.writeFileSync(customPermissionFile, this.generateCustomPermissionXML(sObject, automation), 'utf-8');
|
|
82
|
+
fs.writeFileSync(permissionSetFile, this.generatePermissionSetXML(sObject, automation), 'utf-8');
|
|
83
|
+
uxLog(this, `Created: ${path.basename(customPermissionFile)} for ${sObject}`);
|
|
84
|
+
uxLog(this, `Created: ${path.basename(permissionSetFile)} for ${sObject}`);
|
|
85
|
+
}
|
|
86
|
+
generateFiles(targetSObjects, targetAutomations) {
|
|
87
|
+
Object.entries(targetSObjects).map(([developerName]) => {
|
|
88
|
+
targetAutomations.forEach(automation => {
|
|
89
|
+
this.generateXMLFiles(developerName, automation);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
async run() {
|
|
94
|
+
const { flags } = await this.parse(HardisProjectGenerateBypass);
|
|
95
|
+
const connection = flags['target-org'].getConnection();
|
|
96
|
+
const generateGlobalBypasses = flags['global'];
|
|
97
|
+
const sObjectsFromFlag = flags['sObjects'] ? flags['sObjects'].split(',').map(sObject => sObject.trim().replace(/__c$/, '')).map(s => s.trim()) : undefined;
|
|
98
|
+
const automationsFromFlag = flags['automations'] ? flags['automations'].split(',').map(s => s.trim()).filter(s => ALLOWED_AUTOMATIONS.includes(s)) : undefined;
|
|
99
|
+
const availableSObjects = await this.getFilteredSObjects(connection);
|
|
100
|
+
// Generate global bypasses if they are requested.
|
|
101
|
+
if (generateGlobalBypasses) {
|
|
102
|
+
this.generateFiles({ 'All': 'All' }, ALLOWED_AUTOMATIONS);
|
|
103
|
+
}
|
|
104
|
+
let targetSObjects = sObjectsFromFlag ? Object.fromEntries(Object.entries(availableSObjects).filter(([key]) => sObjectsFromFlag.includes(key))) : {};
|
|
105
|
+
let targetAutomations = automationsFromFlag || [];
|
|
106
|
+
const possiblePrompts = [];
|
|
107
|
+
if (!sObjectsFromFlag || Object.keys(targetSObjects).length === 0) {
|
|
108
|
+
uxLog(this, c.yellow('[sfdx-hardis] WARNING : No matching sObjects found. Please check your input or select from the prompt.'));
|
|
109
|
+
possiblePrompts.push({
|
|
110
|
+
type: 'multiselect',
|
|
111
|
+
name: 'sobjects',
|
|
112
|
+
message: 'Please select the sObjects for which you want to generate the bypass(es)',
|
|
113
|
+
choices: Object.entries(availableSObjects).map(([developerName, label]) => {
|
|
114
|
+
return { title: label, value: developerName };
|
|
115
|
+
})
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
if (!automationsFromFlag) {
|
|
119
|
+
possiblePrompts.push({
|
|
120
|
+
type: 'multiselect',
|
|
121
|
+
name: 'automations',
|
|
122
|
+
message: 'Please which automations you wish to bypass.',
|
|
123
|
+
choices: [
|
|
124
|
+
{ title: "Flows", value: "Flow" },
|
|
125
|
+
{ title: "Triggers", value: "Trigger" },
|
|
126
|
+
{ title: "Validation Rules", value: "VR" }
|
|
127
|
+
]
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
if (possiblePrompts.length > 0) {
|
|
131
|
+
const promptSelection = await prompts(possiblePrompts);
|
|
132
|
+
if (!sObjectsFromFlag) {
|
|
133
|
+
if (promptSelection?.sobjects.length === 0) {
|
|
134
|
+
throw new SfError(c.red(`[sfdx-hardis] ERROR: You must select or provide (--sObjects) at least one sObject available on your org.`));
|
|
135
|
+
}
|
|
136
|
+
targetSObjects = Object.fromEntries(Object.entries(availableSObjects).filter(([key]) => promptSelection.sobjects.includes(key)));
|
|
137
|
+
}
|
|
138
|
+
if (!automationsFromFlag) {
|
|
139
|
+
if (promptSelection?.automations.length === 0) {
|
|
140
|
+
throw new SfError(c.red(`[sfdx-hardis] ERROR: You must select or provide (--automations) at least one automation to bypass.`));
|
|
141
|
+
}
|
|
142
|
+
targetAutomations = promptSelection.automations;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (Object.keys(targetSObjects).length > 0 && targetAutomations.length > 0) {
|
|
146
|
+
this.generateFiles(targetSObjects, targetAutomations);
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
outputString: 'Generated bypass custom permissions and permission sets',
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=bypass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bypass.js","sourceRoot":"","sources":["../../../../../src/commands/hardis/project/generate/bypass.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,3 +22,4 @@ export declare function completeApexDocWithAiDescription(apexMarkdownDoc: string
|
|
|
22
22
|
export declare function replaceInFile(filePath: string, stringToReplace: string, replaceWith: string): Promise<void>;
|
|
23
23
|
export declare function generateMkDocsHTML(): Promise<void>;
|
|
24
24
|
export declare function installMkDocs(): Promise<boolean>;
|
|
25
|
+
export declare function getMetaHideLines(): string;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import * as path from "path";
|
|
2
2
|
import c from 'chalk';
|
|
3
3
|
import fs from 'fs-extra';
|
|
4
|
-
import { execCommand, uxLog } from "./index.js";
|
|
5
4
|
import * as yaml from 'js-yaml';
|
|
6
|
-
import { countPackageXmlItems, parsePackageXmlFile } from "
|
|
5
|
+
import { countPackageXmlItems, parsePackageXmlFile } from "../utils/xmlUtils.js";
|
|
7
6
|
import { CONSTANTS } from "../../config/index.js";
|
|
8
7
|
import { SfError } from "@salesforce/core";
|
|
9
8
|
import { UtilsAi } from "../aiProvider/utils.js";
|
|
10
9
|
import { AiProvider } from "../aiProvider/index.js";
|
|
11
|
-
import { buildGenericMarkdownTable } from "
|
|
10
|
+
import { buildGenericMarkdownTable } from "../utils/flowVisualiser/nodeFormatUtils.js";
|
|
12
11
|
import { XMLParser } from "fast-xml-parser";
|
|
12
|
+
import { uxLog, execCommand } from "../utils/index.js";
|
|
13
13
|
export async function generatePackageXmlMarkdown(inputFile, outputFile = null, packageXmlDefinition = null, rootSalesforceUrl = "") {
|
|
14
14
|
// Find packageXml to parse if not defined
|
|
15
15
|
if (inputFile == null) {
|
|
@@ -208,7 +208,8 @@ export class SalesforceSetupUrlBuilder {
|
|
|
208
208
|
}
|
|
209
209
|
export async function generateObjectMarkdown(objectName, objectXmlDefinition, allObjectsNames, objectLinksDetails, outputFile) {
|
|
210
210
|
const mdLines = [
|
|
211
|
-
|
|
211
|
+
'',
|
|
212
|
+
'<!-- Mermaid schema -->',
|
|
212
213
|
'',
|
|
213
214
|
'<!-- Object description -->',
|
|
214
215
|
'',
|
|
@@ -226,7 +227,7 @@ export async function generateObjectMarkdown(objectName, objectXmlDefinition, al
|
|
|
226
227
|
let mdLinesStr = mdLines.join("\n") + "\n";
|
|
227
228
|
mdLinesStr = await completeObjectDocWithAiDescription(mdLinesStr, objectName, objectXmlDefinition, allObjectsNames, objectLinksDetails);
|
|
228
229
|
// Write output file
|
|
229
|
-
await fs.writeFile(outputFile, mdLinesStr);
|
|
230
|
+
await fs.writeFile(outputFile, getMetaHideLines() + mdLinesStr);
|
|
230
231
|
uxLog(this, c.green(`Successfully generated ${objectName} documentation into ${outputFile}`));
|
|
231
232
|
return outputFile;
|
|
232
233
|
}
|
|
@@ -247,7 +248,7 @@ export async function generateLightningPageMarkdown(pageName, pageXml, outputFil
|
|
|
247
248
|
mdLinesStr = await completePageDocWithAiDescription(mdLinesStr, pageName, pageXml);
|
|
248
249
|
// Write output file
|
|
249
250
|
await fs.ensureDir(path.dirname(outputFile));
|
|
250
|
-
await fs.writeFile(outputFile, mdLinesStr);
|
|
251
|
+
await fs.writeFile(outputFile, getMetaHideLines() + mdLinesStr);
|
|
251
252
|
uxLog(this, c.green(`Successfully generated ${pageName} documentation into ${outputFile}`));
|
|
252
253
|
return outputFile;
|
|
253
254
|
}
|
|
@@ -278,7 +279,7 @@ async function completeObjectDocWithAiDescription(objectMarkdownDoc, objectName,
|
|
|
278
279
|
const aiCache = await UtilsAi.findAiCache("PROMPT_DESCRIBE_OBJECT", [objectXmlStripped], objectName);
|
|
279
280
|
if (aiCache.success === true) {
|
|
280
281
|
uxLog(this, c.grey("Used AI cache for object description (set IGNORE_AI_CACHE=true to force call to AI)"));
|
|
281
|
-
const replaceText = `<!-- Cache file: ${aiCache.aiCacheDirFile} -->\n\n${aiCache.cacheText || ""}`;
|
|
282
|
+
const replaceText = `<!-- Cache file: ${aiCache.aiCacheDirFile} -->\n\n## Description\n\n${aiCache.cacheText || ""}`;
|
|
282
283
|
return objectMarkdownDoc.replace("<!-- Object description -->", replaceText);
|
|
283
284
|
}
|
|
284
285
|
if (AiProvider.isAiAvailable()) {
|
|
@@ -293,7 +294,7 @@ async function completeObjectDocWithAiDescription(objectMarkdownDoc, objectName,
|
|
|
293
294
|
responseText = responseText.split("\n").slice(1).join("\n");
|
|
294
295
|
}
|
|
295
296
|
await UtilsAi.writeAiCache("PROMPT_DESCRIBE_OBJECT", [objectXmlStripped], objectName, responseText);
|
|
296
|
-
const replaceText = `<!-- Cache file: ${aiCache.aiCacheDirFile} -->\n\n${responseText}`;
|
|
297
|
+
const replaceText = `<!-- Cache file: ${aiCache.aiCacheDirFile} -->\n\n## Description\n\n${responseText}`;
|
|
297
298
|
const objectMarkdownDocUpdated = objectMarkdownDoc.replace("<!-- Object description -->", replaceText);
|
|
298
299
|
return objectMarkdownDocUpdated;
|
|
299
300
|
}
|
|
@@ -369,7 +370,7 @@ export async function generateMkDocsHTML() {
|
|
|
369
370
|
if (mkdocsLocalOk) {
|
|
370
371
|
// Generate MkDocs HTML pages with local MkDocs
|
|
371
372
|
uxLog(this, c.cyan("Generating HTML pages with mkdocs..."));
|
|
372
|
-
const mkdocsBuildRes = await execCommand("mkdocs build -v || python -m mkdocs build -v || py -m mkdocs build -v", this, { fail: false, output: true, debug:
|
|
373
|
+
const mkdocsBuildRes = await execCommand("mkdocs build -v || python -m mkdocs build -v || py -m mkdocs build -v", this, { fail: false, output: true, debug: false });
|
|
373
374
|
if (mkdocsBuildRes.status !== 0) {
|
|
374
375
|
throw new SfError('MkDocs build failed:\n' + mkdocsBuildRes.stderr + "\n" + mkdocsBuildRes.stdout);
|
|
375
376
|
}
|
|
@@ -377,7 +378,7 @@ export async function generateMkDocsHTML() {
|
|
|
377
378
|
else {
|
|
378
379
|
// Generate MkDocs HTML pages with Docker
|
|
379
380
|
uxLog(this, c.cyan("Generating HTML pages with Docker..."));
|
|
380
|
-
const mkdocsBuildRes = await execCommand("docker run --rm -v $(pwd):/docs squidfunk/mkdocs-material build -v", this, { fail: false, output: true, debug:
|
|
381
|
+
const mkdocsBuildRes = await execCommand("docker run --rm -v $(pwd):/docs squidfunk/mkdocs-material build -v", this, { fail: false, output: true, debug: false });
|
|
381
382
|
if (mkdocsBuildRes.status !== 0) {
|
|
382
383
|
throw new SfError('MkDocs build with docker failed:\n' + mkdocsBuildRes.stderr + "\n" + mkdocsBuildRes.stdout);
|
|
383
384
|
}
|
|
@@ -386,10 +387,18 @@ export async function generateMkDocsHTML() {
|
|
|
386
387
|
export async function installMkDocs() {
|
|
387
388
|
uxLog(this, c.cyan("Managing mkdocs-material local installation..."));
|
|
388
389
|
let mkdocsLocalOk = false;
|
|
389
|
-
const installMkDocsRes = await execCommand("pip install mkdocs-material mkdocs-exclude-search mdx_truly_sane_lists || python -m install mkdocs-material mkdocs-exclude-search mdx_truly_sane_lists || py -m install mkdocs-material mkdocs-exclude-search mdx_truly_sane_lists", this, { fail: false, output: true, debug:
|
|
390
|
+
const installMkDocsRes = await execCommand("pip install mkdocs-material mkdocs-exclude-search mdx_truly_sane_lists || python -m install mkdocs-material mkdocs-exclude-search mdx_truly_sane_lists || py -m install mkdocs-material mkdocs-exclude-search mdx_truly_sane_lists", this, { fail: false, output: true, debug: false });
|
|
390
391
|
if (installMkDocsRes.status === 0) {
|
|
391
392
|
mkdocsLocalOk = true;
|
|
392
393
|
}
|
|
393
394
|
return mkdocsLocalOk;
|
|
394
395
|
}
|
|
396
|
+
export function getMetaHideLines() {
|
|
397
|
+
return `---
|
|
398
|
+
hide:
|
|
399
|
+
- path
|
|
400
|
+
---
|
|
401
|
+
|
|
402
|
+
`;
|
|
403
|
+
}
|
|
395
404
|
//# sourceMappingURL=docUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docUtils.js","sourceRoot":"","sources":["../../../src/common/docBuilder/docUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare class ObjectModelBuilder {
|
|
2
|
+
protected mainCustomObject: string;
|
|
3
|
+
protected relatedCustomObjects: string[];
|
|
4
|
+
protected allLinks: any[];
|
|
5
|
+
protected allObjects: any[];
|
|
6
|
+
protected selectedObjectsNames: Set<string>;
|
|
7
|
+
protected selectedObjects: any[];
|
|
8
|
+
protected selectedLinks: any[];
|
|
9
|
+
constructor(mainCustomObject?: string, relatedCustomObjects?: string[]);
|
|
10
|
+
buildObjectsMermaidSchema(): Promise<string>;
|
|
11
|
+
generateMermaidSchema(): Promise<string>;
|
|
12
|
+
buildAllLinks(): Promise<void>;
|
|
13
|
+
buildAllObjects(): Promise<void>;
|
|
14
|
+
selectObjects(): Promise<void>;
|
|
15
|
+
selectLinks(): Promise<void>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
// import c from "chalk";
|
|
2
|
+
import { glob } from "glob";
|
|
3
|
+
import fs from "fs-extra";
|
|
4
|
+
// import { uxLog } from "../utils/index.js";
|
|
5
|
+
import * as path from "path";
|
|
6
|
+
import { XMLParser } from "fast-xml-parser";
|
|
7
|
+
import { GLOB_IGNORE_PATTERNS } from "../utils/projectUtils.js";
|
|
8
|
+
let ALL_LINKS_CACHE = [];
|
|
9
|
+
let ALL_OBJECTS_CACHE = [];
|
|
10
|
+
export class ObjectModelBuilder {
|
|
11
|
+
mainCustomObject;
|
|
12
|
+
relatedCustomObjects;
|
|
13
|
+
allLinks = [];
|
|
14
|
+
allObjects = [];
|
|
15
|
+
selectedObjectsNames = new Set();
|
|
16
|
+
selectedObjects = [];
|
|
17
|
+
selectedLinks = [];
|
|
18
|
+
constructor(mainCustomObject = "all", relatedCustomObjects = []) {
|
|
19
|
+
this.mainCustomObject = mainCustomObject;
|
|
20
|
+
if (this.mainCustomObject !== "all") {
|
|
21
|
+
this.selectedObjectsNames.add(this.mainCustomObject);
|
|
22
|
+
}
|
|
23
|
+
this.relatedCustomObjects = relatedCustomObjects;
|
|
24
|
+
}
|
|
25
|
+
async buildObjectsMermaidSchema() {
|
|
26
|
+
await this.buildAllLinks();
|
|
27
|
+
await this.buildAllObjects();
|
|
28
|
+
await this.selectObjects();
|
|
29
|
+
await this.selectLinks();
|
|
30
|
+
const mermaidSchema = await this.generateMermaidSchema();
|
|
31
|
+
return mermaidSchema;
|
|
32
|
+
}
|
|
33
|
+
async generateMermaidSchema() {
|
|
34
|
+
let mermaidSchema = `graph TD\n`;
|
|
35
|
+
for (const object of this.selectedObjects) {
|
|
36
|
+
const objectClass = object.name === this.mainCustomObject ? "mainObject" :
|
|
37
|
+
!object.name.endsWith("__c") ? "object" :
|
|
38
|
+
object.name.split("__").length > 2 ? "customObjectManaged" :
|
|
39
|
+
"customObject";
|
|
40
|
+
mermaidSchema += `${object.name}["${object.label}"]:::${objectClass}\n`;
|
|
41
|
+
if (fs.existsSync(`docs/objects/${object.name}.md`)) {
|
|
42
|
+
mermaidSchema += `click ${object.name} "/objects/${object.name}/"\n`;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
mermaidSchema += `\n`;
|
|
46
|
+
let pos = 0;
|
|
47
|
+
const masterDetailPos = [];
|
|
48
|
+
const lookupPos = [];
|
|
49
|
+
for (const link of this.selectedLinks) {
|
|
50
|
+
if (link.type === "MasterDetail") {
|
|
51
|
+
mermaidSchema += `${link.from} ==>|${link.field}| ${link.to}\n`;
|
|
52
|
+
masterDetailPos.push(pos);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
mermaidSchema += `${link.from} -->|${link.field}| ${link.to}\n`;
|
|
56
|
+
lookupPos.push(pos);
|
|
57
|
+
}
|
|
58
|
+
pos++;
|
|
59
|
+
}
|
|
60
|
+
mermaidSchema += `\n`;
|
|
61
|
+
mermaidSchema += `classDef object fill:#D6E9FF,stroke:#0070D2,stroke-width:3px,rx:12px,ry:12px,shadow:drop,color:#333;
|
|
62
|
+
classDef customObject fill:#FFF4C2,stroke:#CCAA00,stroke-width:3px,rx:12px,ry:12px,shadow:drop,color:#333;
|
|
63
|
+
classDef customObjectManaged fill:#FFD8B2,stroke:#CC5500,stroke-width:3px,rx:12px,ry:12px,shadow:drop,color:#333;
|
|
64
|
+
classDef mainObject fill:#FFB3B3,stroke:#A94442,stroke-width:4px,rx:14px,ry:14px,shadow:drop,color:#333,font-weight:bold;
|
|
65
|
+
`;
|
|
66
|
+
if (masterDetailPos.length > 0) {
|
|
67
|
+
mermaidSchema += "linkStyle " + masterDetailPos.join(",") + " stroke:#4C9F70,stroke-width:4px;\n";
|
|
68
|
+
}
|
|
69
|
+
if (lookupPos.length > 0) {
|
|
70
|
+
mermaidSchema += "linkStyle " + lookupPos.join(",") + " stroke:#A6A6A6,stroke-width:2px;\n";
|
|
71
|
+
}
|
|
72
|
+
return mermaidSchema;
|
|
73
|
+
}
|
|
74
|
+
async buildAllLinks() {
|
|
75
|
+
if (ALL_LINKS_CACHE.length > 0) {
|
|
76
|
+
this.allLinks = ALL_LINKS_CACHE;
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
// List all object links in the project
|
|
80
|
+
const findFieldsPattern = `**/objects/**/fields/**.field-meta.xml`;
|
|
81
|
+
const matchingFieldFiles = (await glob(findFieldsPattern, { cwd: process.cwd(), ignore: GLOB_IGNORE_PATTERNS })).map(file => file.replace(/\\/g, '/'));
|
|
82
|
+
for (const fieldFile of matchingFieldFiles) {
|
|
83
|
+
const objectName = fieldFile.substring(fieldFile.indexOf('objects/')).split("/")[1];
|
|
84
|
+
if (objectName.endsWith("__dlm") || objectName.endsWith("__dll")) {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
const fieldXml = fs.readFileSync(fieldFile, "utf8").toString();
|
|
88
|
+
const fieldDetail = new XMLParser().parse(fieldXml);
|
|
89
|
+
if (fieldDetail?.CustomField?.type === "MasterDetail" || fieldDetail?.CustomField?.type === "Lookup") {
|
|
90
|
+
const fieldName = path.basename(fieldFile, ".field-meta.xml");
|
|
91
|
+
const link = {
|
|
92
|
+
from: objectName,
|
|
93
|
+
to: fieldDetail.CustomField.referenceTo,
|
|
94
|
+
field: fieldName,
|
|
95
|
+
relationshipName: fieldDetail.CustomField.relationshipName,
|
|
96
|
+
type: fieldDetail.CustomField.type
|
|
97
|
+
};
|
|
98
|
+
this.allLinks.push(link);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
ALL_LINKS_CACHE = [...this.allLinks];
|
|
102
|
+
}
|
|
103
|
+
async buildAllObjects() {
|
|
104
|
+
if (ALL_OBJECTS_CACHE.length > 0) {
|
|
105
|
+
this.allObjects = ALL_OBJECTS_CACHE;
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
// Get custom objects info
|
|
109
|
+
const findObjectsPattern = `**/objects/**/*.object-meta.xml`;
|
|
110
|
+
const matchingObjectFiles = (await glob(findObjectsPattern, { cwd: process.cwd(), ignore: GLOB_IGNORE_PATTERNS })).map(file => file.replace(/\\/g, '/'));
|
|
111
|
+
for (const objectFile of matchingObjectFiles) {
|
|
112
|
+
const objectName = path.basename(objectFile, ".object-meta.xml");
|
|
113
|
+
const objectXml = fs.readFileSync(objectFile, "utf8").toString();
|
|
114
|
+
const objectDetail = new XMLParser().parse(objectXml);
|
|
115
|
+
const object = {
|
|
116
|
+
name: objectName,
|
|
117
|
+
label: objectDetail?.CustomObject?.label || objectName,
|
|
118
|
+
description: objectDetail?.CustomObject?.description || '',
|
|
119
|
+
};
|
|
120
|
+
this.allObjects.push(object);
|
|
121
|
+
}
|
|
122
|
+
ALL_OBJECTS_CACHE = [...this.allObjects];
|
|
123
|
+
}
|
|
124
|
+
async selectObjects() {
|
|
125
|
+
for (const link of this.allLinks) {
|
|
126
|
+
if (this.relatedCustomObjects.includes(link.from) || this.relatedCustomObjects.includes(link.to)) {
|
|
127
|
+
this.selectedObjectsNames.add(link.from);
|
|
128
|
+
this.selectedObjectsNames.add(link.to);
|
|
129
|
+
}
|
|
130
|
+
else if (this.mainCustomObject === "all") {
|
|
131
|
+
this.selectedObjectsNames.add(link.from);
|
|
132
|
+
this.selectedObjectsNames.add(link.to);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
if (link.from === this.mainCustomObject || link.to === this.mainCustomObject) {
|
|
136
|
+
this.selectedObjectsNames.add(link.from);
|
|
137
|
+
this.selectedObjectsNames.add(link.to);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
for (const object of this.allObjects) {
|
|
142
|
+
if (this.selectedObjectsNames.has(object.name)) {
|
|
143
|
+
this.selectedObjects.push(object);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// Complete with objects with missing .object-meta.xml file
|
|
147
|
+
for (const object of this.selectedObjectsNames) {
|
|
148
|
+
if (!this.selectedObjects.some(obj => obj.name === object)) {
|
|
149
|
+
this.selectedObjects.push({ name: object, label: object, description: '' });
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
async selectLinks() {
|
|
154
|
+
for (const link of this.allLinks) {
|
|
155
|
+
if (this.selectedObjectsNames.has(link.from) && this.selectedObjectsNames.has(link.to)) {
|
|
156
|
+
this.selectedLinks.push(link);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=objectModelBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"objectModelBuilder.js","sourceRoot":"","sources":["../../../src/common/docBuilder/objectModelBuilder.ts"],"names":[],"mappings":"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"}
|