@sfdxy/mule-lint 1.12.0 → 1.12.1
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 +2 -1
- package/dist/package.json +1 -1
- package/dist/src/rules/api-led/SingleSystemSapiRule.d.ts +29 -0
- package/dist/src/rules/api-led/SingleSystemSapiRule.d.ts.map +1 -0
- package/dist/src/rules/api-led/SingleSystemSapiRule.js +231 -0
- package/dist/src/rules/api-led/SingleSystemSapiRule.js.map +1 -0
- package/dist/src/rules/index.d.ts.map +1 -1
- package/dist/src/rules/index.js +3 -1
- package/dist/src/rules/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -194,6 +194,7 @@ mule-lint src/main/mule -f sarif -o results.sarif
|
|
|
194
194
|
| API-001 | Experience Layer | Info | API-Led | Experience API patterns |
|
|
195
195
|
| API-002 | Process Layer | Info | API-Led | Process layer orchestration |
|
|
196
196
|
| API-003 | System Layer | Info | API-Led | System layer connections |
|
|
197
|
+
| API-004 | Single SAPI | Warning | API-Led | Single system per SAPI |
|
|
197
198
|
|
|
198
199
|
### Experimental Rules
|
|
199
200
|
|
|
@@ -216,7 +217,7 @@ mule-lint src/main/mule -f sarif -o results.sarif
|
|
|
216
217
|
| ERR-001 | Try Scope | Info | Error Handling | Complex operations should use Try scope |
|
|
217
218
|
| PERF-002 | Connection Pooling | Warning | Performance | DB/HTTP should configure connection pools |
|
|
218
219
|
|
|
219
|
-
**Total:
|
|
220
|
+
**Total: 49 rules** across 13 categories.
|
|
220
221
|
|
|
221
222
|
See [Rules Catalog](docs/best-practices/rules-catalog.md) for detailed documentation.
|
|
222
223
|
|
package/dist/package.json
CHANGED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Issue, ValidationContext } from '../../types';
|
|
2
|
+
import { ProjectRule } from '../base/ProjectRule';
|
|
3
|
+
/**
|
|
4
|
+
* API-004: Single System Per SAPI
|
|
5
|
+
*
|
|
6
|
+
* Enforces the MuleSoft best practice that a System API (SAPI) should
|
|
7
|
+
* integrate with only one backend system. This promotes:
|
|
8
|
+
* - Clear separation of concerns
|
|
9
|
+
* - Easier maintenance and testing
|
|
10
|
+
* - Better reusability across the organization
|
|
11
|
+
* - Simplified error handling and retry logic
|
|
12
|
+
*/
|
|
13
|
+
export declare class SingleSystemSapiRule extends ProjectRule {
|
|
14
|
+
id: string;
|
|
15
|
+
name: string;
|
|
16
|
+
description: string;
|
|
17
|
+
severity: "warning";
|
|
18
|
+
category: "api-led";
|
|
19
|
+
protected validateProject(context: ValidationContext): Issue[];
|
|
20
|
+
/**
|
|
21
|
+
* Recursively find all XML files in a directory
|
|
22
|
+
*/
|
|
23
|
+
private findXmlFiles;
|
|
24
|
+
/**
|
|
25
|
+
* Detect external systems from XML content and document
|
|
26
|
+
*/
|
|
27
|
+
private detectExternalSystems;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=SingleSystemSapiRule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SingleSystemSapiRule.d.ts","sourceRoot":"","sources":["../../../../src/rules/api-led/SingleSystemSapiRule.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAoDlD;;;;;;;;;GASG;AACH,qBAAa,oBAAqB,SAAQ,WAAW;IACjD,EAAE,SAAa;IACf,IAAI,SAA4B;IAChC,WAAW,SAA8D;IACzE,QAAQ,EAAG,SAAS,CAAU;IAC9B,QAAQ,EAAG,SAAS,CAAU;IAE9B,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,KAAK,EAAE;IAoE9D;;OAEG;IACH,OAAO,CAAC,YAAY;IAoBpB;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAmDhC"}
|
|
@@ -0,0 +1,231 @@
|
|
|
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.SingleSystemSapiRule = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const ProjectRule_1 = require("../base/ProjectRule");
|
|
40
|
+
const XmlParser_1 = require("../../core/XmlParser");
|
|
41
|
+
/**
|
|
42
|
+
* Known external system connector patterns
|
|
43
|
+
* Maps connector namespace prefix to a human-readable system name
|
|
44
|
+
*/
|
|
45
|
+
const EXTERNAL_SYSTEM_CONNECTORS = {
|
|
46
|
+
netsuite: 'NetSuite',
|
|
47
|
+
'netsuite-restlet': 'NetSuite Restlet',
|
|
48
|
+
salesforce: 'Salesforce',
|
|
49
|
+
db: 'Database',
|
|
50
|
+
sap: 'SAP',
|
|
51
|
+
workday: 'Workday',
|
|
52
|
+
servicenow: 'ServiceNow',
|
|
53
|
+
jms: 'JMS',
|
|
54
|
+
amqp: 'AMQP',
|
|
55
|
+
kafka: 'Kafka',
|
|
56
|
+
vm: 'VM Queue',
|
|
57
|
+
sftp: 'SFTP',
|
|
58
|
+
ftp: 'FTP',
|
|
59
|
+
file: 'File System',
|
|
60
|
+
email: 'Email',
|
|
61
|
+
s3: 'Amazon S3',
|
|
62
|
+
sqs: 'Amazon SQS',
|
|
63
|
+
dynamodb: 'Amazon DynamoDB',
|
|
64
|
+
azure: 'Azure',
|
|
65
|
+
mongodb: 'MongoDB',
|
|
66
|
+
redis: 'Redis',
|
|
67
|
+
ldap: 'LDAP',
|
|
68
|
+
soap: 'SOAP',
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Connectors to ignore when counting external systems
|
|
72
|
+
* These are infrastructure/utility connectors, not external business systems
|
|
73
|
+
*/
|
|
74
|
+
const IGNORED_CONNECTORS = new Set([
|
|
75
|
+
'http', // HTTP listener/request (infrastructure)
|
|
76
|
+
'apikit', // API Kit router
|
|
77
|
+
'secure-properties', // Secure properties
|
|
78
|
+
'os', // Object Store
|
|
79
|
+
'json-logger', // Logging
|
|
80
|
+
'ee', // Enterprise Edition
|
|
81
|
+
'tls', // TLS context
|
|
82
|
+
'oauth', // OAuth
|
|
83
|
+
'validation', // Validation module
|
|
84
|
+
'scripting', // Scripting
|
|
85
|
+
'batch', // Batch processing
|
|
86
|
+
'scheduler', // Scheduler
|
|
87
|
+
]);
|
|
88
|
+
/**
|
|
89
|
+
* API-004: Single System Per SAPI
|
|
90
|
+
*
|
|
91
|
+
* Enforces the MuleSoft best practice that a System API (SAPI) should
|
|
92
|
+
* integrate with only one backend system. This promotes:
|
|
93
|
+
* - Clear separation of concerns
|
|
94
|
+
* - Easier maintenance and testing
|
|
95
|
+
* - Better reusability across the organization
|
|
96
|
+
* - Simplified error handling and retry logic
|
|
97
|
+
*/
|
|
98
|
+
class SingleSystemSapiRule extends ProjectRule_1.ProjectRule {
|
|
99
|
+
id = 'API-004';
|
|
100
|
+
name = 'Single System Per SAPI';
|
|
101
|
+
description = 'System API should integrate with only one backend system';
|
|
102
|
+
severity = 'warning';
|
|
103
|
+
category = 'api-led';
|
|
104
|
+
validateProject(context) {
|
|
105
|
+
const issues = [];
|
|
106
|
+
const projectRoot = context.projectRoot;
|
|
107
|
+
// Check if this looks like a SAPI (System API)
|
|
108
|
+
const projectName = path.basename(projectRoot).toLowerCase();
|
|
109
|
+
const isSapi = projectName.includes('-sapi') ||
|
|
110
|
+
projectName.includes('-sys-') ||
|
|
111
|
+
projectName.includes('-system-');
|
|
112
|
+
// Only apply this rule to System APIs
|
|
113
|
+
if (!isSapi) {
|
|
114
|
+
return issues;
|
|
115
|
+
}
|
|
116
|
+
// Find all Mule XML files
|
|
117
|
+
const muleDir = path.join(projectRoot, 'src', 'main', 'mule');
|
|
118
|
+
if (!fs.existsSync(muleDir)) {
|
|
119
|
+
return issues;
|
|
120
|
+
}
|
|
121
|
+
const detectedSystems = new Map(); // system -> files where found
|
|
122
|
+
// Scan all XML files
|
|
123
|
+
const xmlFiles = this.findXmlFiles(muleDir);
|
|
124
|
+
for (const xmlFile of xmlFiles) {
|
|
125
|
+
try {
|
|
126
|
+
const content = fs.readFileSync(xmlFile, 'utf-8');
|
|
127
|
+
const result = (0, XmlParser_1.parseXml)(content);
|
|
128
|
+
if (!result.success || !result.document)
|
|
129
|
+
continue;
|
|
130
|
+
// Extract connector namespaces from the root element
|
|
131
|
+
const systems = this.detectExternalSystems(content, result.document);
|
|
132
|
+
for (const system of systems) {
|
|
133
|
+
const files = detectedSystems.get(system) || [];
|
|
134
|
+
files.push(path.relative(projectRoot, xmlFile));
|
|
135
|
+
detectedSystems.set(system, files);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
// Skip files that can't be parsed
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// If more than one external system is detected, create an issue
|
|
143
|
+
if (detectedSystems.size > 1) {
|
|
144
|
+
const systemList = Array.from(detectedSystems.keys()).sort();
|
|
145
|
+
const details = systemList
|
|
146
|
+
.map((sys) => {
|
|
147
|
+
const files = detectedSystems.get(sys);
|
|
148
|
+
return `${sys} (${files.join(', ')})`;
|
|
149
|
+
})
|
|
150
|
+
.join(', ');
|
|
151
|
+
issues.push(this.createProjectIssue(`System API connects to ${detectedSystems.size} backend systems: ${systemList.join(', ')}`, {
|
|
152
|
+
suggestion: `Following MuleSoft best practices, a System API should integrate with only one backend system. Consider splitting into separate SAPIs: ${details}`,
|
|
153
|
+
severity: 'warning',
|
|
154
|
+
}));
|
|
155
|
+
}
|
|
156
|
+
return issues;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Recursively find all XML files in a directory
|
|
160
|
+
*/
|
|
161
|
+
findXmlFiles(dir) {
|
|
162
|
+
const files = [];
|
|
163
|
+
try {
|
|
164
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
165
|
+
for (const entry of entries) {
|
|
166
|
+
const fullPath = path.join(dir, entry.name);
|
|
167
|
+
if (entry.isDirectory()) {
|
|
168
|
+
files.push(...this.findXmlFiles(fullPath));
|
|
169
|
+
}
|
|
170
|
+
else if (entry.isFile() && entry.name.endsWith('.xml')) {
|
|
171
|
+
files.push(fullPath);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
// Ignore directories we can't read
|
|
177
|
+
}
|
|
178
|
+
return files;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Detect external systems from XML content and document
|
|
182
|
+
*/
|
|
183
|
+
detectExternalSystems(content, _doc) {
|
|
184
|
+
const systems = [];
|
|
185
|
+
// Extract namespace declarations from the content
|
|
186
|
+
const namespacePattern = /xmlns:([a-zA-Z0-9-]+)="[^"]*mulesoft\.org\/schema\/mule\/([^"]+)"/g;
|
|
187
|
+
let match;
|
|
188
|
+
while ((match = namespacePattern.exec(content)) !== null) {
|
|
189
|
+
const prefix = match[1];
|
|
190
|
+
const schemaPath = match[2];
|
|
191
|
+
// Skip ignored connectors
|
|
192
|
+
if (IGNORED_CONNECTORS.has(prefix))
|
|
193
|
+
continue;
|
|
194
|
+
// Check if this is a known external system
|
|
195
|
+
if (EXTERNAL_SYSTEM_CONNECTORS[prefix]) {
|
|
196
|
+
// Normalize NetSuite variants
|
|
197
|
+
if (prefix === 'netsuite' || prefix === 'netsuite-restlet') {
|
|
198
|
+
if (!systems.includes('NetSuite')) {
|
|
199
|
+
systems.push('NetSuite');
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
const systemName = EXTERNAL_SYSTEM_CONNECTORS[prefix];
|
|
204
|
+
if (!systems.includes(systemName)) {
|
|
205
|
+
systems.push(systemName);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// Also check for HTTP request configs that might be external systems
|
|
211
|
+
// by looking at the config names (common pattern: *-api, *-service)
|
|
212
|
+
const httpConfigPattern = /http:request-config[^>]*name="([^"]+)"/g;
|
|
213
|
+
while ((match = httpConfigPattern.exec(content)) !== null) {
|
|
214
|
+
const configName = match[1].toLowerCase();
|
|
215
|
+
// Skip internal/listener configs
|
|
216
|
+
if (configName.includes('listener'))
|
|
217
|
+
continue;
|
|
218
|
+
// Check for known external service patterns
|
|
219
|
+
for (const [key, systemName] of Object.entries(EXTERNAL_SYSTEM_CONNECTORS)) {
|
|
220
|
+
if (configName.includes(key)) {
|
|
221
|
+
if (!systems.includes(systemName)) {
|
|
222
|
+
systems.push(systemName);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return systems;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
exports.SingleSystemSapiRule = SingleSystemSapiRule;
|
|
231
|
+
//# sourceMappingURL=SingleSystemSapiRule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SingleSystemSapiRule.js","sourceRoot":"","sources":["../../../../src/rules/api-led/SingleSystemSapiRule.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAE7B,qDAAkD;AAClD,oDAAgD;AAEhD;;;GAGG;AACH,MAAM,0BAA0B,GAA2B;IACvD,QAAQ,EAAE,UAAU;IACpB,kBAAkB,EAAE,kBAAkB;IACtC,UAAU,EAAE,YAAY;IACxB,EAAE,EAAE,UAAU;IACd,GAAG,EAAE,KAAK;IACV,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,YAAY;IACxB,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,EAAE,EAAE,UAAU;IACd,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,OAAO;IACd,EAAE,EAAE,WAAW;IACf,GAAG,EAAE,YAAY;IACjB,QAAQ,EAAE,iBAAiB;IAC3B,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;CACf,CAAC;AAEF;;;GAGG;AACH,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IAC/B,MAAM,EAAE,yCAAyC;IACjD,QAAQ,EAAE,iBAAiB;IAC3B,mBAAmB,EAAE,oBAAoB;IACzC,IAAI,EAAE,eAAe;IACrB,aAAa,EAAE,UAAU;IACzB,IAAI,EAAE,qBAAqB;IAC3B,KAAK,EAAE,cAAc;IACrB,OAAO,EAAE,QAAQ;IACjB,YAAY,EAAE,oBAAoB;IAClC,WAAW,EAAE,YAAY;IACzB,OAAO,EAAE,mBAAmB;IAC5B,WAAW,EAAE,YAAY;CAC5B,CAAC,CAAC;AAEH;;;;;;;;;GASG;AACH,MAAa,oBAAqB,SAAQ,yBAAW;IACjD,EAAE,GAAG,SAAS,CAAC;IACf,IAAI,GAAG,wBAAwB,CAAC;IAChC,WAAW,GAAG,0DAA0D,CAAC;IACzE,QAAQ,GAAG,SAAkB,CAAC;IAC9B,QAAQ,GAAG,SAAkB,CAAC;IAEpB,eAAe,CAAC,OAA0B;QAChD,MAAM,MAAM,GAAY,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QAExC,+CAA+C;QAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7D,MAAM,MAAM,GACR,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC7B,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC7B,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAErC,sCAAsC;QACtC,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,0BAA0B;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1B,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,GAAG,EAAoB,CAAC,CAAC,8BAA8B;QAEnF,qBAAqB;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC5C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAClD,MAAM,MAAM,GAAG,IAAA,oBAAQ,EAAC,OAAO,CAAC,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ;oBAAE,SAAS;gBAElD,qDAAqD;gBACrD,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACrE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC3B,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;oBAChD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;oBAChD,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBACvC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACL,kCAAkC;YACtC,CAAC;QACL,CAAC;QAED,gEAAgE;QAChE,IAAI,eAAe,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7D,MAAM,OAAO,GAAG,UAAU;iBACrB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACT,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;gBACxC,OAAO,GAAG,GAAG,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YAC1C,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;YAEhB,MAAM,CAAC,IAAI,CACP,IAAI,CAAC,kBAAkB,CACnB,0BAA0B,eAAe,CAAC,IAAI,qBAAqB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAC1F;gBACI,UAAU,EAAE,0IAA0I,OAAO,EAAE;gBAC/J,QAAQ,EAAE,SAAS;aACtB,CACJ,CACJ,CAAC;QACN,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,GAAW;QAC5B,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACtB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC/C,CAAC;qBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACvD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzB,CAAC;YACL,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,mCAAmC;QACvC,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,OAAe,EAAE,IAAc;QACzD,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,kDAAkD;QAClD,MAAM,gBAAgB,GAClB,oEAAoE,CAAC;QACzE,IAAI,KAAK,CAAC;QAEV,OAAO,CAAC,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACvD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACxB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAE5B,0BAA0B;YAC1B,IAAI,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,SAAS;YAE7C,2CAA2C;YAC3C,IAAI,0BAA0B,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrC,8BAA8B;gBAC9B,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,kBAAkB,EAAE,CAAC;oBACzD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;wBAChC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBAC7B,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACJ,MAAM,UAAU,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;oBACtD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;wBAChC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBAC7B,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAED,qEAAqE;QACrE,oEAAoE;QACpE,MAAM,iBAAiB,GAAG,yCAAyC,CAAC;QACpE,OAAO,CAAC,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACxD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC1C,iCAAiC;YACjC,IAAI,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAAE,SAAS;YAE9C,4CAA4C;YAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,EAAE,CAAC;gBACzE,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC3B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;wBAChC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBAC7B,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ;AAxJD,oDAwJC"}
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/rules/index.ts"],"names":[],"mappings":"AACA,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AA6EnC,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,EA8E3B,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"}
|
package/dist/src/rules/index.js
CHANGED
|
@@ -71,6 +71,7 @@ const DataWeaveRules_1 = require("./dataweave/DataWeaveRules");
|
|
|
71
71
|
const Java17DWErrorHandlingRule_1 = require("./dataweave/Java17DWErrorHandlingRule");
|
|
72
72
|
// Import all rules - API-Led
|
|
73
73
|
const ApiLedRules_1 = require("./api-led/ApiLedRules");
|
|
74
|
+
const SingleSystemSapiRule_1 = require("./api-led/SingleSystemSapiRule");
|
|
74
75
|
// Import all rules - Experimental
|
|
75
76
|
const ExperimentalRules_1 = require("./experimental/ExperimentalRules");
|
|
76
77
|
// Export individual rules - Error Handling
|
|
@@ -191,10 +192,11 @@ exports.ALL_RULES = [
|
|
|
191
192
|
new DataWeaveRules_1.DwlNamingRule(),
|
|
192
193
|
new DataWeaveRules_1.DwlModulesRule(),
|
|
193
194
|
new Java17DWErrorHandlingRule_1.Java17DWErrorHandlingRule(),
|
|
194
|
-
// API-Led Rules (API-001, 002, 003)
|
|
195
|
+
// API-Led Rules (API-001, 002, 003, 004)
|
|
195
196
|
new ApiLedRules_1.ExperienceLayerRule(),
|
|
196
197
|
new ApiLedRules_1.ProcessLayerRule(),
|
|
197
198
|
new ApiLedRules_1.SystemLayerRule(),
|
|
199
|
+
new SingleSystemSapiRule_1.SingleSystemSapiRule(),
|
|
198
200
|
// Experimental Rules (EXP-001, 002, 003)
|
|
199
201
|
new ExperimentalRules_1.FlowRefDepthRule(),
|
|
200
202
|
new ExperimentalRules_1.ConnectorConfigNamingRule(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/rules/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/rules/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAiNA,gDAEC;AAKD,kCAEC;AAKD,sCAEC;AAjOD,oBAAoB;AACpB,kDAAgC;AAChC,qDAAmC;AAEnC,oCAAoC;AACpC,oFAAiF;AACjF,sFAAmF;AACnF,oEAAiE;AACjE,0EAAuE;AACvE,wEAAqE;AACrE,gEAA6D;AAE7D,4BAA4B;AAC5B,4DAAyD;AACzD,4DAAyD;AACzD,oEAAiE;AAEjE,8BAA8B;AAC9B,oEAAiE;AACjE,kFAA+E;AAC/E,gEAA6D;AAC7D,8DAA2D;AAC3D,kEAA+D;AAC/D,wEAAqE;AAErE,6BAA6B;AAC7B,qEAAkE;AAClE,mEAAgE;AAChE,uFAAoF;AACpF,+DAA4F;AAE5F,+BAA+B;AAC/B,6EAA0E;AAC1E,mEAAgE;AAChE,iFAA8E;AAE9E,0BAA0B;AAC1B,gEAA6D;AAC7D,oEAAiE;AACjE,4DAAyD;AAEzD,mCAAmC;AACnC,6EAA0E;AAC1E,2EAAwE;AAExE,iCAAiC;AACjC,mFAAgF;AAChF,+EAA4E;AAC5E,6EAA0E;AAC1E,+EAA4E;AAE5E,gCAAgC;AAChC,wEAAqE;AAErE,0BAA0B;AAC1B,gDAAkG;AAElG,+BAA+B;AAC/B,+DAIoC;AAEpC,+BAA+B;AAC/B,+DAA4F;AAC5F,qFAAkF;AAElF,6BAA6B;AAC7B,uDAA+F;AAC/F,yEAAsE;AAEtE,kCAAkC;AAClC,wEAI0C;AAI1C,2CAA2C;AAC3C,kFAAiF;AAAxE,gIAAA,sBAAsB,OAAA;AAC/B,oFAAmF;AAA1E,kIAAA,uBAAuB,OAAA;AAChC,kEAAiE;AAAxD,gHAAA,cAAc,OAAA;AACvB,wEAAuE;AAA9D,sHAAA,iBAAiB,OAAA;AAC1B,sEAAqE;AAA5D,oHAAA,gBAAgB,OAAA;AAEzB,mCAAmC;AACnC,0DAAyD;AAAhD,gHAAA,cAAc,OAAA;AACvB,0DAAyD;AAAhD,gHAAA,cAAc,OAAA;AACvB,kEAAiE;AAAxD,wHAAA,kBAAkB,OAAA;AAE3B,qCAAqC;AACrC,kEAAiE;AAAxD,sHAAA,iBAAiB,OAAA;AAC1B,gFAA+E;AAAtE,oIAAA,wBAAwB,OAAA;AACjC,8DAA6D;AAApD,kHAAA,eAAe,OAAA;AAExB,oCAAoC;AACpC,mEAAkE;AAAzD,wHAAA,kBAAkB,OAAA;AAC3B,iEAAgE;AAAvD,sHAAA,iBAAiB,OAAA;AAC1B,qFAAoF;AAA3E,0IAAA,2BAA2B,OAAA;AAEpC,sCAAsC;AACtC,2EAA0E;AAAjE,8HAAA,qBAAqB,OAAA;AAC9B,iEAAgE;AAAvD,oHAAA,gBAAgB,OAAA;AACzB,+EAA8E;AAArE,kIAAA,uBAAuB,OAAA;AAEhC,iCAAiC;AACjC,8DAA6D;AAApD,sHAAA,iBAAiB,OAAA;AAC1B,kEAAiE;AAAxD,0HAAA,mBAAmB,OAAA;AAC5B,0DAAyD;AAAhD,kHAAA,eAAe,OAAA;AAExB,0CAA0C;AAC1C,2EAA0E;AAAjE,0HAAA,mBAAmB,OAAA;AAC5B,yEAAwE;AAA/D,wHAAA,kBAAkB,OAAA;AAE3B,wCAAwC;AACxC,iFAAgF;AAAvE,kIAAA,uBAAuB,OAAA;AAChC,6EAA4E;AAAnE,8HAAA,qBAAqB,OAAA;AAC9B,2EAA0E;AAAjE,4HAAA,oBAAoB,OAAA;AAE7B;;;GAGG;AACU,QAAA,SAAS,GAAW;IAC7B,sDAAsD;IACtD,IAAI,+CAAsB,EAAE;IAC5B,IAAI,iDAAuB,EAAE;IAC7B,IAAI,+BAAc,EAAE;IACpB,IAAI,qCAAiB,EAAE;IACvB,IAAI,mCAAgB,EAAE;IACtB,IAAI,2BAAY,EAAE,EAAE,mCAAmC;IAEvD,oCAAoC;IACpC,IAAI,+BAAc,EAAE;IACpB,IAAI,+BAAc,EAAE;IACpB,IAAI,uCAAkB,EAAE;IAExB,sCAAsC;IACtC,IAAI,qCAAiB,EAAE;IACvB,IAAI,mDAAwB,EAAE;IAC9B,IAAI,iCAAe,EAAE;IACrB,IAAI,+BAAc,EAAE,EAAE,6BAA6B;IACnD,IAAI,mCAAgB,EAAE,EAAE,yBAAyB;IACjD,IAAI,yCAAmB,EAAE,EAAE,4BAA4B;IAEvD,qCAAqC;IACrC,IAAI,uCAAkB,EAAE;IACxB,IAAI,qCAAiB,EAAE;IACvB,IAAI,yDAA2B,EAAE;IACjC,IAAI,uCAAqB,EAAE,EAAE,8BAA8B;IAC3D,IAAI,0CAAwB,EAAE,EAAE,kCAAkC;IAElE,uCAAuC;IACvC,IAAI,6CAAqB,EAAE;IAC3B,IAAI,mCAAgB,EAAE;IACtB,IAAI,iDAAuB,EAAE;IAE7B,kCAAkC;IAClC,IAAI,qCAAiB,EAAE;IACvB,IAAI,yCAAmB,EAAE;IACzB,IAAI,iCAAe,EAAE;IAErB,sCAAsC;IACtC,IAAI,yCAAmB,EAAE;IACzB,IAAI,uCAAkB,EAAE;IAExB,yCAAyC;IACzC,IAAI,iDAAuB,EAAE;IAC7B,IAAI,6CAAqB,EAAE;IAC3B,IAAI,2CAAoB,EAAE;IAC1B,IAAI,6CAAqB,EAAE,EAAE,+BAA+B;IAE5D,8BAA8B;IAC9B,IAAI,uCAAkB,EAAE;IAExB,kCAAkC;IAClC,IAAI,gCAAoB,EAAE;IAC1B,IAAI,8BAAkB,EAAE;IACxB,IAAI,gCAAoB,EAAE;IAE1B,uCAAuC;IACvC,IAAI,qCAAoB,EAAE;IAC1B,IAAI,iCAAgB,EAAE;IACtB,IAAI,kCAAiB,EAAE;IAEvB,0CAA0C;IAC1C,IAAI,gCAAe,EAAE;IACrB,IAAI,8BAAa,EAAE;IACnB,IAAI,+BAAc,EAAE;IACpB,IAAI,qDAAyB,EAAE;IAE/B,yCAAyC;IACzC,IAAI,iCAAmB,EAAE;IACzB,IAAI,8BAAgB,EAAE;IACtB,IAAI,6BAAe,EAAE;IACrB,IAAI,2CAAoB,EAAE;IAE1B,yCAAyC;IACzC,IAAI,oCAAgB,EAAE;IACtB,IAAI,6CAAyB,EAAE;IAC/B,IAAI,qCAAiB,EAAE;CAC1B,CAAC;AAEF;;GAEG;AACH,SAAgB,kBAAkB,CAAC,QAAgB;IAC/C,OAAO,iBAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;AAClE,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,EAAU;IAClC,OAAO,iBAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa;IACzB,OAAO,iBAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC5C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sfdxy/mule-lint",
|
|
3
|
-
"version": "1.12.
|
|
3
|
+
"version": "1.12.1",
|
|
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",
|
|
@@ -70,4 +70,4 @@
|
|
|
70
70
|
"url": "https://github.com/Avinava/mule-lint/issues"
|
|
71
71
|
},
|
|
72
72
|
"homepage": "https://github.com/Avinava/mule-lint#readme"
|
|
73
|
-
}
|
|
73
|
+
}
|