@danielsitek/eslint-stats 0.2.0 → 0.4.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 +17 -3
- package/dist/formatters/by-prometheus.d.ts +4 -0
- package/dist/formatters/by-prometheus.d.ts.map +1 -0
- package/dist/formatters/by-prometheus.js +102 -0
- package/dist/formatters/by-prometheus.js.map +1 -0
- package/dist/index.d.ts +1 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -7
- package/dist/index.js.map +1 -1
- package/dist/utils/chart.d.ts +3 -3
- package/dist/utils/chart.d.ts.map +1 -1
- package/dist/utils/chart.js +23 -21
- package/dist/utils/chart.js.map +1 -1
- package/dist/utils/stats.d.ts +2 -2
- package/dist/utils/stats.d.ts.map +1 -1
- package/dist/utils/stats.js +4 -4
- package/dist/utils/stats.js.map +1 -1
- package/package.json +11 -3
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
[](https://github.com/danielsitek/eslint-stats/releases)
|
|
6
6
|
[](https://www.npmjs.com/package/@danielsitek/eslint-stats)
|
|
7
7
|
|
|
8
|
-
#
|
|
8
|
+
# Statistics Reporter for ESLint
|
|
9
9
|
|
|
10
10
|
Modern TypeScript formatters for ESLint with aggregated error and warning statistics. Analyzes files by error frequency rather than location, making it easier to prioritize fixes when introducing ESLint to existing projects.
|
|
11
11
|
|
|
@@ -28,7 +28,7 @@ npm install --save-dev @danielsitek/eslint-stats
|
|
|
28
28
|
|
|
29
29
|
## Usage with ESLint
|
|
30
30
|
|
|
31
|
-
Create file `stats.mjs`:
|
|
31
|
+
Create a file named `stats.mjs`:
|
|
32
32
|
|
|
33
33
|
```js
|
|
34
34
|
import { byErrorAndWarning } from "@danielsitek/eslint-stats/by-error-and-warning";
|
|
@@ -56,12 +56,25 @@ Displays aggregated statistics for both errors and warnings without file separat
|
|
|
56
56
|
|
|
57
57
|
### by-error-and-warning-stacked
|
|
58
58
|
|
|
59
|
-
Similar to by-error-and-warning but displays errors and warnings stacked together when a rule has both severities across different files.
|
|
59
|
+
Similar to `by-error-and-warning` but displays errors and warnings stacked together when a rule has both severities across different files.
|
|
60
60
|
|
|
61
61
|
### by-folder
|
|
62
62
|
|
|
63
63
|
Displays aggregated statistics grouped by folder. Errors are shown in red, warnings in yellow.
|
|
64
64
|
|
|
65
|
+
### by-prometheus
|
|
66
|
+
|
|
67
|
+
Exports ESLint statistics in Prometheus text exposition format for monitoring and alerting. Generates metrics compatible with Prometheus, Grafana, and other observability tools.
|
|
68
|
+
|
|
69
|
+
**Metrics exported:**
|
|
70
|
+
|
|
71
|
+
- `eslint_rule_violations_total{rule,severity,folder}` - Violations by rule, severity, and folder
|
|
72
|
+
- `eslint_violations_by_severity_total{severity}` - Total violations by severity
|
|
73
|
+
- `eslint_files_total` - Total files analyzed
|
|
74
|
+
- `eslint_files_with_violations_total` - Files with violations
|
|
75
|
+
- `eslint_files_clean_total` - Files without violations
|
|
76
|
+
- `eslint_rules_violated_total` - Unique rules violated
|
|
77
|
+
|
|
65
78
|
## Demo
|
|
66
79
|
|
|
67
80
|
The package includes demo scripts for testing formatters:
|
|
@@ -72,6 +85,7 @@ npm run demo:warning
|
|
|
72
85
|
npm run demo:both
|
|
73
86
|
npm run demo:stacked
|
|
74
87
|
npm run demo:folder
|
|
88
|
+
npm run demo:prometheus
|
|
75
89
|
```
|
|
76
90
|
|
|
77
91
|
## Requirements
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"by-prometheus.d.ts","sourceRoot":"","sources":["../../src/formatters/by-prometheus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,mBAAmB,CAAC;AAkKjE,eAAO,MAAM,YAAY,GAAI,SAAS,UAAU,EAAE,KAAG,MAkFpD,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { byFolderAndRule } from "../utils/stats.js";
|
|
2
|
+
const escapeLabel = (value) => {
|
|
3
|
+
if (!/["\\\n]/.test(value)) {
|
|
4
|
+
return value;
|
|
5
|
+
}
|
|
6
|
+
return value
|
|
7
|
+
.replace(/\\/g, "\\\\")
|
|
8
|
+
.replace(/"/g, '\\"')
|
|
9
|
+
.replace(/\n/g, "\\n");
|
|
10
|
+
};
|
|
11
|
+
const metricLine = (name, labels, value) => {
|
|
12
|
+
const labelPairs = Object.entries(labels)
|
|
13
|
+
.map(([key, val]) => `${key}="${escapeLabel(val)}"`)
|
|
14
|
+
.join(",");
|
|
15
|
+
return labelPairs ? `${name}{${labelPairs}} ${value}` : `${name} ${value}`;
|
|
16
|
+
};
|
|
17
|
+
const metricHeader = (name, help, type) => {
|
|
18
|
+
return `# HELP ${name} ${help}\n# TYPE ${name} ${type}`;
|
|
19
|
+
};
|
|
20
|
+
const processFolderStats = (folderStats) => {
|
|
21
|
+
const lines = [];
|
|
22
|
+
const severityTotals = { error: 0, warning: 0 };
|
|
23
|
+
const uniqueRules = new Set();
|
|
24
|
+
for (const [folder, ruleStats] of Object.entries(folderStats)) {
|
|
25
|
+
for (const [rule, severityStats] of Object.entries(ruleStats)) {
|
|
26
|
+
uniqueRules.add(rule);
|
|
27
|
+
if (severityStats.error) {
|
|
28
|
+
severityTotals.error += severityStats.error;
|
|
29
|
+
lines.push(metricLine("eslint_rule_violations_total", { rule, severity: "error", folder }, severityStats.error));
|
|
30
|
+
}
|
|
31
|
+
if (severityStats.warning) {
|
|
32
|
+
severityTotals.warning += severityStats.warning;
|
|
33
|
+
lines.push(metricLine("eslint_rule_violations_total", { rule, severity: "warning", folder }, severityStats.warning));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
lines.sort();
|
|
38
|
+
return {
|
|
39
|
+
lines,
|
|
40
|
+
severityTotals,
|
|
41
|
+
uniqueRulesCount: uniqueRules.size,
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
const generateSeverityTotalsMetrics = (totals) => {
|
|
45
|
+
const lines = [];
|
|
46
|
+
if (totals.error > 0) {
|
|
47
|
+
lines.push(metricLine("eslint_violations_by_severity_total", { severity: "error" }, totals.error));
|
|
48
|
+
}
|
|
49
|
+
if (totals.warning > 0) {
|
|
50
|
+
lines.push(metricLine("eslint_violations_by_severity_total", { severity: "warning" }, totals.warning));
|
|
51
|
+
}
|
|
52
|
+
return lines;
|
|
53
|
+
};
|
|
54
|
+
const generateFileMetrics = (results) => {
|
|
55
|
+
const totalFiles = results.length;
|
|
56
|
+
let filesWithViolations = 0;
|
|
57
|
+
for (const result of results) {
|
|
58
|
+
if (result.messages.length > 0) {
|
|
59
|
+
filesWithViolations++;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const cleanFiles = totalFiles - filesWithViolations;
|
|
63
|
+
return [
|
|
64
|
+
metricLine("eslint_files_total", {}, totalFiles),
|
|
65
|
+
metricLine("eslint_files_with_violations_total", {}, filesWithViolations),
|
|
66
|
+
metricLine("eslint_files_clean_total", {}, cleanFiles),
|
|
67
|
+
];
|
|
68
|
+
};
|
|
69
|
+
export const byPrometheus = (results) => {
|
|
70
|
+
const folderStats = byFolderAndRule(results);
|
|
71
|
+
const { lines: ruleViolationsLines, severityTotals, uniqueRulesCount, } = processFolderStats(folderStats);
|
|
72
|
+
const sections = [];
|
|
73
|
+
if (ruleViolationsLines.length > 0) {
|
|
74
|
+
const ruleViolationsHeader = metricHeader("eslint_rule_violations_total", "Total number of ESLint rule violations", "counter");
|
|
75
|
+
sections.push([ruleViolationsHeader, ...ruleViolationsLines].join("\n"));
|
|
76
|
+
}
|
|
77
|
+
const severityTotalsLines = generateSeverityTotalsMetrics(severityTotals);
|
|
78
|
+
if (severityTotalsLines.length > 0) {
|
|
79
|
+
const severityTotalsHeader = metricHeader("eslint_violations_by_severity_total", "Total ESLint violations by severity", "counter");
|
|
80
|
+
sections.push([severityTotalsHeader, ...severityTotalsLines].join("\n"));
|
|
81
|
+
}
|
|
82
|
+
const fileMetricsLines = generateFileMetrics(results);
|
|
83
|
+
sections.push([
|
|
84
|
+
metricHeader("eslint_files_total", "Total number of files analyzed by ESLint", "counter"),
|
|
85
|
+
fileMetricsLines[0],
|
|
86
|
+
].join("\n"));
|
|
87
|
+
sections.push([
|
|
88
|
+
metricHeader("eslint_files_with_violations_total", "Total number of files with ESLint violations", "counter"),
|
|
89
|
+
fileMetricsLines[1],
|
|
90
|
+
].join("\n"));
|
|
91
|
+
sections.push([
|
|
92
|
+
metricHeader("eslint_files_clean_total", "Total number of files without violations", "counter"),
|
|
93
|
+
fileMetricsLines[2],
|
|
94
|
+
].join("\n"));
|
|
95
|
+
sections.push([
|
|
96
|
+
metricHeader("eslint_rules_violated_total", "Total number of different ESLint rules violated", "counter"),
|
|
97
|
+
metricLine("eslint_rules_violated_total", {}, uniqueRulesCount),
|
|
98
|
+
].join("\n"));
|
|
99
|
+
return sections.join("\n\n") + "\n";
|
|
100
|
+
};
|
|
101
|
+
export default byPrometheus;
|
|
102
|
+
//# sourceMappingURL=by-prometheus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"by-prometheus.js","sourceRoot":"","sources":["../../src/formatters/by-prometheus.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,12 +3,5 @@ export declare const byWarning: string;
|
|
|
3
3
|
export declare const byErrorAndWarning: string;
|
|
4
4
|
export declare const byErrorAndWarningStacked: string;
|
|
5
5
|
export declare const byFolder: string;
|
|
6
|
-
declare const
|
|
7
|
-
byError: string;
|
|
8
|
-
byWarning: string;
|
|
9
|
-
byErrorAndWarning: string;
|
|
10
|
-
byErrorAndWarningStacked: string;
|
|
11
|
-
byFolder: string;
|
|
12
|
-
};
|
|
13
|
-
export default _default;
|
|
6
|
+
export declare const byPrometheus: string;
|
|
14
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,OAAO,QAA+B,CAAC;AACpD,eAAO,MAAM,SAAS,QAAiC,CAAC;AACxD,eAAO,MAAM,iBAAiB,QAA2C,CAAC;AAC1E,eAAO,MAAM,wBAAwB,QAEpC,CAAC;AACF,eAAO,MAAM,QAAQ,QAAgC,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,OAAO,QAA+B,CAAC;AACpD,eAAO,MAAM,SAAS,QAAiC,CAAC;AACxD,eAAO,MAAM,iBAAiB,QAA2C,CAAC;AAC1E,eAAO,MAAM,wBAAwB,QAEpC,CAAC;AACF,eAAO,MAAM,QAAQ,QAAgC,CAAC;AACtD,eAAO,MAAM,YAAY,QAAoC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -7,11 +7,5 @@ export const byWarning = getFormatterPath("by-warning");
|
|
|
7
7
|
export const byErrorAndWarning = getFormatterPath("by-error-and-warning");
|
|
8
8
|
export const byErrorAndWarningStacked = getFormatterPath("by-error-and-warning-stacked");
|
|
9
9
|
export const byFolder = getFormatterPath("by-folder");
|
|
10
|
-
export
|
|
11
|
-
byError,
|
|
12
|
-
byWarning,
|
|
13
|
-
byErrorAndWarning,
|
|
14
|
-
byErrorAndWarningStacked,
|
|
15
|
-
byFolder,
|
|
16
|
-
};
|
|
10
|
+
export const byPrometheus = getFormatterPath("by-prometheus");
|
|
17
11
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAG1C,MAAM,gBAAgB,GAAG,CAAC,SAAiB,EAAU,EAAE;IAErD,OAAO,IAAI,CACT,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAC1C,YAAY,EACZ,GAAG,SAAS,KAAK,CAClB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;AACpD,MAAM,CAAC,MAAM,SAAS,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;AAC1E,MAAM,CAAC,MAAM,wBAAwB,GAAG,gBAAgB,CACtD,8BAA8B,CAC/B,CAAC;AACF,MAAM,CAAC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAG1C,MAAM,gBAAgB,GAAG,CAAC,SAAiB,EAAU,EAAE;IAErD,OAAO,IAAI,CACT,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAC1C,YAAY,EACZ,GAAG,SAAS,KAAK,CAClB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;AACpD,MAAM,CAAC,MAAM,SAAS,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;AAC1E,MAAM,CAAC,MAAM,wBAAwB,GAAG,gBAAgB,CACtD,8BAA8B,CAC/B,CAAC;AACF,MAAM,CAAC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;AACtD,MAAM,CAAC,MAAM,YAAY,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC"}
|
package/dist/utils/chart.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { RuleStats, FolderStats } from "../types/types.js";
|
|
2
|
-
export declare
|
|
3
|
-
export declare
|
|
4
|
-
export declare
|
|
2
|
+
export declare const getObjectOutput: (stats: RuleStats, maxWidth: number) => string;
|
|
3
|
+
export declare const getStackedOutput: (stats: RuleStats, maxWidth: number) => string;
|
|
4
|
+
export declare const getOutputByFolder: (stats: FolderStats, maxWidth: number) => string;
|
|
5
5
|
//# sourceMappingURL=chart.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../src/utils/chart.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAiB,MAAM,mBAAmB,CAAC;AAiC/E,
|
|
1
|
+
{"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../src/utils/chart.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAiB,MAAM,mBAAmB,CAAC;AAiC/E,eAAO,MAAM,eAAe,GAAI,OAAO,SAAS,EAAE,UAAU,MAAM,KAAG,MAuCpE,CAAC;AAQF,eAAO,MAAM,gBAAgB,GAC3B,OAAO,SAAS,EAChB,UAAU,MAAM,KACf,MAiEF,CAAC;AAOF,eAAO,MAAM,iBAAiB,GAC5B,OAAO,WAAW,EAClB,UAAU,MAAM,KACf,MAUF,CAAC"}
|
package/dist/utils/chart.js
CHANGED
|
@@ -5,12 +5,12 @@ const barColors = {
|
|
|
5
5
|
warning: "yellow",
|
|
6
6
|
};
|
|
7
7
|
const allSeverities = ["error", "warning"];
|
|
8
|
-
|
|
9
|
-
return
|
|
10
|
-
}
|
|
11
|
-
|
|
8
|
+
const getMaxRuleLength = (stats) => {
|
|
9
|
+
return Object.keys(stats).reduce((max, key) => Math.max(max, key.length), 0);
|
|
10
|
+
};
|
|
11
|
+
const getStringLength = (num) => {
|
|
12
12
|
return String(num).length;
|
|
13
|
-
}
|
|
13
|
+
};
|
|
14
14
|
const getBarRatio = (usedColumns, maxResult, maxWidth) => {
|
|
15
15
|
const maxBarLength = maxWidth - usedColumns;
|
|
16
16
|
return maxResult <= maxBarLength ? 1 : maxBarLength / maxResult;
|
|
@@ -20,12 +20,12 @@ const sortByKey = (obj) => {
|
|
|
20
20
|
.sort(([a], [b]) => a.localeCompare(b))
|
|
21
21
|
.map(([, value]) => value);
|
|
22
22
|
};
|
|
23
|
-
export
|
|
23
|
+
export const getObjectOutput = (stats, maxWidth) => {
|
|
24
24
|
const maxRuleLength = getMaxRuleLength(stats);
|
|
25
|
-
const maxResult =
|
|
26
|
-
ruleStats.error ?? 0,
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
const maxResult = Object.values(stats).reduce((max, ruleStats) => {
|
|
26
|
+
const currentMax = Math.max(ruleStats.error ?? 0, ruleStats.warning ?? 0);
|
|
27
|
+
return Math.max(max, currentMax);
|
|
28
|
+
}, 0);
|
|
29
29
|
const maxResultLength = String(maxResult).length;
|
|
30
30
|
const barRatio = getBarRatio(maxRuleLength + maxResultLength + 3, maxResult, maxWidth);
|
|
31
31
|
const getRuleOutput = (ruleStats, ruleName) => {
|
|
@@ -43,11 +43,11 @@ export function getObjectOutput(stats, maxWidth) {
|
|
|
43
43
|
getRuleOutput(ruleStats, ruleName),
|
|
44
44
|
]));
|
|
45
45
|
return `${sortByKey(mappedStats).join("\n")}\n`;
|
|
46
|
-
}
|
|
47
|
-
|
|
46
|
+
};
|
|
47
|
+
const isAnyRuleStacked = (stats) => {
|
|
48
48
|
return Object.values(stats).some((ruleData) => Object.keys(ruleData).length > 1);
|
|
49
|
-
}
|
|
50
|
-
export
|
|
49
|
+
};
|
|
50
|
+
export const getStackedOutput = (stats, maxWidth) => {
|
|
51
51
|
if (!isAnyRuleStacked(stats)) {
|
|
52
52
|
return getObjectOutput(stats, maxWidth);
|
|
53
53
|
}
|
|
@@ -58,16 +58,18 @@ export function getStackedOutput(stats, maxWidth) {
|
|
|
58
58
|
const maxRuleLength = getMaxRuleLength(normalizedStats);
|
|
59
59
|
const maxResults = {};
|
|
60
60
|
for (const severity of allSeverities) {
|
|
61
|
-
maxResults[severity] =
|
|
61
|
+
maxResults[severity] = Object.values(stats).reduce((max, s) => {
|
|
62
62
|
const val = severity === "error" ? s.error : s.warning;
|
|
63
|
-
return val ?? 0;
|
|
64
|
-
})
|
|
63
|
+
return Math.max(max, val ?? 0);
|
|
64
|
+
}, 0);
|
|
65
65
|
}
|
|
66
66
|
const maxResultLengths = Object.fromEntries(Object.entries(maxResults).map(([key, value]) => [
|
|
67
67
|
key,
|
|
68
68
|
getStringLength(value),
|
|
69
69
|
]));
|
|
70
|
-
const maxRuleSum =
|
|
70
|
+
const maxRuleSum = Object.values(normalizedStats).reduce((max, x) => {
|
|
71
|
+
return Math.max(max, x.error + x.warning);
|
|
72
|
+
}, 0);
|
|
71
73
|
const barRatio = getBarRatio(maxRuleLength +
|
|
72
74
|
Object.values(maxResultLengths).reduce((a, b) => a + b, 0) +
|
|
73
75
|
4, maxRuleSum, maxWidth);
|
|
@@ -87,12 +89,12 @@ export function getStackedOutput(stats, maxWidth) {
|
|
|
87
89
|
return `${ruleCell}${countCell}|${barCell}`;
|
|
88
90
|
})
|
|
89
91
|
.join("\n")}\n`;
|
|
90
|
-
}
|
|
92
|
+
};
|
|
91
93
|
const getFolderOutput = (maxWidth) => (folderStats, folderName) => `${underline(`${folderName}:`)}\n${getObjectOutput(folderStats, maxWidth)}`;
|
|
92
|
-
export
|
|
94
|
+
export const getOutputByFolder = (stats, maxWidth) => {
|
|
93
95
|
const filteredStats = Object.fromEntries(Object.entries(stats).filter(([, value]) => Object.keys(value).length > 0));
|
|
94
96
|
return Object.entries(filteredStats)
|
|
95
97
|
.map(([folderName, folderStats]) => getFolderOutput(maxWidth)(folderStats, folderName))
|
|
96
98
|
.join("");
|
|
97
|
-
}
|
|
99
|
+
};
|
|
98
100
|
//# sourceMappingURL=chart.js.map
|
package/dist/utils/chart.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart.js","sourceRoot":"","sources":["../../src/utils/chart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,MAAM,SAAS,GAAG;IAChB,KAAK,EAAE,KAAc;IACrB,OAAO,EAAE,QAAiB;CAC3B,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,SAAS,CAAU,CAAC;AAEpD,
|
|
1
|
+
{"version":3,"file":"chart.js","sourceRoot":"","sources":["../../src/utils/chart.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/stats.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { LintResult, RuleStats, FolderStats, SeverityLevel } from "../types/types.js";
|
|
2
|
-
export declare
|
|
3
|
-
export declare
|
|
2
|
+
export declare const byRule: (results: LintResult[], severity?: SeverityLevel) => RuleStats;
|
|
3
|
+
export declare const byFolderAndRule: (results: LintResult[], severity?: SeverityLevel) => FolderStats;
|
|
4
4
|
//# sourceMappingURL=stats.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/utils/stats.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EAEV,SAAS,EACT,WAAW,EACX,aAAa,EACd,MAAM,mBAAmB,CAAC;AA0C3B,
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/utils/stats.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EAEV,SAAS,EACT,WAAW,EACX,aAAa,EACd,MAAM,mBAAmB,CAAC;AA0C3B,eAAO,MAAM,MAAM,GACjB,SAAS,UAAU,EAAE,EACrB,WAAW,aAAa,KACvB,SAQF,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,SAAS,UAAU,EAAE,EACrB,WAAW,aAAa,KACvB,WAkBF,CAAC"}
|
package/dist/utils/stats.js
CHANGED
|
@@ -25,14 +25,14 @@ const getDirName = (result) => {
|
|
|
25
25
|
const dirname = path.dirname(result.filePath);
|
|
26
26
|
return dirname === "." ? "Base Folder" : dirname;
|
|
27
27
|
};
|
|
28
|
-
export
|
|
28
|
+
export const byRule = (results, severity) => {
|
|
29
29
|
const stats = {};
|
|
30
30
|
for (const result of results) {
|
|
31
31
|
loopOverMessages(stats, result, severity);
|
|
32
32
|
}
|
|
33
33
|
return stats;
|
|
34
|
-
}
|
|
35
|
-
export
|
|
34
|
+
};
|
|
35
|
+
export const byFolderAndRule = (results, severity) => {
|
|
36
36
|
const stats = {};
|
|
37
37
|
for (const result of results) {
|
|
38
38
|
if (result.messages.length === 0) {
|
|
@@ -45,5 +45,5 @@ export function byFolderAndRule(results, severity) {
|
|
|
45
45
|
loopOverMessages(stats[folderName], result, severity);
|
|
46
46
|
}
|
|
47
47
|
return stats;
|
|
48
|
-
}
|
|
48
|
+
};
|
|
49
49
|
//# sourceMappingURL=stats.js.map
|
package/dist/utils/stats.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/utils/stats.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAQ7B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,eAAe,GAAG,CAAC,OAAoB,EAAW,EAAE;IACxD,OAAO,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;AAC3E,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACvB,WAAsB,EACtB,MAAkB,EAClB,QAAwB,EAClB,EAAE;IACR,MAAM,YAAY,GAAG,QAAQ,KAAK,SAAS,CAAC;IAE5C,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,SAAS;QACX,CAAC;QAED,IAAI,YAAY,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClD,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAO,CAAC;QAC/B,IAAI,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAGpC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QACvC,CAAC;QAED,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpD,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,MAAkB,EAAU,EAAE;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE9C,OAAO,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC;AACnD,CAAC,CAAC;AAEF,MAAM,
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/utils/stats.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAQ7B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,eAAe,GAAG,CAAC,OAAoB,EAAW,EAAE;IACxD,OAAO,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;AAC3E,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACvB,WAAsB,EACtB,MAAkB,EAClB,QAAwB,EAClB,EAAE;IACR,MAAM,YAAY,GAAG,QAAQ,KAAK,SAAS,CAAC;IAE5C,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,SAAS;QACX,CAAC;QAED,IAAI,YAAY,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClD,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAO,CAAC;QAC/B,IAAI,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAGpC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QACvC,CAAC;QAED,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpD,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,MAAkB,EAAU,EAAE;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE9C,OAAO,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC;AACnD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,OAAqB,EACrB,QAAwB,EACb,EAAE;IACb,MAAM,KAAK,GAAc,EAAE,CAAC;IAE5B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,OAAqB,EACrB,QAAwB,EACX,EAAE;IACf,MAAM,KAAK,GAAgB,EAAE,CAAC;IAE9B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QAEtC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YACvB,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;QACzB,CAAC;QAED,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@danielsitek/eslint-stats",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Modern TypeScript formatters for ESLint with aggregated error/warning statistics and visual graphs - Zero dependencies",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -29,6 +29,10 @@
|
|
|
29
29
|
"./by-folder": {
|
|
30
30
|
"types": "./dist/formatters/by-folder.d.ts",
|
|
31
31
|
"import": "./dist/formatters/by-folder.js"
|
|
32
|
+
},
|
|
33
|
+
"./by-prometheus": {
|
|
34
|
+
"types": "./dist/formatters/by-prometheus.d.ts",
|
|
35
|
+
"import": "./dist/formatters/by-prometheus.js"
|
|
32
36
|
}
|
|
33
37
|
},
|
|
34
38
|
"files": [
|
|
@@ -45,7 +49,10 @@
|
|
|
45
49
|
"visualization",
|
|
46
50
|
"typescript",
|
|
47
51
|
"zero-dependencies",
|
|
48
|
-
"eslint9"
|
|
52
|
+
"eslint9",
|
|
53
|
+
"prometheus",
|
|
54
|
+
"metrics",
|
|
55
|
+
"monitoring"
|
|
49
56
|
],
|
|
50
57
|
"scripts": {
|
|
51
58
|
"build": "tsc -p tsconfig.build.json",
|
|
@@ -63,7 +70,8 @@
|
|
|
63
70
|
"demo:warning": "eslint .demo -f ./dist/formatters/by-warning.js -c .demo/eslint.config.mjs",
|
|
64
71
|
"demo:both": "eslint .demo -f ./dist/formatters/by-error-and-warning.js -c .demo/eslint.config.mjs",
|
|
65
72
|
"demo:stacked": "eslint .demo -f ./dist/formatters/by-error-and-warning-stacked.js -c .demo/eslint.config.mjs",
|
|
66
|
-
"demo:folder": "eslint .demo -f ./dist/formatters/by-folder.js -c .demo/eslint.config.mjs"
|
|
73
|
+
"demo:folder": "eslint .demo -f ./dist/formatters/by-folder.js -c .demo/eslint.config.mjs",
|
|
74
|
+
"demo:prometheus": "eslint .demo -f ./dist/formatters/by-prometheus.js -c .demo/eslint.config.mjs"
|
|
67
75
|
},
|
|
68
76
|
"repository": {
|
|
69
77
|
"type": "git",
|