@sfdxy/mule-lint 1.4.0 → 1.5.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 CHANGED
@@ -20,7 +20,7 @@
20
20
  **Mule-Lint** is a TypeScript-based linting tool designed to enforce best practices and standards for MuleSoft applications. It provides:
21
21
 
22
22
  - ✅ **10+ Built-in Rules** covering error handling, naming conventions, security, and logging
23
- - ✅ **Multiple Output Formats** - Table (human), JSON (scripts), SARIF (AI agents/VS Code)
23
+ - ✅ **Multiple Output Formats** - Table, JSON, SARIF, HTML, CSV <!-- id: 4 -->
24
24
  - ✅ **CI/CD Ready** - Exit codes and machine-readable output
25
25
  - ✅ **TypeScript** - Fully typed for VS Code extension integration
26
26
  - ✅ **Extensible** - Add custom rules for your organization
@@ -65,7 +65,7 @@ flowchart LR
65
65
  B --> C["Execute Rules"]
66
66
  C --> D["Collect Issues"]
67
67
  D --> E["Format Output"]
68
- E --> F["Table / JSON / SARIF"]
68
+ E --> F["Table / JSON / SARIF / HTML / CSV"]
69
69
  ```
70
70
 
71
71
 
@@ -75,10 +75,10 @@ flowchart LR
75
75
 
76
76
  ```bash
77
77
  # Global installation
78
- npm install -g mule-lint
78
+ npm install -g @sfdxy/mule-lint
79
79
 
80
80
  # Or as a dev dependency
81
- npm install --save-dev mule-lint
81
+ npm install --save-dev @sfdxy/mule-lint
82
82
  ```
83
83
 
84
84
  ---
@@ -109,7 +109,7 @@ mule-lint ./src/main/mule --fail-on-warning
109
109
 
110
110
  | Option | Description |
111
111
  |--------|-------------|
112
- | `-f, --format <type>` | Output format: `table`, `json`, `sarif` (default: `table`) |
112
+ | `-f, --format <type>` | Output format: `table`, `json`, `sarif`, `html`, `csv` (default: `table`) |
113
113
  | `-o, --output <file>` | Write output to file instead of stdout |
114
114
  | `-c, --config <file>` | Path to configuration file |
115
115
  | `-q, --quiet` | Show only errors (suppress warnings and info) |
@@ -259,6 +259,24 @@ Machine-readable for scripting:
259
259
  }
260
260
  ```
261
261
 
262
+ ### HTML (Human Readable)
263
+
264
+ Generates a visual report with summary cards and correct issue highlighting:
265
+
266
+ ```bash
267
+ mule-lint src/main/mule -f html -o report.html
268
+ ```
269
+
270
+ ### CSV (Spreadsheet)
271
+
272
+ Generates a comma-separated values file for Excel import:
273
+
274
+ ```csv
275
+ Severity,Rule,File,Line,Column,Message
276
+ error,MULE-001,src/main/mule/app.xml,10,5,"Global Error Handler missing"
277
+ warning,MULE-002,src/main/mule/app.xml,15,4,"Flow name not kebab-case"
278
+ ```
279
+
262
280
  ---
263
281
 
264
282
  ## Configuration
@@ -298,7 +316,7 @@ Create a `.mulelintrc.json` file in your project root:
298
316
  Import directly into your TypeScript/JavaScript projects:
299
317
 
300
318
  ```typescript
301
- import { LintEngine, ALL_RULES, formatSarif } from 'mule-lint';
319
+ import { LintEngine, ALL_RULES, formatSarif } from '@sfdxy/mule-lint';
302
320
 
303
321
  // Create engine with all rules
304
322
  const engine = new LintEngine({
@@ -325,7 +343,7 @@ const issues = engine.scanContent(xmlContent, 'file.xml');
325
343
  See [Extending Guide](docs/extending.md) for detailed instructions on creating custom rules.
326
344
 
327
345
  ```typescript
328
- import { BaseRule, ValidationContext, Issue } from 'mule-lint';
346
+ import { BaseRule, ValidationContext, Issue } from '@sfdxy/mule-lint';
329
347
 
330
348
  export class MyCustomRule extends BaseRule {
331
349
  id = 'CUSTOM-001';
@@ -111,6 +111,11 @@ async function runLint(targetPath, options) {
111
111
  fs.writeFileSync(outputPath, output, 'utf-8');
112
112
  console.log(`Report written to: ${outputPath}`);
113
113
  }
114
+ else if (formatterType === 'html') {
115
+ const outputPath = path.resolve('report.html');
116
+ fs.writeFileSync(outputPath, output, 'utf-8');
117
+ console.log(`Report written to: ${outputPath}`);
118
+ }
114
119
  else {
115
120
  console.log(output);
116
121
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mule-lint.js","sourceRoot":"","sources":["../../bin/mule-lint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mule-lint.js","sourceRoot":"","sources":["../../bin/mule-lint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { LintReport } from '../types/Report';
2
+ /**
3
+ * Format lint report as CSV
4
+ */
5
+ export declare function formatCsv(report: LintReport): string;
6
+ //# sourceMappingURL=CsvFormatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CsvFormatter.d.ts","sourceRoot":"","sources":["../../../src/formatters/CsvFormatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;GAEG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAiCpD"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatCsv = formatCsv;
4
+ /**
5
+ * Format lint report as CSV
6
+ */
7
+ function formatCsv(report) {
8
+ const lines = [];
9
+ // Header
10
+ lines.push('Severity,Rule,File,Line,Column,Message');
11
+ // Files
12
+ for (const file of report.files) {
13
+ if (!file.parsed) {
14
+ lines.push(escapeCsvRow([
15
+ 'error',
16
+ 'PARSE-ERROR',
17
+ file.relativePath,
18
+ '1',
19
+ '1',
20
+ file.parseError || 'Failed to parse file'
21
+ ]));
22
+ continue;
23
+ }
24
+ for (const issue of file.issues) {
25
+ lines.push(escapeCsvRow([
26
+ issue.severity,
27
+ issue.ruleId,
28
+ file.relativePath,
29
+ issue.line.toString(),
30
+ (issue.column || 0).toString(),
31
+ issue.message
32
+ ]));
33
+ }
34
+ }
35
+ return lines.join('\n');
36
+ }
37
+ function escapeCsvRow(fields) {
38
+ return fields.map(field => {
39
+ const escaped = field.replace(/"/g, '""');
40
+ if (escaped.includes(',') || escaped.includes('"') || escaped.includes('\n')) {
41
+ return `"${escaped}"`;
42
+ }
43
+ return escaped;
44
+ }).join(',');
45
+ }
46
+ //# sourceMappingURL=CsvFormatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CsvFormatter.js","sourceRoot":"","sources":["../../../src/formatters/CsvFormatter.ts"],"names":[],"mappings":";;AAKA,8BAiCC;AApCD;;GAEG;AACH,SAAgB,SAAS,CAAC,MAAkB;IACxC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,SAAS;IACT,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IAErD,QAAQ;IACR,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;gBACpB,OAAO;gBACP,aAAa;gBACb,IAAI,CAAC,YAAY;gBACjB,GAAG;gBACH,GAAG;gBACH,IAAI,CAAC,UAAU,IAAI,sBAAsB;aAC5C,CAAC,CAAC,CAAC;YACJ,SAAS;QACb,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;gBACpB,KAAK,CAAC,QAAQ;gBACd,KAAK,CAAC,MAAM;gBACZ,IAAI,CAAC,YAAY;gBACjB,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACrB,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE;gBAC9B,KAAK,CAAC,OAAO;aAChB,CAAC,CAAC,CAAC;QACR,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,YAAY,CAAC,MAAgB;IAClC,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QACtB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3E,OAAO,IAAI,OAAO,GAAG,CAAC;QAC1B,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { LintReport } from '../types/Report';
2
+ /**
3
+ * Format lint report as a modern, interactive HTML page
4
+ */
5
+ export declare function formatHtml(report: LintReport): string;
6
+ //# sourceMappingURL=HtmlFormatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HtmlFormatter.d.ts","sourceRoot":"","sources":["../../../src/formatters/HtmlFormatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAkXrD"}
@@ -0,0 +1,386 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatHtml = formatHtml;
4
+ /**
5
+ * Format lint report as a modern, interactive HTML page
6
+ */
7
+ function formatHtml(report) {
8
+ const title = 'Mule-Lint Report';
9
+ const date = new Date(report.timestamp).toLocaleString();
10
+ // Calculate stats
11
+ const totalErrors = report.summary.bySeverity.error;
12
+ const totalWarnings = report.summary.bySeverity.warning;
13
+ const totalInfos = report.summary.bySeverity.info;
14
+ const totalIssues = totalErrors + totalWarnings + totalInfos;
15
+ // Collect all issues into a flat list for the table
16
+ const allIssues = [];
17
+ for (const file of report.files) {
18
+ if (!file.parsed) {
19
+ allIssues.push({
20
+ severity: 'error',
21
+ file: file.relativePath,
22
+ line: 1,
23
+ column: 1,
24
+ message: file.parseError || 'Failed to parse XML file',
25
+ ruleId: 'PARSE-ERROR'
26
+ });
27
+ continue;
28
+ }
29
+ for (const issue of file.issues) {
30
+ allIssues.push({
31
+ severity: issue.severity,
32
+ file: file.relativePath,
33
+ line: issue.line,
34
+ column: issue.column || 0,
35
+ message: issue.message,
36
+ ruleId: issue.ruleId
37
+ });
38
+ }
39
+ }
40
+ return `<!DOCTYPE html>
41
+ <html lang="en">
42
+ <head>
43
+ <meta charset="UTF-8">
44
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
45
+ <title>${title}</title>
46
+ <style>
47
+ :root {
48
+ --primary: #00A1DF; /* MuleSoft Blue */
49
+ --primary-dark: #0077A5;
50
+ --success: #4CAF50;
51
+ --error: #F44336;
52
+ --warning: #FF9800;
53
+ --info: #2196F3;
54
+ --surface: #ffffff;
55
+ --background: #f4f6f8;
56
+ --text-primary: #172b4d;
57
+ --text-secondary: #6b778c;
58
+ --border: #dfe1e6;
59
+ --shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);
60
+ }
61
+
62
+ body {
63
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
64
+ margin: 0;
65
+ padding: 0;
66
+ background-color: var(--background);
67
+ color: var(--text-primary);
68
+ line-height: 1.6;
69
+ }
70
+
71
+ /* Layout */
72
+ .container {
73
+ width: 95%; /* Full width as requested */
74
+ margin: 0 auto;
75
+ padding: 20px;
76
+ }
77
+
78
+ /* Header */
79
+ header {
80
+ background-color: var(--surface);
81
+ padding: 1rem 0;
82
+ box-shadow: 0 2px 4px rgba(0,0,0,0.05);
83
+ margin-bottom: 2rem;
84
+ position: sticky;
85
+ top: 0;
86
+ z-index: 100;
87
+ }
88
+ .header-content {
89
+ display: flex;
90
+ justify-content: space-between;
91
+ align-items: center;
92
+ }
93
+ h1 { margin: 0; color: var(--primary); font-size: 1.5rem; display: flex; align-items: center; gap: 10px; }
94
+ .meta { color: var(--text-secondary); font-size: 0.9em; }
95
+
96
+ /* Dashboard Grid */
97
+ .dashboard {
98
+ display: grid;
99
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
100
+ gap: 20px;
101
+ margin-bottom: 30px;
102
+ }
103
+
104
+ /* Cards */
105
+ .card {
106
+ background: var(--surface);
107
+ padding: 24px;
108
+ border-radius: 8px;
109
+ box-shadow: var(--shadow);
110
+ display: flex;
111
+ flex-direction: column;
112
+ align-items: center;
113
+ justify-content: center;
114
+ transition: transform 0.2s;
115
+ }
116
+ .card:hover { transform: translateY(-2px); }
117
+
118
+ .number { font-size: 3rem; font-weight: 700; line-height: 1; margin-bottom: 0.5rem; }
119
+ .label { color: var(--text-secondary); font-size: 0.9rem; text-transform: uppercase; letter-spacing: 0.05em; font-weight: 600; }
120
+
121
+ /* Filters */
122
+ .controls {
123
+ display: flex;
124
+ gap: 15px;
125
+ margin-bottom: 20px;
126
+ align-items: center;
127
+ background: var(--surface);
128
+ padding: 15px;
129
+ border-radius: 8px;
130
+ box-shadow: var(--shadow);
131
+ }
132
+ .search-box {
133
+ flex: 1;
134
+ padding: 10px 15px;
135
+ border: 1px solid var(--border);
136
+ border-radius: 6px;
137
+ font-size: 1rem;
138
+ }
139
+ .filter-group {
140
+ display: flex;
141
+ gap: 10px;
142
+ }
143
+ .filter-btn {
144
+ padding: 8px 16px;
145
+ border: 1px solid var(--border);
146
+ background: var(--background);
147
+ border-radius: 6px;
148
+ cursor: pointer;
149
+ font-weight: 500;
150
+ color: var(--text-secondary);
151
+ display: flex;
152
+ align-items: center;
153
+ gap: 6px;
154
+ }
155
+ .filter-btn.active {
156
+ background: var(--primary);
157
+ color: white;
158
+ border-color: var(--primary);
159
+ }
160
+ .filter-btn:hover:not(.active) { background: #e0e0e0; }
161
+
162
+ /* Issues Table */
163
+ .table-container {
164
+ background: var(--surface);
165
+ border-radius: 8px;
166
+ box-shadow: var(--shadow);
167
+ overflow-x: auto;
168
+ }
169
+ table {
170
+ width: 100%;
171
+ border-collapse: collapse;
172
+ }
173
+
174
+ th, td {
175
+ text-align: left;
176
+ padding: 12px 20px;
177
+ border-bottom: 1px solid var(--border);
178
+ }
179
+ th {
180
+ background: #f9f9f9;
181
+ color: var(--text-secondary);
182
+ font-weight: 600;
183
+ font-size: 0.85rem;
184
+ text-transform: uppercase;
185
+ position: sticky;
186
+ top: 0;
187
+ }
188
+ tr:hover { background-color: #f5f9ff; }
189
+ tr:last-child td { border-bottom: none; }
190
+
191
+ .severity-badge {
192
+ font-weight: 700;
193
+ text-transform: uppercase;
194
+ font-size: 0.75rem;
195
+ padding: 4px 8px;
196
+ border-radius: 4px;
197
+ display: inline-block;
198
+ min-width: 60px;
199
+ text-align: center;
200
+ }
201
+ .bg-error { background-color: #ffebee; color: var(--error); }
202
+ .bg-warning { background-color: #fff3e0; color: var(--warning); }
203
+ .bg-info { background-color: #e3f2fd; color: var(--info); }
204
+
205
+ .file-link { font-family: monospace; font-weight: 600; color: var(--text-primary); }
206
+ .location { font-family: monospace; color: var(--text-secondary); }
207
+
208
+ .rule-pill {
209
+ display: inline-block;
210
+ background: #eef2f5;
211
+ padding: 2px 8px;
212
+ border-radius: 4px;
213
+ font-size: 0.8rem;
214
+ color: var(--text-secondary);
215
+ font-family: monospace;
216
+ border: 1px solid #dce1e6;
217
+ }
218
+
219
+ .empty-state {
220
+ text-align: center;
221
+ padding: 60px;
222
+ color: var(--text-secondary);
223
+ }
224
+ .empty-icon { font-size: 3rem; margin-bottom: 1rem; }
225
+
226
+ /* Responsive */
227
+ @media (max-width: 768px) {
228
+ .controls { flex-direction: column; align-items: stretch; }
229
+ .filter-group { justify-content: space-between; }
230
+ }
231
+ </style>
232
+ </head>
233
+ <body>
234
+ <header>
235
+ <div class="container header-content">
236
+ <div>
237
+ <h1>
238
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5"/></svg>
239
+ ${title}
240
+ </h1>
241
+ <div class="meta">Generated on ${date}</div>
242
+ </div>
243
+ <div>
244
+ <a href="#" onclick="window.print()" style="color: var(--primary); text-decoration: none; font-weight: 500;">Download / Print</a>
245
+ </div>
246
+ </div>
247
+ </header>
248
+
249
+ <div class="container">
250
+ <!-- Dashboard -->
251
+ <div class="dashboard">
252
+ <div class="card">
253
+ <span class="number" style="color: var(--error)">${totalErrors}</span>
254
+ <span class="label">Errors</span>
255
+ </div>
256
+ <div class="card">
257
+ <span class="number" style="color: var(--warning)">${totalWarnings}</span>
258
+ <span class="label">Warnings</span>
259
+ </div>
260
+ <div class="card">
261
+ <span class="number" style="color: var(--info)">${totalInfos}</span>
262
+ <span class="label">Infos</span>
263
+ </div>
264
+ <div class="card">
265
+ <span class="number">${report.files.length}</span>
266
+ <span class="label">Files Scanned</span>
267
+ </div>
268
+ </div>
269
+
270
+ <!-- Controls -->
271
+ <div class="controls">
272
+ <input type="text" id="searchInput" class="search-box" placeholder="Search by file, message, or rule..." onkeyup="filterTable()">
273
+ <div class="filter-group">
274
+ <button class="filter-btn active" onclick="toggleFilter('all', this)" id="btn-all">All</button>
275
+ <button class="filter-btn" onclick="toggleFilter('error', this)" id="btn-error">Errors</button>
276
+ <button class="filter-btn" onclick="toggleFilter('warning', this)" id="btn-warning">Warnings</button>
277
+ <button class="filter-btn" onclick="toggleFilter('info', this)" id="btn-info">Infos</button>
278
+ </div>
279
+ </div>
280
+
281
+ <!-- Main Table -->
282
+ <div class="table-container">
283
+ <table id="issuesTable">
284
+ <thead>
285
+ <tr>
286
+ <th width="100">Severity</th>
287
+ <th width="150">Rule</th>
288
+ <th width="300">File</th>
289
+ <th width="100">Location</th>
290
+ <th>Message</th>
291
+ </tr>
292
+ </thead>
293
+ <tbody>
294
+ ${allIssues.map(issue => renderIssueRow(issue)).join('')}
295
+ </tbody>
296
+ </table>
297
+
298
+ ${totalIssues === 0 && report.summary.parseErrors === 0 ? `
299
+ <div class="empty-state">
300
+ <div class="empty-icon">🎉</div>
301
+ <h2>No issues found!</h2>
302
+ <p>Your MuleSoft code looks clean and compliant.</p>
303
+ </div>
304
+ ` : ''}
305
+
306
+ <div id="noResults" class="empty-state" style="display: none;">
307
+ <h2>No matching issues found</h2>
308
+ <p>Try adjusting your search filters.</p>
309
+ </div>
310
+ </div>
311
+ </div>
312
+
313
+ <script>
314
+ let currentSeverity = 'all';
315
+
316
+ function toggleFilter(severity, btn) {
317
+ currentSeverity = severity;
318
+
319
+ // Update buttons
320
+ document.querySelectorAll('.filter-btn').forEach(b => b.classList.remove('active'));
321
+ btn.classList.add('active');
322
+
323
+ filterTable();
324
+ }
325
+
326
+ function filterTable() {
327
+ const input = document.getElementById('searchInput');
328
+ const filter = input.value.toLowerCase();
329
+ const table = document.getElementById('issuesTable');
330
+ const tr = table.getElementsByTagName('tr');
331
+ let visibleCount = 0;
332
+
333
+ for (let i = 1; i < tr.length; i++) {
334
+ const row = tr[i];
335
+ const severity = row.getAttribute('data-severity');
336
+ const text = row.innerText.toLowerCase();
337
+
338
+ const severityMatch = currentSeverity === 'all' || severity === currentSeverity;
339
+ const textMatch = text.includes(filter);
340
+
341
+ if (severityMatch && textMatch) {
342
+ row.style.display = '';
343
+ visibleCount++;
344
+ } else {
345
+ row.style.display = 'none';
346
+ }
347
+ }
348
+
349
+ // Show/hide no results message
350
+ const noResults = document.getElementById('noResults');
351
+ const emptyState = document.querySelector('.empty-state:not(#noResults)');
352
+
353
+ if (emptyState) return; // Don't interfere if main empty state is shown
354
+
355
+ if (visibleCount === 0 && tr.length > 1) {
356
+ noResults.style.display = 'block';
357
+ table.style.display = 'none';
358
+ } else {
359
+ noResults.style.display = 'none';
360
+ table.style.display = '';
361
+ }
362
+ }
363
+ </script>
364
+ </body>
365
+ </html>`;
366
+ }
367
+ function renderIssueRow(issue) {
368
+ const badgeClass = issue.severity === 'error' ? 'bg-error' :
369
+ issue.severity === 'warning' ? 'bg-warning' : 'bg-info';
370
+ return `<tr data-severity="${issue.severity}">
371
+ <td><span class="severity-badge ${badgeClass}">${issue.severity}</span></td>
372
+ <td><span class="rule-pill">${issue.ruleId}</span></td>
373
+ <td class="file-link" title="${issue.file}">${issue.file}</td>
374
+ <td class="location">${issue.line}:${issue.column}</td>
375
+ <td>${escapeHtml(issue.message)}</td>
376
+ </tr>`;
377
+ }
378
+ function escapeHtml(unsafe) {
379
+ return unsafe
380
+ .replace(/&/g, "&amp;")
381
+ .replace(/</g, "&lt;")
382
+ .replace(/>/g, "&gt;")
383
+ .replace(/"/g, "&quot;")
384
+ .replace(/'/g, "&#039;");
385
+ }
386
+ //# sourceMappingURL=HtmlFormatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HtmlFormatter.js","sourceRoot":"","sources":["../../../src/formatters/HtmlFormatter.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  export * from './TableFormatter';
2
2
  export * from './JsonFormatter';
3
3
  export * from './SarifFormatter';
4
+ export * from './HtmlFormatter';
5
+ export * from './CsvFormatter';
4
6
  import { LintReport } from '../types/Report';
5
7
  import { FormatterType } from '../types/Config';
6
8
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/formatters/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAMhD;;GAEG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM,CAatE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/formatters/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAE/B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAQhD;;GAEG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM,CAiBtE"}
@@ -18,10 +18,14 @@ exports.format = format;
18
18
  __exportStar(require("./TableFormatter"), exports);
19
19
  __exportStar(require("./JsonFormatter"), exports);
20
20
  __exportStar(require("./SarifFormatter"), exports);
21
+ __exportStar(require("./HtmlFormatter"), exports);
22
+ __exportStar(require("./CsvFormatter"), exports);
21
23
  const rules_1 = require("../rules");
22
24
  const TableFormatter_1 = require("./TableFormatter");
23
25
  const JsonFormatter_1 = require("./JsonFormatter");
24
26
  const SarifFormatter_1 = require("./SarifFormatter");
27
+ const HtmlFormatter_1 = require("./HtmlFormatter");
28
+ const CsvFormatter_1 = require("./CsvFormatter");
25
29
  /**
26
30
  * Format a lint report using the specified formatter
27
31
  */
@@ -33,6 +37,10 @@ function format(report, type) {
33
37
  return (0, JsonFormatter_1.formatJson)(report);
34
38
  case 'sarif':
35
39
  return (0, SarifFormatter_1.formatSarif)(report, rules_1.ALL_RULES);
40
+ case 'html':
41
+ return (0, HtmlFormatter_1.formatHtml)(report);
42
+ case 'csv':
43
+ return (0, CsvFormatter_1.formatCsv)(report);
36
44
  default: {
37
45
  const _exhaustiveCheck = type;
38
46
  throw new Error(`Unknown formatter type: ${String(_exhaustiveCheck)}`);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/formatters/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAcA,wBAaC;AA3BD,mDAAiC;AACjC,kDAAgC;AAChC,mDAAiC;AAIjC,oCAAqC;AACrC,qDAA+C;AAC/C,mDAA6C;AAC7C,qDAA+C;AAE/C;;GAEG;AACH,SAAgB,MAAM,CAAC,MAAkB,EAAE,IAAmB;IAC1D,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,OAAO;YACR,OAAO,IAAA,4BAAW,EAAC,MAAM,CAAC,CAAC;QAC/B,KAAK,MAAM;YACP,OAAO,IAAA,0BAAU,EAAC,MAAM,CAAC,CAAC;QAC9B,KAAK,OAAO;YACR,OAAO,IAAA,4BAAW,EAAC,MAAM,EAAE,iBAAS,CAAC,CAAC;QAC1C,OAAO,CAAC,CAAC,CAAC;YACN,MAAM,gBAAgB,GAAU,IAAI,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,2BAA2B,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;IACL,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/formatters/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAkBA,wBAiBC;AAnCD,mDAAiC;AACjC,kDAAgC;AAChC,mDAAiC;AACjC,kDAAgC;AAChC,iDAA+B;AAI/B,oCAAqC;AACrC,qDAA+C;AAC/C,mDAA6C;AAC7C,qDAA+C;AAC/C,mDAA6C;AAC7C,iDAA2C;AAE3C;;GAEG;AACH,SAAgB,MAAM,CAAC,MAAkB,EAAE,IAAmB;IAC1D,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,OAAO;YACR,OAAO,IAAA,4BAAW,EAAC,MAAM,CAAC,CAAC;QAC/B,KAAK,MAAM;YACP,OAAO,IAAA,0BAAU,EAAC,MAAM,CAAC,CAAC;QAC9B,KAAK,OAAO;YACR,OAAO,IAAA,4BAAW,EAAC,MAAM,EAAE,iBAAS,CAAC,CAAC;QAC1C,KAAK,MAAM;YACP,OAAO,IAAA,0BAAU,EAAC,MAAM,CAAC,CAAC;QAC9B,KAAK,KAAK;YACN,OAAO,IAAA,wBAAS,EAAC,MAAM,CAAC,CAAC;QAC7B,OAAO,CAAC,CAAC,CAAC;YACN,MAAM,gBAAgB,GAAU,IAAI,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,2BAA2B,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;IACL,CAAC;AACL,CAAC"}
@@ -2,7 +2,7 @@ import { RuleConfig } from './Rule';
2
2
  /**
3
3
  * Formatter type for output
4
4
  */
5
- export type FormatterType = 'table' | 'json' | 'sarif';
5
+ export type FormatterType = 'table' | 'json' | 'sarif' | 'html' | 'csv';
6
6
  /**
7
7
  * Main configuration for mule-lint
8
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../../src/types/Config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE5B,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC;IAE5C,yCAAyC;IACzC,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,yCAAyC;IACzC,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,qCAAqC;IACrC,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,mCAAmC;IACnC,gBAAgB,EAAE,aAAa,CAAC;IAEhC,mCAAmC;IACnC,aAAa,EAAE,OAAO,CAAC;IAEvB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,UAU5B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,uBAAuB;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qBAAqB;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB"}
1
+ {"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../../src/types/Config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE5B,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC;IAE5C,yCAAyC;IACzC,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,yCAAyC;IACzC,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,qCAAqC;IACrC,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,mCAAmC;IACnC,gBAAgB,EAAE,aAAa,CAAC;IAEhC,mCAAmC;IACnC,aAAa,EAAE,OAAO,CAAC;IAEvB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,UAU5B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,uBAAuB;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qBAAqB;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sfdxy/mule-lint",
3
- "version": "1.4.0",
3
+ "version": "1.5.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",