gcanti / io-ts

Runtime type system for IO decoding/encoding
https://gcanti.github.io/io-ts/
MIT License
6.68k stars 331 forks source link

t.Int: use Number.isSafeInteger instead of Number.isInteger #702

Open lukasz-jagielski-bolt opened 11 months ago

lukasz-jagielski-bolt commented 11 months ago

🚀 Feature request

Current Behavior

t.Int uses Number.isInteger which is unsafe to use outside of range <Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER> (non-integer inputs will return false positive). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger

Desired Behavior

To be safe t.Int could fail validation of Numbers outside of range <Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER>

Suggested Solution

Use Number.isSafeInteger instead of Number.isInteger

Who does this impact? Who is this for?

Everyone using t.Int

Describe alternatives you've considered

Provide a secondary type t.SafeInt?

Additional context

Thanks for a great library, this is something that perhaps could make using it safer :)

Your environment

Software Version(s)
io-ts 2.2.16
fp-ts 2.10.5
TypeScript 4.7.4