@sfdxy/mule-lint 1.12.0 → 1.13.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 +23 -1
- package/dist/package.json +1 -1
- package/dist/src/engine/LintEngine.d.ts +8 -0
- package/dist/src/engine/LintEngine.d.ts.map +1 -1
- package/dist/src/engine/LintEngine.js +151 -3
- package/dist/src/engine/LintEngine.js.map +1 -1
- package/dist/src/formatters/HtmlFormatter.d.ts.map +1 -1
- package/dist/src/formatters/HtmlFormatter.js +135 -35
- package/dist/src/formatters/HtmlFormatter.js.map +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/governance/GovernanceRules.d.ts +30 -0
- package/dist/src/rules/governance/GovernanceRules.d.ts.map +1 -0
- package/dist/src/rules/governance/GovernanceRules.js +138 -0
- package/dist/src/rules/governance/GovernanceRules.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 +25 -2
- package/dist/src/rules/index.js.map +1 -1
- package/dist/src/rules/operations/OperationsRules.d.ts +137 -0
- package/dist/src/rules/operations/OperationsRules.d.ts.map +1 -0
- package/dist/src/rules/operations/OperationsRules.js +450 -0
- package/dist/src/rules/operations/OperationsRules.js.map +1 -0
- package/dist/src/types/Report.d.ts +25 -0
- package/dist/src/types/Report.d.ts.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,28 @@ 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
|
-
|
|
220
|
+
### Operations & Resilience Rules
|
|
221
|
+
|
|
222
|
+
| ID | Name | Severity | Category | Description |
|
|
223
|
+
|----|------|----------|----------|-------------|
|
|
224
|
+
| RES-001 | Reconnection Strategy | Warning | Performance | Connectors should have reconnection strategies |
|
|
225
|
+
| OPS-001 | Auto-Discovery | Info | Standards | APIs should have auto-discovery for API Manager |
|
|
226
|
+
| OPS-002 | HTTP Port Placeholder | Warning | Standards | HTTP ports should use property placeholders |
|
|
227
|
+
| OPS-003 | Externalized Cron | Warning | Standards | Cron expressions should use placeholders |
|
|
228
|
+
| SEC-006 | Encryption Key in Logs | Error | Security | Detect sensitive data in log messages |
|
|
229
|
+
| HYG-001 | Excessive Loggers | Warning | Logging | Flows should not have too many loggers |
|
|
230
|
+
| HYG-002 | Commented Code | Info | Standards | Detect commented-out code blocks |
|
|
231
|
+
| HYG-003 | Unused Flow | Warning | Standards | Detect flows/sub-flows never referenced |
|
|
232
|
+
| API-005 | APIKit Validation | Info | Standards | APIs should use APIKit for interfaces |
|
|
233
|
+
| DOC-001 | Display Name | Info | Documentation | Key components should have meaningful names |
|
|
234
|
+
|
|
235
|
+
### Project Governance Rules
|
|
236
|
+
| ID | Name | Severity | Category | Description |
|
|
237
|
+
|----|------|----------|----------|-------------|
|
|
238
|
+
| PROJ-001 | POM Validation | Error | Structure | Validates pom.xml existence and plugins |
|
|
239
|
+
| PROJ-002 | Git Hygiene | Warning | Structure | Validates .gitignore existence and entries |
|
|
240
|
+
|
|
241
|
+
**Total: 61 rules** across 14 categories.
|
|
220
242
|
|
|
221
243
|
See [Rules Catalog](docs/best-practices/rules-catalog.md) for detailed documentation.
|
|
222
244
|
|
package/dist/package.json
CHANGED
|
@@ -52,9 +52,17 @@ export declare class LintEngine {
|
|
|
52
52
|
* Build summary statistics from file results
|
|
53
53
|
*/
|
|
54
54
|
private buildSummary;
|
|
55
|
+
/**
|
|
56
|
+
* Run project-level rules that don't depend on specific files
|
|
57
|
+
*/
|
|
58
|
+
private runProjectRules;
|
|
55
59
|
/**
|
|
56
60
|
* Log message if verbose mode is enabled
|
|
57
61
|
*/
|
|
58
62
|
private log;
|
|
63
|
+
/**
|
|
64
|
+
* Collect metrics from a parsed XML document
|
|
65
|
+
*/
|
|
66
|
+
private collectFileMetrics;
|
|
59
67
|
}
|
|
60
68
|
//# sourceMappingURL=LintEngine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LintEngine.d.ts","sourceRoot":"","sources":["../../../src/engine/LintEngine.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,KAAK,EAA2C,MAAM,UAAU,CAAC;AAChF,OAAO,EAAE,UAAU,EAAkB,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"LintEngine.d.ts","sourceRoot":"","sources":["../../../src/engine/LintEngine.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,KAAK,EAA2C,MAAM,UAAU,CAAC;AAChF,OAAO,EAAE,UAAU,EAAkB,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAA2C,MAAM,iBAAiB,CAAC;AAItF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,+BAA+B;IAC/B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,8CAA8C;IAC9C,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7B,sBAAsB;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,UAAU;IACnB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,OAAO,CAAU;gBAEb,OAAO,EAAE,aAAa;IAMlC;;OAEG;IACU,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAmF1D;;OAEG;IACH,OAAO,CAAC,eAAe;IAgBvB;;OAEG;IACI,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,EAAE;IAmB9D;;OAEG;IACI,eAAe,IAAI,IAAI,EAAE;IAOhC;;OAEG;IACH,OAAO,CAAC,WAAW;IAoDnB;;OAEG;IACH,OAAO,CAAC,QAAQ;IA4ChB;;OAEG;IACH,OAAO,CAAC,aAAa;IAerB;;OAEG;IACH,OAAO,CAAC,YAAY;IAgCpB;;OAEG;IACH,OAAO,CAAC,eAAe;IAiCvB;;OAEG;IACH,OAAO,CAAC,GAAG;IAMX;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAoG7B"}
|
|
@@ -80,12 +80,36 @@ class LintEngine {
|
|
|
80
80
|
exclude: this.config.exclude,
|
|
81
81
|
});
|
|
82
82
|
this.log(`Found ${files.length} files to scan`);
|
|
83
|
-
// Process each file
|
|
83
|
+
// Process each file and collect metrics
|
|
84
84
|
const fileResults = [];
|
|
85
|
+
const metricsAggregator = {
|
|
86
|
+
flowCount: 0,
|
|
87
|
+
subFlowCount: 0,
|
|
88
|
+
dwTransformCount: 0,
|
|
89
|
+
connectorConfigCount: 0,
|
|
90
|
+
httpListenerCount: 0,
|
|
91
|
+
connectorTypes: [],
|
|
92
|
+
errorHandlerCount: 0,
|
|
93
|
+
choiceRouterCount: 0,
|
|
94
|
+
fileComplexity: {},
|
|
95
|
+
};
|
|
85
96
|
for (const file of files) {
|
|
86
|
-
const result = this.processFile(file, projectRoot, isStandalone);
|
|
97
|
+
const result = this.processFile(file, projectRoot, isStandalone, metricsAggregator);
|
|
87
98
|
fileResults.push(result);
|
|
88
99
|
}
|
|
100
|
+
// Run Project Rules (only once per scan, if not standalone)
|
|
101
|
+
if (!isStandalone) {
|
|
102
|
+
const projectIssues = this.runProjectRules(projectRoot);
|
|
103
|
+
if (projectIssues.length > 0) {
|
|
104
|
+
// Add a virtual file result for project-level issues
|
|
105
|
+
fileResults.push({
|
|
106
|
+
filePath: path.join(projectRoot, 'mule-artifact.json'), // Virtual target
|
|
107
|
+
relativePath: 'Project Structure',
|
|
108
|
+
issues: projectIssues,
|
|
109
|
+
parsed: true,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
89
113
|
// Build report
|
|
90
114
|
const durationMs = Date.now() - startTime;
|
|
91
115
|
const summary = this.buildSummary(fileResults);
|
|
@@ -97,6 +121,7 @@ class LintEngine {
|
|
|
97
121
|
durationMs,
|
|
98
122
|
files: fileResults,
|
|
99
123
|
summary,
|
|
124
|
+
metrics: metricsAggregator,
|
|
100
125
|
};
|
|
101
126
|
}
|
|
102
127
|
/**
|
|
@@ -145,7 +170,7 @@ class LintEngine {
|
|
|
145
170
|
/**
|
|
146
171
|
* Process a single file
|
|
147
172
|
*/
|
|
148
|
-
processFile(file, projectRoot, isStandalone = false) {
|
|
173
|
+
processFile(file, projectRoot, isStandalone = false, metricsAggregator) {
|
|
149
174
|
this.log(` Processing: ${file.relativePath}`);
|
|
150
175
|
try {
|
|
151
176
|
const content = (0, FileScanner_1.readFileContent)(file.absolutePath);
|
|
@@ -160,6 +185,10 @@ class LintEngine {
|
|
|
160
185
|
};
|
|
161
186
|
}
|
|
162
187
|
const issues = this.runRules(parseResult.document, file.absolutePath, projectRoot, isStandalone);
|
|
188
|
+
// Collect metrics from parsed document
|
|
189
|
+
if (metricsAggregator) {
|
|
190
|
+
this.collectFileMetrics(parseResult.document, file.relativePath, metricsAggregator);
|
|
191
|
+
}
|
|
163
192
|
return {
|
|
164
193
|
filePath: file.absolutePath,
|
|
165
194
|
relativePath: file.relativePath,
|
|
@@ -260,6 +289,38 @@ class LintEngine {
|
|
|
260
289
|
byRule,
|
|
261
290
|
};
|
|
262
291
|
}
|
|
292
|
+
/**
|
|
293
|
+
* Run project-level rules that don't depend on specific files
|
|
294
|
+
*/
|
|
295
|
+
runProjectRules(projectRoot) {
|
|
296
|
+
const issues = [];
|
|
297
|
+
const projectRules = this.getEnabledRules().filter((r) => r.isProjectRule);
|
|
298
|
+
for (const rule of projectRules) {
|
|
299
|
+
try {
|
|
300
|
+
// Cast to any to access ProjectRule methods safely
|
|
301
|
+
// In a real generic implementation we'd check instance types better
|
|
302
|
+
if (typeof rule.reset === 'function') {
|
|
303
|
+
rule.reset();
|
|
304
|
+
}
|
|
305
|
+
// Create a basic context for project validation
|
|
306
|
+
const context = {
|
|
307
|
+
filePath: path.join(projectRoot, 'pom.xml'), // Pseudo-file
|
|
308
|
+
relativePath: 'Project Root',
|
|
309
|
+
projectRoot,
|
|
310
|
+
config: this.getRuleConfig(rule.id),
|
|
311
|
+
};
|
|
312
|
+
// Pass empty document since project rules don't use it
|
|
313
|
+
// Using 'as any' because we know ProjectRule ignores the doc
|
|
314
|
+
const ruleIssues = rule.validate({}, context);
|
|
315
|
+
issues.push(...ruleIssues);
|
|
316
|
+
}
|
|
317
|
+
catch (error) {
|
|
318
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
319
|
+
console.error(`Error in project rule ${rule.id}: ${message}`);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
return issues;
|
|
323
|
+
}
|
|
263
324
|
/**
|
|
264
325
|
* Log message if verbose mode is enabled
|
|
265
326
|
*/
|
|
@@ -268,6 +329,93 @@ class LintEngine {
|
|
|
268
329
|
console.log(message);
|
|
269
330
|
}
|
|
270
331
|
}
|
|
332
|
+
/**
|
|
333
|
+
* Collect metrics from a parsed XML document
|
|
334
|
+
*/
|
|
335
|
+
collectFileMetrics(doc, relativePath, metrics) {
|
|
336
|
+
try {
|
|
337
|
+
const xpath = require('xpath');
|
|
338
|
+
// Count flows
|
|
339
|
+
const flows = xpath.select('//*[local-name()="flow"]', doc);
|
|
340
|
+
const flowCount = Array.isArray(flows) ? flows.length : 0;
|
|
341
|
+
metrics.flowCount += flowCount;
|
|
342
|
+
// Count sub-flows
|
|
343
|
+
const subFlows = xpath.select('//*[local-name()="sub-flow"]', doc);
|
|
344
|
+
const subFlowCount = Array.isArray(subFlows) ? subFlows.length : 0;
|
|
345
|
+
metrics.subFlowCount += subFlowCount;
|
|
346
|
+
// Count DataWeave transforms (ee:transform)
|
|
347
|
+
const dwTransforms = xpath.select('//*[local-name()="transform" and (namespace-uri()="http://www.mulesoft.org/schema/mule/ee/core" or contains(local-name(..), "ee:"))]', doc);
|
|
348
|
+
// Fallback: also check for ee:transform in any namespace
|
|
349
|
+
const dwTransforms2 = xpath.select('//*[contains(name(), ":transform")]', doc);
|
|
350
|
+
const dwCount = Array.isArray(dwTransforms)
|
|
351
|
+
? dwTransforms.length
|
|
352
|
+
: Array.isArray(dwTransforms2)
|
|
353
|
+
? dwTransforms2.length
|
|
354
|
+
: 0;
|
|
355
|
+
metrics.dwTransformCount += dwCount;
|
|
356
|
+
// Count connector configs (elements ending in -config or named config/connection)
|
|
357
|
+
const configs = xpath.select('//*[contains(local-name(), "-config") or local-name()="config" or contains(local-name(), "-connection")]', doc);
|
|
358
|
+
const configCount = Array.isArray(configs) ? configs.length : 0;
|
|
359
|
+
metrics.connectorConfigCount += configCount;
|
|
360
|
+
// Extract connector types from config elements
|
|
361
|
+
if (Array.isArray(configs)) {
|
|
362
|
+
for (const config of configs) {
|
|
363
|
+
const nodeName = config.nodeName || '';
|
|
364
|
+
// Extract prefix before colon (e.g., "http" from "http:request-config")
|
|
365
|
+
const prefix = nodeName.split(':')[0];
|
|
366
|
+
if (prefix && !metrics.connectorTypes.includes(prefix)) {
|
|
367
|
+
metrics.connectorTypes.push(prefix);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
// Also extract connectors from namespace declarations (more reliable)
|
|
372
|
+
const root = doc.documentElement;
|
|
373
|
+
if (root && root.attributes) {
|
|
374
|
+
// MuleSoft connector namespaces follow pattern: http://www.mulesoft.org/schema/mule/<connector>
|
|
375
|
+
const muleNsPattern = /^http:\/\/www\.mulesoft\.org\/schema\/mule\/(.+)$/;
|
|
376
|
+
for (let i = 0; i < root.attributes.length; i++) {
|
|
377
|
+
const attr = root.attributes[i];
|
|
378
|
+
if (attr.name.startsWith('xmlns:')) {
|
|
379
|
+
const match = muleNsPattern.exec(attr.value);
|
|
380
|
+
if (match) {
|
|
381
|
+
const connector = match[1];
|
|
382
|
+
// Skip internal/core namespaces
|
|
383
|
+
const skipList = ['core', 'documentation', 'ee/core', 'doc'];
|
|
384
|
+
if (!skipList.includes(connector) &&
|
|
385
|
+
!metrics.connectorTypes.includes(connector)) {
|
|
386
|
+
metrics.connectorTypes.push(connector);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
// Count HTTP listeners (services)
|
|
393
|
+
const listeners = xpath.select('//*[local-name()="listener"]', doc);
|
|
394
|
+
const listenerCount = Array.isArray(listeners) ? listeners.length : 0;
|
|
395
|
+
metrics.httpListenerCount += listenerCount;
|
|
396
|
+
// Count error handlers (try scopes)
|
|
397
|
+
const trys = xpath.select('//*[local-name()="try"]', doc);
|
|
398
|
+
const tryCount = Array.isArray(trys) ? trys.length : 0;
|
|
399
|
+
metrics.errorHandlerCount += tryCount;
|
|
400
|
+
// Count choice routers (conditionals)
|
|
401
|
+
const choices = xpath.select('//*[local-name()="choice"]', doc);
|
|
402
|
+
const choiceCount = Array.isArray(choices) ? choices.length : 0;
|
|
403
|
+
metrics.choiceRouterCount += choiceCount;
|
|
404
|
+
// Calculate file complexity based on flow count
|
|
405
|
+
const totalFlows = flowCount + subFlowCount;
|
|
406
|
+
let complexity = 'simple';
|
|
407
|
+
if (totalFlows >= 10) {
|
|
408
|
+
complexity = 'complex';
|
|
409
|
+
}
|
|
410
|
+
else if (totalFlows >= 5) {
|
|
411
|
+
complexity = 'medium';
|
|
412
|
+
}
|
|
413
|
+
metrics.fileComplexity[relativePath] = complexity;
|
|
414
|
+
}
|
|
415
|
+
catch {
|
|
416
|
+
// Silently skip metrics collection on error
|
|
417
|
+
}
|
|
418
|
+
}
|
|
271
419
|
}
|
|
272
420
|
exports.LintEngine = LintEngine;
|
|
273
421
|
//# sourceMappingURL=LintEngine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LintEngine.js","sourceRoot":"","sources":["../../../src/engine/LintEngine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LintEngine.js","sourceRoot":"","sources":["../../../src/engine/LintEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HtmlFormatter.d.ts","sourceRoot":"","sources":["../../../src/formatters/HtmlFormatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAI7C;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"HtmlFormatter.d.ts","sourceRoot":"","sources":["../../../src/formatters/HtmlFormatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAI7C;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAk/BrD"}
|
|
@@ -46,9 +46,22 @@ function formatHtml(report) {
|
|
|
46
46
|
severity: r.severity,
|
|
47
47
|
description: r.description,
|
|
48
48
|
})),
|
|
49
|
+
metrics: report.metrics || {
|
|
50
|
+
flowCount: 0,
|
|
51
|
+
subFlowCount: 0,
|
|
52
|
+
dwTransformCount: 0,
|
|
53
|
+
connectorConfigCount: 0,
|
|
54
|
+
httpListenerCount: 0,
|
|
55
|
+
connectorTypes: [],
|
|
56
|
+
errorHandlerCount: 0,
|
|
57
|
+
choiceRouterCount: 0,
|
|
58
|
+
fileComplexity: {},
|
|
59
|
+
},
|
|
49
60
|
};
|
|
50
61
|
const jsonPayload = JSON.stringify(clientData).replace(/</g, '\\u003c');
|
|
51
|
-
const totalIssues = report.summary.bySeverity.error +
|
|
62
|
+
const totalIssues = report.summary.bySeverity.error +
|
|
63
|
+
report.summary.bySeverity.warning +
|
|
64
|
+
report.summary.bySeverity.info;
|
|
52
65
|
// 4. Build HTML
|
|
53
66
|
return `<!DOCTYPE html>
|
|
54
67
|
<html lang="en">
|
|
@@ -258,7 +271,7 @@ function formatHtml(report) {
|
|
|
258
271
|
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"/></svg>
|
|
259
272
|
</div>
|
|
260
273
|
<div>
|
|
261
|
-
<div class="text-sm font-bold text-slate-900 dark:text-white tracking-tight">
|
|
274
|
+
<div class="text-sm font-bold text-slate-900 dark:text-white tracking-tight">mule-lint</div>
|
|
262
275
|
<div class="text-2xs text-slate-400 dark:text-slate-500 -mt-0.5">Static analysis for MuleSoft</div>
|
|
263
276
|
</div>
|
|
264
277
|
</a>
|
|
@@ -304,8 +317,8 @@ function formatHtml(report) {
|
|
|
304
317
|
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"/></svg>
|
|
305
318
|
</button>
|
|
306
319
|
<button id="theme-toggle" title="Toggle theme" class="p-2 text-slate-400 hover:text-slate-600 dark:hover:text-slate-200 hover:bg-slate-100 dark:hover:bg-slate-700 rounded-lg transition-colors">
|
|
307
|
-
<svg class="w-5 h-5 dark:hidden" fill="none" stroke="currentColor" viewBox="0 0 24 24"><circle cx="12" cy="12" r="5"/><path d="M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42"/></svg>
|
|
308
|
-
<svg class="w-5 h-5 hidden dark:block" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg>
|
|
320
|
+
<svg id="theme-toggle-dark-icon" class="w-5 h-5 dark:hidden" fill="none" stroke="currentColor" viewBox="0 0 24 24"><circle cx="12" cy="12" r="5"/><path d="M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42"/></svg>
|
|
321
|
+
<svg id="theme-toggle-light-icon" class="w-5 h-5 hidden dark:block" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg>
|
|
309
322
|
</button>
|
|
310
323
|
</div>
|
|
311
324
|
</header>
|
|
@@ -359,7 +372,7 @@ function formatHtml(report) {
|
|
|
359
372
|
<div id="view-dashboard" class="h-full overflow-y-auto p-6">
|
|
360
373
|
<!-- Header -->
|
|
361
374
|
<div class="mb-6">
|
|
362
|
-
<h2 class="text-2xl font-bold text-slate-900 dark:text-white tracking-tight">
|
|
375
|
+
<h2 class="text-2xl font-bold text-slate-900 dark:text-white tracking-tight">mule-lint dashboard</h2>
|
|
363
376
|
<p class="text-base text-slate-500 dark:text-slate-400 mt-2">
|
|
364
377
|
Scanned <strong class="text-slate-700 dark:text-slate-200">${report.files.length} files</strong> • Found <strong class="text-rose-600 dark:text-rose-400">${report.summary.bySeverity.error} errors</strong>,
|
|
365
378
|
<strong class="text-amber-600 dark:text-amber-400">${report.summary.bySeverity.warning} warnings</strong>, and
|
|
@@ -367,47 +380,112 @@ function formatHtml(report) {
|
|
|
367
380
|
</p>
|
|
368
381
|
</div>
|
|
369
382
|
|
|
370
|
-
<!--
|
|
371
|
-
<div class="
|
|
372
|
-
<div class="
|
|
373
|
-
<
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
383
|
+
<!-- Project Metrics (moved to top) -->
|
|
384
|
+
<div class="mb-6">
|
|
385
|
+
<div class="mb-3">
|
|
386
|
+
<h3 class="text-sm font-semibold text-slate-700 dark:text-slate-200">Project Metrics</h3>
|
|
387
|
+
<p class="text-xs text-slate-500 dark:text-slate-400 mt-0.5">Architecture overview: flows, components, and configurations</p>
|
|
388
|
+
</div>
|
|
389
|
+
<div class="grid grid-cols-5 gap-3">
|
|
390
|
+
<div class="bg-white dark:bg-slate-800 rounded-lg border border-slate-200 dark:border-slate-700 p-3">
|
|
391
|
+
<div class="flex items-center justify-between mb-1">
|
|
392
|
+
<span class="text-2xs font-semibold text-violet-600 dark:text-violet-400 uppercase tracking-wider">Flows</span>
|
|
393
|
+
<div class="w-6 h-6 rounded bg-violet-100 dark:bg-violet-500/20 flex items-center justify-center">
|
|
394
|
+
<svg class="w-3.5 h-3.5 text-violet-600 dark:text-violet-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"/></svg>
|
|
395
|
+
</div>
|
|
396
|
+
</div>
|
|
397
|
+
<div id="metric-flows" class="text-xl font-bold text-violet-600 dark:text-violet-400">-</div>
|
|
398
|
+
<div class="text-2xs text-slate-400 dark:text-slate-500 mt-0.5">Entry points</div>
|
|
399
|
+
</div>
|
|
400
|
+
<div class="bg-white dark:bg-slate-800 rounded-lg border border-slate-200 dark:border-slate-700 p-3">
|
|
401
|
+
<div class="flex items-center justify-between mb-1">
|
|
402
|
+
<span class="text-2xs font-semibold text-teal-600 dark:text-teal-400 uppercase tracking-wider">Sub-Flows</span>
|
|
403
|
+
<div class="w-6 h-6 rounded bg-teal-100 dark:bg-teal-500/20 flex items-center justify-center">
|
|
404
|
+
<svg class="w-3.5 h-3.5 text-teal-600 dark:text-teal-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16m-7 6h7"/></svg>
|
|
405
|
+
</div>
|
|
406
|
+
</div>
|
|
407
|
+
<div id="metric-subflows" class="text-xl font-bold text-teal-600 dark:text-teal-400">-</div>
|
|
408
|
+
<div class="text-2xs text-slate-400 dark:text-slate-500 mt-0.5">Reusable logic</div>
|
|
409
|
+
</div>
|
|
410
|
+
<div class="bg-white dark:bg-slate-800 rounded-lg border border-slate-200 dark:border-slate-700 p-3">
|
|
411
|
+
<div class="flex items-center justify-between mb-1">
|
|
412
|
+
<span class="text-2xs font-semibold text-cyan-600 dark:text-cyan-400 uppercase tracking-wider">Services</span>
|
|
413
|
+
<div class="w-6 h-6 rounded bg-cyan-100 dark:bg-cyan-500/20 flex items-center justify-center">
|
|
414
|
+
<svg class="w-3.5 h-3.5 text-cyan-600 dark:text-cyan-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9"/></svg>
|
|
415
|
+
</div>
|
|
416
|
+
</div>
|
|
417
|
+
<div id="metric-services" class="text-xl font-bold text-cyan-600 dark:text-cyan-400">-</div>
|
|
418
|
+
<div class="text-2xs text-slate-400 dark:text-slate-500 mt-0.5">HTTP endpoints</div>
|
|
419
|
+
</div>
|
|
420
|
+
<div class="bg-white dark:bg-slate-800 rounded-lg border border-slate-200 dark:border-slate-700 p-3">
|
|
421
|
+
<div class="flex items-center justify-between mb-1">
|
|
422
|
+
<span class="text-2xs font-semibold text-orange-600 dark:text-orange-400 uppercase tracking-wider">DataWeave</span>
|
|
423
|
+
<div class="w-6 h-6 rounded bg-orange-100 dark:bg-orange-500/20 flex items-center justify-center">
|
|
424
|
+
<svg class="w-3.5 h-3.5 text-orange-600 dark:text-orange-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4"/></svg>
|
|
425
|
+
</div>
|
|
377
426
|
</div>
|
|
427
|
+
<div id="metric-dw" class="text-xl font-bold text-orange-600 dark:text-orange-400">-</div>
|
|
428
|
+
<div class="text-2xs text-slate-400 dark:text-slate-500 mt-0.5">Transforms</div>
|
|
378
429
|
</div>
|
|
379
|
-
<div class="
|
|
380
|
-
|
|
430
|
+
<div class="bg-white dark:bg-slate-800 rounded-lg border border-slate-200 dark:border-slate-700 p-3">
|
|
431
|
+
<div class="flex items-center justify-between mb-1">
|
|
432
|
+
<span class="text-2xs font-semibold text-indigo-600 dark:text-indigo-400 uppercase tracking-wider">Connectors</span>
|
|
433
|
+
<div class="w-6 h-6 rounded bg-indigo-100 dark:bg-indigo-500/20 flex items-center justify-center">
|
|
434
|
+
<svg class="w-3.5 h-3.5 text-indigo-600 dark:text-indigo-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14M5 12a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v4a2 2 0 01-2 2M5 12a2 2 0 00-2 2v4a2 2 0 002 2h14a2 2 0 002-2v-4a2 2 0 00-2-2"/></svg>
|
|
435
|
+
</div>
|
|
436
|
+
</div>
|
|
437
|
+
<div id="metric-connectors" class="text-xl font-bold text-indigo-600 dark:text-indigo-400">-</div>
|
|
438
|
+
<div class="text-2xs text-slate-400 dark:text-slate-500 mt-0.5">Configurations</div>
|
|
439
|
+
</div>
|
|
440
|
+
</div>
|
|
441
|
+
<!-- Connector Inventory (inline with metrics) -->
|
|
442
|
+
<div id="connector-inventory" class="mt-3 flex items-center gap-2 flex-wrap">
|
|
443
|
+
<span class="text-2xs font-medium text-slate-500 dark:text-slate-400">Connectors:</span>
|
|
444
|
+
<div id="connector-pills" class="flex flex-wrap gap-1.5"></div>
|
|
381
445
|
</div>
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
446
|
+
</div>
|
|
447
|
+
|
|
448
|
+
<!-- Summary Cards (compact to match metrics) -->
|
|
449
|
+
<div class="grid grid-cols-4 gap-3 mb-6">
|
|
450
|
+
<div class="bg-white dark:bg-slate-800 rounded-lg border border-slate-200 dark:border-slate-700 p-3 cursor-pointer hover:shadow-lg hover:border-rose-300 dark:hover:border-rose-600 transition-all" onclick="router.toggleSeverity('error')">
|
|
451
|
+
<div class="flex items-center justify-between mb-1">
|
|
452
|
+
<span class="text-2xs font-semibold text-rose-600 dark:text-rose-400 uppercase tracking-wider">Errors</span>
|
|
453
|
+
<div class="w-6 h-6 rounded bg-rose-100 dark:bg-rose-500/20 flex items-center justify-center">
|
|
454
|
+
<svg class="w-3.5 h-3.5 text-rose-600 dark:text-rose-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="m15 9-6 6M9 9l6 6"/></svg>
|
|
387
455
|
</div>
|
|
388
456
|
</div>
|
|
389
|
-
<div class="text-
|
|
390
|
-
<div class="text-
|
|
457
|
+
<div class="text-xl font-bold text-rose-600 dark:text-rose-400">${report.summary.bySeverity.error}</div>
|
|
458
|
+
<div class="text-2xs text-slate-400 dark:text-slate-500 mt-0.5">Critical issues</div>
|
|
391
459
|
</div>
|
|
392
|
-
<div class="bg-white dark:bg-slate-800 rounded-
|
|
393
|
-
<div class="flex items-center justify-between mb-
|
|
394
|
-
<span class="text-
|
|
395
|
-
<div class="w-
|
|
396
|
-
<svg class="w-5 h-5 text-
|
|
460
|
+
<div class="bg-white dark:bg-slate-800 rounded-lg border border-slate-200 dark:border-slate-700 p-3 cursor-pointer hover:shadow-lg hover:border-amber-300 dark:hover:border-amber-600 transition-all" onclick="router.toggleSeverity('warning')">
|
|
461
|
+
<div class="flex items-center justify-between mb-1">
|
|
462
|
+
<span class="text-2xs font-semibold text-amber-600 dark:text-amber-400 uppercase tracking-wider">Warnings</span>
|
|
463
|
+
<div class="w-6 h-6 rounded bg-amber-100 dark:bg-amber-500/20 flex items-center justify-center">
|
|
464
|
+
<svg class="w-3.5 h-3.5 text-amber-600 dark:text-amber-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"/><path d="M12 9v4M12 17h.01"/></svg>
|
|
397
465
|
</div>
|
|
398
466
|
</div>
|
|
399
|
-
<div class="text-
|
|
400
|
-
<div class="text-
|
|
467
|
+
<div class="text-xl font-bold text-amber-600 dark:text-amber-400">${report.summary.bySeverity.warning}</div>
|
|
468
|
+
<div class="text-2xs text-slate-400 dark:text-slate-500 mt-0.5">Best practice violations</div>
|
|
401
469
|
</div>
|
|
402
|
-
<div class="bg-white dark:bg-slate-800 rounded-
|
|
403
|
-
<div class="flex items-center justify-between mb-
|
|
404
|
-
<span class="text-
|
|
405
|
-
<div class="w-
|
|
406
|
-
<svg class="w-5 h-5 text-
|
|
470
|
+
<div class="bg-white dark:bg-slate-800 rounded-lg border border-slate-200 dark:border-slate-700 p-3 cursor-pointer hover:shadow-lg hover:border-sky-300 dark:hover:border-sky-600 transition-all" onclick="router.toggleSeverity('info')">
|
|
471
|
+
<div class="flex items-center justify-between mb-1">
|
|
472
|
+
<span class="text-2xs font-semibold text-sky-600 dark:text-sky-400 uppercase tracking-wider">Info</span>
|
|
473
|
+
<div class="w-6 h-6 rounded bg-sky-100 dark:bg-sky-500/20 flex items-center justify-center">
|
|
474
|
+
<svg class="w-3.5 h-3.5 text-sky-600 dark:text-sky-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4M12 8h.01"/></svg>
|
|
475
|
+
</div>
|
|
476
|
+
</div>
|
|
477
|
+
<div class="text-xl font-bold text-sky-600 dark:text-sky-400">${report.summary.bySeverity.info}</div>
|
|
478
|
+
<div class="text-2xs text-slate-400 dark:text-slate-500 mt-0.5">Suggestions</div>
|
|
479
|
+
</div>
|
|
480
|
+
<div class="bg-white dark:bg-slate-800 rounded-lg border border-slate-200 dark:border-slate-700 p-3">
|
|
481
|
+
<div class="flex items-center justify-between mb-1">
|
|
482
|
+
<span class="text-2xs font-semibold text-slate-500 dark:text-slate-400 uppercase tracking-wider">Files</span>
|
|
483
|
+
<div class="w-6 h-6 rounded bg-slate-100 dark:bg-slate-700 flex items-center justify-center">
|
|
484
|
+
<svg class="w-3.5 h-3.5 text-slate-500 dark:text-slate-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path d="M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"/><polyline points="14 2 14 8 20 8"/></svg>
|
|
407
485
|
</div>
|
|
408
486
|
</div>
|
|
409
|
-
<div class="text-
|
|
410
|
-
<div class="text-
|
|
487
|
+
<div class="text-xl font-bold text-slate-700 dark:text-slate-200">${report.files.length}</div>
|
|
488
|
+
<div class="text-2xs text-slate-400 dark:text-slate-500 mt-0.5">Scanned</div>
|
|
411
489
|
</div>
|
|
412
490
|
</div>
|
|
413
491
|
|
|
@@ -630,12 +708,34 @@ function formatHtml(report) {
|
|
|
630
708
|
init() {
|
|
631
709
|
this.renderSidebar();
|
|
632
710
|
this.renderCharts();
|
|
711
|
+
this.renderMetrics();
|
|
633
712
|
this.initTable();
|
|
634
713
|
this.initTheme();
|
|
635
714
|
this.initKeyboardShortcuts();
|
|
636
715
|
this.initExport();
|
|
637
716
|
},
|
|
638
717
|
|
|
718
|
+
renderMetrics() {
|
|
719
|
+
if (report.metrics) {
|
|
720
|
+
const m = report.metrics;
|
|
721
|
+
document.getElementById('metric-flows').textContent = m.flowCount;
|
|
722
|
+
document.getElementById('metric-subflows').textContent = m.subFlowCount;
|
|
723
|
+
document.getElementById('metric-services').textContent = m.httpListenerCount || 0;
|
|
724
|
+
document.getElementById('metric-dw').textContent = m.dwTransformCount;
|
|
725
|
+
document.getElementById('metric-connectors').textContent = m.connectorConfigCount;
|
|
726
|
+
|
|
727
|
+
// Render connector type pills
|
|
728
|
+
const pillsContainer = document.getElementById('connector-pills');
|
|
729
|
+
if (pillsContainer && m.connectorTypes && m.connectorTypes.length > 0) {
|
|
730
|
+
pillsContainer.innerHTML = m.connectorTypes.map(type =>
|
|
731
|
+
'<span class="px-2 py-0.5 text-2xs font-medium rounded-full bg-slate-100 dark:bg-slate-700 text-slate-600 dark:text-slate-300">' + type + '</span>'
|
|
732
|
+
).join('');
|
|
733
|
+
} else if (pillsContainer) {
|
|
734
|
+
document.getElementById('connector-inventory').style.display = 'none';
|
|
735
|
+
}
|
|
736
|
+
}
|
|
737
|
+
},
|
|
738
|
+
|
|
639
739
|
renderSidebar() {
|
|
640
740
|
// Severity links
|
|
641
741
|
const severityNav = document.getElementById('sidebar-severity');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HtmlFormatter.js","sourceRoot":"","sources":["../../../src/formatters/HtmlFormatter.ts"],"names":[],"mappings":";;;;;AAQA,
|
|
1
|
+
{"version":3,"file":"HtmlFormatter.js","sourceRoot":"","sources":["../../../src/formatters/HtmlFormatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|