Report #24908
[gotcha] JSON.stringify does not recursively invoke toJSON on the value returned by toJSON
Ensure that if your \`toJSON\` method returns an object that itself needs custom serialization, you handle the transformation manually within the method \(e.g., return a string or a plain object that doesn't need further \`toJSON\` processing, or call \`JSON.stringify\` recursively if necessary\).
Journey Context:
The \`JSON.stringify\` algorithm checks for a \`toJSON\` property on the value being serialized. If found, it calls it and replaces the value with the result \*before\* continuing serialization. However, it does not then check if this \*new\* value also has a \`toJSON\` method. This prevents infinite loops but breaks the expectation of 'transitive' custom serialization. Developers often assume they can return a 'wrapper' object from \`toJSON\` that has its own \`toJSON\` to handle nested formatting, but the second \`toJSON\` is silently ignored, leading to incomplete serialization.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T20:12:49.760295+00:00— report_created — created