From a87308f0a3db74035d1f0b68808a228b5ebff80e Mon Sep 17 00:00:00 2001 From: Wanasit Tanakitrungruang Date: Sat, 11 Jul 2020 00:06:33 +0900 Subject: [PATCH] Refactor typescript interfaces and publishing files --- .gitignore | 1 + README.md | 2 +- dist/chrono.js | 3299 ----------------- dist/chrono.js.map | 1 - dist/chrono.min.js | 3 - dist/chrono.min.js.LICENSE.txt | 9 - dist/chrono.min.js.map | 1 - package.json | 61 +- src/chrono.ts | 14 +- .../parsers/AbstractParserWithWordBoundary.ts | 27 + src/common/parsers/ISOFormatParser.ts | 9 +- src/configurations.ts | 3 +- src/index.ts | 3 +- src/locales/en/constants.ts | 2 +- src/locales/en/index.ts | 25 +- src/locales/en/parsers/ENCasualDateParser.ts | 7 +- src/locales/en/parsers/ENCasualTimeParser.ts | 7 +- .../parsers/ENMonthNameLittleEndianParser.ts | 7 +- .../parsers/ENMonthNameMiddleEndianParser.ts | 7 +- src/locales/en/parsers/ENMonthNameParser.ts | 7 +- .../en/parsers/ENRelativeDateFormatParser.ts | 8 +- .../ENSlashDateFormatStartWithYearParser.ts | 7 +- .../en/parsers/ENSlashMonthFormatParser.ts | 7 +- .../en/parsers/ENTimeUnitAgoFormatParser.ts | 11 +- .../parsers/ENTimeUnitDeadlineFormatParser.ts | 12 +- .../en/parsers/ENTimeUnitLaterFormatParser.ts | 11 +- src/locales/en/parsers/ENWeekdayParser.ts | 7 +- src/results.ts | 26 +- src/utils/ParserWithWordEndingDetection.ts | 32 - test/en/{en.test.js => en.test.ts} | 0 .../{en_casual.test.js => en_casual.test.ts} | 0 ...inter_std.test.js => en_inter_std.test.ts} | 0 .../en/{en_month.test.js => en_month.test.ts} | 0 ...js => en_month_name_little_endian.test.ts} | 0 ...js => en_month_name_middle_endian.test.ts} | 0 ...n_relative.test.js => en_relative.test.ts} | 0 .../en/{en_slash.test.js => en_slash.test.ts} | 0 ..._ago.test.js => en_time_units_ago.test.ts} | 0 ...test.js => en_time_units_deadline.test.ts} | 0 ...er.test.js => en_time_units_later.test.ts} | 0 ...{en_weekday.test.js => en_weekday.test.ts} | 0 .../{ja_casual.test.js => ja_casual.test.ts} | 0 ...a_standard.test.js => ja_standard.test.ts} | 4 +- test/{result.test.js => result.test.ts} | 22 +- test/{system.test.js => system.test.ts} | 0 test/test_util.ts | 2 +- tsconfig.build.json | 6 + tsconfig.json | 23 + webpack.config.js | 40 - 49 files changed, 184 insertions(+), 3529 deletions(-) delete mode 100644 dist/chrono.js delete mode 100644 dist/chrono.js.map delete mode 100644 dist/chrono.min.js delete mode 100644 dist/chrono.min.js.LICENSE.txt delete mode 100644 dist/chrono.min.js.map create mode 100644 src/common/parsers/AbstractParserWithWordBoundary.ts delete mode 100644 src/utils/ParserWithWordEndingDetection.ts rename test/en/{en.test.js => en.test.ts} (100%) rename test/en/{en_casual.test.js => en_casual.test.ts} (100%) rename test/en/{en_inter_std.test.js => en_inter_std.test.ts} (100%) rename test/en/{en_month.test.js => en_month.test.ts} (100%) rename test/en/{en_month_name_little_endian.test.js => en_month_name_little_endian.test.ts} (100%) rename test/en/{en_month_name_middle_endian.test.js => en_month_name_middle_endian.test.ts} (100%) rename test/en/{en_relative.test.js => en_relative.test.ts} (100%) rename test/en/{en_slash.test.js => en_slash.test.ts} (100%) rename test/en/{en_time_units_ago.test.js => en_time_units_ago.test.ts} (100%) rename test/en/{en_time_units_deadline.test.js => en_time_units_deadline.test.ts} (100%) rename test/en/{en_time_units_later.test.js => en_time_units_later.test.ts} (100%) rename test/en/{en_weekday.test.js => en_weekday.test.ts} (100%) rename test/ja/{ja_casual.test.js => ja_casual.test.ts} (100%) rename test/ja/{ja_standard.test.js => ja_standard.test.ts} (98%) rename test/{result.test.js => result.test.ts} (72%) rename test/{system.test.js => system.test.ts} (100%) create mode 100644 tsconfig.build.json create mode 100644 tsconfig.json delete mode 100644 webpack.config.js diff --git a/.gitignore b/.gitignore index 6f49da0d..88a983bc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ # Node Modules +dist/ node_modules/* package-lock.json diff --git a/README.md b/README.md index a0f000d5..4464c647 100644 --- a/README.md +++ b/README.md @@ -172,7 +172,7 @@ Chrono’s extraction pipeline configuration consists of `parsers: Parser[]` and interface Parser { pattern: (context: ParsingContext) => RegExp, extract: (context: ParsingContext, match: RegExpMatchArray) => - (ParsingComponents | ParsingResult | {[c: Component]: string|number} | null) + (ParsingComponents | ParsingResult | {[c in Component]?: number} | null) } ``` diff --git a/dist/chrono.js b/dist/chrono.js deleted file mode 100644 index dafe23ea..00000000 --- a/dist/chrono.js +++ /dev/null @@ -1,3299 +0,0 @@ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define([], factory); - else if(typeof exports === 'object') - exports["chrono"] = factory(); - else - root["chrono"] = factory(); -})(this, function() { -return /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // create a fake namespace object -/******/ // mode & 1: value is a module id, require it -/******/ // mode & 2: merge all properties of value into the ns -/******/ // mode & 4: return value when already ns object -/******/ // mode & 8|1: behave like require -/******/ __webpack_require__.t = function(value, mode) { -/******/ if(mode & 1) value = __webpack_require__(value); -/******/ if(mode & 8) return value; -/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ var ns = Object.create(null); -/******/ __webpack_require__.r(ns); -/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ return ns; -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 1); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports, __webpack_require__) { - -!function(t,e){ true?module.exports=e():undefined}(this,function(){"use strict";var t="millisecond",e="second",n="minute",r="hour",i="day",s="week",u="month",o="quarter",a="year",h=/^(\d{4})-?(\d{1,2})-?(\d{0,2})[^0-9]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?.?(\d{1,3})?$/,f=/\[([^\]]+)]|Y{2,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,c=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},d={s:c,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?"+":"-")+c(r,2,"0")+":"+c(i,2,"0")},m:function(t,e){var n=12*(e.year()-t.year())+(e.month()-t.month()),r=t.clone().add(n,u),i=e-r<0,s=t.clone().add(n+(i?-1:1),u);return Number(-(n+(e-r)/(i?r-s:s-r))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(h){return{M:u,y:a,w:s,d:i,D:"date",h:r,m:n,s:e,ms:t,Q:o}[h]||String(h||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},$={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")},l="en",m={};m[l]=$;var y=function(t){return t instanceof v},M=function(t,e,n){var r;if(!t)return l;if("string"==typeof t)m[t]&&(r=t),e&&(m[t]=e,r=t);else{var i=t.name;m[i]=t,r=i}return!n&&r&&(l=r),r||!n&&l},g=function(t,e){if(y(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new v(n)},D=d;D.l=M,D.i=y,D.w=function(t,e){return g(t,{locale:e.$L,utc:e.$u,$offset:e.$offset})};var v=function(){function c(t){this.$L=this.$L||M(t.locale,null,!0),this.parse(t)}var d=c.prototype;return d.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(D.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match(h);if(r)return n?new Date(Date.UTC(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)):new Date(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)}return new Date(e)}(t),this.init()},d.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},d.$utils=function(){return D},d.isValid=function(){return!("Invalid Date"===this.$d.toString())},d.isSame=function(t,e){var n=g(t);return this.startOf(e)<=n&&n<=this.endOf(e)},d.isAfter=function(t,e){return g(t) arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - -function patternWithWordBreak(regExp) { - return RegExp('' + regExp.source); -} -function extractTerms(dictionary) { - var keys; - - if (dictionary instanceof Array) { - keys = _toConsumableArray(dictionary); - } else if (dictionary instanceof Map) { - keys = Array.from(dictionary.keys()); - } else { - keys = Object.keys(dictionary); - } - - return keys; -} -function matchAnyPattern(dictionary) { - // TODO: More efficient regex pattern by considering duplicated prefix - var joinedTerms = extractTerms(dictionary).sort(function (a, b) { - return b.length - a.length; - }).join('|').replace(/\./g, '\\.'); - return "(?:".concat(joinedTerms, ")"); -} -// CONCATENATED MODULE: ./src/locales/en/constants.ts - -var WEEKDAY_DICTIONARY = { - 'sunday': 0, - 'sun': 0, - 'sun.': 0, - 'monday': 1, - 'mon': 1, - 'mon.': 1, - 'tuesday': 2, - 'tue': 2, - 'tue.': 2, - 'wednesday': 3, - 'wed': 3, - 'wed.': 3, - 'thursday': 4, - 'thurs': 4, - 'thurs.': 4, - 'thur': 4, - 'thur.': 4, - 'thu': 4, - 'thu.': 4, - 'friday': 5, - 'fri': 5, - 'fri.': 5, - 'saturday': 6, - 'sat': 6, - 'sat.': 6 -}; -var MONTH_DICTIONARY = { - 'january': 1, - 'jan': 1, - 'jan.': 1, - 'february': 2, - 'feb': 2, - 'feb.': 2, - 'march': 3, - 'mar': 3, - 'mar.': 3, - 'april': 4, - 'apr': 4, - 'apr.': 4, - 'may': 5, - 'june': 6, - 'jun': 6, - 'jun.': 6, - 'july': 7, - 'jul': 7, - 'jul.': 7, - 'august': 8, - 'aug': 8, - 'aug.': 8, - 'september': 9, - 'sep': 9, - 'sep.': 9, - 'sept': 9, - 'sept.': 9, - 'october': 10, - 'oct': 10, - 'oct.': 10, - 'november': 11, - 'nov': 11, - 'nov.': 11, - 'december': 12, - 'dec': 12, - 'dec.': 12 -}; -var INTEGER_WORD_DICTIONARY = { - 'one': 1, - 'two': 2, - 'three': 3, - 'four': 4, - 'five': 5, - 'six': 6, - 'seven': 7, - 'eight': 8, - 'nine': 9, - 'ten': 10, - 'eleven': 11, - 'twelve': 12 -}; -var ORDINAL_WORD_DICTIONARY = { - 'first': 1, - 'second': 2, - 'third': 3, - 'fourth': 4, - 'fifth': 5, - 'sixth': 6, - 'seventh': 7, - 'eighth': 8, - 'ninth': 9, - 'tenth': 10, - 'eleventh': 11, - 'twelfth': 12, - 'thirteenth': 13, - 'fourteenth': 14, - 'fifteenth': 15, - 'sixteenth': 16, - 'seventeenth': 17, - 'eighteenth': 18, - 'nineteenth': 19, - 'twentieth': 20, - 'twenty first': 21, - 'twenty-first': 21, - 'twenty second': 22, - 'twenty-second': 22, - 'twenty third': 23, - 'twenty-third': 23, - 'twenty fourth': 24, - 'twenty-fourth': 24, - 'twenty fifth': 25, - 'twenty-fifth': 25, - 'twenty sixth': 26, - 'twenty-sixth': 26, - 'twenty seventh': 27, - 'twenty-seventh': 27, - 'twenty eighth': 28, - 'twenty-eighth': 28, - 'twenty ninth': 29, - 'twenty-ninth': 29, - 'thirtieth': 30, - 'thirty first': 31, - 'thirty-first': 31 -}; -var TIME_UNIT_DICTIONARY = { - 'sec': 'second', - 'second': 'second', - 'seconds': 'second', - 'min': 'minute', - 'mins': 'minute', - 'minute': 'minute', - 'minutes': 'minute', - 'h': 'hour', - 'hr': 'hour', - 'hrs': 'hour', - 'hour': 'hour', - 'hours': 'hour', - 'day': 'd', - 'days': 'd', - 'week': 'week', - 'weeks': 'week', - 'month': 'month', - 'months': 'month', - 'yr': 'year', - 'year': 'year', - 'years': 'year' -}; //----------------------------- - -var NUMBER_PATTERN = "(?:".concat(matchAnyPattern(INTEGER_WORD_DICTIONARY), "|[0-9]+|[0-9]+\\.[0-9]+|half(?:\\s*an?)?|an?(?:\\s*few)?|few)"); -function parseNumberPattern(match) { - var num = match.toLowerCase(); - - if (INTEGER_WORD_DICTIONARY[num] !== undefined) { - return INTEGER_WORD_DICTIONARY[num]; - } else if (num === 'a' || num === 'an') { - return 1; - } else if (num.match(/few/)) { - return 3; - } else if (num.match(/half/)) { - return 0.5; - } - - return parseFloat(num); -} //----------------------------- - -var ORDINAL_NUMBER_PATTERN = "(?:".concat(matchAnyPattern(ORDINAL_WORD_DICTIONARY), "|[0-9]{1,2}(?:st|nd|rd|th)?)"); -function parseOrdinalNumberPattern(match) { - var num = match.toLowerCase(); - - if (ORDINAL_WORD_DICTIONARY[num] !== undefined) { - return ORDINAL_WORD_DICTIONARY[num]; - } - - num = num.replace(/(?:st|nd|rd|th)$/i, ''); - return parseInt(num); -} //----------------------------- - -var YEAR_PATTERN = "(?:[1-9][0-9]{0,3}\\s*(?:BE|AD|BC)|[1-2][0-9]{3}|[5-9][0-9])"; -function parseYear(match) { - if (/BE/i.test(match)) { - // Buddhist Era - match = match.replace(/BE/i, ''); - return parseInt(match) - 543; - } - - if (/BC/i.test(match)) { - // Before Christ - match = match.replace(/BC/i, ''); - return -parseInt(match); - } - - if (/AD/i.test(match)) { - match = match.replace(/AD/i, ''); - return parseInt(match); - } - - var yearNumber = parseInt(match); - - if (yearNumber < 100) { - if (yearNumber > 50) { - yearNumber = yearNumber + 1900; - } else { - yearNumber = yearNumber + 2000; - } - } - - return yearNumber; -} //----------------------------- - -var SINGLE_TIME_UNIT_PATTERN = "(".concat(NUMBER_PATTERN, ")\\s*(").concat(matchAnyPattern(TIME_UNIT_DICTIONARY), ")\\s*"); -var SINGLE_TIME_UNIT_REGEX = new RegExp(SINGLE_TIME_UNIT_PATTERN, 'i'); -var SINGLE_TIME_UNIT_PATTERN_NO_CAPTURE = SINGLE_TIME_UNIT_PATTERN.replace(/\((?!\?)/g, '(?:'); -var TIME_UNITS_PATTERN = "(?:".concat(SINGLE_TIME_UNIT_PATTERN_NO_CAPTURE, ")+"); -function parseTimeUnits(timeunitText) { - var fragments = {}; - var remainingText = timeunitText; - var match = SINGLE_TIME_UNIT_REGEX.exec(remainingText); - - while (match) { - collectDateTimeFragment(fragments, match); - remainingText = remainingText.substring(match[0].length); - match = SINGLE_TIME_UNIT_REGEX.exec(remainingText); - } - - return fragments; -} - -function collectDateTimeFragment(fragments, match) { - var num = parseNumberPattern(match[1]); - var unit = TIME_UNIT_DICTIONARY[match[2].toLowerCase()]; - fragments[unit] = num; -} -// EXTERNAL MODULE: ./node_modules/dayjs/dayjs.min.js -var dayjs_min = __webpack_require__(0); -var dayjs_min_default = /*#__PURE__*/__webpack_require__.n(dayjs_min); - -// CONCATENATED MODULE: ./src/results.ts -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - - -var results_ParsingComponents = /*#__PURE__*/function () { - function ParsingComponents(refDate, knownComponents) { - _classCallCheck(this, ParsingComponents); - - this.knownValues = {}; - this.impliedValues = {}; - - if (knownComponents) { - for (var key in knownComponents) { - this.knownValues[key] = knownComponents[key]; - } - } - - var refDayJs = dayjs_min_default()(refDate); - - this.imply('day', refDayJs.date()); - this.imply('month', refDayJs.month() + 1); - this.imply('year', refDayJs.year()); - this.imply('hour', 12); - this.imply('minute', 0); - this.imply('second', 0); - this.imply('millisecond', 0); - } - - _createClass(ParsingComponents, [{ - key: "get", - value: function get(component) { - if (component in this.knownValues) { - return this.knownValues[component]; - } - - if (component in this.impliedValues) { - return this.impliedValues[component]; - } - - return null; - } - }, { - key: "date", - value: function date() { - return this.dayjs().toDate(); - } - }, { - key: "isCertain", - value: function isCertain(component) { - return component in this.knownValues; - } - }, { - key: "getCertainComponents", - value: function getCertainComponents() { - return Object.keys(this.knownValues); - } - }, { - key: "imply", - value: function imply(component, value) { - if (component in this.knownValues) return; - this.impliedValues[component] = value; - return this; - } - }, { - key: "assign", - value: function assign(component, value) { - this.knownValues[component] = value; - delete this.impliedValues[component]; - return this; - } - }, { - key: "clone", - value: function clone() { - var component = new ParsingComponents(new Date()); - component.knownValues = {}; - component.impliedValues = {}; - - for (var key in this.knownValues) { - component.knownValues[key] = this.knownValues[key]; - } - - for (var _key in this.impliedValues) { - component.impliedValues[_key] = this.impliedValues[_key]; - } - - return component; - } - }, { - key: "isOnlyDate", - value: function isOnlyDate() { - return !this.isCertain('hour') && !this.isCertain('minute') && !this.isCertain('second'); - } - }, { - key: "isOnlyTime", - value: function isOnlyTime() { - return !this.isCertain('weekday') && !this.isCertain('day') && !this.isCertain('month'); - } - }, { - key: "isOnlyWeekdayComponent", - value: function isOnlyWeekdayComponent() { - return this.isCertain('weekday') && !this.isCertain('day') && !this.isCertain('month'); - } - }, { - key: "isOnlyDayMonthComponent", - value: function isOnlyDayMonthComponent() { - return this.isCertain('day') && this.isCertain('month') && !this.isCertain('year'); - } - }, { - key: "isValidDate", - value: function isValidDate() { - var dateMoment = this.dayjs(); - - if (this.isCertain('timezoneOffset')) { - var adjustTimezoneOffset = this.get('timezoneOffset') - dateMoment.utcOffset(); - dateMoment = dateMoment.add(adjustTimezoneOffset, 'minute'); - } - - if (dateMoment.get('year') != this.get('year')) return false; - if (dateMoment.get('month') != this.get('month') - 1) return false; - if (dateMoment.get('date') != this.get('day')) return false; - if (dateMoment.get('hour') != this.get('hour')) return false; - if (dateMoment.get('minute') != this.get('minute')) return false; - return true; - } - }, { - key: "dayjs", - value: function dayjs() { - var result = dayjs_min_default()(); - - result = result.year(this.get('year')); - result = result.month(this.get('month') - 1); - result = result.date(this.get('day')); - result = result.hour(this.get('hour')); - result = result.minute(this.get('minute')); - result = result.second(this.get('second')); - result = result.millisecond(this.get('millisecond')); // Javascript Date Object return minus timezone offset - - var currentTimezoneOffset = result.utcOffset(); - var targetTimezoneOffset = this.get('timezoneOffset') !== null ? this.get('timezoneOffset') : currentTimezoneOffset; - var adjustTimezoneOffset = targetTimezoneOffset - currentTimezoneOffset; - result = result.add(-adjustTimezoneOffset, 'minute'); - return result; - } - }, { - key: "toString", - value: function toString() { - return "[ParsingComponents {knownValues: ".concat(JSON.stringify(this.knownValues), ", impliedValues: ").concat(JSON.stringify(this.impliedValues), "}]"); - } - }], [{ - key: "createRelativeFromRefDate", - value: function createRelativeFromRefDate(refDate, fragments) { - var date = dayjs_min_default()(refDate); - - for (var key in fragments) { - date = date.add(fragments[key], key); - } - - var components = new ParsingComponents(refDate); - - if (fragments['hour'] || fragments['minute'] || fragments['second']) { - components.assign('hour', date.hour()); - components.assign('minute', date.minute()); - components.assign('second', date.second()); - } - - if (fragments['d'] || fragments['month'] || fragments['year']) { - components.assign('day', date.date()); - components.assign('month', date.month() + 1); - components.assign('year', date.year()); - } else { - if (fragments['week']) { - components.imply('weekday', date.day()); - } - - components.imply('day', date.date()); - components.imply('month', date.month() + 1); - components.imply('year', date.year()); - } - - return components; - } - }]); - - return ParsingComponents; -}(); -var ParsingResult = /*#__PURE__*/function () { - function ParsingResult(refDate, index, text, start, end) { - _classCallCheck(this, ParsingResult); - - this.refDate = refDate; - this.index = index; - this.text = text; - this.start = start || new results_ParsingComponents(this.refDate); - this.end = end; - } - - _createClass(ParsingResult, [{ - key: "clone", - value: function clone() { - var result = new ParsingResult(this.refDate, this.index, this.text); - result.start = this.start ? this.start.clone() : null; - result.end = this.end ? this.end.clone() : null; - return result; - } - }, { - key: "date", - value: function date() { - return this.start.date(); - } - }, { - key: "toString", - value: function toString() { - return "[ParsingResult {index: ".concat(this.index, ", text: '").concat(this.text, "', ...}]"); - } - }]); - - return ParsingResult; -}(); -// CONCATENATED MODULE: ./src/locales/en/parsers/ENTimeUnitDeadlineFormatParser.ts -function ENTimeUnitDeadlineFormatParser_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function ENTimeUnitDeadlineFormatParser_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function ENTimeUnitDeadlineFormatParser_createClass(Constructor, protoProps, staticProps) { if (protoProps) ENTimeUnitDeadlineFormatParser_defineProperties(Constructor.prototype, protoProps); if (staticProps) ENTimeUnitDeadlineFormatParser_defineProperties(Constructor, staticProps); return Constructor; } - - - -var PATTERN = new RegExp("(?:within|in)\\s*" + '(' + TIME_UNITS_PATTERN + ')' + "(?=\\W|$)", 'i'); -var STRICT_PATTERN = new RegExp("(?:within|in)\\s*" + '(' + TIME_UNITS_PATTERN + ')' + "(?=\\W|$)", 'i'); - -var ENTimeUnitDeadlineFormatParser_ENTimeUnitDeadlineFormatParser = /*#__PURE__*/function () { - function ENTimeUnitDeadlineFormatParser(strictMode) { - ENTimeUnitDeadlineFormatParser_classCallCheck(this, ENTimeUnitDeadlineFormatParser); - - this.strictMode = strictMode; - } - - ENTimeUnitDeadlineFormatParser_createClass(ENTimeUnitDeadlineFormatParser, [{ - key: "pattern", - value: function pattern() { - return this.strictMode ? STRICT_PATTERN : PATTERN; - } - }, { - key: "extract", - value: function extract(context, match) { - var timeUnits = parseTimeUnits(match[1]); - return results_ParsingComponents.createRelativeFromRefDate(context.refDate, timeUnits); - } - }]); - - return ENTimeUnitDeadlineFormatParser; -}(); - - -// CONCATENATED MODULE: ./src/calculation/yearCalculation.ts - -function findYearClosestToRef(refDate, day, month) { - //Find the most appropriated year - var refMoment = dayjs_min_default()(refDate); - var dateMoment = refMoment; - dateMoment = dateMoment.month(month - 1); - dateMoment = dateMoment.date(day); - dateMoment = dateMoment.year(refMoment.year()); - var nextYear = dateMoment.add(1, 'y'); - var lastYear = dateMoment.add(-1, 'y'); - - if (Math.abs(nextYear.diff(refMoment)) < Math.abs(dateMoment.diff(refMoment))) { - dateMoment = nextYear; - } else if (Math.abs(lastYear.diff(refMoment)) < Math.abs(dateMoment.diff(refMoment))) { - dateMoment = lastYear; - } - - return dateMoment.year(); -} -// CONCATENATED MODULE: ./src/locales/en/parsers/ENMonthNameLittleEndianParser.ts -function ENMonthNameLittleEndianParser_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function ENMonthNameLittleEndianParser_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function ENMonthNameLittleEndianParser_createClass(Constructor, protoProps, staticProps) { if (protoProps) ENMonthNameLittleEndianParser_defineProperties(Constructor.prototype, protoProps); if (staticProps) ENMonthNameLittleEndianParser_defineProperties(Constructor, staticProps); return Constructor; } - - - - - - -var ENMonthNameLittleEndianParser_PATTERN = new RegExp('(?:on\\s*?)?' + "(?:(".concat(matchAnyPattern(WEEKDAY_DICTIONARY), ")\\s*,?\\s*)?") + "(".concat(ORDINAL_NUMBER_PATTERN, ")") + '(?:\\s*' + '(?:to|\\-|\\–|until|through|till|\\s)\\s*' + "(".concat(ORDINAL_NUMBER_PATTERN, ")") + ')?' + '(?:-|/|\\s*(?:of)?\\s*)' + '(' + matchAnyPattern(MONTH_DICTIONARY) + ')' + '(?:' + '(?:-|/|,?\\s*)' + "(".concat(YEAR_PATTERN, "(?![^\\s]\\d))") + ')?' + '(?=\\W|$)', 'i'); -var WEEKDAY_GROUP = 1; -var DATE_GROUP = 2; -var DATE_TO_GROUP = 3; -var MONTH_NAME_GROUP = 4; -var YEAR_GROUP = 5; - -var ENMonthNameLittleEndianParser_ENMonthNameLittleEndianParser = /*#__PURE__*/function () { - function ENMonthNameLittleEndianParser() { - ENMonthNameLittleEndianParser_classCallCheck(this, ENMonthNameLittleEndianParser); - } - - ENMonthNameLittleEndianParser_createClass(ENMonthNameLittleEndianParser, [{ - key: "pattern", - value: function pattern() { - return ENMonthNameLittleEndianParser_PATTERN; - } - }, { - key: "extract", - value: function extract(context, match) { - //console.log(match) - var result = context.createParsingResult(match.index, match[0]); - var month = MONTH_DICTIONARY[match[MONTH_NAME_GROUP].toLowerCase()]; - var day = parseOrdinalNumberPattern(match[DATE_GROUP]); - result.start.assign('month', month); - result.start.assign('day', day); - - if (match[WEEKDAY_GROUP]) { - var weekday = WEEKDAY_DICTIONARY[match[WEEKDAY_GROUP].toLowerCase()]; - result.start.assign('weekday', weekday); - } - - if (match[YEAR_GROUP]) { - var yearNumber = parseYear(match[YEAR_GROUP]); - result.start.assign('year', yearNumber); - } else { - var year = findYearClosestToRef(context.refDate, day, month); - result.start.imply('year', year); - } - - if (match[DATE_TO_GROUP]) { - var endDate = parseOrdinalNumberPattern(match[DATE_TO_GROUP]); - result.end = result.start.clone(); - result.end.assign('day', endDate); - } - - return result; - } - }]); - - return ENMonthNameLittleEndianParser; -}(); - - -// CONCATENATED MODULE: ./src/locales/en/parsers/ENMonthNameMiddleEndianParser.ts -function ENMonthNameMiddleEndianParser_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function ENMonthNameMiddleEndianParser_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function ENMonthNameMiddleEndianParser_createClass(Constructor, protoProps, staticProps) { if (protoProps) ENMonthNameMiddleEndianParser_defineProperties(Constructor.prototype, protoProps); if (staticProps) ENMonthNameMiddleEndianParser_defineProperties(Constructor, staticProps); return Constructor; } - - - - - - -var ENMonthNameMiddleEndianParser_PATTERN = new RegExp('(?:' + '(?:on\\s*?)?' + "(".concat(matchAnyPattern(WEEKDAY_DICTIONARY), ")") + '\\s*,?\\s*)?' + "(".concat(matchAnyPattern(MONTH_DICTIONARY), ")") + '(?:-|/|\\s*,?\\s*)' + "(".concat(ORDINAL_NUMBER_PATTERN, ")(?!\\s*(?:am|pm))\\s*") + '(?:' + '(?:to|\\-)\\s*' + "(".concat(ORDINAL_NUMBER_PATTERN, ")\\s*") + ')?' + '(?:' + '(?:-|/|\\s*,?\\s*)' + "(".concat(YEAR_PATTERN, ")") + ')?' + '(?=\\W|$)(?!\\:\\d)', 'i'); -var ENMonthNameMiddleEndianParser_WEEKDAY_GROUP = 1; -var ENMonthNameMiddleEndianParser_MONTH_NAME_GROUP = 2; -var ENMonthNameMiddleEndianParser_DATE_GROUP = 3; -var ENMonthNameMiddleEndianParser_DATE_TO_GROUP = 4; -var ENMonthNameMiddleEndianParser_YEAR_GROUP = 5; -/** - * The parser for parsing US's date format that begin with month's name. - * - January 13 - * - January 13, 2012 - * - January 13 - 15, 2012 - * - Tuesday, January 13, 2012 - * Note: Watch out for: - * - January 12:00 - * - January 12.44 - * - January 1222344 - */ - -var ENMonthNameMiddleEndianParser_ENMonthNameMiddleEndianParser = /*#__PURE__*/function () { - function ENMonthNameMiddleEndianParser() { - ENMonthNameMiddleEndianParser_classCallCheck(this, ENMonthNameMiddleEndianParser); - } - - ENMonthNameMiddleEndianParser_createClass(ENMonthNameMiddleEndianParser, [{ - key: "pattern", - value: function pattern() { - return ENMonthNameMiddleEndianParser_PATTERN; - } - }, { - key: "extract", - value: function extract(context, match) { - var month = MONTH_DICTIONARY[match[ENMonthNameMiddleEndianParser_MONTH_NAME_GROUP].toLowerCase()]; - var day = parseOrdinalNumberPattern(match[ENMonthNameMiddleEndianParser_DATE_GROUP]); - var components = context.createParsingComponents({ - 'day': day, - 'month': month - }); - - if (match[ENMonthNameMiddleEndianParser_YEAR_GROUP]) { - var year = parseYear(match[ENMonthNameMiddleEndianParser_YEAR_GROUP]); - components.assign('year', year); - } else { - var _year = findYearClosestToRef(context.refDate, day, month); - - components.imply('year', _year); - } // Weekday component - - - if (match[ENMonthNameMiddleEndianParser_WEEKDAY_GROUP]) { - var weekday = WEEKDAY_DICTIONARY[match[ENMonthNameMiddleEndianParser_WEEKDAY_GROUP].toLowerCase()]; - components.assign('weekday', weekday); - } - - if (!match[ENMonthNameMiddleEndianParser_DATE_TO_GROUP]) { - return components; - } // Text can be 'range' value. Such as 'January 12 - 13, 2012' - - - var endDate = parseOrdinalNumberPattern(match[ENMonthNameMiddleEndianParser_DATE_TO_GROUP]); - var result = context.createParsingResult(match.index, match[0]); - result.start = components; - result.end = components.clone(); - result.end.assign('day', endDate); - return result; - } - }]); - - return ENMonthNameMiddleEndianParser; -}(); - - -// CONCATENATED MODULE: ./src/locales/en/parsers/ENMonthNameParser.ts -function ENMonthNameParser_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function ENMonthNameParser_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function ENMonthNameParser_createClass(Constructor, protoProps, staticProps) { if (protoProps) ENMonthNameParser_defineProperties(Constructor.prototype, protoProps); if (staticProps) ENMonthNameParser_defineProperties(Constructor, staticProps); return Constructor; } - - - - - -var ENMonthNameParser_PATTERN = new RegExp("(".concat(matchAnyPattern(MONTH_DICTIONARY), ")") + '\\s*' + '(?:' + "[,-]?\\s*(".concat(YEAR_PATTERN, ")?") + ')?' + '(?=[^\\s\\w]|\\s+[^0-9]|\\s+$|$)', 'i'); -var ENMonthNameParser_MONTH_NAME_GROUP = 1; -var ENMonthNameParser_YEAR_GROUP = 2; -/** - * The parser for parsing month name and year. - * - January, 2012 - * - January 2012 - * - January - */ - -var ENMonthNameParser_ENMonthNameParser = /*#__PURE__*/function () { - function ENMonthNameParser() { - ENMonthNameParser_classCallCheck(this, ENMonthNameParser); - } - - ENMonthNameParser_createClass(ENMonthNameParser, [{ - key: "pattern", - value: function pattern() { - return ENMonthNameParser_PATTERN; - } - }, { - key: "extract", - value: function extract(context, match) { - if (match[0].length <= 3) { - return null; - } - - var components = context.createParsingComponents(); - components.imply('day', 1); - var monthName = match[ENMonthNameParser_MONTH_NAME_GROUP]; - var month = MONTH_DICTIONARY[monthName.toLowerCase()]; - components.assign('month', month); - - if (match[ENMonthNameParser_YEAR_GROUP]) { - var year = parseYear(match[ENMonthNameParser_YEAR_GROUP]); - components.assign('year', year); - } else { - var _year = findYearClosestToRef(context.refDate, 1, month); - - components.imply('year', _year); - } - - return components; - } - }]); - - return ENMonthNameParser; -}(); - - -// CONCATENATED MODULE: ./src/locales/en/parsers/ENSlashDateFormatParser.ts -function ENSlashDateFormatParser_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function ENSlashDateFormatParser_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function ENSlashDateFormatParser_createClass(Constructor, protoProps, staticProps) { if (protoProps) ENSlashDateFormatParser_defineProperties(Constructor.prototype, protoProps); if (staticProps) ENSlashDateFormatParser_defineProperties(Constructor, staticProps); return Constructor; } - - - - -var ENSlashDateFormatParser_PATTERN = new RegExp('(\\W|^)' + '(?:' + '(?:on\\s*?)?' + '((?:sun|mon|tues?|wed(?:nes)?|thu(?:rs?)?|fri|sat(?:ur)?)(?:day)?)' + '\\s*\\,?\\s*' + ')?' + '([0-3]{0,1}[0-9]{1})[\\/\\.\\-]([0-3]{0,1}[0-9]{1})' + '(?:' + '[\\/\\.\\-]' + '([0-9]{4}\\s*\\,?\\s*|[0-9]{2}\\s*\\,?\\s*)' + ')?' + '(\\W|$)', 'i'); -var DAYS_OFFSET = { - 'sunday': 0, - 'sun': 0, - 'monday': 1, - 'mon': 1, - 'tuesday': 2, - 'wednesday': 3, - 'wed': 3, - 'thursday': 4, - 'thur': 4, - 'friday': 5, - 'fri': 5, - 'saturday': 6, - 'sat': 6 -}; -var OPENING_GROUP = 1; -var ENDING_GROUP = 6; -var ENSlashDateFormatParser_WEEKDAY_GROUP = 2; -var FIRST_NUMBERS_GROUP = 3; -var SECOND_NUMBERS_GROUP = 4; -var ENSlashDateFormatParser_YEAR_GROUP = 5; - -var ENSlashDateFormatParser_ENSlashDateFormatParser = /*#__PURE__*/function () { - function ENSlashDateFormatParser(littleEndian) { - ENSlashDateFormatParser_classCallCheck(this, ENSlashDateFormatParser); - - this.groupNumberMonth = littleEndian ? SECOND_NUMBERS_GROUP : FIRST_NUMBERS_GROUP; - this.groupNumberDay = littleEndian ? FIRST_NUMBERS_GROUP : SECOND_NUMBERS_GROUP; - } - - ENSlashDateFormatParser_createClass(ENSlashDateFormatParser, [{ - key: "pattern", - value: function pattern() { - return ENSlashDateFormatParser_PATTERN; - } - }, { - key: "extract", - value: function extract(context, match) { - if (match[OPENING_GROUP] == '/' || match[ENDING_GROUP] == '/') { - // Long skip, if there is some overlapping like: - // XX[/YY/ZZ] - // [XX/YY/]ZZ - match.index += match[0].length; - return; - } - - var index = match.index + match[OPENING_GROUP].length; - var text = match[0].substr(match[OPENING_GROUP].length, match[0].length - match[ENDING_GROUP].length); // '1.12', '1.12.12' is more like a version numbers - - if (text.match(/^\d\.\d$/) || text.match(/^\d\.\d{1,2}\.\d{1,2}\s*$/)) { - return; - } // MM/dd -> OK - // MM.dd -> NG - - - if (!match[ENSlashDateFormatParser_YEAR_GROUP] && match[0].indexOf('/') < 0) { - return; - } - - var result = context.createParsingResult(index, text); - var month = parseInt(match[this.groupNumberMonth]); - var day = parseInt(match[this.groupNumberDay]); - - if (month < 1 || month > 12) { - if (month > 12) { - if (day >= 1 && day <= 12 && month <= 31) { - var _ref = [month, day]; - day = _ref[0]; - month = _ref[1]; - } else { - return null; - } - } - } - - if (day < 1 || day > 31) { - return null; - } - - result.start.assign('day', day); - result.start.assign('month', month); - - if (match[ENSlashDateFormatParser_YEAR_GROUP]) { - var year = parseYear(match[ENSlashDateFormatParser_YEAR_GROUP]) || dayjs_min_default()(context.refDate).year(); - result.start.assign('year', year); - } else { - var _year = findYearClosestToRef(context.refDate, day, month); - - result.start.imply('year', _year); - } //Day of week - - - if (match[ENSlashDateFormatParser_WEEKDAY_GROUP]) { - result.start.assign('weekday', DAYS_OFFSET[match[ENSlashDateFormatParser_WEEKDAY_GROUP].toLowerCase()]); - } - - return result; - } - }]); - - return ENSlashDateFormatParser; -}(); - - -// CONCATENATED MODULE: ./src/locales/en/parsers/ENSlashDateFormatStartWithYearParser.ts -function ENSlashDateFormatStartWithYearParser_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function ENSlashDateFormatStartWithYearParser_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function ENSlashDateFormatStartWithYearParser_createClass(Constructor, protoProps, staticProps) { if (protoProps) ENSlashDateFormatStartWithYearParser_defineProperties(Constructor.prototype, protoProps); if (staticProps) ENSlashDateFormatStartWithYearParser_defineProperties(Constructor, staticProps); return Constructor; } - - - -/* - Date format with slash "/" between numbers like ENSlashDateFormatParser, - but this parser expect year before month and date. - - YYYY/MM/DD - - YYYY-MM-DD - - YYYY.MM.DD -*/ - -var ENSlashDateFormatStartWithYearParser_PATTERN = new RegExp('([0-9]{4})[\\.\\/]' + '(?:(' + matchAnyPattern(MONTH_DICTIONARY) + ')|([0-9]{1,2}))[\\.\\/]' + '([0-9]{1,2})' + '(?=\\W|$)', 'i'); -var YEAR_NUMBER_GROUP = 1; -var ENSlashDateFormatStartWithYearParser_MONTH_NAME_GROUP = 2; -var MONTH_NUMBER_GROUP = 3; -var DATE_NUMBER_GROUP = 4; - -var ENSlashDateFormatStartWithYearParser_ENSlashDateFormatStartWithYearParser = /*#__PURE__*/function () { - function ENSlashDateFormatStartWithYearParser() { - ENSlashDateFormatStartWithYearParser_classCallCheck(this, ENSlashDateFormatStartWithYearParser); - } - - ENSlashDateFormatStartWithYearParser_createClass(ENSlashDateFormatStartWithYearParser, [{ - key: "pattern", - value: function pattern() { - return ENSlashDateFormatStartWithYearParser_PATTERN; - } - }, { - key: "extract", - value: function extract(context, match) { - var month = match[MONTH_NUMBER_GROUP] ? parseInt(match[MONTH_NUMBER_GROUP]) : MONTH_DICTIONARY[match[ENSlashDateFormatStartWithYearParser_MONTH_NAME_GROUP].toLowerCase()]; - var year = parseInt(match[YEAR_NUMBER_GROUP]); - var day = parseInt(match[DATE_NUMBER_GROUP]); - return { - 'day': day, - 'month': month, - 'year': year - }; - } - }]); - - return ENSlashDateFormatStartWithYearParser; -}(); - - -// CONCATENATED MODULE: ./src/locales/en/parsers/ENSlashMonthFormatParser.ts -function ENSlashMonthFormatParser_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function ENSlashMonthFormatParser_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function ENSlashMonthFormatParser_createClass(Constructor, protoProps, staticProps) { if (protoProps) ENSlashMonthFormatParser_defineProperties(Constructor.prototype, protoProps); if (staticProps) ENSlashMonthFormatParser_defineProperties(Constructor, staticProps); return Constructor; } - -var ENSlashMonthFormatParser_PATTERN = new RegExp('([0-9]|0[1-9]|1[012])/([0-9]{4})' + '', 'i'); -var MONTH_GROUP = 1; -var ENSlashMonthFormatParser_YEAR_GROUP = 2; -/** - * Month/Year date format with slash "/" (also "-" and ".") between numbers - * - 11/05 - * - 06/2005 - */ - -var ENSlashMonthFormatParser = /*#__PURE__*/function () { - function ENSlashMonthFormatParser() { - ENSlashMonthFormatParser_classCallCheck(this, ENSlashMonthFormatParser); - } - - ENSlashMonthFormatParser_createClass(ENSlashMonthFormatParser, [{ - key: "pattern", - value: function pattern() { - return ENSlashMonthFormatParser_PATTERN; - } - }, { - key: "extract", - value: function extract(context, match) { - var year = parseInt(match[ENSlashMonthFormatParser_YEAR_GROUP]); - var month = parseInt(match[MONTH_GROUP]); - return context.createParsingComponents().imply('day', 1).assign('month', month).assign('year', year); - } - }]); - - return ENSlashMonthFormatParser; -}(); - - -// CONCATENATED MODULE: ./src/locales/en/parsers/ENTimeExpressionParser.ts -function ENTimeExpressionParser_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function ENTimeExpressionParser_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function ENTimeExpressionParser_createClass(Constructor, protoProps, staticProps) { if (protoProps) ENTimeExpressionParser_defineProperties(Constructor.prototype, protoProps); if (staticProps) ENTimeExpressionParser_defineProperties(Constructor, staticProps); return Constructor; } - - - -var FIRST_REG_PATTERN = new RegExp("(^|\\s|T)" + "(?:(?:at|from)\\s*)??" + "(\\d{1,4}|noon|midnight)" + "(?:" + "(?:\\.|\\:|\\:)(\\d{1,2})" + "(?:" + "(?:\\:|\\:)(\\d{2})(?:\\.(\\d{1,6}))?" + ")?" + ")?" + "(?:\\s*(a\\.m\\.|p\\.m\\.|am?|pm?|o\\W*clock))?" + "(?=\\W|$)", 'i'); -var SECOND_REG_PATTERN = new RegExp("^\\s*" + "(\\-|\\–|\\~|\\〜|to|\\?)\\s*" + "(\\d{1,4})" + "(?:" + "(?:\\.|\\:|\\:)(\\d{1,2})" + "(?:" + "(?:\\.|\\:|\\:)(\\d{1,2})(?:\\.(\\d{1,6}))?" + ")?" + ")?" + "(?:\\s*(a\\.m\\.|p\\.m\\.|am?|pm?|o\\W*clock|at night))?" + "(?=\\W|$)", 'i'); -var HOUR_GROUP = 2; -var MINUTE_GROUP = 3; -var SECOND_GROUP = 4; -var MILLI_SECOND_GROUP = 5; -var AM_PM_HOUR_GROUP = 6; - -var ENTimeExpressionParser_ENTimeExpressionParser = /*#__PURE__*/function () { - function ENTimeExpressionParser() { - ENTimeExpressionParser_classCallCheck(this, ENTimeExpressionParser); - } - - ENTimeExpressionParser_createClass(ENTimeExpressionParser, [{ - key: "pattern", - value: function pattern() { - return FIRST_REG_PATTERN; - } - }, { - key: "extract", - value: function extract(context, match) { - var refDate = dayjs_min_default()(context.refDate); - var result = context.createParsingResult(match.index + match[1].length, match[0].substring(match[1].length)); - - if (result.text.match(/^\d$/)) { - return null; - } - - result.start.imply('day', refDate.date()); - result.start.imply('month', refDate.month() + 1); - result.start.imply('year', refDate.year()); - result = ENTimeExpressionParser.extractStartTimeComponent(result.clone(), match); - - if (!result) { - return null; - } - - var remainingText = context.text.substring(match.index + match[0].length); - match = SECOND_REG_PATTERN.exec(remainingText); - - if (!match) { - return result; - } // Pattern "YY.YY -XXXX" is more like timezone offset - - - if (match[0].match(/^\s*([+-])\s*\d{3,4}$/)) { - return result; - } - - var newResult = ENTimeExpressionParser.extractEndTimeComponent(result.clone(), match); - return newResult ? newResult : result; - } - }], [{ - key: "extractStartTimeComponent", - value: function extractStartTimeComponent(result, match) { - var hour = 0; - var minute = 0; - var meridiem = null; // ----- Hours - - if (match[HOUR_GROUP].toLowerCase() == "noon") { - meridiem = Meridiem.PM; - hour = 12; - } else if (match[HOUR_GROUP].toLowerCase() == "midnight") { - meridiem = Meridiem.AM; - hour = 0; - } else { - hour = parseInt(match[HOUR_GROUP]); - } // ----- Minutes - - - if (match[MINUTE_GROUP] != null) { - minute = parseInt(match[MINUTE_GROUP]); - } else if (hour > 100) { - minute = hour % 100; - hour = Math.floor(hour / 100); - } - - if (minute >= 60 || hour > 24) { - return null; - } - - if (hour >= 12) { - meridiem = Meridiem.PM; - } // ----- AM & PM - - - if (match[AM_PM_HOUR_GROUP] != null) { - if (hour > 12) return null; - var ampm = match[AM_PM_HOUR_GROUP][0].toLowerCase(); - - if (ampm == "a") { - meridiem = Meridiem.AM; - - if (hour == 12) { - hour = 0; - } - } - - if (ampm == "p") { - meridiem = Meridiem.PM; - - if (hour != 12) { - hour += 12; - } - } - } - - result.start.assign('hour', hour); - result.start.assign('minute', minute); - - if (meridiem !== null) { - result.start.assign('meridiem', meridiem); - } else { - if (hour < 12) { - result.start.imply('meridiem', Meridiem.AM); - } else { - result.start.imply('meridiem', Meridiem.PM); - } - } // ----- Millisecond - - - if (match[MILLI_SECOND_GROUP] != null) { - var millisecond = parseInt(match[MILLI_SECOND_GROUP].substring(0, 3)); - if (millisecond >= 1000) return null; - result.start.assign('millisecond', millisecond); - } // ----- Second - - - if (match[SECOND_GROUP] != null) { - var second = parseInt(match[SECOND_GROUP]); - if (second >= 60) return null; - result.start.assign('second', second); - } - - return result; - } - }, { - key: "extractEndTimeComponent", - value: function extractEndTimeComponent(result, match) { - result.end = result.start.clone(); // ----- Millisecond - - if (match[MILLI_SECOND_GROUP] != null) { - var millisecond = parseInt(match[MILLI_SECOND_GROUP].substring(0, 3)); - if (millisecond >= 1000) return null; - result.end.assign('millisecond', millisecond); - } // ----- Second - - - if (match[SECOND_GROUP] != null) { - var second = parseInt(match[SECOND_GROUP]); - if (second >= 60) return null; - result.end.assign('second', second); - } - - var hour = parseInt(match[HOUR_GROUP]); - var minute = 0; - var meridiem = -1; // ----- Minute - - if (match[MINUTE_GROUP] != null) { - minute = parseInt(match[MINUTE_GROUP]); - } else if (hour > 100) { - minute = hour % 100; - hour = Math.floor(hour / 100); - } - - if (minute >= 60 || hour > 24) { - return null; - } - - if (hour >= 12) { - meridiem = Meridiem.PM; - } // ----- AM & PM - - - if (match[AM_PM_HOUR_GROUP] != null) { - if (hour > 12) { - return null; - } - - var ampm = match[AM_PM_HOUR_GROUP][0].toLowerCase(); - - if (ampm == "a") { - meridiem = Meridiem.AM; - - if (hour == 12) { - hour = 0; - - if (!result.end.isCertain('day')) { - result.end.imply('day', result.end.get('day') + 1); - } - } - } - - if (ampm == "p") { - meridiem = Meridiem.PM; - if (hour != 12) hour += 12; - } - - if (!result.start.isCertain('meridiem')) { - if (meridiem == Meridiem.AM) { - result.start.imply('meridiem', Meridiem.AM); - - if (result.start.get('hour') == 12) { - result.start.assign('hour', 0); - } - } else { - result.start.imply('meridiem', Meridiem.PM); - - if (result.start.get('hour') != 12) { - result.start.assign('hour', result.start.get('hour') + 12); - } - } - } - } - - result.text = result.text + match[0]; - result.end.assign('hour', hour); - result.end.assign('minute', minute); - - if (meridiem >= 0) { - result.end.assign('meridiem', meridiem); - } else { - var startAtPM = result.start.isCertain('meridiem') && result.start.get('meridiem') == Meridiem.PM; - - if (startAtPM && result.start.get('hour') > hour) { - // 10pm - 1 (am) - result.end.imply('meridiem', Meridiem.AM); - } else if (hour > 12) { - result.end.imply('meridiem', Meridiem.PM); - } - } - - if (result.end.date().getTime() < result.start.date().getTime()) { - result.end.imply('day', result.end.get('day') + 1); - } - - return result; - } - }]); - - return ENTimeExpressionParser; -}(); - - -// CONCATENATED MODULE: ./src/locales/en/parsers/ENTimeUnitAgoFormatParser.ts -function ENTimeUnitAgoFormatParser_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function ENTimeUnitAgoFormatParser_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function ENTimeUnitAgoFormatParser_createClass(Constructor, protoProps, staticProps) { if (protoProps) ENTimeUnitAgoFormatParser_defineProperties(Constructor.prototype, protoProps); if (staticProps) ENTimeUnitAgoFormatParser_defineProperties(Constructor, staticProps); return Constructor; } - - - -var ENTimeUnitAgoFormatParser_PATTERN = new RegExp('' + '(?:within\\s*)?' + '(' + TIME_UNITS_PATTERN + ')' + '(?:ago|before|earlier)(?=(?:\\W|$))', 'i'); -var ENTimeUnitAgoFormatParser_STRICT_PATTERN = new RegExp('' + '(?<=\\W|^)' + '(?:within\\s*)?' + '(' + TIME_UNITS_PATTERN + ')' + 'ago(?=(?:\\W|$))', 'i'); - -var ENTimeUnitAgoFormatParser_ENTimeUnitAgoFormatParser = /*#__PURE__*/function () { - function ENTimeUnitAgoFormatParser(strictMode) { - ENTimeUnitAgoFormatParser_classCallCheck(this, ENTimeUnitAgoFormatParser); - - this.strictMode = strictMode; - } - - ENTimeUnitAgoFormatParser_createClass(ENTimeUnitAgoFormatParser, [{ - key: "pattern", - value: function pattern() { - return this.strictMode ? ENTimeUnitAgoFormatParser_STRICT_PATTERN : ENTimeUnitAgoFormatParser_PATTERN; - } - }, { - key: "extract", - value: function extract(context, match) { - var fragments = parseTimeUnits(match[1]); - - for (var key in fragments) { - fragments[key] = -fragments[key]; - } - - return results_ParsingComponents.createRelativeFromRefDate(context.refDate, fragments); - } - }]); - - return ENTimeUnitAgoFormatParser; -}(); - - -// CONCATENATED MODULE: ./src/locales/en/parsers/ENTimeUnitLaterFormatParser.ts -function ENTimeUnitLaterFormatParser_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function ENTimeUnitLaterFormatParser_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function ENTimeUnitLaterFormatParser_createClass(Constructor, protoProps, staticProps) { if (protoProps) ENTimeUnitLaterFormatParser_defineProperties(Constructor.prototype, protoProps); if (staticProps) ENTimeUnitLaterFormatParser_defineProperties(Constructor, staticProps); return Constructor; } - - - -var ENTimeUnitLaterFormatParser_PATTERN = new RegExp('' + '(' + TIME_UNITS_PATTERN + ')' + '(later|after|from now|henceforth|forward|out)' + '(?=(?:\\W|$))', 'i'); -var ENTimeUnitLaterFormatParser_STRICT_PATTERN = new RegExp('' + '(' + TIME_UNITS_PATTERN + ')' + '(later|from now)' + '(?=(?:\\W|$))', 'i'); -var GROUP_NUM_SUFFIX = 2; -var GROUP_NUM_TIMEUNITS = 1; - -var ENTimeUnitLaterFormatParser_ENTimeUnitLaterFormatParser = /*#__PURE__*/function () { - function ENTimeUnitLaterFormatParser(strictMode) { - ENTimeUnitLaterFormatParser_classCallCheck(this, ENTimeUnitLaterFormatParser); - - this.strictMode = strictMode; - } - - ENTimeUnitLaterFormatParser_createClass(ENTimeUnitLaterFormatParser, [{ - key: "pattern", - value: function pattern() { - return this.strictMode ? ENTimeUnitLaterFormatParser_STRICT_PATTERN : ENTimeUnitLaterFormatParser_PATTERN; - } - }, { - key: "extract", - value: function extract(context, match) { - var suffix = match[GROUP_NUM_SUFFIX].toLowerCase().trim(); - - if (!suffix) { - return null; - } - - var fragments = parseTimeUnits(match[GROUP_NUM_TIMEUNITS]); - return results_ParsingComponents.createRelativeFromRefDate(context.refDate, fragments); - } - }]); - - return ENTimeUnitLaterFormatParser; -}(); - - -// CONCATENATED MODULE: ./src/common/abstractRefiners.ts -function abstractRefiners_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function abstractRefiners_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function abstractRefiners_createClass(Constructor, protoProps, staticProps) { if (protoProps) abstractRefiners_defineProperties(Constructor.prototype, protoProps); if (staticProps) abstractRefiners_defineProperties(Constructor, staticProps); return Constructor; } - -var Filter = /*#__PURE__*/function () { - function Filter() { - abstractRefiners_classCallCheck(this, Filter); - } - - abstractRefiners_createClass(Filter, [{ - key: "refine", - value: function refine(context, results) { - var _this = this; - - return results.filter(function (r) { - return _this.isValid(context, r); - }); - } - }]); - - return Filter; -}(); -var MergingRefiner = /*#__PURE__*/function () { - function MergingRefiner() { - abstractRefiners_classCallCheck(this, MergingRefiner); - } - - abstractRefiners_createClass(MergingRefiner, [{ - key: "refine", - value: function refine(context, results) { - var _this2 = this; - - if (results.length < 2) { - return results; - } - - var mergedResults = []; - var curResult = results[0]; - var nextResult = null; - - for (var i = 1; i < results.length; i++) { - nextResult = results[i]; - - var _textBetween = context.text.substring(curResult.index + curResult.text.length, nextResult.index); - - if (!this.shouldMergeResults(_textBetween, curResult, nextResult, context)) { - mergedResults.push(curResult); - curResult = nextResult; - } else { - (function () { - var left = curResult; - var right = nextResult; - - var mergedResult = _this2.mergeResults(_textBetween, left, right, context); - - context.debug(function () { - console.log("".concat(_this2.constructor.name, " merged ").concat(left, " and ").concat(right, " into ").concat(mergedResult)); - }); - curResult = mergedResult; - })(); - } - } - - if (curResult != null) { - mergedResults.push(curResult); - } - - return mergedResults; - } - }]); - - return MergingRefiner; -}(); -// CONCATENATED MODULE: ./src/common/refiners/AbstractMergeDateRangeRefiner.ts -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -function AbstractMergeDateRangeRefiner_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function AbstractMergeDateRangeRefiner_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function AbstractMergeDateRangeRefiner_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractMergeDateRangeRefiner_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractMergeDateRangeRefiner_defineProperties(Constructor, staticProps); return Constructor; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - -function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } - -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } - -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - -/* - -*/ - - -var AbstractMergeDateRangeRefiner = /*#__PURE__*/function (_MergingRefiner) { - _inherits(AbstractMergeDateRangeRefiner, _MergingRefiner); - - var _super = _createSuper(AbstractMergeDateRangeRefiner); - - function AbstractMergeDateRangeRefiner() { - AbstractMergeDateRangeRefiner_classCallCheck(this, AbstractMergeDateRangeRefiner); - - return _super.apply(this, arguments); - } - - AbstractMergeDateRangeRefiner_createClass(AbstractMergeDateRangeRefiner, [{ - key: "shouldMergeResults", - value: function shouldMergeResults(textBetween, currentResult, nextResult) { - return !currentResult.end && !nextResult.end && textBetween.match(this.patternBetween()) != null; - } - }, { - key: "mergeResults", - value: function mergeResults(textBetween, fromResult, toResult) { - if (!fromResult.start.isOnlyWeekdayComponent() && !toResult.start.isOnlyWeekdayComponent()) { - toResult.start.getCertainComponents().forEach(function (key) { - if (!fromResult.start.isCertain(key)) { - fromResult.start.assign(key, toResult.start.get(key)); - } - }); - fromResult.start.getCertainComponents().forEach(function (key) { - if (!toResult.start.isCertain(key)) { - toResult.start.assign(key, fromResult.start.get(key)); - } - }); - } - - if (fromResult.start.date().getTime() > toResult.start.date().getTime()) { - var fromMoment = fromResult.start.dayjs(); - var toMoment = toResult.start.dayjs(); - - if (fromResult.start.isOnlyWeekdayComponent() && fromMoment.add(-7, 'days').isBefore(toMoment)) { - fromMoment = fromMoment.add(-7, 'days'); - fromResult.start.imply('day', fromMoment.date()); - fromResult.start.imply('month', fromMoment.month() + 1); - fromResult.start.imply('year', fromMoment.year()); - } else if (toResult.start.isOnlyWeekdayComponent() && toMoment.add(7, 'days').isAfter(fromMoment)) { - toMoment = toMoment.add(7, 'days'); - toResult.start.imply('day', toMoment.date()); - toResult.start.imply('month', toMoment.month() + 1); - toResult.start.imply('year', toMoment.year()); - } else { - var _ref = [fromResult, toResult]; - toResult = _ref[0]; - fromResult = _ref[1]; - } - } - - var result = fromResult.clone(); - result.start = fromResult.start; - result.end = toResult.start; - result.index = Math.min(fromResult.index, toResult.index); - - if (fromResult.index < toResult.index) { - result.text = fromResult.text + textBetween + toResult.text; - } else { - result.text = toResult.text + textBetween + fromResult.text; - } - - return result; - } - }]); - - return AbstractMergeDateRangeRefiner; -}(MergingRefiner); - - -// CONCATENATED MODULE: ./src/locales/en/refiners/ENMergeDateRangeRefiner.ts -function ENMergeDateRangeRefiner_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ENMergeDateRangeRefiner_typeof = function _typeof(obj) { return typeof obj; }; } else { ENMergeDateRangeRefiner_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ENMergeDateRangeRefiner_typeof(obj); } - -function ENMergeDateRangeRefiner_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function ENMergeDateRangeRefiner_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function ENMergeDateRangeRefiner_createClass(Constructor, protoProps, staticProps) { if (protoProps) ENMergeDateRangeRefiner_defineProperties(Constructor.prototype, protoProps); if (staticProps) ENMergeDateRangeRefiner_defineProperties(Constructor, staticProps); return Constructor; } - -function ENMergeDateRangeRefiner_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) ENMergeDateRangeRefiner_setPrototypeOf(subClass, superClass); } - -function ENMergeDateRangeRefiner_setPrototypeOf(o, p) { ENMergeDateRangeRefiner_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return ENMergeDateRangeRefiner_setPrototypeOf(o, p); } - -function ENMergeDateRangeRefiner_createSuper(Derived) { var hasNativeReflectConstruct = ENMergeDateRangeRefiner_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = ENMergeDateRangeRefiner_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = ENMergeDateRangeRefiner_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return ENMergeDateRangeRefiner_possibleConstructorReturn(this, result); }; } - -function ENMergeDateRangeRefiner_possibleConstructorReturn(self, call) { if (call && (ENMergeDateRangeRefiner_typeof(call) === "object" || typeof call === "function")) { return call; } return ENMergeDateRangeRefiner_assertThisInitialized(self); } - -function ENMergeDateRangeRefiner_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - -function ENMergeDateRangeRefiner_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } - -function ENMergeDateRangeRefiner_getPrototypeOf(o) { ENMergeDateRangeRefiner_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return ENMergeDateRangeRefiner_getPrototypeOf(o); } - -/* - -*/ - -/** - * Merging before and after results (see. AbstractMergeDateRangeRefiner) - * This implementation should provide English connecting phases - * - 2020-02-13 [to] 2020-02-13 - * - Wednesday [-] Friday - */ - -var ENMergeDateRangeRefiner = /*#__PURE__*/function (_AbstractMergeDateRan) { - ENMergeDateRangeRefiner_inherits(ENMergeDateRangeRefiner, _AbstractMergeDateRan); - - var _super = ENMergeDateRangeRefiner_createSuper(ENMergeDateRangeRefiner); - - function ENMergeDateRangeRefiner() { - ENMergeDateRangeRefiner_classCallCheck(this, ENMergeDateRangeRefiner); - - return _super.apply(this, arguments); - } - - ENMergeDateRangeRefiner_createClass(ENMergeDateRangeRefiner, [{ - key: "patternBetween", - value: function patternBetween() { - return /^\s*(to|-)\s*$/i; - } - }]); - - return ENMergeDateRangeRefiner; -}(AbstractMergeDateRangeRefiner); - - -// CONCATENATED MODULE: ./src/calculation/mergingCalculation.ts - -function mergeDateTimeResult(dateResult, timeResult) { - var result = dateResult.clone(); - var beginDate = dateResult.start; - var beginTime = timeResult.start; - result.start = mergeDateTimeComponent(beginDate, beginTime); - - if (dateResult.end != null || timeResult.end != null) { - var endDate = dateResult.end == null ? dateResult.start : dateResult.end; - var endTime = timeResult.end == null ? timeResult.start : timeResult.end; - var endDateTime = mergeDateTimeComponent(endDate, endTime); - - if (dateResult.end == null && endDateTime.date().getTime() < result.start.date().getTime()) { - // Ex. 9pm - 1am - if (endDateTime.isCertain('day')) { - endDateTime.assign('day', endDateTime.get('day') + 1); - } else { - endDateTime.imply('day', endDateTime.get('day') + 1); - } - } - - result.end = endDateTime; - } - - return result; -} -function mergeDateTimeComponent(dateComponent, timeComponent) { - var dateTimeComponent = dateComponent.clone(); - - if (timeComponent.isCertain('hour')) { - dateTimeComponent.assign('hour', timeComponent.get('hour')); - dateTimeComponent.assign('minute', timeComponent.get('minute')); - - if (timeComponent.isCertain('second')) { - dateTimeComponent.assign('second', timeComponent.get('second')); - - if (timeComponent.isCertain('millisecond')) { - dateTimeComponent.assign('millisecond', timeComponent.get('millisecond')); - } else { - dateTimeComponent.imply('millisecond', timeComponent.get('millisecond')); - } - } else { - dateTimeComponent.imply('second', timeComponent.get('second')); - dateTimeComponent.imply('millisecond', timeComponent.get('millisecond')); - } - } else { - dateTimeComponent.imply('hour', timeComponent.get('hour')); - dateTimeComponent.imply('minute', timeComponent.get('minute')); - dateTimeComponent.imply('second', timeComponent.get('second')); - dateTimeComponent.imply('millisecond', timeComponent.get('millisecond')); - } - - if (timeComponent.isCertain('timezoneOffset')) { - dateTimeComponent.assign('timezoneOffset', timeComponent.get('timezoneOffset')); - } - - if (timeComponent.isCertain('meridiem')) { - dateTimeComponent.assign('meridiem', timeComponent.get('meridiem')); - } else if (timeComponent.get('meridiem') != null && dateTimeComponent.get('meridiem') == null) { - dateTimeComponent.imply('meridiem', timeComponent.get('meridiem')); - } - - if (dateTimeComponent.get('meridiem') == Meridiem.PM && dateTimeComponent.get('hour') < 12) { - if (timeComponent.isCertain('hour')) { - dateTimeComponent.assign('hour', dateTimeComponent.get('hour') + 12); - } else { - dateTimeComponent.imply('hour', dateTimeComponent.get('hour') + 12); - } - } - - return dateTimeComponent; -} -// CONCATENATED MODULE: ./src/common/refiners/AbstractMergeDateTimeRefiner.ts -function AbstractMergeDateTimeRefiner_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AbstractMergeDateTimeRefiner_typeof = function _typeof(obj) { return typeof obj; }; } else { AbstractMergeDateTimeRefiner_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AbstractMergeDateTimeRefiner_typeof(obj); } - -function AbstractMergeDateTimeRefiner_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function AbstractMergeDateTimeRefiner_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function AbstractMergeDateTimeRefiner_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractMergeDateTimeRefiner_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractMergeDateTimeRefiner_defineProperties(Constructor, staticProps); return Constructor; } - -function AbstractMergeDateTimeRefiner_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AbstractMergeDateTimeRefiner_setPrototypeOf(subClass, superClass); } - -function AbstractMergeDateTimeRefiner_setPrototypeOf(o, p) { AbstractMergeDateTimeRefiner_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AbstractMergeDateTimeRefiner_setPrototypeOf(o, p); } - -function AbstractMergeDateTimeRefiner_createSuper(Derived) { var hasNativeReflectConstruct = AbstractMergeDateTimeRefiner_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AbstractMergeDateTimeRefiner_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AbstractMergeDateTimeRefiner_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AbstractMergeDateTimeRefiner_possibleConstructorReturn(this, result); }; } - -function AbstractMergeDateTimeRefiner_possibleConstructorReturn(self, call) { if (call && (AbstractMergeDateTimeRefiner_typeof(call) === "object" || typeof call === "function")) { return call; } return AbstractMergeDateTimeRefiner_assertThisInitialized(self); } - -function AbstractMergeDateTimeRefiner_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - -function AbstractMergeDateTimeRefiner_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } - -function AbstractMergeDateTimeRefiner_getPrototypeOf(o) { AbstractMergeDateTimeRefiner_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AbstractMergeDateTimeRefiner_getPrototypeOf(o); } - -/* - -*/ - - - -var AbstractMergeDateTimeRefiner_ENMergeDateTimeRefiner = /*#__PURE__*/function (_MergingRefiner) { - AbstractMergeDateTimeRefiner_inherits(ENMergeDateTimeRefiner, _MergingRefiner); - - var _super = AbstractMergeDateTimeRefiner_createSuper(ENMergeDateTimeRefiner); - - function ENMergeDateTimeRefiner() { - AbstractMergeDateTimeRefiner_classCallCheck(this, ENMergeDateTimeRefiner); - - return _super.apply(this, arguments); - } - - AbstractMergeDateTimeRefiner_createClass(ENMergeDateTimeRefiner, [{ - key: "shouldMergeResults", - value: function shouldMergeResults(textBetween, currentResult, nextResult) { - return (currentResult.start.isOnlyDate() && nextResult.start.isOnlyTime() || nextResult.start.isOnlyDate() && currentResult.start.isOnlyTime()) && textBetween.match(this.patternBetween()) != null; - } - }, { - key: "mergeResults", - value: function mergeResults(textBetween, currentResult, nextResult) { - var result = currentResult.start.isOnlyDate() ? mergeDateTimeResult(currentResult, nextResult) : mergeDateTimeResult(nextResult, currentResult); - result.index = currentResult.index; - result.text = currentResult.text + textBetween + nextResult.text; - return result; - } - }]); - - return ENMergeDateTimeRefiner; -}(MergingRefiner); - - -// CONCATENATED MODULE: ./src/locales/en/refiners/ENMergeDateTimeRefiner.ts -function ENMergeDateTimeRefiner_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ENMergeDateTimeRefiner_typeof = function _typeof(obj) { return typeof obj; }; } else { ENMergeDateTimeRefiner_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ENMergeDateTimeRefiner_typeof(obj); } - -function ENMergeDateTimeRefiner_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function ENMergeDateTimeRefiner_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function ENMergeDateTimeRefiner_createClass(Constructor, protoProps, staticProps) { if (protoProps) ENMergeDateTimeRefiner_defineProperties(Constructor.prototype, protoProps); if (staticProps) ENMergeDateTimeRefiner_defineProperties(Constructor, staticProps); return Constructor; } - -function ENMergeDateTimeRefiner_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) ENMergeDateTimeRefiner_setPrototypeOf(subClass, superClass); } - -function ENMergeDateTimeRefiner_setPrototypeOf(o, p) { ENMergeDateTimeRefiner_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return ENMergeDateTimeRefiner_setPrototypeOf(o, p); } - -function ENMergeDateTimeRefiner_createSuper(Derived) { var hasNativeReflectConstruct = ENMergeDateTimeRefiner_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = ENMergeDateTimeRefiner_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = ENMergeDateTimeRefiner_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return ENMergeDateTimeRefiner_possibleConstructorReturn(this, result); }; } - -function ENMergeDateTimeRefiner_possibleConstructorReturn(self, call) { if (call && (ENMergeDateTimeRefiner_typeof(call) === "object" || typeof call === "function")) { return call; } return ENMergeDateTimeRefiner_assertThisInitialized(self); } - -function ENMergeDateTimeRefiner_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - -function ENMergeDateTimeRefiner_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } - -function ENMergeDateTimeRefiner_getPrototypeOf(o) { ENMergeDateTimeRefiner_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return ENMergeDateTimeRefiner_getPrototypeOf(o); } - - -/** - * Merging date-only result and time-only result (see. AbstractMergeDateTimeRefiner). - * This implementation should provide English connecting phases - * - 2020-02-13 [at] 6pm - * - Tomorrow [after] 7am - */ - -var ENMergeDateTimeRefiner_ENMergeDateTimeRefiner = /*#__PURE__*/function (_AbstractMergeDateTim) { - ENMergeDateTimeRefiner_inherits(ENMergeDateTimeRefiner, _AbstractMergeDateTim); - - var _super = ENMergeDateTimeRefiner_createSuper(ENMergeDateTimeRefiner); - - function ENMergeDateTimeRefiner() { - ENMergeDateTimeRefiner_classCallCheck(this, ENMergeDateTimeRefiner); - - return _super.apply(this, arguments); - } - - ENMergeDateTimeRefiner_createClass(ENMergeDateTimeRefiner, [{ - key: "patternBetween", - value: function patternBetween() { - return new RegExp("^\\s*(T|at|after|before|on|of|,|-)?\\s*$"); - } - }]); - - return ENMergeDateTimeRefiner; -}(AbstractMergeDateTimeRefiner_ENMergeDateTimeRefiner); - - -// CONCATENATED MODULE: ./src/common/refiners/ExtractTimezoneAbbrRefiner.ts -function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } - -function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -function ExtractTimezoneAbbrRefiner_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function ExtractTimezoneAbbrRefiner_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function ExtractTimezoneAbbrRefiner_createClass(Constructor, protoProps, staticProps) { if (protoProps) ExtractTimezoneAbbrRefiner_defineProperties(Constructor.prototype, protoProps); if (staticProps) ExtractTimezoneAbbrRefiner_defineProperties(Constructor, staticProps); return Constructor; } - -// Map ABBR -> Offset in minute -var TIMEZONE_NAME_PATTERN = new RegExp("^\\s*\\(?([A-Z]{2,4})\\)?(?=\\W|$)", 'i'); -var DEFAULT_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": 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 -}; - -var ExtractTimezoneAbbrRefiner = /*#__PURE__*/function () { - function ExtractTimezoneAbbrRefiner(timezoneOverrides) { - ExtractTimezoneAbbrRefiner_classCallCheck(this, ExtractTimezoneAbbrRefiner); - - this.timezone = _objectSpread(_objectSpread({}, DEFAULT_TIMEZONE_ABBR_MAP), timezoneOverrides); - } - - ExtractTimezoneAbbrRefiner_createClass(ExtractTimezoneAbbrRefiner, [{ - key: "refine", - value: function refine(context, results) { - var timezones = _objectSpread(_objectSpread({}, this.timezone), context.option.timezones); - - results.forEach(function (result) { - var suffix = context.text.substring(result.index + result.text.length); - var match = TIMEZONE_NAME_PATTERN.exec(suffix); - - if (match) { - var timezoneAbbr = match[1].toUpperCase(); - - if (timezones[timezoneAbbr] === undefined) { - return; - } - - var timezoneOffset = timezones[timezoneAbbr]; - - if (!result.start.isCertain('timezoneOffset')) { - result.start.assign('timezoneOffset', timezoneOffset); - } - - if (result.end != null && !result.end.isCertain('timezoneOffset')) { - result.end.assign('timezoneOffset', timezoneOffset); - } - - result.text += match[0]; - } - }); - return results; - } - }]); - - return ExtractTimezoneAbbrRefiner; -}(); - - -// CONCATENATED MODULE: ./src/common/refiners/ExtractTimezoneOffsetRefiner.ts -function ExtractTimezoneOffsetRefiner_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function ExtractTimezoneOffsetRefiner_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function ExtractTimezoneOffsetRefiner_createClass(Constructor, protoProps, staticProps) { if (protoProps) ExtractTimezoneOffsetRefiner_defineProperties(Constructor.prototype, protoProps); if (staticProps) ExtractTimezoneOffsetRefiner_defineProperties(Constructor, staticProps); return Constructor; } - -/* - -*/ -var TIMEZONE_OFFSET_PATTERN = new RegExp("^\\s*(GMT|UTC)?([+-])(\\d{1,2}):?(\\d{2})", 'i'); -var TIMEZONE_OFFSET_SIGN_GROUP = 2; -var TIMEZONE_OFFSET_HOUR_OFFSET_GROUP = 3; -var TIMEZONE_OFFSET_MINUTE_OFFSET_GROUP = 4; - -var ExtractTimezoneOffsetRefiner = /*#__PURE__*/function () { - function ExtractTimezoneOffsetRefiner() { - ExtractTimezoneOffsetRefiner_classCallCheck(this, ExtractTimezoneOffsetRefiner); - } - - ExtractTimezoneOffsetRefiner_createClass(ExtractTimezoneOffsetRefiner, [{ - key: "refine", - value: function refine(context, results) { - results.forEach(function (result) { - if (result.start.isCertain('timezoneOffset')) { - return; - } - - var suffix = context.text.substring(result.index + result.text.length); - var match = TIMEZONE_OFFSET_PATTERN.exec(suffix); - - if (!match) { - return; - } - - context.debug(function () { - console.log("Extracting timezone: '".concat(match[0], "' into : ").concat(result)); - }); - var hourOffset = parseInt(match[TIMEZONE_OFFSET_HOUR_OFFSET_GROUP]); - var minuteOffset = parseInt(match[TIMEZONE_OFFSET_MINUTE_OFFSET_GROUP]); - var timezoneOffset = hourOffset * 60 + minuteOffset; - - if (match[TIMEZONE_OFFSET_SIGN_GROUP] === '-') { - timezoneOffset = -timezoneOffset; - } - - if (result.end != null) { - result.end.assign('timezoneOffset', timezoneOffset); - } - - result.start.assign('timezoneOffset', timezoneOffset); - result.text += match[0]; - }); - return results; - } - }]); - - return ExtractTimezoneOffsetRefiner; -}(); - - -// CONCATENATED MODULE: ./src/common/refiners/OverlapRemovalRefiner.ts -function OverlapRemovalRefiner_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function OverlapRemovalRefiner_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function OverlapRemovalRefiner_createClass(Constructor, protoProps, staticProps) { if (protoProps) OverlapRemovalRefiner_defineProperties(Constructor.prototype, protoProps); if (staticProps) OverlapRemovalRefiner_defineProperties(Constructor, staticProps); return Constructor; } - -/* - -*/ -var OverlapRemovalRefiner = /*#__PURE__*/function () { - function OverlapRemovalRefiner() { - OverlapRemovalRefiner_classCallCheck(this, OverlapRemovalRefiner); - } - - OverlapRemovalRefiner_createClass(OverlapRemovalRefiner, [{ - key: "refine", - value: function refine(context, results) { - if (results.length < 2) { - return results; - } - - var filteredResults = []; - var prevResult = results[0]; - - for (var i = 1; i < results.length; i++) { - var result = results[i]; // If overlap, compare the length and discard the shorter one - - if (result.index < prevResult.index + prevResult.text.length) { - if (result.text.length > prevResult.text.length) { - prevResult = result; - } - } else { - filteredResults.push(prevResult); - prevResult = result; - } - } // The last one - - - if (prevResult != null) { - filteredResults.push(prevResult); - } - - return filteredResults; - } - }]); - - return OverlapRemovalRefiner; -}(); - - -// CONCATENATED MODULE: ./src/common/refiners/ForwardDateRefiner.ts -function ForwardDateRefiner_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function ForwardDateRefiner_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function ForwardDateRefiner_createClass(Constructor, protoProps, staticProps) { if (protoProps) ForwardDateRefiner_defineProperties(Constructor.prototype, protoProps); if (staticProps) ForwardDateRefiner_defineProperties(Constructor, staticProps); return Constructor; } - -/* - Enforce 'forwardDate' option to on the results. When there are missing component, - e.g. "March 12-13 (without year)" or "Thursday", the refiner will try to adjust the result - into the future instead of the past. -*/ - - -var ForwardDateRefiner_ForwardDateRefiner = /*#__PURE__*/function () { - function ForwardDateRefiner() { - ForwardDateRefiner_classCallCheck(this, ForwardDateRefiner); - } - - ForwardDateRefiner_createClass(ForwardDateRefiner, [{ - key: "refine", - value: function refine(context, results) { - if (!context.option.forwardDate) { - return results; - } - - results.forEach(function (result) { - var refMoment = dayjs_min_default()(context.refDate); - - if (result.start.isOnlyDayMonthComponent() && refMoment.isAfter(result.start.dayjs())) { - for (var i = 0; i < 3 && refMoment.isAfter(result.start.dayjs()); i++) { - result.start.imply('year', result.start.get('year') + 1); - context.debug(function () { - console.log("Forward yearly adjusted for ".concat(result, " (").concat(result.start, ")")); - }); - - if (result.end && !result.end.isCertain('year')) { - result.end.imply('year', result.end.get('year') + 1); - context.debug(function () { - console.log("Forward yearly adjusted for ".concat(result, " (").concat(result.end, ")")); - }); - } - } - } - - if (result.start.isOnlyWeekdayComponent() && refMoment.isAfter(result.start.dayjs())) { - if (refMoment.day() > result.start.get('weekday')) { - refMoment = refMoment.day(result.start.get('weekday') + 7); - } else { - refMoment = refMoment.day(result.start.get('weekday')); - } - - result.start.imply('day', refMoment.date()); - result.start.imply('month', refMoment.month() + 1); - result.start.imply('year', refMoment.year()); - context.debug(function () { - console.log("Forward weekly adjusted for ".concat(result, " (").concat(result.start, ")")); - }); - - if (result.end && result.end.isOnlyWeekdayComponent()) { - // Adjust date to the coming week - if (refMoment.day() > result.end.get('weekday')) { - refMoment = refMoment.day(result.end.get('weekday') + 7); - } else { - refMoment = refMoment.day(result.end.get('weekday')); - } - - result.end.imply('day', refMoment.date()); - result.end.imply('month', refMoment.month() + 1); - result.end.imply('year', refMoment.year()); - context.debug(function () { - console.log("Forward weekly adjusted for ".concat(result, " (").concat(result.end, ")")); - }); - } - } - }); - return results; - } - }]); - - return ForwardDateRefiner; -}(); - - -// CONCATENATED MODULE: ./src/common/refiners/UnlikelyFormatFilter.ts -function UnlikelyFormatFilter_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { UnlikelyFormatFilter_typeof = function _typeof(obj) { return typeof obj; }; } else { UnlikelyFormatFilter_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return UnlikelyFormatFilter_typeof(obj); } - -function UnlikelyFormatFilter_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function UnlikelyFormatFilter_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function UnlikelyFormatFilter_createClass(Constructor, protoProps, staticProps) { if (protoProps) UnlikelyFormatFilter_defineProperties(Constructor.prototype, protoProps); if (staticProps) UnlikelyFormatFilter_defineProperties(Constructor, staticProps); return Constructor; } - -function UnlikelyFormatFilter_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) UnlikelyFormatFilter_setPrototypeOf(subClass, superClass); } - -function UnlikelyFormatFilter_setPrototypeOf(o, p) { UnlikelyFormatFilter_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return UnlikelyFormatFilter_setPrototypeOf(o, p); } - -function UnlikelyFormatFilter_createSuper(Derived) { var hasNativeReflectConstruct = UnlikelyFormatFilter_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = UnlikelyFormatFilter_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = UnlikelyFormatFilter_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return UnlikelyFormatFilter_possibleConstructorReturn(this, result); }; } - -function UnlikelyFormatFilter_possibleConstructorReturn(self, call) { if (call && (UnlikelyFormatFilter_typeof(call) === "object" || typeof call === "function")) { return call; } return UnlikelyFormatFilter_assertThisInitialized(self); } - -function UnlikelyFormatFilter_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - -function UnlikelyFormatFilter_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } - -function UnlikelyFormatFilter_getPrototypeOf(o) { UnlikelyFormatFilter_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return UnlikelyFormatFilter_getPrototypeOf(o); } - - - -var UnlikelyFormatFilter = /*#__PURE__*/function (_Filter) { - UnlikelyFormatFilter_inherits(UnlikelyFormatFilter, _Filter); - - var _super = UnlikelyFormatFilter_createSuper(UnlikelyFormatFilter); - - function UnlikelyFormatFilter() { - UnlikelyFormatFilter_classCallCheck(this, UnlikelyFormatFilter); - - return _super.apply(this, arguments); - } - - UnlikelyFormatFilter_createClass(UnlikelyFormatFilter, [{ - key: "isValid", - value: function isValid(context, result) { - if (result.text.replace(' ', '').match(/^\d*(\.\d*)?$/)) { - context.debug(function () { - console.log("Removing unlikely result '".concat(result.text, "'")); - }); - return false; - } - - if (!result.start.isValidDate()) { - context.debug(function () { - console.log("Removing invalid result: ".concat(result, " (").concat(result.start, ")")); - }); - return false; - } - - if (result.end && !result.end.isValidDate()) { - context.debug(function () { - console.log("Removing invalid result: ".concat(result, " (").concat(result.end, ")")); - }); - return false; - } - - return true; - } - }]); - - return UnlikelyFormatFilter; -}(Filter); - - -// CONCATENATED MODULE: ./src/common/parsers/ISOFormatParser.ts -function ISOFormatParser_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function ISOFormatParser_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function ISOFormatParser_createClass(Constructor, protoProps, staticProps) { if (protoProps) ISOFormatParser_defineProperties(Constructor.prototype, protoProps); if (staticProps) ISOFormatParser_defineProperties(Constructor, staticProps); return Constructor; } - -// ISO 8601 -// http://www.w3.org/TR/NOTE-datetime -// - YYYY-MM-DD -// - YYYY-MM-DDThh:mmTZD -// - YYYY-MM-DDThh:mm:ssTZD -// - YYYY-MM-DDThh:mm:ss.sTZD -// - TZD = (Z or +hh:mm or -hh:mm) -var ISOFormatParser_PATTERN = new RegExp('([0-9]{4})\\-([0-9]{1,2})\\-([0-9]{1,2})' + '(?:T' //.. -+ '([0-9]{1,2}):([0-9]{1,2})' // hh:mm -+ '(?::([0-9]{1,2})(?:\\.(\\d{1,4}))?)?' // :ss.s -+ '(?:Z|([+-]\\d{2}):?(\\d{2})?)?' // TZD (Z or ±hh:mm or ±hhmm or ±hh) -+ ')?' //.. -+ '(?=\\W|$)', 'i'); -var ISOFormatParser_YEAR_NUMBER_GROUP = 1; -var ISOFormatParser_MONTH_NUMBER_GROUP = 2; -var ISOFormatParser_DATE_NUMBER_GROUP = 3; -var HOUR_NUMBER_GROUP = 4; -var MINUTE_NUMBER_GROUP = 5; -var SECOND_NUMBER_GROUP = 6; -var MILLISECOND_NUMBER_GROUP = 7; -var TZD_HOUR_OFFSET_GROUP = 8; -var TZD_MINUTE_OFFSET_GROUP = 9; - -var ISOFormatParser = /*#__PURE__*/function () { - function ISOFormatParser() { - ISOFormatParser_classCallCheck(this, ISOFormatParser); - } - - ISOFormatParser_createClass(ISOFormatParser, [{ - key: "pattern", - value: function pattern() { - return ISOFormatParser_PATTERN; - } - }, { - key: "extract", - value: function extract(context, match) { - var components = {}; - components['year'] = parseInt(match[ISOFormatParser_YEAR_NUMBER_GROUP]); - components['month'] = parseInt(match[ISOFormatParser_MONTH_NUMBER_GROUP]); - components['day'] = parseInt(match[ISOFormatParser_DATE_NUMBER_GROUP]); - - if (match[HOUR_NUMBER_GROUP] != null) { - components['hour'] = parseInt(match[HOUR_NUMBER_GROUP]); - components['minute'] = parseInt(match[MINUTE_NUMBER_GROUP]); - - if (match[SECOND_NUMBER_GROUP] != null) { - components['second'] = parseInt(match[SECOND_NUMBER_GROUP]); - } - - if (match[MILLISECOND_NUMBER_GROUP] != null) { - components['millisecond'] = parseInt(match[MILLISECOND_NUMBER_GROUP]); - } - - if (match[TZD_HOUR_OFFSET_GROUP] == null) { - components['timezoneOffset'] = 0; - } else { - var hourOffset = parseInt(match[TZD_HOUR_OFFSET_GROUP]); - var minuteOffset = 0; - - if (match[TZD_MINUTE_OFFSET_GROUP] != null) { - minuteOffset = parseInt(match[TZD_MINUTE_OFFSET_GROUP]); - } - - var offset = hourOffset * 60; - - if (offset < 0) { - offset -= minuteOffset; - } else { - offset += minuteOffset; - } - - components['timezoneOffset'] = offset; - } - } - - return components; - } - }]); - - return ISOFormatParser; -}(); - - -// CONCATENATED MODULE: ./src/utils/ParserWithWordEndingDetection.ts -function ParserWithWordEndingDetection_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function ParserWithWordEndingDetection_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function ParserWithWordEndingDetection_createClass(Constructor, protoProps, staticProps) { if (protoProps) ParserWithWordEndingDetection_defineProperties(Constructor.prototype, protoProps); if (staticProps) ParserWithWordEndingDetection_defineProperties(Constructor, staticProps); return Constructor; } - -function createParserWithWordBoundaryDetection(parser) { - return new ParserWithWordEndingDetection(parser); -} -var ParserWithWordEndingDetection = /*#__PURE__*/function () { - function ParserWithWordEndingDetection(parser) { - ParserWithWordEndingDetection_classCallCheck(this, ParserWithWordEndingDetection); - - this.original = parser; - } - - ParserWithWordEndingDetection_createClass(ParserWithWordEndingDetection, [{ - key: "pattern", - value: function pattern(context) { - var originalPattern = this.original.pattern(context); - return new RegExp("(\\W|^)".concat(originalPattern.source), originalPattern.flags); - } - }, { - key: "extract", - value: function extract(context, match) { - var header = match[1]; - match.index = match.index + header.length; - match[0] = match[0].substring(header.length); - - for (var i = 2; i < match.length; i++) { - match[i - 1] = match[i]; - } - - return this.original.extract(context, match); - } - }]); - - return ParserWithWordEndingDetection; -}(); -// CONCATENATED MODULE: ./src/configurations.ts - - - - - - - -function includeCommonConfiguration(configuration) { - configuration.parsers.unshift(createParserWithWordBoundaryDetection(new ISOFormatParser())); - configuration.refiners.unshift(new ExtractTimezoneAbbrRefiner()); - configuration.refiners.unshift(new ExtractTimezoneOffsetRefiner()); - configuration.refiners.unshift(new OverlapRemovalRefiner()); - configuration.refiners.push(new ForwardDateRefiner_ForwardDateRefiner()); - configuration.refiners.push(new UnlikelyFormatFilter()); - return configuration; -} -// CONCATENATED MODULE: ./src/locales/en/parsers/ENCasualDateParser.ts -function ENCasualDateParser_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function ENCasualDateParser_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function ENCasualDateParser_createClass(Constructor, protoProps, staticProps) { if (protoProps) ENCasualDateParser_defineProperties(Constructor.prototype, protoProps); if (staticProps) ENCasualDateParser_defineProperties(Constructor, staticProps); return Constructor; } - - - - -var ENCasualDateParser_ENCasualDateParser = /*#__PURE__*/function () { - function ENCasualDateParser() { - ENCasualDateParser_classCallCheck(this, ENCasualDateParser); - } - - ENCasualDateParser_createClass(ENCasualDateParser, [{ - key: "pattern", - value: function pattern() { - return /(now|today|tonight|last\s*night|tomorrow|tmr|yesterday)(?=\W|$)/i; - } - }, { - key: "extract", - value: function extract(context, match) { - var targetDate = dayjs_min_default()(context.refDate); - var lowerText = match[0].toLowerCase(); - var component = context.createParsingComponents(); - - if (lowerText == 'tonight') { - // Normally means this coming midnight - component.imply('hour', 22); - component.imply('meridiem', Meridiem.PM); - } else if (/^tomorrow|^tmr/.test(lowerText)) { - // Check not "Tomorrow" on late night - if (targetDate.hour() > 1) { - targetDate = targetDate.add(1, 'day'); - } - } else if (/^yesterday/.test(lowerText)) { - targetDate = targetDate.add(-1, 'day'); - } else if (lowerText.match(/last\s*night/)) { - component.imply('hour', 0); - - if (targetDate.hour() > 6) { - targetDate = targetDate.add(-1, 'day'); - } - } else if (lowerText.match("now")) { - component.assign('hour', targetDate.hour()); - component.assign('minute', targetDate.minute()); - component.assign('second', targetDate.second()); - component.assign('millisecond', targetDate.millisecond()); - } - - component.assign('day', targetDate.date()); - component.assign('month', targetDate.month() + 1); - component.assign('year', targetDate.year()); - return component; - } - }]); - - return ENCasualDateParser; -}(); - - -// CONCATENATED MODULE: ./src/locales/en/parsers/ENCasualTimeParser.ts -function ENCasualTimeParser_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function ENCasualTimeParser_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function ENCasualTimeParser_createClass(Constructor, protoProps, staticProps) { if (protoProps) ENCasualTimeParser_defineProperties(Constructor.prototype, protoProps); if (staticProps) ENCasualTimeParser_defineProperties(Constructor, staticProps); return Constructor; } - - - -var ENCasualTimeParser_ENCasualTimeParser = /*#__PURE__*/function () { - function ENCasualTimeParser() { - ENCasualTimeParser_classCallCheck(this, ENCasualTimeParser); - } - - ENCasualTimeParser_createClass(ENCasualTimeParser, [{ - key: "pattern", - value: function pattern() { - return /(?:this)?\s*(morning|afternoon|evening|night|noon)(?=\W|$)/i; - } - }, { - key: "extract", - value: function extract(context, match) { - var component = context.createParsingComponents(); - - switch (match[1].toLowerCase()) { - case 'afternoon': - component.imply('meridiem', Meridiem.PM); - component.imply('hour', 15); - break; - - case 'evening': - case 'night': - component.imply('meridiem', Meridiem.PM); - component.imply('hour', 20); - break; - - case 'morning': - component.imply('meridiem', Meridiem.AM); - component.imply('hour', 6); - break; - - case 'noon': - component.imply('meridiem', Meridiem.AM); - component.imply('hour', 12); - break; - } - - return component; - } - }]); - - return ENCasualTimeParser; -}(); - - -// CONCATENATED MODULE: ./src/locales/en/parsers/ENWeekdayParser.ts -function ENWeekdayParser_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function ENWeekdayParser_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function ENWeekdayParser_createClass(Constructor, protoProps, staticProps) { if (protoProps) ENWeekdayParser_defineProperties(Constructor.prototype, protoProps); if (staticProps) ENWeekdayParser_defineProperties(Constructor, staticProps); return Constructor; } - - - - -var ENWeekdayParser_PATTERN = new RegExp('(?:(?:\\,|\\(|\\()\\s*)?' + '(?:on\\s*?)?' + '(?:(this|last|past|next)\\s*)?' + "(".concat(matchAnyPattern(WEEKDAY_DICTIONARY), ")") + '(?:\\s*(?:\\,|\\)|\\)))?' + '(?:\\s*(this|last|past|next)\\s*week)?' + '(?=\\W|$)', 'i'); -var PREFIX_GROUP = 1; -var ENWeekdayParser_WEEKDAY_GROUP = 2; -var POSTFIX_GROUP = 3; - -var ENWeekdayParser_ENWeekdayParser = /*#__PURE__*/function () { - function ENWeekdayParser() { - ENWeekdayParser_classCallCheck(this, ENWeekdayParser); - } - - ENWeekdayParser_createClass(ENWeekdayParser, [{ - key: "pattern", - value: function pattern() { - return ENWeekdayParser_PATTERN; - } - }, { - key: "extract", - value: function extract(context, match) { - var dayOfWeek = match[ENWeekdayParser_WEEKDAY_GROUP].toLowerCase(); - var offset = WEEKDAY_DICTIONARY[dayOfWeek]; - - if (offset === undefined) { - return null; - } - - var prefix = match[PREFIX_GROUP]; - var postfix = match[POSTFIX_GROUP]; - var modifier = prefix || postfix; - modifier = modifier || ''; - modifier = modifier.toLowerCase(); - var date = this.extractWeekday(context.refDate, offset, modifier); - return context.createParsingComponents().assign('weekday', offset).imply('day', date.date()).imply('month', date.month() + 1).imply('year', date.year()); - } - }, { - key: "extractWeekday", - value: function extractWeekday(refDate, offset, modifier) { - var date = dayjs_min_default()(refDate); - var refOffset = date.day(); - - if (modifier == 'last' || modifier == 'past') { - date = date.day(offset - 7); - } else if (modifier == 'next') { - date = date.day(offset + 7); - } else if (modifier == 'this') { - date = date.day(offset); - } else { - if (Math.abs(offset - 7 - refOffset) < Math.abs(offset - refOffset)) { - date = date.day(offset - 7); - } else if (Math.abs(offset + 7 - refOffset) < Math.abs(offset - refOffset)) { - date = date.day(offset + 7); - } else { - date = date.day(offset); - } - } - - return date; - } - }]); - - return ENWeekdayParser; -}(); - - -// CONCATENATED MODULE: ./src/locales/en/parsers/ENRelativeDateFormatParser.ts -function ENRelativeDateFormatParser_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function ENRelativeDateFormatParser_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function ENRelativeDateFormatParser_createClass(Constructor, protoProps, staticProps) { if (protoProps) ENRelativeDateFormatParser_defineProperties(Constructor.prototype, protoProps); if (staticProps) ENRelativeDateFormatParser_defineProperties(Constructor, staticProps); return Constructor; } - - - -var ENRelativeDateFormatParser_PATTERN = new RegExp('(this|next|last|past)\\s*' + "(".concat(NUMBER_PATTERN, ")?\\s*") + '(seconds?|min(?:ute)?s?|hours?|days?|weeks?|months?|years?)(?=\\s*)' + '(?=\\W|$)', 'i'); -var MODIFIER_WORD_GROUP = 1; -var MULTIPLIER_WORD_GROUP = 2; -var RELATIVE_WORD_GROUP = 3; - -var ENRelativeDateFormatParser_ENRelativeDateFormatParser = /*#__PURE__*/function () { - function ENRelativeDateFormatParser() { - ENRelativeDateFormatParser_classCallCheck(this, ENRelativeDateFormatParser); - } - - ENRelativeDateFormatParser_createClass(ENRelativeDateFormatParser, [{ - key: "pattern", - value: function pattern() { - return ENRelativeDateFormatParser_PATTERN; - } - }, { - key: "extract", - value: function extract(context, match) { - if (match[MODIFIER_WORD_GROUP].toLowerCase().match(/^this/)) { - if (match[MULTIPLIER_WORD_GROUP]) { - return null; - } - - return this.extractThisReference(context, match[RELATIVE_WORD_GROUP]); - } - - var modifier = match[MODIFIER_WORD_GROUP].toLowerCase().match(/^next/) ? 1 : -1; - var parsedNum = match[MULTIPLIER_WORD_GROUP] ? parseNumberPattern(match[MULTIPLIER_WORD_GROUP]) : 1; - var unitWord = match[RELATIVE_WORD_GROUP].toLowerCase(); - - if (unitWord.match(/day|week|month|year/i)) { - return this.extractDateReference(context, unitWord, parsedNum * modifier); - } else { - return this.extractTimeReference(context, unitWord, parsedNum * modifier); - } - } - }, { - key: "extractTimeReference", - value: function extractTimeReference(context, timeUnitWord, num) { - var components = context.createParsingComponents(); - var date = dayjs_min_default()(context.refDate); - - if (timeUnitWord.match(/hour/i)) { - date = date.add(num, 'hour'); - components.imply('minute', date.minute()); - components.imply('second', date.second()); - } else if (timeUnitWord.match(/min/i)) { - date = date.add(num, 'minute'); - components.assign('minute', date.minute()); - components.imply('second', date.second()); - } else if (timeUnitWord.match(/second/i)) { - date = date.add(num, 'second'); - components.assign('second', date.second()); - components.assign('minute', date.minute()); - } - - components.assign('hour', date.hour()); - components.assign('year', date.year()); - components.assign('month', date.month() + 1); - components.assign('day', date.date()); - return components; - } - }, { - key: "extractDateReference", - value: function extractDateReference(context, dateUnitWord, num) { - var components = context.createParsingComponents(); - var date = dayjs_min_default()(context.refDate); - - if (dateUnitWord.match(/day/i)) { - date = date.add(num, 'd'); - components.assign('year', date.year()); - components.assign('month', date.month() + 1); - components.assign('day', date.date()); - } else if (dateUnitWord.match(/week/i)) { - date = date.add(num * 7, 'd'); // We don't know the exact date for next/last week so we imply them - - components.imply('day', date.date()); - components.imply('month', date.month() + 1); - components.imply('year', date.year()); - } else if (dateUnitWord.match(/month/i)) { - date = date.add(num, 'month'); // We don't know the exact day for next/last month - - components.imply('day', date.date()); - components.assign('year', date.year()); - components.assign('month', date.month() + 1); - } else if (dateUnitWord.match(/year/i)) { - date = date.add(num, 'year'); // We don't know the exact day for month on next/last year - - components.imply('day', date.date()); - components.imply('month', date.month() + 1); - components.assign('year', date.year()); - } - - return components; - } - }, { - key: "extractThisReference", - value: function extractThisReference(context, relativeWord) { - var components = context.createParsingComponents(); - var date = dayjs_min_default()(context.refDate); // This week - - if (relativeWord.match(/week/i)) { - date = date.add(-date.get('d'), 'd'); - components.imply('day', date.date()); - components.imply('month', date.month() + 1); - components.imply('year', date.year()); - } // This month - else if (relativeWord.match(/month/i)) { - date = date.add(-date.date() + 1, 'd'); - components.imply('day', date.date()); - components.assign('year', date.year()); - components.assign('month', date.month() + 1); - } // This year - else if (relativeWord.match(/year/i)) { - date = date.add(-date.date() + 1, 'd'); - date = date.add(-date.month(), 'month'); - components.imply('day', date.date()); - components.imply('month', date.month() + 1); - components.assign('year', date.year()); - } - - return components; - } - }]); - - return ENRelativeDateFormatParser; -}(); - - -// CONCATENATED MODULE: ./src/chrono.ts -function chrono_toConsumableArray(arr) { return chrono_arrayWithoutHoles(arr) || chrono_iterableToArray(arr) || chrono_unsupportedIterableToArray(arr) || chrono_nonIterableSpread(); } - -function chrono_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - -function chrono_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return chrono_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return chrono_arrayLikeToArray(o, minLen); } - -function chrono_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } - -function chrono_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return chrono_arrayLikeToArray(arr); } - -function chrono_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - -function chrono_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function chrono_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function chrono_createClass(Constructor, protoProps, staticProps) { if (protoProps) chrono_defineProperties(Constructor.prototype, protoProps); if (staticProps) chrono_defineProperties(Constructor, staticProps); return Constructor; } - - - -var chrono_Chrono = /*#__PURE__*/function () { - function Chrono(configuration) { - chrono_classCallCheck(this, Chrono); - - configuration = configuration || createCasualConfiguration(); - this.parsers = chrono_toConsumableArray(configuration.parsers); - this.refiners = chrono_toConsumableArray(configuration.refiners); - } - - chrono_createClass(Chrono, [{ - key: "parseDate", - value: function parseDate(text, refDate, opt) { - var results = this.parse(text, refDate, opt); - return results.length > 0 ? results[0].start.date() : null; - } - }, { - key: "parse", - value: function parse(text, refDate, opt) { - var context = new chrono_ParsingContext(text, refDate || new Date(), opt || {}); - var results = []; - this.parsers.forEach(function (parser) { - var parsedResults = Chrono.executeParser(context, parser); - results = results.concat(parsedResults); - }); - results.sort(function (a, b) { - return a.index - b.index; - }); - this.refiners.forEach(function (refiner) { - results = refiner.refine(context, results); - }); - return results; - } - }, { - key: "clone", - value: function clone() { - return new Chrono({ - parsers: chrono_toConsumableArray(this.parsers), - refiners: chrono_toConsumableArray(this.refiners) - }); - } - }], [{ - key: "executeParser", - value: function executeParser(context, parser) { - var results = []; - var pattern = parser.pattern(context); - var originalText = context.text; - var remainingText = context.text; - var match = pattern.exec(remainingText); - - var _loop = function _loop() { - // Calculate match index on the full text; - var index = match.index + originalText.length - remainingText.length; - match.index = index; - var result = parser.extract(context, match); - - if (!result) { - // If fail, move on by 1 - remainingText = originalText.substring(index + 1); - match = pattern.exec(remainingText); - return "continue"; - } - - var parsedResult = null; - - if (result instanceof ParsingResult) { - parsedResult = result; - } else if (result instanceof results_ParsingComponents) { - parsedResult = context.createParsingResult(match.index, match[0]); - parsedResult.start = result; - } else { - parsedResult = context.createParsingResult(match.index, match[0], result); - } - - context.debug(function () { - return console.log("".concat(parser.constructor.name, " extracted result ").concat(parsedResult)); - }); - results.push(parsedResult); - remainingText = originalText.substring(index + parsedResult.text.length); - match = pattern.exec(remainingText); - }; - - while (match) { - var _ret = _loop(); - - if (_ret === "continue") continue; - } - - return results; - } - }]); - - return Chrono; -}(); -var chrono_ParsingContext = /*#__PURE__*/function () { - function ParsingContext(text, refDate, option) { - chrono_classCallCheck(this, ParsingContext); - - this.text = text; - this.refDate = refDate; - this.option = option; - } - - chrono_createClass(ParsingContext, [{ - key: "createParsingComponents", - value: function createParsingComponents(components) { - return new results_ParsingComponents(this.refDate, components); - } - }, { - key: "createParsingResult", - value: function createParsingResult(index, textOrEndIndex, startComponents, endComponents) { - var text = typeof textOrEndIndex === 'string' ? textOrEndIndex : this.text.substring(index, textOrEndIndex); - var start = startComponents ? this.createParsingComponents(startComponents) : null; - var end = endComponents ? this.createParsingComponents(endComponents) : null; - return new ParsingResult(this.refDate, index, text, start, end); - } - }, { - key: "debug", - value: function debug(block) { - if (this.option.debug) { - if (this.option.debug instanceof Function) { - this.option.debug(block); - } else { - var handler = this.option.debug; - handler.debug(block); - } - } - } - }]); - - return ParsingContext; -}(); -// CONCATENATED MODULE: ./src/locales/en/index.ts - - - - - - - - - - - - - - - - - - - // Shortcuts - -var casual = new chrono_Chrono(createCasualConfiguration(false)); -var strict = new chrono_Chrono(createConfiguration(true, false)); -var GB = new chrono_Chrono(createConfiguration(false, true)); -function parse(text, ref, option) { - return casual.parse(text, ref, option); -} -function parseDate(text, ref, option) { - return casual.parseDate(text, ref, option); -} -function createCasualConfiguration() { - var littleEndian = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - var option = createConfiguration(false, littleEndian); - option.parsers.unshift(createParserWithWordBoundaryDetection(new ENCasualDateParser_ENCasualDateParser())); - option.parsers.unshift(createParserWithWordBoundaryDetection(new ENCasualTimeParser_ENCasualTimeParser())); - option.parsers.unshift(createParserWithWordBoundaryDetection(new ENWeekdayParser_ENWeekdayParser())); - option.parsers.unshift(createParserWithWordBoundaryDetection(new ENRelativeDateFormatParser_ENRelativeDateFormatParser())); - return option; -} -function createConfiguration() { - var strictMode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; - var littleEndian = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - return includeCommonConfiguration({ - parsers: [createParserWithWordBoundaryDetection(new ENTimeUnitDeadlineFormatParser_ENTimeUnitDeadlineFormatParser(strictMode)), createParserWithWordBoundaryDetection(new ENMonthNameLittleEndianParser_ENMonthNameLittleEndianParser()), createParserWithWordBoundaryDetection(new ENMonthNameMiddleEndianParser_ENMonthNameMiddleEndianParser()), createParserWithWordBoundaryDetection(new ENMonthNameParser_ENMonthNameParser()), new ENSlashDateFormatParser_ENSlashDateFormatParser(littleEndian), createParserWithWordBoundaryDetection(new ENSlashDateFormatStartWithYearParser_ENSlashDateFormatStartWithYearParser()), createParserWithWordBoundaryDetection(new ENSlashMonthFormatParser()), new ENTimeExpressionParser_ENTimeExpressionParser(), createParserWithWordBoundaryDetection(new ENTimeUnitAgoFormatParser_ENTimeUnitAgoFormatParser(strictMode)), createParserWithWordBoundaryDetection(new ENTimeUnitLaterFormatParser_ENTimeUnitLaterFormatParser(strictMode))], - refiners: [new ENMergeDateTimeRefiner_ENMergeDateTimeRefiner(), new ENMergeDateRangeRefiner()] - }); -} -// CONCATENATED MODULE: ./src/locales/ja/constants.ts -/** - * to-hankaku.js - * convert to ascii code strings. - * - * @version 1.0.1 - * @author think49 - * @url https://gist.github.com/964592 - * @license http://www.opensource.org/licenses/mit-license.php (The MIT License) - */ -function toHankaku(text) { - return String(text).replace(/\u2019/g, "'").replace(/\u201D/g, "\"").replace(/\u3000/g, " ").replace(/\uFFE5/g, "\xA5").replace(/[\uFF01\uFF03-\uFF06\uFF08\uFF09\uFF0C-\uFF19\uFF1C-\uFF1F\uFF21-\uFF3B\uFF3D\uFF3F\uFF41-\uFF5B\uFF5D\uFF5E]/g, alphaNum); -} - -function alphaNum(token) { - return String.fromCharCode(token.charCodeAt(0) - 65248); -} -// CONCATENATED MODULE: ./src/locales/ja/parsers/JPStandardParser.ts -function JPStandardParser_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function JPStandardParser_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function JPStandardParser_createClass(Constructor, protoProps, staticProps) { if (protoProps) JPStandardParser_defineProperties(Constructor.prototype, protoProps); if (staticProps) JPStandardParser_defineProperties(Constructor, staticProps); return Constructor; } - - - - -var JPStandardParser_PATTERN = /(?:(?:([同今本])|((昭和|平成|令和)?([0-90-9]{1,4}|元)))年\s*)?([0-90-9]{1,2})月\s*([0-90-9]{1,2})日/i; -var SPECIAL_YEAR_GROUP = 1; -var TYPICAL_YEAR_GROUP = 2; -var ERA_GROUP = 3; -var JPStandardParser_YEAR_NUMBER_GROUP = 4; -var JPStandardParser_MONTH_GROUP = 5; -var DAY_GROUP = 6; - -var JPStandardParser_JPStandardParser = /*#__PURE__*/function () { - function JPStandardParser() { - JPStandardParser_classCallCheck(this, JPStandardParser); - } - - JPStandardParser_createClass(JPStandardParser, [{ - key: "pattern", - value: function pattern() { - return JPStandardParser_PATTERN; - } - }, { - key: "extract", - value: function extract(context, match) { - var month = parseInt(toHankaku(match[JPStandardParser_MONTH_GROUP])); - var day = parseInt(toHankaku(match[DAY_GROUP])); - var components = context.createParsingComponents({ - 'day': day, - 'month': month - }); - - if (match[SPECIAL_YEAR_GROUP] && match[SPECIAL_YEAR_GROUP].match('同|今|本')) { - var moment = dayjs_min_default()(context.refDate); - components.assign('year', moment.year()); - } - - if (match[TYPICAL_YEAR_GROUP]) { - var yearNumText = match[JPStandardParser_YEAR_NUMBER_GROUP]; - var year = yearNumText == '元' ? 1 : parseInt(toHankaku(yearNumText)); - - if (match[ERA_GROUP] == '令和') { - year += 2018; - } else if (match[ERA_GROUP] == '平成') { - year += 1988; - } else if (match[ERA_GROUP] == '昭和') { - year += 1925; - } - - components.assign('year', year); - } else { - var _year = findYearClosestToRef(context.refDate, day, month); - - components.imply('year', _year); - } - - return components; - } - }]); - - return JPStandardParser; -}(); - - -// CONCATENATED MODULE: ./src/locales/ja/refiners/JPMergeDateRangeRefiner.ts -function JPMergeDateRangeRefiner_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { JPMergeDateRangeRefiner_typeof = function _typeof(obj) { return typeof obj; }; } else { JPMergeDateRangeRefiner_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return JPMergeDateRangeRefiner_typeof(obj); } - -function JPMergeDateRangeRefiner_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function JPMergeDateRangeRefiner_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function JPMergeDateRangeRefiner_createClass(Constructor, protoProps, staticProps) { if (protoProps) JPMergeDateRangeRefiner_defineProperties(Constructor.prototype, protoProps); if (staticProps) JPMergeDateRangeRefiner_defineProperties(Constructor, staticProps); return Constructor; } - -function JPMergeDateRangeRefiner_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) JPMergeDateRangeRefiner_setPrototypeOf(subClass, superClass); } - -function JPMergeDateRangeRefiner_setPrototypeOf(o, p) { JPMergeDateRangeRefiner_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return JPMergeDateRangeRefiner_setPrototypeOf(o, p); } - -function JPMergeDateRangeRefiner_createSuper(Derived) { var hasNativeReflectConstruct = JPMergeDateRangeRefiner_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = JPMergeDateRangeRefiner_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = JPMergeDateRangeRefiner_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return JPMergeDateRangeRefiner_possibleConstructorReturn(this, result); }; } - -function JPMergeDateRangeRefiner_possibleConstructorReturn(self, call) { if (call && (JPMergeDateRangeRefiner_typeof(call) === "object" || typeof call === "function")) { return call; } return JPMergeDateRangeRefiner_assertThisInitialized(self); } - -function JPMergeDateRangeRefiner_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - -function JPMergeDateRangeRefiner_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } - -function JPMergeDateRangeRefiner_getPrototypeOf(o) { JPMergeDateRangeRefiner_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return JPMergeDateRangeRefiner_getPrototypeOf(o); } - - -/** - * Merging before and after results (see. AbstractMergeDateRangeRefiner) - * This implementation should provide Japanese connecting phases - * - 水曜日[ー]日曜日 - * - 水曜日[から]日曜日 - */ - -var JPMergeDateRangeRefiner = /*#__PURE__*/function (_AbstractMergeDateRan) { - JPMergeDateRangeRefiner_inherits(JPMergeDateRangeRefiner, _AbstractMergeDateRan); - - var _super = JPMergeDateRangeRefiner_createSuper(JPMergeDateRangeRefiner); - - function JPMergeDateRangeRefiner() { - JPMergeDateRangeRefiner_classCallCheck(this, JPMergeDateRangeRefiner); - - return _super.apply(this, arguments); - } - - JPMergeDateRangeRefiner_createClass(JPMergeDateRangeRefiner, [{ - key: "patternBetween", - value: function patternBetween() { - return /^\s*(から|ー|-)\s*$/i; - } - }]); - - return JPMergeDateRangeRefiner; -}(AbstractMergeDateRangeRefiner); - - -// CONCATENATED MODULE: ./src/locales/ja/parsers/JPCasualDateParser.ts -function JPCasualDateParser_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function JPCasualDateParser_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function JPCasualDateParser_createClass(Constructor, protoProps, staticProps) { if (protoProps) JPCasualDateParser_defineProperties(Constructor.prototype, protoProps); if (staticProps) JPCasualDateParser_defineProperties(Constructor, staticProps); return Constructor; } - - - -var JPCasualDateParser_PATTERN = /今日|当日|昨日|明日|今夜|今夕|今晩|今朝/i; - -var JPCasualDateParser_JPCasualDateParser = /*#__PURE__*/function () { - function JPCasualDateParser() { - JPCasualDateParser_classCallCheck(this, JPCasualDateParser); - } - - JPCasualDateParser_createClass(JPCasualDateParser, [{ - key: "pattern", - value: function pattern() { - return JPCasualDateParser_PATTERN; - } - }, { - key: "extract", - value: function extract(context, match) { - var text = match[0]; - var date = dayjs_min_default()(context.refDate); - var components = context.createParsingComponents(); - - if (text == '今夜' || text == '今夕' || text == '今晩') { - components.imply('hour', 22); - components.assign('meridiem', Meridiem.PM); - } else if (text.match("今朝")) { - components.imply('hour', 6); - components.assign('meridiem', Meridiem.AM); - } else if (text == '明日') { - if (date.hour() > 4) { - // Check not "Tomorrow" on late night - date = date.add(1, 'day'); - } - } else if (text == '昨日') { - date = date.add(-1, 'day'); - } - - components.assign('day', date.date()); - components.assign('month', date.month() + 1); - components.assign('year', date.year()); - return components; - } - }]); - - return JPCasualDateParser; -}(); - - -// CONCATENATED MODULE: ./src/locales/ja/index.ts - - - - -// Shortcuts -var ja_casual = new chrono_Chrono(ja_createCasualConfiguration()); -var ja_strict = new chrono_Chrono(ja_createConfiguration()); -function ja_parse(text, ref, option) { - return ja_casual.parse(text, ref, option); -} -function ja_parseDate(text, ref, option) { - return ja_casual.parseDate(text, ref, option); -} -function ja_createCasualConfiguration() { - var option = ja_createConfiguration(); - option.parsers.unshift(new JPCasualDateParser_JPCasualDateParser()); - return option; -} -function ja_createConfiguration() { - return { - parsers: [new JPStandardParser_JPStandardParser()], - refiners: [new JPMergeDateRangeRefiner()] - }; -} -// CONCATENATED MODULE: ./src/index.ts - - -var src_strict = strict; -var src_casual = casual; -function src_parse(text, ref, option) { - return src_casual.parse(text, ref, option); -} -function src_parseDate(text, ref, option) { - return src_casual.parseDate(text, ref, option); -} -var Meridiem; // export * as xx from './locales/xx' - -(function (Meridiem) { - Meridiem[Meridiem["AM"] = 0] = "AM"; - Meridiem[Meridiem["PM"] = 1] = "PM"; -})(Meridiem || (Meridiem = {})); - - - - - - -/***/ }) -/******/ ]); -}); -//# sourceMappingURL=chrono.js.map \ No newline at end of file diff --git a/dist/chrono.js.map b/dist/chrono.js.map deleted file mode 100644 index 891be3e4..00000000 --- a/dist/chrono.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack://chrono/webpack/universalModuleDefinition","webpack://chrono/webpack/bootstrap","webpack://chrono/./node_modules/dayjs/dayjs.min.js","webpack://chrono/./src/utils/pattern.ts","webpack://chrono/./src/locales/en/constants.ts","webpack://chrono/./src/results.ts","webpack://chrono/./src/locales/en/parsers/ENTimeUnitDeadlineFormatParser.ts","webpack://chrono/./src/calculation/yearCalculation.ts","webpack://chrono/./src/locales/en/parsers/ENMonthNameLittleEndianParser.ts","webpack://chrono/./src/locales/en/parsers/ENMonthNameMiddleEndianParser.ts","webpack://chrono/./src/locales/en/parsers/ENMonthNameParser.ts","webpack://chrono/./src/locales/en/parsers/ENSlashDateFormatParser.ts","webpack://chrono/./src/locales/en/parsers/ENSlashDateFormatStartWithYearParser.ts","webpack://chrono/./src/locales/en/parsers/ENSlashMonthFormatParser.ts","webpack://chrono/./src/locales/en/parsers/ENTimeExpressionParser.ts","webpack://chrono/./src/locales/en/parsers/ENTimeUnitAgoFormatParser.ts","webpack://chrono/./src/locales/en/parsers/ENTimeUnitLaterFormatParser.ts","webpack://chrono/./src/common/abstractRefiners.ts","webpack://chrono/./src/common/refiners/AbstractMergeDateRangeRefiner.ts","webpack://chrono/./src/locales/en/refiners/ENMergeDateRangeRefiner.ts","webpack://chrono/./src/calculation/mergingCalculation.ts","webpack://chrono/./src/common/refiners/AbstractMergeDateTimeRefiner.ts","webpack://chrono/./src/locales/en/refiners/ENMergeDateTimeRefiner.ts","webpack://chrono/./src/common/refiners/ExtractTimezoneAbbrRefiner.ts","webpack://chrono/./src/common/refiners/ExtractTimezoneOffsetRefiner.ts","webpack://chrono/./src/common/refiners/OverlapRemovalRefiner.ts","webpack://chrono/./src/common/refiners/ForwardDateRefiner.ts","webpack://chrono/./src/common/refiners/UnlikelyFormatFilter.ts","webpack://chrono/./src/common/parsers/ISOFormatParser.ts","webpack://chrono/./src/utils/ParserWithWordEndingDetection.ts","webpack://chrono/./src/configurations.ts","webpack://chrono/./src/locales/en/parsers/ENCasualDateParser.ts","webpack://chrono/./src/locales/en/parsers/ENCasualTimeParser.ts","webpack://chrono/./src/locales/en/parsers/ENWeekdayParser.ts","webpack://chrono/./src/locales/en/parsers/ENRelativeDateFormatParser.ts","webpack://chrono/./src/chrono.ts","webpack://chrono/./src/locales/en/index.ts","webpack://chrono/./src/locales/ja/constants.ts","webpack://chrono/./src/locales/ja/parsers/JPStandardParser.ts","webpack://chrono/./src/locales/ja/refiners/JPMergeDateRangeRefiner.ts","webpack://chrono/./src/locales/ja/parsers/JPCasualDateParser.ts","webpack://chrono/./src/locales/ja/index.ts","webpack://chrono/./src/index.ts"],"names":["patternWithWordBreak","regExp","RegExp","source","extractTerms","dictionary","keys","Array","Map","from","Object","matchAnyPattern","joinedTerms","sort","a","b","length","join","replace","WEEKDAY_DICTIONARY","MONTH_DICTIONARY","INTEGER_WORD_DICTIONARY","ORDINAL_WORD_DICTIONARY","TIME_UNIT_DICTIONARY","NUMBER_PATTERN","parseNumberPattern","match","num","toLowerCase","undefined","parseFloat","ORDINAL_NUMBER_PATTERN","parseOrdinalNumberPattern","parseInt","YEAR_PATTERN","parseYear","test","yearNumber","SINGLE_TIME_UNIT_PATTERN","SINGLE_TIME_UNIT_REGEX","SINGLE_TIME_UNIT_PATTERN_NO_CAPTURE","TIME_UNITS_PATTERN","parseTimeUnits","timeunitText","fragments","remainingText","exec","collectDateTimeFragment","substring","unit","ParsingComponents","refDate","knownComponents","knownValues","impliedValues","key","refDayJs","dayjs","imply","date","month","year","component","toDate","value","Date","isCertain","dateMoment","adjustTimezoneOffset","get","utcOffset","add","result","hour","minute","second","millisecond","currentTimezoneOffset","targetTimezoneOffset","JSON","stringify","components","assign","day","ParsingResult","index","text","start","end","clone","PATTERN","STRICT_PATTERN","ENTimeUnitDeadlineFormatParser","strictMode","context","timeUnits","createRelativeFromRefDate","findYearClosestToRef","refMoment","nextYear","lastYear","Math","abs","diff","WEEKDAY_GROUP","DATE_GROUP","DATE_TO_GROUP","MONTH_NAME_GROUP","YEAR_GROUP","ENMonthNameLittleEndianParser","createParsingResult","weekday","endDate","ENMonthNameMiddleEndianParser","createParsingComponents","ENMonthNameParser","monthName","DAYS_OFFSET","OPENING_GROUP","ENDING_GROUP","FIRST_NUMBERS_GROUP","SECOND_NUMBERS_GROUP","ENSlashDateFormatParser","littleEndian","groupNumberMonth","groupNumberDay","substr","indexOf","YEAR_NUMBER_GROUP","MONTH_NUMBER_GROUP","DATE_NUMBER_GROUP","ENSlashDateFormatStartWithYearParser","MONTH_GROUP","ENSlashMonthFormatParser","FIRST_REG_PATTERN","SECOND_REG_PATTERN","HOUR_GROUP","MINUTE_GROUP","SECOND_GROUP","MILLI_SECOND_GROUP","AM_PM_HOUR_GROUP","ENTimeExpressionParser","extractStartTimeComponent","newResult","extractEndTimeComponent","meridiem","Meridiem","PM","AM","floor","ampm","startAtPM","getTime","ENTimeUnitAgoFormatParser","GROUP_NUM_SUFFIX","GROUP_NUM_TIMEUNITS","ENTimeUnitLaterFormatParser","suffix","trim","Filter","results","filter","r","isValid","MergingRefiner","mergedResults","curResult","nextResult","i","textBetween","shouldMergeResults","push","left","right","mergedResult","mergeResults","debug","console","log","constructor","name","AbstractMergeDateRangeRefiner","currentResult","patternBetween","fromResult","toResult","isOnlyWeekdayComponent","getCertainComponents","forEach","fromMoment","toMoment","isBefore","isAfter","min","ENMergeDateRangeRefiner","mergeDateTimeResult","dateResult","timeResult","beginDate","beginTime","mergeDateTimeComponent","endTime","endDateTime","dateComponent","timeComponent","dateTimeComponent","ENMergeDateTimeRefiner","isOnlyDate","isOnlyTime","AbstractMergeDateTimeRefiner","TIMEZONE_NAME_PATTERN","DEFAULT_TIMEZONE_ABBR_MAP","ExtractTimezoneAbbrRefiner","timezoneOverrides","timezone","timezones","option","timezoneAbbr","toUpperCase","timezoneOffset","TIMEZONE_OFFSET_PATTERN","TIMEZONE_OFFSET_SIGN_GROUP","TIMEZONE_OFFSET_HOUR_OFFSET_GROUP","TIMEZONE_OFFSET_MINUTE_OFFSET_GROUP","ExtractTimezoneOffsetRefiner","hourOffset","minuteOffset","OverlapRemovalRefiner","filteredResults","prevResult","ForwardDateRefiner","forwardDate","isOnlyDayMonthComponent","UnlikelyFormatFilter","isValidDate","HOUR_NUMBER_GROUP","MINUTE_NUMBER_GROUP","SECOND_NUMBER_GROUP","MILLISECOND_NUMBER_GROUP","TZD_HOUR_OFFSET_GROUP","TZD_MINUTE_OFFSET_GROUP","ISOFormatParser","offset","createParserWithWordBoundaryDetection","parser","ParserWithWordEndingDetection","original","originalPattern","pattern","flags","header","extract","includeCommonConfiguration","configuration","parsers","unshift","refiners","ENCasualDateParser","targetDate","lowerText","ENCasualTimeParser","PREFIX_GROUP","POSTFIX_GROUP","ENWeekdayParser","dayOfWeek","prefix","postfix","modifier","extractWeekday","refOffset","MODIFIER_WORD_GROUP","MULTIPLIER_WORD_GROUP","RELATIVE_WORD_GROUP","ENRelativeDateFormatParser","extractThisReference","parsedNum","unitWord","extractDateReference","extractTimeReference","timeUnitWord","dateUnitWord","relativeWord","Chrono","createCasualConfiguration","opt","parse","ParsingContext","parsedResults","executeParser","concat","refiner","refine","originalText","parsedResult","textOrEndIndex","startComponents","endComponents","block","Function","handler","casual","strict","createConfiguration","GB","ref","parseDate","withWordBoundary","toHankaku","String","alphaNum","token","fromCharCode","charCodeAt","SPECIAL_YEAR_GROUP","TYPICAL_YEAR_GROUP","ERA_GROUP","DAY_GROUP","JPStandardParser","moment","yearNumText","JPMergeDateRangeRefiner","JPCasualDateParser","en"],"mappings":"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","file":"chrono.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"chrono\"] = factory();\n\telse\n\t\troot[\"chrono\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):t.dayjs=e()}(this,function(){\"use strict\";var t=\"millisecond\",e=\"second\",n=\"minute\",r=\"hour\",i=\"day\",s=\"week\",u=\"month\",o=\"quarter\",a=\"year\",h=/^(\\d{4})-?(\\d{1,2})-?(\\d{0,2})[^0-9]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?.?(\\d{1,3})?$/,f=/\\[([^\\]]+)]|Y{2,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,c=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},d={s:c,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+c(r,2,\"0\")+\":\"+c(i,2,\"0\")},m:function(t,e){var n=12*(e.year()-t.year())+(e.month()-t.month()),r=t.clone().add(n,u),i=e-r<0,s=t.clone().add(n+(i?-1:1),u);return Number(-(n+(e-r)/(i?r-s:s-r))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(h){return{M:u,y:a,w:s,d:i,D:\"date\",h:r,m:n,s:e,ms:t,Q:o}[h]||String(h||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},$={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\")},l=\"en\",m={};m[l]=$;var y=function(t){return t instanceof v},M=function(t,e,n){var r;if(!t)return l;if(\"string\"==typeof t)m[t]&&(r=t),e&&(m[t]=e,r=t);else{var i=t.name;m[i]=t,r=i}return!n&&r&&(l=r),r||!n&&l},g=function(t,e){if(y(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new v(n)},D=d;D.l=M,D.i=y,D.w=function(t,e){return g(t,{locale:e.$L,utc:e.$u,$offset:e.$offset})};var v=function(){function c(t){this.$L=this.$L||M(t.locale,null,!0),this.parse(t)}var d=c.prototype;return d.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(D.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match(h);if(r)return n?new Date(Date.UTC(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)):new Date(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)}return new Date(e)}(t),this.init()},d.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},d.$utils=function(){return D},d.isValid=function(){return!(\"Invalid Date\"===this.$d.toString())},d.isSame=function(t,e){var n=g(t);return this.startOf(e)<=n&&n<=this.endOf(e)},d.isAfter=function(t,e){return g(t)\n\nexport function patternWithWordBreak(regExp: RegExp) : RegExp {\n return RegExp('' + regExp.source)\n}\n\n\nexport function extractTerms(dictionary: DictionaryLike): string[] {\n let keys: string[];\n if (dictionary instanceof Array) {\n keys = [...dictionary];\n } else if (dictionary instanceof Map) {\n keys = Array.from((dictionary as Map).keys());\n } else {\n keys = Object.keys(dictionary);\n }\n\n return keys;\n}\n\n\nexport function matchAnyPattern(dictionary: DictionaryLike) : string {\n // TODO: More efficient regex pattern by considering duplicated prefix\n\n const joinedTerms = extractTerms(dictionary)\n .sort((a, b) => b.length - a.length)\n .join('|')\n .replace(/\\./g, '\\\\.')\n\n return `(?:${joinedTerms})`;\n}","import {OpUnitType} from \"dayjs\";\nimport {matchAnyPattern} from \"../../utils/pattern\";\n\nexport const WEEKDAY_DICTIONARY: {[word: string]: number} = {\n 'sunday': 0,\n 'sun': 0,\n 'sun.': 0,\n 'monday': 1,\n 'mon': 1,\n 'mon.': 1,\n 'tuesday': 2,\n 'tue':2,\n 'tue.':2,\n 'wednesday': 3,\n 'wed': 3,\n 'wed.': 3,\n 'thursday': 4,\n 'thurs': 4,\n 'thurs.': 4,\n 'thur': 4,\n 'thur.': 4,\n 'thu': 4,\n 'thu.': 4,\n 'friday': 5,\n 'fri': 5,\n 'fri.': 5,\n 'saturday': 6,\n 'sat': 6,\n 'sat.': 6\n};\n\nexport const MONTH_DICTIONARY: {[word: string]: number} = {\n 'january': 1,\n 'jan': 1,\n 'jan.': 1,\n 'february': 2,\n 'feb': 2,\n 'feb.': 2,\n 'march': 3,\n 'mar': 3,\n 'mar.': 3,\n 'april': 4,\n 'apr': 4,\n 'apr.': 4,\n 'may': 5,\n 'june': 6,\n 'jun': 6,\n 'jun.': 6,\n 'july': 7,\n 'jul': 7,\n 'jul.': 7,\n 'august': 8,\n 'aug': 8,\n 'aug.': 8,\n 'september': 9,\n 'sep': 9,\n 'sep.': 9,\n 'sept': 9,\n 'sept.': 9,\n 'october': 10,\n 'oct': 10,\n 'oct.': 10,\n 'november': 11,\n 'nov': 11,\n 'nov.': 11,\n 'december': 12,\n 'dec': 12,\n 'dec.': 12\n};\n\nexport const INTEGER_WORD_DICTIONARY: {[word: string]: number} = {\n 'one' : 1,\n 'two' : 2,\n 'three' : 3,\n 'four' : 4,\n 'five' : 5,\n 'six' : 6,\n 'seven' : 7,\n 'eight' : 8,\n 'nine' : 9,\n 'ten' : 10,\n 'eleven' : 11,\n 'twelve' : 12\n};\n\nexport const ORDINAL_WORD_DICTIONARY: {[word: string]: number} = {\n 'first' : 1,\n 'second': 2,\n 'third': 3,\n 'fourth': 4,\n 'fifth': 5,\n 'sixth': 6,\n 'seventh': 7,\n 'eighth': 8,\n 'ninth': 9,\n 'tenth': 10,\n 'eleventh': 11,\n 'twelfth': 12,\n 'thirteenth': 13,\n 'fourteenth': 14,\n 'fifteenth': 15,\n 'sixteenth': 16,\n 'seventeenth': 17,\n 'eighteenth': 18,\n 'nineteenth': 19,\n 'twentieth': 20,\n 'twenty first': 21,\n 'twenty-first': 21,\n 'twenty second': 22,\n 'twenty-second': 22,\n 'twenty third': 23,\n 'twenty-third': 23,\n 'twenty fourth': 24,\n 'twenty-fourth': 24,\n 'twenty fifth': 25,\n 'twenty-fifth': 25,\n 'twenty sixth': 26,\n 'twenty-sixth': 26,\n 'twenty seventh': 27,\n 'twenty-seventh': 27,\n 'twenty eighth': 28,\n 'twenty-eighth': 28,\n 'twenty ninth': 29,\n 'twenty-ninth': 29,\n 'thirtieth': 30,\n 'thirty first': 31,\n 'thirty-first': 31\n};\n\nexport const TIME_UNIT_DICTIONARY : {[word: string]: OpUnitType} = {\n 'sec': 'second',\n 'second' : 'second',\n 'seconds' : 'second',\n 'min' : 'minute',\n 'mins' : 'minute',\n 'minute' : 'minute',\n 'minutes' : 'minute',\n 'h' : 'hour',\n 'hr' : 'hour',\n 'hrs' : 'hour',\n 'hour' : 'hour',\n 'hours' : 'hour',\n 'day' : 'd',\n 'days' : 'd',\n 'week' : 'week',\n 'weeks': 'week',\n 'month' : 'month',\n 'months' : 'month',\n 'yr' : 'year',\n 'year' : 'year',\n 'years' : 'year',\n};\n\n//-----------------------------\n\nexport const NUMBER_PATTERN = `(?:${matchAnyPattern(INTEGER_WORD_DICTIONARY)}|[0-9]+|[0-9]+\\\\.[0-9]+|half(?:\\\\s*an?)?|an?(?:\\\\s*few)?|few)`;\n\nexport function parseNumberPattern(match: string) : number {\n const num = match.toLowerCase();\n if (INTEGER_WORD_DICTIONARY[num] !== undefined) {\n return INTEGER_WORD_DICTIONARY[num];\n } else if (num === 'a' || num === 'an') {\n return 1;\n } else if (num.match(/few/)) {\n return 3;\n } else if (num.match(/half/)) {\n return 0.5;\n }\n\n return parseFloat(num);\n}\n\n//-----------------------------\n\nexport const ORDINAL_NUMBER_PATTERN = `(?:${matchAnyPattern(ORDINAL_WORD_DICTIONARY)}|[0-9]{1,2}(?:st|nd|rd|th)?)`;\nexport function parseOrdinalNumberPattern(match: string) : number {\n let num = match.toLowerCase();\n if (ORDINAL_WORD_DICTIONARY[num] !== undefined) {\n return ORDINAL_WORD_DICTIONARY[num];\n }\n\n num = num.replace(/(?:st|nd|rd|th)$/i, '')\n return parseInt(num);\n}\n\n\n//-----------------------------\n\nexport const YEAR_PATTERN = `(?:[1-9][0-9]{0,3}\\\\s*(?:BE|AD|BC)|[1-2][0-9]{3}|[5-9][0-9])`;\nexport function parseYear(match: string) : number {\n if (/BE/i.test(match)) {\n // Buddhist Era\n match = match.replace(/BE/i, '');\n return parseInt(match) - 543;\n }\n\n if (/BC/i.test(match)){\n // Before Christ\n match = match.replace(/BC/i, '');\n return -parseInt(match);\n }\n\n if (/AD/i.test(match)){\n match = match.replace(/AD/i, '');\n return parseInt(match);\n }\n\n let yearNumber = parseInt(match);\n if (yearNumber < 100){\n if (yearNumber > 50) {\n yearNumber = yearNumber + 1900;\n } else {\n yearNumber = yearNumber + 2000;\n }\n }\n\n return yearNumber;\n}\n\n//-----------------------------\n\nconst SINGLE_TIME_UNIT_PATTERN = `(${NUMBER_PATTERN})\\\\s*(${matchAnyPattern(TIME_UNIT_DICTIONARY)})\\\\s*`;\nconst SINGLE_TIME_UNIT_REGEX = new RegExp(SINGLE_TIME_UNIT_PATTERN, 'i');\n\nconst SINGLE_TIME_UNIT_PATTERN_NO_CAPTURE = SINGLE_TIME_UNIT_PATTERN.replace(/\\((?!\\?)/g, '(?:');\n\nexport const TIME_UNITS_PATTERN = `(?:${SINGLE_TIME_UNIT_PATTERN_NO_CAPTURE})+`;\n\nexport function parseTimeUnits(timeunitText) : {[c: OpUnitType]: number} {\n const fragments = {};\n let remainingText = timeunitText;\n let match = SINGLE_TIME_UNIT_REGEX.exec(remainingText);\n while (match) {\n collectDateTimeFragment(fragments, match);\n remainingText = remainingText.substring(match[0].length);\n match = SINGLE_TIME_UNIT_REGEX.exec(remainingText);\n }\n return fragments;\n}\n\nfunction collectDateTimeFragment(fragments, match) {\n const num = parseNumberPattern(match[1]);\n const unit = TIME_UNIT_DICTIONARY[match[2].toLowerCase()]\n fragments[unit] = num;\n}","import {Component, ParsedComponents, ParsedResult} from \"./index\";\n\nimport dayjs, {OpUnitType} from 'dayjs';\n\nexport class ParsingComponents implements ParsedComponents {\n private knownValues: {[c: Component]: number}\n private impliedValues: {[c: Component]: number}\n\n constructor(\n refDate: Date,\n knownComponents?: {[c: Component]: string|number},\n ) {\n this.knownValues = {};\n this.impliedValues = {};\n if (knownComponents) {\n for (const key in knownComponents) {\n this.knownValues[key] = knownComponents[key];\n }\n }\n\n const refDayJs = dayjs(refDate);\n this.imply('day', refDayJs.date());\n this.imply('month', refDayJs.month() + 1);\n this.imply('year', refDayJs.year())\n this.imply('hour', 12);\n this.imply('minute', 0);\n this.imply('second', 0);\n this.imply('millisecond', 0);\n }\n\n get(component: Component) : (number | null) {\n\n if (component in this.knownValues) {\n return this.knownValues[component];\n }\n\n if (component in this.impliedValues) {\n return this.impliedValues[component];\n }\n\n return null;\n }\n\n date() : Date {\n return this.dayjs().toDate();\n }\n\n isCertain(component: Component) : boolean {\n return component in this.knownValues;\n }\n\n getCertainComponents() : Array {\n return Object.keys(this.knownValues) as Array\n }\n\n imply(component: Component, value: number) : ParsingComponents {\n if (component in this.knownValues) return;\n this.impliedValues[component] = value;\n return this;\n }\n\n assign(component: Component, value: number) : ParsingComponents{\n this.knownValues[component] = value;\n delete this.impliedValues[component];\n return this;\n }\n\n clone() : ParsingComponents {\n const component = new ParsingComponents(new Date());\n component.knownValues = {};\n component.impliedValues = {};\n\n for (const key in this.knownValues) {\n component.knownValues[key] = this.knownValues[key];\n }\n\n for (const key in this.impliedValues) {\n component.impliedValues[key] = this.impliedValues[key];\n }\n\n return component;\n }\n\n isOnlyDate() : boolean {\n return !this.isCertain('hour') && !this.isCertain('minute') && !this.isCertain('second');\n }\n\n isOnlyTime() : boolean {\n return !this.isCertain('weekday') && !this.isCertain('day') && !this.isCertain('month');\n }\n\n isOnlyWeekdayComponent() : boolean {\n return this.isCertain('weekday') && !this.isCertain('day') && !this.isCertain('month');\n }\n\n isOnlyDayMonthComponent() : boolean {\n return this.isCertain('day') && this.isCertain('month') && !this.isCertain('year');\n }\n\n isValidDate() : boolean {\n let dateMoment = this.dayjs();\n if (this.isCertain('timezoneOffset')) {\n const adjustTimezoneOffset = this.get('timezoneOffset') - dateMoment.utcOffset();\n dateMoment = dateMoment.add(adjustTimezoneOffset, 'minute');\n }\n\n if (dateMoment.get('year') != this.get('year')) return false;\n if (dateMoment.get('month') != this.get('month')-1) return false;\n if (dateMoment.get('date') != this.get('day')) return false;\n if (dateMoment.get('hour') != this.get('hour')) return false;\n if (dateMoment.get('minute') != this.get('minute')) return false;\n\n return true;\n }\n\n dayjs() {\n let result = dayjs();\n\n result = result.year(this.get('year'));\n result = result.month(this.get('month') - 1);\n result = result.date(this.get('day'));\n result = result.hour(this.get('hour'));\n result = result.minute(this.get('minute'));\n result = result.second(this.get('second'));\n result = result.millisecond(this.get('millisecond'));\n\n // Javascript Date Object return minus timezone offset\n const currentTimezoneOffset = result.utcOffset();\n const targetTimezoneOffset = this.get('timezoneOffset') !== null ?\n this.get('timezoneOffset') : currentTimezoneOffset;\n\n const adjustTimezoneOffset = targetTimezoneOffset - currentTimezoneOffset;\n result = result.add(-adjustTimezoneOffset, 'minute');\n\n return result;\n }\n\n toString() {\n return `[ParsingComponents {knownValues: ${JSON.stringify(this.knownValues)}, impliedValues: ${JSON.stringify(this.impliedValues)}}]`;\n }\n\n\n static createRelativeFromRefDate(refDate:Date, fragments: {[c: OpUnitType]: number}) : ParsingComponents{\n let date = dayjs(refDate);\n for (const key in fragments) {\n date = date.add(fragments[key], key);\n }\n\n const components = new ParsingComponents(refDate);\n if (fragments['hour'] || fragments['minute'] || fragments['second']) {\n components.assign('hour', date.hour());\n components.assign('minute', date.minute());\n components.assign('second', date.second());\n }\n\n if (fragments['d'] || fragments['month'] || fragments['year']) {\n components.assign('day', date.date());\n components.assign('month', date.month() + 1);\n components.assign('year', date.year());\n } else {\n if (fragments['week']) {\n components.imply('weekday', date.day());\n }\n\n components.imply('day', date.date());\n components.imply('month', date.month() + 1);\n components.imply('year', date.year());\n }\n\n return components;\n }\n}\n\nexport class ParsingResult implements ParsedResult {\n\n refDate: Date;\n index: number;\n text: string;\n\n start: ParsingComponents;\n end?: ParsingComponents;\n\n constructor(\n refDate: Date,\n index: number,\n text: string,\n start?: ParsingComponents,\n end?: ParsingComponents,\n ) {\n this.refDate = refDate;\n this.index = index;\n this.text = text;\n this.start = start || new ParsingComponents(this.refDate);\n this.end = end;\n }\n\n clone() {\n const result = new ParsingResult(this.refDate, this.index, this.text);\n result.start = this.start ? this.start.clone() : null;\n result.end = this.end ? this.end.clone() : null;\n return result\n }\n\n date(): Date {\n return this.start.date();\n }\n\n toString() {\n return `[ParsingResult {index: ${this.index}, text: '${this.text}', ...}]`;\n }\n}","import {TIME_UNITS_PATTERN, parseTimeUnits} from '../constants';\nimport {Parser, ParsingContext} from \"../../../chrono\";\nimport {ParsingComponents} from \"../../../results\";\n\nconst PATTERN = new RegExp(\n `(?:within|in)\\\\s*` +\n '(' + TIME_UNITS_PATTERN + ')' +\n `(?=\\\\W|$)`, 'i'\n);\n\nconst STRICT_PATTERN = new RegExp(\n `(?:within|in)\\\\s*` +\n '(' + TIME_UNITS_PATTERN + ')' +\n `(?=\\\\W|$)`, 'i'\n);\n\nexport default class ENTimeUnitDeadlineFormatParser implements Parser {\n constructor(private strictMode: boolean) {}\n\n pattern(): RegExp {\n return this.strictMode ? STRICT_PATTERN : PATTERN;\n }\n\n extract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents {\n const timeUnits = parseTimeUnits(match[1]);\n return ParsingComponents.createRelativeFromRefDate(context.refDate, timeUnits);\n }\n}\n","import dayjs from \"dayjs\";\n\n\nexport function findYearClosestToRef(refDate: Date, day: number, month: number) : number {\n\n //Find the most appropriated year\n const refMoment = dayjs(refDate);\n let dateMoment = refMoment;\n dateMoment = dateMoment.month(month - 1);\n dateMoment = dateMoment.date(day);\n dateMoment = dateMoment.year(refMoment.year())\n\n const nextYear = dateMoment.add(1, 'y');\n const lastYear = dateMoment.add(-1, 'y');\n if( Math.abs(nextYear.diff(refMoment)) < Math.abs(dateMoment.diff(refMoment)) ){\n dateMoment = nextYear;\n }\n else if( Math.abs(lastYear.diff(refMoment)) < Math.abs(dateMoment.diff(refMoment)) ){\n dateMoment = lastYear;\n }\n\n return dateMoment.year();\n}\n","import {Parser, ParsingContext} from \"../../../chrono\";\nimport {ParsingResult} from \"../../../results\";\nimport {findYearClosestToRef} from \"../../../calculation/yearCalculation\";\nimport {MONTH_DICTIONARY, WEEKDAY_DICTIONARY,} from \"../constants\";\nimport {YEAR_PATTERN, parseYear} from \"../constants\";\nimport {ORDINAL_NUMBER_PATTERN, parseOrdinalNumberPattern} from \"../constants\";\nimport {matchAnyPattern} from \"../../../utils/pattern\";\n\n\nconst PATTERN = new RegExp(\n '(?:on\\\\s*?)?' +\n `(?:(${matchAnyPattern(WEEKDAY_DICTIONARY)})\\\\s*,?\\\\s*)?` +\n `(${ORDINAL_NUMBER_PATTERN})` +\n '(?:\\\\s*' +\n '(?:to|\\\\-|\\\\–|until|through|till|\\\\s)\\\\s*' +\n `(${ORDINAL_NUMBER_PATTERN})` +\n ')?' + \n '(?:-|/|\\\\s*(?:of)?\\\\s*)' +\n '(' + matchAnyPattern(MONTH_DICTIONARY) + ')' +\n '(?:' +\n '(?:-|/|,?\\\\s*)' +\n `(${YEAR_PATTERN}(?![^\\\\s]\\\\d))` +\n ')?' +\n '(?=\\\\W|$)', 'i'\n );\n\nconst WEEKDAY_GROUP = 1;\nconst DATE_GROUP = 2;\nconst DATE_TO_GROUP = 3;\nconst MONTH_NAME_GROUP = 4;\nconst YEAR_GROUP = 5;\n\nexport default class ENMonthNameLittleEndianParser implements Parser {\n\n pattern(): RegExp {\n return PATTERN;\n }\n\n extract(context: ParsingContext, match: RegExpMatchArray): ParsingResult {\n //console.log(match)\n\n const result = context.createParsingResult(match.index, match[0]);\n\n const month = MONTH_DICTIONARY[match[MONTH_NAME_GROUP].toLowerCase()];\n const day = parseOrdinalNumberPattern(match[DATE_GROUP]);\n\n result.start.assign('month', month);\n result.start.assign('day', day);\n\n if (match[WEEKDAY_GROUP]) {\n const weekday = WEEKDAY_DICTIONARY[match[WEEKDAY_GROUP].toLowerCase()]\n result.start.assign('weekday', weekday);\n }\n\n if (match[YEAR_GROUP]) {\n const yearNumber = parseYear(match[YEAR_GROUP])\n result.start.assign('year', yearNumber)\n } else {\n const year = findYearClosestToRef(context.refDate, day, month);\n result.start.imply('year', year)\n }\n\n if (match[DATE_TO_GROUP]) {\n const endDate = parseOrdinalNumberPattern(match[DATE_TO_GROUP]);\n\n result.end = result.start.clone();\n result.end.assign('day', endDate);\n }\n\n return result;\n }\n}\n","import {Parser, ParsingContext} from \"../../../chrono\";\nimport {findYearClosestToRef} from \"../../../calculation/yearCalculation\";\nimport {MONTH_DICTIONARY, WEEKDAY_DICTIONARY} from \"../constants\";\nimport {ORDINAL_NUMBER_PATTERN, parseOrdinalNumberPattern} from \"../constants\";\nimport {YEAR_PATTERN, parseYear} from \"../constants\";\nimport {matchAnyPattern} from \"../../../utils/pattern\";\n\nconst PATTERN = new RegExp(\n '(?:' +\n '(?:on\\\\s*?)?' +\n `(${matchAnyPattern(WEEKDAY_DICTIONARY)})` +\n '\\\\s*,?\\\\s*)?' +\n `(${matchAnyPattern(MONTH_DICTIONARY)})` +\n '(?:-|/|\\\\s*,?\\\\s*)' +\n `(${ORDINAL_NUMBER_PATTERN})(?!\\\\s*(?:am|pm))\\\\s*`+\n '(?:' +\n '(?:to|\\\\-)\\\\s*' +\n `(${ORDINAL_NUMBER_PATTERN})\\\\s*` +\n ')?' +\n '(?:' +\n '(?:-|/|\\\\s*,?\\\\s*)' +\n `(${YEAR_PATTERN})` +\n ')?' +\n '(?=\\\\W|$)(?!\\\\:\\\\d)', 'i');\n\nconst WEEKDAY_GROUP = 1;\nconst MONTH_NAME_GROUP = 2;\nconst DATE_GROUP = 3;\nconst DATE_TO_GROUP = 4;\nconst YEAR_GROUP = 5;\n\n/**\n * The parser for parsing US's date format that begin with month's name.\n * - January 13\n * - January 13, 2012\n * - January 13 - 15, 2012\n * - Tuesday, January 13, 2012\n * Note: Watch out for:\n * - January 12:00\n * - January 12.44\n * - January 1222344\n */\nexport default class ENMonthNameMiddleEndianParser implements Parser {\n\n pattern(): RegExp {\n return PATTERN;\n }\n\n extract(context: ParsingContext, match: RegExpMatchArray) {\n\n const month = MONTH_DICTIONARY[match[MONTH_NAME_GROUP].toLowerCase()];\n const day = parseOrdinalNumberPattern(match[DATE_GROUP]);\n\n const components = context.createParsingComponents({\n 'day': day, 'month': month\n });\n\n if (match[YEAR_GROUP]) {\n const year = parseYear(match[YEAR_GROUP])\n components.assign('year', year)\n } else {\n const year = findYearClosestToRef(context.refDate, day, month)\n components.imply('year', year)\n }\n\n // Weekday component\n if (match[WEEKDAY_GROUP]) {\n const weekday = WEEKDAY_DICTIONARY[match[WEEKDAY_GROUP].toLowerCase()]\n components.assign('weekday', weekday);\n }\n\n if (!match[DATE_TO_GROUP]) {\n return components\n }\n\n // Text can be 'range' value. Such as 'January 12 - 13, 2012'\n const endDate = parseOrdinalNumberPattern(match[DATE_TO_GROUP]);\n const result = context.createParsingResult(match.index, match[0])\n result.start = components;\n result.end = components.clone();\n result.end.assign('day', endDate);\n\n return result;\n }\n\n}","import {MONTH_DICTIONARY} from \"../constants\";\nimport {Parser, ParsingContext} from \"../../../chrono\";\nimport {findYearClosestToRef} from \"../../../calculation/yearCalculation\";\nimport {matchAnyPattern} from \"../../../utils/pattern\";\nimport {YEAR_PATTERN, parseYear} from \"../constants\";\n\nconst PATTERN = new RegExp(\n `(${matchAnyPattern(MONTH_DICTIONARY)})` +\n '\\\\s*' +\n '(?:' +\n `[,-]?\\\\s*(${YEAR_PATTERN})?` +\n ')?' +\n '(?=[^\\\\s\\\\w]|\\\\s+[^0-9]|\\\\s+$|$)', 'i');\n\nconst MONTH_NAME_GROUP = 1;\nconst YEAR_GROUP = 2;\n\n/**\n * The parser for parsing month name and year.\n * - January, 2012\n * - January 2012\n * - January\n */\nexport default class ENMonthNameParser implements Parser {\n\n pattern(): RegExp {return PATTERN; }\n\n extract(context: ParsingContext, match: RegExpMatchArray) {\n\n if (match[0].length <= 3) {\n return null;\n }\n\n const components = context.createParsingComponents()\n components.imply('day', 1);\n\n const monthName = match[MONTH_NAME_GROUP];\n const month = MONTH_DICTIONARY[monthName.toLowerCase()];\n components.assign('month', month);\n\n if (match[YEAR_GROUP]) {\n const year = parseYear(match[YEAR_GROUP]);\n components.assign('year', year)\n } else {\n const year = findYearClosestToRef(context.refDate, 1, month)\n components.imply('year', year)\n }\n\n return components;\n }\n}\n","import {Parser, ParsingContext} from \"../../../chrono\";\nimport {ParsingResult} from \"../../../results\";\nimport dayjs from \"dayjs\";\nimport {parseYear} from \"../constants\";\nimport {findYearClosestToRef} from \"../../../calculation/yearCalculation\";\n\n\nconst PATTERN = new RegExp('(\\\\W|^)' +\n '(?:' +\n '(?:on\\\\s*?)?' +\n '((?:sun|mon|tues?|wed(?:nes)?|thu(?:rs?)?|fri|sat(?:ur)?)(?:day)?)' +\n '\\\\s*\\\\,?\\\\s*' +\n ')?' +\n '([0-3]{0,1}[0-9]{1})[\\\\/\\\\.\\\\-]([0-3]{0,1}[0-9]{1})' +\n '(?:' +\n '[\\\\/\\\\.\\\\-]' +\n '([0-9]{4}\\\\s*\\\\,?\\\\s*|[0-9]{2}\\\\s*\\\\,?\\\\s*)' +\n ')?' +\n '(\\\\W|$)', 'i');\n\nconst DAYS_OFFSET = { 'sunday': 0, 'sun': 0, 'monday': 1, 'mon': 1,'tuesday': 2, 'wednesday': 3, 'wed': 3,\n 'thursday': 4, 'thur': 4,'friday': 5, 'fri': 5,'saturday': 6, 'sat': 6,}\n\n\nconst OPENING_GROUP = 1;\nconst ENDING_GROUP = 6;\n\nconst WEEKDAY_GROUP = 2;\n\nconst FIRST_NUMBERS_GROUP = 3;\nconst SECOND_NUMBERS_GROUP = 4;\n\nconst YEAR_GROUP = 5;\n\nexport default class ENSlashDateFormatParser implements Parser {\n groupNumberMonth: number;\n groupNumberDay: number;\n\n constructor(littleEndian: boolean) {\n this.groupNumberMonth = littleEndian ? SECOND_NUMBERS_GROUP : FIRST_NUMBERS_GROUP;\n this.groupNumberDay = littleEndian ? FIRST_NUMBERS_GROUP : SECOND_NUMBERS_GROUP;\n }\n\n pattern(): RegExp {\n return PATTERN;\n }\n\n extract(context: ParsingContext, match: RegExpMatchArray): ParsingResult {\n\n if(match[OPENING_GROUP] == '/' || match[ENDING_GROUP] == '/') {\n // Long skip, if there is some overlapping like:\n // XX[/YY/ZZ]\n // [XX/YY/]ZZ\n match.index += match[0].length\n return;\n }\n\n const index = match.index + match[OPENING_GROUP].length;\n const text = match[0].substr(match[OPENING_GROUP].length, match[0].length - match[ENDING_GROUP].length);\n\n // '1.12', '1.12.12' is more like a version numbers\n if(text.match(/^\\d\\.\\d$/) || text.match(/^\\d\\.\\d{1,2}\\.\\d{1,2}\\s*$/)) {\n return;\n }\n\n // MM/dd -> OK\n // MM.dd -> NG\n if(!match[YEAR_GROUP] && match[0].indexOf('/') < 0) {\n return;\n }\n\n const result = context.createParsingResult(index, text);\n let month = parseInt(match[this.groupNumberMonth]);\n let day = parseInt(match[this.groupNumberDay]);\n\n if(month < 1 || month > 12) {\n if(month > 12) {\n if (day >= 1 && day <= 12 && month <= 31) {\n [day, month] = [month, day]\n } else {\n return null;\n }\n }\n }\n\n if (day < 1 || day > 31) {\n return null;\n }\n\n result.start.assign('day', day);\n result.start.assign('month', month);\n\n if (match[YEAR_GROUP]) {\n const year = parseYear(match[YEAR_GROUP]) || dayjs(context.refDate).year();\n result.start.assign('year', year);\n } else {\n const year = findYearClosestToRef(context.refDate, day, month);\n result.start.imply('year', year);\n }\n\n //Day of week\n if(match[WEEKDAY_GROUP]) {\n result.start.assign('weekday', DAYS_OFFSET[match[WEEKDAY_GROUP].toLowerCase()]);\n }\n\n return result;\n }\n}\n","import {Parser, ParsingContext} from \"../../../chrono\";\nimport {MONTH_DICTIONARY} from \"../constants\";\nimport {matchAnyPattern} from \"../../../utils/pattern\";\n\n/*\n Date format with slash \"/\" between numbers like ENSlashDateFormatParser,\n but this parser expect year before month and date.\n - YYYY/MM/DD\n - YYYY-MM-DD\n - YYYY.MM.DD\n*/\nconst PATTERN = new RegExp('([0-9]{4})[\\\\.\\\\/]'\n + '(?:(' + matchAnyPattern(MONTH_DICTIONARY) + ')|([0-9]{1,2}))[\\\\.\\\\/]'\n + '([0-9]{1,2})'\n + '(?=\\\\W|$)', 'i');\n\nconst YEAR_NUMBER_GROUP = 1;\nconst MONTH_NAME_GROUP = 2;\nconst MONTH_NUMBER_GROUP = 3;\nconst DATE_NUMBER_GROUP = 4;\n\nexport default class ENSlashDateFormatStartWithYearParser implements Parser {\n\n pattern(): RegExp { return PATTERN; }\n\n extract(context: ParsingContext, match: RegExpMatchArray) {\n\n const month = match[MONTH_NUMBER_GROUP] ? parseInt(match[MONTH_NUMBER_GROUP]) :\n MONTH_DICTIONARY[match[MONTH_NAME_GROUP].toLowerCase()];\n\n const year = parseInt(match[YEAR_NUMBER_GROUP]);\n const day = parseInt(match[DATE_NUMBER_GROUP]);\n\n return {\n 'day': day,\n 'month': month,\n 'year': year\n }\n }\n}\n","import {Parser, ParsingContext} from \"../../../chrono\";\nimport {ParsingComponents} from \"../../../results\";\n\nconst PATTERN = new RegExp(\n '([0-9]|0[1-9]|1[012])/([0-9]{4})' +\n '', 'i');\n\nconst MONTH_GROUP = 1;\nconst YEAR_GROUP = 2;\n\n/**\n * Month/Year date format with slash \"/\" (also \"-\" and \".\") between numbers\n * - 11/05\n * - 06/2005\n */\nexport default class ENSlashMonthFormatParser implements Parser {\n\n pattern(): RegExp {\n return PATTERN;\n }\n\n extract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents {\n\n const year = parseInt(match[YEAR_GROUP]);\n const month = parseInt(match[MONTH_GROUP]);\n\n return context.createParsingComponents()\n .imply('day', 1)\n .assign('month', month)\n .assign('year', year)\n }\n}\n","import {Parser, ParsingContext} from \"../../../chrono\";\nimport {ParsingResult} from \"../../../results\";\nimport dayjs from \"dayjs\";\nimport {Meridiem} from \"../../../index\";\n\nconst FIRST_REG_PATTERN = new RegExp(\"(^|\\\\s|T)\" +\n \"(?:(?:at|from)\\\\s*)??\" +\n \"(\\\\d{1,4}|noon|midnight)\" +\n \"(?:\" +\n \"(?:\\\\.|\\\\:|\\\\:)(\\\\d{1,2})\" +\n \"(?:\" +\n \"(?:\\\\:|\\\\:)(\\\\d{2})(?:\\\\.(\\\\d{1,6}))?\" +\n \")?\" +\n \")?\" +\n \"(?:\\\\s*(a\\\\.m\\\\.|p\\\\.m\\\\.|am?|pm?|o\\\\W*clock))?\" +\n \"(?=\\\\W|$)\", 'i');\n\nconst SECOND_REG_PATTERN = new RegExp(\"^\\\\s*\" +\n \"(\\\\-|\\\\–|\\\\~|\\\\〜|to|\\\\?)\\\\s*\" +\n \"(\\\\d{1,4})\" +\n \"(?:\" +\n \"(?:\\\\.|\\\\:|\\\\:)(\\\\d{1,2})\" +\n \"(?:\" +\n \"(?:\\\\.|\\\\:|\\\\:)(\\\\d{1,2})(?:\\\\.(\\\\d{1,6}))?\" +\n \")?\" +\n \")?\" +\n \"(?:\\\\s*(a\\\\.m\\\\.|p\\\\.m\\\\.|am?|pm?|o\\\\W*clock|at night))?\" +\n \"(?=\\\\W|$)\", 'i');\n\nconst HOUR_GROUP = 2;\nconst MINUTE_GROUP = 3;\nconst SECOND_GROUP = 4;\nconst MILLI_SECOND_GROUP = 5;\nconst AM_PM_HOUR_GROUP = 6;\n\nexport default class ENTimeExpressionParser implements Parser {\n\n pattern(): RegExp {\n return FIRST_REG_PATTERN;\n }\n\n extract(context: ParsingContext, match: RegExpMatchArray): ParsingResult {\n const refDate = dayjs(context.refDate);\n let result = context.createParsingResult(\n match.index + match[1].length, match[0].substring(match[1].length));\n\n if (result.text.match(/^\\d$/)) {\n return null;\n }\n\n result.start.imply('day', refDate.date());\n result.start.imply('month', refDate.month()+1);\n result.start.imply('year', refDate.year());\n\n result = ENTimeExpressionParser.extractStartTimeComponent(result.clone(), match)\n if (!result) {\n return null;\n }\n\n const remainingText = context.text.substring(match.index + match[0].length)\n match = SECOND_REG_PATTERN.exec(remainingText);\n if (!match) {\n return result;\n }\n\n // Pattern \"YY.YY -XXXX\" is more like timezone offset\n if (match[0].match(/^\\s*([+-])\\s*\\d{3,4}$/)) {\n return result;\n }\n\n const newResult = ENTimeExpressionParser.extractEndTimeComponent(result.clone(), match);\n return newResult ? newResult : result;\n }\n\n private static extractStartTimeComponent(result: ParsingResult, match: RegExpMatchArray) : ParsingResult | null {\n\n let hour = 0;\n let minute = 0;\n let meridiem = null;\n\n // ----- Hours\n if (match[HOUR_GROUP].toLowerCase() == \"noon\"){\n meridiem = Meridiem.PM;\n hour = 12;\n } else if (match[HOUR_GROUP].toLowerCase() == \"midnight\") {\n meridiem = Meridiem.AM;\n hour = 0;\n } else {\n hour = parseInt(match[HOUR_GROUP]);\n }\n\n // ----- Minutes\n if(match[MINUTE_GROUP] != null){\n minute = parseInt(match[MINUTE_GROUP]);\n } else if(hour > 100) {\n minute = hour%100;\n hour = Math.floor(hour/100);\n }\n\n if(minute >= 60 || hour > 24) {\n return null;\n }\n\n if (hour >= 12) {\n meridiem = Meridiem.PM;\n }\n\n // ----- AM & PM\n if(match[AM_PM_HOUR_GROUP] != null) {\n if(hour > 12) return null;\n const ampm = match[AM_PM_HOUR_GROUP][0].toLowerCase();\n if(ampm == \"a\"){\n meridiem = Meridiem.AM;\n if (hour == 12) {\n hour = 0;\n }\n }\n\n if(ampm == \"p\"){\n meridiem = Meridiem.PM;\n if (hour != 12) {\n hour += 12;\n }\n }\n }\n\n result.start.assign('hour', hour);\n result.start.assign('minute', minute);\n\n if (meridiem !== null) {\n result.start.assign('meridiem', meridiem);\n } else {\n if (hour < 12) {\n result.start.imply('meridiem', Meridiem.AM);\n } else {\n result.start.imply('meridiem', Meridiem.PM);\n }\n }\n\n // ----- Millisecond\n if(match[MILLI_SECOND_GROUP] != null) {\n const millisecond = parseInt(match[MILLI_SECOND_GROUP].substring(0, 3));\n if(millisecond >= 1000) return null;\n\n result.start.assign('millisecond', millisecond);\n }\n\n // ----- Second\n if(match[SECOND_GROUP] != null){\n const second = parseInt(match[SECOND_GROUP]);\n if(second >= 60) return null;\n\n result.start.assign('second', second);\n }\n\n return result;\n }\n\n private static extractEndTimeComponent(result: ParsingResult, match: RegExpMatchArray) : ParsingResult | null {\n\n result.end = result.start.clone();\n\n // ----- Millisecond\n if(match[MILLI_SECOND_GROUP] != null){\n const millisecond = parseInt(match[MILLI_SECOND_GROUP].substring(0, 3));\n if(millisecond >= 1000) return null;\n\n result.end.assign('millisecond', millisecond);\n }\n\n // ----- Second\n if(match[SECOND_GROUP] != null){\n const second = parseInt(match[SECOND_GROUP]);\n if(second >= 60) return null;\n\n result.end.assign('second', second);\n }\n\n\n let hour = parseInt(match[HOUR_GROUP]);\n let minute = 0;\n let meridiem = -1;\n\n // ----- Minute\n if (match[MINUTE_GROUP] != null) {\n\n minute = parseInt(match[MINUTE_GROUP]);\n\n } else if (hour > 100) {\n\n minute = hour%100;\n hour = Math.floor(hour/100);\n }\n\n if(minute >= 60 || hour > 24) {\n return null;\n }\n\n if (hour >= 12) {\n meridiem = Meridiem.PM;\n }\n\n // ----- AM & PM\n if (match[AM_PM_HOUR_GROUP] != null) {\n if (hour > 12) {\n return null;\n }\n\n const ampm = match[AM_PM_HOUR_GROUP][0].toLowerCase();\n if(ampm == \"a\"){\n meridiem = Meridiem.AM;\n if(hour == 12) {\n hour = 0;\n if (!result.end.isCertain('day')) {\n result.end.imply('day', result.end.get('day') + 1);\n }\n }\n }\n\n if(ampm == \"p\"){\n meridiem = Meridiem.PM;\n if(hour != 12) hour += 12;\n }\n\n if (!result.start.isCertain('meridiem')) {\n if (meridiem == Meridiem.AM) {\n\n result.start.imply('meridiem', Meridiem.AM);\n\n if (result.start.get('hour') == 12) {\n result.start.assign('hour', 0);\n }\n\n } else {\n\n result.start.imply('meridiem', Meridiem.PM);\n\n if (result.start.get('hour') != 12) {\n result.start.assign('hour', result.start.get('hour') + 12);\n }\n }\n }\n }\n\n result.text = result.text + match[0];\n result.end.assign('hour', hour);\n result.end.assign('minute', minute);\n\n if (meridiem >= 0) {\n result.end.assign('meridiem', meridiem);\n } else {\n const startAtPM = result.start.isCertain('meridiem') && result.start.get('meridiem') == Meridiem.PM;\n if (startAtPM && result.start.get('hour') > hour) {\n // 10pm - 1 (am)\n result.end.imply('meridiem', Meridiem.AM);\n\n } else if (hour > 12) {\n result.end.imply('meridiem', Meridiem.PM);\n }\n }\n\n if (result.end.date().getTime() < result.start.date().getTime()) {\n result.end.imply('day', result.end.get('day') + 1)\n }\n\n return result;\n }\n}\n","import {Parser, ParsingContext} from \"../../../chrono\";\nimport {\n parseTimeUnits,\n TIME_UNITS_PATTERN\n} from \"../constants\";\nimport {ParsingComponents} from \"../../../results\";\n\n\nconst PATTERN = new RegExp('' +\n '(?:within\\\\s*)?' +\n '(' + TIME_UNITS_PATTERN + ')' +\n '(?:ago|before|earlier)(?=(?:\\\\W|$))', 'i');\n\nconst STRICT_PATTERN = new RegExp('' +\n '(?<=\\\\W|^)' +\n '(?:within\\\\s*)?' +\n '(' + TIME_UNITS_PATTERN + ')' +\n 'ago(?=(?:\\\\W|$))', 'i');\n\nexport default class ENTimeUnitAgoFormatParser implements Parser {\n\n constructor(private strictMode: boolean) {}\n\n pattern(): RegExp { return this.strictMode ? STRICT_PATTERN : PATTERN; }\n\n extract(context: ParsingContext, match: RegExpMatchArray) {\n\n const fragments = parseTimeUnits(match[1]);\n for (const key in fragments) {\n fragments[key] = -fragments[key];\n }\n\n return ParsingComponents.createRelativeFromRefDate(context.refDate, fragments);\n }\n}\n","import {Parser, ParsingContext} from \"../../../chrono\";\nimport {\n parseTimeUnits,\n TIME_UNITS_PATTERN\n} from \"../constants\";\nimport {ParsingComponents} from \"../../../results\";\n\n\nconst PATTERN = new RegExp('' +\n '(' + TIME_UNITS_PATTERN + ')' +\n '(later|after|from now|henceforth|forward|out)' +\n '(?=(?:\\\\W|$))',\n'i');\n\nconst STRICT_PATTERN = new RegExp('' +\n '(' + TIME_UNITS_PATTERN + ')' +\n '(later|from now)' +\n '(?=(?:\\\\W|$))',\n'i');\n\nconst GROUP_NUM_SUFFIX = 2\nconst GROUP_NUM_TIMEUNITS = 1\n\nexport default class ENTimeUnitLaterFormatParser implements Parser {\n\n constructor(private strictMode: boolean) {}\n\n pattern(): RegExp { return this.strictMode ? STRICT_PATTERN : PATTERN; }\n\n extract(context: ParsingContext, match: RegExpMatchArray) {\n\n const suffix = match[GROUP_NUM_SUFFIX].toLowerCase().trim();\n if (!suffix) {\n return null;\n }\n\n const fragments = parseTimeUnits(match[GROUP_NUM_TIMEUNITS]);\n return ParsingComponents.createRelativeFromRefDate(context.refDate, fragments);\n }\n}\n","import {ParsingContext, Refiner} from \"../chrono\";\nimport {ParsingResult} from \"../results\";\n\nexport abstract class Filter implements Refiner {\n\n abstract isValid(context: ParsingContext, result: ParsingResult): boolean;\n\n refine(context: ParsingContext, results: ParsingResult[]): ParsingResult[] {\n return results.filter(r => this.isValid(context, r));\n }\n}\n\nexport abstract class MergingRefiner implements Refiner {\n\n abstract shouldMergeResults(textBetween: string, currentResult: ParsingResult, nextResult: ParsingResult, context: ParsingContext): boolean;\n\n abstract mergeResults(textBetween: string, currentResult: ParsingResult, nextResult: ParsingResult, context: ParsingContext): ParsingResult;\n\n refine(context: ParsingContext, results: ParsingResult[]): ParsingResult[] {\n\n if (results.length < 2) {\n return results;\n }\n\n const mergedResults: ParsingResult[] = [];\n let curResult = results[0];\n let nextResult = null;\n\n for (let i=1; i {\n console.log(`${this.constructor.name} merged ${left} and ${right} into ${mergedResult}`)\n })\n\n curResult = mergedResult;\n }\n }\n\n if (curResult != null) {\n mergedResults.push(curResult);\n }\n\n return mergedResults;\n }\n}","/*\n \n*/\n\nimport {ParsingResult} from \"../../results\";\nimport {MergingRefiner} from \"../abstractRefiners\";\n\nexport default abstract class AbstractMergeDateRangeRefiner extends MergingRefiner {\n\n abstract patternBetween(): RegExp\n\n shouldMergeResults(textBetween, currentResult, nextResult): boolean {\n return (!currentResult.end && !nextResult.end)\n && textBetween.match(this.patternBetween()) != null;\n }\n\n mergeResults(textBetween, fromResult, toResult): ParsingResult {\n\n if (!fromResult.start.isOnlyWeekdayComponent() && !toResult.start.isOnlyWeekdayComponent()) {\n\n toResult.start.getCertainComponents().forEach(key => {\n if (!fromResult.start.isCertain(key)) {\n fromResult.start.assign(key, toResult.start.get(key));\n }\n })\n\n fromResult.start.getCertainComponents().forEach(key => {\n if (!toResult.start.isCertain(key)) {\n toResult.start.assign(key, fromResult.start.get(key));\n }\n })\n }\n\n if (fromResult.start.date().getTime() > toResult.start.date().getTime()) {\n let fromMoment = fromResult.start.dayjs();\n let toMoment = toResult.start.dayjs();\n\n if (fromResult.start.isOnlyWeekdayComponent() && fromMoment.add(-7, 'days').isBefore(toMoment)) {\n fromMoment = fromMoment.add(-7, 'days');\n fromResult.start.imply('day', fromMoment.date());\n fromResult.start.imply('month', fromMoment.month() + 1);\n fromResult.start.imply('year', fromMoment.year());\n } else if (toResult.start.isOnlyWeekdayComponent() && toMoment.add(7, 'days').isAfter(fromMoment)) {\n toMoment = toMoment.add(7, 'days');\n toResult.start.imply('day', toMoment.date());\n toResult.start.imply('month', toMoment.month() + 1);\n toResult.start.imply('year', toMoment.year());\n } else {\n [toResult, fromResult] = [fromResult, toResult];\n }\n }\n\n const result = fromResult.clone();\n result.start = fromResult.start;\n result.end = toResult.start;\n result.index = Math.min(fromResult.index, toResult.index);\n if (fromResult.index < toResult.index) {\n result.text = fromResult.text + textBetween + toResult.text;\n } else {\n result.text = toResult.text + textBetween + fromResult.text;\n }\n\n return result;\n }\n}\n\n","/*\n \n*/\n\n\nimport AbstractMergeDateRangeRefiner from \"../../../common/refiners/AbstractMergeDateRangeRefiner\";\n\n/**\n * Merging before and after results (see. AbstractMergeDateRangeRefiner)\n * This implementation should provide English connecting phases\n * - 2020-02-13 [to] 2020-02-13\n * - Wednesday [-] Friday\n */\nexport default class ENMergeDateRangeRefiner extends AbstractMergeDateRangeRefiner {\n\n patternBetween(): RegExp {\n return /^\\s*(to|-)\\s*$/i;\n }\n}\n\n","import {ParsingComponents, ParsingResult} from \"../results\";\nimport {Meridiem} from \"../index\";\n\nexport function mergeDateTimeResult(\n dateResult: ParsingResult,\n timeResult: ParsingResult): ParsingResult {\n\n const result = dateResult.clone();\n const beginDate = dateResult.start;\n const beginTime = timeResult.start;\n\n result.start = mergeDateTimeComponent(beginDate, beginTime);\n if (dateResult.end != null || timeResult.end != null) {\n const endDate = dateResult.end == null ? dateResult.start : dateResult.end;\n const endTime = timeResult.end == null ? timeResult.start : timeResult.end;\n const endDateTime = mergeDateTimeComponent(endDate, endTime);\n\n if (dateResult.end == null && endDateTime.date().getTime() < result.start .date().getTime()) {\n // Ex. 9pm - 1am\n if (endDateTime.isCertain('day')) {\n endDateTime.assign('day', endDateTime.get('day') + 1);\n } else {\n endDateTime.imply('day', endDateTime.get('day') + 1);\n }\n }\n\n result.end = endDateTime;\n }\n\n return result;\n}\n\nexport function mergeDateTimeComponent(dateComponent: ParsingComponents, timeComponent: ParsingComponents): ParsingComponents {\n const dateTimeComponent = dateComponent.clone();\n\n if (timeComponent.isCertain('hour')) {\n dateTimeComponent.assign('hour', timeComponent.get('hour'));\n dateTimeComponent.assign('minute', timeComponent.get('minute'));\n\n if (timeComponent.isCertain('second')) {\n dateTimeComponent.assign('second', timeComponent.get('second'));\n\n if (timeComponent.isCertain('millisecond')) {\n dateTimeComponent.assign('millisecond', timeComponent.get('millisecond'));\n } else {\n dateTimeComponent.imply('millisecond', timeComponent.get('millisecond'));\n }\n } else {\n dateTimeComponent.imply('second', timeComponent.get('second'));\n dateTimeComponent.imply('millisecond', timeComponent.get('millisecond'));\n }\n\n } else {\n dateTimeComponent.imply('hour', timeComponent.get('hour'));\n dateTimeComponent.imply('minute', timeComponent.get('minute'));\n dateTimeComponent.imply('second', timeComponent.get('second'));\n dateTimeComponent.imply('millisecond', timeComponent.get('millisecond'));\n }\n\n if (timeComponent.isCertain('timezoneOffset')) {\n dateTimeComponent.assign('timezoneOffset', timeComponent.get('timezoneOffset'))\n }\n\n if (timeComponent.isCertain('meridiem')) {\n dateTimeComponent.assign('meridiem', timeComponent.get('meridiem'));\n } else if (\n timeComponent.get('meridiem') != null && dateTimeComponent.get('meridiem') == null\n ) {\n dateTimeComponent.imply('meridiem', timeComponent.get('meridiem'));\n }\n\n if (dateTimeComponent.get('meridiem') == Meridiem.PM && dateTimeComponent.get('hour') < 12) {\n if (timeComponent.isCertain('hour')) {\n dateTimeComponent.assign('hour', dateTimeComponent.get('hour') + 12);\n } else {\n dateTimeComponent.imply('hour', dateTimeComponent.get('hour') + 12);\n }\n }\n\n return dateTimeComponent;\n}\n\n","/*\n\n*/\n\n\nimport {MergingRefiner} from \"../abstractRefiners\";\nimport {ParsingResult} from \"../../results\";\nimport {mergeDateTimeResult} from \"../../calculation/mergingCalculation\";\n\n\nexport default abstract class ENMergeDateTimeRefiner extends MergingRefiner {\n\n abstract patternBetween(): RegExp\n\n shouldMergeResults(textBetween: string, currentResult: ParsingResult, nextResult: ParsingResult): boolean {\n return (\n (currentResult.start.isOnlyDate() && nextResult.start.isOnlyTime()) ||\n (nextResult.start.isOnlyDate() && currentResult.start.isOnlyTime())\n )\n && textBetween.match(this.patternBetween()) != null;\n }\n\n mergeResults(textBetween: string, currentResult: ParsingResult, nextResult: ParsingResult): ParsingResult {\n\n const result = currentResult.start.isOnlyDate() ?\n mergeDateTimeResult(currentResult, nextResult):\n mergeDateTimeResult(nextResult, currentResult);\n\n result.index = currentResult.index;\n result.text = currentResult.text + textBetween + nextResult.text;\n return result;\n }\n}\n\n","import AbstractMergeDateTimeRefiner from \"../../../common/refiners/AbstractMergeDateTimeRefiner\";\n\n/**\n * Merging date-only result and time-only result (see. AbstractMergeDateTimeRefiner).\n * This implementation should provide English connecting phases\n * - 2020-02-13 [at] 6pm\n * - Tomorrow [after] 7am\n */\nexport default class ENMergeDateTimeRefiner extends AbstractMergeDateTimeRefiner {\n patternBetween(): RegExp {\n return new RegExp(\"^\\\\s*(T|at|after|before|on|of|,|-)?\\\\s*$\");\n }\n}\n\n","\n// Map ABBR -> Offset in minute\nimport {ParsingContext, Refiner} from \"../../chrono\";\nimport {ParsingResult} from \"../../results\";\n\nconst TIMEZONE_NAME_PATTERN = new RegExp(\"^\\\\s*\\\\(?([A-Z]{2,4})\\\\)?(?=\\\\W|$)\", 'i');\nconst DEFAULT_TIMEZONE_ABBR_MAP = {\n \"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\n};\n\nexport default class ExtractTimezoneAbbrRefiner implements Refiner {\n\n private readonly timezone: {string: number}\n\n constructor(timezoneOverrides? : {string: number}) {\n this.timezone = {...DEFAULT_TIMEZONE_ABBR_MAP, ...timezoneOverrides};\n }\n\n refine(context: ParsingContext, results: ParsingResult[]): ParsingResult[] {\n const timezones = {...this.timezone, ...context.option.timezones};\n results.forEach((result) => {\n const suffix = context.text.substring(result.index + result.text.length)\n const match = TIMEZONE_NAME_PATTERN.exec(suffix);\n if (match) {\n const timezoneAbbr = match[1].toUpperCase();\n if (timezones[timezoneAbbr] === undefined) {\n return;\n }\n\n const timezoneOffset = timezones[timezoneAbbr];\n if (!result.start.isCertain('timezoneOffset')) {\n result.start.assign('timezoneOffset', timezoneOffset);\n }\n\n if (result.end != null && !result.end.isCertain('timezoneOffset')) {\n result.end.assign('timezoneOffset', timezoneOffset);\n }\n\n result.text += match[0];\n }\n });\n\n return results;\n }\n}","/*\n \n*/\n\n\nimport {ParsingContext, Refiner} from \"../../chrono\";\nimport {ParsingResult} from \"../../results\";\n\nconst TIMEZONE_OFFSET_PATTERN = new RegExp(\"^\\\\s*(GMT|UTC)?([+-])(\\\\d{1,2}):?(\\\\d{2})\", 'i');\nconst TIMEZONE_OFFSET_SIGN_GROUP = 2;\nconst TIMEZONE_OFFSET_HOUR_OFFSET_GROUP = 3;\nconst TIMEZONE_OFFSET_MINUTE_OFFSET_GROUP = 4;\n\nexport default class ExtractTimezoneOffsetRefiner implements Refiner {\n\n refine(context: ParsingContext, results: ParsingResult[]): ParsingResult[] {\n\n results.forEach(function(result) {\n if (result.start.isCertain('timezoneOffset')) {\n return;\n }\n\n const suffix = context.text.substring(result.index + result.text.length);\n const match = TIMEZONE_OFFSET_PATTERN.exec(suffix);\n if (!match) {\n return;\n }\n\n context.debug(() => {\n console.log(`Extracting timezone: '${match[0]}' into : ${result}`)\n })\n\n const hourOffset = parseInt(match[TIMEZONE_OFFSET_HOUR_OFFSET_GROUP]);\n const minuteOffset = parseInt(match[TIMEZONE_OFFSET_MINUTE_OFFSET_GROUP]);\n let timezoneOffset = hourOffset * 60 + minuteOffset;\n if (match[TIMEZONE_OFFSET_SIGN_GROUP] === '-') {\n timezoneOffset = -timezoneOffset;\n }\n\n if (result.end != null) {\n result.end.assign('timezoneOffset', timezoneOffset);\n }\n\n result.start.assign('timezoneOffset', timezoneOffset);\n result.text += match[0];\n });\n\n return results;\n }\n}\n","/*\n \n*/\n\nimport {ParsingContext, Refiner} from \"../../chrono\";\nimport {ParsingResult} from \"../../results\";\n\nexport default class OverlapRemovalRefiner implements Refiner {\n\n refine(context: ParsingContext, results: ParsingResult[]): ParsingResult[] {\n if (results.length < 2) {\n return results;\n }\n \n const filteredResults = [];\n\n let prevResult = results[0];\n for (let i=1; i prevResult.text.length){\n prevResult = result;\n }\n \n } else {\n filteredResults.push(prevResult);\n prevResult = result;\n }\n }\n \n // The last one\n if (prevResult != null) {\n filteredResults.push(prevResult);\n }\n\n return filteredResults;\n }\n}","/*\n Enforce 'forwardDate' option to on the results. When there are missing component,\n e.g. \"March 12-13 (without year)\" or \"Thursday\", the refiner will try to adjust the result\n into the future instead of the past.\n*/\n\nimport {ParsingContext, Refiner} from \"../../chrono\";\nimport {ParsingResult} from \"../../results\";\nimport dayjs from \"dayjs\";\n\nexport default class ForwardDateRefiner implements Refiner {\n\n refine(context: ParsingContext, results: ParsingResult[]): ParsingResult[] {\n\n if (!context.option.forwardDate) {\n return results;\n }\n\n results.forEach(function(result) {\n let refMoment = dayjs(context.refDate);\n\n if (result.start.isOnlyDayMonthComponent() && refMoment.isAfter(result.start.dayjs())) {\n\n for (let i=0; i < 3 && refMoment.isAfter(result.start.dayjs()); i++) {\n result.start.imply('year', result.start.get('year') + 1);\n context.debug(() => {\n console.log(`Forward yearly adjusted for ${result} (${result.start})`)\n });\n\n if (result.end && !result.end.isCertain('year')) {\n result.end.imply('year', result.end.get('year') + 1);\n context.debug(() => {\n console.log(`Forward yearly adjusted for ${result} (${result.end})`)\n });\n }\n }\n }\n\n if (result.start.isOnlyWeekdayComponent() && refMoment.isAfter(result.start.dayjs())) {\n\n if (refMoment.day() > result.start.get('weekday')) {\n refMoment = refMoment.day(result.start.get('weekday') + 7);\n } else {\n refMoment = refMoment.day(result.start.get('weekday'));\n }\n\n result.start.imply('day', refMoment.date());\n result.start.imply('month', refMoment.month() + 1);\n result.start.imply('year', refMoment.year());\n context.debug(() => {\n console.log(`Forward weekly adjusted for ${result} (${result.start})`)\n });\n\n if (result.end && result.end.isOnlyWeekdayComponent()) {\n // Adjust date to the coming week\n if (refMoment.day() > result.end.get('weekday')) {\n refMoment = refMoment.day(result.end.get('weekday') + 7);\n } else {\n refMoment = refMoment.day(result.end.get('weekday'));\n }\n\n result.end.imply('day', refMoment.date());\n result.end.imply('month', refMoment.month() + 1);\n result.end.imply('year', refMoment.year());\n context.debug(() => {\n console.log(`Forward weekly adjusted for ${result} (${result.end})`)\n });\n }\n }\n });\n\n return results;\n }\n}\n","import {Filter} from \"../abstractRefiners\";\nimport {ParsingResult} from \"../../results\";\n\nexport default class UnlikelyFormatFilter extends Filter {\n\n isValid(context, result: ParsingResult): boolean {\n\n if (result.text.replace(' ','').match(/^\\d*(\\.\\d*)?$/)) {\n context.debug(() => {\n console.log(`Removing unlikely result '${result.text}'`)\n })\n\n return false;\n }\n\n if (!result.start.isValidDate()) {\n context.debug(() => {\n console.log(`Removing invalid result: ${result} (${result.start})`)\n });\n\n return false;\n }\n\n if (result.end && !result.end.isValidDate()) {\n context.debug(() => {\n console.log(`Removing invalid result: ${result} (${result.end})`)\n });\n\n return false;\n }\n\n return true;\n }\n}","import {Parser, ParsingContext} from \"../../chrono\";\nimport {Component} from \"../../index\";\n\n// ISO 8601\n// http://www.w3.org/TR/NOTE-datetime\n// - YYYY-MM-DD\n// - YYYY-MM-DDThh:mmTZD\n// - YYYY-MM-DDThh:mm:ssTZD\n// - YYYY-MM-DDThh:mm:ss.sTZD\n// - TZD = (Z or +hh:mm or -hh:mm)\nconst PATTERN = new RegExp(\n '([0-9]{4})\\\\-([0-9]{1,2})\\\\-([0-9]{1,2})'\n + '(?:T' //..\n + '([0-9]{1,2}):([0-9]{1,2})' // hh:mm\n + '(?::([0-9]{1,2})(?:\\\\.(\\\\d{1,4}))?)?' // :ss.s\n + '(?:Z|([+-]\\\\d{2}):?(\\\\d{2})?)?' // TZD (Z or ±hh:mm or ±hhmm or ±hh)\n + ')?' //..\n + '(?=\\\\W|$)', 'i');\n\nconst YEAR_NUMBER_GROUP = 1;\nconst MONTH_NUMBER_GROUP = 2;\nconst DATE_NUMBER_GROUP = 3;\nconst HOUR_NUMBER_GROUP = 4;\nconst MINUTE_NUMBER_GROUP = 5;\nconst SECOND_NUMBER_GROUP = 6;\nconst MILLISECOND_NUMBER_GROUP = 7;\nconst TZD_HOUR_OFFSET_GROUP = 8;\nconst TZD_MINUTE_OFFSET_GROUP = 9;\n\nexport default class ISOFormatParser implements Parser {\n\n pattern(): RegExp {\n return PATTERN;\n }\n\n extract(context: ParsingContext, match: RegExpMatchArray) : {[component: Component]: string | number}{\n const components: {[component: Component]: string | number} = {}\n components['year'] = parseInt(match[YEAR_NUMBER_GROUP])\n components['month'] = parseInt(match[MONTH_NUMBER_GROUP])\n components['day'] = parseInt(match[DATE_NUMBER_GROUP])\n\n if (match[HOUR_NUMBER_GROUP] != null) {\n components['hour'] = parseInt(match[HOUR_NUMBER_GROUP]);\n components['minute'] = parseInt(match[MINUTE_NUMBER_GROUP]);\n\n if (match[SECOND_NUMBER_GROUP] != null) {\n components['second'] = parseInt(match[SECOND_NUMBER_GROUP]);\n }\n\n if (match[MILLISECOND_NUMBER_GROUP] != null) {\n components['millisecond'] = parseInt(match[MILLISECOND_NUMBER_GROUP]);\n }\n\n if (match[TZD_HOUR_OFFSET_GROUP] == null) {\n components['timezoneOffset'] = 0;\n\n } else {\n const hourOffset = parseInt(match[TZD_HOUR_OFFSET_GROUP]);\n\n let minuteOffset = 0;\n if (match[TZD_MINUTE_OFFSET_GROUP] != null) {\n minuteOffset = parseInt(match[TZD_MINUTE_OFFSET_GROUP]);\n }\n\n let offset = hourOffset * 60;\n if (offset < 0) {\n offset -= minuteOffset;\n } else {\n offset += minuteOffset;\n }\n\n components['timezoneOffset'] = offset;\n }\n }\n\n return components;\n }\n}\n\n","import {Parser, ParsingContext} from \"../chrono\";\n\nexport function createParserWithWordBoundaryDetection(parser: Parser) : ParserWithWordEndingDetection {\n return new ParserWithWordEndingDetection(parser)\n}\n\nexport class ParserWithWordEndingDetection implements Parser {\n\n private original: Parser;\n\n constructor(parser: Parser) {\n this.original = parser;\n }\n\n pattern(context: ParsingContext): RegExp {\n const originalPattern = this.original.pattern(context);\n return new RegExp(`(\\\\W|^)${originalPattern.source}`, originalPattern.flags);\n }\n\n extract(context: ParsingContext, match: RegExpMatchArray) {\n\n const header = match[1]\n match.index = match.index + header.length\n match[0] = match[0].substring(header.length)\n for (let i=2; i 1) {\n targetDate = targetDate.add(1, 'day');\n }\n\n } else if (/^yesterday/.test(lowerText)) {\n\n targetDate = targetDate.add(-1, 'day');\n\n } else if(lowerText.match(/last\\s*night/)) {\n\n component.imply('hour', 0);\n if (targetDate.hour() > 6) {\n targetDate = targetDate.add(-1, 'day');\n }\n\n } else if (lowerText.match(\"now\")) {\n component.assign('hour', targetDate.hour());\n component.assign('minute', targetDate.minute());\n component.assign('second', targetDate.second());\n component.assign('millisecond', targetDate.millisecond());\n }\n\n component.assign('day', targetDate.date())\n component.assign('month', targetDate.month() + 1)\n component.assign('year', targetDate.year())\n return component;\n }\n}","import {Parser, ParsingContext} from \"../../../chrono\";\nimport {Meridiem} from \"../../../index\";\n\nexport default class ENCasualTimeParser implements Parser {\n\n pattern() { return /(?:this)?\\s*(morning|afternoon|evening|night|noon)(?=\\W|$)/i; }\n\n extract(context: ParsingContext, match: RegExpMatchArray) {\n const component = context.createParsingComponents()\n switch (match[1].toLowerCase()) {\n\n case 'afternoon':\n component.imply('meridiem', Meridiem.PM);\n component.imply('hour', 15);\n break;\n\n case 'evening':\n case 'night':\n component.imply('meridiem', Meridiem.PM);\n component.imply('hour', 20);\n break;\n\n case 'morning':\n component.imply('meridiem', Meridiem.AM);\n component.imply('hour', 6);\n break;\n\n case 'noon':\n component.imply('meridiem', Meridiem.AM);\n component.imply('hour', 12);\n break;\n }\n\n return component;\n }\n}\n","import {Parser, ParsingContext} from \"../../../chrono\";\nimport {ParsingComponents} from \"../../../results\";\nimport {WEEKDAY_DICTIONARY} from \"../constants\";\nimport dayjs, {Dayjs} from \"dayjs\";\nimport {matchAnyPattern} from \"../../../utils/pattern\";\n\nconst PATTERN = new RegExp(\n '(?:(?:\\\\,|\\\\(|\\\\()\\\\s*)?' +\n '(?:on\\\\s*?)?' +\n '(?:(this|last|past|next)\\\\s*)?' +\n `(${matchAnyPattern(WEEKDAY_DICTIONARY)})` +\n '(?:\\\\s*(?:\\\\,|\\\\)|\\\\)))?' +\n '(?:\\\\s*(this|last|past|next)\\\\s*week)?' +\n '(?=\\\\W|$)', 'i');\n\nconst PREFIX_GROUP = 1;\nconst WEEKDAY_GROUP = 2;\nconst POSTFIX_GROUP = 3;\n\nexport default class ENWeekdayParser implements Parser {\n\n pattern(): RegExp {\n return PATTERN;\n }\n\n extract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents {\n\n const dayOfWeek = match[WEEKDAY_GROUP].toLowerCase();\n const offset = WEEKDAY_DICTIONARY[dayOfWeek];\n if (offset === undefined) {\n return null;\n }\n\n const prefix = match[PREFIX_GROUP];\n const postfix = match[POSTFIX_GROUP];\n let modifier = prefix || postfix;\n modifier = modifier || '';\n modifier = modifier.toLowerCase();\n\n const date = this.extractWeekday(context.refDate, offset, modifier);\n return context.createParsingComponents()\n .assign('weekday', offset)\n .imply('day', date.date())\n .imply('month', date.month() + 1)\n .imply('year', date.year());\n }\n\n private extractWeekday(refDate: Date, offset, modifier?: string) : Dayjs {\n let date = dayjs(refDate);\n const refOffset = date.day();\n\n if(modifier == 'last' || modifier == 'past') {\n date = date.day(offset - 7);\n } else if(modifier == 'next') {\n date = date.day(offset + 7);\n } else if(modifier == 'this') {\n date = date.day(offset);\n } else {\n if (Math.abs(offset - 7 - refOffset) < Math.abs(offset - refOffset)) {\n date = date.day(offset - 7);\n } else if (Math.abs(offset + 7 - refOffset) < Math.abs(offset - refOffset)) {\n date = date.day(offset + 7);\n } else {\n date = date.day(offset);\n }\n }\n\n return date;\n }\n}\n","import {NUMBER_PATTERN, parseNumberPattern} from \"../constants\";\nimport {Parser, ParsingContext} from \"../../../chrono\";\nimport {ParsingComponents} from \"../../../results\";\nimport dayjs from \"dayjs\";\n\n\nconst PATTERN = new RegExp(\n '(this|next|last|past)\\\\s*' +\n `(${NUMBER_PATTERN})?\\\\s*` +\n '(seconds?|min(?:ute)?s?|hours?|days?|weeks?|months?|years?)(?=\\\\s*)' +\n '(?=\\\\W|$)', 'i'\n);\n\nconst MODIFIER_WORD_GROUP = 1;\nconst MULTIPLIER_WORD_GROUP = 2;\nconst RELATIVE_WORD_GROUP = 3;\n\nexport default class ENRelativeDateFormatParser implements Parser {\n\n pattern(): RegExp {return PATTERN; }\n extract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents {\n if (match[MODIFIER_WORD_GROUP].toLowerCase().match(/^this/)) {\n if (match[MULTIPLIER_WORD_GROUP]) {\n return null;\n }\n\n return this.extractThisReference(context, match[RELATIVE_WORD_GROUP]);\n }\n\n const modifier = match[MODIFIER_WORD_GROUP].toLowerCase().match(/^next/) ? 1 : -1;\n const parsedNum = match[MULTIPLIER_WORD_GROUP] ? parseNumberPattern(match[MULTIPLIER_WORD_GROUP]) : 1;\n const unitWord = match[RELATIVE_WORD_GROUP].toLowerCase()\n\n if (unitWord.match(/day|week|month|year/i)) {\n return this.extractDateReference(context, unitWord, parsedNum * modifier);\n } else {\n return this.extractTimeReference(context, unitWord, parsedNum * modifier)\n }\n }\n\n extractTimeReference(context: ParsingContext, timeUnitWord: string, num: number) {\n const components = context.createParsingComponents()\n let date = dayjs(context.refDate);\n\n if (timeUnitWord.match(/hour/i)) {\n\n date = date.add(num, 'hour');\n components.imply('minute', date.minute());\n components.imply('second', date.second());\n\n } else if (timeUnitWord.match(/min/i)) {\n\n date = date.add(num, 'minute');\n components.assign('minute', date.minute());\n components.imply('second', date.second());\n\n } else if (timeUnitWord.match(/second/i)) {\n\n date = date.add(num, 'second');\n components.assign('second', date.second());\n components.assign('minute', date.minute());\n }\n\n components.assign('hour', date.hour());\n components.assign('year', date.year());\n components.assign('month', date.month() + 1);\n components.assign('day', date.date());\n\n return components;\n }\n\n extractDateReference(context: ParsingContext, dateUnitWord: string, num: number) {\n const components = context.createParsingComponents()\n let date = dayjs(context.refDate);\n\n if (dateUnitWord.match(/day/i)) {\n date = date.add(num, 'd');\n components.assign('year', date.year());\n components.assign('month', date.month() + 1);\n components.assign('day', date.date());\n } else if (dateUnitWord.match(/week/i)) {\n date = date.add(num * 7, 'd');\n // We don't know the exact date for next/last week so we imply them\n components.imply('day', date.date());\n components.imply('month', date.month() + 1);\n components.imply('year', date.year());\n } else if (dateUnitWord.match(/month/i)) {\n date = date.add(num, 'month');\n // We don't know the exact day for next/last month\n components.imply('day', date.date());\n components.assign('year', date.year());\n components.assign('month', date.month() + 1);\n } else if (dateUnitWord.match(/year/i)) {\n date = date.add(num, 'year');\n // We don't know the exact day for month on next/last year\n components.imply('day', date.date());\n components.imply('month', date.month() + 1);\n components.assign('year', date.year());\n }\n\n return components;\n }\n\n extractThisReference(context: ParsingContext, relativeWord: string) {\n const components = context.createParsingComponents()\n let date = dayjs(context.refDate);\n\n // This week\n if (relativeWord.match(/week/i)) {\n date = date.add(-date.get('d'), 'd');\n components.imply('day', date.date());\n components.imply('month', date.month() + 1);\n components.imply('year', date.year());\n }\n\n // This month\n else if (relativeWord.match(/month/i)) {\n date = date.add(-date.date() + 1, 'd');\n components.imply('day', date.date());\n components.assign('year', date.year());\n components.assign('month', date.month() + 1);\n }\n\n // This year\n else if (relativeWord.match(/year/i)) {\n date = date.add(-date.date() + 1, 'd');\n date = date.add(-date.month(), 'month');\n\n components.imply('day', date.date());\n components.imply('month', date.month() + 1);\n components.assign('year', date.year());\n }\n\n return components;\n }\n}\n","import {ParsingComponents, ParsingResult} from \"./results\";\nimport {Component, ParsedResult, ParsingOption} from \"./index\";\nimport {AsyncDebugBlock, DebugHandler} from \"./debugging\";\nimport {createCasualConfiguration} from './locales/en';\n\nexport interface Configuration {\n parsers: Parser[],\n refiners: Refiner[]\n}\n\nexport interface Parser {\n pattern: (context: ParsingContext) => RegExp,\n extract: (context: ParsingContext, match: RegExpMatchArray) =>\n (ParsingComponents | ParsingResult | {[c: Component]: string|number} | null)\n}\n\nexport interface Refiner {\n refine: (context: ParsingContext, results: ParsingResult[]) => ParsingResult[]\n}\n\nexport class Chrono {\n parsers: Array\n refiners: Array\n\n constructor(configuration?: Configuration) {\n configuration = configuration || createCasualConfiguration();\n this.parsers = [...configuration.parsers];\n this.refiners = [...configuration.refiners];\n }\n\n parseDate(text, refDate, opt): Date {\n const results = this.parse(text, refDate, opt);\n return (results.length > 0) ? results[0].start.date() : null;\n }\n\n parse(text: string, refDate?: Date, opt?: ParsingOption): ParsedResult[] {\n const context = new ParsingContext(text,\n refDate || new Date(),\n opt || {})\n\n let results = [];\n this.parsers.forEach((parser) => {\n const parsedResults = Chrono.executeParser(context, parser);\n results = results.concat(parsedResults);\n });\n\n results.sort((a, b) => {\n return a.index - b.index;\n });\n\n this.refiners.forEach(function (refiner) {\n results = refiner.refine(context, results);\n });\n\n return results;\n }\n\n clone() : Chrono{\n return new Chrono({\n parsers: [...this.parsers],\n refiners: [...this.refiners]\n })\n }\n\n private static executeParser(context: ParsingContext, parser: Parser) {\n const results = [];\n const pattern = parser.pattern(context);\n\n const originalText = context.text;\n let remainingText = context.text;\n let match = pattern.exec(remainingText);\n\n while (match) {\n\n // Calculate match index on the full text;\n const index = match.index + originalText.length - remainingText.length\n match.index = index;\n\n const result = parser.extract(context, match);\n if (!result) {\n // If fail, move on by 1\n remainingText = originalText.substring(index + 1);\n match = pattern.exec(remainingText);\n continue;\n }\n\n let parsedResult: ParsingResult = null;\n if (result instanceof ParsingResult) {\n parsedResult = result;\n } else if (result instanceof ParsingComponents) {\n parsedResult = context.createParsingResult(match.index, match[0])\n parsedResult.start = result\n } else {\n parsedResult = context.createParsingResult(match.index, match[0], result)\n }\n\n context.debug(() =>\n console.log(`${parser.constructor.name} extracted result ${parsedResult}`))\n\n results.push(parsedResult);\n remainingText = originalText.substring(index + parsedResult.text.length);\n match = pattern.exec(remainingText);\n }\n\n return results;\n }\n}\n\nexport class ParsingContext implements DebugHandler {\n constructor(\n readonly text: string,\n readonly refDate: Date,\n readonly option: ParsingOption\n ) {}\n\n createParsingComponents(components?: {[c: Component]: string|number}) : ParsingComponents {\n return new ParsingComponents(this.refDate, components)\n }\n\n createParsingResult(\n index: number, textOrEndIndex: number | string,\n startComponents?: {[c: Component]: string|number},\n endComponents?: {[c: Component]: string|number}\n ) : ParsingResult {\n\n const text = (typeof textOrEndIndex === 'string') ? textOrEndIndex :\n this.text.substring(index, textOrEndIndex)\n\n const start = startComponents ? this.createParsingComponents(startComponents) : null\n const end = endComponents ? this.createParsingComponents(endComponents) : null\n\n return new ParsingResult(this.refDate, index, text, start, end)\n }\n\n debug(block: AsyncDebugBlock): void {\n if (this.option.debug) {\n if (this.option.debug instanceof Function) {\n this.option.debug(block)\n } else {\n const handler: DebugHandler = this.option.debug;\n handler.debug(block)\n }\n }\n }\n}\n","\n\nimport ENTimeUnitDeadlineFormatParser from \"./parsers/ENTimeUnitDeadlineFormatParser\";\nimport ENMonthNameLittleEndianParser from \"./parsers/ENMonthNameLittleEndianParser\";\nimport ENMonthNameMiddleEndianParser from \"./parsers/ENMonthNameMiddleEndianParser\";\nimport ENMonthNameParser from \"./parsers/ENMonthNameParser\";\nimport ENSlashDateFormatParser from \"./parsers/ENSlashDateFormatParser\";\nimport ENSlashDateFormatStartWithYearParser from \"./parsers/ENSlashDateFormatStartWithYearParser\";\nimport ENSlashMonthFormatParser from \"./parsers/ENSlashMonthFormatParser\";\nimport ENTimeExpressionParser from \"./parsers/ENTimeExpressionParser\";\nimport ENTimeUnitAgoFormatParser from \"./parsers/ENTimeUnitAgoFormatParser\";\nimport ENTimeUnitLaterFormatParser from \"./parsers/ENTimeUnitLaterFormatParser\";\nimport ENMergeDateRangeRefiner from \"./refiners/ENMergeDateRangeRefiner\";\nimport ENMergeDateTimeRefiner from \"./refiners/ENMergeDateTimeRefiner\";\n\nimport {includeCommonConfiguration} from \"../../configurations\";\nimport ENCasualDateParser from \"./parsers/ENCasualDateParser\";\nimport ENCasualTimeParser from \"./parsers/ENCasualTimeParser\";\nimport ENWeekdayParser from \"./parsers/ENWeekdayParser\";\nimport ENRelativeDateFormatParser from \"./parsers/ENRelativeDateFormatParser\";\n\nimport {ParsedResult, ParsingOption} from \"../../index\";\nimport {Chrono, Configuration} from \"../../chrono\";\nimport {createParserWithWordBoundaryDetection as withWordBoundary} from \"../../utils/ParserWithWordEndingDetection\";\n\n// Shortcuts\nexport const casual = new Chrono(createCasualConfiguration(false))\nexport const strict = new Chrono(createConfiguration(true, false))\n\nexport const GB = new Chrono(createConfiguration(false, true))\n\nexport function parse(text: string, ref?: Date, option?: ParsingOption): ParsedResult[] {\n return casual.parse(text, ref, option);\n}\n\nexport function parseDate(text: string, ref?: Date, option?: ParsingOption) : Date {\n return casual.parseDate(text, ref, option);\n}\n\nexport function createCasualConfiguration(littleEndian = false) : Configuration {\n const option = createConfiguration(false, littleEndian);\n option.parsers.unshift(withWordBoundary(new ENCasualDateParser()));\n option.parsers.unshift(withWordBoundary(new ENCasualTimeParser()));\n option.parsers.unshift(withWordBoundary(new ENWeekdayParser()));\n option.parsers.unshift(withWordBoundary(new ENRelativeDateFormatParser()));\n return option;\n}\n\nexport function createConfiguration(strictMode= true, littleEndian = false) : Configuration {\n return includeCommonConfiguration({\n parsers: [\n withWordBoundary(new ENTimeUnitDeadlineFormatParser(strictMode)),\n withWordBoundary(new ENMonthNameLittleEndianParser()),\n withWordBoundary(new ENMonthNameMiddleEndianParser()),\n withWordBoundary(new ENMonthNameParser()),\n new ENSlashDateFormatParser(littleEndian),\n withWordBoundary(new ENSlashDateFormatStartWithYearParser()),\n withWordBoundary(new ENSlashMonthFormatParser()),\n new ENTimeExpressionParser(),\n withWordBoundary(new ENTimeUnitAgoFormatParser(strictMode)),\n withWordBoundary(new ENTimeUnitLaterFormatParser(strictMode)),\n ],\n refiners: [\n new ENMergeDateTimeRefiner(),\n new ENMergeDateRangeRefiner()\n ]\n });\n}\n\n","/**\n * to-hankaku.js\n * convert to ascii code strings.\n *\n * @version 1.0.1\n * @author think49\n * @url https://gist.github.com/964592\n * @license http://www.opensource.org/licenses/mit-license.php (The MIT License)\n */\nexport function toHankaku(text) {\n return String(text).replace(/\\u2019/g, '\\u0027')\n .replace(/\\u201D/g, '\\u0022')\n .replace(/\\u3000/g, '\\u0020')\n .replace(/\\uFFE5/g, '\\u00A5')\n .replace(/[\\uFF01\\uFF03-\\uFF06\\uFF08\\uFF09\\uFF0C-\\uFF19\\uFF1C-\\uFF1F\\uFF21-\\uFF3B\\uFF3D\\uFF3F\\uFF41-\\uFF5B\\uFF5D\\uFF5E]/g, alphaNum);\n}\n\nfunction alphaNum (token) {\n return String.fromCharCode(token.charCodeAt(0) - 65248);\n}","import {Parser, ParsingContext} from \"../../../chrono\";\nimport {toHankaku} from \"../constants\";\nimport {findYearClosestToRef} from \"../../../calculation/yearCalculation\";\n\nimport dayjs from \"dayjs\";\n\n\nconst PATTERN = /(?:(?:([同今本])|((昭和|平成|令和)?([0-90-9]{1,4}|元)))年\\s*)?([0-90-9]{1,2})月\\s*([0-90-9]{1,2})日/i;\nconst SPECIAL_YEAR_GROUP = 1;\nconst TYPICAL_YEAR_GROUP = 2;\nconst ERA_GROUP = 3;\nconst YEAR_NUMBER_GROUP = 4;\nconst MONTH_GROUP = 5;\nconst DAY_GROUP = 6;\n\nexport default class JPStandardParser implements Parser {\n\n pattern() {\n return PATTERN;\n }\n\n extract(context: ParsingContext, match: RegExpMatchArray) {\n\n const month = parseInt(toHankaku(match[MONTH_GROUP]));\n const day = parseInt(toHankaku(match[DAY_GROUP]));\n const components = context.createParsingComponents({\n 'day': day, 'month': month\n });\n\n if (match[SPECIAL_YEAR_GROUP] && match[SPECIAL_YEAR_GROUP].match('同|今|本')) {\n\n const moment = dayjs(context.refDate)\n components.assign('year', moment.year());\n }\n\n if (match[TYPICAL_YEAR_GROUP]) {\n const yearNumText = match[YEAR_NUMBER_GROUP];\n\n let year = (yearNumText == '元') ? 1 : parseInt(toHankaku(yearNumText))\n if (match[ERA_GROUP] == '令和') {\n year += 2018;\n } else if (match[ERA_GROUP] == '平成') {\n year += 1988;\n } else if (match[ERA_GROUP] == '昭和') {\n year += 1925;\n }\n\n components.assign('year', year);\n\n } else {\n const year = findYearClosestToRef(context.refDate, day, month);\n components.imply('year', year);\n }\n\n return components;\n }\n}\n\n","import AbstractMergeDateRangeRefiner from \"../../../common/refiners/AbstractMergeDateRangeRefiner\";\n\n/**\n * Merging before and after results (see. AbstractMergeDateRangeRefiner)\n * This implementation should provide Japanese connecting phases\n * - 水曜日[ー]日曜日\n * - 水曜日[から]日曜日\n */\nexport default class JPMergeDateRangeRefiner extends AbstractMergeDateRangeRefiner {\n\n patternBetween(): RegExp {\n return /^\\s*(から|ー|-)\\s*$/i ;\n }\n}\n\n","import {Parser, ParsingContext} from \"../../../chrono\";\nimport dayjs from \"dayjs\";\nimport {Meridiem} from \"../../../index\";\n\n\nconst PATTERN = /今日|当日|昨日|明日|今夜|今夕|今晩|今朝/i;\n\nexport default class JPCasualDateParser implements Parser {\n\n pattern() {\n return PATTERN;\n }\n\n extract(context: ParsingContext, match: RegExpMatchArray) {\n\n const text = match[0];\n\n let date = dayjs(context.refDate);\n const components = context.createParsingComponents()\n\n if(text == '今夜' || text == '今夕' || text == '今晩'){\n\n components.imply('hour', 22);\n components.assign('meridiem', Meridiem.PM);\n\n } else if (text.match(\"今朝\")) {\n\n components.imply('hour', 6);\n components.assign('meridiem', Meridiem.AM);\n\n } else if(text == '明日'){\n\n if(date.hour() > 4) { // Check not \"Tomorrow\" on late night\n date = date.add(1, 'day');\n }\n\n } else if(text == '昨日') {\n\n date = date.add(-1, 'day');\n }\n\n components.assign('day', date.date())\n components.assign('month', date.month() + 1)\n components.assign('year', date.year())\n return components;\n }\n}\n\n","import JPStandardParser from \"./parsers/JPStandardParser\";\nimport JPMergeDateRangeRefiner from \"./refiners/JPMergeDateRangeRefiner\";\nimport JPCasualDateParser from \"./parsers/JPCasualDateParser\";\n\nimport {Chrono, Configuration} from \"../../chrono\";\nimport {ParsedResult, ParsingOption} from \"../../index\";\n\n// Shortcuts\nexport const casual = new Chrono(createCasualConfiguration())\nexport const strict = new Chrono(createConfiguration())\n\nexport function parse(text: string, ref?: Date, option?: ParsingOption): ParsedResult[] {\n return casual.parse(text, ref, option);\n}\n\nexport function parseDate(text: string, ref?: Date, option?: ParsingOption) : Date {\n return casual.parseDate(text, ref, option);\n}\n\nexport function createCasualConfiguration() : Configuration {\n const option = createConfiguration();\n option.parsers.unshift(new JPCasualDateParser());\n return option;\n}\n\nexport function createConfiguration() : Configuration {\n return {\n parsers: [\n new JPStandardParser()\n ],\n refiners: [\n new JPMergeDateRangeRefiner()\n ]\n }\n}","import {DebugHandler, DebugConsume} from \"./debugging\";\nimport * as en from './locales/en';\n\nexport {Chrono} from './chrono';\nexport const strict = en.strict;\nexport const casual = en.casual;\n\nexport function parse(text: string, ref?: Date, option?: ParsingOption): ParsedResult[] {\n return casual.parse(text, ref, option);\n}\n\nexport function parseDate(text: string, ref?: Date, option?: ParsingOption) : Date {\n return casual.parseDate(text, ref, option);\n}\n\nexport interface ParsingOption {\n forwardDate?: boolean\n debug?: DebugHandler | DebugConsume\n timezones?: {string: number}\n}\n\nexport interface ParsedResult {\n readonly refDate: Date\n readonly index: number\n readonly text: string\n\n readonly start: ParsedComponents\n readonly end?: ParsedComponents\n\n readonly date: () => Date\n}\n\nexport interface ParsedComponents {\n readonly get: (c: Component) => number\n readonly date: () => Date\n}\n\nexport type Component =\n 'year' | 'month' | 'day' | 'weekday' |\n 'hour' | 'minute' | 'second' | 'millisecond' | 'meridiem' |\n 'timezoneOffset';\n\nexport enum Meridiem {\n AM = 0,\n PM = 1\n}\n\n// export * as xx from './locales/xx'\nexport * as en from './locales/en'\nexport * as ja from './locales/ja'\n\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/chrono.min.js b/dist/chrono.min.js deleted file mode 100644 index 52affa46..00000000 --- a/dist/chrono.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see chrono.min.js.LICENSE.txt */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.chrono=e():t.chrono=e()}(this,(function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=1)}([function(t,e,n){t.exports=function(){"use strict";var t="millisecond",e="second",n="minute",r="hour",i="day",a="week",o="month",u="quarter",s="year",c=/^(\d{4})-?(\d{1,2})-?(\d{0,2})[^0-9]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?.?(\d{1,3})?$/,f=/\[([^\]]+)]|Y{2,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,l=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},y={s:l,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?"+":"-")+l(r,2,"0")+":"+l(i,2,"0")},m:function(t,e){var n=12*(e.year()-t.year())+(e.month()-t.month()),r=t.clone().add(n,o),i=e-r<0,a=t.clone().add(n+(i?-1:1),o);return Number(-(n+(e-r)/(i?r-a:a-r))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(c){return{M:o,y:s,w:a,d:i,D:"date",h:r,m:n,s:e,ms:t,Q:u}[c]||String(c||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},h={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")},d="en",p={};p[d]=h;var m=function(t){return t instanceof w},g=function(t,e,n){var r;if(!t)return d;if("string"==typeof t)p[t]&&(r=t),e&&(p[t]=e,r=t);else{var i=t.name;p[i]=t,r=i}return!n&&r&&(d=r),r||!n&&d},v=function(t,e){if(m(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new w(n)},b=y;b.l=g,b.i=m,b.w=function(t,e){return v(t,{locale:e.$L,utc:e.$u,$offset:e.$offset})};var w=function(){function l(t){this.$L=this.$L||g(t.locale,null,!0),this.parse(t)}var y=l.prototype;return y.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match(c);if(r)return n?new Date(Date.UTC(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)):new Date(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)}return new Date(e)}(t),this.init()},y.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},y.$utils=function(){return b},y.isValid=function(){return!("Invalid Date"===this.$d.toString())},y.isSame=function(t,e){var n=v(t);return this.startOf(e)<=n&&n<=this.endOf(e)},y.isAfter=function(t,e){return v(t)t.length)&&(e=t.length);for(var n=0,r=new Array(e);n50?1900:2e3),e}var b="(".concat(h,")\\s*(").concat(u(y),")\\s*"),w=new RegExp(b,"i"),T=b.replace(/\((?!\?)/g,"(?:"),O="(?:".concat(T,")+");function k(t){for(var e={},n=t,r=w.exec(n);r;)C(e,r),n=n.substring(r[0].length),r=w.exec(n);return e}function C(t,e){var n=d(e[1]);t[y[e[2].toLowerCase()]]=n}var x=n(0),S=n.n(x);function P(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function D(t,e){for(var n=0;n12)&&a>12){if(!(o>=1&&o<=12&&a<=31))return null;var u=[a,o];o=u[0],a=u[1]}if(o<1||o>31)return null;if(i.start.assign("day",o),i.start.assign("month",a),e[5]){var s=v(e[5])||S()(t.refDate).year();i.start.assign("year",s)}else{var c=F(t.refDate,o,a);i.start.imply("year",c)}return e[2]&&i.start.assign("weekday",U[e[2].toLowerCase()]),i}}else e.index+=e[0].length}}])&&K(e.prototype,n),r&&K(e,r),t}();function J(t,e){for(var n=0;n100&&(r=n%100,n=Math.floor(n/100)),r>=60||n>24)return null;if(n>=12&&(i=wn.PM),null!=e[6]){if(n>12)return null;var a=e[6][0].toLowerCase();"a"==a&&(i=wn.AM,12==n&&(n=0)),"p"==a&&(i=wn.PM,12!=n&&(n+=12))}if(t.start.assign("hour",n),t.start.assign("minute",r),null!==i?t.start.assign("meridiem",i):n<12?t.start.imply("meridiem",wn.AM):t.start.imply("meridiem",wn.PM),null!=e[5]){var o=parseInt(e[5].substring(0,3));if(o>=1e3)return null;t.start.assign("millisecond",o)}if(null!=e[4]){var u=parseInt(e[4]);if(u>=60)return null;t.start.assign("second",u)}return t}},{key:"extractEndTimeComponent",value:function(t,e){if(t.end=t.start.clone(),null!=e[5]){var n=parseInt(e[5].substring(0,3));if(n>=1e3)return null;t.end.assign("millisecond",n)}if(null!=e[4]){var r=parseInt(e[4]);if(r>=60)return null;t.end.assign("second",r)}var i=parseInt(e[2]),a=0,o=-1;if(null!=e[3]?a=parseInt(e[3]):i>100&&(a=i%100,i=Math.floor(i/100)),a>=60||i>24)return null;if(i>=12&&(o=wn.PM),null!=e[6]){if(i>12)return null;var u=e[6][0].toLowerCase();"a"==u&&(o=wn.AM,12==i&&(i=0,t.end.isCertain("day")||t.end.imply("day",t.end.get("day")+1))),"p"==u&&(o=wn.PM,12!=i&&(i+=12)),t.start.isCertain("meridiem")||(o==wn.AM?(t.start.imply("meridiem",wn.AM),12==t.start.get("hour")&&t.start.assign("hour",0)):(t.start.imply("meridiem",wn.PM),12!=t.start.get("hour")&&t.start.assign("hour",t.start.get("hour")+12)))}return t.text=t.text+e[0],t.end.assign("hour",i),t.end.assign("minute",a),o>=0?t.end.assign("meridiem",o):t.start.isCertain("meridiem")&&t.start.get("meridiem")==wn.PM&&t.start.get("hour")>i?t.end.imply("meridiem",wn.AM):i>12&&t.end.imply("meridiem",wn.PM),t.end.date().getTime()n.start.date().getTime()){var r=e.start.dayjs(),i=n.start.dayjs();if(e.start.isOnlyWeekdayComponent()&&r.add(-7,"days").isBefore(i))r=r.add(-7,"days"),e.start.imply("day",r.date()),e.start.imply("month",r.month()+1),e.start.imply("year",r.year());else if(n.start.isOnlyWeekdayComponent()&&i.add(7,"days").isAfter(r))i=i.add(7,"days"),n.start.imply("day",i.date()),n.start.imply("month",i.month()+1),n.start.imply("year",i.year());else{var a=[e,n];n=a[0],e=a[1]}}var o=e.clone();return o.start=e.start,o.end=n.start,o.index=Math.min(e.index,n.index),e.indexr.text.length&&(r=a):(n.push(r),r=a)}return null!=r&&n.push(r),n}}])&&se(e.prototype,n),r&&se(e,r),t}();function fe(t,e){for(var n=0;ne.start.get("weekday")?n.day(e.start.get("weekday")+7):n.day(e.start.get("weekday")),e.start.imply("day",n.date()),e.start.imply("month",n.month()+1),e.start.imply("year",n.year()),t.debug((function(){console.log("Forward weekly adjusted for ".concat(e," (").concat(e.start,")"))})),e.end&&e.end.isOnlyWeekdayComponent()&&(n=n.day()>e.end.get("weekday")?n.day(e.end.get("weekday")+7):n.day(e.end.get("weekday")),e.end.imply("day",n.date()),e.end.imply("month",n.month()+1),e.end.imply("year",n.year()),t.debug((function(){console.log("Forward weekly adjusted for ".concat(e," (").concat(e.end,")"))}))))})),e):e}}])&&fe(e.prototype,n),r&&fe(e,r),t}();function ye(t){return(ye="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function he(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function de(t,e){for(var n=0;n1&&(n=n.add(1,"day")):/^yesterday/.test(r)?n=n.add(-1,"day"):r.match(/last\s*night/)?(i.imply("hour",0),n.hour()>6&&(n=n.add(-1,"day"))):r.match("now")&&(i.assign("hour",n.hour()),i.assign("minute",n.minute()),i.assign("second",n.second()),i.assign("millisecond",n.millisecond())),i.assign("day",n.date()),i.assign("month",n.month()+1),i.assign("year",n.year()),i}}])&&Pe(e.prototype,n),r&&Pe(e,r),t}();function Me(t,e){for(var n=0;nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n0?r[0].start.date():null}},{key:"parse",value:function(e,n,r){var i=new Ye(e,n||new Date,r||{}),a=[];return this.parsers.forEach((function(e){var n=t.executeParser(i,e);a=a.concat(n)})),a.sort((function(t,e){return t.index-e.index})),this.refiners.forEach((function(t){a=t.refine(i,a)})),a}},{key:"clone",value:function(){return new t({parsers:Ie(this.parsers),refiners:Ie(this.refiners)})}}],[{key:"executeParser",value:function(t,e){for(var n=[],r=e.pattern(t),i=t.text,a=t.text,o=r.exec(a),u=function(){var u=o.index+i.length-a.length;o.index=u;var s=e.extract(t,o);if(!s)return a=i.substring(u+1),o=r.exec(a),"continue";var c=null;s instanceof E?c=s:s instanceof j?(c=t.createParsingResult(o.index,o[0])).start=s:c=t.createParsingResult(o.index,o[0],s),t.debug((function(){return console.log("".concat(e.constructor.name," extracted result ").concat(c))})),n.push(c),a=i.substring(u+c.text.length),o=r.exec(a)};o;)u();return n}}]),t}(),Ye=function(){function t(e,n,r){Ve(this,t),this.text=e,this.refDate=n,this.option=r}return He(t,[{key:"createParsingComponents",value:function(t){return new j(this.refDate,t)}},{key:"createParsingResult",value:function(t,e,n,r){var i="string"==typeof e?e:this.text.substring(t,e),a=n?this.createParsingComponents(n):null,o=r?this.createParsingComponents(r):null;return new E(this.refDate,t,i,a,o)}},{key:"debug",value:function(t){this.option.debug&&(this.option.debug instanceof Function?this.option.debug(t):this.option.debug.debug(t))}}]),t}(),Be=new Ne(Ze(!1)),ze=new Ne(Je(!0,!1)),Ke=new Ne(Je(!1,!0));function Ge(t,e,n){return Be.parse(t,e,n)}function Ue(t,e,n){return Be.parseDate(t,e,n)}function Ze(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=Je(!1,t);return e.parsers.unshift(Ce(new De)),e.parsers.unshift(Ce(new je)),e.parsers.unshift(Ce(new Ae)),e.parsers.unshift(Ce(new Fe)),e}function Je(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return Se({parsers:[Ce(new _(t)),Ce(new V),Ce(new N),Ce(new z),new Z(e),Ce(new q),Ce(new et),new at,Ce(new ct(t)),Ce(new ht(t))],refiners:[new Qt,new Rt]})}function Qe(t){return String(t).replace(/\u2019/g,"'").replace(/\u201D/g,'"').replace(/\u3000/g," ").replace(/\uFFE5/g,"¥").replace(/[\uFF01\uFF03-\uFF06\uFF08\uFF09\uFF0C-\uFF19\uFF1C-\uFF1F\uFF21-\uFF3B\uFF3D\uFF3F\uFF41-\uFF5B\uFF5D\uFF5E]/g,qe)}function qe(t){return String.fromCharCode(t.charCodeAt(0)-65248)}function Xe(t,e){for(var n=0;n4&&(r=r.add(1,"day")):"昨日"==n&&(r=r.add(-1,"day")),i.assign("day",r.date()),i.assign("month",r.month()+1),i.assign("year",r.year()),i}}])&&ln(e.prototype,n),r&&ln(e,r),t}(),dn=new Ne(vn()),pn=new Ne(bn());function mn(t,e,n){return dn.parse(t,e,n)}function gn(t,e,n){return dn.parseDate(t,e,n)}function vn(){var t=bn();return t.parsers.unshift(new hn),t}function bn(){return{parsers:[new en],refiners:[new fn]}}var wn,Tn=ze,On=Be;function kn(t,e,n){return On.parse(t,e,n)}function Cn(t,e,n){return On.parseDate(t,e,n)}!function(t){t[t.AM=0]="AM",t[t.PM=1]="PM"}(wn||(wn={}))}])})); -//# sourceMappingURL=chrono.min.js.map \ No newline at end of file diff --git a/dist/chrono.min.js.LICENSE.txt b/dist/chrono.min.js.LICENSE.txt deleted file mode 100644 index a08c6750..00000000 --- a/dist/chrono.min.js.LICENSE.txt +++ /dev/null @@ -1,9 +0,0 @@ -/** - * to-hankaku.js - * convert to ascii code strings. - * - * @version 1.0.1 - * @author think49 - * @url https://gist.github.com/964592 - * @license http://www.opensource.org/licenses/mit-license.php (The MIT License) - */ diff --git a/dist/chrono.min.js.map b/dist/chrono.min.js.map deleted file mode 100644 index 4533138c..00000000 --- a/dist/chrono.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack://chrono/webpack/universalModuleDefinition","webpack://chrono/webpack/bootstrap","webpack://chrono/./node_modules/dayjs/dayjs.min.js","webpack://chrono/./src/utils/pattern.ts","webpack://chrono/./src/locales/en/constants.ts","webpack://chrono/./src/results.ts","webpack://chrono/./src/locales/en/parsers/ENTimeUnitDeadlineFormatParser.ts","webpack://chrono/./src/calculation/yearCalculation.ts","webpack://chrono/./src/locales/en/parsers/ENMonthNameLittleEndianParser.ts","webpack://chrono/./src/locales/en/parsers/ENMonthNameMiddleEndianParser.ts","webpack://chrono/./src/locales/en/parsers/ENMonthNameParser.ts","webpack://chrono/./src/locales/en/parsers/ENSlashDateFormatParser.ts","webpack://chrono/./src/locales/en/parsers/ENSlashDateFormatStartWithYearParser.ts","webpack://chrono/./src/locales/en/parsers/ENSlashMonthFormatParser.ts","webpack://chrono/./src/locales/en/parsers/ENTimeExpressionParser.ts","webpack://chrono/./src/locales/en/parsers/ENTimeUnitAgoFormatParser.ts","webpack://chrono/./src/locales/en/parsers/ENTimeUnitLaterFormatParser.ts","webpack://chrono/./src/common/abstractRefiners.ts","webpack://chrono/./src/common/refiners/AbstractMergeDateRangeRefiner.ts","webpack://chrono/./src/locales/en/refiners/ENMergeDateRangeRefiner.ts","webpack://chrono/./src/calculation/mergingCalculation.ts","webpack://chrono/./src/locales/en/refiners/ENMergeDateTimeRefiner.ts","webpack://chrono/./src/common/refiners/AbstractMergeDateTimeRefiner.ts","webpack://chrono/./src/common/refiners/ExtractTimezoneAbbrRefiner.ts","webpack://chrono/./src/common/refiners/ExtractTimezoneOffsetRefiner.ts","webpack://chrono/./src/common/refiners/OverlapRemovalRefiner.ts","webpack://chrono/./src/common/refiners/ForwardDateRefiner.ts","webpack://chrono/./src/common/refiners/UnlikelyFormatFilter.ts","webpack://chrono/./src/common/parsers/ISOFormatParser.ts","webpack://chrono/./src/utils/ParserWithWordEndingDetection.ts","webpack://chrono/./src/configurations.ts","webpack://chrono/./src/locales/en/parsers/ENCasualDateParser.ts","webpack://chrono/./src/locales/en/parsers/ENCasualTimeParser.ts","webpack://chrono/./src/locales/en/parsers/ENWeekdayParser.ts","webpack://chrono/./src/locales/en/parsers/ENRelativeDateFormatParser.ts","webpack://chrono/./src/chrono.ts","webpack://chrono/./src/locales/en/index.ts","webpack://chrono/./src/locales/ja/constants.ts","webpack://chrono/./src/locales/ja/parsers/JPStandardParser.ts","webpack://chrono/./src/locales/ja/refiners/JPMergeDateRangeRefiner.ts","webpack://chrono/./src/locales/ja/parsers/JPCasualDateParser.ts","webpack://chrono/./src/locales/ja/index.ts","webpack://chrono/./src/index.ts"],"names":["root","factory","exports","module","define","amd","this","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","e","u","a","h","f","String","length","Array","join","z","utcOffset","Math","abs","floor","year","month","clone","add","Number","ceil","M","y","w","D","ms","Q","toLowerCase","replace","$","weekdays","split","months","v","g","date","args","arguments","locale","$L","utc","$u","$offset","parse","$d","Date","NaN","test","match","UTC","init","$y","getFullYear","$M","getMonth","$D","getDate","$W","getDay","$H","getHours","$m","getMinutes","$s","getSeconds","$ms","getMilliseconds","$utils","isValid","toString","isSame","startOf","endOf","isAfter","isBefore","$g","set","day","hour","minute","second","millisecond","unix","valueOf","getTime","toDate","apply","slice","$locale","weekStart","$set","min","daysInMonth","round","subtract","format","substr","meridiem","YY","YYYY","MM","MMM","monthsShort","MMMM","DD","dd","weekdaysMin","ddd","weekdaysShort","dddd","H","HH","hh","A","mm","ss","SSS","Z","getTimezoneOffset","diff","toJSON","toISOString","toUTCString","extend","isDayjs","en","Ls","matchAnyPattern","dictionary","joinedTerms","Map","from","keys","extractTerms","sort","b","WEEKDAY_DICTIONARY","MONTH_DICTIONARY","INTEGER_WORD_DICTIONARY","ORDINAL_WORD_DICTIONARY","TIME_UNIT_DICTIONARY","NUMBER_PATTERN","parseNumberPattern","num","undefined","parseFloat","ORDINAL_NUMBER_PATTERN","parseOrdinalNumberPattern","parseInt","YEAR_PATTERN","parseYear","yearNumber","SINGLE_TIME_UNIT_PATTERN","SINGLE_TIME_UNIT_REGEX","RegExp","SINGLE_TIME_UNIT_PATTERN_NO_CAPTURE","TIME_UNITS_PATTERN","parseTimeUnits","timeunitText","fragments","remainingText","exec","collectDateTimeFragment","substring","ParsingComponents","refDate","knownComponents","knownValues","impliedValues","refDayJs","dayjs","imply","component","isCertain","dateMoment","adjustTimezoneOffset","result","currentTimezoneOffset","JSON","stringify","components","assign","ParsingResult","index","text","start","end","PATTERN","STRICT_PATTERN","ENTimeUnitDeadlineFormatParser","strictMode","context","timeUnits","createRelativeFromRefDate","findYearClosestToRef","refMoment","nextYear","lastYear","ENMonthNameLittleEndianParser","createParsingResult","weekday","endDate","ENMonthNameMiddleEndianParser","createParsingComponents","ENMonthNameParser","monthName","DAYS_OFFSET","ENSlashDateFormatParser","littleEndian","groupNumberMonth","groupNumberDay","indexOf","ENSlashDateFormatStartWithYearParser","ENSlashMonthFormatParser","FIRST_REG_PATTERN","SECOND_REG_PATTERN","ENTimeExpressionParser","Meridiem","PM","AM","ampm","extractStartTimeComponent","newResult","extractEndTimeComponent","ENTimeUnitAgoFormatParser","ENTimeUnitLaterFormatParser","trim","Filter","results","filter","MergingRefiner","mergedResults","curResult","nextResult","textBetween","shouldMergeResults","left","right","mergedResult","mergeResults","debug","console","log","constructor","push","AbstractMergeDateRangeRefiner","currentResult","patternBetween","fromResult","toResult","isOnlyWeekdayComponent","getCertainComponents","forEach","fromMoment","toMoment","ENMergeDateRangeRefiner","mergeDateTimeResult","dateResult","timeResult","beginDate","beginTime","mergeDateTimeComponent","endDateTime","dateComponent","timeComponent","dateTimeComponent","ENMergeDateTimeRefiner","isOnlyDate","isOnlyTime","TIMEZONE_NAME_PATTERN","DEFAULT_TIMEZONE_ABBR_MAP","ExtractTimezoneAbbrRefiner","timezoneOverrides","timezone","timezones","option","suffix","timezoneAbbr","toUpperCase","timezoneOffset","TIMEZONE_OFFSET_PATTERN","ExtractTimezoneOffsetRefiner","OverlapRemovalRefiner","filteredResults","prevResult","ForwardDateRefiner","forwardDate","isOnlyDayMonthComponent","UnlikelyFormatFilter","isValidDate","ISOFormatParser","hourOffset","minuteOffset","offset","createParserWithWordBoundaryDetection","parser","ParserWithWordEndingDetection","original","originalPattern","pattern","source","flags","header","extract","includeCommonConfiguration","configuration","parsers","unshift","refiners","ENCasualDateParser","targetDate","lowerText","ENCasualTimeParser","ENWeekdayParser","dayOfWeek","prefix","postfix","modifier","extractWeekday","refOffset","ENRelativeDateFormatParser","extractThisReference","parsedNum","unitWord","extractDateReference","extractTimeReference","timeUnitWord","dateUnitWord","relativeWord","Chrono","createCasualConfiguration","opt","ParsingContext","parsedResults","executeParser","concat","refiner","refine","originalText","parsedResult","textOrEndIndex","startComponents","endComponents","block","Function","casual","strict","createConfiguration","GB","ref","parseDate","withWordBoundary","toHankaku","alphaNum","token","fromCharCode","charCodeAt","JPStandardParser","moment","yearNumText","JPMergeDateRangeRefiner","JPCasualDateParser"],"mappings":"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","file":"chrono.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"chrono\"] = factory();\n\telse\n\t\troot[\"chrono\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):t.dayjs=e()}(this,function(){\"use strict\";var t=\"millisecond\",e=\"second\",n=\"minute\",r=\"hour\",i=\"day\",s=\"week\",u=\"month\",o=\"quarter\",a=\"year\",h=/^(\\d{4})-?(\\d{1,2})-?(\\d{0,2})[^0-9]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?.?(\\d{1,3})?$/,f=/\\[([^\\]]+)]|Y{2,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,c=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},d={s:c,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+c(r,2,\"0\")+\":\"+c(i,2,\"0\")},m:function(t,e){var n=12*(e.year()-t.year())+(e.month()-t.month()),r=t.clone().add(n,u),i=e-r<0,s=t.clone().add(n+(i?-1:1),u);return Number(-(n+(e-r)/(i?r-s:s-r))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(h){return{M:u,y:a,w:s,d:i,D:\"date\",h:r,m:n,s:e,ms:t,Q:o}[h]||String(h||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},$={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\")},l=\"en\",m={};m[l]=$;var y=function(t){return t instanceof v},M=function(t,e,n){var r;if(!t)return l;if(\"string\"==typeof t)m[t]&&(r=t),e&&(m[t]=e,r=t);else{var i=t.name;m[i]=t,r=i}return!n&&r&&(l=r),r||!n&&l},g=function(t,e){if(y(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new v(n)},D=d;D.l=M,D.i=y,D.w=function(t,e){return g(t,{locale:e.$L,utc:e.$u,$offset:e.$offset})};var v=function(){function c(t){this.$L=this.$L||M(t.locale,null,!0),this.parse(t)}var d=c.prototype;return d.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(D.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match(h);if(r)return n?new Date(Date.UTC(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)):new Date(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)}return new Date(e)}(t),this.init()},d.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},d.$utils=function(){return D},d.isValid=function(){return!(\"Invalid Date\"===this.$d.toString())},d.isSame=function(t,e){var n=g(t);return this.startOf(e)<=n&&n<=this.endOf(e)},d.isAfter=function(t,e){return g(t)\n\nexport function patternWithWordBreak(regExp: RegExp) : RegExp {\n return RegExp('' + regExp.source)\n}\n\n\nexport function extractTerms(dictionary: DictionaryLike): string[] {\n let keys: string[];\n if (dictionary instanceof Array) {\n keys = [...dictionary];\n } else if (dictionary instanceof Map) {\n keys = Array.from((dictionary as Map).keys());\n } else {\n keys = Object.keys(dictionary);\n }\n\n return keys;\n}\n\n\nexport function matchAnyPattern(dictionary: DictionaryLike) : string {\n // TODO: More efficient regex pattern by considering duplicated prefix\n\n const joinedTerms = extractTerms(dictionary)\n .sort((a, b) => b.length - a.length)\n .join('|')\n .replace(/\\./g, '\\\\.')\n\n return `(?:${joinedTerms})`;\n}","import {OpUnitType} from \"dayjs\";\nimport {matchAnyPattern} from \"../../utils/pattern\";\n\nexport const WEEKDAY_DICTIONARY: {[word: string]: number} = {\n 'sunday': 0,\n 'sun': 0,\n 'sun.': 0,\n 'monday': 1,\n 'mon': 1,\n 'mon.': 1,\n 'tuesday': 2,\n 'tue':2,\n 'tue.':2,\n 'wednesday': 3,\n 'wed': 3,\n 'wed.': 3,\n 'thursday': 4,\n 'thurs': 4,\n 'thurs.': 4,\n 'thur': 4,\n 'thur.': 4,\n 'thu': 4,\n 'thu.': 4,\n 'friday': 5,\n 'fri': 5,\n 'fri.': 5,\n 'saturday': 6,\n 'sat': 6,\n 'sat.': 6\n};\n\nexport const MONTH_DICTIONARY: {[word: string]: number} = {\n 'january': 1,\n 'jan': 1,\n 'jan.': 1,\n 'february': 2,\n 'feb': 2,\n 'feb.': 2,\n 'march': 3,\n 'mar': 3,\n 'mar.': 3,\n 'april': 4,\n 'apr': 4,\n 'apr.': 4,\n 'may': 5,\n 'june': 6,\n 'jun': 6,\n 'jun.': 6,\n 'july': 7,\n 'jul': 7,\n 'jul.': 7,\n 'august': 8,\n 'aug': 8,\n 'aug.': 8,\n 'september': 9,\n 'sep': 9,\n 'sep.': 9,\n 'sept': 9,\n 'sept.': 9,\n 'october': 10,\n 'oct': 10,\n 'oct.': 10,\n 'november': 11,\n 'nov': 11,\n 'nov.': 11,\n 'december': 12,\n 'dec': 12,\n 'dec.': 12\n};\n\nexport const INTEGER_WORD_DICTIONARY: {[word: string]: number} = {\n 'one' : 1,\n 'two' : 2,\n 'three' : 3,\n 'four' : 4,\n 'five' : 5,\n 'six' : 6,\n 'seven' : 7,\n 'eight' : 8,\n 'nine' : 9,\n 'ten' : 10,\n 'eleven' : 11,\n 'twelve' : 12\n};\n\nexport const ORDINAL_WORD_DICTIONARY: {[word: string]: number} = {\n 'first' : 1,\n 'second': 2,\n 'third': 3,\n 'fourth': 4,\n 'fifth': 5,\n 'sixth': 6,\n 'seventh': 7,\n 'eighth': 8,\n 'ninth': 9,\n 'tenth': 10,\n 'eleventh': 11,\n 'twelfth': 12,\n 'thirteenth': 13,\n 'fourteenth': 14,\n 'fifteenth': 15,\n 'sixteenth': 16,\n 'seventeenth': 17,\n 'eighteenth': 18,\n 'nineteenth': 19,\n 'twentieth': 20,\n 'twenty first': 21,\n 'twenty-first': 21,\n 'twenty second': 22,\n 'twenty-second': 22,\n 'twenty third': 23,\n 'twenty-third': 23,\n 'twenty fourth': 24,\n 'twenty-fourth': 24,\n 'twenty fifth': 25,\n 'twenty-fifth': 25,\n 'twenty sixth': 26,\n 'twenty-sixth': 26,\n 'twenty seventh': 27,\n 'twenty-seventh': 27,\n 'twenty eighth': 28,\n 'twenty-eighth': 28,\n 'twenty ninth': 29,\n 'twenty-ninth': 29,\n 'thirtieth': 30,\n 'thirty first': 31,\n 'thirty-first': 31\n};\n\nexport const TIME_UNIT_DICTIONARY : {[word: string]: OpUnitType} = {\n 'sec': 'second',\n 'second' : 'second',\n 'seconds' : 'second',\n 'min' : 'minute',\n 'mins' : 'minute',\n 'minute' : 'minute',\n 'minutes' : 'minute',\n 'h' : 'hour',\n 'hr' : 'hour',\n 'hrs' : 'hour',\n 'hour' : 'hour',\n 'hours' : 'hour',\n 'day' : 'd',\n 'days' : 'd',\n 'week' : 'week',\n 'weeks': 'week',\n 'month' : 'month',\n 'months' : 'month',\n 'yr' : 'year',\n 'year' : 'year',\n 'years' : 'year',\n};\n\n//-----------------------------\n\nexport const NUMBER_PATTERN = `(?:${matchAnyPattern(INTEGER_WORD_DICTIONARY)}|[0-9]+|[0-9]+\\\\.[0-9]+|half(?:\\\\s*an?)?|an?(?:\\\\s*few)?|few)`;\n\nexport function parseNumberPattern(match: string) : number {\n const num = match.toLowerCase();\n if (INTEGER_WORD_DICTIONARY[num] !== undefined) {\n return INTEGER_WORD_DICTIONARY[num];\n } else if (num === 'a' || num === 'an') {\n return 1;\n } else if (num.match(/few/)) {\n return 3;\n } else if (num.match(/half/)) {\n return 0.5;\n }\n\n return parseFloat(num);\n}\n\n//-----------------------------\n\nexport const ORDINAL_NUMBER_PATTERN = `(?:${matchAnyPattern(ORDINAL_WORD_DICTIONARY)}|[0-9]{1,2}(?:st|nd|rd|th)?)`;\nexport function parseOrdinalNumberPattern(match: string) : number {\n let num = match.toLowerCase();\n if (ORDINAL_WORD_DICTIONARY[num] !== undefined) {\n return ORDINAL_WORD_DICTIONARY[num];\n }\n\n num = num.replace(/(?:st|nd|rd|th)$/i, '')\n return parseInt(num);\n}\n\n\n//-----------------------------\n\nexport const YEAR_PATTERN = `(?:[1-9][0-9]{0,3}\\\\s*(?:BE|AD|BC)|[1-2][0-9]{3}|[5-9][0-9])`;\nexport function parseYear(match: string) : number {\n if (/BE/i.test(match)) {\n // Buddhist Era\n match = match.replace(/BE/i, '');\n return parseInt(match) - 543;\n }\n\n if (/BC/i.test(match)){\n // Before Christ\n match = match.replace(/BC/i, '');\n return -parseInt(match);\n }\n\n if (/AD/i.test(match)){\n match = match.replace(/AD/i, '');\n return parseInt(match);\n }\n\n let yearNumber = parseInt(match);\n if (yearNumber < 100){\n if (yearNumber > 50) {\n yearNumber = yearNumber + 1900;\n } else {\n yearNumber = yearNumber + 2000;\n }\n }\n\n return yearNumber;\n}\n\n//-----------------------------\n\nconst SINGLE_TIME_UNIT_PATTERN = `(${NUMBER_PATTERN})\\\\s*(${matchAnyPattern(TIME_UNIT_DICTIONARY)})\\\\s*`;\nconst SINGLE_TIME_UNIT_REGEX = new RegExp(SINGLE_TIME_UNIT_PATTERN, 'i');\n\nconst SINGLE_TIME_UNIT_PATTERN_NO_CAPTURE = SINGLE_TIME_UNIT_PATTERN.replace(/\\((?!\\?)/g, '(?:');\n\nexport const TIME_UNITS_PATTERN = `(?:${SINGLE_TIME_UNIT_PATTERN_NO_CAPTURE})+`;\n\nexport function parseTimeUnits(timeunitText) : {[c: OpUnitType]: number} {\n const fragments = {};\n let remainingText = timeunitText;\n let match = SINGLE_TIME_UNIT_REGEX.exec(remainingText);\n while (match) {\n collectDateTimeFragment(fragments, match);\n remainingText = remainingText.substring(match[0].length);\n match = SINGLE_TIME_UNIT_REGEX.exec(remainingText);\n }\n return fragments;\n}\n\nfunction collectDateTimeFragment(fragments, match) {\n const num = parseNumberPattern(match[1]);\n const unit = TIME_UNIT_DICTIONARY[match[2].toLowerCase()]\n fragments[unit] = num;\n}","import {Component, ParsedComponents, ParsedResult} from \"./index\";\n\nimport dayjs, {OpUnitType} from 'dayjs';\n\nexport class ParsingComponents implements ParsedComponents {\n private knownValues: {[c: Component]: number}\n private impliedValues: {[c: Component]: number}\n\n constructor(\n refDate: Date,\n knownComponents?: {[c: Component]: string|number},\n ) {\n this.knownValues = {};\n this.impliedValues = {};\n if (knownComponents) {\n for (const key in knownComponents) {\n this.knownValues[key] = knownComponents[key];\n }\n }\n\n const refDayJs = dayjs(refDate);\n this.imply('day', refDayJs.date());\n this.imply('month', refDayJs.month() + 1);\n this.imply('year', refDayJs.year())\n this.imply('hour', 12);\n this.imply('minute', 0);\n this.imply('second', 0);\n this.imply('millisecond', 0);\n }\n\n get(component: Component) : (number | null) {\n\n if (component in this.knownValues) {\n return this.knownValues[component];\n }\n\n if (component in this.impliedValues) {\n return this.impliedValues[component];\n }\n\n return null;\n }\n\n date() : Date {\n return this.dayjs().toDate();\n }\n\n isCertain(component: Component) : boolean {\n return component in this.knownValues;\n }\n\n getCertainComponents() : Array {\n return Object.keys(this.knownValues) as Array\n }\n\n imply(component: Component, value: number) : ParsingComponents {\n if (component in this.knownValues) return;\n this.impliedValues[component] = value;\n return this;\n }\n\n assign(component: Component, value: number) : ParsingComponents{\n this.knownValues[component] = value;\n delete this.impliedValues[component];\n return this;\n }\n\n clone() : ParsingComponents {\n const component = new ParsingComponents(new Date());\n component.knownValues = {};\n component.impliedValues = {};\n\n for (const key in this.knownValues) {\n component.knownValues[key] = this.knownValues[key];\n }\n\n for (const key in this.impliedValues) {\n component.impliedValues[key] = this.impliedValues[key];\n }\n\n return component;\n }\n\n isOnlyDate() : boolean {\n return !this.isCertain('hour') && !this.isCertain('minute') && !this.isCertain('second');\n }\n\n isOnlyTime() : boolean {\n return !this.isCertain('weekday') && !this.isCertain('day') && !this.isCertain('month');\n }\n\n isOnlyWeekdayComponent() : boolean {\n return this.isCertain('weekday') && !this.isCertain('day') && !this.isCertain('month');\n }\n\n isOnlyDayMonthComponent() : boolean {\n return this.isCertain('day') && this.isCertain('month') && !this.isCertain('year');\n }\n\n isValidDate() : boolean {\n let dateMoment = this.dayjs();\n if (this.isCertain('timezoneOffset')) {\n const adjustTimezoneOffset = this.get('timezoneOffset') - dateMoment.utcOffset();\n dateMoment = dateMoment.add(adjustTimezoneOffset, 'minute');\n }\n\n if (dateMoment.get('year') != this.get('year')) return false;\n if (dateMoment.get('month') != this.get('month')-1) return false;\n if (dateMoment.get('date') != this.get('day')) return false;\n if (dateMoment.get('hour') != this.get('hour')) return false;\n if (dateMoment.get('minute') != this.get('minute')) return false;\n\n return true;\n }\n\n dayjs() {\n let result = dayjs();\n\n result = result.year(this.get('year'));\n result = result.month(this.get('month') - 1);\n result = result.date(this.get('day'));\n result = result.hour(this.get('hour'));\n result = result.minute(this.get('minute'));\n result = result.second(this.get('second'));\n result = result.millisecond(this.get('millisecond'));\n\n // Javascript Date Object return minus timezone offset\n const currentTimezoneOffset = result.utcOffset();\n const targetTimezoneOffset = this.get('timezoneOffset') !== null ?\n this.get('timezoneOffset') : currentTimezoneOffset;\n\n const adjustTimezoneOffset = targetTimezoneOffset - currentTimezoneOffset;\n result = result.add(-adjustTimezoneOffset, 'minute');\n\n return result;\n }\n\n toString() {\n return `[ParsingComponents {knownValues: ${JSON.stringify(this.knownValues)}, impliedValues: ${JSON.stringify(this.impliedValues)}}]`;\n }\n\n\n static createRelativeFromRefDate(refDate:Date, fragments: {[c: OpUnitType]: number}) : ParsingComponents{\n let date = dayjs(refDate);\n for (const key in fragments) {\n date = date.add(fragments[key], key);\n }\n\n const components = new ParsingComponents(refDate);\n if (fragments['hour'] || fragments['minute'] || fragments['second']) {\n components.assign('hour', date.hour());\n components.assign('minute', date.minute());\n components.assign('second', date.second());\n }\n\n if (fragments['d'] || fragments['month'] || fragments['year']) {\n components.assign('day', date.date());\n components.assign('month', date.month() + 1);\n components.assign('year', date.year());\n } else {\n if (fragments['week']) {\n components.imply('weekday', date.day());\n }\n\n components.imply('day', date.date());\n components.imply('month', date.month() + 1);\n components.imply('year', date.year());\n }\n\n return components;\n }\n}\n\nexport class ParsingResult implements ParsedResult {\n\n refDate: Date;\n index: number;\n text: string;\n\n start: ParsingComponents;\n end?: ParsingComponents;\n\n constructor(\n refDate: Date,\n index: number,\n text: string,\n start?: ParsingComponents,\n end?: ParsingComponents,\n ) {\n this.refDate = refDate;\n this.index = index;\n this.text = text;\n this.start = start || new ParsingComponents(this.refDate);\n this.end = end;\n }\n\n clone() {\n const result = new ParsingResult(this.refDate, this.index, this.text);\n result.start = this.start ? this.start.clone() : null;\n result.end = this.end ? this.end.clone() : null;\n return result\n }\n\n date(): Date {\n return this.start.date();\n }\n\n toString() {\n return `[ParsingResult {index: ${this.index}, text: '${this.text}', ...}]`;\n }\n}","import {TIME_UNITS_PATTERN, parseTimeUnits} from '../constants';\nimport {Parser, ParsingContext} from \"../../../chrono\";\nimport {ParsingComponents} from \"../../../results\";\n\nconst PATTERN = new RegExp(\n `(?:within|in)\\\\s*` +\n '(' + TIME_UNITS_PATTERN + ')' +\n `(?=\\\\W|$)`, 'i'\n);\n\nconst STRICT_PATTERN = new RegExp(\n `(?:within|in)\\\\s*` +\n '(' + TIME_UNITS_PATTERN + ')' +\n `(?=\\\\W|$)`, 'i'\n);\n\nexport default class ENTimeUnitDeadlineFormatParser implements Parser {\n constructor(private strictMode: boolean) {}\n\n pattern(): RegExp {\n return this.strictMode ? STRICT_PATTERN : PATTERN;\n }\n\n extract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents {\n const timeUnits = parseTimeUnits(match[1]);\n return ParsingComponents.createRelativeFromRefDate(context.refDate, timeUnits);\n }\n}\n","import dayjs from \"dayjs\";\n\n\nexport function findYearClosestToRef(refDate: Date, day: number, month: number) : number {\n\n //Find the most appropriated year\n const refMoment = dayjs(refDate);\n let dateMoment = refMoment;\n dateMoment = dateMoment.month(month - 1);\n dateMoment = dateMoment.date(day);\n dateMoment = dateMoment.year(refMoment.year())\n\n const nextYear = dateMoment.add(1, 'y');\n const lastYear = dateMoment.add(-1, 'y');\n if( Math.abs(nextYear.diff(refMoment)) < Math.abs(dateMoment.diff(refMoment)) ){\n dateMoment = nextYear;\n }\n else if( Math.abs(lastYear.diff(refMoment)) < Math.abs(dateMoment.diff(refMoment)) ){\n dateMoment = lastYear;\n }\n\n return dateMoment.year();\n}\n","import {Parser, ParsingContext} from \"../../../chrono\";\nimport {ParsingResult} from \"../../../results\";\nimport {findYearClosestToRef} from \"../../../calculation/yearCalculation\";\nimport {MONTH_DICTIONARY, WEEKDAY_DICTIONARY,} from \"../constants\";\nimport {YEAR_PATTERN, parseYear} from \"../constants\";\nimport {ORDINAL_NUMBER_PATTERN, parseOrdinalNumberPattern} from \"../constants\";\nimport {matchAnyPattern} from \"../../../utils/pattern\";\n\n\nconst PATTERN = new RegExp(\n '(?:on\\\\s*?)?' +\n `(?:(${matchAnyPattern(WEEKDAY_DICTIONARY)})\\\\s*,?\\\\s*)?` +\n `(${ORDINAL_NUMBER_PATTERN})` +\n '(?:\\\\s*' +\n '(?:to|\\\\-|\\\\–|until|through|till|\\\\s)\\\\s*' +\n `(${ORDINAL_NUMBER_PATTERN})` +\n ')?' + \n '(?:-|/|\\\\s*(?:of)?\\\\s*)' +\n '(' + matchAnyPattern(MONTH_DICTIONARY) + ')' +\n '(?:' +\n '(?:-|/|,?\\\\s*)' +\n `(${YEAR_PATTERN}(?![^\\\\s]\\\\d))` +\n ')?' +\n '(?=\\\\W|$)', 'i'\n );\n\nconst WEEKDAY_GROUP = 1;\nconst DATE_GROUP = 2;\nconst DATE_TO_GROUP = 3;\nconst MONTH_NAME_GROUP = 4;\nconst YEAR_GROUP = 5;\n\nexport default class ENMonthNameLittleEndianParser implements Parser {\n\n pattern(): RegExp {\n return PATTERN;\n }\n\n extract(context: ParsingContext, match: RegExpMatchArray): ParsingResult {\n //console.log(match)\n\n const result = context.createParsingResult(match.index, match[0]);\n\n const month = MONTH_DICTIONARY[match[MONTH_NAME_GROUP].toLowerCase()];\n const day = parseOrdinalNumberPattern(match[DATE_GROUP]);\n\n result.start.assign('month', month);\n result.start.assign('day', day);\n\n if (match[WEEKDAY_GROUP]) {\n const weekday = WEEKDAY_DICTIONARY[match[WEEKDAY_GROUP].toLowerCase()]\n result.start.assign('weekday', weekday);\n }\n\n if (match[YEAR_GROUP]) {\n const yearNumber = parseYear(match[YEAR_GROUP])\n result.start.assign('year', yearNumber)\n } else {\n const year = findYearClosestToRef(context.refDate, day, month);\n result.start.imply('year', year)\n }\n\n if (match[DATE_TO_GROUP]) {\n const endDate = parseOrdinalNumberPattern(match[DATE_TO_GROUP]);\n\n result.end = result.start.clone();\n result.end.assign('day', endDate);\n }\n\n return result;\n }\n}\n","import {Parser, ParsingContext} from \"../../../chrono\";\nimport {findYearClosestToRef} from \"../../../calculation/yearCalculation\";\nimport {MONTH_DICTIONARY, WEEKDAY_DICTIONARY} from \"../constants\";\nimport {ORDINAL_NUMBER_PATTERN, parseOrdinalNumberPattern} from \"../constants\";\nimport {YEAR_PATTERN, parseYear} from \"../constants\";\nimport {matchAnyPattern} from \"../../../utils/pattern\";\n\nconst PATTERN = new RegExp(\n '(?:' +\n '(?:on\\\\s*?)?' +\n `(${matchAnyPattern(WEEKDAY_DICTIONARY)})` +\n '\\\\s*,?\\\\s*)?' +\n `(${matchAnyPattern(MONTH_DICTIONARY)})` +\n '(?:-|/|\\\\s*,?\\\\s*)' +\n `(${ORDINAL_NUMBER_PATTERN})(?!\\\\s*(?:am|pm))\\\\s*`+\n '(?:' +\n '(?:to|\\\\-)\\\\s*' +\n `(${ORDINAL_NUMBER_PATTERN})\\\\s*` +\n ')?' +\n '(?:' +\n '(?:-|/|\\\\s*,?\\\\s*)' +\n `(${YEAR_PATTERN})` +\n ')?' +\n '(?=\\\\W|$)(?!\\\\:\\\\d)', 'i');\n\nconst WEEKDAY_GROUP = 1;\nconst MONTH_NAME_GROUP = 2;\nconst DATE_GROUP = 3;\nconst DATE_TO_GROUP = 4;\nconst YEAR_GROUP = 5;\n\n/**\n * The parser for parsing US's date format that begin with month's name.\n * - January 13\n * - January 13, 2012\n * - January 13 - 15, 2012\n * - Tuesday, January 13, 2012\n * Note: Watch out for:\n * - January 12:00\n * - January 12.44\n * - January 1222344\n */\nexport default class ENMonthNameMiddleEndianParser implements Parser {\n\n pattern(): RegExp {\n return PATTERN;\n }\n\n extract(context: ParsingContext, match: RegExpMatchArray) {\n\n const month = MONTH_DICTIONARY[match[MONTH_NAME_GROUP].toLowerCase()];\n const day = parseOrdinalNumberPattern(match[DATE_GROUP]);\n\n const components = context.createParsingComponents({\n 'day': day, 'month': month\n });\n\n if (match[YEAR_GROUP]) {\n const year = parseYear(match[YEAR_GROUP])\n components.assign('year', year)\n } else {\n const year = findYearClosestToRef(context.refDate, day, month)\n components.imply('year', year)\n }\n\n // Weekday component\n if (match[WEEKDAY_GROUP]) {\n const weekday = WEEKDAY_DICTIONARY[match[WEEKDAY_GROUP].toLowerCase()]\n components.assign('weekday', weekday);\n }\n\n if (!match[DATE_TO_GROUP]) {\n return components\n }\n\n // Text can be 'range' value. Such as 'January 12 - 13, 2012'\n const endDate = parseOrdinalNumberPattern(match[DATE_TO_GROUP]);\n const result = context.createParsingResult(match.index, match[0])\n result.start = components;\n result.end = components.clone();\n result.end.assign('day', endDate);\n\n return result;\n }\n\n}","import {MONTH_DICTIONARY} from \"../constants\";\nimport {Parser, ParsingContext} from \"../../../chrono\";\nimport {findYearClosestToRef} from \"../../../calculation/yearCalculation\";\nimport {matchAnyPattern} from \"../../../utils/pattern\";\nimport {YEAR_PATTERN, parseYear} from \"../constants\";\n\nconst PATTERN = new RegExp(\n `(${matchAnyPattern(MONTH_DICTIONARY)})` +\n '\\\\s*' +\n '(?:' +\n `[,-]?\\\\s*(${YEAR_PATTERN})?` +\n ')?' +\n '(?=[^\\\\s\\\\w]|\\\\s+[^0-9]|\\\\s+$|$)', 'i');\n\nconst MONTH_NAME_GROUP = 1;\nconst YEAR_GROUP = 2;\n\n/**\n * The parser for parsing month name and year.\n * - January, 2012\n * - January 2012\n * - January\n */\nexport default class ENMonthNameParser implements Parser {\n\n pattern(): RegExp {return PATTERN; }\n\n extract(context: ParsingContext, match: RegExpMatchArray) {\n\n if (match[0].length <= 3) {\n return null;\n }\n\n const components = context.createParsingComponents()\n components.imply('day', 1);\n\n const monthName = match[MONTH_NAME_GROUP];\n const month = MONTH_DICTIONARY[monthName.toLowerCase()];\n components.assign('month', month);\n\n if (match[YEAR_GROUP]) {\n const year = parseYear(match[YEAR_GROUP]);\n components.assign('year', year)\n } else {\n const year = findYearClosestToRef(context.refDate, 1, month)\n components.imply('year', year)\n }\n\n return components;\n }\n}\n","import {Parser, ParsingContext} from \"../../../chrono\";\nimport {ParsingResult} from \"../../../results\";\nimport dayjs from \"dayjs\";\nimport {parseYear} from \"../constants\";\nimport {findYearClosestToRef} from \"../../../calculation/yearCalculation\";\n\n\nconst PATTERN = new RegExp('(\\\\W|^)' +\n '(?:' +\n '(?:on\\\\s*?)?' +\n '((?:sun|mon|tues?|wed(?:nes)?|thu(?:rs?)?|fri|sat(?:ur)?)(?:day)?)' +\n '\\\\s*\\\\,?\\\\s*' +\n ')?' +\n '([0-3]{0,1}[0-9]{1})[\\\\/\\\\.\\\\-]([0-3]{0,1}[0-9]{1})' +\n '(?:' +\n '[\\\\/\\\\.\\\\-]' +\n '([0-9]{4}\\\\s*\\\\,?\\\\s*|[0-9]{2}\\\\s*\\\\,?\\\\s*)' +\n ')?' +\n '(\\\\W|$)', 'i');\n\nconst DAYS_OFFSET = { 'sunday': 0, 'sun': 0, 'monday': 1, 'mon': 1,'tuesday': 2, 'wednesday': 3, 'wed': 3,\n 'thursday': 4, 'thur': 4,'friday': 5, 'fri': 5,'saturday': 6, 'sat': 6,}\n\n\nconst OPENING_GROUP = 1;\nconst ENDING_GROUP = 6;\n\nconst WEEKDAY_GROUP = 2;\n\nconst FIRST_NUMBERS_GROUP = 3;\nconst SECOND_NUMBERS_GROUP = 4;\n\nconst YEAR_GROUP = 5;\n\nexport default class ENSlashDateFormatParser implements Parser {\n groupNumberMonth: number;\n groupNumberDay: number;\n\n constructor(littleEndian: boolean) {\n this.groupNumberMonth = littleEndian ? SECOND_NUMBERS_GROUP : FIRST_NUMBERS_GROUP;\n this.groupNumberDay = littleEndian ? FIRST_NUMBERS_GROUP : SECOND_NUMBERS_GROUP;\n }\n\n pattern(): RegExp {\n return PATTERN;\n }\n\n extract(context: ParsingContext, match: RegExpMatchArray): ParsingResult {\n\n if(match[OPENING_GROUP] == '/' || match[ENDING_GROUP] == '/') {\n // Long skip, if there is some overlapping like:\n // XX[/YY/ZZ]\n // [XX/YY/]ZZ\n match.index += match[0].length\n return;\n }\n\n const index = match.index + match[OPENING_GROUP].length;\n const text = match[0].substr(match[OPENING_GROUP].length, match[0].length - match[ENDING_GROUP].length);\n\n // '1.12', '1.12.12' is more like a version numbers\n if(text.match(/^\\d\\.\\d$/) || text.match(/^\\d\\.\\d{1,2}\\.\\d{1,2}\\s*$/)) {\n return;\n }\n\n // MM/dd -> OK\n // MM.dd -> NG\n if(!match[YEAR_GROUP] && match[0].indexOf('/') < 0) {\n return;\n }\n\n const result = context.createParsingResult(index, text);\n let month = parseInt(match[this.groupNumberMonth]);\n let day = parseInt(match[this.groupNumberDay]);\n\n if(month < 1 || month > 12) {\n if(month > 12) {\n if (day >= 1 && day <= 12 && month <= 31) {\n [day, month] = [month, day]\n } else {\n return null;\n }\n }\n }\n\n if (day < 1 || day > 31) {\n return null;\n }\n\n result.start.assign('day', day);\n result.start.assign('month', month);\n\n if (match[YEAR_GROUP]) {\n const year = parseYear(match[YEAR_GROUP]) || dayjs(context.refDate).year();\n result.start.assign('year', year);\n } else {\n const year = findYearClosestToRef(context.refDate, day, month);\n result.start.imply('year', year);\n }\n\n //Day of week\n if(match[WEEKDAY_GROUP]) {\n result.start.assign('weekday', DAYS_OFFSET[match[WEEKDAY_GROUP].toLowerCase()]);\n }\n\n return result;\n }\n}\n","import {Parser, ParsingContext} from \"../../../chrono\";\nimport {MONTH_DICTIONARY} from \"../constants\";\nimport {matchAnyPattern} from \"../../../utils/pattern\";\n\n/*\n Date format with slash \"/\" between numbers like ENSlashDateFormatParser,\n but this parser expect year before month and date.\n - YYYY/MM/DD\n - YYYY-MM-DD\n - YYYY.MM.DD\n*/\nconst PATTERN = new RegExp('([0-9]{4})[\\\\.\\\\/]'\n + '(?:(' + matchAnyPattern(MONTH_DICTIONARY) + ')|([0-9]{1,2}))[\\\\.\\\\/]'\n + '([0-9]{1,2})'\n + '(?=\\\\W|$)', 'i');\n\nconst YEAR_NUMBER_GROUP = 1;\nconst MONTH_NAME_GROUP = 2;\nconst MONTH_NUMBER_GROUP = 3;\nconst DATE_NUMBER_GROUP = 4;\n\nexport default class ENSlashDateFormatStartWithYearParser implements Parser {\n\n pattern(): RegExp { return PATTERN; }\n\n extract(context: ParsingContext, match: RegExpMatchArray) {\n\n const month = match[MONTH_NUMBER_GROUP] ? parseInt(match[MONTH_NUMBER_GROUP]) :\n MONTH_DICTIONARY[match[MONTH_NAME_GROUP].toLowerCase()];\n\n const year = parseInt(match[YEAR_NUMBER_GROUP]);\n const day = parseInt(match[DATE_NUMBER_GROUP]);\n\n return {\n 'day': day,\n 'month': month,\n 'year': year\n }\n }\n}\n","import {Parser, ParsingContext} from \"../../../chrono\";\nimport {ParsingComponents} from \"../../../results\";\n\nconst PATTERN = new RegExp(\n '([0-9]|0[1-9]|1[012])/([0-9]{4})' +\n '', 'i');\n\nconst MONTH_GROUP = 1;\nconst YEAR_GROUP = 2;\n\n/**\n * Month/Year date format with slash \"/\" (also \"-\" and \".\") between numbers\n * - 11/05\n * - 06/2005\n */\nexport default class ENSlashMonthFormatParser implements Parser {\n\n pattern(): RegExp {\n return PATTERN;\n }\n\n extract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents {\n\n const year = parseInt(match[YEAR_GROUP]);\n const month = parseInt(match[MONTH_GROUP]);\n\n return context.createParsingComponents()\n .imply('day', 1)\n .assign('month', month)\n .assign('year', year)\n }\n}\n","import {Parser, ParsingContext} from \"../../../chrono\";\nimport {ParsingResult} from \"../../../results\";\nimport dayjs from \"dayjs\";\nimport {Meridiem} from \"../../../index\";\n\nconst FIRST_REG_PATTERN = new RegExp(\"(^|\\\\s|T)\" +\n \"(?:(?:at|from)\\\\s*)??\" +\n \"(\\\\d{1,4}|noon|midnight)\" +\n \"(?:\" +\n \"(?:\\\\.|\\\\:|\\\\:)(\\\\d{1,2})\" +\n \"(?:\" +\n \"(?:\\\\:|\\\\:)(\\\\d{2})(?:\\\\.(\\\\d{1,6}))?\" +\n \")?\" +\n \")?\" +\n \"(?:\\\\s*(a\\\\.m\\\\.|p\\\\.m\\\\.|am?|pm?|o\\\\W*clock))?\" +\n \"(?=\\\\W|$)\", 'i');\n\nconst SECOND_REG_PATTERN = new RegExp(\"^\\\\s*\" +\n \"(\\\\-|\\\\–|\\\\~|\\\\〜|to|\\\\?)\\\\s*\" +\n \"(\\\\d{1,4})\" +\n \"(?:\" +\n \"(?:\\\\.|\\\\:|\\\\:)(\\\\d{1,2})\" +\n \"(?:\" +\n \"(?:\\\\.|\\\\:|\\\\:)(\\\\d{1,2})(?:\\\\.(\\\\d{1,6}))?\" +\n \")?\" +\n \")?\" +\n \"(?:\\\\s*(a\\\\.m\\\\.|p\\\\.m\\\\.|am?|pm?|o\\\\W*clock|at night))?\" +\n \"(?=\\\\W|$)\", 'i');\n\nconst HOUR_GROUP = 2;\nconst MINUTE_GROUP = 3;\nconst SECOND_GROUP = 4;\nconst MILLI_SECOND_GROUP = 5;\nconst AM_PM_HOUR_GROUP = 6;\n\nexport default class ENTimeExpressionParser implements Parser {\n\n pattern(): RegExp {\n return FIRST_REG_PATTERN;\n }\n\n extract(context: ParsingContext, match: RegExpMatchArray): ParsingResult {\n const refDate = dayjs(context.refDate);\n let result = context.createParsingResult(\n match.index + match[1].length, match[0].substring(match[1].length));\n\n if (result.text.match(/^\\d$/)) {\n return null;\n }\n\n result.start.imply('day', refDate.date());\n result.start.imply('month', refDate.month()+1);\n result.start.imply('year', refDate.year());\n\n result = ENTimeExpressionParser.extractStartTimeComponent(result.clone(), match)\n if (!result) {\n return null;\n }\n\n const remainingText = context.text.substring(match.index + match[0].length)\n match = SECOND_REG_PATTERN.exec(remainingText);\n if (!match) {\n return result;\n }\n\n // Pattern \"YY.YY -XXXX\" is more like timezone offset\n if (match[0].match(/^\\s*([+-])\\s*\\d{3,4}$/)) {\n return result;\n }\n\n const newResult = ENTimeExpressionParser.extractEndTimeComponent(result.clone(), match);\n return newResult ? newResult : result;\n }\n\n private static extractStartTimeComponent(result: ParsingResult, match: RegExpMatchArray) : ParsingResult | null {\n\n let hour = 0;\n let minute = 0;\n let meridiem = null;\n\n // ----- Hours\n if (match[HOUR_GROUP].toLowerCase() == \"noon\"){\n meridiem = Meridiem.PM;\n hour = 12;\n } else if (match[HOUR_GROUP].toLowerCase() == \"midnight\") {\n meridiem = Meridiem.AM;\n hour = 0;\n } else {\n hour = parseInt(match[HOUR_GROUP]);\n }\n\n // ----- Minutes\n if(match[MINUTE_GROUP] != null){\n minute = parseInt(match[MINUTE_GROUP]);\n } else if(hour > 100) {\n minute = hour%100;\n hour = Math.floor(hour/100);\n }\n\n if(minute >= 60 || hour > 24) {\n return null;\n }\n\n if (hour >= 12) {\n meridiem = Meridiem.PM;\n }\n\n // ----- AM & PM\n if(match[AM_PM_HOUR_GROUP] != null) {\n if(hour > 12) return null;\n const ampm = match[AM_PM_HOUR_GROUP][0].toLowerCase();\n if(ampm == \"a\"){\n meridiem = Meridiem.AM;\n if (hour == 12) {\n hour = 0;\n }\n }\n\n if(ampm == \"p\"){\n meridiem = Meridiem.PM;\n if (hour != 12) {\n hour += 12;\n }\n }\n }\n\n result.start.assign('hour', hour);\n result.start.assign('minute', minute);\n\n if (meridiem !== null) {\n result.start.assign('meridiem', meridiem);\n } else {\n if (hour < 12) {\n result.start.imply('meridiem', Meridiem.AM);\n } else {\n result.start.imply('meridiem', Meridiem.PM);\n }\n }\n\n // ----- Millisecond\n if(match[MILLI_SECOND_GROUP] != null) {\n const millisecond = parseInt(match[MILLI_SECOND_GROUP].substring(0, 3));\n if(millisecond >= 1000) return null;\n\n result.start.assign('millisecond', millisecond);\n }\n\n // ----- Second\n if(match[SECOND_GROUP] != null){\n const second = parseInt(match[SECOND_GROUP]);\n if(second >= 60) return null;\n\n result.start.assign('second', second);\n }\n\n return result;\n }\n\n private static extractEndTimeComponent(result: ParsingResult, match: RegExpMatchArray) : ParsingResult | null {\n\n result.end = result.start.clone();\n\n // ----- Millisecond\n if(match[MILLI_SECOND_GROUP] != null){\n const millisecond = parseInt(match[MILLI_SECOND_GROUP].substring(0, 3));\n if(millisecond >= 1000) return null;\n\n result.end.assign('millisecond', millisecond);\n }\n\n // ----- Second\n if(match[SECOND_GROUP] != null){\n const second = parseInt(match[SECOND_GROUP]);\n if(second >= 60) return null;\n\n result.end.assign('second', second);\n }\n\n\n let hour = parseInt(match[HOUR_GROUP]);\n let minute = 0;\n let meridiem = -1;\n\n // ----- Minute\n if (match[MINUTE_GROUP] != null) {\n\n minute = parseInt(match[MINUTE_GROUP]);\n\n } else if (hour > 100) {\n\n minute = hour%100;\n hour = Math.floor(hour/100);\n }\n\n if(minute >= 60 || hour > 24) {\n return null;\n }\n\n if (hour >= 12) {\n meridiem = Meridiem.PM;\n }\n\n // ----- AM & PM\n if (match[AM_PM_HOUR_GROUP] != null) {\n if (hour > 12) {\n return null;\n }\n\n const ampm = match[AM_PM_HOUR_GROUP][0].toLowerCase();\n if(ampm == \"a\"){\n meridiem = Meridiem.AM;\n if(hour == 12) {\n hour = 0;\n if (!result.end.isCertain('day')) {\n result.end.imply('day', result.end.get('day') + 1);\n }\n }\n }\n\n if(ampm == \"p\"){\n meridiem = Meridiem.PM;\n if(hour != 12) hour += 12;\n }\n\n if (!result.start.isCertain('meridiem')) {\n if (meridiem == Meridiem.AM) {\n\n result.start.imply('meridiem', Meridiem.AM);\n\n if (result.start.get('hour') == 12) {\n result.start.assign('hour', 0);\n }\n\n } else {\n\n result.start.imply('meridiem', Meridiem.PM);\n\n if (result.start.get('hour') != 12) {\n result.start.assign('hour', result.start.get('hour') + 12);\n }\n }\n }\n }\n\n result.text = result.text + match[0];\n result.end.assign('hour', hour);\n result.end.assign('minute', minute);\n\n if (meridiem >= 0) {\n result.end.assign('meridiem', meridiem);\n } else {\n const startAtPM = result.start.isCertain('meridiem') && result.start.get('meridiem') == Meridiem.PM;\n if (startAtPM && result.start.get('hour') > hour) {\n // 10pm - 1 (am)\n result.end.imply('meridiem', Meridiem.AM);\n\n } else if (hour > 12) {\n result.end.imply('meridiem', Meridiem.PM);\n }\n }\n\n if (result.end.date().getTime() < result.start.date().getTime()) {\n result.end.imply('day', result.end.get('day') + 1)\n }\n\n return result;\n }\n}\n","import {Parser, ParsingContext} from \"../../../chrono\";\nimport {\n parseTimeUnits,\n TIME_UNITS_PATTERN\n} from \"../constants\";\nimport {ParsingComponents} from \"../../../results\";\n\n\nconst PATTERN = new RegExp('' +\n '(?:within\\\\s*)?' +\n '(' + TIME_UNITS_PATTERN + ')' +\n '(?:ago|before|earlier)(?=(?:\\\\W|$))', 'i');\n\nconst STRICT_PATTERN = new RegExp('' +\n '(?<=\\\\W|^)' +\n '(?:within\\\\s*)?' +\n '(' + TIME_UNITS_PATTERN + ')' +\n 'ago(?=(?:\\\\W|$))', 'i');\n\nexport default class ENTimeUnitAgoFormatParser implements Parser {\n\n constructor(private strictMode: boolean) {}\n\n pattern(): RegExp { return this.strictMode ? STRICT_PATTERN : PATTERN; }\n\n extract(context: ParsingContext, match: RegExpMatchArray) {\n\n const fragments = parseTimeUnits(match[1]);\n for (const key in fragments) {\n fragments[key] = -fragments[key];\n }\n\n return ParsingComponents.createRelativeFromRefDate(context.refDate, fragments);\n }\n}\n","import {Parser, ParsingContext} from \"../../../chrono\";\nimport {\n parseTimeUnits,\n TIME_UNITS_PATTERN\n} from \"../constants\";\nimport {ParsingComponents} from \"../../../results\";\n\n\nconst PATTERN = new RegExp('' +\n '(' + TIME_UNITS_PATTERN + ')' +\n '(later|after|from now|henceforth|forward|out)' +\n '(?=(?:\\\\W|$))',\n'i');\n\nconst STRICT_PATTERN = new RegExp('' +\n '(' + TIME_UNITS_PATTERN + ')' +\n '(later|from now)' +\n '(?=(?:\\\\W|$))',\n'i');\n\nconst GROUP_NUM_SUFFIX = 2\nconst GROUP_NUM_TIMEUNITS = 1\n\nexport default class ENTimeUnitLaterFormatParser implements Parser {\n\n constructor(private strictMode: boolean) {}\n\n pattern(): RegExp { return this.strictMode ? STRICT_PATTERN : PATTERN; }\n\n extract(context: ParsingContext, match: RegExpMatchArray) {\n\n const suffix = match[GROUP_NUM_SUFFIX].toLowerCase().trim();\n if (!suffix) {\n return null;\n }\n\n const fragments = parseTimeUnits(match[GROUP_NUM_TIMEUNITS]);\n return ParsingComponents.createRelativeFromRefDate(context.refDate, fragments);\n }\n}\n","import {ParsingContext, Refiner} from \"../chrono\";\nimport {ParsingResult} from \"../results\";\n\nexport abstract class Filter implements Refiner {\n\n abstract isValid(context: ParsingContext, result: ParsingResult): boolean;\n\n refine(context: ParsingContext, results: ParsingResult[]): ParsingResult[] {\n return results.filter(r => this.isValid(context, r));\n }\n}\n\nexport abstract class MergingRefiner implements Refiner {\n\n abstract shouldMergeResults(textBetween: string, currentResult: ParsingResult, nextResult: ParsingResult, context: ParsingContext): boolean;\n\n abstract mergeResults(textBetween: string, currentResult: ParsingResult, nextResult: ParsingResult, context: ParsingContext): ParsingResult;\n\n refine(context: ParsingContext, results: ParsingResult[]): ParsingResult[] {\n\n if (results.length < 2) {\n return results;\n }\n\n const mergedResults: ParsingResult[] = [];\n let curResult = results[0];\n let nextResult = null;\n\n for (let i=1; i {\n console.log(`${this.constructor.name} merged ${left} and ${right} into ${mergedResult}`)\n })\n\n curResult = mergedResult;\n }\n }\n\n if (curResult != null) {\n mergedResults.push(curResult);\n }\n\n return mergedResults;\n }\n}","/*\n \n*/\n\nimport {ParsingResult} from \"../../results\";\nimport {MergingRefiner} from \"../abstractRefiners\";\n\nexport default abstract class AbstractMergeDateRangeRefiner extends MergingRefiner {\n\n abstract patternBetween(): RegExp\n\n shouldMergeResults(textBetween, currentResult, nextResult): boolean {\n return (!currentResult.end && !nextResult.end)\n && textBetween.match(this.patternBetween()) != null;\n }\n\n mergeResults(textBetween, fromResult, toResult): ParsingResult {\n\n if (!fromResult.start.isOnlyWeekdayComponent() && !toResult.start.isOnlyWeekdayComponent()) {\n\n toResult.start.getCertainComponents().forEach(key => {\n if (!fromResult.start.isCertain(key)) {\n fromResult.start.assign(key, toResult.start.get(key));\n }\n })\n\n fromResult.start.getCertainComponents().forEach(key => {\n if (!toResult.start.isCertain(key)) {\n toResult.start.assign(key, fromResult.start.get(key));\n }\n })\n }\n\n if (fromResult.start.date().getTime() > toResult.start.date().getTime()) {\n let fromMoment = fromResult.start.dayjs();\n let toMoment = toResult.start.dayjs();\n\n if (fromResult.start.isOnlyWeekdayComponent() && fromMoment.add(-7, 'days').isBefore(toMoment)) {\n fromMoment = fromMoment.add(-7, 'days');\n fromResult.start.imply('day', fromMoment.date());\n fromResult.start.imply('month', fromMoment.month() + 1);\n fromResult.start.imply('year', fromMoment.year());\n } else if (toResult.start.isOnlyWeekdayComponent() && toMoment.add(7, 'days').isAfter(fromMoment)) {\n toMoment = toMoment.add(7, 'days');\n toResult.start.imply('day', toMoment.date());\n toResult.start.imply('month', toMoment.month() + 1);\n toResult.start.imply('year', toMoment.year());\n } else {\n [toResult, fromResult] = [fromResult, toResult];\n }\n }\n\n const result = fromResult.clone();\n result.start = fromResult.start;\n result.end = toResult.start;\n result.index = Math.min(fromResult.index, toResult.index);\n if (fromResult.index < toResult.index) {\n result.text = fromResult.text + textBetween + toResult.text;\n } else {\n result.text = toResult.text + textBetween + fromResult.text;\n }\n\n return result;\n }\n}\n\n","/*\n \n*/\n\n\nimport AbstractMergeDateRangeRefiner from \"../../../common/refiners/AbstractMergeDateRangeRefiner\";\n\n/**\n * Merging before and after results (see. AbstractMergeDateRangeRefiner)\n * This implementation should provide English connecting phases\n * - 2020-02-13 [to] 2020-02-13\n * - Wednesday [-] Friday\n */\nexport default class ENMergeDateRangeRefiner extends AbstractMergeDateRangeRefiner {\n\n patternBetween(): RegExp {\n return /^\\s*(to|-)\\s*$/i;\n }\n}\n\n","import {ParsingComponents, ParsingResult} from \"../results\";\nimport {Meridiem} from \"../index\";\n\nexport function mergeDateTimeResult(\n dateResult: ParsingResult,\n timeResult: ParsingResult): ParsingResult {\n\n const result = dateResult.clone();\n const beginDate = dateResult.start;\n const beginTime = timeResult.start;\n\n result.start = mergeDateTimeComponent(beginDate, beginTime);\n if (dateResult.end != null || timeResult.end != null) {\n const endDate = dateResult.end == null ? dateResult.start : dateResult.end;\n const endTime = timeResult.end == null ? timeResult.start : timeResult.end;\n const endDateTime = mergeDateTimeComponent(endDate, endTime);\n\n if (dateResult.end == null && endDateTime.date().getTime() < result.start .date().getTime()) {\n // Ex. 9pm - 1am\n if (endDateTime.isCertain('day')) {\n endDateTime.assign('day', endDateTime.get('day') + 1);\n } else {\n endDateTime.imply('day', endDateTime.get('day') + 1);\n }\n }\n\n result.end = endDateTime;\n }\n\n return result;\n}\n\nexport function mergeDateTimeComponent(dateComponent: ParsingComponents, timeComponent: ParsingComponents): ParsingComponents {\n const dateTimeComponent = dateComponent.clone();\n\n if (timeComponent.isCertain('hour')) {\n dateTimeComponent.assign('hour', timeComponent.get('hour'));\n dateTimeComponent.assign('minute', timeComponent.get('minute'));\n\n if (timeComponent.isCertain('second')) {\n dateTimeComponent.assign('second', timeComponent.get('second'));\n\n if (timeComponent.isCertain('millisecond')) {\n dateTimeComponent.assign('millisecond', timeComponent.get('millisecond'));\n } else {\n dateTimeComponent.imply('millisecond', timeComponent.get('millisecond'));\n }\n } else {\n dateTimeComponent.imply('second', timeComponent.get('second'));\n dateTimeComponent.imply('millisecond', timeComponent.get('millisecond'));\n }\n\n } else {\n dateTimeComponent.imply('hour', timeComponent.get('hour'));\n dateTimeComponent.imply('minute', timeComponent.get('minute'));\n dateTimeComponent.imply('second', timeComponent.get('second'));\n dateTimeComponent.imply('millisecond', timeComponent.get('millisecond'));\n }\n\n if (timeComponent.isCertain('timezoneOffset')) {\n dateTimeComponent.assign('timezoneOffset', timeComponent.get('timezoneOffset'))\n }\n\n if (timeComponent.isCertain('meridiem')) {\n dateTimeComponent.assign('meridiem', timeComponent.get('meridiem'));\n } else if (\n timeComponent.get('meridiem') != null && dateTimeComponent.get('meridiem') == null\n ) {\n dateTimeComponent.imply('meridiem', timeComponent.get('meridiem'));\n }\n\n if (dateTimeComponent.get('meridiem') == Meridiem.PM && dateTimeComponent.get('hour') < 12) {\n if (timeComponent.isCertain('hour')) {\n dateTimeComponent.assign('hour', dateTimeComponent.get('hour') + 12);\n } else {\n dateTimeComponent.imply('hour', dateTimeComponent.get('hour') + 12);\n }\n }\n\n return dateTimeComponent;\n}\n\n","import AbstractMergeDateTimeRefiner from \"../../../common/refiners/AbstractMergeDateTimeRefiner\";\n\n/**\n * Merging date-only result and time-only result (see. AbstractMergeDateTimeRefiner).\n * This implementation should provide English connecting phases\n * - 2020-02-13 [at] 6pm\n * - Tomorrow [after] 7am\n */\nexport default class ENMergeDateTimeRefiner extends AbstractMergeDateTimeRefiner {\n patternBetween(): RegExp {\n return new RegExp(\"^\\\\s*(T|at|after|before|on|of|,|-)?\\\\s*$\");\n }\n}\n\n","/*\n\n*/\n\n\nimport {MergingRefiner} from \"../abstractRefiners\";\nimport {ParsingResult} from \"../../results\";\nimport {mergeDateTimeResult} from \"../../calculation/mergingCalculation\";\n\n\nexport default abstract class ENMergeDateTimeRefiner extends MergingRefiner {\n\n abstract patternBetween(): RegExp\n\n shouldMergeResults(textBetween: string, currentResult: ParsingResult, nextResult: ParsingResult): boolean {\n return (\n (currentResult.start.isOnlyDate() && nextResult.start.isOnlyTime()) ||\n (nextResult.start.isOnlyDate() && currentResult.start.isOnlyTime())\n )\n && textBetween.match(this.patternBetween()) != null;\n }\n\n mergeResults(textBetween: string, currentResult: ParsingResult, nextResult: ParsingResult): ParsingResult {\n\n const result = currentResult.start.isOnlyDate() ?\n mergeDateTimeResult(currentResult, nextResult):\n mergeDateTimeResult(nextResult, currentResult);\n\n result.index = currentResult.index;\n result.text = currentResult.text + textBetween + nextResult.text;\n return result;\n }\n}\n\n","\n// Map ABBR -> Offset in minute\nimport {ParsingContext, Refiner} from \"../../chrono\";\nimport {ParsingResult} from \"../../results\";\n\nconst TIMEZONE_NAME_PATTERN = new RegExp(\"^\\\\s*\\\\(?([A-Z]{2,4})\\\\)?(?=\\\\W|$)\", 'i');\nconst DEFAULT_TIMEZONE_ABBR_MAP = {\n \"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\n};\n\nexport default class ExtractTimezoneAbbrRefiner implements Refiner {\n\n private readonly timezone: {string: number}\n\n constructor(timezoneOverrides? : {string: number}) {\n this.timezone = {...DEFAULT_TIMEZONE_ABBR_MAP, ...timezoneOverrides};\n }\n\n refine(context: ParsingContext, results: ParsingResult[]): ParsingResult[] {\n const timezones = {...this.timezone, ...context.option.timezones};\n results.forEach((result) => {\n const suffix = context.text.substring(result.index + result.text.length)\n const match = TIMEZONE_NAME_PATTERN.exec(suffix);\n if (match) {\n const timezoneAbbr = match[1].toUpperCase();\n if (timezones[timezoneAbbr] === undefined) {\n return;\n }\n\n const timezoneOffset = timezones[timezoneAbbr];\n if (!result.start.isCertain('timezoneOffset')) {\n result.start.assign('timezoneOffset', timezoneOffset);\n }\n\n if (result.end != null && !result.end.isCertain('timezoneOffset')) {\n result.end.assign('timezoneOffset', timezoneOffset);\n }\n\n result.text += match[0];\n }\n });\n\n return results;\n }\n}","/*\n \n*/\n\n\nimport {ParsingContext, Refiner} from \"../../chrono\";\nimport {ParsingResult} from \"../../results\";\n\nconst TIMEZONE_OFFSET_PATTERN = new RegExp(\"^\\\\s*(GMT|UTC)?([+-])(\\\\d{1,2}):?(\\\\d{2})\", 'i');\nconst TIMEZONE_OFFSET_SIGN_GROUP = 2;\nconst TIMEZONE_OFFSET_HOUR_OFFSET_GROUP = 3;\nconst TIMEZONE_OFFSET_MINUTE_OFFSET_GROUP = 4;\n\nexport default class ExtractTimezoneOffsetRefiner implements Refiner {\n\n refine(context: ParsingContext, results: ParsingResult[]): ParsingResult[] {\n\n results.forEach(function(result) {\n if (result.start.isCertain('timezoneOffset')) {\n return;\n }\n\n const suffix = context.text.substring(result.index + result.text.length);\n const match = TIMEZONE_OFFSET_PATTERN.exec(suffix);\n if (!match) {\n return;\n }\n\n context.debug(() => {\n console.log(`Extracting timezone: '${match[0]}' into : ${result}`)\n })\n\n const hourOffset = parseInt(match[TIMEZONE_OFFSET_HOUR_OFFSET_GROUP]);\n const minuteOffset = parseInt(match[TIMEZONE_OFFSET_MINUTE_OFFSET_GROUP]);\n let timezoneOffset = hourOffset * 60 + minuteOffset;\n if (match[TIMEZONE_OFFSET_SIGN_GROUP] === '-') {\n timezoneOffset = -timezoneOffset;\n }\n\n if (result.end != null) {\n result.end.assign('timezoneOffset', timezoneOffset);\n }\n\n result.start.assign('timezoneOffset', timezoneOffset);\n result.text += match[0];\n });\n\n return results;\n }\n}\n","/*\n \n*/\n\nimport {ParsingContext, Refiner} from \"../../chrono\";\nimport {ParsingResult} from \"../../results\";\n\nexport default class OverlapRemovalRefiner implements Refiner {\n\n refine(context: ParsingContext, results: ParsingResult[]): ParsingResult[] {\n if (results.length < 2) {\n return results;\n }\n \n const filteredResults = [];\n\n let prevResult = results[0];\n for (let i=1; i prevResult.text.length){\n prevResult = result;\n }\n \n } else {\n filteredResults.push(prevResult);\n prevResult = result;\n }\n }\n \n // The last one\n if (prevResult != null) {\n filteredResults.push(prevResult);\n }\n\n return filteredResults;\n }\n}","/*\n Enforce 'forwardDate' option to on the results. When there are missing component,\n e.g. \"March 12-13 (without year)\" or \"Thursday\", the refiner will try to adjust the result\n into the future instead of the past.\n*/\n\nimport {ParsingContext, Refiner} from \"../../chrono\";\nimport {ParsingResult} from \"../../results\";\nimport dayjs from \"dayjs\";\n\nexport default class ForwardDateRefiner implements Refiner {\n\n refine(context: ParsingContext, results: ParsingResult[]): ParsingResult[] {\n\n if (!context.option.forwardDate) {\n return results;\n }\n\n results.forEach(function(result) {\n let refMoment = dayjs(context.refDate);\n\n if (result.start.isOnlyDayMonthComponent() && refMoment.isAfter(result.start.dayjs())) {\n\n for (let i=0; i < 3 && refMoment.isAfter(result.start.dayjs()); i++) {\n result.start.imply('year', result.start.get('year') + 1);\n context.debug(() => {\n console.log(`Forward yearly adjusted for ${result} (${result.start})`)\n });\n\n if (result.end && !result.end.isCertain('year')) {\n result.end.imply('year', result.end.get('year') + 1);\n context.debug(() => {\n console.log(`Forward yearly adjusted for ${result} (${result.end})`)\n });\n }\n }\n }\n\n if (result.start.isOnlyWeekdayComponent() && refMoment.isAfter(result.start.dayjs())) {\n\n if (refMoment.day() > result.start.get('weekday')) {\n refMoment = refMoment.day(result.start.get('weekday') + 7);\n } else {\n refMoment = refMoment.day(result.start.get('weekday'));\n }\n\n result.start.imply('day', refMoment.date());\n result.start.imply('month', refMoment.month() + 1);\n result.start.imply('year', refMoment.year());\n context.debug(() => {\n console.log(`Forward weekly adjusted for ${result} (${result.start})`)\n });\n\n if (result.end && result.end.isOnlyWeekdayComponent()) {\n // Adjust date to the coming week\n if (refMoment.day() > result.end.get('weekday')) {\n refMoment = refMoment.day(result.end.get('weekday') + 7);\n } else {\n refMoment = refMoment.day(result.end.get('weekday'));\n }\n\n result.end.imply('day', refMoment.date());\n result.end.imply('month', refMoment.month() + 1);\n result.end.imply('year', refMoment.year());\n context.debug(() => {\n console.log(`Forward weekly adjusted for ${result} (${result.end})`)\n });\n }\n }\n });\n\n return results;\n }\n}\n","import {Filter} from \"../abstractRefiners\";\nimport {ParsingResult} from \"../../results\";\n\nexport default class UnlikelyFormatFilter extends Filter {\n\n isValid(context, result: ParsingResult): boolean {\n\n if (result.text.replace(' ','').match(/^\\d*(\\.\\d*)?$/)) {\n context.debug(() => {\n console.log(`Removing unlikely result '${result.text}'`)\n })\n\n return false;\n }\n\n if (!result.start.isValidDate()) {\n context.debug(() => {\n console.log(`Removing invalid result: ${result} (${result.start})`)\n });\n\n return false;\n }\n\n if (result.end && !result.end.isValidDate()) {\n context.debug(() => {\n console.log(`Removing invalid result: ${result} (${result.end})`)\n });\n\n return false;\n }\n\n return true;\n }\n}","import {Parser, ParsingContext} from \"../../chrono\";\nimport {Component} from \"../../index\";\n\n// ISO 8601\n// http://www.w3.org/TR/NOTE-datetime\n// - YYYY-MM-DD\n// - YYYY-MM-DDThh:mmTZD\n// - YYYY-MM-DDThh:mm:ssTZD\n// - YYYY-MM-DDThh:mm:ss.sTZD\n// - TZD = (Z or +hh:mm or -hh:mm)\nconst PATTERN = new RegExp(\n '([0-9]{4})\\\\-([0-9]{1,2})\\\\-([0-9]{1,2})'\n + '(?:T' //..\n + '([0-9]{1,2}):([0-9]{1,2})' // hh:mm\n + '(?::([0-9]{1,2})(?:\\\\.(\\\\d{1,4}))?)?' // :ss.s\n + '(?:Z|([+-]\\\\d{2}):?(\\\\d{2})?)?' // TZD (Z or ±hh:mm or ±hhmm or ±hh)\n + ')?' //..\n + '(?=\\\\W|$)', 'i');\n\nconst YEAR_NUMBER_GROUP = 1;\nconst MONTH_NUMBER_GROUP = 2;\nconst DATE_NUMBER_GROUP = 3;\nconst HOUR_NUMBER_GROUP = 4;\nconst MINUTE_NUMBER_GROUP = 5;\nconst SECOND_NUMBER_GROUP = 6;\nconst MILLISECOND_NUMBER_GROUP = 7;\nconst TZD_HOUR_OFFSET_GROUP = 8;\nconst TZD_MINUTE_OFFSET_GROUP = 9;\n\nexport default class ISOFormatParser implements Parser {\n\n pattern(): RegExp {\n return PATTERN;\n }\n\n extract(context: ParsingContext, match: RegExpMatchArray) : {[component: Component]: string | number}{\n const components: {[component: Component]: string | number} = {}\n components['year'] = parseInt(match[YEAR_NUMBER_GROUP])\n components['month'] = parseInt(match[MONTH_NUMBER_GROUP])\n components['day'] = parseInt(match[DATE_NUMBER_GROUP])\n\n if (match[HOUR_NUMBER_GROUP] != null) {\n components['hour'] = parseInt(match[HOUR_NUMBER_GROUP]);\n components['minute'] = parseInt(match[MINUTE_NUMBER_GROUP]);\n\n if (match[SECOND_NUMBER_GROUP] != null) {\n components['second'] = parseInt(match[SECOND_NUMBER_GROUP]);\n }\n\n if (match[MILLISECOND_NUMBER_GROUP] != null) {\n components['millisecond'] = parseInt(match[MILLISECOND_NUMBER_GROUP]);\n }\n\n if (match[TZD_HOUR_OFFSET_GROUP] == null) {\n components['timezoneOffset'] = 0;\n\n } else {\n const hourOffset = parseInt(match[TZD_HOUR_OFFSET_GROUP]);\n\n let minuteOffset = 0;\n if (match[TZD_MINUTE_OFFSET_GROUP] != null) {\n minuteOffset = parseInt(match[TZD_MINUTE_OFFSET_GROUP]);\n }\n\n let offset = hourOffset * 60;\n if (offset < 0) {\n offset -= minuteOffset;\n } else {\n offset += minuteOffset;\n }\n\n components['timezoneOffset'] = offset;\n }\n }\n\n return components;\n }\n}\n\n","import {Parser, ParsingContext} from \"../chrono\";\n\nexport function createParserWithWordBoundaryDetection(parser: Parser) : ParserWithWordEndingDetection {\n return new ParserWithWordEndingDetection(parser)\n}\n\nexport class ParserWithWordEndingDetection implements Parser {\n\n private original: Parser;\n\n constructor(parser: Parser) {\n this.original = parser;\n }\n\n pattern(context: ParsingContext): RegExp {\n const originalPattern = this.original.pattern(context);\n return new RegExp(`(\\\\W|^)${originalPattern.source}`, originalPattern.flags);\n }\n\n extract(context: ParsingContext, match: RegExpMatchArray) {\n\n const header = match[1]\n match.index = match.index + header.length\n match[0] = match[0].substring(header.length)\n for (let i=2; i 1) {\n targetDate = targetDate.add(1, 'day');\n }\n\n } else if (/^yesterday/.test(lowerText)) {\n\n targetDate = targetDate.add(-1, 'day');\n\n } else if(lowerText.match(/last\\s*night/)) {\n\n component.imply('hour', 0);\n if (targetDate.hour() > 6) {\n targetDate = targetDate.add(-1, 'day');\n }\n\n } else if (lowerText.match(\"now\")) {\n component.assign('hour', targetDate.hour());\n component.assign('minute', targetDate.minute());\n component.assign('second', targetDate.second());\n component.assign('millisecond', targetDate.millisecond());\n }\n\n component.assign('day', targetDate.date())\n component.assign('month', targetDate.month() + 1)\n component.assign('year', targetDate.year())\n return component;\n }\n}","import {Parser, ParsingContext} from \"../../../chrono\";\nimport {Meridiem} from \"../../../index\";\n\nexport default class ENCasualTimeParser implements Parser {\n\n pattern() { return /(?:this)?\\s*(morning|afternoon|evening|night|noon)(?=\\W|$)/i; }\n\n extract(context: ParsingContext, match: RegExpMatchArray) {\n const component = context.createParsingComponents()\n switch (match[1].toLowerCase()) {\n\n case 'afternoon':\n component.imply('meridiem', Meridiem.PM);\n component.imply('hour', 15);\n break;\n\n case 'evening':\n case 'night':\n component.imply('meridiem', Meridiem.PM);\n component.imply('hour', 20);\n break;\n\n case 'morning':\n component.imply('meridiem', Meridiem.AM);\n component.imply('hour', 6);\n break;\n\n case 'noon':\n component.imply('meridiem', Meridiem.AM);\n component.imply('hour', 12);\n break;\n }\n\n return component;\n }\n}\n","import {Parser, ParsingContext} from \"../../../chrono\";\nimport {ParsingComponents} from \"../../../results\";\nimport {WEEKDAY_DICTIONARY} from \"../constants\";\nimport dayjs, {Dayjs} from \"dayjs\";\nimport {matchAnyPattern} from \"../../../utils/pattern\";\n\nconst PATTERN = new RegExp(\n '(?:(?:\\\\,|\\\\(|\\\\()\\\\s*)?' +\n '(?:on\\\\s*?)?' +\n '(?:(this|last|past|next)\\\\s*)?' +\n `(${matchAnyPattern(WEEKDAY_DICTIONARY)})` +\n '(?:\\\\s*(?:\\\\,|\\\\)|\\\\)))?' +\n '(?:\\\\s*(this|last|past|next)\\\\s*week)?' +\n '(?=\\\\W|$)', 'i');\n\nconst PREFIX_GROUP = 1;\nconst WEEKDAY_GROUP = 2;\nconst POSTFIX_GROUP = 3;\n\nexport default class ENWeekdayParser implements Parser {\n\n pattern(): RegExp {\n return PATTERN;\n }\n\n extract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents {\n\n const dayOfWeek = match[WEEKDAY_GROUP].toLowerCase();\n const offset = WEEKDAY_DICTIONARY[dayOfWeek];\n if (offset === undefined) {\n return null;\n }\n\n const prefix = match[PREFIX_GROUP];\n const postfix = match[POSTFIX_GROUP];\n let modifier = prefix || postfix;\n modifier = modifier || '';\n modifier = modifier.toLowerCase();\n\n const date = this.extractWeekday(context.refDate, offset, modifier);\n return context.createParsingComponents()\n .assign('weekday', offset)\n .imply('day', date.date())\n .imply('month', date.month() + 1)\n .imply('year', date.year());\n }\n\n private extractWeekday(refDate: Date, offset, modifier?: string) : Dayjs {\n let date = dayjs(refDate);\n const refOffset = date.day();\n\n if(modifier == 'last' || modifier == 'past') {\n date = date.day(offset - 7);\n } else if(modifier == 'next') {\n date = date.day(offset + 7);\n } else if(modifier == 'this') {\n date = date.day(offset);\n } else {\n if (Math.abs(offset - 7 - refOffset) < Math.abs(offset - refOffset)) {\n date = date.day(offset - 7);\n } else if (Math.abs(offset + 7 - refOffset) < Math.abs(offset - refOffset)) {\n date = date.day(offset + 7);\n } else {\n date = date.day(offset);\n }\n }\n\n return date;\n }\n}\n","import {NUMBER_PATTERN, parseNumberPattern} from \"../constants\";\nimport {Parser, ParsingContext} from \"../../../chrono\";\nimport {ParsingComponents} from \"../../../results\";\nimport dayjs from \"dayjs\";\n\n\nconst PATTERN = new RegExp(\n '(this|next|last|past)\\\\s*' +\n `(${NUMBER_PATTERN})?\\\\s*` +\n '(seconds?|min(?:ute)?s?|hours?|days?|weeks?|months?|years?)(?=\\\\s*)' +\n '(?=\\\\W|$)', 'i'\n);\n\nconst MODIFIER_WORD_GROUP = 1;\nconst MULTIPLIER_WORD_GROUP = 2;\nconst RELATIVE_WORD_GROUP = 3;\n\nexport default class ENRelativeDateFormatParser implements Parser {\n\n pattern(): RegExp {return PATTERN; }\n extract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents {\n if (match[MODIFIER_WORD_GROUP].toLowerCase().match(/^this/)) {\n if (match[MULTIPLIER_WORD_GROUP]) {\n return null;\n }\n\n return this.extractThisReference(context, match[RELATIVE_WORD_GROUP]);\n }\n\n const modifier = match[MODIFIER_WORD_GROUP].toLowerCase().match(/^next/) ? 1 : -1;\n const parsedNum = match[MULTIPLIER_WORD_GROUP] ? parseNumberPattern(match[MULTIPLIER_WORD_GROUP]) : 1;\n const unitWord = match[RELATIVE_WORD_GROUP].toLowerCase()\n\n if (unitWord.match(/day|week|month|year/i)) {\n return this.extractDateReference(context, unitWord, parsedNum * modifier);\n } else {\n return this.extractTimeReference(context, unitWord, parsedNum * modifier)\n }\n }\n\n extractTimeReference(context: ParsingContext, timeUnitWord: string, num: number) {\n const components = context.createParsingComponents()\n let date = dayjs(context.refDate);\n\n if (timeUnitWord.match(/hour/i)) {\n\n date = date.add(num, 'hour');\n components.imply('minute', date.minute());\n components.imply('second', date.second());\n\n } else if (timeUnitWord.match(/min/i)) {\n\n date = date.add(num, 'minute');\n components.assign('minute', date.minute());\n components.imply('second', date.second());\n\n } else if (timeUnitWord.match(/second/i)) {\n\n date = date.add(num, 'second');\n components.assign('second', date.second());\n components.assign('minute', date.minute());\n }\n\n components.assign('hour', date.hour());\n components.assign('year', date.year());\n components.assign('month', date.month() + 1);\n components.assign('day', date.date());\n\n return components;\n }\n\n extractDateReference(context: ParsingContext, dateUnitWord: string, num: number) {\n const components = context.createParsingComponents()\n let date = dayjs(context.refDate);\n\n if (dateUnitWord.match(/day/i)) {\n date = date.add(num, 'd');\n components.assign('year', date.year());\n components.assign('month', date.month() + 1);\n components.assign('day', date.date());\n } else if (dateUnitWord.match(/week/i)) {\n date = date.add(num * 7, 'd');\n // We don't know the exact date for next/last week so we imply them\n components.imply('day', date.date());\n components.imply('month', date.month() + 1);\n components.imply('year', date.year());\n } else if (dateUnitWord.match(/month/i)) {\n date = date.add(num, 'month');\n // We don't know the exact day for next/last month\n components.imply('day', date.date());\n components.assign('year', date.year());\n components.assign('month', date.month() + 1);\n } else if (dateUnitWord.match(/year/i)) {\n date = date.add(num, 'year');\n // We don't know the exact day for month on next/last year\n components.imply('day', date.date());\n components.imply('month', date.month() + 1);\n components.assign('year', date.year());\n }\n\n return components;\n }\n\n extractThisReference(context: ParsingContext, relativeWord: string) {\n const components = context.createParsingComponents()\n let date = dayjs(context.refDate);\n\n // This week\n if (relativeWord.match(/week/i)) {\n date = date.add(-date.get('d'), 'd');\n components.imply('day', date.date());\n components.imply('month', date.month() + 1);\n components.imply('year', date.year());\n }\n\n // This month\n else if (relativeWord.match(/month/i)) {\n date = date.add(-date.date() + 1, 'd');\n components.imply('day', date.date());\n components.assign('year', date.year());\n components.assign('month', date.month() + 1);\n }\n\n // This year\n else if (relativeWord.match(/year/i)) {\n date = date.add(-date.date() + 1, 'd');\n date = date.add(-date.month(), 'month');\n\n components.imply('day', date.date());\n components.imply('month', date.month() + 1);\n components.assign('year', date.year());\n }\n\n return components;\n }\n}\n","import {ParsingComponents, ParsingResult} from \"./results\";\nimport {Component, ParsedResult, ParsingOption} from \"./index\";\nimport {AsyncDebugBlock, DebugHandler} from \"./debugging\";\nimport {createCasualConfiguration} from './locales/en';\n\nexport interface Configuration {\n parsers: Parser[],\n refiners: Refiner[]\n}\n\nexport interface Parser {\n pattern: (context: ParsingContext) => RegExp,\n extract: (context: ParsingContext, match: RegExpMatchArray) =>\n (ParsingComponents | ParsingResult | {[c: Component]: string|number} | null)\n}\n\nexport interface Refiner {\n refine: (context: ParsingContext, results: ParsingResult[]) => ParsingResult[]\n}\n\nexport class Chrono {\n parsers: Array\n refiners: Array\n\n constructor(configuration?: Configuration) {\n configuration = configuration || createCasualConfiguration();\n this.parsers = [...configuration.parsers];\n this.refiners = [...configuration.refiners];\n }\n\n parseDate(text, refDate, opt): Date {\n const results = this.parse(text, refDate, opt);\n return (results.length > 0) ? results[0].start.date() : null;\n }\n\n parse(text: string, refDate?: Date, opt?: ParsingOption): ParsedResult[] {\n const context = new ParsingContext(text,\n refDate || new Date(),\n opt || {})\n\n let results = [];\n this.parsers.forEach((parser) => {\n const parsedResults = Chrono.executeParser(context, parser);\n results = results.concat(parsedResults);\n });\n\n results.sort((a, b) => {\n return a.index - b.index;\n });\n\n this.refiners.forEach(function (refiner) {\n results = refiner.refine(context, results);\n });\n\n return results;\n }\n\n clone() : Chrono{\n return new Chrono({\n parsers: [...this.parsers],\n refiners: [...this.refiners]\n })\n }\n\n private static executeParser(context: ParsingContext, parser: Parser) {\n const results = [];\n const pattern = parser.pattern(context);\n\n const originalText = context.text;\n let remainingText = context.text;\n let match = pattern.exec(remainingText);\n\n while (match) {\n\n // Calculate match index on the full text;\n const index = match.index + originalText.length - remainingText.length\n match.index = index;\n\n const result = parser.extract(context, match);\n if (!result) {\n // If fail, move on by 1\n remainingText = originalText.substring(index + 1);\n match = pattern.exec(remainingText);\n continue;\n }\n\n let parsedResult: ParsingResult = null;\n if (result instanceof ParsingResult) {\n parsedResult = result;\n } else if (result instanceof ParsingComponents) {\n parsedResult = context.createParsingResult(match.index, match[0])\n parsedResult.start = result\n } else {\n parsedResult = context.createParsingResult(match.index, match[0], result)\n }\n\n context.debug(() =>\n console.log(`${parser.constructor.name} extracted result ${parsedResult}`))\n\n results.push(parsedResult);\n remainingText = originalText.substring(index + parsedResult.text.length);\n match = pattern.exec(remainingText);\n }\n\n return results;\n }\n}\n\nexport class ParsingContext implements DebugHandler {\n constructor(\n readonly text: string,\n readonly refDate: Date,\n readonly option: ParsingOption\n ) {}\n\n createParsingComponents(components?: {[c: Component]: string|number}) : ParsingComponents {\n return new ParsingComponents(this.refDate, components)\n }\n\n createParsingResult(\n index: number, textOrEndIndex: number | string,\n startComponents?: {[c: Component]: string|number},\n endComponents?: {[c: Component]: string|number}\n ) : ParsingResult {\n\n const text = (typeof textOrEndIndex === 'string') ? textOrEndIndex :\n this.text.substring(index, textOrEndIndex)\n\n const start = startComponents ? this.createParsingComponents(startComponents) : null\n const end = endComponents ? this.createParsingComponents(endComponents) : null\n\n return new ParsingResult(this.refDate, index, text, start, end)\n }\n\n debug(block: AsyncDebugBlock): void {\n if (this.option.debug) {\n if (this.option.debug instanceof Function) {\n this.option.debug(block)\n } else {\n const handler: DebugHandler = this.option.debug;\n handler.debug(block)\n }\n }\n }\n}\n","\n\nimport ENTimeUnitDeadlineFormatParser from \"./parsers/ENTimeUnitDeadlineFormatParser\";\nimport ENMonthNameLittleEndianParser from \"./parsers/ENMonthNameLittleEndianParser\";\nimport ENMonthNameMiddleEndianParser from \"./parsers/ENMonthNameMiddleEndianParser\";\nimport ENMonthNameParser from \"./parsers/ENMonthNameParser\";\nimport ENSlashDateFormatParser from \"./parsers/ENSlashDateFormatParser\";\nimport ENSlashDateFormatStartWithYearParser from \"./parsers/ENSlashDateFormatStartWithYearParser\";\nimport ENSlashMonthFormatParser from \"./parsers/ENSlashMonthFormatParser\";\nimport ENTimeExpressionParser from \"./parsers/ENTimeExpressionParser\";\nimport ENTimeUnitAgoFormatParser from \"./parsers/ENTimeUnitAgoFormatParser\";\nimport ENTimeUnitLaterFormatParser from \"./parsers/ENTimeUnitLaterFormatParser\";\nimport ENMergeDateRangeRefiner from \"./refiners/ENMergeDateRangeRefiner\";\nimport ENMergeDateTimeRefiner from \"./refiners/ENMergeDateTimeRefiner\";\n\nimport {includeCommonConfiguration} from \"../../configurations\";\nimport ENCasualDateParser from \"./parsers/ENCasualDateParser\";\nimport ENCasualTimeParser from \"./parsers/ENCasualTimeParser\";\nimport ENWeekdayParser from \"./parsers/ENWeekdayParser\";\nimport ENRelativeDateFormatParser from \"./parsers/ENRelativeDateFormatParser\";\n\nimport {ParsedResult, ParsingOption} from \"../../index\";\nimport {Chrono, Configuration} from \"../../chrono\";\nimport {createParserWithWordBoundaryDetection as withWordBoundary} from \"../../utils/ParserWithWordEndingDetection\";\n\n// Shortcuts\nexport const casual = new Chrono(createCasualConfiguration(false))\nexport const strict = new Chrono(createConfiguration(true, false))\n\nexport const GB = new Chrono(createConfiguration(false, true))\n\nexport function parse(text: string, ref?: Date, option?: ParsingOption): ParsedResult[] {\n return casual.parse(text, ref, option);\n}\n\nexport function parseDate(text: string, ref?: Date, option?: ParsingOption) : Date {\n return casual.parseDate(text, ref, option);\n}\n\nexport function createCasualConfiguration(littleEndian = false) : Configuration {\n const option = createConfiguration(false, littleEndian);\n option.parsers.unshift(withWordBoundary(new ENCasualDateParser()));\n option.parsers.unshift(withWordBoundary(new ENCasualTimeParser()));\n option.parsers.unshift(withWordBoundary(new ENWeekdayParser()));\n option.parsers.unshift(withWordBoundary(new ENRelativeDateFormatParser()));\n return option;\n}\n\nexport function createConfiguration(strictMode= true, littleEndian = false) : Configuration {\n return includeCommonConfiguration({\n parsers: [\n withWordBoundary(new ENTimeUnitDeadlineFormatParser(strictMode)),\n withWordBoundary(new ENMonthNameLittleEndianParser()),\n withWordBoundary(new ENMonthNameMiddleEndianParser()),\n withWordBoundary(new ENMonthNameParser()),\n new ENSlashDateFormatParser(littleEndian),\n withWordBoundary(new ENSlashDateFormatStartWithYearParser()),\n withWordBoundary(new ENSlashMonthFormatParser()),\n new ENTimeExpressionParser(),\n withWordBoundary(new ENTimeUnitAgoFormatParser(strictMode)),\n withWordBoundary(new ENTimeUnitLaterFormatParser(strictMode)),\n ],\n refiners: [\n new ENMergeDateTimeRefiner(),\n new ENMergeDateRangeRefiner()\n ]\n });\n}\n\n","/**\n * to-hankaku.js\n * convert to ascii code strings.\n *\n * @version 1.0.1\n * @author think49\n * @url https://gist.github.com/964592\n * @license http://www.opensource.org/licenses/mit-license.php (The MIT License)\n */\nexport function toHankaku(text) {\n return String(text).replace(/\\u2019/g, '\\u0027')\n .replace(/\\u201D/g, '\\u0022')\n .replace(/\\u3000/g, '\\u0020')\n .replace(/\\uFFE5/g, '\\u00A5')\n .replace(/[\\uFF01\\uFF03-\\uFF06\\uFF08\\uFF09\\uFF0C-\\uFF19\\uFF1C-\\uFF1F\\uFF21-\\uFF3B\\uFF3D\\uFF3F\\uFF41-\\uFF5B\\uFF5D\\uFF5E]/g, alphaNum);\n}\n\nfunction alphaNum (token) {\n return String.fromCharCode(token.charCodeAt(0) - 65248);\n}","import {Parser, ParsingContext} from \"../../../chrono\";\nimport {toHankaku} from \"../constants\";\nimport {findYearClosestToRef} from \"../../../calculation/yearCalculation\";\n\nimport dayjs from \"dayjs\";\n\n\nconst PATTERN = /(?:(?:([同今本])|((昭和|平成|令和)?([0-90-9]{1,4}|元)))年\\s*)?([0-90-9]{1,2})月\\s*([0-90-9]{1,2})日/i;\nconst SPECIAL_YEAR_GROUP = 1;\nconst TYPICAL_YEAR_GROUP = 2;\nconst ERA_GROUP = 3;\nconst YEAR_NUMBER_GROUP = 4;\nconst MONTH_GROUP = 5;\nconst DAY_GROUP = 6;\n\nexport default class JPStandardParser implements Parser {\n\n pattern() {\n return PATTERN;\n }\n\n extract(context: ParsingContext, match: RegExpMatchArray) {\n\n const month = parseInt(toHankaku(match[MONTH_GROUP]));\n const day = parseInt(toHankaku(match[DAY_GROUP]));\n const components = context.createParsingComponents({\n 'day': day, 'month': month\n });\n\n if (match[SPECIAL_YEAR_GROUP] && match[SPECIAL_YEAR_GROUP].match('同|今|本')) {\n\n const moment = dayjs(context.refDate)\n components.assign('year', moment.year());\n }\n\n if (match[TYPICAL_YEAR_GROUP]) {\n const yearNumText = match[YEAR_NUMBER_GROUP];\n\n let year = (yearNumText == '元') ? 1 : parseInt(toHankaku(yearNumText))\n if (match[ERA_GROUP] == '令和') {\n year += 2018;\n } else if (match[ERA_GROUP] == '平成') {\n year += 1988;\n } else if (match[ERA_GROUP] == '昭和') {\n year += 1925;\n }\n\n components.assign('year', year);\n\n } else {\n const year = findYearClosestToRef(context.refDate, day, month);\n components.imply('year', year);\n }\n\n return components;\n }\n}\n\n","import AbstractMergeDateRangeRefiner from \"../../../common/refiners/AbstractMergeDateRangeRefiner\";\n\n/**\n * Merging before and after results (see. AbstractMergeDateRangeRefiner)\n * This implementation should provide Japanese connecting phases\n * - 水曜日[ー]日曜日\n * - 水曜日[から]日曜日\n */\nexport default class JPMergeDateRangeRefiner extends AbstractMergeDateRangeRefiner {\n\n patternBetween(): RegExp {\n return /^\\s*(から|ー|-)\\s*$/i ;\n }\n}\n\n","import {Parser, ParsingContext} from \"../../../chrono\";\nimport dayjs from \"dayjs\";\nimport {Meridiem} from \"../../../index\";\n\n\nconst PATTERN = /今日|当日|昨日|明日|今夜|今夕|今晩|今朝/i;\n\nexport default class JPCasualDateParser implements Parser {\n\n pattern() {\n return PATTERN;\n }\n\n extract(context: ParsingContext, match: RegExpMatchArray) {\n\n const text = match[0];\n\n let date = dayjs(context.refDate);\n const components = context.createParsingComponents()\n\n if(text == '今夜' || text == '今夕' || text == '今晩'){\n\n components.imply('hour', 22);\n components.assign('meridiem', Meridiem.PM);\n\n } else if (text.match(\"今朝\")) {\n\n components.imply('hour', 6);\n components.assign('meridiem', Meridiem.AM);\n\n } else if(text == '明日'){\n\n if(date.hour() > 4) { // Check not \"Tomorrow\" on late night\n date = date.add(1, 'day');\n }\n\n } else if(text == '昨日') {\n\n date = date.add(-1, 'day');\n }\n\n components.assign('day', date.date())\n components.assign('month', date.month() + 1)\n components.assign('year', date.year())\n return components;\n }\n}\n\n","import JPStandardParser from \"./parsers/JPStandardParser\";\nimport JPMergeDateRangeRefiner from \"./refiners/JPMergeDateRangeRefiner\";\nimport JPCasualDateParser from \"./parsers/JPCasualDateParser\";\n\nimport {Chrono, Configuration} from \"../../chrono\";\nimport {ParsedResult, ParsingOption} from \"../../index\";\n\n// Shortcuts\nexport const casual = new Chrono(createCasualConfiguration())\nexport const strict = new Chrono(createConfiguration())\n\nexport function parse(text: string, ref?: Date, option?: ParsingOption): ParsedResult[] {\n return casual.parse(text, ref, option);\n}\n\nexport function parseDate(text: string, ref?: Date, option?: ParsingOption) : Date {\n return casual.parseDate(text, ref, option);\n}\n\nexport function createCasualConfiguration() : Configuration {\n const option = createConfiguration();\n option.parsers.unshift(new JPCasualDateParser());\n return option;\n}\n\nexport function createConfiguration() : Configuration {\n return {\n parsers: [\n new JPStandardParser()\n ],\n refiners: [\n new JPMergeDateRangeRefiner()\n ]\n }\n}","import {DebugHandler, DebugConsume} from \"./debugging\";\nimport * as en from './locales/en';\n\nexport {Chrono} from './chrono';\nexport const strict = en.strict;\nexport const casual = en.casual;\n\nexport function parse(text: string, ref?: Date, option?: ParsingOption): ParsedResult[] {\n return casual.parse(text, ref, option);\n}\n\nexport function parseDate(text: string, ref?: Date, option?: ParsingOption) : Date {\n return casual.parseDate(text, ref, option);\n}\n\nexport interface ParsingOption {\n forwardDate?: boolean\n debug?: DebugHandler | DebugConsume\n timezones?: {string: number}\n}\n\nexport interface ParsedResult {\n readonly refDate: Date\n readonly index: number\n readonly text: string\n\n readonly start: ParsedComponents\n readonly end?: ParsedComponents\n\n readonly date: () => Date\n}\n\nexport interface ParsedComponents {\n readonly get: (c: Component) => number\n readonly date: () => Date\n}\n\nexport type Component =\n 'year' | 'month' | 'day' | 'weekday' |\n 'hour' | 'minute' | 'second' | 'millisecond' | 'meridiem' |\n 'timezoneOffset';\n\nexport enum Meridiem {\n AM = 0,\n PM = 1\n}\n\n// export * as xx from './locales/xx'\nexport * as en from './locales/en'\nexport * as ja from './locales/ja'\n\n"],"sourceRoot":""} \ No newline at end of file diff --git a/package.json b/package.json index 7c0ef521..b9bc9867 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ }, "jest": { "verbose": true, - "testURL": "http://localhost/" + "testURL": "http://localhost/", + "preset": "ts-jest" }, "license": "MIT", "version": "2.0.3", @@ -16,61 +17,19 @@ "source": "./src", "test": "./test" }, - "main": "./dist/chrono.js", - "babel": { - "presets": [ - "@babel/preset-env", - "@babel/preset-typescript" - ], - "plugins": [ - "@babel/plugin-proposal-export-namespace-from" - ] - }, - "eslintConfig": { - "ignorePatterns": [ - "webpack.config.js", - "dist/*.js" - ], - "parser": "@typescript-eslint/parser", - "plugins": [ - "@typescript-eslint", - "jest" - ], - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "plugin:jest/recommended" - ], - "rules": { - "@typescript-eslint/explicit-module-boundary-types": "off", - "jest/expect-expect": "off" - } - }, + "main": "dist/index.js", + "types": "dist/index.d.ts", "devDependencies": { - "@babel/core": "^7.10.4", - "@babel/plugin-proposal-export-namespace-from": "^7.10.4", - "@babel/preset-env": "^7.10.4", - "@babel/preset-typescript": "^7.10.4", - "@typescript-eslint/eslint-plugin": "^3.5.0", - "@typescript-eslint/parser": "^3.5.0", - "babel-jest": "^25.5.1", - "babel-loader": "^8.0.6", - "coveralls": "^3.1.0", - "eslint": "^7.4.0", - "eslint-plugin-jest": "^23.18.0", - "jest": "^25.5.4", - "terser-webpack-plugin": "^2.3.7", - "typescript": "^3.9.6", - "webpack": "^4.43.0", - "webpack-cli": "^3.3.12" + "@types/jest": "^26.0.4", + "jest": "^26.1.0", + "ts-jest": "^26.1.1", + "typescript": "^3.9.6" }, "scripts": { - "build": "webpack", + "build": "tsc -p tsconfig.build.json", "watch": "jest --watch", - "pretest": "eslint .", "test": "jest --coverage", - "coveralls": "npm run test && cat coverage/lcov.info | coveralls", - "version": "npm run build && git add -A dist" + "coveralls": "npm run test && cat coverage/lcov.info | coveralls" }, "dependencies": { "dayjs": "^1.8.29" diff --git a/src/chrono.ts b/src/chrono.ts index 46ad321e..8598d3f5 100644 --- a/src/chrono.ts +++ b/src/chrono.ts @@ -9,9 +9,9 @@ export interface Configuration { } export interface Parser { - pattern: (context: ParsingContext) => RegExp, - extract: (context: ParsingContext, match: RegExpMatchArray) => - (ParsingComponents | ParsingResult | {[c: Component]: string|number} | null) + pattern(context: ParsingContext): RegExp, + extract(context: ParsingContext, match: RegExpMatchArray): + (ParsingComponents | ParsingResult | {[c in Component]?: number} | null) } export interface Refiner { @@ -28,7 +28,7 @@ export class Chrono { this.refiners = [...configuration.refiners]; } - parseDate(text, refDate, opt): Date { + parseDate(text, refDate?, opt?): Date { const results = this.parse(text, refDate, opt); return (results.length > 0) ? results[0].start.date() : null; } @@ -113,14 +113,14 @@ export class ParsingContext implements DebugHandler { readonly option: ParsingOption ) {} - createParsingComponents(components?: {[c: Component]: string|number}) : ParsingComponents { + createParsingComponents(components?: {[c in Component]?: number}) : ParsingComponents { return new ParsingComponents(this.refDate, components) } createParsingResult( index: number, textOrEndIndex: number | string, - startComponents?: {[c: Component]: string|number}, - endComponents?: {[c: Component]: string|number} + startComponents?: {[c in Component]?: number}, + endComponents?: {[c in Component]?: number} ) : ParsingResult { const text = (typeof textOrEndIndex === 'string') ? textOrEndIndex : diff --git a/src/common/parsers/AbstractParserWithWordBoundary.ts b/src/common/parsers/AbstractParserWithWordBoundary.ts new file mode 100644 index 00000000..5dd93198 --- /dev/null +++ b/src/common/parsers/AbstractParserWithWordBoundary.ts @@ -0,0 +1,27 @@ +import {Parser, ParsingContext} from "../../chrono"; +import {ParsingComponents, ParsingResult} from "../../results"; +import {Component} from "../../index"; + +export abstract class AbstractParserWithWordBoundaryChecking implements Parser { + + abstract innerPattern(context: ParsingContext): RegExp; + abstract innerExtract(context: ParsingContext, match: RegExpMatchArray): + (ParsingComponents | ParsingResult | {[c in Component]?: number} | null) + + pattern(context: ParsingContext): RegExp { + const innerPattern = this.innerPattern(context); + return new RegExp(`(\\W|^)${innerPattern.source}`, innerPattern.flags); + } + + extract(context: ParsingContext, match: RegExpMatchArray) { + const header = match[1] + match.index = match.index + header.length + match[0] = match[0].substring(header.length) + for (let i=2; i number + readonly isCertain: (c: Component) => boolean + readonly get: (c: Component) => number | undefined readonly date: () => Date } diff --git a/src/locales/en/constants.ts b/src/locales/en/constants.ts index b6bc49a3..4877a2cb 100644 --- a/src/locales/en/constants.ts +++ b/src/locales/en/constants.ts @@ -226,7 +226,7 @@ const SINGLE_TIME_UNIT_PATTERN_NO_CAPTURE = SINGLE_TIME_UNIT_PATTERN.replace(/\( export const TIME_UNITS_PATTERN = `(?:${SINGLE_TIME_UNIT_PATTERN_NO_CAPTURE})+`; -export function parseTimeUnits(timeunitText) : {[c: OpUnitType]: number} { +export function parseTimeUnits(timeunitText) : {[c in OpUnitType]?: number} { const fragments = {}; let remainingText = timeunitText; let match = SINGLE_TIME_UNIT_REGEX.exec(remainingText); diff --git a/src/locales/en/index.ts b/src/locales/en/index.ts index 3f32e3e9..94b59d60 100644 --- a/src/locales/en/index.ts +++ b/src/locales/en/index.ts @@ -21,7 +21,6 @@ import ENRelativeDateFormatParser from "./parsers/ENRelativeDateFormatParser"; import {ParsedResult, ParsingOption} from "../../index"; import {Chrono, Configuration} from "../../chrono"; -import {createParserWithWordBoundaryDetection as withWordBoundary} from "../../utils/ParserWithWordEndingDetection"; // Shortcuts export const casual = new Chrono(createCasualConfiguration(false)) @@ -39,26 +38,26 @@ export function parseDate(text: string, ref?: Date, option?: ParsingOption) : Da export function createCasualConfiguration(littleEndian = false) : Configuration { const option = createConfiguration(false, littleEndian); - option.parsers.unshift(withWordBoundary(new ENCasualDateParser())); - option.parsers.unshift(withWordBoundary(new ENCasualTimeParser())); - option.parsers.unshift(withWordBoundary(new ENWeekdayParser())); - option.parsers.unshift(withWordBoundary(new ENRelativeDateFormatParser())); + option.parsers.unshift(new ENCasualDateParser()); + option.parsers.unshift(new ENCasualTimeParser()); + option.parsers.unshift(new ENWeekdayParser()); + option.parsers.unshift(new ENRelativeDateFormatParser()); return option; } export function createConfiguration(strictMode= true, littleEndian = false) : Configuration { return includeCommonConfiguration({ parsers: [ - withWordBoundary(new ENTimeUnitDeadlineFormatParser(strictMode)), - withWordBoundary(new ENMonthNameLittleEndianParser()), - withWordBoundary(new ENMonthNameMiddleEndianParser()), - withWordBoundary(new ENMonthNameParser()), + new ENTimeUnitDeadlineFormatParser(strictMode), + new ENMonthNameLittleEndianParser(), + new ENMonthNameMiddleEndianParser(), + new ENMonthNameParser(), new ENSlashDateFormatParser(littleEndian), - withWordBoundary(new ENSlashDateFormatStartWithYearParser()), - withWordBoundary(new ENSlashMonthFormatParser()), + new ENSlashDateFormatStartWithYearParser(), + new ENSlashMonthFormatParser(), new ENTimeExpressionParser(), - withWordBoundary(new ENTimeUnitAgoFormatParser(strictMode)), - withWordBoundary(new ENTimeUnitLaterFormatParser(strictMode)), + new ENTimeUnitAgoFormatParser(strictMode), + new ENTimeUnitLaterFormatParser(strictMode), ], refiners: [ new ENMergeDateTimeRefiner(), diff --git a/src/locales/en/parsers/ENCasualDateParser.ts b/src/locales/en/parsers/ENCasualDateParser.ts index 95482731..f8fde163 100644 --- a/src/locales/en/parsers/ENCasualDateParser.ts +++ b/src/locales/en/parsers/ENCasualDateParser.ts @@ -2,14 +2,15 @@ import {Parser, ParsingContext} from "../../../chrono"; import {ParsingComponents, ParsingResult} from "../../../results"; import dayjs from "dayjs"; import {Meridiem} from "../../../index"; +import {AbstractParserWithWordBoundaryChecking} from "../../../common/parsers/AbstractParserWithWordBoundary"; -export default class ENCasualDateParser implements Parser { +export default class ENCasualDateParser extends AbstractParserWithWordBoundaryChecking { - pattern(): RegExp { + innerPattern(context: ParsingContext): RegExp { return /(now|today|tonight|last\s*night|tomorrow|tmr|yesterday)(?=\W|$)/i; } - extract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents | ParsingResult { + innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents | ParsingResult { let targetDate = dayjs(context.refDate); const lowerText = match[0].toLowerCase(); diff --git a/src/locales/en/parsers/ENCasualTimeParser.ts b/src/locales/en/parsers/ENCasualTimeParser.ts index db965f47..81f3052e 100644 --- a/src/locales/en/parsers/ENCasualTimeParser.ts +++ b/src/locales/en/parsers/ENCasualTimeParser.ts @@ -1,11 +1,12 @@ import {Parser, ParsingContext} from "../../../chrono"; import {Meridiem} from "../../../index"; +import {AbstractParserWithWordBoundaryChecking} from "../../../common/parsers/AbstractParserWithWordBoundary"; -export default class ENCasualTimeParser implements Parser { +export default class ENCasualTimeParser extends AbstractParserWithWordBoundaryChecking { - pattern() { return /(?:this)?\s*(morning|afternoon|evening|night|noon)(?=\W|$)/i; } + innerPattern() { return /(?:this)?\s*(morning|afternoon|evening|night|noon)(?=\W|$)/i; } - extract(context: ParsingContext, match: RegExpMatchArray) { + innerExtract(context: ParsingContext, match: RegExpMatchArray) { const component = context.createParsingComponents() switch (match[1].toLowerCase()) { diff --git a/src/locales/en/parsers/ENMonthNameLittleEndianParser.ts b/src/locales/en/parsers/ENMonthNameLittleEndianParser.ts index a2bc6f49..a2faf820 100644 --- a/src/locales/en/parsers/ENMonthNameLittleEndianParser.ts +++ b/src/locales/en/parsers/ENMonthNameLittleEndianParser.ts @@ -5,6 +5,7 @@ import {MONTH_DICTIONARY, WEEKDAY_DICTIONARY,} from "../constants"; import {YEAR_PATTERN, parseYear} from "../constants"; import {ORDINAL_NUMBER_PATTERN, parseOrdinalNumberPattern} from "../constants"; import {matchAnyPattern} from "../../../utils/pattern"; +import {AbstractParserWithWordBoundaryChecking} from "../../../common/parsers/AbstractParserWithWordBoundary"; const PATTERN = new RegExp( @@ -30,13 +31,13 @@ const DATE_TO_GROUP = 3; const MONTH_NAME_GROUP = 4; const YEAR_GROUP = 5; -export default class ENMonthNameLittleEndianParser implements Parser { +export default class ENMonthNameLittleEndianParser extends AbstractParserWithWordBoundaryChecking { - pattern(): RegExp { + innerPattern(): RegExp { return PATTERN; } - extract(context: ParsingContext, match: RegExpMatchArray): ParsingResult { + innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingResult { //console.log(match) const result = context.createParsingResult(match.index, match[0]); diff --git a/src/locales/en/parsers/ENMonthNameMiddleEndianParser.ts b/src/locales/en/parsers/ENMonthNameMiddleEndianParser.ts index 57842a7c..40d39dd2 100644 --- a/src/locales/en/parsers/ENMonthNameMiddleEndianParser.ts +++ b/src/locales/en/parsers/ENMonthNameMiddleEndianParser.ts @@ -4,6 +4,7 @@ import {MONTH_DICTIONARY, WEEKDAY_DICTIONARY} from "../constants"; import {ORDINAL_NUMBER_PATTERN, parseOrdinalNumberPattern} from "../constants"; import {YEAR_PATTERN, parseYear} from "../constants"; import {matchAnyPattern} from "../../../utils/pattern"; +import {AbstractParserWithWordBoundaryChecking} from "../../../common/parsers/AbstractParserWithWordBoundary"; const PATTERN = new RegExp( '(?:' + @@ -40,13 +41,13 @@ const YEAR_GROUP = 5; * - January 12.44 * - January 1222344 */ -export default class ENMonthNameMiddleEndianParser implements Parser { +export default class ENMonthNameMiddleEndianParser extends AbstractParserWithWordBoundaryChecking { - pattern(): RegExp { + innerPattern(): RegExp { return PATTERN; } - extract(context: ParsingContext, match: RegExpMatchArray) { + innerExtract(context: ParsingContext, match: RegExpMatchArray) { const month = MONTH_DICTIONARY[match[MONTH_NAME_GROUP].toLowerCase()]; const day = parseOrdinalNumberPattern(match[DATE_GROUP]); diff --git a/src/locales/en/parsers/ENMonthNameParser.ts b/src/locales/en/parsers/ENMonthNameParser.ts index b606a3d2..677b3862 100644 --- a/src/locales/en/parsers/ENMonthNameParser.ts +++ b/src/locales/en/parsers/ENMonthNameParser.ts @@ -3,6 +3,7 @@ import {Parser, ParsingContext} from "../../../chrono"; import {findYearClosestToRef} from "../../../calculation/yearCalculation"; import {matchAnyPattern} from "../../../utils/pattern"; import {YEAR_PATTERN, parseYear} from "../constants"; +import {AbstractParserWithWordBoundaryChecking} from "../../../common/parsers/AbstractParserWithWordBoundary"; const PATTERN = new RegExp( `(${matchAnyPattern(MONTH_DICTIONARY)})` + @@ -21,11 +22,11 @@ const YEAR_GROUP = 2; * - January 2012 * - January */ -export default class ENMonthNameParser implements Parser { +export default class ENMonthNameParser extends AbstractParserWithWordBoundaryChecking { - pattern(): RegExp {return PATTERN; } + innerPattern(): RegExp {return PATTERN; } - extract(context: ParsingContext, match: RegExpMatchArray) { + innerExtract(context: ParsingContext, match: RegExpMatchArray) { if (match[0].length <= 3) { return null; diff --git a/src/locales/en/parsers/ENRelativeDateFormatParser.ts b/src/locales/en/parsers/ENRelativeDateFormatParser.ts index bb0a1e5c..7f6aabd8 100644 --- a/src/locales/en/parsers/ENRelativeDateFormatParser.ts +++ b/src/locales/en/parsers/ENRelativeDateFormatParser.ts @@ -2,6 +2,7 @@ import {NUMBER_PATTERN, parseNumberPattern} from "../constants"; import {Parser, ParsingContext} from "../../../chrono"; import {ParsingComponents} from "../../../results"; import dayjs from "dayjs"; +import {AbstractParserWithWordBoundaryChecking} from "../../../common/parsers/AbstractParserWithWordBoundary"; const PATTERN = new RegExp( @@ -15,10 +16,11 @@ const MODIFIER_WORD_GROUP = 1; const MULTIPLIER_WORD_GROUP = 2; const RELATIVE_WORD_GROUP = 3; -export default class ENRelativeDateFormatParser implements Parser { +export default class ENRelativeDateFormatParser extends AbstractParserWithWordBoundaryChecking { - pattern(): RegExp {return PATTERN; } - extract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents { + innerPattern(): RegExp {return PATTERN; } + + innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents { if (match[MODIFIER_WORD_GROUP].toLowerCase().match(/^this/)) { if (match[MULTIPLIER_WORD_GROUP]) { return null; diff --git a/src/locales/en/parsers/ENSlashDateFormatStartWithYearParser.ts b/src/locales/en/parsers/ENSlashDateFormatStartWithYearParser.ts index d1478a43..9bd8dc8f 100644 --- a/src/locales/en/parsers/ENSlashDateFormatStartWithYearParser.ts +++ b/src/locales/en/parsers/ENSlashDateFormatStartWithYearParser.ts @@ -1,6 +1,7 @@ import {Parser, ParsingContext} from "../../../chrono"; import {MONTH_DICTIONARY} from "../constants"; import {matchAnyPattern} from "../../../utils/pattern"; +import {AbstractParserWithWordBoundaryChecking} from "../../../common/parsers/AbstractParserWithWordBoundary"; /* Date format with slash "/" between numbers like ENSlashDateFormatParser, @@ -19,11 +20,11 @@ const MONTH_NAME_GROUP = 2; const MONTH_NUMBER_GROUP = 3; const DATE_NUMBER_GROUP = 4; -export default class ENSlashDateFormatStartWithYearParser implements Parser { +export default class ENSlashDateFormatStartWithYearParser extends AbstractParserWithWordBoundaryChecking { - pattern(): RegExp { return PATTERN; } + innerPattern(): RegExp { return PATTERN; } - extract(context: ParsingContext, match: RegExpMatchArray) { + innerExtract(context: ParsingContext, match: RegExpMatchArray) { const month = match[MONTH_NUMBER_GROUP] ? parseInt(match[MONTH_NUMBER_GROUP]) : MONTH_DICTIONARY[match[MONTH_NAME_GROUP].toLowerCase()]; diff --git a/src/locales/en/parsers/ENSlashMonthFormatParser.ts b/src/locales/en/parsers/ENSlashMonthFormatParser.ts index 88a34056..8da3bf43 100644 --- a/src/locales/en/parsers/ENSlashMonthFormatParser.ts +++ b/src/locales/en/parsers/ENSlashMonthFormatParser.ts @@ -1,5 +1,6 @@ import {Parser, ParsingContext} from "../../../chrono"; import {ParsingComponents} from "../../../results"; +import {AbstractParserWithWordBoundaryChecking} from "../../../common/parsers/AbstractParserWithWordBoundary"; const PATTERN = new RegExp( '([0-9]|0[1-9]|1[012])/([0-9]{4})' + @@ -13,13 +14,13 @@ const YEAR_GROUP = 2; * - 11/05 * - 06/2005 */ -export default class ENSlashMonthFormatParser implements Parser { +export default class ENSlashMonthFormatParser extends AbstractParserWithWordBoundaryChecking { - pattern(): RegExp { + innerPattern(): RegExp { return PATTERN; } - extract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents { + innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents { const year = parseInt(match[YEAR_GROUP]); const month = parseInt(match[MONTH_GROUP]); diff --git a/src/locales/en/parsers/ENTimeUnitAgoFormatParser.ts b/src/locales/en/parsers/ENTimeUnitAgoFormatParser.ts index ad072630..08c2190e 100644 --- a/src/locales/en/parsers/ENTimeUnitAgoFormatParser.ts +++ b/src/locales/en/parsers/ENTimeUnitAgoFormatParser.ts @@ -4,6 +4,7 @@ import { TIME_UNITS_PATTERN } from "../constants"; import {ParsingComponents} from "../../../results"; +import {AbstractParserWithWordBoundaryChecking} from "../../../common/parsers/AbstractParserWithWordBoundary"; const PATTERN = new RegExp('' + @@ -17,13 +18,15 @@ const STRICT_PATTERN = new RegExp('' + '(' + TIME_UNITS_PATTERN + ')' + 'ago(?=(?:\\W|$))', 'i'); -export default class ENTimeUnitAgoFormatParser implements Parser { +export default class ENTimeUnitAgoFormatParser extends AbstractParserWithWordBoundaryChecking { - constructor(private strictMode: boolean) {} + constructor(private strictMode: boolean) { + super(); + } - pattern(): RegExp { return this.strictMode ? STRICT_PATTERN : PATTERN; } + innerPattern(): RegExp { return this.strictMode ? STRICT_PATTERN : PATTERN; } - extract(context: ParsingContext, match: RegExpMatchArray) { + innerExtract(context: ParsingContext, match: RegExpMatchArray) { const fragments = parseTimeUnits(match[1]); for (const key in fragments) { diff --git a/src/locales/en/parsers/ENTimeUnitDeadlineFormatParser.ts b/src/locales/en/parsers/ENTimeUnitDeadlineFormatParser.ts index 21f9d058..cbd408a7 100644 --- a/src/locales/en/parsers/ENTimeUnitDeadlineFormatParser.ts +++ b/src/locales/en/parsers/ENTimeUnitDeadlineFormatParser.ts @@ -1,6 +1,7 @@ import {TIME_UNITS_PATTERN, parseTimeUnits} from '../constants'; import {Parser, ParsingContext} from "../../../chrono"; import {ParsingComponents} from "../../../results"; +import {AbstractParserWithWordBoundaryChecking} from "../../../common/parsers/AbstractParserWithWordBoundary"; const PATTERN = new RegExp( `(?:within|in)\\s*` + @@ -14,14 +15,17 @@ const STRICT_PATTERN = new RegExp( `(?=\\W|$)`, 'i' ); -export default class ENTimeUnitDeadlineFormatParser implements Parser { - constructor(private strictMode: boolean) {} +export default class ENTimeUnitDeadlineFormatParser extends AbstractParserWithWordBoundaryChecking { - pattern(): RegExp { + constructor(private strictMode: boolean) { + super(); + } + + innerPattern(): RegExp { return this.strictMode ? STRICT_PATTERN : PATTERN; } - extract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents { + innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents { const timeUnits = parseTimeUnits(match[1]); return ParsingComponents.createRelativeFromRefDate(context.refDate, timeUnits); } diff --git a/src/locales/en/parsers/ENTimeUnitLaterFormatParser.ts b/src/locales/en/parsers/ENTimeUnitLaterFormatParser.ts index 143d06d2..c7e207d9 100644 --- a/src/locales/en/parsers/ENTimeUnitLaterFormatParser.ts +++ b/src/locales/en/parsers/ENTimeUnitLaterFormatParser.ts @@ -4,6 +4,7 @@ import { TIME_UNITS_PATTERN } from "../constants"; import {ParsingComponents} from "../../../results"; +import {AbstractParserWithWordBoundaryChecking} from "../../../common/parsers/AbstractParserWithWordBoundary"; const PATTERN = new RegExp('' + @@ -21,13 +22,15 @@ const STRICT_PATTERN = new RegExp('' + const GROUP_NUM_SUFFIX = 2 const GROUP_NUM_TIMEUNITS = 1 -export default class ENTimeUnitLaterFormatParser implements Parser { +export default class ENTimeUnitLaterFormatParser extends AbstractParserWithWordBoundaryChecking { - constructor(private strictMode: boolean) {} + constructor(private strictMode: boolean) { + super(); + } - pattern(): RegExp { return this.strictMode ? STRICT_PATTERN : PATTERN; } + innerPattern(): RegExp { return this.strictMode ? STRICT_PATTERN : PATTERN; } - extract(context: ParsingContext, match: RegExpMatchArray) { + innerExtract(context: ParsingContext, match: RegExpMatchArray) { const suffix = match[GROUP_NUM_SUFFIX].toLowerCase().trim(); if (!suffix) { diff --git a/src/locales/en/parsers/ENWeekdayParser.ts b/src/locales/en/parsers/ENWeekdayParser.ts index a48f8bac..099ab2bf 100644 --- a/src/locales/en/parsers/ENWeekdayParser.ts +++ b/src/locales/en/parsers/ENWeekdayParser.ts @@ -3,6 +3,7 @@ import {ParsingComponents} from "../../../results"; import {WEEKDAY_DICTIONARY} from "../constants"; import dayjs, {Dayjs} from "dayjs"; import {matchAnyPattern} from "../../../utils/pattern"; +import {AbstractParserWithWordBoundaryChecking} from "../../../common/parsers/AbstractParserWithWordBoundary"; const PATTERN = new RegExp( '(?:(?:\\,|\\(|\\()\\s*)?' + @@ -17,13 +18,13 @@ const PREFIX_GROUP = 1; const WEEKDAY_GROUP = 2; const POSTFIX_GROUP = 3; -export default class ENWeekdayParser implements Parser { +export default class ENWeekdayParser extends AbstractParserWithWordBoundaryChecking { - pattern(): RegExp { + innerPattern(): RegExp { return PATTERN; } - extract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents { + innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents { const dayOfWeek = match[WEEKDAY_GROUP].toLowerCase(); const offset = WEEKDAY_DICTIONARY[dayOfWeek]; diff --git a/src/results.ts b/src/results.ts index 04c32485..3c8fb778 100644 --- a/src/results.ts +++ b/src/results.ts @@ -3,18 +3,18 @@ import {Component, ParsedComponents, ParsedResult} from "./index"; import dayjs, {OpUnitType} from 'dayjs'; export class ParsingComponents implements ParsedComponents { - private knownValues: {[c: Component]: number} - private impliedValues: {[c: Component]: number} + private knownValues: {[c in Component]?: number} + private impliedValues: {[c in Component]?: number} constructor( refDate: Date, - knownComponents?: {[c: Component]: string|number}, + knownComponents?: {[c in Component]?: number}, ) { this.knownValues = {}; this.impliedValues = {}; if (knownComponents) { for (const key in knownComponents) { - this.knownValues[key] = knownComponents[key]; + this.knownValues[key as Component] = knownComponents[key as Component]; } } @@ -28,7 +28,7 @@ export class ParsingComponents implements ParsedComponents { this.imply('millisecond', 0); } - get(component: Component) : (number | null) { + get(component: Component) : (number | undefined) { if (component in this.knownValues) { return this.knownValues[component]; @@ -54,7 +54,9 @@ export class ParsingComponents implements ParsedComponents { } imply(component: Component, value: number) : ParsingComponents { - if (component in this.knownValues) return; + if (component in this.knownValues) { + return this; + } this.impliedValues[component] = value; return this; } @@ -71,11 +73,11 @@ export class ParsingComponents implements ParsedComponents { component.impliedValues = {}; for (const key in this.knownValues) { - component.knownValues[key] = this.knownValues[key]; + component.knownValues[key as Component] = this.knownValues[key as Component]; } for (const key in this.impliedValues) { - component.impliedValues[key] = this.impliedValues[key]; + component.impliedValues[key as Component] = this.impliedValues[key as Component]; } return component; @@ -107,8 +109,8 @@ export class ParsingComponents implements ParsedComponents { if (dateMoment.get('year') != this.get('year')) return false; if (dateMoment.get('month') != this.get('month')-1) return false; if (dateMoment.get('date') != this.get('day')) return false; - if (dateMoment.get('hour') != this.get('hour')) return false; - if (dateMoment.get('minute') != this.get('minute')) return false; + if (this.get('hour') != null && dateMoment.get('hour') != this.get('hour')) return false; + if (this.get('minute') != null && dateMoment.get('minute') != this.get('minute')) return false; return true; } @@ -140,10 +142,10 @@ export class ParsingComponents implements ParsedComponents { } - static createRelativeFromRefDate(refDate:Date, fragments: {[c: OpUnitType]: number}) : ParsingComponents{ + static createRelativeFromRefDate(refDate:Date, fragments: {[c in OpUnitType]?: number}) : ParsingComponents{ let date = dayjs(refDate); for (const key in fragments) { - date = date.add(fragments[key], key); + date = date.add(fragments[key as OpUnitType], key as OpUnitType); } const components = new ParsingComponents(refDate); diff --git a/src/utils/ParserWithWordEndingDetection.ts b/src/utils/ParserWithWordEndingDetection.ts deleted file mode 100644 index e7d01f31..00000000 --- a/src/utils/ParserWithWordEndingDetection.ts +++ /dev/null @@ -1,32 +0,0 @@ -import {Parser, ParsingContext} from "../chrono"; - -export function createParserWithWordBoundaryDetection(parser: Parser) : ParserWithWordEndingDetection { - return new ParserWithWordEndingDetection(parser) -} - -export class ParserWithWordEndingDetection implements Parser { - - private original: Parser; - - constructor(parser: Parser) { - this.original = parser; - } - - pattern(context: ParsingContext): RegExp { - const originalPattern = this.original.pattern(context); - return new RegExp(`(\\W|^)${originalPattern.source}`, originalPattern.flags); - } - - extract(context: ParsingContext, match: RegExpMatchArray) { - - const header = match[1] - match.index = match.index + header.length - match[0] = match[0].substring(header.length) - for (let i=2; i { expect(components.date()).toBeDefined(); // undefined - expect(components.get('dayOfWeek')).toBeNull(undefined); - expect(components.isCertain('dayOfWeek')).toBe(false); + expect(components.get('weekday')).toBeNull(); + expect(components.isCertain('weekday')).toBe(false); // "imply" - components.imply('dayOfWeek', 1); - expect(components.get('dayOfWeek')).toBe(1); - expect(components.isCertain('dayOfWeek')).toBe(false); + components.imply('weekday', 1); + expect(components.get('weekday')).toBe(1); + expect(components.isCertain('weekday')).toBe(false); // "assign" overrides "imply" - components.assign('dayOfWeek', 2); - expect(components.get('dayOfWeek')).toBe(2); - expect(components.isCertain('dayOfWeek')).toBe(true); + components.assign('weekday', 2); + expect(components.get('weekday')).toBe(2); + expect(components.isCertain('weekday')).toBe(true); // "imply" doesn't overrides "assign" components.imply('year', 2013); @@ -68,17 +68,17 @@ test("Test - Calendar Checking", () => { } { - const components = new ParsingComponents({year: 2014, month: 11, day: 24, hour:24}); + const components = new ParsingComponents(refDate, {year: 2014, month: 11, day: 24, hour:24}); expect(components.isValidDate()).toBe(false); } { - const components = new ParsingComponents({year: 2014, month: 11, day: 24, hour:12, minute: 60}); + const components = new ParsingComponents(refDate, {year: 2014, month: 11, day: 24, hour:12, minute: 60}); expect(components.isValidDate()).toBe(false); } { - const components = new ParsingComponents({year: 2014, month: 11, day: 24, hour:12, minute: 30, second: 60}); + const components = new ParsingComponents(refDate,{year: 2014, month: 11, day: 24, hour:12, minute: 30, second: 60}); expect(components.isValidDate()).toBe(false); } }); diff --git a/test/system.test.js b/test/system.test.ts similarity index 100% rename from test/system.test.js rename to test/system.test.ts diff --git a/test/test_util.ts b/test/test_util.ts index 94e7c509..78ca6842 100644 --- a/test/test_util.ts +++ b/test/test_util.ts @@ -9,8 +9,8 @@ type CheckResult = (p: ParsedResult, text: string) => void export function testSingleCase(chrono: ChronoLike, text: string, checkResult?: CheckResult); export function testSingleCase(chrono: ChronoLike, text: string, refDateOrCheckResult?: Date | CheckResult, checkResult?: CheckResult); +export function testSingleCase(chrono: ChronoLike, text: string, refDateOrCheckResult?: Date | CheckResult, optionOrCheckResult?: ParsingOption| CheckResult, checkResult?: CheckResult); export function testSingleCase(chrono: ChronoLike, text: string, refDateOrCheckResult?: Date | CheckResult, optionOrCheckResult?: ParsingOption| CheckResult, checkResult?: CheckResult) { - if (checkResult === undefined && typeof optionOrCheckResult === "function") { checkResult = optionOrCheckResult; optionOrCheckResult = undefined; diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 00000000..1eb252f6 --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.json", + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..5e664482 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "sourceMap": false, + "inlineSources": false, + "inlineSourceMap": false, + "noEmit": false, + "declaration": true, + "stripInternal": true, + "outDir": "dist", + "downlevelIteration": true, + "esModuleInterop": true, + "importHelpers": false, + "module": "commonjs", + "moduleResolution": "node", + "noFallthroughCasesInSwitch": true, + "removeComments": true, + "target": "es5" + }, + "include": [ + "src", + "test" + ] +} \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index d580cb7f..00000000 --- a/webpack.config.js +++ /dev/null @@ -1,40 +0,0 @@ -const path = require('path'); -const TerserPlugin = require('terser-webpack-plugin'); - -module.exports = { - mode: 'production', - entry: { - 'chrono': path.resolve(__dirname, 'src/index.ts'), - 'chrono.min': path.resolve(__dirname, 'src/index.ts') - }, - output: { - path: path.resolve(__dirname, 'dist'), - filename: '[name].js', - library: 'chrono', - libraryTarget: 'umd', - globalObject: 'this' - }, - resolve: { - extensions: ['.ts', '.js' ], - }, - module: { - rules: [ - { - test: /\.(ts|m?js)$/, - exclude: /(node_modules|bower_components)/, - use: { - loader: 'babel-loader' - } - } - ] - }, - devtool: 'source-map', - optimization: { - minimize: true, - minimizer: [ - new TerserPlugin({ - include: /\.min\.js$/ - }) - ], - }, -}; \ No newline at end of file