sfdx-hardis 5.29.1 → 5.30.1-beta202505052040.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.
@@ -0,0 +1,46 @@
1
+ import { DocBuilderRoot } from "./docBuilderRoot.js";
2
+ import { XMLBuilder, XMLParser } from "fast-xml-parser";
3
+ import { RulesBuilderUtil } from "../utils/rulesBuilderUtil.js";
4
+ export class DocBuilderAssignmentRules extends DocBuilderRoot {
5
+ docType = "AssignmentRules";
6
+ placeholder = "<!-- Assignment Rule description -->";
7
+ promptKey = "PROMPT_DESCRIBE_ASSIGNMENT_RULES";
8
+ xmlRootKey = "assignmentRule";
9
+ static buildIndexTable(prefix, assignmentRulesDescriptions, filterObject = null) {
10
+ const filteredAssignmentRules = filterObject ? assignmentRulesDescriptions.filter(assignmentRule => assignmentRule.impactedObjects.includes(filterObject)) : assignmentRulesDescriptions;
11
+ if (filteredAssignmentRules.length === 0) {
12
+ return [];
13
+ }
14
+ const lines = [];
15
+ lines.push(...[
16
+ filterObject ? "## Related Assignment Rules" : "## Assignment Rules",
17
+ "",
18
+ "| Assignment Rule | Is Active |",
19
+ "| :---- | :--: | "
20
+ ]);
21
+ for (const assignmentRule of filteredAssignmentRules) {
22
+ const assignmentRuleNameCell = `[${assignmentRule.name}](${prefix}${assignmentRule.name}.md)`;
23
+ lines.push(...[
24
+ `| ${assignmentRuleNameCell} | ${assignmentRule.active} |`
25
+ ]);
26
+ }
27
+ lines.push("");
28
+ return lines;
29
+ }
30
+ async buildInitialMarkdownLines() {
31
+ const ruleBuilderUtil = new RulesBuilderUtil();
32
+ await ruleBuilderUtil.buildInitialMarkDownLinesForRules(this.parsedXmlObject);
33
+ const assignmentRuleTableLines = [...ruleBuilderUtil.globalRuleTableLines];
34
+ return [
35
+ '<!-- Assignment Rule description -->',
36
+ '## Assignment Rules list',
37
+ ...assignmentRuleTableLines,
38
+ '',
39
+ ];
40
+ }
41
+ stripXmlForAi() {
42
+ const xmlObj = new XMLParser().parse(this.metadataXml);
43
+ return new XMLBuilder().build(xmlObj);
44
+ }
45
+ }
46
+ //# sourceMappingURL=docBuilderAssignmentRules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docBuilderAssignmentRules.js","sourceRoot":"","sources":["../../../src/common/docBuilder/docBuilderAssignmentRules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAC,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAC,UAAU,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAC,gBAAgB,EAAC,MAAM,8BAA8B,CAAC;AAE9D,MAAM,OAAO,yBAA0B,SAAQ,cAAc;IAEpD,OAAO,GAAG,iBAAiB,CAAC;IAC5B,WAAW,GAAG,sCAAsC,CAAC;IACrD,SAAS,GAAmB,kCAAkC,CAAC;IAC/D,UAAU,GAAG,gBAAgB,CAAC;IAE9B,MAAM,CAAC,eAAe,CAAC,MAAc,EAAE,2BAAgC,EAAE,eAA8B,IAAI;QAChH,MAAM,uBAAuB,GAAG,YAAY,CAAC,CAAC,CAAC,2BAA2B,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,cAAc,CAAC,eAAe,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,2BAA2B,CAAC;QACzL,IAAI,uBAAuB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzC,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,GAAG;YACZ,YAAY,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,qBAAqB;YACpE,EAAE;YACF,iCAAiC;YACjC,8BAA8B;SAC/B,CAAC,CAAC;QAEH,KAAK,MAAM,cAAc,IAAI,uBAAuB,EAAE,CAAC;YACrD,MAAM,sBAAsB,GAAG,IAAI,cAAc,CAAC,IAAI,KAAK,MAAM,GAAG,cAAc,CAAC,IAAI,MAAM,CAAC;YAC9F,KAAK,CAAC,IAAI,CAAC,GAAG;gBACZ,KAAK,sBAAsB,MAAM,cAAc,CAAC,MAAM,IAAI;aAC3D,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,KAAK,CAAC,yBAAyB;QAEpC,MAAM,eAAe,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAE/C,MAAM,eAAe,CAAC,iCAAiC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAE9E,MAAM,wBAAwB,GAAc,CAAC,GAAG,eAAe,CAAC,oBAAoB,CAAC,CAAC;QAEtF,OAAO;YACL,sCAAsC;YACtC,0BAA0B;YAC1B,GAAG,wBAAwB;YAC3B,EAAE;SACH,CAAC;IACJ,CAAC;IAEM,aAAa;QAClB,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACvD,OAAO,IAAI,UAAU,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ import { DocBuilderRoot } from "./docBuilderRoot.js";
2
+ import { PromptTemplate } from "../aiProvider/promptTemplates.js";
3
+ export declare class DocBuilderLwc extends DocBuilderRoot {
4
+ docType: string;
5
+ placeholder: string;
6
+ promptKey: PromptTemplate;
7
+ xmlRootKey: string;
8
+ docsSection: string;
9
+ static buildIndexTable(prefix: string, lwcDescriptions: any, filterObject?: string | null): string[];
10
+ buildInitialMarkdownLines(): Promise<string[]>;
11
+ private generateJsDocumentation;
12
+ private listComponentFiles;
13
+ stripXmlForAi(): Promise<string>;
14
+ }
@@ -0,0 +1,103 @@
1
+ import { DocBuilderRoot } from "./docBuilderRoot.js";
2
+ import jsdoc2md from "jsdoc-to-markdown";
3
+ import fs from "fs-extra";
4
+ import path from "path";
5
+ export class DocBuilderLwc extends DocBuilderRoot {
6
+ docType = "Lwc";
7
+ placeholder = "<!-- LWC description -->";
8
+ promptKey = "PROMPT_DESCRIBE_LWC";
9
+ xmlRootKey = "";
10
+ docsSection = "lwc";
11
+ static buildIndexTable(prefix, lwcDescriptions, filterObject = null) {
12
+ const filteredLwcs = filterObject
13
+ ? lwcDescriptions.filter(lwc => lwc.impactedObjects.includes(filterObject))
14
+ : lwcDescriptions;
15
+ if (filteredLwcs.length === 0) {
16
+ return [];
17
+ }
18
+ const lines = [];
19
+ lines.push(...[
20
+ filterObject ? "## Related Lightning Web Components" : "## Lightning Web Components",
21
+ "",
22
+ "| Component | Description | Exposed | Targets |",
23
+ "| :-------- | :---------- | :-----: | :------------- |"
24
+ ]);
25
+ for (const lwc of filteredLwcs) {
26
+ const lwcNameCell = `[${lwc.name}](${prefix}${lwc.name}.md)`;
27
+ const exposedCell = lwc.isExposed ? "✅" : "❌";
28
+ lines.push(...[
29
+ `| ${lwcNameCell} | ${lwc.description || ""} | ${exposedCell} | ${lwc.targets || ""} |`
30
+ ]);
31
+ }
32
+ lines.push("");
33
+ return lines;
34
+ }
35
+ async buildInitialMarkdownLines() {
36
+ return [
37
+ `## ${this.metadataName}`,
38
+ '',
39
+ '<!-- LWC description -->',
40
+ '',
41
+ '## JS Documentation',
42
+ '',
43
+ await this.generateJsDocumentation(),
44
+ '',
45
+ '## Files',
46
+ '',
47
+ await this.listComponentFiles(),
48
+ ''
49
+ ];
50
+ }
51
+ async generateJsDocumentation() {
52
+ try {
53
+ const lwcPath = this.additionalVariables.LWC_PATH;
54
+ const jsFile = path.join(lwcPath, `${this.metadataName}.js`);
55
+ if (fs.existsSync(jsFile)) {
56
+ const jsdocOutput = await jsdoc2md.render({ files: jsFile });
57
+ return jsdocOutput || "No JSDoc documentation available for this component.";
58
+ }
59
+ else {
60
+ return "No JavaScript file found for this component.";
61
+ }
62
+ }
63
+ catch (error) {
64
+ return `Error generating JS documentation: ${error.message}`;
65
+ }
66
+ }
67
+ async listComponentFiles() {
68
+ try {
69
+ const lwcPath = this.additionalVariables.LWC_PATH;
70
+ const files = await fs.readdir(lwcPath);
71
+ let fileList = "";
72
+ for (const file of files) {
73
+ const stats = await fs.stat(path.join(lwcPath, file));
74
+ if (stats.isFile()) {
75
+ fileList += `- \`${file}\`\n`;
76
+ }
77
+ }
78
+ return fileList || "No files found for this component.";
79
+ }
80
+ catch (error) {
81
+ return `Error listing component files: ${error.message}`;
82
+ }
83
+ }
84
+ async stripXmlForAi() {
85
+ const lwcPath = this.additionalVariables.LWC_PATH;
86
+ const files = await fs.readdir(lwcPath);
87
+ let componentCode = "";
88
+ for (const file of files) {
89
+ const filePath = path.join(lwcPath, file);
90
+ const stats = await fs.stat(filePath);
91
+ if (stats.isFile()) {
92
+ // Skip CSS files
93
+ if (file.endsWith('.css')) {
94
+ continue;
95
+ }
96
+ const fileContent = await fs.readFile(filePath, 'utf-8');
97
+ componentCode += `// File: ${file}\n${fileContent}\n\n`;
98
+ }
99
+ }
100
+ return componentCode;
101
+ }
102
+ }
103
+ //# sourceMappingURL=docBuilderLwc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docBuilderLwc.js","sourceRoot":"","sources":["../../../src/common/docBuilder/docBuilderLwc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare class RulesBuilderUtil {
2
+ globalRuleTableLines: string[];
3
+ buildInitialMarkDownLinesForRules(ruleGlobal: any): Promise<void>;
4
+ formatCriteria(criteriaItems: any[], booleanFilter: string): string;
5
+ formatCriteriaItem(ci: any): string;
6
+ }
@@ -0,0 +1,47 @@
1
+ export class RulesBuilderUtil {
2
+ globalRuleTableLines = [];
3
+ async buildInitialMarkDownLinesForRules(ruleGlobal) {
4
+ this.globalRuleTableLines = [
5
+ `## ${ruleGlobal.fullName} Rules`,
6
+ "| Order | Criteria | Assigned To | Assigned To Type | Email |",
7
+ "| :--: | :------------- | :--: | :--: | :--: |",
8
+ ];
9
+ if (ruleGlobal.ruleEntry) {
10
+ if (!Array.isArray(ruleGlobal.ruleEntry)) {
11
+ ruleGlobal.ruleEntry = [ruleGlobal.ruleEntry];
12
+ }
13
+ let order = 1;
14
+ for (const rule of ruleGlobal.ruleEntry) {
15
+ const criteria = rule?.criteriaItems ? this.formatCriteria(rule?.criteriaItems, rule?.booleanFilter) : rule?.formula ? JSON.stringify(rule.formula) : "None";
16
+ this.globalRuleTableLines.push(`| ${order} | ${criteria} | ${rule.assignedTo} | ${rule.assignedToType} | ${(!!rule.template)} |`);
17
+ order++;
18
+ }
19
+ }
20
+ }
21
+ formatCriteria(criteriaItems, booleanFilter) {
22
+ if (!criteriaItems || criteriaItems.length === 0) {
23
+ return 'None';
24
+ }
25
+ else {
26
+ if (!booleanFilter) {
27
+ if (!Array.isArray(criteriaItems)) {
28
+ criteriaItems = [criteriaItems];
29
+ }
30
+ return criteriaItems
31
+ .map((x => this.formatCriteriaItem(x)))
32
+ .join(' AND ');
33
+ }
34
+ else {
35
+ let booleanResult = booleanFilter;
36
+ for (let i = 1; i <= criteriaItems.length; i++) {
37
+ booleanResult = booleanResult.replace(i.toString(), this.formatCriteriaItem(criteriaItems[i - 1]));
38
+ }
39
+ return booleanResult;
40
+ }
41
+ }
42
+ }
43
+ formatCriteriaItem(ci) {
44
+ return '(' + ci.field.split('.')[0] + ': ' + ci.field.substring(ci.field.indexOf('.') + 1) + ' ' + ci.operation + ' ' + ci.value + ')';
45
+ }
46
+ }
47
+ //# sourceMappingURL=rulesBuilderUtil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rulesBuilderUtil.js","sourceRoot":"","sources":["../../../src/common/utils/rulesBuilderUtil.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,gBAAgB;IAEpB,oBAAoB,GAAc,EAAE,CAAC;IAErC,KAAK,CAAC,iCAAiC,CAAC,UAAe;QAE5D,IAAI,CAAC,oBAAoB,GAAG;YAC1B,MAAM,UAAU,CAAC,QAAQ,QAAQ;YACjC,gEAAgE;YAChE,gDAAgD;SACjD,CAAC;QAEF,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACzC,UAAU,CAAC,SAAS,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAChD,CAAC;YACD,IAAI,KAAK,GAAW,CAAC,CAAC;YACtB,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;gBACxC,MAAM,QAAQ,GAAG,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC7J,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,KAAK,MAAM,QAAQ,OAAO,IAAI,CAAC,UAAU,MAAM,IAAI,CAAC,cAAc,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACnI,KAAK,EAAE,CAAC;YACV,CAAC;QACH,CAAC;IACH,CAAC;IAED,cAAc,CAAC,aAAoB,EAAE,aAAqB;QACxD,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjD,OAAO,MAAM,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;oBAClC,aAAa,GAAG,CAAC,aAAa,CAAC,CAAC;gBAClC,CAAC;gBACD,OAAO,aAAa;qBACjB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;qBACtC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnB,CAAC;iBAAM,CAAC;gBAEN,IAAI,aAAa,GAAW,aAAa,CAAC;gBAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC/C,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrG,CAAC;gBACD,OAAO,aAAa,CAAC;YACvB,CAAC;QAEH,CAAC;IACH,CAAC;IAED,kBAAkB,CAAC,EAAO;QACxB,OAAO,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,SAAS,GAAG,GAAG,GAAG,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC;IACzI,CAAC;CACF"}