@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.
Files changed (250) hide show
  1. package/README.md +164 -151
  2. package/dist/bin/mule-lint-mcp.js.map +1 -1
  3. package/dist/bin/mule-lint.js +2 -2
  4. package/dist/bin/mule-lint.js.map +1 -1
  5. package/dist/package.json +26 -15
  6. package/dist/src/core/ComplexityCalculator.d.ts.map +1 -1
  7. package/dist/src/core/ComplexityCalculator.js.map +1 -1
  8. package/dist/src/core/FileScanner.d.ts.map +1 -1
  9. package/dist/src/core/FileScanner.js.map +1 -1
  10. package/dist/src/core/MetricsAggregator.d.ts.map +1 -1
  11. package/dist/src/core/MetricsAggregator.js +1 -1
  12. package/dist/src/core/MetricsAggregator.js.map +1 -1
  13. package/dist/src/core/MetricsCollector.d.ts.map +1 -1
  14. package/dist/src/core/MetricsCollector.js +1 -2
  15. package/dist/src/core/MetricsCollector.js.map +1 -1
  16. package/dist/src/core/QualityGateEvaluator.d.ts.map +1 -1
  17. package/dist/src/core/QualityGateEvaluator.js.map +1 -1
  18. package/dist/src/core/XPathHelper.d.ts.map +1 -1
  19. package/dist/src/core/XPathHelper.js +0 -1
  20. package/dist/src/core/XPathHelper.js.map +1 -1
  21. package/dist/src/core/XmlParser.d.ts.map +1 -1
  22. package/dist/src/core/XmlParser.js.map +1 -1
  23. package/dist/src/core/YamlParser.d.ts.map +1 -1
  24. package/dist/src/core/YamlParser.js.map +1 -1
  25. package/dist/src/core/errors.js.map +1 -1
  26. package/dist/src/engine/LintEngine.d.ts +10 -0
  27. package/dist/src/engine/LintEngine.d.ts.map +1 -1
  28. package/dist/src/engine/LintEngine.js +68 -4
  29. package/dist/src/engine/LintEngine.js.map +1 -1
  30. package/dist/src/formatter/MuleXmlFormatter.d.ts.map +1 -1
  31. package/dist/src/formatter/MuleXmlFormatter.js +7 -1
  32. package/dist/src/formatter/MuleXmlFormatter.js.map +1 -1
  33. package/dist/src/formatter/index.d.ts +2 -2
  34. package/dist/src/formatter/index.d.ts.map +1 -1
  35. package/dist/src/formatter/index.js.map +1 -1
  36. package/dist/src/formatters/CsvFormatter.js.map +1 -1
  37. package/dist/src/formatters/HtmlFormatter.js +0 -1
  38. package/dist/src/formatters/HtmlFormatter.js.map +1 -1
  39. package/dist/src/formatters/JsonFormatter.d.ts.map +1 -1
  40. package/dist/src/formatters/JsonFormatter.js.map +1 -1
  41. package/dist/src/formatters/SarifFormatter.js.map +1 -1
  42. package/dist/src/formatters/TableFormatter.js.map +1 -1
  43. package/dist/src/formatters/html/components/Icons.js +1 -1
  44. package/dist/src/formatters/html/components/Icons.js.map +1 -1
  45. package/dist/src/formatters/html/components/MetricCard.d.ts.map +1 -1
  46. package/dist/src/formatters/html/components/MetricCard.js.map +1 -1
  47. package/dist/src/formatters/html/components/Modal.d.ts.map +1 -1
  48. package/dist/src/formatters/html/components/Modal.js.map +1 -1
  49. package/dist/src/formatters/html/components/RatingBadge.d.ts.map +1 -1
  50. package/dist/src/formatters/html/components/RatingBadge.js +6 -6
  51. package/dist/src/formatters/html/components/RatingBadge.js.map +1 -1
  52. package/dist/src/formatters/html/index.d.ts +2 -2
  53. package/dist/src/formatters/html/index.d.ts.map +1 -1
  54. package/dist/src/formatters/html/index.js.map +1 -1
  55. package/dist/src/formatters/html/scripts/charts.d.ts.map +1 -1
  56. package/dist/src/formatters/html/scripts/charts.js +45 -12
  57. package/dist/src/formatters/html/scripts/charts.js.map +1 -1
  58. package/dist/src/formatters/html/scripts/index.d.ts.map +1 -1
  59. package/dist/src/formatters/html/scripts/index.js.map +1 -1
  60. package/dist/src/formatters/html/scripts/renderer.d.ts.map +1 -1
  61. package/dist/src/formatters/html/scripts/renderer.js +175 -35
  62. package/dist/src/formatters/html/scripts/renderer.js.map +1 -1
  63. package/dist/src/formatters/html/sections/Header.d.ts.map +1 -1
  64. package/dist/src/formatters/html/sections/Header.js.map +1 -1
  65. package/dist/src/formatters/html/sections/LintSummary.d.ts.map +1 -1
  66. package/dist/src/formatters/html/sections/LintSummary.js.map +1 -1
  67. package/dist/src/formatters/html/sections/QualityRatings.js.map +1 -1
  68. package/dist/src/formatters/html/sections/Sidebar.d.ts.map +1 -1
  69. package/dist/src/formatters/html/sections/Sidebar.js.map +1 -1
  70. package/dist/src/formatters/html/styles/badges.d.ts.map +1 -1
  71. package/dist/src/formatters/html/styles/badges.js.map +1 -1
  72. package/dist/src/formatters/html/styles/index.d.ts.map +1 -1
  73. package/dist/src/formatters/html/styles/index.js.map +1 -1
  74. package/dist/src/formatters/html/theme.js.map +1 -1
  75. package/dist/src/formatters/html/views/Dashboard.js +5 -5
  76. package/dist/src/formatters/html/views/Dashboard.js.map +1 -1
  77. package/dist/src/formatters/html/views/IssuesView.d.ts.map +1 -1
  78. package/dist/src/formatters/html/views/IssuesView.js.map +1 -1
  79. package/dist/src/formatters/index.js.map +1 -1
  80. package/dist/src/mcp/index.d.ts.map +1 -1
  81. package/dist/src/mcp/index.js +0 -1
  82. package/dist/src/mcp/index.js.map +1 -1
  83. package/dist/src/mcp/prompts/index.js.map +1 -1
  84. package/dist/src/mcp/resources/index.js +30 -7
  85. package/dist/src/mcp/resources/index.js.map +1 -1
  86. package/dist/src/mcp/tools/formatMuleXml.d.ts.map +1 -1
  87. package/dist/src/mcp/tools/formatMuleXml.js +4 -13
  88. package/dist/src/mcp/tools/formatMuleXml.js.map +1 -1
  89. package/dist/src/mcp/tools/getRuleDetails.d.ts.map +1 -1
  90. package/dist/src/mcp/tools/getRuleDetails.js +1 -3
  91. package/dist/src/mcp/tools/getRuleDetails.js.map +1 -1
  92. package/dist/src/mcp/tools/runLintAnalysis.js +9 -9
  93. package/dist/src/mcp/tools/runLintAnalysis.js.map +1 -1
  94. package/dist/src/mcp/tools/validateSnippet.d.ts.map +1 -1
  95. package/dist/src/mcp/tools/validateSnippet.js.map +1 -1
  96. package/dist/src/quality/calculator.d.ts.map +1 -1
  97. package/dist/src/quality/calculator.js +1 -1
  98. package/dist/src/quality/calculator.js.map +1 -1
  99. package/dist/src/quality/index.d.ts.map +1 -1
  100. package/dist/src/quality/index.js.map +1 -1
  101. package/dist/src/quality/thresholds.js.map +1 -1
  102. package/dist/src/quality/types.d.ts.map +1 -1
  103. package/dist/src/rules/api-led/ApiLedRules.d.ts.map +1 -1
  104. package/dist/src/rules/api-led/ApiLedRules.js +6 -2
  105. package/dist/src/rules/api-led/ApiLedRules.js.map +1 -1
  106. package/dist/src/rules/api-led/SingleSystemSapiRule.d.ts.map +1 -1
  107. package/dist/src/rules/api-led/SingleSystemSapiRule.js.map +1 -1
  108. package/dist/src/rules/base/BaseRule.d.ts.map +1 -1
  109. package/dist/src/rules/base/BaseRule.js.map +1 -1
  110. package/dist/src/rules/base/ProjectRule.d.ts.map +1 -1
  111. package/dist/src/rules/base/ProjectRule.js.map +1 -1
  112. package/dist/src/rules/complexity/FlowComplexityRule.d.ts.map +1 -1
  113. package/dist/src/rules/complexity/FlowComplexityRule.js.map +1 -1
  114. package/dist/src/rules/dataweave/DataWeaveRules.d.ts +6 -0
  115. package/dist/src/rules/dataweave/DataWeaveRules.d.ts.map +1 -1
  116. package/dist/src/rules/dataweave/DataWeaveRules.js +17 -3
  117. package/dist/src/rules/dataweave/DataWeaveRules.js.map +1 -1
  118. package/dist/src/rules/dataweave/Java17DWErrorHandlingRule.d.ts.map +1 -1
  119. package/dist/src/rules/dataweave/Java17DWErrorHandlingRule.js.map +1 -1
  120. package/dist/src/rules/documentation/DisplayNameRule.d.ts.map +1 -1
  121. package/dist/src/rules/documentation/DisplayNameRule.js.map +1 -1
  122. package/dist/src/rules/documentation/FlowDescriptionRule.d.ts.map +1 -1
  123. package/dist/src/rules/documentation/FlowDescriptionRule.js.map +1 -1
  124. package/dist/src/rules/documentation/MissingDocNameRule.d.ts.map +1 -1
  125. package/dist/src/rules/documentation/MissingDocNameRule.js.map +1 -1
  126. package/dist/src/rules/error-handling/CorrelationIdRule.d.ts +22 -1
  127. package/dist/src/rules/error-handling/CorrelationIdRule.d.ts.map +1 -1
  128. package/dist/src/rules/error-handling/CorrelationIdRule.js +107 -6
  129. package/dist/src/rules/error-handling/CorrelationIdRule.js.map +1 -1
  130. package/dist/src/rules/error-handling/GenericErrorRule.d.ts.map +1 -1
  131. package/dist/src/rules/error-handling/GenericErrorRule.js.map +1 -1
  132. package/dist/src/rules/error-handling/GlobalErrorHandlerRule.d.ts +14 -2
  133. package/dist/src/rules/error-handling/GlobalErrorHandlerRule.d.ts.map +1 -1
  134. package/dist/src/rules/error-handling/GlobalErrorHandlerRule.js +40 -18
  135. package/dist/src/rules/error-handling/GlobalErrorHandlerRule.js.map +1 -1
  136. package/dist/src/rules/error-handling/HttpStatusRule.d.ts +5 -0
  137. package/dist/src/rules/error-handling/HttpStatusRule.d.ts.map +1 -1
  138. package/dist/src/rules/error-handling/HttpStatusRule.js +15 -0
  139. package/dist/src/rules/error-handling/HttpStatusRule.js.map +1 -1
  140. package/dist/src/rules/error-handling/MissingErrorHandlerRule.d.ts.map +1 -1
  141. package/dist/src/rules/error-handling/MissingErrorHandlerRule.js.map +1 -1
  142. package/dist/src/rules/error-handling/TryScopeRule.d.ts.map +1 -1
  143. package/dist/src/rules/error-handling/TryScopeRule.js.map +1 -1
  144. package/dist/src/rules/experimental/ExperimentalRules.d.ts.map +1 -1
  145. package/dist/src/rules/experimental/ExperimentalRules.js +6 -2
  146. package/dist/src/rules/experimental/ExperimentalRules.js.map +1 -1
  147. package/dist/src/rules/governance/GovernanceRules.d.ts.map +1 -1
  148. package/dist/src/rules/governance/GovernanceRules.js.map +1 -1
  149. package/dist/src/rules/http/HttpContentTypeRule.d.ts +28 -1
  150. package/dist/src/rules/http/HttpContentTypeRule.d.ts.map +1 -1
  151. package/dist/src/rules/http/HttpContentTypeRule.js +68 -7
  152. package/dist/src/rules/http/HttpContentTypeRule.js.map +1 -1
  153. package/dist/src/rules/http/HttpTimeoutRule.d.ts.map +1 -1
  154. package/dist/src/rules/http/HttpTimeoutRule.js.map +1 -1
  155. package/dist/src/rules/http/HttpUserAgentRule.d.ts.map +1 -1
  156. package/dist/src/rules/http/HttpUserAgentRule.js.map +1 -1
  157. package/dist/src/rules/index.js.map +1 -1
  158. package/dist/src/rules/logging/ExcessiveLoggersRule.d.ts.map +1 -1
  159. package/dist/src/rules/logging/ExcessiveLoggersRule.js.map +1 -1
  160. package/dist/src/rules/logging/LoggerCategoryRule.d.ts.map +1 -1
  161. package/dist/src/rules/logging/LoggerCategoryRule.js.map +1 -1
  162. package/dist/src/rules/logging/LoggerInUntilSuccessfulRule.d.ts.map +1 -1
  163. package/dist/src/rules/logging/LoggerInUntilSuccessfulRule.js.map +1 -1
  164. package/dist/src/rules/logging/LoggerPayloadRule.d.ts.map +1 -1
  165. package/dist/src/rules/logging/LoggerPayloadRule.js.map +1 -1
  166. package/dist/src/rules/logging/NewLoggingRules.d.ts.map +1 -1
  167. package/dist/src/rules/logging/NewLoggingRules.js.map +1 -1
  168. package/dist/src/rules/naming/FlowCasingRule.d.ts.map +1 -1
  169. package/dist/src/rules/naming/FlowCasingRule.js.map +1 -1
  170. package/dist/src/rules/naming/FlowNamingRule.d.ts.map +1 -1
  171. package/dist/src/rules/naming/FlowNamingRule.js +3 -1
  172. package/dist/src/rules/naming/FlowNamingRule.js.map +1 -1
  173. package/dist/src/rules/naming/VariableNamingRule.d.ts.map +1 -1
  174. package/dist/src/rules/naming/VariableNamingRule.js.map +1 -1
  175. package/dist/src/rules/operations/CommentedCodeRule.d.ts.map +1 -1
  176. package/dist/src/rules/operations/CommentedCodeRule.js.map +1 -1
  177. package/dist/src/rules/operations/UnusedFlowRule.d.ts +6 -1
  178. package/dist/src/rules/operations/UnusedFlowRule.d.ts.map +1 -1
  179. package/dist/src/rules/operations/UnusedFlowRule.js +23 -9
  180. package/dist/src/rules/operations/UnusedFlowRule.js.map +1 -1
  181. package/dist/src/rules/performance/AsyncErrorHandlerRule.d.ts.map +1 -1
  182. package/dist/src/rules/performance/AsyncErrorHandlerRule.js.map +1 -1
  183. package/dist/src/rules/performance/ConnectionPoolingRule.d.ts +5 -0
  184. package/dist/src/rules/performance/ConnectionPoolingRule.d.ts.map +1 -1
  185. package/dist/src/rules/performance/ConnectionPoolingRule.js +18 -5
  186. package/dist/src/rules/performance/ConnectionPoolingRule.js.map +1 -1
  187. package/dist/src/rules/performance/LargeChoiceBlockRule.d.ts.map +1 -1
  188. package/dist/src/rules/performance/LargeChoiceBlockRule.js.map +1 -1
  189. package/dist/src/rules/performance/ReconnectionStrategyRule.d.ts +7 -0
  190. package/dist/src/rules/performance/ReconnectionStrategyRule.d.ts.map +1 -1
  191. package/dist/src/rules/performance/ReconnectionStrategyRule.js +15 -2
  192. package/dist/src/rules/performance/ReconnectionStrategyRule.js.map +1 -1
  193. package/dist/src/rules/performance/ScatterGatherRoutesRule.d.ts.map +1 -1
  194. package/dist/src/rules/performance/ScatterGatherRoutesRule.js.map +1 -1
  195. package/dist/src/rules/security/EncryptionKeyInLogsRule.d.ts.map +1 -1
  196. package/dist/src/rules/security/EncryptionKeyInLogsRule.js.map +1 -1
  197. package/dist/src/rules/security/HardcodedCredentialsRule.d.ts.map +1 -1
  198. package/dist/src/rules/security/HardcodedCredentialsRule.js.map +1 -1
  199. package/dist/src/rules/security/HardcodedHttpRule.d.ts.map +1 -1
  200. package/dist/src/rules/security/HardcodedHttpRule.js +1 -9
  201. package/dist/src/rules/security/HardcodedHttpRule.js.map +1 -1
  202. package/dist/src/rules/security/InputValidationRule.d.ts.map +1 -1
  203. package/dist/src/rules/security/InputValidationRule.js +1 -3
  204. package/dist/src/rules/security/InputValidationRule.js.map +1 -1
  205. package/dist/src/rules/security/InsecureTlsRule.d.ts.map +1 -1
  206. package/dist/src/rules/security/InsecureTlsRule.js.map +1 -1
  207. package/dist/src/rules/security/RateLimitingRule.d.ts.map +1 -1
  208. package/dist/src/rules/security/RateLimitingRule.js.map +1 -1
  209. package/dist/src/rules/security/TlsVersionRule.d.ts.map +1 -1
  210. package/dist/src/rules/security/TlsVersionRule.js.map +1 -1
  211. package/dist/src/rules/standards/ApiKitValidationRule.d.ts.map +1 -1
  212. package/dist/src/rules/standards/ApiKitValidationRule.js.map +1 -1
  213. package/dist/src/rules/standards/AutoDiscoveryRule.d.ts.map +1 -1
  214. package/dist/src/rules/standards/AutoDiscoveryRule.js.map +1 -1
  215. package/dist/src/rules/standards/ChoiceAntiPatternRule.d.ts.map +1 -1
  216. package/dist/src/rules/standards/ChoiceAntiPatternRule.js.map +1 -1
  217. package/dist/src/rules/standards/CronExternalizedRule.d.ts.map +1 -1
  218. package/dist/src/rules/standards/CronExternalizedRule.js.map +1 -1
  219. package/dist/src/rules/standards/DeprecatedComponentRule.d.ts.map +1 -1
  220. package/dist/src/rules/standards/DeprecatedComponentRule.js.map +1 -1
  221. package/dist/src/rules/standards/DwlStandardsRule.d.ts.map +1 -1
  222. package/dist/src/rules/standards/DwlStandardsRule.js.map +1 -1
  223. package/dist/src/rules/standards/HttpPortPlaceholderRule.d.ts.map +1 -1
  224. package/dist/src/rules/standards/HttpPortPlaceholderRule.js.map +1 -1
  225. package/dist/src/rules/structure/StructureRules.d.ts +8 -1
  226. package/dist/src/rules/structure/StructureRules.d.ts.map +1 -1
  227. package/dist/src/rules/structure/StructureRules.js +11 -7
  228. package/dist/src/rules/structure/StructureRules.js.map +1 -1
  229. package/dist/src/rules/yaml/YamlRules.d.ts.map +1 -1
  230. package/dist/src/rules/yaml/YamlRules.js +2 -7
  231. package/dist/src/rules/yaml/YamlRules.js.map +1 -1
  232. package/dist/src/types/Config.d.ts.map +1 -1
  233. package/dist/src/types/Config.js.map +1 -1
  234. package/dist/src/types/QualityGate.d.ts.map +1 -1
  235. package/dist/src/types/QualityGate.js.map +1 -1
  236. package/dist/src/types/Report.d.ts.map +1 -1
  237. package/dist/src/types/Rule.d.ts +22 -0
  238. package/dist/src/types/Rule.d.ts.map +1 -1
  239. package/docs/README.md +27 -27
  240. package/docs/best-practices/documentation-standards.md +20 -11
  241. package/docs/best-practices/folder-structure.md +16 -10
  242. package/docs/best-practices/mulesoft-best-practices.md +96 -94
  243. package/docs/best-practices/rules-catalog.md +422 -299
  244. package/docs/linter/architecture.md +70 -64
  245. package/docs/linter/extending.md +137 -128
  246. package/docs/linter/folder-structure.md +39 -38
  247. package/docs/linter/naming-conventions.md +80 -78
  248. package/docs/linter/rule-engine.md +306 -306
  249. package/docs/mcp-design.md +35 -21
  250. package/package.json +84 -73
package/README.md CHANGED
@@ -1,4 +1,13 @@
1
- # Mule-Lint
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 | Description |
122
- |--------|-------------|
123
- | `-f, --format <type>` | Output format: `table`, `json`, `sarif`, `html`, `csv` (default: `table`) |
124
- | `-o, --output <file>` | Write output to file instead of stdout |
125
- | `-c, --config <file>` | Path to configuration file |
126
- | `-q, --quiet` | Show only errors (suppress warnings and info) |
127
- | `-e, --experimental` | **Enable experimental rules (opt-in)** |
128
- | `-g, --quality-gate <name>` | Apply quality gate: `default`, `strict`, or `config` |
129
- | `--fail-on-warning` | Exit with error code if warnings found |
130
- | `-v, --verbose` | Show verbose output |
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 | Description |
141
- |------|-------------|
148
+ | Gate | Description |
149
+ | --------- | ----------------------------------------------------------------------------- |
142
150
  | `default` | Fails if errors > 0, warnings > 10, complexity > 20, or security hotspots > 0 |
143
- | `strict` | Fails if any errors, warnings > 0, or complexity > 10 |
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** | Avg ≤ 5 | Simple, easy to test |
191
- | **B** | Avg ≤ 10 | Moderate complexity |
192
- | **C** | Avg ≤ 15 | Complex, consider splitting |
193
- | **D** | Avg ≤ 20 | High complexity, refactor recommended |
194
- | **E** | Avg > 20 | Very complex, critical refactoring needed |
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** | ≤ 5% | Excellent maintainability |
208
- | **B** | ≤ 10% | Good maintainability |
209
- | **C** | ≤ 20% | Moderate technical debt |
210
- | **D** | ≤ 50% | High debt, plan remediation |
211
- | **E** | > 50% | Critical debt, immediate action needed |
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** | 0 bugs | No reliability issues |
228
- | **B** | 1-2 bugs | Minor reliability concerns |
229
- | **C** | 3-5 bugs | Moderate reliability risk |
230
- | **D** | 6-10 bugs | High reliability risk |
231
- | **E** | > 10 bugs | Critical reliability issues |
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** | 0 vulns | Secure configuration |
249
- | **B** | 1 vuln | Minor security finding |
250
- | **C** | 2-3 vulns | Security review needed |
251
- | **D** | 4-5 vulns | Security remediation required |
252
- | **E** | > 5 vulns | Critical security issues |
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 | Name | Severity | Category | Description |
274
- |----|------|----------|----------|-------------|
275
- | MULE-001 | Global Error Handler | Error | Error Handling | Project should have global error handler |
276
- | MULE-002 | Flow Naming | Warning | Naming | Flows end with `-flow`, sub-flows with `-subflow` |
277
- | MULE-003 | Missing Error Handler | Error | Error Handling | Flows should have error handlers |
278
- | MULE-004 | Hardcoded URLs | Error | Security | Use property placeholders for URLs |
279
- | MULE-005 | HTTP Status Check | Warning | Error Handling | Error handlers should set httpStatus |
280
- | MULE-006 | Logger Category | Warning | Logging | Loggers should have category attribute |
281
- | MULE-007 | Correlation ID | Warning | Error Handling | Error handlers should reference correlationId |
282
- | MULE-008 | Choice Anti-Pattern | Warning | Standards | Avoid raise-error in otherwise |
283
- | MULE-009 | Generic Error Type | Warning | Error Handling | Avoid catching type="ANY" |
284
- | MULE-010 | DWL Standards | Info | Standards | Standard DataWeave files should exist |
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 | Name | Severity | Category | Description |
289
- |----|------|----------|----------|-------------|
290
- | MULE-101 | Flow Casing | Warning | Naming | kebab-case for flows |
291
- | MULE-102 | Variable Naming | Warning | Naming | camelCase for variables |
292
- | MULE-201 | Hardcoded Credentials | Error | Security | Use `${secure::}` |
293
- | MULE-202 | Insecure TLS | Error | Security | No insecure="true" |
294
- | MULE-301 | Logger Payload | Warning | Logging | Don't log entire payload |
295
- | MULE-303 | Logger in Retry | Warning | Logging | Avoid loggers in until-successful |
296
- | MULE-401 | HTTP User-Agent | Warning | HTTP | Include User-Agent |
297
- | MULE-402 | HTTP Content-Type | Warning | HTTP | POST/PUT needs Content-Type |
298
- | MULE-403 | HTTP Timeout | Warning | HTTP | Set responseTimeout |
299
- | MULE-501 | Scatter-Gather | Info | Performance | Limit parallel routes |
300
- | MULE-502 | Async Error | Warning | Performance | Async needs error handling |
301
- | MULE-503 | Large Choice | Warning | Performance | Max 7 when clauses |
302
- | MULE-601 | Flow Description | Info | Documentation | Add doc:description |
303
- | MULE-604 | Missing doc:name | Warning | Documentation | Key components need doc:name |
304
- | MULE-701 | Deprecated | Warning | Standards | Detect deprecated elements |
305
- | MULE-801 | Flow Complexity | Warning | Complexity | Cyclomatic complexity threshold |
306
- | MULE-802 | Project Structure | Warning | Structure | Validate folder structure |
307
- | MULE-803 | Global Config | Warning | Structure | global.xml should exist |
308
- | MULE-804 | Monolithic XML | Warning | Structure | Split large XML files |
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 | Name | Severity | Category | Description |
313
- |----|------|----------|----------|-------------|
314
- | DW-001 | External DWL | Warning | DataWeave | Externalize complex transforms |
315
- | DW-002 | DWL Naming | Info | DataWeave | kebab-case for .dwl files |
316
- | DW-003 | DWL Modules | Info | DataWeave | Use common modules |
317
- | DW-004 | Java 17 DW Errors | Error | DataWeave | Java 17 compatible error handling |
318
- | API-001 | Experience Layer | Info | API-Led | Experience API patterns |
319
- | API-002 | Process Layer | Info | API-Led | Process layer orchestration |
320
- | API-003 | System Layer | Info | API-Led | System layer connections |
321
- | API-004 | Single SAPI | Warning | API-Led | Single system per 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 | Name | Severity | Category | Description |
326
- |----|------|----------|----------|-------------|
327
- | EXP-001 | Flow Ref Depth | Info | Experimental | Limit flow-ref chains |
328
- | EXP-002 | Config Naming | Info | Experimental | Connector config naming |
329
- | EXP-003 | MUnit Coverage | Info | Experimental | Check for MUnit tests |
330
- | YAML-001 | Env Files | Warning | Standards | Environment YAML files |
331
- | YAML-003 | Property Naming | Info | Standards | Property key format |
332
- | YAML-004 | Plaintext Secrets | Error | Security | Encrypt sensitive YAML properties |
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 | Name | Severity | Category | Description |
337
- |----|------|----------|----------|-------------|
338
- | SEC-002 | TLS Version | Error | Security | Detect deprecated TLS versions (< 1.2) |
339
- | SEC-003 | Rate Limiting | Warning | Security | APIs should have rate limiting configured |
340
- | SEC-004 | Input Validation | Warning | Security | Incoming payloads should be validated |
341
- | LOG-001 | Structured Logging | Info | Logging | Recommend JSON logger format |
342
- | LOG-004 | Sensitive Data Logging | Error | Logging | Detect PII/secrets in log statements |
343
- | ERR-001 | Try Scope | Info | Error Handling | Complex operations should use Try scope |
344
- | PERF-002 | Connection Pooling | Warning | Performance | DB/HTTP should configure connection pools |
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 | Name | Severity | Category | Description |
349
- |----|------|----------|----------|-------------|
350
- | RES-001 | Reconnection Strategy | Warning | Performance | Connectors should have reconnection strategies |
351
- | OPS-001 | Auto-Discovery | Info | Standards | APIs should have auto-discovery for API Manager |
352
- | OPS-002 | HTTP Port Placeholder | Warning | Standards | HTTP ports should use property placeholders |
353
- | OPS-003 | Externalized Cron | Warning | Standards | Cron expressions should use placeholders |
354
- | SEC-006 | Encryption Key in Logs | Error | Security | Detect sensitive data in log messages |
355
- | HYG-001 | Excessive Loggers | Warning | Logging | Flows should not have too many loggers |
356
- | HYG-002 | Commented Code | Info | Standards | Detect commented-out code blocks |
357
- | HYG-003 | Unused Flow | Warning | Standards | Detect flows/sub-flows never referenced |
358
- | API-005 | APIKit Validation | Info | Standards | APIs should use APIKit for interfaces |
359
- | DOC-001 | Display Name | Info | Documentation | Key components should have meaningful names |
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
- | ID | Name | Severity | Category | Description |
363
- |----|------|----------|----------|-------------|
364
- | PROJ-001 | POM Validation | Error | Structure | Validates pom.xml existence and plugins |
365
- | PROJ-002 | Git Hygiene | Warning | Structure | Validates .gitignore existence and entries |
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
- rules: ALL_RULES,
503
- config: {
504
- include: ['src/main/mule/**/*.xml'],
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
- id = 'CUSTOM-001';
572
- name = 'My Custom Rule';
573
- description = 'Enforces my organization standards';
574
- severity = 'warning' as const;
575
- category = 'standards' as const;
576
-
577
- validate(doc: Document, context: ValidationContext): Issue[] {
578
- // Your validation logic using XPath
579
- const flows = this.select('//mule:flow', doc);
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 | Description |
604
- |----------|-------------|
605
- | [Architecture](docs/linter/architecture.md) | System design and data flow |
606
- | [Rules Catalog](docs/best-practices/rules-catalog.md) | Complete list of all rules |
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) | How to add custom rules |
609
- | [Naming Conventions](docs/linter/naming-conventions.md) | Code style guide |
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;IACf,MAAM,MAAM,GAAG,IAAI,uBAAiB,EAAE,CAAC;IACvC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;AACzB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;IACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
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"}
@@ -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":"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"}
1
+ {"version":3,"file":"mule-lint.js","sourceRoot":"","sources":["../../bin/mule-lint.ts"],"names":[],"mappings":"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"}