Skip to content

Commit a097292

Browse files
committed
Add narrowing checks for relativeTo to help typescript.
1 parent 118305f commit a097292

File tree

1 file changed

+35
-85
lines changed

1 file changed

+35
-85
lines changed

lib/ecmascript.ts

Lines changed: 35 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -3688,114 +3688,76 @@ export function BalanceDurationRelative(
36883688

36893689
switch (largestUnit) {
36903690
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');
36923694
// balance days up to years
36933695
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));
36993697
while (MathAbs(days) >= MathAbs(oneYearDays)) {
37003698
days -= oneYearDays;
37013699
years += sign;
37023700
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));
37083702
}
37093703

37103704
// balance days up to months
37113705
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));
37173707
while (MathAbs(days) >= MathAbs(oneMonthDays)) {
37183708
days -= oneMonthDays;
37193709
months += sign;
37203710
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));
37263712
}
37273713

37283714
// balance months up to years
37293715
const dateAdd = calendar.dateAdd;
3730-
newRelativeTo = CalendarDateAdd(calendar, relativeTo as Temporal.PlainDate, oneYear, undefined, dateAdd);
3716+
newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd);
37313717
const dateUntil = calendar.dateUntil;
37323718
const untilOptions = ObjectCreate(null);
37333719
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);
37413721
let oneYearMonths = GetSlot(untilResult, MONTHS);
37423722
while (MathAbs(months) >= MathAbs(oneYearMonths)) {
37433723
months -= oneYearMonths;
37443724
years += sign;
37453725
relativeTo = newRelativeTo;
3746-
newRelativeTo = CalendarDateAdd(calendar, relativeTo as Temporal.PlainDate, oneYear, undefined, dateAdd);
3726+
newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd);
37473727
const untilOptions = ObjectCreate(null);
37483728
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);
37563730
oneYearMonths = GetSlot(untilResult, MONTHS);
37573731
}
37583732
break;
37593733
}
37603734
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');
37623738
// balance days up to months
37633739
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));
37693741
while (MathAbs(days) >= MathAbs(oneMonthDays)) {
37703742
days -= oneMonthDays;
37713743
months += sign;
37723744
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));
37783746
}
37793747
break;
37803748
}
37813749
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');
37833753
// balance days up to weeks
37843754
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));
37903756
while (MathAbs(days) >= MathAbs(oneWeekDays)) {
37913757
days -= oneWeekDays;
37923758
weeks += sign;
37933759
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));
37993761
}
38003762
break;
38013763
}
@@ -5724,21 +5686,17 @@ export function RoundDuration(
57245686
let total: number;
57255687
switch (unit) {
57265688
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');
57285692

57295693
// convert months and weeks to days by calculating difference(
57305694
// relativeTo + years, relativeTo + { years, months, weeks })
57315695
const yearsDuration = new TemporalDuration(years);
57325696
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);
57345698
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);
57425700
const monthsWeeksInDays = DaysUntil(yearsLater, yearsMonthsWeeksLater);
57435701
relativeTo = yearsLater;
57445702
days += monthsWeeksInDays;
@@ -5782,27 +5740,17 @@ export function RoundDuration(
57825740
break;
57835741
}
57845742
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');
57865746

57875747
// convert weeks to days by calculating difference(relativeTo +
57885748
// { years, months }, relativeTo + { years, months, weeks })
57895749
const yearsMonths = new TemporalDuration(years, months);
57905750
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);
57985752
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);
58065754
const weeksInDays = DaysUntil(yearsMonthsLater, yearsMonthsWeeksLater);
58075755
relativeTo = yearsMonthsLater;
58085756
days += weeksInDays;
@@ -5839,13 +5787,15 @@ export function RoundDuration(
58395787
break;
58405788
}
58415789
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');
58435793
// Weeks may be different lengths of days depending on the calendar,
58445794
// convert days to weeks in a loop as described above under 'years'.
58455795
const sign = MathSign(days);
58465796
const oneWeek = new TemporalDuration(0, 0, days < 0 ? -1 : 1);
58475797
let oneWeekDays;
5848-
({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo as Temporal.PlainDate, oneWeek));
5798+
({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));
58495799
while (MathAbs(days) >= MathAbs(oneWeekDays)) {
58505800
weeks += sign;
58515801
days -= oneWeekDays;

0 commit comments

Comments
 (0)