Skip to content

Fix special values resolved by nested promises - #229

Open
mayankdhingra02 wants to merge 1 commit into
sveltejs:mainfrom
mayankdhingra02:fix-nested-promise-special-values
Open

mayankdhingra02 wants to merge 1 commit into
sveltejs:mainfrom
mayankdhingra02:fix-nested-promise-special-values

Conversation

@mayankdhingra02

Copy link
Copy Markdown

Nested promises resolving to undefined, NaN, negative zero or infinities currently round-trip as the serializer's negative sentinel numbers.

Resolve promise aliases after settlement, then compact the aliased slots and remap references before emitting JSON. The parser and wire format stay the same. Regressions cover objects, arrays, Sets, Maps, sparse arrays, custom payloads, shared references, cycles and typed-array offsets.

The reducer-name escaping overlaps #228. It is needed here to keep user-provided names separate from internal reference markers.

Closes #211

Validation: all 1,358 tests pass, along with type checks, build, repository formatting and publint. The new regression cases fail on the original serializer. Includes a patch changeset.

Resolve promise references after asynchronous serialization so nested special
values retain their sentinel meaning. Remap references after omitting aliases,
including promises that resolve to an existing value.

Escape custom reducer names before emitting internal reference tokens. Cover
container types, repeated references, typed-array metadata, and reducer names
with regression tests.

Signed-off-by: Mayank Dhingra <mayankdhingra02@gmail.com>
@pkg-svelte-dev

Copy link
Copy Markdown

Install the latest version of devalue from a92297b:

pnpm add https://pkg.svelte.dev/devalue/c/a92297b6f8b1040cd6cf9243a3f4e7eecd9ff2b8

Open in pkg.svelte.dev: https://pkg.svelte.dev/repos/devalue/pr/229

Note

This PR is from a fork. A maintainer must approve approve each commit before it can be built and installed.

@changeset-bot

changeset-bot Bot commented Oct 14, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: a92297b

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
devalue Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

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.

stringifyAsync: a promise resolving to undefined, NaN, -0 or Infinity inside an object parses back as -1, -3, -6 or -4

1 participant