Built and signed on GitHub ActionsBuilt and signed on GitHub Actions
A utility lib to help run `tsc --extendedDiagnostics` against an arbitrary file/project, to track type-checking time. Intended to help write automated tests that fail when inadvertently introducing TypeScript slow types.
tsc-time
This library is intended to help measure the time it takes to run tsc
and type check a given file or project.
It exports one function, runTsc()
, which takes a TypeScript file or project path and runs tsc
on it, with the --allowImportingTsExtensions --noEmit --extendedDiagnostics
options.
Regardless of whether tsc
succeeds or fails, runTsc()
should return a TscExecutionResult
object describing the result.
You can run this in test code, or on the command line, like so:
const result = await runTsc('some-path/tsconfig.lib.json'); console.log(result);
Example result:
{ tscExitCode: 0, elapsedMs: 1576.915708, stdout: "Files: <blah blah blah omitted>...", stderr: "", tscCommand: "npx tsc --strict true --target esnext --project /Volumes/HOGINATOR/some-path/tsconfig.lib.json --allowImportingTsExtensions --noEmit --extendedDiagnostics", diagnostics: { Files: "858", "Lines of Library": "39520", "Lines of Definitions": "75228", "Lines of TypeScript": "15172", "Lines of JavaScript": "0", "Lines of JSON": "0", "Lines of Other": "0", Identifiers: "116052", Symbols: "104457", Types: "20866", Instantiations: "12276", "Memory used": "168666K", "Assignability cache size": "7573", "Identity cache size": "69", "Subtype cache size": "274", "Strict subtype cache size": "135", "I/O Read time": "0.18s", "Parse time": "0.20s", "ResolveModule time": "0.04s", "ResolveLibrary time": "0.01s", "ResolveTypeReference time": "0.00s", "Program time": "0.48s", "Bind time": "0.11s", "Check time": "0.32s", "transformTime time": "0.19s", "printTime time": "0.00s", "Emit time": "0.00s", "Total time": "0.91s", }, checkTime: 0.32 }
Or you can do e.g.:
deno run --allow-read --allow-run https://jsr.io/@axhxrx/tsc-time/0.0.1/mod.ts some-file.ts
...and the equivalent output will be printed to the console in JSON-parseable format.
The checkTime property
Because the main point of this lib is to measure the type-checking time (in order write automated tests to guard against inadvertent regressions in that area), the checkTime
property is included in the result. Other diagnostics, you have to parse yourself, from the diagnostics
property.
Happenings
🤦♂️ 2025-02-20: Fix bug with missing import, leftover test code 👹 2025-02-19: release 0.0.4 with bug fix for non-JSON CLI output (and maybe legaprise Node env fix, if that actually works) 🎅 2025-02-18: release 0.0.3 on JSR, removing inline ESM-incompatible inline import of node entity 🎅 2025-02-18: release 0.0.2 on JSR 🤖 2025-02-17: repo initialized by Bottie McBotface bot@axhxrx.com
Add Package
deno add jsr:@axhxrx/tsc-time
Import symbol
import * as tsc_time from "@axhxrx/tsc-time";
Import directly with a jsr specifier
import * as tsc_time from "jsr:@axhxrx/tsc-time";
Add Package
bunx jsr add @axhxrx/tsc-time
Import symbol
import * as tsc_time from "@axhxrx/tsc-time";