@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 CHANGED
@@ -5,7 +5,7 @@
5
5
  [![GitHub Release](https://img.shields.io/github/v/release/danielsitek/eslint-stats)](https://github.com/danielsitek/eslint-stats/releases)
6
6
  [![NPM Version](https://img.shields.io/npm/v/%40danielsitek%2Feslint-stats)](https://www.npmjs.com/package/@danielsitek/eslint-stats)
7
7
 
8
- # Statistic Reporter for ESLint
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,4 @@
1
+ import type { LintResult } from "../types/types.js";
2
+ export declare const byPrometheus: (results: LintResult[]) => string;
3
+ export default byPrometheus;
4
+ //# sourceMappingURL=by-prometheus.d.ts.map
@@ -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 _default: {
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
@@ -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;;;;;;;;AAEtD,wBAME"}
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 default {
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;AAEtD,eAAe;IACb,OAAO;IACP,SAAS;IACT,iBAAiB;IACjB,wBAAwB;IACxB,QAAQ;CACT,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"}
@@ -1,5 +1,5 @@
1
1
  import type { RuleStats, FolderStats } from "../types/types.js";
2
- export declare function getObjectOutput(stats: RuleStats, maxWidth: number): string;
3
- export declare function getStackedOutput(stats: RuleStats, maxWidth: number): string;
4
- export declare function getOutputByFolder(stats: FolderStats, maxWidth: number): string;
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,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAyC1E;AAQD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAmE3E;AAOD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,MAAM,GACf,MAAM,CAUR"}
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"}
@@ -5,12 +5,12 @@ const barColors = {
5
5
  warning: "yellow",
6
6
  };
7
7
  const allSeverities = ["error", "warning"];
8
- function getMaxRuleLength(stats) {
9
- return Math.max(...Object.keys(stats).map((key) => key.length));
10
- }
11
- function getStringLength(num) {
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 function getObjectOutput(stats, maxWidth) {
23
+ export const getObjectOutput = (stats, maxWidth) => {
24
24
  const maxRuleLength = getMaxRuleLength(stats);
25
- const maxResult = Math.max(...Object.values(stats).flatMap((ruleStats) => [
26
- ruleStats.error ?? 0,
27
- ruleStats.warning ?? 0,
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
- function isAnyRuleStacked(stats) {
46
+ };
47
+ const isAnyRuleStacked = (stats) => {
48
48
  return Object.values(stats).some((ruleData) => Object.keys(ruleData).length > 1);
49
- }
50
- export function getStackedOutput(stats, maxWidth) {
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] = Math.max(...Object.values(stats).map((s) => {
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 = Math.max(...Object.values(normalizedStats).map((x) => x.error + x.warning));
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 function getOutputByFolder(stats, maxWidth) {
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
@@ -1 +1 @@
1
- {"version":3,"file":"chart.js","sourceRoot":"","sources":["../../src/utils/chart.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chart.js","sourceRoot":"","sources":["../../src/utils/chart.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import type { LintResult, RuleStats, FolderStats, SeverityLevel } from "../types/types.js";
2
- export declare function byRule(results: LintResult[], severity?: SeverityLevel): RuleStats;
3
- export declare function byFolderAndRule(results: LintResult[], severity?: SeverityLevel): FolderStats;
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,wBAAgB,MAAM,CACpB,OAAO,EAAE,UAAU,EAAE,EACrB,QAAQ,CAAC,EAAE,aAAa,GACvB,SAAS,CAQX;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,UAAU,EAAE,EACrB,QAAQ,CAAC,EAAE,aAAa,GACvB,WAAW,CAkBb"}
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"}
@@ -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 function byRule(results, severity) {
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 function byFolderAndRule(results, severity) {
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
@@ -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,UAAU,MAAM,CACpB,OAAqB,EACrB,QAAwB;IAExB,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;AAED,MAAM,UAAU,eAAe,CAC7B,OAAqB,EACrB,QAAwB;IAExB,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"}
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.2.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",