{"version":3,"sources":["../src/ZonedDateTime.ts"],"names":[],"mappings":"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","file":"ZonedDateTime.d.ts","sourcesContent":["/*!\r\n   Copyright 2019 Ron Buckton\r\n\r\n   Licensed under the Apache License, Version 2.0 (the \"License\");\r\n   you may not use this file except in compliance with the License.\r\n   You may obtain a copy of the License at\r\n\r\n       http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n   Unless required by applicable law or agreed to in writing, software\r\n   distributed under the License is distributed on an \"AS IS\" BASIS,\r\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n   See the License for the specific language governing permissions and\r\n   limitations under the License.\r\n*/\r\nimport { R } from 'retemplate';\r\nimport { normalizeString, ZONEDDATETIME_HASH_SEED } from './internal/core';\r\nimport { getDate, getDatePart, getCalendarDateFromOrdinalDate, getCalendarDateFromWeekDate, DatePart } from './internal/date';\r\nimport { getTime, getTimePart, TimePart } from './internal/time';\r\nimport { getInstant, getDateOfInstant, getTimeOfInstant, adjustInstant } from './internal/instant';\r\nimport { INSTANT, ZONE } from './internal/symbols';\r\nimport { ZONED_DATETIME_EXTENDED, ZONED_DATETIME_BASIC } from './internal/patterns';\r\nimport { Temporal, Components, DateDelta, TimeDelta, DateUnit, TimeUnit } from './types';\r\nimport { Zone } from './Zone';\r\nimport { Clock } from './Clock';\r\nimport { CivilDate } from './CivilDate';\r\nimport { CivilTime } from './CivilTime';\r\nimport { CivilDateTime } from './CivilDateTime';\r\nimport { OffsetTime } from './OffsetTime';\r\nimport { OffsetDateTime } from './OffsetDateTime';\r\nimport { Instant } from './Instant';\r\nimport { Equatable, Comparable } from '@esfx/equatable';\r\n\r\nconst zonedDateTimeExtendedRegExp = new RegExp(R`^${ZONED_DATETIME_EXTENDED}$`);\r\nconst zonedDateTimeBasicRegExp = new RegExp(R`^${ZONED_DATETIME_BASIC}$`);\r\n\r\nexport class ZonedDateTime implements Temporal, Equatable, Comparable {\r\n    /* @internal */ private [INSTANT]: Instant;\r\n    /* @internal */ private [ZONE]: Zone;\r\n\r\n    constructor(instant: Instant, zone: Zone | string) {\r\n        if (typeof zone === \"string\") zone = Zone.fromString(zone);\r\n        this[INSTANT] = instant;\r\n        this[ZONE] = zone;\r\n    }\r\n\r\n    get instant() { return this[INSTANT]; }\r\n    get zone() { return this[ZONE]; }\r\n    get ianaZone() { return this.zone.ianaZone; }\r\n    get timeZone() { return this.zone.ianaZone || this.offsetString; }\r\n    get offset() { return this.zone.getOffset(this.instant); }\r\n    get offsetSeconds() { return this.zone.getOffsetSeconds(this.instant); }\r\n    get offsetString() { return this.zone.getOffsetString(this.instant); }\r\n    get year() { return getDatePart(toDate(this.instant, this.offsetSeconds), DatePart.year); }\r\n    get month() { return getDatePart(toDate(this.instant, this.offsetSeconds), DatePart.month); }\r\n    get day() { return getDatePart(toDate(this.instant, this.offsetSeconds), DatePart.day); }\r\n    get dayOfYear() { return getDatePart(toDate(this.instant, this.offsetSeconds), DatePart.dayOfYear); }\r\n    get dayOfWeek() { return getDatePart(toDate(this.instant, this.offsetSeconds), DatePart.dayOfWeek); }\r\n    get weekOfYear() { return getDatePart(toDate(this.instant, this.offsetSeconds), DatePart.weekOfYear); }\r\n    get hour() { return getTimePart(toTime(this.instant, this.offsetSeconds), TimePart.hour); }\r\n    get minute() { return getTimePart(toTime(this.instant, this.offsetSeconds), TimePart.minute); }\r\n    get second() { return getTimePart(toTime(this.instant, this.offsetSeconds), TimePart.second); }\r\n    get millisecond() { return getTimePart(toTime(this.instant, this.offsetSeconds), TimePart.millisecond); }\r\n    get nanosecond() { return getTimePart(toTime(this.instant, this.offsetSeconds), TimePart.nanosecond); }\r\n\r\n    plus(deltas?: Components<DateDelta | TimeDelta>) {\r\n        return this\r\n            .toCivilDateTime()\r\n            .plus(deltas)\r\n            .withZone(this.zone);\r\n    }\r\n\r\n    minus(deltas?: Components<DateDelta | TimeDelta>) {\r\n        return this\r\n            .toCivilDateTime()\r\n            .minus(deltas)\r\n            .withZone(this.zone);\r\n    }\r\n\r\n    with(components?: Components<DateUnit | TimeUnit>) {\r\n        return this\r\n            .toCivilDateTime()\r\n            .with(components)\r\n            .withZone(this.zone);\r\n    }\r\n\r\n    /**\r\n     * Returns a new [[ZonedDateTime]] with the same [[Instant]], but for a different time-zone.\r\n     * @param zone The new time zone.\r\n     * @example\r\n     * const a = ZonedDateTime.fromString(\"2019-01-04T15:38:00.000000000-08:00[America/Los_Angeles]\");\r\n     * const b = a.withZoneSameInstant(\"America/New_York\");\r\n     * console.log(b);\r\n     *\r\n     * // prints:\r\n     * // 2019-01-04T18:38:00.000000000-05:00[America/New_York]\r\n     */\r\n    withZoneSameInstant(zone: Zone | string) {\r\n        if (typeof zone === \"string\") zone = Zone.fromString(zone);\r\n        if (this.zone.equals(zone)) return this;\r\n        return new ZonedDateTime(this.instant, zone);\r\n    }\r\n\r\n    /**\r\n     * Returns a new [[ZonedDateTime]] with the same local time, but for a different time-zone.\r\n     * @param zone The new time zone.\r\n     * @example\r\n     * const a = ZonedDateTime.fromString(\"2019-01-04T15:38:00.000000000-08:00[America/Los_Angeles]\");\r\n     * const b = a.withZoneSameLocal(\"America/New_York\");\r\n     * console.log(b);\r\n     *\r\n     * // prints:\r\n     * // 2019-01-04T15:38:00.000000000-05:00[America/New_York]\r\n     */\r\n    withZoneSameLocal(zone: Zone | string) {\r\n        if (typeof zone === \"string\") zone = Zone.fromString(zone);\r\n        if (this.zone.equals(zone)) return this;\r\n\r\n        const tz1 = zone.getOffsetSeconds(this.instant);\r\n        let instant = this.instant.plus({ seconds: this.offsetSeconds - tz1 });\r\n\r\n        // check for possible DST adjustment\r\n        const tz2 = zone.getOffsetSeconds(instant);\r\n        if (tz2 !== tz1) {\r\n            instant = instant.plus({ seconds: tz1 - tz2 });\r\n        }\r\n\r\n        return new ZonedDateTime(instant, zone);\r\n    }\r\n\r\n    until(other: ZonedDateTime) {\r\n        if (!(other instanceof ZonedDateTime)) throw new TypeError(\"ZonedDateTime expected: other\");\r\n        return this\r\n            .toCivilDateTime()\r\n            .until(other\r\n                .withZoneSameInstant(this.zone)\r\n                .toCivilDateTime());\r\n    }\r\n\r\n    since(other: ZonedDateTime) {\r\n        if (!(other instanceof ZonedDateTime)) throw new TypeError(\"ZonedDateTime expected: other\");\r\n        return other.until(this);\r\n    }\r\n\r\n    equals(other: ZonedDateTime) {\r\n        return other !== null\r\n            && other !== undefined\r\n            && this.instant.equals(other.instant)\r\n            && this.zone.equals(other.zone);\r\n    }\r\n\r\n    compareTo(other: ZonedDateTime): number {\r\n        return this.instant.compareTo(other.instant);\r\n    }\r\n\r\n    toCivilDate() {\r\n        return new CivilDate(\r\n            this.year,\r\n            this.month,\r\n            this.day);\r\n    }\r\n\r\n    toCivilTime() {\r\n        return new CivilTime(\r\n            this.hour,\r\n            this.minute,\r\n            this.second,\r\n            this.millisecond,\r\n            this.nanosecond);\r\n    }\r\n\r\n    toCivilDateTime() {\r\n        return new CivilDateTime(\r\n            this.year,\r\n            this.month,\r\n            this.day,\r\n            this.hour,\r\n            this.minute,\r\n            this.second,\r\n            this.millisecond,\r\n            this.nanosecond);\r\n    }\r\n\r\n    toOffsetTime() {\r\n        return new OffsetTime(\r\n            this.zone.getOffset(this.instant),\r\n            this.hour,\r\n            this.minute,\r\n            this.second,\r\n            this.millisecond,\r\n            this.nanosecond);\r\n    }\r\n\r\n    toOffsetDateTime() {\r\n        return new OffsetDateTime(\r\n            this.zone.getOffset(this.instant),\r\n            this.year,\r\n            this.month,\r\n            this.day,\r\n            this.hour,\r\n            this.minute,\r\n            this.second,\r\n            this.millisecond,\r\n            this.nanosecond);\r\n    }\r\n\r\n    toZonedCalendarDateTimeString() {\r\n        return `${this.toCivilDateTime().toCalendarDateTimeString()}${this.zone.getZoneString(this.instant)}`;\r\n    }\r\n\r\n    toZonedWeekDateTimeString() {\r\n        return `${this.toCivilDateTime().toWeekDateTimeString()}${this.zone.getZoneString(this.instant)}`;\r\n    }\r\n\r\n    toZonedOrdinalDateTimeString() {\r\n        return `${this.toCivilDateTime().toOrdinalDateTimeString()}${this.zone.getZoneString(this.instant)}`;\r\n    }\r\n\r\n    toISOCalendarDateTimeString() {\r\n        return `${this.toCivilDateTime().toCalendarDateTimeString()}${this.zone.getOffsetString(this.instant)}`;\r\n    }\r\n\r\n    toISOWeekDateTimeString() {\r\n        return `${this.toCivilDateTime().toWeekDateTimeString()}${this.zone.getOffsetString(this.instant)}`;\r\n    }\r\n\r\n    toISOOrdinalDateTimeString() {\r\n        return `${this.toCivilDateTime().toOrdinalDateTimeString()}${this.zone.getOffsetString(this.instant)}`;\r\n    }\r\n\r\n    toString() {\r\n        return this.toZonedCalendarDateTimeString();\r\n    }\r\n\r\n    toISOString() {\r\n        return this.toISOCalendarDateTimeString();\r\n    }\r\n\r\n    toJSON() {\r\n        return this.toZonedCalendarDateTimeString();\r\n    }\r\n\r\n    static fromCalendarDateTime(zone: Zone | string, year: number, month: number, day: number, hour: number, minute: number, second = 0, millisecond = 0, nanosecond = 0) {\r\n        const ns = getInstant(getDate(year, month, day), getTime(hour, minute, second, millisecond, nanosecond));\r\n        return new Instant(ns)\r\n            .withZone(Zone.UTC)\r\n            .withZoneSameLocal(zone);\r\n    }\r\n\r\n    static fromWeekDateTime(zone: Zone | string, year: number, weekOfYear: number, dayOfWeek: number, hour: number, minute: number, second = 0, millisecond = 0, nanosecond = 0) {\r\n        const calendar = getCalendarDateFromWeekDate(year, weekOfYear, dayOfWeek);\r\n        return ZonedDateTime.fromCalendarDateTime(\r\n            zone,\r\n            calendar.year,\r\n            calendar.month,\r\n            calendar.day,\r\n            hour,\r\n            minute,\r\n            second,\r\n            millisecond,\r\n            nanosecond);\r\n\r\n    }\r\n\r\n    static fromOrdinalDateTime(zone: Zone | string, year: number, dayOfYear: number, hour: number, minute: number, second = 0, millisecond = 0, nanosecond = 0) {\r\n        const calendar = getCalendarDateFromOrdinalDate(year, dayOfYear);\r\n        return ZonedDateTime.fromCalendarDateTime(\r\n            zone,\r\n            calendar.year,\r\n            calendar.month,\r\n            calendar.day,\r\n            hour,\r\n            minute,\r\n            second,\r\n            millisecond,\r\n            nanosecond);\r\n    }\r\n\r\n    static fromString(text: string) {\r\n        const normalText = normalizeString(text);\r\n        const match = zonedDateTimeExtendedRegExp.exec(normalText) || zonedDateTimeBasicRegExp.exec(normalText);\r\n        if (match) {\r\n            const { year, month, day, weekOfYear, dayOfWeek, dayOfYear, hour, minute, second, millisecond = \"\", nanosecond = \"\", offset, ianaZone } = match.groups!;\r\n            const zone = Zone.fromString(ianaZone || offset);\r\n            if (year && month && day) return ZonedDateTime.fromCalendarDateTime(zone, +year, +month, +day, +hour, +minute, +second, +millisecond.padEnd(3, \"0\"), +nanosecond.padEnd(6, \"0\"));\r\n            if (year && weekOfYear && dayOfWeek) return ZonedDateTime.fromWeekDateTime(zone, +year, +weekOfYear, +dayOfWeek, +hour, +minute, +second, +millisecond.padEnd(3, \"0\"), +nanosecond.padEnd(6, \"0\"));\r\n            if (year && dayOfYear) return ZonedDateTime.fromOrdinalDateTime(zone, +year, +dayOfYear, +hour, +minute, +second, +millisecond.padEnd(3, \"0\"), +nanosecond.padEnd(6, \"0\"));\r\n        }\r\n\r\n        throw new SyntaxError(`Invalid date-time string '${text}'`);\r\n    }\r\n\r\n    static now(clock: Clock) {\r\n        return clock.currentInstant().withZone(clock.zone);\r\n    }\r\n\r\n    [Equatable.equals](other: unknown) {\r\n        return other instanceof ZonedDateTime\r\n            && this.equals(other);\r\n    }\r\n\r\n    [Equatable.hash]() {\r\n        let hc = ZONEDDATETIME_HASH_SEED;\r\n        hc = ((hc << 7) | (hc >>> 25)) ^ this[INSTANT][Equatable.hash]();\r\n        hc = ((hc << 7) | (hc >>> 25)) ^ this[ZONE][Equatable.hash]();\r\n        return hc;\r\n    }\r\n\r\n    [Comparable.compareTo](other: unknown) {\r\n        if (!(other instanceof ZonedDateTime)) throw new TypeError();\r\n        return this.compareTo(other);\r\n    }\r\n}\r\n\r\nfunction toDate(instant: Instant, offsetSeconds: number) {\r\n    return getDateOfInstant(toTicks(instant, offsetSeconds));\r\n}\r\n\r\nfunction toTime(instant: Instant, offsetSeconds: number) {\r\n    return getTimeOfInstant(toTicks(instant, offsetSeconds));\r\n}\r\n\r\nfunction toTicks(instant: Instant, offsetSeconds: number) {\r\n    return adjustInstant(getInstant(0n, getTime(0, 0, 0, instant.milliseconds, instant.nanoseconds)), offsetSeconds);\r\n}\r\n\r\nObject.defineProperty(ZonedDateTime.prototype, Symbol.toStringTag, {\r\n    writable: true,\r\n    configurable: true,\r\n    value: \"ZonedDateTime\"\r\n});"],"sourceRoot":""}