fix: normalize Temporal objects to prevent native/polyfill mixing#99
Merged
ggaabe merged 1 commit intoggaabe:mainfrom Jan 23, 2026
Merged
Conversation
Mixing native Temporal API objects (V8 14.4+, Node 24+, Electron 40+) with polyfill objects causes errors in until() and compare() operations. Normalize all Temporal objects via toString()/from() before these calls to ensure consistent implementation. Added 7 regression tests (cannot reproduce mixing in test environment, validated with Electron 40). All 890 tests pass.
Owner
|
@KristjanESPERANTO rrule-temporal 2.0 will likely be a modified Bring-Your-Own-Temporal version where it doesn't include Temporal, and it accepts a Temporal interface where the developer passes in whichever Temporal they're using |
Contributor
Author
|
Sounds good! And thanks for the merge 🙂 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The Problem
Starting with V8 14.4 (Electron 40, Chrome 134), JavaScript environments include native Temporal API support. Prior versions like V8 14.2 (Electron 39) do not have native Temporal.
When external libraries pass native Temporal objects to
rrule-temporal, which internally uses the polyfill, operations likeuntil()andcompare()fail with errors:This happens because the two Temporal implementations have different constructors, and methods like
ZonedDateTime.until()reject objects from a different implementation.In practice, this breaks applications using libraries like
node-icalin Electron 40, where recurring calendar events fail to expand.The Solution
Before calling
until()orcompare(), we now normalize all Temporal objects to the polyfill implementation by converting them through ISO strings:This ensures both operands use the same Temporal implementation, avoiding the type mismatch.
Testing
Added 7 regression tests covering the affected code paths in
between().Note: The tests use only polyfill objects and cannot reproduce the actual native/polyfill mixing scenario. The fix was validated in production environments with native Temporal API.