@sfdxy/mule-lint 1.20.0 → 1.21.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 +63 -17
- package/dist/package.json +1 -1
- package/dist/src/core/XPathHelper.d.ts.map +1 -1
- package/dist/src/core/XPathHelper.js +8 -0
- package/dist/src/core/XPathHelper.js.map +1 -1
- package/dist/src/engine/LintEngine.d.ts +22 -0
- package/dist/src/engine/LintEngine.d.ts.map +1 -1
- package/dist/src/engine/LintEngine.js +105 -18
- package/dist/src/engine/LintEngine.js.map +1 -1
- package/dist/src/rules/api-led/ApikitConsoleProductionRule.d.ts +22 -0
- package/dist/src/rules/api-led/ApikitConsoleProductionRule.d.ts.map +1 -0
- package/dist/src/rules/api-led/ApikitConsoleProductionRule.js +43 -0
- package/dist/src/rules/api-led/ApikitConsoleProductionRule.js.map +1 -0
- package/dist/src/rules/api-led/ApikitMainFlowStructureRule.d.ts +24 -0
- package/dist/src/rules/api-led/ApikitMainFlowStructureRule.d.ts.map +1 -0
- package/dist/src/rules/api-led/ApikitMainFlowStructureRule.js +53 -0
- package/dist/src/rules/api-led/ApikitMainFlowStructureRule.js.map +1 -0
- package/dist/src/rules/api-led/ApikitStatusCodeVariableRule.d.ts +25 -0
- package/dist/src/rules/api-led/ApikitStatusCodeVariableRule.d.ts.map +1 -0
- package/dist/src/rules/api-led/ApikitStatusCodeVariableRule.js +59 -0
- package/dist/src/rules/api-led/ApikitStatusCodeVariableRule.js.map +1 -0
- package/dist/src/rules/connector/EventListenerNullGuardRule.d.ts +24 -0
- package/dist/src/rules/connector/EventListenerNullGuardRule.d.ts.map +1 -0
- package/dist/src/rules/connector/EventListenerNullGuardRule.js +58 -0
- package/dist/src/rules/connector/EventListenerNullGuardRule.js.map +1 -0
- package/dist/src/rules/connector/ReplayChannelConfigRule.d.ts +23 -0
- package/dist/src/rules/connector/ReplayChannelConfigRule.d.ts.map +1 -0
- package/dist/src/rules/connector/ReplayChannelConfigRule.js +52 -0
- package/dist/src/rules/connector/ReplayChannelConfigRule.js.map +1 -0
- package/dist/src/rules/dataweave/DataWeaveRules.d.ts +11 -4
- package/dist/src/rules/dataweave/DataWeaveRules.d.ts.map +1 -1
- package/dist/src/rules/dataweave/DataWeaveRules.js +20 -20
- package/dist/src/rules/dataweave/DataWeaveRules.js.map +1 -1
- package/dist/src/rules/dataweave/DuplicateTransformLogicRule.d.ts +25 -0
- package/dist/src/rules/dataweave/DuplicateTransformLogicRule.d.ts.map +1 -0
- package/dist/src/rules/dataweave/DuplicateTransformLogicRule.js +63 -0
- package/dist/src/rules/dataweave/DuplicateTransformLogicRule.js.map +1 -0
- package/dist/src/rules/error-handling/CatchAllLastRule.d.ts +24 -0
- package/dist/src/rules/error-handling/CatchAllLastRule.d.ts.map +1 -0
- package/dist/src/rules/error-handling/CatchAllLastRule.js +65 -0
- package/dist/src/rules/error-handling/CatchAllLastRule.js.map +1 -0
- package/dist/src/rules/error-handling/ErrorHandlerTypeCoverageRule.d.ts +28 -0
- package/dist/src/rules/error-handling/ErrorHandlerTypeCoverageRule.d.ts.map +1 -0
- package/dist/src/rules/error-handling/ErrorHandlerTypeCoverageRule.js +70 -0
- package/dist/src/rules/error-handling/ErrorHandlerTypeCoverageRule.js.map +1 -0
- package/dist/src/rules/error-handling/ErrorResponseStructureRule.d.ts +23 -0
- package/dist/src/rules/error-handling/ErrorResponseStructureRule.d.ts.map +1 -0
- package/dist/src/rules/error-handling/ErrorResponseStructureRule.js +73 -0
- package/dist/src/rules/error-handling/ErrorResponseStructureRule.js.map +1 -0
- package/dist/src/rules/error-handling/GenericErrorRule.d.ts +15 -3
- package/dist/src/rules/error-handling/GenericErrorRule.d.ts.map +1 -1
- package/dist/src/rules/error-handling/GenericErrorRule.js +58 -18
- package/dist/src/rules/error-handling/GenericErrorRule.js.map +1 -1
- package/dist/src/rules/error-handling/GlobalErrorHandlerRule.d.ts +14 -15
- package/dist/src/rules/error-handling/GlobalErrorHandlerRule.d.ts.map +1 -1
- package/dist/src/rules/error-handling/GlobalErrorHandlerRule.js +59 -38
- package/dist/src/rules/error-handling/GlobalErrorHandlerRule.js.map +1 -1
- package/dist/src/rules/error-handling/TryScopeRule.d.ts +5 -0
- package/dist/src/rules/error-handling/TryScopeRule.d.ts.map +1 -1
- package/dist/src/rules/error-handling/TryScopeRule.js +30 -7
- package/dist/src/rules/error-handling/TryScopeRule.js.map +1 -1
- package/dist/src/rules/http/ConnectionIdleTimeoutRule.d.ts +27 -0
- package/dist/src/rules/http/ConnectionIdleTimeoutRule.d.ts.map +1 -0
- package/dist/src/rules/http/ConnectionIdleTimeoutRule.js +46 -0
- package/dist/src/rules/http/ConnectionIdleTimeoutRule.js.map +1 -0
- package/dist/src/rules/index.d.ts +1 -1
- package/dist/src/rules/index.d.ts.map +1 -1
- package/dist/src/rules/index.js +50 -8
- package/dist/src/rules/index.js.map +1 -1
- package/dist/src/rules/logging/LoggerPayloadRule.d.ts +15 -0
- package/dist/src/rules/logging/LoggerPayloadRule.d.ts.map +1 -1
- package/dist/src/rules/logging/LoggerPayloadRule.js +48 -4
- package/dist/src/rules/logging/LoggerPayloadRule.js.map +1 -1
- package/dist/src/rules/operations/FlowRefTargetExistsRule.d.ts +23 -0
- package/dist/src/rules/operations/FlowRefTargetExistsRule.d.ts.map +1 -0
- package/dist/src/rules/operations/FlowRefTargetExistsRule.js +58 -0
- package/dist/src/rules/operations/FlowRefTargetExistsRule.js.map +1 -0
- package/dist/src/rules/operations/UnusedFlowRule.d.ts +20 -0
- package/dist/src/rules/operations/UnusedFlowRule.d.ts.map +1 -1
- package/dist/src/rules/operations/UnusedFlowRule.js +73 -7
- package/dist/src/rules/operations/UnusedFlowRule.js.map +1 -1
- package/dist/src/rules/operations/UnusedVariableRule.d.ts +31 -0
- package/dist/src/rules/operations/UnusedVariableRule.d.ts.map +1 -0
- package/dist/src/rules/operations/UnusedVariableRule.js +103 -0
- package/dist/src/rules/operations/UnusedVariableRule.js.map +1 -0
- package/dist/src/rules/performance/ListenerReconnectForeverRule.d.ts +28 -0
- package/dist/src/rules/performance/ListenerReconnectForeverRule.d.ts.map +1 -0
- package/dist/src/rules/performance/ListenerReconnectForeverRule.js +56 -0
- package/dist/src/rules/performance/ListenerReconnectForeverRule.js.map +1 -0
- package/dist/src/rules/performance/ReconnectionStrategyRule.d.ts +7 -4
- package/dist/src/rules/performance/ReconnectionStrategyRule.d.ts.map +1 -1
- package/dist/src/rules/performance/ReconnectionStrategyRule.js +44 -24
- package/dist/src/rules/performance/ReconnectionStrategyRule.js.map +1 -1
- package/dist/src/rules/security/ConnectorCredentialsSecuredRule.d.ts +36 -0
- package/dist/src/rules/security/ConnectorCredentialsSecuredRule.d.ts.map +1 -0
- package/dist/src/rules/security/ConnectorCredentialsSecuredRule.js +124 -0
- package/dist/src/rules/security/ConnectorCredentialsSecuredRule.js.map +1 -0
- package/dist/src/rules/security/HardcodedCredentialsRule.d.ts +4 -0
- package/dist/src/rules/security/HardcodedCredentialsRule.d.ts.map +1 -1
- package/dist/src/rules/security/HardcodedCredentialsRule.js +15 -0
- package/dist/src/rules/security/HardcodedCredentialsRule.js.map +1 -1
- package/dist/src/rules/security/SecurePropertiesEncryptionRule.d.ts +25 -0
- package/dist/src/rules/security/SecurePropertiesEncryptionRule.d.ts.map +1 -0
- package/dist/src/rules/security/SecurePropertiesEncryptionRule.js +59 -0
- package/dist/src/rules/security/SecurePropertiesEncryptionRule.js.map +1 -0
- package/dist/src/rules/security/SecurePropertiesKeyRule.d.ts +23 -0
- package/dist/src/rules/security/SecurePropertiesKeyRule.d.ts.map +1 -0
- package/dist/src/rules/security/SecurePropertiesKeyRule.js +45 -0
- package/dist/src/rules/security/SecurePropertiesKeyRule.js.map +1 -0
- package/dist/src/rules/security/TlsKeystorePasswordRule.d.ts +25 -0
- package/dist/src/rules/security/TlsKeystorePasswordRule.d.ts.map +1 -0
- package/dist/src/rules/security/TlsKeystorePasswordRule.js +63 -0
- package/dist/src/rules/security/TlsKeystorePasswordRule.js.map +1 -0
- package/dist/src/rules/standards/ApikitRouteVariableConsistencyRule.d.ts +26 -0
- package/dist/src/rules/standards/ApikitRouteVariableConsistencyRule.d.ts.map +1 -0
- package/dist/src/rules/standards/ApikitRouteVariableConsistencyRule.js +61 -0
- package/dist/src/rules/standards/ApikitRouteVariableConsistencyRule.js.map +1 -0
- package/dist/src/rules/standards/ConfigPropertiesOrderingRule.d.ts +34 -0
- package/dist/src/rules/standards/ConfigPropertiesOrderingRule.d.ts.map +1 -0
- package/dist/src/rules/standards/ConfigPropertiesOrderingRule.js +76 -0
- package/dist/src/rules/standards/ConfigPropertiesOrderingRule.js.map +1 -0
- package/dist/src/rules/standards/MissingEnvPropertiesDeclarationRule.d.ts +25 -0
- package/dist/src/rules/standards/MissingEnvPropertiesDeclarationRule.d.ts.map +1 -0
- package/dist/src/rules/standards/MissingEnvPropertiesDeclarationRule.js +111 -0
- package/dist/src/rules/standards/MissingEnvPropertiesDeclarationRule.js.map +1 -0
- package/dist/src/rules/yaml/YamlRules.d.ts +6 -2
- package/dist/src/rules/yaml/YamlRules.d.ts.map +1 -1
- package/dist/src/rules/yaml/YamlRules.js +15 -11
- package/dist/src/rules/yaml/YamlRules.js.map +1 -1
- package/dist/src/types/Rule.d.ts +13 -0
- package/dist/src/types/Rule.d.ts.map +1 -1
- package/docs/best-practices/rules-catalog.md +337 -29
- package/docs/linter/architecture.md +119 -64
- package/package.json +1 -1
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConfigPropertiesOrderingRule = void 0;
|
|
4
|
+
const BaseRule_1 = require("../base/BaseRule");
|
|
5
|
+
/**
|
|
6
|
+
* CFG-001: Configuration Properties Ordering
|
|
7
|
+
*
|
|
8
|
+
* Mule configuration-properties elements should be loaded in the correct
|
|
9
|
+
* order: global defaults first, then environment-specific overrides, then
|
|
10
|
+
* secure properties. This ensures predictable property resolution (Mule
|
|
11
|
+
* uses last-wins for overlapping keys).
|
|
12
|
+
*
|
|
13
|
+
* Expected ordering pattern:
|
|
14
|
+
* 1. config/global.yaml (or common.yaml, defaults.yaml)
|
|
15
|
+
* 2. config/${mule.env}.yaml (environment-specific)
|
|
16
|
+
* 3. secure-properties:config (encrypted secrets)
|
|
17
|
+
* 4. entity-config/*.yaml (optional, additive)
|
|
18
|
+
*
|
|
19
|
+
* This rule flags when env-specific properties appear before global
|
|
20
|
+
* defaults, which would cause globals to override env-specific values.
|
|
21
|
+
*/
|
|
22
|
+
class ConfigPropertiesOrderingRule extends BaseRule_1.BaseRule {
|
|
23
|
+
id = 'CFG-001';
|
|
24
|
+
name = 'Configuration Properties Ordering';
|
|
25
|
+
description = 'Configuration properties should be loaded in correct order: global before environment-specific';
|
|
26
|
+
severity = 'info';
|
|
27
|
+
category = 'standards';
|
|
28
|
+
/** Patterns that identify global/default property files */
|
|
29
|
+
GLOBAL_PATTERNS = [
|
|
30
|
+
'global.yaml',
|
|
31
|
+
'global.properties',
|
|
32
|
+
'common.yaml',
|
|
33
|
+
'common.properties',
|
|
34
|
+
'defaults.yaml',
|
|
35
|
+
'defaults.properties',
|
|
36
|
+
];
|
|
37
|
+
/** Patterns that identify env-specific property files */
|
|
38
|
+
ENV_PATTERNS = ['${mule.env}', '${env}', '${mule.environment}'];
|
|
39
|
+
validate(doc, _context) {
|
|
40
|
+
const issues = [];
|
|
41
|
+
// Find all configuration-properties elements in document order
|
|
42
|
+
const configProps = this.select('//*[local-name()="configuration-properties"]', doc);
|
|
43
|
+
if (configProps.length < 2) {
|
|
44
|
+
return issues; // Not enough elements to have ordering issues
|
|
45
|
+
}
|
|
46
|
+
let globalIndex = -1;
|
|
47
|
+
let envIndex = -1;
|
|
48
|
+
for (let i = 0; i < configProps.length; i++) {
|
|
49
|
+
const file = this.getAttribute(configProps[i], 'file') ?? '';
|
|
50
|
+
const fileLower = file.toLowerCase();
|
|
51
|
+
if (this.isGlobalFile(fileLower)) {
|
|
52
|
+
globalIndex = i;
|
|
53
|
+
}
|
|
54
|
+
if (this.isEnvSpecificFile(file)) {
|
|
55
|
+
if (envIndex === -1) {
|
|
56
|
+
envIndex = i; // Track the first env-specific file
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Flag if env-specific appears before global defaults
|
|
61
|
+
if (globalIndex >= 0 && envIndex >= 0 && envIndex < globalIndex) {
|
|
62
|
+
issues.push(this.createIssue(configProps[envIndex], 'Environment-specific properties file is loaded before global defaults', {
|
|
63
|
+
suggestion: 'Load global/common properties first (e.g., config/global.yaml) before environment-specific files (e.g., config/${mule.env}.yaml) to ensure correct override behavior',
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
66
|
+
return issues;
|
|
67
|
+
}
|
|
68
|
+
isGlobalFile(fileLower) {
|
|
69
|
+
return this.GLOBAL_PATTERNS.some((p) => fileLower.includes(p));
|
|
70
|
+
}
|
|
71
|
+
isEnvSpecificFile(file) {
|
|
72
|
+
return this.ENV_PATTERNS.some((p) => file.includes(p));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.ConfigPropertiesOrderingRule = ConfigPropertiesOrderingRule;
|
|
76
|
+
//# sourceMappingURL=ConfigPropertiesOrderingRule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigPropertiesOrderingRule.js","sourceRoot":"","sources":["../../../../src/rules/standards/ConfigPropertiesOrderingRule.ts"],"names":[],"mappings":";;;AACA,+CAA4C;AAE5C;;;;;;;;;;;;;;;;GAgBG;AACH,MAAa,4BAA6B,SAAQ,mBAAQ;IACxD,EAAE,GAAG,SAAS,CAAC;IACf,IAAI,GAAG,mCAAmC,CAAC;IAC3C,WAAW,GACT,gGAAgG,CAAC;IACnG,QAAQ,GAAG,MAAe,CAAC;IAC3B,QAAQ,GAAG,WAAoB,CAAC;IAEhC,2DAA2D;IAC1C,eAAe,GAAG;QACjC,aAAa;QACb,mBAAmB;QACnB,aAAa;QACb,mBAAmB;QACnB,eAAe;QACf,qBAAqB;KACtB,CAAC;IAEF,yDAAyD;IACxC,YAAY,GAAG,CAAC,aAAa,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC;IAEjF,QAAQ,CAAC,GAAa,EAAE,QAA2B;QACjD,MAAM,MAAM,GAAY,EAAE,CAAC;QAE3B,+DAA+D;QAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,8CAA8C,EAAE,GAAG,CAAC,CAAC;QAErF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,MAAM,CAAC,CAAC,8CAA8C;QAC/D,CAAC;QAED,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC;QACrB,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;QAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;YAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAErC,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;gBACjC,WAAW,GAAG,CAAC,CAAC;YAClB,CAAC;YAED,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;oBACpB,QAAQ,GAAG,CAAC,CAAC,CAAC,oCAAoC;gBACpD,CAAC;YACH,CAAC;QACH,CAAC;QAED,sDAAsD;QACtD,IAAI,WAAW,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,GAAG,WAAW,EAAE,CAAC;YAChE,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,WAAW,CACd,WAAW,CAAC,QAAQ,CAAC,EACrB,uEAAuE,EACvE;gBACE,UAAU,EACR,sKAAsK;aACzK,CACF,CACF,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,YAAY,CAAC,SAAiB;QACpC,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IAEO,iBAAiB,CAAC,IAAY;QACpC,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC;CACF;AAzED,oEAyEC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ValidationContext, Issue, IssueType } from '../../types';
|
|
2
|
+
import { ProjectRule } from '../base/ProjectRule';
|
|
3
|
+
/**
|
|
4
|
+
* CFG-002: Missing Environment Properties Declaration
|
|
5
|
+
*
|
|
6
|
+
* Projects using configuration-properties with environment placeholders
|
|
7
|
+
* (e.g., ${mule.env}.yaml) should have at least dev and prod property files.
|
|
8
|
+
* Missing environment files cause deployment failures.
|
|
9
|
+
*
|
|
10
|
+
* Checks that for each pattern like `${mule.env}.yaml`, the project has
|
|
11
|
+
* at minimum: dev.yaml and prod.yaml (or the equivalent with the pattern).
|
|
12
|
+
*/
|
|
13
|
+
export declare class MissingEnvPropertiesDeclarationRule extends ProjectRule {
|
|
14
|
+
id: string;
|
|
15
|
+
name: string;
|
|
16
|
+
description: string;
|
|
17
|
+
severity: "warning";
|
|
18
|
+
category: "standards";
|
|
19
|
+
issueType: IssueType;
|
|
20
|
+
/** Required environments */
|
|
21
|
+
private readonly REQUIRED_ENVS;
|
|
22
|
+
protected validateProject(context: ValidationContext): Issue[];
|
|
23
|
+
private listFiles;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=MissingEnvPropertiesDeclarationRule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MissingEnvPropertiesDeclarationRule.d.ts","sourceRoot":"","sources":["../../../../src/rules/standards/MissingEnvPropertiesDeclarationRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIlD;;;;;;;;;GASG;AACH,qBAAa,mCAAoC,SAAQ,WAAW;IAClE,EAAE,SAAa;IACf,IAAI,SAAoC;IACxC,WAAW,SAC+E;IAC1F,QAAQ,EAAG,SAAS,CAAU;IAC9B,QAAQ,EAAG,WAAW,CAAU;IAChC,SAAS,EAAE,SAAS,CAAS;IAE7B,4BAA4B;IAC5B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmB;IAEjD,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,KAAK,EAAE;IA6D9D,OAAO,CAAC,SAAS;CAOlB"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.MissingEnvPropertiesDeclarationRule = void 0;
|
|
37
|
+
const ProjectRule_1 = require("../base/ProjectRule");
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
/**
|
|
41
|
+
* CFG-002: Missing Environment Properties Declaration
|
|
42
|
+
*
|
|
43
|
+
* Projects using configuration-properties with environment placeholders
|
|
44
|
+
* (e.g., ${mule.env}.yaml) should have at least dev and prod property files.
|
|
45
|
+
* Missing environment files cause deployment failures.
|
|
46
|
+
*
|
|
47
|
+
* Checks that for each pattern like `${mule.env}.yaml`, the project has
|
|
48
|
+
* at minimum: dev.yaml and prod.yaml (or the equivalent with the pattern).
|
|
49
|
+
*/
|
|
50
|
+
class MissingEnvPropertiesDeclarationRule extends ProjectRule_1.ProjectRule {
|
|
51
|
+
id = 'CFG-002';
|
|
52
|
+
name = 'Missing Environment Properties';
|
|
53
|
+
description = 'Projects with environment-parameterized configs must have dev and prod property files';
|
|
54
|
+
severity = 'warning';
|
|
55
|
+
category = 'standards';
|
|
56
|
+
issueType = 'bug';
|
|
57
|
+
/** Required environments */
|
|
58
|
+
REQUIRED_ENVS = ['dev', 'prod'];
|
|
59
|
+
validateProject(context) {
|
|
60
|
+
const issues = [];
|
|
61
|
+
const resourceDir = path.join(context.projectRoot, 'src', 'main', 'resources');
|
|
62
|
+
if (!fs.existsSync(resourceDir)) {
|
|
63
|
+
return issues; // Not a standard Mule project layout
|
|
64
|
+
}
|
|
65
|
+
// Look for YAML files in the resources directory
|
|
66
|
+
const files = this.listFiles(resourceDir);
|
|
67
|
+
const yamlFiles = files.filter((f) => f.endsWith('.yaml') || f.endsWith('.yml'));
|
|
68
|
+
// Check if any file looks like an env-parameterized name
|
|
69
|
+
// Common patterns: dev.yaml, prod.yaml, local.yaml, sandbox.yaml
|
|
70
|
+
const envFilePattern = /^(dev|prod|local|sandbox|qa|staging|uat|sit)\.(yaml|yml)$/;
|
|
71
|
+
const envFilesFound = yamlFiles
|
|
72
|
+
.map((f) => path.basename(f))
|
|
73
|
+
.filter((f) => envFilePattern.test(f));
|
|
74
|
+
// If there are env files, check that both dev and prod exist
|
|
75
|
+
if (envFilesFound.length > 0) {
|
|
76
|
+
for (const requiredEnv of this.REQUIRED_ENVS) {
|
|
77
|
+
const hasEnv = envFilesFound.some((f) => f.startsWith(`${requiredEnv}.`));
|
|
78
|
+
if (!hasEnv) {
|
|
79
|
+
issues.push(this.createProjectIssue(`Missing ${requiredEnv}.yaml property file — project has environment-specific configs but no ${requiredEnv} environment`, {
|
|
80
|
+
suggestion: `Create src/main/resources/${requiredEnv}.yaml with environment-specific properties`,
|
|
81
|
+
}));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Also check for secure property files if secure-*.yaml pattern is used
|
|
86
|
+
const secureFiles = yamlFiles
|
|
87
|
+
.map((f) => path.basename(f))
|
|
88
|
+
.filter((f) => f.startsWith('secure-'));
|
|
89
|
+
if (secureFiles.length > 0) {
|
|
90
|
+
for (const requiredEnv of this.REQUIRED_ENVS) {
|
|
91
|
+
const hasSecureEnv = secureFiles.some((f) => f === `secure-${requiredEnv}.yaml` || f === `secure-${requiredEnv}.yml`);
|
|
92
|
+
if (!hasSecureEnv) {
|
|
93
|
+
issues.push(this.createProjectIssue(`Missing secure-${requiredEnv}.yaml — project uses secure properties but no ${requiredEnv} secure config`, {
|
|
94
|
+
suggestion: `Create src/main/resources/secure-${requiredEnv}.yaml with encrypted secrets for the ${requiredEnv} environment`,
|
|
95
|
+
}));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return issues;
|
|
100
|
+
}
|
|
101
|
+
listFiles(dir) {
|
|
102
|
+
try {
|
|
103
|
+
return fs.readdirSync(dir).map((f) => path.join(dir, f));
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return [];
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
exports.MissingEnvPropertiesDeclarationRule = MissingEnvPropertiesDeclarationRule;
|
|
111
|
+
//# sourceMappingURL=MissingEnvPropertiesDeclarationRule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MissingEnvPropertiesDeclarationRule.js","sourceRoot":"","sources":["../../../../src/rules/standards/MissingEnvPropertiesDeclarationRule.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
import { ValidationContext, Issue, IssueType } from '../../types';
|
|
2
2
|
import { BaseRule } from '../base/BaseRule';
|
|
3
|
+
import { ProjectRule } from '../base/ProjectRule';
|
|
3
4
|
/**
|
|
4
5
|
* YAML-001: Environment Properties Files
|
|
5
6
|
*
|
|
6
7
|
* Checks that environment-specific YAML files exist.
|
|
8
|
+
*
|
|
9
|
+
* This is a ProjectRule — it runs once per scan to avoid producing
|
|
10
|
+
* N identical issues (one per XML file).
|
|
7
11
|
*/
|
|
8
|
-
export declare class EnvironmentFilesRule extends
|
|
12
|
+
export declare class EnvironmentFilesRule extends ProjectRule {
|
|
9
13
|
id: string;
|
|
10
14
|
name: string;
|
|
11
15
|
description: string;
|
|
12
16
|
severity: "warning";
|
|
13
17
|
category: "standards";
|
|
14
|
-
|
|
18
|
+
protected validateProject(context: ValidationContext): Issue[];
|
|
15
19
|
}
|
|
16
20
|
/**
|
|
17
21
|
* YAML-003: Property Naming Convention
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"YamlRules.d.ts","sourceRoot":"","sources":["../../../../src/rules/yaml/YamlRules.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"YamlRules.d.ts","sourceRoot":"","sources":["../../../../src/rules/yaml/YamlRules.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD;;;;;;;GAOG;AACH,qBAAa,oBAAqB,SAAQ,WAAW;IACnD,EAAE,SAAc;IAChB,IAAI,SAAkC;IACtC,WAAW,SAA2D;IACtE,QAAQ,EAAG,SAAS,CAAU;IAC9B,QAAQ,EAAG,WAAW,CAAU;IAEhC,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,KAAK,EAAE;CA6C/D;AAED;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,QAAQ;IAC9C,EAAE,SAAc;IAChB,IAAI,SAAgC;IACpC,WAAW,SAA0D;IACrE,QAAQ,EAAG,MAAM,CAAU;IAC3B,QAAQ,EAAG,WAAW,CAAU;IAEhC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,GAAG,KAAK,EAAE;IA6B7D,OAAO,CAAC,mBAAmB;IAc3B,OAAO,CAAC,aAAa;CAuBtB;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,QAAQ;IAChD,EAAE,SAAc;IAChB,IAAI,SAA0B;IAC9B,WAAW,SAA0D;IACrE,QAAQ,EAAG,OAAO,CAAU;IAC5B,QAAQ,EAAG,UAAU,CAAU;IAC/B,SAAS,EAAE,SAAS,CAAmB;IAEvC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,GAAG,KAAK,EAAE;IAuB7D,OAAO,CAAC,wBAAwB;IA6BhC,OAAO,CAAC,aAAa;CAuBtB"}
|
|
@@ -37,19 +37,23 @@ exports.PlaintextSecretsRule = exports.PropertyNamingRule = exports.EnvironmentF
|
|
|
37
37
|
const fs = __importStar(require("fs"));
|
|
38
38
|
const path = __importStar(require("path"));
|
|
39
39
|
const BaseRule_1 = require("../base/BaseRule");
|
|
40
|
+
const ProjectRule_1 = require("../base/ProjectRule");
|
|
40
41
|
const YamlParser_1 = require("../../core/YamlParser");
|
|
41
42
|
/**
|
|
42
43
|
* YAML-001: Environment Properties Files
|
|
43
44
|
*
|
|
44
45
|
* Checks that environment-specific YAML files exist.
|
|
46
|
+
*
|
|
47
|
+
* This is a ProjectRule — it runs once per scan to avoid producing
|
|
48
|
+
* N identical issues (one per XML file).
|
|
45
49
|
*/
|
|
46
|
-
class EnvironmentFilesRule extends
|
|
50
|
+
class EnvironmentFilesRule extends ProjectRule_1.ProjectRule {
|
|
47
51
|
id = 'YAML-001';
|
|
48
52
|
name = 'Environment Properties Files';
|
|
49
53
|
description = 'Environment-specific YAML property files should exist';
|
|
50
54
|
severity = 'warning';
|
|
51
55
|
category = 'standards';
|
|
52
|
-
|
|
56
|
+
validateProject(context) {
|
|
53
57
|
const issues = [];
|
|
54
58
|
const configDir = path.join(context.projectRoot, 'src/main/resources');
|
|
55
59
|
const configSubDir = path.join(configDir, 'config');
|
|
@@ -77,13 +81,9 @@ class EnvironmentFilesRule extends BaseRule_1.BaseRule {
|
|
|
77
81
|
existingFiles.has(`config-${env}.yml`) ||
|
|
78
82
|
existingFiles.has(`${env}-properties.yaml`);
|
|
79
83
|
if (!hasEnvFile) {
|
|
80
|
-
issues.push({
|
|
81
|
-
line: 1,
|
|
82
|
-
message: `Missing environment properties file for "${env}"`,
|
|
83
|
-
ruleId: this.id,
|
|
84
|
-
severity: this.severity,
|
|
84
|
+
issues.push(this.createProjectIssue(`Missing environment properties file for "${env}"`, {
|
|
85
85
|
suggestion: `Create ${env}.yaml or config-${env}.yaml in src/main/resources/`,
|
|
86
|
-
});
|
|
86
|
+
}));
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
return issues;
|
|
@@ -127,9 +127,13 @@ class PropertyNamingRule extends BaseRule_1.BaseRule {
|
|
|
127
127
|
isValidPropertyName(key) {
|
|
128
128
|
// Valid: db.host, api.client.timeout, http.port, salesforce.authorizationUrl
|
|
129
129
|
// Valid: external-sapi.basepath, ramp.polling.max_retries
|
|
130
|
-
//
|
|
131
|
-
//
|
|
132
|
-
|
|
130
|
+
// Valid: netsuite.NSQLPath (uppercase segments for vendor conventions)
|
|
131
|
+
// Invalid: completely random strings without dots (unless single word key)
|
|
132
|
+
//
|
|
133
|
+
// Each segment must start with a letter (any case) and can contain
|
|
134
|
+
// letters, digits, underscores, and hyphens. Segments are separated by dots.
|
|
135
|
+
return (/^[a-zA-Z][a-zA-Z0-9_-]*(\.[a-zA-Z][a-zA-Z0-9_-]*)+$/.test(key) ||
|
|
136
|
+
/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(key)); // Single word keys OK too
|
|
133
137
|
}
|
|
134
138
|
findYamlFiles(dir) {
|
|
135
139
|
const files = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"YamlRules.js","sourceRoot":"","sources":["../../../../src/rules/yaml/YamlRules.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAE7B,+CAA4C;AAC5C,sDAAmD;AAEnD
|
|
1
|
+
{"version":3,"file":"YamlRules.js","sourceRoot":"","sources":["../../../../src/rules/yaml/YamlRules.ts"],"names":[],"mappings":"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"}
|
package/dist/src/types/Rule.d.ts
CHANGED
|
@@ -43,6 +43,11 @@ export interface RuleConfig {
|
|
|
43
43
|
/** Rule-specific options */
|
|
44
44
|
options?: Record<string, unknown>;
|
|
45
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Detected project layer in MuleSoft API-led connectivity architecture.
|
|
48
|
+
* Used to auto-adjust rule severity and enable/disable rules per layer.
|
|
49
|
+
*/
|
|
50
|
+
export type ProjectLayer = 'sapi' | 'papi' | 'eapi' | 'library' | 'batch' | 'unknown';
|
|
46
51
|
/**
|
|
47
52
|
* Project-level context derived from a pre-scan of all files.
|
|
48
53
|
* Populated by LintEngine before per-file rule execution.
|
|
@@ -52,6 +57,8 @@ export interface ProjectContext {
|
|
|
52
57
|
hasHttpListener: boolean;
|
|
53
58
|
/** True if any file contains an apikit:router or apikit:console element */
|
|
54
59
|
hasApikitRouter: boolean;
|
|
60
|
+
/** Detected project layer based on naming conventions and content */
|
|
61
|
+
projectLayer?: ProjectLayer;
|
|
55
62
|
}
|
|
56
63
|
/**
|
|
57
64
|
* Context passed to each rule during validation
|
|
@@ -71,6 +78,12 @@ export interface ValidationContext {
|
|
|
71
78
|
* When undefined (e.g. standalone file scan), intra-file refs only.
|
|
72
79
|
*/
|
|
73
80
|
allFlowRefs?: Set<string>;
|
|
81
|
+
/**
|
|
82
|
+
* Set of all flow/sub-flow names defined across all project files.
|
|
83
|
+
* Populated during the LintEngine pre-scan phase.
|
|
84
|
+
* Used by HYG-004 (FlowRefTargetExistsRule) for cross-file validation.
|
|
85
|
+
*/
|
|
86
|
+
allFlowNames?: Set<string>;
|
|
74
87
|
/**
|
|
75
88
|
* Project-level feature flags derived from a pre-scan of all files.
|
|
76
89
|
* Rules that only apply to HTTP-exposed projects (e.g. MULE-005) should
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Rule.d.ts","sourceRoot":"","sources":["../../../src/types/Rule.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,gBAAgB,GAChB,QAAQ,GACR,UAAU,GACV,SAAS,GACT,MAAM,GACN,aAAa,GACb,eAAe,GACf,WAAW,GACX,YAAY,GACZ,WAAW,GACX,WAAW,GACX,SAAS,GACT,YAAY,GACZ,YAAY,GACZ,cAAc,CAAC;AAEnB;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,KAAK,GAAG,eAAe,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,QAAQ,EAAE,QAAQ,CAAC;IACnB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,kCAAkC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,eAAe,EAAE,OAAO,CAAC;IACzB,2EAA2E;IAC3E,eAAe,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Rule.d.ts","sourceRoot":"","sources":["../../../src/types/Rule.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,gBAAgB,GAChB,QAAQ,GACR,UAAU,GACV,SAAS,GACT,MAAM,GACN,aAAa,GACb,eAAe,GACf,WAAW,GACX,YAAY,GACZ,WAAW,GACX,WAAW,GACX,SAAS,GACT,YAAY,GACZ,YAAY,GACZ,cAAc,CAAC;AAEnB;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,KAAK,GAAG,eAAe,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,QAAQ,EAAE,QAAQ,CAAC;IACnB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,kCAAkC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAEtF;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,eAAe,EAAE,OAAO,CAAC;IACzB,2EAA2E;IAC3E,eAAe,EAAE,OAAO,CAAC;IACzB,qEAAqE;IACrE,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,MAAM,EAAE,UAAU,CAAC;IACnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B;;;;OAIG;IACH,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B;;;;OAIG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,QAAQ,EAAE,QAAQ,CAAC;IACnB,uCAAuC;IACvC,QAAQ,EAAE,YAAY,CAAC;IACvB,gEAAgE;IAChE,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,GAAG,KAAK,EAAE,CAAC;CAC9D"}
|