Skip to content

[experiment] order independence + dynamic checkers / work stealing - #65367

Draft
Jake Bailey (jakebailey) wants to merge 29 commits into
microsoft:mainfrom
jakebailey:checker-work-stealing
Draft

Jake Bailey (jakebailey) wants to merge 29 commits into
microsoft:mainfrom
jakebailey:checker-work-stealing

Conversation

@jakebailey

Copy link
Copy Markdown
Member

This is #65064 + more dynamic checker counts + work stealing between checkers, as this should actually be safe now.

@typescript-automation typescript-automation Bot added Author: Team For Uncommitted Bug PR for untriaged, rejected, closed or missing bug labels Nov 6, 2026
@jakebailey

This comment was marked as outdated.

@typescript-automation

This comment was marked as outdated.

When a test stops producing a baseline that has a reference, the
harness wrote the .delete marker but did not fail the test, so the
change went unnoticed until someone ran baseline-accept and lost the
reference without reviewing why.
Checker results should not depend on which files were checked first,
on which types an editor happened to ask for before diagnostics were
requested, or on whether a file was emitted before it was checked.
Tests had no way to show such dependence, so fixes for it could only
be described, not demonstrated.

The harness-only checkOrder option queries the checker in a different
order: files in reverse, each file in its own program, or every
expression's type, symbol, contextual type, resolved signature, and
the types of names in type annotations before any diagnostics. The
same orders apply to emit. Listing several orders produces a baseline
for each, so order dependence shows up as differing baselines.

Fixed orders over whole files miss results that depend on which single
query a checker answers first. With TS_CHECK_ORDER_FUZZ=n, each test
without a checkOrder option is checked again n times in fresh programs
that first answer a seeded random selection of queries and single file
emits. Any change in diagnostics, emitted output, or the type or symbol
of a node fails the test with the seed and a minimized list of queries
that reproduces it. Symbol IDs in printed names are ignored, as they
follow creation order by design. The fuzzer is off by default, so it
does not slow the normal suite.
Order independence should also mean that results do not depend on
which files a checker has been given, since project and compiler
checker pools assign files differently. Let tests pick the checker
of every file, and have the check order fuzzer use a seeded random
assignment over two to four checkers for half of its seeds.
These tests record checker results that depend on the order in which
files, declarations, and queries are checked, so that each later fix
shows up as a reviewable baseline change. Most list several
checkOrder variants; where the variants disagree, that disagreement is
the bug. Some existing tests also gain the typesfirst order, as asking
for types and symbols first changes what they report.

The cases cover:

- variance measured through cycles of recursive references, which
  depended on which type in the cycle was measured first (64891, and
  a reduction of the react-relay DefinitelyTyped tests);
- circularities whose blamed location is whichever use resolved
  first: circular type parameter defaults and constraints, a cycle
  through namespace spreads, awaiting a promise that refers back to
  itself, and import elision computing types before checking;
- instantiation limit and excessive depth errors, reported only in
  whichever file reached the limit first;
- late-bound members, computed enum members, and aliased
  module.exports members, which differ when queried before checking;
- relation results cached against truncated or in-progress
  comparisons;
- the order of types in unions, which followed type ids, and so
  creation order, for object literals, rest types, indexed accesses,
  type parameters, and iterator method types;
- return type cycles through callbacks and subtype reduction, JSDoc
  type tags on contextually typed functions, a scope whose thunks refer
  to the scope, a never narrowing after a loop, and a const assertion
  inferred before its binding pattern (seen in OmniRoute, effect,
  webpack, arktype, uglify-js, and check order fuzzing).

The circularity tests from PR 64834 are copied unchanged, to compare
against how that PR handles the same cases.
A spread that produces a tuple too large to represent reports the error
at the node being checked. When the type is first requested through the
API, before checking has begun, there is no such node and reporting the
error crashed instead.

(seen in excessivelyLargeTupleSpread)
checkAssertion runs in several check modes, such as when a call is
first checked without its context sensitive arguments, and each run
overwrote the operand type kept for the deferred comparability check.
That check used whichever was stored last, so its result depended on
the order in which the assertion was checked.

The deferred check now uses the cached normal type of the operand. The
assertion itself only needs the operand type for `as const`, and the
operand of a non-const assertion is contextually typed by the asserted
type alone, so in any check mode the assertion computes the cached
type the deferred check will read, with inference for an enclosing
call hidden from the operand. This is the result the deferred check
would produce on its own, and checks each operand once rather than
again with fresh flow analysis in the deferred check.
The type of a destructured parameter's binding elements depended on
whether the parameter's type happened to be cached already. For
example, in non-strict mode

    (({ [a()?.d]: c = "" }) => {})();

reported TS2537 when 'c' was queried before the IIFE call resolved
the parameter (its declared type is the undefined widening type),
but not otherwise. Conversely, in

    f7({ a: {} });
    function f7({ a: { x = 0, y = 0 } } = { a: {} }) {}

calling f7 first made 'x' and 'y' errors of type any.

Make the choice depend only on the declaration. Parameters of
context-sensitive functions take their type from contextual
assignment, so ask for the parameter's type. Everything else uses
the type derived from the declaration, as it did when nothing was
cached. Asking for the parameter's type unconditionally instead
introduces circularities in patterns whose initializers reference
sibling elements.
A context-sensitive function is typed in parts: the enclosing call
assigns its parameters their contextual types, completes its signature
with the type parameters of a generic contextual signature, and checks
it. Queries that reached the function before or during those steps
saw it incomplete and cached what they derived from it.

The first query of such a parameter returned the type it computed
itself from the final signature, while every later query returned the
type the enclosing call assigned. In

    declare function fun<T>(g: (x: T) => T, h: (y: T) => T, x: T): T;
    fun((Math.random() < 0.5 ? (x => x) : (x => undefined)), x => x, 10);

the last 'x' was number when the call was checked first, but any when
'x' was queried first. The assigned type is now returned whenever one
exists, as the original comment intended.

Type aliases in the body read the signature's type parameters as outer
type parameters, so querying such an alias first resolved its
conditional types eagerly. In

    declare function f(fun: <T>(t: T) => void): void
    f(function self(t) {
        const s = self;
        type P = Parameters<typeof s>;
    });

P was [t: unknown] when the call was checked first, but [t: T] when P
was asked for first. Assigning the contextual parameter types, which
completes the signature, is now split from the rest of the contextual
check, and every way to obtain the signature requests it: the type of
the function's symbol, before anything resolves its members, and the
signature of its declaration. Contextual typing can reach the
enclosing call while the signature is being created, so the signature
created there is kept rather than replacing the one that was
contextually typed.

When resolving a function expression's members reached the function
again through its enclosing call, the contextual check saw an empty
signature list and gave up, yet left the node marked as checked, so
implicit any errors could be lost depending on which query got there
first. The deferred function check now requests the contextual check,
so it is performed at least once.
Generic calls nested in the arguments of other generic calls, or in
context-sensitive functions passed to them, depend on the enclosing
call for their contextual type and parameter types, and the enclosing
call infers from them in turn. When the inner call was queried first,
it was already marked as resolving by the time its contextual type
resolved the enclosing call, so the enclosing inference saw a
placeholder and both calls cached results that a check in source
order never produces.

Computing the contextual type of a call nested in an argument of an
enclosing call before resolving it resolves the enclosing call first,
as source order does. Other contexts are not resolved ahead of time,
since computing them may evaluate expressions that checking does not,
such as the target of a destructuring assignment.

Resolving a call's signature can also be requested while checking one
of its arguments. Errors that resolution reports at the current node,
such as an instantiation depth error, were located at whichever node
asked first, so checking an argument ahead of its call moved the error
onto the argument. Resolution is now located at the call.
Asking for the symbol of a property access that hits an index
signature stored the index symbol as the access's resolved symbol.
Checking a delete expression reads that link to decide whether the
operand must be optional, so a prior symbol query turned `delete a.x`
on an index signature into an error that a plain check does not
report. The type of the index symbol at such an access, which hovers
show, now looks the index symbol up again rather than reading it from
links.

A single signature type produced by higher order inference is
instantiated with the full mapper combined in, since its signature can
reference type parameters other than the outer type parameters of its
declaration. The instantiation cache was keyed only by the mapped
outer type parameters, so two instantiations differing in another type
parameter (here the this type) shared whichever result was computed
first, and checking `outer.log` gave it the type of `inner.log`. Such
instantiations are no longer cached.
Explaining why a name failed to resolve looks up other symbols, for
example to find a spelling suggestion, and that can resolve aliases.
When the failed name was the target of an alias, the suggestion lookup
re-entered the alias being resolved, or skipped it, depending on which
aliases were already in progress. In declarationEmitUnknownImport that
decided whether two "Circular definition of import alias" errors were
reported: they appeared when the import was checked first, and not
when the export specifier was resolved first.

Defer the explanation until no resolution is in progress, so it only
observes finished results. The circularity errors that were artifacts
of the suggestion lookup are no longer reported.
When one reference hit the flow analysis depth limit, flow analysis
was disabled for every later reference in the same function or module
body, so the type of a reference depended on whether another reference
in the body had been analyzed before it. Each reference now gives up
only when its own analysis hits the limit.

Shared flow node results are cached for the duration of one flow
analysis, including incomplete results computed under a loop back
edge. Once that loop's back edge has been exited and the loop label
has a complete type, they are stale. Reusing them made a reference's
type depend on which reference was analyzed first: in
exhaustiveSwitchCheckCircularity, querying the reference inside the
loop before the switch expression produced `never` instead of "bbb".
An incomplete shared result is now reused only while the loop that
was innermost when it was computed is still being analyzed.
A computed property name stored a placeholder type while its
expression was checked, and returned the placeholder when re-entered.
That kept the cycle off the resolution stack, so the computations in
between did not fail, and the placeholder `{}` escaped into messages
when checking entered through the property name, while `any` did when
it entered through the variable it references. In
blockScopedBindingUsedBeforeDef, the error read "Type '{}' cannot be
used as an index type" or "Type 'any' ..." depending on what was
checked first.

Resolve computed property names on the resolution stack, failing with
the error type on re-entry like other circular resolutions.
CompareTypes orders the constituents of unions, and so printed types,
union deduplication, and everything derived from them. Many types it
cannot tell apart fell through to the type id, which follows creation
order, so these results depended on what had been checked before.
Most such ties were copies: checking the same expression again
(inference passes, overload resolution, contextual re-checks) created
a new type with identical content every time.

Types that are the same by content are now interned, so the same
inputs yield the same type whenever and however often they are
computed: object literal types, spread results and the property
symbols they synthesize, widened, regular, and padded copies of object
literals, object rest types, types implied by binding patterns,
intersections with the same constituents, flags, and alias, and
deferred indexed accesses, which are keyed by the flags they record
rather than by transient ones. Interned object types are keyed by
their members in table order, so spreads such as { ...a, ...b } and
{ ...b, ...a } stay distinct and each keeps its own property order.

Types that remain distinct are ordered by how they were derived:

- type parameters sharing a symbol (tuple elements, clones made for
  signature and mapped type instantiation, distributive and
  restrictive copies) by the kind of copy, then by their origin and
  the instantiation they were made for;
- fresh and regular literal types, array literal types after the
  references they were cloned from, and object literal copies by the
  flags they were created with;
- object literal, rest, and binding pattern types by their members,
  compared by declaration and name rather than by symbol id;
- tuple targets by their label declarations.

isDeeplyNestedType counts only occurrences of a recursion identity
newer than the previous one, using type ids for "newer", so whether a
comparison gave up as deeply nested depended on what had been checked
before. It now uses a type's generation, one more than that of the
types it was built from, which captures the same ordering wherever it
follows from how the types are built, and nothing else.

The pseudo-type printer reused the declared type of an inferred
property assignment when the expression's widened type matched, but
that type is widened without the context of its object literal and
can differ from the real one. It is now reused only when equivalent.
A relation that succeeds while an outer comparison is still in
progress has only been shown to hold under the outer comparison's
assumption. Caching it globally made later lookups depend on which
comparison happened to run first. The same was true for results cut
short by depth limits measured against outer resolutions.

Each result now tracks the lowest resolution it depends on and whether
it was truncated. Results are cached globally only when the comparison
that introduced their assumptions completes, and truncated results
only at their own head. Failures remain cached immediately, since
assumptions only ever make a relation more likely to succeed. A
comparison that only relates by assuming comparisons within it is
reported as related once it completes, whether it is computed or read
from the cache.

Comparisons of types referencing constrained type parameters are
considered related while the same comparison with unconstrained type
parameters is in progress, since constraints only make more types
related. A completed comparison found to succeed now counts the same
way. That only went unnoticed because completed comparisons used to
stay in progress until the outermost one completed; without it,
relating structurally identical generic interfaces creates ten times
the types.
Instantiating a signature copies a parameter unless the parameter's
type has already been resolved, so whether the parameter in a
signature's printed scope is the declared one depends on what was
checked before. Both name the same declaration, so treating only the
declared one as the same reference made printing a reused annotation
depend on check order.
Computing the values of an enum's members type-checked each computed
initializer to report one that is not a number. The initializer may
refer to the enum itself, whose type then reads member values that are
still being computed, so the enum's type depended on whether its values
were first computed by checking it or by asking for its type.

The values do not depend on the initializer's type, so the check now
happens when the member is checked, as for any other error in an
initializer.
@typescript-automation

This comment was marked as outdated.

The checker caches nearly everything it computes, and many results
depend on what happened to be cached when they were computed: which
file was checked first, which types an editor asked for before
requesting diagnostics, whether a file was emitted before it was
checked. The check order tests and fuzzer show hundreds of such
differences on main. As long as they exist, checkers cannot share
results, a cached result cannot be dropped and recomputed later, and
concurrent checking needs separate checkers with fixed file
assignments to stay deterministic.

The goal is a checker that behaves like a pure function with a cache:
the answer to any query is the answer of computing it from scratch.

The cached state of a checker moves to a memo store, leaving the
Checker with only the state of the computation in progress. Every
cached result is a memo: a cell, a keyed map, or a check-once set.
Reading one records it as a dependency of the computation in progress.

Computing a result can produce more than the result: diagnostics,
reference marks for unused checks, deferred nodes, required emit
helpers. When a query computed a result first, those effects were
either reported for code checking never visits or lost when checking
reused the result. A query now records them on the result instead,
along with the results it reused, and checking replays them, exactly
once, when it reuses the result, as if it had computed it. Effects
produced outside any memoized computation belong only to the query and
are dropped.

Circularities are where most of the order dependence lives. A
computation that re-enters one in progress sees a provisional state,
so whatever is cached until the outermost computation of the cycle
finishes depends on where the cycle was entered. Those results are now
discarded when it finishes, and recomputed when next requested. The
computations in progress when the cycle was detected keep their
fallbacks, as each reaches the cycle when computed from scratch too.
Results that define identity, such as declared types and
instantiations, are kept, so no second, distinct result can exist.
Main detects many re-entries silently, through markers and probes
rather than the resolution stack; those now go through the resolution
stack too, so their cycles are seen.

Where a cycle's result depends on which member was entered, the cycle
is resolved from a canonical entry, the member declared first, as when
checking in program order: cycles through the types of symbols,
mutually dependent member tables and module tables, and type parameter
defaults. Variances of circular types are measured with TypeScript's
rule from the canonical type of each strongly connected component, so
that they no longer depend on which type was measured first.

Instantiation depth is measured from the start of each memoized
computation, and a reused result adds none, so whether a result
reaches the depth limit does not depend on what was cached. The count
limit, which only stops runaway instantiations, still counts per
statement or expression, and starts again for each outermost
computation; its error is reported once, where it is reached.

Smaller fixes needed for the same reason are part of this change:
errors for accessor pairs are reported by each accessor without a
flag, type alias type parameters are read through the declared type,
name lookups that cannot match a late-bound member do not resolve
late-bound members, symbols derived from the same declaration are
ordered without ids, awaited types that refer back to themselves fail
as a cycle, and relation complexity overflows are reported in every
comparison that needs them.
A declared type parameter with a circular constraint is circular no
matter how it is used, and checking its declaration reports it. Which
use happened to resolve the constraint before that is an accident of
check order, so pointing at it as the origin of the cycle made the
diagnostic depend on that order. Only an instantiated type parameter
has a cycle that originates at a use.
A mapped type resolves its constraint eagerly so that errors in the
constraint are reported at the mapped type. It did so only when the
type was created, so when the type was first created while checking
another node, the mapped type itself never reported those errors.
A cycle through return types gave different results depending on where
it was entered. Entered at rebuild's return type, re-entering it fails
rebuild, so both members report an implicit any. Entered at b's return
type, subtype reduction of rebuild's return type finds b in progress
and compares as if it returned any, without failing anything, so
rebuild returns B and was kept as a participant of the cycle, though
computing it from scratch fails.

Cycles through the types of symbols are already resolved from the
member declared first (see yieldCycle). The same now applies to the
return types of declared signatures, both when a cycle re-enters a
return type and when it only observes one in progress, so that each
order gives the result of resolving the first declared member first
(seen in effect's SchemaAST).

Contextually checking a function expression infers its return type
from its body, and that inference was pushed as a return type
resolution of the function's signature. When the body calls a function
whose return type depends on the call enclosing the function
expression, resolving that call requests the function expression's
return type, which, seen in progress, returned any without detecting a
cycle, so the enclosing function's return type was inferred from a
provisional any instead of reporting the circularity (seen in
OmniRoute). The inference now runs without marking the signature in
progress, as in TypeScript: the nested request computes the return
type itself, reaches the enclosing function, and the cycle is reported
on both. The result is cached only if no request has already cached
one, the same as when the return type is requested directly.

The flag marking a function as contextually checked is set before its
return type is inferred, and is TypeScript's guard against re-checking
the function from within its own check, so it is never discarded. The
inferred return type is now kept whenever the flag is, so that a
discarded cycle in between cannot leave the flag without the return
type, which made a const assertion in the body readonly when queried
before its binding pattern.
Completing contextual signatures before anyone reads them switched
parameter assignment from the signature of the function's symbol to
the signature built from its declaration. In JavaScript the symbol's
signature comes from a @type tag when one is present, and the
function's parameters take their types from that tag. Using the
declaration's signature wrote the outer contextual types onto those
parameters instead, producing errors inside the function body that the
tag rules out (seen in webpack).

Prefer the tag's signature, as before, and fall back to the
declaration's signature otherwise.
An instantiation stopped by the limit on the depth of the whole
instantiation names every type that recurs in it, in the order in
which they recur. Which type of the cycle the instantiation entered
first depends on what was cached before, so checkers that had checked
different files named the same cycle starting from different types,
and reported the same error twice with different messages (seen in
zod, with checkers running concurrently).

The names now start from the type declared first, so the message is
the same wherever the cycle is entered. The limit on the depth of a
single computation already names only what that computation
instantiated, which does not depend on where it was entered, so its
messages keep the order in which the types recur.
While the type implied by a binding pattern is computed as the
contextual type of its initializer, references to the pattern's
elements from the elements' defaults are any. The calls and types
computed from them were cached anyway, so asking for the contextual
type of the initializer first left `extra` in

    const { kind, payload, extra = kind === "a" ? ... : ... } = u;

as any rather than unknown. TypeScript behaves the same way.

Track the patterns as resolutions in progress rather than a separate
stack, so that a reference returning any marks the computation
circular and what was cached from it is discarded.

(seen in check order fuzzing)
A call resolution hides the resolutions below it, so a symbol whose
initializer reaches itself through a call argument is computed again,
nested in itself, as in main. The nested computation observes things
in progress that the outer one entered: here, a mapped property whose
contextual type is skipped, and the reverse mapping whose depth cutoff
it reaches. Those mark everything since as circular, so the nested
result was discarded, and the outer computation, reaching the same
types again outside that context, then failed with a circularity.

When everything the nested computation observed in progress was
entered by the outermost hidden resolution of the same target, the
nested computation is what that one always computes first from
scratch, whichever entry led to it, so its result is kept as a cycle
participant, as main keeps the first result set.

Main also keeps the reverse-mapped property type computed under the
depth cutoff, so it types the property as unknown. That result still
depends on the cutoff and is discarded, so the property is computed
again from scratch afterwards, giving its full type: an improvement
over main rather than a match (seen in arktype).
When a query enters a cycle somewhere other than its program-order
entry, the cycle yields to its first member and recomputes it with the
resolutions below hidden. Two things made that recomputation differ
from computing the member first:

- The reverse mapping stacks, contextual types and inference contexts
  of the hidden resolutions stayed visible, so the recomputation saw
  contexts that a computation from scratch never has. A yield now hides
  them along with the resolutions and restores them when it ends.

- Results were kept as cycle participants only by comparing the
  outermost cycle head in progress against the resolution. A cycle
  headed below the yield, which the yield cannot observe, caused the
  yield root and the hidden re-entries of itself to be discarded, so
  the member was computed again and genuinely re-entered itself.

Each type resolution now tracks the lowest cycle head it observed, and
a result is kept when what it observed was entered from scratch: by
the outer resolution of itself, by the yield it is the root of, or by
the outermost measurement of variances.

(seen in circularScopeThunkReverseMapped)
Which symbols are referenced, which nodes need deferred or unused
checks, and which aliases are referenced are facts about a node that
only the check of its file consumes. Recording them as effects made
nearly every query result carry effects, so emit and other queries
without a check retained and walked a large effect graph: --noCheck
emit of VS Code used twice the time and memory of main.

Each fact now depends only on its node, and the check reaches every
node, so whatever computes a fact first records it. Write-only names
are not uses wherever a name is resolved. The check now also checks
methods and accessors in destructuring targets and decorators where
they are not valid, which only a query computing their types reached
before, and follows referenced import = declarations itself once the
file's references are marked, so that following them reports errors
whatever cached them first.
Files are assigned to checkers up front, so the checker with the most
work left finishes last while the others sit idle. Results no longer
depend on which checker checks a file or what it checked before, so a
checker that runs out of files can take one from another without
changing any output.

Each checker still starts with the files assigned to it, keeping the
locality of the assignment, and takes the file another checker would
reach last. A file stays associated with the checker that checked it,
so later requests for it reuse that checker's caches.
@jakebailey

Copy link
Copy Markdown
Member Author

TypeScript Bot (@typescript-bot) run dt
TypeScript Bot (@typescript-bot) user test this
TypeScript Bot (@typescript-bot) test top1000
TypeScript Bot (@typescript-bot) perf test this faster

@typescript-automation

typescript-automation Bot commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor

Starting jobs; this comment will be updated as builds start and complete.

Command Status Results
run dt ✅ Started 👀 Results
user test this ✅ Started 👀 Results
test top1000 ✅ Started 👀 Results
perf test this faster ✅ Started 👀 Results

@jakebailey Jake Bailey (jakebailey) added the Domain: Performance Performance related label Nov 6, 2026
@typescript-automation

Copy link
Copy Markdown
Contributor

Jake Bailey (@jakebailey)
The results of the perf run you requested are in!

Here they are:

tsc

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
Compiler-Unions - native
Errors 41 41 ~ ~ ~ p=1.000 n=20
Symbols 88,466 89,706 (± 0.12%) +1,240 (+ 1.40%) 89,370 89,944 p=0.000 n=20
Types 79,607 80,192 (± 0.12%) +585 (+ 0.73%) 79,895 80,485 p=0.000 n=20
Memory Used 106,408k (± 0.03%) 108,868k (± 0.08%) +2,461k (+ 2.31%) 108,574k 109,138k p=0.000 n=20
Memory Allocs 1,261,870 (± 0.01%) 1,299,393 (± 0.04%) +37,523 (+ 2.97%) 1,297,848 1,302,319 p=0.000 n=20
Config Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Parse Time 0.022s (± 2.32%) 0.022s (± 1.84%) ~ 0.021s 0.024s p=0.392 n=20
Bind Time 0.009s (± 4.50%) 0.008s (± 3.74%) 🟩-0.001s (-11.70%) 0.007s 0.009s p=0.000 n=20
Check Time 0.209s (± 1.34%) 0.231s (± 1.40%) 🔻+0.022s (+10.57%) 0.218s 0.241s p=0.000 n=20
Emit Time 0.135s (± 1.53%) 0.140s (± 3.34%) +0.005s (+ 3.58%) 0.131s 0.178s p=0.040 n=20
Total Time 0.379s (± 1.15%) 0.405s (± 1.55%) 🔻+0.026s (+ 6.92%) 0.382s 0.438s p=0.000 n=20
angular-1 - native
Errors 63 68 🔻+5 (+ 7.94%) ~ ~ p=0.000 n=20
Symbols 756,637 834,259 (± 0.06%) 🔻+77,622 (+10.26%) 833,144 836,783 p=0.000 n=20
Types 549,451 648,795 (± 0.13%) 🔻+99,344 (+18.08%) 646,496 653,444 p=0.000 n=20
Memory Used 643,899k (± 0.02%) 752,242k (± 0.10%) 🔻+108,343k (+16.83%) 749,895k 755,380k p=0.000 n=20
Memory Allocs 9,497,054 (± 0.13%) 10,500,946 (± 0.10%) 🔻+1,003,892 (+10.57%) 10,469,348 10,535,797 p=0.000 n=20
Config Time 0.007s (± 2.08%) 0.007s (± 1.50%) ~ 0.006s 0.007s p=1.000 n=20
Parse Time 0.115s (± 4.33%) 0.117s (± 4.86%) ~ 0.104s 0.158s p=0.379 n=20
Bind Time 0.044s (±11.08%) 0.043s (±10.40%) ~ 0.035s 0.062s p=0.751 n=20
Check Time 0.631s (± 1.12%) 0.494s (± 2.60%) 🟩-0.136s (-21.64%) 0.455s 0.549s p=0.000 n=20
Emit Time 0.393s (± 0.93%) 0.418s (± 1.46%) 🔻+0.025s (+ 6.38%) 0.392s 0.436s p=0.000 n=20
Total Time 1.202s (± 0.76%) 1.095s (± 0.86%) 🟩-0.107s (- 8.91%) 1.060s 1.133s p=0.000 n=20
arktype - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 686,116 765,562 (± 0.13%) 🔻+79,446 (+11.58%) 760,641 768,772 p=0.000 n=20
Types 939,797 1,052,850 (± 0.15%) 🔻+113,053 (+12.03%) 1,046,188 1,057,980 p=0.000 n=20
Memory Used 475,945k (± 0.01%) 566,790k (± 0.10%) 🔻+90,846k (+19.09%) 564,151k 568,884k p=0.000 n=20
Memory Allocs 12,052,669 (± 0.03%) 12,958,611 (± 0.16%) 🔻+905,942 (+ 7.52%) 12,881,667 13,033,526 p=0.000 n=20
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=20
Parse Time 0.040s (± 3.10%) 0.041s (± 3.57%) ~ 0.036s 0.046s p=0.538 n=20
Bind Time 0.013s (±10.98%) 0.013s (± 8.79%) ~ 0.011s 0.018s p=0.492 n=20
Check Time 0.830s (± 0.68%) 0.643s (± 1.88%) 🟩-0.187s (-22.48%) 0.593s 0.678s p=0.000 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 0.909s (± 0.68%) 0.720s (± 1.52%) 🟩-0.189s (-20.79%) 0.676s 0.755s p=0.000 n=20
class-transformer - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 45,376 45,341 (± 0.10%) -35 (- 0.08%) 45,313 45,699 p=0.000 n=20
Types 7,573 7,250 (± 0.78%) 🟩-323 (- 4.27%) 7,198 7,729 p=0.000 n=20
Memory Used 27,756k (± 0.03%) 28,149k (± 0.14%) +393k (+ 1.41%) 28,086k 28,475k p=0.000 n=20
Memory Allocs 247,796 (± 0.06%) 249,602 (± 0.16%) +1,806 (+ 0.73%) 248,921 252,827 p=0.000 n=20
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=20
Parse Time 0.012s (± 6.80%) 0.011s (± 6.40%) ~ 0.008s 0.014s p=0.822 n=20
Bind Time 0.004s (±13.63%) 0.004s (±10.63%) ~ 0.002s 0.005s p=1.000 n=20
Check Time 0.009s (± 6.68%) 0.010s (± 8.15%) ~ 0.007s 0.013s p=0.088 n=20
Emit Time 0.009s (±13.16%) 0.009s (± 6.31%) ~ 0.007s 0.012s p=0.156 n=20
Total Time 0.034s (± 5.46%) 0.035s (± 3.21%) ~ 0.031s 0.039s p=0.071 n=20
effect - native
Errors 12 20 🔻+8 (+66.67%) ~ ~ p=0.000 n=20
Symbols 1,235,134 1,114,816 (± 0.04%) 🟩-120,318 (- 9.74%) 1,113,921 1,118,806 p=0.000 n=20
Types 893,436 734,760 (± 0.06%) 🟩-158,676 (-17.76%) 733,640 737,495 p=0.000 n=20
Memory Used 941,297k (± 0.02%) 886,561k (± 0.03%) 🟩-54,736k (- 5.81%) 885,449k 888,232k p=0.000 n=20
Memory Allocs 12,592,389 (± 0.04%) 12,065,865 (± 0.08%) 🟩-526,524 (- 4.18%) 12,050,480 12,151,153 p=0.000 n=20
Config Time 0.002s 0.002s ~ ~ ~ p=1.000 n=20
Parse Time 0.144s (± 1.73%) 0.144s (± 1.51%) ~ 0.136s 0.151s p=0.673 n=20
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Check Time 0.845s (± 0.88%) 1.306s (± 0.38%) 🔻+0.461s (+54.63%) 1.286s 1.324s p=0.000 n=20
Emit Time 0.466s (± 1.30%) 0.860s (± 1.86%) 🔻+0.394s (+84.60%) 0.824s 0.932s p=0.000 n=20
Total Time 1.546s (± 0.34%) 2.399s (± 0.68%) 🔻+0.854s (+55.22%) 2.358s 2.476s p=0.000 n=20
mui-docs - native
Errors 11,405 11,405 ~ ~ ~ p=1.000 n=20
Symbols 3,782,394 4,976,277 (± 0.27%) 🔻+1,193,883 (+31.56%) 4,908,137 5,020,013 p=0.000 n=20
Types 1,355,778 1,866,045 (± 0.36%) 🔻+510,267 (+37.64%) 1,835,692 1,901,227 p=0.000 n=20
Memory Used 1,678,607k (± 0.09%) 2,598,922k (± 0.33%) 🔻+920,315k (+54.83%) 2,587,014k 2,673,786k p=0.000 n=20
Memory Allocs 25,525,845 (± 0.07%) 35,055,135 (± 0.33%) 🔻+9,529,290 (+37.33%) 34,904,586 36,055,512 p=0.000 n=20
Config Time 0.006s (± 3.66%) 0.006s (± 3.59%) ~ 0.006s 0.007s p=1.000 n=20
Parse Time 0.268s (± 1.80%) 0.267s (± 2.45%) ~ 0.252s 0.312s p=0.317 n=20
Bind Time 0.001s 0.001s ~ ~ ~ p=1.000 n=20
Check Time 2.870s (± 0.64%) 3.382s (± 1.63%) 🔻+0.512s (+17.83%) 3.213s 3.532s p=0.000 n=20
Emit Time 0.249s (± 1.45%) 0.260s (± 5.74%) ~ 0.241s 0.390s p=0.223 n=20
Total Time 3.874s (± 0.53%) 4.434s (± 1.04%) 🔻+0.560s (+14.46%) 4.233s 4.554s p=0.000 n=20
sentry - native
Errors 2 2 ~ ~ ~ p=1.000 n=20
Symbols 4,793,266 5,630,560 (± 0.13%) 🔻+837,294 (+17.47%) 5,602,720 5,653,875 p=0.000 n=20
Types 2,607,066 3,164,005 (± 0.05%) 🔻+556,939 (+21.36%) 3,157,346 3,169,371 p=0.000 n=20
Memory Used 2,797,071k (± 0.04%) 3,495,895k (± 0.06%) 🔻+698,824k (+24.98%) 3,488,617k 3,501,943k p=0.000 n=20
Memory Allocs 74,668,090 (± 0.13%) 115,896,727 (± 0.05%) 🔻+41,228,637 (+55.22%) 115,516,875 116,137,824 p=0.000 n=20
Config Time 0.017s (± 1.36%) 0.017s (± 1.20%) ~ 0.017s 0.018s p=0.320 n=20
Parse Time 0.462s (± 6.28%) 0.451s (± 2.96%) ~ 0.419s 0.534s p=0.794 n=20
Bind Time 0.151s (±10.13%) 0.135s (± 8.67%) ~ 0.114s 0.229s p=0.057 n=20
Check Time 6.415s (± 0.61%) 5.156s (± 1.19%) 🟩-1.259s (-19.63%) 5.007s 5.520s p=0.000 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 7.100s (± 0.59%) 5.813s (± 1.07%) 🟩-1.287s (-18.13%) 5.634s 6.141s p=0.000 n=20
social-app - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 1,883,060 2,487,895 (± 0.06%) 🔻+604,835 (+32.12%) 2,483,319 2,493,429 p=0.000 n=20
Types 1,158,093 1,816,593 (± 0.03%) 🔻+658,500 (+56.86%) 1,813,780 1,818,603 p=0.000 n=20
Memory Used 952,437k (± 0.02%) 1,367,297k (± 0.04%) 🔻+414,859k (+43.56%) 1,365,296k 1,369,863k p=0.000 n=20
Memory Allocs 13,398,016 (± 0.09%) 21,113,035 (± 0.08%) 🔻+7,715,020 (+57.58%) 21,047,494 21,181,088 p=0.000 n=20
Config Time 0.005s (± 4.43%) 0.005s (± 3.32%) ~ 0.005s 0.006s p=1.000 n=20
Parse Time 0.150s (± 2.92%) 0.150s (± 1.82%) ~ 0.139s 0.162s p=0.560 n=20
Bind Time 0.040s (± 6.53%) 0.040s (± 7.67%) ~ 0.034s 0.062s p=0.731 n=20
Check Time 1.356s (± 0.80%) 1.380s (± 1.66%) ~ 1.282s 1.465s p=0.090 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 1.571s (± 0.65%) 1.594s (± 1.31%) +0.024s (+ 1.50%) 1.507s 1.672s p=0.041 n=20
strada-build-src - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 1,184,972 1,127,524 (± 0.01%) 🟩-57,448 (- 4.85%) 1,127,075 1,128,215 p=0.000 n=20
Types 438,823 337,488 (± 0.06%) 🟩-101,335 (-23.09%) 336,898 338,458 p=0.000 n=20
Memory Used 1,155,116k (± 0.25%) 1,079,848k (± 0.33%) 🟩-75,268k (- 6.52%) 1,071,567k 1,097,730k p=0.000 n=20
Memory Allocs 47,295,787 (± 0.12%) 44,146,684 (± 0.04%) 🟩-3,149,103 (- 6.66%) 44,108,014 44,257,877 p=0.000 n=20
Config Time 0.002s (±16.13%) 0.002s (±12.21%) ~ 0.001s 0.003s p=0.097 n=20
Parse Time 0.135s (± 1.46%) 0.132s (± 1.19%) -0.003s (- 2.23%) 0.127s 0.137s p=0.020 n=20
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Check Time 0.777s (± 0.47%) 1.044s (± 0.69%) 🔻+0.267s (+34.39%) 1.020s 1.084s p=0.000 n=20
Emit Time 0.135s (± 1.66%) 0.202s (± 1.14%) 🔻+0.067s (+49.52%) 0.194s 0.213s p=0.000 n=20
Total Time 9.099s (± 0.35%) 11.520s (± 0.38%) 🔻+2.421s (+26.60%) 11.358s 11.668s p=0.000 n=20
strada-compiler - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 263,481 263,680 (± 0.06%) ~ 263,304 263,947 p=0.248 n=20
Types 196,103 195,893 (± 0.13%) ~ 195,246 196,594 p=1.000 n=20
Memory Used 221,473k (± 0.02%) 228,037k (± 0.06%) +6,564k (+ 2.96%) 227,621k 228,419k p=0.000 n=20
Memory Allocs 2,386,968 (± 0.02%) 2,482,788 (± 0.05%) 🔻+95,819 (+ 4.01%) 2,479,544 2,486,126 p=0.000 n=20
Config Time 0.000s 0.000s (±143.57%) ~ 0.000s 0.001s p=0.487 n=20
Parse Time 0.049s (± 3.25%) 0.051s (± 9.42%) ~ 0.045s 0.093s p=0.772 n=20
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Check Time 0.378s (± 1.93%) 0.423s (± 1.67%) 🔻+0.045s (+11.80%) 0.407s 0.471s p=0.000 n=20
Emit Time 0.049s (± 6.06%) 0.090s (± 5.95%) 🔻+0.041s (+84.09%) 0.073s 0.126s p=0.000 n=20
Total Time 0.505s (± 1.60%) 0.592s (± 1.64%) 🔻+0.087s (+17.33%) 0.568s 0.646s p=0.000 n=20
t3code-server - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 4,349,937 6,151,332 (± 0.53%) 🔻+1,801,395 (+41.41%) 6,065,511 6,342,762 p=0.000 n=20
Types 3,042,465 4,850,685 (± 0.80%) 🔻+1,808,220 (+59.43%) 4,767,858 5,114,123 p=0.000 n=20
Memory Used 2,395,771k (± 0.03%) 3,605,400k (± 0.76%) 🔻+1,209,629k (+50.49%) 3,552,526k 3,789,725k p=0.000 n=20
Memory Allocs 37,018,368 (± 0.04%) 63,477,110 (± 1.60%) 🔻+26,458,742 (+71.47%) 62,152,848 70,401,459 p=0.000 n=20
Config Time 0.002s (± 6.84%) 0.002s (± 9.53%) ~ 0.002s 0.003s p=0.235 n=20
Parse Time 0.240s (± 2.12%) 0.245s (± 3.58%) ~ 0.215s 0.280s p=0.473 n=20
Bind Time 0.089s (±12.73%) 0.082s (± 7.64%) ~ 0.071s 0.122s p=0.878 n=20
Check Time 5.696s (± 0.73%) 5.971s (± 1.36%) 🔻+0.275s (+ 4.83%) 5.715s 6.428s p=0.000 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 6.039s (± 0.69%) 6.315s (± 1.31%) 🔻+0.275s (+ 4.56%) 6.033s 6.764s p=0.000 n=20
tanstack-router - native
Errors 1 1 ~ ~ ~ p=1.000 n=20
Symbols 570,149 620,203 (± 0.07%) 🔻+50,054 (+ 8.78%) 618,698 621,403 p=0.000 n=20
Types 396,551 471,577 (± 0.12%) 🔻+75,026 (+18.92%) 468,908 473,540 p=0.000 n=20
Memory Used 315,201k (± 0.02%) 378,738k (± 0.08%) 🔻+63,537k (+20.16%) 377,260k 379,612k p=0.000 n=20
Memory Allocs 4,323,400 (± 0.16%) 5,081,771 (± 0.12%) 🔻+758,371 (+17.54%) 5,056,475 5,118,022 p=0.000 n=20
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=20
Parse Time 0.039s (± 3.62%) 0.040s (± 3.83%) ~ 0.034s 0.045s p=0.454 n=20
Bind Time 0.012s (± 7.77%) 0.013s (±12.81%) ~ 0.010s 0.022s p=0.337 n=20
Check Time 0.457s (± 2.57%) 0.417s (± 1.22%) 🟩-0.040s (- 8.66%) 0.401s 0.439s p=0.000 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 0.526s (± 2.16%) 0.486s (± 0.87%) 🟩-0.040s (- 7.56%) 0.471s 0.505s p=0.000 n=20
ts-pre-modules - native
Errors 87 87 ~ ~ ~ p=1.000 n=20
Symbols 231,607 238,176 (± 0.78%) +6,569 (+ 2.84%) 233,317 244,596 p=0.000 n=20
Types 181,163 189,736 (± 1.64%) 🔻+8,573 (+ 4.73%) 182,689 200,469 p=0.000 n=20
Memory Used 190,890k (± 0.01%) 202,802k (± 1.39%) 🔻+11,912k (+ 6.24%) 197,168k 212,299k p=0.000 n=20
Memory Allocs 1,310,217 (± 0.02%) 1,463,117 (± 2.12%) 🔻+152,900 (+11.67%) 1,400,945 1,565,703 p=0.000 n=20
Config Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Parse Time 0.044s (± 2.52%) 0.043s (± 2.50%) ~ 0.039s 0.046s p=0.660 n=20
Bind Time 0.019s (± 5.38%) 0.020s (± 4.53%) ~ 0.016s 0.025s p=0.195 n=20
Check Time 0.300s (± 2.76%) 0.331s (± 1.16%) 🔻+0.030s (+10.16%) 0.316s 0.349s p=0.000 n=20
Emit Time 0.000s 0.087s (±52.43%) 🔻+0.087s (+ ∞%) 0.013s 0.236s p=0.000 n=20
Total Time 0.370s (± 2.13%) 0.487s (± 9.61%) 🔻+0.117s (+31.70%) 0.409s 0.654s p=0.000 n=20
vscode - native
Errors 18 18 ~ ~ ~ p=1.000 n=20
Symbols 7,928,651 8,113,570 (± 0.03%) +184,919 (+ 2.33%) 8,107,935 8,125,966 p=0.000 n=20
Types 4,614,106 4,958,823 (± 0.05%) 🔻+344,717 (+ 7.47%) 4,953,385 4,972,999 p=0.000 n=20
Memory Used 5,315,207k (± 0.02%) 5,824,996k (± 0.03%) 🔻+509,788k (+ 9.59%) 5,820,713k 5,836,207k p=0.000 n=20
Memory Allocs 58,512,759 (± 0.02%) 64,271,324 (± 0.04%) 🔻+5,758,565 (+ 9.84%) 64,206,520 64,375,959 p=0.000 n=20
Config Time 0.022s (± 1.05%) 0.023s (± 1.13%) +0.001s (+ 2.23%) 0.022s 0.024s p=0.011 n=20
Parse Time 0.863s (± 1.54%) 0.867s (± 2.16%) ~ 0.794s 0.968s p=0.365 n=20
Bind Time 0.299s (± 5.58%) 0.304s (± 5.75%) ~ 0.277s 0.409s p=0.625 n=20
Check Time 6.890s (± 0.42%) 5.215s (± 2.05%) 🟩-1.674s (-24.30%) 4.852s 5.571s p=0.000 n=20
Emit Time 2.154s (± 6.27%) 2.331s (± 5.82%) 🔻+0.177s (+ 8.22%) 1.935s 2.687s p=0.019 n=20
Total Time 10.288s (± 1.14%) 8.806s (± 0.63%) 🟩-1.482s (-14.40%) 8.623s 9.017s p=0.000 n=20
webpack - native
Errors 615 619 +4 (+ 0.65%) ~ ~ p=0.000 n=20
Symbols 887,763 1,030,440 (± 0.18%) 🔻+142,677 (+16.07%) 1,025,077 1,039,103 p=0.000 n=20
Types 624,213 760,529 (± 0.25%) 🔻+136,316 (+21.84%) 755,026 770,392 p=0.000 n=20
Memory Used 651,580k (± 0.01%) 783,558k (± 0.17%) 🔻+131,978k (+20.26%) 779,077k 789,733k p=0.000 n=20
Memory Allocs 6,083,918 (± 0.20%) 7,883,560 (± 0.46%) 🔻+1,799,642 (+29.58%) 7,808,274 8,081,091 p=0.000 n=20
Config Time 0.003s (± 8.18%) 0.003s (± 5.42%) ~ 0.003s 0.004s p=0.343 n=20
Parse Time 0.126s (± 3.56%) 0.127s (± 2.54%) ~ 0.114s 0.138s p=0.424 n=20
Bind Time 0.044s (±11.57%) 0.044s (±11.26%) ~ 0.032s 0.063s p=0.952 n=20
Check Time 1.056s (± 1.24%) 0.776s (± 1.29%) 🟩-0.280s (-26.54%) 0.738s 0.818s p=0.000 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 1.253s (± 1.13%) 0.974s (± 1.03%) 🟩-0.279s (-22.29%) 0.937s 1.013s p=0.000 n=20
xstate-main - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 3,802,945 3,872,612 (± 0.06%) +69,667 (+ 1.83%) 3,862,681 3,884,196 p=0.000 n=20
Types 3,817,170 3,653,754 (± 0.05%) 🟩-163,416 (- 4.28%) 3,647,111 3,661,237 p=0.000 n=20
Memory Used 2,066,263k (± 0.01%) 2,358,432k (± 0.06%) 🔻+292,168k (+14.14%) 2,353,050k 2,364,896k p=0.000 n=20
Memory Allocs 40,627,040 (± 0.01%) 48,563,574 (± 0.03%) 🔻+7,936,534 (+19.54%) 48,509,747 48,630,828 p=0.000 n=20
Config Time 0.002s 0.002s ~ ~ ~ p=1.000 n=20
Parse Time 0.110s (± 2.42%) 0.107s (± 1.99%) ~ 0.098s 0.117s p=0.142 n=20
Bind Time 0.036s (± 8.03%) 0.038s (± 9.01%) ~ 0.032s 0.057s p=0.287 n=20
Check Time 3.838s (± 0.66%) 3.193s (± 1.05%) 🟩-0.645s (-16.80%) 3.113s 3.369s p=0.000 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 3.994s (± 0.62%) 3.347s (± 1.09%) 🟩-0.646s (-16.18%) 3.265s 3.539s p=0.000 n=20
System info unknown
Hosts
  • native
Scenarios
  • Compiler-Unions - native
  • angular-1 - native
  • arktype - native
  • class-transformer - native
  • effect - native
  • mui-docs - native
  • sentry - native
  • social-app - native
  • strada-build-src - native
  • strada-compiler - native
  • t3code-server - native
  • tanstack-router - native
  • ts-pre-modules - native
  • vscode - native
  • webpack - native
  • xstate-main - native
Benchmark Name Iterations
Current pr 20
Baseline baseline 20

Developer Information:

Download Benchmarks

@typescript-automation

Copy link
Copy Markdown
Contributor

Hey Jake Bailey (@jakebailey), the results of running the DT tests are ready.

There were interesting changes:

Branch only errors: d3-selection

Package: d3-selection

Branch error:

Project scope: tsconfig.json

Error: types/d3-selection/d3-selection-tests.ts:1502:9
TypeScript@local compile error TS2769:
No overload matches this call.
  The last overload gave the following error.
    Argument of type '(enter: Selection<EnterElement, number, HTMLElement, unknown>) => TransitionLike<HTMLParagraphElement, number>' is not assignable to parameter of type 'string | ((elem: Selection<EnterElement, number, HTMLElement, unknown>) => Selection<BaseType, number, HTMLElement, unknown> | TransitionLike<...>)'.
      Type '(enter: Selection<EnterElement, number, HTMLElement, unknown>) => TransitionLike<HTMLParagraphElement, number>' is not assignable to type '(elem: Selection<EnterElement, number, HTMLElement, unknown>) => Selection<BaseType, number, HTMLElement, unknown> | TransitionLike<...>'.
        Type 'TransitionLike<HTMLParagraphElement, number>' is not assignable to type 'Selection<BaseType, number, HTMLElement, unknown> | TransitionLike<HTMLElement, number>'.
          Type 'TransitionLike<HTMLParagraphElement, number>' is not assignable to type 'TransitionLike<HTMLElement, number>'.
            The types returned by 'selection().merge' are incompatible between these types.
              Type '(other: Selection<HTMLParagraphElement, number, any, any> | TransitionLike<HTMLParagraphElement, number>) => Selection<...>' is not assignable to type '(other: Selection<HTMLElement, number, any, any> | TransitionLike<HTMLElement, number>) => Selection<HTMLElement, number, any, any>'.
                Types of parameters 'other' and 'other' are incompatible.
                  Type 'Selection<HTMLElement, number, any, any> | TransitionLike<HTMLElement, number>' is not assignable to type 'Selection<HTMLParagraphElement, number, any, any> | TransitionLike<HTMLParagraphElement, number>'.
                    Type 'Selection<HTMLElement, number, any, any>' is not assignable to type 'Selection<HTMLParagraphElement, number, any, any> | TransitionLike<HTMLParagraphElement, number>'.
                      Type 'Selection<HTMLElement, number, any, any>' is not assignable to type 'Selection<HTMLParagraphElement, number, any, any>'.
                        Types of property 'select' are incompatible.
                          Type '{ <DescElement extends BaseType>(selector: string): import("/mnt/vss/_work/1/s/DefinitelyTyped/types/d3-selection/index").Selection<DescElement, number, any, any>; <DescElement extends BaseType>(selector: null): import("/mnt/vss/_work/1/s/DefinitelyTyped/types/d3-selection/index").Selection<...>; <DescElement extend...' is not assignable to type '{ <DescElement extends BaseType>(selector: string): import("/mnt/vss/_work/1/s/DefinitelyTyped/types/d3-selection/index").Selection<DescElement, number, any, any>; <DescElement extends BaseType>(selector: null): import("/mnt/vss/_work/1/s/DefinitelyTyped/types/d3-selection/index").Selection<...>; <DescElement extend...'. Two different types with this name exist, but they are unrelated.
                            Types of parameters 'selector' and 'selector' are incompatible.
                              Types of parameters 'groups' and 'groups' are incompatible.
                                Type 'HTMLElement[] | ArrayLike<HTMLElement>' is not assignable to type 'HTMLParagraphElement[] | ArrayLike<HTMLParagraphElement>'.
                                  Type 'HTMLElement[]' is not assignable to type 'HTMLParagraphElement[] | ArrayLike<HTMLParagraphElement>'.
                                    Type 'HTMLElement[]' is not assignable to type 'HTMLParagraphElement[]'.
                                      Property 'align' is missing in type 'HTMLElement' but required in type 'HTMLParagraphElement'.
    at combineErrorsAndWarnings (/mnt/vss/_work/1/s/DefinitelyTyped-tools/packages/dtslint/dist/index.js:200:28)
    at runTests (/mnt/vss/_work/1/s/DefinitelyTyped-tools/packages/dtslint/dist/index.js:192:20)
Branch only errors: react-relay

Package: react-relay

Branch error:

Project scope: tsconfig.json

Error: types/react-relay/test/relay-hooks-tests.tsx:987:13
TypeScript@local compile error TS2344:
Type '{ mainPanelA?: EntryPoint<EntryPointComponent<{ someQueryRef: SomeQuery; }, {}, { onClick: () => void; }>, Params> | undefined; mainPanelB?: EntryPoint<...> | undefined; }' does not satisfy the constraint 'Record<string, EntryPoint<any, any> | undefined>'.
  Property 'mainPanelA' is incompatible with index signature.
    Type 'EntryPoint<EntryPointComponent<{ someQueryRef: SomeQuery; }, {}, { onClick: () => void; }>, Params>' is not assignable to type 'InternalEntryPointRepresentation<any, Record<string, OperationType>, Record<string, EntryPoint<any, any> | undefined>, {}, {} | null>'.
      Types of property 'root' are incompatible.
        Type 'JSResourceReference<EntryPointComponent<{ someQueryRef: SomeQuery; }, {}, { onClick: () => void; }, {}>>' is not assignable to type 'JSResourceReference<EntryPointComponent<Record<string, OperationType>, Record<string, EntryPoint<any, any> | undefined>, {}, {} | null>>'.
          Type 'EntryPointComponent<{ someQueryRef: SomeQuery; }, {}, { onClick: () => void; }, {}>' is not assignable to type 'EntryPointComponent<Record<string, OperationType>, Record<string, EntryPoint<any, any> | undefined>, {}, {} | null>'.
            Type 'ComponentClass<EntryPointProps<{ someQueryRef: SomeQuery; }, {}, { onClick: () => void; }, {}>, any>' is not assignable to type 'EntryPointComponent<Record<string, OperationType>, Record<string, EntryPoint<any, any> | undefined>, {}, {} | null>'.
              Type 'ComponentClass<EntryPointProps<{ someQueryRef: SomeQuery; }, {}, { onClick: () => void; }, {}>, any>' is not assignable to type 'ComponentClass<EntryPointProps<Record<string, OperationType>, Record<string, EntryPoint<any, any> | undefined>, {}, {} | null>, any>'.
                Types of property 'getDerivedStateFromProps' are incompatible.
                  Type 'GetDerivedStateFromProps<EntryPointProps<{ someQueryRef: SomeQuery; }, {}, { onClick: () => void; }, {}>, any> | undefined' is not assignable to type 'GetDerivedStateFromProps<EntryPointProps<Record<string, OperationType>, Record<string, EntryPoint<any, any> | undefined>, {}, {} | null>, any> | undefined'.
                    Type 'GetDerivedStateFromProps<EntryPointProps<{ someQueryRef: SomeQuery; }, {}, { onClick: () => void; }, {}>, any>' is not assignable to type 'GetDerivedStateFromProps<EntryPointProps<Record<string, OperationType>, Record<string, EntryPoint<any, any> | undefined>, {}, {} | null>, any>'.
                      Types of parameters 'nextProps' and 'nextProps' are incompatible.
                        Type 'Readonly<EntryPointProps<Record<string, OperationType>, Record<string, EntryPoint<any, any> | undefined>, {}, {} | null>>' is not assignable to type 'Readonly<EntryPointProps<{ someQueryRef: SomeQuery; }, {}, { onClick: () => void; }, {}>>'.
                          Types of property 'extraProps' are incompatible.
                            Type '{} | null' is not assignable to type '{}'.
                              Type 'null' is not assignable to type '{}'.

types/react-relay/test/relay-hooks-tests.tsx:1023:13
TypeScript@local compile error TS2322:
Type '(params: { route: string; }) => { entryPoints: { mainPanelA: { entryPoint: EntryPoint<EntryPointComponent<{ someQueryRef: SomeQuery; }, {}, { onClick: () => void; }>, Params>; entryPointParams: ...; }; mainPanelB?: undefined; } | ...; queries: ...; extraProps: ...; }' is not assignable to type '(entryPointParams: { route: string; }) => PreloadProps<{ route: string; }, {}, Record<string, EntryPoint<any, any> | undefined>, { foo: "bar"; }>'.
  Type '{ entryPoints: { mainPanelA: { entryPoint: EntryPoint<EntryPointComponent<{ someQueryRef: SomeQuery; }, {}, { onClick: () => void; }>, Params>; entryPointParams: { slug: string; }; }; mainPanelB?: undefined; } | ...; queries: {}; extraProps: ...; }' is not assignable to type 'PreloadProps<{ route: string; }, {}, Record<string, EntryPoint<any, any> | undefined>, { foo: "bar"; }>'.
    Types of property 'entryPoints' are incompatible.
      Type '{ mainPanelA: { entryPoint: EntryPoint<EntryPointComponent<{ someQueryRef: SomeQuery; }, {}, { onClick: () => void; }>, Params>; entryPointParams: ...; }; mainPanelB?: undefined; } | ...' is not assignable to type 'ThinNestedEntryPointParamsObject<Record<string, EntryPoint<any, any> | undefined>> | undefined'.
        Type '{ mainPanelA: { entryPoint: EntryPoint<EntryPointComponent<{ someQueryRef: SomeQuery; }, {}, { onClick: () => void; }>, Params>; entryPointParams: { slug: string; }; }; mainPanelB?: undefined; }' is not assignable to type 'ThinNestedEntryPointParamsObject<Record<string, EntryPoint<any, any> | undefined>>'.
          Property 'mainPanelA' is incompatible with index signature.
            Type '{ entryPoint: EntryPoint<EntryPointComponent<{ someQueryRef: SomeQuery; }, {}, { onClick: () => void; }>, Params>; entryPointParams: { slug: string; }; }' is not assignable to type 'ThinNestedEntryPointParams<EntryPoint<any, any> | undefined>'.
              The types of 'entryPoint.root' are incompatible between these types.
                Type 'JSResourceReference<EntryPointComponent<{ someQueryRef: SomeQuery; }, {}, { onClick: () => void; }, {}>>' is not assignable to type 'JSResourceReference<EntryPointComponent<Record<string, OperationType>, Record<string, EntryPoint<any, any> | undefined>, {}, {} | null>>'.
                  Type 'EntryPointComponent<{ someQueryRef: SomeQuery; }, {}, { onClick: () => void; }, {}>' is not assignable to type 'EntryPointComponent<Record<string, OperationType>, Record<string, EntryPoint<any, any> | undefined>, {}, {} | null>'.
                    Type 'ComponentClass<EntryPointProps<{ someQueryRef: SomeQuery; }, {}, { onClick: () => void; }, {}>, any>' is not assignable to type 'EntryPointComponent<Record<string, OperationType>, Record<string, EntryPoint<any, any> | undefined>, {}, {} | null>'.
                      Type 'ComponentClass<EntryPointProps<{ someQueryRef: SomeQuery; }, {}, { onClick: () => void; }, {}>, any>' is not assignable to type 'ComponentClass<EntryPointProps<Record<string, OperationType>, Record<string, EntryPoint<any, any> | undefined>, {}, {} | null>, any>'.
                        Types of property 'getDerivedStateFromProps' are incompatible.
                          Type 'GetDerivedStateFromProps<EntryPointProps<{ someQueryRef: SomeQuery; }, {}, { onClick: () => void; }, {}>, any> | undefined' is not assignable to type 'GetDerivedStateFromProps<EntryPointProps<Record<string, OperationType>, Record<string, EntryPoint<any, any> | undefined>, {}, {} | null>, any> | undefined'.
                            Type 'GetDerivedStateFromProps<EntryPointProps<{ someQueryRef: SomeQuery; }, {}, { onClick: () => void; }, {}>, any>' is not assignable to type 'GetDerivedStateFromProps<EntryPointProps<Record<string, OperationType>, Record<string, EntryPoint<any, any> | undefined>, {}, {} | null>, any>'.
                              Types of parameters 'nextProps' and 'nextProps' are incompatible.
                                Type 'Readonly<EntryPointProps<Record<string, OperationType>, Record<string, EntryPoint<any, any> | undefined>, {}, {} | null>>' is not assignable to type 'Readonly<EntryPointProps<{ someQueryRef: SomeQuery; }, {}, { onClick: () => void; }, {}>>'.
                                  Types of property 'extraProps' are incompatible.
                                    Type '{} | null' is not assignable to type '{}'.
                                      Type 'null' is not assignable to type '{}'.

types/react-relay/test/relay-hooks-tests.tsx:1054:15
TypeScript@local compile error TS2322:
Type 'Readonly<{ dispose: DisposeFn; entryPoints: { [x: string]: Readonly<...>; }; extraProps: {} | null; getComponent: () => any; isDisposed: boolean; queries: { [x: string]: PreloadedQuery<OperationType, Record<...>>; }; rootModuleID: string; }>' is not assignable to type 'PreloadedEntryPoint<EntryPointComponent<{ someQueryRef: SomeQuery; }, {}, { onClick: () => void; }>> | undefined'.
  Type 'Readonly<{ dispose: DisposeFn; entryPoints: { [x: string]: Readonly<...>; }; extraProps: {} | null; getComponent: () => any; isDisposed: boolean; queries: { [x: string]: PreloadedQuery<OperationType, Record<...>>; }; rootModuleID: string; }>' is not assignable to type 'Readonly<{ dispose: DisposeFn; entryPoints: {}; extraProps: {}; getComponent: () => FunctionComponent<EntryPointProps<{ someQueryRef: SomeQuery; }, {}, { onClick: () => void; }, {}>>; isDisposed: boolean; queries: ...; rootModuleID: string; }>'.
    Types of property 'extraProps' are incompatible.
      Type '{} | null' is not assignable to type '{}'.
        Type 'null' is not assignable to type '{}'.
    at combineErrorsAndWarnings (/mnt/vss/_work/1/s/DefinitelyTyped-tools/packages/dtslint/dist/index.js:200:28)
    at runTests (/mnt/vss/_work/1/s/DefinitelyTyped-tools/packages/dtslint/dist/index.js:192:20)

Full output in the log.

@typescript-automation

Copy link
Copy Markdown
Contributor

Jake Bailey (@jakebailey) Here are the results of running the user tests with tsc comparing baseline and pr:

Something interesting changed - please have a look.

Details

effect

packages/tools/ai-docgen/tsconfig.json

uglify-js

/mnt/vss/work/1/s/ts_downloads//m/uglify-js/tsconfig.json

  • [NEW] error TS2339: Property 'last_ref' does not exist on type 'never'.
    • /mnt/vss/work/1/s/ts_downloads//m/uglify-js/node_modules/uglify-js/lib/compress.js(2544,35)
  • [MISSING] error TS2322: Type 'false' is not assignable to type 'never'.
    • /mnt/vss/work/1/s/ts_downloads//m/uglify-js/node_modules/uglify-js/lib/compress.js(2544,25)

@jakebailey

Copy link
Copy Markdown
Member Author

TypeScript Bot (@typescript-bot) perf test this faster

@typescript-automation

typescript-automation Bot commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor

Starting jobs; this comment will be updated as builds start and complete.

Command Status Results
perf test this faster ✅ Started 👀 Results

@typescript-automation

Copy link
Copy Markdown
Contributor

Jake Bailey (@jakebailey)
The results of the perf run you requested are in!

Here they are:

tsc

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
Compiler-Unions - native
Errors 41 41 ~ ~ ~ p=1.000 n=20
Symbols 88,466 90,019 (± 0.34%) +1,553 (+ 1.76%) 89,362 92,342 p=0.000 n=20
Types 79,607 80,422 (± 0.25%) +815 (+ 1.02%) 79,887 81,569 p=0.000 n=20
Memory Used 106,396k (± 0.02%) 109,056k (± 0.15%) +2,660k (+ 2.50%) 108,582k 110,072k p=0.000 n=20
Memory Allocs 1,261,914 (± 0.01%) 1,301,013 (± 0.12%) +39,099 (+ 3.10%) 1,297,805 1,312,076 p=0.000 n=20
Config Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Parse Time 0.022s (± 3.20%) 0.022s (± 3.08%) ~ 0.019s 0.024s p=0.881 n=20
Bind Time 0.008s (± 5.35%) 0.008s (± 5.47%) ~ 0.007s 0.010s p=0.877 n=20
Check Time 0.201s (± 0.53%) 0.220s (± 1.37%) 🔻+0.019s (+ 9.39%) 0.210s 0.235s p=0.000 n=20
Emit Time 0.129s (± 0.63%) 0.136s (± 1.44%) 🔻+0.006s (+ 4.99%) 0.130s 0.144s p=0.000 n=20
Total Time 0.364s (± 0.60%) 0.390s (± 0.91%) 🔻+0.026s (+ 7.09%) 0.380s 0.410s p=0.000 n=20
angular-1 - native
Errors 63 68 🔻+5 (+ 7.94%) ~ ~ p=0.000 n=20
Symbols 756,637 834,387 (± 0.06%) 🔻+77,750 (+10.28%) 832,874 837,029 p=0.000 n=20
Types 549,451 648,765 (± 0.12%) 🔻+99,314 (+18.08%) 645,812 652,250 p=0.000 n=20
Memory Used 643,899k (± 0.02%) 751,894k (± 0.09%) 🔻+107,995k (+16.77%) 749,039k 755,350k p=0.000 n=20
Memory Allocs 9,491,165 (± 0.02%) 10,501,327 (± 0.11%) 🔻+1,010,162 (+10.64%) 10,465,691 10,547,696 p=0.000 n=20
Config Time 0.007s (± 4.33%) 0.007s (± 3.63%) ~ 0.006s 0.007s p=0.110 n=20
Parse Time 0.120s (± 4.33%) 0.118s (± 3.56%) ~ 0.105s 0.140s p=0.644 n=20
Bind Time 0.039s (±10.82%) 0.040s (± 9.92%) ~ 0.033s 0.060s p=0.727 n=20
Check Time 0.623s (± 1.11%) 0.506s (± 2.93%) 🟩-0.117s (-18.77%) 0.459s 0.559s p=0.000 n=20
Emit Time 0.390s (± 0.64%) 0.530s (±47.55%) 🔻+0.140s (+35.93%) 0.379s 2.826s p=0.000 n=20
Total Time 1.194s (± 0.70%) 1.216s (±20.42%) +0.022s (+ 1.86%) 1.045s 3.473s p=0.000 n=20
arktype - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 686,116 765,607 (± 0.17%) 🔻+79,491 (+11.59%) 759,507 772,032 p=0.000 n=20
Types 939,797 1,053,327 (± 0.20%) 🔻+113,530 (+12.08%) 1,044,645 1,064,478 p=0.000 n=20
Memory Used 475,929k (± 0.01%) 566,709k (± 0.14%) 🔻+90,780k (+19.07%) 563,825k 570,965k p=0.000 n=20
Memory Allocs 12,050,450 (± 0.02%) 12,954,060 (± 0.25%) 🔻+903,610 (+ 7.50%) 12,828,840 13,112,755 p=0.000 n=20
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=20
Parse Time 0.041s (± 3.57%) 0.042s (± 5.56%) ~ 0.034s 0.052s p=0.963 n=20
Bind Time 0.013s (± 9.67%) 0.013s (± 9.96%) ~ 0.011s 0.018s p=0.809 n=20
Check Time 0.821s (± 0.82%) 0.628s (± 2.35%) 🟩-0.193s (-23.53%) 0.587s 0.711s p=0.000 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 0.902s (± 0.72%) 0.710s (± 1.98%) 🟩-0.192s (-21.30%) 0.675s 0.794s p=0.000 n=20
class-transformer - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 45,376 45,313 (± 0.00%) -63 (- 0.14%) 45,313 45,318 p=0.000 n=20
Types 7,573 7,208 (± 0.06%) 🟩-365 (- 4.82%) 7,200 7,244 p=0.000 n=20
Memory Used 27,741k (± 0.02%) 28,119k (± 0.03%) +378k (+ 1.36%) 28,089k 28,170k p=0.000 n=20
Memory Allocs 247,773 (± 0.06%) 249,279 (± 0.05%) +1,506 (+ 0.61%) 248,838 249,783 p=0.000 n=20
Config Time 0.001s 0.001s (±10.98%) ~ 0.000s 0.001s p=1.000 n=20
Parse Time 0.011s (± 3.61%) 0.011s (± 4.64%) ~ 0.009s 0.013s p=0.718 n=20
Bind Time 0.003s (± 8.07%) 0.003s (±12.11%) ~ 0.002s 0.005s p=0.053 n=20
Check Time 0.008s (± 6.64%) 0.008s (± 5.81%) ~ 0.007s 0.011s p=0.525 n=20
Emit Time 0.008s (± 5.53%) 0.008s (± 5.80%) 🔻+0.001s (+12.67%) 0.007s 0.010s p=0.006 n=20
Total Time 0.030s (± 2.50%) 0.032s (± 3.41%) 🔻+0.002s (+ 6.44%) 0.029s 0.039s p=0.003 n=20
effect - native
Errors 12 20 🔻+8 (+66.67%) ~ ~ p=0.000 n=20
Symbols 1,235,134 1,293,939 (± 0.08%) 🔻+58,805 (+ 4.76%) 1,289,515 1,297,890 p=0.000 n=20
Types 893,436 973,329 (± 0.10%) 🔻+79,893 (+ 8.94%) 968,147 976,963 p=0.000 n=20
Memory Used 941,535k (± 0.03%) 1,016,348k (± 0.06%) 🔻+74,813k (+ 7.95%) 1,013,784k 1,019,097k p=0.000 n=20
Memory Allocs 12,592,587 (± 0.04%) 13,920,332 (± 0.09%) 🔻+1,327,745 (+10.54%) 13,837,182 13,960,918 p=0.000 n=20
Config Time 0.002s 0.002s ~ ~ ~ p=1.000 n=20
Parse Time 0.147s (± 1.84%) 0.146s (± 1.60%) ~ 0.136s 0.155s p=0.596 n=20
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Check Time 0.864s (± 0.78%) 0.907s (± 1.76%) 🔻+0.043s (+ 5.02%) 0.863s 1.010s p=0.000 n=20
Emit Time 0.478s (± 1.59%) 1.150s (± 1.33%) 🔻+0.672s (+140.65%) 1.096s 1.216s p=0.000 n=20
Total Time 1.585s (± 0.55%) 2.297s (± 0.83%) 🔻+0.713s (+44.98%) 2.247s 2.412s p=0.000 n=20
mui-docs - native
Errors 11,405 11,405 ~ ~ ~ p=1.000 n=20
Symbols 3,782,394 4,964,538 (± 0.42%) 🔻+1,182,144 (+31.25%) 4,905,612 5,027,043 p=0.000 n=20
Types 1,355,778 1,869,765 (± 0.50%) 🔻+513,987 (+37.91%) 1,836,527 1,907,465 p=0.000 n=20
Memory Used 1,678,992k (± 0.07%) 2,610,602k (± 0.64%) 🔻+931,610k (+55.49%) 2,582,510k 2,688,703k p=0.000 n=20
Memory Allocs 25,526,626 (± 0.05%) 35,217,334 (± 0.59%) 🔻+9,690,708 (+37.96%) 34,854,354 36,153,487 p=0.000 n=20
Config Time 0.006s (± 1.72%) 0.006s (± 2.35%) ~ 0.006s 0.007s p=1.000 n=20
Parse Time 0.265s (± 2.26%) 0.268s (± 2.09%) ~ 0.240s 0.288s p=0.498 n=20
Bind Time 0.001s 0.001s ~ ~ ~ p=1.000 n=20
Check Time 2.811s (± 0.63%) 3.376s (± 1.39%) 🔻+0.565s (+20.10%) 3.170s 3.584s p=0.000 n=20
Emit Time 0.245s (± 1.14%) 0.268s (± 9.28%) ~ 0.242s 0.396s p=0.315 n=20
Total Time 3.802s (± 0.53%) 4.420s (± 0.98%) 🔻+0.618s (+16.26%) 4.224s 4.595s p=0.000 n=20
sentry - native
Errors 2 2 ~ ~ ~ p=1.000 n=20
Symbols 4,793,266 5,630,181 (± 0.16%) 🔻+836,915 (+17.46%) 5,606,058 5,673,535 p=0.000 n=20
Types 2,607,066 3,164,198 (± 0.05%) 🔻+557,132 (+21.37%) 3,158,918 3,171,813 p=0.000 n=20
Memory Used 2,798,837k (± 0.04%) 3,497,244k (± 0.06%) 🔻+698,406k (+24.95%) 3,488,425k 3,504,585k p=0.000 n=20
Memory Allocs 74,592,366 (± 0.06%) 115,883,321 (± 0.07%) 🔻+41,290,955 (+55.36%) 115,539,706 116,489,444 p=0.000 n=20
Config Time 0.019s (± 1.47%) 0.018s (± 1.46%) ~ 0.018s 0.020s p=0.050 n=20
Parse Time 0.499s (± 5.12%) 0.469s (± 1.75%) ~ 0.428s 0.489s p=0.060 n=20
Bind Time 0.162s (±10.33%) 0.151s (± 9.88%) 🟩-0.011s (- 6.78%) 0.126s 0.241s p=0.044 n=20
Check Time 6.881s (± 0.65%) 5.430s (± 1.41%) 🟩-1.451s (-21.08%) 5.175s 5.785s p=0.000 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 7.613s (± 0.73%) 6.118s (± 1.31%) 🟩-1.495s (-19.64%) 5.854s 6.474s p=0.000 n=20
social-app - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 1,883,060 2,487,470 (± 0.07%) 🔻+604,410 (+32.10%) 2,478,866 2,493,928 p=0.000 n=20
Types 1,158,093 1,816,198 (± 0.07%) 🔻+658,105 (+56.83%) 1,809,068 1,819,182 p=0.000 n=20
Memory Used 952,346k (± 0.02%) 1,367,270k (± 0.05%) 🔻+414,924k (+43.57%) 1,363,705k 1,369,378k p=0.000 n=20
Memory Allocs 13,426,983 (± 0.22%) 21,107,492 (± 0.12%) 🔻+7,680,509 (+57.20%) 20,988,317 21,232,311 p=0.000 n=20
Config Time 0.005s (± 4.89%) 0.005s (± 3.32%) ~ 0.005s 0.006s p=0.746 n=20
Parse Time 0.146s (± 2.38%) 0.150s (± 6.16%) ~ 0.137s 0.215s p=0.481 n=20
Bind Time 0.042s (± 9.94%) 0.043s (±10.23%) ~ 0.034s 0.062s p=0.576 n=20
Check Time 1.341s (± 0.68%) 1.340s (± 1.74%) ~ 1.258s 1.421s p=0.815 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 1.552s (± 0.58%) 1.558s (± 1.72%) ~ 1.475s 1.705s p=0.825 n=20
strada-build-src - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 1,184,972 1,186,743 (± 0.02%) +1,771 (+ 0.15%) 1,185,788 1,187,628 p=0.000 n=20
Types 438,823 437,447 (± 0.07%) -1,376 (- 0.31%) 436,407 439,050 p=0.000 n=20
Memory Used 1,166,789k (± 0.45%) 1,180,603k (± 0.28%) +13,813k (+ 1.18%) 1,171,289k 1,202,383k p=0.001 n=20
Memory Allocs 47,456,143 (± 0.09%) 49,278,934 (± 0.08%) +1,822,791 (+ 3.84%) 49,124,764 49,436,630 p=0.000 n=20
Config Time 0.002s (±14.79%) 0.002s (±14.86%) ~ 0.001s 0.004s p=0.856 n=20
Parse Time 0.145s (± 2.04%) 0.144s (± 1.65%) ~ 0.136s 0.153s p=0.973 n=20
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Check Time 0.815s (± 0.95%) 0.894s (± 1.19%) 🔻+0.079s (+ 9.68%) 0.865s 0.976s p=0.000 n=20
Emit Time 0.152s (± 2.15%) 0.227s (± 1.62%) 🔻+0.075s (+49.75%) 0.215s 0.243s p=0.000 n=20
Total Time 9.733s (± 1.09%) 10.967s (± 0.60%) 🔻+1.234s (+12.68%) 10.741s 11.200s p=0.000 n=20
strada-compiler - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 263,481 263,738 (± 0.05%) +257 (+ 0.10%) 263,304 263,947 p=0.020 n=20
Types 196,103 195,988 (± 0.13%) ~ 195,258 196,487 p=0.254 n=20
Memory Used 221,501k (± 0.02%) 228,053k (± 0.06%) +6,552k (+ 2.96%) 227,624k 228,475k p=0.000 n=20
Memory Allocs 2,387,420 (± 0.01%) 2,483,327 (± 0.04%) 🔻+95,906 (+ 4.02%) 2,479,501 2,486,346 p=0.000 n=20
Config Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Parse Time 0.048s (± 3.43%) 0.048s (± 3.15%) ~ 0.043s 0.053s p=0.856 n=20
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Check Time 0.362s (± 0.62%) 0.406s (± 0.58%) 🔻+0.044s (+12.04%) 0.397s 0.413s p=0.000 n=20
Emit Time 0.045s (± 4.49%) 0.081s (± 3.64%) 🔻+0.037s (+82.13%) 0.073s 0.092s p=0.000 n=20
Total Time 0.480s (± 0.78%) 0.561s (± 0.63%) 🔻+0.081s (+16.91%) 0.546s 0.574s p=0.000 n=20
t3code-server - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 4,349,937 6,142,603 (± 0.45%) 🔻+1,792,666 (+41.21%) 6,072,437 6,274,311 p=0.000 n=20
Types 3,042,465 4,842,838 (± 0.58%) 🔻+1,800,373 (+59.17%) 4,788,612 4,986,903 p=0.000 n=20
Memory Used 2,394,724k (± 0.03%) 3,599,493k (± 0.56%) 🔻+1,204,769k (+50.31%) 3,561,730k 3,695,857k p=0.000 n=20
Memory Allocs 37,007,354 (± 0.04%) 63,266,675 (± 1.17%) 🔻+26,259,321 (+70.96%) 62,213,303 66,562,584 p=0.000 n=20
Config Time 0.002s (± 6.84%) 0.003s (±36.81%) ~ 0.002s 0.011s p=0.737 n=20
Parse Time 0.235s (± 2.46%) 0.256s (±13.52%) ~ 0.221s 0.568s p=0.208 n=20
Bind Time 0.086s (±10.64%) 0.075s (± 4.78%) ~ 0.068s 0.093s p=0.084 n=20
Check Time 5.577s (± 0.45%) 5.891s (± 2.47%) 🔻+0.314s (+ 5.62%) 5.591s 6.935s p=0.000 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 5.912s (± 0.42%) 6.237s (± 2.42%) 🔻+0.325s (+ 5.50%) 5.916s 7.267s p=0.000 n=20
tanstack-router - native
Errors 1 1 ~ ~ ~ p=1.000 n=20
Symbols 570,149 620,268 (± 0.08%) 🔻+50,119 (+ 8.79%) 617,962 621,643 p=0.000 n=20
Types 396,551 471,541 (± 0.13%) 🔻+74,990 (+18.91%) 468,738 473,637 p=0.000 n=20
Memory Used 315,274k (± 0.02%) 378,589k (± 0.10%) 🔻+63,315k (+20.08%) 376,748k 379,685k p=0.000 n=20
Memory Allocs 4,320,264 (± 0.09%) 5,084,405 (± 0.16%) 🔻+764,141 (+17.69%) 5,064,313 5,130,558 p=0.000 n=20
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=20
Parse Time 0.040s (± 4.33%) 0.039s (± 3.31%) ~ 0.034s 0.046s p=0.643 n=20
Bind Time 0.013s (±11.92%) 0.012s (± 9.97%) ~ 0.010s 0.020s p=0.871 n=20
Check Time 0.464s (± 0.69%) 0.425s (± 1.64%) 🟩-0.039s (- 8.37%) 0.399s 0.451s p=0.000 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 0.534s (± 0.85%) 0.492s (± 1.21%) 🟩-0.042s (- 7.82%) 0.464s 0.518s p=0.000 n=20
ts-pre-modules - native
Errors 87 87 ~ ~ ~ p=1.000 n=20
Symbols 231,607 239,114 (± 0.84%) +7,507 (+ 3.24%) 235,036 245,206 p=0.000 n=20
Types 181,163 191,261 (± 1.69%) 🔻+10,098 (+ 5.57%) 184,213 200,494 p=0.000 n=20
Memory Used 190,833k (± 0.02%) 204,133k (± 1.46%) 🔻+13,300k (+ 6.97%) 197,593k 212,260k p=0.000 n=20
Memory Allocs 1,310,254 (± 0.02%) 1,476,868 (± 2.25%) 🔻+166,613 (+12.72%) 1,406,474 1,565,800 p=0.000 n=20
Config Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Parse Time 0.041s (± 3.38%) 0.041s (± 3.35%) ~ 0.034s 0.047s p=0.876 n=20
Bind Time 0.020s (± 4.75%) 0.019s (± 4.23%) ~ 0.016s 0.021s p=0.135 n=20
Check Time 0.282s (± 1.09%) 0.320s (± 0.89%) 🔻+0.038s (+13.44%) 0.308s 0.333s p=0.000 n=20
Emit Time 0.000s 0.109s (±46.80%) 🔻+0.109s (+ ∞%) 0.013s 0.256s p=0.000 n=20
Total Time 0.349s (± 0.82%) 0.495s (±10.36%) 🔻+0.146s (+41.73%) 0.390s 0.645s p=0.000 n=20
vscode - native
Errors 18 18 ~ ~ ~ p=1.000 n=20
Symbols 7,955,816 8,144,160 (± 0.02%) +188,344 (+ 2.37%) 8,139,000 8,152,423 p=0.000 n=20
Types 4,643,219 4,969,087 (± 0.04%) 🔻+325,868 (+ 7.02%) 4,963,306 4,977,765 p=0.000 n=20
Memory Used 5,325,196k (± 0.02%) 5,839,319k (± 0.04%) 🔻+514,123k (+ 9.65%) 5,832,335k 5,849,764k p=0.000 n=20
Memory Allocs 58,687,759 (± 0.01%) 64,615,253 (± 0.03%) 🔻+5,927,494 (+10.10%) 64,575,452 64,689,944 p=0.000 n=20
Config Time 0.024s (± 2.59%) 0.024s (± 1.99%) ~ 0.023s 0.027s p=0.392 n=20
Parse Time 0.927s (± 1.93%) 0.930s (± 2.13%) ~ 0.867s 1.014s p=0.654 n=20
Bind Time 0.334s (± 4.83%) 0.335s (± 5.96%) ~ 0.300s 0.459s p=0.358 n=20
Check Time 7.548s (± 0.44%) 5.496s (± 2.04%) 🟩-2.052s (-27.18%) 5.094s 5.856s p=0.000 n=20
Emit Time 2.366s (± 5.96%) 2.467s (± 5.43%) ~ 2.062s 2.875s p=0.253 n=20
Total Time 11.262s (± 1.09%) 9.318s (± 0.52%) 🟩-1.943s (-17.26%) 9.069s 9.479s p=0.000 n=20
webpack - native
Errors 618 622 +4 (+ 0.65%) ~ ~ p=0.000 n=20
Symbols 884,452 1,016,169 (± 0.65%) 🔻+131,717 (+14.89%) 1,001,424 1,030,581 p=0.000 n=20
Types 622,976 749,987 (± 0.55%) 🔻+127,011 (+20.39%) 739,008 760,826 p=0.000 n=20
Memory Used 651,179k (± 0.02%) 776,693k (± 0.29%) 🔻+125,515k (+19.27%) 770,522k 782,792k p=0.000 n=20
Memory Allocs 6,081,916 (± 0.09%) 7,797,075 (± 0.45%) 🔻+1,715,159 (+28.20%) 7,703,252 7,890,841 p=0.000 n=20
Config Time 0.003s 0.003s ~ ~ ~ p=1.000 n=20
Parse Time 0.120s (± 2.87%) 0.121s (± 2.34%) ~ 0.111s 0.131s p=0.304 n=20
Bind Time 0.042s (± 9.61%) 0.042s (± 9.21%) ~ 0.032s 0.063s p=0.888 n=20
Check Time 1.042s (± 0.67%) 0.747s (± 1.31%) 🟩-0.295s (-28.35%) 0.722s 0.785s p=0.000 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 1.231s (± 0.52%) 0.938s (± 0.81%) 🟩-0.293s (-23.81%) 0.912s 0.965s p=0.000 n=20
xstate-main - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 3,802,945 3,871,898 (± 0.07%) +68,953 (+ 1.81%) 3,857,107 3,882,040 p=0.000 n=20
Types 3,817,170 3,653,725 (± 0.04%) 🟩-163,445 (- 4.28%) 3,648,345 3,658,861 p=0.000 n=20
Memory Used 2,066,197k (± 0.01%) 2,357,538k (± 0.06%) 🔻+291,342k (+14.10%) 2,350,866k 2,361,911k p=0.000 n=20
Memory Allocs 40,633,340 (± 0.02%) 48,568,332 (± 0.02%) 🔻+7,934,992 (+19.53%) 48,535,828 48,622,280 p=0.000 n=20
Config Time 0.002s 0.002s ~ ~ ~ p=1.000 n=20
Parse Time 0.105s (± 2.08%) 0.105s (± 2.12%) ~ 0.098s 0.113s p=0.773 n=20
Bind Time 0.036s (± 7.78%) 0.038s (±10.09%) ~ 0.031s 0.060s p=0.477 n=20
Check Time 3.769s (± 0.86%) 3.154s (± 0.93%) 🟩-0.615s (-16.32%) 3.067s 3.257s p=0.000 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 3.919s (± 0.80%) 3.307s (± 0.99%) 🟩-0.612s (-15.62%) 3.213s 3.418s p=0.000 n=20
System info unknown
Hosts
  • native
Scenarios
  • Compiler-Unions - native
  • angular-1 - native
  • arktype - native
  • class-transformer - native
  • effect - native
  • mui-docs - native
  • sentry - native
  • social-app - native
  • strada-build-src - native
  • strada-compiler - native
  • t3code-server - native
  • tanstack-router - native
  • ts-pre-modules - native
  • vscode - native
  • webpack - native
  • xstate-main - native
Benchmark Name Iterations
Current pr 20
Baseline baseline 20

Developer Information:

Download Benchmarks

The checker count was fixed at 4 because which checker checked a file
could change the results, so changing it changed the output. That is no
longer the case, and with checkers taking files from each other it only
trades time for memory, so the default can follow the machine.

Checking is fastest with about one checker per CPU, until the work
every checker duplicates (library and shared types) outweighs what
another checker adds. Measured on 4 and 8 CPUs, one checker per logical
CPU was fastest for nearly every project, hyperthreads included; on 20
CPUs, 8 checkers were fastest for most projects, and only very large
programs gained up to 12-16. So the default is one checker per CPU, up
to 8, rising with the square root of the checked work up to 16, and no
more than one per 32 checked files, but at least the 4 of before when
there are as many CPUs. Files whose checking is skipped, such as
declaration files under skipLibCheck, count for nothing.

Build mode divides the CPUs among the projects it builds concurrently,
but never gives a project fewer than the 4 checkers of before, since
projects that depend on each other are built one at a time.
@jakebailey

Copy link
Copy Markdown
Member Author

TypeScript Bot (@typescript-bot) perf test this faster

@typescript-automation

typescript-automation Bot commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor

Starting jobs; this comment will be updated as builds start and complete.

Command Status Results
perf test this faster ✅ Started 👀 Results

@typescript-automation

Copy link
Copy Markdown
Contributor

Jake Bailey (@jakebailey) Here are the results of running the top 1000 repos with tsc comparing baseline and pr:

Something interesting changed - please have a look.

Details

Chocobozzz/PeerTube

7 of 13 projects failed to build with the old tsc and were ignored

client/tsconfig.json

  • error TS2322: Type '{ parsing?: false | _DeepPartialObject<{ [key: string]: string; }>; normalized?: boolean; skipNull?: boolean; datasets?: _DeepPartialObject<{ bar: BarControllerDatasetOptions; ... 6 more ...; scatter: LineControllerDatasetOptions; }>; ... 27 more ...; bar?: _DeepPartialObject<...>; }' is not assignable to type '_DeepPartialObject<CoreChartOptions<"bar" | "line"> & ElementChartOptions<"bar" | "line"> & PluginChartOptions<"bar" | "line"> & DatasetChartOptions<...> & ScaleChartOptions<...> & BarControllerChartOptions> | _DeepPartialObject<...>'.

Effect-TS/effect

1 of 4 projects failed to build with the old tsc and were ignored

packages/tools/ai-docgen/tsconfig.json

Unleash/unleash

1 of 3 projects failed to build with the old tsc and were ignored

frontend/tsconfig.json

@typescript-automation

Copy link
Copy Markdown
Contributor

Jake Bailey (@jakebailey)
The results of the perf run you requested are in!

Here they are:

tsc

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
Compiler-Unions - native
Errors 41 41 ~ ~ ~ p=1.000 n=40
Symbols 88,466 89,794 (± 0.11%) +1,257 (+ 1.42%) 89,368 90,614 p=0.000 n=40
Types 79,607 80,224 (± 0.09%) +573 (+ 0.72%) 79,870 80,672 p=0.000 n=40
Memory Used 106,406k (± 0.02%) 108,874k (± 0.06%) +2,471k (+ 2.32%) 108,439k 109,297k p=0.000 n=40
Memory Allocs 1,261,844 (± 0.01%) 1,299,429 (± 0.03%) +37,499 (+ 2.97%) 1,297,488 1,302,921 p=0.000 n=40
Config Time 0.000s 0.000s ~ ~ ~ p=1.000 n=40
Parse Time 0.022s (± 4.92%) 0.022s (± 1.78%) ~ 0.019s 0.024s p=0.280 n=40
Bind Time 0.008s (± 5.21%) 0.008s (± 3.69%) 🟩-0.001s (- 6.46%) 0.006s 0.010s p=0.005 n=40
Check Time 0.201s (± 0.63%) 0.219s (± 0.47%) 🔻+0.018s (+ 8.86%) 0.212s 0.225s p=0.000 n=40
Emit Time 0.130s (± 1.27%) 0.132s (± 0.51%) +0.004s (+ 2.74%) 0.127s 0.138s p=0.000 n=40
Total Time 0.365s (± 0.73%) 0.384s (± 0.33%) 🔻+0.021s (+ 5.79%) 0.377s 0.397s p=0.000 n=40
angular-1 - native
Errors 63 68 🔻+5 (+ 7.94%) ~ ~ p=0.000 n=40
Symbols 756,637 831,362 (± 0.02%) 🔻+74,786 (+ 9.88%) 829,652 832,000 p=0.000 n=40
Types 549,451 643,727 (± 0.05%) 🔻+94,292 (+17.16%) 640,891 645,853 p=0.000 n=40
Memory Used 643,794k (± 0.01%) 747,828k (± 0.03%) 🔻+104,067k (+16.16%) 745,332k 748,896k p=0.000 n=40
Memory Allocs 9,493,635 (± 0.04%) 10,448,054 (± 0.04%) 🔻+954,523 (+10.05%) 10,435,781 10,492,971 p=0.000 n=40
Config Time 0.008s (± 2.30%) 0.007s (± 1.76%) 🟩-0.000s (- 5.72%) 0.006s 0.008s p=0.017 n=40
Parse Time 0.134s (± 3.47%) 0.130s (± 2.33%) ~ 0.116s 0.155s p=0.512 n=40
Bind Time 0.047s (± 5.99%) 0.045s (± 5.70%) ~ 0.037s 0.065s p=0.068 n=40
Check Time 0.674s (± 0.99%) 0.534s (± 1.76%) 🟩-0.140s (-20.82%) 0.484s 0.595s p=0.000 n=40
Emit Time 0.418s (± 0.73%) 0.432s (± 1.41%) +0.014s (+ 3.24%) 0.399s 0.485s p=0.000 n=40
Total Time 1.295s (± 0.63%) 1.166s (± 0.82%) 🟩-0.129s (- 9.99%) 1.105s 1.242s p=0.000 n=40
arktype - native
Errors 0 0 ~ ~ ~ p=1.000 n=40
Symbols 686,116 765,981 (± 0.08%) 🔻+79,882 (+11.64%) 761,499 769,484 p=0.000 n=40
Types 939,797 1,053,894 (± 0.10%) 🔻+114,075 (+12.14%) 1,047,124 1,061,635 p=0.000 n=40
Memory Used 475,936k (± 0.01%) 567,119k (± 0.07%) 🔻+91,174k (+19.16%) 564,621k 570,745k p=0.000 n=40
Memory Allocs 12,052,250 (± 0.02%) 12,970,365 (± 0.11%) 🔻+918,658 (+ 7.62%) 12,857,522 13,064,479 p=0.000 n=40
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=40
Parse Time 0.040s (± 2.54%) 0.042s (± 6.75%) ~ 0.035s 0.095s p=0.737 n=40
Bind Time 0.012s (± 5.22%) 0.012s (± 5.97%) ~ 0.010s 0.018s p=0.344 n=40
Check Time 0.819s (± 0.33%) 0.631s (± 1.31%) 🟩-0.188s (-22.91%) 0.583s 0.713s p=0.000 n=40
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=40
Total Time 0.899s (± 0.30%) 0.712s (± 1.25%) 🟩-0.189s (-20.99%) 0.662s 0.846s p=0.000 n=40
class-transformer - native
Errors 0 0 ~ ~ ~ p=1.000 n=40
Symbols 45,376 45,312 (± 0.01%) -63 (- 0.14%) 45,262 45,319 p=0.000 n=40
Types 7,573 7,198 (± 0.10%) 🟩-375 (- 4.95%) 7,061 7,219 p=0.000 n=40
Memory Used 27,739k (± 0.02%) 28,105k (± 0.02%) +366k (+ 1.32%) 28,011k 28,131k p=0.000 n=40
Memory Allocs 247,737 (± 0.05%) 249,187 (± 0.04%) +1,445 (+ 0.58%) 248,174 250,013 p=0.000 n=40
Config Time 0.001s (± 8.95%) 0.001s (± 0.41%) ~ 0.001s 0.001s p=0.448 n=40
Parse Time 0.010s (± 2.86%) 0.010s (± 3.06%) ~ 0.008s 0.012s p=0.955 n=40
Bind Time 0.003s (± 8.00%) 0.003s (± 8.28%) ~ 0.002s 0.005s p=0.821 n=40
Check Time 0.008s (± 3.80%) 0.009s (± 3.33%) 🔻+0.001s (+13.39%) 0.007s 0.011s p=0.000 n=40
Emit Time 0.008s (± 4.32%) 0.008s (± 4.18%) ~ 0.006s 0.010s p=0.799 n=40
Total Time 0.029s (± 1.59%) 0.031s (± 1.59%) 🔻+0.001s (+ 4.99%) 0.028s 0.036s p=0.000 n=40
effect - native
Errors 12 20 🔻+8 (+66.67%) ~ ~ p=0.000 n=40
Symbols 1,235,134 1,235,298 (± 0.07%) ~ 1,226,199 1,239,493 p=0.114 n=40
Types 893,436 890,568 (± 0.08%) -2,699 (- 0.30%) 882,316 893,972 p=0.000 n=40
Memory Used 941,281k (± 0.02%) 967,360k (± 0.04%) +26,224k (+ 2.79%) 962,552k 969,108k p=0.000 n=40
Memory Allocs 12,590,341 (± 0.02%) 12,979,066 (± 0.06%) +388,946 (+ 3.09%) 12,905,155 13,043,587 p=0.000 n=40
Config Time 0.002s (± 0.19%) 0.002s (± 2.38%) ~ 0.002s 0.003s p=1.000 n=40
Parse Time 0.147s (± 3.25%) 0.144s (± 1.10%) ~ 0.135s 0.159s p=0.338 n=40
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=40
Check Time 0.876s (± 0.65%) 0.916s (± 0.88%) 🔻+0.039s (+ 4.46%) 0.875s 1.044s p=0.000 n=40
Emit Time 0.481s (± 1.13%) 0.483s (± 1.14%) ~ 0.442s 0.520s p=0.539 n=40
Total Time 1.598s (± 0.66%) 1.636s (± 0.54%) +0.036s (+ 2.27%) 1.582s 1.754s p=0.000 n=40
mui-docs - native
Errors 11,405 11,405 ~ ~ ~ p=1.000 n=40
Symbols 3,782,394 4,962,645 (± 0.28%) 🔻+1,180,187 (+31.20%) 4,884,728 5,028,843 p=0.000 n=40
Types 1,355,778 1,871,674 (± 0.39%) 🔻+515,054 (+37.99%) 1,829,245 1,907,998 p=0.000 n=40
Memory Used 1,678,579k (± 0.06%) 2,610,884k (± 0.40%) 🔻+920,904k (+54.86%) 2,572,517k 2,676,087k p=0.000 n=40
Memory Allocs 25,530,545 (± 0.04%) 35,228,676 (± 0.40%) 🔻+9,508,321 (+37.24%) 34,819,388 36,080,193 p=0.000 n=40
Config Time 0.007s (± 4.29%) 0.007s (± 1.36%) ~ 0.006s 0.007s p=0.658 n=40
Parse Time 0.282s (± 1.57%) 0.283s (± 1.42%) ~ 0.258s 0.311s p=0.921 n=40
Bind Time 0.001s (± 0.77%) 0.001s (± 9.03%) ~ 0.001s 0.003s p=1.000 n=40
Check Time 2.979s (± 1.11%) 3.537s (± 1.39%) 🔻+0.557s (+18.69%) 3.271s 3.873s p=0.000 n=40
Emit Time 0.262s (± 2.45%) 0.294s (± 5.60%) 🔻+0.021s (+ 8.12%) 0.241s 0.423s p=0.001 n=40
Total Time 4.029s (± 1.03%) 4.661s (± 1.05%) 🔻+0.629s (+15.60%) 4.341s 5.059s p=0.000 n=40
sentry - native
Errors 2 2 ~ ~ ~ p=1.000 n=40
Symbols 4,793,266 5,635,998 (± 0.10%) 🔻+843,844 (+17.60%) 5,604,127 5,667,513 p=0.000 n=40
Types 2,607,066 3,163,026 (± 0.04%) 🔻+556,245 (+21.34%) 3,151,476 3,168,495 p=0.000 n=40
Memory Used 2,797,962k (± 0.02%) 3,496,326k (± 0.04%) 🔻+698,436k (+24.96%) 3,487,621k 3,505,845k p=0.000 n=40
Memory Allocs 74,635,684 (± 0.09%) 115,891,705 (± 0.04%) 🔻+41,296,248 (+55.33%) 115,630,806 116,422,035 p=0.000 n=40
Config Time 0.018s (± 1.74%) 0.018s (± 2.97%) ~ 0.016s 0.023s p=0.740 n=40
Parse Time 0.467s (± 4.03%) 0.462s (± 2.24%) ~ 0.410s 0.602s p=0.146 n=40
Bind Time 0.149s (± 8.85%) 0.141s (± 6.13%) ~ 0.117s 0.228s p=0.460 n=40
Check Time 6.693s (± 0.56%) 5.208s (± 0.99%) 🟩-1.497s (-22.37%) 5.051s 5.671s p=0.000 n=40
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=40
Total Time 7.377s (± 0.49%) 5.881s (± 0.89%) 🟩-1.508s (-20.44%) 5.680s 6.325s p=0.000 n=40
social-app - native
Errors 0 0 ~ ~ ~ p=1.000 n=40
Symbols 1,883,060 2,487,556 (± 0.03%) 🔻+604,348 (+32.09%) 2,483,166 2,494,502 p=0.000 n=40
Types 1,158,093 1,816,618 (± 0.03%) 🔻+658,603 (+56.87%) 1,810,084 1,821,411 p=0.000 n=40
Memory Used 952,160k (± 0.01%) 1,367,122k (± 0.03%) 🔻+414,850k (+43.57%) 1,364,852k 1,370,546k p=0.000 n=40
Memory Allocs 13,417,718 (± 0.11%) 21,118,386 (± 0.06%) 🔻+7,708,561 (+57.45%) 21,015,248 21,198,435 p=0.000 n=40
Config Time 0.005s (± 3.46%) 0.005s (± 2.75%) ~ 0.005s 0.006s p=0.538 n=40
Parse Time 0.149s (± 1.65%) 0.151s (± 2.37%) ~ 0.135s 0.191s p=0.530 n=40
Bind Time 0.044s (± 7.66%) 0.043s (± 7.01%) ~ 0.035s 0.070s p=0.994 n=40
Check Time 1.372s (± 0.77%) 1.349s (± 1.16%) -0.024s (- 1.73%) 1.261s 1.434s p=0.013 n=40
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=40
Total Time 1.589s (± 0.66%) 1.569s (± 1.00%) -0.021s (- 1.31%) 1.484s 1.677s p=0.014 n=40
strada-build-src - native
Errors 0 0 ~ ~ ~ p=1.000 n=40
Symbols 1,184,972 1,186,747 (± 0.01%) +1,802 (+ 0.15%) 1,185,378 1,187,602 p=0.000 n=40
Types 438,823 436,450 (± 0.05%) -2,353 (- 0.54%) 434,740 437,582 p=0.000 n=40
Memory Used 1,155,272k (± 0.26%) 1,176,471k (± 0.24%) +21,910k (+ 1.90%) 1,162,006k 1,196,561k p=0.000 n=40
Memory Allocs 47,316,764 (± 0.07%) 49,006,194 (± 0.07%) +1,687,540 (+ 3.57%) 48,815,535 49,247,857 p=0.000 n=40
Config Time 0.002s (±11.39%) 0.002s (± 9.19%) 🔻+0.000s (+22.47%) 0.001s 0.003s p=0.010 n=40
Parse Time 0.134s (± 1.18%) 0.134s (± 1.05%) ~ 0.125s 0.146s p=0.895 n=40
Bind Time 0.000s (±196.00%) 0.000s ~ ~ ~ p=0.330 n=40
Check Time 0.783s (± 0.51%) 0.850s (± 0.50%) 🔻+0.066s (+ 8.45%) 0.819s 0.880s p=0.000 n=40
Emit Time 0.138s (± 1.40%) 0.138s (± 1.01%) ~ 0.130s 0.154s p=0.670 n=40
Total Time 9.152s (± 0.46%) 9.778s (± 0.45%) 🔻+0.608s (+ 6.64%) 9.447s 10.101s p=0.000 n=40
strada-compiler - native
Errors 0 0 ~ ~ ~ p=1.000 n=40
Symbols 263,481 263,756 (± 0.03%) +372 (+ 0.14%) 263,130 263,933 p=0.000 n=40
Types 196,103 195,433 (± 0.08%) -625 (- 0.32%) 194,295 195,858 p=0.000 n=40
Memory Used 221,520k (± 0.02%) 227,669k (± 0.04%) +6,165k (+ 2.78%) 227,058k 228,029k p=0.000 n=40
Memory Allocs 2,387,254 (± 0.01%) 2,475,573 (± 0.03%) +88,378 (+ 3.70%) 2,469,949 2,479,319 p=0.000 n=40
Config Time 0.000s (±153.76%) 0.000s (±83.04%) ~ 0.000s 0.001s p=0.243 n=40
Parse Time 0.050s (± 2.65%) 0.050s (± 2.46%) ~ 0.042s 0.057s p=0.889 n=40
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=40
Check Time 0.375s (± 0.78%) 0.423s (± 0.84%) 🔻+0.047s (+12.62%) 0.401s 0.460s p=0.000 n=40
Emit Time 0.050s (± 3.76%) 0.053s (± 4.02%) ~ 0.042s 0.064s p=0.050 n=40
Total Time 0.503s (± 0.79%) 0.554s (± 0.80%) 🔻+0.051s (+10.14%) 0.524s 0.594s p=0.000 n=40
t3code-server - native
Errors 0 0 ~ ~ ~ p=1.000 n=40
Symbols 4,349,937 6,174,805 (± 0.41%) 🔻+1,814,268 (+41.71%) 6,068,109 6,410,197 p=0.000 n=40
Types 3,042,465 4,875,318 (± 0.61%) 🔻+1,820,986 (+59.85%) 4,768,994 5,130,564 p=0.000 n=40
Memory Used 2,395,150k (± 0.02%) 3,621,504k (± 0.58%) 🔻+1,221,488k (+51.00%) 3,555,964k 3,799,411k p=0.000 n=40
Memory Allocs 37,011,606 (± 0.02%) 64,019,266 (± 1.20%) 🔻+27,130,746 (+73.30%) 62,072,380 70,510,454 p=0.000 n=40
Config Time 0.003s (± 4.27%) 0.003s (± 4.27%) ~ 0.002s 0.003s p=0.391 n=40
Parse Time 0.261s (± 1.73%) 0.264s (± 1.55%) ~ 0.241s 0.304s p=0.234 n=40
Bind Time 0.092s (± 6.80%) 0.088s (± 6.61%) ~ 0.073s 0.150s p=0.595 n=40
Check Time 6.036s (± 0.71%) 6.308s (± 1.17%) 🔻+0.256s (+ 4.24%) 5.923s 6.781s p=0.000 n=40
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=40
Total Time 6.404s (± 0.70%) 6.677s (± 1.15%) 🔻+0.261s (+ 4.08%) 6.286s 7.154s p=0.000 n=40
tanstack-router - native
Errors 1 1 ~ ~ ~ p=1.000 n=40
Symbols 570,149 620,244 (± 0.06%) 🔻+50,106 (+ 8.79%) 617,991 622,243 p=0.000 n=40
Types 396,551 471,543 (± 0.08%) 🔻+74,985 (+18.91%) 469,161 475,354 p=0.000 n=40
Memory Used 315,276k (± 0.01%) 378,708k (± 0.05%) 🔻+63,446k (+20.12%) 377,389k 380,088k p=0.000 n=40
Memory Allocs 4,327,410 (± 0.11%) 5,085,272 (± 0.08%) 🔻+759,860 (+17.56%) 5,061,617 5,117,295 p=0.000 n=40
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=40
Parse Time 0.039s (± 2.96%) 0.038s (± 2.39%) ~ 0.032s 0.045s p=0.452 n=40
Bind Time 0.013s (± 6.95%) 0.013s (± 6.64%) ~ 0.010s 0.020s p=0.863 n=40
Check Time 0.462s (± 1.23%) 0.424s (± 1.15%) 🟩-0.036s (- 7.88%) 0.394s 0.464s p=0.000 n=40
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=40
Total Time 0.531s (± 1.09%) 0.490s (± 0.87%) 🟩-0.039s (- 7.32%) 0.462s 0.528s p=0.000 n=40
ts-pre-modules - native
Errors 87 87 ~ ~ ~ p=1.000 n=40
Symbols 231,607 238,524 (± 0.56%) +7,522 (+ 3.25%) 231,732 245,250 p=0.000 n=40
Types 181,163 190,165 (± 1.14%) 🔻+10,296 (+ 5.68%) 180,234 200,469 p=0.000 n=40
Memory Used 190,880k (± 0.01%) 203,099k (± 0.96%) 🔻+13,622k (+ 7.14%) 194,960k 212,236k p=0.000 n=40
Memory Allocs 1,310,247 (± 0.01%) 1,466,412 (± 1.46%) 🔻+170,054 (+12.98%) 1,381,523 1,566,923 p=0.000 n=40
Config Time 0.000s 0.000s ~ ~ ~ p=1.000 n=40
Parse Time 0.043s (± 2.44%) 0.043s (± 1.97%) ~ 0.038s 0.048s p=0.617 n=40
Bind Time 0.020s (± 3.95%) 0.020s (± 3.60%) ~ 0.016s 0.026s p=0.124 n=40
Check Time 0.293s (± 1.25%) 0.331s (± 1.26%) 🔻+0.038s (+13.11%) 0.316s 0.377s p=0.000 n=40
Emit Time 0.000s 0.101s (±33.59%) 🔻NaNs (+ ∞%) 0.000s 0.304s p=0.000 n=40
Total Time 0.363s (± 1.20%) 0.501s (± 7.01%) 🔻+0.146s (+40.10%) 0.400s 0.765s p=0.000 n=40
vscode - native
Errors 18 18 ~ ~ ~ p=1.000 n=40
Symbols 7,958,235 8,136,215 (± 0.01%) +177,910 (+ 2.24%) 8,129,447 8,145,531 p=0.000 n=40
Types 4,639,987 4,957,792 (± 0.03%) 🔻+317,509 (+ 6.84%) 4,951,215 4,970,199 p=0.000 n=40
Memory Used 5,327,683k (± 0.01%) 5,830,513k (± 0.02%) 🔻+503,039k (+ 9.44%) 5,821,609k 5,844,968k p=0.000 n=40
Memory Allocs 58,694,048 (± 0.01%) 64,806,225 (± 0.03%) 🔻+6,101,426 (+10.40%) 64,739,729 65,055,733 p=0.000 n=40
Config Time 0.024s (± 1.42%) 0.024s (± 1.07%) ~ 0.022s 0.027s p=0.696 n=40
Parse Time 0.899s (± 1.51%) 0.905s (± 1.69%) ~ 0.790s 1.010s p=0.265 n=40
Bind Time 0.313s (± 4.09%) 0.329s (± 6.49%) ~ 0.267s 0.507s p=0.739 n=40
Check Time 7.319s (± 0.53%) 5.267s (± 1.38%) 🟩-2.062s (-28.18%) 4.819s 5.741s p=0.000 n=40
Emit Time 2.173s (± 4.47%) 2.438s (± 3.37%) 🔻+0.267s (+12.30%) 1.936s 2.838s p=0.000 n=40
Total Time 10.787s (± 0.82%) 9.026s (± 0.40%) 🟩-1.748s (-16.21%) 8.702s 9.206s p=0.000 n=40
webpack - native
Errors 618 622 +4 (+ 0.65%) ~ ~ p=0.000 n=40
Symbols 884,452 1,017,624 (± 0.43%) 🔻+131,892 (+14.91%) 1,000,527 1,032,105 p=0.000 n=40
Types 622,976 750,816 (± 0.37%) 🔻+127,512 (+20.47%) 737,177 763,601 p=0.000 n=40
Memory Used 651,174k (± 0.01%) 777,337k (± 0.20%) 🔻+126,010k (+19.35%) 769,277k 784,840k p=0.000 n=40
Memory Allocs 6,083,657 (± 0.07%) 7,798,561 (± 0.26%) 🔻+1,713,912 (+28.17%) 7,696,653 7,877,198 p=0.000 n=40
Config Time 0.003s (± 2.77%) 0.003s (± 8.75%) ~ 0.003s 0.009s p=0.784 n=40
Parse Time 0.124s (± 2.34%) 0.125s (± 2.06%) ~ 0.111s 0.156s p=0.258 n=40
Bind Time 0.039s (± 4.89%) 0.040s (± 5.69%) ~ 0.031s 0.059s p=0.674 n=40
Check Time 1.070s (± 0.53%) 0.783s (± 0.97%) 🟩-0.286s (-26.75%) 0.723s 0.819s p=0.000 n=40
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=40
Total Time 1.260s (± 0.46%) 0.976s (± 0.75%) 🟩-0.283s (-22.42%) 0.911s 1.045s p=0.000 n=40
xstate-main - native
Errors 0 0 ~ ~ ~ p=1.000 n=40
Symbols 3,802,945 3,870,324 (± 0.05%) +67,527 (+ 1.78%) 3,857,472 3,884,880 p=0.000 n=40
Types 3,817,170 3,653,368 (± 0.03%) 🟩-163,808 (- 4.29%) 3,645,759 3,660,985 p=0.000 n=40
Memory Used 2,066,092k (± 0.00%) 2,357,515k (± 0.04%) 🔻+291,407k (+14.10%) 2,350,713k 2,364,859k p=0.000 n=40
Memory Allocs 40,630,368 (± 0.01%) 48,564,385 (± 0.02%) 🔻+7,933,130 (+19.53%) 48,516,389 48,644,041 p=0.000 n=40
Config Time 0.002s (± 0.19%) 0.002s (± 2.38%) ~ 0.002s 0.003s p=1.000 n=40
Parse Time 0.105s (± 1.55%) 0.107s (± 3.08%) ~ 0.093s 0.161s p=0.517 n=40
Bind Time 0.038s (± 7.16%) 0.039s (± 7.45%) ~ 0.031s 0.061s p=0.832 n=40
Check Time 3.764s (± 0.49%) 3.186s (± 0.83%) 🟩-0.581s (-15.43%) 3.047s 3.345s p=0.000 n=40
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=40
Total Time 3.916s (± 0.45%) 3.341s (± 0.84%) 🟩-0.578s (-14.76%) 3.188s 3.519s p=0.000 n=40
System info unknown
Hosts
  • native
Scenarios
  • Compiler-Unions - native
  • angular-1 - native
  • arktype - native
  • class-transformer - native
  • effect - native
  • mui-docs - native
  • sentry - native
  • social-app - native
  • strada-build-src - native
  • strada-compiler - native
  • t3code-server - native
  • tanstack-router - native
  • ts-pre-modules - native
  • vscode - native
  • webpack - native
  • xstate-main - native
Benchmark Name Iterations
Current pr 20
Baseline baseline 20

Developer Information:

Download Benchmarks

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Author: Team Domain: Performance Performance related For Uncommitted Bug PR for untriaged, rejected, closed or missing bug

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant