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
package/package.json CHANGED
@@ -1,41 +1,39 @@
1
1
  {
2
2
  "name": "chrono-node",
3
3
  "description": "A natural language date parser in Javascript",
4
- "homepage": "http://github.com/berryboy/chrono",
4
+ "homepage": "http://github.com/wanasit/chrono",
5
5
  "repository": {
6
6
  "type": "git",
7
- "url": "https://github.com/berryboy/chrono.git"
7
+ "url": "https://github.com/wanasit/chrono.git"
8
+ },
9
+ "jest": {
10
+ "verbose": true,
11
+ "testURL": "http://localhost/"
8
12
  },
9
13
  "license": "MIT",
10
- "version": "1.3.5",
14
+ "version": "1.4.4",
11
15
  "directories": {
12
16
  "source": "./src",
13
17
  "test": "./test"
14
18
  },
15
- "main": "./src/chrono",
19
+ "main": "./dist/chrono.js",
16
20
  "devDependencies": {
17
- "browserify": "^14.3.0",
18
- "coveralls": "^2.11.2",
19
- "istanbul": "^0.4.5",
20
- "karma": "~1.7.0",
21
- "karma-browserify": "^5.1.1",
22
- "karma-chrome-launcher": "~2.1.1",
23
- "karma-firefox-launcher": "~1.0.1",
24
- "karma-qunit": "^1.2.1",
25
- "minifyify": "^7.0.6",
26
- "qunit": "^1.0.0",
27
- "watchify": "^3.9.0"
21
+ "@babel/core": "^7.8.4",
22
+ "@babel/preset-env": "^7.8.4",
23
+ "babel-loader": "^8.0.6",
24
+ "coveralls": "^3.0.2",
25
+ "jest": "^22.0.4",
26
+ "terser-webpack-plugin": "^2.3.4",
27
+ "webpack": "^4.41.5",
28
+ "webpack-cli": "^3.3.10"
28
29
  },
29
30
  "scripts": {
30
- "make-bundle": "browserify src/chrono.js -d --s chrono -o chrono.js",
31
- "make-minify": "browserify src/chrono.js -d --s chrono -d -p [minifyify --output chrono.map.json] -o chrono.min.js",
32
- "make": "npm run make-bundle & npm run make-minify",
33
- "watch": "watchify src/chrono.js -d --s chrono -o chrono.js",
34
- "karma": "karma start",
35
- "test": "qunit -l '{summary:true, tests: true}' -c chrono:src/chrono.js -p src -t test/*.js --cov --timeout 10000",
31
+ "build": "webpack",
32
+ "watch": "jest --watch",
33
+ "test": "jest --coverage",
36
34
  "coveralls": "npm run test && cat coverage/lcov.info | coveralls"
37
35
  },
38
36
  "dependencies": {
39
- "moment": "^2.10.3"
37
+ "dayjs": "^1.8.19"
40
38
  }
41
39
  }
package/src/chrono.js CHANGED
@@ -14,8 +14,6 @@ exports.ParsedComponents = require('./result').ParsedComponents;
14
14
  var Chrono = function(option) {
15
15
 
16
16
  option = option || exports.options.casualOption();
17
-
18
- this.option = option;
19
17
  this.parsers = new Object(option.parsers);
20
18
  this.refiners = new Object(option.refiners);
21
19
  };
@@ -25,7 +23,8 @@ Chrono.prototype.parse = function(text, refDate, opt) {
25
23
 
26
24
  refDate = refDate || new Date();
27
25
  opt = opt || {};
28
-
26
+ opt.forwardDate = opt.forwardDate || opt.forwardDate;
27
+
29
28
  var allResults = [];
30
29
 
31
30
  this.parsers.forEach(function (parser) {
@@ -66,6 +65,9 @@ exports.en_GB = new Chrono( options.mergeOptions([
66
65
  exports.de = new Chrono( options.mergeOptions([
67
66
  options.de.casual, options.en, options.commonPostProcessing]));
68
67
 
68
+ exports.pt = new Chrono( options.mergeOptions([
69
+ options.pt.casual, options.en, options.commonPostProcessing]));
70
+
69
71
  exports.es = new Chrono( options.mergeOptions([
70
72
  options.es.casual, options.en, options.commonPostProcessing]));
71
73
 
package/src/options.js CHANGED
@@ -56,11 +56,12 @@ exports.commonPostProcessing = function() {
56
56
  exports.strictOption = function () {
57
57
  var strictConfig = {
58
58
  strict: true
59
- }
59
+ };
60
60
 
61
61
  return exports.mergeOptions([
62
62
  exports.en(strictConfig),
63
63
  exports.de(strictConfig),
64
+ exports.pt(strictConfig),
64
65
  exports.es(strictConfig),
65
66
  exports.fr(strictConfig),
66
67
  exports.ja(strictConfig),
@@ -74,6 +75,7 @@ exports.casualOption = function () {
74
75
  exports.en.casual,
75
76
  // Some German abbriviate overlap with common English
76
77
  exports.de({ strict: true }),
78
+ exports.pt.casual,
77
79
  exports.es.casual,
78
80
  exports.fr.casual,
79
81
  exports.ja.casual,
@@ -129,7 +131,7 @@ exports.en = function(config) {
129
131
  new parser.ENSlashDateFormatStartWithYearParser(config),
130
132
  new parser.ENSlashMonthFormatParser(config),
131
133
  new parser.ENTimeAgoFormatParser(config),
132
- new parser.ENTimeFromNowFormatParser(config),
134
+ new parser.ENTimeLaterFormatParser(config),
133
135
  new parser.ENTimeExpressionParser(config)
134
136
  ],
135
137
  refiners: [
@@ -149,7 +151,7 @@ exports.en.casual = function(config) {
149
151
  config.strict = false;
150
152
  var option = exports.en(config);
151
153
 
152
- // EN
154
+ // en
153
155
  option.parsers.unshift(new parser.ENCasualDateParser());
154
156
  option.parsers.unshift(new parser.ENCasualTimeParser());
155
157
  option.parsers.unshift(new parser.ENWeekdayParser());
@@ -191,6 +193,34 @@ exports.ja.casual = function() {
191
193
  return option;
192
194
  };
193
195
 
196
+ // -------------------------------------------------------------
197
+
198
+
199
+ exports.pt = function(config) {
200
+ return {
201
+ parsers: [
202
+ new parser.PTTimeAgoFormatParser(config),
203
+ new parser.PTDeadlineFormatParser(config),
204
+ new parser.PTTimeExpressionParser(config),
205
+ new parser.PTMonthNameLittleEndianParser(config),
206
+ new parser.PTSlashDateFormatParser(config)
207
+ ],
208
+ refiners: [
209
+ new refiner.OverlapRemovalRefiner(),
210
+ new refiner.ForwardDateRefiner()
211
+ ]
212
+ }
213
+ };
214
+
215
+ exports.pt.casual = function() {
216
+ var option = exports.pt({
217
+ strict: false
218
+ });
219
+
220
+ option.parsers.unshift(new parser.PTCasualDateParser());
221
+ option.parsers.unshift(new parser.PTWeekdayParser());
222
+ return option;
223
+ };
194
224
 
195
225
  // -------------------------------------------------------------
196
226
 
@@ -1,9 +1,4 @@
1
- /*
2
-
3
-
4
- */
5
-
6
- var moment = require('moment');
1
+ var dayjs = require('dayjs');
7
2
  var Parser = require('../parser').Parser;
8
3
  var ParsedResult = require('../../result').ParsedResult;
9
4
 
@@ -25,43 +20,45 @@ exports.Parser = function DECasualDateParser() {
25
20
  this.pattern = function() { return PATTERN; }
26
21
 
27
22
  this.extract = function(text, ref, match, opt) {
28
- var text = match[0].substr(match[1].length);
29
- var index = match.index + match[1].length;
30
- var result = new ParsedResult({
23
+ text = match[0].substr(match[1].length);
24
+
25
+ const index = match.index + match[1].length;
26
+ const result = new ParsedResult({
31
27
  index: index,
32
28
  text: text,
33
29
  ref: ref,
34
30
  });
35
31
 
36
- var refMoment = moment(ref);
37
- var startMoment = refMoment.clone();
38
- var lowerText = text.toLowerCase();
32
+ const refMoment = dayjs(ref);
33
+ const lowerText = text.toLowerCase();
34
+
35
+ var startMoment = refMoment;
39
36
 
40
37
  if (/(?:heute|diese)\s*nacht/.test(lowerText)) {
41
38
  // Normally means this coming midnight
42
39
  result.start.imply('hour', 22);
43
40
  result.start.imply('meridiem', 1);
44
41
  } else if (/^(?:ü|ue)bermorgen/.test(lowerText)) {
45
- startMoment.add(refMoment.hour() > 1 ? 2 : 1, 'day');
42
+ startMoment = startMoment.add(refMoment.hour() > 1 ? 2 : 1, 'day');
46
43
  } else if (/^morgen/.test(lowerText)) {
47
44
  // Check not "Tomorrow" on late night
48
45
  if (refMoment.hour() > 1) {
49
- startMoment.add(1, 'day');
46
+ startMoment = startMoment.add(1, 'day');
50
47
  }
51
48
  } else if (/^gestern/.test(lowerText)) {
52
- startMoment.add(-1, 'day');
49
+ startMoment = startMoment.add(-1, 'day');
53
50
  } else if (/^vorgestern/.test(lowerText)) {
54
- startMoment.add(-2, 'day');
51
+ startMoment = startMoment.add(-2, 'day');
55
52
  } else if (/letzte\s*nacht/.test(lowerText)) {
56
53
  result.start.imply('hour', 0);
57
54
  if (refMoment.hour() > 6) {
58
- startMoment.add(-1, 'day');
55
+ startMoment = startMoment.add(-1, 'day');
59
56
  }
60
57
  } else if (lowerText === 'jetzt') {
61
- result.start.imply('hour', refMoment.hour());
62
- result.start.imply('minute', refMoment.minute());
63
- result.start.imply('second', refMoment.second());
64
- result.start.imply('millisecond', refMoment.millisecond());
58
+ result.start.imply('hour', refMoment.hour());
59
+ result.start.imply('minute', refMoment.minute());
60
+ result.start.imply('second', refMoment.second());
61
+ result.start.imply('millisecond', refMoment.millisecond());
65
62
  }
66
63
 
67
64
  var secondMatch = match[3] || match[4] || match[5];
@@ -3,7 +3,7 @@
3
3
 
4
4
  */
5
5
 
6
- var moment = require('moment');
6
+ var dayjs = require('dayjs');
7
7
  var Parser = require('../parser').Parser;
8
8
  var ParsedResult = require('../../result').ParsedResult;
9
9
  var util = require('../../utils/DE');
@@ -54,17 +54,17 @@ exports.Parser = function DEDeadlineFormatParser(){
54
54
  num = parseInt(num);
55
55
  }
56
56
 
57
- var date = moment(ref);
57
+ var date = dayjs(ref);
58
58
  if (/tag|woche|monat|jahr/i.test(match[4])) {
59
59
 
60
60
  if (/tag/i.test(match[4])) {
61
- date.add(num, 'd');
61
+ date = date.add(num, 'd');
62
62
  } else if (/woche/i.test(match[4])) {
63
- date.add(num * 7, 'd');
63
+ date = date.add(num * 7, 'd');
64
64
  } else if (/monat/i.test(match[4])) {
65
- date.add(num, 'month');
65
+ date = date.add(num, 'month');
66
66
  } else if (/jahr/i.test(match[4])) {
67
- date.add(num, 'year');
67
+ date = date.add(num, 'year');
68
68
  }
69
69
 
70
70
  result.start.assign('year', date.year());
@@ -75,15 +75,15 @@ exports.Parser = function DEDeadlineFormatParser(){
75
75
 
76
76
  if (/stunde/i.test(match[4])) {
77
77
 
78
- date.add(num, 'hour');
78
+ date = date.add(num, 'hour');
79
79
 
80
80
  } else if (/min/i.test(match[4])) {
81
81
 
82
- date.add(num, 'minute');
82
+ date = date.add(num, 'minute');
83
83
 
84
84
  } else if (/sekunde/i.test(match[4])) {
85
85
 
86
- date.add(num, 'second');
86
+ date = date.add(num, 'second');
87
87
  }
88
88
 
89
89
  result.start.imply('year', date.year());
@@ -1,15 +1,9 @@
1
- /*
1
+ const dayjs = require('dayjs');
2
+ const parser = require('../parser');
3
+ const ParsedResult = require('../../result').ParsedResult;
4
+ const util = require('../../utils/DE');
2
5
 
3
-
4
- */
5
-
6
- var moment = require('moment');
7
-
8
- var Parser = require('../parser').Parser;
9
- var ParsedResult = require('../../result').ParsedResult;
10
- var util = require('../../utils/DE');
11
-
12
- var PATTERN = new RegExp('(\\W|^)' +
6
+ const PATTERN = new RegExp('(\\W|^)' +
13
7
  '(?:am\\s*?)?' +
14
8
  '(?:(Sonntag|Montag|Dienstag|Mittwoch|Donnerstag|Freitag|Samstag|So|Mo|Di|Mi|Do|Fr|Sa)\\s*,?\\s*)?' +
15
9
  '(?:den\\s*)?' +
@@ -23,21 +17,21 @@ var PATTERN = new RegExp('(\\W|^)' +
23
17
  '(?=\\W|$)', 'i'
24
18
  );
25
19
 
26
- var WEEKDAY_GROUP = 2;
27
- var DATE_GROUP = 3;
28
- var DATE_TO_GROUP = 4;
29
- var MONTH_NAME_GROUP = 5;
30
- var YEAR_GROUP = 6;
31
- var YEAR_BE_GROUP = 7;
20
+ const WEEKDAY_GROUP = 2;
21
+ const DATE_GROUP = 3;
22
+ const DATE_TO_GROUP = 4;
23
+ const MONTH_NAME_GROUP = 5;
24
+ const YEAR_GROUP = 6;
25
+ const YEAR_BE_GROUP = 7;
32
26
 
33
27
  exports.Parser = function DEMonthNameLittleEndianParser(){
34
- Parser.apply(this, arguments);
28
+ parser.Parser.apply(this, arguments);
35
29
 
36
30
  this.pattern = function() { return PATTERN; }
37
31
 
38
32
  this.extract = function(text, ref, match, opt){
39
33
 
40
- var result = new ParsedResult({
34
+ const result = new ParsedResult({
41
35
  text: match[0].substr(match[1].length, match[0].length - match[1].length),
42
36
  index: match.index + match[1].length,
43
37
  ref: ref,
@@ -70,25 +64,10 @@ exports.Parser = function DEMonthNameLittleEndianParser(){
70
64
  result.start.assign('month', month);
71
65
  result.start.assign('year', year);
72
66
  } else {
73
-
74
- //Find the most appropriated year
75
- var refMoment = moment(ref);
76
- refMoment.month(month - 1);
77
- refMoment.date(day);
78
- refMoment.year(moment(ref).year());
79
-
80
- var nextYear = refMoment.clone().add(1, 'y');
81
- var lastYear = refMoment.clone().add(-1, 'y');
82
- if( Math.abs(nextYear.diff(moment(ref))) < Math.abs(refMoment.diff(moment(ref))) ){
83
- refMoment = nextYear;
84
- }
85
- else if( Math.abs(lastYear.diff(moment(ref))) < Math.abs(refMoment.diff(moment(ref))) ){
86
- refMoment = lastYear;
87
- }
88
-
67
+ year = parser.findYearClosestToRef(ref, day, month);
89
68
  result.start.assign('day', day);
90
69
  result.start.assign('month', month);
91
- result.start.imply('year', refMoment.year());
70
+ result.start.imply('year', year);
92
71
  }
93
72
 
94
73
  // Weekday component
@@ -7,13 +7,11 @@
7
7
  - Januar 2012
8
8
  */
9
9
 
10
- var moment = require('moment');
10
+ const parser = require('../parser');
11
+ const ParsedResult = require('../../result').ParsedResult;
12
+ const util = require('../../utils/DE');
11
13
 
12
- var Parser = require('../parser').Parser;
13
- var ParsedResult = require('../../result').ParsedResult;
14
- var util = require('../../utils/DE');
15
-
16
- var PATTERN = new RegExp('(^|\\D\\s+|[^\\w\\s])' +
14
+ const PATTERN = new RegExp('(^|\\D\\s+|[^\\w\\s])' +
17
15
  '(Jan\\.?|Januar|Feb\\.?|Februar|Mär\\.?|M(?:ä|ae)rz|Mrz\\.?|Apr\\.?|April|Mai\\.?|Jun\\.?|Juni|Jul\\.?|Juli|Aug\\.?|August|Sep\\.?|Sept\\.?|September|Okt\\.?|Oktober|Nov\\.?|November|Dez\\.?|Dezember)' +
18
16
  '\\s*' +
19
17
  '(?:' +
@@ -21,14 +19,14 @@ var PATTERN = new RegExp('(^|\\D\\s+|[^\\w\\s])' +
21
19
  ')?' +
22
20
  '(?=[^\\s\\w]|$)', 'i');
23
21
 
24
- var MONTH_NAME_GROUP = 2;
25
- var YEAR_GROUP = 3;
26
- var YEAR_BE_GROUP = 4;
27
- var YEAR_GROUP2 = 5;
28
- var YEAR_BE_GROUP2 = 6;
22
+ const MONTH_NAME_GROUP = 2;
23
+ const YEAR_GROUP = 3;
24
+ const YEAR_BE_GROUP = 4;
25
+ const YEAR_GROUP2 = 5;
26
+ const YEAR_BE_GROUP2 = 6;
29
27
 
30
28
  exports.Parser = function ENMonthNameParser(){
31
- Parser.apply(this, arguments);
29
+ parser.Parser.apply(this, arguments);
32
30
 
33
31
  this.pattern = function() { return PATTERN; }
34
32
 
@@ -68,23 +66,10 @@ exports.Parser = function ENMonthNameParser(){
68
66
  result.start.assign('year', year);
69
67
  } else {
70
68
 
71
- //Find the most appropriated year
72
- var refMoment = moment(ref);
73
- refMoment.month(month - 1);
74
- refMoment.date(day);
75
-
76
- var nextYear = refMoment.clone().add(1, 'y');
77
- var lastYear = refMoment.clone().add(-1, 'y');
78
- if( Math.abs(nextYear.diff(moment(ref))) < Math.abs(refMoment.diff(moment(ref))) ){
79
- refMoment = nextYear;
80
- }
81
- else if( Math.abs(lastYear.diff(moment(ref))) < Math.abs(refMoment.diff(moment(ref))) ){
82
- refMoment = lastYear;
83
- }
84
-
69
+ year = parser.findYearClosestToRef(ref, day, month);
85
70
  result.start.imply('day', day);
86
71
  result.start.assign('month', month);
87
- result.start.imply('year', refMoment.year());
72
+ result.start.imply('year', year);
88
73
  }
89
74
 
90
75
  result.tags['DEMonthNameParser'] = true;
@@ -4,7 +4,7 @@
4
4
  - 11/3/2015
5
5
  - 11/3
6
6
  */
7
- var moment = require('moment');
7
+ var dayjs = require('dayjs');
8
8
  var Parser = require('../parser').Parser;
9
9
  var ParsedResult = require('../../result').ParsedResult;
10
10
 
@@ -72,8 +72,7 @@ exports.Parser = function DESlashDateFormatParser(argument) {
72
72
  // MM.dd -> NG
73
73
  if(!match[YEAR_GROUP] && match[0].indexOf('/') < 0) return;
74
74
 
75
- var date = null;
76
- var year = match[YEAR_GROUP] || moment(ref).year() + '';
75
+ var year = match[YEAR_GROUP] || dayjs(ref).year() + '';
77
76
  var month = match[MONTH_GROUP];
78
77
  var day = match[DAY_GROUP];
79
78
 
@@ -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 util = require('../../utils/DE');
@@ -54,20 +49,20 @@ exports.Parser = function DETimeAgoFormatParser(){
54
49
  num = parseInt(num);
55
50
  }
56
51
 
57
- var date = moment(ref);
52
+ var date = dayjs(ref);
58
53
 
59
54
  if (/stunde|min|sekunde/i.test(match[3])) {
60
55
  if (/stunde/i.test(match[3])) {
61
56
 
62
- date.add(-num, 'hour');
57
+ date = date.add(-num, 'hour');
63
58
 
64
59
  } else if (/min/i.test(match[3])) {
65
60
 
66
- date.add(-num, 'minute');
61
+ date = date.add(-num, 'minute');
67
62
 
68
63
  } else if (/sekunde/i.test(match[3])) {
69
64
 
70
- date.add(-num, 'second');
65
+ date = date.add(-num, 'second');
71
66
  }
72
67
 
73
68
  result.start.imply('day', date.date());
@@ -81,7 +76,7 @@ exports.Parser = function DETimeAgoFormatParser(){
81
76
  }
82
77
 
83
78
  if (/woche/i.test(match[3])) {
84
- date.add(-num, 'week');
79
+ date = date.add(-num, 'week');
85
80
 
86
81
  result.start.imply('day', date.date());
87
82
  result.start.imply('month', date.month() + 1);
@@ -91,16 +86,16 @@ exports.Parser = function DETimeAgoFormatParser(){
91
86
  }
92
87
 
93
88
  if (/tag/i.test(match[3])) {
94
- date.add(-num, 'd');
89
+ date = date.add(-num, 'd');
95
90
  }
96
91
 
97
92
  if (/monat/i.test(match[3])) {
98
- date.add(-num, 'month');
93
+ date = date.add(-num, 'month');
99
94
  }
100
95
 
101
96
  if (/jahr/i.test(match[3])) {
102
97
 
103
- date.add(-num, 'year');
98
+ date = date.add(-num, 'year');
104
99
  }
105
100
 
106
101
  result.start.assign('day', date.date());
@@ -3,7 +3,7 @@
3
3
 
4
4
  */
5
5
 
6
- var moment = require('moment');
6
+ const dayjs = require('dayjs');
7
7
  var Parser = require('../parser').Parser;
8
8
  var ParsedResult = require('../../result').ParsedResult;
9
9
  var ParsedComponents = require('../../result').ParsedComponents;
@@ -49,7 +49,7 @@ exports.Parser = function DETimeExpressionParser() {
49
49
 
50
50
  // This pattern can be overlaped Ex. [12] AM, 1[2] AM
51
51
  if (match.index > 0 && text[match.index-1].match(/\w/)) return null;
52
- var refMoment = moment(ref);
52
+ var refMoment = dayjs(ref);
53
53
  var result = new ParsedResult();
54
54
  result.ref = ref;
55
55
  result.index = match.index + match[1].length;
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
  */
5
- var moment = require('moment');
5
+ const dayjs = require('dayjs');
6
6
  var Parser = require('../parser').Parser;
7
7
  var ParsedResult = require('../../result').ParsedResult;
8
8
 
@@ -47,7 +47,7 @@ exports.Parser = function DEWeekdayParser() {
47
47
  var offset = DAYS_OFFSET[dayOfWeek];
48
48
  if(offset === undefined) return null;
49
49
 
50
- var startMoment = moment(ref);
50
+ var startMoment = dayjs(ref);
51
51
  var prefix = match[PREFIX_GROUP];
52
52
  var postfix = match[POSTFIX_GROUP];
53
53
 
@@ -56,24 +56,24 @@ exports.Parser = function DEWeekdayParser() {
56
56
  norm = norm || '';
57
57
  norm = norm.toLowerCase();
58
58
  if (/letzte/.test(norm)) {
59
- startMoment.day(offset - 7);
59
+ startMoment = startMoment.day(offset - 7);
60
60
  } else if (/n(?:ä|ae)chste/.test(norm)) {
61
- startMoment.day(offset + 7);
61
+ startMoment = startMoment.day(offset + 7);
62
62
  } else if (/diese/.test(norm)) {
63
- if ( opt.forwardDatesOnly && refOffset > offset ) {
64
- startMoment.day(offset + 7);
63
+ if ( opt.forwardDate && refOffset > offset ) {
64
+ startMoment = startMoment.day(offset + 7);
65
65
  } else {
66
- startMoment.day(offset);
66
+ startMoment = startMoment.day(offset);
67
67
  }
68
68
  } else {
69
- if ( opt.forwardDatesOnly && refOffset > offset ) {
70
- startMoment.day(offset + 7);
71
- } else if (!opt.forwardDatesOnly && Math.abs(offset - 7 - refOffset) < Math.abs(offset - refOffset)) {
72
- startMoment.day(offset - 7);
73
- } else if (!opt.forwardDatesOnly && Math.abs(offset + 7 - refOffset) < Math.abs(offset - refOffset)) {
74
- startMoment.day(offset + 7);
69
+ if ( opt.forwardDate && refOffset > offset ) {
70
+ startMoment = startMoment.day(offset + 7);
71
+ } else if (!opt.forwardDate && Math.abs(offset - 7 - refOffset) < Math.abs(offset - refOffset)) {
72
+ startMoment = startMoment.day(offset - 7);
73
+ } else if (!opt.forwardDate && Math.abs(offset + 7 - refOffset) < Math.abs(offset - refOffset)) {
74
+ startMoment = startMoment.day(offset + 7);
75
75
  } else {
76
- startMoment.day(offset);
76
+ startMoment = startMoment.day(offset);
77
77
  }
78
78
  }
79
79
 
@@ -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
 
@@ -25,8 +20,8 @@ exports.Parser = function ENCasualDateParser(){
25
20
  ref: ref,
26
21
  });
27
22
 
28
- var refMoment = moment(ref);
29
- var startMoment = refMoment.clone();
23
+ var refMoment = dayjs(ref);
24
+ var startMoment = refMoment;
30
25
  var lowerText = text.toLowerCase();
31
26
 
32
27
  if(lowerText == 'tonight'){
@@ -38,18 +33,18 @@ exports.Parser = function ENCasualDateParser(){
38
33
 
39
34
  // Check not "Tomorrow" on late night
40
35
  if(refMoment.hour() > 1) {
41
- startMoment.add(1, 'day');
36
+ startMoment = startMoment.add(1, 'day');
42
37
  }
43
38
 
44
39
  } else if (/^yesterday/.test(lowerText)) {
45
40
 
46
- startMoment.add(-1, 'day');
41
+ startMoment = startMoment.add(-1, 'day');
47
42
 
48
43
  } else if(lowerText.match(/last\s*night/)) {
49
44
 
50
45
  result.start.imply('hour', 0);
51
46
  if (refMoment.hour() > 6) {
52
- startMoment.add(-1, 'day');
47
+ startMoment = startMoment.add(-1, 'day');
53
48
  }
54
49
 
55
50
  } else if (lowerText.match("now")) {