@@ -3688,114 +3688,76 @@ export function BalanceDurationRelative(
3688
3688
3689
3689
switch ( largestUnit ) {
3690
3690
case 'year' : {
3691
- if ( ! calendar ) throw new RangeError ( 'a starting point is required for years balancing' ) ;
3691
+ // These conditions are effectively identical (as relativeTo being defined forces calendar to be defined)
3692
+ // but checking for their truthiness here helps TypeScript and avoids the need for casts below.
3693
+ if ( ! relativeTo || ! calendar ) throw new RangeError ( 'a starting point is required for years balancing' ) ;
3692
3694
// balance days up to years
3693
3695
let newRelativeTo , oneYearDays ;
3694
- ( { relativeTo : newRelativeTo , days : oneYearDays } = MoveRelativeDate (
3695
- calendar ,
3696
- relativeTo as Temporal . PlainDate ,
3697
- oneYear
3698
- ) ) ;
3696
+ ( { relativeTo : newRelativeTo , days : oneYearDays } = MoveRelativeDate ( calendar , relativeTo , oneYear ) ) ;
3699
3697
while ( MathAbs ( days ) >= MathAbs ( oneYearDays ) ) {
3700
3698
days -= oneYearDays ;
3701
3699
years += sign ;
3702
3700
relativeTo = newRelativeTo ;
3703
- ( { relativeTo : newRelativeTo , days : oneYearDays } = MoveRelativeDate (
3704
- calendar ,
3705
- relativeTo as Temporal . PlainDate ,
3706
- oneYear
3707
- ) ) ;
3701
+ ( { relativeTo : newRelativeTo , days : oneYearDays } = MoveRelativeDate ( calendar , relativeTo , oneYear ) ) ;
3708
3702
}
3709
3703
3710
3704
// balance days up to months
3711
3705
let oneMonthDays ;
3712
- ( { relativeTo : newRelativeTo , days : oneMonthDays } = MoveRelativeDate (
3713
- calendar ,
3714
- relativeTo as Temporal . PlainDate ,
3715
- oneMonth
3716
- ) ) ;
3706
+ ( { relativeTo : newRelativeTo , days : oneMonthDays } = MoveRelativeDate ( calendar , relativeTo , oneMonth ) ) ;
3717
3707
while ( MathAbs ( days ) >= MathAbs ( oneMonthDays ) ) {
3718
3708
days -= oneMonthDays ;
3719
3709
months += sign ;
3720
3710
relativeTo = newRelativeTo ;
3721
- ( { relativeTo : newRelativeTo , days : oneMonthDays } = MoveRelativeDate (
3722
- calendar ,
3723
- relativeTo as Temporal . PlainDate ,
3724
- oneMonth
3725
- ) ) ;
3711
+ ( { relativeTo : newRelativeTo , days : oneMonthDays } = MoveRelativeDate ( calendar , relativeTo , oneMonth ) ) ;
3726
3712
}
3727
3713
3728
3714
// balance months up to years
3729
3715
const dateAdd = calendar . dateAdd ;
3730
- newRelativeTo = CalendarDateAdd ( calendar , relativeTo as Temporal . PlainDate , oneYear , undefined , dateAdd ) ;
3716
+ newRelativeTo = CalendarDateAdd ( calendar , relativeTo , oneYear , undefined , dateAdd ) ;
3731
3717
const dateUntil = calendar . dateUntil ;
3732
3718
const untilOptions = ObjectCreate ( null ) ;
3733
3719
untilOptions . largestUnit = 'month' ;
3734
- let untilResult = CalendarDateUntil (
3735
- calendar ,
3736
- relativeTo as Temporal . PlainDate ,
3737
- newRelativeTo ,
3738
- untilOptions ,
3739
- dateUntil
3740
- ) ;
3720
+ let untilResult = CalendarDateUntil ( calendar , relativeTo , newRelativeTo , untilOptions , dateUntil ) ;
3741
3721
let oneYearMonths = GetSlot ( untilResult , MONTHS ) ;
3742
3722
while ( MathAbs ( months ) >= MathAbs ( oneYearMonths ) ) {
3743
3723
months -= oneYearMonths ;
3744
3724
years += sign ;
3745
3725
relativeTo = newRelativeTo ;
3746
- newRelativeTo = CalendarDateAdd ( calendar , relativeTo as Temporal . PlainDate , oneYear , undefined , dateAdd ) ;
3726
+ newRelativeTo = CalendarDateAdd ( calendar , relativeTo , oneYear , undefined , dateAdd ) ;
3747
3727
const untilOptions = ObjectCreate ( null ) ;
3748
3728
untilOptions . largestUnit = 'month' ;
3749
- untilResult = CalendarDateUntil (
3750
- calendar ,
3751
- relativeTo as Temporal . PlainDate ,
3752
- newRelativeTo ,
3753
- untilOptions ,
3754
- dateUntil
3755
- ) ;
3729
+ untilResult = CalendarDateUntil ( calendar , relativeTo , newRelativeTo , untilOptions , dateUntil ) ;
3756
3730
oneYearMonths = GetSlot ( untilResult , MONTHS ) ;
3757
3731
}
3758
3732
break ;
3759
3733
}
3760
3734
case 'month' : {
3761
- if ( ! calendar ) throw new RangeError ( 'a starting point is required for months balancing' ) ;
3735
+ // These conditions are effectively identical (as relativeTo being defined forces calendar to be defined)
3736
+ // but checking for their truthiness here helps TypeScript and avoids the need for casts below.
3737
+ if ( ! relativeTo || ! calendar ) throw new RangeError ( 'a starting point is required for months balancing' ) ;
3762
3738
// balance days up to months
3763
3739
let newRelativeTo , oneMonthDays ;
3764
- ( { relativeTo : newRelativeTo , days : oneMonthDays } = MoveRelativeDate (
3765
- calendar ,
3766
- relativeTo as Temporal . PlainDate ,
3767
- oneMonth
3768
- ) ) ;
3740
+ ( { relativeTo : newRelativeTo , days : oneMonthDays } = MoveRelativeDate ( calendar , relativeTo , oneMonth ) ) ;
3769
3741
while ( MathAbs ( days ) >= MathAbs ( oneMonthDays ) ) {
3770
3742
days -= oneMonthDays ;
3771
3743
months += sign ;
3772
3744
relativeTo = newRelativeTo ;
3773
- ( { relativeTo : newRelativeTo , days : oneMonthDays } = MoveRelativeDate (
3774
- calendar ,
3775
- relativeTo as Temporal . PlainDate ,
3776
- oneMonth
3777
- ) ) ;
3745
+ ( { relativeTo : newRelativeTo , days : oneMonthDays } = MoveRelativeDate ( calendar , relativeTo , oneMonth ) ) ;
3778
3746
}
3779
3747
break ;
3780
3748
}
3781
3749
case 'week' : {
3782
- if ( ! calendar ) throw new RangeError ( 'a starting point is required for weeks balancing' ) ;
3750
+ // These conditions are effectively identical (as relativeTo being defined forces calendar to be defined)
3751
+ // but checking for their truthiness here helps TypeScript and avoids the need for casts below.
3752
+ if ( ! relativeTo || ! calendar ) throw new RangeError ( 'a starting point is required for weeks balancing' ) ;
3783
3753
// balance days up to weeks
3784
3754
let newRelativeTo , oneWeekDays ;
3785
- ( { relativeTo : newRelativeTo , days : oneWeekDays } = MoveRelativeDate (
3786
- calendar ,
3787
- relativeTo as Temporal . PlainDate ,
3788
- oneWeek
3789
- ) ) ;
3755
+ ( { relativeTo : newRelativeTo , days : oneWeekDays } = MoveRelativeDate ( calendar , relativeTo , oneWeek ) ) ;
3790
3756
while ( MathAbs ( days ) >= MathAbs ( oneWeekDays ) ) {
3791
3757
days -= oneWeekDays ;
3792
3758
weeks += sign ;
3793
3759
relativeTo = newRelativeTo ;
3794
- ( { relativeTo : newRelativeTo , days : oneWeekDays } = MoveRelativeDate (
3795
- calendar ,
3796
- relativeTo as Temporal . PlainDate ,
3797
- oneWeek
3798
- ) ) ;
3760
+ ( { relativeTo : newRelativeTo , days : oneWeekDays } = MoveRelativeDate ( calendar , relativeTo , oneWeek ) ) ;
3799
3761
}
3800
3762
break ;
3801
3763
}
@@ -5724,21 +5686,17 @@ export function RoundDuration(
5724
5686
let total : number ;
5725
5687
switch ( unit ) {
5726
5688
case 'year' : {
5727
- if ( ! calendar ) throw new RangeError ( 'A starting point is required for years rounding' ) ;
5689
+ // These conditions are effectively identical (as relativeTo being defined forces calendar to be defined)
5690
+ // but checking for their truthiness here helps TypeScript and avoids the need for casts below.
5691
+ if ( ! relativeTo || ! calendar ) throw new RangeError ( 'A starting point is required for years rounding' ) ;
5728
5692
5729
5693
// convert months and weeks to days by calculating difference(
5730
5694
// relativeTo + years, relativeTo + { years, months, weeks })
5731
5695
const yearsDuration = new TemporalDuration ( years ) ;
5732
5696
const dateAdd = calendar . dateAdd ;
5733
- const yearsLater = CalendarDateAdd ( calendar , relativeTo as Temporal . PlainDate , yearsDuration , undefined , dateAdd ) ;
5697
+ const yearsLater = CalendarDateAdd ( calendar , relativeTo , yearsDuration , undefined , dateAdd ) ;
5734
5698
const yearsMonthsWeeks = new TemporalDuration ( years , months , weeks ) ;
5735
- const yearsMonthsWeeksLater = CalendarDateAdd (
5736
- calendar ,
5737
- relativeTo as Temporal . PlainDate ,
5738
- yearsMonthsWeeks ,
5739
- undefined ,
5740
- dateAdd
5741
- ) ;
5699
+ const yearsMonthsWeeksLater = CalendarDateAdd ( calendar , relativeTo , yearsMonthsWeeks , undefined , dateAdd ) ;
5742
5700
const monthsWeeksInDays = DaysUntil ( yearsLater , yearsMonthsWeeksLater ) ;
5743
5701
relativeTo = yearsLater ;
5744
5702
days += monthsWeeksInDays ;
@@ -5782,27 +5740,17 @@ export function RoundDuration(
5782
5740
break ;
5783
5741
}
5784
5742
case 'month' : {
5785
- if ( ! calendar ) throw new RangeError ( 'A starting point is required for months rounding' ) ;
5743
+ // These conditions are effectively identical (as relativeTo being defined forces calendar to be defined)
5744
+ // but checking for their truthiness here helps TypeScript and avoids the need for casts below.
5745
+ if ( ! relativeTo || ! calendar ) throw new RangeError ( 'A starting point is required for months rounding' ) ;
5786
5746
5787
5747
// convert weeks to days by calculating difference(relativeTo +
5788
5748
// { years, months }, relativeTo + { years, months, weeks })
5789
5749
const yearsMonths = new TemporalDuration ( years , months ) ;
5790
5750
const dateAdd = calendar . dateAdd ;
5791
- const yearsMonthsLater = CalendarDateAdd (
5792
- calendar ,
5793
- relativeTo as Temporal . PlainDate ,
5794
- yearsMonths ,
5795
- undefined ,
5796
- dateAdd
5797
- ) ;
5751
+ const yearsMonthsLater = CalendarDateAdd ( calendar , relativeTo , yearsMonths , undefined , dateAdd ) ;
5798
5752
const yearsMonthsWeeks = new TemporalDuration ( years , months , weeks ) ;
5799
- const yearsMonthsWeeksLater = CalendarDateAdd (
5800
- calendar ,
5801
- relativeTo as Temporal . PlainDate ,
5802
- yearsMonthsWeeks ,
5803
- undefined ,
5804
- dateAdd
5805
- ) ;
5753
+ const yearsMonthsWeeksLater = CalendarDateAdd ( calendar , relativeTo , yearsMonthsWeeks , undefined , dateAdd ) ;
5806
5754
const weeksInDays = DaysUntil ( yearsMonthsLater , yearsMonthsWeeksLater ) ;
5807
5755
relativeTo = yearsMonthsLater ;
5808
5756
days += weeksInDays ;
@@ -5839,13 +5787,15 @@ export function RoundDuration(
5839
5787
break ;
5840
5788
}
5841
5789
case 'week' : {
5842
- if ( ! calendar ) throw new RangeError ( 'A starting point is required for weeks rounding' ) ;
5790
+ // These conditions are effectively identical (as relativeTo being defined forces calendar to be defined)
5791
+ // but checking for their truthiness here helps TypeScript and avoids the need for casts below.
5792
+ if ( ! relativeTo || ! calendar ) throw new RangeError ( 'A starting point is required for weeks rounding' ) ;
5843
5793
// Weeks may be different lengths of days depending on the calendar,
5844
5794
// convert days to weeks in a loop as described above under 'years'.
5845
5795
const sign = MathSign ( days ) ;
5846
5796
const oneWeek = new TemporalDuration ( 0 , 0 , days < 0 ? - 1 : 1 ) ;
5847
5797
let oneWeekDays ;
5848
- ( { relativeTo, days : oneWeekDays } = MoveRelativeDate ( calendar , relativeTo as Temporal . PlainDate , oneWeek ) ) ;
5798
+ ( { relativeTo, days : oneWeekDays } = MoveRelativeDate ( calendar , relativeTo , oneWeek ) ) ;
5849
5799
while ( MathAbs ( days ) >= MathAbs ( oneWeekDays ) ) {
5850
5800
weeks += sign ;
5851
5801
days -= oneWeekDays ;
0 commit comments