@danielsitek/eslint-stats 0.3.0 → 0.4.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
@@ -62,6 +62,19 @@ Similar to `by-error-and-warning` but displays errors and warnings stacked toget
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,4 +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
+ export declare const byPrometheus: string;
6
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"}
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,4 +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 const byPrometheus = getFormatterPath("by-prometheus");
10
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"}
@@ -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,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"}
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;AA8C3B,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"}
@@ -22,8 +22,11 @@ const loopOverMessages = (objectStats, result, severity) => {
22
22
  }
23
23
  };
24
24
  const getDirName = (result) => {
25
- const dirname = path.dirname(result.filePath);
26
- return dirname === "." ? "Base Folder" : dirname;
25
+ const dirname = path.relative(process.cwd(), path.dirname(result.filePath));
26
+ if (dirname === "" || dirname === ".") {
27
+ return ".";
28
+ }
29
+ return dirname;
27
30
  };
28
31
  export const byRule = (results, severity) => {
29
32
  const stats = {};
@@ -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,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"}
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,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE5E,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;QACtC,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,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.0",
3
+ "version": "0.4.1",
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",