Large integer strings can exceed the range where an ECMAScript Number distinguishes adjacent integers. Converting such a string through Number can silently change the value before another base is rendered. NumberBase keeps the parse, sign, arithmetic, and output in the integer domain.
Validation finishes before arithmetic
The parser checks the optional sign, non-empty digits, length limit, character-to-digit mapping, and digit < source base for the entire input. A suffix such as z in decimal makes the whole input invalid. There is no parseInt-style partial result from a valid prefix.
Every multiply and add stays exact
Source base and digit values are converted to BigInt before value = value × base + digit. The sign is applied once after the magnitude is complete. Rendering uses the exact integer with a radix from 2 through 36, producing uppercase alphabetic digits and no exponent notation.
Arbitrary precision still needs a work limit
BigInt removes fixed-width overflow; it does not make unbounded input free. NumberBase caps the digit string at 4096 characters, validates before allocating output, and performs one linear accumulation. The limit is a resource boundary, not a numeric rounding boundary: accepted inputs remain exact.