mirror of
https://github.com/swc-project/swc.git
synced 2024-12-01 09:52:57 +03:00
98 lines
2.0 KiB
TypeScript
98 lines
2.0 KiB
TypeScript
// Loaded from https://unpkg.com/luxon@1.25.0/src/zones/fixedOffsetZone.js
|
|
|
|
|
|
import { formatOffset, signedOffset } from "../impl/util.js";
|
|
import Zone from "../zone.js";
|
|
|
|
let singleton = null;
|
|
|
|
/**
|
|
* A zone with a fixed offset (meaning no DST)
|
|
* @implements {Zone}
|
|
*/
|
|
export default class FixedOffsetZone extends Zone {
|
|
/**
|
|
* Get a singleton instance of UTC
|
|
* @return {FixedOffsetZone}
|
|
*/
|
|
static get utcInstance() {
|
|
if (singleton === null) {
|
|
singleton = new FixedOffsetZone(0);
|
|
}
|
|
return singleton;
|
|
}
|
|
|
|
/**
|
|
* Get an instance with a specified offset
|
|
* @param {number} offset - The offset in minutes
|
|
* @return {FixedOffsetZone}
|
|
*/
|
|
static instance(offset) {
|
|
return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset);
|
|
}
|
|
|
|
/**
|
|
* Get an instance of FixedOffsetZone from a UTC offset string, like "UTC+6"
|
|
* @param {string} s - The offset string to parse
|
|
* @example FixedOffsetZone.parseSpecifier("UTC+6")
|
|
* @example FixedOffsetZone.parseSpecifier("UTC+06")
|
|
* @example FixedOffsetZone.parseSpecifier("UTC-6:00")
|
|
* @return {FixedOffsetZone}
|
|
*/
|
|
static parseSpecifier(s) {
|
|
if (s) {
|
|
const r = s.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i);
|
|
if (r) {
|
|
return new FixedOffsetZone(signedOffset(r[1], r[2]));
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
constructor(offset) {
|
|
super();
|
|
/** @private **/
|
|
this.fixed = offset;
|
|
}
|
|
|
|
/** @override **/
|
|
get type() {
|
|
return "fixed";
|
|
}
|
|
|
|
/** @override **/
|
|
get name() {
|
|
return this.fixed === 0 ? "UTC" : `UTC${formatOffset(this.fixed, "narrow")}`;
|
|
}
|
|
|
|
/** @override **/
|
|
offsetName() {
|
|
return this.name;
|
|
}
|
|
|
|
/** @override **/
|
|
formatOffset(ts, format) {
|
|
return formatOffset(this.fixed, format);
|
|
}
|
|
|
|
/** @override **/
|
|
get universal() {
|
|
return true;
|
|
}
|
|
|
|
/** @override **/
|
|
offset() {
|
|
return this.fixed;
|
|
}
|
|
|
|
/** @override **/
|
|
equals(otherZone) {
|
|
return otherZone.type === "fixed" && otherZone.fixed === this.fixed;
|
|
}
|
|
|
|
/** @override **/
|
|
get isValid() {
|
|
return true;
|
|
}
|
|
}
|