UNPKG

189 kBSource Map (JSON)View Raw
1{"version":3,"file":"rrule.js","mappings":"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","sources":["webpack://rrule/webpack/universalModuleDefinition","webpack://rrule/webpack/bootstrap","webpack://rrule/webpack/runtime/define property getters","webpack://rrule/webpack/runtime/hasOwnProperty shorthand","webpack://rrule/webpack/runtime/make namespace object","webpack://rrule/./src/weekday.ts","webpack://rrule/./src/helpers.ts","webpack://rrule/./src/dateutil.ts","webpack://rrule/./src/iterresult.ts","webpack://rrule/./node_modules/tslib/tslib.es6.js","webpack://rrule/./src/callbackiterresult.ts","webpack://rrule/./src/nlp/i18n.ts","webpack://rrule/./src/nlp/totext.ts","webpack://rrule/./src/nlp/parsetext.ts","webpack://rrule/./src/types.ts","webpack://rrule/./src/nlp/index.ts","webpack://rrule/./src/datetime.ts","webpack://rrule/./src/parseoptions.ts","webpack://rrule/./src/parsestring.ts","webpack://rrule/./src/datewithzone.ts","webpack://rrule/./src/optionstostring.ts","webpack://rrule/./src/cache.ts","webpack://rrule/./src/masks.ts","webpack://rrule/./src/iterinfo/yearinfo.ts","webpack://rrule/./src/iterinfo/index.ts","webpack://rrule/./src/iterinfo/monthinfo.ts","webpack://rrule/./src/iterinfo/easter.ts","webpack://rrule/./src/iter/poslist.ts","webpack://rrule/./src/iter/index.ts","webpack://rrule/./src/rrule.ts","webpack://rrule/./src/rrulestr.ts","webpack://rrule/./src/rruleset.ts","webpack://rrule/./src/iterset.ts"],"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[\"rrule\"] = factory();\n\telse\n\t\troot[\"rrule\"] = factory();\n})(typeof self !== 'undefined' ? self : this, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// =============================================================================\n// Weekday\n// =============================================================================\n\nexport type WeekdayStr = 'MO' | 'TU' | 'WE' | 'TH' | 'FR' | 'SA' | 'SU'\nexport const ALL_WEEKDAYS: WeekdayStr[] = [\n 'MO',\n 'TU',\n 'WE',\n 'TH',\n 'FR',\n 'SA',\n 'SU',\n]\n\nexport class Weekday {\n public readonly weekday: number\n public readonly n?: number\n\n constructor(weekday: number, n?: number) {\n if (n === 0) throw new Error(\"Can't create weekday with n == 0\")\n this.weekday = weekday\n this.n = n\n }\n\n static fromStr(str: WeekdayStr): Weekday {\n return new Weekday(ALL_WEEKDAYS.indexOf(str))\n }\n\n // __call__ - Cannot call the object directly, do it through\n // e.g. RRule.TH.nth(-1) instead,\n nth(n: number) {\n return this.n === n ? this : new Weekday(this.weekday, n)\n }\n\n // __eq__\n equals(other: Weekday) {\n return this.weekday === other.weekday && this.n === other.n\n }\n\n // __repr__\n toString() {\n let s: string = ALL_WEEKDAYS[this.weekday]\n if (this.n) s = (this.n > 0 ? '+' : '') + String(this.n) + s\n return s\n }\n\n getJsWeekday() {\n return this.weekday === 6 ? 0 : this.weekday + 1\n }\n}\n","// =============================================================================\n// Helper functions\n// =============================================================================\n\nimport { ALL_WEEKDAYS, WeekdayStr } from './weekday'\n\nexport const isPresent = function <T>(\n value?: T | null | undefined\n): value is T {\n return value !== null && value !== undefined\n}\n\nexport const isNumber = function (value: unknown): value is number {\n return typeof value === 'number'\n}\n\nexport const isWeekdayStr = function (value: unknown): value is WeekdayStr {\n return typeof value === 'string' && ALL_WEEKDAYS.includes(value as WeekdayStr)\n}\n\nexport const isArray = Array.isArray\n\n/**\n * Simplified version of python's range()\n */\nexport const range = function (start: number, end: number = start): number[] {\n if (arguments.length === 1) {\n end = start\n start = 0\n }\n const rang = []\n for (let i = start; i < end; i++) rang.push(i)\n return rang\n}\n\nexport const clone = function <T>(array: T[]): T[] {\n return ([] as T[]).concat(array)\n}\n\nexport const repeat = function <T>(value: T | T[], times: number): (T | T[])[] {\n let i = 0\n const array: (T | T[])[] = []\n\n if (isArray(value)) {\n for (; i < times; i++) array[i] = ([] as T[]).concat(value)\n } else {\n for (; i < times; i++) array[i] = value\n }\n return array\n}\n\nexport const toArray = function <T>(item: T | T[]): T[] {\n if (isArray(item)) {\n return item\n }\n\n return [item]\n}\n\nexport function padStart(\n item: string | number,\n targetLength: number,\n padString = ' '\n) {\n const str = String(item)\n targetLength = targetLength >> 0\n if (str.length > targetLength) {\n return String(str)\n }\n\n targetLength = targetLength - str.length\n if (targetLength > padString.length) {\n padString += repeat(padString, targetLength / padString.length)\n }\n\n return padString.slice(0, targetLength) + String(str)\n}\n\n/**\n * Python like split\n */\nexport const split = function (str: string, sep: string, num: number) {\n const splits = str.split(sep)\n return num\n ? splits.slice(0, num).concat([splits.slice(num).join(sep)])\n : splits\n}\n\n/**\n * closure/goog/math/math.js:modulo\n * Copyright 2006 The Closure Library Authors.\n * The % operator in JavaScript returns the remainder of a / b, but differs from\n * some other languages in that the result will have the same sign as the\n * dividend. For example, -1 % 8 == -1, whereas in some other languages\n * (such as Python) the result would be 7. This function emulates the more\n * correct modulo behavior, which is useful for certain applications such as\n * calculating an offset index in a circular list.\n *\n * @param {number} a The dividend.\n * @param {number} b The divisor.\n * @return {number} a % b where the result is between 0 and b (either 0 <= x < b\n * or b < x <= 0, depending on the sign of b).\n */\nexport const pymod = function (a: number, b: number) {\n const r = a % b\n // If r and b differ in sign, add b to wrap the result to the correct sign.\n return r * b < 0 ? r + b : r\n}\n\n/**\n * @see: <http://docs.python.org/library/functions.html#divmod>\n */\nexport const divmod = function (a: number, b: number) {\n return { div: Math.floor(a / b), mod: pymod(a, b) }\n}\n\nexport const empty = function <T>(obj: T[] | null | undefined) {\n return !isPresent(obj) || obj.length === 0\n}\n\n/**\n * Python-like boolean\n *\n * @return {Boolean} value of an object/primitive, taking into account\n * the fact that in Python an empty list's/tuple's\n * boolean value is False, whereas in JS it's true\n */\nexport const notEmpty = function <T>(obj: T[] | null | undefined): obj is T[] {\n return !empty(obj)\n}\n\n/**\n * Return true if a value is in an array\n */\nexport const includes = function <T>(arr: T[] | null | undefined, val: T) {\n return notEmpty(arr) && arr.indexOf(val) !== -1\n}\n","/* eslint-disable @typescript-eslint/no-namespace */\nimport { padStart } from './helpers'\nimport { Time } from './datetime'\n\ntype Datelike = Pick<Date, 'getTime'>\n\n/**\n * General date-related utilities.\n * Also handles several incompatibilities between JavaScript and Python\n *\n */\nexport namespace dateutil {\n export const MONTH_DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n\n /**\n * Number of milliseconds of one day\n */\n export const ONE_DAY = 1000 * 60 * 60 * 24\n\n /**\n * @see: <http://docs.python.org/library/datetime.html#datetime.MAXYEAR>\n */\n export const MAXYEAR = 9999\n\n /**\n * Python uses 1-Jan-1 as the base for calculating ordinals but we don't\n * want to confuse the JS engine with milliseconds > Number.MAX_NUMBER,\n * therefore we use 1-Jan-1970 instead\n */\n export const ORDINAL_BASE = new Date(Date.UTC(1970, 0, 1))\n\n /**\n * Python: MO-SU: 0 - 6\n * JS: SU-SAT 0 - 6\n */\n export const PY_WEEKDAYS = [6, 0, 1, 2, 3, 4, 5]\n\n /**\n * py_date.timetuple()[7]\n */\n export const getYearDay = function (date: Date) {\n const dateNoTime = new Date(\n date.getUTCFullYear(),\n date.getUTCMonth(),\n date.getUTCDate()\n )\n return (\n Math.ceil(\n (dateNoTime.valueOf() -\n new Date(date.getUTCFullYear(), 0, 1).valueOf()) /\n ONE_DAY\n ) + 1\n )\n }\n\n export const isLeapYear = function (year: number) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0\n }\n\n export const isDate = function (value: unknown): value is Date {\n return value instanceof Date\n }\n\n export const isValidDate = function (value: unknown): value is Date {\n return isDate(value) && !isNaN(value.getTime())\n }\n\n /**\n * @return {Number} the date's timezone offset in ms\n */\n export const tzOffset = function (date: Date) {\n return date.getTimezoneOffset() * 60 * 1000\n }\n\n /**\n * @see: <http://www.mcfedries.com/JavaScript/DaysBetween.asp>\n */\n export const daysBetween = function (date1: Date, date2: Date) {\n // The number of milliseconds in one day\n // Convert both dates to milliseconds\n const date1ms = date1.getTime() - tzOffset(date1)\n const date2ms = date2.getTime() - tzOffset(date2)\n // Calculate the difference in milliseconds\n const differencems = date1ms - date2ms\n // Convert back to days and return\n return Math.round(differencems / ONE_DAY)\n }\n\n /**\n * @see: <http://docs.python.org/library/datetime.html#datetime.date.toordinal>\n */\n export const toOrdinal = function (date: Date) {\n return daysBetween(date, ORDINAL_BASE)\n }\n\n /**\n * @see - <http://docs.python.org/library/datetime.html#datetime.date.fromordinal>\n */\n export const fromOrdinal = function (ordinal: number) {\n return new Date(ORDINAL_BASE.getTime() + ordinal * ONE_DAY)\n }\n\n export const getMonthDays = function (date: Date) {\n const month = date.getUTCMonth()\n return month === 1 && isLeapYear(date.getUTCFullYear())\n ? 29\n : MONTH_DAYS[month]\n }\n\n /**\n * @return {Number} python-like weekday\n */\n export const getWeekday = function (date: Date) {\n return PY_WEEKDAYS[date.getUTCDay()]\n }\n\n /**\n * @see: <http://docs.python.org/library/calendar.html#calendar.monthrange>\n */\n export const monthRange = function (year: number, month: number) {\n const date = new Date(Date.UTC(year, month, 1))\n return [getWeekday(date), getMonthDays(date)]\n }\n\n /**\n * @see: <http://docs.python.org/library/datetime.html#datetime.datetime.combine>\n */\n export const combine = function (date: Date, time: Date | Time) {\n time = time || date\n return new Date(\n Date.UTC(\n date.getUTCFullYear(),\n date.getUTCMonth(),\n date.getUTCDate(),\n time.getHours(),\n time.getMinutes(),\n time.getSeconds(),\n time.getMilliseconds()\n )\n )\n }\n\n export const clone = function (date: Date | Time) {\n const dolly = new Date(date.getTime())\n return dolly\n }\n\n export const cloneDates = function (dates: Date[] | Time[]) {\n const clones = []\n for (let i = 0; i < dates.length; i++) {\n clones.push(clone(dates[i]))\n }\n return clones\n }\n\n /**\n * Sorts an array of Date or dateutil.Time objects\n */\n export const sort = function <T extends Datelike>(dates: T[]) {\n dates.sort(function (a, b) {\n return a.getTime() - b.getTime()\n })\n }\n\n export const timeToUntilString = function (time: number, utc = true) {\n const date = new Date(time)\n return [\n padStart(date.getUTCFullYear().toString(), 4, '0'),\n padStart(date.getUTCMonth() + 1, 2, '0'),\n padStart(date.getUTCDate(), 2, '0'),\n 'T',\n padStart(date.getUTCHours(), 2, '0'),\n padStart(date.getUTCMinutes(), 2, '0'),\n padStart(date.getUTCSeconds(), 2, '0'),\n utc ? 'Z' : '',\n ].join('')\n }\n\n export const untilStringToDate = function (until: string) {\n const re = /^(\\d{4})(\\d{2})(\\d{2})(T(\\d{2})(\\d{2})(\\d{2})Z?)?$/\n const bits = re.exec(until)\n\n if (!bits) throw new Error(`Invalid UNTIL value: ${until}`)\n\n return new Date(\n Date.UTC(\n parseInt(bits[1], 10),\n parseInt(bits[2], 10) - 1,\n parseInt(bits[3], 10),\n parseInt(bits[5], 10) || 0,\n parseInt(bits[6], 10) || 0,\n parseInt(bits[7], 10) || 0\n )\n )\n }\n}\n\nexport default dateutil\n","import { QueryMethodTypes, IterResultType } from './types'\n\n// =============================================================================\n// Results\n// =============================================================================\n\nexport interface IterArgs {\n inc: boolean\n before: Date\n after: Date\n dt: Date\n _value: Date | Date[] | null\n}\n\n/**\n * This class helps us to emulate python's generators, sorta.\n */\nexport default class IterResult<M extends QueryMethodTypes> {\n public readonly method: M\n public readonly args: Partial<IterArgs>\n public readonly minDate: Date | null = null\n public readonly maxDate: Date | null = null\n public _result: Date[] = []\n public total = 0\n\n constructor(method: M, args: Partial<IterArgs>) {\n this.method = method\n this.args = args\n\n if (method === 'between') {\n this.maxDate = args.inc\n ? args.before\n : new Date(args.before.getTime() - 1)\n this.minDate = args.inc ? args.after : new Date(args.after.getTime() + 1)\n } else if (method === 'before') {\n this.maxDate = args.inc ? args.dt : new Date(args.dt.getTime() - 1)\n } else if (method === 'after') {\n this.minDate = args.inc ? args.dt : new Date(args.dt.getTime() + 1)\n }\n }\n\n /**\n * Possibly adds a date into the result.\n *\n * @param {Date} date - the date isn't necessarly added to the result\n * list (if it is too late/too early)\n * @return {Boolean} true if it makes sense to continue the iteration\n * false if we're done.\n */\n accept(date: Date) {\n ++this.total\n const tooEarly = this.minDate && date < this.minDate\n const tooLate = this.maxDate && date > this.maxDate\n\n if (this.method === 'between') {\n if (tooEarly) return true\n if (tooLate) return false\n } else if (this.method === 'before') {\n if (tooLate) return false\n } else if (this.method === 'after') {\n if (tooEarly) return true\n this.add(date)\n return false\n }\n\n return this.add(date)\n }\n\n /**\n *\n * @param {Date} date that is part of the result.\n * @return {Boolean} whether we are interested in more values.\n */\n add(date: Date) {\n this._result.push(date)\n return true\n }\n\n /**\n * 'before' and 'after' return only one date, whereas 'all'\n * and 'between' an array.\n *\n * @return {Date,Array?}\n */\n getValue(): IterResultType<M> {\n const res = this._result\n switch (this.method) {\n case 'all':\n case 'between':\n return res as IterResultType<M>\n case 'before':\n case 'after':\n default:\n return (res.length ? res[res.length - 1] : null) as IterResultType<M>\n }\n }\n\n clone() {\n return new IterResult(this.method, this.args)\n }\n}\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","import IterResult, { IterArgs } from './iterresult'\n\ntype Iterator = (d: Date, len: number) => boolean\n\n/**\n * IterResult subclass that calls a callback function on each add,\n * and stops iterating when the callback returns false.\n */\nexport default class CallbackIterResult extends IterResult<'all' | 'between'> {\n private iterator: Iterator\n\n constructor(\n method: 'all' | 'between',\n args: Partial<IterArgs>,\n iterator: Iterator\n ) {\n super(method, args)\n\n this.iterator = iterator\n }\n\n add(date: Date) {\n if (this.iterator(date, this._result.length)) {\n this._result.push(date)\n return true\n }\n return false\n }\n}\n","// =============================================================================\n// i18n\n// =============================================================================\n\nexport interface Language {\n dayNames: string[]\n monthNames: string[]\n tokens: {\n [k: string]: RegExp\n }\n}\n\nconst ENGLISH: Language = {\n dayNames: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n ],\n monthNames: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ],\n tokens: {\n SKIP: /^[ \\r\\n\\t]+|^\\.$/,\n number: /^[1-9][0-9]*/,\n numberAsText: /^(one|two|three)/i,\n every: /^every/i,\n 'day(s)': /^days?/i,\n 'weekday(s)': /^weekdays?/i,\n 'week(s)': /^weeks?/i,\n 'hour(s)': /^hours?/i,\n 'minute(s)': /^minutes?/i,\n 'month(s)': /^months?/i,\n 'year(s)': /^years?/i,\n on: /^(on|in)/i,\n at: /^(at)/i,\n the: /^the/i,\n first: /^first/i,\n second: /^second/i,\n third: /^third/i,\n nth: /^([1-9][0-9]*)(\\.|th|nd|rd|st)/i,\n last: /^last/i,\n for: /^for/i,\n 'time(s)': /^times?/i,\n until: /^(un)?til/i,\n monday: /^mo(n(day)?)?/i,\n tuesday: /^tu(e(s(day)?)?)?/i,\n wednesday: /^we(d(n(esday)?)?)?/i,\n thursday: /^th(u(r(sday)?)?)?/i,\n friday: /^fr(i(day)?)?/i,\n saturday: /^sa(t(urday)?)?/i,\n sunday: /^su(n(day)?)?/i,\n january: /^jan(uary)?/i,\n february: /^feb(ruary)?/i,\n march: /^mar(ch)?/i,\n april: /^apr(il)?/i,\n may: /^may/i,\n june: /^june?/i,\n july: /^july?/i,\n august: /^aug(ust)?/i,\n september: /^sep(t(ember)?)?/i,\n october: /^oct(ober)?/i,\n november: /^nov(ember)?/i,\n december: /^dec(ember)?/i,\n comma: /^(,\\s*|(and|or)\\s*)+/i,\n },\n}\n\nexport default ENGLISH\n","import ENGLISH, { Language } from './i18n'\nimport { RRule } from '../rrule'\nimport { Options, ByWeekday } from '../types'\nimport { Weekday } from '../weekday'\nimport { isArray, isNumber, isPresent } from '../helpers'\n\n// =============================================================================\n// Helper functions\n// =============================================================================\n\n/**\n * Return true if a value is in an array\n */\nconst contains = function (arr: string[], val: string) {\n return arr.indexOf(val) !== -1\n}\n\n// =============================================================================\n// ToText\n// =============================================================================\n\nexport type GetText = (id: string | number | Weekday) => string\n\nconst defaultGetText: GetText = (id) => id.toString()\n\nexport type DateFormatter = (year: number, month: string, day: number) => string\n\nconst defaultDateFormatter: DateFormatter = (\n year: number,\n month: string,\n day: number\n) => `${month} ${day}, ${year}`\n\n/**\n *\n * @param {RRule} rrule\n * Optional:\n * @param {Function} gettext function\n * @param {Object} language definition\n * @constructor\n */\nexport default class ToText {\n static IMPLEMENTED: string[][]\n private rrule: RRule\n private text: string[]\n private gettext: GetText\n private dateFormatter: DateFormatter\n private language: Language\n private options: Partial<Options>\n private origOptions: Partial<Options>\n private bymonthday: Options['bymonthday'] | null\n private byweekday: {\n allWeeks: ByWeekday[] | null\n someWeeks: ByWeekday[] | null\n isWeekdays: boolean\n isEveryDay: boolean\n } | null\n\n constructor(\n rrule: RRule,\n gettext: GetText = defaultGetText,\n language: Language = ENGLISH,\n dateFormatter: DateFormatter = defaultDateFormatter\n ) {\n this.text = []\n this.language = language || ENGLISH\n this.gettext = gettext\n this.dateFormatter = dateFormatter\n this.rrule = rrule\n this.options = rrule.options\n this.origOptions = rrule.origOptions\n\n if (this.origOptions.bymonthday) {\n const bymonthday = ([] as number[]).concat(this.options.bymonthday)\n const bynmonthday = ([] as number[]).concat(this.options.bynmonthday)\n\n bymonthday.sort((a, b) => a - b)\n bynmonthday.sort((a, b) => b - a)\n // 1, 2, 3, .., -5, -4, -3, ..\n this.bymonthday = bymonthday.concat(bynmonthday)\n if (!this.bymonthday.length) this.bymonthday = null\n }\n\n if (isPresent(this.origOptions.byweekday)) {\n const byweekday = !isArray(this.origOptions.byweekday)\n ? [this.origOptions.byweekday]\n : this.origOptions.byweekday\n const days = String(byweekday)\n\n this.byweekday = {\n allWeeks: byweekday.filter(function (weekday: Weekday) {\n return !weekday.n\n }),\n someWeeks: byweekday.filter(function (weekday: Weekday) {\n return Boolean(weekday.n)\n }),\n isWeekdays:\n days.indexOf('MO') !== -1 &&\n days.indexOf('TU') !== -1 &&\n days.indexOf('WE') !== -1 &&\n days.indexOf('TH') !== -1 &&\n days.indexOf('FR') !== -1 &&\n days.indexOf('SA') === -1 &&\n days.indexOf('SU') === -1,\n isEveryDay:\n days.indexOf('MO') !== -1 &&\n days.indexOf('TU') !== -1 &&\n days.indexOf('WE') !== -1 &&\n days.indexOf('TH') !== -1 &&\n days.indexOf('FR') !== -1 &&\n days.indexOf('SA') !== -1 &&\n days.indexOf('SU') !== -1,\n }\n\n const sortWeekDays = function (a: Weekday, b: Weekday) {\n return a.weekday - b.weekday\n }\n\n this.byweekday.allWeeks.sort(sortWeekDays)\n this.byweekday.someWeeks.sort(sortWeekDays)\n\n if (!this.byweekday.allWeeks.length) this.byweekday.allWeeks = null\n if (!this.byweekday.someWeeks.length) this.byweekday.someWeeks = null\n } else {\n this.byweekday = null\n }\n }\n\n /**\n * Test whether the rrule can be fully converted to text.\n *\n * @param {RRule} rrule\n * @return {Boolean}\n */\n static isFullyConvertible(rrule: RRule) {\n const canConvert = true\n\n if (!(rrule.options.freq in ToText.IMPLEMENTED)) return false\n if (rrule.origOptions.until && rrule.origOptions.count) return false\n\n for (const key in rrule.origOptions) {\n if (contains(['dtstart', 'wkst', 'freq'], key)) return true\n if (!contains(ToText.IMPLEMENTED[rrule.options.freq], key)) return false\n }\n\n return canConvert\n }\n\n isFullyConvertible() {\n return ToText.isFullyConvertible(this.rrule)\n }\n\n /**\n * Perform the conversion. Only some of the frequencies are supported.\n * If some of the rrule's options aren't supported, they'll\n * be omitted from the output an \"(~ approximate)\" will be appended.\n *\n * @return {*}\n */\n toString() {\n const gettext = this.gettext\n\n if (!(this.options.freq in ToText.IMPLEMENTED)) {\n return gettext('RRule error: Unable to fully convert this rrule to text')\n }\n\n this.text = [gettext('every')]\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this[RRule.FREQUENCIES[this.options.freq]]()\n\n if (this.options.until) {\n this.add(gettext('until'))\n const until = this.options.until\n this.add(\n this.dateFormatter(\n until.getUTCFullYear(),\n this.language.monthNames[until.getUTCMonth()],\n until.getUTCDate()\n )\n )\n } else if (this.options.count) {\n this.add(gettext('for'))\n .add(this.options.count.toString())\n .add(\n this.plural(this.options.count) ? gettext('times') : gettext('time')\n )\n }\n\n if (!this.isFullyConvertible()) this.add(gettext('(~ approximate)'))\n\n return this.text.join('')\n }\n\n HOURLY() {\n const gettext = this.gettext\n\n if (this.options.interval !== 1) this.add(this.options.interval.toString())\n\n this.add(\n this.plural(this.options.interval) ? gettext('hours') : gettext('hour')\n )\n }\n\n MINUTELY() {\n const gettext = this.gettext\n\n if (this.options.interval !== 1) this.add(this.options.interval.toString())\n\n this.add(\n this.plural(this.options.interval)\n ? gettext('minutes')\n : gettext('minute')\n )\n }\n\n DAILY() {\n const gettext = this.gettext\n\n if (this.options.interval !== 1) this.add(this.options.interval.toString())\n\n if (this.byweekday && this.byweekday.isWeekdays) {\n this.add(\n this.plural(this.options.interval)\n ? gettext('weekdays')\n : gettext('weekday')\n )\n } else {\n this.add(\n this.plural(this.options.interval) ? gettext('days') : gettext('day')\n )\n }\n\n if (this.origOptions.bymonth) {\n this.add(gettext('in'))\n this._bymonth()\n }\n\n if (this.bymonthday) {\n this._bymonthday()\n } else if (this.byweekday) {\n this._byweekday()\n } else if (this.origOptions.byhour) {\n this._byhour()\n }\n }\n\n WEEKLY() {\n const gettext = this.gettext\n\n if (this.options.interval !== 1) {\n this.add(this.options.interval.toString()).add(\n this.plural(this.options.interval) ? gettext('weeks') : gettext('week')\n )\n }\n\n if (this.byweekday && this.byweekday.isWeekdays) {\n if (this.options.interval === 1) {\n this.add(\n this.plural(this.options.interval)\n ? gettext('weekdays')\n : gettext('weekday')\n )\n } else {\n this.add(gettext('on')).add(gettext('weekdays'))\n }\n } else if (this.byweekday && this.byweekday.isEveryDay) {\n this.add(\n this.plural(this.options.interval) ? gettext('days') : gettext('day')\n )\n } else {\n if (this.options.interval === 1) this.add(gettext('week'))\n\n if (this.origOptions.bymonth) {\n this.add(gettext('in'))\n this._bymonth()\n }\n\n if (this.bymonthday) {\n this._bymonthday()\n } else if (this.byweekday) {\n this._byweekday()\n }\n }\n }\n\n MONTHLY() {\n const gettext = this.gettext\n\n if (this.origOptions.bymonth) {\n if (this.options.interval !== 1) {\n this.add(this.options.interval.toString()).add(gettext('months'))\n if (this.plural(this.options.interval)) this.add(gettext('in'))\n } else {\n // this.add(gettext('MONTH'))\n }\n this._bymonth()\n } else {\n if (this.options.interval !== 1) {\n this.add(this.options.interval.toString())\n }\n this.add(\n this.plural(this.options.interval)\n ? gettext('months')\n : gettext('month')\n )\n }\n if (this.bymonthday) {\n this._bymonthday()\n } else if (this.byweekday && this.byweekday.isWeekdays) {\n this.add(gettext('on')).add(gettext('weekdays'))\n } else if (this.byweekday) {\n this._byweekday()\n }\n }\n\n YEARLY() {\n const gettext = this.gettext\n\n if (this.origOptions.bymonth) {\n if (this.options.interval !== 1) {\n this.add(this.options.interval.toString())\n this.add(gettext('years'))\n } else {\n // this.add(gettext('YEAR'))\n }\n this._bymonth()\n } else {\n if (this.options.interval !== 1) {\n this.add(this.options.interval.toString())\n }\n this.add(\n this.plural(this.options.interval) ? gettext('years') : gettext('year')\n )\n }\n\n if (this.bymonthday) {\n this._bymonthday()\n } else if (this.byweekday) {\n this._byweekday()\n }\n\n if (this.options.byyearday) {\n this.add(gettext('on the'))\n .add(this.list(this.options.byyearday, this.nth, gettext('and')))\n .add(gettext('day'))\n }\n\n if (this.options.byweekno) {\n this.add(gettext('in'))\n .add(\n this.plural((this.options.byweekno as number[]).length)\n ? gettext('weeks')\n : gettext('week')\n )\n .add(this.list(this.options.byweekno, undefined, gettext('and')))\n }\n }\n\n private _bymonthday() {\n const gettext = this.gettext\n if (this.byweekday && this.byweekday.allWeeks) {\n this.add(gettext('on'))\n .add(\n this.list(this.byweekday.allWeeks, this.weekdaytext, gettext('or'))\n )\n .add(gettext('the'))\n .add(this.list(this.bymonthday, this.nth, gettext('or')))\n } else {\n this.add(gettext('on the')).add(\n this.list(this.bymonthday, this.nth, gettext('and'))\n )\n }\n // this.add(gettext('DAY'))\n }\n\n private _byweekday() {\n const gettext = this.gettext\n if (this.byweekday.allWeeks && !this.byweekday.isWeekdays) {\n this.add(gettext('on')).add(\n this.list(this.byweekday.allWeeks, this.weekdaytext)\n )\n }\n\n if (this.byweekday.someWeeks) {\n if (this.byweekday.allWeeks) this.add(gettext('and'))\n\n this.add(gettext('on the')).add(\n this.list(this.byweekday.someWeeks, this.weekdaytext, gettext('and'))\n )\n }\n }\n\n private _byhour() {\n const gettext = this.gettext\n\n this.add(gettext('at')).add(\n this.list(this.origOptions.byhour, undefined, gettext('and'))\n )\n }\n\n private _bymonth() {\n this.add(\n this.list(this.options.bymonth, this.monthtext, this.gettext('and'))\n )\n }\n\n nth(n: number | string) {\n n = parseInt(n.toString(), 10)\n let nth: string\n const gettext = this.gettext\n\n if (n === -1) return gettext('last')\n\n const npos = Math.abs(n)\n switch (npos) {\n case 1:\n case 21:\n case 31:\n nth = npos + gettext('st')\n break\n case 2:\n case 22:\n nth = npos + gettext('nd')\n break\n case 3:\n case 23:\n nth = npos + gettext('rd')\n break\n default:\n nth = npos + gettext('th')\n }\n\n return n < 0 ? nth + ' ' + gettext('last') : nth\n }\n\n monthtext(m: number) {\n return this.language.monthNames[m - 1]\n }\n\n weekdaytext(wday: Weekday | number) {\n const weekday = isNumber(wday) ? (wday + 1) % 7 : wday.getJsWeekday()\n return (\n ((wday as Weekday).n ? this.nth((wday as Weekday).n) + ' ' : '') +\n this.language.dayNames[weekday]\n )\n }\n\n plural(n: number) {\n return n % 100 !== 1\n }\n\n add(s: string) {\n this.text.push(' ')\n this.text.push(s)\n return this\n }\n\n list(\n arr: ByWeekday | ByWeekday[],\n callback?: GetText,\n finalDelim?: string,\n delim = ','\n ) {\n if (!isArray(arr)) {\n arr = [arr]\n }\n const delimJoin = function (\n array: string[],\n delimiter: string,\n finalDelimiter: string\n ) {\n let list = ''\n\n for (let i = 0; i < array.length; i++) {\n if (i !== 0) {\n if (i === array.length - 1) {\n list += ' ' + finalDelimiter + ' '\n } else {\n list += delimiter + ' '\n }\n }\n list += array[i]\n }\n return list\n }\n\n callback =\n callback ||\n function (o) {\n return o.toString()\n }\n\n const realCallback = (arg: ByWeekday) => {\n return callback && callback.call(this, arg)\n }\n\n if (finalDelim) {\n return delimJoin(arr.map(realCallback), delim, finalDelim)\n } else {\n return arr.map(realCallback).join(delim + ' ')\n }\n }\n}\n","import ENGLISH, { Language } from './i18n'\nimport { RRule } from '../rrule'\nimport { ByWeekday, Options } from '../types'\nimport { WeekdayStr } from '../weekday'\n\n// =============================================================================\n// Parser\n// =============================================================================\n\nclass Parser {\n private readonly rules: { [k: string]: RegExp }\n public text: string\n public symbol: string | null\n public value: RegExpExecArray | null\n private done = true\n\n constructor(rules: { [k: string]: RegExp }) {\n this.rules = rules\n }\n\n start(text: string) {\n this.text = text\n this.done = false\n return this.nextSymbol()\n }\n\n isDone() {\n return this.done && this.symbol === null\n }\n\n nextSymbol() {\n let best: RegExpExecArray | null\n let bestSymbol: string\n\n this.symbol = null\n this.value = null\n do {\n if (this.done) return false\n\n let rule: RegExp\n best = null\n for (const name in this.rules) {\n rule = this.rules[name]\n const match = rule.exec(this.text)\n if (match) {\n if (best === null || match[0].length > best[0].length) {\n best = match\n bestSymbol = name\n }\n }\n }\n\n if (best != null) {\n this.text = this.text.substr(best[0].length)\n\n if (this.text === '') this.done = true\n }\n\n if (best == null) {\n this.done = true\n this.symbol = null\n this.value = null\n return\n }\n } while (bestSymbol === 'SKIP')\n\n this.symbol = bestSymbol\n this.value = best\n return true\n }\n\n accept(name: string) {\n if (this.symbol === name) {\n if (this.value) {\n const v = this.value\n this.nextSymbol()\n return v\n }\n\n this.nextSymbol()\n return true\n }\n\n return false\n }\n\n acceptNumber() {\n return this.accept('number') as RegExpExecArray\n }\n\n expect(name: string) {\n if (this.accept(name)) return true\n\n throw new Error('expected ' + name + ' but found ' + this.symbol)\n }\n}\n\nexport default function parseText(text: string, language: Language = ENGLISH) {\n const options: Partial<Options> = {}\n const ttr = new Parser(language.tokens)\n\n if (!ttr.start(text)) return null\n\n S()\n return options\n\n function S() {\n // every [n]\n ttr.expect('every')\n const n = ttr.acceptNumber()\n if (n) options.interval = parseInt(n[0], 10)\n if (ttr.isDone()) throw new Error('Unexpected end')\n\n switch (ttr.symbol) {\n case 'day(s)':\n options.freq = RRule.DAILY\n if (ttr.nextSymbol()) {\n AT()\n F()\n }\n break\n\n // FIXME Note: every 2 weekdays != every two weeks on weekdays.\n // DAILY on weekdays is not a valid rule\n case 'weekday(s)':\n options.freq = RRule.WEEKLY\n options.byweekday = [RRule.MO, RRule.TU, RRule.WE, RRule.TH, RRule.FR]\n ttr.nextSymbol()\n F()\n break\n\n case 'week(s)':\n options.freq = RRule.WEEKLY\n if (ttr.nextSymbol()) {\n ON()\n F()\n }\n break\n\n case 'hour(s)':\n options.freq = RRule.HOURLY\n if (ttr.nextSymbol()) {\n ON()\n F()\n }\n break\n\n case 'minute(s)':\n options.freq = RRule.MINUTELY\n if (ttr.nextSymbol()) {\n ON()\n F()\n }\n break\n\n case 'month(s)':\n options.freq = RRule.MONTHLY\n if (ttr.nextSymbol()) {\n ON()\n F()\n }\n break\n\n case 'year(s)':\n options.freq = RRule.YEARLY\n if (ttr.nextSymbol()) {\n ON()\n F()\n }\n break\n\n case 'monday':\n case 'tuesday':\n case 'wednesday':\n case 'thursday':\n case 'friday':\n case 'saturday':\n case 'sunday':\n options.freq = RRule.WEEKLY\n const key: WeekdayStr = ttr.symbol\n .substr(0, 2)\n .toUpperCase() as WeekdayStr\n options.byweekday = [RRule[key]]\n\n if (!ttr.nextSymbol()) return\n\n // TODO check for duplicates\n while (ttr.accept('comma')) {\n if (ttr.isDone()) throw new Error('Unexpected end')\n\n const wkd = decodeWKD() as keyof typeof RRule\n if (!wkd) {\n throw new Error(\n 'Unexpected symbol ' + ttr.symbol + ', expected weekday'\n )\n }\n\n options.byweekday.push(RRule[wkd] as ByWeekday)\n ttr.nextSymbol()\n }\n MDAYs()\n F()\n break\n\n case 'january':\n case 'february':\n case 'march':\n case 'april':\n case 'may':\n case 'june':\n case 'july':\n case 'august':\n case 'september':\n case 'october':\n case 'november':\n case 'december':\n options.freq = RRule.YEARLY\n options.bymonth = [decodeM() as number]\n\n if (!ttr.nextSymbol()) return\n\n // TODO check for duplicates\n while (ttr.accept('comma')) {\n if (ttr.isDone()) throw new Error('Unexpected end')\n\n const m = decodeM()\n if (!m) {\n throw new Error(\n 'Unexpected symbol ' + ttr.symbol + ', expected month'\n )\n }\n\n options.bymonth.push(m)\n ttr.nextSymbol()\n }\n\n ON()\n F()\n break\n\n default:\n throw new Error('Unknown symbol')\n }\n }\n\n function ON() {\n const on = ttr.accept('on')\n const the = ttr.accept('the')\n if (!(on || the)) return\n\n do {\n const nth = decodeNTH()\n const wkd = decodeWKD()\n const m = decodeM()\n\n // nth <weekday> | <weekday>\n if (nth) {\n // ttr.nextSymbol()\n\n if (wkd) {\n ttr.nextSymbol()\n if (!options.byweekday) options.byweekday = [] as ByWeekday[]\n ;(options.byweekday as ByWeekday[]).push(\n RRule[wkd as WeekdayStr].nth(nth)\n )\n } else {\n if (!options.bymonthday) options.bymonthday = [] as number[]\n ;(options.bymonthday as number[]).push(nth)\n ttr.accept('day(s)')\n }\n // <weekday>\n } else if (wkd) {\n ttr.nextSymbol()\n if (!options.byweekday) options.byweekday = [] as ByWeekday[]\n ;(options.byweekday as ByWeekday[]).push(RRule[wkd as WeekdayStr])\n } else if (ttr.symbol === 'weekday(s)') {\n ttr.nextSymbol()\n if (!options.byweekday) {\n options.byweekday = [RRule.MO, RRule.TU, RRule.WE, RRule.TH, RRule.FR]\n }\n } else if (ttr.symbol === 'week(s)') {\n ttr.nextSymbol()\n let n = ttr.acceptNumber()\n if (!n) {\n throw new Error(\n 'Unexpected symbol ' + ttr.symbol + ', expected week number'\n )\n }\n options.byweekno = [parseInt(n[0], 10)]\n while (ttr.accept('comma')) {\n n = ttr.acceptNumber()\n if (!n) {\n throw new Error(\n 'Unexpected symbol ' + ttr.symbol + '; expected monthday'\n )\n }\n options.byweekno.push(parseInt(n[0], 10))\n }\n } else if (m) {\n ttr.nextSymbol()\n if (!options.bymonth) options.bymonth = [] as number[]\n ;(options.bymonth as number[]).push(m)\n } else {\n return\n }\n } while (ttr.accept('comma') || ttr.accept('the') || ttr.accept('on'))\n }\n\n function AT() {\n const at = ttr.accept('at')\n if (!at) return\n\n do {\n let n = ttr.acceptNumber()\n if (!n) {\n throw new Error('Unexpected symbol ' + ttr.symbol + ', expected hour')\n }\n options.byhour = [parseInt(n[0], 10)]\n while (ttr.accept('comma')) {\n n = ttr.acceptNumber()\n if (!n) {\n throw new Error('Unexpected symbol ' + ttr.symbol + '; expected hour')\n }\n options.byhour.push(parseInt(n[0], 10))\n }\n } while (ttr.accept('comma') || ttr.accept('at'))\n }\n\n function decodeM() {\n switch (ttr.symbol) {\n case 'january':\n return 1\n case 'february':\n return 2\n case 'march':\n return 3\n case 'april':\n return 4\n case 'may':\n return 5\n case 'june':\n return 6\n case 'july':\n return 7\n case 'august':\n return 8\n case 'september':\n return 9\n case 'october':\n return 10\n case 'november':\n return 11\n case 'december':\n return 12\n default:\n return false\n }\n }\n\n function decodeWKD() {\n switch (ttr.symbol) {\n case 'monday':\n case 'tuesday':\n case 'wednesday':\n case 'thursday':\n case 'friday':\n case 'saturday':\n case 'sunday':\n return ttr.symbol.substr(0, 2).toUpperCase()\n default:\n return false\n }\n }\n\n function decodeNTH() {\n switch (ttr.symbol) {\n case 'last':\n ttr.nextSymbol()\n return -1\n case 'first':\n ttr.nextSymbol()\n return 1\n case 'second':\n ttr.nextSymbol()\n return ttr.accept('last') ? -2 : 2\n case 'third':\n ttr.nextSymbol()\n return ttr.accept('last') ? -3 : 3\n case 'nth':\n const v = parseInt(ttr.value[1], 10)\n if (v < -366 || v > 366) throw new Error('Nth out of range: ' + v)\n\n ttr.nextSymbol()\n return ttr.accept('last') ? -v : v\n\n default:\n return false\n }\n }\n\n function MDAYs() {\n ttr.accept('on')\n ttr.accept('the')\n\n let nth = decodeNTH()\n if (!nth) return\n\n options.bymonthday = [nth]\n ttr.nextSymbol()\n\n while (ttr.accept('comma')) {\n nth = decodeNTH()\n if (!nth) {\n throw new Error(\n 'Unexpected symbol ' + ttr.symbol + '; expected monthday'\n )\n }\n\n options.bymonthday.push(nth)\n ttr.nextSymbol()\n }\n }\n\n function F() {\n if (ttr.symbol === 'until') {\n const date = Date.parse(ttr.text)\n\n if (!date) throw new Error('Cannot parse until date:' + ttr.text)\n options.until = new Date(date)\n } else if (ttr.accept('for')) {\n options.count = parseInt(ttr.value[0], 10)\n ttr.expect('number')\n // ttr.expect('times')\n }\n }\n}\n","import { Weekday, WeekdayStr } from './weekday'\n\nexport interface QueryMethods {\n all(): Date[]\n between(after: Date, before: Date, inc: boolean): Date[]\n before(date: Date, inc: boolean): Date\n after(date: Date, inc: boolean): Date\n}\n\nexport type QueryMethodTypes = keyof QueryMethods\nexport type IterResultType<M extends QueryMethodTypes> = M extends\n | 'all'\n | 'between'\n ? Date[]\n : Date | null\n\nexport enum Frequency {\n YEARLY = 0,\n MONTHLY = 1,\n WEEKLY = 2,\n DAILY = 3,\n HOURLY = 4,\n MINUTELY = 5,\n SECONDLY = 6,\n}\n\nexport function freqIsDailyOrGreater(\n freq: Frequency\n): freq is\n | Frequency.YEARLY\n | Frequency.MONTHLY\n | Frequency.WEEKLY\n | Frequency.DAILY {\n return freq < Frequency.HOURLY\n}\n\nexport interface Options {\n freq: Frequency\n dtstart: Date | null\n interval: number\n wkst: Weekday | number | null\n count: number | null\n until: Date | null\n tzid: string | null\n bysetpos: number | number[] | null\n bymonth: number | number[] | null\n bymonthday: number | number[] | null\n bynmonthday: number[] | null\n byyearday: number | number[] | null\n byweekno: number | number[] | null\n byweekday: ByWeekday | ByWeekday[] | null\n bynweekday: number[][] | null\n byhour: number | number[] | null\n byminute: number | number[] | null\n bysecond: number | number[] | null\n byeaster: number | null\n}\n\nexport interface ParsedOptions extends Options {\n dtstart: Date\n wkst: number\n bysetpos: number[]\n bymonth: number[]\n bymonthday: number[]\n bynmonthday: number[]\n byyearday: number[]\n byweekno: number[]\n byweekday: number[]\n byhour: number[]\n byminute: number[]\n bysecond: number[]\n}\n\nexport type ByWeekday = WeekdayStr | number | Weekday\n","import ToText, { DateFormatter, GetText } from './totext'\nimport parseText from './parsetext'\nimport { RRule } from '../rrule'\nimport { Frequency } from '../types'\nimport ENGLISH, { Language } from './i18n'\n\n/* !\n * rrule.js - Library for working with recurrence rules for calendar dates.\n * https://github.com/jakubroztocil/rrule\n *\n * Copyright 2010, Jakub Roztocil and Lars Schoning\n * Licenced under the BSD licence.\n * https://github.com/jakubroztocil/rrule/blob/master/LICENCE\n *\n */\n\n/**\n *\n * Implementation of RRule.fromText() and RRule::toText().\n *\n *\n * On the client side, this file needs to be included\n * when those functions are used.\n *\n */\n\n// =============================================================================\n// fromText\n// =============================================================================\n/**\n * Will be able to convert some of the below described rules from\n * text format to a rule object.\n *\n *\n * RULES\n *\n * Every ([n])\n * day(s)\n * | [weekday], ..., (and) [weekday]\n * | weekday(s)\n * | week(s)\n * | month(s)\n * | [month], ..., (and) [month]\n * | year(s)\n *\n *\n * Plus 0, 1, or multiple of these:\n *\n * on [weekday], ..., (or) [weekday] the [monthday], [monthday], ... (or) [monthday]\n *\n * on [weekday], ..., (and) [weekday]\n *\n * on the [monthday], [monthday], ... (and) [monthday] (day of the month)\n *\n * on the [nth-weekday], ..., (and) [nth-weekday] (of the month/year)\n *\n *\n * Plus 0 or 1 of these:\n *\n * for [n] time(s)\n *\n * until [date]\n *\n * Plus (.)\n *\n *\n * Definitely no supported for parsing:\n *\n * (for year):\n * in week(s) [n], ..., (and) [n]\n *\n * on the [yearday], ..., (and) [n] day of the year\n * on day [yearday], ..., (and) [n]\n *\n *\n * NON-TERMINALS\n *\n * [n]: 1, 2 ..., one, two, three ..\n * [month]: January, February, March, April, May, ... December\n * [weekday]: Monday, ... Sunday\n * [nth-weekday]: first [weekday], 2nd [weekday], ... last [weekday], ...\n * [monthday]: first, 1., 2., 1st, 2nd, second, ... 31st, last day, 2nd last day, ..\n * [date]:\n * - [month] (0-31(,) ([year])),\n * - (the) 0-31.(1-12.([year])),\n * - (the) 0-31/(1-12/([year])),\n * - [weekday]\n *\n * [year]: 0000, 0001, ... 01, 02, ..\n *\n * Definitely not supported for parsing:\n *\n * [yearday]: first, 1., 2., 1st, 2nd, second, ... 366th, last day, 2nd last day, ..\n *\n * @param {String} text\n * @return {Object, Boolean} the rule, or null.\n */\nconst fromText = function (text: string, language: Language = ENGLISH) {\n return new RRule(parseText(text, language) || undefined)\n}\n\nconst common = [\n 'count',\n 'until',\n 'interval',\n 'byweekday',\n 'bymonthday',\n 'bymonth',\n]\n\nToText.IMPLEMENTED = []\nToText.IMPLEMENTED[Frequency.HOURLY] = common\nToText.IMPLEMENTED[Frequency.MINUTELY] = common\nToText.IMPLEMENTED[Frequency.DAILY] = ['byhour'].concat(common)\nToText.IMPLEMENTED[Frequency.WEEKLY] = common\nToText.IMPLEMENTED[Frequency.MONTHLY] = common\nToText.IMPLEMENTED[Frequency.YEARLY] = ['byweekno', 'byyearday'].concat(common)\n\n// =============================================================================\n// Export\n// =============================================================================\n\nconst toText = function (\n rrule: RRule,\n gettext?: GetText,\n language?: Language,\n dateFormatter?: DateFormatter\n) {\n return new ToText(rrule, gettext, language, dateFormatter).toString()\n}\n\nconst { isFullyConvertible } = ToText\n\nexport interface Nlp {\n fromText: typeof fromText\n parseText: typeof parseText\n isFullyConvertible: typeof isFullyConvertible\n toText: typeof toText\n}\n\nexport { fromText, parseText, isFullyConvertible, toText }\n","import { ParsedOptions, Frequency } from './types'\nimport { pymod, divmod, empty, includes } from './helpers'\nimport { dateutil } from './dateutil'\n\nexport class Time {\n public hour: number\n public minute: number\n public second: number\n public millisecond: number\n\n constructor(\n hour: number,\n minute: number,\n second: number,\n millisecond: number\n ) {\n this.hour = hour\n this.minute = minute\n this.second = second\n this.millisecond = millisecond || 0\n }\n\n getHours() {\n return this.hour\n }\n\n getMinutes() {\n return this.minute\n }\n\n getSeconds() {\n return this.second\n }\n\n getMilliseconds() {\n return this.millisecond\n }\n\n getTime() {\n return (\n (this.hour * 60 * 60 + this.minute * 60 + this.second) * 1000 +\n this.millisecond\n )\n }\n}\n\nexport class DateTime extends Time {\n public day: number\n public month: number\n public year: number\n\n static fromDate(date: Date) {\n return new this(\n date.getUTCFullYear(),\n date.getUTCMonth() + 1,\n date.getUTCDate(),\n date.getUTCHours(),\n date.getUTCMinutes(),\n date.getUTCSeconds(),\n date.valueOf() % 1000\n )\n }\n\n constructor(\n year: number,\n month: number,\n day: number,\n hour: number,\n minute: number,\n second: number,\n millisecond: number\n ) {\n super(hour, minute, second, millisecond)\n this.year = year\n this.month = month\n this.day = day\n }\n\n getWeekday() {\n return dateutil.getWeekday(new Date(this.getTime()))\n }\n\n getTime() {\n return new Date(\n Date.UTC(\n this.year,\n this.month - 1,\n this.day,\n this.hour,\n this.minute,\n this.second,\n this.millisecond\n )\n ).getTime()\n }\n\n getDay() {\n return this.day\n }\n\n getMonth() {\n return this.month\n }\n\n getYear() {\n return this.year\n }\n\n public addYears(years: number) {\n this.year += years\n }\n\n public addMonths(months: number) {\n this.month += months\n if (this.month > 12) {\n const yearDiv = Math.floor(this.month / 12)\n const monthMod = pymod(this.month, 12)\n this.month = monthMod\n this.year += yearDiv\n if (this.month === 0) {\n this.month = 12\n --this.year\n }\n }\n }\n\n public addWeekly(days: number, wkst: number) {\n if (wkst > this.getWeekday()) {\n this.day += -(this.getWeekday() + 1 + (6 - wkst)) + days * 7\n } else {\n this.day += -(this.getWeekday() - wkst) + days * 7\n }\n\n this.fixDay()\n }\n\n public addDaily(days: number) {\n this.day += days\n this.fixDay()\n }\n\n public addHours(hours: number, filtered: boolean, byhour: number[]) {\n if (filtered) {\n // Jump to one iteration before next day\n this.hour += Math.floor((23 - this.hour) / hours) * hours\n }\n\n for (;;) {\n this.hour += hours\n const { div: dayDiv, mod: hourMod } = divmod(this.hour, 24)\n if (dayDiv) {\n this.hour = hourMod\n this.addDaily(dayDiv)\n }\n\n if (empty(byhour) || includes(byhour, this.hour)) break\n }\n }\n\n public addMinutes(\n minutes: number,\n filtered: boolean,\n byhour: number[],\n byminute: number[]\n ) {\n if (filtered) {\n // Jump to one iteration before next day\n this.minute +=\n Math.floor((1439 - (this.hour * 60 + this.minute)) / minutes) * minutes\n }\n\n for (;;) {\n this.minute += minutes\n const { div: hourDiv, mod: minuteMod } = divmod(this.minute, 60)\n if (hourDiv) {\n this.minute = minuteMod\n this.addHours(hourDiv, false, byhour)\n }\n\n if (\n (empty(byhour) || includes(byhour, this.hour)) &&\n (empty(byminute) || includes(byminute, this.minute))\n ) {\n break\n }\n }\n }\n\n public addSeconds(\n seconds: number,\n filtered: boolean,\n byhour: number[],\n byminute: number[],\n bysecond: number[]\n ) {\n if (filtered) {\n // Jump to one iteration before next day\n this.second +=\n Math.floor(\n (86399 - (this.hour * 3600 + this.minute * 60 + this.second)) /\n seconds\n ) * seconds\n }\n\n for (;;) {\n this.second += seconds\n const { div: minuteDiv, mod: secondMod } = divmod(this.second, 60)\n if (minuteDiv) {\n this.second = secondMod\n this.addMinutes(minuteDiv, false, byhour, byminute)\n }\n\n if (\n (empty(byhour) || includes(byhour, this.hour)) &&\n (empty(byminute) || includes(byminute, this.minute)) &&\n (empty(bysecond) || includes(bysecond, this.second))\n ) {\n break\n }\n }\n }\n\n public fixDay() {\n if (this.day <= 28) {\n return\n }\n\n let daysinmonth = dateutil.monthRange(this.year, this.month - 1)[1]\n if (this.day <= daysinmonth) {\n return\n }\n\n while (this.day > daysinmonth) {\n this.day -= daysinmonth\n ++this.month\n if (this.month === 13) {\n this.month = 1\n ++this.year\n if (this.year > dateutil.MAXYEAR) {\n return\n }\n }\n\n daysinmonth = dateutil.monthRange(this.year, this.month - 1)[1]\n }\n }\n\n public add(options: ParsedOptions, filtered: boolean) {\n const { freq, interval, wkst, byhour, byminute, bysecond } = options\n\n switch (freq) {\n case Frequency.YEARLY:\n return this.addYears(interval)\n case Frequency.MONTHLY:\n return this.addMonths(interval)\n case Frequency.WEEKLY:\n return this.addWeekly(interval, wkst)\n case Frequency.DAILY:\n return this.addDaily(interval)\n case Frequency.HOURLY:\n return this.addHours(interval, filtered, byhour)\n case Frequency.MINUTELY:\n return this.addMinutes(interval, filtered, byhour, byminute)\n case Frequency.SECONDLY:\n return this.addSeconds(interval, filtered, byhour, byminute, bysecond)\n }\n }\n}\n","import { Options, ParsedOptions, freqIsDailyOrGreater } from './types'\nimport {\n includes,\n notEmpty,\n isPresent,\n isNumber,\n isArray,\n isWeekdayStr,\n} from './helpers'\nimport { RRule, defaultKeys, DEFAULT_OPTIONS } from './rrule'\nimport dateutil from './dateutil'\nimport { Weekday } from './weekday'\nimport { Time } from './datetime'\n\nexport function initializeOptions(options: Partial<Options>) {\n const invalid: string[] = []\n const keys = Object.keys(options) as (keyof Options)[]\n\n // Shallow copy for options and origOptions and check for invalid\n for (const key of keys) {\n if (!includes(defaultKeys, key)) invalid.push(key)\n if (dateutil.isDate(options[key]) && !dateutil.isValidDate(options[key])) {\n invalid.push(key)\n }\n }\n\n if (invalid.length) {\n throw new Error('Invalid options: ' + invalid.join(', '))\n }\n\n return { ...options }\n}\n\nexport function parseOptions(options: Partial<Options>) {\n const opts = { ...DEFAULT_OPTIONS, ...initializeOptions(options) }\n\n if (isPresent(opts.byeaster)) opts.freq = RRule.YEARLY\n\n if (!(isPresent(opts.freq) && RRule.FREQUENCIES[opts.freq])) {\n throw new Error(`Invalid frequency: ${opts.freq} ${options.freq}`)\n }\n\n if (!opts.dtstart) opts.dtstart = new Date(new Date().setMilliseconds(0))\n\n if (!isPresent(opts.wkst)) {\n opts.wkst = RRule.MO.weekday\n } else if (isNumber(opts.wkst)) {\n // cool, just keep it like that\n } else {\n opts.wkst = opts.wkst.weekday\n }\n\n if (isPresent(opts.bysetpos)) {\n if (isNumber(opts.bysetpos)) opts.bysetpos = [opts.bysetpos]\n\n for (let i = 0; i < opts.bysetpos.length; i++) {\n const v = opts.bysetpos[i]\n if (v === 0 || !(v >= -366 && v <= 366)) {\n throw new Error(\n 'bysetpos must be between 1 and 366,' + ' or between -366 and -1'\n )\n }\n }\n }\n\n if (\n !(\n Boolean(opts.byweekno as number) ||\n notEmpty(opts.byweekno as number[]) ||\n notEmpty(opts.byyearday as number[]) ||\n Boolean(opts.bymonthday) ||\n notEmpty(opts.bymonthday as number[]) ||\n isPresent(opts.byweekday) ||\n isPresent(opts.byeaster)\n )\n ) {\n switch (opts.freq) {\n case RRule.YEARLY:\n if (!opts.bymonth) opts.bymonth = opts.dtstart.getUTCMonth() + 1\n opts.bymonthday = opts.dtstart.getUTCDate()\n break\n case RRule.MONTHLY:\n opts.bymonthday = opts.dtstart.getUTCDate()\n break\n case RRule.WEEKLY:\n opts.byweekday = [dateutil.getWeekday(opts.dtstart)]\n break\n }\n }\n\n // bymonth\n if (isPresent(opts.bymonth) && !isArray(opts.bymonth)) {\n opts.bymonth = [opts.bymonth]\n }\n\n // byyearday\n if (\n isPresent(opts.byyearday) &&\n !isArray(opts.byyearday) &&\n isNumber(opts.byyearday)\n ) {\n opts.byyearday = [opts.byyearday]\n }\n\n // bymonthday\n if (!isPresent(opts.bymonthday)) {\n opts.bymonthday = []\n opts.bynmonthday = []\n } else if (isArray(opts.bymonthday)) {\n const bymonthday = []\n const bynmonthday = []\n\n for (let i = 0; i < opts.bymonthday.length; i++) {\n const v = opts.bymonthday[i]\n if (v > 0) {\n bymonthday.push(v)\n } else if (v < 0) {\n bynmonthday.push(v)\n }\n }\n opts.bymonthday = bymonthday\n opts.bynmonthday = bynmonthday\n } else if (opts.bymonthday < 0) {\n opts.bynmonthday = [opts.bymonthday]\n opts.bymonthday = []\n } else {\n opts.bynmonthday = []\n opts.bymonthday = [opts.bymonthday]\n }\n\n // byweekno\n if (isPresent(opts.byweekno) && !isArray(opts.byweekno)) {\n opts.byweekno = [opts.byweekno]\n }\n\n // byweekday / bynweekday\n if (!isPresent(opts.byweekday)) {\n opts.bynweekday = null\n } else if (isNumber(opts.byweekday)) {\n opts.byweekday = [opts.byweekday]\n opts.bynweekday = null\n } else if (isWeekdayStr(opts.byweekday)) {\n opts.byweekday = [Weekday.fromStr(opts.byweekday).weekday]\n opts.bynweekday = null\n } else if (opts.byweekday instanceof Weekday) {\n if (!opts.byweekday.n || opts.freq > RRule.MONTHLY) {\n opts.byweekday = [opts.byweekday.weekday]\n opts.bynweekday = null\n } else {\n opts.bynweekday = [[opts.byweekday.weekday, opts.byweekday.n]]\n opts.byweekday = null\n }\n } else {\n const byweekday: number[] = []\n const bynweekday = []\n\n for (let i = 0; i < opts.byweekday.length; i++) {\n const wday = opts.byweekday[i]\n\n if (isNumber(wday)) {\n byweekday.push(wday)\n continue\n } else if (isWeekdayStr(wday)) {\n byweekday.push(Weekday.fromStr(wday).weekday)\n continue\n }\n\n if (!wday.n || opts.freq > RRule.MONTHLY) {\n byweekday.push(wday.weekday)\n } else {\n bynweekday.push([wday.weekday, wday.n])\n }\n }\n opts.byweekday = notEmpty(byweekday) ? byweekday : null\n opts.bynweekday = notEmpty(bynweekday) ? bynweekday : null\n }\n\n // byhour\n if (!isPresent(opts.byhour)) {\n opts.byhour = opts.freq < RRule.HOURLY ? [opts.dtstart.getUTCHours()] : null\n } else if (isNumber(opts.byhour)) {\n opts.byhour = [opts.byhour]\n }\n\n // byminute\n if (!isPresent(opts.byminute)) {\n opts.byminute =\n opts.freq < RRule.MINUTELY ? [opts.dtstart.getUTCMinutes()] : null\n } else if (isNumber(opts.byminute)) {\n opts.byminute = [opts.byminute]\n }\n\n // bysecond\n if (!isPresent(opts.bysecond)) {\n opts.bysecond =\n opts.freq < RRule.SECONDLY ? [opts.dtstart.getUTCSeconds()] : null\n } else if (isNumber(opts.bysecond)) {\n opts.bysecond = [opts.bysecond]\n }\n\n return { parsedOptions: opts as ParsedOptions }\n}\n\nexport function buildTimeset(opts: ParsedOptions) {\n const millisecondModulo = opts.dtstart.getTime() % 1000\n if (!freqIsDailyOrGreater(opts.freq)) {\n return []\n }\n\n const timeset: Time[] = []\n opts.byhour.forEach((hour) => {\n opts.byminute.forEach((minute) => {\n opts.bysecond.forEach((second) => {\n timeset.push(new Time(hour, minute, second, millisecondModulo))\n })\n })\n })\n\n return timeset\n}\n","import { Options, Frequency } from './types'\nimport { Weekday } from './weekday'\nimport dateutil from './dateutil'\nimport { Days } from './rrule'\n\nexport function parseString(rfcString: string): Partial<Options> {\n const options = rfcString\n .split('\\n')\n .map(parseLine)\n .filter((x) => x !== null)\n return { ...options[0], ...options[1] }\n}\n\nexport function parseDtstart(line: string) {\n const options: Partial<Options> = {}\n\n const dtstartWithZone = /DTSTART(?:;TZID=([^:=]+?))?(?::|=)([^;\\s]+)/i.exec(\n line\n )\n\n if (!dtstartWithZone) {\n return options\n }\n\n const [, tzid, dtstart] = dtstartWithZone\n\n if (tzid) {\n options.tzid = tzid\n }\n options.dtstart = dateutil.untilStringToDate(dtstart)\n return options\n}\n\nfunction parseLine(rfcString: string) {\n rfcString = rfcString.replace(/^\\s+|\\s+$/, '')\n if (!rfcString.length) return null\n\n const header = /^([A-Z]+?)[:;]/.exec(rfcString.toUpperCase())\n if (!header) {\n return parseRrule(rfcString)\n }\n\n const [, key] = header\n switch (key.toUpperCase()) {\n case 'RRULE':\n case 'EXRULE':\n return parseRrule(rfcString)\n case 'DTSTART':\n return parseDtstart(rfcString)\n default:\n throw new Error(`Unsupported RFC prop ${key} in ${rfcString}`)\n }\n}\n\nfunction parseRrule(line: string) {\n const strippedLine = line.replace(/^RRULE:/i, '')\n const options = parseDtstart(strippedLine)\n\n const attrs = line.replace(/^(?:RRULE|EXRULE):/i, '').split(';')\n\n attrs.forEach((attr) => {\n const [key, value] = attr.split('=')\n switch (key.toUpperCase()) {\n case 'FREQ':\n options.freq = Frequency[value.toUpperCase() as keyof typeof Frequency]\n break\n case 'WKST':\n options.wkst = Days[value.toUpperCase() as keyof typeof Days]\n break\n case 'COUNT':\n case 'INTERVAL':\n case 'BYSETPOS':\n case 'BYMONTH':\n case 'BYMONTHDAY':\n case 'BYYEARDAY':\n case 'BYWEEKNO':\n case 'BYHOUR':\n case 'BYMINUTE':\n case 'BYSECOND':\n const num = parseNumber(value)\n const optionKey = key.toLowerCase()\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n options[optionKey] = num\n break\n case 'BYWEEKDAY':\n case 'BYDAY':\n options.byweekday = parseWeekday(value)\n break\n case 'DTSTART':\n case 'TZID':\n // for backwards compatibility\n const dtstart = parseDtstart(line)\n options.tzid = dtstart.tzid\n options.dtstart = dtstart.dtstart\n break\n case 'UNTIL':\n options.until = dateutil.untilStringToDate(value)\n break\n case 'BYEASTER':\n options.byeaster = Number(value)\n break\n default:\n throw new Error(\"Unknown RRULE property '\" + key + \"'\")\n }\n })\n\n return options\n}\n\nfunction parseNumber(value: string) {\n if (value.indexOf(',') !== -1) {\n const values = value.split(',')\n return values.map(parseIndividualNumber)\n }\n\n return parseIndividualNumber(value)\n}\n\nfunction parseIndividualNumber(value: string) {\n if (/^[+-]?\\d+$/.test(value)) {\n return Number(value)\n }\n\n return value\n}\n\nfunction parseWeekday(value: string) {\n const days = value.split(',')\n\n return days.map((day) => {\n if (day.length === 2) {\n // MO, TU, ...\n return Days[day as keyof typeof Days] // wday instanceof Weekday\n }\n\n // -1MO, +3FR, 1SO, 13TU ...\n const parts = day.match(/^([+-]?\\d{1,2})([A-Z]{2})$/)\n if (!parts || parts.length < 3) {\n throw new SyntaxError(`Invalid weekday string: ${day}`)\n }\n const n = Number(parts[1])\n const wdaypart = parts[2] as keyof typeof Days\n const wday = Days[wdaypart].weekday\n return new Weekday(wday, n)\n })\n}\n","import dateutil from './dateutil'\n\nexport class DateWithZone {\n public date: Date\n public tzid?: string | null\n\n constructor(date: Date, tzid?: string | null) {\n if (isNaN(date.getTime())) {\n throw new RangeError('Invalid date passed to DateWithZone')\n }\n this.date = date\n this.tzid = tzid\n }\n\n private get isUTC() {\n return !this.tzid || this.tzid.toUpperCase() === 'UTC'\n }\n\n public toString() {\n const datestr = dateutil.timeToUntilString(this.date.getTime(), this.isUTC)\n if (!this.isUTC) {\n return `;TZID=${this.tzid}:${datestr}`\n }\n\n return `:${datestr}`\n }\n\n public getTime() {\n return this.date.getTime()\n }\n\n public rezonedDate() {\n if (this.isUTC) {\n return this.date\n }\n\n const localTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone\n const dateInLocalTZ = new Date(\n this.date.toLocaleString(undefined, { timeZone: localTimeZone })\n )\n const dateInTargetTZ = new Date(\n this.date.toLocaleString(undefined, { timeZone: this.tzid ?? 'UTC' })\n )\n const tzOffset = dateInTargetTZ.getTime() - dateInLocalTZ.getTime()\n\n return new Date(this.date.getTime() - tzOffset)\n }\n}\n","import { Options } from './types'\nimport { RRule, DEFAULT_OPTIONS } from './rrule'\nimport { includes, isPresent, isArray, isNumber, toArray } from './helpers'\nimport { Weekday } from './weekday'\nimport dateutil from './dateutil'\nimport { DateWithZone } from './datewithzone'\n\nexport function optionsToString(options: Partial<Options>) {\n const rrule: string[][] = []\n let dtstart = ''\n const keys: (keyof Options)[] = Object.keys(options) as (keyof Options)[]\n const defaultKeys = Object.keys(DEFAULT_OPTIONS)\n\n for (let i = 0; i < keys.length; i++) {\n if (keys[i] === 'tzid') continue\n if (!includes(defaultKeys, keys[i])) continue\n\n let key = keys[i].toUpperCase()\n const value = options[keys[i]]\n let outValue = ''\n\n if (!isPresent(value) || (isArray(value) && !value.length)) continue\n\n switch (key) {\n case 'FREQ':\n outValue = RRule.FREQUENCIES[options.freq]\n break\n case 'WKST':\n if (isNumber(value)) {\n outValue = new Weekday(value).toString()\n } else {\n outValue = value.toString()\n }\n break\n case 'BYWEEKDAY':\n /*\n NOTE: BYWEEKDAY is a special case.\n RRule() deconstructs the rule.options.byweekday array\n into an array of Weekday arguments.\n On the other hand, rule.origOptions is an array of Weekdays.\n We need to handle both cases here.\n It might be worth change RRule to keep the Weekdays.\n\n Also, BYWEEKDAY (used by RRule) vs. BYDAY (RFC)\n\n */\n key = 'BYDAY'\n outValue = toArray<Weekday | number[] | number>(\n value as Weekday | number[] | number\n )\n .map((wday) => {\n if (wday instanceof Weekday) {\n return wday\n }\n\n if (isArray(wday)) {\n return new Weekday(wday[0], wday[1])\n }\n\n return new Weekday(wday)\n })\n .toString()\n\n break\n case 'DTSTART':\n dtstart = buildDtstart(value as number, options.tzid)\n break\n\n case 'UNTIL':\n outValue = dateutil.timeToUntilString(value as number, !options.tzid)\n break\n\n default:\n if (isArray(value)) {\n const strValues: string[] = []\n for (let j = 0; j < value.length; j++) {\n strValues[j] = String(value[j])\n }\n outValue = strValues.toString()\n } else {\n outValue = String(value)\n }\n }\n\n if (outValue) {\n rrule.push([key, outValue])\n }\n }\n\n const rules = rrule\n .map(([key, value]) => `${key}=${value.toString()}`)\n .join(';')\n let ruleString = ''\n if (rules !== '') {\n ruleString = `RRULE:${rules}`\n }\n\n return [dtstart, ruleString].filter((x) => !!x).join('\\n')\n}\n\nfunction buildDtstart(dtstart?: number, tzid?: string | null) {\n if (!dtstart) {\n return ''\n }\n\n return 'DTSTART' + new DateWithZone(new Date(dtstart), tzid).toString()\n}\n","import IterResult, { IterArgs } from './iterresult'\nimport dateutil from './dateutil'\nimport { isArray } from './helpers'\n\nexport type CacheKeys = 'before' | 'after' | 'between'\n\nfunction argsMatch(\n left: IterArgs[keyof IterArgs] | undefined,\n right: IterArgs[keyof IterArgs] | undefined\n) {\n if (Array.isArray(left)) {\n if (!Array.isArray(right)) return false\n if (left.length !== right.length) return false\n return left.every((date, i) => date.getTime() === right[i].getTime())\n }\n\n if (left instanceof Date) {\n return right instanceof Date && left.getTime() === right.getTime()\n }\n\n return left === right\n}\n\nexport class Cache {\n all: Date[] | Partial<IterArgs> | false = false\n before: IterArgs[] = []\n after: IterArgs[] = []\n between: IterArgs[] = []\n\n /**\n * @param {String} what - all/before/after/between\n * @param {Array,Date} value - an array of dates, one date, or null\n * @param {Object?} args - _iter arguments\n */\n public _cacheAdd(\n what: CacheKeys | 'all',\n value: Date[] | Date | null,\n args?: Partial<IterArgs>\n ) {\n if (value) {\n value =\n value instanceof Date\n ? dateutil.clone(value)\n : dateutil.cloneDates(value)\n }\n\n if (what === 'all') {\n this.all = value as Date[]\n } else {\n args._value = value\n this[what].push(args as IterArgs)\n }\n }\n\n /**\n * @return false - not in the cache\n * @return null - cached, but zero occurrences (before/after)\n * @return Date - cached (before/after)\n * @return [] - cached, but zero occurrences (all/between)\n * @return [Date1, DateN] - cached (all/between)\n */\n public _cacheGet(\n what: CacheKeys | 'all',\n args?: Partial<IterArgs>\n ): Date | Date[] | false | null {\n let cached: Date | Date[] | false | null = false\n const argsKeys = args ? (Object.keys(args) as (keyof IterArgs)[]) : []\n const findCacheDiff = function (item: IterArgs) {\n for (let i = 0; i < argsKeys.length; i++) {\n const key = argsKeys[i]\n if (!argsMatch(args[key], item[key])) {\n return true\n }\n }\n return false\n }\n\n const cachedObject = this[what]\n if (what === 'all') {\n cached = this.all as Date[]\n } else if (isArray(cachedObject)) {\n // Let's see whether we've already called the\n // 'what' method with the same 'args'\n for (let i = 0; i < cachedObject.length; i++) {\n const item = cachedObject[i] as IterArgs\n if (argsKeys.length && findCacheDiff(item)) continue\n cached = item._value\n break\n }\n }\n\n if (!cached && this.all) {\n // Not in the cache, but we already know all the occurrences,\n // so we can find the correct dates from the cached ones.\n const iterResult = new IterResult(what, args)\n for (let i = 0; i < (this.all as Date[]).length; i++) {\n if (!iterResult.accept((this.all as Date[])[i])) break\n }\n cached = iterResult.getValue() as Date\n this._cacheAdd(what, cached, args)\n }\n\n return isArray(cached)\n ? dateutil.cloneDates(cached)\n : cached instanceof Date\n ? dateutil.clone(cached)\n : cached\n }\n}\n","import { range, repeat } from './helpers'\n\n// =============================================================================\n// Date masks\n// =============================================================================\n\n// Every mask is 7 days longer to handle cross-year weekly periods.\n\nconst M365MASK = [\n ...repeat(1, 31),\n ...repeat(2, 28),\n ...repeat(3, 31),\n ...repeat(4, 30),\n ...repeat(5, 31),\n ...repeat(6, 30),\n ...repeat(7, 31),\n ...repeat(8, 31),\n ...repeat(9, 30),\n ...repeat(10, 31),\n ...repeat(11, 30),\n ...repeat(12, 31),\n ...repeat(1, 7),\n]\n\nconst M366MASK = [\n ...repeat(1, 31),\n ...repeat(2, 29),\n ...repeat(3, 31),\n ...repeat(4, 30),\n ...repeat(5, 31),\n ...repeat(6, 30),\n ...repeat(7, 31),\n ...repeat(8, 31),\n ...repeat(9, 30),\n ...repeat(10, 31),\n ...repeat(11, 30),\n ...repeat(12, 31),\n ...repeat(1, 7),\n]\n\nconst M28 = range(1, 29)\nconst M29 = range(1, 30)\nconst M30 = range(1, 31)\nconst M31 = range(1, 32)\n\nconst MDAY366MASK = [\n ...M31,\n ...M29,\n ...M31,\n ...M30,\n ...M31,\n ...M30,\n ...M31,\n ...M31,\n ...M30,\n ...M31,\n ...M30,\n ...M31,\n ...M31.slice(0, 7),\n]\n\nconst MDAY365MASK = [\n ...M31,\n ...M28,\n ...M31,\n ...M30,\n ...M31,\n ...M30,\n ...M31,\n ...M31,\n ...M30,\n ...M31,\n ...M30,\n ...M31,\n ...M31.slice(0, 7),\n]\n\nconst NM28 = range(-28, 0)\nconst NM29 = range(-29, 0)\nconst NM30 = range(-30, 0)\nconst NM31 = range(-31, 0)\n\nconst NMDAY366MASK = [\n ...NM31,\n ...NM29,\n ...NM31,\n ...NM30,\n ...NM31,\n ...NM30,\n ...NM31,\n ...NM31,\n ...NM30,\n ...NM31,\n ...NM30,\n ...NM31,\n ...NM31.slice(0, 7),\n]\n\nconst NMDAY365MASK = [\n ...NM31,\n ...NM28,\n ...NM31,\n ...NM30,\n ...NM31,\n ...NM30,\n ...NM31,\n ...NM31,\n ...NM30,\n ...NM31,\n ...NM30,\n ...NM31,\n ...NM31.slice(0, 7),\n]\n\nconst M366RANGE = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366]\nconst M365RANGE = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365]\n\nconst WDAYMASK = (function () {\n let wdaymask: number[] = []\n for (let i = 0; i < 55; i++) wdaymask = wdaymask.concat(range(7))\n return wdaymask\n})()\n\nexport {\n WDAYMASK,\n M365MASK,\n M365RANGE,\n M366MASK,\n M366RANGE,\n MDAY365MASK,\n MDAY366MASK,\n NMDAY365MASK,\n NMDAY366MASK,\n}\n","import { ParsedOptions } from '../types'\nimport dateutil from '../dateutil'\nimport { empty, repeat, pymod, includes } from '../helpers'\nimport {\n M365MASK,\n MDAY365MASK,\n NMDAY365MASK,\n WDAYMASK,\n M365RANGE,\n M366MASK,\n MDAY366MASK,\n NMDAY366MASK,\n M366RANGE,\n} from '../masks'\n\nexport interface YearInfo {\n yearlen: 365 | 366\n nextyearlen: 365 | 366\n yearordinal: number\n yearweekday: number\n mmask: number[]\n mrange: number[]\n mdaymask: number[]\n nmdaymask: number[]\n wdaymask: number[]\n wnomask: number[] | null\n}\n\nexport function rebuildYear(year: number, options: ParsedOptions) {\n const firstyday = new Date(Date.UTC(year, 0, 1))\n\n const yearlen = dateutil.isLeapYear(year) ? 366 : 365\n const nextyearlen = dateutil.isLeapYear(year + 1) ? 366 : 365\n const yearordinal = dateutil.toOrdinal(firstyday)\n const yearweekday = dateutil.getWeekday(firstyday)\n\n const result: YearInfo = {\n yearlen,\n nextyearlen,\n yearordinal,\n yearweekday,\n ...baseYearMasks(year),\n wnomask: null,\n }\n\n if (empty(options.byweekno)) {\n return result\n }\n\n result.wnomask = repeat(0, yearlen + 7) as number[]\n let firstwkst: number\n let wyearlen: number\n let no1wkst = (firstwkst = pymod(7 - yearweekday + options.wkst, 7))\n\n if (no1wkst >= 4) {\n no1wkst = 0\n // Number of days in the year, plus the days we got\n // from last year.\n wyearlen = result.yearlen + pymod(yearweekday - options.wkst, 7)\n } else {\n // Number of days in the year, minus the days we\n // left in last year.\n wyearlen = yearlen - no1wkst\n }\n\n const div = Math.floor(wyearlen / 7)\n const mod = pymod(wyearlen, 7)\n const numweeks = Math.floor(div + mod / 4)\n\n for (let j = 0; j < options.byweekno.length; j++) {\n let n = options.byweekno[j]\n if (n < 0) {\n n += numweeks + 1\n }\n if (!(n > 0 && n <= numweeks)) {\n continue\n }\n\n let i: number\n if (n > 1) {\n i = no1wkst + (n - 1) * 7\n if (no1wkst !== firstwkst) {\n i -= 7 - firstwkst\n }\n } else {\n i = no1wkst\n }\n\n for (let k = 0; k < 7; k++) {\n result.wnomask[i] = 1\n i++\n if (result.wdaymask[i] === options.wkst) break\n }\n }\n\n if (includes(options.byweekno, 1)) {\n // Check week number 1 of next year as well\n // orig-TODO : Check -numweeks for next year.\n let i = no1wkst + numweeks * 7\n if (no1wkst !== firstwkst) i -= 7 - firstwkst\n if (i < yearlen) {\n // If week starts in next year, we\n // don't care about it.\n for (let j = 0; j < 7; j++) {\n result.wnomask[i] = 1\n i += 1\n if (result.wdaymask[i] === options.wkst) break\n }\n }\n }\n\n if (no1wkst) {\n // Check last week number of last year as\n // well. If no1wkst is 0, either the year\n // started on week start, or week number 1\n // got days from last year, so there are no\n // days from last year's last week number in\n // this year.\n let lnumweeks: number\n if (!includes(options.byweekno, -1)) {\n const lyearweekday = dateutil.getWeekday(\n new Date(Date.UTC(year - 1, 0, 1))\n )\n\n let lno1wkst = pymod(7 - lyearweekday.valueOf() + options.wkst, 7)\n\n const lyearlen = dateutil.isLeapYear(year - 1) ? 366 : 365\n let weekst: number\n if (lno1wkst >= 4) {\n lno1wkst = 0\n weekst = lyearlen + pymod(lyearweekday - options.wkst, 7)\n } else {\n weekst = yearlen - no1wkst\n }\n\n lnumweeks = Math.floor(52 + pymod(weekst, 7) / 4)\n } else {\n lnumweeks = -1\n }\n\n if (includes(options.byweekno, lnumweeks)) {\n for (let i = 0; i < no1wkst; i++) result.wnomask[i] = 1\n }\n }\n\n return result\n}\n\nfunction baseYearMasks(year: number) {\n const yearlen = dateutil.isLeapYear(year) ? 366 : 365\n const firstyday = new Date(Date.UTC(year, 0, 1))\n const wday = dateutil.getWeekday(firstyday)\n\n if (yearlen === 365) {\n return {\n mmask: M365MASK as number[],\n mdaymask: MDAY365MASK,\n nmdaymask: NMDAY365MASK,\n wdaymask: WDAYMASK.slice(wday),\n mrange: M365RANGE,\n }\n }\n\n return {\n mmask: M366MASK as number[],\n mdaymask: MDAY366MASK,\n nmdaymask: NMDAY366MASK,\n wdaymask: WDAYMASK.slice(wday),\n mrange: M366RANGE,\n }\n}\n","import dateutil from '../dateutil'\nimport { notEmpty, repeat, range, isPresent } from '../helpers'\nimport { ParsedOptions, Frequency } from '../types'\nimport { YearInfo, rebuildYear } from './yearinfo'\nimport { rebuildMonth, MonthInfo } from './monthinfo'\nimport { easter } from './easter'\nimport { Time } from '../datetime'\n\nexport type DaySet = [(number | null)[], number, number]\nexport type GetDayset = () => DaySet\n\n// =============================================================================\n// Iterinfo\n// =============================================================================\n\nexport default class Iterinfo {\n public yearinfo: YearInfo\n public monthinfo: MonthInfo\n public eastermask: number[] | null\n\n // eslint-disable-next-line no-empty-function\n constructor(private options: ParsedOptions) {}\n\n rebuild(year: number, month: number) {\n const options = this.options\n\n if (year !== this.lastyear) {\n this.yearinfo = rebuildYear(year, options)\n }\n\n if (\n notEmpty(options.bynweekday) &&\n (month !== this.lastmonth || year !== this.lastyear)\n ) {\n const { yearlen, mrange, wdaymask } = this.yearinfo\n this.monthinfo = rebuildMonth(\n year,\n month,\n yearlen,\n mrange,\n wdaymask,\n options\n )\n }\n\n if (isPresent(options.byeaster)) {\n this.eastermask = easter(year, options.byeaster)\n }\n }\n\n get lastyear() {\n return this.monthinfo ? this.monthinfo.lastyear : null\n }\n\n get lastmonth() {\n return this.monthinfo ? this.monthinfo.lastmonth : null\n }\n\n get yearlen() {\n return this.yearinfo.yearlen\n }\n\n get yearordinal() {\n return this.yearinfo.yearordinal\n }\n\n get mrange() {\n return this.yearinfo.mrange\n }\n\n get wdaymask() {\n return this.yearinfo.wdaymask\n }\n\n get mmask() {\n return this.yearinfo.mmask\n }\n\n get wnomask() {\n return this.yearinfo.wnomask\n }\n\n get nwdaymask() {\n return this.monthinfo ? this.monthinfo.nwdaymask : []\n }\n\n get nextyearlen() {\n return this.yearinfo.nextyearlen\n }\n\n get mdaymask() {\n return this.yearinfo.mdaymask\n }\n\n get nmdaymask() {\n return this.yearinfo.nmdaymask\n }\n\n ydayset() {\n return [range(this.yearlen), 0, this.yearlen]\n }\n\n mdayset(_: unknown, month: number) {\n const start = this.mrange[month - 1]\n const end = this.mrange[month]\n const set = repeat<number | null>(null, this.yearlen)\n for (let i = start; i < end; i++) set[i] = i\n return [set, start, end]\n }\n\n wdayset(year: number, month: number, day: number) {\n // We need to handle cross-year weeks here.\n const set = repeat<number | null>(null, this.yearlen + 7)\n let i =\n dateutil.toOrdinal(new Date(Date.UTC(year, month - 1, day))) -\n this.yearordinal\n const start = i\n for (let j = 0; j < 7; j++) {\n set[i] = i\n ++i\n if (this.wdaymask[i] === this.options.wkst) break\n }\n return [set, start, i]\n }\n\n ddayset(year: number, month: number, day: number) {\n const set = repeat(null, this.yearlen) as (number | null)[]\n const i =\n dateutil.toOrdinal(new Date(Date.UTC(year, month - 1, day))) -\n this.yearordinal\n set[i] = i\n return [set, i, i + 1]\n }\n\n htimeset(hour: number, _: number, second: number, millisecond: number) {\n let set: Time[] = []\n this.options.byminute.forEach((minute) => {\n set = set.concat(this.mtimeset(hour, minute, second, millisecond))\n })\n dateutil.sort(set)\n return set\n }\n\n mtimeset(hour: number, minute: number, _: number, millisecond: number) {\n const set = this.options.bysecond.map(\n (second) => new Time(hour, minute, second, millisecond)\n )\n\n dateutil.sort(set)\n return set\n }\n\n stimeset(hour: number, minute: number, second: number, millisecond: number) {\n return [new Time(hour, minute, second, millisecond)]\n }\n\n getdayset(freq: Frequency): (y: number, m: number, d: number) => DaySet {\n switch (freq) {\n case Frequency.YEARLY:\n return this.ydayset.bind(this)\n case Frequency.MONTHLY:\n return this.mdayset.bind(this)\n case Frequency.WEEKLY:\n return this.wdayset.bind(this)\n case Frequency.DAILY:\n return this.ddayset.bind(this)\n default:\n return this.ddayset.bind(this)\n }\n }\n\n gettimeset(\n freq: Frequency.HOURLY | Frequency.MINUTELY | Frequency.SECONDLY\n ): (h: number, m: number, s: number, ms: number) => Time[] {\n switch (freq) {\n case Frequency.HOURLY:\n return this.htimeset.bind(this)\n case Frequency.MINUTELY:\n return this.mtimeset.bind(this)\n case Frequency.SECONDLY:\n return this.stimeset.bind(this)\n }\n }\n}\n","import { ParsedOptions } from '../types'\nimport { RRule } from '../rrule'\nimport { empty, repeat, pymod } from '../helpers'\n\nexport interface MonthInfo {\n lastyear: number\n lastmonth: number\n nwdaymask: number[]\n}\n\nexport function rebuildMonth(\n year: number,\n month: number,\n yearlen: number,\n mrange: number[],\n wdaymask: number[],\n options: ParsedOptions\n) {\n const result: MonthInfo = {\n lastyear: year,\n lastmonth: month,\n nwdaymask: [],\n }\n\n let ranges: number[][] = []\n if (options.freq === RRule.YEARLY) {\n if (empty(options.bymonth)) {\n ranges = [[0, yearlen]]\n } else {\n for (let j = 0; j < options.bymonth.length; j++) {\n month = options.bymonth[j]\n ranges.push(mrange.slice(month - 1, month + 1))\n }\n }\n } else if (options.freq === RRule.MONTHLY) {\n ranges = [mrange.slice(month - 1, month + 1)]\n }\n\n if (empty(ranges)) {\n return result\n }\n\n // Weekly frequency won't get here, so we may not\n // care about cross-year weekly periods.\n result.nwdaymask = repeat(0, yearlen) as number[]\n\n for (let j = 0; j < ranges.length; j++) {\n const rang = ranges[j]\n const first = rang[0]\n const last = rang[1] - 1\n\n for (let k = 0; k < options.bynweekday.length; k++) {\n let i\n const [wday, n] = options.bynweekday[k]\n if (n < 0) {\n i = last + (n + 1) * 7\n i -= pymod(wdaymask[i] - wday, 7)\n } else {\n i = first + (n - 1) * 7\n i += pymod(7 - wdaymask[i] + wday, 7)\n }\n if (first <= i && i <= last) result.nwdaymask[i] = 1\n }\n }\n\n return result\n}\n","export function easter(y: number, offset = 0) {\n const a = y % 19\n const b = Math.floor(y / 100)\n const c = y % 100\n const d = Math.floor(b / 4)\n const e = b % 4\n const f = Math.floor((b + 8) / 25)\n const g = Math.floor((b - f + 1) / 3)\n const h = Math.floor(19 * a + b - d - g + 15) % 30\n const i = Math.floor(c / 4)\n const k = c % 4\n const l = Math.floor(32 + 2 * e + 2 * i - h - k) % 7\n const m = Math.floor((a + 11 * h + 22 * l) / 451)\n const month = Math.floor((h + l - 7 * m + 114) / 31)\n const day = ((h + l - 7 * m + 114) % 31) + 1\n const date = Date.UTC(y, month - 1, day + offset)\n const yearStart = Date.UTC(y, 0, 1)\n\n return [Math.ceil((date - yearStart) / (1000 * 60 * 60 * 24))]\n}\n","import dateutil from '../dateutil'\nimport Iterinfo from '../iterinfo/index'\nimport { pymod, isPresent, includes } from '../helpers'\nimport { Time } from '../datetime'\n\nexport function buildPoslist(\n bysetpos: number[],\n timeset: Time[],\n start: number,\n end: number,\n ii: Iterinfo,\n dayset: (number | null)[]\n) {\n const poslist: Date[] = []\n\n for (let j = 0; j < bysetpos.length; j++) {\n let daypos: number\n let timepos: number\n const pos = bysetpos[j]\n\n if (pos < 0) {\n daypos = Math.floor(pos / timeset.length)\n timepos = pymod(pos, timeset.length)\n } else {\n daypos = Math.floor((pos - 1) / timeset.length)\n timepos = pymod(pos - 1, timeset.length)\n }\n\n const tmp = []\n for (let k = start; k < end; k++) {\n const val = dayset[k]\n if (!isPresent(val)) continue\n tmp.push(val)\n }\n let i: number\n if (daypos < 0) {\n i = tmp.slice(daypos)[0]\n } else {\n i = tmp[daypos]\n }\n\n const time = timeset[timepos]\n const date = dateutil.fromOrdinal(ii.yearordinal + i)\n const res = dateutil.combine(date, time)\n // XXX: can this ever be in the array?\n // - compare the actual date instead?\n if (!includes(poslist, res)) poslist.push(res)\n }\n\n dateutil.sort(poslist)\n\n return poslist\n}\n","import IterResult from '../iterresult'\nimport { ParsedOptions, freqIsDailyOrGreater, QueryMethodTypes } from '../types'\nimport dateutil from '../dateutil'\nimport Iterinfo from '../iterinfo/index'\nimport { RRule } from '../rrule'\nimport { buildTimeset } from '../parseoptions'\nimport { notEmpty, includes, isPresent } from '../helpers'\nimport { DateWithZone } from '../datewithzone'\nimport { buildPoslist } from './poslist'\nimport { Time, DateTime } from '../datetime'\n\nexport function iter<M extends QueryMethodTypes>(\n iterResult: IterResult<M>,\n options: ParsedOptions\n) {\n const { dtstart, freq, interval, until, bysetpos } = options\n\n let count = options.count\n if (count === 0 || interval === 0) {\n return emitResult(iterResult)\n }\n\n const counterDate = DateTime.fromDate(dtstart)\n\n const ii = new Iterinfo(options)\n ii.rebuild(counterDate.year, counterDate.month)\n\n let timeset = makeTimeset(ii, counterDate, options)\n\n for (;;) {\n const [dayset, start, end] = ii.getdayset(freq)(\n counterDate.year,\n counterDate.month,\n counterDate.day\n )\n\n const filtered = removeFilteredDays(dayset, start, end, ii, options)\n\n if (notEmpty(bysetpos)) {\n const poslist = buildPoslist(bysetpos, timeset, start, end, ii, dayset)\n\n for (let j = 0; j < poslist.length; j++) {\n const res = poslist[j]\n if (until && res > until) {\n return emitResult(iterResult)\n }\n\n if (res >= dtstart) {\n const rezonedDate = rezoneIfNeeded(res, options)\n if (!iterResult.accept(rezonedDate)) {\n return emitResult(iterResult)\n }\n\n if (count) {\n --count\n if (!count) {\n return emitResult(iterResult)\n }\n }\n }\n }\n } else {\n for (let j = start; j < end; j++) {\n const currentDay = dayset[j]\n if (!isPresent(currentDay)) {\n continue\n }\n\n const date = dateutil.fromOrdinal(ii.yearordinal + currentDay)\n for (let k = 0; k < timeset.length; k++) {\n const time = timeset[k]\n const res = dateutil.combine(date, time)\n if (until && res > until) {\n return emitResult(iterResult)\n }\n\n if (res >= dtstart) {\n const rezonedDate = rezoneIfNeeded(res, options)\n if (!iterResult.accept(rezonedDate)) {\n return emitResult(iterResult)\n }\n\n if (count) {\n --count\n if (!count) {\n return emitResult(iterResult)\n }\n }\n }\n }\n }\n }\n if (options.interval === 0) {\n return emitResult(iterResult)\n }\n\n // Handle frequency and interval\n counterDate.add(options, filtered)\n\n if (counterDate.year > dateutil.MAXYEAR) {\n return emitResult(iterResult)\n }\n\n if (!freqIsDailyOrGreater(freq)) {\n timeset = ii.gettimeset(freq)(\n counterDate.hour,\n counterDate.minute,\n counterDate.second,\n 0\n )\n }\n\n ii.rebuild(counterDate.year, counterDate.month)\n }\n}\n\nfunction isFiltered(\n ii: Iterinfo,\n currentDay: number,\n options: ParsedOptions\n): boolean {\n const {\n bymonth,\n byweekno,\n byweekday,\n byeaster,\n bymonthday,\n bynmonthday,\n byyearday,\n } = options\n\n return (\n (notEmpty(bymonth) && !includes(bymonth, ii.mmask[currentDay])) ||\n (notEmpty(byweekno) && !ii.wnomask[currentDay]) ||\n (notEmpty(byweekday) && !includes(byweekday, ii.wdaymask[currentDay])) ||\n (notEmpty(ii.nwdaymask) && !ii.nwdaymask[currentDay]) ||\n (byeaster !== null && !includes(ii.eastermask, currentDay)) ||\n ((notEmpty(bymonthday) || notEmpty(bynmonthday)) &&\n !includes(bymonthday, ii.mdaymask[currentDay]) &&\n !includes(bynmonthday, ii.nmdaymask[currentDay])) ||\n (notEmpty(byyearday) &&\n ((currentDay < ii.yearlen &&\n !includes(byyearday, currentDay + 1) &&\n !includes(byyearday, -ii.yearlen + currentDay)) ||\n (currentDay >= ii.yearlen &&\n !includes(byyearday, currentDay + 1 - ii.yearlen) &&\n !includes(byyearday, -ii.nextyearlen + currentDay - ii.yearlen))))\n )\n}\n\nfunction rezoneIfNeeded(date: Date, options: ParsedOptions) {\n return new DateWithZone(date, options.tzid).rezonedDate()\n}\n\nfunction emitResult<M extends QueryMethodTypes>(iterResult: IterResult<M>) {\n return iterResult.getValue()\n}\n\nfunction removeFilteredDays(\n dayset: (number | null)[],\n start: number,\n end: number,\n ii: Iterinfo,\n options: ParsedOptions\n) {\n let filtered = false\n for (let dayCounter = start; dayCounter < end; dayCounter++) {\n const currentDay = dayset[dayCounter]\n\n filtered = isFiltered(ii, currentDay, options)\n\n if (filtered) dayset[currentDay] = null\n }\n\n return filtered\n}\n\nfunction makeTimeset(\n ii: Iterinfo,\n counterDate: DateTime,\n options: ParsedOptions\n): Time[] | null {\n const { freq, byhour, byminute, bysecond } = options\n\n if (freqIsDailyOrGreater(freq)) {\n return buildTimeset(options)\n }\n\n if (\n (freq >= RRule.HOURLY &&\n notEmpty(byhour) &&\n !includes(byhour, counterDate.hour)) ||\n (freq >= RRule.MINUTELY &&\n notEmpty(byminute) &&\n !includes(byminute, counterDate.minute)) ||\n (freq >= RRule.SECONDLY &&\n notEmpty(bysecond) &&\n !includes(bysecond, counterDate.second))\n ) {\n return []\n }\n\n return ii.gettimeset(freq)(\n counterDate.hour,\n counterDate.minute,\n counterDate.second,\n counterDate.millisecond\n )\n}\n","import dateutil from './dateutil'\n\nimport IterResult, { IterArgs } from './iterresult'\nimport CallbackIterResult from './callbackiterresult'\nimport { Language } from './nlp/i18n'\nimport { fromText, parseText, toText, isFullyConvertible } from './nlp/index'\nimport { DateFormatter, GetText } from './nlp/totext'\nimport {\n ParsedOptions,\n Options,\n Frequency,\n QueryMethods,\n QueryMethodTypes,\n IterResultType,\n} from './types'\nimport { parseOptions, initializeOptions } from './parseoptions'\nimport { parseString } from './parsestring'\nimport { optionsToString } from './optionstostring'\nimport { Cache, CacheKeys } from './cache'\nimport { Weekday } from './weekday'\nimport { iter } from './iter/index'\n\n// =============================================================================\n// RRule\n// =============================================================================\n\nexport const Days = {\n MO: new Weekday(0),\n TU: new Weekday(1),\n WE: new Weekday(2),\n TH: new Weekday(3),\n FR: new Weekday(4),\n SA: new Weekday(5),\n SU: new Weekday(6),\n}\n\nexport const DEFAULT_OPTIONS: Options = {\n freq: Frequency.YEARLY,\n dtstart: null,\n interval: 1,\n wkst: Days.MO,\n count: null,\n until: null,\n tzid: null,\n bysetpos: null,\n bymonth: null,\n bymonthday: null,\n bynmonthday: null,\n byyearday: null,\n byweekno: null,\n byweekday: null,\n bynweekday: null,\n byhour: null,\n byminute: null,\n bysecond: null,\n byeaster: null,\n}\n\nexport const defaultKeys = Object.keys(DEFAULT_OPTIONS) as (keyof Options)[]\n\n/**\n *\n * @param {Options?} options - see <http://labix.org/python-dateutil/#head-cf004ee9a75592797e076752b2a889c10f445418>\n * - The only required option is `freq`, one of RRule.YEARLY, RRule.MONTHLY, ...\n * @constructor\n */\nexport class RRule implements QueryMethods {\n public _cache: Cache | null\n public origOptions: Partial<Options>\n public options: ParsedOptions\n\n // RRule class 'constants'\n\n static readonly FREQUENCIES: (keyof typeof Frequency)[] = [\n 'YEARLY',\n 'MONTHLY',\n 'WEEKLY',\n 'DAILY',\n 'HOURLY',\n 'MINUTELY',\n 'SECONDLY',\n ]\n\n static readonly YEARLY = Frequency.YEARLY\n static readonly MONTHLY = Frequency.MONTHLY\n static readonly WEEKLY = Frequency.WEEKLY\n static readonly DAILY = Frequency.DAILY\n static readonly HOURLY = Frequency.HOURLY\n static readonly MINUTELY = Frequency.MINUTELY\n static readonly SECONDLY = Frequency.SECONDLY\n\n static readonly MO = Days.MO\n static readonly TU = Days.TU\n static readonly WE = Days.WE\n static readonly TH = Days.TH\n static readonly FR = Days.FR\n static readonly SA = Days.SA\n static readonly SU = Days.SU\n\n constructor(options: Partial<Options> = {}, noCache = false) {\n // RFC string\n this._cache = noCache ? null : new Cache()\n\n // used by toString()\n this.origOptions = initializeOptions(options)\n const { parsedOptions } = parseOptions(options)\n this.options = parsedOptions\n }\n\n static parseText(text: string, language?: Language) {\n return parseText(text, language)\n }\n\n static fromText(text: string, language?: Language) {\n return fromText(text, language)\n }\n\n static parseString = parseString\n\n static fromString(str: string) {\n return new RRule(RRule.parseString(str) || undefined)\n }\n\n static optionsToString = optionsToString\n\n protected _iter<M extends QueryMethodTypes>(\n iterResult: IterResult<M>\n ): IterResultType<M> {\n return iter(iterResult, this.options)\n }\n\n private _cacheGet(what: CacheKeys | 'all', args?: Partial<IterArgs>) {\n if (!this._cache) return false\n return this._cache._cacheGet(what, args)\n }\n\n public _cacheAdd(\n what: CacheKeys | 'all',\n value: Date[] | Date | null,\n args?: Partial<IterArgs>\n ) {\n if (!this._cache) return\n return this._cache._cacheAdd(what, value, args)\n }\n\n /**\n * @param {Function} iterator - optional function that will be called\n * on each date that is added. It can return false\n * to stop the iteration.\n * @return Array containing all recurrences.\n */\n all(iterator?: (d: Date, len: number) => boolean): Date[] {\n if (iterator) {\n return this._iter(new CallbackIterResult('all', {}, iterator))\n }\n\n let result = this._cacheGet('all') as Date[] | false\n if (result === false) {\n result = this._iter(new IterResult('all', {}))\n this._cacheAdd('all', result)\n }\n return result\n }\n\n /**\n * Returns all the occurrences of the rrule between after and before.\n * The inc keyword defines what happens if after and/or before are\n * themselves occurrences. With inc == True, they will be included in the\n * list, if they are found in the recurrence set.\n *\n * @return Array\n */\n between(\n after: Date,\n before: Date,\n inc = false,\n iterator?: (d: Date, len: number) => boolean\n ): Date[] {\n if (!dateutil.isValidDate(after) || !dateutil.isValidDate(before)) {\n throw new Error('Invalid date passed in to RRule.between')\n }\n const args = {\n before,\n after,\n inc,\n }\n\n if (iterator) {\n return this._iter(new CallbackIterResult('between', args, iterator))\n }\n\n let result = this._cacheGet('between', args)\n if (result === false) {\n result = this._iter(new IterResult('between', args))\n this._cacheAdd('between', result, args)\n }\n return result as Date[]\n }\n\n /**\n * Returns the last recurrence before the given datetime instance.\n * The inc keyword defines what happens if dt is an occurrence.\n * With inc == True, if dt itself is an occurrence, it will be returned.\n *\n * @return Date or null\n */\n before(dt: Date, inc = false): Date {\n if (!dateutil.isValidDate(dt)) {\n throw new Error('Invalid date passed in to RRule.before')\n }\n const args = { dt: dt, inc: inc }\n let result = this._cacheGet('before', args)\n if (result === false) {\n result = this._iter(new IterResult('before', args))\n this._cacheAdd('before', result, args)\n }\n return result as Date\n }\n\n /**\n * Returns the first recurrence after the given datetime instance.\n * The inc keyword defines what happens if dt is an occurrence.\n * With inc == True, if dt itself is an occurrence, it will be returned.\n *\n * @return Date or null\n */\n after(dt: Date, inc = false): Date {\n if (!dateutil.isValidDate(dt)) {\n throw new Error('Invalid date passed in to RRule.after')\n }\n const args = { dt: dt, inc: inc }\n let result = this._cacheGet('after', args)\n if (result === false) {\n result = this._iter(new IterResult('after', args))\n this._cacheAdd('after', result, args)\n }\n return result as Date\n }\n\n /**\n * Returns the number of recurrences in this set. It will have go trough\n * the whole recurrence, if this hasn't been done before.\n */\n count(): number {\n return this.all().length\n }\n\n /**\n * Converts the rrule into its string representation\n *\n * @see <http://www.ietf.org/rfc/rfc2445.txt>\n * @return String\n */\n toString() {\n return optionsToString(this.origOptions)\n }\n\n /**\n * Will convert all rules described in nlp:ToText\n * to text.\n */\n toText(\n gettext?: GetText,\n language?: Language,\n dateFormatter?: DateFormatter\n ) {\n return toText(this, gettext, language, dateFormatter)\n }\n\n isFullyConvertibleToText() {\n return isFullyConvertible(this)\n }\n\n /**\n * @return a RRule instance with the same freq and options\n * as this one (cache is not cloned)\n */\n clone(): RRule {\n return new RRule(this.origOptions)\n }\n}\n","import { RRule } from './rrule'\nimport { RRuleSet } from './rruleset'\nimport dateutil from './dateutil'\nimport { includes, split } from './helpers'\nimport { Options } from './types'\nimport { parseString, parseDtstart } from './parsestring'\n\nexport interface RRuleStrOptions {\n dtstart: Date | null\n cache: boolean\n unfold: boolean\n forceset: boolean\n compatible: boolean\n tzid: string | null\n}\n\n/**\n * RRuleStr\n * To parse a set of rrule strings\n */\nconst DEFAULT_OPTIONS: RRuleStrOptions = {\n dtstart: null,\n cache: false,\n unfold: false,\n forceset: false,\n compatible: false,\n tzid: null,\n}\n\nexport function parseInput(s: string, options: Partial<RRuleStrOptions>) {\n const rrulevals: Partial<Options>[] = []\n let rdatevals: Date[] = []\n const exrulevals: Partial<Options>[] = []\n let exdatevals: Date[] = []\n\n const parsedDtstart = parseDtstart(s)\n const { dtstart } = parsedDtstart\n let { tzid } = parsedDtstart\n\n const lines = splitIntoLines(s, options.unfold)\n\n lines.forEach((line) => {\n if (!line) return\n const { name, parms, value } = breakDownLine(line)\n\n switch (name.toUpperCase()) {\n case 'RRULE':\n if (parms.length) {\n throw new Error(`unsupported RRULE parm: ${parms.join(',')}`)\n }\n\n rrulevals.push(parseString(line))\n break\n\n case 'RDATE':\n const [, rdateTzid] = /RDATE(?:;TZID=([^:=]+))?/i.exec(line) ?? []\n if (rdateTzid && !tzid) {\n tzid = rdateTzid\n }\n rdatevals = rdatevals.concat(parseRDate(value, parms))\n break\n\n case 'EXRULE':\n if (parms.length) {\n throw new Error(`unsupported EXRULE parm: ${parms.join(',')}`)\n }\n\n exrulevals.push(parseString(value))\n break\n\n case 'EXDATE':\n exdatevals = exdatevals.concat(parseRDate(value, parms))\n break\n\n case 'DTSTART':\n break\n\n default:\n throw new Error('unsupported property: ' + name)\n }\n })\n\n return {\n dtstart,\n tzid,\n rrulevals,\n rdatevals,\n exrulevals,\n exdatevals,\n }\n}\n\nfunction buildRule(s: string, options: Partial<RRuleStrOptions>) {\n const { rrulevals, rdatevals, exrulevals, exdatevals, dtstart, tzid } =\n parseInput(s, options)\n\n const noCache = options.cache === false\n\n if (options.compatible) {\n options.forceset = true\n options.unfold = true\n }\n\n if (\n options.forceset ||\n rrulevals.length > 1 ||\n rdatevals.length ||\n exrulevals.length ||\n exdatevals.length\n ) {\n const rset = new RRuleSet(noCache)\n\n rset.dtstart(dtstart)\n rset.tzid(tzid || undefined)\n\n rrulevals.forEach((val) => {\n rset.rrule(new RRule(groomRruleOptions(val, dtstart, tzid), noCache))\n })\n\n rdatevals.forEach((date) => {\n rset.rdate(date)\n })\n\n exrulevals.forEach((val) => {\n rset.exrule(new RRule(groomRruleOptions(val, dtstart, tzid), noCache))\n })\n\n exdatevals.forEach((date) => {\n rset.exdate(date)\n })\n\n if (options.compatible && options.dtstart) rset.rdate(dtstart)\n return rset\n }\n\n const val = rrulevals[0] || {}\n return new RRule(\n groomRruleOptions(\n val,\n val.dtstart || options.dtstart || dtstart,\n val.tzid || options.tzid || tzid\n ),\n noCache\n )\n}\n\nexport function rrulestr(\n s: string,\n options: Partial<RRuleStrOptions> = {}\n): RRule | RRuleSet {\n return buildRule(s, initializeOptions(options))\n}\n\nfunction groomRruleOptions(\n val: Partial<Options>,\n dtstart?: Date | null,\n tzid?: string | null\n) {\n return {\n ...val,\n dtstart,\n tzid,\n }\n}\n\nfunction initializeOptions(options: Partial<RRuleStrOptions>) {\n const invalid: string[] = []\n const keys = Object.keys(options) as (keyof typeof options)[]\n const defaultKeys = Object.keys(\n DEFAULT_OPTIONS\n ) as (keyof typeof DEFAULT_OPTIONS)[]\n\n keys.forEach(function (key) {\n if (!includes(defaultKeys, key)) invalid.push(key)\n })\n\n if (invalid.length) {\n throw new Error('Invalid options: ' + invalid.join(', '))\n }\n\n return { ...DEFAULT_OPTIONS, ...options }\n}\n\nfunction extractName(line: string) {\n if (line.indexOf(':') === -1) {\n return {\n name: 'RRULE',\n value: line,\n }\n }\n\n const [name, value] = split(line, ':', 1)\n return {\n name,\n value,\n }\n}\n\nfunction breakDownLine(line: string) {\n const { name, value } = extractName(line)\n const parms = name.split(';')\n if (!parms) throw new Error('empty property name')\n\n return {\n name: parms[0].toUpperCase(),\n parms: parms.slice(1),\n value,\n }\n}\n\nfunction splitIntoLines(s: string, unfold = false) {\n s = s && s.trim()\n if (!s) throw new Error('Invalid empty string')\n\n // More info about 'unfold' option\n // Go head to http://www.ietf.org/rfc/rfc2445.txt\n if (!unfold) {\n return s.split(/\\s/)\n }\n\n const lines = s.split('\\n')\n let i = 0\n while (i < lines.length) {\n // TODO\n const line = (lines[i] = lines[i].replace(/\\s+$/g, ''))\n if (!line) {\n lines.splice(i, 1)\n } else if (i > 0 && line[0] === ' ') {\n lines[i - 1] += line.slice(1)\n lines.splice(i, 1)\n } else {\n i += 1\n }\n }\n\n return lines\n}\n\nfunction validateDateParm(parms: string[]) {\n parms.forEach((parm) => {\n if (!/(VALUE=DATE(-TIME)?)|(TZID=)/.test(parm)) {\n throw new Error('unsupported RDATE/EXDATE parm: ' + parm)\n }\n })\n}\n\nfunction parseRDate(rdateval: string, parms: string[]) {\n validateDateParm(parms)\n\n return rdateval\n .split(',')\n .map((datestr) => dateutil.untilStringToDate(datestr))\n}\n","import { RRule } from './rrule'\nimport dateutil from './dateutil'\nimport { includes } from './helpers'\nimport IterResult from './iterresult'\nimport { iterSet } from './iterset'\nimport { QueryMethodTypes, IterResultType } from './types'\nimport { rrulestr } from './rrulestr'\nimport { optionsToString } from './optionstostring'\n\nfunction createGetterSetter<T>(fieldName: string) {\n return (field?: T) => {\n if (field !== undefined) {\n this[`_${fieldName}`] = field\n }\n\n if (this[`_${fieldName}`] !== undefined) {\n return this[`_${fieldName}`]\n }\n\n for (let i = 0; i < this._rrule.length; i++) {\n const field: T = this._rrule[i].origOptions[fieldName]\n if (field) {\n return field\n }\n }\n }\n}\n\nexport class RRuleSet extends RRule {\n public readonly _rrule: RRule[]\n public readonly _rdate: Date[]\n public readonly _exrule: RRule[]\n public readonly _exdate: Date[]\n\n private _dtstart?: Date | null | undefined\n private _tzid?: string\n\n /**\n *\n * @param {Boolean?} noCache\n * The same stratagy as RRule on cache, default to false\n * @constructor\n */\n constructor(noCache = false) {\n super({}, noCache)\n\n this._rrule = []\n this._rdate = []\n this._exrule = []\n this._exdate = []\n }\n\n dtstart = createGetterSetter.apply(this, ['dtstart'])\n tzid = createGetterSetter.apply(this, ['tzid'])\n\n _iter<M extends QueryMethodTypes>(\n iterResult: IterResult<M>\n ): IterResultType<M> {\n return iterSet(\n iterResult,\n this._rrule,\n this._exrule,\n this._rdate,\n this._exdate,\n this.tzid()\n )\n }\n\n /**\n * Adds an RRule to the set\n *\n * @param {RRule}\n */\n rrule(rrule: RRule) {\n _addRule(rrule, this._rrule)\n }\n\n /**\n * Adds an EXRULE to the set\n *\n * @param {RRule}\n */\n exrule(rrule: RRule) {\n _addRule(rrule, this._exrule)\n }\n\n /**\n * Adds an RDate to the set\n *\n * @param {Date}\n */\n rdate(date: Date) {\n _addDate(date, this._rdate)\n }\n\n /**\n * Adds an EXDATE to the set\n *\n * @param {Date}\n */\n exdate(date: Date) {\n _addDate(date, this._exdate)\n }\n\n /**\n * Get list of included rrules in this recurrence set.\n *\n * @return List of rrules\n */\n rrules() {\n return this._rrule.map((e) => rrulestr(e.toString()))\n }\n\n /**\n * Get list of excluded rrules in this recurrence set.\n *\n * @return List of exrules\n */\n exrules() {\n return this._exrule.map((e) => rrulestr(e.toString()))\n }\n\n /**\n * Get list of included datetimes in this recurrence set.\n *\n * @return List of rdates\n */\n rdates() {\n return this._rdate.map((e) => new Date(e.getTime()))\n }\n\n /**\n * Get list of included datetimes in this recurrence set.\n *\n * @return List of exdates\n */\n exdates() {\n return this._exdate.map((e) => new Date(e.getTime()))\n }\n\n valueOf() {\n let result: string[] = []\n\n if (!this._rrule.length && this._dtstart) {\n result = result.concat(optionsToString({ dtstart: this._dtstart }))\n }\n\n this._rrule.forEach(function (rrule) {\n result = result.concat(rrule.toString().split('\\n'))\n })\n\n this._exrule.forEach(function (exrule) {\n result = result.concat(\n exrule\n .toString()\n .split('\\n')\n .map((line) => line.replace(/^RRULE:/, 'EXRULE:'))\n .filter((line) => !/^DTSTART/.test(line))\n )\n })\n\n if (this._rdate.length) {\n result.push(rdatesToString('RDATE', this._rdate, this.tzid()))\n }\n\n if (this._exdate.length) {\n result.push(rdatesToString('EXDATE', this._exdate, this.tzid()))\n }\n\n return result\n }\n\n /**\n * to generate recurrence field such as:\n * DTSTART:19970902T010000Z\n * RRULE:FREQ=YEARLY;COUNT=2;BYDAY=TU\n * RRULE:FREQ=YEARLY;COUNT=1;BYDAY=TH\n */\n toString() {\n return this.valueOf().join('\\n')\n }\n\n /**\n * Create a new RRuleSet Object completely base on current instance\n */\n clone(): RRuleSet {\n const rrs = new RRuleSet(!!this._cache)\n\n this._rrule.forEach((rule) => rrs.rrule(rule.clone()))\n this._exrule.forEach((rule) => rrs.exrule(rule.clone()))\n this._rdate.forEach((date) => rrs.rdate(new Date(date.getTime())))\n this._exdate.forEach((date) => rrs.exdate(new Date(date.getTime())))\n\n return rrs\n }\n}\n\nfunction _addRule(rrule: RRule, collection: RRule[]) {\n if (!(rrule instanceof RRule)) {\n throw new TypeError(String(rrule) + ' is not RRule instance')\n }\n\n if (!includes(collection.map(String), String(rrule))) {\n collection.push(rrule)\n }\n}\n\nfunction _addDate(date: Date, collection: Date[]) {\n if (!(date instanceof Date)) {\n throw new TypeError(String(date) + ' is not Date instance')\n }\n if (!includes(collection.map(Number), Number(date))) {\n collection.push(date)\n dateutil.sort(collection)\n }\n}\n\nfunction rdatesToString(\n param: string,\n rdates: Date[],\n tzid: string | undefined\n) {\n const isUTC = !tzid || tzid.toUpperCase() === 'UTC'\n const header = isUTC ? `${param}:` : `${param};TZID=${tzid}:`\n\n const dateString = rdates\n .map((rdate) => dateutil.timeToUntilString(rdate.valueOf(), isUTC))\n .join(',')\n\n return `${header}${dateString}`\n}\n","import IterResult from './iterresult'\nimport { RRule } from './rrule'\nimport { DateWithZone } from './datewithzone'\nimport { iter } from './iter'\nimport dateutil from './dateutil'\nimport { QueryMethodTypes, IterResultType } from './types'\n\nexport function iterSet<M extends QueryMethodTypes>(\n iterResult: IterResult<M>,\n _rrule: RRule[],\n _exrule: RRule[],\n _rdate: Date[],\n _exdate: Date[],\n tzid: string | undefined\n) {\n const _exdateHash: { [k: number]: boolean } = {}\n const _accept = iterResult.accept\n\n function evalExdate(after: Date, before: Date) {\n _exrule.forEach(function (rrule) {\n rrule.between(after, before, true).forEach(function (date) {\n _exdateHash[Number(date)] = true\n })\n })\n }\n\n _exdate.forEach(function (date) {\n const zonedDate = new DateWithZone(date, tzid).rezonedDate()\n _exdateHash[Number(zonedDate)] = true\n })\n\n iterResult.accept = function (date) {\n const dt = Number(date)\n if (isNaN(dt)) return _accept.call(this, date)\n if (!_exdateHash[dt]) {\n evalExdate(new Date(dt - 1), new Date(dt + 1))\n if (!_exdateHash[dt]) {\n _exdateHash[dt] = true\n return _accept.call(this, date)\n }\n }\n return true\n }\n\n if (iterResult.method === 'between') {\n evalExdate(iterResult.args.after, iterResult.args.before)\n iterResult.accept = function (date) {\n const dt = Number(date)\n if (!_exdateHash[dt]) {\n _exdateHash[dt] = true\n return _accept.call(this, date)\n }\n return true\n }\n }\n\n for (let i = 0; i < _rdate.length; i++) {\n const zonedDate = new DateWithZone(_rdate[i], tzid).rezonedDate()\n if (!iterResult.accept(new Date(zonedDate.getTime()))) break\n }\n\n _rrule.forEach(function (rrule) {\n iter(iterResult, rrule.options)\n })\n\n const res = iterResult._result\n dateutil.sort(res)\n switch (iterResult.method) {\n case 'all':\n case 'between':\n return res as IterResultType<M>\n case 'before':\n return ((res.length && res[res.length - 1]) || null) as IterResultType<M>\n case 'after':\n default:\n return ((res.length && res[0]) || null) as IterResultType<M>\n }\n}\n"],"names":["root","factory","exports","module","define","amd","self","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","ALL_WEEKDAYS","weekday","n","Error","fromStr","str","Weekday","indexOf","nth","equals","other","toString","s","String","getJsWeekday","isPresent","isNumber","isWeekdayStr","includes","isArray","Array","range","start","end","arguments","length","rang","i","push","repeat","times","array","concat","padStart","item","targetLength","padString","slice","dateutil","pymod","a","b","r","divmod","div","Math","floor","mod","empty","notEmpty","arr","val","MONTH_DAYS","ONE_DAY","MAXYEAR","ORDINAL_BASE","Date","UTC","PY_WEEKDAYS","getYearDay","date","dateNoTime","getUTCFullYear","getUTCMonth","getUTCDate","ceil","valueOf","isLeapYear","year","isDate","isValidDate","isNaN","getTime","tzOffset","getTimezoneOffset","daysBetween","date1","date2","differencems","round","toOrdinal","fromOrdinal","ordinal","getMonthDays","month","getWeekday","getUTCDay","monthRange","combine","time","getHours","getMinutes","getSeconds","getMilliseconds","clone","cloneDates","dates","clones","sort","timeToUntilString","utc","getUTCHours","getUTCMinutes","getUTCSeconds","join","untilStringToDate","until","bits","exec","parseInt","method","args","minDate","maxDate","_result","total","inc","before","after","dt","accept","tooEarly","tooLate","add","getValue","res","IterResult","extendStatics","d","setPrototypeOf","__proto__","p","__extends","TypeError","__","constructor","create","__assign","assign","t","apply","__spreadArray","to","from","pack","ar","l","iterator","dayNames","monthNames","tokens","SKIP","number","numberAsText","every","on","at","the","first","second","third","last","for","monday","tuesday","wednesday","thursday","friday","saturday","sunday","january","february","march","april","may","june","july","august","september","october","november","december","comma","contains","defaultGetText","id","defaultDateFormatter","day","rrule","gettext","language","dateFormatter","text","options","origOptions","bymonthday","bynmonthday","byweekday","days","allWeeks","filter","someWeeks","Boolean","isWeekdays","isEveryDay","sortWeekDays","isFullyConvertible","freq","ToText","IMPLEMENTED","count","RRule","FREQUENCIES","plural","HOURLY","interval","MINUTELY","DAILY","bymonth","_bymonth","_bymonthday","_byweekday","byhour","_byhour","WEEKLY","MONTHLY","YEARLY","byyearday","list","byweekno","undefined","weekdaytext","monthtext","npos","abs","m","wday","callback","finalDelim","delim","realCallback","arg","delimiter","finalDelimiter","delimJoin","map","Frequency","rules","done","nextSymbol","isDone","symbol","best","bestSymbol","match","substr","name","v","acceptNumber","expect","parseText","ttr","Parser","AT","F","MO","TU","WE","TH","FR","ON","toUpperCase","wkd","decodeWKD","decodeNTH","MDAYs","decodeM","S","parse","freqIsDailyOrGreater","fromText","common","hour","minute","millisecond","fromDate","getDay","getMonth","getYear","addYears","years","addMonths","months","yearDiv","monthMod","addWeekly","wkst","fixDay","addDaily","addHours","hours","filtered","dayDiv","hourMod","addMinutes","minutes","byminute","hourDiv","minuteMod","addSeconds","seconds","bysecond","minuteDiv","secondMod","daysinmonth","SECONDLY","Time","initializeOptions","invalid","keys","defaultKeys","parseOptions","opts","DEFAULT_OPTIONS","byeaster","dtstart","setMilliseconds","bysetpos","bynweekday","parsedOptions","parseString","rfcString","split","parseLine","x","parseDtstart","line","dtstartWithZone","tzid","replace","header","parseRrule","forEach","attr","Days","num","parseIndividualNumber","parseNumber","optionKey","toLowerCase","parts","SyntaxError","Number","wdaypart","parseWeekday","test","RangeError","datestr","isUTC","rezonedDate","localTimeZone","Intl","DateTimeFormat","resolvedOptions","timeZone","dateInLocalTZ","toLocaleString","optionsToString","outValue","buildDtstart","strValues","j","ruleString","DateWithZone","argsMatch","left","right","all","between","_cacheAdd","what","_value","_cacheGet","cached","argsKeys","findCacheDiff","cachedObject","iterResult","M365MASK","M366MASK","M28","M29","M30","M31","MDAY366MASK","MDAY365MASK","NM28","NM29","NM30","NM31","NMDAY366MASK","NMDAY365MASK","M366RANGE","M365RANGE","WDAYMASK","wdaymask","rebuildYear","firstwkst","wyearlen","firstyday","yearlen","nextyearlen","yearordinal","yearweekday","result","mmask","mdaymask","nmdaymask","mrange","baseYearMasks","wnomask","no1wkst","numweeks","k","lnumweeks","lyearweekday","lno1wkst","lyearlen","weekst","rebuild","lastyear","yearinfo","lastmonth","monthinfo","nwdaymask","ranges","rebuildMonth","eastermask","y","offset","c","e","f","g","h","yearStart","easter","ydayset","mdayset","_","set","wdayset","ddayset","htimeset","mtimeset","stimeset","getdayset","bind","gettimeset","buildPoslist","timeset","ii","dayset","poslist","daypos","timepos","pos","tmp","iter","emitResult","counterDate","DateTime","millisecondModulo","buildTimeset","makeTimeset","removeFilteredDays","rezoneIfNeeded","currentDay","isFiltered","dayCounter","SA","SU","noCache","_cache","Cache","fromString","_iter","toText","isFullyConvertibleToText","cache","unfold","forceset","compatible","parseInput","rrulevals","rdatevals","exrulevals","exdatevals","parsedDtstart","lines","trim","splice","splitIntoLines","sep","splits","extractName","parms","breakDownLine","rdateTzid","parseRDate","rrulestr","RRuleSet","groomRruleOptions","rdate","exrule","exdate","buildRule","rdateval","parm","validateDateParm","createGetterSetter","fieldName","field","_rrule","_rdate","_exrule","_exdate","_exdateHash","_accept","evalExdate","zonedDate","iterSet","_addRule","_addDate","rrules","exrules","rdates","exdates","_dtstart","rdatesToString","rrs","rule","collection","param","dateString"],"sourceRoot":""}
\No newline at end of file