@better-i18n/cli 0.2.0 → 0.2.2
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/dist/commands/doctor.js +1 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/doctor/index.d.ts.map +1 -1
- package/dist/doctor/index.js +4 -3
- package/dist/doctor/index.js.map +1 -1
- package/dist/doctor/score.d.ts +17 -17
- package/dist/doctor/score.d.ts.map +1 -1
- package/dist/doctor/score.js +60 -79
- package/dist/doctor/score.js.map +1 -1
- package/dist/reporters/doctor-eslint.d.ts +4 -1
- package/dist/reporters/doctor-eslint.d.ts.map +1 -1
- package/dist/reporters/doctor-eslint.js +58 -22
- package/dist/reporters/doctor-eslint.js.map +1 -1
- package/package.json +1 -1
package/dist/commands/doctor.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAsB,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAY5D,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAA6B;IAC/D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC;IACzC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAEtD,mCAAmC;IACnC,MAAM,OAAO,GAAG,MAAM;QACpB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAW,EAAE,EAAE,GAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAW,EAAE,EAAE,GAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAW,EAAE,EAAE,GAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;QACnH,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAEnE,IAAI,CAAC;QACH,MAAM,aAAa,GAAkB;YACnC,GAAG,EAAE,OAAO;YACZ,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC;QAEF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACzC,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAEtD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,OAAO,CACb,sBAAsB,MAAM,CAAC,OAAO,CAAC,KAAK,gBAAgB,CAC3D,CAAC;QACJ,CAAC;QAED,gBAAgB;QAChB,IAAI,MAAM,EAAE,CAAC;YACX,UAAU,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/doctor/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/doctor/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAUH,OAAO,KAAK,EAEV,cAAc,EACf,MAAM,sBAAsB,CAAC;AAO9B,OAAO,EAAwB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAIpE,MAAM,WAAW,aAAa;IAC5B,uCAAuC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,sBAAsB;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,GAAG,CAAC,EAAE;QACJ,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,uCAAuC;IACvC,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,+BAA+B;IAC/B,KAAK,EAAE,WAAW,CAAC;IACnB,yBAAyB;IACzB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAID;;;;;GAKG;AACH,wBAAsB,QAAQ,CAC5B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CA8EvB"}
|
package/dist/doctor/index.js
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* diagnose() vs scan() pattern: pure data vs UI concerns.
|
|
14
14
|
*/
|
|
15
15
|
import { execFileSync } from "node:child_process";
|
|
16
|
+
import { relative } from "node:path";
|
|
16
17
|
import { collectFiles } from "../analyzer/file-collector.js";
|
|
17
18
|
import { analyzeFile } from "../analyzer/index.js";
|
|
18
19
|
import { detectProjectContext } from "../context/detector.js";
|
|
@@ -105,7 +106,7 @@ async function runCodeAnalysis(directory, lintConfig, verbose) {
|
|
|
105
106
|
}
|
|
106
107
|
// Convert hardcoded string warnings to diagnostics
|
|
107
108
|
if (issue.severity === "warning") {
|
|
108
|
-
codeDiagnostics.push(adaptIssueToDiagnostic(issue));
|
|
109
|
+
codeDiagnostics.push(adaptIssueToDiagnostic(issue, directory));
|
|
109
110
|
}
|
|
110
111
|
}
|
|
111
112
|
}
|
|
@@ -202,10 +203,10 @@ async function loadFromCdn(context, verbose) {
|
|
|
202
203
|
*
|
|
203
204
|
* Maps issue.type to rule ID, looks up category and help from central maps.
|
|
204
205
|
*/
|
|
205
|
-
function adaptIssueToDiagnostic(issue) {
|
|
206
|
+
function adaptIssueToDiagnostic(issue, rootDir) {
|
|
206
207
|
const ruleId = mapIssueTypeToRuleId(issue);
|
|
207
208
|
return {
|
|
208
|
-
filePath: issue.file,
|
|
209
|
+
filePath: relative(rootDir, issue.file),
|
|
209
210
|
line: issue.line,
|
|
210
211
|
column: issue.column,
|
|
211
212
|
rule: ruleId,
|
package/dist/doctor/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/doctor/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/doctor/index.ts"],"names":[],"mappings":"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"}
|
package/dist/doctor/score.d.ts
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Health Score Calculator
|
|
3
3
|
*
|
|
4
|
-
* Calculates
|
|
4
|
+
* Calculates an occurrence-based health score (0-100) from diagnostics.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* - Counting unique rules (not occurrences) prevents a single noisy rule
|
|
10
|
-
* from tanking the entire score
|
|
6
|
+
* Unlike react-doctor (which counts unique rules), i18n doctor penalizes
|
|
7
|
+
* per occurrence because each hardcoded string is an independent task
|
|
8
|
+
* that requires its own t() wrapping.
|
|
11
9
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
10
|
+
* Overall score: 100 - (errors x 3.0) - (warnings x 0.15)
|
|
11
|
+
* Category score: 100 - (errors x 5.0) - (warnings x 0.5)
|
|
12
|
+
*
|
|
13
|
+
* Calibration targets:
|
|
14
|
+
* 0E, 0W → 100
|
|
15
|
+
* 0E, 104W → 84
|
|
16
|
+
* 10E, 20W → 67
|
|
17
|
+
* 5E, 0W → 85
|
|
18
|
+
* 1E, 0W → 97
|
|
18
19
|
*/
|
|
19
20
|
import type { I18nDiagnostic } from "../rules/registry.js";
|
|
20
21
|
export interface HealthScore {
|
|
@@ -31,11 +32,10 @@ export interface HealthScore {
|
|
|
31
32
|
* Calculate health score from diagnostics.
|
|
32
33
|
*
|
|
33
34
|
* Algorithm:
|
|
34
|
-
* 1.
|
|
35
|
-
* 2.
|
|
36
|
-
* 3.
|
|
37
|
-
* 4.
|
|
38
|
-
* 5. Overall = weighted average of category scores
|
|
35
|
+
* 1. Count total errors and warnings (info ignored)
|
|
36
|
+
* 2. Overall = 100 - (errors x 3.0) - (warnings x 0.15), clamped [0,100]
|
|
37
|
+
* 3. Per category = 100 - (catErrors x 5.0) - (catWarnings x 0.5), clamped [0,100]
|
|
38
|
+
* 4. passed = overall >= threshold
|
|
39
39
|
*/
|
|
40
40
|
export declare function calculateHealthScore(diagnostics: I18nDiagnostic[], passThreshold?: number): HealthScore;
|
|
41
41
|
//# sourceMappingURL=score.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"score.d.ts","sourceRoot":"","sources":["../../src/doctor/score.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"score.d.ts","sourceRoot":"","sources":["../../src/doctor/score.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAmB3D,MAAM,WAAW,WAAW;IAC1B,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,+CAA+C;IAC/C,MAAM,EAAE,OAAO,CAAC;IAChB,gDAAgD;IAChD,aAAa,EAAE,MAAM,CAAC;CACvB;AAID;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,cAAc,EAAE,EAC7B,aAAa,SAAiB,GAC7B,WAAW,CAmDb"}
|
package/dist/doctor/score.js
CHANGED
|
@@ -1,55 +1,65 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Health Score Calculator
|
|
3
3
|
*
|
|
4
|
-
* Calculates
|
|
4
|
+
* Calculates an occurrence-based health score (0-100) from diagnostics.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* - Counting unique rules (not occurrences) prevents a single noisy rule
|
|
10
|
-
* from tanking the entire score
|
|
6
|
+
* Unlike react-doctor (which counts unique rules), i18n doctor penalizes
|
|
7
|
+
* per occurrence because each hardcoded string is an independent task
|
|
8
|
+
* that requires its own t() wrapping.
|
|
11
9
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
10
|
+
* Overall score: 100 - (errors x 3.0) - (warnings x 0.15)
|
|
11
|
+
* Category score: 100 - (errors x 5.0) - (warnings x 0.5)
|
|
12
|
+
*
|
|
13
|
+
* Calibration targets:
|
|
14
|
+
* 0E, 0W → 100
|
|
15
|
+
* 0E, 104W → 84
|
|
16
|
+
* 10E, 20W → 67
|
|
17
|
+
* 5E, 0W → 85
|
|
18
|
+
* 1E, 0W → 97
|
|
18
19
|
*/
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
Structure: 0.5,
|
|
32
|
-
Performance: 0.4,
|
|
33
|
-
};
|
|
20
|
+
// ── Penalty Constants ───────────────────────────────────────────────
|
|
21
|
+
/** Per-occurrence penalty for errors on the overall score */
|
|
22
|
+
const ERROR_PENALTY = 3.0;
|
|
23
|
+
/** Per-occurrence penalty for warnings on the overall score */
|
|
24
|
+
const WARNING_PENALTY = 0.15;
|
|
25
|
+
/** Per-occurrence penalty for errors within a category */
|
|
26
|
+
const CAT_ERROR_PENALTY = 5.0;
|
|
27
|
+
/** Per-occurrence penalty for warnings within a category */
|
|
28
|
+
const CAT_WARNING_PENALTY = 0.5;
|
|
29
|
+
/** Default pass/fail threshold */
|
|
30
|
+
const PASS_THRESHOLD = 70;
|
|
31
|
+
// ── Calculator ──────────────────────────────────────────────────────
|
|
34
32
|
/**
|
|
35
33
|
* Calculate health score from diagnostics.
|
|
36
34
|
*
|
|
37
35
|
* Algorithm:
|
|
38
|
-
* 1.
|
|
39
|
-
* 2.
|
|
40
|
-
* 3.
|
|
41
|
-
* 4.
|
|
42
|
-
* 5. Overall = weighted average of category scores
|
|
36
|
+
* 1. Count total errors and warnings (info ignored)
|
|
37
|
+
* 2. Overall = 100 - (errors x 3.0) - (warnings x 0.15), clamped [0,100]
|
|
38
|
+
* 3. Per category = 100 - (catErrors x 5.0) - (catWarnings x 0.5), clamped [0,100]
|
|
39
|
+
* 4. passed = overall >= threshold
|
|
43
40
|
*/
|
|
44
|
-
export function calculateHealthScore(diagnostics, passThreshold =
|
|
45
|
-
//
|
|
46
|
-
|
|
41
|
+
export function calculateHealthScore(diagnostics, passThreshold = PASS_THRESHOLD) {
|
|
42
|
+
// Count totals
|
|
43
|
+
let totalErrors = 0;
|
|
44
|
+
let totalWarnings = 0;
|
|
45
|
+
// Count per category
|
|
46
|
+
const catErrors = new Map();
|
|
47
|
+
const catWarnings = new Map();
|
|
47
48
|
for (const d of diagnostics) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
if (d.severity === "error") {
|
|
50
|
+
totalErrors++;
|
|
51
|
+
catErrors.set(d.category, (catErrors.get(d.category) || 0) + 1);
|
|
52
|
+
}
|
|
53
|
+
else if (d.severity === "warning") {
|
|
54
|
+
totalWarnings++;
|
|
55
|
+
catWarnings.set(d.category, (catWarnings.get(d.category) || 0) + 1);
|
|
56
|
+
}
|
|
57
|
+
// "info" diagnostics don't affect score
|
|
51
58
|
}
|
|
52
|
-
//
|
|
59
|
+
// Overall score — flat, occurrence-based
|
|
60
|
+
const rawTotal = 100 - totalErrors * ERROR_PENALTY - totalWarnings * WARNING_PENALTY;
|
|
61
|
+
const total = clamp(Math.round(rawTotal));
|
|
62
|
+
// Per-category scores
|
|
53
63
|
const allCategories = [
|
|
54
64
|
"Coverage",
|
|
55
65
|
"Quality",
|
|
@@ -57,51 +67,22 @@ export function calculateHealthScore(diagnostics, passThreshold = 70) {
|
|
|
57
67
|
"Structure",
|
|
58
68
|
"Performance",
|
|
59
69
|
];
|
|
60
|
-
const
|
|
61
|
-
for (const
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
// Count unique rules by severity
|
|
68
|
-
const errorRules = new Set();
|
|
69
|
-
const warningRules = new Set();
|
|
70
|
-
for (const d of diags) {
|
|
71
|
-
if (d.severity === "error") {
|
|
72
|
-
errorRules.add(d.rule);
|
|
73
|
-
}
|
|
74
|
-
else if (d.severity === "warning") {
|
|
75
|
-
warningRules.add(d.rule);
|
|
76
|
-
}
|
|
77
|
-
// "info" diagnostics don't affect score
|
|
78
|
-
}
|
|
79
|
-
const errorPenalty = errorRules.size * (ERROR_PENALTIES[category] || 1.0);
|
|
80
|
-
const warningPenalty = warningRules.size * (WARNING_PENALTIES[category] || 0.5);
|
|
81
|
-
categoryScores[category] = Math.max(0, Math.round(100 - errorPenalty - warningPenalty));
|
|
82
|
-
}
|
|
83
|
-
// Overall score = weighted average
|
|
84
|
-
// Weights match category importance
|
|
85
|
-
const weights = {
|
|
86
|
-
Coverage: 40,
|
|
87
|
-
Quality: 25,
|
|
88
|
-
Code: 15,
|
|
89
|
-
Structure: 15,
|
|
90
|
-
Performance: 5,
|
|
91
|
-
};
|
|
92
|
-
let weightedSum = 0;
|
|
93
|
-
let totalWeight = 0;
|
|
94
|
-
for (const category of allCategories) {
|
|
95
|
-
const weight = weights[category] || 10;
|
|
96
|
-
weightedSum += categoryScores[category] * weight;
|
|
97
|
-
totalWeight += weight;
|
|
70
|
+
const categories = {};
|
|
71
|
+
for (const cat of allCategories) {
|
|
72
|
+
const errors = catErrors.get(cat) || 0;
|
|
73
|
+
const warnings = catWarnings.get(cat) || 0;
|
|
74
|
+
const rawCat = 100 - errors * CAT_ERROR_PENALTY - warnings * CAT_WARNING_PENALTY;
|
|
75
|
+
categories[cat] = clamp(Math.round(rawCat));
|
|
98
76
|
}
|
|
99
|
-
const total = Math.round(weightedSum / totalWeight);
|
|
100
77
|
return {
|
|
101
78
|
total,
|
|
102
|
-
categories
|
|
79
|
+
categories,
|
|
103
80
|
passed: total >= passThreshold,
|
|
104
81
|
passThreshold,
|
|
105
82
|
};
|
|
106
83
|
}
|
|
84
|
+
// ── Helpers ─────────────────────────────────────────────────────────
|
|
85
|
+
function clamp(value, min = 0, max = 100) {
|
|
86
|
+
return Math.max(min, Math.min(max, value));
|
|
87
|
+
}
|
|
107
88
|
//# sourceMappingURL=score.js.map
|
package/dist/doctor/score.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"score.js","sourceRoot":"","sources":["../../src/doctor/score.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"score.js","sourceRoot":"","sources":["../../src/doctor/score.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,uEAAuE;AAEvE,6DAA6D;AAC7D,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,+DAA+D;AAC/D,MAAM,eAAe,GAAG,IAAI,CAAC;AAE7B,0DAA0D;AAC1D,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,4DAA4D;AAC5D,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC,kCAAkC;AAClC,MAAM,cAAc,GAAG,EAAE,CAAC;AAe1B,uEAAuE;AAEvE;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAClC,WAA6B,EAC7B,aAAa,GAAG,cAAc;IAE9B,eAAe;IACf,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,qBAAqB;IACrB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE9C,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC3B,WAAW,EAAE,CAAC;YACd,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAClE,CAAC;aAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACpC,aAAa,EAAE,CAAC;YAChB,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtE,CAAC;QACD,wCAAwC;IAC1C,CAAC;IAED,yCAAyC;IACzC,MAAM,QAAQ,GACZ,GAAG,GAAG,WAAW,GAAG,aAAa,GAAG,aAAa,GAAG,eAAe,CAAC;IACtE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE1C,sBAAsB;IACtB,MAAM,aAAa,GAAG;QACpB,UAAU;QACV,SAAS;QACT,MAAM;QACN,WAAW;QACX,aAAa;KACd,CAAC;IAEF,MAAM,UAAU,GAA2B,EAAE,CAAC;IAE9C,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAE3C,MAAM,MAAM,GACV,GAAG,GAAG,MAAM,GAAG,iBAAiB,GAAG,QAAQ,GAAG,mBAAmB,CAAC;QACpE,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO;QACL,KAAK;QACL,UAAU;QACV,MAAM,EAAE,KAAK,IAAI,aAAa;QAC9B,aAAa;KACd,CAAC;AACJ,CAAC;AAED,uEAAuE;AAEvE,SAAS,KAAK,CAAC,KAAa,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG;IAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -12,6 +12,9 @@
|
|
|
12
12
|
import type { DoctorReport } from "../doctor/index.js";
|
|
13
13
|
/**
|
|
14
14
|
* Print ESLint-style report to stdout.
|
|
15
|
+
*
|
|
16
|
+
* When verbose is true, file:line listings are shown under each rule group
|
|
17
|
+
* (react-doctor pattern). Without verbose, only rule summary + count is shown.
|
|
15
18
|
*/
|
|
16
|
-
export declare function reportEslint(report: DoctorReport): void;
|
|
19
|
+
export declare function reportEslint(report: DoctorReport, verbose?: boolean): void;
|
|
17
20
|
//# sourceMappingURL=doctor-eslint.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-eslint.d.ts","sourceRoot":"","sources":["../../src/reporters/doctor-eslint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor-eslint.d.ts","sourceRoot":"","sources":["../../src/reporters/doctor-eslint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AA0FvD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,UAAQ,GAAG,IAAI,CAmGxE"}
|
|
@@ -56,25 +56,42 @@ function renderCategoryLine(category, score, count) {
|
|
|
56
56
|
const countStr = count > 0 ? dim(` (${count} issues)`) : dim(" (clean)");
|
|
57
57
|
return ` ${dim(padded)} ${colorFn(scoreStr)}${countStr}`;
|
|
58
58
|
}
|
|
59
|
-
// ── Diagnostic
|
|
60
|
-
|
|
59
|
+
// ── Diagnostic Helpers (react-doctor pattern) ───────────────────────
|
|
60
|
+
const SEVERITY_ORDER = {
|
|
61
|
+
error: 0,
|
|
62
|
+
warning: 1,
|
|
63
|
+
info: 2,
|
|
64
|
+
};
|
|
65
|
+
function colorizeBySeverity(text, severity) {
|
|
61
66
|
if (severity === "error")
|
|
62
|
-
return red(
|
|
67
|
+
return red(text);
|
|
63
68
|
if (severity === "warning")
|
|
64
|
-
return yellow(
|
|
65
|
-
return dim(
|
|
69
|
+
return yellow(text);
|
|
70
|
+
return dim(text);
|
|
66
71
|
}
|
|
67
|
-
function
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
+
function sortBySeverity(groups) {
|
|
73
|
+
return [...groups].sort(([, a], [, b]) => {
|
|
74
|
+
return (SEVERITY_ORDER[a[0].severity] ?? 2) - (SEVERITY_ORDER[b[0].severity] ?? 2);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
function buildFileLineMap(diagnostics) {
|
|
78
|
+
const fileLines = new Map();
|
|
79
|
+
for (const d of diagnostics) {
|
|
80
|
+
const lines = fileLines.get(d.filePath) ?? [];
|
|
81
|
+
if (d.line > 0)
|
|
82
|
+
lines.push(d.line);
|
|
83
|
+
fileLines.set(d.filePath, lines);
|
|
84
|
+
}
|
|
85
|
+
return fileLines;
|
|
72
86
|
}
|
|
73
87
|
// ── Main Reporter ───────────────────────────────────────────────────
|
|
74
88
|
/**
|
|
75
89
|
* Print ESLint-style report to stdout.
|
|
90
|
+
*
|
|
91
|
+
* When verbose is true, file:line listings are shown under each rule group
|
|
92
|
+
* (react-doctor pattern). Without verbose, only rule summary + count is shown.
|
|
76
93
|
*/
|
|
77
|
-
export function reportEslint(report) {
|
|
94
|
+
export function reportEslint(report, verbose = false) {
|
|
78
95
|
const { score, summary, diagnostics } = report;
|
|
79
96
|
// ── Header Box ──────────────────────────────────────────────────
|
|
80
97
|
console.log();
|
|
@@ -111,26 +128,45 @@ export function reportEslint(report) {
|
|
|
111
128
|
console.log(dim(` ${summary.filesScanned} files scanned, ${summary.keysChecked} keys checked, ${summary.localesChecked} locales`));
|
|
112
129
|
console.log(dim(` Completed in ${(report.durationMs / 1000).toFixed(2)}s`));
|
|
113
130
|
console.log();
|
|
114
|
-
// ── Diagnostic Listing (
|
|
131
|
+
// ── Diagnostic Listing (grouped by rule, react-doctor style) ────
|
|
115
132
|
const actionable = diagnostics.filter((d) => d.severity === "error" || d.severity === "warning");
|
|
116
133
|
if (actionable.length > 0) {
|
|
117
|
-
// Group by rule
|
|
134
|
+
// Group by rule
|
|
118
135
|
const byRule = new Map();
|
|
119
136
|
for (const d of actionable) {
|
|
120
137
|
const existing = byRule.get(d.rule) || [];
|
|
121
138
|
existing.push(d);
|
|
122
139
|
byRule.set(d.rule, existing);
|
|
123
140
|
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
const
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
141
|
+
// Sort: errors first, then warnings
|
|
142
|
+
const sortedGroups = sortBySeverity([...byRule.entries()]);
|
|
143
|
+
for (const [, diags] of sortedGroups) {
|
|
144
|
+
const first = diags[0];
|
|
145
|
+
const icon = colorizeBySeverity(first.severity === "error" ? "✗" : "⚠", first.severity);
|
|
146
|
+
const count = diags.length;
|
|
147
|
+
const countLabel = count > 1
|
|
148
|
+
? colorizeBySeverity(` (${count})`, first.severity)
|
|
149
|
+
: "";
|
|
150
|
+
// Rule message line
|
|
151
|
+
console.log(` ${icon} ${first.message}${countLabel}`);
|
|
152
|
+
// Help text (indented)
|
|
153
|
+
if (first.help) {
|
|
154
|
+
console.log(dim(` ${first.help}`));
|
|
131
155
|
}
|
|
132
|
-
|
|
133
|
-
|
|
156
|
+
// File:line listing (verbose or always for small sets)
|
|
157
|
+
if (verbose || count <= 5) {
|
|
158
|
+
const maxFiles = 10;
|
|
159
|
+
const fileLines = buildFileLineMap(diags);
|
|
160
|
+
const entries = [...fileLines.entries()];
|
|
161
|
+
const shown = entries.slice(0, maxFiles);
|
|
162
|
+
const hiddenFiles = entries.length - maxFiles;
|
|
163
|
+
for (const [filePath, lines] of shown) {
|
|
164
|
+
const lineLabel = lines.length > 0 ? `: ${lines.join(", ")}` : "";
|
|
165
|
+
console.log(dim(` ${filePath}${lineLabel}`));
|
|
166
|
+
}
|
|
167
|
+
if (hiddenFiles > 0) {
|
|
168
|
+
console.log(dim(` ... and ${hiddenFiles} more files`));
|
|
169
|
+
}
|
|
134
170
|
}
|
|
135
171
|
console.log();
|
|
136
172
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-eslint.js","sourceRoot":"","sources":["../../src/reporters/doctor-eslint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAIzE,wEAAwE;AAExE,SAAS,cAAc,CAAC,KAAa;IACnC,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAE7B,IAAI,KAA4B,CAAC;IACjC,IAAI,KAAa,CAAC;IAElB,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAChB,KAAK,GAAG,KAAK,CAAC;QACd,KAAK,GAAG,IAAI,CAAC;IACf,CAAC;SAAM,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QACvB,KAAK,GAAG,KAAK,CAAC;QACd,KAAK,GAAG,GAAG,CAAC;IACd,CAAC;SAAM,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QACvB,KAAK,GAAG,IAAI,CAAC;QACb,KAAK,GAAG,GAAG,CAAC;IACd,CAAC;SAAM,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QACvB,KAAK,GAAG,MAAM,CAAC;QACf,KAAK,GAAG,GAAG,CAAC;IACd,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,GAAG,CAAC;QACZ,KAAK,GAAG,GAAG,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,OAAO,GAAG,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;AACxE,CAAC;AAED,uEAAuE;AAEvE,SAAS,kBAAkB,CACzB,QAAgB,EAChB,KAAa,EACb,KAAa;IAEb,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE3C,IAAI,OAA8B,CAAC;IACnC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,GAAG,KAAK,CAAC;SAC5B,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,GAAG,IAAI,CAAC;SAChC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,GAAG,MAAM,CAAC;;QAClC,OAAO,GAAG,GAAG,CAAC;IAEnB,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACzE,OAAO,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,EAAE,CAAC;AAC5D,CAAC;AAED,uEAAuE;AAEvE,SAAS,
|
|
1
|
+
{"version":3,"file":"doctor-eslint.js","sourceRoot":"","sources":["../../src/reporters/doctor-eslint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAIzE,wEAAwE;AAExE,SAAS,cAAc,CAAC,KAAa;IACnC,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAE7B,IAAI,KAA4B,CAAC;IACjC,IAAI,KAAa,CAAC;IAElB,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAChB,KAAK,GAAG,KAAK,CAAC;QACd,KAAK,GAAG,IAAI,CAAC;IACf,CAAC;SAAM,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QACvB,KAAK,GAAG,KAAK,CAAC;QACd,KAAK,GAAG,GAAG,CAAC;IACd,CAAC;SAAM,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QACvB,KAAK,GAAG,IAAI,CAAC;QACb,KAAK,GAAG,GAAG,CAAC;IACd,CAAC;SAAM,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QACvB,KAAK,GAAG,MAAM,CAAC;QACf,KAAK,GAAG,GAAG,CAAC;IACd,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,GAAG,CAAC;QACZ,KAAK,GAAG,GAAG,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,OAAO,GAAG,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;AACxE,CAAC;AAED,uEAAuE;AAEvE,SAAS,kBAAkB,CACzB,QAAgB,EAChB,KAAa,EACb,KAAa;IAEb,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE3C,IAAI,OAA8B,CAAC;IACnC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,GAAG,KAAK,CAAC;SAC5B,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,GAAG,IAAI,CAAC;SAChC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,GAAG,MAAM,CAAC;;QAClC,OAAO,GAAG,GAAG,CAAC;IAEnB,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACzE,OAAO,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,EAAE,CAAC;AAC5D,CAAC;AAED,uEAAuE;AAEvE,MAAM,cAAc,GAA2B;IAC7C,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,CAAC;CACR,CAAC;AAEF,SAAS,kBAAkB,CAAC,IAAY,EAAE,QAAgB;IACxD,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,cAAc,CACrB,MAAoC;IAEpC,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CACrB,CAAC,CAAC,EAAE,CAAC,CAA6B,EAAE,CAAC,EAAE,CAAC,CAA6B,EAAE,EAAE;QACvE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACrF,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,WAA6B;IACrD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACnC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,uEAAuE;AAEvE;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,MAAoB,EAAE,OAAO,GAAG,KAAK;IAChE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAE/C,mEAAmE;IACnE,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,sBAAsB,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,gBAAgB,KAAK,CAAC,aAAa,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5J,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,mEAAmE;IACnE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;IAC/E,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;QAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,mEAAmE;IACnE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC;IACpE,IAAI,OAAO,CAAC,QAAQ,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,WAAW,CAAC,CAAC,CAAC;IAC7E,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC;IAEhE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,CAAC,GAAG,CACT,GAAG,CACD,KAAK,OAAO,CAAC,YAAY,mBAAmB,OAAO,CAAC,WAAW,kBAAkB,OAAO,CAAC,cAAc,UAAU,CAClH,CACF,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,mEAAmE;IACnE,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CACnC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,CAC1D,CAAC;IAEF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,gBAAgB;QAChB,MAAM,MAAM,GAAG,IAAI,GAAG,EAA4B,CAAC;QACnD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC1C,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC/B,CAAC;QAED,oCAAoC;QACpC,MAAM,YAAY,GAAG,cAAc,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAE3D,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,YAAY,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,IAAI,GAAG,kBAAkB,CAC7B,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EACtC,KAAK,CAAC,QAAQ,CACf,CAAC;YACF,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;YAC3B,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC;gBAC1B,CAAC,CAAC,kBAAkB,CAAC,KAAK,KAAK,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC;gBACnD,CAAC,CAAC,EAAE,CAAC;YAEP,oBAAoB;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,GAAG,UAAU,EAAE,CAAC,CAAC;YAEvD,uBAAuB;YACvB,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACxC,CAAC;YAED,uDAAuD;YACvD,IAAI,OAAO,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;gBAC1B,MAAM,QAAQ,GAAG,EAAE,CAAC;gBACpB,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAC1C,MAAM,OAAO,GAAG,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;gBACzC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;gBACzC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC;gBAE9C,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;oBACtC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAClE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,QAAQ,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC;gBAClD,CAAC;gBACD,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;oBACpB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,WAAW,aAAa,CAAC,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;AACH,CAAC"}
|