intentpatch 0.0.0-stage → 0.1.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/LICENSE +21 -0
- package/README.ko.md +470 -0
- package/README.md +436 -2
- package/dist/application/ports/analysis-rule.d.ts +23 -0
- package/dist/application/ports/analysis-rule.d.ts.map +1 -0
- package/dist/application/ports/analysis-rule.js +2 -0
- package/dist/application/ports/analysis-rule.js.map +1 -0
- package/dist/application/ports/change-impact-analyzer.d.ts +6 -0
- package/dist/application/ports/change-impact-analyzer.d.ts.map +1 -0
- package/dist/application/ports/change-impact-analyzer.js +2 -0
- package/dist/application/ports/change-impact-analyzer.js.map +1 -0
- package/dist/application/ports/change-source.d.ts +10 -0
- package/dist/application/ports/change-source.d.ts.map +1 -0
- package/dist/application/ports/change-source.js +2 -0
- package/dist/application/ports/change-source.js.map +1 -0
- package/dist/application/ports/code-structure-analyzer.d.ts +6 -0
- package/dist/application/ports/code-structure-analyzer.d.ts.map +1 -0
- package/dist/application/ports/code-structure-analyzer.js +2 -0
- package/dist/application/ports/code-structure-analyzer.js.map +1 -0
- package/dist/application/ports/code-structure-extractor.d.ts +33 -0
- package/dist/application/ports/code-structure-extractor.d.ts.map +1 -0
- package/dist/application/ports/code-structure-extractor.js +2 -0
- package/dist/application/ports/code-structure-extractor.js.map +1 -0
- package/dist/application/ports/file-snapshot-source.d.ts +10 -0
- package/dist/application/ports/file-snapshot-source.d.ts.map +1 -0
- package/dist/application/ports/file-snapshot-source.js +2 -0
- package/dist/application/ports/file-snapshot-source.js.map +1 -0
- package/dist/application/ports/module-reference-extractor.d.ts +13 -0
- package/dist/application/ports/module-reference-extractor.d.ts.map +1 -0
- package/dist/application/ports/module-reference-extractor.js +2 -0
- package/dist/application/ports/module-reference-extractor.js.map +1 -0
- package/dist/application/ports/project-file-source.d.ts +16 -0
- package/dist/application/ports/project-file-source.d.ts.map +1 -0
- package/dist/application/ports/project-file-source.js +2 -0
- package/dist/application/ports/project-file-source.js.map +1 -0
- package/dist/application/ports/source-symbol-extractor.d.ts +14 -0
- package/dist/application/ports/source-symbol-extractor.d.ts.map +1 -0
- package/dist/application/ports/source-symbol-extractor.js +2 -0
- package/dist/application/ports/source-symbol-extractor.js.map +1 -0
- package/dist/application/ports/symbol-change-analyzer.d.ts +6 -0
- package/dist/application/ports/symbol-change-analyzer.d.ts.map +1 -0
- package/dist/application/ports/symbol-change-analyzer.js +2 -0
- package/dist/application/ports/symbol-change-analyzer.js.map +1 -0
- package/dist/application/ports/test-change-analyzer.d.ts +6 -0
- package/dist/application/ports/test-change-analyzer.d.ts.map +1 -0
- package/dist/application/ports/test-change-analyzer.js +2 -0
- package/dist/application/ports/test-change-analyzer.js.map +1 -0
- package/dist/application/rules/change-budget-rule.d.ts +7 -0
- package/dist/application/rules/change-budget-rule.d.ts.map +1 -0
- package/dist/application/rules/change-budget-rule.js +42 -0
- package/dist/application/rules/change-budget-rule.js.map +1 -0
- package/dist/application/rules/duplicate-implementation-rule.d.ts +7 -0
- package/dist/application/rules/duplicate-implementation-rule.d.ts.map +1 -0
- package/dist/application/rules/duplicate-implementation-rule.js +20 -0
- package/dist/application/rules/duplicate-implementation-rule.js.map +1 -0
- package/dist/application/rules/expected-scope-rule.d.ts +7 -0
- package/dist/application/rules/expected-scope-rule.d.ts.map +1 -0
- package/dist/application/rules/expected-scope-rule.js +27 -0
- package/dist/application/rules/expected-scope-rule.js.map +1 -0
- package/dist/application/rules/missing-test-change-rule.d.ts +7 -0
- package/dist/application/rules/missing-test-change-rule.d.ts.map +1 -0
- package/dist/application/rules/missing-test-change-rule.js +25 -0
- package/dist/application/rules/missing-test-change-rule.js.map +1 -0
- package/dist/application/rules/package-dependency-rule.d.ts +13 -0
- package/dist/application/rules/package-dependency-rule.d.ts.map +1 -0
- package/dist/application/rules/package-dependency-rule.js +174 -0
- package/dist/application/rules/package-dependency-rule.js.map +1 -0
- package/dist/application/rules/public-api-compatibility-rule.d.ts +7 -0
- package/dist/application/rules/public-api-compatibility-rule.d.ts.map +1 -0
- package/dist/application/rules/public-api-compatibility-rule.js +92 -0
- package/dist/application/rules/public-api-compatibility-rule.js.map +1 -0
- package/dist/application/rules/public-api-removal-rule.d.ts +7 -0
- package/dist/application/rules/public-api-removal-rule.d.ts.map +1 -0
- package/dist/application/rules/public-api-removal-rule.js +45 -0
- package/dist/application/rules/public-api-removal-rule.js.map +1 -0
- package/dist/application/rules/single-implementation-abstraction-rule.d.ts +7 -0
- package/dist/application/rules/single-implementation-abstraction-rule.d.ts.map +1 -0
- package/dist/application/rules/single-implementation-abstraction-rule.js +20 -0
- package/dist/application/rules/single-implementation-abstraction-rule.js.map +1 -0
- package/dist/application/services/analyze-code-structure.d.ts +14 -0
- package/dist/application/services/analyze-code-structure.d.ts.map +1 -0
- package/dist/application/services/analyze-code-structure.js +113 -0
- package/dist/application/services/analyze-code-structure.js.map +1 -0
- package/dist/application/services/analyze-import-impact.d.ts +14 -0
- package/dist/application/services/analyze-import-impact.d.ts.map +1 -0
- package/dist/application/services/analyze-import-impact.js +142 -0
- package/dist/application/services/analyze-import-impact.js.map +1 -0
- package/dist/application/services/analyze-test-changes.d.ts +8 -0
- package/dist/application/services/analyze-test-changes.d.ts.map +1 -0
- package/dist/application/services/analyze-test-changes.js +41 -0
- package/dist/application/services/analyze-test-changes.js.map +1 -0
- package/dist/application/services/compare-source-symbols.d.ts +13 -0
- package/dist/application/services/compare-source-symbols.d.ts.map +1 -0
- package/dist/application/services/compare-source-symbols.js +103 -0
- package/dist/application/services/compare-source-symbols.js.map +1 -0
- package/dist/application/services/path-pattern.d.ts +3 -0
- package/dist/application/services/path-pattern.d.ts.map +1 -0
- package/dist/application/services/path-pattern.js +34 -0
- package/dist/application/services/path-pattern.js.map +1 -0
- package/dist/application/services/rule-engine.d.ts +9 -0
- package/dist/application/services/rule-engine.d.ts.map +1 -0
- package/dist/application/services/rule-engine.js +13 -0
- package/dist/application/services/rule-engine.js.map +1 -0
- package/dist/application/use-cases/analyze-changes.d.ts +28 -0
- package/dist/application/use-cases/analyze-changes.d.ts.map +1 -0
- package/dist/application/use-cases/analyze-changes.js +88 -0
- package/dist/application/use-cases/analyze-changes.js.map +1 -0
- package/dist/domain/change-contract.d.ts +33 -0
- package/dist/domain/change-contract.d.ts.map +1 -0
- package/dist/domain/change-contract.js +76 -0
- package/dist/domain/change-contract.js.map +1 -0
- package/dist/domain/change.d.ts +37 -0
- package/dist/domain/change.d.ts.map +1 -0
- package/dist/domain/change.js +61 -0
- package/dist/domain/change.js.map +1 -0
- package/dist/domain/code-structure.d.ts +38 -0
- package/dist/domain/code-structure.d.ts.map +1 -0
- package/dist/domain/code-structure.js +63 -0
- package/dist/domain/code-structure.js.map +1 -0
- package/dist/domain/finding.d.ts +24 -0
- package/dist/domain/finding.d.ts.map +1 -0
- package/dist/domain/finding.js +30 -0
- package/dist/domain/finding.js.map +1 -0
- package/dist/domain/impact.d.ts +45 -0
- package/dist/domain/impact.d.ts.map +1 -0
- package/dist/domain/impact.js +60 -0
- package/dist/domain/impact.js.map +1 -0
- package/dist/domain/report.d.ts +22 -0
- package/dist/domain/report.d.ts.map +1 -0
- package/dist/domain/report.js +2 -0
- package/dist/domain/report.js.map +1 -0
- package/dist/domain/symbol-change.d.ts +60 -0
- package/dist/domain/symbol-change.d.ts.map +1 -0
- package/dist/domain/symbol-change.js +79 -0
- package/dist/domain/symbol-change.js.map +1 -0
- package/dist/domain/test-change.d.ts +29 -0
- package/dist/domain/test-change.d.ts.map +1 -0
- package/dist/domain/test-change.js +35 -0
- package/dist/domain/test-change.js.map +1 -0
- package/dist/infrastructure/config/json-change-contract-loader.d.ts +6 -0
- package/dist/infrastructure/config/json-change-contract-loader.d.ts.map +1 -0
- package/dist/infrastructure/config/json-change-contract-loader.js +130 -0
- package/dist/infrastructure/config/json-change-contract-loader.js.map +1 -0
- package/dist/infrastructure/filesystem/repository-path.d.ts +3 -0
- package/dist/infrastructure/filesystem/repository-path.d.ts.map +1 -0
- package/dist/infrastructure/filesystem/repository-path.js +11 -0
- package/dist/infrastructure/filesystem/repository-path.js.map +1 -0
- package/dist/infrastructure/git/diff-parser.d.ts +3 -0
- package/dist/infrastructure/git/diff-parser.d.ts.map +1 -0
- package/dist/infrastructure/git/diff-parser.js +124 -0
- package/dist/infrastructure/git/diff-parser.js.map +1 -0
- package/dist/infrastructure/git/git-change-source.d.ts +13 -0
- package/dist/infrastructure/git/git-change-source.d.ts.map +1 -0
- package/dist/infrastructure/git/git-change-source.js +43 -0
- package/dist/infrastructure/git/git-change-source.js.map +1 -0
- package/dist/infrastructure/git/git-file-snapshot-source.d.ts +14 -0
- package/dist/infrastructure/git/git-file-snapshot-source.d.ts.map +1 -0
- package/dist/infrastructure/git/git-file-snapshot-source.js +87 -0
- package/dist/infrastructure/git/git-file-snapshot-source.js.map +1 -0
- package/dist/infrastructure/git/git-project-file-source.d.ts +16 -0
- package/dist/infrastructure/git/git-project-file-source.d.ts.map +1 -0
- package/dist/infrastructure/git/git-project-file-source.js +113 -0
- package/dist/infrastructure/git/git-project-file-source.js.map +1 -0
- package/dist/infrastructure/git/untracked-file-collector.d.ts +4 -0
- package/dist/infrastructure/git/untracked-file-collector.d.ts.map +1 -0
- package/dist/infrastructure/git/untracked-file-collector.js +52 -0
- package/dist/infrastructure/git/untracked-file-collector.js.map +1 -0
- package/dist/infrastructure/process/command-runner.d.ts +17 -0
- package/dist/infrastructure/process/command-runner.d.ts.map +1 -0
- package/dist/infrastructure/process/command-runner.js +35 -0
- package/dist/infrastructure/process/command-runner.js.map +1 -0
- package/dist/infrastructure/typescript/parse-typescript-source.d.ts +11 -0
- package/dist/infrastructure/typescript/parse-typescript-source.d.ts.map +1 -0
- package/dist/infrastructure/typescript/parse-typescript-source.js +31 -0
- package/dist/infrastructure/typescript/parse-typescript-source.js.map +1 -0
- package/dist/infrastructure/typescript/typescript-code-structure-extractor.d.ts +7 -0
- package/dist/infrastructure/typescript/typescript-code-structure-extractor.d.ts.map +1 -0
- package/dist/infrastructure/typescript/typescript-code-structure-extractor.js +80 -0
- package/dist/infrastructure/typescript/typescript-code-structure-extractor.js.map +1 -0
- package/dist/infrastructure/typescript/typescript-module-reference-extractor.d.ts +7 -0
- package/dist/infrastructure/typescript/typescript-module-reference-extractor.d.ts.map +1 -0
- package/dist/infrastructure/typescript/typescript-module-reference-extractor.js +37 -0
- package/dist/infrastructure/typescript/typescript-module-reference-extractor.js.map +1 -0
- package/dist/infrastructure/typescript/typescript-symbol-extractor.d.ts +7 -0
- package/dist/infrastructure/typescript/typescript-symbol-extractor.d.ts.map +1 -0
- package/dist/infrastructure/typescript/typescript-symbol-extractor.js +206 -0
- package/dist/infrastructure/typescript/typescript-symbol-extractor.js.map +1 -0
- package/dist/presentation/analyze-repository.d.ts +10 -0
- package/dist/presentation/analyze-repository.d.ts.map +1 -0
- package/dist/presentation/analyze-repository.js +55 -0
- package/dist/presentation/analyze-repository.js.map +1 -0
- package/dist/presentation/cli/arguments.d.ts +26 -0
- package/dist/presentation/cli/arguments.d.ts.map +1 -0
- package/dist/presentation/cli/arguments.js +120 -0
- package/dist/presentation/cli/arguments.js.map +1 -0
- package/dist/presentation/cli/failure-policy.d.ts +3 -0
- package/dist/presentation/cli/failure-policy.d.ts.map +1 -0
- package/dist/presentation/cli/failure-policy.js +5 -0
- package/dist/presentation/cli/failure-policy.js.map +1 -0
- package/dist/presentation/cli/main.d.ts +3 -0
- package/dist/presentation/cli/main.d.ts.map +1 -0
- package/dist/presentation/cli/main.js +71 -0
- package/dist/presentation/cli/main.js.map +1 -0
- package/dist/presentation/cli/report-file-writer.d.ts +3 -0
- package/dist/presentation/cli/report-file-writer.d.ts.map +1 -0
- package/dist/presentation/cli/report-file-writer.js +9 -0
- package/dist/presentation/cli/report-file-writer.js.map +1 -0
- package/dist/presentation/cli/report-formatter.d.ts +5 -0
- package/dist/presentation/cli/report-formatter.d.ts.map +1 -0
- package/dist/presentation/cli/report-formatter.js +14 -0
- package/dist/presentation/cli/report-formatter.js.map +1 -0
- package/dist/presentation/cli/text-report.d.ts +3 -0
- package/dist/presentation/cli/text-report.d.ts.map +1 -0
- package/dist/presentation/cli/text-report.js +151 -0
- package/dist/presentation/cli/text-report.js.map +1 -0
- package/dist/presentation/github/action-inputs.d.ts +14 -0
- package/dist/presentation/github/action-inputs.d.ts.map +1 -0
- package/dist/presentation/github/action-inputs.js +24 -0
- package/dist/presentation/github/action-inputs.js.map +1 -0
- package/dist/presentation/github/action-main.d.ts +3 -0
- package/dist/presentation/github/action-main.d.ts.map +1 -0
- package/dist/presentation/github/action-main.js +20 -0
- package/dist/presentation/github/action-main.js.map +1 -0
- package/dist/presentation/github/action-runtime.d.ts +22 -0
- package/dist/presentation/github/action-runtime.d.ts.map +1 -0
- package/dist/presentation/github/action-runtime.js +58 -0
- package/dist/presentation/github/action-runtime.js.map +1 -0
- package/dist/presentation/github/comparison.d.ts +11 -0
- package/dist/presentation/github/comparison.d.ts.map +1 -0
- package/dist/presentation/github/comparison.js +35 -0
- package/dist/presentation/github/comparison.js.map +1 -0
- package/dist/presentation/github/markdown-summary.d.ts +4 -0
- package/dist/presentation/github/markdown-summary.d.ts.map +1 -0
- package/dist/presentation/github/markdown-summary.js +47 -0
- package/dist/presentation/github/markdown-summary.js.map +1 -0
- package/dist/presentation/github/run-action.d.ts +7 -0
- package/dist/presentation/github/run-action.d.ts.map +1 -0
- package/dist/presentation/github/run-action.js +81 -0
- package/dist/presentation/github/run-action.js.map +1 -0
- package/dist/presentation/html/html-report.d.ts +4 -0
- package/dist/presentation/html/html-report.d.ts.map +1 -0
- package/dist/presentation/html/html-report.js +362 -0
- package/dist/presentation/html/html-report.js.map +1 -0
- package/package.json +57 -4
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
/** ChangeReport를 외부 리소스가 필요 없는 정적 HTML 문서로 변환한다. */
|
|
2
|
+
export function formatHtmlReport(report) {
|
|
3
|
+
const target = report.target.headRef === undefined
|
|
4
|
+
? `${report.target.baseRef} → working tree`
|
|
5
|
+
: `${report.target.baseRef} → ${report.target.headRef}`;
|
|
6
|
+
const newDependencies = report.findings.items.filter((finding) => finding.ruleId.startsWith("dependency/new-")).length;
|
|
7
|
+
const riskyApiChanges = report.findings.items.filter((finding) => finding.ruleId.startsWith("api/")).length;
|
|
8
|
+
return `<!doctype html>
|
|
9
|
+
<html lang="en">
|
|
10
|
+
<head>
|
|
11
|
+
<meta charset="utf-8">
|
|
12
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
13
|
+
<meta name="color-scheme" content="dark">
|
|
14
|
+
<title>IntentPatch · Change Report</title>
|
|
15
|
+
<style>${styles}</style>
|
|
16
|
+
</head>
|
|
17
|
+
<body>
|
|
18
|
+
<main class="shell">
|
|
19
|
+
<header class="hero">
|
|
20
|
+
<div>
|
|
21
|
+
<p class="eyebrow">IntentPatch / deterministic analysis</p>
|
|
22
|
+
<h1>Agent Change Report</h1>
|
|
23
|
+
<p class="target">${escapeHtml(target)}</p>
|
|
24
|
+
</div>
|
|
25
|
+
<div class="report-state ${report.findings.summary.total === 0 ? "clear" : "attention"}">
|
|
26
|
+
<span>${report.findings.summary.total === 0 ? "Clear" : "Review"}</span>
|
|
27
|
+
<strong>${report.findings.summary.total} findings</strong>
|
|
28
|
+
</div>
|
|
29
|
+
</header>
|
|
30
|
+
|
|
31
|
+
${renderIntent(report.contract)}
|
|
32
|
+
${renderSummary(report, newDependencies, riskyApiChanges)}
|
|
33
|
+
${renderSeverityBar(report)}
|
|
34
|
+
${renderContract(report.contract)}
|
|
35
|
+
${renderImpact(report.impact.changedModules, report.impact.impactedFiles)}
|
|
36
|
+
${renderFindings(report.findings.items)}
|
|
37
|
+
${renderTestCoverage(report.testChanges.sourceCoverage)}
|
|
38
|
+
${renderFiles(report.changes.files)}
|
|
39
|
+
${renderSymbols(report.symbolChanges.changes)}
|
|
40
|
+
${renderAnalysisNotes(report)}
|
|
41
|
+
|
|
42
|
+
<footer>
|
|
43
|
+
<span>IntentPatch</span>
|
|
44
|
+
<span>Evidence over claims · LLM optional</span>
|
|
45
|
+
</footer>
|
|
46
|
+
</main>
|
|
47
|
+
</body>
|
|
48
|
+
</html>
|
|
49
|
+
`;
|
|
50
|
+
}
|
|
51
|
+
function renderIntent(contract) {
|
|
52
|
+
if (contract?.intent === undefined) {
|
|
53
|
+
return "";
|
|
54
|
+
}
|
|
55
|
+
return `<section class="intent" aria-label="Change intent">
|
|
56
|
+
<span>REQUEST</span>
|
|
57
|
+
<p>${escapeHtml(contract.intent)}</p>
|
|
58
|
+
</section>`;
|
|
59
|
+
}
|
|
60
|
+
function renderSummary(report, newDependencies, riskyApiChanges) {
|
|
61
|
+
const { summary } = report.changes;
|
|
62
|
+
const metrics = [
|
|
63
|
+
["Files changed", summary.filesChanged, "files"],
|
|
64
|
+
["Lines changed", `+${summary.additions} / -${summary.deletions}`, "diff"],
|
|
65
|
+
["Changed symbols", report.symbolChanges.summary.total, "symbols"],
|
|
66
|
+
["Direct impact", report.impact.summary.directDependents, "dependents"],
|
|
67
|
+
["Transitive impact", report.impact.summary.transitiveDependents, "dependents"],
|
|
68
|
+
["Tests changed", report.testChanges.summary.testsChanged, "tests"],
|
|
69
|
+
["Missing tests", report.testChanges.summary.sourceFilesWithoutTestChanges, "signals"],
|
|
70
|
+
["New dependencies", newDependencies, "packages"],
|
|
71
|
+
["Risky API changes", riskyApiChanges, "public APIs"],
|
|
72
|
+
[
|
|
73
|
+
"Structure signals",
|
|
74
|
+
report.codeStructure.summary.duplicateCandidates +
|
|
75
|
+
report.codeStructure.summary.singleImplementationAbstractions,
|
|
76
|
+
"review candidates",
|
|
77
|
+
],
|
|
78
|
+
];
|
|
79
|
+
return `<section class="metrics" aria-label="Change summary">
|
|
80
|
+
${metrics
|
|
81
|
+
.map(([label, value, unit]) => `<article class="metric">
|
|
82
|
+
<span>${escapeHtml(label)}</span>
|
|
83
|
+
<strong>${escapeHtml(String(value))}</strong>
|
|
84
|
+
<small>${escapeHtml(unit)}</small>
|
|
85
|
+
</article>`)
|
|
86
|
+
.join("\n ")}
|
|
87
|
+
</section>`;
|
|
88
|
+
}
|
|
89
|
+
function renderSeverityBar(report) {
|
|
90
|
+
const { bySeverity } = report.findings.summary;
|
|
91
|
+
return `<section class="severity-bar" aria-label="Finding severity summary">
|
|
92
|
+
<span class="severity high"><i></i>High <strong>${bySeverity.high}</strong></span>
|
|
93
|
+
<span class="severity medium"><i></i>Medium <strong>${bySeverity.medium}</strong></span>
|
|
94
|
+
<span class="severity low"><i></i>Low <strong>${bySeverity.low}</strong></span>
|
|
95
|
+
</section>`;
|
|
96
|
+
}
|
|
97
|
+
function renderContract(contract) {
|
|
98
|
+
if (contract === undefined) {
|
|
99
|
+
return "";
|
|
100
|
+
}
|
|
101
|
+
const budgets = [
|
|
102
|
+
contract.scope.maxFiles === undefined ? undefined : `${contract.scope.maxFiles} files`,
|
|
103
|
+
contract.scope.maxLines === undefined ? undefined : `${contract.scope.maxLines} lines`,
|
|
104
|
+
].filter((value) => value !== undefined);
|
|
105
|
+
const testPolicy = contract.tests;
|
|
106
|
+
const rows = [
|
|
107
|
+
["Expected", contract.scope.include.join(", ") || "Not configured"],
|
|
108
|
+
["Allowed", contract.scope.allow.join(", ") || "None"],
|
|
109
|
+
["Budget", budgets.join(" · ") || "Not configured"],
|
|
110
|
+
...(testPolicy === undefined
|
|
111
|
+
? []
|
|
112
|
+
: [
|
|
113
|
+
["Test sources", testPolicy.requireFor.join(", ")],
|
|
114
|
+
["Test files", testPolicy.include.join(", ")],
|
|
115
|
+
["Test excludes", testPolicy.exclude.join(", ") || "None"],
|
|
116
|
+
]),
|
|
117
|
+
];
|
|
118
|
+
return renderSection("Change contract", "Declared boundaries", `<dl class="contract-grid">${rows
|
|
119
|
+
.map(([label, value]) => `<div><dt>${escapeHtml(label ?? "")}</dt><dd>${escapeHtml(value ?? "")}</dd></div>`)
|
|
120
|
+
.join("")}</dl>`);
|
|
121
|
+
}
|
|
122
|
+
function renderFindings(findings) {
|
|
123
|
+
const body = findings.length === 0
|
|
124
|
+
? renderEmpty("No potential issues were detected by the enabled rules.")
|
|
125
|
+
: `<div class="finding-list">${findings
|
|
126
|
+
.map((finding) => `<article class="finding ${finding.severity}">
|
|
127
|
+
<div class="finding-heading">
|
|
128
|
+
<span>${escapeHtml(finding.severity)}</span>
|
|
129
|
+
<div><h3>${escapeHtml(finding.title)}</h3><code>${escapeHtml(finding.file)}</code></div>
|
|
130
|
+
</div>
|
|
131
|
+
<p>${escapeHtml(finding.description)}</p>
|
|
132
|
+
<details><summary>${escapeHtml(finding.ruleId)} · evidence</summary>
|
|
133
|
+
<dl>${Object.entries(finding.evidence)
|
|
134
|
+
.map(([key, value]) => `<div><dt>${escapeHtml(key)}</dt><dd>${escapeHtml(String(value))}</dd></div>`)
|
|
135
|
+
.join("")}</dl>
|
|
136
|
+
</details>
|
|
137
|
+
</article>`)
|
|
138
|
+
.join("")}</div>`;
|
|
139
|
+
return renderSection("Potential issues", `${findings.length} findings`, body);
|
|
140
|
+
}
|
|
141
|
+
function renderImpact(changedModules, files) {
|
|
142
|
+
const body = files.length === 0
|
|
143
|
+
? renderEmpty("No dependent files were reached from changed modules.")
|
|
144
|
+
: `${renderImpactGraph(changedModules, files)}
|
|
145
|
+
<div class="impact-list">${files
|
|
146
|
+
.map((file) => `<article>
|
|
147
|
+
<span class="distance">${file.distance === 1 ? "DIRECT" : `${file.distance} HOPS`}</span>
|
|
148
|
+
<code>${escapeHtml(file.path)}</code>
|
|
149
|
+
<small>from ${escapeHtml(file.changedModules.join(", "))}</small>
|
|
150
|
+
</article>`)
|
|
151
|
+
.join("")}</div>`;
|
|
152
|
+
return renderSection("Impact reach", `${files.length} affected files`, body);
|
|
153
|
+
}
|
|
154
|
+
function renderImpactGraph(changedModules, impactedFiles) {
|
|
155
|
+
const rowHeight = 64;
|
|
156
|
+
const top = 54;
|
|
157
|
+
const nodeHeight = 42;
|
|
158
|
+
const height = Math.max(changedModules.length, impactedFiles.length) * rowHeight + 76;
|
|
159
|
+
const moduleIndexes = new Map(changedModules.map((path, index) => [path, index]));
|
|
160
|
+
const edges = impactedFiles.flatMap((file, fileIndex) => file.changedModules.flatMap((module) => {
|
|
161
|
+
const moduleIndex = moduleIndexes.get(module);
|
|
162
|
+
if (moduleIndex === undefined) {
|
|
163
|
+
return [];
|
|
164
|
+
}
|
|
165
|
+
const startY = top + moduleIndex * rowHeight + nodeHeight / 2;
|
|
166
|
+
const endY = top + fileIndex * rowHeight + nodeHeight / 2;
|
|
167
|
+
return [
|
|
168
|
+
`<path class="graph-edge ${file.distance === 1 ? "direct" : "transitive"}" d="M 390 ${startY} C 480 ${startY}, 520 ${endY}, 610 ${endY}" />`,
|
|
169
|
+
];
|
|
170
|
+
}));
|
|
171
|
+
return `<div class="impact-graph-wrap">
|
|
172
|
+
<svg class="impact-graph" viewBox="0 0 1000 ${height}" role="img" aria-label="Dependency impact graph">
|
|
173
|
+
<defs><marker id="arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="5" markerHeight="5" orient="auto-start-reverse"><path d="M 0 0 L 10 5 L 0 10 z"></path></marker></defs>
|
|
174
|
+
<text class="graph-column-label" x="40" y="24">CHANGED MODULES</text>
|
|
175
|
+
<text class="graph-column-label" x="610" y="24">AFFECTED FILES</text>
|
|
176
|
+
${edges.join("\n ")}
|
|
177
|
+
${changedModules
|
|
178
|
+
.map((path, index) => renderGraphNode(path, 40, top + index * rowHeight, "changed"))
|
|
179
|
+
.join("\n ")}
|
|
180
|
+
${impactedFiles
|
|
181
|
+
.map((file, index) => renderGraphNode(file.path, 610, top + index * rowHeight, file.distance === 1 ? "direct" : "transitive"))
|
|
182
|
+
.join("\n ")}
|
|
183
|
+
</svg>
|
|
184
|
+
</div>`;
|
|
185
|
+
}
|
|
186
|
+
function renderGraphNode(path, x, y, kind) {
|
|
187
|
+
return `<g class="graph-node ${kind}"><title>${escapeHtml(path)}</title><rect x="${x}" y="${y}" width="350" height="42" rx="9"></rect><text x="${x + 16}" y="${y + 26}">${escapeHtml(shortenPath(path))}</text></g>`;
|
|
188
|
+
}
|
|
189
|
+
function shortenPath(path) {
|
|
190
|
+
const maximumLength = 46;
|
|
191
|
+
if (path.length <= maximumLength) {
|
|
192
|
+
return path;
|
|
193
|
+
}
|
|
194
|
+
const retainedLength = Math.floor((maximumLength - 1) / 2);
|
|
195
|
+
return `${path.slice(0, retainedLength)}…${path.slice(-retainedLength)}`;
|
|
196
|
+
}
|
|
197
|
+
function renderTestCoverage(coverage) {
|
|
198
|
+
if (coverage.length === 0) {
|
|
199
|
+
return "";
|
|
200
|
+
}
|
|
201
|
+
return renderSection("Test change signals", `${coverage.length} source files checked`, `<div class="table-wrap"><table>
|
|
202
|
+
<thead><tr><th>Source</th><th>Change</th><th>Matching changed tests</th></tr></thead>
|
|
203
|
+
<tbody>${coverage
|
|
204
|
+
.map((item) => `<tr>
|
|
205
|
+
<td><code>${escapeHtml(item.sourcePath)}</code></td>
|
|
206
|
+
<td>${renderTag(item.sourceChangeKind)}</td>
|
|
207
|
+
<td class="${item.matchingTests.length === 0 ? "missing" : "matched"}">${item.matchingTests.length === 0
|
|
208
|
+
? "No matching change"
|
|
209
|
+
: item.matchingTests.map((path) => `<code>${escapeHtml(path)}</code>`).join("<br>")}</td>
|
|
210
|
+
</tr>`)
|
|
211
|
+
.join("")}</tbody>
|
|
212
|
+
</table></div>`);
|
|
213
|
+
}
|
|
214
|
+
function renderFiles(files) {
|
|
215
|
+
const body = files.length === 0
|
|
216
|
+
? renderEmpty("No changed files were found for this comparison.")
|
|
217
|
+
: `<div class="table-wrap"><table>
|
|
218
|
+
<thead><tr><th>File</th><th>Status</th><th>Line delta</th></tr></thead>
|
|
219
|
+
<tbody>${files
|
|
220
|
+
.map((file) => `<tr>
|
|
221
|
+
<td><code>${escapeHtml(file.previousPath === undefined ? file.path : `${file.previousPath} → ${file.path}`)}</code></td>
|
|
222
|
+
<td>${renderTag(file.kind)}</td>
|
|
223
|
+
<td>${escapeHtml(formatLineDelta(file.lines))}</td>
|
|
224
|
+
</tr>`)
|
|
225
|
+
.join("")}</tbody>
|
|
226
|
+
</table></div>`;
|
|
227
|
+
return renderSection("Changed files", `${files.length} files`, body);
|
|
228
|
+
}
|
|
229
|
+
function renderSymbols(changes) {
|
|
230
|
+
if (changes.length === 0) {
|
|
231
|
+
return "";
|
|
232
|
+
}
|
|
233
|
+
return renderSection("Changed symbols", `${changes.length} declarations`, `<div class="table-wrap"><table>
|
|
234
|
+
<thead><tr><th>Symbol</th><th>Kind</th><th>Change</th><th>Location</th></tr></thead>
|
|
235
|
+
<tbody>${changes
|
|
236
|
+
.map((change) => {
|
|
237
|
+
const line = change.afterLine ?? change.beforeLine;
|
|
238
|
+
const location = line === undefined ? change.path : `${change.path}:${line}`;
|
|
239
|
+
return `<tr>
|
|
240
|
+
<td><strong>${escapeHtml(change.name)}</strong></td>
|
|
241
|
+
<td>${escapeHtml(change.symbolKind)}</td>
|
|
242
|
+
<td>${renderTag(change.changeKind)}</td>
|
|
243
|
+
<td><code>${escapeHtml(location)}</code></td>
|
|
244
|
+
</tr>`;
|
|
245
|
+
})
|
|
246
|
+
.join("")}</tbody>
|
|
247
|
+
</table></div>`);
|
|
248
|
+
}
|
|
249
|
+
function renderAnalysisNotes(report) {
|
|
250
|
+
const notes = [
|
|
251
|
+
...report.symbolChanges.issues.map((issue) => `Symbol · ${issue.path} · ${issue.reason}`),
|
|
252
|
+
...report.impact.issues.map((issue) => `Impact · ${issue.path} · ${issue.reason}`),
|
|
253
|
+
...report.codeStructure.issues.map((issue) => `Structure · ${issue.path} · ${issue.reason}`),
|
|
254
|
+
...report.impact.unresolvedReferences.map((reference) => `Import · ${reference.importer} → ${reference.specifier}`),
|
|
255
|
+
];
|
|
256
|
+
if (notes.length === 0) {
|
|
257
|
+
return "";
|
|
258
|
+
}
|
|
259
|
+
return renderSection("Analysis notes", `${notes.length} uncertainty signals`, `<ul class="notes">${notes.map((note) => `<li>${escapeHtml(note)}</li>`).join("")}</ul>`);
|
|
260
|
+
}
|
|
261
|
+
function renderSection(title, eyebrow, body) {
|
|
262
|
+
return `<section class="panel">
|
|
263
|
+
<div class="section-heading"><div><span>${escapeHtml(eyebrow)}</span><h2>${escapeHtml(title)}</h2></div></div>
|
|
264
|
+
${body}
|
|
265
|
+
</section>`;
|
|
266
|
+
}
|
|
267
|
+
function renderEmpty(message) {
|
|
268
|
+
return `<p class="empty">${escapeHtml(message)}</p>`;
|
|
269
|
+
}
|
|
270
|
+
function renderTag(value) {
|
|
271
|
+
return `<span class="tag">${escapeHtml(value)}</span>`;
|
|
272
|
+
}
|
|
273
|
+
function formatLineDelta(lines) {
|
|
274
|
+
switch (lines.kind) {
|
|
275
|
+
case "measured":
|
|
276
|
+
return `+${lines.additions} / -${lines.deletions}`;
|
|
277
|
+
case "binary":
|
|
278
|
+
return "Binary";
|
|
279
|
+
case "unavailable":
|
|
280
|
+
return `Not measured · ${lines.reason}`;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
function escapeHtml(value) {
|
|
284
|
+
return value.replace(/[&<>"']/gu, (character) => htmlEntities[character] ?? character);
|
|
285
|
+
}
|
|
286
|
+
const htmlEntities = {
|
|
287
|
+
"&": "&",
|
|
288
|
+
"<": "<",
|
|
289
|
+
">": ">",
|
|
290
|
+
'"': """,
|
|
291
|
+
"'": "'",
|
|
292
|
+
};
|
|
293
|
+
const styles = `
|
|
294
|
+
:root { color-scheme: dark; --bg:#080a0f; --panel:#10141d; --panel-2:#151b26; --line:#252d3b; --text:#f4f6fb; --muted:#8d98aa; --cyan:#58e6d9; --violet:#a890ff; --high:#ff647c; --medium:#ffb45b; --low:#6d8cff; }
|
|
295
|
+
* { box-sizing:border-box; }
|
|
296
|
+
body { margin:0; background:radial-gradient(circle at 15% 0%,#172535 0,transparent 32rem),var(--bg); color:var(--text); font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif; }
|
|
297
|
+
.shell { width:min(1180px,calc(100% - 40px)); margin:0 auto; padding:64px 0 40px; }
|
|
298
|
+
.hero { display:flex; align-items:flex-end; justify-content:space-between; gap:32px; margin-bottom:28px; }
|
|
299
|
+
.eyebrow,.section-heading span { color:var(--cyan); font-size:12px; font-weight:800; letter-spacing:.16em; text-transform:uppercase; }
|
|
300
|
+
h1 { margin:8px 0 10px; font-size:clamp(36px,7vw,72px); line-height:.98; letter-spacing:-.055em; }
|
|
301
|
+
.target { margin:0; color:var(--muted); font:14px ui-monospace,SFMono-Regular,Menlo,monospace; }
|
|
302
|
+
.report-state { min-width:150px; padding:18px 20px; border:1px solid var(--line); border-radius:16px; background:rgba(16,20,29,.82); }
|
|
303
|
+
.report-state span { display:block; color:var(--muted); font-size:11px; letter-spacing:.14em; text-transform:uppercase; }
|
|
304
|
+
.report-state strong { display:block; margin-top:5px; font-size:19px; }
|
|
305
|
+
.report-state.attention { border-color:color-mix(in srgb,var(--medium) 55%,var(--line)); }
|
|
306
|
+
.report-state.clear { border-color:color-mix(in srgb,var(--cyan) 55%,var(--line)); }
|
|
307
|
+
.intent { display:grid; grid-template-columns:90px 1fr; gap:18px; align-items:start; padding:20px 22px; border:1px solid #29404b; border-radius:16px; background:linear-gradient(105deg,rgba(88,230,217,.1),rgba(168,144,255,.06)); }
|
|
308
|
+
.intent span { color:var(--cyan); font-size:11px; font-weight:800; letter-spacing:.14em; }
|
|
309
|
+
.intent p { margin:0; font-size:18px; font-weight:650; }
|
|
310
|
+
.metrics { display:grid; grid-template-columns:repeat(auto-fit,minmax(190px,1fr)); gap:12px; margin:18px 0 12px; }
|
|
311
|
+
.metric { min-height:124px; padding:18px; border:1px solid var(--line); border-radius:16px; background:linear-gradient(145deg,var(--panel-2),var(--panel)); }
|
|
312
|
+
.metric span { display:block; color:var(--muted); font-size:12px; }
|
|
313
|
+
.metric strong { display:block; margin-top:14px; font-size:27px; letter-spacing:-.035em; }
|
|
314
|
+
.metric small { color:#5e6a7d; font-size:11px; text-transform:uppercase; letter-spacing:.08em; }
|
|
315
|
+
.severity-bar { display:flex; gap:20px; padding:14px 18px; border:1px solid var(--line); border-radius:14px; background:rgba(16,20,29,.78); }
|
|
316
|
+
.severity { display:flex; align-items:center; gap:7px; color:var(--muted); font-size:12px; text-transform:uppercase; letter-spacing:.08em; }
|
|
317
|
+
.severity i { width:7px; height:7px; border-radius:50%; background:currentColor; }
|
|
318
|
+
.severity strong { color:var(--text); }
|
|
319
|
+
.severity.high { color:var(--high); }.severity.medium { color:var(--medium); }.severity.low { color:var(--low); }
|
|
320
|
+
.panel { margin-top:18px; padding:24px; border:1px solid var(--line); border-radius:18px; background:rgba(16,20,29,.88); box-shadow:0 18px 70px rgba(0,0,0,.12); }
|
|
321
|
+
.section-heading { display:flex; align-items:center; justify-content:space-between; margin-bottom:20px; }
|
|
322
|
+
.section-heading span { color:var(--muted); font-size:10px; }
|
|
323
|
+
h2 { margin:5px 0 0; font-size:23px; letter-spacing:-.025em; }
|
|
324
|
+
h3 { margin:0; font-size:16px; }
|
|
325
|
+
.contract-grid { display:grid; grid-template-columns:repeat(2,1fr); gap:1px; overflow:hidden; padding:1px; border-radius:12px; background:var(--line); }
|
|
326
|
+
.contract-grid div { padding:16px; background:var(--panel-2); }
|
|
327
|
+
.contract-grid dt { color:var(--muted); font-size:11px; text-transform:uppercase; letter-spacing:.08em; }
|
|
328
|
+
.contract-grid dd { margin:7px 0 0; overflow-wrap:anywhere; font:13px ui-monospace,SFMono-Regular,Menlo,monospace; }
|
|
329
|
+
.finding-list { display:grid; gap:10px; }
|
|
330
|
+
.finding { padding:18px; border:1px solid var(--line); border-left:3px solid var(--low); border-radius:12px; background:var(--panel-2); }
|
|
331
|
+
.finding.high { border-left-color:var(--high); }.finding.medium { border-left-color:var(--medium); }
|
|
332
|
+
.finding-heading { display:flex; gap:13px; align-items:flex-start; }
|
|
333
|
+
.finding-heading>span { min-width:64px; padding:5px 7px; border-radius:7px; background:#232b39; color:var(--muted); font-size:10px; font-weight:800; text-align:center; text-transform:uppercase; }
|
|
334
|
+
.finding code { display:block; margin-top:5px; color:var(--muted); }
|
|
335
|
+
.finding p { margin:14px 0; color:#c3cad6; line-height:1.55; }
|
|
336
|
+
details { color:var(--muted); font-size:12px; } summary { cursor:pointer; }
|
|
337
|
+
details dl { display:grid; gap:7px; margin:12px 0 0; } details dl div { display:grid; grid-template-columns:150px 1fr; gap:12px; } details dt { color:#667287; } details dd { margin:0; overflow-wrap:anywhere; color:#aeb7c6; }
|
|
338
|
+
.impact-list { display:grid; grid-template-columns:repeat(2,1fr); gap:10px; }
|
|
339
|
+
.impact-list article { display:grid; grid-template-columns:70px 1fr; gap:5px 12px; padding:15px; border:1px solid var(--line); border-radius:11px; background:var(--panel-2); }
|
|
340
|
+
.impact-list .distance { grid-row:1/3; color:var(--violet); font-size:10px; font-weight:800; letter-spacing:.08em; }
|
|
341
|
+
.impact-list small { color:var(--muted); overflow-wrap:anywhere; }
|
|
342
|
+
.impact-graph-wrap { overflow-x:auto; margin-bottom:14px; border:1px solid var(--line); border-radius:12px; background:#0c1017; }
|
|
343
|
+
.impact-graph { display:block; width:100%; min-width:820px; height:auto; }
|
|
344
|
+
.graph-column-label { fill:#68758a; font:700 10px ui-monospace,SFMono-Regular,Menlo,monospace; letter-spacing:.12em; }
|
|
345
|
+
.graph-edge { fill:none; stroke:#56627a; stroke-width:1.5; marker-end:url(#arrow); }
|
|
346
|
+
#arrow path { fill:#7a879e; }
|
|
347
|
+
.graph-edge.direct { stroke:var(--cyan); }.graph-edge.transitive { stroke:var(--violet); stroke-dasharray:5 5; }
|
|
348
|
+
.graph-node rect { fill:#151b26; stroke:#303a4b; }.graph-node.changed rect { stroke:#537b7b; }.graph-node.direct rect { stroke:#3d716f; }.graph-node.transitive rect { stroke:#615787; }
|
|
349
|
+
.graph-node text { fill:#cbd5e5; font:12px ui-monospace,SFMono-Regular,Menlo,monospace; }
|
|
350
|
+
.table-wrap { overflow-x:auto; }
|
|
351
|
+
table { width:100%; border-collapse:collapse; font-size:13px; }
|
|
352
|
+
th { padding:10px 12px; border-bottom:1px solid var(--line); color:var(--muted); font-size:10px; letter-spacing:.1em; text-align:left; text-transform:uppercase; }
|
|
353
|
+
td { padding:14px 12px; border-bottom:1px solid #202735; vertical-align:top; } tbody tr:last-child td { border-bottom:0; }
|
|
354
|
+
code { overflow-wrap:anywhere; color:#c8d2e2; font:12px ui-monospace,SFMono-Regular,Menlo,monospace; }
|
|
355
|
+
.tag { display:inline-block; padding:4px 7px; border:1px solid #344052; border-radius:6px; color:#aeb9ca; font-size:10px; font-weight:750; letter-spacing:.06em; text-transform:uppercase; }
|
|
356
|
+
.missing { color:var(--medium); }.matched { color:var(--cyan); }
|
|
357
|
+
.notes { display:grid; gap:8px; margin:0; padding-left:18px; color:#b9c2d0; }
|
|
358
|
+
.empty { margin:0; padding:28px; border:1px dashed #303949; border-radius:12px; color:var(--muted); text-align:center; }
|
|
359
|
+
footer { display:flex; justify-content:space-between; padding:26px 4px 0; color:#536074; font-size:11px; letter-spacing:.05em; text-transform:uppercase; }
|
|
360
|
+
@media (max-width:760px) { .shell{width:min(100% - 24px,1180px);padding-top:32px}.hero{align-items:flex-start;flex-direction:column}.metrics{grid-template-columns:repeat(2,1fr)}.contract-grid,.impact-list{grid-template-columns:1fr}.severity-bar{flex-wrap:wrap}.panel{padding:18px}.intent{grid-template-columns:1fr}.report-state{width:100%} }
|
|
361
|
+
`;
|
|
362
|
+
//# sourceMappingURL=html-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-report.js","sourceRoot":"","sources":["../../../src/presentation/html/html-report.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,59 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "intentpatch",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Evidence-based change scope analysis for AI-authored code patches.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/xx2xxjaeil/intent-patch.git"
|
|
9
|
+
},
|
|
10
|
+
"bugs": {
|
|
11
|
+
"url": "https://github.com/xx2xxjaeil/intent-patch/issues"
|
|
12
|
+
},
|
|
13
|
+
"homepage": "https://github.com/xx2xxjaeil/intent-patch#readme",
|
|
14
|
+
"keywords": [
|
|
15
|
+
"ai-coding-agent",
|
|
16
|
+
"code-review",
|
|
17
|
+
"git-diff",
|
|
18
|
+
"static-analysis"
|
|
19
|
+
],
|
|
20
|
+
"type": "module",
|
|
21
|
+
"files": [
|
|
22
|
+
"dist",
|
|
23
|
+
"README.md",
|
|
24
|
+
"README.ko.md",
|
|
25
|
+
"LICENSE"
|
|
26
|
+
],
|
|
27
|
+
"bin": {
|
|
28
|
+
"intentpatch": "dist/presentation/cli/main.js"
|
|
29
|
+
},
|
|
30
|
+
"publishConfig": {
|
|
31
|
+
"access": "public"
|
|
32
|
+
},
|
|
33
|
+
"scripts": {
|
|
34
|
+
"build": "tsc -p tsconfig.build.json",
|
|
35
|
+
"build:action": "esbuild src/presentation/github/action-main.ts --bundle --platform=node --target=node24 --format=cjs --outfile=action-dist/index.cjs --minify",
|
|
36
|
+
"check": "npm run typecheck && npm run lint && npm run test && npm run check:action",
|
|
37
|
+
"check:action": "npm run build:action && git diff --exit-code -- action-dist/index.cjs",
|
|
38
|
+
"dev": "node --import tsx src/presentation/cli/main.ts",
|
|
39
|
+
"lint": "biome check .",
|
|
40
|
+
"lint:fix": "biome check --write .",
|
|
41
|
+
"prepack": "npm run build",
|
|
42
|
+
"release:verify": "node scripts/verify-release.mjs",
|
|
43
|
+
"test": "node --import tsx --test tests/**/*.test.ts tests/**/*.test.mjs",
|
|
44
|
+
"test:watch": "node --import tsx --test --watch tests/**/*.test.ts",
|
|
45
|
+
"typecheck": "tsc --noEmit"
|
|
46
|
+
},
|
|
47
|
+
"engines": {
|
|
48
|
+
"node": ">=20"
|
|
49
|
+
},
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"typescript": "^5.9.3"
|
|
52
|
+
},
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"@biomejs/biome": "^2.2.4",
|
|
55
|
+
"@types/node": "^20.19.17",
|
|
56
|
+
"esbuild": "^0.28.2",
|
|
57
|
+
"tsx": "^4.20.5"
|
|
58
|
+
}
|
|
59
|
+
}
|