@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 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
- **Total: 48 rules** across 13 categories.
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sfdxy/mule-lint",
3
- "version": "1.12.0",
3
+ "version": "1.13.0",
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",
@@ -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,EAA2B,MAAM,iBAAiB,CAAC;AAItE;;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;IAwD1D;;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;IA8CnB;;OAEG;IACH,OAAO,CAAC,QAAQ;IA4ChB;;OAEG;IACH,OAAO,CAAC,aAAa;IAerB;;OAEG;IACH,OAAO,CAAC,YAAY;IAgCpB;;OAEG;IACH,OAAO,CAAC,GAAG;CAKd"}
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,CA84BrD"}
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 + report.summary.bySeverity.warning + report.summary.bySeverity.info;
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">Mule-Lint</div>
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">Analysis Dashboard</h2>
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
- <!-- Summary Cards -->
371
- <div class="grid grid-cols-4 gap-4 mb-6">
372
- <div class="bg-white dark:bg-slate-800 rounded-xl border border-slate-200 dark:border-slate-700 p-5 cursor-pointer hover:shadow-lg hover:border-rose-300 dark:hover:border-rose-600 transition-all" onclick="router.toggleSeverity('error')">
373
- <div class="flex items-center justify-between mb-3">
374
- <span class="text-xs font-semibold text-rose-600 dark:text-rose-400 uppercase tracking-wider">Errors</span>
375
- <div class="w-9 h-9 rounded-lg bg-rose-100 dark:bg-rose-500/20 flex items-center justify-center">
376
- <svg class="w-5 h-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>
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="text-3xl font-bold text-rose-600 dark:text-rose-400">${report.summary.bySeverity.error}</div>
380
- <div class="text-sm text-slate-400 dark:text-slate-500 mt-1">Critical issues</div>
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
- <div class="bg-white dark:bg-slate-800 rounded-xl border border-slate-200 dark:border-slate-700 p-5 cursor-pointer hover:shadow-lg hover:border-amber-300 dark:hover:border-amber-600 transition-all" onclick="router.toggleSeverity('warning')">
383
- <div class="flex items-center justify-between mb-3">
384
- <span class="text-xs font-semibold text-amber-600 dark:text-amber-400 uppercase tracking-wider">Warnings</span>
385
- <div class="w-9 h-9 rounded-lg bg-amber-100 dark:bg-amber-500/20 flex items-center justify-center">
386
- <svg class="w-5 h-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>
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-3xl font-bold text-amber-600 dark:text-amber-400">${report.summary.bySeverity.warning}</div>
390
- <div class="text-sm text-slate-400 dark:text-slate-500 mt-1">Best practice violations</div>
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-xl border border-slate-200 dark:border-slate-700 p-5 cursor-pointer hover:shadow-lg hover:border-sky-300 dark:hover:border-sky-600 transition-all" onclick="router.toggleSeverity('info')">
393
- <div class="flex items-center justify-between mb-3">
394
- <span class="text-xs font-semibold text-sky-600 dark:text-sky-400 uppercase tracking-wider">Info</span>
395
- <div class="w-9 h-9 rounded-lg bg-sky-100 dark:bg-sky-500/20 flex items-center justify-center">
396
- <svg class="w-5 h-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>
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-3xl font-bold text-sky-600 dark:text-sky-400">${report.summary.bySeverity.info}</div>
400
- <div class="text-sm text-slate-400 dark:text-slate-500 mt-1">Suggestions</div>
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-xl border border-slate-200 dark:border-slate-700 p-5">
403
- <div class="flex items-center justify-between mb-3">
404
- <span class="text-xs font-semibold text-slate-500 dark:text-slate-400 uppercase tracking-wider">Files</span>
405
- <div class="w-9 h-9 rounded-lg bg-slate-100 dark:bg-slate-700 flex items-center justify-center">
406
- <svg class="w-5 h-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>
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-3xl font-bold text-slate-700 dark:text-slate-200">${report.files.length}</div>
410
- <div class="text-sm text-slate-400 dark:text-slate-500 mt-1">Scanned</div>
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":"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"}
1
+ {"version":3,"file":"HtmlFormatter.js","sourceRoot":"","sources":["../../../src/formatters/HtmlFormatter.ts"],"names":[],"mappings":";;;;;AAQA,gCAk/BC;AAz/BD,oCAAqC;AACrC,sEAA6C;AAE7C;;;GAGG;AACH,SAAgB,UAAU,CAAC,MAAkB;IACzC,iBAAiB;IACjB,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC9C,GAAG,IAAI;QACP,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAC9B,MAAM,OAAO,GAAG,iBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;YAC7D,OAAO;gBACH,GAAG,KAAK;gBACR,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,SAAS;gBACxC,eAAe,EAAE,OAAO,EAAE,WAAW,IAAI,0BAA0B;gBACnE,QAAQ,EAAE,OAAO,EAAE,IAAI,IAAI,KAAK,CAAC,MAAM;gBACvC,IAAI,EAAE,IAAI,CAAC,YAAY;aAC1B,CAAC;QACN,CAAC,CAAC;KACL,CAAC,CAAC,CAAC;IAEJ,oCAAoC;IACpC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,kBAAkB,CAAC;IAE9F,iCAAiC;IACjC,MAAM,UAAU,GAAG;QACf,QAAQ,EAAE;YACN,WAAW;YACX,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,OAAO,EAAE,sBAAW,CAAC,OAAO;YAC5B,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;YACjC,QAAQ,EAAE,MAAM,CAAC,UAAU,IAAI,CAAC;SACnC;QACD,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,aAAa;QACpB,KAAK,EAAE,iBAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzB,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,WAAW,EAAE,CAAC,CAAC,WAAW;SAC7B,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI;YACvB,SAAS,EAAE,CAAC;YACZ,YAAY,EAAE,CAAC;YACf,gBAAgB,EAAE,CAAC;YACnB,oBAAoB,EAAE,CAAC;YACvB,iBAAiB,EAAE,CAAC;YACpB,cAAc,EAAE,EAAE;YAClB,iBAAiB,EAAE,CAAC;YACpB,iBAAiB,EAAE,CAAC;YACpB,cAAc,EAAE,EAAE;SACrB;KACJ,CAAC;IAEF,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACxE,MAAM,WAAW,GACb,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK;QAC/B,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO;QACjC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;IAEnC,gBAAgB;IAChB,OAAO;;;;;gCAKqB,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uDAgMY,WAAW;;;;;;;;;;;;;;;;;;;;kGAoBgC,WAAW;sFACvB,sBAAW,CAAC,OAAO;;;;;;;;;;;;;;8IAcqC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qGA2CpD,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qFAoC3B,MAAM,CAAC,KAAK,CAAC,MAAM,4EAA4E,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK;6EACtI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO;yEACrC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0FA8Eb,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK;;;;;;;;;;4FAU7B,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO;;;;;;;;;;wFAUrC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI;;;;;;;;;;4FAU1B,MAAM,CAAC,KAAK,CAAC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yGA2CN,WAAW,gBAAgB,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAuevI,CAAC;AACT,CAAC"}
@@ -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"}