Skip to content

fix: preserve NaN and Infinity values in typed arrays#349

Open
kaigritun wants to merge 1 commit intoflightcontrolhq:mainfrom
kaigritun:fix/typed-array-nan-infinity
Open

fix: preserve NaN and Infinity values in typed arrays#349
kaigritun wants to merge 1 commit intoflightcontrolhq:mainfrom
kaigritun:fix/typed-array-nan-infinity

Conversation

@kaigritun
Copy link

Summary

Fixes #292

Float64Array and other typed arrays that contain NaN or Infinity values were being corrupted during serialization because JSON.stringify converts these values to null.

Before

const a0 = new Float64Array([NaN, 0, NaN, 1]);
const a1 = stringify(a0);
// {"json":[null,0,null,1],"meta":{"values":[["typed-array","Float64Array"]],"v":1}}
const a2 = parse<Float64Array>(a1);
// Float64Array(4) [0, 0, 0, 1] ❌ NaN values lost

After

const a0 = new Float64Array([NaN, 0, NaN, 1]);
const a1 = stringify(a0);
// {"json":["NaN",0,"NaN",1],"meta":{"values":[["typed-array","Float64Array"]],"v":1}}
const a2 = parse<Float64Array>(a1);
// Float64Array(4) [NaN, 0, NaN, 1] ✅ NaN values preserved

Changes

  • Modified typedArrayRule in transformer.ts to encode NaN, Infinity, and -Infinity as strings during serialization
  • Added corresponding decoding during deserialization
  • Added test case covering Float64Array and Float32Array with special float values

Testing

All existing tests pass. Added a new test case specifically for this fix.

Fixes flightcontrolhq#292

Previously, NaN and Infinity values in typed arrays like Float64Array
were incorrectly serialized as null by JSON.stringify, causing data
loss during deserialization (NaN -> null -> 0).

This change encodes special float values (NaN, Infinity, -Infinity)
as strings within typed arrays during serialization and converts them
back during deserialization, consistent with how these values are
handled elsewhere in superjson.

Added test case covering Float64Array and Float32Array with NaN and
Infinity values.
@kaigritun kaigritun requested a review from Skn0tt as a code owner February 7, 2026 03:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

NaN values in Float64Array are incorrectly serialised as null

1 participant