@sfdxy/mule-lint 1.18.1 → 1.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +164 -151
- package/dist/bin/mule-lint-mcp.js.map +1 -1
- package/dist/bin/mule-lint.js +2 -2
- package/dist/bin/mule-lint.js.map +1 -1
- package/dist/package.json +26 -15
- package/dist/src/core/ComplexityCalculator.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/src/core/MetricsAggregator.d.ts.map +1 -1
- package/dist/src/core/MetricsAggregator.js +1 -1
- package/dist/src/core/MetricsAggregator.js.map +1 -1
- package/dist/src/core/MetricsCollector.d.ts.map +1 -1
- package/dist/src/core/MetricsCollector.js +1 -2
- package/dist/src/core/MetricsCollector.js.map +1 -1
- package/dist/src/core/QualityGateEvaluator.d.ts.map +1 -1
- package/dist/src/core/QualityGateEvaluator.js.map +1 -1
- package/dist/src/core/XPathHelper.d.ts.map +1 -1
- package/dist/src/core/XPathHelper.js +0 -1
- package/dist/src/core/XPathHelper.js.map +1 -1
- package/dist/src/core/XmlParser.d.ts.map +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.map +1 -1
- package/dist/src/core/errors.js.map +1 -1
- package/dist/src/engine/LintEngine.d.ts +10 -0
- package/dist/src/engine/LintEngine.d.ts.map +1 -1
- package/dist/src/engine/LintEngine.js +68 -4
- package/dist/src/engine/LintEngine.js.map +1 -1
- package/dist/src/formatter/MuleXmlFormatter.d.ts.map +1 -1
- package/dist/src/formatter/MuleXmlFormatter.js +7 -1
- package/dist/src/formatter/MuleXmlFormatter.js.map +1 -1
- package/dist/src/formatter/index.d.ts +2 -2
- package/dist/src/formatter/index.d.ts.map +1 -1
- package/dist/src/formatter/index.js.map +1 -1
- package/dist/src/formatters/CsvFormatter.js.map +1 -1
- package/dist/src/formatters/HtmlFormatter.js +0 -1
- package/dist/src/formatters/HtmlFormatter.js.map +1 -1
- package/dist/src/formatters/JsonFormatter.d.ts.map +1 -1
- package/dist/src/formatters/JsonFormatter.js.map +1 -1
- package/dist/src/formatters/SarifFormatter.js.map +1 -1
- package/dist/src/formatters/TableFormatter.js.map +1 -1
- package/dist/src/formatters/html/components/Icons.js +1 -1
- package/dist/src/formatters/html/components/Icons.js.map +1 -1
- package/dist/src/formatters/html/components/MetricCard.d.ts.map +1 -1
- package/dist/src/formatters/html/components/MetricCard.js.map +1 -1
- package/dist/src/formatters/html/components/Modal.d.ts.map +1 -1
- package/dist/src/formatters/html/components/Modal.js.map +1 -1
- package/dist/src/formatters/html/components/RatingBadge.d.ts.map +1 -1
- package/dist/src/formatters/html/components/RatingBadge.js +6 -6
- package/dist/src/formatters/html/components/RatingBadge.js.map +1 -1
- package/dist/src/formatters/html/index.d.ts +2 -2
- package/dist/src/formatters/html/index.d.ts.map +1 -1
- package/dist/src/formatters/html/index.js.map +1 -1
- package/dist/src/formatters/html/scripts/charts.d.ts.map +1 -1
- package/dist/src/formatters/html/scripts/charts.js +45 -12
- package/dist/src/formatters/html/scripts/charts.js.map +1 -1
- package/dist/src/formatters/html/scripts/index.d.ts.map +1 -1
- package/dist/src/formatters/html/scripts/index.js.map +1 -1
- package/dist/src/formatters/html/scripts/renderer.d.ts.map +1 -1
- package/dist/src/formatters/html/scripts/renderer.js +175 -35
- package/dist/src/formatters/html/scripts/renderer.js.map +1 -1
- package/dist/src/formatters/html/sections/Header.d.ts.map +1 -1
- package/dist/src/formatters/html/sections/Header.js.map +1 -1
- package/dist/src/formatters/html/sections/LintSummary.d.ts.map +1 -1
- package/dist/src/formatters/html/sections/LintSummary.js.map +1 -1
- package/dist/src/formatters/html/sections/QualityRatings.js.map +1 -1
- package/dist/src/formatters/html/sections/Sidebar.d.ts.map +1 -1
- package/dist/src/formatters/html/sections/Sidebar.js.map +1 -1
- package/dist/src/formatters/html/styles/badges.d.ts.map +1 -1
- package/dist/src/formatters/html/styles/badges.js.map +1 -1
- package/dist/src/formatters/html/styles/index.d.ts.map +1 -1
- package/dist/src/formatters/html/styles/index.js.map +1 -1
- package/dist/src/formatters/html/theme.js.map +1 -1
- package/dist/src/formatters/html/views/Dashboard.js +5 -5
- package/dist/src/formatters/html/views/Dashboard.js.map +1 -1
- package/dist/src/formatters/html/views/IssuesView.d.ts.map +1 -1
- package/dist/src/formatters/html/views/IssuesView.js.map +1 -1
- package/dist/src/formatters/index.js.map +1 -1
- package/dist/src/mcp/index.d.ts.map +1 -1
- package/dist/src/mcp/index.js +0 -1
- package/dist/src/mcp/index.js.map +1 -1
- package/dist/src/mcp/prompts/index.js.map +1 -1
- package/dist/src/mcp/resources/index.js +30 -7
- package/dist/src/mcp/resources/index.js.map +1 -1
- package/dist/src/mcp/tools/formatMuleXml.d.ts.map +1 -1
- package/dist/src/mcp/tools/formatMuleXml.js +4 -13
- package/dist/src/mcp/tools/formatMuleXml.js.map +1 -1
- package/dist/src/mcp/tools/getRuleDetails.d.ts.map +1 -1
- package/dist/src/mcp/tools/getRuleDetails.js +1 -3
- package/dist/src/mcp/tools/getRuleDetails.js.map +1 -1
- package/dist/src/mcp/tools/runLintAnalysis.js +9 -9
- package/dist/src/mcp/tools/runLintAnalysis.js.map +1 -1
- package/dist/src/mcp/tools/validateSnippet.d.ts.map +1 -1
- package/dist/src/mcp/tools/validateSnippet.js.map +1 -1
- package/dist/src/quality/calculator.d.ts.map +1 -1
- package/dist/src/quality/calculator.js +1 -1
- package/dist/src/quality/calculator.js.map +1 -1
- package/dist/src/quality/index.d.ts.map +1 -1
- package/dist/src/quality/index.js.map +1 -1
- package/dist/src/quality/thresholds.js.map +1 -1
- package/dist/src/quality/types.d.ts.map +1 -1
- package/dist/src/rules/api-led/ApiLedRules.d.ts.map +1 -1
- package/dist/src/rules/api-led/ApiLedRules.js +6 -2
- package/dist/src/rules/api-led/ApiLedRules.js.map +1 -1
- package/dist/src/rules/api-led/SingleSystemSapiRule.d.ts.map +1 -1
- package/dist/src/rules/api-led/SingleSystemSapiRule.js.map +1 -1
- package/dist/src/rules/base/BaseRule.d.ts.map +1 -1
- package/dist/src/rules/base/BaseRule.js.map +1 -1
- package/dist/src/rules/base/ProjectRule.d.ts.map +1 -1
- package/dist/src/rules/base/ProjectRule.js.map +1 -1
- package/dist/src/rules/complexity/FlowComplexityRule.d.ts.map +1 -1
- package/dist/src/rules/complexity/FlowComplexityRule.js.map +1 -1
- package/dist/src/rules/dataweave/DataWeaveRules.d.ts +6 -0
- package/dist/src/rules/dataweave/DataWeaveRules.d.ts.map +1 -1
- package/dist/src/rules/dataweave/DataWeaveRules.js +17 -3
- package/dist/src/rules/dataweave/DataWeaveRules.js.map +1 -1
- package/dist/src/rules/dataweave/Java17DWErrorHandlingRule.d.ts.map +1 -1
- package/dist/src/rules/dataweave/Java17DWErrorHandlingRule.js.map +1 -1
- package/dist/src/rules/documentation/DisplayNameRule.d.ts.map +1 -1
- package/dist/src/rules/documentation/DisplayNameRule.js.map +1 -1
- package/dist/src/rules/documentation/FlowDescriptionRule.d.ts.map +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.map +1 -1
- package/dist/src/rules/error-handling/CorrelationIdRule.d.ts +22 -1
- package/dist/src/rules/error-handling/CorrelationIdRule.d.ts.map +1 -1
- package/dist/src/rules/error-handling/CorrelationIdRule.js +107 -6
- 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.map +1 -1
- package/dist/src/rules/error-handling/GlobalErrorHandlerRule.d.ts +14 -2
- package/dist/src/rules/error-handling/GlobalErrorHandlerRule.d.ts.map +1 -1
- package/dist/src/rules/error-handling/GlobalErrorHandlerRule.js +40 -18
- package/dist/src/rules/error-handling/GlobalErrorHandlerRule.js.map +1 -1
- package/dist/src/rules/error-handling/HttpStatusRule.d.ts +5 -0
- package/dist/src/rules/error-handling/HttpStatusRule.d.ts.map +1 -1
- package/dist/src/rules/error-handling/HttpStatusRule.js +15 -0
- 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.map +1 -1
- package/dist/src/rules/error-handling/TryScopeRule.d.ts.map +1 -1
- package/dist/src/rules/error-handling/TryScopeRule.js.map +1 -1
- package/dist/src/rules/experimental/ExperimentalRules.d.ts.map +1 -1
- package/dist/src/rules/experimental/ExperimentalRules.js +6 -2
- package/dist/src/rules/experimental/ExperimentalRules.js.map +1 -1
- package/dist/src/rules/governance/GovernanceRules.d.ts.map +1 -1
- package/dist/src/rules/governance/GovernanceRules.js.map +1 -1
- package/dist/src/rules/http/HttpContentTypeRule.d.ts +28 -1
- package/dist/src/rules/http/HttpContentTypeRule.d.ts.map +1 -1
- package/dist/src/rules/http/HttpContentTypeRule.js +68 -7
- 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.map +1 -1
- package/dist/src/rules/http/HttpUserAgentRule.d.ts.map +1 -1
- package/dist/src/rules/http/HttpUserAgentRule.js.map +1 -1
- package/dist/src/rules/index.js.map +1 -1
- package/dist/src/rules/logging/ExcessiveLoggersRule.d.ts.map +1 -1
- package/dist/src/rules/logging/ExcessiveLoggersRule.js.map +1 -1
- package/dist/src/rules/logging/LoggerCategoryRule.d.ts.map +1 -1
- package/dist/src/rules/logging/LoggerCategoryRule.js.map +1 -1
- package/dist/src/rules/logging/LoggerInUntilSuccessfulRule.d.ts.map +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.map +1 -1
- package/dist/src/rules/logging/NewLoggingRules.d.ts.map +1 -1
- package/dist/src/rules/logging/NewLoggingRules.js.map +1 -1
- package/dist/src/rules/naming/FlowCasingRule.d.ts.map +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.map +1 -1
- package/dist/src/rules/operations/CommentedCodeRule.d.ts.map +1 -1
- package/dist/src/rules/operations/CommentedCodeRule.js.map +1 -1
- package/dist/src/rules/operations/UnusedFlowRule.d.ts +6 -1
- package/dist/src/rules/operations/UnusedFlowRule.d.ts.map +1 -1
- package/dist/src/rules/operations/UnusedFlowRule.js +23 -9
- package/dist/src/rules/operations/UnusedFlowRule.js.map +1 -1
- package/dist/src/rules/performance/AsyncErrorHandlerRule.d.ts.map +1 -1
- package/dist/src/rules/performance/AsyncErrorHandlerRule.js.map +1 -1
- package/dist/src/rules/performance/ConnectionPoolingRule.d.ts +5 -0
- package/dist/src/rules/performance/ConnectionPoolingRule.d.ts.map +1 -1
- package/dist/src/rules/performance/ConnectionPoolingRule.js +18 -5
- package/dist/src/rules/performance/ConnectionPoolingRule.js.map +1 -1
- package/dist/src/rules/performance/LargeChoiceBlockRule.d.ts.map +1 -1
- package/dist/src/rules/performance/LargeChoiceBlockRule.js.map +1 -1
- package/dist/src/rules/performance/ReconnectionStrategyRule.d.ts +7 -0
- package/dist/src/rules/performance/ReconnectionStrategyRule.d.ts.map +1 -1
- package/dist/src/rules/performance/ReconnectionStrategyRule.js +15 -2
- package/dist/src/rules/performance/ReconnectionStrategyRule.js.map +1 -1
- package/dist/src/rules/performance/ScatterGatherRoutesRule.d.ts.map +1 -1
- package/dist/src/rules/performance/ScatterGatherRoutesRule.js.map +1 -1
- package/dist/src/rules/security/EncryptionKeyInLogsRule.d.ts.map +1 -1
- package/dist/src/rules/security/EncryptionKeyInLogsRule.js.map +1 -1
- package/dist/src/rules/security/HardcodedCredentialsRule.d.ts.map +1 -1
- 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 +1 -9
- package/dist/src/rules/security/HardcodedHttpRule.js.map +1 -1
- package/dist/src/rules/security/InputValidationRule.d.ts.map +1 -1
- package/dist/src/rules/security/InputValidationRule.js +1 -3
- package/dist/src/rules/security/InputValidationRule.js.map +1 -1
- package/dist/src/rules/security/InsecureTlsRule.d.ts.map +1 -1
- package/dist/src/rules/security/InsecureTlsRule.js.map +1 -1
- package/dist/src/rules/security/RateLimitingRule.d.ts.map +1 -1
- package/dist/src/rules/security/RateLimitingRule.js.map +1 -1
- package/dist/src/rules/security/TlsVersionRule.d.ts.map +1 -1
- package/dist/src/rules/security/TlsVersionRule.js.map +1 -1
- package/dist/src/rules/standards/ApiKitValidationRule.d.ts.map +1 -1
- package/dist/src/rules/standards/ApiKitValidationRule.js.map +1 -1
- package/dist/src/rules/standards/AutoDiscoveryRule.d.ts.map +1 -1
- package/dist/src/rules/standards/AutoDiscoveryRule.js.map +1 -1
- package/dist/src/rules/standards/ChoiceAntiPatternRule.d.ts.map +1 -1
- package/dist/src/rules/standards/ChoiceAntiPatternRule.js.map +1 -1
- package/dist/src/rules/standards/CronExternalizedRule.d.ts.map +1 -1
- package/dist/src/rules/standards/CronExternalizedRule.js.map +1 -1
- package/dist/src/rules/standards/DeprecatedComponentRule.d.ts.map +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.map +1 -1
- package/dist/src/rules/standards/HttpPortPlaceholderRule.d.ts.map +1 -1
- package/dist/src/rules/standards/HttpPortPlaceholderRule.js.map +1 -1
- package/dist/src/rules/structure/StructureRules.d.ts +8 -1
- package/dist/src/rules/structure/StructureRules.d.ts.map +1 -1
- package/dist/src/rules/structure/StructureRules.js +11 -7
- 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 +2 -7
- 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.map +1 -1
- package/dist/src/types/QualityGate.d.ts.map +1 -1
- package/dist/src/types/QualityGate.js.map +1 -1
- package/dist/src/types/Report.d.ts.map +1 -1
- package/dist/src/types/Rule.d.ts +22 -0
- package/dist/src/types/Rule.d.ts.map +1 -1
- package/docs/README.md +27 -27
- package/docs/best-practices/documentation-standards.md +20 -11
- package/docs/best-practices/folder-structure.md +16 -10
- package/docs/best-practices/mulesoft-best-practices.md +96 -94
- package/docs/best-practices/rules-catalog.md +422 -299
- package/docs/linter/architecture.md +70 -64
- package/docs/linter/extending.md +137 -128
- package/docs/linter/folder-structure.md +39 -38
- package/docs/linter/naming-conventions.md +80 -78
- package/docs/linter/rule-engine.md +306 -306
- package/docs/mcp-design.md +35 -21
- package/package.json +84 -73
package/README.md
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="assets/logo.svg" alt="Mule-Lint" width="600" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<a href="https://www.npmjs.com/package/@sfdxy/mule-lint"><img src="https://img.shields.io/npm/v/@sfdxy/mule-lint?style=flat-square&color=34d399" alt="npm version" /></a>
|
|
7
|
+
<a href="https://github.com/Avinava/mule-lint/actions"><img src="https://img.shields.io/github/actions/workflow/status/Avinava/mule-lint/ci.yml?style=flat-square&color=38bdf8" alt="CI" /></a>
|
|
8
|
+
<a href="https://github.com/Avinava/mule-lint/blob/master/LICENSE"><img src="https://img.shields.io/npm/l/@sfdxy/mule-lint?style=flat-square&color=818cf8" alt="License" /></a>
|
|
9
|
+
<a href="https://www.npmjs.com/package/@sfdxy/mule-lint"><img src="https://img.shields.io/npm/dm/@sfdxy/mule-lint?style=flat-square&color=fbbf24" alt="Downloads" /></a>
|
|
10
|
+
</p>
|
|
2
11
|
|
|
3
12
|
<p align="center">
|
|
4
13
|
<strong>Enterprise-grade static analysis tool for MuleSoft applications</strong>
|
|
@@ -33,19 +42,19 @@ flowchart TB
|
|
|
33
42
|
subgraph CLI["CLI Layer"]
|
|
34
43
|
A[npx @sfdxy/mule-lint command]
|
|
35
44
|
end
|
|
36
|
-
|
|
45
|
+
|
|
37
46
|
subgraph Engine["LintEngine"]
|
|
38
47
|
B[FileScanner] --> C[XmlParser]
|
|
39
48
|
C --> D[Rule Executor]
|
|
40
49
|
end
|
|
41
|
-
|
|
50
|
+
|
|
42
51
|
subgraph Rules["Rules - Strategy Pattern"]
|
|
43
52
|
D --> E[MULE-001]
|
|
44
53
|
D --> F[MULE-002]
|
|
45
54
|
D --> G[...]
|
|
46
55
|
D --> H[MULE-010]
|
|
47
56
|
end
|
|
48
|
-
|
|
57
|
+
|
|
49
58
|
subgraph Output["Formatters"]
|
|
50
59
|
I[Table]
|
|
51
60
|
J[JSON]
|
|
@@ -53,13 +62,13 @@ flowchart TB
|
|
|
53
62
|
L[HTML Dashboard]
|
|
54
63
|
M[CSV]
|
|
55
64
|
end
|
|
56
|
-
|
|
65
|
+
|
|
57
66
|
subgraph HTMLStack["HTML Report Stack"]
|
|
58
67
|
L --> N[Tailwind CSS]
|
|
59
68
|
L --> O[Chart.js]
|
|
60
69
|
L --> P[Tabulator]
|
|
61
70
|
end
|
|
62
|
-
|
|
71
|
+
|
|
63
72
|
A --> B
|
|
64
73
|
D --> I
|
|
65
74
|
D --> J
|
|
@@ -79,7 +88,6 @@ flowchart LR
|
|
|
79
88
|
E --> F["Table / JSON / SARIF / HTML / CSV"]
|
|
80
89
|
```
|
|
81
90
|
|
|
82
|
-
|
|
83
91
|
---
|
|
84
92
|
|
|
85
93
|
## Installation
|
|
@@ -118,16 +126,16 @@ npx @sfdxy/mule-lint ./src/main/mule --fail-on-warning
|
|
|
118
126
|
|
|
119
127
|
### CLI Options
|
|
120
128
|
|
|
121
|
-
| Option
|
|
122
|
-
|
|
123
|
-
| `-f, --format <type>`
|
|
124
|
-
| `-o, --output <file>`
|
|
125
|
-
| `-c, --config <file>`
|
|
126
|
-
| `-q, --quiet`
|
|
127
|
-
| `-e, --experimental`
|
|
128
|
-
| `-g, --quality-gate <name>` | Apply quality gate: `default`, `strict`, or `config`
|
|
129
|
-
| `--fail-on-warning`
|
|
130
|
-
| `-v, --verbose`
|
|
129
|
+
| Option | Description |
|
|
130
|
+
| --------------------------- | ------------------------------------------------------------------------- |
|
|
131
|
+
| `-f, --format <type>` | Output format: `table`, `json`, `sarif`, `html`, `csv` (default: `table`) |
|
|
132
|
+
| `-o, --output <file>` | Write output to file instead of stdout |
|
|
133
|
+
| `-c, --config <file>` | Path to configuration file |
|
|
134
|
+
| `-q, --quiet` | Show only errors (suppress warnings and info) |
|
|
135
|
+
| `-e, --experimental` | **Enable experimental rules (opt-in)** |
|
|
136
|
+
| `-g, --quality-gate <name>` | Apply quality gate: `default`, `strict`, or `config` |
|
|
137
|
+
| `--fail-on-warning` | Exit with error code if warnings found |
|
|
138
|
+
| `-v, --verbose` | Show verbose output |
|
|
131
139
|
|
|
132
140
|
---
|
|
133
141
|
|
|
@@ -137,10 +145,10 @@ Quality gates provide pass/fail thresholds for your CI/CD pipelines. When a gate
|
|
|
137
145
|
|
|
138
146
|
### Built-in Gates
|
|
139
147
|
|
|
140
|
-
| Gate
|
|
141
|
-
|
|
148
|
+
| Gate | Description |
|
|
149
|
+
| --------- | ----------------------------------------------------------------------------- |
|
|
142
150
|
| `default` | Fails if errors > 0, warnings > 10, complexity > 20, or security hotspots > 0 |
|
|
143
|
-
| `strict`
|
|
151
|
+
| `strict` | Fails if any errors, warnings > 0, or complexity > 10 |
|
|
144
152
|
|
|
145
153
|
### Usage
|
|
146
154
|
|
|
@@ -148,7 +156,7 @@ Quality gates provide pass/fail thresholds for your CI/CD pipelines. When a gate
|
|
|
148
156
|
# Apply default quality gate
|
|
149
157
|
npx @sfdxy/mule-lint ./src/main/mule -g default
|
|
150
158
|
|
|
151
|
-
# Apply strict quality gate
|
|
159
|
+
# Apply strict quality gate
|
|
152
160
|
npx @sfdxy/mule-lint ./src/main/mule -g strict
|
|
153
161
|
|
|
154
162
|
# Use custom gate from config
|
|
@@ -181,40 +189,43 @@ The HTML report displays quality ratings for four key dimensions. These follow i
|
|
|
181
189
|
**What it measures:** Average cyclomatic complexity across all flows.
|
|
182
190
|
|
|
183
191
|
**Calculation:**
|
|
192
|
+
|
|
184
193
|
- Count decision points per flow: `choice/when`, `foreach`, `try`, `scatter-gather`, `async`, `until-successful`, `error-handlers`
|
|
185
194
|
- Base complexity = 1 + (total decision points)
|
|
186
195
|
- **Rating = Average of all flow complexities**
|
|
187
196
|
|
|
188
|
-
| Rating | Threshold | Interpretation
|
|
189
|
-
|
|
190
|
-
| **A**
|
|
191
|
-
| **B**
|
|
192
|
-
| **C**
|
|
193
|
-
| **D**
|
|
194
|
-
| **E**
|
|
197
|
+
| Rating | Threshold | Interpretation |
|
|
198
|
+
| ------ | --------- | ----------------------------------------- |
|
|
199
|
+
| **A** | Avg ≤ 5 | Simple, easy to test |
|
|
200
|
+
| **B** | Avg ≤ 10 | Moderate complexity |
|
|
201
|
+
| **C** | Avg ≤ 15 | Complex, consider splitting |
|
|
202
|
+
| **D** | Avg ≤ 20 | High complexity, refactor recommended |
|
|
203
|
+
| **E** | Avg > 20 | Very complex, critical refactoring needed |
|
|
195
204
|
|
|
196
205
|
#### Maintainability Rating
|
|
197
206
|
|
|
198
207
|
**What it measures:** Technical debt as a percentage of estimated development time.
|
|
199
208
|
|
|
200
209
|
**Calculation:**
|
|
210
|
+
|
|
201
211
|
- Debt minutes = (code smells × 5min) + (bugs × 15min) + (vulnerabilities × 30min)
|
|
202
212
|
- Development estimate = (flows × 10min) + (subflows × 5min), minimum 60min
|
|
203
213
|
- **Debt Ratio = (Debt minutes / Development estimate) × 100%**
|
|
204
214
|
|
|
205
|
-
| Rating | Debt Ratio | Interpretation
|
|
206
|
-
|
|
207
|
-
| **A**
|
|
208
|
-
| **B**
|
|
209
|
-
| **C**
|
|
210
|
-
| **D**
|
|
211
|
-
| **E**
|
|
215
|
+
| Rating | Debt Ratio | Interpretation |
|
|
216
|
+
| ------ | ---------- | -------------------------------------- |
|
|
217
|
+
| **A** | ≤ 5% | Excellent maintainability |
|
|
218
|
+
| **B** | ≤ 10% | Good maintainability |
|
|
219
|
+
| **C** | ≤ 20% | Moderate technical debt |
|
|
220
|
+
| **D** | ≤ 50% | High debt, plan remediation |
|
|
221
|
+
| **E** | > 50% | Critical debt, immediate action needed |
|
|
212
222
|
|
|
213
223
|
#### Reliability Rating
|
|
214
224
|
|
|
215
225
|
**What it measures:** Number of bug-type issues detected.
|
|
216
226
|
|
|
217
227
|
**Bug-type rules:** All `error-handling` category rules are classified as bugs, including:
|
|
228
|
+
|
|
218
229
|
- Missing error handlers (MULE-003)
|
|
219
230
|
- Missing correlation ID (MULE-007)
|
|
220
231
|
- Generic error handling (MULE-009)
|
|
@@ -222,19 +233,20 @@ The HTML report displays quality ratings for four key dimensions. These follow i
|
|
|
222
233
|
- Global error handler (MULE-001)
|
|
223
234
|
- Try scope usage (ERR-001)
|
|
224
235
|
|
|
225
|
-
| Rating | Bug Count | Interpretation
|
|
226
|
-
|
|
227
|
-
| **A**
|
|
228
|
-
| **B**
|
|
229
|
-
| **C**
|
|
230
|
-
| **D**
|
|
231
|
-
| **E**
|
|
236
|
+
| Rating | Bug Count | Interpretation |
|
|
237
|
+
| ------ | --------- | --------------------------- |
|
|
238
|
+
| **A** | 0 bugs | No reliability issues |
|
|
239
|
+
| **B** | 1-2 bugs | Minor reliability concerns |
|
|
240
|
+
| **C** | 3-5 bugs | Moderate reliability risk |
|
|
241
|
+
| **D** | 6-10 bugs | High reliability risk |
|
|
242
|
+
| **E** | > 10 bugs | Critical reliability issues |
|
|
232
243
|
|
|
233
244
|
#### Security Rating
|
|
234
245
|
|
|
235
246
|
**What it measures:** Vulnerability and security hotspot count.
|
|
236
247
|
|
|
237
248
|
**Vulnerability rules:** All `security` category rules are classified as vulnerabilities, including:
|
|
249
|
+
|
|
238
250
|
- Hardcoded credentials (MULE-201)
|
|
239
251
|
- Insecure TLS (MULE-202)
|
|
240
252
|
- Plaintext secrets (YAML-004)
|
|
@@ -243,13 +255,13 @@ The HTML report displays quality ratings for four key dimensions. These follow i
|
|
|
243
255
|
- Rate limiting (SEC-003)
|
|
244
256
|
- Input validation (SEC-004)
|
|
245
257
|
|
|
246
|
-
| Rating | Vulnerabilities | Interpretation
|
|
247
|
-
|
|
248
|
-
| **A**
|
|
249
|
-
| **B**
|
|
250
|
-
| **C**
|
|
251
|
-
| **D**
|
|
252
|
-
| **E**
|
|
258
|
+
| Rating | Vulnerabilities | Interpretation |
|
|
259
|
+
| ------ | --------------- | ----------------------------- |
|
|
260
|
+
| **A** | 0 vulns | Secure configuration |
|
|
261
|
+
| **B** | 1 vuln | Minor security finding |
|
|
262
|
+
| **C** | 2-3 vulns | Security review needed |
|
|
263
|
+
| **D** | 4-5 vulns | Security remediation required |
|
|
264
|
+
| **E** | > 5 vulns | Critical security issues |
|
|
253
265
|
|
|
254
266
|
### Examples
|
|
255
267
|
|
|
@@ -270,106 +282,105 @@ npx @sfdxy/mule-lint src/main/mule -f sarif -o results.sarif
|
|
|
270
282
|
|
|
271
283
|
### Core Rules (MVP)
|
|
272
284
|
|
|
273
|
-
| ID
|
|
274
|
-
|
|
275
|
-
| MULE-001 | Global Error Handler
|
|
276
|
-
| MULE-002 | Flow Naming
|
|
277
|
-
| MULE-003 | Missing Error Handler | Error
|
|
278
|
-
| MULE-004 | Hardcoded URLs
|
|
279
|
-
| MULE-005 | HTTP Status Check
|
|
280
|
-
| MULE-006 | Logger Category
|
|
281
|
-
| MULE-007 | Correlation ID
|
|
282
|
-
| MULE-008 | Choice Anti-Pattern
|
|
283
|
-
| MULE-009 | Generic Error Type
|
|
284
|
-
| MULE-010 | DWL Standards
|
|
285
|
+
| ID | Name | Severity | Category | Description |
|
|
286
|
+
| -------- | --------------------- | -------- | -------------- | -------------------------------------------------------------------- |
|
|
287
|
+
| MULE-001 | Global Error Handler | Warning | Error Handling | Any flow file should have a global error handler |
|
|
288
|
+
| MULE-002 | Flow Naming | Warning | Naming | Flows end with `-flow`, sub-flows with `-subflow` |
|
|
289
|
+
| MULE-003 | Missing Error Handler | Error | Error Handling | Flows should have error handlers |
|
|
290
|
+
| MULE-004 | Hardcoded URLs | Error | Security | Use property placeholders for URLs |
|
|
291
|
+
| MULE-005 | HTTP Status Check | Warning | Error Handling | Error handlers should set httpStatus (skipped for non-HTTP projects) |
|
|
292
|
+
| MULE-006 | Logger Category | Warning | Logging | Loggers should have category attribute |
|
|
293
|
+
| MULE-007 | Correlation ID | Warning | Error Handling | Error handlers should reference correlationId (checks DWL files too) |
|
|
294
|
+
| MULE-008 | Choice Anti-Pattern | Warning | Standards | Avoid raise-error in otherwise |
|
|
295
|
+
| MULE-009 | Generic Error Type | Warning | Error Handling | Avoid catching type="ANY" |
|
|
296
|
+
| MULE-010 | DWL Standards | Info | Standards | Standard DataWeave files should exist |
|
|
285
297
|
|
|
286
298
|
### Extended Rules
|
|
287
299
|
|
|
288
|
-
| ID
|
|
289
|
-
|
|
290
|
-
| MULE-101 | Flow Casing
|
|
291
|
-
| MULE-102 | Variable Naming
|
|
292
|
-
| MULE-201 | Hardcoded Credentials | Error
|
|
293
|
-
| MULE-202 | Insecure TLS
|
|
294
|
-
| MULE-301 | Logger Payload
|
|
295
|
-
| MULE-303 | Logger in Retry
|
|
296
|
-
| MULE-401 | HTTP User-Agent
|
|
297
|
-
| MULE-402 | HTTP Content-Type
|
|
298
|
-
| MULE-403 | HTTP Timeout
|
|
299
|
-
| MULE-501 | Scatter-Gather
|
|
300
|
-
| MULE-502 | Async Error
|
|
301
|
-
| MULE-503 | Large Choice
|
|
302
|
-
| MULE-601 | Flow Description
|
|
303
|
-
| MULE-604 | Missing doc:name
|
|
304
|
-
| MULE-701 | Deprecated
|
|
305
|
-
| MULE-801 | Flow Complexity
|
|
306
|
-
| MULE-802 | Project Structure
|
|
307
|
-
| MULE-803 | Global Config
|
|
308
|
-
| MULE-804 | Monolithic XML
|
|
300
|
+
| ID | Name | Severity | Category | Description |
|
|
301
|
+
| -------- | --------------------- | -------- | ------------- | --------------------------------------------------------- |
|
|
302
|
+
| MULE-101 | Flow Casing | Warning | Naming | kebab-case for flows |
|
|
303
|
+
| MULE-102 | Variable Naming | Warning | Naming | camelCase for variables |
|
|
304
|
+
| MULE-201 | Hardcoded Credentials | Error | Security | Use `${secure::}` |
|
|
305
|
+
| MULE-202 | Insecure TLS | Error | Security | No insecure="true" |
|
|
306
|
+
| MULE-301 | Logger Payload | Warning | Logging | Don't log entire payload |
|
|
307
|
+
| MULE-303 | Logger in Retry | Warning | Logging | Avoid loggers in until-successful |
|
|
308
|
+
| MULE-401 | HTTP User-Agent | Warning | HTTP | Include User-Agent |
|
|
309
|
+
| MULE-402 | HTTP Content-Type | Warning | HTTP | POST/PUT needs Content-Type (static, CDATA, or inline DW) |
|
|
310
|
+
| MULE-403 | HTTP Timeout | Warning | HTTP | Set responseTimeout |
|
|
311
|
+
| MULE-501 | Scatter-Gather | Info | Performance | Limit parallel routes |
|
|
312
|
+
| MULE-502 | Async Error | Warning | Performance | Async needs error handling |
|
|
313
|
+
| MULE-503 | Large Choice | Warning | Performance | Max 7 when clauses |
|
|
314
|
+
| MULE-601 | Flow Description | Info | Documentation | Add doc:description |
|
|
315
|
+
| MULE-604 | Missing doc:name | Warning | Documentation | Key components need doc:name |
|
|
316
|
+
| MULE-701 | Deprecated | Warning | Standards | Detect deprecated elements |
|
|
317
|
+
| MULE-801 | Flow Complexity | Warning | Complexity | Cyclomatic complexity threshold |
|
|
318
|
+
| MULE-802 | Project Structure | Warning | Structure | Validate folder structure |
|
|
319
|
+
| MULE-803 | Global Config | Warning | Structure | global.xml should exist |
|
|
320
|
+
| MULE-804 | Monolithic XML | Warning | Structure | Split large XML files |
|
|
309
321
|
|
|
310
322
|
### DataWeave & API-Led Rules
|
|
311
323
|
|
|
312
|
-
| ID
|
|
313
|
-
|
|
314
|
-
| DW-001
|
|
315
|
-
| DW-002
|
|
316
|
-
| DW-003
|
|
317
|
-
| DW-004
|
|
318
|
-
| API-001 | Experience Layer
|
|
319
|
-
| API-002 | Process Layer
|
|
320
|
-
| API-003 | System Layer
|
|
321
|
-
| API-004 | Single SAPI
|
|
324
|
+
| ID | Name | Severity | Category | Description |
|
|
325
|
+
| ------- | ----------------- | -------- | --------- | ---------------------------------------------------- |
|
|
326
|
+
| DW-001 | External DWL | Warning | DataWeave | Externalize complex transforms |
|
|
327
|
+
| DW-002 | DWL Naming | Info | DataWeave | kebab-case for .dwl files (configurable exemptPaths) |
|
|
328
|
+
| DW-003 | DWL Modules | Info | DataWeave | Use common modules |
|
|
329
|
+
| DW-004 | Java 17 DW Errors | Error | DataWeave | Java 17 compatible error handling |
|
|
330
|
+
| API-001 | Experience Layer | Info | API-Led | Experience API patterns |
|
|
331
|
+
| API-002 | Process Layer | Info | API-Led | Process layer orchestration |
|
|
332
|
+
| API-003 | System Layer | Info | API-Led | System layer connections |
|
|
333
|
+
| API-004 | Single SAPI | Warning | API-Led | Single system per SAPI |
|
|
322
334
|
|
|
323
335
|
### Experimental Rules
|
|
324
336
|
|
|
325
|
-
| ID
|
|
326
|
-
|
|
327
|
-
| EXP-001
|
|
328
|
-
| EXP-002
|
|
329
|
-
| EXP-003
|
|
330
|
-
| YAML-001 | Env Files
|
|
331
|
-
| YAML-003 | Property Naming
|
|
332
|
-
| YAML-004 | Plaintext Secrets | Error
|
|
337
|
+
| ID | Name | Severity | Category | Description |
|
|
338
|
+
| -------- | ----------------- | -------- | ------------ | --------------------------------- |
|
|
339
|
+
| EXP-001 | Flow Ref Depth | Info | Experimental | Limit flow-ref chains |
|
|
340
|
+
| EXP-002 | Config Naming | Info | Experimental | Connector config naming |
|
|
341
|
+
| EXP-003 | MUnit Coverage | Info | Experimental | Check for MUnit tests |
|
|
342
|
+
| YAML-001 | Env Files | Warning | Standards | Environment YAML files |
|
|
343
|
+
| YAML-003 | Property Naming | Info | Standards | Property key format |
|
|
344
|
+
| YAML-004 | Plaintext Secrets | Error | Security | Encrypt sensitive YAML properties |
|
|
333
345
|
|
|
334
346
|
### 2025-2026 Best Practices Rules (NEW)
|
|
335
347
|
|
|
336
|
-
| ID
|
|
337
|
-
|
|
338
|
-
| SEC-002
|
|
339
|
-
| SEC-003
|
|
340
|
-
| SEC-004
|
|
341
|
-
| LOG-001
|
|
342
|
-
| LOG-004
|
|
343
|
-
| ERR-001
|
|
344
|
-
| PERF-002 | Connection Pooling
|
|
348
|
+
| ID | Name | Severity | Category | Description |
|
|
349
|
+
| -------- | ---------------------- | -------- | -------------- | ----------------------------------------- |
|
|
350
|
+
| SEC-002 | TLS Version | Error | Security | Detect deprecated TLS versions (< 1.2) |
|
|
351
|
+
| SEC-003 | Rate Limiting | Warning | Security | APIs should have rate limiting configured |
|
|
352
|
+
| SEC-004 | Input Validation | Warning | Security | Incoming payloads should be validated |
|
|
353
|
+
| LOG-001 | Structured Logging | Info | Logging | Recommend JSON logger format |
|
|
354
|
+
| LOG-004 | Sensitive Data Logging | Error | Logging | Detect PII/secrets in log statements |
|
|
355
|
+
| ERR-001 | Try Scope | Info | Error Handling | Complex operations should use Try scope |
|
|
356
|
+
| PERF-002 | Connection Pooling | Warning | Performance | DB/HTTP should configure connection pools |
|
|
345
357
|
|
|
346
358
|
### Operations & Resilience Rules
|
|
347
359
|
|
|
348
|
-
| ID
|
|
349
|
-
|
|
350
|
-
| RES-001 | Reconnection Strategy
|
|
351
|
-
| OPS-001 | Auto-Discovery
|
|
352
|
-
| OPS-002 | HTTP Port Placeholder
|
|
353
|
-
| OPS-003 | Externalized Cron
|
|
354
|
-
| SEC-006 | Encryption Key in Logs | Error
|
|
355
|
-
| HYG-001 | Excessive Loggers
|
|
356
|
-
| HYG-002 | Commented Code
|
|
357
|
-
| HYG-003 | Unused Flow
|
|
358
|
-
| API-005 | APIKit Validation
|
|
359
|
-
| DOC-001 | Display Name
|
|
360
|
+
| ID | Name | Severity | Category | Description |
|
|
361
|
+
| ------- | ---------------------- | -------- | ------------- | ---------------------------------------------------- |
|
|
362
|
+
| RES-001 | Reconnection Strategy | Warning | Performance | Connectors should have reconnection strategies |
|
|
363
|
+
| OPS-001 | Auto-Discovery | Info | Standards | APIs should have auto-discovery for API Manager |
|
|
364
|
+
| OPS-002 | HTTP Port Placeholder | Warning | Standards | HTTP ports should use property placeholders |
|
|
365
|
+
| OPS-003 | Externalized Cron | Warning | Standards | Cron expressions should use placeholders |
|
|
366
|
+
| SEC-006 | Encryption Key in Logs | Error | Security | Detect sensitive data in log messages |
|
|
367
|
+
| HYG-001 | Excessive Loggers | Warning | Logging | Flows should not have too many loggers |
|
|
368
|
+
| HYG-002 | Commented Code | Info | Standards | Detect commented-out code blocks |
|
|
369
|
+
| HYG-003 | Unused Flow | Warning | Standards | Detect flows/sub-flows never referenced (cross-file) |
|
|
370
|
+
| API-005 | APIKit Validation | Info | Standards | APIs should use APIKit for interfaces |
|
|
371
|
+
| DOC-001 | Display Name | Info | Documentation | Key components should have meaningful names |
|
|
360
372
|
|
|
361
373
|
### Project Governance Rules
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
|
365
|
-
| PROJ-
|
|
374
|
+
|
|
375
|
+
| ID | Name | Severity | Category | Description |
|
|
376
|
+
| -------- | -------------- | -------- | --------- | ------------------------------------------ |
|
|
377
|
+
| PROJ-001 | POM Validation | Error | Structure | Validates pom.xml existence and plugins |
|
|
378
|
+
| PROJ-002 | Git Hygiene | Warning | Structure | Validates .gitignore existence and entries |
|
|
366
379
|
|
|
367
380
|
**Total: 56 rules** across 14 categories.
|
|
368
381
|
|
|
369
382
|
See [Rules Catalog](docs/best-practices/rules-catalog.md) for detailed documentation.
|
|
370
383
|
|
|
371
|
-
|
|
372
|
-
|
|
373
384
|
---
|
|
374
385
|
|
|
375
386
|
## Output Formats
|
|
@@ -466,7 +477,7 @@ Create a `.mulelintrc.json` file in your project root:
|
|
|
466
477
|
{
|
|
467
478
|
"rules": {
|
|
468
479
|
"MULE-001": { "enabled": true },
|
|
469
|
-
"MULE-002": {
|
|
480
|
+
"MULE-002": {
|
|
470
481
|
"enabled": true,
|
|
471
482
|
"options": {
|
|
472
483
|
"flowSuffix": "-flow",
|
|
@@ -474,7 +485,7 @@ Create a `.mulelintrc.json` file in your project root:
|
|
|
474
485
|
"excludePatterns": ["*-api-main"]
|
|
475
486
|
}
|
|
476
487
|
},
|
|
477
|
-
"MULE-006": {
|
|
488
|
+
"MULE-006": {
|
|
478
489
|
"enabled": true,
|
|
479
490
|
"severity": "error",
|
|
480
491
|
"options": {
|
|
@@ -499,10 +510,10 @@ import { LintEngine, ALL_RULES, formatSarif } from '@sfdxy/mule-lint';
|
|
|
499
510
|
|
|
500
511
|
// Create engine with all rules
|
|
501
512
|
const engine = new LintEngine({
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
513
|
+
rules: ALL_RULES,
|
|
514
|
+
config: {
|
|
515
|
+
include: ['src/main/mule/**/*.xml'],
|
|
516
|
+
},
|
|
506
517
|
});
|
|
507
518
|
|
|
508
519
|
// Scan a project
|
|
@@ -520,6 +531,7 @@ const issues = engine.scanContent(xmlContent, 'file.xml');
|
|
|
520
531
|
This tool exposes a **Model Context Protocol (MCP)** server, allowing AI agents (like Claude Desktop, IDE assistants) to directly interact with the linter to discover rules, scan projects, and explain violations.
|
|
521
532
|
|
|
522
533
|
### Features
|
|
534
|
+
|
|
523
535
|
- **Tools**: `run_lint_analysis` (scan project), `get_rule_details` (explain rule), `validate_snippet` (check XML/DWL).
|
|
524
536
|
- **Resources**: `mule-lint://rules` (list all available rules), `mule-lint://docs/{slug}` (best practices documentation).
|
|
525
537
|
- **Prompts**: `analyze-project`, `explain-rule`, `fix-issue`.
|
|
@@ -568,17 +580,17 @@ See [Extending Guide](docs/linter/extending.md) for detailed instructions on cre
|
|
|
568
580
|
import { BaseRule, ValidationContext, Issue } from '@sfdxy/mule-lint';
|
|
569
581
|
|
|
570
582
|
export class MyCustomRule extends BaseRule {
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
583
|
+
id = 'CUSTOM-001';
|
|
584
|
+
name = 'My Custom Rule';
|
|
585
|
+
description = 'Enforces my organization standards';
|
|
586
|
+
severity = 'warning' as const;
|
|
587
|
+
category = 'standards' as const;
|
|
588
|
+
|
|
589
|
+
validate(doc: Document, context: ValidationContext): Issue[] {
|
|
590
|
+
// Your validation logic using XPath
|
|
591
|
+
const flows = this.select('//mule:flow', doc);
|
|
592
|
+
// ...
|
|
593
|
+
}
|
|
582
594
|
}
|
|
583
595
|
```
|
|
584
596
|
|
|
@@ -591,6 +603,7 @@ This project is inspired by and builds upon the ideas from:
|
|
|
591
603
|
- **[mule-lint/mule-lint](https://github.com/mule-lint/mule-lint)** - The original Groovy-based MuleSoft linting tool with DSL-based rule definitions
|
|
592
604
|
|
|
593
605
|
While the original project uses Groovy and a custom DSL, this TypeScript implementation was created to:
|
|
606
|
+
|
|
594
607
|
- Enable easier VS Code extension integration
|
|
595
608
|
- Provide better AI agent compatibility via SARIF output
|
|
596
609
|
- Leverage the modern npm ecosystem
|
|
@@ -600,13 +613,13 @@ While the original project uses Groovy and a custom DSL, this TypeScript impleme
|
|
|
600
613
|
|
|
601
614
|
## Documentation
|
|
602
615
|
|
|
603
|
-
| Document
|
|
604
|
-
|
|
605
|
-
| [Architecture](docs/linter/architecture.md)
|
|
606
|
-
| [Rules Catalog](docs/best-practices/rules-catalog.md)
|
|
616
|
+
| Document | Description |
|
|
617
|
+
| ---------------------------------------------------------------- | ------------------------------- |
|
|
618
|
+
| [Architecture](docs/linter/architecture.md) | System design and data flow |
|
|
619
|
+
| [Rules Catalog](docs/best-practices/rules-catalog.md) | Complete list of all rules |
|
|
607
620
|
| [Best Practices](docs/best-practices/mulesoft-best-practices.md) | MuleSoft development guidelines |
|
|
608
|
-
| [Extending](docs/linter/extending.md)
|
|
609
|
-
| [Naming Conventions](docs/linter/naming-conventions.md)
|
|
621
|
+
| [Extending](docs/linter/extending.md) | How to add custom rules |
|
|
622
|
+
| [Naming Conventions](docs/linter/naming-conventions.md) | Code style guide |
|
|
610
623
|
|
|
611
624
|
---
|
|
612
625
|
|
|
@@ -651,4 +664,4 @@ Contributions are welcome! Please read the [Contributing Guide](CONTRIBUTING.md)
|
|
|
651
664
|
|
|
652
665
|
## License
|
|
653
666
|
|
|
654
|
-
MIT © 2024
|
|
667
|
+
MIT © 2024
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mule-lint-mcp.js","sourceRoot":"","sources":["../../bin/mule-lint-mcp.ts"],"names":[],"mappings":";;;AACA,oCAA+C;AAE/C,KAAK,UAAU,IAAI;
|
|
1
|
+
{"version":3,"file":"mule-lint-mcp.js","sourceRoot":"","sources":["../../bin/mule-lint-mcp.ts"],"names":[],"mappings":";;;AACA,oCAA+C;AAE/C,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,IAAI,uBAAiB,EAAE,CAAC;IACvC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;IACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/bin/mule-lint.js
CHANGED
|
@@ -118,7 +118,7 @@ async function runLint(targetPath, options) {
|
|
|
118
118
|
// Filter rules based on keys (experimental is opt-in)
|
|
119
119
|
const effectiveRules = options.experimental
|
|
120
120
|
? rules_1.ALL_RULES
|
|
121
|
-
: rules_1.ALL_RULES.filter(rule => rule.category !== 'experimental');
|
|
121
|
+
: rules_1.ALL_RULES.filter((rule) => rule.category !== 'experimental');
|
|
122
122
|
if (options.verbose) {
|
|
123
123
|
console.log(`Loaded ${effectiveRules.length} rules (Experimental: ${options.experimental ? 'ON' : 'OFF'})`);
|
|
124
124
|
}
|
|
@@ -133,7 +133,7 @@ async function runLint(targetPath, options) {
|
|
|
133
133
|
// Filter if quiet mode
|
|
134
134
|
if (options.quiet) {
|
|
135
135
|
for (const file of report.files) {
|
|
136
|
-
file.issues = file.issues.filter(issue => issue.severity === 'error');
|
|
136
|
+
file.issues = file.issues.filter((issue) => issue.severity === 'error');
|
|
137
137
|
}
|
|
138
138
|
report.summary.bySeverity.warning = 0;
|
|
139
139
|
report.summary.bySeverity.info = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mule-lint.js","sourceRoot":"","sources":["../../bin/mule-lint.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAoC;AACpC,uCAAyB;AACzB,2CAA6B;AAC7B,yDAAsD;AACtD,wCAAyC;AACzC,kDAAwD;AAExD,2EAI0C;AAC1C,0DAAkG;AAElG,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAEtE,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;
|
|
1
|
+
{"version":3,"file":"mule-lint.js","sourceRoot":"","sources":["../../bin/mule-lint.ts"],"names":[],"mappings":"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"}
|