@kevinrabun/judges 3.3.0 → 3.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 +125 -1
- package/dist/ast/tree-sitter-ast.js +2 -4
- package/dist/ast/tree-sitter-ast.js.map +1 -1
- package/dist/cli.d.ts +8 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +169 -11
- package/dist/cli.js.map +1 -1
- package/dist/commands/ci-templates.d.ts +10 -0
- package/dist/commands/ci-templates.d.ts.map +1 -0
- package/dist/commands/ci-templates.js +90 -0
- package/dist/commands/ci-templates.js.map +1 -0
- package/dist/commands/fix.d.ts +21 -0
- package/dist/commands/fix.d.ts.map +1 -0
- package/dist/commands/fix.js +189 -0
- package/dist/commands/fix.js.map +1 -0
- package/dist/commands/hook.d.ts +9 -0
- package/dist/commands/hook.d.ts.map +1 -0
- package/dist/commands/hook.js +149 -0
- package/dist/commands/hook.js.map +1 -0
- package/dist/commands/init.d.ts +11 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +266 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/report.d.ts +13 -0
- package/dist/commands/report.d.ts.map +1 -0
- package/dist/commands/report.js +140 -0
- package/dist/commands/report.js.map +1 -0
- package/dist/commands/watch.d.ts +18 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +183 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/formatters/html.d.ts +13 -0
- package/dist/formatters/html.d.ts.map +1 -0
- package/dist/formatters/html.js +219 -0
- package/dist/formatters/html.js.map +1 -0
- package/dist/index.js +8 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTML Report Formatter — Self-contained HTML output with inline CSS.
|
|
3
|
+
*
|
|
4
|
+
* Generates a single-file HTML report with:
|
|
5
|
+
* - Executive summary with score gauge
|
|
6
|
+
* - Severity filter toggles
|
|
7
|
+
* - Per-judge accordion drill-down
|
|
8
|
+
* - Finding details with line numbers and suggested fixes
|
|
9
|
+
* - Dark/light theme auto-detection
|
|
10
|
+
*/
|
|
11
|
+
import type { TribunalVerdict } from "../types.js";
|
|
12
|
+
export declare function verdictToHtml(verdict: TribunalVerdict, filePath?: string): string;
|
|
13
|
+
//# sourceMappingURL=html.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/formatters/html.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,eAAe,EAA4B,MAAM,aAAa,CAAC;AA8F7E,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAiIjF"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTML Report Formatter — Self-contained HTML output with inline CSS.
|
|
3
|
+
*
|
|
4
|
+
* Generates a single-file HTML report with:
|
|
5
|
+
* - Executive summary with score gauge
|
|
6
|
+
* - Severity filter toggles
|
|
7
|
+
* - Per-judge accordion drill-down
|
|
8
|
+
* - Finding details with line numbers and suggested fixes
|
|
9
|
+
* - Dark/light theme auto-detection
|
|
10
|
+
*/
|
|
11
|
+
// ─── HTML Escaping ──────────────────────────────────────────────────────────
|
|
12
|
+
function esc(text) {
|
|
13
|
+
return text
|
|
14
|
+
.replace(/&/g, "&")
|
|
15
|
+
.replace(/</g, "<")
|
|
16
|
+
.replace(/>/g, ">")
|
|
17
|
+
.replace(/"/g, """)
|
|
18
|
+
.replace(/'/g, "'");
|
|
19
|
+
}
|
|
20
|
+
// ─── Severity Colors ────────────────────────────────────────────────────────
|
|
21
|
+
function severityColor(severity) {
|
|
22
|
+
switch (severity) {
|
|
23
|
+
case "critical":
|
|
24
|
+
return "#dc2626";
|
|
25
|
+
case "high":
|
|
26
|
+
return "#ea580c";
|
|
27
|
+
case "medium":
|
|
28
|
+
return "#ca8a04";
|
|
29
|
+
case "low":
|
|
30
|
+
return "#2563eb";
|
|
31
|
+
case "info":
|
|
32
|
+
return "#6b7280";
|
|
33
|
+
default:
|
|
34
|
+
return "#6b7280";
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function verdictColor(verdict) {
|
|
38
|
+
switch (verdict) {
|
|
39
|
+
case "pass":
|
|
40
|
+
return "#16a34a";
|
|
41
|
+
case "warning":
|
|
42
|
+
return "#ca8a04";
|
|
43
|
+
case "fail":
|
|
44
|
+
return "#dc2626";
|
|
45
|
+
default:
|
|
46
|
+
return "#6b7280";
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// ─── Finding Row ────────────────────────────────────────────────────────────
|
|
50
|
+
function renderFinding(f) {
|
|
51
|
+
const lines = f.lineNumbers?.length ? `Line ${f.lineNumbers.join(", ")}` : "";
|
|
52
|
+
const color = severityColor(f.severity);
|
|
53
|
+
const fix = f.suggestedFix
|
|
54
|
+
? `<details class="fix"><summary>Suggested Fix</summary><pre><code>${esc(f.suggestedFix)}</code></pre></details>`
|
|
55
|
+
: "";
|
|
56
|
+
return `
|
|
57
|
+
<div class="finding" data-severity="${f.severity}">
|
|
58
|
+
<div class="finding-header">
|
|
59
|
+
<span class="badge" style="background:${color}">${f.severity.toUpperCase()}</span>
|
|
60
|
+
<span class="rule-id">${esc(f.ruleId)}</span>
|
|
61
|
+
<span class="finding-title">${esc(f.title)}</span>
|
|
62
|
+
${lines ? `<span class="line-ref">${esc(lines)}</span>` : ""}
|
|
63
|
+
</div>
|
|
64
|
+
<p class="finding-desc">${esc(f.description)}</p>
|
|
65
|
+
<p class="finding-rec"><strong>Recommendation:</strong> ${esc(f.recommendation)}</p>
|
|
66
|
+
${f.reference ? `<p class="finding-ref"><a href="${esc(f.reference)}" target="_blank" rel="noopener">${esc(f.reference)}</a></p>` : ""}
|
|
67
|
+
${fix}
|
|
68
|
+
</div>`;
|
|
69
|
+
}
|
|
70
|
+
// ─── Judge Section ──────────────────────────────────────────────────────────
|
|
71
|
+
function renderJudge(evaluation) {
|
|
72
|
+
const icon = evaluation.verdict === "pass" ? "✅" : evaluation.verdict === "warning" ? "⚠️" : "❌";
|
|
73
|
+
const findingsHtml = evaluation.findings.length > 0
|
|
74
|
+
? evaluation.findings.map(renderFinding).join("")
|
|
75
|
+
: '<p class="no-findings">No findings</p>';
|
|
76
|
+
return `
|
|
77
|
+
<details class="judge-section">
|
|
78
|
+
<summary>
|
|
79
|
+
<span class="judge-icon">${icon}</span>
|
|
80
|
+
<span class="judge-name">${esc(evaluation.judgeName)}</span>
|
|
81
|
+
<span class="judge-score">${evaluation.score}/100</span>
|
|
82
|
+
<span class="judge-count">${evaluation.findings.length} finding(s)</span>
|
|
83
|
+
</summary>
|
|
84
|
+
<div class="judge-body">
|
|
85
|
+
<p class="judge-summary">${esc(evaluation.summary)}</p>
|
|
86
|
+
${findingsHtml}
|
|
87
|
+
</div>
|
|
88
|
+
</details>`;
|
|
89
|
+
}
|
|
90
|
+
// ─── Main Export ────────────────────────────────────────────────────────────
|
|
91
|
+
export function verdictToHtml(verdict, filePath) {
|
|
92
|
+
const totalFindings = verdict.evaluations.reduce((s, e) => s + e.findings.length, 0);
|
|
93
|
+
const allFindings = verdict.evaluations.flatMap((e) => e.findings);
|
|
94
|
+
const severityCounts = {
|
|
95
|
+
critical: allFindings.filter((f) => f.severity === "critical").length,
|
|
96
|
+
high: allFindings.filter((f) => f.severity === "high").length,
|
|
97
|
+
medium: allFindings.filter((f) => f.severity === "medium").length,
|
|
98
|
+
low: allFindings.filter((f) => f.severity === "low").length,
|
|
99
|
+
info: allFindings.filter((f) => f.severity === "info").length,
|
|
100
|
+
};
|
|
101
|
+
const vColor = verdictColor(verdict.overallVerdict);
|
|
102
|
+
const timestamp = new Date(verdict.timestamp).toLocaleString();
|
|
103
|
+
const fileLabel = filePath ? esc(filePath) : "stdin";
|
|
104
|
+
return `<!DOCTYPE html>
|
|
105
|
+
<html lang="en">
|
|
106
|
+
<head>
|
|
107
|
+
<meta charset="utf-8">
|
|
108
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
109
|
+
<title>Judges Panel Report — ${fileLabel}</title>
|
|
110
|
+
<style>
|
|
111
|
+
:root { --bg: #ffffff; --fg: #1a1a1a; --card: #f9fafb; --border: #e5e7eb; --muted: #6b7280; }
|
|
112
|
+
@media (prefers-color-scheme: dark) {
|
|
113
|
+
:root { --bg: #0f172a; --fg: #e2e8f0; --card: #1e293b; --border: #334155; --muted: #94a3b8; }
|
|
114
|
+
}
|
|
115
|
+
* { box-sizing: border-box; margin: 0; padding: 0; }
|
|
116
|
+
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; background: var(--bg); color: var(--fg); line-height: 1.6; padding: 2rem; max-width: 960px; margin: 0 auto; }
|
|
117
|
+
h1 { font-size: 1.5rem; margin-bottom: 0.25rem; }
|
|
118
|
+
.meta { color: var(--muted); font-size: 0.875rem; margin-bottom: 1.5rem; }
|
|
119
|
+
.summary-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 1rem; margin-bottom: 1.5rem; }
|
|
120
|
+
.summary-card { background: var(--card); border: 1px solid var(--border); border-radius: 8px; padding: 1rem; text-align: center; }
|
|
121
|
+
.summary-card .value { font-size: 2rem; font-weight: 700; }
|
|
122
|
+
.summary-card .label { font-size: 0.75rem; color: var(--muted); text-transform: uppercase; letter-spacing: 0.05em; }
|
|
123
|
+
.filters { display: flex; gap: 0.5rem; flex-wrap: wrap; margin-bottom: 1.5rem; }
|
|
124
|
+
.filter-btn { border: 1px solid var(--border); background: var(--card); color: var(--fg); padding: 0.25rem 0.75rem; border-radius: 4px; cursor: pointer; font-size: 0.8rem; }
|
|
125
|
+
.filter-btn.active { background: var(--fg); color: var(--bg); }
|
|
126
|
+
.judge-section { background: var(--card); border: 1px solid var(--border); border-radius: 8px; margin-bottom: 0.75rem; }
|
|
127
|
+
.judge-section summary { padding: 0.75rem 1rem; cursor: pointer; display: flex; align-items: center; gap: 0.75rem; font-weight: 500; }
|
|
128
|
+
.judge-section summary::-webkit-details-marker { display: none; }
|
|
129
|
+
.judge-section summary::before { content: "▶"; font-size: 0.7rem; transition: transform 0.2s; }
|
|
130
|
+
.judge-section[open] summary::before { transform: rotate(90deg); }
|
|
131
|
+
.judge-score { margin-left: auto; font-weight: 700; }
|
|
132
|
+
.judge-count { color: var(--muted); font-size: 0.8rem; }
|
|
133
|
+
.judge-body { padding: 0 1rem 1rem; }
|
|
134
|
+
.judge-summary { color: var(--muted); font-size: 0.875rem; margin-bottom: 0.75rem; }
|
|
135
|
+
.finding { border-left: 3px solid var(--border); padding: 0.5rem 0.75rem; margin-bottom: 0.5rem; background: var(--bg); border-radius: 0 4px 4px 0; }
|
|
136
|
+
.finding-header { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; margin-bottom: 0.25rem; }
|
|
137
|
+
.badge { color: #fff; padding: 0.1rem 0.4rem; border-radius: 3px; font-size: 0.7rem; font-weight: 600; }
|
|
138
|
+
.rule-id { font-weight: 600; font-size: 0.85rem; }
|
|
139
|
+
.finding-title { font-weight: 500; }
|
|
140
|
+
.line-ref { color: var(--muted); font-size: 0.8rem; }
|
|
141
|
+
.finding-desc, .finding-rec, .finding-ref { font-size: 0.85rem; margin-top: 0.25rem; }
|
|
142
|
+
.finding-ref a { color: #3b82f6; }
|
|
143
|
+
.fix summary { font-size: 0.8rem; cursor: pointer; color: #3b82f6; margin-top: 0.25rem; }
|
|
144
|
+
.fix pre { background: var(--card); padding: 0.5rem; border-radius: 4px; overflow-x: auto; font-size: 0.8rem; margin-top: 0.25rem; }
|
|
145
|
+
.no-findings { color: var(--muted); font-style: italic; }
|
|
146
|
+
footer { margin-top: 2rem; text-align: center; color: var(--muted); font-size: 0.75rem; }
|
|
147
|
+
</style>
|
|
148
|
+
</head>
|
|
149
|
+
<body>
|
|
150
|
+
<h1>Judges Panel Report</h1>
|
|
151
|
+
<p class="meta">File: ${fileLabel} · ${timestamp}</p>
|
|
152
|
+
|
|
153
|
+
<div class="summary-grid">
|
|
154
|
+
<div class="summary-card">
|
|
155
|
+
<div class="value" style="color:${vColor}">${verdict.overallVerdict.toUpperCase()}</div>
|
|
156
|
+
<div class="label">Verdict</div>
|
|
157
|
+
</div>
|
|
158
|
+
<div class="summary-card">
|
|
159
|
+
<div class="value">${verdict.overallScore}</div>
|
|
160
|
+
<div class="label">Score / 100</div>
|
|
161
|
+
</div>
|
|
162
|
+
<div class="summary-card">
|
|
163
|
+
<div class="value">${totalFindings}</div>
|
|
164
|
+
<div class="label">Findings</div>
|
|
165
|
+
</div>
|
|
166
|
+
<div class="summary-card">
|
|
167
|
+
<div class="value">${verdict.evaluations.length}</div>
|
|
168
|
+
<div class="label">Judges</div>
|
|
169
|
+
</div>
|
|
170
|
+
</div>
|
|
171
|
+
|
|
172
|
+
<div class="summary-grid">
|
|
173
|
+
<div class="summary-card">
|
|
174
|
+
<div class="value" style="color:${severityColor("critical")}">${severityCounts.critical}</div>
|
|
175
|
+
<div class="label">Critical</div>
|
|
176
|
+
</div>
|
|
177
|
+
<div class="summary-card">
|
|
178
|
+
<div class="value" style="color:${severityColor("high")}">${severityCounts.high}</div>
|
|
179
|
+
<div class="label">High</div>
|
|
180
|
+
</div>
|
|
181
|
+
<div class="summary-card">
|
|
182
|
+
<div class="value" style="color:${severityColor("medium")}">${severityCounts.medium}</div>
|
|
183
|
+
<div class="label">Medium</div>
|
|
184
|
+
</div>
|
|
185
|
+
<div class="summary-card">
|
|
186
|
+
<div class="value" style="color:${severityColor("low")}">${severityCounts.low}</div>
|
|
187
|
+
<div class="label">Low</div>
|
|
188
|
+
</div>
|
|
189
|
+
</div>
|
|
190
|
+
|
|
191
|
+
<div class="filters">
|
|
192
|
+
<button class="filter-btn active" onclick="filterFindings('all')">All</button>
|
|
193
|
+
<button class="filter-btn" onclick="filterFindings('critical')">Critical (${severityCounts.critical})</button>
|
|
194
|
+
<button class="filter-btn" onclick="filterFindings('high')">High (${severityCounts.high})</button>
|
|
195
|
+
<button class="filter-btn" onclick="filterFindings('medium')">Medium (${severityCounts.medium})</button>
|
|
196
|
+
<button class="filter-btn" onclick="filterFindings('low')">Low (${severityCounts.low})</button>
|
|
197
|
+
</div>
|
|
198
|
+
|
|
199
|
+
${verdict.evaluations.map(renderJudge).join("\n")}
|
|
200
|
+
|
|
201
|
+
<footer>Generated by <a href="https://github.com/KevinRabun/judges" style="color:#3b82f6">Judges Panel</a> v3.4.0</footer>
|
|
202
|
+
|
|
203
|
+
<script>
|
|
204
|
+
function filterFindings(severity) {
|
|
205
|
+
document.querySelectorAll('.filter-btn').forEach(b => b.classList.remove('active'));
|
|
206
|
+
event.target.classList.add('active');
|
|
207
|
+
document.querySelectorAll('.finding').forEach(el => {
|
|
208
|
+
if (severity === 'all' || el.dataset.severity === severity) {
|
|
209
|
+
el.style.display = '';
|
|
210
|
+
} else {
|
|
211
|
+
el.style.display = 'none';
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
</script>
|
|
216
|
+
</body>
|
|
217
|
+
</html>`;
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=html.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/formatters/html.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -18,12 +18,17 @@
|
|
|
18
18
|
*/
|
|
19
19
|
// ─── CLI Detection ──────────────────────────────────────────────────────────
|
|
20
20
|
// If the user passed a subcommand or flag, run as CLI instead of MCP server.
|
|
21
|
-
const cliCommands = new Set(["eval", "list", "evaluate"]);
|
|
21
|
+
const cliCommands = new Set(["eval", "list", "evaluate", "init", "fix", "watch", "report", "hook"]);
|
|
22
22
|
const cliFlags = new Set(["--help", "-h", "--file", "-f", "--version", "-v"]);
|
|
23
23
|
const firstArg = process.argv[2];
|
|
24
24
|
if (firstArg && (cliCommands.has(firstArg) || cliFlags.has(firstArg))) {
|
|
25
25
|
// Dynamic import to avoid loading MCP SDK when running as CLI
|
|
26
|
-
import("./cli.js")
|
|
26
|
+
import("./cli.js")
|
|
27
|
+
.then(({ runCli }) => runCli(process.argv))
|
|
28
|
+
.catch((err) => {
|
|
29
|
+
console.error("CLI error:", err);
|
|
30
|
+
process.exit(1);
|
|
31
|
+
});
|
|
27
32
|
}
|
|
28
33
|
else {
|
|
29
34
|
// ─── MCP Server Mode ────────────────────────────────────────────────────
|
|
@@ -34,7 +39,7 @@ else {
|
|
|
34
39
|
const { registerPrompts } = await import("./tools/prompts.js");
|
|
35
40
|
const server = new McpServer({
|
|
36
41
|
name: "judges",
|
|
37
|
-
version: "3.
|
|
42
|
+
version: "3.4.0",
|
|
38
43
|
});
|
|
39
44
|
registerTools(server);
|
|
40
45
|
registerPrompts(server);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;GAgBG;AAEH,+EAA+E;AAC/E,6EAA6E;AAE7E,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;GAgBG;AAEH,+EAA+E;AAC/E,6EAA6E;AAE7E,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AACpG,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;AAC9E,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEjC,IAAI,QAAQ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;IACtE,8DAA8D;IAC9D,MAAM,CAAC,UAAU,CAAC;SACf,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC1C,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACb,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC;KAAM,CAAC;IACN,2EAA2E;IAE3E,MAAM,CAAC,yCAAyC,CAAC;SAC9C,IAAI,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QAC5B,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,2CAA2C,CAAC,CAAC;QAC3F,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAC9D,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAE/D,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;YAC3B,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;QAEH,aAAa,CAAC,MAAM,CAAC,CAAC;QACtB,eAAe,CAAC,MAAM,CAAC,CAAC;QAExB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC5D,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACb,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/package.json
CHANGED