@sfdxy/mule-lint 1.16.2 → 1.16.3

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 (49) hide show
  1. package/dist/package.json +1 -1
  2. package/dist/src/rules/documentation/DisplayNameRule.d.ts +17 -0
  3. package/dist/src/rules/documentation/DisplayNameRule.d.ts.map +1 -0
  4. package/dist/src/rules/documentation/DisplayNameRule.js +46 -0
  5. package/dist/src/rules/documentation/DisplayNameRule.js.map +1 -0
  6. package/dist/src/rules/index.d.ts.map +1 -1
  7. package/dist/src/rules/index.js +21 -12
  8. package/dist/src/rules/index.js.map +1 -1
  9. package/dist/src/rules/logging/ExcessiveLoggersRule.d.ts +16 -0
  10. package/dist/src/rules/logging/ExcessiveLoggersRule.d.ts.map +1 -0
  11. package/dist/src/rules/logging/ExcessiveLoggersRule.js +45 -0
  12. package/dist/src/rules/logging/ExcessiveLoggersRule.js.map +1 -0
  13. package/dist/src/rules/operations/CommentedCodeRule.d.ts +17 -0
  14. package/dist/src/rules/operations/CommentedCodeRule.d.ts.map +1 -0
  15. package/dist/src/rules/operations/CommentedCodeRule.js +58 -0
  16. package/dist/src/rules/operations/CommentedCodeRule.js.map +1 -0
  17. package/dist/src/rules/operations/UnusedFlowRule.d.ts +17 -0
  18. package/dist/src/rules/operations/UnusedFlowRule.d.ts.map +1 -0
  19. package/dist/src/rules/operations/UnusedFlowRule.js +80 -0
  20. package/dist/src/rules/operations/UnusedFlowRule.js.map +1 -0
  21. package/dist/src/rules/performance/ReconnectionStrategyRule.d.ts +16 -0
  22. package/dist/src/rules/performance/ReconnectionStrategyRule.d.ts.map +1 -0
  23. package/dist/src/rules/performance/ReconnectionStrategyRule.js +60 -0
  24. package/dist/src/rules/performance/ReconnectionStrategyRule.js.map +1 -0
  25. package/dist/src/rules/security/EncryptionKeyInLogsRule.d.ts +17 -0
  26. package/dist/src/rules/security/EncryptionKeyInLogsRule.d.ts.map +1 -0
  27. package/dist/src/rules/security/EncryptionKeyInLogsRule.js +46 -0
  28. package/dist/src/rules/security/EncryptionKeyInLogsRule.js.map +1 -0
  29. package/dist/src/rules/standards/ApiKitValidationRule.d.ts +16 -0
  30. package/dist/src/rules/standards/ApiKitValidationRule.d.ts.map +1 -0
  31. package/dist/src/rules/standards/ApiKitValidationRule.js +39 -0
  32. package/dist/src/rules/standards/ApiKitValidationRule.js.map +1 -0
  33. package/dist/src/rules/standards/AutoDiscoveryRule.d.ts +16 -0
  34. package/dist/src/rules/standards/AutoDiscoveryRule.d.ts.map +1 -0
  35. package/dist/src/rules/standards/AutoDiscoveryRule.js +47 -0
  36. package/dist/src/rules/standards/AutoDiscoveryRule.js.map +1 -0
  37. package/dist/src/rules/standards/CronExternalizedRule.d.ts +16 -0
  38. package/dist/src/rules/standards/CronExternalizedRule.d.ts.map +1 -0
  39. package/dist/src/rules/standards/CronExternalizedRule.js +32 -0
  40. package/dist/src/rules/standards/CronExternalizedRule.js.map +1 -0
  41. package/dist/src/rules/standards/HttpPortPlaceholderRule.d.ts +16 -0
  42. package/dist/src/rules/standards/HttpPortPlaceholderRule.d.ts.map +1 -0
  43. package/dist/src/rules/standards/HttpPortPlaceholderRule.js +34 -0
  44. package/dist/src/rules/standards/HttpPortPlaceholderRule.js.map +1 -0
  45. package/package.json +1 -1
  46. package/dist/src/rules/operations/OperationsRules.d.ts +0 -137
  47. package/dist/src/rules/operations/OperationsRules.d.ts.map +0 -1
  48. package/dist/src/rules/operations/OperationsRules.js +0 -442
  49. package/dist/src/rules/operations/OperationsRules.js.map +0 -1
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sfdxy/mule-lint",
3
- "version": "1.16.2",
3
+ "version": "1.16.3",
4
4
  "description": "Static analysis tool for MuleSoft applications - supports humans, AI agents, and CI/CD pipelines",
5
5
  "author": "Avinava",
6
6
  "license": "MIT",
@@ -0,0 +1,17 @@
1
+ import { ValidationContext, Issue } from '../../types';
2
+ import { BaseRule } from '../base/BaseRule';
3
+ /**
4
+ * DOC-001: Display Name Enforcement
5
+ *
6
+ * Key components should have meaningful doc:name attributes, not defaults.
7
+ */
8
+ export declare class DisplayNameRule extends BaseRule {
9
+ id: string;
10
+ name: string;
11
+ description: string;
12
+ severity: "info";
13
+ category: "documentation";
14
+ private componentDefaults;
15
+ validate(doc: Document, _context: ValidationContext): Issue[];
16
+ }
17
+ //# sourceMappingURL=DisplayNameRule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DisplayNameRule.d.ts","sourceRoot":"","sources":["../../../../src/rules/documentation/DisplayNameRule.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,SAAa;IACf,IAAI,SAA8B;IAClC,WAAW,SAAyD;IACpE,QAAQ,EAAG,MAAM,CAAU;IAC3B,QAAQ,EAAG,eAAe,CAAU;IAGpC,OAAO,CAAC,iBAAiB,CAOvB;IAEF,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,GAAG,KAAK,EAAE;CA8BhE"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DisplayNameRule = void 0;
4
+ const BaseRule_1 = require("../base/BaseRule");
5
+ /**
6
+ * DOC-001: Display Name Enforcement
7
+ *
8
+ * Key components should have meaningful doc:name attributes, not defaults.
9
+ */
10
+ class DisplayNameRule extends BaseRule_1.BaseRule {
11
+ id = 'DOC-001';
12
+ name = 'Display Name Enforcement';
13
+ description = 'Key components should have meaningful display names';
14
+ severity = 'info';
15
+ category = 'documentation';
16
+ // Components that should have meaningful names, with their default names to flag
17
+ componentDefaults = [
18
+ { element: 'set-payload', defaults: ['Set Payload', 'set-payload'] },
19
+ { element: 'set-variable', defaults: ['Set Variable', 'set-variable'] },
20
+ { element: 'transform', defaults: ['Transform Message', 'transform'] },
21
+ { element: 'flow-ref', defaults: ['Flow Reference', 'flow-ref'] },
22
+ { element: 'logger', defaults: ['Logger', 'logger'] },
23
+ { element: 'choice', defaults: ['Choice', 'choice'] },
24
+ ];
25
+ validate(doc, _context) {
26
+ const issues = [];
27
+ for (const component of this.componentDefaults) {
28
+ const elements = this.select(`//*[local-name()="${component.element}"]`, doc);
29
+ for (const element of elements) {
30
+ const docName = this.getDocName(element);
31
+ if (!docName) {
32
+ continue; // Missing doc:name is handled by MULE-604
33
+ }
34
+ // Check if using default name
35
+ if (component.defaults.some((d) => docName.toLowerCase() === d.toLowerCase())) {
36
+ issues.push(this.createIssue(element, `${component.element} has generic name "${docName}"`, {
37
+ suggestion: `Use a descriptive name explaining the purpose`,
38
+ }));
39
+ }
40
+ }
41
+ }
42
+ return issues;
43
+ }
44
+ }
45
+ exports.DisplayNameRule = DisplayNameRule;
46
+ //# sourceMappingURL=DisplayNameRule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DisplayNameRule.js","sourceRoot":"","sources":["../../../../src/rules/documentation/DisplayNameRule.ts"],"names":[],"mappings":";;;AACA,+CAA4C;AAE5C;;;;GAIG;AACH,MAAa,eAAgB,SAAQ,mBAAQ;IACzC,EAAE,GAAG,SAAS,CAAC;IACf,IAAI,GAAG,0BAA0B,CAAC;IAClC,WAAW,GAAG,qDAAqD,CAAC;IACpE,QAAQ,GAAG,MAAe,CAAC;IAC3B,QAAQ,GAAG,eAAwB,CAAC;IAEpC,iFAAiF;IACzE,iBAAiB,GAAG;QACxB,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE;QACpE,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC,EAAE;QACvE,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,mBAAmB,EAAE,WAAW,CAAC,EAAE;QACtE,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,gBAAgB,EAAE,UAAU,CAAC,EAAE;QACjE,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;QACrD,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;KACxD,CAAC;IAEF,QAAQ,CAAC,GAAa,EAAE,QAA2B;QAC/C,MAAM,MAAM,GAAY,EAAE,CAAC;QAE3B,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,SAAS,CAAC,OAAO,IAAI,EAAE,GAAG,CAAC,CAAC;YAE9E,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBAEzC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACX,SAAS,CAAC,0CAA0C;gBACxD,CAAC;gBAED,8BAA8B;gBAC9B,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;oBAC5E,MAAM,CAAC,IAAI,CACP,IAAI,CAAC,WAAW,CACZ,OAAO,EACP,GAAG,SAAS,CAAC,OAAO,sBAAsB,OAAO,GAAG,EACpD;wBACI,UAAU,EAAE,+CAA+C;qBAC9D,CACJ,CACJ,CAAC;gBACN,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AA/CD,0CA+CC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/rules/index.ts"],"names":[],"mappings":"AACA,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AA8FnC,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAGhC,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAGrE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAGjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAG7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,2BAA2B,EAAE,MAAM,uCAAuC,CAAC;AAGpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAG9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAGxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE1E;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,IAAI,EAoG3B,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,CAE3D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAExD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAExC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/rules/index.ts"],"names":[],"mappings":"AACA,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AA4FnC,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAGhC,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAGrE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAGjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAG7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,2BAA2B,EAAE,MAAM,uCAAuC,CAAC;AAGpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAG9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAGxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE1E;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,IAAI,EAoG3B,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,CAE3D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAExD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAExC"}
@@ -39,15 +39,21 @@ const InsecureTlsRule_1 = require("./security/InsecureTlsRule");
39
39
  const TlsVersionRule_1 = require("./security/TlsVersionRule");
40
40
  const RateLimitingRule_1 = require("./security/RateLimitingRule");
41
41
  const InputValidationRule_1 = require("./security/InputValidationRule");
42
+ const EncryptionKeyInLogsRule_1 = require("./security/EncryptionKeyInLogsRule");
42
43
  // Import all rules - Logging
43
44
  const LoggerCategoryRule_1 = require("./logging/LoggerCategoryRule");
44
45
  const LoggerPayloadRule_1 = require("./logging/LoggerPayloadRule");
45
46
  const LoggerInUntilSuccessfulRule_1 = require("./logging/LoggerInUntilSuccessfulRule");
46
47
  const NewLoggingRules_1 = require("./logging/NewLoggingRules");
48
+ const ExcessiveLoggersRule_1 = require("./logging/ExcessiveLoggersRule");
47
49
  // Import all rules - Standards
48
50
  const ChoiceAntiPatternRule_1 = require("./standards/ChoiceAntiPatternRule");
49
51
  const DwlStandardsRule_1 = require("./standards/DwlStandardsRule");
50
52
  const DeprecatedComponentRule_1 = require("./standards/DeprecatedComponentRule");
53
+ const AutoDiscoveryRule_1 = require("./standards/AutoDiscoveryRule");
54
+ const HttpPortPlaceholderRule_1 = require("./standards/HttpPortPlaceholderRule");
55
+ const CronExternalizedRule_1 = require("./standards/CronExternalizedRule");
56
+ const ApiKitValidationRule_1 = require("./standards/ApiKitValidationRule");
51
57
  // Import all rules - HTTP
52
58
  const HttpUserAgentRule_1 = require("./http/HttpUserAgentRule");
53
59
  const HttpContentTypeRule_1 = require("./http/HttpContentTypeRule");
@@ -55,11 +61,13 @@ const HttpTimeoutRule_1 = require("./http/HttpTimeoutRule");
55
61
  // Import all rules - Documentation
56
62
  const FlowDescriptionRule_1 = require("./documentation/FlowDescriptionRule");
57
63
  const MissingDocNameRule_1 = require("./documentation/MissingDocNameRule");
64
+ const DisplayNameRule_1 = require("./documentation/DisplayNameRule");
58
65
  // Import all rules - Performance
59
66
  const ScatterGatherRoutesRule_1 = require("./performance/ScatterGatherRoutesRule");
60
67
  const AsyncErrorHandlerRule_1 = require("./performance/AsyncErrorHandlerRule");
61
68
  const LargeChoiceBlockRule_1 = require("./performance/LargeChoiceBlockRule");
62
69
  const ConnectionPoolingRule_1 = require("./performance/ConnectionPoolingRule");
70
+ const ReconnectionStrategyRule_1 = require("./performance/ReconnectionStrategyRule");
63
71
  // Import all rules - Complexity
64
72
  const FlowComplexityRule_1 = require("./complexity/FlowComplexityRule");
65
73
  // Import all rules - YAML
@@ -74,8 +82,9 @@ const ApiLedRules_1 = require("./api-led/ApiLedRules");
74
82
  const SingleSystemSapiRule_1 = require("./api-led/SingleSystemSapiRule");
75
83
  // Import all rules - Experimental
76
84
  const ExperimentalRules_1 = require("./experimental/ExperimentalRules");
77
- // Import all rules - Operations & Resilience
78
- const OperationsRules_1 = require("./operations/OperationsRules");
85
+ // Import all rules - Operations & Hygiene
86
+ const CommentedCodeRule_1 = require("./operations/CommentedCodeRule");
87
+ const UnusedFlowRule_1 = require("./operations/UnusedFlowRule");
79
88
  // Import all rules - Governance
80
89
  const GovernanceRules_1 = require("./governance/GovernanceRules");
81
90
  // Export individual rules - Error Handling
@@ -206,19 +215,19 @@ exports.ALL_RULES = [
206
215
  new ExperimentalRules_1.ConnectorConfigNamingRule(),
207
216
  new ExperimentalRules_1.MUnitCoverageRule(),
208
217
  // Operations & Resilience Rules (RES-001, OPS-001, OPS-002, OPS-003)
209
- new OperationsRules_1.ReconnectionStrategyRule(),
210
- new OperationsRules_1.AutoDiscoveryRule(),
211
- new OperationsRules_1.HttpPortPlaceholderRule(),
212
- new OperationsRules_1.CronExternalizedRule(),
218
+ new ReconnectionStrategyRule_1.ReconnectionStrategyRule(),
219
+ new AutoDiscoveryRule_1.AutoDiscoveryRule(),
220
+ new HttpPortPlaceholderRule_1.HttpPortPlaceholderRule(),
221
+ new CronExternalizedRule_1.CronExternalizedRule(),
213
222
  // Security Enhancement (SEC-006)
214
- new OperationsRules_1.EncryptionKeyInLogsRule(),
223
+ new EncryptionKeyInLogsRule_1.EncryptionKeyInLogsRule(),
215
224
  // Code Hygiene Rules (HYG-001, HYG-002, HYG-003)
216
- new OperationsRules_1.ExcessiveLoggersRule(),
217
- new OperationsRules_1.CommentedCodeRule(),
218
- new OperationsRules_1.UnusedFlowRule(),
225
+ new ExcessiveLoggersRule_1.ExcessiveLoggersRule(),
226
+ new CommentedCodeRule_1.CommentedCodeRule(),
227
+ new UnusedFlowRule_1.UnusedFlowRule(),
219
228
  // Additional Standards (API-005, DOC-001)
220
- new OperationsRules_1.ApiKitValidationRule(),
221
- new OperationsRules_1.DisplayNameRule(),
229
+ new ApiKitValidationRule_1.ApiKitValidationRule(),
230
+ new DisplayNameRule_1.DisplayNameRule(),
222
231
  // Governance Rules (PROJ-001, PROJ-002)
223
232
  new GovernanceRules_1.PomValidationRule(),
224
233
  new GovernanceRules_1.GitHygieneRule(),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/rules/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/rules/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { ValidationContext, Issue } from '../../types';
2
+ import { BaseRule } from '../base/BaseRule';
3
+ /**
4
+ * HYG-001: Excessive Loggers
5
+ *
6
+ * Flows should not have too many loggers which can impact performance.
7
+ */
8
+ export declare class ExcessiveLoggersRule extends BaseRule {
9
+ id: string;
10
+ name: string;
11
+ description: string;
12
+ severity: "warning";
13
+ category: "logging";
14
+ validate(doc: Document, context: ValidationContext): Issue[];
15
+ }
16
+ //# sourceMappingURL=ExcessiveLoggersRule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExcessiveLoggersRule.d.ts","sourceRoot":"","sources":["../../../../src/rules/logging/ExcessiveLoggersRule.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,oBAAqB,SAAQ,QAAQ;IAC9C,EAAE,SAAa;IACf,IAAI,SAAuB;IAC3B,WAAW,SAA6C;IACxD,QAAQ,EAAG,SAAS,CAAU;IAC9B,QAAQ,EAAG,SAAS,CAAU;IAE9B,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,GAAG,KAAK,EAAE;CAiD/D"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExcessiveLoggersRule = void 0;
4
+ const BaseRule_1 = require("../base/BaseRule");
5
+ /**
6
+ * HYG-001: Excessive Loggers
7
+ *
8
+ * Flows should not have too many loggers which can impact performance.
9
+ */
10
+ class ExcessiveLoggersRule extends BaseRule_1.BaseRule {
11
+ id = 'HYG-001';
12
+ name = 'Excessive Loggers';
13
+ description = 'Flows should not have excessive loggers';
14
+ severity = 'warning';
15
+ category = 'logging';
16
+ validate(doc, context) {
17
+ const issues = [];
18
+ const maxLoggers = this.getOption(context, 'maxLoggers', 5);
19
+ // Check flows
20
+ const flows = this.select('//*[local-name()="flow"]', doc);
21
+ for (const flow of flows) {
22
+ const flowName = this.getNameAttribute(flow) ?? 'unknown';
23
+ const loggerCount = this.count('.//*[local-name()="logger"]', flow);
24
+ if (loggerCount > maxLoggers) {
25
+ issues.push(this.createIssue(flow, `Flow "${flowName}" has ${loggerCount} loggers (max recommended: ${maxLoggers})`, {
26
+ suggestion: 'Consider reducing loggers or moving detailed logging to DEBUG level',
27
+ }));
28
+ }
29
+ }
30
+ // Check sub-flows
31
+ const subflows = this.select('//*[local-name()="sub-flow"]', doc);
32
+ for (const subflow of subflows) {
33
+ const subflowName = this.getNameAttribute(subflow) ?? 'unknown';
34
+ const loggerCount = this.count('.//*[local-name()="logger"]', subflow);
35
+ if (loggerCount > maxLoggers) {
36
+ issues.push(this.createIssue(subflow, `Sub-flow "${subflowName}" has ${loggerCount} loggers (max recommended: ${maxLoggers})`, {
37
+ suggestion: 'Consider reducing loggers or moving detailed logging to DEBUG level',
38
+ }));
39
+ }
40
+ }
41
+ return issues;
42
+ }
43
+ }
44
+ exports.ExcessiveLoggersRule = ExcessiveLoggersRule;
45
+ //# sourceMappingURL=ExcessiveLoggersRule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExcessiveLoggersRule.js","sourceRoot":"","sources":["../../../../src/rules/logging/ExcessiveLoggersRule.ts"],"names":[],"mappings":";;;AACA,+CAA4C;AAE5C;;;;GAIG;AACH,MAAa,oBAAqB,SAAQ,mBAAQ;IAC9C,EAAE,GAAG,SAAS,CAAC;IACf,IAAI,GAAG,mBAAmB,CAAC;IAC3B,WAAW,GAAG,yCAAyC,CAAC;IACxD,QAAQ,GAAG,SAAkB,CAAC;IAC9B,QAAQ,GAAG,SAAkB,CAAC;IAE9B,QAAQ,CAAC,GAAa,EAAE,OAA0B;QAC9C,MAAM,MAAM,GAAY,EAAE,CAAC;QAE3B,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAS,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;QAEpE,cAAc;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;QAE3D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;YAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC;YAEpE,IAAI,WAAW,GAAG,UAAU,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,CACP,IAAI,CAAC,WAAW,CACZ,IAAI,EACJ,SAAS,QAAQ,SAAS,WAAW,8BAA8B,UAAU,GAAG,EAChF;oBACI,UAAU,EACN,qEAAqE;iBAC5E,CACJ,CACJ,CAAC;YACN,CAAC;QACL,CAAC;QAED,kBAAkB;QAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;QAElE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC;YAChE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;YAEvE,IAAI,WAAW,GAAG,UAAU,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,CACP,IAAI,CAAC,WAAW,CACZ,OAAO,EACP,aAAa,WAAW,SAAS,WAAW,8BAA8B,UAAU,GAAG,EACvF;oBACI,UAAU,EACN,qEAAqE;iBAC5E,CACJ,CACJ,CAAC;YACN,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AAxDD,oDAwDC"}
@@ -0,0 +1,17 @@
1
+ import { ValidationContext, Issue } from '../../types';
2
+ import { BaseRule } from '../base/BaseRule';
3
+ /**
4
+ * HYG-002: Commented Code Detection
5
+ *
6
+ * Detects potentially commented-out code blocks in Mule configurations.
7
+ */
8
+ export declare class CommentedCodeRule extends BaseRule {
9
+ id: string;
10
+ name: string;
11
+ description: string;
12
+ severity: "info";
13
+ category: "standards";
14
+ private codePatterns;
15
+ validate(doc: Document, _context: ValidationContext): Issue[];
16
+ }
17
+ //# sourceMappingURL=CommentedCodeRule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommentedCodeRule.d.ts","sourceRoot":"","sources":["../../../../src/rules/operations/CommentedCodeRule.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,iBAAkB,SAAQ,QAAQ;IAC3C,EAAE,SAAa;IACf,IAAI,SAA8B;IAClC,WAAW,SAA8D;IACzE,QAAQ,EAAG,MAAM,CAAU;IAC3B,QAAQ,EAAG,WAAW,CAAU;IAGhC,OAAO,CAAC,YAAY,CAYlB;IAEF,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,GAAG,KAAK,EAAE;CAgChE"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CommentedCodeRule = void 0;
4
+ const BaseRule_1 = require("../base/BaseRule");
5
+ /**
6
+ * HYG-002: Commented Code Detection
7
+ *
8
+ * Detects potentially commented-out code blocks in Mule configurations.
9
+ */
10
+ class CommentedCodeRule extends BaseRule_1.BaseRule {
11
+ id = 'HYG-002';
12
+ name = 'Commented Code Detection';
13
+ description = 'Detects potentially commented-out code in configurations';
14
+ severity = 'info';
15
+ category = 'standards';
16
+ // Patterns that suggest commented-out XML code
17
+ codePatterns = [
18
+ /<flow\s/,
19
+ /<sub-flow\s/,
20
+ /<http:/,
21
+ /<logger\s/,
22
+ /<set-variable\s/,
23
+ /<set-payload\s/,
24
+ /<choice>/,
25
+ /<transform\s/,
26
+ /<flow-ref\s/,
27
+ /<try>/,
28
+ /<db:/,
29
+ ];
30
+ validate(doc, _context) {
31
+ const issues = [];
32
+ // Use XPath to find comment nodes: comment()
33
+ // Note: In xmldom, we need to iterate through the document differently
34
+ try {
35
+ const commentNodes = this.select('//comment()', doc);
36
+ for (const commentNode of commentNodes) {
37
+ const commentText = commentNode.textContent ?? '';
38
+ // Check if comment contains code-like patterns
39
+ for (const pattern of this.codePatterns) {
40
+ if (pattern.test(commentText)) {
41
+ issues.push(this.createIssue(commentNode, 'Commented-out code detected', {
42
+ suggestion: 'Remove commented code or convert to documentation comment',
43
+ codeSnippet: commentText.substring(0, 80) + '...',
44
+ }));
45
+ break;
46
+ }
47
+ }
48
+ }
49
+ }
50
+ catch {
51
+ // XPath comment() may not be supported in all parsers
52
+ // Silently return empty issues
53
+ }
54
+ return issues;
55
+ }
56
+ }
57
+ exports.CommentedCodeRule = CommentedCodeRule;
58
+ //# sourceMappingURL=CommentedCodeRule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommentedCodeRule.js","sourceRoot":"","sources":["../../../../src/rules/operations/CommentedCodeRule.ts"],"names":[],"mappings":";;;AACA,+CAA4C;AAE5C;;;;GAIG;AACH,MAAa,iBAAkB,SAAQ,mBAAQ;IAC3C,EAAE,GAAG,SAAS,CAAC;IACf,IAAI,GAAG,0BAA0B,CAAC;IAClC,WAAW,GAAG,0DAA0D,CAAC;IACzE,QAAQ,GAAG,MAAe,CAAC;IAC3B,QAAQ,GAAG,WAAoB,CAAC;IAEhC,+CAA+C;IACvC,YAAY,GAAG;QACnB,SAAS;QACT,aAAa;QACb,QAAQ;QACR,WAAW;QACX,iBAAiB;QACjB,gBAAgB;QAChB,UAAU;QACV,cAAc;QACd,aAAa;QACb,OAAO;QACP,MAAM;KACT,CAAC;IAEF,QAAQ,CAAC,GAAa,EAAE,QAA2B;QAC/C,MAAM,MAAM,GAAY,EAAE,CAAC;QAE3B,6CAA6C;QAC7C,uEAAuE;QACvE,IAAI,CAAC;YACD,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;YAErD,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;gBACrC,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,IAAI,EAAE,CAAC;gBAElD,+CAA+C;gBAC/C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBACtC,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;wBAC5B,MAAM,CAAC,IAAI,CACP,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,6BAA6B,EAAE;4BACzD,UAAU,EACN,2DAA2D;4BAC/D,WAAW,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK;yBACpD,CAAC,CACL,CAAC;wBACF,MAAM;oBACV,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,sDAAsD;YACtD,+BAA+B;QACnC,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AAtDD,8CAsDC"}
@@ -0,0 +1,17 @@
1
+ import { ValidationContext, Issue } from '../../types';
2
+ import { BaseRule } from '../base/BaseRule';
3
+ /**
4
+ * HYG-003: Unused Flow Detection
5
+ *
6
+ * Detects flows that are never referenced by flow-ref.
7
+ */
8
+ export declare class UnusedFlowRule extends BaseRule {
9
+ id: string;
10
+ name: string;
11
+ description: string;
12
+ severity: "warning";
13
+ category: "standards";
14
+ validate(doc: Document, _context: ValidationContext): Issue[];
15
+ private isExternallyReferenced;
16
+ }
17
+ //# sourceMappingURL=UnusedFlowRule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnusedFlowRule.d.ts","sourceRoot":"","sources":["../../../../src/rules/operations/UnusedFlowRule.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,cAAe,SAAQ,QAAQ;IACxC,EAAE,SAAa;IACf,IAAI,SAA2B;IAC/B,WAAW,SAA6C;IACxD,QAAQ,EAAG,SAAS,CAAU;IAC9B,QAAQ,EAAG,WAAW,CAAU;IAEhC,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,GAAG,KAAK,EAAE;IA2E7D,OAAO,CAAC,sBAAsB;CAYjC"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnusedFlowRule = void 0;
4
+ const BaseRule_1 = require("../base/BaseRule");
5
+ /**
6
+ * HYG-003: Unused Flow Detection
7
+ *
8
+ * Detects flows that are never referenced by flow-ref.
9
+ */
10
+ class UnusedFlowRule extends BaseRule_1.BaseRule {
11
+ id = 'HYG-003';
12
+ name = 'Unused Flow Detection';
13
+ description = 'Detects flows that are never referenced';
14
+ severity = 'warning';
15
+ category = 'standards';
16
+ validate(doc, _context) {
17
+ const issues = [];
18
+ // Get all flow names in this document
19
+ const flows = this.select('//*[local-name()="flow"]', doc);
20
+ const subflows = this.select('//*[local-name()="sub-flow"]', doc);
21
+ // Get all flow-ref targets
22
+ const flowRefs = this.select('//*[local-name()="flow-ref"]', doc);
23
+ const referencedFlows = new Set();
24
+ for (const ref of flowRefs) {
25
+ const name = this.getNameAttribute(ref);
26
+ if (name) {
27
+ referencedFlows.add(name);
28
+ }
29
+ }
30
+ // Check sub-flows (they should always be referenced)
31
+ for (const subflow of subflows) {
32
+ const name = this.getNameAttribute(subflow);
33
+ if (name && !referencedFlows.has(name)) {
34
+ // Exclude common patterns that are referenced externally
35
+ if (!this.isExternallyReferenced(name)) {
36
+ issues.push(this.createIssue(subflow, `Sub-flow "${name}" is never referenced within this file`, {
37
+ severity: 'info',
38
+ suggestion: 'Consider removing unused sub-flows or verify cross-file references',
39
+ }));
40
+ }
41
+ }
42
+ }
43
+ // Check private flows (not triggered by HTTP/scheduler)
44
+ for (const flow of flows) {
45
+ const name = this.getNameAttribute(flow);
46
+ if (!name) {
47
+ continue;
48
+ }
49
+ // Skip if it has an external trigger
50
+ const hasHttpListener = this.exists('.//*[local-name()="listener"]', flow);
51
+ const hasScheduler = this.exists('.//*[local-name()="scheduler"]', flow);
52
+ const hasVmListener = this.exists('.//*[local-name()="listener" and contains(@config-ref, "vm")]', flow);
53
+ if (hasHttpListener || hasScheduler || hasVmListener) {
54
+ continue; // Entry point flow
55
+ }
56
+ // Check if referenced
57
+ if (!referencedFlows.has(name) && !this.isExternallyReferenced(name)) {
58
+ issues.push(this.createIssue(flow, `Flow "${name}" has no trigger and is never referenced`, {
59
+ severity: 'info',
60
+ suggestion: 'Verify this flow is referenced from other files or remove if unused',
61
+ }));
62
+ }
63
+ }
64
+ return issues;
65
+ }
66
+ isExternallyReferenced(name) {
67
+ // Common patterns that are typically referenced externally
68
+ const externalPatterns = [
69
+ /-main$/,
70
+ /-api$/,
71
+ /^api-/,
72
+ /-console$/,
73
+ /-error-handler$/,
74
+ /global/i,
75
+ ];
76
+ return externalPatterns.some((pattern) => pattern.test(name));
77
+ }
78
+ }
79
+ exports.UnusedFlowRule = UnusedFlowRule;
80
+ //# sourceMappingURL=UnusedFlowRule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnusedFlowRule.js","sourceRoot":"","sources":["../../../../src/rules/operations/UnusedFlowRule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { ValidationContext, Issue } from '../../types';
2
+ import { BaseRule } from '../base/BaseRule';
3
+ /**
4
+ * RES-001: Reconnection Strategy
5
+ *
6
+ * Connectors should have reconnection strategies configured for resilience.
7
+ */
8
+ export declare class ReconnectionStrategyRule extends BaseRule {
9
+ id: string;
10
+ name: string;
11
+ description: string;
12
+ severity: "warning";
13
+ category: "performance";
14
+ validate(doc: Document, _context: ValidationContext): Issue[];
15
+ }
16
+ //# sourceMappingURL=ReconnectionStrategyRule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReconnectionStrategyRule.d.ts","sourceRoot":"","sources":["../../../../src/rules/performance/ReconnectionStrategyRule.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,wBAAyB,SAAQ,QAAQ;IAClD,EAAE,SAAa;IACf,IAAI,SAA2B;IAC/B,WAAW,SAA+D;IAC1E,QAAQ,EAAG,SAAS,CAAU;IAC9B,QAAQ,EAAG,aAAa,CAAU;IAElC,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,GAAG,KAAK,EAAE;CAmEhE"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReconnectionStrategyRule = void 0;
4
+ const BaseRule_1 = require("../base/BaseRule");
5
+ /**
6
+ * RES-001: Reconnection Strategy
7
+ *
8
+ * Connectors should have reconnection strategies configured for resilience.
9
+ */
10
+ class ReconnectionStrategyRule extends BaseRule_1.BaseRule {
11
+ id = 'RES-001';
12
+ name = 'Reconnection Strategy';
13
+ description = 'Connectors should have reconnection strategies configured';
14
+ severity = 'warning';
15
+ category = 'performance';
16
+ validate(doc, _context) {
17
+ const issues = [];
18
+ // Specific connector configurations that benefit from reconnection strategies
19
+ // Using more specific patterns to avoid false positives on generic "config" elements
20
+ const connectorConfigs = [
21
+ { pattern: 'request-config', name: 'HTTP Request' },
22
+ { pattern: 'listener-config', name: 'HTTP Listener' },
23
+ { pattern: 'jms-config', name: 'JMS' },
24
+ { pattern: 'amqp-config', name: 'AMQP' },
25
+ { pattern: 'sftp-config', name: 'SFTP' },
26
+ { pattern: 'ftp-config', name: 'FTP' },
27
+ { pattern: 'vm-config', name: 'VM' },
28
+ ];
29
+ for (const connector of connectorConfigs) {
30
+ const configs = this.select(`//*[local-name()="${connector.pattern}"]`, doc);
31
+ for (const config of configs) {
32
+ // Check for reconnection or reconnect child elements
33
+ const hasReconnection = this.exists('.//*[local-name()="reconnection"]', config) ||
34
+ this.exists('.//*[local-name()="reconnect"]', config) ||
35
+ this.exists('.//*[local-name()="reconnect-forever"]', config);
36
+ if (!hasReconnection) {
37
+ const name = this.getNameAttribute(config) ?? connector.name;
38
+ issues.push(this.createIssue(config, `${connector.name} config "${name}" has no reconnection strategy`, {
39
+ suggestion: 'Add <reconnection> or <reconnect-forever> for resilience',
40
+ }));
41
+ }
42
+ }
43
+ }
44
+ // Database configs specifically - check for db namespace
45
+ const dbConfigs = this.select('//*[local-name()="config" and starts-with(name(), "db:")]', doc);
46
+ for (const config of dbConfigs) {
47
+ const hasReconnection = this.exists('.//*[local-name()="reconnection"]', config) ||
48
+ this.exists('.//*[local-name()="reconnect"]', config);
49
+ if (!hasReconnection) {
50
+ const name = this.getNameAttribute(config) ?? 'Database';
51
+ issues.push(this.createIssue(config, `Database config "${name}" has no reconnection strategy`, {
52
+ suggestion: 'Add <reconnection> inside the connection element',
53
+ }));
54
+ }
55
+ }
56
+ return issues;
57
+ }
58
+ }
59
+ exports.ReconnectionStrategyRule = ReconnectionStrategyRule;
60
+ //# sourceMappingURL=ReconnectionStrategyRule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReconnectionStrategyRule.js","sourceRoot":"","sources":["../../../../src/rules/performance/ReconnectionStrategyRule.ts"],"names":[],"mappings":";;;AACA,+CAA4C;AAE5C;;;;GAIG;AACH,MAAa,wBAAyB,SAAQ,mBAAQ;IAClD,EAAE,GAAG,SAAS,CAAC;IACf,IAAI,GAAG,uBAAuB,CAAC;IAC/B,WAAW,GAAG,2DAA2D,CAAC;IAC1E,QAAQ,GAAG,SAAkB,CAAC;IAC9B,QAAQ,GAAG,aAAsB,CAAC;IAElC,QAAQ,CAAC,GAAa,EAAE,QAA2B;QAC/C,MAAM,MAAM,GAAY,EAAE,CAAC;QAE3B,8EAA8E;QAC9E,qFAAqF;QACrF,MAAM,gBAAgB,GAAG;YACrB,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,cAAc,EAAE;YACnD,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,eAAe,EAAE;YACrD,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE;YACtC,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE;YACxC,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE;YACxC,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE;YACtC,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;SACvC,CAAC;QAEF,KAAK,MAAM,SAAS,IAAI,gBAAgB,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,SAAS,CAAC,OAAO,IAAI,EAAE,GAAG,CAAC,CAAC;YAE7E,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC3B,qDAAqD;gBACrD,MAAM,eAAe,GACjB,IAAI,CAAC,MAAM,CAAC,mCAAmC,EAAE,MAAM,CAAC;oBACxD,IAAI,CAAC,MAAM,CAAC,gCAAgC,EAAE,MAAM,CAAC;oBACrD,IAAI,CAAC,MAAM,CAAC,wCAAwC,EAAE,MAAM,CAAC,CAAC;gBAElE,IAAI,CAAC,eAAe,EAAE,CAAC;oBACnB,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC;oBAC7D,MAAM,CAAC,IAAI,CACP,IAAI,CAAC,WAAW,CACZ,MAAM,EACN,GAAG,SAAS,CAAC,IAAI,YAAY,IAAI,gCAAgC,EACjE;wBACI,UAAU,EACN,0DAA0D;qBACjE,CACJ,CACJ,CAAC;gBACN,CAAC;YACL,CAAC;QACL,CAAC;QAED,yDAAyD;QACzD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CACzB,2DAA2D,EAC3D,GAAG,CACN,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,eAAe,GACjB,IAAI,CAAC,MAAM,CAAC,mCAAmC,EAAE,MAAM,CAAC;gBACxD,IAAI,CAAC,MAAM,CAAC,gCAAgC,EAAE,MAAM,CAAC,CAAC;YAE1D,IAAI,CAAC,eAAe,EAAE,CAAC;gBACnB,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC;gBACzD,MAAM,CAAC,IAAI,CACP,IAAI,CAAC,WAAW,CACZ,MAAM,EACN,oBAAoB,IAAI,gCAAgC,EACxD;oBACI,UAAU,EAAE,kDAAkD;iBACjE,CACJ,CACJ,CAAC;YACN,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AA1ED,4DA0EC"}
@@ -0,0 +1,17 @@
1
+ import { ValidationContext, Issue } from '../../types';
2
+ import { BaseRule } from '../base/BaseRule';
3
+ /**
4
+ * SEC-006: Encryption Key in Logs
5
+ *
6
+ * Encryption keys and sensitive credentials should not appear in log statements.
7
+ */
8
+ export declare class EncryptionKeyInLogsRule extends BaseRule {
9
+ id: string;
10
+ name: string;
11
+ description: string;
12
+ severity: "error";
13
+ category: "security";
14
+ private sensitivePatterns;
15
+ validate(doc: Document, _context: ValidationContext): Issue[];
16
+ }
17
+ //# sourceMappingURL=EncryptionKeyInLogsRule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EncryptionKeyInLogsRule.d.ts","sourceRoot":"","sources":["../../../../src/rules/security/EncryptionKeyInLogsRule.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,SAAa;IACf,IAAI,SAA4B;IAChC,WAAW,SAAkE;IAC7E,QAAQ,EAAG,OAAO,CAAU;IAC5B,QAAQ,EAAG,UAAU,CAAU;IAE/B,OAAO,CAAC,iBAAiB,CASvB;IAEF,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,GAAG,KAAK,EAAE;CA6BhE"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EncryptionKeyInLogsRule = void 0;
4
+ const BaseRule_1 = require("../base/BaseRule");
5
+ /**
6
+ * SEC-006: Encryption Key in Logs
7
+ *
8
+ * Encryption keys and sensitive credentials should not appear in log statements.
9
+ */
10
+ class EncryptionKeyInLogsRule extends BaseRule_1.BaseRule {
11
+ id = 'SEC-006';
12
+ name = 'Encryption Key in Logs';
13
+ description = 'Encryption keys and sensitive data should not appear in logs';
14
+ severity = 'error';
15
+ category = 'security';
16
+ sensitivePatterns = [
17
+ /encrypt.*key/i,
18
+ /decryption.*key/i,
19
+ /secret.*key/i,
20
+ /api[_-]?key/i,
21
+ /password/i,
22
+ /credentials?/i,
23
+ /mule\.key/i,
24
+ /secure::.*key/i,
25
+ ];
26
+ validate(doc, _context) {
27
+ const issues = [];
28
+ // Find all loggers
29
+ const loggers = this.select('//*[local-name()="logger"]', doc);
30
+ for (const logger of loggers) {
31
+ const message = this.getAttribute(logger, 'message') ?? '';
32
+ // Check for sensitive patterns in log messages
33
+ for (const pattern of this.sensitivePatterns) {
34
+ if (pattern.test(message)) {
35
+ issues.push(this.createIssue(logger, `Logger may expose sensitive data: "${message.substring(0, 50)}${message.length > 50 ? '...' : ''}"`, {
36
+ suggestion: 'Remove encryption keys and sensitive data from log messages',
37
+ }));
38
+ break; // Only one issue per logger
39
+ }
40
+ }
41
+ }
42
+ return issues;
43
+ }
44
+ }
45
+ exports.EncryptionKeyInLogsRule = EncryptionKeyInLogsRule;
46
+ //# sourceMappingURL=EncryptionKeyInLogsRule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EncryptionKeyInLogsRule.js","sourceRoot":"","sources":["../../../../src/rules/security/EncryptionKeyInLogsRule.ts"],"names":[],"mappings":";;;AACA,+CAA4C;AAE5C;;;;GAIG;AACH,MAAa,uBAAwB,SAAQ,mBAAQ;IACjD,EAAE,GAAG,SAAS,CAAC;IACf,IAAI,GAAG,wBAAwB,CAAC;IAChC,WAAW,GAAG,8DAA8D,CAAC;IAC7E,QAAQ,GAAG,OAAgB,CAAC;IAC5B,QAAQ,GAAG,UAAmB,CAAC;IAEvB,iBAAiB,GAAG;QACxB,eAAe;QACf,kBAAkB;QAClB,cAAc;QACd,cAAc;QACd,WAAW;QACX,eAAe;QACf,YAAY;QACZ,gBAAgB;KACnB,CAAC;IAEF,QAAQ,CAAC,GAAa,EAAE,QAA2B;QAC/C,MAAM,MAAM,GAAY,EAAE,CAAC;QAE3B,mBAAmB;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;QAE/D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;YAE3D,+CAA+C;YAC/C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC3C,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBACxB,MAAM,CAAC,IAAI,CACP,IAAI,CAAC,WAAW,CACZ,MAAM,EACN,sCAAsC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EACpG;wBACI,UAAU,EACN,6DAA6D;qBACpE,CACJ,CACJ,CAAC;oBACF,MAAM,CAAC,4BAA4B;gBACvC,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AA/CD,0DA+CC"}