chrono-node 1.3.5 → 1.4.4

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 (195) hide show
  1. package/.travis.yml +2 -0
  2. package/README.md +100 -86
  3. package/dist/chrono.js +7865 -0
  4. package/dist/chrono.js.map +1 -0
  5. package/dist/chrono.min.js +3 -0
  6. package/dist/chrono.min.js.LICENSE.txt +19 -0
  7. package/dist/chrono.min.js.map +1 -0
  8. package/package.json +20 -22
  9. package/src/chrono.js +5 -3
  10. package/src/options.js +33 -3
  11. package/src/parsers/{DE → de}/DECasualDateParser.js +18 -21
  12. package/src/parsers/{DE → de}/DEDeadlineFormatParser.js +9 -9
  13. package/src/parsers/{DE → de}/DEMonthNameLittleEndianParser.js +15 -36
  14. package/src/parsers/{DE → de}/DEMonthNameParser.js +12 -27
  15. package/src/parsers/{DE → de}/DESlashDateFormatParser.js +2 -3
  16. package/src/parsers/{DE → de}/DETimeAgoFormatParser.js +9 -14
  17. package/src/parsers/{DE → de}/DETimeExpressionParser.js +2 -2
  18. package/src/parsers/{DE → de}/DEWeekdayParser.js +14 -14
  19. package/src/parsers/{EN → en}/ENCasualDateParser.js +6 -11
  20. package/src/parsers/en/ENCasualTimeParser.js +54 -0
  21. package/src/parsers/{EN → en}/ENDeadlineFormatParser.js +15 -20
  22. package/src/parsers/{EN → en}/ENISOFormatParser.js +3 -3
  23. package/src/parsers/{EN → en}/ENMonthNameLittleEndianParser.js +25 -49
  24. package/src/parsers/{EN → en}/ENMonthNameMiddleEndianParser.js +6 -23
  25. package/src/parsers/{EN → en}/ENMonthNameParser.js +5 -22
  26. package/src/parsers/{EN → en}/ENRelativeDateFormatParser.js +48 -15
  27. package/src/parsers/{EN → en}/ENSlashDateFormatParser.js +7 -3
  28. package/src/parsers/{EN → en}/ENSlashDateFormatStartWithYearParser.js +12 -5
  29. package/src/parsers/{EN → en}/ENSlashMonthFormatParser.js +2 -5
  30. package/src/parsers/en/ENTimeAgoFormatParser.js +69 -0
  31. package/src/parsers/{EN → en}/ENTimeExpressionParser.js +26 -17
  32. package/src/parsers/en/ENTimeLaterFormatParser.js +75 -0
  33. package/src/parsers/{EN → en}/ENWeekdayParser.js +8 -12
  34. package/src/parsers/{ES → es}/ESCasualDateParser.js +8 -13
  35. package/src/parsers/{ES → es}/ESDeadlineFormatParser.js +5 -11
  36. package/src/parsers/{ES → es}/ESMonthNameLittleEndianParser.js +6 -28
  37. package/src/parsers/{ES → es}/ESSlashDateFormatParser.js +2 -2
  38. package/src/parsers/{ES → es}/ESTimeAgoFormatParser.js +8 -13
  39. package/src/parsers/{ES → es}/ESTimeExpressionParser.js +2 -7
  40. package/src/parsers/{ES → es}/ESWeekdayParser.js +1 -6
  41. package/src/parsers/{FR → fr}/FRCasualDateParser.js +6 -11
  42. package/src/parsers/{FR → fr}/FRDeadlineFormatParser.js +9 -14
  43. package/src/parsers/{FR → fr}/FRMonthNameLittleEndianParser.js +4 -26
  44. package/src/parsers/{FR → fr}/FRRelativeDateFormatParser.js +29 -34
  45. package/src/parsers/{FR → fr}/FRSlashDateFormatParser.js +22 -15
  46. package/src/parsers/{FR → fr}/FRTimeAgoFormatParser.js +8 -14
  47. package/src/parsers/{FR → fr}/FRTimeExpressionParser.js +2 -7
  48. package/src/parsers/{FR → fr}/FRWeekdayParser.js +1 -6
  49. package/src/parsers/{JP → ja}/JPCasualDateParser.js +5 -10
  50. package/src/parsers/ja/JPStandardParser.js +71 -0
  51. package/src/parsers/parser.js +80 -53
  52. package/src/parsers/pt/PTCasualDateParser.js +123 -0
  53. package/src/parsers/pt/PTDeadlineFormatParser.js +61 -0
  54. package/src/parsers/pt/PTMonthNameLittleEndianParser.js +86 -0
  55. package/src/parsers/pt/PTSlashDateFormatParser.js +114 -0
  56. package/src/parsers/pt/PTTimeAgoFormatParser.js +87 -0
  57. package/src/parsers/pt/PTTimeExpressionParser.js +234 -0
  58. package/src/parsers/pt/PTWeekdayParser.js +60 -0
  59. package/src/parsers/{ZH-Hant → zh-Hant}/ZHHantCasualDateParser.js +30 -19
  60. package/src/parsers/{ZH-Hant → zh-Hant}/ZHHantDateParser.js +2 -7
  61. package/src/parsers/{ZH-Hant → zh-Hant}/ZHHantDeadlineFormatParser.js +14 -19
  62. package/src/parsers/{ZH-Hant → zh-Hant}/ZHHantTimeExpressionParser.js +38 -11
  63. package/src/parsers/{ZH-Hant → zh-Hant}/ZHHantWeekdayParser.js +1 -7
  64. package/src/refiners/ExtractTimezoneAbbrRefiner.js +19 -10
  65. package/src/refiners/ForwardDateRefiner.js +10 -15
  66. package/src/refiners/{DE → de}/DEMergeDateRangeRefiner.js +1 -1
  67. package/src/refiners/{DE → de}/DEMergeDateTimeRefiner.js +3 -3
  68. package/src/refiners/{EN → en}/ENMergeDateRangeRefiner.js +5 -9
  69. package/src/refiners/{EN → en}/ENMergeDateTimeRefiner.js +15 -2
  70. package/src/refiners/{EN → en}/ENMergeWeekdayRefiner.js +0 -0
  71. package/src/refiners/{EN → en}/ENPrioritizeSpecificDateRefiner.js +0 -0
  72. package/src/refiners/{FR → fr}/FRMergeDateRangeRefiner.js +0 -0
  73. package/src/refiners/{FR → fr}/FRMergeDateTimeRefiner.js +1 -1
  74. package/src/refiners/{JP → ja}/JPMergeDateRangeRefiner.js +1 -1
  75. package/src/refiners/refiner.js +12 -12
  76. package/src/result.js +47 -19
  77. package/src/timezone.js +2 -0
  78. package/src/utils/EN.js +68 -2
  79. package/src/utils/PT.js +62 -0
  80. package/test/de/de.test.js +51 -0
  81. package/test/de/de_casual.test.js +432 -0
  82. package/test/de/de_dash.test.js +6 -0
  83. package/test/de/de_deadline.test.js +244 -0
  84. package/test/de/de_little_endian.test.js +459 -0
  85. package/test/de/de_time_ago.test.js +313 -0
  86. package/test/de/de_time_exp.test.js +166 -0
  87. package/test/de/de_weekday.test.js +235 -0
  88. package/test/en/en.test.js +250 -0
  89. package/test/en/en_casual.test.js +461 -0
  90. package/test/en/en_dash.test.js +31 -0
  91. package/test/en/en_deadline.test.js +366 -0
  92. package/test/{test_example.js → en/en_example.test.js} +7 -18
  93. package/test/en/en_inter_std.test.js +269 -0
  94. package/test/en/en_little_endian.test.js +566 -0
  95. package/test/en/en_middle_endian.test.js +552 -0
  96. package/test/en/en_month.test.js +156 -0
  97. package/test/en/en_option_forward.test.js +156 -0
  98. package/test/en/en_relative.test.js +228 -0
  99. package/test/en/en_slash.test.js +450 -0
  100. package/test/en/en_time_ago.test.js +374 -0
  101. package/test/en/en_time_exp.test.js +722 -0
  102. package/test/en/en_time_from_now.test.js +371 -0
  103. package/test/en/en_time_later.test.js +95 -0
  104. package/test/en/en_weekday.test.js +301 -0
  105. package/test/es/es_casual.test.js +258 -0
  106. package/test/es/es_dash.test.js +13 -0
  107. package/test/es/es_deadline.test.js +85 -0
  108. package/test/es/es_little_endian.test.js +350 -0
  109. package/test/es/es_slash.test.js +24 -0
  110. package/test/es/es_time_ago.test.js +137 -0
  111. package/test/es/es_time_exp.test.js +240 -0
  112. package/test/fr/fr_casual.test.js +454 -0
  113. package/test/fr/fr_dash.test.js +26 -0
  114. package/test/fr/fr_deadline.test.js +244 -0
  115. package/test/fr/fr_little_endian.test.js +576 -0
  116. package/test/fr/fr_relative.test.js +198 -0
  117. package/test/fr/fr_slash.test.js +81 -0
  118. package/test/fr/fr_time_ago.test.js +194 -0
  119. package/test/fr/fr_time_exp.test.js +960 -0
  120. package/test/fr/fr_weekday.test.js +200 -0
  121. package/test/ja/ja_casual.test.js +51 -0
  122. package/test/ja/ja_standard.test.js +344 -0
  123. package/test/pt/pt_casual.test.js +258 -0
  124. package/test/pt/pt_dash.test.js +13 -0
  125. package/test/pt/pt_deadline.test.js +85 -0
  126. package/test/pt/pt_little_endian.test.js +350 -0
  127. package/test/pt/pt_slash.test.js +44 -0
  128. package/test/pt/pt_time_ago.test.js +137 -0
  129. package/test/pt/pt_time_exp.test.js +240 -0
  130. package/test/system.test.js +207 -0
  131. package/test/zh/zh_hant_casual.test.js +340 -0
  132. package/test/zh/zh_hant_date.test.js +118 -0
  133. package/test/zh/zh_hant_deadline.test.js +213 -0
  134. package/test/zh/zh_hant_time_exp.test.js +226 -0
  135. package/test/zh/zh_hant_weekday.test.js +160 -0
  136. package/webpack.config.js +39 -0
  137. package/.npmignore +0 -11
  138. package/bower.json +0 -24
  139. package/chrono.js +0 -11892
  140. package/chrono.map.json +0 -1
  141. package/chrono.min.js +0 -148
  142. package/chrono.min.json +0 -1
  143. package/karma.conf.js +0 -68
  144. package/src/parsers/EN/ENCasualTimeParser.js +0 -53
  145. package/src/parsers/EN/ENTimeAgoFormatParser.js +0 -130
  146. package/src/parsers/EN/ENTimeFromNowFormatParser.js +0 -119
  147. package/src/parsers/JP/JPStandardParser.js +0 -88
  148. package/test/test_de.js +0 -62
  149. package/test/test_de_casual.js +0 -443
  150. package/test/test_de_dash.js +0 -17
  151. package/test/test_de_deadline.js +0 -255
  152. package/test/test_de_little_endian.js +0 -470
  153. package/test/test_de_time_ago.js +0 -324
  154. package/test/test_de_time_exp.js +0 -177
  155. package/test/test_de_weekday.js +0 -246
  156. package/test/test_en.js +0 -249
  157. package/test/test_en_casual.js +0 -448
  158. package/test/test_en_dash.js +0 -42
  159. package/test/test_en_deadline.js +0 -311
  160. package/test/test_en_inter_std.js +0 -272
  161. package/test/test_en_little_endian.js +0 -529
  162. package/test/test_en_middle_endian.js +0 -563
  163. package/test/test_en_month.js +0 -124
  164. package/test/test_en_option_forward.js +0 -167
  165. package/test/test_en_relative.js +0 -206
  166. package/test/test_en_slash.js +0 -370
  167. package/test/test_en_time_ago.js +0 -385
  168. package/test/test_en_time_exp.js +0 -663
  169. package/test/test_en_time_from_now.js +0 -345
  170. package/test/test_en_weekday.js +0 -312
  171. package/test/test_es_casual.js +0 -269
  172. package/test/test_es_dash.js +0 -24
  173. package/test/test_es_deadline.js +0 -96
  174. package/test/test_es_little_endian.js +0 -361
  175. package/test/test_es_slash.js +0 -35
  176. package/test/test_es_time_ago.js +0 -148
  177. package/test/test_es_time_exp.js +0 -251
  178. package/test/test_fr_casual.js +0 -465
  179. package/test/test_fr_dash.js +0 -37
  180. package/test/test_fr_deadline.js +0 -255
  181. package/test/test_fr_little_endian.js +0 -568
  182. package/test/test_fr_relative.js +0 -209
  183. package/test/test_fr_slash.js +0 -54
  184. package/test/test_fr_time_ago.js +0 -205
  185. package/test/test_fr_time_exp.js +0 -971
  186. package/test/test_fr_weekday.js +0 -211
  187. package/test/test_jp_casual.js +0 -62
  188. package/test/test_jp_standard.js +0 -181
  189. package/test/test_system.js +0 -178
  190. package/test/test_zh_hant_casual.js +0 -329
  191. package/test/test_zh_hant_date.js +0 -129
  192. package/test/test_zh_hant_deadline.js +0 -224
  193. package/test/test_zh_hant_time_exp.js +0 -210
  194. package/test/test_zh_hant_weekday.js +0 -171
  195. package/timezone.js +0 -9
@@ -1,17 +1,12 @@
1
- /*
2
-
3
-
4
- */
5
-
6
- var moment = require('moment');
1
+ const dayjs = require('dayjs');
7
2
  var Parser = require('../parser').Parser;
8
3
  var ParsedResult = require('../../result').ParsedResult;
9
4
 
10
5
  var PATTERN = new RegExp(
11
6
  '(而家|立(?:刻|即)|即刻)|' +
12
- '(今|明|聽|昨|尋|琴)(早|朝|晚)|' +
7
+ '(今|明|前|大前|後|大後|聽|昨|尋|琴)(早|朝|晚)|' +
13
8
  '(上(?:午|晝)|朝(?:早)|早(?:上)|下(?:午|晝)|晏(?:晝)|晚(?:上)|夜(?:晚)?|中(?:午)|凌(?:晨))|' +
14
- '(今|明|聽|昨|尋|琴)(?:日|天)' +
9
+ '(今|明|前|大前|後|大後|聽|昨|尋|琴)(?:日|天)' +
15
10
  '(?:[\\s|,|,]*)' +
16
11
  '(?:(上(?:午|晝)|朝(?:早)|早(?:上)|下(?:午|晝)|晏(?:晝)|晚(?:上)|夜(?:晚)?|中(?:午)|凌(?:晨)))?', 'i');
17
12
 
@@ -39,8 +34,8 @@ exports.Parser = function ZHHantCasualDateParser() {
39
34
  ref: ref,
40
35
  });
41
36
 
42
- var refMoment = moment(ref);
43
- var startMoment = refMoment.clone();
37
+ var refMoment = dayjs(ref);
38
+ var startMoment = refMoment;
44
39
 
45
40
  if (match[NOW_GROUP]) {
46
41
  result.start.imply('hour', refMoment.hour());
@@ -53,11 +48,19 @@ exports.Parser = function ZHHantCasualDateParser() {
53
48
 
54
49
  if (day1 == '明' || day1 == '聽') {
55
50
  // Check not "Tomorrow" on late night
56
- if(refMoment.hour() > 1) {
57
- startMoment.add(1, 'day');
58
- }
51
+ if(refMoment.hour() > 1) {
52
+ startMoment = startMoment.add(1, 'day');
53
+ }
59
54
  } else if (day1 == '昨' || day1 == '尋' || day1 == '琴') {
60
- startMoment.add(-1, 'day');
55
+ startMoment = startMoment.add(-1, 'day');
56
+ } else if (day1 == "前"){
57
+ startMoment = startMoment.add(-2, 'day');
58
+ } else if (day1 == "大前"){
59
+ startMoment = startMoment.add(-3, 'day');
60
+ } else if ( day1 == "後"){
61
+ startMoment = startMoment.add(2, 'day');
62
+ } else if (day1 == "大後"){
63
+ startMoment = startMoment.add(3, 'day');
61
64
  }
62
65
 
63
66
  if (time1 == '早' || time1 == '朝') {
@@ -89,12 +92,20 @@ exports.Parser = function ZHHantCasualDateParser() {
89
92
  var day3 = match[DAY_GROUP_3];
90
93
 
91
94
  if (day3 == '明' || day3 == '聽') {
92
- // Check not "Tomorrow" on late night
93
- if(refMoment.hour() > 1) {
94
- startMoment.add(1, 'day');
95
- }
95
+ // Check not "Tomorrow" on late night
96
+ if(refMoment.hour() > 1) {
97
+ startMoment = startMoment.add(1, 'day');
98
+ }
96
99
  } else if (day3 == '昨' || day3 == '尋' || day3 == '琴') {
97
- startMoment.add(-1, 'day');
100
+ startMoment = startMoment.add(-1, 'day');
101
+ } else if (day3 == "前"){
102
+ startMoment = startMoment.add(-2, 'day');
103
+ } else if (day3 == "大前"){
104
+ startMoment = startMoment.add(-3, 'day');
105
+ } else if (day3 == "後"){
106
+ startMoment = startMoment.add(2, 'day');
107
+ } else if (day3 == "大後"){
108
+ startMoment = startMoment.add(3, 'day');
98
109
  }
99
110
 
100
111
 
@@ -1,9 +1,4 @@
1
- /*
2
-
3
-
4
- */
5
-
6
- var moment = require('moment');
1
+ const dayjs = require('dayjs');
7
2
  var Parser = require('../parser').Parser;
8
3
  var ParsedResult = require('../../result').ParsedResult;
9
4
 
@@ -36,7 +31,7 @@ exports.Parser = function ZHHantDateParser() {
36
31
  };
37
32
 
38
33
  this.extract = function(text, ref, match, opt) {
39
- var startMoment = moment(ref);
34
+ var startMoment = dayjs(ref);
40
35
  var result = new ParsedResult({
41
36
  text: match[0],
42
37
  index: match.index,
@@ -1,9 +1,4 @@
1
- /*
2
-
3
-
4
- */
5
-
6
- var moment = require('moment');
1
+ const dayjs = require('dayjs');
7
2
  var Parser = require('../parser').Parser;
8
3
  var ParsedResult = require('../../result').ParsedResult;
9
4
 
@@ -55,20 +50,20 @@ exports.Parser = function ZHHantCasualDateParser() {
55
50
  }
56
51
  }
57
52
 
58
- var date = moment(ref);
53
+ var date = dayjs(ref);
59
54
  var unit = match[UNIT_GROUP];
60
55
  var unitAbbr = unit[0];
61
56
 
62
57
  if (unitAbbr.match(/[日天星禮月年]/)){
63
- if(unitAbbr == '日' || unitAbbr == '天'){
64
- date.add(number, 'd');
65
- }else if(unitAbbr == '星' || unitAbbr == '禮'){
66
- date.add(number * 7, 'd');
67
- }else if(unitAbbr == '月'){
68
- date.add(number, 'month');
69
- }else if(unitAbbr == '年'){
70
- date.add(number, 'year');
71
- }
58
+ if(unitAbbr == '日' || unitAbbr == '天'){
59
+ date = date.add(number, 'd');
60
+ }else if(unitAbbr == '星' || unitAbbr == '禮'){
61
+ date = date.add(number * 7, 'd');
62
+ }else if(unitAbbr == '月'){
63
+ date = date.add(number, 'month');
64
+ }else if(unitAbbr == '年'){
65
+ date = date.add(number, 'year');
66
+ }
72
67
 
73
68
  result.start.assign('year', date.year());
74
69
  result.start.assign('month', date.month() + 1);
@@ -77,11 +72,11 @@ exports.Parser = function ZHHantCasualDateParser() {
77
72
  }
78
73
 
79
74
  if(unitAbbr == '秒'){
80
- date.add(number, 'second');
75
+ date = date.add(number, 'second');
81
76
  }else if(unitAbbr == '分'){
82
- date.add(number, 'minute');
77
+ date = date.add(number, 'minute');
83
78
  }else if(unitAbbr == '小' || unitAbbr == '鐘'){
84
- date.add(number, 'hour');
79
+ date = date.add(number, 'hour');
85
80
  }
86
81
 
87
82
  result.start.imply('year', date.year());
@@ -1,9 +1,4 @@
1
- /*
2
-
3
-
4
- */
5
-
6
- var moment = require('moment');
1
+ const dayjs = require('dayjs');
7
2
  var Parser = require('../parser').Parser;
8
3
  var ParsedResult = require('../../result').ParsedResult;
9
4
  var ParsedComponents = require('../../result').ParsedComponents;
@@ -12,9 +7,9 @@ var util = require('../../utils/ZH-Hant.js');
12
7
 
13
8
  var patternString1 = '(?:由|從|自)?' +
14
9
  '(?:' +
15
- '(今|明|聽|昨|尋|琴)(早|朝|晚)|' +
10
+ '(今|明|前|大前|後|大後|聽|昨|尋|琴)(早|朝|晚)|' +
16
11
  '(上(?:午|晝)|朝(?:早)|早(?:上)|下(?:午|晝)|晏(?:晝)|晚(?:上)|夜(?:晚)?|中(?:午)|凌(?:晨))|' +
17
- '(今|明|聽|昨|尋|琴)(?:日|天)' +
12
+ '(今|明|前|大前|後|大後|聽|昨|尋|琴)(?:日|天)' +
18
13
  '(?:[\\s,,]*)' +
19
14
  '(?:(上(?:午|晝)|朝(?:早)|早(?:上)|下(?:午|晝)|晏(?:晝)|晚(?:上)|夜(?:晚)?|中(?:午)|凌(?:晨)))?' +
20
15
  ')?' +
@@ -28,9 +23,9 @@ var patternString1 = '(?:由|從|自)?' +
28
23
 
29
24
  var patternString2 = '(?:\\s*(?:到|至|\\-|\\–|\\~|\\〜)\\s*)' +
30
25
  '(?:' +
31
- '(今|明|聽|昨|尋|琴)(早|朝|晚)|' +
26
+ '(今|明|前|大前|後|大後|聽|昨|尋|琴)(早|朝|晚)|' +
32
27
  '(上(?:午|晝)|朝(?:早)|早(?:上)|下(?:午|晝)|晏(?:晝)|晚(?:上)|夜(?:晚)?|中(?:午)|凌(?:晨))|' +
33
- '(今|明|聽|昨|尋|琴)(?:日|天)' +
28
+ '(今|明|前|大前|後|大後|聽|昨|尋|琴)(?:日|天)' +
34
29
  '(?:[\\s,,]*)' +
35
30
  '(?:(上(?:午|晝)|朝(?:早)|早(?:上)|下(?:午|晝)|晏(?:晝)|晚(?:上)|夜(?:晚)?|中(?:午)|凌(?:晨)))?' +
36
31
  ')?' +
@@ -67,7 +62,7 @@ exports.Parser = function ZHHantTimeExpressionParser() {
67
62
 
68
63
  // This pattern can be overlaped Ex. [12] AM, 1[2] AM
69
64
  if (match.index > 0 && text[match.index - 1].match(/\w/)) return null;
70
- var refMoment = moment(ref);
65
+ var refMoment = dayjs(ref);
71
66
  var result = new ParsedResult();
72
67
  result.ref = ref;
73
68
  result.index = match.index;
@@ -86,6 +81,14 @@ exports.Parser = function ZHHantTimeExpressionParser() {
86
81
  }
87
82
  } else if (day1 == '昨' || day1 == '尋' || day1 == '琴') {
88
83
  startMoment.add(-1, 'day');
84
+ } else if (day1 == "前"){
85
+ startMoment.add(-2, 'day');
86
+ } else if (day1 == "大前"){
87
+ startMoment.add(-3, 'day');
88
+ } else if (day1 == "後"){
89
+ startMoment.add(2, 'day');
90
+ } else if (day1 == "大後"){
91
+ startMoment.add(3, 'day');
89
92
  }
90
93
  result.start.assign('day', startMoment.date());
91
94
  result.start.assign('month', startMoment.month() + 1);
@@ -96,6 +99,14 @@ exports.Parser = function ZHHantTimeExpressionParser() {
96
99
  startMoment.add(1, 'day');
97
100
  } else if (day3 == '昨' || day3 == '尋' || day3 == '琴') {
98
101
  startMoment.add(-1, 'day');
102
+ } else if (day3 == "前"){
103
+ startMoment.add(-2, 'day');
104
+ } else if (day3 == "大前"){
105
+ startMoment.add(-3, 'day');
106
+ } else if (day3 == "後"){
107
+ startMoment.add(2, 'day');
108
+ } else if (day3 == "大後"){
109
+ startMoment.add(3, 'day');
99
110
  }
100
111
  result.start.assign('day', startMoment.date());
101
112
  result.start.assign('month', startMoment.month() + 1);
@@ -237,6 +248,14 @@ exports.Parser = function ZHHantTimeExpressionParser() {
237
248
  }
238
249
  } else if (day1 == '昨' || day1 == '尋' || day1 == '琴') {
239
250
  endMoment.add(-1, 'day');
251
+ } else if (day1 == "前"){
252
+ endMoment.add(-2, 'day');
253
+ } else if (day1 == "大前"){
254
+ endMoment.add(-3, 'day');
255
+ } else if (day1 == "後"){
256
+ endMoment.add(2, 'day');
257
+ } else if (day1 == "大後"){
258
+ endMoment.add(3, 'day');
240
259
  }
241
260
  result.end.assign('day', endMoment.date());
242
261
  result.end.assign('month', endMoment.month() + 1);
@@ -247,6 +266,14 @@ exports.Parser = function ZHHantTimeExpressionParser() {
247
266
  endMoment.add(1, 'day');
248
267
  } else if (day3 == '昨' || day3 == '尋' || day3 == '琴') {
249
268
  endMoment.add(-1, 'day');
269
+ } else if (day3 == "前"){
270
+ endMoment.add(-2, 'day');
271
+ } else if (day3 == "大前"){
272
+ endMoment.add(-3, 'day');
273
+ } else if (day3 == "後"){
274
+ endMoment.add(2, 'day');
275
+ } else if (day3 == "大後"){
276
+ endMoment.add(3, 'day');
250
277
  }
251
278
  result.end.assign('day', endMoment.date());
252
279
  result.end.assign('month', endMoment.month() + 1);
@@ -1,12 +1,6 @@
1
- /*
2
-
3
-
4
- */
5
-
6
- var moment = require('moment');
7
1
  var Parser = require('../parser').Parser;
8
2
  var ParsedResult = require('../../result').ParsedResult;
9
- var updateParsedComponent = require('../EN/ENWeekdayParser').updateParsedComponent;
3
+ var updateParsedComponent = require('../en/ENWeekdayParser').updateParsedComponent;
10
4
 
11
5
  var util = require('../../utils/ZH-Hant.js');
12
6
 
@@ -4,28 +4,40 @@
4
4
  var Refiner = require('./refiner').Refiner;
5
5
 
6
6
  // Map ABBR -> Offset in minute
7
- var TIMEZONE_ABBR_MAP = {};
8
7
  var TIMEZONE_NAME_PATTERN = new RegExp("^\\s*\\(?([A-Z]{2,4})\\)?(?=\\W|$)", 'i');
8
+ var DEFAULT_TIMEZONE_ABBR_MAP = {
9
+ "ACDT":630,"ACST":570,"ADT":-180,"AEDT":660,"AEST":600,"AFT":270,"AKDT":-480,"AKST":-540,"ALMT":360,"AMST":-180,"AMT":-240,"ANAST":720,"ANAT":720,"AQTT":300,"ART":-180,"AST":-240,"AWDT":540,"AWST":480,"AZOST":0,"AZOT":-60,"AZST":300,"AZT":240,"BNT":480,"BOT":-240,"BRST":-120,"BRT":-180,"BST":60,"BTT":360,"CAST":480,"CAT":120,"CCT":390,"CDT":-300,"CEST":120,"CET":60,"CHADT":825,"CHAST":765,"CKT":-600,"CLST":-180,"CLT":-240,"COT":-300,"CST":-360,"CVT":-60,"CXT":420,"ChST":600,"DAVT":420,"EASST":-300,"EAST":-360,"EAT":180,"ECT":-300,"EDT":-240,"EEST":180,"EET":120,"EGST":0,"EGT":-60,"EST":-300,"ET":-300,"FJST":780,"FJT":720,"FKST":-180,"FKT":-240,"FNT":-120,"GALT":-360,"GAMT":-540,"GET":240,"GFT":-180,"GILT":720,"GMT":0,"GST":240,"GYT":-240,"HAA":-180,"HAC":-300,"HADT":-540,"HAE":-240,"HAP":-420,"HAR":-360,"HAST":-600,"HAT":-90,"HAY":-480,"HKT":480,"HLV":-210,"HNA":-240,"HNC":-360,"HNE":-300,"HNP":-480,"HNR":-420,"HNT":-150,"HNY":-540,"HOVT":420,"ICT":420,"IDT":180,"IOT":360,"IRDT":270,"IRKST":540,"IRKT":540,"IRST":210,"IST":330,"JST":540,"KGT":360,"KRAST":480,"KRAT":480,"KST":540,"KUYT":240,"LHDT":660,"LHST":630,"LINT":840,"MAGST":720,"MAGT":720,"MART":-510,"MAWT":300,"MDT":-360,"MESZ":120,"MEZ":60,"MHT":720,"MMT":390,"MSD":240,"MSK":240,"MST":-420,"MUT":240,"MVT":300,"MYT":480,"NCT":660,"NDT":-90,"NFT":690,"NOVST":420,"NOVT":360,"NPT":345,"NST":-150,"NUT":-660,"NZDT":780,"NZST":720,"OMSST":420,"OMST":420,"PDT":-420,"PET":-300,"PETST":720,"PETT":720,"PGT":600,"PHOT":780,"PHT":480,"PKT":300,"PMDT":-120,"PMST":-180,"PONT":660,"PST":-480,"PT":-480,"PWT":540,"PYST":-180,"PYT":-240,"RET":240,"SAMT":240,"SAST":120,"SBT":660,"SCT":240,"SGT":480,"SRT":-180,"SST":-660,"TAHT":-600,"TFT":300,"TJT":300,"TKT":780,"TLT":540,"TMT":300,"TVT":720,"ULAT":480,"UTC":0,"UYST":-120,"UYT":-180,"UZT":300,"VET":-210,"VLAST":660,"VLAT":660,"VUT":660,"WAST":120,"WAT":60,"WEST":60,"WESZ":60,"WET":0,"WEZ":0,"WFT":720,"WGST":-120,"WGT":-180,"WIB":420,"WIT":540,"WITA":480,"WST":780,"WT":0,"YAKST":600,"YAKT":600,"YAPT":600,"YEKST":360,"YEKT":360
10
+ };
9
11
 
10
- exports.Refiner = function ExtractTimezoneAbbrRefiner() {
11
- Refiner.call(this);
12
+ exports.Refiner = function ExtractTimezoneAbbrRefiner(config) {
13
+ Refiner.call(this, arguments);
12
14
 
13
15
  this.refine = function(text, results, opt) {
14
16
 
17
+ var timezones = new Object(DEFAULT_TIMEZONE_ABBR_MAP);
18
+ if (opt.timezones) {
19
+ for (var name in opt.timezones) {
20
+ timezones[name] = opt.timezones[name];
21
+ }
22
+ }
23
+
15
24
  results.forEach(function(result) {
16
25
 
17
- if (!result.tags['ENTimeExpressionParser'] && !result.tags['ZHTimeExpressionParser'] && !result.tags['FRTimeExpressionParser'] && !result.tags['DETimeExpressionParser']) {
26
+ if (!result.tags['ENTimeExpressionParser'] &&
27
+ !result.tags['ZHTimeExpressionParser'] &&
28
+ !result.tags['FRTimeExpressionParser'] &&
29
+ !result.tags['DETimeExpressionParser']) {
18
30
  return;
19
31
  }
20
32
 
21
33
  var match = TIMEZONE_NAME_PATTERN.exec(text.substring(result.index + result.text.length));
22
34
  if (match) {
23
35
  var timezoneAbbr = match[1].toUpperCase();
24
- if (TIMEZONE_ABBR_MAP[timezoneAbbr] === undefined) {
36
+ if (timezones[timezoneAbbr] === undefined) {
25
37
  return;
26
38
  }
27
39
 
28
- var timezoneOffset = TIMEZONE_ABBR_MAP[timezoneAbbr];
40
+ var timezoneOffset = timezones[timezoneAbbr];
29
41
  if (!result.start.isCertain('timezoneOffset')) {
30
42
  result.start.assign('timezoneOffset', timezoneOffset);
31
43
  }
@@ -41,7 +53,4 @@ exports.Refiner = function ExtractTimezoneAbbrRefiner() {
41
53
 
42
54
  return results;
43
55
  }
44
- }
45
-
46
- // TODO: Move this to some configuration
47
- TIMEZONE_ABBR_MAP = {"ACDT":630,"ACST":570,"ADT":-180,"AEDT":660,"AEST":600,"AFT":270,"AKDT":-480,"AKST":-540,"ALMT":360,"AMST":-180,"AMT":-240,"ANAST":720,"ANAT":720,"AQTT":300,"ART":-180,"AST":-240,"AWDT":540,"AWST":480,"AZOST":0,"AZOT":-60,"AZST":300,"AZT":240,"BNT":480,"BOT":-240,"BRST":-120,"BRT":-180,"BST":60,"BTT":360,"CAST":480,"CAT":120,"CCT":390,"CDT":-300,"CEST":120,"CET":60,"CHADT":825,"CHAST":765,"CKT":-600,"CLST":-180,"CLT":-240,"COT":-300,"CST":-360,"CVT":-60,"CXT":420,"ChST":600,"DAVT":420,"EASST":-300,"EAST":-360,"EAT":180,"ECT":-300,"EDT":-240,"EEST":180,"EET":120,"EGST":0,"EGT":-60,"EST":-300,"ET":-300,"FJST":780,"FJT":720,"FKST":-180,"FKT":-240,"FNT":-120,"GALT":-360,"GAMT":-540,"GET":240,"GFT":-180,"GILT":720,"GMT":0,"GST":240,"GYT":-240,"HAA":-180,"HAC":-300,"HADT":-540,"HAE":-240,"HAP":-420,"HAR":-360,"HAST":-600,"HAT":-90,"HAY":-480,"HKT":480,"HLV":-210,"HNA":-240,"HNC":-360,"HNE":-300,"HNP":-480,"HNR":-420,"HNT":-150,"HNY":-540,"HOVT":420,"ICT":420,"IDT":180,"IOT":360,"IRDT":270,"IRKST":540,"IRKT":540,"IRST":210,"IST":60,"JST":540,"KGT":360,"KRAST":480,"KRAT":480,"KST":540,"KUYT":240,"LHDT":660,"LHST":630,"LINT":840,"MAGST":720,"MAGT":720,"MART":-510,"MAWT":300,"MDT":-360,"MESZ":120,"MEZ":60,"MHT":720,"MMT":390,"MSD":240,"MSK":240,"MST":-420,"MUT":240,"MVT":300,"MYT":480,"NCT":660,"NDT":-90,"NFT":690,"NOVST":420,"NOVT":360,"NPT":345,"NST":-150,"NUT":-660,"NZDT":780,"NZST":720,"OMSST":420,"OMST":420,"PDT":-420,"PET":-300,"PETST":720,"PETT":720,"PGT":600,"PHOT":780,"PHT":480,"PKT":300,"PMDT":-120,"PMST":-180,"PONT":660,"PST":-480,"PT":-480,"PWT":540,"PYST":-180,"PYT":-240,"RET":240,"SAMT":240,"SAST":120,"SBT":660,"SCT":240,"SGT":480,"SRT":-180,"SST":-660,"TAHT":-600,"TFT":300,"TJT":300,"TKT":780,"TLT":540,"TMT":300,"TVT":720,"ULAT":480,"UTC":0,"UYST":-120,"UYT":-180,"UZT":300,"VET":-210,"VLAST":660,"VLAT":660,"VUT":660,"WAST":120,"WAT":60,"WEST":60,"WESZ":60,"WET":0,"WEZ":0,"WFT":720,"WGST":-120,"WGT":-180,"WIB":420,"WIT":540,"WITA":480,"WST":780,"WT":0,"YAKST":600,"YAKT":600,"YAPT":600,"YEKST":360,"YEKT":360}
56
+ };
@@ -3,7 +3,7 @@
3
3
  e.g. "March 12-13 (without year)" or "Thursday", the refiner will try to adjust the result
4
4
  into the future instead of the past.
5
5
  */
6
- var moment = require('moment');
6
+ var dayjs = require('dayjs');
7
7
  var Refiner = require('./refiner').Refiner;
8
8
 
9
9
  exports.Refiner = function ForwardDateRefiner() {
@@ -11,20 +11,18 @@ exports.Refiner = function ForwardDateRefiner() {
11
11
 
12
12
  this.refine = function(text, results, opt) {
13
13
 
14
- if (!opt['forwardDate'] && !opt['forwardDatesOnly']) {
14
+ if (!opt['forwardDate']) {
15
15
  return results;
16
16
  }
17
17
 
18
18
  results.forEach(function(result) {
19
19
 
20
- var refMoment = moment(result.ref);
20
+ var refMoment = dayjs(result.ref);
21
21
 
22
- if (result.start.isCertain('day') && result.start.isCertain('month') &&
23
- !result.start.isCertain('year') &&
24
- refMoment.isAfter(result.start.moment())
22
+ if (result.start.isOnlyDayMonthComponent() && refMoment.isAfter(result.start.dayjs())
25
23
  ) {
26
24
  // Adjust year into the future
27
- for (var i=0; i < 3 && refMoment.isAfter(result.start.moment()); i++) {
25
+ for (var i=0; i < 3 && refMoment.isAfter(result.start.dayjs()); i++) {
28
26
  result.start.imply('year', result.start.get('year') + 1);
29
27
 
30
28
  if (result.end && !result.end.isCertain('year')) {
@@ -32,24 +30,21 @@ exports.Refiner = function ForwardDateRefiner() {
32
30
  }
33
31
  }
34
32
 
35
- result.tags['ExtractTimezoneOffsetRefiner'] = true;
33
+ result.tags['ForwardDateRefiner'] = true;
36
34
  }
37
35
 
38
- if (!result.start.isCertain('day') && !result.start.isCertain('month') && !result.start.isCertain('year') &&
39
- result.start.isCertain('weekday') &&
40
- refMoment.isAfter(result.start.moment())
41
- ) {
36
+ if (result.start.isOnlyWeekdayComponent() && refMoment.isAfter(result.start.dayjs())) {
42
37
  // Adjust date to the coming week
43
38
  if (refMoment.day() > result.start.get('weekday')) {
44
- refMoment.day(result.start.get('weekday') + 7);
39
+ refMoment = refMoment.day(result.start.get('weekday') + 7);
45
40
  } else {
46
- refMoment.day(result.start.get('weekday'));
41
+ refMoment = refMoment.day(result.start.get('weekday'));
47
42
  }
48
43
 
49
44
  result.start.imply('day', refMoment.date());
50
45
  result.start.imply('month', refMoment.month() + 1);
51
46
  result.start.imply('year', refMoment.year());
52
- result.tags['ExtractTimezoneOffsetRefiner'] = true;
47
+ result.tags['ForwardDateRefiner'] = true;
53
48
  }
54
49
  });
55
50
 
@@ -1,7 +1,7 @@
1
1
  /*
2
2
 
3
3
  */
4
- var ENMergeDateRangeRefiner = require('../EN/ENMergeDateRangeRefiner').Refiner;
4
+ var ENMergeDateRangeRefiner = require('../en/ENMergeDateRangeRefiner').Refiner;
5
5
 
6
6
  exports.Refiner = function DEMergeDateRangeRefiner() {
7
7
  ENMergeDateRangeRefiner.call(this);
@@ -4,9 +4,9 @@
4
4
  var ParsedComponents = require('../../result').ParsedComponents;
5
5
  var Refiner = require('../refiner').Refiner;
6
6
 
7
- var mergeDateTimeComponent = require('../EN/ENMergeDateTimeRefiner').mergeDateTimeComponent;
8
- var isDateOnly = require('../EN/ENMergeDateTimeRefiner').isDateOnly;
9
- var isTimeOnly = require('../EN/ENMergeDateTimeRefiner').isTimeOnly;
7
+ var mergeDateTimeComponent = require('../en/ENMergeDateTimeRefiner').mergeDateTimeComponent;
8
+ var isDateOnly = require('../en/ENMergeDateTimeRefiner').isDateOnly;
9
+ var isTimeOnly = require('../en/ENMergeDateTimeRefiner').isTimeOnly;
10
10
 
11
11
  var PATTERN = new RegExp("^\\s*(T|um|am|,|-)?\\s*$");
12
12
 
@@ -48,13 +48,9 @@ exports.Refiner = function ENMergeDateRangeRefiner() {
48
48
  return textBetween.match(this.pattern());
49
49
  };
50
50
 
51
- this.isWeekdayResult = function (result) {
52
- return result.start.isCertain('weekday') && !result.start.isCertain('day');
53
- };
54
-
55
51
  this.mergeResult = function(text, fromResult, toResult) {
56
52
 
57
- if (!this.isWeekdayResult(fromResult) && !this.isWeekdayResult(toResult)) {
53
+ if (!fromResult.isOnlyWeekday() && !toResult.isOnlyWeekday()) {
58
54
 
59
55
  var timeKeys = {'hour': true, 'minute': true, 'second': true};
60
56
 
@@ -73,15 +69,15 @@ exports.Refiner = function ENMergeDateRangeRefiner() {
73
69
 
74
70
  if (fromResult.start.date().getTime() > toResult.start.date().getTime()) {
75
71
 
76
- var fromMoment = fromResult.start.moment();
77
- var toMoment = toResult.start.moment();
72
+ var fromMoment = fromResult.start.dayjs();
73
+ var toMoment = toResult.start.dayjs();
78
74
 
79
- if (this.isWeekdayResult(fromResult) && fromMoment.clone().add(-7, 'days').isBefore(toMoment)) {
75
+ if (fromResult.isOnlyWeekday() && fromMoment.add(-7, 'days').isBefore(toMoment)) {
80
76
  fromMoment = fromMoment.add(-7, 'days');
81
77
  fromResult.start.imply('day', fromMoment.date());
82
78
  fromResult.start.imply('month', fromMoment.month() + 1);
83
79
  fromResult.start.imply('year', fromMoment.year());
84
- } else if (this.isWeekdayResult(toResult) && toMoment.clone().add(7, 'days').isAfter(fromMoment)) {
80
+ } else if (toResult.isOnlyWeekday() && toMoment.add(7, 'days').isAfter(fromMoment)) {
85
81
  toMoment = toMoment.add(7, 'days');
86
82
  toResult.start.imply('day', toMoment.date());
87
83
  toResult.start.imply('month', toMoment.month() + 1);
@@ -25,14 +25,27 @@ var mergeDateTimeComponent = exports.mergeDateTimeComponent = function(dateCompo
25
25
  if (timeComponent.isCertain('hour')) {
26
26
  dateTimeComponent.assign('hour', timeComponent.get('hour'));
27
27
  dateTimeComponent.assign('minute', timeComponent.get('minute'));
28
- dateTimeComponent.assign('second', timeComponent.get('second'));
28
+
29
+ if (timeComponent.isCertain('second')) {
30
+ dateTimeComponent.assign('second', timeComponent.get('second'));
31
+
32
+ if (timeComponent.isCertain('millisecond')) {
33
+ dateTimeComponent.assign('millisecond', timeComponent.get('millisecond'));
34
+ } else {
35
+ dateTimeComponent.imply('millisecond', timeComponent.get('millisecond'));
36
+ }
37
+ } else {
38
+ dateTimeComponent.imply('second', timeComponent.get('second'));
39
+ dateTimeComponent.imply('millisecond', timeComponent.get('millisecond'));
40
+ }
41
+
29
42
  } else {
30
43
  dateTimeComponent.imply('hour', timeComponent.get('hour'));
31
44
  dateTimeComponent.imply('minute', timeComponent.get('minute'));
32
45
  dateTimeComponent.imply('second', timeComponent.get('second'));
46
+ dateTimeComponent.imply('millisecond', timeComponent.get('millisecond'));
33
47
  }
34
48
 
35
-
36
49
  if (timeComponent.isCertain('meridiem')) {
37
50
  dateTimeComponent.assign('meridiem', timeComponent.get('meridiem'));
38
51
  } else if (
File without changes
@@ -3,7 +3,7 @@
3
3
  */
4
4
  var ParsedComponents = require('../../result').ParsedComponents;
5
5
  var Refiner = require('../refiner').Refiner;
6
- var mergeDateTimeComponent = require('../EN/ENMergeDateTimeRefiner').mergeDateTimeComponent;
6
+ var mergeDateTimeComponent = require('../en/ENMergeDateTimeRefiner').mergeDateTimeComponent;
7
7
 
8
8
  var PATTERN = new RegExp("^\\s*(T|à|a|vers|de|,|-)?\\s*$");
9
9
 
@@ -1,7 +1,7 @@
1
1
  /*
2
2
 
3
3
  */
4
- var ENMergeDateRangeRefiner = require('../EN/ENMergeDateRangeRefiner').Refiner;
4
+ var ENMergeDateRangeRefiner = require('../en/ENMergeDateRangeRefiner').Refiner;
5
5
 
6
6
  exports.Refiner = function JPMergeDateRangeRefiner() {
7
7
  ENMergeDateRangeRefiner.call(this);
@@ -32,18 +32,18 @@ exports.ExtractTimezoneAbbrRefiner = require('./ExtractTimezoneAbbrRefiner').Ref
32
32
  exports.ForwardDateRefiner = require('./ForwardDateRefiner').Refiner;
33
33
  exports.UnlikelyFormatFilter = require('./UnlikelyFormatFilter').Refiner;
34
34
 
35
- // EN refiners
36
- exports.ENMergeDateTimeRefiner = require('./EN/ENMergeDateTimeRefiner').Refiner;
37
- exports.ENMergeDateRangeRefiner = require('./EN/ENMergeDateRangeRefiner').Refiner;
38
- exports.ENPrioritizeSpecificDateRefiner = require('./EN/ENPrioritizeSpecificDateRefiner').Refiner;
35
+ // en refiners
36
+ exports.ENMergeDateTimeRefiner = require('./en/ENMergeDateTimeRefiner').Refiner;
37
+ exports.ENMergeDateRangeRefiner = require('./en/ENMergeDateRangeRefiner').Refiner;
38
+ exports.ENPrioritizeSpecificDateRefiner = require('./en/ENPrioritizeSpecificDateRefiner').Refiner;
39
39
 
40
- // JP refiners
41
- exports.JPMergeDateRangeRefiner = require('./JP/JPMergeDateRangeRefiner').Refiner;
40
+ // ja refiners
41
+ exports.JPMergeDateRangeRefiner = require('./ja/JPMergeDateRangeRefiner').Refiner;
42
42
 
43
- // FR refiners
44
- exports.FRMergeDateRangeRefiner = require('./FR/FRMergeDateRangeRefiner').Refiner;
45
- exports.FRMergeDateTimeRefiner = require('./FR/FRMergeDateTimeRefiner').Refiner;
43
+ // fr refiners
44
+ exports.FRMergeDateRangeRefiner = require('./fr/FRMergeDateRangeRefiner').Refiner;
45
+ exports.FRMergeDateTimeRefiner = require('./fr/FRMergeDateTimeRefiner').Refiner;
46
46
 
47
- // DE refiners
48
- exports.DEMergeDateRangeRefiner = require('./DE/DEMergeDateRangeRefiner').Refiner;
49
- exports.DEMergeDateTimeRefiner = require('./DE/DEMergeDateTimeRefiner').Refiner;
47
+ // de refiners
48
+ exports.DEMergeDateRangeRefiner = require('./de/DEMergeDateRangeRefiner').Refiner;
49
+ exports.DEMergeDateTimeRefiner = require('./de/DEMergeDateTimeRefiner').Refiner;