From ee903e4b63257573773e93d10612250e3634cae9 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Sun, 31 May 2026 13:57:40 -0500 Subject: feat(typescript): add coverage-summary to the TypeScript bundle Last language in the coverage-summary fan-out, after Elisp, Python, and Go. Same kernel: count every source file on disk that's absent from the coverage report as 0% and weight the project number by file, so an untested file stays visible instead of being averaged away. The script at languages/typescript/claude/scripts/coverage-summary.js parses an Istanbul json-summary report (the coverage-summary.json that c8, Vitest, and Jest all emit), takes per-file statements covered over total, and reports a file-weighted number plus the missing files. It walks the source dir for .ts/.js, skipping test files, declarations, and node_modules. Node built-ins only, so it runs via node with no install, and it doesn't reimplement the per-file table nyc already prints. Tests are black-box, run with node's own test runner: a temp tree plus a json-summary report, the script invoked via node, output asserted. They cover missing-file detection, all-tracked, test-file and node_modules exclusion, and the missing-report error. make test gained a node --test discovery path for languages/*/tests, guarded so environments without Node skip it cleanly. As with Python, the TypeScript bundle had no gitignore-add.txt, which would have left the script un-gitignored on install, so I added one. This finishes the fan-out: coverage-summary now ships in all four bundles, each parsing its own tool's report behind the same file-weighted, missing-as-0% kernel. I proved the Go and TypeScript scripts by running them (Go against a live profile, TS against a synthetic report and the CLI). Python and TypeScript weren't run against a live coverage tool, since neither coverage.py nor nyc is installed here, so the first adopter of each should check against a real report. --- Makefile | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'Makefile') diff --git a/Makefile b/Makefile index b8f34cb..33c582f 100644 --- a/Makefile +++ b/Makefile @@ -477,6 +477,15 @@ test: ## Run all test suites (pytest + ERT + bats) else \ echo "go test: skipped (go not installed)"; \ fi + @if command -v node >/dev/null 2>&1; then \ + set -e; for d in languages/*/tests; do \ + ls "$$d"/*.test.js >/dev/null 2>&1 || continue; \ + echo "node test: $$d"; \ + ( cd "$$d" && node --test ); \ + done; \ + else \ + echo "node test: skipped (node not installed)"; \ + fi @set -e; for f in .ai/scripts/tests/test-*.el; do \ [ -e "$$f" ] || continue; \ echo "ert: $$(basename "$$f")"; \ -- cgit v1.2.3