Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
rangeRefinedBy(temporal) {
if (this._rangeUnit === ChronoUnit.WEEKS) {
return this._range;
}
let field = null;
if (this._rangeUnit === ChronoUnit.MONTHS) {
field = ChronoField.DAY_OF_MONTH;
} else if (this._rangeUnit === ChronoUnit.YEARS) {
field = ChronoField.DAY_OF_YEAR;
} else if (this._rangeUnit === IsoFields.WEEK_BASED_YEARS) {
return this._rangeWOWBY(temporal);
} else if (this._rangeUnit === ChronoUnit.FOREVER) {
return temporal.range(ChronoField.YEAR);
} else {
throw new IllegalStateException('unreachable');
}
// Offset the ISO DOW by the start of this week
const sow = this._weekDef.firstDayOfWeek().value();
const isoDow = temporal.get(ChronoField.DAY_OF_WEEK);
const dow = MathUtil.floorMod(isoDow - sow, 7) + 1;
const offset = this._startOfWeekOffset(temporal.get(field), dow);
const fieldRange = temporal.range(field);
return ValueRange.of(ComputedDayOfField._computeWeek(offset, fieldRange.minimum()),
_rangeWOWBY(temporal) {
const sow = this._weekDef.firstDayOfWeek().value();
const isoDow = temporal.get(ChronoField.DAY_OF_WEEK);
const dow = MathUtil.floorMod(isoDow - sow, 7) + 1;
const woy = this._localizedWeekOfYear(temporal, dow);
if (woy === 0) {
// TODO: we use IsoChronology for now
return this._rangeWOWBY(IsoChronology.INSTANCE.date(temporal).minus(2, ChronoUnit.WEEKS));
// return this._rangeWOWBY(Chronology.from(temporal).date(temporal).minus(2, ChronoUnit.WEEKS));
}
const offset = this._startOfWeekOffset(temporal.get(ChronoField.DAY_OF_YEAR), dow);
const year = temporal.get(ChronoField.YEAR);
const yearLen = Year.isLeap(year) ? 366 : 365;
const weekIndexOfFirstWeekNextYear = ComputedDayOfField._computeWeek(offset, yearLen + this._weekDef.minimalDaysInFirstWeek());
if (woy >= weekIndexOfFirstWeekNextYear) {
// TODO: we use IsoChronology for now
return this._rangeWOWBY(IsoChronology.INSTANCE.date(temporal).plus(2, ChronoUnit.WEEKS));
// return this._rangeWOWBY(Chronology.from(temporal).date(temporal).plus(2, ChronoUnit.WEEKS));
}
return ValueRange.of(1, weekIndexOfFirstWeekNextYear - 1);
}
isSupportedBy(temporal) {
if (temporal.isSupported(ChronoField.DAY_OF_WEEK)) {
if (this._rangeUnit === ChronoUnit.WEEKS) {
return true;
} else if (this._rangeUnit === ChronoUnit.MONTHS) {
return temporal.isSupported(ChronoField.DAY_OF_MONTH);
} else if (this._rangeUnit === ChronoUnit.YEARS) {
return temporal.isSupported(ChronoField.DAY_OF_YEAR);
} else if (this._rangeUnit === IsoFields.WEEK_BASED_YEARS) {
return temporal.isSupported(ChronoField.EPOCH_DAY);
} else if (this._rangeUnit === ChronoUnit.FOREVER) {
return temporal.isSupported(ChronoField.EPOCH_DAY);
}
}
return false;
}