mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-11-01 07:33:12 +08:00
refuseX509DynValues walks a converted value's type looking for an X509Certificate record, and it memoized only records (by shape id) and unions (by union id). A type that reaches itself through an array, set, map or promise has no id to memoize by, so `type Rec = string | Rec[]` in a program that also holds a certificate recursed until the compiler ran out of stack — a crash, not a diagnostic. The walk now keeps an identity-based visited set over those kinds: a type met again while it is still being visited answers false, the least fixed point of reachability, since nothing outside the cycle makes a certificate reachable. Unions keep their memo, which now also covers a union cycle that names one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>