chrono-node 2.2.7 → 2.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/README.md +25 -9
  2. package/benchmark/benchmark.js +4 -0
  3. package/dist/bundle.js +5047 -0
  4. package/dist/chrono.d.ts +7 -6
  5. package/dist/chrono.js +6 -5
  6. package/dist/common/casualReferences.d.ts +6 -6
  7. package/dist/common/casualReferences.js +16 -15
  8. package/dist/common/refiners/ForwardDateRefiner.js +1 -1
  9. package/dist/index.d.ts +7 -3
  10. package/dist/locales/de/constants.js +1 -1
  11. package/dist/locales/de/parsers/DECasualDateParser.js +2 -2
  12. package/dist/locales/en/constants.d.ts +1 -1
  13. package/dist/locales/en/constants.js +5 -5
  14. package/dist/locales/en/parsers/ENCasualDateParser.js +5 -5
  15. package/dist/locales/en/parsers/ENCasualTimeParser.js +1 -1
  16. package/dist/locales/en/parsers/ENMonthNameLittleEndianParser.js +6 -8
  17. package/dist/locales/en/parsers/ENRelativeDateFormatParser.js +3 -3
  18. package/dist/locales/en/parsers/ENTimeUnitAgoFormatParser.js +3 -3
  19. package/dist/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js +1 -1
  20. package/dist/locales/en/parsers/ENTimeUnitLaterFormatParser.js +2 -2
  21. package/dist/locales/en/parsers/ENTimeUnitWithinFormatParser.js +1 -1
  22. package/dist/locales/fr/constants.js +1 -1
  23. package/dist/locales/fr/parsers/FRCasualDateParser.js +4 -4
  24. package/dist/locales/fr/parsers/FRTimeUnitAgoFormatParser.js +1 -1
  25. package/dist/locales/fr/parsers/FRTimeUnitRelativeFormatParser.js +1 -1
  26. package/dist/locales/fr/parsers/FRTimeUnitWithinFormatParser.js +1 -1
  27. package/dist/locales/ja/parsers/JPCasualDateParser.js +3 -3
  28. package/dist/locales/nl/constants.js +8 -5
  29. package/dist/locales/nl/index.js +12 -3
  30. package/dist/locales/nl/parsers/NLCasualDateParser.js +4 -4
  31. package/dist/locales/nl/parsers/NLRelativeDateFormatParser.d.ts +7 -0
  32. package/dist/locales/nl/parsers/NLRelativeDateFormatParser.js +57 -0
  33. package/dist/locales/nl/parsers/NLTimeExpressionParser.d.ts +1 -0
  34. package/dist/locales/nl/parsers/NLTimeExpressionParser.js +3 -0
  35. package/dist/locales/nl/parsers/NLTimeUnitAgoFormatParser.d.ts +9 -0
  36. package/dist/locales/nl/parsers/NLTimeUnitAgoFormatParser.js +23 -0
  37. package/dist/locales/nl/parsers/NLTimeUnitCasualRelativeFormatParser.d.ts +7 -0
  38. package/dist/locales/nl/parsers/NLTimeUnitCasualRelativeFormatParser.js +25 -0
  39. package/dist/locales/nl/parsers/NLTimeUnitLaterFormatParser.d.ts +9 -0
  40. package/dist/locales/nl/parsers/NLTimeUnitLaterFormatParser.js +22 -0
  41. package/dist/locales/nl/parsers/NLTimeUnitWithinFormatParser.js +1 -1
  42. package/dist/locales/pt/parsers/PTCasualDateParser.js +4 -4
  43. package/dist/main.js +1078 -0
  44. package/dist/results.d.ts +12 -5
  45. package/dist/results.js +40 -17
  46. package/dist/timezone.d.ts +194 -0
  47. package/dist/timezone.js +207 -0
  48. package/dist/utils/dayjs.js +0 -2
  49. package/dist/utils/pattern.js +1 -1
  50. package/package.json +3 -3
  51. package/src/chrono.ts +21 -8
  52. package/src/common/casualReferences.ts +17 -18
  53. package/src/common/refiners/ForwardDateRefiner.ts +1 -1
  54. package/src/index.ts +19 -3
  55. package/src/locales/de/constants.ts +1 -1
  56. package/src/locales/de/parsers/DECasualDateParser.ts +2 -2
  57. package/src/locales/en/constants.ts +5 -5
  58. package/src/locales/en/parsers/ENCasualDateParser.ts +5 -5
  59. package/src/locales/en/parsers/ENCasualTimeParser.ts +1 -1
  60. package/src/locales/en/parsers/ENMonthNameLittleEndianParser.ts +9 -10
  61. package/src/locales/en/parsers/ENRelativeDateFormatParser.ts +3 -3
  62. package/src/locales/en/parsers/ENTimeUnitAgoFormatParser.ts +3 -4
  63. package/src/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.ts +1 -1
  64. package/src/locales/en/parsers/ENTimeUnitLaterFormatParser.ts +2 -2
  65. package/src/locales/en/parsers/ENTimeUnitWithinFormatParser.ts +1 -1
  66. package/src/locales/fr/constants.ts +1 -1
  67. package/src/locales/fr/parsers/FRCasualDateParser.ts +4 -4
  68. package/src/locales/fr/parsers/FRTimeUnitAgoFormatParser.ts +1 -1
  69. package/src/locales/fr/parsers/FRTimeUnitRelativeFormatParser.ts +1 -1
  70. package/src/locales/fr/parsers/FRTimeUnitWithinFormatParser.ts +1 -1
  71. package/src/locales/ja/parsers/JPCasualDateParser.ts +3 -3
  72. package/src/locales/nl/constants.ts +11 -5
  73. package/src/locales/nl/index.ts +12 -3
  74. package/src/locales/nl/parsers/NLCasualDateParser.ts +4 -4
  75. package/src/locales/nl/parsers/NLRelativeDateFormatParser.ts +70 -0
  76. package/src/locales/nl/parsers/NLTimeExpressionParser.ts +4 -0
  77. package/src/locales/nl/parsers/NLTimeUnitAgoFormatParser.ts +26 -0
  78. package/src/locales/nl/parsers/NLTimeUnitCasualRelativeFormatParser.ts +27 -0
  79. package/src/locales/nl/parsers/NLTimeUnitLaterFormatParser.ts +27 -0
  80. package/src/locales/nl/parsers/NLTimeUnitWithinFormatParser.ts +1 -1
  81. package/src/locales/pt/parsers/PTCasualDateParser.ts +4 -4
  82. package/src/results.ts +52 -18
  83. package/src/timezone.ts +205 -0
  84. package/src/utils/dayjs.ts +0 -2
  85. package/src/utils/pattern.ts +1 -1
  86. package/test/en/en_month_name_little_endian.test.ts +10 -0
  87. package/test/en/en_relative.test.ts +30 -0
  88. package/test/en/en_slash.test.ts +11 -0
  89. package/test/en/en_timezone_exp.test.ts +7 -4
  90. package/test/en/en_weekday.test.ts +69 -25
  91. package/test/en/negative_cases.test.ts +2 -0
  92. package/test/nl/nl_relative.test.ts +212 -0
  93. package/test/nl/nl_time_units_ago.test.ts +243 -0
  94. package/test/nl/nl_time_units_casual_relative.test.ts +130 -0
  95. package/test/nl/nl_time_units_later.test.ts +250 -0
  96. package/test/result.test.ts +32 -13
  97. package/test/system_timezone.test.ts +100 -0
  98. package/test/test_util.ts +10 -7
package/dist/results.d.ts CHANGED
@@ -1,9 +1,15 @@
1
- import { Component, ParsedComponents, ParsedResult } from "./index";
1
+ import { Component, ParsedComponents, ParsedResult, ParsingReference } from "./index";
2
2
  import dayjs, { OpUnitType, QUnitType } from "dayjs";
3
+ export declare class ReferenceWithTimezone {
4
+ readonly instant: Date;
5
+ readonly timezoneOffset?: number;
6
+ constructor(input?: ParsingReference | Date);
7
+ }
3
8
  export declare class ParsingComponents implements ParsedComponents {
4
9
  private knownValues;
5
10
  private impliedValues;
6
- constructor(refDate: Date, knownComponents?: {
11
+ private reference;
12
+ constructor(reference: ReferenceWithTimezone, knownComponents?: {
7
13
  [c in Component]?: number;
8
14
  });
9
15
  get(component: Component): number | null;
@@ -22,8 +28,8 @@ export declare class ParsingComponents implements ParsedComponents {
22
28
  dayjs(): dayjs.Dayjs;
23
29
  date(): Date;
24
30
  private dateWithoutTimezoneAdjustment;
25
- private getTimezoneAdjustmentMinute;
26
- static createRelativeFromRefDate(refDate: Date, fragments: {
31
+ private getSystemTimezoneAdjustmentMinute;
32
+ static createRelativeFromReference(reference: ReferenceWithTimezone, fragments: {
27
33
  [c in OpUnitType | QUnitType]?: number;
28
34
  }): ParsingComponents;
29
35
  }
@@ -31,9 +37,10 @@ export declare class ParsingResult implements ParsedResult {
31
37
  refDate: Date;
32
38
  index: number;
33
39
  text: string;
40
+ reference: ReferenceWithTimezone;
34
41
  start: ParsingComponents;
35
42
  end?: ParsingComponents;
36
- constructor(refDate: Date, index: number, text: string, start?: ParsingComponents, end?: ParsingComponents);
43
+ constructor(reference: ReferenceWithTimezone, index: number, text: string, start?: ParsingComponents, end?: ParsingComponents);
37
44
  clone(): ParsingResult;
38
45
  date(): Date;
39
46
  toString(): string;
package/dist/results.js CHANGED
@@ -3,13 +3,30 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ParsingResult = exports.ParsingComponents = void 0;
6
+ exports.ParsingResult = exports.ParsingComponents = exports.ReferenceWithTimezone = void 0;
7
7
  const quarterOfYear_1 = __importDefault(require("dayjs/plugin/quarterOfYear"));
8
8
  const dayjs_1 = __importDefault(require("dayjs"));
9
9
  const dayjs_2 = require("./utils/dayjs");
10
+ const timezone_1 = require("./timezone");
10
11
  dayjs_1.default.extend(quarterOfYear_1.default);
12
+ class ReferenceWithTimezone {
13
+ constructor(input) {
14
+ var _a;
15
+ input = input !== null && input !== void 0 ? input : new Date();
16
+ if (input instanceof Date) {
17
+ this.instant = input;
18
+ this.timezoneOffset = -input.getTimezoneOffset();
19
+ }
20
+ else {
21
+ this.instant = (_a = input.instant) !== null && _a !== void 0 ? _a : new Date();
22
+ this.timezoneOffset = timezone_1.toTimezoneOffset(input.timezone);
23
+ }
24
+ }
25
+ }
26
+ exports.ReferenceWithTimezone = ReferenceWithTimezone;
11
27
  class ParsingComponents {
12
- constructor(refDate, knownComponents) {
28
+ constructor(reference, knownComponents) {
29
+ this.reference = reference;
13
30
  this.knownValues = {};
14
31
  this.impliedValues = {};
15
32
  if (knownComponents) {
@@ -17,7 +34,7 @@ class ParsingComponents {
17
34
  this.knownValues[key] = knownComponents[key];
18
35
  }
19
36
  }
20
- const refDayJs = dayjs_1.default(refDate);
37
+ const refDayJs = dayjs_1.default(reference.instant);
21
38
  this.imply("day", refDayJs.date());
22
39
  this.imply("month", refDayJs.month() + 1);
23
40
  this.imply("year", refDayJs.year());
@@ -58,7 +75,7 @@ class ParsingComponents {
58
75
  delete this.impliedValues[component];
59
76
  }
60
77
  clone() {
61
- const component = new ParsingComponents(new Date());
78
+ const component = new ParsingComponents(this.reference);
62
79
  component.knownValues = {};
63
80
  component.impliedValues = {};
64
81
  for (const key in this.knownValues) {
@@ -82,7 +99,7 @@ class ParsingComponents {
82
99
  return this.isCertain("day") && this.isCertain("month") && !this.isCertain("year");
83
100
  }
84
101
  isValidDate() {
85
- const date = this.isCertain("timezoneOffset") ? this.dateWithoutTimezoneAdjustment() : this.date();
102
+ const date = this.dateWithoutTimezoneAdjustment();
86
103
  if (date.getFullYear() !== this.get("year"))
87
104
  return false;
88
105
  if (date.getMonth() !== this.get("month") - 1)
@@ -103,32 +120,37 @@ class ParsingComponents {
103
120
  }
104
121
  date() {
105
122
  const date = this.dateWithoutTimezoneAdjustment();
106
- return new Date(date.getTime() + this.getTimezoneAdjustmentMinute(date) * 60000);
123
+ return new Date(date.getTime() + this.getSystemTimezoneAdjustmentMinute() * 60000);
107
124
  }
108
125
  dateWithoutTimezoneAdjustment() {
109
126
  const date = new Date(this.get("year"), this.get("month") - 1, this.get("day"), this.get("hour"), this.get("minute"), this.get("second"), this.get("millisecond"));
110
127
  date.setFullYear(this.get("year"));
111
128
  return date;
112
129
  }
113
- getTimezoneAdjustmentMinute(date) {
130
+ getSystemTimezoneAdjustmentMinute() {
114
131
  var _a;
115
- date = date !== null && date !== void 0 ? date : new Date();
116
- const currentTimezoneOffset = -date.getTimezoneOffset();
117
- const targetTimezoneOffset = (_a = this.get("timezoneOffset")) !== null && _a !== void 0 ? _a : currentTimezoneOffset;
132
+ const currentTimezoneOffset = -new Date().getTimezoneOffset();
133
+ const targetTimezoneOffset = (_a = this.get("timezoneOffset")) !== null && _a !== void 0 ? _a : this.reference.timezoneOffset;
118
134
  return currentTimezoneOffset - targetTimezoneOffset;
119
135
  }
120
- static createRelativeFromRefDate(refDate, fragments) {
121
- let date = dayjs_1.default(refDate);
136
+ static createRelativeFromReference(reference, fragments) {
137
+ let date = dayjs_1.default(reference.instant);
122
138
  for (const key in fragments) {
123
139
  date = date.add(fragments[key], key);
124
140
  }
125
- const components = new ParsingComponents(refDate);
141
+ const components = new ParsingComponents(reference);
126
142
  if (fragments["hour"] || fragments["minute"] || fragments["second"]) {
127
143
  dayjs_2.assignSimilarTime(components, date);
128
144
  dayjs_2.assignSimilarDate(components, date);
145
+ if (reference.timezoneOffset !== null) {
146
+ components.assign("timezoneOffset", -reference.instant.getTimezoneOffset());
147
+ }
129
148
  }
130
149
  else {
131
150
  dayjs_2.implySimilarTime(components, date);
151
+ if (reference.timezoneOffset !== null) {
152
+ components.imply("timezoneOffset", -reference.instant.getTimezoneOffset());
153
+ }
132
154
  if (fragments["d"]) {
133
155
  components.assign("day", date.date());
134
156
  components.assign("month", date.month() + 1);
@@ -159,15 +181,16 @@ class ParsingComponents {
159
181
  }
160
182
  exports.ParsingComponents = ParsingComponents;
161
183
  class ParsingResult {
162
- constructor(refDate, index, text, start, end) {
163
- this.refDate = refDate;
184
+ constructor(reference, index, text, start, end) {
185
+ this.reference = reference;
186
+ this.refDate = reference.instant;
164
187
  this.index = index;
165
188
  this.text = text;
166
- this.start = start || new ParsingComponents(this.refDate);
189
+ this.start = start || new ParsingComponents(reference);
167
190
  this.end = end;
168
191
  }
169
192
  clone() {
170
- const result = new ParsingResult(this.refDate, this.index, this.text);
193
+ const result = new ParsingResult(this.reference, this.index, this.text);
171
194
  result.start = this.start ? this.start.clone() : null;
172
195
  result.end = this.end ? this.end.clone() : null;
173
196
  return result;
@@ -0,0 +1,194 @@
1
+ export declare const TIMEZONE_ABBR_MAP: {
2
+ ACDT: number;
3
+ ACST: number;
4
+ ADT: number;
5
+ AEDT: number;
6
+ AEST: number;
7
+ AFT: number;
8
+ AKDT: number;
9
+ AKST: number;
10
+ ALMT: number;
11
+ AMST: number;
12
+ AMT: number;
13
+ ANAST: number;
14
+ ANAT: number;
15
+ AQTT: number;
16
+ ART: number;
17
+ AST: number;
18
+ AWDT: number;
19
+ AWST: number;
20
+ AZOST: number;
21
+ AZOT: number;
22
+ AZST: number;
23
+ AZT: number;
24
+ BNT: number;
25
+ BOT: number;
26
+ BRST: number;
27
+ BRT: number;
28
+ BST: number;
29
+ BTT: number;
30
+ CAST: number;
31
+ CAT: number;
32
+ CCT: number;
33
+ CDT: number;
34
+ CEST: number;
35
+ CET: number;
36
+ CHADT: number;
37
+ CHAST: number;
38
+ CKT: number;
39
+ CLST: number;
40
+ CLT: number;
41
+ COT: number;
42
+ CST: number;
43
+ CVT: number;
44
+ CXT: number;
45
+ ChST: number;
46
+ DAVT: number;
47
+ EASST: number;
48
+ EAST: number;
49
+ EAT: number;
50
+ ECT: number;
51
+ EDT: number;
52
+ EEST: number;
53
+ EET: number;
54
+ EGST: number;
55
+ EGT: number;
56
+ EST: number;
57
+ ET: number;
58
+ FJST: number;
59
+ FJT: number;
60
+ FKST: number;
61
+ FKT: number;
62
+ FNT: number;
63
+ GALT: number;
64
+ GAMT: number;
65
+ GET: number;
66
+ GFT: number;
67
+ GILT: number;
68
+ GMT: number;
69
+ GST: number;
70
+ GYT: number;
71
+ HAA: number;
72
+ HAC: number;
73
+ HADT: number;
74
+ HAE: number;
75
+ HAP: number;
76
+ HAR: number;
77
+ HAST: number;
78
+ HAT: number;
79
+ HAY: number;
80
+ HKT: number;
81
+ HLV: number;
82
+ HNA: number;
83
+ HNC: number;
84
+ HNE: number;
85
+ HNP: number;
86
+ HNR: number;
87
+ HNT: number;
88
+ HNY: number;
89
+ HOVT: number;
90
+ ICT: number;
91
+ IDT: number;
92
+ IOT: number;
93
+ IRDT: number;
94
+ IRKST: number;
95
+ IRKT: number;
96
+ IRST: number;
97
+ IST: number;
98
+ JST: number;
99
+ KGT: number;
100
+ KRAST: number;
101
+ KRAT: number;
102
+ KST: number;
103
+ KUYT: number;
104
+ LHDT: number;
105
+ LHST: number;
106
+ LINT: number;
107
+ MAGST: number;
108
+ MAGT: number;
109
+ MART: number;
110
+ MAWT: number;
111
+ MDT: number;
112
+ MESZ: number;
113
+ MEZ: number;
114
+ MHT: number;
115
+ MMT: number;
116
+ MSD: number;
117
+ MSK: number;
118
+ MST: number;
119
+ MUT: number;
120
+ MVT: number;
121
+ MYT: number;
122
+ NCT: number;
123
+ NDT: number;
124
+ NFT: number;
125
+ NOVST: number;
126
+ NOVT: number;
127
+ NPT: number;
128
+ NST: number;
129
+ NUT: number;
130
+ NZDT: number;
131
+ NZST: number;
132
+ OMSST: number;
133
+ OMST: number;
134
+ PDT: number;
135
+ PET: number;
136
+ PETST: number;
137
+ PETT: number;
138
+ PGT: number;
139
+ PHOT: number;
140
+ PHT: number;
141
+ PKT: number;
142
+ PMDT: number;
143
+ PMST: number;
144
+ PONT: number;
145
+ PST: number;
146
+ PT: number;
147
+ PWT: number;
148
+ PYST: number;
149
+ PYT: number;
150
+ RET: number;
151
+ SAMT: number;
152
+ SAST: number;
153
+ SBT: number;
154
+ SCT: number;
155
+ SGT: number;
156
+ SRT: number;
157
+ SST: number;
158
+ TAHT: number;
159
+ TFT: number;
160
+ TJT: number;
161
+ TKT: number;
162
+ TLT: number;
163
+ TMT: number;
164
+ TVT: number;
165
+ ULAT: number;
166
+ UTC: number;
167
+ UYST: number;
168
+ UYT: number;
169
+ UZT: number;
170
+ VET: number;
171
+ VLAST: number;
172
+ VLAT: number;
173
+ VUT: number;
174
+ WAST: number;
175
+ WAT: number;
176
+ WEST: number;
177
+ WESZ: number;
178
+ WET: number;
179
+ WEZ: number;
180
+ WFT: number;
181
+ WGST: number;
182
+ WGT: number;
183
+ WIB: number;
184
+ WIT: number;
185
+ WITA: number;
186
+ WST: number;
187
+ WT: number;
188
+ YAKST: number;
189
+ YAKT: number;
190
+ YAPT: number;
191
+ YEKST: number;
192
+ YEKT: number;
193
+ };
194
+ export declare function toTimezoneOffset(timezoneInput: string | number): number | null;
@@ -0,0 +1,207 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toTimezoneOffset = exports.TIMEZONE_ABBR_MAP = void 0;
4
+ exports.TIMEZONE_ABBR_MAP = {
5
+ ACDT: 630,
6
+ ACST: 570,
7
+ ADT: -180,
8
+ AEDT: 660,
9
+ AEST: 600,
10
+ AFT: 270,
11
+ AKDT: -480,
12
+ AKST: -540,
13
+ ALMT: 360,
14
+ AMST: -180,
15
+ AMT: -240,
16
+ ANAST: 720,
17
+ ANAT: 720,
18
+ AQTT: 300,
19
+ ART: -180,
20
+ AST: -240,
21
+ AWDT: 540,
22
+ AWST: 480,
23
+ AZOST: 0,
24
+ AZOT: -60,
25
+ AZST: 300,
26
+ AZT: 240,
27
+ BNT: 480,
28
+ BOT: -240,
29
+ BRST: -120,
30
+ BRT: -180,
31
+ BST: 60,
32
+ BTT: 360,
33
+ CAST: 480,
34
+ CAT: 120,
35
+ CCT: 390,
36
+ CDT: -300,
37
+ CEST: 120,
38
+ CET: 60,
39
+ CHADT: 825,
40
+ CHAST: 765,
41
+ CKT: -600,
42
+ CLST: -180,
43
+ CLT: -240,
44
+ COT: -300,
45
+ CST: -360,
46
+ CVT: -60,
47
+ CXT: 420,
48
+ ChST: 600,
49
+ DAVT: 420,
50
+ EASST: -300,
51
+ EAST: -360,
52
+ EAT: 180,
53
+ ECT: -300,
54
+ EDT: -240,
55
+ EEST: 180,
56
+ EET: 120,
57
+ EGST: 0,
58
+ EGT: -60,
59
+ EST: -300,
60
+ ET: -300,
61
+ FJST: 780,
62
+ FJT: 720,
63
+ FKST: -180,
64
+ FKT: -240,
65
+ FNT: -120,
66
+ GALT: -360,
67
+ GAMT: -540,
68
+ GET: 240,
69
+ GFT: -180,
70
+ GILT: 720,
71
+ GMT: 0,
72
+ GST: 240,
73
+ GYT: -240,
74
+ HAA: -180,
75
+ HAC: -300,
76
+ HADT: -540,
77
+ HAE: -240,
78
+ HAP: -420,
79
+ HAR: -360,
80
+ HAST: -600,
81
+ HAT: -90,
82
+ HAY: -480,
83
+ HKT: 480,
84
+ HLV: -210,
85
+ HNA: -240,
86
+ HNC: -360,
87
+ HNE: -300,
88
+ HNP: -480,
89
+ HNR: -420,
90
+ HNT: -150,
91
+ HNY: -540,
92
+ HOVT: 420,
93
+ ICT: 420,
94
+ IDT: 180,
95
+ IOT: 360,
96
+ IRDT: 270,
97
+ IRKST: 540,
98
+ IRKT: 540,
99
+ IRST: 210,
100
+ IST: 330,
101
+ JST: 540,
102
+ KGT: 360,
103
+ KRAST: 480,
104
+ KRAT: 480,
105
+ KST: 540,
106
+ KUYT: 240,
107
+ LHDT: 660,
108
+ LHST: 630,
109
+ LINT: 840,
110
+ MAGST: 720,
111
+ MAGT: 720,
112
+ MART: -510,
113
+ MAWT: 300,
114
+ MDT: -360,
115
+ MESZ: 120,
116
+ MEZ: 60,
117
+ MHT: 720,
118
+ MMT: 390,
119
+ MSD: 240,
120
+ MSK: 240,
121
+ MST: -420,
122
+ MUT: 240,
123
+ MVT: 300,
124
+ MYT: 480,
125
+ NCT: 660,
126
+ NDT: -90,
127
+ NFT: 690,
128
+ NOVST: 420,
129
+ NOVT: 360,
130
+ NPT: 345,
131
+ NST: -150,
132
+ NUT: -660,
133
+ NZDT: 780,
134
+ NZST: 720,
135
+ OMSST: 420,
136
+ OMST: 420,
137
+ PDT: -420,
138
+ PET: -300,
139
+ PETST: 720,
140
+ PETT: 720,
141
+ PGT: 600,
142
+ PHOT: 780,
143
+ PHT: 480,
144
+ PKT: 300,
145
+ PMDT: -120,
146
+ PMST: -180,
147
+ PONT: 660,
148
+ PST: -480,
149
+ PT: -480,
150
+ PWT: 540,
151
+ PYST: -180,
152
+ PYT: -240,
153
+ RET: 240,
154
+ SAMT: 240,
155
+ SAST: 120,
156
+ SBT: 660,
157
+ SCT: 240,
158
+ SGT: 480,
159
+ SRT: -180,
160
+ SST: -660,
161
+ TAHT: -600,
162
+ TFT: 300,
163
+ TJT: 300,
164
+ TKT: 780,
165
+ TLT: 540,
166
+ TMT: 300,
167
+ TVT: 720,
168
+ ULAT: 480,
169
+ UTC: 0,
170
+ UYST: -120,
171
+ UYT: -180,
172
+ UZT: 300,
173
+ VET: -210,
174
+ VLAST: 660,
175
+ VLAT: 660,
176
+ VUT: 660,
177
+ WAST: 120,
178
+ WAT: 60,
179
+ WEST: 60,
180
+ WESZ: 60,
181
+ WET: 0,
182
+ WEZ: 0,
183
+ WFT: 720,
184
+ WGST: -120,
185
+ WGT: -180,
186
+ WIB: 420,
187
+ WIT: 540,
188
+ WITA: 480,
189
+ WST: 780,
190
+ WT: 0,
191
+ YAKST: 600,
192
+ YAKT: 600,
193
+ YAPT: 600,
194
+ YEKST: 360,
195
+ YEKT: 360,
196
+ };
197
+ function toTimezoneOffset(timezoneInput) {
198
+ var _a;
199
+ if (timezoneInput === null) {
200
+ return null;
201
+ }
202
+ if (typeof timezoneInput === "number") {
203
+ return timezoneInput;
204
+ }
205
+ return (_a = exports.TIMEZONE_ABBR_MAP[timezoneInput]) !== null && _a !== void 0 ? _a : 0;
206
+ }
207
+ exports.toTimezoneOffset = toTimezoneOffset;
@@ -18,7 +18,6 @@ function assignSimilarTime(component, targetDayJs) {
18
18
  component.assign("minute", targetDayJs.minute());
19
19
  component.assign("second", targetDayJs.second());
20
20
  component.assign("millisecond", targetDayJs.millisecond());
21
- component.assign("timezoneOffset", targetDayJs.utcOffset());
22
21
  }
23
22
  exports.assignSimilarTime = assignSimilarTime;
24
23
  function implySimilarTime(component, targetDayJs) {
@@ -26,6 +25,5 @@ function implySimilarTime(component, targetDayJs) {
26
25
  component.imply("minute", targetDayJs.minute());
27
26
  component.imply("second", targetDayJs.second());
28
27
  component.imply("millisecond", targetDayJs.millisecond());
29
- component.imply("timezoneOffset", targetDayJs.utcOffset());
30
28
  }
31
29
  exports.implySimilarTime = implySimilarTime;
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.matchAnyPattern = exports.extractTerms = exports.repeatedTimeunitPattern = void 0;
4
4
  function repeatedTimeunitPattern(prefix, singleTimeunitPattern) {
5
5
  const singleTimeunitPatternNoCapture = singleTimeunitPattern.replace(/\((?!\?)/g, "(?:");
6
- return `${prefix}${singleTimeunitPatternNoCapture}\\s*(?:,?\\s{0,5}${singleTimeunitPatternNoCapture}){0,10}`;
6
+ return `${prefix}${singleTimeunitPatternNoCapture}\\s{0,5}(?:,?\\s{0,5}${singleTimeunitPatternNoCapture}){0,10}`;
7
7
  }
8
8
  exports.repeatedTimeunitPattern = repeatedTimeunitPattern;
9
9
  function extractTerms(dictionary) {
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "preset": "ts-jest"
16
16
  },
17
17
  "license": "MIT",
18
- "version": "2.2.7",
18
+ "version": "2.3.3",
19
19
  "directories": {
20
20
  "source": "./src",
21
21
  "test": "./test"
@@ -33,8 +33,8 @@
33
33
  "jest": "^26.1.0",
34
34
  "prettier": "^2.0.5",
35
35
  "ts-jest": "^26.1.1",
36
- "typedoc": "^0.20.25",
37
- "typescript": "^4.1.3"
36
+ "typedoc": "^0.20.36",
37
+ "typescript": "~4.2.4"
38
38
  },
39
39
  "husky": {
40
40
  "hooks": {
package/src/chrono.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { ParsingComponents, ParsingResult } from "./results";
2
- import { Component, ParsedResult, ParsingOption } from "./index";
1
+ import { ReferenceWithTimezone, ParsingComponents, ParsingResult } from "./results";
2
+ import { Component, ParsedResult, ParsingOption, ParsingReference } from "./index";
3
3
  import { AsyncDebugBlock, DebugHandler } from "./debugging";
4
4
  import { createCasualConfiguration } from "./locales/en";
5
5
 
@@ -68,13 +68,13 @@ export class Chrono {
68
68
  * A shortcut for calling {@Link parse | parse() } then transform the result into Javascript's Date object
69
69
  * @return Date object created from the first parse result
70
70
  */
71
- parseDate(text: string, referenceDate?: Date, option?: ParsingOption): Date | null {
71
+ parseDate(text: string, referenceDate?: ParsingReference | Date, option?: ParsingOption): Date | null {
72
72
  const results = this.parse(text, referenceDate, option);
73
73
  return results.length > 0 ? results[0].start.date() : null;
74
74
  }
75
75
 
76
- parse(text: string, referenceDate?: Date, option?: ParsingOption): ParsedResult[] {
77
- const context = new ParsingContext(text, referenceDate || new Date(), option || {});
76
+ parse(text: string, referenceDate?: ParsingReference | Date, option?: ParsingOption): ParsedResult[] {
77
+ const context = new ParsingContext(text, referenceDate, option);
78
78
 
79
79
  let results = [];
80
80
  this.parsers.forEach((parser) => {
@@ -136,14 +136,27 @@ export class Chrono {
136
136
  }
137
137
 
138
138
  export class ParsingContext implements DebugHandler {
139
- constructor(readonly text: string, readonly refDate: Date, readonly option: ParsingOption) {}
139
+ readonly text: string;
140
+ readonly option: ParsingOption;
141
+ readonly reference: ReferenceWithTimezone;
142
+
143
+ // Deprecated. Use reference.instant instead.
144
+ readonly refDate: Date;
145
+
146
+ constructor(text: string, refDate?: ParsingReference | Date, option?: ParsingOption) {
147
+ this.text = text;
148
+ this.reference = new ReferenceWithTimezone(refDate);
149
+ this.option = option ?? {};
150
+
151
+ this.refDate = this.reference.instant;
152
+ }
140
153
 
141
154
  createParsingComponents(components?: { [c in Component]?: number } | ParsingComponents): ParsingComponents {
142
155
  if (components instanceof ParsingComponents) {
143
156
  return components;
144
157
  }
145
158
 
146
- return new ParsingComponents(this.refDate, components);
159
+ return new ParsingComponents(this.reference, components);
147
160
  }
148
161
 
149
162
  createParsingResult(
@@ -157,7 +170,7 @@ export class ParsingContext implements DebugHandler {
157
170
  const start = startComponents ? this.createParsingComponents(startComponents) : null;
158
171
  const end = endComponents ? this.createParsingComponents(endComponents) : null;
159
172
 
160
- return new ParsingResult(this.refDate, index, text, start, end);
173
+ return new ParsingResult(this.reference, index, text, start, end);
161
174
  }
162
175
 
163
176
  debug(block: AsyncDebugBlock): void {