@digipair/skill-cron 0.42.0 → 0.43.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. package/index.cjs.js +464 -190
  2. package/index.esm.js +464 -190
  3. package/package.json +1 -1
package/index.esm.js CHANGED
@@ -553,7 +553,12 @@ var DATETIME_HUGE_WITH_SECONDS = {
553
553
  },
554
554
  {
555
555
  key: "ianaName",
556
- get: function get() {
556
+ get: /**
557
+ * The IANA name of this zone.
558
+ * Defaults to `name` if not overwritten by a subclass.
559
+ * @abstract
560
+ * @type {string}
561
+ */ function get() {
557
562
  return this.name;
558
563
  }
559
564
  },
@@ -776,37 +781,70 @@ var ianaZoneCache = {};
776
781
  _create_class$2(IANAZone, [
777
782
  {
778
783
  key: "type",
779
- get: /** @override **/ function get() {
784
+ get: /**
785
+ * The type of zone. `iana` for all instances of `IANAZone`.
786
+ * @override
787
+ * @type {string}
788
+ */ function get() {
780
789
  return "iana";
781
790
  }
782
791
  },
783
792
  {
784
793
  key: "name",
785
- get: /** @override **/ function get() {
794
+ get: /**
795
+ * The name of this zone (i.e. the IANA zone name).
796
+ * @override
797
+ * @type {string}
798
+ */ function get() {
786
799
  return this.zoneName;
787
800
  }
788
801
  },
789
802
  {
790
803
  key: "isUniversal",
791
- get: /** @override **/ function get() {
804
+ get: /**
805
+ * Returns whether the offset is known to be fixed for the whole year:
806
+ * Always returns false for all IANA zones.
807
+ * @override
808
+ * @type {boolean}
809
+ */ function get() {
792
810
  return false;
793
811
  }
794
812
  },
795
813
  {
796
- /** @override **/ key: "offsetName",
814
+ /**
815
+ * Returns the offset's common name (such as EST) at the specified timestamp
816
+ * @override
817
+ * @param {number} ts - Epoch milliseconds for which to get the name
818
+ * @param {Object} opts - Options to affect the format
819
+ * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.
820
+ * @param {string} opts.locale - What locale to return the offset name in.
821
+ * @return {string}
822
+ */ key: "offsetName",
797
823
  value: function offsetName(ts, param) {
798
824
  var format = param.format, locale = param.locale;
799
825
  return parseZoneInfo(ts, format, locale, this.name);
800
826
  }
801
827
  },
802
828
  {
803
- /** @override **/ key: "formatOffset",
829
+ /**
830
+ * Returns the offset's value as a string
831
+ * @override
832
+ * @param {number} ts - Epoch milliseconds for which to get the offset
833
+ * @param {string} format - What style of offset to return.
834
+ * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively
835
+ * @return {string}
836
+ */ key: "formatOffset",
804
837
  value: function formatOffset1(ts, format) {
805
838
  return formatOffset(this.offset(ts), format);
806
839
  }
807
840
  },
808
841
  {
809
- /** @override **/ key: "offset",
842
+ /**
843
+ * Return the offset in minutes for this zone at the specified timestamp.
844
+ * @override
845
+ * @param {number} ts - Epoch milliseconds for which to compute the offset
846
+ * @return {number}
847
+ */ key: "offset",
810
848
  value: function offset(ts) {
811
849
  var date = new Date(ts);
812
850
  if (isNaN(date)) return NaN;
@@ -833,14 +871,23 @@ var ianaZoneCache = {};
833
871
  }
834
872
  },
835
873
  {
836
- /** @override **/ key: "equals",
874
+ /**
875
+ * Return whether this Zone is equal to another zone
876
+ * @override
877
+ * @param {Zone} otherZone - the zone to compare
878
+ * @return {boolean}
879
+ */ key: "equals",
837
880
  value: function equals(otherZone) {
838
881
  return otherZone.type === "iana" && otherZone.name === this.name;
839
882
  }
840
883
  },
841
884
  {
842
885
  key: "isValid",
843
- get: /** @override **/ function get() {
886
+ get: /**
887
+ * Return whether this Zone is valid.
888
+ * @override
889
+ * @type {boolean}
890
+ */ function get() {
844
891
  return this.valid;
845
892
  }
846
893
  }
@@ -874,7 +921,7 @@ var ianaZoneCache = {};
874
921
  * @param {string} s - The string to check validity on
875
922
  * @example IANAZone.isValidSpecifier("America/New_York") //=> true
876
923
  * @example IANAZone.isValidSpecifier("Sport~~blorp") //=> false
877
- * @deprecated This method returns false for some valid IANA names. Use isValidZone instead.
924
+ * @deprecated For backward compatibility, this forwards to isValidZone, better use `isValidZone()` directly instead.
878
925
  * @return {boolean}
879
926
  */ function isValidSpecifier(s) {
880
927
  return this.isValidZone(s);
@@ -1491,6 +1538,12 @@ var fallbackWeekSettings = {
1491
1538
  value: function equals(other) {
1492
1539
  return this.locale === other.locale && this.numberingSystem === other.numberingSystem && this.outputCalendar === other.outputCalendar;
1493
1540
  }
1541
+ },
1542
+ {
1543
+ key: "toString",
1544
+ value: function toString() {
1545
+ return "Locale(".concat(this.locale, ", ").concat(this.numberingSystem, ", ").concat(this.outputCalendar, ")");
1546
+ }
1494
1547
  }
1495
1548
  ], [
1496
1549
  {
@@ -1504,7 +1557,7 @@ var fallbackWeekSettings = {
1504
1557
  value: function create(locale, numberingSystem, outputCalendar, weekSettings) {
1505
1558
  var defaultToEN = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : false;
1506
1559
  var specifiedLocale = locale || Settings.defaultLocale;
1507
- // the system locale is useful for human readable strings but annoying for parsing/formatting known formats
1560
+ // the system locale is useful for human-readable strings but annoying for parsing/formatting known formats
1508
1561
  var localeR = specifiedLocale || (defaultToEN ? "en-US" : systemLocale());
1509
1562
  var numberingSystemR = numberingSystem || Settings.defaultNumberingSystem;
1510
1563
  var outputCalendarR = outputCalendar || Settings.defaultOutputCalendar;
@@ -1548,19 +1601,33 @@ var singleton = null;
1548
1601
  _create_class$2(FixedOffsetZone, [
1549
1602
  {
1550
1603
  key: "type",
1551
- get: /** @override **/ function get() {
1604
+ get: /**
1605
+ * The type of zone. `fixed` for all instances of `FixedOffsetZone`.
1606
+ * @override
1607
+ * @type {string}
1608
+ */ function get() {
1552
1609
  return "fixed";
1553
1610
  }
1554
1611
  },
1555
1612
  {
1556
1613
  key: "name",
1557
- get: /** @override **/ function get() {
1614
+ get: /**
1615
+ * The name of this zone.
1616
+ * All fixed zones' names always start with "UTC" (plus optional offset)
1617
+ * @override
1618
+ * @type {string}
1619
+ */ function get() {
1558
1620
  return this.fixed === 0 ? "UTC" : "UTC".concat(formatOffset(this.fixed, "narrow"));
1559
1621
  }
1560
1622
  },
1561
1623
  {
1562
1624
  key: "ianaName",
1563
- get: function get() {
1625
+ get: /**
1626
+ * The IANA name of this zone, i.e. `Etc/UTC` or `Etc/GMT+/-nn`
1627
+ *
1628
+ * @override
1629
+ * @type {string}
1630
+ */ function get() {
1564
1631
  if (this.fixed === 0) {
1565
1632
  return "Etc/UTC";
1566
1633
  } else {
@@ -1569,38 +1636,71 @@ var singleton = null;
1569
1636
  }
1570
1637
  },
1571
1638
  {
1572
- /** @override **/ key: "offsetName",
1639
+ /**
1640
+ * Returns the offset's common name at the specified timestamp.
1641
+ *
1642
+ * For fixed offset zones this equals to the zone name.
1643
+ * @override
1644
+ */ key: "offsetName",
1573
1645
  value: function offsetName() {
1574
1646
  return this.name;
1575
1647
  }
1576
1648
  },
1577
1649
  {
1578
- /** @override **/ key: "formatOffset",
1650
+ /**
1651
+ * Returns the offset's value as a string
1652
+ * @override
1653
+ * @param {number} ts - Epoch milliseconds for which to get the offset
1654
+ * @param {string} format - What style of offset to return.
1655
+ * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively
1656
+ * @return {string}
1657
+ */ key: "formatOffset",
1579
1658
  value: function formatOffset1(ts, format) {
1580
1659
  return formatOffset(this.fixed, format);
1581
1660
  }
1582
1661
  },
1583
1662
  {
1584
1663
  key: "isUniversal",
1585
- get: /** @override **/ function get() {
1664
+ get: /**
1665
+ * Returns whether the offset is known to be fixed for the whole year:
1666
+ * Always returns true for all fixed offset zones.
1667
+ * @override
1668
+ * @type {boolean}
1669
+ */ function get() {
1586
1670
  return true;
1587
1671
  }
1588
1672
  },
1589
1673
  {
1590
- /** @override **/ key: "offset",
1674
+ /**
1675
+ * Return the offset in minutes for this zone at the specified timestamp.
1676
+ *
1677
+ * For fixed offset zones, this is constant and does not depend on a timestamp.
1678
+ * @override
1679
+ * @return {number}
1680
+ */ key: "offset",
1591
1681
  value: function offset() {
1592
1682
  return this.fixed;
1593
1683
  }
1594
1684
  },
1595
1685
  {
1596
- /** @override **/ key: "equals",
1686
+ /**
1687
+ * Return whether this Zone is equal to another zone (i.e. also fixed and same offset)
1688
+ * @override
1689
+ * @param {Zone} otherZone - the zone to compare
1690
+ * @return {boolean}
1691
+ */ key: "equals",
1597
1692
  value: function equals(otherZone) {
1598
1693
  return otherZone.type === "fixed" && otherZone.fixed === this.fixed;
1599
1694
  }
1600
1695
  },
1601
1696
  {
1602
1697
  key: "isValid",
1603
- get: /** @override **/ function get() {
1698
+ get: /**
1699
+ * Return whether this Zone is valid:
1700
+ * All fixed offset zones are valid.
1701
+ * @override
1702
+ * @type {boolean}
1703
+ */ function get() {
1604
1704
  return true;
1605
1705
  }
1606
1706
  }
@@ -1737,6 +1837,146 @@ var singleton = null;
1737
1837
  return new InvalidZone(input);
1738
1838
  }
1739
1839
  }
1840
+ var numberingSystems = {
1841
+ arab: "[٠-٩]",
1842
+ arabext: "[۰-۹]",
1843
+ bali: "[᭐-᭙]",
1844
+ beng: "[০-৯]",
1845
+ deva: "[०-९]",
1846
+ fullwide: "[0-9]",
1847
+ gujr: "[૦-૯]",
1848
+ hanidec: "[〇|一|二|三|四|五|六|七|八|九]",
1849
+ khmr: "[០-៩]",
1850
+ knda: "[೦-೯]",
1851
+ laoo: "[໐-໙]",
1852
+ limb: "[᥆-᥏]",
1853
+ mlym: "[൦-൯]",
1854
+ mong: "[᠐-᠙]",
1855
+ mymr: "[၀-၉]",
1856
+ orya: "[୦-୯]",
1857
+ tamldec: "[௦-௯]",
1858
+ telu: "[౦-౯]",
1859
+ thai: "[๐-๙]",
1860
+ tibt: "[༠-༩]",
1861
+ latn: "\\d"
1862
+ };
1863
+ var numberingSystemsUTF16 = {
1864
+ arab: [
1865
+ 1632,
1866
+ 1641
1867
+ ],
1868
+ arabext: [
1869
+ 1776,
1870
+ 1785
1871
+ ],
1872
+ bali: [
1873
+ 6992,
1874
+ 7001
1875
+ ],
1876
+ beng: [
1877
+ 2534,
1878
+ 2543
1879
+ ],
1880
+ deva: [
1881
+ 2406,
1882
+ 2415
1883
+ ],
1884
+ fullwide: [
1885
+ 65296,
1886
+ 65303
1887
+ ],
1888
+ gujr: [
1889
+ 2790,
1890
+ 2799
1891
+ ],
1892
+ khmr: [
1893
+ 6112,
1894
+ 6121
1895
+ ],
1896
+ knda: [
1897
+ 3302,
1898
+ 3311
1899
+ ],
1900
+ laoo: [
1901
+ 3792,
1902
+ 3801
1903
+ ],
1904
+ limb: [
1905
+ 6470,
1906
+ 6479
1907
+ ],
1908
+ mlym: [
1909
+ 3430,
1910
+ 3439
1911
+ ],
1912
+ mong: [
1913
+ 6160,
1914
+ 6169
1915
+ ],
1916
+ mymr: [
1917
+ 4160,
1918
+ 4169
1919
+ ],
1920
+ orya: [
1921
+ 2918,
1922
+ 2927
1923
+ ],
1924
+ tamldec: [
1925
+ 3046,
1926
+ 3055
1927
+ ],
1928
+ telu: [
1929
+ 3174,
1930
+ 3183
1931
+ ],
1932
+ thai: [
1933
+ 3664,
1934
+ 3673
1935
+ ],
1936
+ tibt: [
1937
+ 3872,
1938
+ 3881
1939
+ ]
1940
+ };
1941
+ var hanidecChars = numberingSystems.hanidec.replace(/[\[|\]]/g, "").split("");
1942
+ function parseDigits(str) {
1943
+ var value = parseInt(str, 10);
1944
+ if (isNaN(value)) {
1945
+ value = "";
1946
+ for(var i = 0; i < str.length; i++){
1947
+ var code = str.charCodeAt(i);
1948
+ if (str[i].search(numberingSystems.hanidec) !== -1) {
1949
+ value += hanidecChars.indexOf(str[i]);
1950
+ } else {
1951
+ for(var key in numberingSystemsUTF16){
1952
+ var _numberingSystemsUTF16_key = _sliced_to_array$1(numberingSystemsUTF16[key], 2), min = _numberingSystemsUTF16_key[0], max = _numberingSystemsUTF16_key[1];
1953
+ if (code >= min && code <= max) {
1954
+ value += code - min;
1955
+ }
1956
+ }
1957
+ }
1958
+ }
1959
+ return parseInt(value, 10);
1960
+ } else {
1961
+ return value;
1962
+ }
1963
+ }
1964
+ // cache of {numberingSystem: {append: regex}}
1965
+ var digitRegexCache = {};
1966
+ function resetDigitRegexCache() {
1967
+ digitRegexCache = {};
1968
+ }
1969
+ function digitRegex(param) {
1970
+ var numberingSystem = param.numberingSystem, append = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "";
1971
+ var ns = numberingSystem || "latn";
1972
+ if (!digitRegexCache[ns]) {
1973
+ digitRegexCache[ns] = {};
1974
+ }
1975
+ if (!digitRegexCache[ns][append]) {
1976
+ digitRegexCache[ns][append] = new RegExp("".concat(numberingSystems[ns]).concat(append));
1977
+ }
1978
+ return digitRegexCache[ns][append];
1979
+ }
1740
1980
  var now = function() {
1741
1981
  return Date.now();
1742
1982
  }, defaultZone = "system", defaultLocale = null, defaultNumberingSystem = null, defaultOutputCalendar = null, twoDigitCutoffYear = 60, throwOnInvalid, defaultWeekSettings = null;
@@ -1852,16 +2092,17 @@ var now = function() {
1852
2092
  {
1853
2093
  key: "twoDigitCutoffYear",
1854
2094
  get: /**
1855
- * Get the cutoff year after which a string encoding a year as two digits is interpreted to occur in the current century.
2095
+ * Get the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx.
1856
2096
  * @type {number}
1857
2097
  */ function get() {
1858
2098
  return twoDigitCutoffYear;
1859
2099
  },
1860
2100
  set: /**
1861
- * Set the cutoff year after which a string encoding a year as two digits is interpreted to occur in the current century.
2101
+ * Set the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx.
1862
2102
  * @type {number}
1863
- * @example Settings.twoDigitCutoffYear = 0 // cut-off year is 0, so all 'yy' are interpreted as current century
1864
- * @example Settings.twoDigitCutoffYear = 50 // '49' -> 1949; '50' -> 2050
2103
+ * @example Settings.twoDigitCutoffYear = 0 // all 'yy' are interpreted as 20th century
2104
+ * @example Settings.twoDigitCutoffYear = 99 // all 'yy' are interpreted as 21st century
2105
+ * @example Settings.twoDigitCutoffYear = 50 // '49' -> 2049; '50' -> 1950
1865
2106
  * @example Settings.twoDigitCutoffYear = 1950 // interpreted as 50
1866
2107
  * @example Settings.twoDigitCutoffYear = 2050 // ALSO interpreted as 50
1867
2108
  */ function set(cutoffYear) {
@@ -1891,6 +2132,8 @@ var now = function() {
1891
2132
  */ function resetCaches() {
1892
2133
  Locale.resetCache();
1893
2134
  IANAZone.resetCache();
2135
+ DateTime.resetCache();
2136
+ resetDigitRegexCache();
1894
2137
  }
1895
2138
  }
1896
2139
  ]);
@@ -2339,7 +2582,13 @@ function normalizeObject(obj, normalizer) {
2339
2582
  }
2340
2583
  return normalized;
2341
2584
  }
2342
- function formatOffset(offset, format) {
2585
+ /**
2586
+ * Returns the offset's value as a string
2587
+ * @param {number} ts - Epoch milliseconds for which to get the offset
2588
+ * @param {string} format - What style of offset to return.
2589
+ * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively
2590
+ * @return {string}
2591
+ */ function formatOffset(offset, format) {
2343
2592
  var hours = Math.trunc(Math.abs(offset / 60)), minutes = Math.trunc(Math.abs(offset % 60)), sign = offset >= 0 ? "+" : "-";
2344
2593
  switch(format){
2345
2594
  case "short":
@@ -4781,7 +5030,7 @@ function validateStartEnd(start, end) {
4781
5030
  },
4782
5031
  {
4783
5032
  /**
4784
- * Return whether this Interval engulfs the start and end of the specified Interval.
5033
+ * Returns true if this Interval fully contains the specified Interval, specifically if the intersect (of this Interval and the other Interval) is equal to the other Interval; false otherwise.
4785
5034
  * @param {Interval} other
4786
5035
  * @return {boolean}
4787
5036
  */ key: "engulfs",
@@ -5554,134 +5803,6 @@ function diff(earlier, later, units, opts) {
5554
5803
  return duration;
5555
5804
  }
5556
5805
  }
5557
- var numberingSystems = {
5558
- arab: "[٠-٩]",
5559
- arabext: "[۰-۹]",
5560
- bali: "[᭐-᭙]",
5561
- beng: "[০-৯]",
5562
- deva: "[०-९]",
5563
- fullwide: "[0-9]",
5564
- gujr: "[૦-૯]",
5565
- hanidec: "[〇|一|二|三|四|五|六|七|八|九]",
5566
- khmr: "[០-៩]",
5567
- knda: "[೦-೯]",
5568
- laoo: "[໐-໙]",
5569
- limb: "[᥆-᥏]",
5570
- mlym: "[൦-൯]",
5571
- mong: "[᠐-᠙]",
5572
- mymr: "[၀-၉]",
5573
- orya: "[୦-୯]",
5574
- tamldec: "[௦-௯]",
5575
- telu: "[౦-౯]",
5576
- thai: "[๐-๙]",
5577
- tibt: "[༠-༩]",
5578
- latn: "\\d"
5579
- };
5580
- var numberingSystemsUTF16 = {
5581
- arab: [
5582
- 1632,
5583
- 1641
5584
- ],
5585
- arabext: [
5586
- 1776,
5587
- 1785
5588
- ],
5589
- bali: [
5590
- 6992,
5591
- 7001
5592
- ],
5593
- beng: [
5594
- 2534,
5595
- 2543
5596
- ],
5597
- deva: [
5598
- 2406,
5599
- 2415
5600
- ],
5601
- fullwide: [
5602
- 65296,
5603
- 65303
5604
- ],
5605
- gujr: [
5606
- 2790,
5607
- 2799
5608
- ],
5609
- khmr: [
5610
- 6112,
5611
- 6121
5612
- ],
5613
- knda: [
5614
- 3302,
5615
- 3311
5616
- ],
5617
- laoo: [
5618
- 3792,
5619
- 3801
5620
- ],
5621
- limb: [
5622
- 6470,
5623
- 6479
5624
- ],
5625
- mlym: [
5626
- 3430,
5627
- 3439
5628
- ],
5629
- mong: [
5630
- 6160,
5631
- 6169
5632
- ],
5633
- mymr: [
5634
- 4160,
5635
- 4169
5636
- ],
5637
- orya: [
5638
- 2918,
5639
- 2927
5640
- ],
5641
- tamldec: [
5642
- 3046,
5643
- 3055
5644
- ],
5645
- telu: [
5646
- 3174,
5647
- 3183
5648
- ],
5649
- thai: [
5650
- 3664,
5651
- 3673
5652
- ],
5653
- tibt: [
5654
- 3872,
5655
- 3881
5656
- ]
5657
- };
5658
- var hanidecChars = numberingSystems.hanidec.replace(/[\[|\]]/g, "").split("");
5659
- function parseDigits(str) {
5660
- var value = parseInt(str, 10);
5661
- if (isNaN(value)) {
5662
- value = "";
5663
- for(var i = 0; i < str.length; i++){
5664
- var code = str.charCodeAt(i);
5665
- if (str[i].search(numberingSystems.hanidec) !== -1) {
5666
- value += hanidecChars.indexOf(str[i]);
5667
- } else {
5668
- for(var key in numberingSystemsUTF16){
5669
- var _numberingSystemsUTF16_key = _sliced_to_array$1(numberingSystemsUTF16[key], 2), min = _numberingSystemsUTF16_key[0], max = _numberingSystemsUTF16_key[1];
5670
- if (code >= min && code <= max) {
5671
- value += code - min;
5672
- }
5673
- }
5674
- }
5675
- }
5676
- return parseInt(value, 10);
5677
- } else {
5678
- return value;
5679
- }
5680
- }
5681
- function digitRegex(param) {
5682
- var numberingSystem = param.numberingSystem, append = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "";
5683
- return new RegExp("".concat(numberingSystems[numberingSystem || "latn"]).concat(append));
5684
- }
5685
5806
  var MISSING_FTP = "missing Intl.DateTimeFormat.formatToParts support";
5686
5807
  function intUnit(regex) {
5687
5808
  var post = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : function(i) {
@@ -6105,38 +6226,74 @@ function expandMacroTokens(tokens, locale) {
6105
6226
  }
6106
6227
  /**
6107
6228
  * @private
6108
- */ function explainFromTokens(locale, input, format) {
6109
- var tokens = expandMacroTokens(Formatter.parseFormat(format), locale), units = tokens.map(function(t) {
6110
- return unitForToken(t, locale);
6111
- }), disqualifyingUnit = units.find(function(t) {
6112
- return t.invalidReason;
6113
- });
6114
- if (disqualifyingUnit) {
6115
- return {
6116
- input: input,
6117
- tokens: tokens,
6118
- invalidReason: disqualifyingUnit.invalidReason
6119
- };
6120
- } else {
6121
- var _buildRegex = _sliced_to_array$1(buildRegex(units), 2), regexString = _buildRegex[0], handlers = _buildRegex[1], regex = RegExp(regexString, "i"), _match = _sliced_to_array$1(match(input, regex, handlers), 2), rawMatches = _match[0], matches = _match[1], _ref = _sliced_to_array$1(matches ? dateTimeFromMatches(matches) : [
6122
- null,
6123
- null,
6124
- undefined
6125
- ], 3), result = _ref[0], zone = _ref[1], specificOffset = _ref[2];
6126
- if (hasOwnProperty(matches, "a") && hasOwnProperty(matches, "H")) {
6127
- throw new ConflictingSpecificationError("Can't include meridiem when specifying 24-hour format");
6229
+ */ var TokenParser = /*#__PURE__*/ function() {
6230
+ function TokenParser(locale, format) {
6231
+ _class_call_check$3(this, TokenParser);
6232
+ this.locale = locale;
6233
+ this.format = format;
6234
+ this.tokens = expandMacroTokens(Formatter.parseFormat(format), locale);
6235
+ this.units = this.tokens.map(function(t) {
6236
+ return unitForToken(t, locale);
6237
+ });
6238
+ this.disqualifyingUnit = this.units.find(function(t) {
6239
+ return t.invalidReason;
6240
+ });
6241
+ if (!this.disqualifyingUnit) {
6242
+ var _buildRegex = _sliced_to_array$1(buildRegex(this.units), 2), regexString = _buildRegex[0], handlers = _buildRegex[1];
6243
+ this.regex = RegExp(regexString, "i");
6244
+ this.handlers = handlers;
6128
6245
  }
6129
- return {
6130
- input: input,
6131
- tokens: tokens,
6132
- regex: regex,
6133
- rawMatches: rawMatches,
6134
- matches: matches,
6135
- result: result,
6136
- zone: zone,
6137
- specificOffset: specificOffset
6138
- };
6139
6246
  }
6247
+ _create_class$2(TokenParser, [
6248
+ {
6249
+ key: "explainFromTokens",
6250
+ value: function explainFromTokens(input) {
6251
+ if (!this.isValid) {
6252
+ return {
6253
+ input: input,
6254
+ tokens: this.tokens,
6255
+ invalidReason: this.invalidReason
6256
+ };
6257
+ } else {
6258
+ var _match = _sliced_to_array$1(match(input, this.regex, this.handlers), 2), rawMatches = _match[0], matches = _match[1], _ref = _sliced_to_array$1(matches ? dateTimeFromMatches(matches) : [
6259
+ null,
6260
+ null,
6261
+ undefined
6262
+ ], 3), result = _ref[0], zone = _ref[1], specificOffset = _ref[2];
6263
+ if (hasOwnProperty(matches, "a") && hasOwnProperty(matches, "H")) {
6264
+ throw new ConflictingSpecificationError("Can't include meridiem when specifying 24-hour format");
6265
+ }
6266
+ return {
6267
+ input: input,
6268
+ tokens: this.tokens,
6269
+ regex: this.regex,
6270
+ rawMatches: rawMatches,
6271
+ matches: matches,
6272
+ result: result,
6273
+ zone: zone,
6274
+ specificOffset: specificOffset
6275
+ };
6276
+ }
6277
+ }
6278
+ },
6279
+ {
6280
+ key: "isValid",
6281
+ get: function get() {
6282
+ return !this.disqualifyingUnit;
6283
+ }
6284
+ },
6285
+ {
6286
+ key: "invalidReason",
6287
+ get: function get() {
6288
+ return this.disqualifyingUnit ? this.disqualifyingUnit.invalidReason : null;
6289
+ }
6290
+ }
6291
+ ]);
6292
+ return TokenParser;
6293
+ }();
6294
+ function explainFromTokens(locale, input, format) {
6295
+ var parser = new TokenParser(locale, format);
6296
+ return parser.explainFromTokens(input);
6140
6297
  }
6141
6298
  function parseFromTokens(locale, input, format) {
6142
6299
  var _explainFromTokens = explainFromTokens(locale, input, format), result = _explainFromTokens.result, zone = _explainFromTokens.zone, specificOffset = _explainFromTokens.specificOffset, invalidReason = _explainFromTokens.invalidReason;
@@ -6442,11 +6599,43 @@ function normalizeUnitWithLocalWeeks(unit) {
6442
6599
  return normalizeUnit(unit);
6443
6600
  }
6444
6601
  }
6602
+ // cache offsets for zones based on the current timestamp when this function is
6603
+ // first called. When we are handling a datetime from components like (year,
6604
+ // month, day, hour) in a time zone, we need a guess about what the timezone
6605
+ // offset is so that we can convert into a UTC timestamp. One way is to find the
6606
+ // offset of now in the zone. The actual date may have a different offset (for
6607
+ // example, if we handle a date in June while we're in December in a zone that
6608
+ // observes DST), but we can check and adjust that.
6609
+ //
6610
+ // When handling many dates, calculating the offset for now every time is
6611
+ // expensive. It's just a guess, so we can cache the offset to use even if we
6612
+ // are right on a time change boundary (we'll just correct in the other
6613
+ // direction). Using a timestamp from first read is a slight optimization for
6614
+ // handling dates close to the current date, since those dates will usually be
6615
+ // in the same offset (we could set the timestamp statically, instead). We use a
6616
+ // single timestamp for all zones to make things a bit more predictable.
6617
+ //
6618
+ // This is safe for quickDT (used by local() and utc()) because we don't fill in
6619
+ // higher-order units from tsNow (as we do in fromObject, this requires that
6620
+ // offset is calculated from tsNow).
6621
+ function guessOffsetForZone(zone) {
6622
+ if (!zoneOffsetGuessCache[zone]) {
6623
+ if (zoneOffsetTs === undefined) {
6624
+ zoneOffsetTs = Settings.now();
6625
+ }
6626
+ zoneOffsetGuessCache[zone] = zone.offset(zoneOffsetTs);
6627
+ }
6628
+ return zoneOffsetGuessCache[zone];
6629
+ }
6445
6630
  // this is a dumbed down version of fromObject() that runs about 60% faster
6446
6631
  // but doesn't do any validation, makes a bunch of assumptions about what units
6447
6632
  // are present, and so on.
6448
6633
  function quickDT(obj, opts) {
6449
- var zone = normalizeZone(opts.zone, Settings.defaultZone), loc = Locale.fromObject(opts), tsNow = Settings.now();
6634
+ var zone = normalizeZone(opts.zone, Settings.defaultZone);
6635
+ if (!zone.isValid) {
6636
+ return DateTime.invalid(unsupportedZone(zone));
6637
+ }
6638
+ var loc = Locale.fromObject(opts);
6450
6639
  var ts, o;
6451
6640
  // assume we have the higher-order units
6452
6641
  if (!isUndefined(obj.year)) {
@@ -6476,11 +6665,11 @@ function quickDT(obj, opts) {
6476
6665
  if (invalid) {
6477
6666
  return DateTime.invalid(invalid);
6478
6667
  }
6479
- var offsetProvis = zone.offset(tsNow);
6668
+ var offsetProvis = guessOffsetForZone(zone);
6480
6669
  var ref;
6481
6670
  ref = _sliced_to_array$1(objToTS(obj, offsetProvis, zone), 2), ts = ref[0], o = ref[1];
6482
6671
  } else {
6483
- ts = tsNow;
6672
+ ts = Settings.now();
6484
6673
  }
6485
6674
  return new DateTime({
6486
6675
  ts: ts,
@@ -6544,6 +6733,15 @@ function lastOpts(argList) {
6544
6733
  args
6545
6734
  ];
6546
6735
  }
6736
+ /**
6737
+ * Timestamp to use for cached zone offset guesses (exposed for test)
6738
+ */ var zoneOffsetTs;
6739
+ /**
6740
+ * Cache for zone offset guesses (exposed for test).
6741
+ *
6742
+ * This optimizes quickDT via guessOffsetForZone to avoid repeated calls of
6743
+ * zone.offset().
6744
+ */ var zoneOffsetGuessCache = {};
6547
6745
  /**
6548
6746
  * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them.
6549
6747
  *
@@ -6581,7 +6779,9 @@ function lastOpts(argList) {
6581
6779
  config.old.o
6582
6780
  ], c = ref[0], o = ref[1];
6583
6781
  } else {
6584
- var ot = zone.offset(this.ts);
6782
+ // If an offset has been passed and we have not been called from
6783
+ // clone(), we can trust it and avoid the offset calculation.
6784
+ var ot = isNumber(config.o) && !config.old ? config.o : zone.offset(this.ts);
6585
6785
  c = tsToObj(this.ts, ot);
6586
6786
  invalid = Number.isNaN(c.year) ? new Invalid("invalid input") : null;
6587
6787
  c = invalid ? null : c;
@@ -7914,6 +8114,7 @@ function lastOpts(argList) {
7914
8114
  * @param {string} [options.locale] - a locale to set on the resulting DateTime instance
7915
8115
  * @param {string} [options.outputCalendar] - the output calendar to set on the resulting DateTime instance
7916
8116
  * @param {string} [options.numberingSystem] - the numbering system to set on the resulting DateTime instance
8117
+ * @param {string} [options.weekSettings] - the week settings to set on the resulting DateTime instance
7917
8118
  * @example DateTime.utc() //~> now
7918
8119
  * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z
7919
8120
  * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z
@@ -7973,13 +8174,14 @@ function lastOpts(argList) {
7973
8174
  * @param {string} [options.locale] - a locale to set on the resulting DateTime instance
7974
8175
  * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance
7975
8176
  * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance
8177
+ * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance
7976
8178
  * @return {DateTime}
7977
8179
  */ function fromMillis(milliseconds) {
7978
8180
  var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
7979
8181
  if (!isNumber(milliseconds)) {
7980
8182
  throw new InvalidArgumentError("fromMillis requires a numerical input, but received a ".concat(typeof milliseconds === "undefined" ? "undefined" : _type_of$2(milliseconds), " with value ").concat(milliseconds));
7981
8183
  } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) {
7982
- // this isn't perfect because because we can still end up out of range because of additional shifting, but it's a start
8184
+ // this isn't perfect because we can still end up out of range because of additional shifting, but it's a start
7983
8185
  return DateTime.invalid("Timestamp out of range");
7984
8186
  } else {
7985
8187
  return new DateTime({
@@ -8000,6 +8202,7 @@ function lastOpts(argList) {
8000
8202
  * @param {string} [options.locale] - a locale to set on the resulting DateTime instance
8001
8203
  * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance
8002
8204
  * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance
8205
+ * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance
8003
8206
  * @return {DateTime}
8004
8207
  */ function fromSeconds(seconds) {
8005
8208
  var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
@@ -8038,6 +8241,7 @@ function lastOpts(argList) {
8038
8241
  * @param {string} [opts.locale='system\'s locale'] - a locale to set on the resulting DateTime instance
8039
8242
  * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance
8040
8243
  * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance
8244
+ * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance
8041
8245
  * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25'
8042
8246
  * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01'
8043
8247
  * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06
@@ -8129,6 +8333,9 @@ function lastOpts(argList) {
8129
8333
  if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) {
8130
8334
  return DateTime.invalid("mismatched weekday", "you can't specify both a weekday of ".concat(normalized.weekday, " and a date of ").concat(inst.toISO()));
8131
8335
  }
8336
+ if (!inst.isValid) {
8337
+ return DateTime.invalid(inst.invalid);
8338
+ }
8132
8339
  return inst;
8133
8340
  }
8134
8341
  },
@@ -8143,6 +8350,7 @@ function lastOpts(argList) {
8143
8350
  * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance
8144
8351
  * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance
8145
8352
  * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance
8353
+ * @param {string} [opts.weekSettings] - the week settings to set on the resulting DateTime instance
8146
8354
  * @example DateTime.fromISO('2016-05-25T09:08:34.123')
8147
8355
  * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00')
8148
8356
  * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true})
@@ -8166,6 +8374,7 @@ function lastOpts(argList) {
8166
8374
  * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance
8167
8375
  * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance
8168
8376
  * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance
8377
+ * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance
8169
8378
  * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT')
8170
8379
  * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600')
8171
8380
  * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z')
@@ -8188,6 +8397,7 @@ function lastOpts(argList) {
8188
8397
  * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance
8189
8398
  * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance
8190
8399
  * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance
8400
+ * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance
8191
8401
  * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT')
8192
8402
  * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT')
8193
8403
  * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994')
@@ -8210,6 +8420,7 @@ function lastOpts(argList) {
8210
8420
  * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one
8211
8421
  * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale
8212
8422
  * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system
8423
+ * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance
8213
8424
  * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance
8214
8425
  * @return {DateTime}
8215
8426
  */ function fromFormat(text, fmt) {
@@ -8249,6 +8460,7 @@ function lastOpts(argList) {
8249
8460
  * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one
8250
8461
  * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale
8251
8462
  * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system
8463
+ * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance
8252
8464
  * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance
8253
8465
  * @example DateTime.fromSQL('2017-05-15')
8254
8466
  * @example DateTime.fromSQL('2017-05-15 09:12:34')
@@ -8328,6 +8540,13 @@ function lastOpts(argList) {
8328
8540
  }).join("");
8329
8541
  }
8330
8542
  },
8543
+ {
8544
+ key: "resetCache",
8545
+ value: function resetCache() {
8546
+ zoneOffsetTs = undefined;
8547
+ zoneOffsetGuessCache = {};
8548
+ }
8549
+ },
8331
8550
  {
8332
8551
  key: "min",
8333
8552
  value: /**
@@ -8392,6 +8611,61 @@ function lastOpts(argList) {
8392
8611
  return DateTime.fromFormatExplain(text, fmt, options);
8393
8612
  }
8394
8613
  },
8614
+ {
8615
+ key: "buildFormatParser",
8616
+ value: /**
8617
+ * Build a parser for `fmt` using the given locale. This parser can be passed
8618
+ * to {@link DateTime.fromFormatParser} to a parse a date in this format. This
8619
+ * can be used to optimize cases where many dates need to be parsed in a
8620
+ * specific format.
8621
+ *
8622
+ * @param {String} fmt - the format the string is expected to be in (see
8623
+ * description)
8624
+ * @param {Object} options - options used to set locale and numberingSystem
8625
+ * for parser
8626
+ * @returns {TokenParser} - opaque object to be used
8627
+ */ function buildFormatParser(fmt) {
8628
+ var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
8629
+ var _options_locale = options.locale, locale = _options_locale === void 0 ? null : _options_locale, _options_numberingSystem = options.numberingSystem, numberingSystem = _options_numberingSystem === void 0 ? null : _options_numberingSystem, localeToUse = Locale.fromOpts({
8630
+ locale: locale,
8631
+ numberingSystem: numberingSystem,
8632
+ defaultToEN: true
8633
+ });
8634
+ return new TokenParser(localeToUse, fmt);
8635
+ }
8636
+ },
8637
+ {
8638
+ key: "fromFormatParser",
8639
+ value: /**
8640
+ * Create a DateTime from an input string and format parser.
8641
+ *
8642
+ * The format parser must have been created with the same locale as this call.
8643
+ *
8644
+ * @param {String} text - the string to parse
8645
+ * @param {TokenParser} formatParser - parser from {@link DateTime.buildFormatParser}
8646
+ * @param {Object} opts - options taken by fromFormat()
8647
+ * @returns {DateTime}
8648
+ */ function fromFormatParser(text, formatParser) {
8649
+ var opts = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};
8650
+ if (isUndefined(text) || isUndefined(formatParser)) {
8651
+ throw new InvalidArgumentError("fromFormatParser requires an input string and a format parser");
8652
+ }
8653
+ var _opts_locale = opts.locale, locale = _opts_locale === void 0 ? null : _opts_locale, _opts_numberingSystem = opts.numberingSystem, numberingSystem = _opts_numberingSystem === void 0 ? null : _opts_numberingSystem, localeToUse = Locale.fromOpts({
8654
+ locale: locale,
8655
+ numberingSystem: numberingSystem,
8656
+ defaultToEN: true
8657
+ });
8658
+ if (!localeToUse.equals(formatParser.locale)) {
8659
+ throw new InvalidArgumentError("fromFormatParser called with a locale of ".concat(localeToUse, ", ") + "but the format parser was created for ".concat(formatParser.locale));
8660
+ }
8661
+ var _formatParser_explainFromTokens = formatParser.explainFromTokens(text), result = _formatParser_explainFromTokens.result, zone = _formatParser_explainFromTokens.zone, specificOffset = _formatParser_explainFromTokens.specificOffset, invalidReason = _formatParser_explainFromTokens.invalidReason;
8662
+ if (invalidReason) {
8663
+ return DateTime.invalid(invalidReason);
8664
+ } else {
8665
+ return parseDataToDateTime(result, zone, opts, "format ".concat(formatParser.format), text, specificOffset);
8666
+ }
8667
+ }
8668
+ },
8395
8669
  {
8396
8670
  key: "DATE_SHORT",
8397
8671
  get: // FORMAT PRESETS
@@ -8607,7 +8881,7 @@ function lastOpts(argList) {
8607
8881
  throw new InvalidArgumentError("Unknown datetime argument: ".concat(dateTimeish, ", of type ").concat(typeof dateTimeish === "undefined" ? "undefined" : _type_of$2(dateTimeish)));
8608
8882
  }
8609
8883
  }
8610
- var VERSION = "3.4.4";
8884
+ var VERSION = "3.5.0";
8611
8885
  luxon.DateTime = DateTime;
8612
8886
  luxon.Duration = Duration;
8613
8887
  luxon.FixedOffsetZone = FixedOffsetZone;