@sfdxy/mule-lint 1.7.2 → 1.8.2
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/README.md +35 -0
- package/dist/bin/mule-lint-mcp.d.ts +3 -0
- package/dist/bin/mule-lint-mcp.d.ts.map +1 -0
- package/dist/bin/mule-lint-mcp.js +13 -0
- package/dist/bin/mule-lint-mcp.js.map +1 -0
- package/dist/package.json +6 -3
- package/dist/src/core/ComplexityCalculator.d.ts.map +1 -1
- package/dist/src/core/ComplexityCalculator.js +8 -8
- package/dist/src/core/ComplexityCalculator.js.map +1 -1
- package/dist/src/core/FileScanner.d.ts.map +1 -1
- package/dist/src/core/FileScanner.js +11 -12
- package/dist/src/core/FileScanner.js.map +1 -1
- package/dist/src/core/XPathHelper.d.ts.map +1 -1
- package/dist/src/core/XPathHelper.js +23 -23
- package/dist/src/core/XPathHelper.js.map +1 -1
- package/dist/src/core/XmlParser.js +1 -1
- package/dist/src/core/XmlParser.js.map +1 -1
- package/dist/src/core/YamlParser.d.ts.map +1 -1
- package/dist/src/core/YamlParser.js +1 -1
- package/dist/src/core/YamlParser.js.map +1 -1
- package/dist/src/engine/LintEngine.d.ts.map +1 -1
- package/dist/src/engine/LintEngine.js +6 -4
- package/dist/src/engine/LintEngine.js.map +1 -1
- package/dist/src/formatters/CsvFormatter.d.ts.map +1 -1
- package/dist/src/formatters/CsvFormatter.js +6 -4
- package/dist/src/formatters/CsvFormatter.js.map +1 -1
- package/dist/src/formatters/HtmlFormatter.d.ts.map +1 -1
- package/dist/src/formatters/HtmlFormatter.js +12 -7
- package/dist/src/formatters/HtmlFormatter.js.map +1 -1
- package/dist/src/formatters/SarifFormatter.d.ts.map +1 -1
- package/dist/src/formatters/SarifFormatter.js +20 -10
- package/dist/src/formatters/SarifFormatter.js.map +1 -1
- package/dist/src/formatters/TableFormatter.d.ts.map +1 -1
- package/dist/src/formatters/TableFormatter.js +1 -1
- package/dist/src/formatters/TableFormatter.js.map +1 -1
- package/dist/src/mcp/index.d.ts +13 -0
- package/dist/src/mcp/index.d.ts.map +1 -0
- package/dist/src/mcp/index.js +375 -0
- package/dist/src/mcp/index.js.map +1 -0
- package/dist/src/rules/api-led/ApiLedRules.d.ts.map +1 -1
- package/dist/src/rules/api-led/ApiLedRules.js +3 -1
- package/dist/src/rules/api-led/ApiLedRules.js.map +1 -1
- package/dist/src/rules/base/BaseRule.d.ts.map +1 -1
- package/dist/src/rules/base/BaseRule.js +1 -1
- package/dist/src/rules/base/BaseRule.js.map +1 -1
- package/dist/src/rules/complexity/FlowComplexityRule.d.ts.map +1 -1
- package/dist/src/rules/complexity/FlowComplexityRule.js +3 -5
- package/dist/src/rules/complexity/FlowComplexityRule.js.map +1 -1
- package/dist/src/rules/dataweave/DataWeaveRules.d.ts.map +1 -1
- package/dist/src/rules/dataweave/DataWeaveRules.js +5 -5
- package/dist/src/rules/dataweave/DataWeaveRules.js.map +1 -1
- package/dist/src/rules/dataweave/Java17DWErrorHandlingRule.d.ts +21 -0
- package/dist/src/rules/dataweave/Java17DWErrorHandlingRule.d.ts.map +1 -0
- package/dist/src/rules/dataweave/Java17DWErrorHandlingRule.js +162 -0
- package/dist/src/rules/dataweave/Java17DWErrorHandlingRule.js.map +1 -0
- package/dist/src/rules/documentation/FlowDescriptionRule.d.ts.map +1 -1
- package/dist/src/rules/documentation/FlowDescriptionRule.js +1 -1
- package/dist/src/rules/documentation/FlowDescriptionRule.js.map +1 -1
- package/dist/src/rules/documentation/MissingDocNameRule.d.ts.map +1 -1
- package/dist/src/rules/documentation/MissingDocNameRule.js +1 -1
- package/dist/src/rules/documentation/MissingDocNameRule.js.map +1 -1
- package/dist/src/rules/error-handling/CorrelationIdRule.d.ts.map +1 -1
- package/dist/src/rules/error-handling/CorrelationIdRule.js +1 -1
- package/dist/src/rules/error-handling/CorrelationIdRule.js.map +1 -1
- package/dist/src/rules/error-handling/GenericErrorRule.d.ts.map +1 -1
- package/dist/src/rules/error-handling/GenericErrorRule.js +2 -5
- package/dist/src/rules/error-handling/GenericErrorRule.js.map +1 -1
- package/dist/src/rules/error-handling/GlobalErrorHandlerRule.d.ts.map +1 -1
- package/dist/src/rules/error-handling/GlobalErrorHandlerRule.js +1 -1
- package/dist/src/rules/error-handling/GlobalErrorHandlerRule.js.map +1 -1
- package/dist/src/rules/error-handling/HttpStatusRule.d.ts.map +1 -1
- package/dist/src/rules/error-handling/HttpStatusRule.js +1 -1
- package/dist/src/rules/error-handling/HttpStatusRule.js.map +1 -1
- package/dist/src/rules/error-handling/MissingErrorHandlerRule.d.ts.map +1 -1
- package/dist/src/rules/error-handling/MissingErrorHandlerRule.js +1 -1
- package/dist/src/rules/error-handling/MissingErrorHandlerRule.js.map +1 -1
- package/dist/src/rules/experimental/ExperimentalRules.d.ts.map +1 -1
- package/dist/src/rules/experimental/ExperimentalRules.js +1 -1
- package/dist/src/rules/experimental/ExperimentalRules.js.map +1 -1
- package/dist/src/rules/http/HttpContentTypeRule.d.ts.map +1 -1
- package/dist/src/rules/http/HttpContentTypeRule.js +1 -1
- package/dist/src/rules/http/HttpContentTypeRule.js.map +1 -1
- package/dist/src/rules/http/HttpTimeoutRule.d.ts.map +1 -1
- package/dist/src/rules/http/HttpTimeoutRule.js +1 -1
- package/dist/src/rules/http/HttpTimeoutRule.js.map +1 -1
- package/dist/src/rules/http/HttpUserAgentRule.d.ts.map +1 -1
- package/dist/src/rules/http/HttpUserAgentRule.js +1 -1
- package/dist/src/rules/http/HttpUserAgentRule.js.map +1 -1
- package/dist/src/rules/index.d.ts +1 -1
- package/dist/src/rules/index.d.ts.map +1 -1
- package/dist/src/rules/index.js +7 -5
- package/dist/src/rules/index.js.map +1 -1
- package/dist/src/rules/logging/LoggerCategoryRule.js +2 -2
- package/dist/src/rules/logging/LoggerCategoryRule.js.map +1 -1
- package/dist/src/rules/logging/LoggerInUntilSuccessfulRule.js +1 -1
- package/dist/src/rules/logging/LoggerInUntilSuccessfulRule.js.map +1 -1
- package/dist/src/rules/logging/LoggerPayloadRule.d.ts.map +1 -1
- package/dist/src/rules/logging/LoggerPayloadRule.js +3 -3
- package/dist/src/rules/logging/LoggerPayloadRule.js.map +1 -1
- package/dist/src/rules/naming/FlowCasingRule.d.ts.map +1 -1
- package/dist/src/rules/naming/FlowCasingRule.js +1 -1
- package/dist/src/rules/naming/FlowCasingRule.js.map +1 -1
- package/dist/src/rules/naming/FlowNamingRule.d.ts.map +1 -1
- package/dist/src/rules/naming/FlowNamingRule.js +3 -1
- package/dist/src/rules/naming/FlowNamingRule.js.map +1 -1
- package/dist/src/rules/naming/VariableNamingRule.d.ts.map +1 -1
- package/dist/src/rules/naming/VariableNamingRule.js +3 -3
- package/dist/src/rules/naming/VariableNamingRule.js.map +1 -1
- package/dist/src/rules/performance/AsyncErrorHandlerRule.d.ts.map +1 -1
- package/dist/src/rules/performance/AsyncErrorHandlerRule.js +1 -1
- package/dist/src/rules/performance/AsyncErrorHandlerRule.js.map +1 -1
- package/dist/src/rules/performance/LargeChoiceBlockRule.d.ts.map +1 -1
- package/dist/src/rules/performance/LargeChoiceBlockRule.js +1 -1
- package/dist/src/rules/performance/LargeChoiceBlockRule.js.map +1 -1
- package/dist/src/rules/performance/ScatterGatherRoutesRule.d.ts.map +1 -1
- package/dist/src/rules/performance/ScatterGatherRoutesRule.js +1 -1
- package/dist/src/rules/performance/ScatterGatherRoutesRule.js.map +1 -1
- package/dist/src/rules/security/HardcodedCredentialsRule.d.ts.map +1 -1
- package/dist/src/rules/security/HardcodedCredentialsRule.js +2 -2
- package/dist/src/rules/security/HardcodedCredentialsRule.js.map +1 -1
- package/dist/src/rules/security/HardcodedHttpRule.d.ts.map +1 -1
- package/dist/src/rules/security/HardcodedHttpRule.js +2 -6
- package/dist/src/rules/security/HardcodedHttpRule.js.map +1 -1
- package/dist/src/rules/security/InsecureTlsRule.d.ts.map +1 -1
- package/dist/src/rules/security/InsecureTlsRule.js +2 -2
- package/dist/src/rules/security/InsecureTlsRule.js.map +1 -1
- package/dist/src/rules/standards/ChoiceAntiPatternRule.d.ts.map +1 -1
- package/dist/src/rules/standards/ChoiceAntiPatternRule.js +2 -2
- package/dist/src/rules/standards/ChoiceAntiPatternRule.js.map +1 -1
- package/dist/src/rules/standards/DeprecatedComponentRule.d.ts.map +1 -1
- package/dist/src/rules/standards/DeprecatedComponentRule.js +1 -1
- package/dist/src/rules/standards/DeprecatedComponentRule.js.map +1 -1
- package/dist/src/rules/standards/DwlStandardsRule.d.ts.map +1 -1
- package/dist/src/rules/standards/DwlStandardsRule.js +1 -1
- package/dist/src/rules/standards/DwlStandardsRule.js.map +1 -1
- package/dist/src/rules/structure/StructureRules.d.ts.map +1 -1
- package/dist/src/rules/structure/StructureRules.js +6 -9
- package/dist/src/rules/structure/StructureRules.js.map +1 -1
- package/dist/src/rules/yaml/YamlRules.d.ts.map +1 -1
- package/dist/src/rules/yaml/YamlRules.js +13 -9
- package/dist/src/rules/yaml/YamlRules.js.map +1 -1
- package/dist/src/types/Config.d.ts.map +1 -1
- package/dist/src/types/Config.js +1 -5
- package/dist/src/types/Config.js.map +1 -1
- package/docs/README.md +95 -0
- package/docs/best-practices/documentation-standards.md +82 -0
- package/docs/best-practices/folder-structure.md +61 -0
- package/docs/best-practices/mulesoft-best-practices.md +902 -0
- package/docs/best-practices/rules-catalog.md +736 -0
- package/docs/linter/architecture.md +294 -0
- package/docs/linter/extending.md +426 -0
- package/docs/linter/folder-structure.md +251 -0
- package/docs/linter/images/html-report-dashboard.png +0 -0
- package/docs/linter/naming-conventions.md +300 -0
- package/docs/linter/rule-engine.md +532 -0
- package/docs/mcp-design.md +80 -0
- package/package.json +6 -3
|
@@ -26,7 +26,7 @@ class DeprecatedComponentRule extends BaseRule_1.BaseRule {
|
|
|
26
26
|
const elements = this.select(`//mule:${deprecated.element}`, doc);
|
|
27
27
|
for (const element of elements) {
|
|
28
28
|
issues.push(this.createIssue(element, `Deprecated component "${deprecated.element}" found`, {
|
|
29
|
-
suggestion: `Use ${deprecated.replacement} instead
|
|
29
|
+
suggestion: `Use ${deprecated.replacement} instead`,
|
|
30
30
|
}));
|
|
31
31
|
}
|
|
32
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeprecatedComponentRule.js","sourceRoot":"","sources":["../../../../src/rules/standards/DeprecatedComponentRule.ts"],"names":[],"mappings":";;;AACA,+CAA4C;AAE5C;;;;GAIG;AACH,MAAa,uBAAwB,SAAQ,mBAAQ;IACjD,EAAE,GAAG,UAAU,CAAC;IAChB,IAAI,GAAG,4BAA4B,CAAC;IACpC,WAAW,GAAG,4CAA4C,CAAC;IAC3D,QAAQ,GAAG,SAAkB,CAAC;IAC9B,QAAQ,GAAG,WAAoB,CAAC;IAEf,mBAAmB,GAAG;QACnC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,oBAAoB,EAAE;QAC3D,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,6BAA6B,EAAE;QACxE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,qBAAqB,EAAE;QACvD,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,6BAA6B,EAAE;QAC3E,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,sBAAsB,EAAE;KACxE,CAAC;IAEF,QAAQ,CAAC,GAAa,EAAE,QAA2B;QAC/C,MAAM,MAAM,GAAY,EAAE,CAAC;QAE3B,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,UAAU,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;YAElE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC7B,MAAM,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"DeprecatedComponentRule.js","sourceRoot":"","sources":["../../../../src/rules/standards/DeprecatedComponentRule.ts"],"names":[],"mappings":";;;AACA,+CAA4C;AAE5C;;;;GAIG;AACH,MAAa,uBAAwB,SAAQ,mBAAQ;IACjD,EAAE,GAAG,UAAU,CAAC;IAChB,IAAI,GAAG,4BAA4B,CAAC;IACpC,WAAW,GAAG,4CAA4C,CAAC;IAC3D,QAAQ,GAAG,SAAkB,CAAC;IAC9B,QAAQ,GAAG,WAAoB,CAAC;IAEf,mBAAmB,GAAG;QACnC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,oBAAoB,EAAE;QAC3D,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,6BAA6B,EAAE;QACxE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,qBAAqB,EAAE;QACvD,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,6BAA6B,EAAE;QAC3E,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,sBAAsB,EAAE;KACxE,CAAC;IAEF,QAAQ,CAAC,GAAa,EAAE,QAA2B;QAC/C,MAAM,MAAM,GAAY,EAAE,CAAC;QAE3B,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,UAAU,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;YAElE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC7B,MAAM,CAAC,IAAI,CACP,IAAI,CAAC,WAAW,CACZ,OAAO,EACP,yBAAyB,UAAU,CAAC,OAAO,SAAS,EACpD;oBACI,UAAU,EAAE,OAAO,UAAU,CAAC,WAAW,UAAU;iBACtD,CACJ,CACJ,CAAC;YACN,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AApCD,0DAoCC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DwlStandardsRule.d.ts","sourceRoot":"","sources":["../../../../src/rules/standards/DwlStandardsRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAI5C;;;;;GAKG;AACH,qBAAa,gBAAiB,SAAQ,QAAQ;IAC1C,EAAE,SAAc;IAChB,IAAI,SAAwB;IAC5B,WAAW,SAAiF;IAC5F,QAAQ,EAAG,MAAM,CAAU;IAC3B,QAAQ,EAAG,WAAW,CAAU;IAGhC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAqB;IAEnD,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,GAAG,KAAK,EAAE;
|
|
1
|
+
{"version":3,"file":"DwlStandardsRule.d.ts","sourceRoot":"","sources":["../../../../src/rules/standards/DwlStandardsRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAI5C;;;;;GAKG;AACH,qBAAa,gBAAiB,SAAQ,QAAQ;IAC1C,EAAE,SAAc;IAChB,IAAI,SAAwB;IAC5B,WAAW,SAAiF;IAC5F,QAAQ,EAAG,MAAM,CAAU;IAC3B,QAAQ,EAAG,WAAW,CAAU;IAGhC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAqB;IAEnD,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,GAAG,KAAK,EAAE;IAyC5D;;OAEG;WACW,KAAK,IAAI,IAAI;CAG9B"}
|
|
@@ -74,7 +74,7 @@ class DwlStandardsRule extends BaseRule_1.BaseRule {
|
|
|
74
74
|
// Mark as checked to avoid duplicate warnings
|
|
75
75
|
DwlStandardsRule.checkedProjects.add(context.projectRoot);
|
|
76
76
|
issues.push(this.createFileIssue(`Recommended DataWeave standards files not found: ${missingFiles.join(', ')}`, {
|
|
77
|
-
suggestion: 'Create standard DWL files for consistent error responses and common functions'
|
|
77
|
+
suggestion: 'Create standard DWL files for consistent error responses and common functions',
|
|
78
78
|
}));
|
|
79
79
|
}
|
|
80
80
|
return issues;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DwlStandardsRule.js","sourceRoot":"","sources":["../../../../src/rules/standards/DwlStandardsRule.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,+CAA4C;AAC5C,wDAAoD;AACpD,2CAA6B;AAE7B;;;;;GAKG;AACH,MAAa,gBAAiB,SAAQ,mBAAQ;IAC1C,EAAE,GAAG,UAAU,CAAC;IAChB,IAAI,GAAG,oBAAoB,CAAC;IAC5B,WAAW,GAAG,6EAA6E,CAAC;IAC5F,QAAQ,GAAG,MAAe,CAAC;IAC3B,QAAQ,GAAG,WAAoB,CAAC;IAEhC,+DAA+D;IACvD,MAAM,CAAC,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAEnD,QAAQ,CAAC,GAAa,EAAE,OAA0B;QAC9C,MAAM,MAAM,GAAY,EAAE,CAAC;QAE3B,8BAA8B;QAC9B,IAAI,gBAAgB,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5D,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,qCAAqC;QACrC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAW,OAAO,EAAE,eAAe,EAAE;YACrE,2CAA2C;YAC3C,6CAA6C;SAChD,CAAC,CAAC;QAEH,0CAA0C;QAC1C,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YAC9D,IAAI,CAAC,IAAA,wBAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;gBACxB,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACpC,CAAC;QACL,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,8CAA8C;YAC9C,gBAAgB,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAE1D,MAAM,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"DwlStandardsRule.js","sourceRoot":"","sources":["../../../../src/rules/standards/DwlStandardsRule.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,+CAA4C;AAC5C,wDAAoD;AACpD,2CAA6B;AAE7B;;;;;GAKG;AACH,MAAa,gBAAiB,SAAQ,mBAAQ;IAC1C,EAAE,GAAG,UAAU,CAAC;IAChB,IAAI,GAAG,oBAAoB,CAAC;IAC5B,WAAW,GAAG,6EAA6E,CAAC;IAC5F,QAAQ,GAAG,MAAe,CAAC;IAC3B,QAAQ,GAAG,WAAoB,CAAC;IAEhC,+DAA+D;IACvD,MAAM,CAAC,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAEnD,QAAQ,CAAC,GAAa,EAAE,OAA0B;QAC9C,MAAM,MAAM,GAAY,EAAE,CAAC;QAE3B,8BAA8B;QAC9B,IAAI,gBAAgB,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5D,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,qCAAqC;QACrC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAW,OAAO,EAAE,eAAe,EAAE;YACrE,2CAA2C;YAC3C,6CAA6C;SAChD,CAAC,CAAC;QAEH,0CAA0C;QAC1C,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YAC9D,IAAI,CAAC,IAAA,wBAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;gBACxB,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACpC,CAAC;QACL,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,8CAA8C;YAC9C,gBAAgB,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAE1D,MAAM,CAAC,IAAI,CACP,IAAI,CAAC,eAAe,CAChB,oDAAoD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAC7E;gBACI,UAAU,EACN,+EAA+E;aACtF,CACJ,CACJ,CAAC;QACN,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,KAAK;QACf,gBAAgB,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC7C,CAAC;;AAxDL,4CAyDC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StructureRules.d.ts","sourceRoot":"","sources":["../../../../src/rules/structure/StructureRules.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,QAAQ;IAC9C,EAAE,SAAc;IAChB,IAAI,SAAuB;IAC3B,WAAW,SAAyD;IACpE,QAAQ,EAAG,SAAS,CAAU;IAC9B,QAAQ,EAAG,WAAW,CAAU;IAEhC,OAAO,CAAC,QAAQ,CAAC,aAAa,
|
|
1
|
+
{"version":3,"file":"StructureRules.d.ts","sourceRoot":"","sources":["../../../../src/rules/structure/StructureRules.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,QAAQ;IAC9C,EAAE,SAAc;IAChB,IAAI,SAAuB;IAC3B,WAAW,SAAyD;IACpE,QAAQ,EAAG,SAAS,CAAU;IAC9B,QAAQ,EAAG,WAAW,CAAU;IAEhC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA2C;IAEzE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAI/B;IAEF,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,GAAG,KAAK,EAAE;CAkChE;AAED;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,QAAQ;IAC1C,EAAE,SAAc;IAChB,IAAI,SAAwB;IAC5B,WAAW,SAA+D;IAC1E,QAAQ,EAAG,SAAS,CAAU;IAC9B,QAAQ,EAAG,WAAW,CAAU;IAEhC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,GAAG,KAAK,EAAE;IAqB7D,OAAO,CAAC,gBAAgB;CAQ3B;AAED;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,QAAQ;IAC3C,EAAE,SAAc;IAChB,IAAI,SAAyB;IAC7B,WAAW,SAAwD;IACnE,QAAQ,EAAG,SAAS,CAAU;IAC9B,QAAQ,EAAG,WAAW,CAAU;IAEhC,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,GAAG,KAAK,EAAE;CAqB/D"}
|
|
@@ -48,10 +48,7 @@ class ProjectStructureRule extends BaseRule_1.BaseRule {
|
|
|
48
48
|
description = 'Validate standard MuleSoft project folder structure';
|
|
49
49
|
severity = 'warning';
|
|
50
50
|
category = 'structure';
|
|
51
|
-
REQUIRED_DIRS = [
|
|
52
|
-
'src/main/mule',
|
|
53
|
-
'src/main/resources',
|
|
54
|
-
];
|
|
51
|
+
REQUIRED_DIRS = ['src/main/mule', 'src/main/resources'];
|
|
55
52
|
RECOMMENDED_DIRS = [
|
|
56
53
|
'src/main/resources/dwl',
|
|
57
54
|
'src/main/resources/api',
|
|
@@ -69,7 +66,7 @@ class ProjectStructureRule extends BaseRule_1.BaseRule {
|
|
|
69
66
|
message: `Missing required directory: ${dir}`,
|
|
70
67
|
ruleId: this.id,
|
|
71
68
|
severity: 'error',
|
|
72
|
-
suggestion: `Create directory: mkdir -p ${dir}
|
|
69
|
+
suggestion: `Create directory: mkdir -p ${dir}`,
|
|
73
70
|
});
|
|
74
71
|
}
|
|
75
72
|
}
|
|
@@ -82,7 +79,7 @@ class ProjectStructureRule extends BaseRule_1.BaseRule {
|
|
|
82
79
|
message: `Missing recommended directory: ${dir}`,
|
|
83
80
|
ruleId: this.id,
|
|
84
81
|
severity: 'info',
|
|
85
|
-
suggestion: `Consider creating: ${dir}
|
|
82
|
+
suggestion: `Consider creating: ${dir}`,
|
|
86
83
|
});
|
|
87
84
|
}
|
|
88
85
|
}
|
|
@@ -113,7 +110,7 @@ class GlobalConfigRule extends BaseRule_1.BaseRule {
|
|
|
113
110
|
message: 'Missing global.xml configuration file',
|
|
114
111
|
ruleId: this.id,
|
|
115
112
|
severity: this.severity,
|
|
116
|
-
suggestion: 'Create src/main/mule/global.xml for shared configurations'
|
|
113
|
+
suggestion: 'Create src/main/mule/global.xml for shared configurations',
|
|
117
114
|
});
|
|
118
115
|
}
|
|
119
116
|
return issues;
|
|
@@ -121,7 +118,7 @@ class GlobalConfigRule extends BaseRule_1.BaseRule {
|
|
|
121
118
|
findGlobalConfig(dir) {
|
|
122
119
|
try {
|
|
123
120
|
const files = fs.readdirSync(dir);
|
|
124
|
-
return files.some(f => f.toLowerCase().includes('global') && f.endsWith('.xml'));
|
|
121
|
+
return files.some((f) => f.toLowerCase().includes('global') && f.endsWith('.xml'));
|
|
125
122
|
}
|
|
126
123
|
catch {
|
|
127
124
|
return false;
|
|
@@ -153,7 +150,7 @@ class MonolithicXmlRule extends BaseRule_1.BaseRule {
|
|
|
153
150
|
message: `File has ${totalFlows} flows/sub-flows - consider splitting`,
|
|
154
151
|
ruleId: this.id,
|
|
155
152
|
severity: this.severity,
|
|
156
|
-
suggestion: 'Split into multiple XML files by domain or function'
|
|
153
|
+
suggestion: 'Split into multiple XML files by domain or function',
|
|
157
154
|
});
|
|
158
155
|
}
|
|
159
156
|
return issues;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StructureRules.js","sourceRoot":"","sources":["../../../../src/rules/structure/StructureRules.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAE7B,+CAA4C;AAE5C;;;;GAIG;AACH,MAAa,oBAAqB,SAAQ,mBAAQ;IAC9C,EAAE,GAAG,UAAU,CAAC;IAChB,IAAI,GAAG,mBAAmB,CAAC;IAC3B,WAAW,GAAG,qDAAqD,CAAC;IACpE,QAAQ,GAAG,SAAkB,CAAC;IAC9B,QAAQ,GAAG,WAAoB,CAAC;IAEf,aAAa,GAAG
|
|
1
|
+
{"version":3,"file":"StructureRules.js","sourceRoot":"","sources":["../../../../src/rules/structure/StructureRules.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAE7B,+CAA4C;AAE5C;;;;GAIG;AACH,MAAa,oBAAqB,SAAQ,mBAAQ;IAC9C,EAAE,GAAG,UAAU,CAAC;IAChB,IAAI,GAAG,mBAAmB,CAAC;IAC3B,WAAW,GAAG,qDAAqD,CAAC;IACpE,QAAQ,GAAG,SAAkB,CAAC;IAC9B,QAAQ,GAAG,WAAoB,CAAC;IAEf,aAAa,GAAG,CAAC,eAAe,EAAE,oBAAoB,CAAC,CAAC;IAExD,gBAAgB,GAAG;QAChC,wBAAwB;QACxB,wBAAwB;QACxB,gBAAgB;KACnB,CAAC;IAEF,QAAQ,CAAC,IAAc,EAAE,OAA0B;QAC/C,MAAM,MAAM,GAAY,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QAExC,6BAA6B;QAC7B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;YAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC;oBACR,IAAI,EAAE,CAAC;oBACP,OAAO,EAAE,+BAA+B,GAAG,EAAE;oBAC7C,MAAM,EAAE,IAAI,CAAC,EAAE;oBACf,QAAQ,EAAE,OAAO;oBACjB,UAAU,EAAE,8BAA8B,GAAG,EAAE;iBAClD,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAED,gCAAgC;QAChC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;YAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC;oBACR,IAAI,EAAE,CAAC;oBACP,OAAO,EAAE,kCAAkC,GAAG,EAAE;oBAChD,MAAM,EAAE,IAAI,CAAC,EAAE;oBACf,QAAQ,EAAE,MAAM;oBAChB,UAAU,EAAE,sBAAsB,GAAG,EAAE;iBAC1C,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AAjDD,oDAiDC;AAED;;;;GAIG;AACH,MAAa,gBAAiB,SAAQ,mBAAQ;IAC1C,EAAE,GAAG,UAAU,CAAC;IAChB,IAAI,GAAG,oBAAoB,CAAC;IAC5B,WAAW,GAAG,2DAA2D,CAAC;IAC1E,QAAQ,GAAG,SAAkB,CAAC;IAC9B,QAAQ,GAAG,WAAoB,CAAC;IAEhC,QAAQ,CAAC,IAAc,EAAE,OAA0B;QAC/C,MAAM,MAAM,GAAY,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAEhE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO,MAAM,CAAC;QAE3C,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAEvD,IAAI,CAAC,eAAe,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC;gBACR,IAAI,EAAE,CAAC;gBACP,OAAO,EAAE,uCAAuC;gBAChD,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,UAAU,EAAE,2DAA2D;aAC1E,CAAC,CAAC;QACP,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAEO,gBAAgB,CAAC,GAAW;QAChC,IAAI,CAAC;YACD,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAClC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACvF,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;CACJ;AApCD,4CAoCC;AAED;;;;GAIG;AACH,MAAa,iBAAkB,SAAQ,mBAAQ;IAC3C,EAAE,GAAG,UAAU,CAAC;IAChB,IAAI,GAAG,qBAAqB,CAAC;IAC7B,WAAW,GAAG,oDAAoD,CAAC;IACnE,QAAQ,GAAG,SAAkB,CAAC;IAC9B,QAAQ,GAAG,WAAoB,CAAC;IAEhC,QAAQ,CAAC,GAAa,EAAE,OAA0B;QAC9C,MAAM,MAAM,GAAY,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;QAE1D,oDAAoD;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAElD,IAAI,UAAU,GAAG,EAAE,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC;gBACR,IAAI,EAAE,CAAC;gBACP,OAAO,EAAE,YAAY,UAAU,uCAAuC;gBACtE,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,UAAU,EAAE,qDAAqD;aACpE,CAAC,CAAC;QACP,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AA5BD,8CA4BC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"YamlRules.d.ts","sourceRoot":"","sources":["../../../../src/rules/yaml/YamlRules.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAY,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,QAAQ;IAC9C,EAAE,SAAc;IAChB,IAAI,SAAkC;IACtC,WAAW,SAA2D;IACtE,QAAQ,EAAG,SAAS,CAAU;IAC9B,QAAQ,EAAG,WAAW,CAAU;IAEhC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,GAAG,KAAK,EAAE;
|
|
1
|
+
{"version":3,"file":"YamlRules.d.ts","sourceRoot":"","sources":["../../../../src/rules/yaml/YamlRules.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAY,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,QAAQ;IAC9C,EAAE,SAAc;IAChB,IAAI,SAAkC;IACtC,WAAW,SAA2D;IACtE,QAAQ,EAAG,SAAS,CAAU;IAC9B,QAAQ,EAAG,WAAW,CAAU;IAEhC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,GAAG,KAAK,EAAE;CAmDhE;AAED;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,QAAQ;IAC5C,EAAE,SAAc;IAChB,IAAI,SAAgC;IACpC,WAAW,SAA0D;IACrE,QAAQ,EAAG,MAAM,CAAU;IAC3B,QAAQ,EAAG,WAAW,CAAU;IAEhC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,GAAG,KAAK,EAAE;IA2B7D,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,aAAa;CAqBxB;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,QAAQ;IAC9C,EAAE,SAAc;IAChB,IAAI,SAA0B;IAC9B,WAAW,SAA0D;IACrE,QAAQ,EAAG,OAAO,CAAU;IAC5B,QAAQ,EAAG,UAAU,CAAU;IAE/B,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,GAAG,KAAK,EAAE;IAmB7D,OAAO,CAAC,wBAAwB;IAmChC,OAAO,CAAC,aAAa;CAqBxB"}
|
|
@@ -55,16 +55,20 @@ class EnvironmentFilesRule extends BaseRule_1.BaseRule {
|
|
|
55
55
|
const configSubDir = path.join(configDir, 'config');
|
|
56
56
|
const propertiesDir = path.join(configDir, 'properties');
|
|
57
57
|
// Check all possible locations for property files
|
|
58
|
-
const searchDirs = [configDir, configSubDir, propertiesDir].filter(d => fs.existsSync(d));
|
|
58
|
+
const searchDirs = [configDir, configSubDir, propertiesDir].filter((d) => fs.existsSync(d));
|
|
59
59
|
if (searchDirs.length === 0) {
|
|
60
60
|
return []; // No config directory found
|
|
61
61
|
}
|
|
62
|
-
const requiredEnvs = this.getOption(context, 'environments', [
|
|
62
|
+
const requiredEnvs = this.getOption(context, 'environments', [
|
|
63
|
+
'dev',
|
|
64
|
+
'qa',
|
|
65
|
+
'prod',
|
|
66
|
+
]);
|
|
63
67
|
const existingFiles = new Set();
|
|
64
68
|
for (const dir of searchDirs) {
|
|
65
69
|
try {
|
|
66
70
|
const files = fs.readdirSync(dir);
|
|
67
|
-
files.forEach(f => existingFiles.add(f.toLowerCase()));
|
|
71
|
+
files.forEach((f) => existingFiles.add(f.toLowerCase()));
|
|
68
72
|
}
|
|
69
73
|
catch {
|
|
70
74
|
// Directory not readable
|
|
@@ -82,7 +86,7 @@ class EnvironmentFilesRule extends BaseRule_1.BaseRule {
|
|
|
82
86
|
message: `Missing environment properties file for "${env}"`,
|
|
83
87
|
ruleId: this.id,
|
|
84
88
|
severity: this.severity,
|
|
85
|
-
suggestion: `Create ${env}.yaml or config-${env}.yaml in src/main/resources
|
|
89
|
+
suggestion: `Create ${env}.yaml or config-${env}.yaml in src/main/resources/`,
|
|
86
90
|
});
|
|
87
91
|
}
|
|
88
92
|
}
|
|
@@ -110,14 +114,14 @@ class PropertyNamingRule extends BaseRule_1.BaseRule {
|
|
|
110
114
|
if (!content)
|
|
111
115
|
continue;
|
|
112
116
|
const keys = YamlParser_1.YamlParser.getAllKeys(content);
|
|
113
|
-
const invalidKeys = keys.filter(key => !this.isValidPropertyName(key));
|
|
117
|
+
const invalidKeys = keys.filter((key) => !this.isValidPropertyName(key));
|
|
114
118
|
if (invalidKeys.length > 0) {
|
|
115
119
|
issues.push({
|
|
116
120
|
line: 1,
|
|
117
121
|
message: `Invalid property names in ${path.basename(yamlFile)}: ${invalidKeys.slice(0, 3).join(', ')}${invalidKeys.length > 3 ? '...' : ''}`,
|
|
118
122
|
ruleId: this.id,
|
|
119
123
|
severity: this.severity,
|
|
120
|
-
suggestion: 'Use category.property format (e.g., db.host, api.timeout)'
|
|
124
|
+
suggestion: 'Use category.property format (e.g., db.host, api.timeout)',
|
|
121
125
|
});
|
|
122
126
|
}
|
|
123
127
|
}
|
|
@@ -128,8 +132,8 @@ class PropertyNamingRule extends BaseRule_1.BaseRule {
|
|
|
128
132
|
// Valid: external-sapi.basepath, ramp.polling.max_retries
|
|
129
133
|
// Invalid: DBHOST, DbHost (no uppercase at start of segment)
|
|
130
134
|
// Now allows camelCase, hyphens in categories, underscores in properties
|
|
131
|
-
return /^[a-z][a-zA-Z0-9_-]*(\.[a-z][a-zA-Z0-9_-]*)+$/.test(key) ||
|
|
132
|
-
/^[a-z][a-zA-Z0-9_-]*$/.test(key); // Single word keys OK too
|
|
135
|
+
return (/^[a-z][a-zA-Z0-9_-]*(\.[a-z][a-zA-Z0-9_-]*)+$/.test(key) ||
|
|
136
|
+
/^[a-z][a-zA-Z0-9_-]*$/.test(key)); // Single word keys OK too
|
|
133
137
|
}
|
|
134
138
|
findYamlFiles(dir) {
|
|
135
139
|
const files = [];
|
|
@@ -196,7 +200,7 @@ class PlaintextSecretsRule extends BaseRule_1.BaseRule {
|
|
|
196
200
|
message: `Plaintext secret "${fullKey}" in ${path.basename(filePath)}`,
|
|
197
201
|
ruleId: this.id,
|
|
198
202
|
severity: this.severity,
|
|
199
|
-
suggestion: 'Encrypt value with ![...] or move to secure properties file'
|
|
203
|
+
suggestion: 'Encrypt value with ![...] or move to secure properties file',
|
|
200
204
|
});
|
|
201
205
|
}
|
|
202
206
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"YamlRules.js","sourceRoot":"","sources":["../../../../src/rules/yaml/YamlRules.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAE7B,+CAA4C;AAC5C,sDAAmD;AAEnD;;;;GAIG;AACH,MAAa,oBAAqB,SAAQ,mBAAQ;IAC9C,EAAE,GAAG,UAAU,CAAC;IAChB,IAAI,GAAG,8BAA8B,CAAC;IACtC,WAAW,GAAG,uDAAuD,CAAC;IACtE,QAAQ,GAAG,SAAkB,CAAC;IAC9B,QAAQ,GAAG,WAAoB,CAAC;IAEhC,QAAQ,CAAC,IAAc,EAAE,OAA0B;QAC/C,MAAM,MAAM,GAAY,EAAE,CAAC;QAE3B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;QACvE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACpD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAEzD,kDAAkD;QAClD,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"YamlRules.js","sourceRoot":"","sources":["../../../../src/rules/yaml/YamlRules.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../../src/types/Config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE5B,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC;IAE5C,yCAAyC;IACzC,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,yCAAyC;IACzC,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,qCAAqC;IACrC,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,mCAAmC;IACnC,gBAAgB,EAAE,aAAa,CAAC;IAEhC,mCAAmC;IACnC,aAAa,EAAE,OAAO,CAAC;IAEvB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../../src/types/Config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE5B,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC;IAE5C,yCAAyC;IACzC,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,yCAAyC;IACzC,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,qCAAqC;IACrC,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,mCAAmC;IACnC,gBAAgB,EAAE,aAAa,CAAC;IAEhC,mCAAmC;IACnC,aAAa,EAAE,OAAO,CAAC;IAEvB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,UAM5B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,uBAAuB;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qBAAqB;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB"}
|
package/dist/src/types/Config.js
CHANGED
|
@@ -7,11 +7,7 @@ exports.DEFAULT_CONFIG = void 0;
|
|
|
7
7
|
exports.DEFAULT_CONFIG = {
|
|
8
8
|
rules: {},
|
|
9
9
|
include: ['src/main/mule/**/*.xml'],
|
|
10
|
-
exclude: [
|
|
11
|
-
'**/test/**',
|
|
12
|
-
'**/*.munit.xml',
|
|
13
|
-
'**/target/**',
|
|
14
|
-
],
|
|
10
|
+
exclude: ['**/test/**', '**/*.munit.xml', '**/target/**'],
|
|
15
11
|
defaultFormatter: 'table',
|
|
16
12
|
failOnWarning: false,
|
|
17
13
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Config.js","sourceRoot":"","sources":["../../../src/types/Config.ts"],"names":[],"mappings":";;;AAoCA;;GAEG;AACU,QAAA,cAAc,GAAe;IACtC,KAAK,EAAE,EAAE;IACT,OAAO,EAAE,CAAC,wBAAwB,CAAC;IACnC,OAAO,EAAE
|
|
1
|
+
{"version":3,"file":"Config.js","sourceRoot":"","sources":["../../../src/types/Config.ts"],"names":[],"mappings":";;;AAoCA;;GAEG;AACU,QAAA,cAAc,GAAe;IACtC,KAAK,EAAE,EAAE;IACT,OAAO,EAAE,CAAC,wBAAwB,CAAC;IACnC,OAAO,EAAE,CAAC,YAAY,EAAE,gBAAgB,EAAE,cAAc,CAAC;IACzD,gBAAgB,EAAE,OAAO;IACzB,aAAa,EAAE,KAAK;CACvB,CAAC"}
|
package/docs/README.md
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Mule-Lint Documentation
|
|
2
|
+
|
|
3
|
+
Welcome to the Mule-Lint documentation. This documentation is organized into two sections:
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 📘 MuleSoft Best Practices
|
|
8
|
+
|
|
9
|
+
Comprehensive guidelines for building maintainable, secure, and performant Mule applications. These guidelines cover more than just what the linter validates - they represent industry best practices for MuleSoft development.
|
|
10
|
+
|
|
11
|
+
| Document | Description |
|
|
12
|
+
|----------|-------------|
|
|
13
|
+
| [Best Practices Guide](best-practices/mulesoft-best-practices.md) | Complete MuleSoft development best practices |
|
|
14
|
+
| [Rules Catalog](best-practices/rules-catalog.md) | All 40 linter rules with examples |
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 🔧 Linter Technical Documentation
|
|
19
|
+
|
|
20
|
+
For contributors and those extending mule-lint.
|
|
21
|
+
|
|
22
|
+
| Document | Description |
|
|
23
|
+
|----------|-------------|
|
|
24
|
+
| [Architecture](linter/architecture.md) | System design, patterns, and data flow |
|
|
25
|
+
| [Rule Engine](linter/rule-engine.md) | Rule engine internals and interfaces |
|
|
26
|
+
| [Extending](linter/extending.md) | How to create custom rules |
|
|
27
|
+
| [Folder Structure](linter/folder-structure.md) | Project organization |
|
|
28
|
+
| [Naming Conventions](linter/naming-conventions.md) | Code style and naming standards |
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Quick Start
|
|
33
|
+
|
|
34
|
+
### Installation
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npm install -g @sfdxy/mule-lint
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Common Commands
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# Scan with human-readable output
|
|
44
|
+
mule-lint ./src/main/mule
|
|
45
|
+
|
|
46
|
+
# Scan with JSON output
|
|
47
|
+
mule-lint ./src/main/mule -f json
|
|
48
|
+
|
|
49
|
+
# Scan with SARIF output for AI agents/IDEs
|
|
50
|
+
mule-lint ./src/main/mule -f sarif
|
|
51
|
+
|
|
52
|
+
# Generate HTML report
|
|
53
|
+
mule-lint ./src/main/mule -f html -o report.html
|
|
54
|
+
|
|
55
|
+
# Use config file
|
|
56
|
+
mule-lint ./src/main/mule -c .mulelintrc.json
|
|
57
|
+
|
|
58
|
+
# CI/CD: fail on warnings
|
|
59
|
+
mule-lint ./src/main/mule --fail-on-warning
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Exit Codes
|
|
63
|
+
|
|
64
|
+
| Code | Meaning |
|
|
65
|
+
|------|---------|
|
|
66
|
+
| 0 | Success (no errors) |
|
|
67
|
+
| 1 | Errors found |
|
|
68
|
+
| 2 | CLI/Configuration error |
|
|
69
|
+
| 3 | Parse errors (malformed XML) |
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Rule Families
|
|
74
|
+
|
|
75
|
+
| Family | Prefix | Count | Description |
|
|
76
|
+
|--------|--------|-------|-------------|
|
|
77
|
+
| Core MuleSoft | MULE-XXX | 29 | Core Mule 4 XML validation |
|
|
78
|
+
| YAML Properties | YAML-XXX | 3 | YAML configuration validation |
|
|
79
|
+
| DataWeave | DW-XXX | 3 | DataWeave file validation |
|
|
80
|
+
| API-Led | API-XXX | 3 | API-Led connectivity patterns |
|
|
81
|
+
| Experimental | EXP-XXX | 3 | Beta rules for evaluation |
|
|
82
|
+
|
|
83
|
+
**Total: 40 rules**
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## For AI Agents
|
|
88
|
+
|
|
89
|
+
Use SARIF output format for structured results:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
mule-lint ./src/main/mule -f sarif > report.sarif
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
SARIF output follows the [SARIF 2.1.0 specification](https://sarifweb.azurewebsites.net/) with rule definitions, precise file locations, and fix suggestions.
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# MuleSoft Documentation Standards
|
|
2
|
+
|
|
3
|
+
Detailed, up-to-date documentation is critical for the long-term maintainability of integration projects. This guide outlines how to document MuleSoft applications effectively.
|
|
4
|
+
|
|
5
|
+
## 1. Code-Level Documentation
|
|
6
|
+
|
|
7
|
+
### Flow Documentation
|
|
8
|
+
Every flow should have a `doc:description` explaining its purpose, input, and output.
|
|
9
|
+
|
|
10
|
+
```xml
|
|
11
|
+
<flow name="process-order-flow"
|
|
12
|
+
doc:name="Process Order"
|
|
13
|
+
doc:description="Orchestrates the order fulfillment process. Input: Order JSON. Output: Order Status JSON.">
|
|
14
|
+
<!-- ... -->
|
|
15
|
+
</flow>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### Component Documentation
|
|
19
|
+
Use the `doc:name` attribute to provide a human-readable display name for components in the Studio canvas.
|
|
20
|
+
* **Bad**: `Request`, `Transform Message`
|
|
21
|
+
* **Good**: `Request System API`, `Map to Common Model`
|
|
22
|
+
|
|
23
|
+
### Complex DataWeave
|
|
24
|
+
For complex transformations, use Javadoc-style comments within the `.dwl` file to explain the logic.
|
|
25
|
+
|
|
26
|
+
```dataweave
|
|
27
|
+
/**
|
|
28
|
+
* Maps the canonical Order model to the SAP specific format.
|
|
29
|
+
* Handles extensive field mapping and conditionally populates optional fields.
|
|
30
|
+
*
|
|
31
|
+
* @param payload The canonical Order object
|
|
32
|
+
* @return SAP Order structure
|
|
33
|
+
*/
|
|
34
|
+
%dw 2.0
|
|
35
|
+
output application/xml
|
|
36
|
+
---
|
|
37
|
+
{
|
|
38
|
+
// ...
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## 2. README.md Structure
|
|
43
|
+
|
|
44
|
+
Every repository must contain a `README.md` at the root. Use this template:
|
|
45
|
+
|
|
46
|
+
```markdown
|
|
47
|
+
# [Application Name]
|
|
48
|
+
|
|
49
|
+
[Short Description of what the application does]
|
|
50
|
+
|
|
51
|
+
## Architecture
|
|
52
|
+
- **Layer**: [System/Process/Experience]
|
|
53
|
+
- **Domain**: [e.g., Finance, Logistics]
|
|
54
|
+
- **Dependencies**: [List dependent System APIs or external systems]
|
|
55
|
+
|
|
56
|
+
## Setup & Installation
|
|
57
|
+
1. Clone the repo
|
|
58
|
+
2. Configure `dev.yaml` with your credentials...
|
|
59
|
+
|
|
60
|
+
## Features
|
|
61
|
+
- Order Creation
|
|
62
|
+
- Inventory Check
|
|
63
|
+
|
|
64
|
+
## API Specification
|
|
65
|
+
[Link to Exchange or local RAML]
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## 3. API Documentation (Exchange)
|
|
69
|
+
|
|
70
|
+
Maintain your API specification (RAML/OAS) in Anypoint Exchange.
|
|
71
|
+
* **Description**: Provide a high-level overview of the API.
|
|
72
|
+
* **Examples**: Include valid request/response examples for every endpoint.
|
|
73
|
+
* **Status Codes**: Document all possible HTTP return codes (200, 400, 401, 500).
|
|
74
|
+
|
|
75
|
+
## 4. Commit Messages
|
|
76
|
+
|
|
77
|
+
Follow [Conventional Commits](https://www.conventionalcommits.org/):
|
|
78
|
+
|
|
79
|
+
* `feat: add new order processing logic`
|
|
80
|
+
* `fix: resolve null pointer in mapping`
|
|
81
|
+
* `docs: update README with deployment steps`
|
|
82
|
+
* `chore: upgrade mule maven plugin`
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# MuleSoft Project Folder Structure Best Practices
|
|
2
|
+
|
|
3
|
+
This guide outlines the recommended folder structure for MuleSoft projects to ensure consistency, maintainability, and alignment with Maven standards.
|
|
4
|
+
|
|
5
|
+
## Standard Directory Layout
|
|
6
|
+
|
|
7
|
+
Every Mule 4 project should follow this standard Maven layout:
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
my-mule-project/
|
|
11
|
+
├── src/
|
|
12
|
+
│ ├── main/
|
|
13
|
+
│ │ ├── mule/ # Mule configuration files (XMLs)
|
|
14
|
+
│ │ │ ├── global.xml # Shared global configurations
|
|
15
|
+
│ │ │ ├── error-handler.xml # Global error handling strategy
|
|
16
|
+
│ │ │ ├── api/ # API Implementation (generated by APIKit)
|
|
17
|
+
│ │ │ └── business/ # Business logic flows
|
|
18
|
+
│ │ ├── resources/ # Non-Mule resources
|
|
19
|
+
│ │ │ ├── api/ # RAML/OAS specifications
|
|
20
|
+
│ │ │ ├── dwl/ # DataWeave scripts (.dwl)
|
|
21
|
+
│ │ │ ├── properties/ # Environment properties (.yaml)
|
|
22
|
+
│ │ │ ├── schemas/ # JSON/XML schemas
|
|
23
|
+
│ │ │ └── examples/ # Sample data for tests/mocks
|
|
24
|
+
│ │ └── java/ # Custom Java code
|
|
25
|
+
│ └── test/
|
|
26
|
+
│ ├── munit/ # MUnit test suites
|
|
27
|
+
│ └── resources/ # Test-specific resources (mocks, test data)
|
|
28
|
+
├── pom.xml # Maven build configuration
|
|
29
|
+
├── mule-artifact.json # Mule application descriptor
|
|
30
|
+
└── README.md # Application documentation
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Key Directories Explained
|
|
34
|
+
|
|
35
|
+
### `src/main/mule`
|
|
36
|
+
Contains the actual Mule flow definitions.
|
|
37
|
+
* **Best Practice**: Split monolithic XML files into logic units.
|
|
38
|
+
* `global.xml`: Configuration elements only (HTTP Listener Config, Database Config, etc.).
|
|
39
|
+
* `api.xml`: The main entry point (APIKit Router).
|
|
40
|
+
* `[feature]-impl.xml`: Implementation flows for a specific feature.
|
|
41
|
+
|
|
42
|
+
### `src/main/resources`
|
|
43
|
+
Contains external assets needed by the application.
|
|
44
|
+
* **`dwl/`**: Store complex DataWeave transformations here as separate `.dwl` files. Avoid inline scripts longer than 5 lines.
|
|
45
|
+
* **`properties/`**: Store externalized configuration. Use environment-specific files (e.g., `dev.yaml`, `prod.yaml`).
|
|
46
|
+
* **`api/`**: The API definition (RAML or OAS).
|
|
47
|
+
|
|
48
|
+
### `src/test/munit`
|
|
49
|
+
Contains your MUnit test suites.
|
|
50
|
+
* **Naming**: Match the source file name, e.g., `orders-test-suite.xml` tests `orders-impl.xml`.
|
|
51
|
+
|
|
52
|
+
## Naming Conventions
|
|
53
|
+
|
|
54
|
+
* **Files**: Use `kebab-case` (e.g., `process-orders.xml`, `common-utils.dwl`).
|
|
55
|
+
* **Directories**: Use `kebab-case` (e.g., `business-logic`, `error-handling`).
|
|
56
|
+
|
|
57
|
+
## Why this structure?
|
|
58
|
+
|
|
59
|
+
1. **Maven Compatibility**: Follows the standard `src/main/` and `src/test/` convention required by the Mule Maven Plugin.
|
|
60
|
+
2. **Separation of Concerns**: clearly separates code (Mule/Java) from configuration (properties) and tests.
|
|
61
|
+
3. **Maintainability**: Splitting resources into `dwl`, `examples`, and `schemas` prevents the generic `resources` folder from becoming cluttered.
|