{"version":3,"file":"swim-time.mjs","sources":["../main/TimeZone.ts","../main/DateTime.ts","../main/DateTimeLocale.ts","../main/DateTimeSpecifiers.ts","../main/DateTimeFormat.ts","../main/TimeInterval.ts","../main/TimeDomain.ts","../main/TimeRange.ts","../main/TimeScale.ts"],"sourcesContent":["// Copyright 2015-2024 Nstream, inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport type {Uninitable} from \"@swim/util\";\nimport {Murmur3} from \"@swim/util\";\nimport type {HashCode} from \"@swim/util\";\nimport {Lazy} from \"@swim/util\";\nimport {Numbers} from \"@swim/util\";\nimport {Constructors} from \"@swim/util\";\nimport type {Output} from \"@swim/codec\";\nimport type {Debug} from \"@swim/codec\";\nimport {Format} from \"@swim/codec\";\nimport type {Item} from \"@swim/structure\";\nimport type {Value} from \"@swim/structure\";\nimport {Text} from \"@swim/structure\";\nimport {Num} from \"@swim/structure\";\nimport {Form} from \"@swim/structure\";\n\n/** @public */\nexport type TimeZoneLike = TimeZone | string | number;\n\n/** @public */\nexport const TimeZoneLike = {\n  [Symbol.hasInstance](instance: unknown): instance is TimeZoneLike {\n    return instance instanceof TimeZone\n        || typeof instance === \"string\"\n        || typeof instance === \"number\";\n  },\n};\n\n/** @public */\nexport class TimeZone implements HashCode, Debug {\n  /** @internal */\n  private constructor(name: string | undefined, offset: number) {\n    this.name = name;\n    this.offset = offset;\n  }\n\n  likeType?(like: string | number): void;\n\n  readonly name: string | undefined;\n\n  readonly offset: number;\n\n  isUTC(): boolean {\n    return this.offset === 0;\n  }\n\n  isLocal(): boolean {\n    return this.offset === -new Date().getTimezoneOffset();\n  }\n\n  /** @override */\n  equals(that: unknown): boolean {\n    if (this === that) {\n      return true;\n    } else if (that instanceof TimeZone) {\n      return this.offset === that.offset;\n    }\n    return false;\n  }\n\n  /** @override */\n  hashCode(): number {\n    return Murmur3.mash(Murmur3.mix(Constructors.hash(TimeZone), Numbers.hash(this.offset)));\n  }\n\n  /** @override */\n  debug<T>(output: Output<T>): Output<T> {\n    output = output.write(\"TimeZone\").write(46/*'.'*/);\n    if (this.name === \"UTC\" && this.offset === 0) {\n      output = output.write(\"utc\").write(40/*'('*/);\n    } else if (this.name === void 0) {\n      output = output.write(\"forOffset\").write(40/*'('*/).debug(this.offset);\n    } else {\n      output = output.write(\"create\").write(40/*'('*/)\n                     .debug(this.name).write(\", \").debug(this.offset);\n    }\n    output = output.write(41/*')'*/);\n    return output;\n  }\n\n  /** @override */\n  toString(): string {\n    return Format.debug(this);\n  }\n\n  @Lazy\n  static utc(): TimeZone {\n    return new TimeZone(\"UTC\", 0);\n  }\n\n  @Lazy\n  static local(): TimeZone {\n    return this.forOffset(-new Date().getTimezoneOffset());\n  }\n\n  static create(name: string | undefined, offset: number): TimeZone {\n    if (name === \"UTC\" && offset === 0) {\n      return TimeZone.utc();\n    }\n    return new TimeZone(name, offset);\n  }\n\n  static forName(name: string): TimeZone | null {\n    switch (name) {\n      case \"UTC\": return TimeZone.utc();\n      default: return null;\n    }\n  }\n\n  static forOffset(offset: number): TimeZone {\n    switch (offset) {\n      case 0: return TimeZone.utc();\n      default: return new TimeZone(void 0, offset);\n    }\n  }\n\n  static fromLike<T extends TimeZoneLike | null | undefined>(value: T): TimeZone | Uninitable<T> {\n    if (value === void 0 || value === null || value instanceof TimeZone) {\n      return value as TimeZone | Uninitable<T>;\n    } else if (typeof value === \"string\") {\n      const zone = TimeZone.forName(value);\n      if (zone !== null) {\n        return zone;\n      }\n    } else if (typeof value === \"number\") {\n      return TimeZone.forOffset(value);\n    }\n    throw new TypeError(\"\" + value);\n  }\n\n  static fromValue(value: Value): TimeZone | null {\n    const name = value.stringValue(void 0);\n    if (name !== void 0) {\n      return TimeZone.forName(name);\n    }\n    const offset = value.numberValue(void 0);\n    if (offset !== void 0) {\n      return TimeZone.forOffset(offset);\n    }\n    return null;\n  }\n\n  @Lazy\n  static form(): Form<TimeZone, TimeZoneLike> {\n    return new TimeZoneForm(TimeZone.utc());\n  }\n}\n\n/** @internal */\nexport class TimeZoneForm extends Form<TimeZone, TimeZoneLike> {\n  constructor(unit: TimeZone | undefined) {\n    super();\n    Object.defineProperty(this, \"unit\", {\n      value: unit,\n      enumerable: true,\n      configurable: true,\n    });\n  }\n\n  override readonly unit: TimeZone | undefined;\n\n  override withUnit(unit: TimeZone | undefined): Form<TimeZone, TimeZoneLike> {\n    if (unit === this.unit) {\n      return this;\n    }\n    return new TimeZoneForm(unit);\n  }\n\n  override mold(zone: TimeZoneLike): Item {\n    zone = TimeZone.fromLike(zone);\n    const name = zone.name;\n    if (name !== void 0) {\n      return Text.from(name);\n    } else {\n      return Num.from(zone.offset);\n    }\n  }\n\n  override cast(item: Item): TimeZone | undefined {\n    const value = item.toValue();\n    const zone = TimeZone.fromValue(value);\n    return zone !== null ? zone : void 0;\n  }\n}\n","// Copyright 2015-2024 Nstream, inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport type {Uninitable} from \"@swim/util\";\nimport type {Mutable} from \"@swim/util\";\nimport {Murmur3} from \"@swim/util\";\nimport {Lazy} from \"@swim/util\";\nimport type {HashCode} from \"@swim/util\";\nimport type {Equivalent} from \"@swim/util\";\nimport type {Compare} from \"@swim/util\";\nimport {Numbers} from \"@swim/util\";\nimport {Constructors} from \"@swim/util\";\nimport {Objects} from \"@swim/util\";\nimport type {Interpolate} from \"@swim/util\";\nimport {Interpolator} from \"@swim/util\";\nimport type {Input} from \"@swim/codec\";\nimport type {Output} from \"@swim/codec\";\nimport {Parser} from \"@swim/codec\";\nimport type {Display} from \"@swim/codec\";\nimport type {Item} from \"@swim/structure\";\nimport {Value} from \"@swim/structure\";\nimport {Text} from \"@swim/structure\";\nimport {Form} from \"@swim/structure\";\nimport type {TimeZoneLike} from \"./TimeZone\";\nimport {TimeZone} from \"./TimeZone\";\nimport {DateTimeFormat} from \"./\"; // forward import\n\n/** @public */\nexport type DateTimeLike = DateTime | DateTimeInit | Date | string | number;\n\n/** @public */\nexport const DateTimeLike = {\n  [Symbol.hasInstance](instance: unknown): instance is DateTimeLike {\n    return instance instanceof DateTime\n        || instance instanceof Date\n        || DateTimeInit[Symbol.hasInstance](instance)\n        || typeof instance === \"string\"\n        || typeof instance === \"number\";\n  },\n};\n\n/** @public */\nexport interface DateTimeInit {\n  /** @internal */\n  readonly typeid?: \"DateTimeInit\";\n  time?: number,\n  year?: number;\n  month?: number;\n  day?: number;\n  hour?: number;\n  minute?: number;\n  second?: number;\n  millisecond?: number;\n  zone?: TimeZoneLike;\n}\n\n/** @public */\nexport const DateTimeInit = {\n  [Symbol.hasInstance](instance: unknown): instance is DateTimeInit {\n    return Objects.hasAnyKey<DateTimeInit>(instance, \"time\", \"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"millisecond\");\n  },\n};\n\n/** @public */\nexport class DateTime implements Interpolate<DateTime>, HashCode, Equivalent, Compare, Display {\n  constructor(time: number, zone: TimeZone = TimeZone.utc()) {\n    this.time = time;\n    this.zone = zone;\n  }\n\n  /** @internal */\n  declare readonly typeid?: \"DateTime\";\n\n  likeType?(like: DateTimeInit | Date | string | number): void;\n\n  isDefined(): boolean {\n    return isFinite(new Date(this.time).getTime());\n  }\n\n  readonly time: number;\n\n  readonly zone: TimeZone;\n\n  get year(): number {\n    return this.toUTCLocalDate().getUTCFullYear();\n  }\n\n  withYear(year: number, month?: number, day?: number, hour?: number, minute?: number,\n           second?: number, millisecond?: number): DateTime {\n    const date = this.toUTCLocalDate();\n    date.setUTCFullYear(year);\n    if (month !== void 0) {\n      date.setUTCMonth(month);\n    }\n    if (day !== void 0) {\n      date.setUTCDate(day);\n    }\n    if (hour !== void 0) {\n      date.setUTCHours(hour);\n    }\n    if (minute !== void 0) {\n      date.setUTCMinutes(minute);\n    }\n    if (second !== void 0) {\n      date.setUTCSeconds(second);\n    }\n    if (millisecond !== void 0) {\n      date.setUTCMilliseconds(millisecond);\n    }\n    return DateTime.fromUTCLocalDate(date, this.zone);\n  }\n\n  get month(): number {\n    return this.toUTCLocalDate().getUTCMonth();\n  }\n\n  withMonth(month: number, day?: number, hour?: number, minute?: number,\n            second?: number, millisecond?: number): DateTime {\n    const date = this.toUTCLocalDate();\n    date.setUTCMonth(month);\n    if (day !== void 0) {\n      date.setUTCDate(day);\n    }\n    if (hour !== void 0) {\n      date.setUTCHours(hour);\n    }\n    if (minute !== void 0) {\n      date.setUTCMinutes(minute);\n    }\n    if (second !== void 0) {\n      date.setUTCSeconds(second);\n    }\n    if (millisecond !== void 0) {\n      date.setUTCMilliseconds(millisecond);\n    }\n    return DateTime.fromUTCLocalDate(date, this.zone);\n  }\n\n  get day(): number {\n    return this.toUTCLocalDate().getUTCDate();\n  }\n\n  withDay(day: number, hour?: number, minute?: number, second?: number,\n          millisecond?: number): DateTime {\n    const date = this.toUTCLocalDate();\n    date.setUTCDate(day);\n    if (hour !== void 0) {\n      date.setUTCHours(hour);\n    }\n    if (minute !== void 0) {\n      date.setUTCMinutes(minute);\n    }\n    if (second !== void 0) {\n      date.setUTCSeconds(second);\n    }\n    if (millisecond !== void 0) {\n      date.setUTCMilliseconds(millisecond);\n    }\n    return DateTime.fromUTCLocalDate(date, this.zone);\n  }\n\n  get hour(): number {\n    return this.toUTCLocalDate().getUTCHours();\n  }\n\n  withHour(hour: number, minute?: number, second?: number, millisecond?: number): DateTime {\n    const date = this.toUTCLocalDate();\n    date.setUTCHours(hour);\n    if (minute !== void 0) {\n      date.setUTCMinutes(minute);\n    }\n    if (second !== void 0) {\n      date.setUTCSeconds(second);\n    }\n    if (millisecond !== void 0) {\n      date.setUTCMilliseconds(millisecond);\n    }\n    return DateTime.fromUTCLocalDate(date, this.zone);\n  }\n\n  get minute(): number {\n    return this.toUTCLocalDate().getUTCMinutes();\n  }\n\n  withMinute(minute: number, second?: number, millisecond?: number): DateTime {\n    const date = this.toUTCLocalDate();\n    date.setUTCMinutes(minute);\n    if (second !== void 0) {\n      date.setUTCSeconds(second);\n    }\n    if (millisecond !== void 0) {\n      date.setUTCMilliseconds(millisecond);\n    }\n    return DateTime.fromUTCLocalDate(date, this.zone);\n  }\n\n  get second(): number {\n    return this.toUTCLocalDate().getUTCSeconds();\n  }\n\n  withSecond(second: number, millisecond?: number): DateTime {\n    const date = this.toUTCLocalDate();\n    date.setUTCSeconds(second);\n    if (millisecond !== void 0) {\n      date.setUTCMilliseconds(millisecond);\n    }\n    return DateTime.fromUTCLocalDate(date, this.zone);\n  }\n\n  get millisecond(): number {\n    return this.toUTCLocalDate().getUTCMilliseconds();\n  }\n\n  withMillisecond(millisecond: number): DateTime {\n    const date = this.toUTCLocalDate();\n    date.setUTCMilliseconds(millisecond);\n    return DateTime.fromUTCLocalDate(date, this.zone);\n  }\n\n  get weekday(): number {\n    return this.toUTCLocalDate().getUTCDay();\n  }\n\n  /**\n   * Returns this date time shifted by the time zone offset.\n   * @internal\n   */\n  toUTCLocalDate(): Date {\n    return new Date(this.time + 60000 * this.zone.offset);\n  }\n\n  toDate(): Date {\n    return new Date(this.time);\n  }\n\n  valueOf(): number {\n    return this.time;\n  }\n\n  /** @override */\n  interpolateTo(that: DateTime): Interpolator<DateTime>;\n  interpolateTo(that: unknown): Interpolator<DateTime> | null;\n  interpolateTo(that: unknown): Interpolator<DateTime> | null {\n    if (that instanceof DateTime) {\n      return DateTimeInterpolator(this, that);\n    }\n    return null;\n  }\n\n  /** @override */\n  compareTo(that: unknown): number {\n    if (that instanceof DateTime) {\n      const x = this.time;\n      const y = that.time;\n      return x < y ? -1 : x > y ? 1 : x === y ? 0 : NaN;\n    }\n    return NaN;\n  }\n\n  /** @override */\n  equivalentTo(that: DateTimeLike, epsilon?: number): boolean {\n    if (this === that) {\n      return true;\n    } else if (that instanceof DateTime) {\n      return Numbers.equivalent(this.time, that.time, epsilon);\n    }\n    return false;\n  }\n\n  /** @override */\n  equals(that: unknown): boolean {\n    if (this === that) {\n      return true;\n    } else if (that instanceof DateTime) {\n      return this.time === that.time && this.zone.equals(that.zone);\n    }\n    return false;\n  }\n\n  /** @override */\n  hashCode(): number {\n    return Murmur3.mash(Murmur3.mix(Murmur3.mix(Constructors.hash(DateTime),\n        Numbers.hash(this.time)), this.zone.hashCode()));\n  }\n\n  /** @override */\n  display<T>(output: Output<T>, format: DateTimeFormat = DateTimeFormat.iso8601()): Output<T> {\n    output = format.writeDate(output, this);\n    return output;\n  }\n\n  /** @override */\n  toString(format: DateTimeFormat = DateTimeFormat.iso8601()): string {\n    return format.format(this);\n  }\n\n  static current(zone?: TimeZoneLike): DateTime {\n    zone = zone !== void 0 ? TimeZone.fromLike(zone) : TimeZone.local();\n    return new DateTime(Date.now(), zone);\n  }\n\n  /**\n   * Returns this date time shifted back by the time zone offset.\n   * @internal\n   */\n  static fromUTCLocalDate(date: Date, zone: TimeZone): DateTime {\n    return new DateTime(date.getTime() - 60000 * zone.offset, zone);\n  }\n\n  static fromLike<T extends DateTimeLike | null | undefined>(value: T, zone?: TimeZoneLike): DateTime | Uninitable<T> {\n    if (value === void 0 || value === null || value instanceof DateTime) {\n      return value as DateTime | Uninitable<T>;\n    } else if (value instanceof Date) {\n      zone = zone !== void 0 ? TimeZone.fromLike(zone) : TimeZone.utc();\n      return new DateTime(value.getTime(), zone);\n    } else if (typeof value === \"number\") {\n      zone = zone !== void 0 ? TimeZone.fromLike(zone) : TimeZone.utc();\n      return new DateTime(value, zone);\n    } else if (typeof value === \"string\") {\n      return DateTime.parse(value, zone);\n    } else if (DateTimeInit[Symbol.hasInstance](value)) {\n      return DateTime.fromInit(value, zone);\n    }\n    throw new TypeError(\"\" + value);\n  }\n\n  static fromInit(init: DateTimeInit, zone?: TimeZoneLike): DateTime {\n    let time = init.time;\n    if (time === void 0) {\n      time = Date.UTC(init.year !== void 0 ? init.year : 1970,\n                      init.month !== void 0 ? init.month : 0,\n                      init.day !== void 0 ? init.day : 1,\n                      init.hour !== void 0 ? init.hour : 0,\n                      init.minute !== void 0 ? init.minute : 0,\n                      init.second !== void 0 ? init.second : 0,\n                      init.millisecond !== void 0 ? init.millisecond : 0);\n    }\n    zone = TimeZone.fromLike(init.zone);\n    if (zone === void 0) {\n      zone = TimeZone.utc();\n    } else {\n      time += 60000 * zone.offset;\n    }\n    return new DateTime(time, zone);\n  }\n\n  static fromValue(value: Value): DateTime | null {\n    let positional: boolean;\n    const header = value.header(\"date\");\n    if (header.isDefined()) {\n      value = header;\n      positional = true;\n    } else {\n      positional = false;\n    }\n    const init: DateTimeInit = {};\n    value.forEach(function (item: Item, index: number) {\n      const key = item.key.stringValue(void 0);\n      if (key !== void 0) {\n        if (key === \"year\") {\n          init.year = item.toValue().numberValue(init.year);\n        } else if (key === \"month\") {\n          init.month = item.toValue().numberValue(init.month);\n        } else if (key === \"day\") {\n          init.day = item.toValue().numberValue(init.day);\n        } else if (key === \"hour\") {\n          init.hour = item.toValue().numberValue(init.hour);\n        } else if (key === \"minute\") {\n          init.minute = item.toValue().numberValue(init.minute);\n        } else if (key === \"second\") {\n          init.second = item.toValue().numberValue(init.second);\n        } else if (key === \"millisecond\") {\n          init.millisecond = item.toValue().numberValue(init.millisecond);\n        } else if (key === \"zone\") {\n          init.zone = item.toValue().cast(TimeZone.form(), init.zone);\n        }\n      } else if (item instanceof Value && positional) {\n        if (index === 0) {\n          init.year = item.numberValue(init.year);\n        } else if (index === 1) {\n          init.month = item.numberValue(init.month);\n        } else if (index === 2) {\n          init.day = item.numberValue(init.day);\n        } else if (index === 3) {\n          init.hour = item.numberValue(init.hour);\n        } else if (index === 4) {\n          init.minute = item.numberValue(init.minute);\n        } else if (index === 5) {\n          init.second = item.numberValue(init.second);\n        } else if (index === 6) {\n          init.millisecond = item.numberValue(init.millisecond);\n        } else if (index === 7) {\n          init.zone = item.cast(TimeZone.form(), init.zone);\n        }\n      }\n    });\n    if (DateTimeInit[Symbol.hasInstance](init)) {\n      return DateTime.fromInit(init);\n    }\n    return null;\n  }\n\n  static parse(date: string, zone?: TimeZoneLike): DateTime {\n    return DateTimeFormat.iso8601().parse(date);\n  }\n\n  static time(date: DateTimeLike): number {\n    if (date instanceof DateTime) {\n      return date.time;\n    } else if (date instanceof Date) {\n      return date.getTime();\n    } else if (typeof date === \"number\") {\n      return date;\n    } else if (typeof date === \"string\") {\n      return DateTime.parse(date).time;\n    } else if (DateTimeInit[Symbol.hasInstance](date)) {\n      return DateTime.fromInit(date).time;\n    }\n    throw new TypeError(\"\" + date);\n  }\n\n  static zone(date: DateTimeLike): TimeZone {\n    if (date instanceof DateTime) {\n      return date.zone;\n    }\n    return TimeZone.utc();\n  }\n\n  @Lazy\n  static form(): Form<DateTime, DateTimeLike> {\n    return new DateTimeForm(new DateTime(0));\n  }\n}\n\n/** @internal */\nexport const DateTimeInterpolator = (function (_super: typeof Interpolator) {\n  const DateTimeInterpolator = function (d0: DateTime, d1: DateTime): Interpolator<DateTime> {\n    const interpolator = function (u: number): DateTime {\n      const d0 = interpolator[0];\n      const d1 = interpolator[1];\n      return new DateTime(d0.time + u * (d1.time - d0.time), d1.zone);\n    } as Interpolator<DateTime>;\n    Object.setPrototypeOf(interpolator, DateTimeInterpolator.prototype);\n    (interpolator as Mutable<typeof interpolator>)[0] = d0;\n    (interpolator as Mutable<typeof interpolator>)[1] = d1;\n    return interpolator;\n  } as {\n    (d0: DateTime, d1: DateTime): Interpolator<DateTime>;\n\n    /** @internal */\n    prototype: Interpolator<DateTime>;\n  };\n\n  DateTimeInterpolator.prototype = Object.create(_super.prototype);\n  DateTimeInterpolator.prototype.constructor = DateTimeInterpolator;\n\n  return DateTimeInterpolator;\n})(Interpolator);\n\n/** @internal */\nexport class DateTimeForm extends Form<DateTime, DateTimeLike> {\n  constructor(unit: DateTime | undefined) {\n    super();\n    Object.defineProperty(this, \"unit\", {\n      value: unit,\n      enumerable: true,\n      configurable: true,\n    });\n  }\n\n  override readonly unit: DateTime | undefined;\n\n  override withUnit(unit: DateTime | undefined): Form<DateTime, DateTimeLike> {\n    if (unit === this.unit) {\n      return this;\n    }\n    return new DateTimeForm(unit);\n  }\n\n  override mold(date: DateTimeLike): Item {\n    date = DateTime.fromLike(date);\n    return Text.from(date.toString());\n  }\n\n  override cast(value: Value): DateTime | undefined {\n    let date: DateTime | null = null;\n    try {\n      date = DateTime.fromValue(value);\n      if (date === void 0) {\n        const millis = value.numberValue(void 0);\n        if (millis !== void 0) {\n          date = new DateTime(millis);\n        } else {\n          const string = value.stringValue(void 0);\n          if (string !== void 0) {\n            date = DateTime.parse(string);\n          }\n        }\n      }\n    } catch (e) {\n      // swallow\n    }\n    return date !== null ? date : void 0;\n  }\n}\n\n/** @internal */\nexport class DateTimeParser extends Parser<DateTime> {\n  private readonly dateParser: Parser<DateTimeInit>;\n\n  constructor(dateParser: Parser<DateTimeInit>) {\n    super();\n    this.dateParser = dateParser;\n  }\n\n  override feed(input: Input): Parser<DateTime> {\n    return DateTimeParser.parse(input, this.dateParser);\n  }\n\n  static parse(input: Input, dateParser: Parser<DateTimeInit>): Parser<DateTime> {\n    dateParser = dateParser.feed(input);\n    if (dateParser.isDone()) {\n      return Parser.done(DateTime.fromLike(dateParser.bind()));\n    } else if (dateParser.isError()) {\n      return dateParser.asError();\n    }\n    return new DateTimeParser(dateParser);\n  }\n}\n","// Copyright 2015-2024 Nstream, inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport {Lazy} from \"@swim/util\";\n\n/** @public */\nexport class DateTimeLocale {\n  readonly periods: readonly string[];\n  readonly weekdays: readonly string[];\n  readonly shortWeekdays: readonly string[];\n  readonly months: readonly string[];\n  readonly shortMonths: readonly string[];\n\n  constructor(periods: readonly string[] = DateTimeLocale.Periods,\n              weekdays: readonly string[] = DateTimeLocale.Weekdays,\n              shortWeekdays: readonly string[] = DateTimeLocale.ShortWeekdays,\n              months: readonly string[] = DateTimeLocale.Months,\n              shortMonths: readonly string[] = DateTimeLocale.ShortMonths) {\n    this.periods = periods;\n    this.weekdays = weekdays;\n    this.shortWeekdays = shortWeekdays;\n    this.months = months;\n    this.shortMonths = shortMonths;\n  }\n\n  /** @internal */\n  static readonly Periods: readonly string[] = [\n    \"AM\",\n    \"PM\",\n  ];\n\n  /** @internal */\n  static readonly Weekdays: readonly string[] = [\n    \"Sunday\",\n    \"Monday\",\n    \"Tuesday\",\n    \"Wednesday\",\n    \"Thursday\",\n    \"Friday\",\n    \"Saturday\",\n  ];\n\n  /** @internal */\n  static readonly ShortWeekdays: readonly string[] = [\n    \"Sun\",\n    \"Mon\",\n    \"Tue\",\n    \"Wed\",\n    \"Thu\",\n    \"Fri\",\n    \"Sat\",\n  ];\n\n  /** @internal */\n  static readonly Months: readonly string[] = [\n    \"January\",\n    \"February\",\n    \"March\",\n    \"April\",\n    \"May\",\n    \"June\",\n    \"July\",\n    \"August\",\n    \"September\",\n    \"October\",\n    \"November\",\n    \"December\",\n  ];\n\n  /** @internal */\n  static readonly ShortMonths: readonly string[] = [\n    \"Jan\",\n    \"Feb\",\n    \"Mar\",\n    \"Apr\",\n    \"May\",\n    \"Jun\",\n    \"Jul\",\n    \"Aug\",\n    \"Sep\",\n    \"Oct\",\n    \"Nov\",\n    \"Dec\",\n  ];\n\n  @Lazy\n  static standard(): DateTimeLocale {\n    return new DateTimeLocale();\n  }\n}\n","// Copyright 2015-2024 Nstream, inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport {DateTimeLocale} from \"./DateTimeLocale\";\nimport {DateTimeFormat} from \"./\"; // forward import\n\n/** @public */\nexport interface DateTimeSpecifiers {\n  [symbol: string]: DateTimeFormat | undefined;\n  Y: DateTimeFormat;\n  m: DateTimeFormat;\n  B: DateTimeFormat;\n  b: DateTimeFormat;\n  d: DateTimeFormat;\n  e: DateTimeFormat;\n  A: DateTimeFormat;\n  a: DateTimeFormat;\n  H: DateTimeFormat;\n  I: DateTimeFormat;\n  i: DateTimeFormat;\n  p: DateTimeFormat;\n  M: DateTimeFormat;\n  S: DateTimeFormat;\n  L: DateTimeFormat;\n}\n\n/** @public */\nexport const DateTimeSpecifiers = (function () {\n  const DateTimeSpecifiers = {} as {\n    standard(locale?: DateTimeLocale): DateTimeSpecifiers;\n  };\n\n  let standard: DateTimeSpecifiers | null = null;\n\n  DateTimeSpecifiers.standard = function (locale?: DateTimeLocale): DateTimeSpecifiers {\n    let specifiers: DateTimeSpecifiers | null = null;\n    if (locale === void 0) {\n      locale = DateTimeLocale.standard();\n    }\n    if (locale === DateTimeLocale.standard()) {\n      specifiers = standard;\n    }\n    if (specifiers === null) {\n      specifiers = {\n        Y: DateTimeFormat.year(),\n        m: DateTimeFormat.monthOfYear(),\n        B: DateTimeFormat.month(locale),\n        b: DateTimeFormat.shortMonth(locale),\n        d: DateTimeFormat.dayOfMonth(48/*'0'*/),\n        e: DateTimeFormat.dayOfMonth(32/*' '*/),\n        A: DateTimeFormat.weekday(locale),\n        a: DateTimeFormat.shortWeekday(locale),\n        H: DateTimeFormat.hour24(),\n        I: DateTimeFormat.hour12(48/*'0'*/),\n        i: DateTimeFormat.hour12(32/*' '*/),\n        p: DateTimeFormat.period(locale),\n        M: DateTimeFormat.minute(),\n        S: DateTimeFormat.second(),\n        L: DateTimeFormat.millisecond(),\n      };\n      if (locale === DateTimeLocale.standard()) {\n        standard = specifiers;\n      }\n    }\n    return specifiers;\n  };\n\n  return DateTimeSpecifiers;\n})();\n","// Copyright 2015-2024 Nstream, inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport {Diagnostic} from \"@swim/codec\";\nimport type {Input} from \"@swim/codec\";\nimport type {Output} from \"@swim/codec\";\nimport {Parser} from \"@swim/codec\";\nimport {Unicode} from \"@swim/codec\";\nimport {Base10} from \"@swim/codec\";\nimport type {DateTimeLike} from \"./DateTime\";\nimport type {DateTimeInit} from \"./DateTime\";\nimport {DateTime} from \"./DateTime\";\nimport {DateTimeParser} from \"./DateTime\";\nimport {DateTimeLocale} from \"./DateTimeLocale\";\nimport {DateTimeSpecifiers} from \"./DateTimeSpecifiers\";\n\n/** @internal */\nexport interface DateNumberFactory {\n  term(value: number, date: DateTimeInit, input: Input): Parser<DateTimeInit>;\n  cont(date: DateTimeInit, value: number, step: number, input: Input): Parser<DateTimeInit>;\n}\n\n/** @internal */\nexport interface DateStringFactory {\n  term(locale: DateTimeLocale, value: string, date: DateTimeInit, input: Input): Parser<DateTimeInit>;\n  cont(locale: DateTimeLocale, date: DateTimeInit, output: Output, input: Input): Parser<DateTimeInit>;\n}\n\n/** @public */\nexport abstract class DateTimeFormat {\n  withLocale(locale: DateTimeLocale): DateTimeFormat {\n    return this;\n  }\n\n  format(date: DateTimeLike): string {\n    date = DateTime.fromLike(date);\n    let output = Unicode.stringOutput();\n    output = this.writeDate(output, date);\n    return output.bind();\n  }\n\n  abstract writeDate<T>(output: Output<T>, date: DateTime): Output<T>;\n\n  parse(input: Input | string): DateTime {\n    if (typeof input === \"string\") {\n      input = Unicode.stringInput(input);\n    }\n    while (input.isCont() && Unicode.isSpace(input.head())) {\n      input = input.step();\n    }\n    let parser = this.parseDate(input, {});\n    if (parser.isDone()) {\n      while (input.isCont() && Unicode.isSpace(input.head())) {\n        input = input.step();\n      }\n    }\n    if (input.isCont() && !parser.isError()) {\n      parser = Parser.error(Diagnostic.unexpected(input));\n    }\n    return parser.bind();\n  }\n\n  /** @internal */\n  parseDate(input: Input, date: DateTimeInit): Parser<DateTime> {\n    const dateParser = this.parseDateTime(input, date);\n    if (dateParser.isDone()) {\n      return Parser.done(DateTime.fromLike(dateParser.bind()));\n    } else if (dateParser.isError()) {\n      return dateParser.asError();\n    }\n    return new DateTimeParser(dateParser);\n  }\n\n  /** @internal */\n  abstract parseDateTime(input: Input, date: DateTimeInit): Parser<DateTimeInit>;\n\n  /** @internal */\n  static Year: DateTimeFormat | null = null;\n  static year(): DateTimeFormat {\n    if (this.Year === null) {\n      this.Year = new YearFormat();\n    }\n    return this.Year;\n  }\n\n  /** @internal */\n  static MonthOfYear: DateTimeFormat | null = null;\n  static monthOfYear(): DateTimeFormat {\n    if (this.MonthOfYear === null) {\n      this.MonthOfYear = new MonthOfYearFormat();\n    }\n    return this.MonthOfYear;\n  }\n\n  /** @internal */\n  static Month: DateTimeFormat | null = null;\n  static month(locale?: DateTimeLocale): DateTimeFormat {\n    if (locale !== void 0 && locale !== DateTimeLocale.standard()) {\n      return new MonthFormat(locale);\n    } else if (this.Month === null) {\n      this.Month = new MonthFormat(DateTimeLocale.standard());\n    }\n    return this.Month;\n  }\n\n  /** @internal */\n  static ShortMonth: DateTimeFormat | null = null;\n  static shortMonth(locale?: DateTimeLocale): DateTimeFormat {\n    if (locale !== void 0 && locale !== DateTimeLocale.standard()) {\n      return new ShortMonthFormat(locale);\n    } else if (this.ShortMonth === null) {\n      this.ShortMonth = new ShortMonthFormat(DateTimeLocale.standard());\n    }\n    return this.ShortMonth;\n  }\n\n  /** @internal */\n  static DayOfMonthZeroPadded: DateTimeFormat | null = null;\n  /** @internal */\n  static DayOfMonthSpacePadded: DateTimeFormat | null = null;\n  static dayOfMonth(padChar?: number): DateTimeFormat {\n    if (padChar === void 0 || padChar === 48/*'0'*/) {\n      if (this.DayOfMonthZeroPadded === null) {\n        this.DayOfMonthZeroPadded = new DayOfMonthFormat(48/*'0'*/);\n      }\n      return this.DayOfMonthZeroPadded;\n    } else if (padChar === 32/*' '*/) {\n      if (this.DayOfMonthSpacePadded === null) {\n        this.DayOfMonthSpacePadded = new DayOfMonthFormat(32/*' '*/);\n      }\n      return this.DayOfMonthSpacePadded;\n    }\n    return new DayOfMonthFormat(padChar);\n  }\n\n  /** @internal */\n  static Weekday: DateTimeFormat | null = null;\n  static weekday(locale?: DateTimeLocale): DateTimeFormat {\n    if (locale !== void 0 && locale !== DateTimeLocale.standard()) {\n      return new WeekdayFormat(locale);\n    } else if (this.Weekday === null) {\n      this.Weekday = new WeekdayFormat(DateTimeLocale.standard());\n    }\n    return this.Weekday;\n  }\n\n  /** @internal */\n  static ShortWeekday: DateTimeFormat | null = null;\n  static shortWeekday(locale?: DateTimeLocale): DateTimeFormat {\n    if (locale !== void 0 && locale !== DateTimeLocale.standard()) {\n      return new ShortWeekdayFormat(locale);\n    } else if (this.ShortWeekday === null) {\n      this.ShortWeekday = new ShortWeekdayFormat(DateTimeLocale.standard());\n    }\n    return this.ShortWeekday;\n  }\n\n  /** @internal */\n  static Hour24: DateTimeFormat | null = null;\n  static hour24(): DateTimeFormat {\n    if (this.Hour24 === null) {\n      this.Hour24 = new Hour24Format();\n    }\n    return this.Hour24;\n  }\n\n  /** @internal */\n  static Hour12ZeroPadded: DateTimeFormat | null = null;\n  /** @internal */\n  static Hour12SpacePadded: DateTimeFormat | null = null;\n  static hour12(padChar?: number): DateTimeFormat {\n    if (padChar === void 0 || padChar === 48/*'0'*/) {\n      if (this.Hour12ZeroPadded === null) {\n        this.Hour12ZeroPadded = new Hour12Format(48/*'0'*/);\n      }\n      return this.Hour12ZeroPadded;\n    } else if (padChar === 32/*' '*/) {\n      if (this.Hour12SpacePadded === null) {\n        this.Hour12SpacePadded = new Hour12Format(32/*' '*/);\n      }\n      return this.Hour12SpacePadded;\n    }\n    return new Hour12Format(padChar);\n  }\n\n  /** @internal */\n  static Period: DateTimeFormat | null = null;\n  static period(locale?: DateTimeLocale): DateTimeFormat {\n    if (locale !== void 0 && locale !== DateTimeLocale.standard()) {\n      return new PeriodFormat(locale);\n    } else if (this.Period === null) {\n      this.Period = new PeriodFormat(DateTimeLocale.standard());\n    }\n    return this.Period;\n  }\n\n  /** @internal */\n  static Minute: DateTimeFormat | null = null;\n  static minute(): DateTimeFormat {\n    if (this.Minute === null) {\n      this.Minute = new MinuteFormat();\n    }\n    return this.Minute;\n  }\n\n  /** @internal */\n  static Second: DateTimeFormat | null = null;\n  static second(): DateTimeFormat {\n    if (this.Second === null) {\n      this.Second = new SecondFormat();\n    }\n    return this.Second;\n  }\n\n  /** @internal */\n  static Millisecond: DateTimeFormat | null = null;\n  static millisecond(): DateTimeFormat {\n    if (this.Millisecond === null) {\n      this.Millisecond = new MillisecondFormat();\n    }\n    return this.Millisecond;\n  }\n\n  static pattern(pattern: string, specifiers?: DateTimeSpecifiers | DateTimeLocale): DateTimeFormat {\n    if (specifiers === void 0 || specifiers instanceof DateTimeLocale) {\n      specifiers = DateTimeSpecifiers.standard(specifiers);\n    }\n    return new PatternFormat(pattern, specifiers);\n  }\n\n  /** @internal */\n  static Iso8601: DateTimeFormat | null = null;\n\n  static iso8601(): DateTimeFormat {\n    if (this.Iso8601 === null) {\n      this.Iso8601 = new PatternFormat(\"%Y-%m-%dT%H:%M:%S.%LZ\", DateTimeSpecifiers.standard());\n    }\n    return this.Iso8601;\n  }\n\n  /** @internal */\n  static parseDateNumber(input: Input, factory: DateNumberFactory, desc: string,\n                         minDigits: number, maxDigits: number, date: DateTimeInit | undefined,\n                         value: number = 0, step: number = 0): Parser<DateTimeInit> {\n    let c = 0;\n    while (step < maxDigits) {\n      if (input.isCont() && (c = input.head(), Base10.isDigit(c))) {\n        input.step();\n        value = 10 * value + Base10.decodeDigit(c);\n        step += 1;\n        continue;\n      }\n      break;\n    }\n    if (!input.isEmpty()) {\n      if (step >= minDigits) {\n        return factory.term(value, date || {}, input);\n      } else {\n        return Parser.error(Diagnostic.expected(desc, input));\n      }\n    }\n    return factory.cont(date !== void 0 ? date : {}, value, step, input);\n  }\n\n  /** @internal */\n  static parseDateString(input: Input, factory: DateStringFactory, locale: DateTimeLocale,\n                         date?: DateTimeInit, output?: Output<string>): Parser<DateTimeInit> {\n    let c = 0;\n    output = output !== void 0 ? output : Unicode.stringOutput();\n    do {\n      if (input.isCont() && (c = input.head(), Unicode.isAlpha(c))) {\n        input.step();\n        output.write(c);\n        continue;\n      } else if (!input.isEmpty()) {\n        return factory.term(locale, output.bind(), date !== void 0 ? date : {}, input);\n      }\n      break;\n    } while (true);\n    return factory.cont(locale, date !== void 0 ? date : {}, output, input);\n  }\n\n  /** @internal */\n  static writeDateNumber2<T>(output: Output<T>, value: number, padChar?: number): Output<T> {\n    if (padChar === void 0) {\n      padChar = 48/*'0'*/;\n    }\n    const c1 = Math.floor(value % 10);\n    value /= 10;\n    const c0 = Math.floor(value % 10);\n    output = output.write(c0 !== 0 ? 48/*'0'*/ + c0 : padChar);\n    output = output.write(48/*'0'*/ + c1);\n    return output;\n  }\n\n  /** @internal */\n  static writeDateNumber3<T>(output: Output<T>, value: number, padChar?: number): Output<T> {\n    if (padChar === void 0) {\n      padChar = 48/*'0'*/;\n    }\n    const c2 = Math.floor(value % 10);\n    value /= 10;\n    const c1 = Math.floor(value % 10);\n    value /= 10;\n    const c0 = Math.floor(value % 10);\n    output = output.write(c0 !== 0 ? 48/*'0'*/ + c0 : padChar);\n    output = output.write(c1 !== 0 ? 48/*'0'*/ + c1 : padChar);\n    output = output.write(48/*'0'*/ + c2);\n    return output;\n  }\n\n  /** @internal */\n  static writeDateNumber4<T>(output: Output<T>, value: number, padChar?: number): Output<T> {\n    if (padChar === void 0) {\n      padChar = 48/*'0'*/;\n    }\n    const c3 = Math.floor(value % 10);\n    value /= 10;\n    const c2 = Math.floor(value % 10);\n    value /= 10;\n    const c1 = Math.floor(value % 10);\n    value /= 10;\n    const c0 = Math.floor(value % 10);\n    output = output.write(c0 !== 0 ? 48/*'0'*/ + c0 : padChar);\n    output = output.write(c1 !== 0 ? 48/*'0'*/ + c1 : padChar);\n    output = output.write(c2 !== 0 ? 48/*'0'*/ + c2 : padChar);\n    output = output.write(48/*'0'*/ + c3);\n    return output;\n  }\n}\n\n/** @internal */\nexport class YearFormat extends DateTimeFormat {\n  override writeDate<T>(output: Output<T>, date: DateTime): Output<T> {\n    output = DateTimeFormat.writeDateNumber4(output, date.year);\n    return output;\n  }\n\n  override parseDateTime(input: Input, date: DateTimeInit): Parser<DateTimeInit> {\n    return YearParser.parse(input, date);\n  }\n}\n\n/** @internal */\nexport class MonthOfYearFormat extends DateTimeFormat {\n  override writeDate<T>(output: Output<T>, date: DateTime): Output<T> {\n    output = DateTimeFormat.writeDateNumber2(output, date.month + 1);\n    return output;\n  }\n\n  override parseDateTime(input: Input, date: DateTimeInit): Parser<DateTimeInit> {\n    return MonthOfYearParser.parse(input, date);\n  }\n}\n\n/** @internal */\nexport class MonthFormat extends DateTimeFormat {\n  private readonly locale: DateTimeLocale;\n\n  constructor(locale: DateTimeLocale) {\n    super();\n    this.locale = locale;\n  }\n\n  override withLocale(locale: DateTimeLocale): DateTimeFormat {\n    if (locale === this.locale) {\n      return this;\n    }\n    return new MonthFormat(locale);\n  }\n\n  override writeDate<T>(output: Output<T>, date: DateTime): Output<T> {\n    output = output.write(this.locale.months[date.month]!);\n    return output;\n  }\n\n  override parseDateTime(input: Input, date: DateTimeInit): Parser<DateTimeInit> {\n    return MonthParser.parse(input, this.locale, date);\n  }\n}\n\n/** @internal */\nexport class ShortMonthFormat extends DateTimeFormat {\n  private readonly locale: DateTimeLocale;\n\n  constructor(locale: DateTimeLocale) {\n    super();\n    this.locale = locale;\n  }\n\n  override withLocale(locale: DateTimeLocale): DateTimeFormat {\n    if (locale === this.locale) {\n      return this;\n    }\n    return new ShortMonthFormat(locale);\n  }\n\n  override writeDate<T>(output: Output<T>, date: DateTime): Output<T> {\n    output = output.write(this.locale.shortMonths[date.month]!);\n    return output;\n  }\n\n  override parseDateTime(input: Input, date: DateTimeInit): Parser<DateTimeInit> {\n    return ShortMonthParser.parse(input, this.locale, date);\n  }\n}\n\n/** @internal */\nexport class DayOfMonthFormat extends DateTimeFormat {\n  constructor(padChar: number) {\n    super();\n    this.padChar = padChar;\n  }\n\n  readonly padChar: number;\n\n  override writeDate<T>(output: Output<T>, date: DateTime): Output<T> {\n    output = DateTimeFormat.writeDateNumber2(output, date.day, this.padChar);\n    return output;\n  }\n\n  override parseDateTime(input: Input, date: DateTimeInit): Parser<DateTimeInit> {\n    return DayOfMonthParser.parse(input, date);\n  }\n}\n\n/** @internal */\nexport class WeekdayFormat extends DateTimeFormat {\n  private readonly locale: DateTimeLocale;\n\n  constructor(locale: DateTimeLocale) {\n    super();\n    this.locale = locale;\n  }\n\n  override withLocale(locale: DateTimeLocale): DateTimeFormat {\n    if (locale === this.locale) {\n      return this;\n    }\n    return new WeekdayFormat(locale);\n  }\n\n  override writeDate<T>(output: Output<T>, date: DateTime): Output<T> {\n    output = output.write(this.locale.weekdays[date.weekday]!);\n    return output;\n  }\n\n  override parseDateTime(input: Input, date: DateTimeInit): Parser<DateTimeInit> {\n    return WeekdayParser.parse(input, this.locale, date);\n  }\n}\n\n/** @internal */\nexport class ShortWeekdayFormat extends DateTimeFormat {\n  private readonly locale: DateTimeLocale;\n\n  constructor(locale: DateTimeLocale) {\n    super();\n    this.locale = locale;\n  }\n\n  override withLocale(locale: DateTimeLocale): DateTimeFormat {\n    if (locale === this.locale) {\n      return this;\n    }\n    return new ShortWeekdayFormat(locale);\n  }\n\n  override writeDate<T>(output: Output<T>, date: DateTime): Output<T> {\n    output = output.write(this.locale.shortWeekdays[date.weekday]!);\n    return output;\n  }\n\n  override parseDateTime(input: Input, date: DateTimeInit): Parser<DateTimeInit> {\n    return ShortWeekdayParser.parse(input, this.locale, date);\n  }\n}\n\n/** @internal */\nexport class Hour24Format extends DateTimeFormat {\n  override writeDate<T>(output: Output<T>, date: DateTime): Output<T> {\n    output = DateTimeFormat.writeDateNumber2(output, date.hour);\n    return output;\n  }\n\n  override parseDateTime(input: Input, date: DateTimeInit): Parser<DateTimeInit> {\n    return Hour24Parser.parse(input, date);\n  }\n}\n\n/** @internal */\nexport class Hour12Format extends DateTimeFormat {\n  constructor(padChar: number) {\n    super();\n    this.padChar = padChar;\n  }\n\n  readonly padChar: number;\n\n  override writeDate<T>(output: Output<T>, date: DateTime): Output<T> {\n    let hour = date.hour % 12;\n    if (hour === 0) {\n      hour = 12;\n    }\n    output = DateTimeFormat.writeDateNumber2(output, hour, this.padChar);\n    return output;\n  }\n\n  override parseDateTime(input: Input, date: DateTimeInit): Parser<DateTimeInit> {\n    return Hour12Parser.parse(input, date);\n  }\n}\n\n/** @internal */\nexport class PeriodFormat extends DateTimeFormat {\n  private readonly locale: DateTimeLocale;\n\n  constructor(locale: DateTimeLocale) {\n    super();\n    this.locale = locale;\n  }\n\n  override withLocale(locale: DateTimeLocale): DateTimeFormat {\n    if (locale === this.locale) {\n      return this;\n    }\n    return new PeriodFormat(locale);\n  }\n\n  override writeDate<T>(output: Output<T>, date: DateTime): Output<T> {\n    output = output.write(this.locale.periods[date.hour >= 12 ? 1 : 0]!);\n    return output;\n  }\n\n  override parseDateTime(input: Input, date: DateTimeInit): Parser<DateTimeInit> {\n    return PeriodParser.parse(input, this.locale, date);\n  }\n}\n\n/** @internal */\nexport class MinuteFormat extends DateTimeFormat {\n  override writeDate<T>(output: Output<T>, date: DateTime): Output<T> {\n    output = DateTimeFormat.writeDateNumber2(output, date.minute);\n    return output;\n  }\n\n  override parseDateTime(input: Input, date: DateTimeInit): Parser<DateTimeInit> {\n    return MinuteParser.parse(input, date);\n  }\n}\n\n/** @internal */\nexport class SecondFormat extends DateTimeFormat {\n  override writeDate<T>(output: Output<T>, date: DateTime): Output<T> {\n    output = DateTimeFormat.writeDateNumber2(output, date.second);\n    return output;\n  }\n\n  override parseDateTime(input: Input, date: DateTimeInit): Parser<DateTimeInit> {\n    return SecondParser.parse(input, date);\n  }\n}\n\n/** @internal */\nexport class MillisecondFormat extends DateTimeFormat {\n  override writeDate<T>(output: Output<T>, date: DateTime): Output<T> {\n    output = DateTimeFormat.writeDateNumber3(output, date.millisecond);\n    return output;\n  }\n\n  override parseDateTime(input: Input, date: DateTimeInit): Parser<DateTimeInit> {\n    return MillisecondParser.parse(input, date);\n  }\n}\n\n/** @internal */\nexport class PatternFormat extends DateTimeFormat {\n  private readonly pattern: string;\n  private readonly specifiers: DateTimeSpecifiers;\n\n  constructor(pattern: string, specifiers: DateTimeSpecifiers) {\n    super();\n    this.pattern = pattern;\n    this.specifiers = specifiers;\n  }\n\n  override writeDate<T>(output: Output<T>, date: DateTime): Output<T> {\n    const pattern = this.pattern;\n    const specifiers = this.specifiers;\n    let i = 0;\n    let j = 0;\n    while (j < pattern.length) {\n      if (pattern.charCodeAt(j) !== 37/*'%'*/) {\n        j += 1;\n        continue;\n      } else if (i !== j) {\n        output = output.write(pattern.slice(i, j));\n      }\n      const s = pattern.charAt(j + 1);\n      const f = specifiers[s];\n      if (f !== void 0) {\n        output = f.writeDate(output, date);\n      }\n      j += 2;\n      i = j;\n    }\n    if (i !== j) {\n      output = output.write(pattern.slice(i, j));\n    }\n    return output;\n  }\n\n  override parseDateTime(input: Input, date: DateTimeInit): Parser<DateTimeInit> {\n    return PatternParser.parse(input, this.pattern, this.specifiers, date);\n  }\n}\n\n/** @internal */\nexport class YearParser extends Parser<DateTimeInit> {\n  private readonly date: DateTimeInit | undefined;\n  private readonly year: number | undefined;\n  private readonly step: number | undefined;\n\n  constructor(date?: DateTimeInit, year?: number, step?: number) {\n    super();\n    this.date = date;\n    this.year = year;\n    this.step = step;\n  }\n\n  override feed(input: Input): Parser<DateTimeInit> {\n    return YearParser.parse(input, this.date, this.year, this.step);\n  }\n\n  static parse(input: Input, date?: DateTimeInit, year?: number, step?: number): Parser<DateTimeInit> {\n    return DateTimeFormat.parseDateNumber(input, YearParser, \"full year\", 4, 4, date, year, step);\n  }\n\n  static term(year: number, date: DateTimeInit): Parser<DateTimeInit> {\n    date.year = year;\n    return Parser.done(date);\n  }\n\n  static cont(date: DateTimeInit, year: number, step: number): Parser<DateTimeInit> {\n    return new YearParser(date, year, step);\n  }\n}\n\n/** @internal */\nexport class MonthOfYearParser extends Parser<DateTimeInit> {\n  private readonly date: DateTimeInit | undefined;\n  private readonly month: number | undefined;\n  private readonly step: number | undefined;\n\n  constructor(date?: DateTimeInit, month?: number, step?: number) {\n    super();\n    this.date = date;\n    this.month = month;\n    this.step = step;\n  }\n\n  override feed(input: Input): Parser<DateTimeInit> {\n    return MonthOfYearParser.parse(input, this.date, this.month, this.step);\n  }\n\n  static parse(input: Input, date?: DateTimeInit, month?: number, step?: number): Parser<DateTimeInit> {\n    return DateTimeFormat.parseDateNumber(input, MonthOfYearParser, \"month number\", 2, 2, date, month, step);\n  }\n\n  static term(month: number, date: DateTimeInit): Parser<DateTimeInit> {\n    date.month = month - 1;\n    return Parser.done(date);\n  }\n\n  static cont(date: DateTimeInit, month: number, step: number): Parser<DateTimeInit> {\n    return new MonthOfYearParser(date, month, step);\n  }\n}\n\n/** @internal */\nexport class MonthParser extends Parser<DateTimeInit> {\n  private readonly locale: DateTimeLocale;\n  private readonly date: DateTimeInit | undefined;\n  private readonly output: Output<string> | undefined;\n\n  constructor(locale: DateTimeLocale, date?: DateTimeInit, output?: Output<string>) {\n    super();\n    this.locale = locale;\n    this.date = date;\n    this.output = output;\n  }\n\n  override feed(input: Input): Parser<DateTimeInit> {\n    return MonthParser.parse(input, this.locale, this.date, this.output);\n  }\n\n  static parse(input: Input, locale: DateTimeLocale, date?: DateTimeInit,\n               output?: Output<string>): Parser<DateTimeInit> {\n    return DateTimeFormat.parseDateString(input, MonthParser, locale, date, output);\n  }\n\n  static term(locale: DateTimeLocale, value: string, date: DateTimeInit, input: Input): Parser<DateTimeInit> {\n    const month = locale.months.indexOf(value);\n    if (month < 0) {\n      return Parser.error(Diagnostic.message(\"expected month, but found \" + value, input));\n    }\n    date.month = month;\n    return Parser.done(date);\n  }\n\n  static cont(locale: DateTimeLocale, date: DateTimeInit, output: Output<string>): Parser<DateTimeInit> {\n    return new MonthParser(locale, date, output);\n  }\n}\n\n/** @internal */\nexport class ShortMonthParser extends Parser<DateTimeInit> {\n  private readonly locale: DateTimeLocale;\n  private readonly date: DateTimeInit | undefined;\n  private readonly output: Output<string> | undefined;\n\n  constructor(locale: DateTimeLocale, date?: DateTimeInit, output?: Output<string>) {\n    super();\n    this.locale = locale;\n    this.date = date;\n    this.output = output;\n  }\n\n  override feed(input: Input): Parser<DateTimeInit> {\n    return ShortMonthParser.parse(input, this.locale, this.date, this.output);\n  }\n\n  static parse(input: Input, locale: DateTimeLocale, date?: DateTimeInit,\n               output?: Output<string>): Parser<DateTimeInit> {\n    return DateTimeFormat.parseDateString(input, ShortMonthParser, locale, date, output);\n  }\n\n  static term(locale: DateTimeLocale, value: string, date: DateTimeInit, input: Input): Parser<DateTimeInit> {\n    const month = locale.shortMonths.indexOf(value);\n    if (month < 0) {\n      return Parser.error(Diagnostic.message(\"expected short month, but found \" + value, input));\n    }\n    date.month = month;\n    return Parser.done(date);\n  }\n\n  static cont(locale: DateTimeLocale, date: DateTimeInit, output: Output<string>): Parser<DateTimeInit> {\n    return new ShortMonthParser(locale, date, output);\n  }\n}\n\n/** @internal */\nexport class DayOfMonthParser extends Parser<DateTimeInit> {\n  private readonly date: DateTimeInit | undefined;\n  private readonly day: number | undefined;\n  private readonly step: number | undefined;\n\n  constructor(date?: DateTimeInit, day?: number, step?: number) {\n    super();\n    this.date = date;\n    this.day = day;\n    this.step = step;\n  }\n\n  override feed(input: Input): Parser<DateTimeInit> {\n    return DayOfMonthParser.parse(input, this.date, this.day, this.step);\n  }\n\n  static parse(input: Input, date?: DateTimeInit, day?: number, step?: number): Parser<DateTimeInit> {\n    return DateTimeFormat.parseDateNumber(input, DayOfMonthParser, \"day of month\", 2, 2, date, day, step);\n  }\n\n  static term(day: number, date: DateTimeInit): Parser<DateTimeInit> {\n    date.day = day;\n    return Parser.done(date);\n  }\n\n  static cont(date: DateTimeInit, month: number, step: number): Parser<DateTimeInit> {\n    return new DayOfMonthParser(date, month, step);\n  }\n}\n\n/** @internal */\nexport class WeekdayParser extends Parser<DateTimeInit> {\n  private readonly locale: DateTimeLocale;\n  private readonly date: DateTimeInit | undefined;\n  private readonly output: Output<string> | undefined;\n\n  constructor(locale: DateTimeLocale, date?: DateTimeInit, output?: Output<string>) {\n    super();\n    this.locale = locale;\n    this.date = date;\n    this.output = output;\n  }\n\n  override feed(input: Input): Parser<DateTimeInit> {\n    return WeekdayParser.parse(input, this.locale, this.date, this.output);\n  }\n\n  static parse(input: Input, locale: DateTimeLocale, date?: DateTimeInit,\n               output?: Output<string>): Parser<DateTimeInit> {\n    return DateTimeFormat.parseDateString(input, WeekdayParser, locale, date, output);\n  }\n\n  static term(locale: DateTimeLocale, value: string, date: DateTimeInit, input: Input): Parser<DateTimeInit> {\n    const day = locale.weekdays.indexOf(value);\n    if (day < 0) {\n      return Parser.error(Diagnostic.message(\"expected weekday, but found \" + value, input));\n    }\n    return Parser.done(date);\n  }\n\n  static cont(locale: DateTimeLocale, date: DateTimeInit, output: Output<string>): Parser<DateTimeInit> {\n    return new WeekdayParser(locale, date, output);\n  }\n}\n\n/** @internal */\nexport class ShortWeekdayParser extends Parser<DateTimeInit> {\n  private readonly locale: DateTimeLocale;\n  private readonly date: DateTimeInit | undefined;\n  private readonly output: Output<string> | undefined;\n\n  constructor(locale: DateTimeLocale, date?: DateTimeInit, output?: Output<string>) {\n    super();\n    this.locale = locale;\n    this.date = date;\n    this.output = output;\n  }\n\n  override feed(input: Input): Parser<DateTimeInit> {\n    return ShortWeekdayParser.parse(input, this.locale, this.date, this.output);\n  }\n\n  static parse(input: Input, locale: DateTimeLocale, date?: DateTimeInit,\n               output?: Output<string>): Parser<DateTimeInit> {\n    return DateTimeFormat.parseDateString(input, ShortWeekdayParser, locale, date, output);\n  }\n\n  static term(locale: DateTimeLocale, value: string, date: DateTimeInit, input: Input): Parser<DateTimeInit> {\n    const day = locale.shortWeekdays.indexOf(value);\n    if (day < 0) {\n      return Parser.error(Diagnostic.message(\"expected short weekday, but found \" + value, input));\n    }\n    return Parser.done(date);\n  }\n\n  static cont(locale: DateTimeLocale, date: DateTimeInit, output: Output<string>): Parser<DateTimeInit> {\n    return new ShortWeekdayParser(locale, date, output);\n  }\n}\n\n/** @internal */\nexport class Hour24Parser extends Parser<DateTimeInit> {\n  private readonly date: DateTimeInit | undefined;\n  private readonly hour: number | undefined;\n  private readonly step: number | undefined;\n\n  constructor(date?: DateTimeInit, hour?: number, step?: number) {\n    super();\n    this.date = date;\n    this.hour = hour;\n    this.step = step;\n  }\n\n  override feed(input: Input): Parser<DateTimeInit> {\n    return Hour24Parser.parse(input, this.date, this.hour, this.step);\n  }\n\n  static parse(input: Input, date?: DateTimeInit, hour?: number, step?: number): Parser<DateTimeInit> {\n    return DateTimeFormat.parseDateNumber(input, Hour24Parser, \"hour (24)\", 2, 2, date, hour, step);\n  }\n\n  static term(hour: number, date: DateTimeInit): Parser<DateTimeInit> {\n    date.hour = hour;\n    return Parser.done(date);\n  }\n\n  static cont(date: DateTimeInit, hour: number, step: number): Parser<DateTimeInit> {\n    return new Hour24Parser(date, hour, step);\n  }\n}\n\n/** @internal */\nexport class Hour12Parser extends Parser<DateTimeInit> {\n  private readonly date: DateTimeInit | undefined;\n  private readonly hour: number | undefined;\n  private readonly step: number | undefined;\n\n  constructor(date?: DateTimeInit, hour?: number, step?: number) {\n    super();\n    this.date = date;\n    this.hour = hour;\n    this.step = step;\n  }\n\n  override feed(input: Input): Parser<DateTimeInit> {\n    return Hour12Parser.parse(input, this.date, this.hour, this.step);\n  }\n\n  static parse(input: Input, date?: DateTimeInit, hour?: number, step?: number): Parser<DateTimeInit> {\n    return DateTimeFormat.parseDateNumber(input, Hour12Parser, \"hour (12)\", 2, 2, date, hour, step);\n  }\n\n  static term(hour: number, date: DateTimeInit): Parser<DateTimeInit> {\n    date.hour = (date.hour !== void 0 ? date.hour : 0) + hour;\n    return Parser.done(date);\n  }\n\n  static cont(date: DateTimeInit, hour: number, step: number): Parser<DateTimeInit> {\n    return new Hour12Parser(date, hour, step);\n  }\n}\n\n/** @internal */\nexport class PeriodParser extends Parser<DateTimeInit> {\n  private readonly locale: DateTimeLocale;\n  private readonly date: DateTimeInit | undefined;\n  private readonly output: Output<string> | undefined;\n\n  constructor(locale: DateTimeLocale, date?: DateTimeInit, output?: Output<string>) {\n    super();\n    this.locale = locale;\n    this.date = date;\n    this.output = output;\n  }\n\n  override feed(input: Input): Parser<DateTimeInit> {\n    return PeriodParser.parse(input, this.locale, this.date, this.output);\n  }\n\n  static parse(input: Input, locale: DateTimeLocale, date?: DateTimeInit,\n               output?: Output<string>): Parser<DateTimeInit> {\n    return DateTimeFormat.parseDateString(input, PeriodParser, locale, date, output);\n  }\n\n  static term(locale: DateTimeLocale, value: string, date: DateTimeInit, input: Input): Parser<DateTimeInit> {\n    const period = locale.months.indexOf(value);\n    if (period < 0) {\n      return Parser.error(Diagnostic.message(\"expected period of day, but found \" + value, input));\n    }\n    date.hour = (date.hour || 0) + 12 * period;\n    return Parser.done(date);\n  }\n\n  static cont(locale: DateTimeLocale, date: DateTimeInit, output: Output<string>): Parser<DateTimeInit> {\n    return new PeriodParser(locale, date, output);\n  }\n}\n\n/** @internal */\nexport class MinuteParser extends Parser<DateTimeInit> {\n  private readonly date: DateTimeInit | undefined;\n  private readonly minute: number | undefined;\n  private readonly step: number | undefined;\n\n  constructor(date?: DateTimeInit, minute?: number, step?: number) {\n    super();\n    this.date = date;\n    this.minute = minute;\n    this.step = step;\n  }\n\n  override feed(input: Input): Parser<DateTimeInit> {\n    return MinuteParser.parse(input, this.date, this.minute, this.step);\n  }\n\n  static parse(input: Input, date?: DateTimeInit, minute?: number, step?: number): Parser<DateTimeInit> {\n    return DateTimeFormat.parseDateNumber(input, MinuteParser, \"minute\", 2, 2, date, minute, step);\n  }\n\n  static term(minute: number, date: DateTimeInit): Parser<DateTimeInit> {\n    date.minute = minute;\n    return Parser.done(date);\n  }\n\n  static cont(date: DateTimeInit, minute: number, step: number): Parser<DateTimeInit> {\n    return new MinuteParser(date, minute, step);\n  }\n}\n\n/** @internal */\nexport class SecondParser extends Parser<DateTimeInit> {\n  private readonly date: DateTimeInit | undefined;\n  private readonly second: number | undefined;\n  private readonly step: number | undefined;\n\n  constructor(date?: DateTimeInit, second?: number, step?: number) {\n    super();\n    this.date = date;\n    this.second = second;\n    this.step = step;\n  }\n\n  override feed(input: Input): Parser<DateTimeInit> {\n    return SecondParser.parse(input, this.date, this.second, this.step);\n  }\n\n  static parse(input: Input, date?: DateTimeInit, second?: number, step?: number): Parser<DateTimeInit> {\n    return DateTimeFormat.parseDateNumber(input, SecondParser, \"second\", 2, 2, date, second, step);\n  }\n\n  static term(second: number, date: DateTimeInit): Parser<DateTimeInit> {\n    date.second = second;\n    return Parser.done(date);\n  }\n\n  static cont(date: DateTimeInit, second: number, step: number): Parser<DateTimeInit> {\n    return new SecondParser(date, second, step);\n  }\n}\n\n/** @internal */\nexport class MillisecondParser extends Parser<DateTimeInit> {\n  private readonly date: DateTimeInit | undefined;\n  private readonly millisecond: number | undefined;\n  private readonly step: number | undefined;\n\n  constructor(date?: DateTimeInit, millisecond?: number, step?: number) {\n    super();\n    this.date = date;\n    this.millisecond = millisecond;\n    this.step = step;\n  }\n\n  override feed(input: Input): Parser<DateTimeInit> {\n    return MillisecondParser.parse(input, this.date, this.millisecond, this.step);\n  }\n\n  static parse(input: Input, date?: DateTimeInit, millisecond?: number, step?: number): Parser<DateTimeInit> {\n    return DateTimeFormat.parseDateNumber(input, MillisecondParser, \"millisecond\", 1, 3, date, millisecond, step);\n  }\n\n  static term(millisecond: number, date: DateTimeInit): Parser<DateTimeInit> {\n    date.millisecond = millisecond;\n    return Parser.done(date);\n  }\n\n  static cont(date: DateTimeInit, millisecond: number, step: number): Parser<DateTimeInit> {\n    return new MillisecondParser(date, millisecond, step);\n  }\n}\n\n/** @internal */\nexport class PatternParser extends Parser<DateTimeInit> {\n  private readonly pattern: string;\n  private readonly specifiers: DateTimeSpecifiers;\n  private readonly date: DateTimeInit | undefined;\n  private readonly dateParser: Parser<DateTimeInit> | undefined;\n  private readonly step: number | undefined;\n\n  constructor(pattern: string, specifiers: DateTimeSpecifiers, date?: DateTimeInit,\n              dateParser?: Parser<DateTimeInit>, step?: number) {\n    super();\n    this.pattern = pattern;\n    this.specifiers = specifiers;\n    this.date = date;\n    this.dateParser = dateParser;\n    this.step = step;\n  }\n\n  override feed(input: Input): Parser<DateTimeInit> {\n    return PatternParser.parse(input, this.pattern, this.specifiers, this.date,\n                                     this.dateParser, this.step);\n  }\n\n  static parse(input: Input, pattern: string, specifiers: DateTimeSpecifiers,\n               date: DateTimeInit = {}, dateParser?: Parser<DateTimeInit>,\n               step: number = 0): Parser<DateTimeInit> {\n    let c = 0;\n    const n = pattern.length;\n    while (step < n) {\n      const p = pattern.charCodeAt(step);\n      if (p === 37/*'%'*/) {\n        if (dateParser === void 0) {\n          const s = pattern.charAt(step + 1);\n          const format = specifiers[s];\n          if (format !== void 0) {\n            dateParser = format.parseDateTime(input, date);\n          } else {\n            return Parser.error(Diagnostic.message(\"unknown format specifier: \" + s, input));\n          }\n        } else {\n          dateParser = dateParser.feed(input);\n        }\n        if (dateParser.isDone()) {\n          date = dateParser.bind();\n          dateParser = void 0;\n          step += 2;\n          continue;\n        } else if (dateParser.isError()) {\n          return dateParser.asError();\n        }\n      } else if (input.isCont()) {\n        c = input.head();\n        if (c === p) {\n          input.step();\n          step += 1;\n          continue;\n        } else {\n          return Parser.error(Diagnostic.expected(p, input));\n        }\n      } else if (!input.isEmpty()) {\n        return Parser.error(Diagnostic.unexpected(input));\n      }\n      break;\n    }\n    if (step === n) {\n      return Parser.done(date);\n    }\n    return new PatternParser(pattern, specifiers, date, dateParser, step);\n  }\n}\n","// Copyright 2015-2024 Nstream, inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport type {DateTimeLike} from \"./DateTime\";\nimport {DateTime} from \"./DateTime\";\n\n/** @public */\nexport abstract class TimeInterval {\n  abstract offset(d: DateTimeLike, k?: number): DateTime;\n\n  next(d: DateTimeLike, k?: number): DateTime {\n    return this.floor(this.offset(d, k));\n  }\n\n  abstract floor(d: DateTimeLike): DateTime;\n\n  ceil(d: DateTimeLike): DateTime {\n    if (d instanceof DateTime) {\n      d = new DateTime(d.time - 1, d.zone);\n    } else {\n      d = DateTime.time(d) - 1;\n    }\n    return this.next(this.floor(d), 1);\n  }\n\n  round(t: DateTimeLike): DateTime {\n    const d = DateTime.fromLike(t);\n    const d0 = this.floor(d);\n    const d1 = this.ceil(d);\n    return d.time - d0.time < d1.time - d.time ? d0 : d1;\n  }\n\n  range(t0: DateTimeLike, t1: DateTimeLike, step?: number): DateTime[] {\n    let d0 = this.ceil(t0);\n    const d1 = DateTime.time(t1);\n    const ds: DateTime[] = [];\n    step = typeof step === \"number\" ? Math.floor(step) : 1;\n    if (step > 0) {\n      while (d0.isDefined() && d0.time < d1) {\n        ds.push(d0);\n        d0 = this.next(d0, step);\n      }\n    }\n    return ds;\n  }\n\n  filter(predicate: (d: DateTime) => boolean): TimeInterval {\n    return new FilterTimeInterval(this, predicate);\n  }\n\n  /** @internal */\n  static Year: YearInterval | null = null;\n  static get year(): UnitTimeInterval {\n    if (this.Year === null) {\n      this.Year = new YearInterval();\n    }\n    return this.Year;\n  }\n\n  /** @internal */\n  static Month: MonthInterval | null = null;\n  static get month(): UnitTimeInterval {\n    if (this.Month === null) {\n      this.Month = new MonthInterval();\n    }\n    return this.Month;\n  }\n\n  /** @internal */\n  static Week: WeekInterval | null = null;\n  static get week(): TimeInterval {\n    if (this.Week === null) {\n      this.Week = new WeekInterval();\n    }\n    return this.Week;\n  }\n\n  /** @internal */\n  static Day: DayInterval | null = null;\n  static get day(): UnitTimeInterval {\n    if (this.Day === null) {\n      this.Day = new DayInterval();\n    }\n    return this.Day;\n  }\n\n  /** @internal */\n  static Hour: HourInterval | null = null;\n  static get hour(): UnitTimeInterval {\n    if (this.Hour === null) {\n      this.Hour = new HourInterval();\n    }\n    return this.Hour;\n  }\n\n  /** @internal */\n  static Minute: MinuteInterval | null = null;\n  static get minute(): UnitTimeInterval {\n    if (this.Minute === null) {\n      this.Minute = new MinuteInterval();\n    }\n    return this.Minute;\n  }\n\n  /** @internal */\n  static Second: SecondInterval | null = null;\n  static get second(): UnitTimeInterval {\n    if (this.Second === null) {\n      this.Second = new SecondInterval();\n    }\n    return this.Second;\n  }\n\n  /** @internal */\n  static Millisecond: MillisecondInterval | null = null;\n  static get millisecond(): UnitTimeInterval {\n    if (this.Millisecond === null) {\n      this.Millisecond = new MillisecondInterval();\n    }\n    return this.Millisecond;\n  }\n\n  static years(d0: DateTimeLike, d1: DateTimeLike, step?: number): DateTime[] {\n    return TimeInterval.year.range(d0, d1, step);\n  }\n\n  static months(d0: DateTimeLike, d1: DateTimeLike, step?: number): DateTime[] {\n    return TimeInterval.month.range(d0, d1, step);\n  }\n\n  static weeks(d0: DateTimeLike, d1: DateTimeLike, step?: number): DateTime[] {\n    return TimeInterval.week.range(d0, d1, step);\n  }\n\n  static days(d0: DateTimeLike, d1: DateTimeLike, step?: number): DateTime[] {\n    return TimeInterval.day.range(d0, d1, step);\n  }\n\n  static hours(d0: DateTimeLike, d1: DateTimeLike, step?: number): DateTime[] {\n    return TimeInterval.hour.range(d0, d1, step);\n  }\n\n  static minutes(d0: DateTimeLike, d1: DateTimeLike, step?: number): DateTime[] {\n    return TimeInterval.minute.range(d0, d1, step);\n  }\n\n  static seconds(d0: DateTimeLike, d1: DateTimeLike, step?: number): DateTime[] {\n    return TimeInterval.second.range(d0, d1, step);\n  }\n\n  static milliseconds(d0: DateTimeLike, d1: DateTimeLike, step?: number): DateTime[] {\n    return TimeInterval.millisecond.range(d0, d1, step);\n  }\n\n  /** @internal */\n  static readonly MillisPerSecond: number = 1000;\n  /** @internal */\n  static readonly MillisPerMinute: number = 60 * this.MillisPerSecond;\n  /** @internal */\n  static readonly MillisPerHour: number = 60 * this.MillisPerMinute;\n}\n\n/** @public */\nexport abstract class UnitTimeInterval extends TimeInterval {\n  abstract every(k: number): TimeInterval;\n}\n\n/** @internal */\nexport class FilterTimeInterval extends TimeInterval {\n  constructor(unit: TimeInterval, predicate: (d: DateTime) => boolean) {\n    super();\n    this.unit = unit;\n    this.predicate = predicate;\n  }\n\n  /** @internal */\n  readonly unit: TimeInterval;\n  /** @internal */\n  readonly predicate: (d: DateTime) => boolean;\n\n  override offset(t: DateTimeLike, k?: number): DateTime {\n    let d = DateTime.fromLike(t);\n    k = Math.max(1, typeof k === \"number\" ? Math.floor(k) : 1);\n    while (k < 0) {\n      do {\n        d = this.unit.offset(d, -1);\n      } while (d.isDefined() && !this.predicate(d));\n      k += 1;\n    }\n    while (k > 0) {\n      do {\n        d = this.unit.offset(d, 1);\n      } while (d.isDefined() && !this.predicate(d));\n      k -= 1;\n    }\n    return d;\n  }\n\n  override floor(t: DateTimeLike): DateTime {\n    let d = DateTime.fromLike(t);\n    while (d = this.unit.floor(d), d.isDefined() && !this.predicate(d)) {\n      d = new DateTime(d.time - 1, d.zone);\n    }\n    return d;\n  }\n}\n\n/** @internal */\nexport class YearInterval extends UnitTimeInterval {\n  override offset(t: DateTimeLike, k?: number): DateTime {\n    let d = DateTime.fromLike(t);\n    k = Math.max(1, typeof k === \"number\" ? Math.floor(k) : 1);\n    d = d.withYear(d.year + k);\n    return d;\n  }\n\n  override next(t: DateTimeLike, k?: number): DateTime {\n    const d = DateTime.fromLike(t);\n    k = Math.max(1, typeof k === \"number\" ? Math.floor(k) : 1);\n    return d.withYear(d.year + k).withMonth(0, 1).withHour(0, 0, 0, 0);\n  }\n\n  override floor(t: DateTimeLike): DateTime {\n    const d = DateTime.fromLike(t);\n    return d.withMonth(0, 1).withHour(0, 0, 0, 0);\n  }\n\n  override ceil(t: DateTimeLike): DateTime {\n    let d = DateTime.fromLike(t);\n    d = new DateTime(d.time - 1, d.zone);\n    d = d.withMonth(0, 1).withHour(0, 0, 0, 0);\n    d = d.withYear(d.year + 1);\n    return d.withMonth(0, 1).withHour(0, 0, 0, 0);\n  }\n\n  override every(k: number): TimeInterval {\n    if (k === 1) {\n      return this;\n    } else if (isFinite(k) && k >= 1) {\n      return new YearsInterval(k);\n    }\n    throw new Error(\"\" + k);\n  }\n}\n\n/** @internal */\nexport class YearsInterval extends TimeInterval {\n  private readonly stride: number;\n\n  constructor(stride: number) {\n    super();\n    this.stride = stride;\n  }\n\n  override offset(t: DateTimeLike, k?: number): DateTime {\n    const d = DateTime.fromLike(t);\n    k = Math.max(1, typeof k === \"number\" ? Math.floor(k) : 1);\n    return d.withYear(d.year + k * this.stride);\n  }\n\n  override next(t: DateTimeLike, k?: number): DateTime {\n    let d = DateTime.fromLike(t);\n    k = Math.max(1, typeof k === \"number\" ? Math.floor(k) : 1);\n    d = d.withYear(Math.floor((d.year + k * this.stride) / this.stride) * this.stride);\n    return d.withMonth(0, 1).withHour(0, 0, 0, 0);\n  }\n\n  override floor(t: DateTimeLike): DateTime {\n    let d = DateTime.fromLike(t);\n    d = d.withYear(Math.floor(d.year / this.stride) * this.stride);\n    return d.withMonth(0, 1).withHour(0, 0, 0, 0);\n  }\n\n  override ceil(t: DateTimeLike): DateTime {\n    let d = DateTime.fromLike(t);\n    d = new DateTime(d.time - 1, d.zone);\n    d = d.withYear(Math.floor(d.year / this.stride) * this.stride);\n    d = d.withMonth(0, 1).withHour(0, 0, 0, 0);\n    d = d.withYear(Math.floor((d.year + this.stride) / this.stride) * this.stride);\n    return d.withMonth(0, 1).withHour(0, 0, 0, 0);\n  }\n}\n\n/** @internal */\nexport class MonthInterval extends UnitTimeInterval {\n  override offset(t: DateTimeLike, k?: number): DateTime {\n    const d = DateTime.fromLike(t);\n    k = Math.max(1, typeof k === \"number\" ? Math.floor(k) : 1);\n    return d.withMonth(d.month + k);\n  }\n\n  override next(t: DateTimeLike, k?: number): DateTime {\n    let d = DateTime.fromLike(t);\n    k = Math.max(1, typeof k === \"number\" ? Math.floor(k) : 1);\n    d = d.withMonth(d.month + k);\n    return d.withDay(1).withHour(0, 0, 0, 0);\n  }\n\n  override floor(t: DateTimeLike): DateTime {\n    const d = DateTime.fromLike(t);\n    return d.withDay(1).withHour(0, 0, 0, 0);\n  }\n\n  override ceil(t: DateTimeLike): DateTime {\n    let d = DateTime.fromLike(t);\n    d = new DateTime(d.time - 1, d.zone);\n    d = d.withDay(1).withHour(0, 0, 0, 0);\n    d = d.withMonth(d.month + 1);\n    return d.withDay(1).withHour(0, 0, 0, 0);\n  }\n\n  override every(k: number): TimeInterval {\n    if (k === 1) {\n      return this;\n    } else if (isFinite(k) && k >= 1) {\n      return new FilterTimeInterval(this, MonthInterval.modulo.bind(void 0, k));\n    }\n    throw new Error(\"\" + k);\n  }\n\n  /** @internal */\n  static modulo(k: number, d: DateTime): boolean {\n    const month = d.month;\n    return isFinite(month) && month % k === 0;\n  }\n}\n\n/** @internal */\nexport class WeekInterval extends TimeInterval {\n  readonly day: number;\n\n  constructor(day: number = 0) {\n    super();\n    this.day = day;\n  }\n\n  override offset(t: DateTimeLike, k?: number): DateTime {\n    const d = DateTime.fromLike(t);\n    k = Math.max(1, typeof k === \"number\" ? Math.floor(k) : 1);\n    return d.withDay(d.day + 7 * k);\n  }\n\n  override next(t: DateTimeLike, k?: number): DateTime {\n    let d = DateTime.fromLike(t);\n    k = Math.max(1, typeof k === \"number\" ? Math.floor(k) : 1);\n    d = d.withDay(d.day + 7 * k);\n    d = d.withDay(d.day - (d.weekday + 7 - this.day) % 7);\n    return d.withHour(0, 0, 0, 0);\n  }\n\n  override floor(t: DateTimeLike): DateTime {\n    let d = DateTime.fromLike(t);\n    d = d.withDay(d.day - (d.weekday + 7 - this.day) % 7);\n    return d.withHour(0, 0, 0, 0);\n  }\n\n  override ceil(t: DateTimeLike): DateTime {\n    let d = DateTime.fromLike(t);\n    d = new DateTime(d.time - 1, d.zone);\n    d = d.withDay(d.day - (d.weekday + 7 - this.day) % 7);\n    d = d.withHour(0, 0, 0, 0);\n    d = d.withDay(d.day + 7);\n    return d.withHour(0, 0, 0, 0);\n  }\n}\n\n/** @internal */\nexport class DayInterval extends UnitTimeInterval {\n  override offset(t: DateTimeLike, k?: number): DateTime {\n    const d = DateTime.fromLike(t);\n    k = Math.max(1, typeof k === \"number\" ? Math.floor(k) : 1);\n    return d.withDay(d.day + k);\n  }\n\n  override next(t: DateTimeLike, k?: number): DateTime {\n    let d = DateTime.fromLike(t);\n    k = Math.max(1, typeof k === \"number\" ? Math.floor(k) : 1);\n    d = d.withDay(d.day + k);\n    return d.withHour(0, 0, 0, 0);\n  }\n\n  override floor(t: DateTimeLike): DateTime {\n    const d = DateTime.fromLike(t);\n    return d.withHour(0, 0, 0, 0);\n  }\n\n  override ceil(t: DateTimeLike): DateTime {\n    let d = DateTime.fromLike(t);\n    d = new DateTime(d.time - 1, d.zone);\n    d = d.withHour(0, 0, 0, 0);\n    d = d.withDay(d.day + 1);\n    return d.withHour(0, 0, 0, 0);\n  }\n\n  override every(k: number): TimeInterval {\n    if (k === 1) {\n      return this;\n    } else if (isFinite(k) && k >= 1) {\n      return new FilterTimeInterval(this, DayInterval.modulo.bind(void 0, k));\n    }\n    throw new Error(\"\" + k);\n  }\n\n  /** @internal */\n  static modulo(k: number, d: DateTime): boolean {\n    const day = d.day;\n    return isFinite(day) && day % k === 0;\n  }\n}\n\n/** @internal */\nexport class HourInterval extends UnitTimeInterval {\n  override offset(d: DateTimeLike, k?: number): DateTime {\n    const z = DateTime.zone(d);\n    d = DateTime.time(d);\n    k = Math.max(1, typeof k === \"number\" ? Math.floor(k) : 1);\n    d += k * TimeInterval.MillisPerHour;\n    return new DateTime(d, z);\n  }\n\n  override next(d: DateTimeLike, k?: number): DateTime {\n    const z = DateTime.zone(d);\n    d = DateTime.time(d);\n    k = Math.max(1, typeof k === \"number\" ? Math.floor(k) : 1);\n    d += k * TimeInterval.MillisPerHour;\n    let dtz = z.offset * TimeInterval.MillisPerMinute % TimeInterval.MillisPerHour;\n    if (dtz < 0) {\n      dtz += TimeInterval.MillisPerHour;\n    }\n    d = Math.floor((d - dtz) / TimeInterval.MillisPerHour) * TimeInterval.MillisPerHour + dtz;\n    return new DateTime(d, z);\n  }\n\n  override floor(d: DateTimeLike): DateTime {\n    const z = DateTime.zone(d);\n    d = DateTime.time(d);\n    let dtz = z.offset * TimeInterval.MillisPerMinute % TimeInterval.MillisPerHour;\n    if (dtz < 0) {\n      dtz += TimeInterval.MillisPerHour;\n    }\n    d = Math.floor((d - dtz) / TimeInterval.MillisPerHour) * TimeInterval.MillisPerHour + dtz;\n    return new DateTime(d, z);\n  }\n\n  override ceil(d: DateTimeLike): DateTime {\n    const z = DateTime.zone(d);\n    d = DateTime.time(d);\n    d -= 1;\n    let dtz = z.offset * TimeInterval.MillisPerMinute % TimeInterval.MillisPerHour;\n    if (dtz < 0) {\n      dtz += TimeInterval.MillisPerHour;\n    }\n    d = (Math.floor((d - dtz) / TimeInterval.MillisPerHour) * TimeInterval.MillisPerHour + dtz) + TimeInterval.MillisPerHour;\n    d = Math.floor((d - dtz) / TimeInterval.MillisPerHour) * TimeInterval.MillisPerHour + dtz;\n    return new DateTime(d, z);\n  }\n\n  override every(k: number): TimeInterval {\n    if (k === 1) {\n      return this;\n    } else if (isFinite(k) && k >= 1) {\n      return new FilterTimeInterval(this, HourInterval.modulo.bind(void 0, k));\n    }\n    throw new Error(\"\" + k);\n  }\n\n  /** @internal */\n  static modulo(k: number, d: DateTime): boolean {\n    const hour = d.hour;\n    return isFinite(hour) && hour % k === 0;\n  }\n}\n\n/** @internal */\nexport class MinuteInterval extends UnitTimeInterval {\n  override offset(d: DateTimeLike, k?: number): DateTime {\n    const z = DateTime.zone(d);\n    d = DateTime.time(d);\n    k = Math.max(1, typeof k === \"number\" ? Math.floor(k) : 1);\n    d += k * TimeInterval.MillisPerMinute;\n    return new DateTime(d, z);\n  }\n\n  override next(d: DateTimeLike, k?: number): DateTime {\n    const z = DateTime.zone(d);\n    d = DateTime.time(d);\n    k = Math.max(1, typeof k === \"number\" ? Math.floor(k) : 1);\n    d = Math.floor((d + k * TimeInterval.MillisPerMinute) / TimeInterval.MillisPerMinute) * TimeInterval.MillisPerMinute;\n    return new DateTime(d, z);\n  }\n\n  override floor(d: DateTimeLike): DateTime {\n    const z = DateTime.zone(d);\n    d = DateTime.time(d);\n    d = Math.floor(d / TimeInterval.MillisPerMinute) * TimeInterval.MillisPerMinute;\n    return new DateTime(d, z);\n  }\n\n  override ceil(d: DateTimeLike): DateTime {\n    const z = DateTime.zone(d);\n    d = DateTime.time(d);\n    d = Math.floor(((Math.floor((d - 1) / TimeInterval.MillisPerMinute) * TimeInterval.MillisPerMinute) + TimeInterval.MillisPerMinute) / TimeInterval.MillisPerMinute) * TimeInterval.MillisPerMinute;\n    return new DateTime(d, z);\n  }\n\n  override every(k: number): TimeInterval {\n    if (k === 1) {\n      return this;\n    } else if (isFinite(k) && k >= 1) {\n      return new FilterTimeInterval(this, MinuteInterval.modulo.bind(void 0, k));\n    }\n    throw new Error(\"\" + k);\n  }\n\n  /** @internal */\n  static modulo(k: number, d: DateTime): boolean {\n    const minute = d.minute;\n    return isFinite(minute) && minute % k === 0;\n  }\n}\n\n/** @internal */\nexport class SecondInterval extends UnitTimeInterval {\n  override offset(d: DateTimeLike, k?: number): DateTime {\n    const z = DateTime.zone(d);\n    d = DateTime.time(d);\n    k = Math.max(1, typeof k === \"number\" ? Math.floor(k) : 1);\n    d += k * TimeInterval.MillisPerSecond;\n    return new DateTime(d, z);\n  }\n\n  override next(d: DateTimeLike, k?: number): DateTime {\n    const z = DateTime.zone(d);\n    d = DateTime.time(d);\n    k = Math.max(1, typeof k === \"number\" ? Math.floor(k) : 1);\n    d += k * TimeInterval.MillisPerSecond;\n    d = Math.floor(d / TimeInterval.MillisPerSecond) * TimeInterval.MillisPerSecond;\n    return new DateTime(d, z);\n  }\n\n  override floor(d: DateTimeLike): DateTime {\n    const z = DateTime.zone(d);\n    d = DateTime.time(d);\n    d = Math.floor(d / TimeInterval.MillisPerSecond) * TimeInterval.MillisPerSecond;\n    return new DateTime(d, z);\n  }\n\n  override ceil(d: DateTimeLike): DateTime {\n    const z = DateTime.zone(d);\n    d = DateTime.time(d);\n    d = Math.floor(((Math.floor((d - 1) / TimeInterval.MillisPerSecond) * TimeInterval.MillisPerSecond) + TimeInterval.MillisPerSecond) / TimeInterval.MillisPerSecond) * TimeInterval.MillisPerSecond;\n    return new DateTime(d, z);\n  }\n\n  override every(k: number): TimeInterval {\n    if (k === 1) {\n      return this;\n    } else if (isFinite(k) && k >= 1) {\n      return new FilterTimeInterval(this, SecondInterval.modulo.bind(void 0, k));\n    }\n    throw new Error('' + k);\n  }\n\n  /** @internal */\n  static modulo(k: number, d: DateTime): boolean {\n    const second = d.second;\n    return isFinite(second) && second % k === 0;\n  }\n}\n\n/** @internal */\nexport class MillisecondInterval extends UnitTimeInterval {\n  override offset(d: DateTimeLike, k?: number): DateTime {\n    const z = DateTime.zone(d);\n    d = DateTime.time(d);\n    k = Math.max(1, typeof k === \"number\" ? Math.floor(k) : 1);\n    d += k;\n    return new DateTime(d, z);\n  }\n\n  override next(d: DateTimeLike, k?: number): DateTime {\n    const z = DateTime.zone(d);\n    d = DateTime.time(d);\n    k = Math.max(1, typeof k === \"number\" ? Math.floor(k) : 1);\n    d += k;\n    return new DateTime(d, z);\n  }\n\n  override floor(d: DateTimeLike): DateTime {\n    return DateTime.fromLike(d);\n  }\n\n  override ceil(d: DateTimeLike): DateTime {\n    return DateTime.fromLike(d);\n  }\n\n  override every(k: number): TimeInterval {\n    if (k === 1) {\n      return this;\n    } else if (isFinite(k) && k >= 1) {\n      return new MillisecondsInterval(k);\n    }\n    throw new Error(\"\" + k);\n  }\n}\n\n/** @internal */\nexport class MillisecondsInterval extends TimeInterval {\n  private readonly stride: number;\n\n  constructor(stride: number) {\n    super();\n    if (!isFinite(stride)) {\n      stride = 1;\n    }\n    this.stride = stride;\n  }\n\n  override offset(d: DateTimeLike, k?: number): DateTime {\n    const z = DateTime.zone(d);\n    d = DateTime.time(d);\n    k = Math.max(1, typeof k === \"number\" ? Math.floor(k) : 1);\n    d += k * this.stride;\n    return new DateTime(d, z);\n  }\n\n  override next(d: DateTimeLike, k?: number): DateTime {\n    const z = DateTime.zone(d);\n    d = DateTime.time(d);\n    k = Math.max(1, typeof k === \"number\" ? Math.floor(k) : 1);\n    const stride = this.stride;\n    d = Math.floor((d + k * stride) / stride) * stride;\n    return new DateTime(d, z);\n  }\n\n  override floor(d: DateTimeLike): DateTime {\n    const z = DateTime.zone(d);\n    d = DateTime.time(d);\n    const stride = this.stride;\n    d = Math.floor(d / stride) * stride;\n    return new DateTime(d, z);\n  }\n\n  override ceil(d: DateTimeLike): DateTime {\n    const z = DateTime.zone(d);\n    d = DateTime.time(d);\n    const stride = this.stride;\n    d = Math.floor(((Math.floor((d - 1) / stride) * stride) + stride) / stride) * stride;\n    return new DateTime(d, z);\n  }\n}\n","// Copyright 2015-2024 Nstream, inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport type {Mutable} from \"@swim/util\";\nimport {Domain} from \"@swim/util\";\nimport type {Interpolate} from \"@swim/util\";\nimport {Interpolator} from \"@swim/util\";\nimport type {DateTimeLike} from \"./DateTime\";\nimport {DateTime} from \"./DateTime\";\nimport {TimeRange} from \"./\"; // forward import\n\n/** @public */\nexport interface TimeDomain extends Domain<DateTime>, Interpolate<TimeDomain> {\n  /** @override */\n  readonly 0: DateTime;\n\n  /** @override */\n  readonly 1: DateTime;\n\n  readonly inverse: TimeRange;\n\n  /** @override */\n  contains(t: DateTimeLike): boolean;\n\n  /** @override */\n  union(that: Domain<DateTime>): TimeDomain;\n\n  /** @override */\n  interpolateTo(that: TimeDomain): Interpolator<TimeDomain>;\n  interpolateTo(that: unknown): Interpolator<TimeDomain> | null;\n\n  /** @override */\n  canEqual(that: unknown): boolean;\n\n  /** @override */\n  equals(that: unknown): boolean;\n\n  /** @override */\n  toString(): string;\n}\n\n/** @public */\nexport const TimeDomain = (function (_super: typeof Domain) {\n  const TimeDomain = function (x0: DateTime, x1: DateTime): TimeDomain {\n    const domain = function (t: DateTime): number {\n      const t0 = domain[0].time;\n      const t1 = domain[1].time;\n      const dt = t1 - t0;\n      return dt !== 0 ? (t.time - t0) / dt : 0;\n    } as TimeDomain;\n    Object.setPrototypeOf(domain, TimeDomain.prototype);\n    (domain as Mutable<typeof domain>)[0] = x0;\n    (domain as Mutable<typeof domain>)[1] = x1;\n    return domain;\n  } as {\n    (x0: DateTime, x1: DateTime): TimeDomain;\n\n    /** @internal */\n    prototype: TimeDomain;\n  };\n\n  TimeDomain.prototype = Object.create(_super.prototype);\n  TimeDomain.prototype.constructor = TimeDomain;\n\n  Object.defineProperty(TimeDomain.prototype, \"inverse\", {\n    get(this: TimeDomain): TimeRange {\n      return TimeRange(this[0], this[1]);\n    },\n    configurable: true,\n  });\n\n  TimeDomain.prototype.contains = function (t: DateTimeLike): boolean {\n    t = DateTime.time(t);\n    return this[0].time <= t && t <= this[1].time;\n  };\n\n  TimeDomain.prototype.union = function (that: Domain<DateTime>): TimeDomain {\n    const t0Min = this[0];\n    const t0Max = this[1];\n    const t1Min = that[0];\n    const t1Max = that[1];\n    const tMin = t0Min.time <= t1Min.time ? t0Min : t1Min;\n    const tMax = t0Max.time >= t1Max.time ? t0Max : t1Max;\n    return TimeDomain(tMin, tMax);\n  };\n\n  TimeDomain.prototype.interpolateTo = function (this: TimeDomain, that: unknown): Interpolator<TimeDomain> | null {\n    if (that instanceof TimeDomain) {\n      return TimeDomainInterpolator(this, that);\n    }\n    return null;\n  } as typeof TimeDomain.prototype.interpolateTo;\n\n  TimeDomain.prototype.canEqual = function (that: unknown): boolean {\n    return that instanceof TimeDomain;\n  };\n\n  TimeDomain.prototype.equals = function (that: unknown): boolean {\n    if (this === that) {\n      return true;\n    } else if (that instanceof TimeDomain) {\n      return that.canEqual(this) && this[0].equals(that[0]) && this[1].equals(that[1]);\n    }\n    return false;\n  };\n\n  TimeDomain.prototype.toString = function (): string {\n    return \"TimeDomain(\" + this[0] + \", \" + this[1] + \")\";\n  };\n\n  return TimeDomain;\n})(Domain);\n\n/** @internal */\nexport const TimeDomainInterpolator = (function (_super: typeof Interpolator) {\n  const TimeDomainInterpolator = function (x0: TimeDomain, x1: TimeDomain): Interpolator<TimeDomain> {\n    const interpolator = function (u: number): TimeDomain {\n      const x0 = interpolator[0];\n      const x00 = x0[0];\n      const x01 = x0[1];\n      const x1 = interpolator[1];\n      const x10 = x1[0];\n      const x11 = x1[1];\n      return TimeDomain(new DateTime(x00.time + u * (x10.time - x00.time), u === 0 ? x00.zone : x10.zone),\n                        new DateTime(x01.time + u * (x11.time - x01.time), u === 0 ? x01.zone : x11.zone));\n    } as Interpolator<TimeDomain>;\n    Object.setPrototypeOf(interpolator, TimeDomainInterpolator.prototype);\n    (interpolator as Mutable<typeof interpolator>)[0] = x0;\n    (interpolator as Mutable<typeof interpolator>)[1] = x1;\n    return interpolator;\n  } as {\n    (x0: TimeDomain, x1: TimeDomain): Interpolator<TimeDomain>;\n\n    /** @internal */\n    prototype: Interpolator<TimeDomain>;\n  };\n\n  TimeDomainInterpolator.prototype = Object.create(_super.prototype);\n  TimeDomainInterpolator.prototype.constructor = TimeDomainInterpolator;\n\n  return TimeDomainInterpolator;\n})(Interpolator);\n","// Copyright 2015-2024 Nstream, inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport type {Mutable} from \"@swim/util\";\nimport {Range} from \"@swim/util\";\nimport type {Interpolate} from \"@swim/util\";\nimport {Interpolator} from \"@swim/util\";\nimport {DateTime} from \"./DateTime\";\nimport {TimeDomain} from \"./TimeDomain\";\n/** @public */\nexport interface TimeRange extends Range<DateTime>, Interpolate<TimeRange> {\n  /** @override */\n  readonly 0: DateTime;\n\n  /** @override */\n  readonly 1: DateTime;\n\n  readonly inverse: TimeDomain;\n\n  /** @override */\n  union(that: Range<DateTime>): TimeRange;\n\n  /** @override */\n  interpolateTo(that: TimeRange): Interpolator<TimeRange>;\n  interpolateTo(that: unknown): Interpolator<TimeRange> | null;\n\n  /** @override */\n  canEqual(that: unknown): boolean;\n\n  /** @override */\n  equals(that: unknown): boolean;\n\n  /** @override */\n  toString(): string;\n}\n\n/** @public */\nexport const TimeRange = (function (_super: typeof Range) {\n  const TimeRange = function (y0: DateTime, y1: DateTime): TimeRange {\n    const range = function (u: number): DateTime {\n      const t0 = range[0].time;\n      const t1 = range[1].time;\n      return new DateTime(t0 + u * (t1 - t0), u === 0 ? range[0].zone : range[1].zone);\n    } as TimeRange;\n    Object.setPrototypeOf(range, TimeRange.prototype);\n    (range as Mutable<typeof range>)[0] = y0;\n    (range as Mutable<typeof range>)[1] = y1;\n    return range;\n  } as {\n    (y0: DateTime, y1: DateTime): TimeRange;\n\n    /** @internal */\n    prototype: TimeRange;\n  };\n\n  TimeRange.prototype = Object.create(_super.prototype);\n  TimeRange.prototype.constructor = TimeRange;\n\n  Object.defineProperty(TimeRange.prototype, \"inverse\", {\n    get(this: TimeRange): TimeDomain {\n      return TimeDomain(this[0], this[1]);\n    },\n    configurable: true,\n  });\n\n  TimeRange.prototype.union = function (that: Range<DateTime>): TimeRange {\n    const t00 = this[0];\n    const t01 = this[1];\n    const t10 = that[0];\n    const t11 = that[1];\n    let t0: DateTime;\n    let t1: DateTime;\n    if (t00.time <= t01.time && t10.time <= t11.time) {\n      t0 = t00.time <= t10.time ? t00 : t10;\n      t1 = t01.time >= t11.time ? t01 : t11;\n    } else if (t00.time >= t01.time && t10.time >= t11.time) {\n      t0 = t00.time >= t10.time ? t00 : t10;\n      t1 = t01.time <= t11.time ? t01 : t11;\n    } else if (t00.time <= t01.time && t10.time >= t11.time) {\n      t0 = t00.time <= t11.time ? t00 : t11;\n      t1 = t01.time >= t10.time ? t01 : t10;\n    } else { // t00.time >= t01.time && t10.time <= t11.time\n      t0 = t01.time <= t10.time ? t01 : t10;\n      t1 = t00.time >= t11.time ? t00 : t11;\n    }\n    return TimeRange(t0, t1);\n  };\n\n  TimeRange.prototype.interpolateTo = function (this: TimeRange, that: unknown): Interpolator<TimeRange> | null {\n    if (that instanceof TimeRange) {\n      return TimeRangeInterpolator(this, that);\n    }\n    return null;\n  } as typeof TimeRange.prototype.interpolateTo;\n\n  TimeRange.prototype.canEqual = function (that: unknown): boolean {\n    return that instanceof TimeRange;\n  };\n\n  TimeRange.prototype.equals = function (that: unknown): boolean {\n    if (this === that) {\n      return true;\n    } else if (that instanceof TimeRange) {\n      return that.canEqual(this) && this[0].equals(that[0]) && this[1].equals(that[1]);\n    }\n    return false;\n  };\n\n  TimeRange.prototype.toString = function (): string {\n    return \"TimeRange(\" + this[0] + \", \" + this[1] + \")\";\n  };\n\n  return TimeRange;\n})(Range);\n\n/** @internal */\nexport const TimeRangeInterpolator = (function (_super: typeof Interpolator) {\n  const TimeRangeInterpolator = function (y0: TimeRange, y1: TimeRange): Interpolator<TimeRange> {\n    const interpolator = function (u: number): TimeRange {\n      const y0 = interpolator[0];\n      const y00 = y0[0];\n      const y01 = y0[1];\n      const y1 = interpolator[1];\n      const y10 = y1[0];\n      const y11 = y1[1];\n      return TimeRange(new DateTime(y00.time + u * (y10.time - y00.time), u === 0 ? y00.zone : y10.zone),\n                       new DateTime(y01.time + u * (y11.time - y01.time), u === 0 ? y01.zone : y11.zone));\n    } as Interpolator<TimeRange>;\n    Object.setPrototypeOf(interpolator, TimeRangeInterpolator.prototype);\n    (interpolator as Mutable<typeof interpolator>)[0] = y0;\n    (interpolator as Mutable<typeof interpolator>)[1] = y1;\n    return interpolator;\n  } as {\n    (y0: TimeRange, y1: TimeRange): Interpolator<TimeRange>;\n\n    /** @internal */\n    prototype: Interpolator<TimeRange>;\n  };\n\n  TimeRangeInterpolator.prototype = Object.create(_super.prototype);\n  TimeRangeInterpolator.prototype.constructor = TimeRangeInterpolator;\n\n  return TimeRangeInterpolator;\n})(Interpolator);\n","// Copyright 2015-2024 Nstream, inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport type {Mutable} from \"@swim/util\";\nimport {Equivalent} from \"@swim/util\";\nimport {Mapping} from \"@swim/util\";\nimport type {Interpolate} from \"@swim/util\";\nimport {Interpolator} from \"@swim/util\";\nimport {LinearRange} from \"@swim/util\";\nimport {ContinuousScale} from \"@swim/util\";\nimport type {DateTimeLike} from \"./DateTime\";\nimport {DateTime} from \"./DateTime\";\nimport {TimeDomain} from \"./TimeDomain\";\n\n/** @public */\nexport interface TimeScale extends ContinuousScale<DateTime, number>, Interpolate<TimeScale> {\n  /** @override */\n  readonly domain: TimeDomain;\n\n  /** @override */\n  readonly range: LinearRange;\n\n  /** @override */\n  readonly inverse: Mapping<number, DateTime>;\n\n  /** @override */\n  withDomain(domain: TimeDomain): TimeScale;\n  withDomain(x0: DateTimeLike, x1: DateTimeLike): TimeScale;\n\n  /** @override */\n  overRange(range: LinearRange): TimeScale;\n  overRange(y0: number, y1: number): TimeScale;\n\n  /** @override */\n  clampDomain(xMin: DateTime | undefined, xMax: DateTime | undefined,\n              zMin: number | undefined, zMax: number | undefined,\n              epsilon?: number): TimeScale;\n\n  /** @override */\n  solveDomain(x1: DateTime, y1: number, x2?: DateTime, y2?: number,\n              reflect?: boolean, epsilon?: number): TimeScale;\n\n  /** @override */\n  interpolateTo(that: TimeScale): Interpolator<TimeScale>;\n  interpolateTo(that: unknown): Interpolator<TimeScale> | null;\n\n  /** @override */\n  canEqual(that: unknown): boolean;\n\n  /** @override */\n  equals(that: unknown): boolean;\n\n  /** @override */\n  toString(): string;\n}\n\n/** @public */\nexport const TimeScale = (function (_super: typeof ContinuousScale) {\n  const TimeScale = function (domain: TimeDomain, range: LinearRange): TimeScale {\n    const scale = function (x: DateTime): number {\n      return scale.range(scale.domain(x));\n    } as TimeScale;\n    Object.setPrototypeOf(scale, TimeScale.prototype);\n    (scale as Mutable<typeof scale>).domain = domain;\n    (scale as Mutable<typeof scale>).range = range;\n    return scale;\n  } as {\n    (domain: TimeDomain, range: LinearRange): TimeScale;\n\n    /** @internal */\n    prototype: TimeScale;\n  };\n\n  TimeScale.prototype = Object.create(_super.prototype);\n  TimeScale.prototype.constructor = TimeScale;\n\n  Object.defineProperty(TimeScale.prototype, \"inverse\", {\n    get(this: TimeScale): Mapping<number, DateTime> {\n      return Mapping(this.range.inverse, this.domain.inverse);\n    },\n    configurable: true,\n  });\n\n  TimeScale.prototype.withDomain = function (x0: TimeDomain | DateTimeLike, x1?: DateTimeLike): TimeScale {\n    let domain: TimeDomain;\n    if (arguments.length === 1) {\n      domain = x0 as TimeDomain;\n    } else {\n      x0 = DateTime.fromLike(x0 as DateTimeLike);\n      x1 = DateTime.fromLike(x1!);\n      domain = TimeDomain(x0, x1);\n    }\n    return TimeScale(domain, this.range);\n  };\n\n  TimeScale.prototype.overRange = function (y0: LinearRange | number, y1?: number): TimeScale {\n    let range: LinearRange;\n    if (arguments.length === 1) {\n      range = y0 as LinearRange;\n    } else {\n      range = LinearRange(y0 as number, y1!);\n    }\n    return TimeScale(this.domain, range);\n  };\n\n  TimeScale.prototype.clampDomain = function (xMin: DateTime | undefined, xMax: DateTime | undefined,\n                                              zMin: number | undefined, zMax: number | undefined,\n                                              epsilon?: number): TimeScale {\n    if (epsilon === void 0) {\n      epsilon = Equivalent.Epsilon;\n    }\n    const x0 = this.domain[0];\n    const x1 = this.domain[1];\n    let t0 = x0.time;\n    let t1 = x1.time;\n    const tMin = xMin !== void 0 ? xMin.time : void 0;\n    const tMax = xMax !== void 0 ? xMax.time : void 0;\n    if (tMin !== void 0 && tMax !== void 0 && Math.abs(t1 - t0) > tMax - tMin) {\n      if (t0 < t1) {\n        t0 = tMin;\n        t1 = tMax;\n      } else {\n        t1 = tMin;\n        t0 = tMax;\n      }\n    } else if (tMin !== void 0) {\n      if (t0 < t1 && t0 < tMin) {\n        t1 += tMin - t0;\n        t0 = tMin;\n      } else if (t1 < t0 && t1 < tMin) {\n        t0 += tMin - t1;\n        t1 = tMin;\n      }\n    }\n    if (tMax !== void 0) {\n      if (t0 < t1 && t1 > tMax) {\n        t0 -= t1 - tMax;\n        t1 = tMax;\n      } else if (t1 < t0 && t0 > tMax) {\n        t1 -= t0 - tMax;\n        t0 = tMax;\n      }\n    }\n\n    const y0 = this(x0);\n    const y1 = this(x1);\n    const dy = y0 < y1 ? y1 - y0 : y0 - y1;\n    const z = Math.abs(dy / (t1 - t0));\n    if (zMin !== void 0 && z < 1 / zMin) {\n      const dz = dy * zMin;\n      const tSum = t0 + t1;\n      t0 = (tSum - dz) / 2;\n      t1 = (tSum + dz) / 2;\n    } else if (zMax !== void 0 && z > 1 / zMax) {\n      const dz = dy * zMax;\n      const tSum = t0 + t1;\n      t0 = (tSum - dz) / 2;\n      t1 = (tSum + dz) / 2;\n    }\n\n    if (Math.abs(t0 - x0.time) < epsilon && Math.abs(t1 - x1.time) < epsilon) {\n      return this;\n    }\n    return TimeScale(TimeDomain(new DateTime(t0, x0.zone), new DateTime(t1, x1.zone)), this.range);\n  };\n\n  TimeScale.prototype.solveDomain = function (x1: DateTime, y1: number, x2?: DateTime, y2?: number,\n                                              reflect?: boolean, epsilon?: number): TimeScale {\n    if (epsilon === void 0) {\n      epsilon = Equivalent.Epsilon;\n    }\n    const dt = this.domain[1].time - this.domain[0].time;\n    const y0 = this.range[0];\n    const y3 = this.range[1];\n    const t1 = x1.time;\n    const t2 = x2 !== void 0 ? x2.time : void 0;\n    let m: number;\n    if (t2 === void 0 || y2 === void 0 || Math.abs(t2 - t1) < epsilon || Math.abs(y2 - y1) < epsilon) {\n      m = (y3 - y0) / (dt !== 0 ? dt : epsilon);\n    } else {\n      m = (y2 - y1) / (t2 - t1);\n      if ((reflect === void 0 || !reflect) && (m < 0 !== (y3 - y0) / dt < 0)) {\n        m = -m;\n      }\n    }\n    const b = y1 - m * t1;\n    const t0 = (y0 - b) / m;\n    const t3 = (y3 - b) / m;\n\n    if (Math.abs(t0 - this.domain[0].time) < epsilon && Math.abs(t3 - this.domain[1].time) < epsilon) {\n      return this;\n    }\n    return TimeScale(TimeDomain(new DateTime(t0, this.domain[0].zone), new DateTime(t3, this.domain[1].zone)), this.range);\n  };\n\n  TimeScale.prototype.interpolateTo = function (this: TimeScale, that: unknown): Interpolator<TimeScale> | null {\n    if (that instanceof TimeScale) {\n      return TimeScaleInterpolator(this, that);\n    }\n    return null;\n  } as typeof TimeScale.prototype.interpolateTo;\n\n  TimeScale.prototype.canEqual = function (that: unknown): boolean {\n    return that instanceof TimeScale;\n  };\n\n  TimeScale.prototype.equals = function (that: unknown): boolean {\n    if (this === that) {\n      return true;\n    } else if (that instanceof TimeScale) {\n      return this.domain.equals(that.domain) && this.range.equals(that.range);\n    }\n    return false;\n  };\n\n  TimeScale.prototype.toString = function (): string {\n    return \"TimeScale(\" + this.domain + \", \" + this.range + \")\";\n  };\n\n  return TimeScale;\n})(ContinuousScale);\n\n/** @internal */\nexport const TimeScaleInterpolator = (function (_super: typeof Interpolator) {\n  const TimeScaleInterpolator = function (s0: TimeScale, s1: TimeScale): Interpolator<TimeScale> {\n    const interpolator = function (u: number): TimeScale {\n      const s0 = interpolator[0];\n      const s1 = interpolator[1];\n      const x0 = s0.domain;\n      const x00 = x0[0].time;\n      const x01 = x0[1].time;\n      const x1 = s1.domain;\n      const x10 = x1[0].time;\n      const x11 = x1[1].time;\n      const domain = TimeDomain(new DateTime(x00 + u * (x10 - x00), u === 0 ? x0[0].zone : x1[0].zone),\n                                new DateTime(x01 + u * (x11 - x01), u === 0 ? x0[1].zone : x1[1].zone));\n      const y0 = s0.range;\n      const y00 = y0[0];\n      const y01 = y0[1];\n      const y1 = s1.range;\n      const y10 = y1[0];\n      const y11 = y1[1];\n      const range = LinearRange(y00 + u * (y10 - y00), y01 + u * (y11 - y01));\n      return TimeScale(domain, range);\n    } as Interpolator<TimeScale>;\n    Object.setPrototypeOf(interpolator, TimeScaleInterpolator.prototype);\n    (interpolator as Mutable<typeof interpolator>)[0] = s0;\n    (interpolator as Mutable<typeof interpolator>)[1] = s1;\n    return interpolator;\n  } as {\n    (s0: TimeScale, s1: TimeScale): Interpolator<TimeScale>;\n\n    /** @internal */\n    prototype: Interpolator<TimeScale>;\n  };\n\n  TimeScaleInterpolator.prototype = Object.create(_super.prototype);\n  TimeScaleInterpolator.prototype.constructor = TimeScaleInterpolator;\n\n  return TimeScaleInterpolator;\n})(Interpolator);\n"],"names":["TimeZoneLike","Symbol","hasInstance","instance","TimeZone","constructor","name","offset","this","isUTC","isLocal","Date","getTimezoneOffset","equals","that","_a","hashCode","Murmur3","mash","mix","Constructors","hash","Numbers","debug","output","write","toString","Format","utc","local","forOffset","create","forName","fromLike","value","zone","TypeError","fromValue","stringValue","numberValue","form","TimeZoneForm","Lazy","__esDecorate","_static_utc_decorators","kind","static","private","access","has","obj","get","metadata","_metadata","_staticExtraInitializers","_static_local_decorators","_static_form_decorators","__runInitializers","Form","unit","super","Object","defineProperty","enumerable","configurable","withUnit","mold","Text","from","Num","cast","item","toValue","DateTimeLike","DateTime","DateTimeInit","Objects","hasAnyKey","time","isDefined","isFinite","getTime","year","toUTCLocalDate","getUTCFullYear","withYear","month","day","hour","minute","second","millisecond","date","setUTCFullYear","setUTCMonth","setUTCDate","setUTCHours","setUTCMinutes","setUTCSeconds","setUTCMilliseconds","fromUTCLocalDate","getUTCMonth","withMonth","getUTCDate","withDay","getUTCHours","withHour","getUTCMinutes","withMinute","getUTCSeconds","withSecond","getUTCMilliseconds","withMillisecond","weekday","getUTCDay","toDate","valueOf","interpolateTo","DateTimeInterpolator","compareTo","x","y","NaN","equivalentTo","epsilon","equivalent","display","format","DateTimeFormat","iso8601","writeDate","current","now","parse","fromInit","init","UTC","positional","header","forEach","index","key","Value","DateTimeForm","_super","d0","d1","interpolator","u","setPrototypeOf","prototype","Interpolator","millis","string","e","DateTimeParser","Parser","dateParser","feed","input","isDone","done","bind","isError","asError","DateTimeLocale","periods","Periods","weekdays","Weekdays","shortWeekdays","ShortWeekdays","months","Months","shortMonths","ShortMonths","standard","_static_standard_decorators","DateTimeSpecifiers","locale","specifiers","Y","m","monthOfYear","B","b","shortMonth","d","dayOfMonth","A","a","shortWeekday","H","hour24","I","hour12","i","p","period","M","S","L","withLocale","Unicode","stringOutput","stringInput","isCont","isSpace","head","step","parser","parseDate","error","Diagnostic","unexpected","parseDateTime","Year","YearFormat","MonthOfYear","MonthOfYearFormat","MonthFormat","Month","ShortMonthFormat","ShortMonth","padChar","DayOfMonthZeroPadded","DayOfMonthFormat","DayOfMonthSpacePadded","WeekdayFormat","Weekday","ShortWeekdayFormat","ShortWeekday","Hour24","Hour24Format","Hour12ZeroPadded","Hour12Format","Hour12SpacePadded","PeriodFormat","Period","Minute","MinuteFormat","Second","SecondFormat","Millisecond","MillisecondFormat","pattern","PatternFormat","Iso8601","parseDateNumber","factory","desc","minDigits","maxDigits","c","Base10","isDigit","decodeDigit","isEmpty","term","expected","cont","parseDateString","isAlpha","writeDateNumber2","c1","Math","floor","c0","writeDateNumber3","c2","writeDateNumber4","c3","YearParser","MonthOfYearParser","MonthParser","ShortMonthParser","DayOfMonthParser","WeekdayParser","ShortWeekdayParser","Hour24Parser","Hour12Parser","PeriodParser","MinuteParser","SecondParser","MillisecondParser","j","length","charCodeAt","slice","s","charAt","f","PatternParser","indexOf","message","n","TimeInterval","next","k","ceil","round","t","range","t0","t1","ds","push","filter","predicate","FilterTimeInterval","YearInterval","MonthInterval","week","Week","WeekInterval","Day","DayInterval","Hour","HourInterval","MinuteInterval","SecondInterval","MillisecondInterval","years","weeks","days","hours","minutes","seconds","milliseconds","MillisPerSecond","MillisPerMinute","MillisPerHour","UnitTimeInterval","max","every","YearsInterval","Error","stride","modulo","z","dtz","MillisecondsInterval","TimeDomain","x0","x1","domain","dt","TimeRange","contains","union","t0Min","t0Max","t1Min","t1Max","tMin","tMax","TimeDomainInterpolator","canEqual","Domain","x00","x01","x10","x11","y0","y1","t00","t01","t10","t11","TimeRangeInterpolator","Range","y00","y01","y10","y11","TimeScale","scale","Mapping","inverse","withDomain","arguments","overRange","LinearRange","clampDomain","xMin","xMax","zMin","zMax","Equivalent","Epsilon","abs","dy","dz","tSum","solveDomain","x2","y2","reflect","y3","t2","t3","TimeScaleInterpolator","ContinuousScale","s0","s1"],"mappings":"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"}