@sfdxy/mule-lint 1.7.1 → 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 +43 -7
- 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 +1 -1
- package/dist/src/rules/error-handling/GlobalErrorHandlerRule.d.ts.map +1 -1
- package/dist/src/rules/error-handling/GlobalErrorHandlerRule.js +2 -2
- 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 +9 -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 +1 -0
- package/dist/src/rules/naming/FlowCasingRule.d.ts.map +1 -1
- package/dist/src/rules/naming/FlowCasingRule.js +7 -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 +12 -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 +6 -6
- 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 +8 -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 +19 -12
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HardcodedHttpRule.js","sourceRoot":"","sources":["../../../../src/rules/security/HardcodedHttpRule.ts"],"names":[],"mappings":";;;AACA,+CAA4C;AAE5C;;;;;GAKG;AACH,MAAa,iBAAkB,SAAQ,mBAAQ;IAC3C,EAAE,GAAG,UAAU,CAAC;IAChB,IAAI,GAAG,qBAAqB,CAAC;IAC7B,WAAW,GAAG,8EAA8E,CAAC;IAC7F,QAAQ,GAAG,OAAgB,CAAC;IAC5B,QAAQ,GAAG,UAAmB,CAAC;IAE/B,yBAAyB;IACR,WAAW,GAAG,eAAe,CAAC;IAE/C,wDAAwD;IACvC,gBAAgB,GAAG;QAChC,aAAa,
|
|
1
|
+
{"version":3,"file":"HardcodedHttpRule.js","sourceRoot":"","sources":["../../../../src/rules/security/HardcodedHttpRule.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InsecureTlsRule.d.ts","sourceRoot":"","sources":["../../../../src/rules/security/InsecureTlsRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;IACzC,EAAE,SAAc;IAChB,IAAI,SAAgC;IACpC,WAAW,SAAoE;IAC/E,QAAQ,EAAG,OAAO,CAAU;IAC5B,QAAQ,EAAG,UAAU,CAAU;IAE/B,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,GAAG,KAAK,EAAE;
|
|
1
|
+
{"version":3,"file":"InsecureTlsRule.d.ts","sourceRoot":"","sources":["../../../../src/rules/security/InsecureTlsRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;IACzC,EAAE,SAAc;IAChB,IAAI,SAAgC;IACpC,WAAW,SAAoE;IAC/E,QAAQ,EAAG,OAAO,CAAU;IAC5B,QAAQ,EAAG,UAAU,CAAU;IAE/B,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,GAAG,KAAK,EAAE;CAsChE"}
|
|
@@ -19,14 +19,14 @@ class InsecureTlsRule extends BaseRule_1.BaseRule {
|
|
|
19
19
|
const insecureTrustStores = this.select('//*[local-name()="trust-store"][@insecure="true"]', doc);
|
|
20
20
|
for (const trustStore of insecureTrustStores) {
|
|
21
21
|
issues.push(this.createIssue(trustStore, 'TLS trust-store has insecure="true" - certificates not verified', {
|
|
22
|
-
suggestion: 'Remove insecure="true" and configure proper certificate validation'
|
|
22
|
+
suggestion: 'Remove insecure="true" and configure proper certificate validation',
|
|
23
23
|
}));
|
|
24
24
|
}
|
|
25
25
|
// Find insecure key-store configurations
|
|
26
26
|
const insecureKeyStores = this.select('//*[local-name()="key-store"][@insecure="true"]', doc);
|
|
27
27
|
for (const keyStore of insecureKeyStores) {
|
|
28
28
|
issues.push(this.createIssue(keyStore, 'TLS key-store has insecure="true"', {
|
|
29
|
-
suggestion: 'Remove insecure="true" and use proper key management'
|
|
29
|
+
suggestion: 'Remove insecure="true" and use proper key management',
|
|
30
30
|
}));
|
|
31
31
|
}
|
|
32
32
|
return issues;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InsecureTlsRule.js","sourceRoot":"","sources":["../../../../src/rules/security/InsecureTlsRule.ts"],"names":[],"mappings":";;;AACA,+CAA4C;AAE5C;;;;GAIG;AACH,MAAa,eAAgB,SAAQ,mBAAQ;IACzC,EAAE,GAAG,UAAU,CAAC;IAChB,IAAI,GAAG,4BAA4B,CAAC;IACpC,WAAW,GAAG,gEAAgE,CAAC;IAC/E,QAAQ,GAAG,OAAgB,CAAC;IAC5B,QAAQ,GAAG,UAAmB,CAAC;IAE/B,QAAQ,CAAC,GAAa,EAAE,QAA2B;QAC/C,MAAM,MAAM,GAAY,EAAE,CAAC;QAE3B,2CAA2C;QAC3C,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CACnC,mDAAmD,EACnD,GAAG,CACN,CAAC;QAEF,KAAK,MAAM,UAAU,IAAI,mBAAmB,EAAE,CAAC;YAC3C,MAAM,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"InsecureTlsRule.js","sourceRoot":"","sources":["../../../../src/rules/security/InsecureTlsRule.ts"],"names":[],"mappings":";;;AACA,+CAA4C;AAE5C;;;;GAIG;AACH,MAAa,eAAgB,SAAQ,mBAAQ;IACzC,EAAE,GAAG,UAAU,CAAC;IAChB,IAAI,GAAG,4BAA4B,CAAC;IACpC,WAAW,GAAG,gEAAgE,CAAC;IAC/E,QAAQ,GAAG,OAAgB,CAAC;IAC5B,QAAQ,GAAG,UAAmB,CAAC;IAE/B,QAAQ,CAAC,GAAa,EAAE,QAA2B;QAC/C,MAAM,MAAM,GAAY,EAAE,CAAC;QAE3B,2CAA2C;QAC3C,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CACnC,mDAAmD,EACnD,GAAG,CACN,CAAC;QAEF,KAAK,MAAM,UAAU,IAAI,mBAAmB,EAAE,CAAC;YAC3C,MAAM,CAAC,IAAI,CACP,IAAI,CAAC,WAAW,CACZ,UAAU,EACV,iEAAiE,EACjE;gBACI,UAAU,EACN,oEAAoE;aAC3E,CACJ,CACJ,CAAC;QACN,CAAC;QAED,yCAAyC;QACzC,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CACjC,iDAAiD,EACjD,GAAG,CACN,CAAC;QAEF,KAAK,MAAM,QAAQ,IAAI,iBAAiB,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CACP,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,mCAAmC,EAAE;gBAC5D,UAAU,EAAE,sDAAsD;aACrE,CAAC,CACL,CAAC;QACN,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AA7CD,0CA6CC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChoiceAntiPatternRule.d.ts","sourceRoot":"","sources":["../../../../src/rules/standards/ChoiceAntiPatternRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C;;;;;GAKG;AACH,qBAAa,qBAAsB,SAAQ,QAAQ;IAC/C,EAAE,SAAc;IAChB,IAAI,SAAyB;IAC7B,WAAW,SAAkF;IAC7F,QAAQ,EAAG,SAAS,CAAU;IAC9B,QAAQ,EAAG,WAAW,CAAU;IAEhC,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,GAAG,KAAK,EAAE;
|
|
1
|
+
{"version":3,"file":"ChoiceAntiPatternRule.d.ts","sourceRoot":"","sources":["../../../../src/rules/standards/ChoiceAntiPatternRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C;;;;;GAKG;AACH,qBAAa,qBAAsB,SAAQ,QAAQ;IAC/C,EAAE,SAAc;IAChB,IAAI,SAAyB;IAC7B,WAAW,SAAkF;IAC7F,QAAQ,EAAG,SAAS,CAAU;IAC9B,QAAQ,EAAG,WAAW,CAAU;IAEhC,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,GAAG,KAAK,EAAE;CAyDhE"}
|
|
@@ -19,9 +19,15 @@ class ChoiceAntiPatternRule extends BaseRule_1.BaseRule {
|
|
|
19
19
|
// Find raise-error directly in otherwise blocks
|
|
20
20
|
const raiseErrorsInOtherwise = this.select('//mule:choice/mule:otherwise/mule:raise-error', doc);
|
|
21
21
|
for (const raiseError of raiseErrorsInOtherwise) {
|
|
22
|
+
// Skip if the raise-error is inside an until-successful block
|
|
23
|
+
// This is a valid retry pattern where raise-error triggers the retry
|
|
24
|
+
const isInsideUntilSuccessful = this.select('ancestor::mule:until-successful', raiseError).length > 0;
|
|
25
|
+
if (isInsideUntilSuccessful) {
|
|
26
|
+
continue; // Valid retry pattern, skip
|
|
27
|
+
}
|
|
22
28
|
const errorType = this.getAttribute(raiseError, 'type') ?? 'unknown';
|
|
23
29
|
issues.push(this.createIssue(raiseError, `raise-error with type="${errorType}" directly in otherwise block is an anti-pattern`, {
|
|
24
|
-
suggestion: 'Consider using a custom error type (e.g., APP:INVALID_REQUEST) with descriptive message, or refactor the choice logic'
|
|
30
|
+
suggestion: 'Consider using a custom error type (e.g., APP:INVALID_REQUEST) with descriptive message, or refactor the choice logic',
|
|
25
31
|
}));
|
|
26
32
|
}
|
|
27
33
|
// Also check for raise-error in when blocks (less common but still an anti-pattern)
|
|
@@ -32,7 +38,7 @@ class ChoiceAntiPatternRule extends BaseRule_1.BaseRule {
|
|
|
32
38
|
if (errorType === 'ANY' || errorType === 'MULE:ANY') {
|
|
33
39
|
issues.push(this.createIssue(raiseError, `raise-error with generic type="${errorType}" in choice/when block`, {
|
|
34
40
|
suggestion: 'Use a specific error type (e.g., APP:VALIDATION_ERROR) instead of ANY',
|
|
35
|
-
severity: 'info'
|
|
41
|
+
severity: 'info',
|
|
36
42
|
}));
|
|
37
43
|
}
|
|
38
44
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChoiceAntiPatternRule.js","sourceRoot":"","sources":["../../../../src/rules/standards/ChoiceAntiPatternRule.ts"],"names":[],"mappings":";;;AACA,+CAA4C;AAE5C;;;;;GAKG;AACH,MAAa,qBAAsB,SAAQ,mBAAQ;IAC/C,EAAE,GAAG,UAAU,CAAC;IAChB,IAAI,GAAG,qBAAqB,CAAC;IAC7B,WAAW,GAAG,8EAA8E,CAAC;IAC7F,QAAQ,GAAG,SAAkB,CAAC;IAC9B,QAAQ,GAAG,WAAoB,CAAC;IAEhC,QAAQ,CAAC,GAAa,EAAE,QAA2B;QAC/C,MAAM,MAAM,GAAY,EAAE,CAAC;QAE3B,gDAAgD;QAChD,MAAM,sBAAsB,GAAG,IAAI,CAAC,MAAM,CACtC,+CAA+C,EAC/C,GAAG,CACN,CAAC;QAEF,KAAK,MAAM,UAAU,IAAI,sBAAsB,EAAE,CAAC;YAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,SAAS,CAAC;YAErE,MAAM,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"ChoiceAntiPatternRule.js","sourceRoot":"","sources":["../../../../src/rules/standards/ChoiceAntiPatternRule.ts"],"names":[],"mappings":";;;AACA,+CAA4C;AAE5C;;;;;GAKG;AACH,MAAa,qBAAsB,SAAQ,mBAAQ;IAC/C,EAAE,GAAG,UAAU,CAAC;IAChB,IAAI,GAAG,qBAAqB,CAAC;IAC7B,WAAW,GAAG,8EAA8E,CAAC;IAC7F,QAAQ,GAAG,SAAkB,CAAC;IAC9B,QAAQ,GAAG,WAAoB,CAAC;IAEhC,QAAQ,CAAC,GAAa,EAAE,QAA2B;QAC/C,MAAM,MAAM,GAAY,EAAE,CAAC;QAE3B,gDAAgD;QAChD,MAAM,sBAAsB,GAAG,IAAI,CAAC,MAAM,CACtC,+CAA+C,EAC/C,GAAG,CACN,CAAC;QAEF,KAAK,MAAM,UAAU,IAAI,sBAAsB,EAAE,CAAC;YAC9C,8DAA8D;YAC9D,qEAAqE;YACrE,MAAM,uBAAuB,GACzB,IAAI,CAAC,MAAM,CAAC,iCAAiC,EAAE,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAE1E,IAAI,uBAAuB,EAAE,CAAC;gBAC1B,SAAS,CAAC,4BAA4B;YAC1C,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,SAAS,CAAC;YAErE,MAAM,CAAC,IAAI,CACP,IAAI,CAAC,WAAW,CACZ,UAAU,EACV,0BAA0B,SAAS,kDAAkD,EACrF;gBACI,UAAU,EACN,uHAAuH;aAC9H,CACJ,CACJ,CAAC;QACN,CAAC;QAED,oFAAoF;QACpF,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,0CAA0C,EAAE,GAAG,CAAC,CAAC;QAEvF,KAAK,MAAM,UAAU,IAAI,iBAAiB,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,SAAS,CAAC;YAErE,kCAAkC;YAClC,IAAI,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;gBAClD,MAAM,CAAC,IAAI,CACP,IAAI,CAAC,WAAW,CACZ,UAAU,EACV,kCAAkC,SAAS,wBAAwB,EACnE;oBACI,UAAU,EACN,uEAAuE;oBAC3E,QAAQ,EAAE,MAAM;iBACnB,CACJ,CACJ,CAAC;YACN,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AAhED,sDAgEC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeprecatedComponentRule.d.ts","sourceRoot":"","sources":["../../../../src/rules/standards/DeprecatedComponentRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C;;;;GAIG;AACH,qBAAa,uBAAwB,SAAQ,QAAQ;IACjD,EAAE,SAAc;IAChB,IAAI,SAAgC;IACpC,WAAW,SAAgD;IAC3D,QAAQ,EAAG,SAAS,CAAU;IAC9B,QAAQ,EAAG,WAAW,CAAU;IAEhC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAMlC;IAEF,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,GAAG,KAAK,EAAE;
|
|
1
|
+
{"version":3,"file":"DeprecatedComponentRule.d.ts","sourceRoot":"","sources":["../../../../src/rules/standards/DeprecatedComponentRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C;;;;GAIG;AACH,qBAAa,uBAAwB,SAAQ,QAAQ;IACjD,EAAE,SAAc;IAChB,IAAI,SAAgC;IACpC,WAAW,SAAgD;IAC3D,QAAQ,EAAG,SAAS,CAAU;IAC9B,QAAQ,EAAG,WAAW,CAAU;IAEhC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAMlC;IAEF,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,GAAG,KAAK,EAAE;CAqBhE"}
|
|
@@ -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":"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"}
|
|
@@ -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"}
|
|
@@ -53,17 +53,22 @@ class EnvironmentFilesRule extends BaseRule_1.BaseRule {
|
|
|
53
53
|
const issues = [];
|
|
54
54
|
const configDir = path.join(context.projectRoot, 'src/main/resources');
|
|
55
55
|
const configSubDir = path.join(configDir, 'config');
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
const propertiesDir = path.join(configDir, 'properties');
|
|
57
|
+
// Check all possible locations for property files
|
|
58
|
+
const searchDirs = [configDir, configSubDir, propertiesDir].filter((d) => fs.existsSync(d));
|
|
58
59
|
if (searchDirs.length === 0) {
|
|
59
60
|
return []; // No config directory found
|
|
60
61
|
}
|
|
61
|
-
const requiredEnvs = this.getOption(context, 'environments', [
|
|
62
|
+
const requiredEnvs = this.getOption(context, 'environments', [
|
|
63
|
+
'dev',
|
|
64
|
+
'qa',
|
|
65
|
+
'prod',
|
|
66
|
+
]);
|
|
62
67
|
const existingFiles = new Set();
|
|
63
68
|
for (const dir of searchDirs) {
|
|
64
69
|
try {
|
|
65
70
|
const files = fs.readdirSync(dir);
|
|
66
|
-
files.forEach(f => existingFiles.add(f.toLowerCase()));
|
|
71
|
+
files.forEach((f) => existingFiles.add(f.toLowerCase()));
|
|
67
72
|
}
|
|
68
73
|
catch {
|
|
69
74
|
// Directory not readable
|
|
@@ -81,7 +86,7 @@ class EnvironmentFilesRule extends BaseRule_1.BaseRule {
|
|
|
81
86
|
message: `Missing environment properties file for "${env}"`,
|
|
82
87
|
ruleId: this.id,
|
|
83
88
|
severity: this.severity,
|
|
84
|
-
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/`,
|
|
85
90
|
});
|
|
86
91
|
}
|
|
87
92
|
}
|
|
@@ -109,24 +114,26 @@ class PropertyNamingRule extends BaseRule_1.BaseRule {
|
|
|
109
114
|
if (!content)
|
|
110
115
|
continue;
|
|
111
116
|
const keys = YamlParser_1.YamlParser.getAllKeys(content);
|
|
112
|
-
const invalidKeys = keys.filter(key => !this.isValidPropertyName(key));
|
|
117
|
+
const invalidKeys = keys.filter((key) => !this.isValidPropertyName(key));
|
|
113
118
|
if (invalidKeys.length > 0) {
|
|
114
119
|
issues.push({
|
|
115
120
|
line: 1,
|
|
116
121
|
message: `Invalid property names in ${path.basename(yamlFile)}: ${invalidKeys.slice(0, 3).join(', ')}${invalidKeys.length > 3 ? '...' : ''}`,
|
|
117
122
|
ruleId: this.id,
|
|
118
123
|
severity: this.severity,
|
|
119
|
-
suggestion: 'Use category.property format (e.g., db.host, api.timeout)'
|
|
124
|
+
suggestion: 'Use category.property format (e.g., db.host, api.timeout)',
|
|
120
125
|
});
|
|
121
126
|
}
|
|
122
127
|
}
|
|
123
128
|
return issues;
|
|
124
129
|
}
|
|
125
130
|
isValidPropertyName(key) {
|
|
126
|
-
// Valid: db.host, api.client.timeout, http.port
|
|
127
|
-
//
|
|
128
|
-
|
|
129
|
-
|
|
131
|
+
// Valid: db.host, api.client.timeout, http.port, salesforce.authorizationUrl
|
|
132
|
+
// Valid: external-sapi.basepath, ramp.polling.max_retries
|
|
133
|
+
// Invalid: DBHOST, DbHost (no uppercase at start of segment)
|
|
134
|
+
// Now allows camelCase, hyphens in categories, underscores in properties
|
|
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
|
|
130
137
|
}
|
|
131
138
|
findYamlFiles(dir) {
|
|
132
139
|
const files = [];
|
|
@@ -193,7 +200,7 @@ class PlaintextSecretsRule extends BaseRule_1.BaseRule {
|
|
|
193
200
|
message: `Plaintext secret "${fullKey}" in ${path.basename(filePath)}`,
|
|
194
201
|
ruleId: this.id,
|
|
195
202
|
severity: this.severity,
|
|
196
|
-
suggestion: 'Encrypt value with ![...] or move to secure properties file'
|
|
203
|
+
suggestion: 'Encrypt value with ![...] or move to secure properties file',
|
|
197
204
|
});
|
|
198
205
|
}
|
|
199
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;
|
|
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.
|