From 2ede616e0b16a05c78e3514ca4f5f1814dae9063 Mon Sep 17 00:00:00 2001 From: XLor Date: Thu, 25 Apr 2024 10:31:45 +0800 Subject: [PATCH] chore: update deps --- .github/workflows/check-dist.yml | 6 +- .github/workflows/ci.yml | 6 +- dist/index.js | 38151 +++++++++++++++++++++-------- dist/licenses.txt | 28 +- package.json | 16 +- pnpm-lock.yaml | 512 +- src/email.ts | 6 +- src/main.ts | 6 +- 8 files changed, 28858 insertions(+), 9873 deletions(-) diff --git a/.github/workflows/check-dist.yml b/.github/workflows/check-dist.yml index d3c9ba3..c817d99 100644 --- a/.github/workflows/check-dist.yml +++ b/.github/workflows/check-dist.yml @@ -24,12 +24,12 @@ jobs: - name: Set Timezone run: sudo timedatectl set-timezone "Asia/Shanghai" - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - - name: Set Node.js 16.x + - name: Set Node.js 20.x uses: actions/setup-node@v3 with: - node-version: 16.x + node-version: 20.x - uses: pnpm/action-setup@v2 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 43c9fe9..0fb58ed 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,9 +11,9 @@ jobs: build: # make sure build/ci work properly runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v3 - run: pnpm install @@ -25,7 +25,7 @@ jobs: - name: Set Timezone run: sudo timedatectl set-timezone "Asia/Shanghai" - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Fetch Captain uses: ./ diff --git a/dist/index.js b/dist/index.js index 2b8918d..93513ad 100644 --- a/dist/index.js +++ b/dist/index.js @@ -43,8 +43,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Client = void 0; -const core = __importStar(__nccwpck_require__(7733)); -const axios_1 = __importDefault(__nccwpck_require__(7268)); +const core = __importStar(__nccwpck_require__(6733)); +const axios_1 = __importDefault(__nccwpck_require__(4778)); const utils_1 = __nccwpck_require__(6548); class Client { constructor(roomid, ruid) { @@ -158,11 +158,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.sendEmail = void 0; -const core = __importStar(__nccwpck_require__(7733)); -const nodemailer_1 = __nccwpck_require__(4654); +const core = __importStar(__nccwpck_require__(6733)); +const markdown_it_1 = __importDefault(__nccwpck_require__(3597)); +const date_fns_1 = __nccwpck_require__(6044); const fs_1 = __nccwpck_require__(7147); -const markdown_it_1 = __importDefault(__nccwpck_require__(1357)); -const format_1 = __importDefault(__nccwpck_require__(4269)); +const nodemailer_1 = __nccwpck_require__(4352); const style_1 = __nccwpck_require__(4126); const output_1 = __nccwpck_require__(764); const md = new markdown_it_1.default(); @@ -171,9 +171,9 @@ function render(template, up, users) { const content = template .replace(/{data}/g, (0, output_1.toMarkdown)(users)) .replace(/{vup}/g, up.username) - .replace(/{today}/g, (0, format_1.default)(date, 'yyyy 年 M 月 d 日')) - .replace(/{today:src}/g, (0, format_1.default)(date, 'yyyy-MM-dd')) - .replace(/{today:full}/g, (0, format_1.default)(date, 'yyyy 年 M 月 d 日 HH:mm')); + .replace(/{today}/g, (0, date_fns_1.format)(date, 'yyyy 年 M 月 d 日')) + .replace(/{today:src}/g, (0, date_fns_1.format)(date, 'yyyy-MM-dd')) + .replace(/{today:full}/g, (0, date_fns_1.format)(date, 'yyyy 年 M 月 d 日 HH:mm')); return `
${md.render(content)}
`; } function sendEmail(client, users) { @@ -199,7 +199,7 @@ function sendEmail(client, users) { yield transport.sendMail({ from: sender, to: receiver, - subject: `${up.username} 的 ${(0, format_1.default)(date, 'yyyy 年 M 月 d 日')} 舰长日报`, + subject: `${up.username} 的 ${(0, date_fns_1.format)(date, 'yyyy 年 M 月 d 日')} 舰长日报`, html: content }); }); @@ -250,17 +250,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); -const core = __importStar(__nccwpck_require__(7733)); -const format_1 = __importDefault(__nccwpck_require__(4269)); const path_1 = __importDefault(__nccwpck_require__(1017)); const fs_1 = __nccwpck_require__(7147); +const core = __importStar(__nccwpck_require__(6733)); +const date_fns_1 = __nccwpck_require__(6044); const client_1 = __nccwpck_require__(3134); const utils_1 = __nccwpck_require__(6548); const email_1 = __nccwpck_require__(7048); const output_1 = __nccwpck_require__(764); function today(offset = 0) { const date = new Date(new Date().getTime() - offset); - return (0, format_1.default)(date, 'yyyy-MM-dd'); + return (0, date_fns_1.format)(date, 'yyyy-MM-dd'); } function run() { return __awaiter(this, void 0, void 0, function* () { @@ -1337,7 +1337,7 @@ exports.padLeft = padLeft; /***/ }), -/***/ 9483: +/***/ 8240: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -1364,7 +1364,7 @@ var __importStar = (this && this.__importStar) || function (mod) { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.issue = exports.issueCommand = void 0; const os = __importStar(__nccwpck_require__(2037)); -const utils_1 = __nccwpck_require__(2994); +const utils_1 = __nccwpck_require__(6618); /** * Commands * @@ -1436,7 +1436,7 @@ function escapeProperty(s) { /***/ }), -/***/ 7733: +/***/ 6733: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -1471,12 +1471,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0; -const command_1 = __nccwpck_require__(9483); -const file_command_1 = __nccwpck_require__(8541); -const utils_1 = __nccwpck_require__(2994); +const command_1 = __nccwpck_require__(8240); +const file_command_1 = __nccwpck_require__(7557); +const utils_1 = __nccwpck_require__(6618); const os = __importStar(__nccwpck_require__(2037)); const path = __importStar(__nccwpck_require__(1017)); -const oidc_utils_1 = __nccwpck_require__(2422); +const oidc_utils_1 = __nccwpck_require__(1796); /** * The code to exit an action */ @@ -1761,17 +1761,17 @@ exports.getIDToken = getIDToken; /** * Summary exports */ -var summary_1 = __nccwpck_require__(513); +var summary_1 = __nccwpck_require__(1761); Object.defineProperty(exports, "summary", ({ enumerable: true, get: function () { return summary_1.summary; } })); /** * @deprecated use core.summary */ -var summary_2 = __nccwpck_require__(513); +var summary_2 = __nccwpck_require__(1761); Object.defineProperty(exports, "markdownSummary", ({ enumerable: true, get: function () { return summary_2.markdownSummary; } })); /** * Path exports */ -var path_utils_1 = __nccwpck_require__(3084); +var path_utils_1 = __nccwpck_require__(8453); Object.defineProperty(exports, "toPosixPath", ({ enumerable: true, get: function () { return path_utils_1.toPosixPath; } })); Object.defineProperty(exports, "toWin32Path", ({ enumerable: true, get: function () { return path_utils_1.toWin32Path; } })); Object.defineProperty(exports, "toPlatformPath", ({ enumerable: true, get: function () { return path_utils_1.toPlatformPath; } })); @@ -1779,7 +1779,7 @@ Object.defineProperty(exports, "toPlatformPath", ({ enumerable: true, get: funct /***/ }), -/***/ 8541: +/***/ 7557: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -1811,7 +1811,7 @@ exports.prepareKeyValueMessage = exports.issueFileCommand = void 0; const fs = __importStar(__nccwpck_require__(7147)); const os = __importStar(__nccwpck_require__(2037)); const uuid_1 = __nccwpck_require__(2033); -const utils_1 = __nccwpck_require__(2994); +const utils_1 = __nccwpck_require__(6618); function issueFileCommand(command, message) { const filePath = process.env[`GITHUB_${command}`]; if (!filePath) { @@ -1844,7 +1844,7 @@ exports.prepareKeyValueMessage = prepareKeyValueMessage; /***/ }), -/***/ 2422: +/***/ 1796: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -1862,7 +1862,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.OidcClient = void 0; const http_client_1 = __nccwpck_require__(3569); const auth_1 = __nccwpck_require__(6931); -const core_1 = __nccwpck_require__(7733); +const core_1 = __nccwpck_require__(6733); class OidcClient { static createHttpClient(allowRetry = true, maxRetry = 10) { const requestOptions = { @@ -1894,7 +1894,7 @@ class OidcClient { .catch(error => { throw new Error(`Failed to get ID Token. \n Error Code : ${error.statusCode}\n - Error Message: ${error.result.message}`); + Error Message: ${error.message}`); }); const id_token = (_a = res.result) === null || _a === void 0 ? void 0 : _a.value; if (!id_token) { @@ -1928,7 +1928,7 @@ exports.OidcClient = OidcClient; /***/ }), -/***/ 3084: +/***/ 8453: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -1993,7 +1993,7 @@ exports.toPlatformPath = toPlatformPath; /***/ }), -/***/ 513: +/***/ 1761: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -2283,7 +2283,7 @@ exports.summary = _summary; /***/ }), -/***/ 2994: +/***/ 6618: /***/ ((__unused_webpack_module, exports) => { "use strict"; @@ -3105,7 +3105,7 @@ module.exports = { parallel : __nccwpck_require__(5916), serial : __nccwpck_require__(1166), - serialOrdered : __nccwpck_require__(6132) + serialOrdered : __nccwpck_require__(7474) }; @@ -3436,7 +3436,7 @@ function parallel(list, iterator, callback) /***/ 1166: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -var serialOrdered = __nccwpck_require__(6132); +var serialOrdered = __nccwpck_require__(7474); // Public API module.exports = serial; @@ -3457,7 +3457,7 @@ function serial(list, iterator, callback) /***/ }), -/***/ 6132: +/***/ 7474: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { var iterate = __nccwpck_require__(5718) @@ -3754,65 +3754,46 @@ CombinedStream.prototype._emitError = function(err) { /***/ }), -/***/ 3508: -/***/ ((module, exports) => { +/***/ 9443: +/***/ ((__unused_webpack_module, exports) => { "use strict"; - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = addLeadingZeros; - +exports.addLeadingZeros = addLeadingZeros; function addLeadingZeros(number, targetLength) { - var sign = number < 0 ? '-' : ''; - var output = Math.abs(number).toString(); - - while (output.length < targetLength) { - output = '0' + output; - } - + const sign = number < 0 ? "-" : ""; + const output = Math.abs(number).toString().padStart(targetLength, "0"); return sign + output; } -module.exports = exports.default; /***/ }), -/***/ 6964: -/***/ ((module, exports, __nccwpck_require__) => { +/***/ 4434: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; - -Object.defineProperty(exports, "__esModule", ({ - value: true +Object.defineProperty(exports, "defaultLocale", ({ + enumerable: true, + get: function () { + return _index.enUS; + }, })); -exports["default"] = void 0; - -var _index = _interopRequireDefault(__nccwpck_require__(9253)); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +var _index = __nccwpck_require__(3963); -var _default = _index.default; -exports["default"] = _default; -module.exports = exports.default; /***/ }), -/***/ 5340: +/***/ 91: /***/ ((__unused_webpack_module, exports) => { "use strict"; - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); exports.getDefaultOptions = getDefaultOptions; exports.setDefaultOptions = setDefaultOptions; -var defaultOptions = {}; + +let defaultOptions = {}; function getDefaultOptions() { return defaultOptions; @@ -3822,44 +3803,33 @@ function setDefaultOptions(newOptions) { defaultOptions = newOptions; } + /***/ }), -/***/ 9955: -/***/ ((module, exports, __nccwpck_require__) => { +/***/ 1380: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; +exports.formatters = void 0; +var _index = __nccwpck_require__(4243); +var _index2 = __nccwpck_require__(2482); +var _index3 = __nccwpck_require__(7569); +var _index4 = __nccwpck_require__(3683); +var _index5 = __nccwpck_require__(79); -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = void 0; - -var _index = _interopRequireDefault(__nccwpck_require__(5090)); - -var _index2 = _interopRequireDefault(__nccwpck_require__(1846)); - -var _index3 = _interopRequireDefault(__nccwpck_require__(897)); - -var _index4 = _interopRequireDefault(__nccwpck_require__(7406)); - -var _index5 = _interopRequireDefault(__nccwpck_require__(5439)); - -var _index6 = _interopRequireDefault(__nccwpck_require__(3508)); - -var _index7 = _interopRequireDefault(__nccwpck_require__(5436)); +var _index6 = __nccwpck_require__(9443); +var _index7 = __nccwpck_require__(6701); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var dayPeriodEnum = { - am: 'am', - pm: 'pm', - midnight: 'midnight', - noon: 'noon', - morning: 'morning', - afternoon: 'afternoon', - evening: 'evening', - night: 'night' +const dayPeriodEnum = { + am: "am", + pm: "pm", + midnight: "midnight", + noon: "noon", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night", }; /* @@ -3907,75 +3877,69 @@ var dayPeriodEnum = { * - `P` is long localized date format * - `p` is long localized time format */ -var formatters = { - // Era - G: function G(date, token, localize) { - var era = date.getUTCFullYear() > 0 ? 1 : 0; +const formatters = (exports.formatters = { + // Era + G: function (date, token, localize) { + const era = date.getFullYear() > 0 ? 1 : 0; switch (token) { // AD, BC - case 'G': - case 'GG': - case 'GGG': - return localize.era(era, { - width: 'abbreviated' - }); + case "G": + case "GG": + case "GGG": + return localize.era(era, { width: "abbreviated" }); // A, B - - case 'GGGGG': - return localize.era(era, { - width: 'narrow' - }); + case "GGGGG": + return localize.era(era, { width: "narrow" }); // Anno Domini, Before Christ - - case 'GGGG': + case "GGGG": default: - return localize.era(era, { - width: 'wide' - }); + return localize.era(era, { width: "wide" }); } }, + // Year - y: function y(date, token, localize) { + y: function (date, token, localize) { // Ordinal number - if (token === 'yo') { - var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript) - - var year = signedYear > 0 ? signedYear : 1 - signedYear; - return localize.ordinalNumber(year, { - unit: 'year' - }); + if (token === "yo") { + const signedYear = date.getFullYear(); + // Returns 1 for 1 BC (which is year 0 in JavaScript) + const year = signedYear > 0 ? signedYear : 1 - signedYear; + return localize.ordinalNumber(year, { unit: "year" }); } - return _index7.default.y(date, token); + return _index7.lightFormatters.y(date, token); }, - // Local week-numbering year - Y: function Y(date, token, localize, options) { - var signedWeekYear = (0, _index5.default)(date, options); // Returns 1 for 1 BC (which is year 0 in JavaScript) - - var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; // Two digit year - - if (token === 'YY') { - var twoDigitYear = weekYear % 100; - return (0, _index6.default)(twoDigitYear, 2); - } // Ordinal number + // Local week-numbering year + Y: function (date, token, localize, options) { + const signedWeekYear = (0, _index5.getWeekYear)(date, options); + // Returns 1 for 1 BC (which is year 0 in JavaScript) + const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; - if (token === 'Yo') { - return localize.ordinalNumber(weekYear, { - unit: 'year' - }); - } // Padding + // Two digit year + if (token === "YY") { + const twoDigitYear = weekYear % 100; + return (0, _index6.addLeadingZeros)(twoDigitYear, 2); + } + // Ordinal number + if (token === "Yo") { + return localize.ordinalNumber(weekYear, { unit: "year" }); + } - return (0, _index6.default)(weekYear, token.length); + // Padding + return (0, _index6.addLeadingZeros)(weekYear, token.length); }, + // ISO week-numbering year - R: function R(date, token) { - var isoWeekYear = (0, _index3.default)(date); // Padding + R: function (date, token) { + const isoWeekYear = (0, _index3.getISOWeekYear)(date); - return (0, _index6.default)(isoWeekYear, token.length); + // Padding + return (0, _index6.addLeadingZeros)(isoWeekYear, token.length); }, + // Extended year. This is a single number designating the year of this calendar system. // The main difference between `y` and `u` localizers are B.C. years: // | Year | `y` | `u` | @@ -3985,484 +3949,419 @@ var formatters = { // | BC 2 | 2 | -1 | // Also `yy` always returns the last two digits of a year, // while `uu` pads single digit years to 2 characters and returns other years unchanged. - u: function u(date, token) { - var year = date.getUTCFullYear(); - return (0, _index6.default)(year, token.length); + u: function (date, token) { + const year = date.getFullYear(); + return (0, _index6.addLeadingZeros)(year, token.length); }, - // Quarter - Q: function Q(date, token, localize) { - var quarter = Math.ceil((date.getUTCMonth() + 1) / 3); + // Quarter + Q: function (date, token, localize) { + const quarter = Math.ceil((date.getMonth() + 1) / 3); switch (token) { // 1, 2, 3, 4 - case 'Q': + case "Q": return String(quarter); // 01, 02, 03, 04 - - case 'QQ': - return (0, _index6.default)(quarter, 2); + case "QQ": + return (0, _index6.addLeadingZeros)(quarter, 2); // 1st, 2nd, 3rd, 4th - - case 'Qo': - return localize.ordinalNumber(quarter, { - unit: 'quarter' - }); + case "Qo": + return localize.ordinalNumber(quarter, { unit: "quarter" }); // Q1, Q2, Q3, Q4 - - case 'QQQ': + case "QQQ": return localize.quarter(quarter, { - width: 'abbreviated', - context: 'formatting' + width: "abbreviated", + context: "formatting", }); // 1, 2, 3, 4 (narrow quarter; could be not numerical) - - case 'QQQQQ': + case "QQQQQ": return localize.quarter(quarter, { - width: 'narrow', - context: 'formatting' + width: "narrow", + context: "formatting", }); // 1st quarter, 2nd quarter, ... - - case 'QQQQ': + case "QQQQ": default: return localize.quarter(quarter, { - width: 'wide', - context: 'formatting' + width: "wide", + context: "formatting", }); } }, - // Stand-alone quarter - q: function q(date, token, localize) { - var quarter = Math.ceil((date.getUTCMonth() + 1) / 3); + // Stand-alone quarter + q: function (date, token, localize) { + const quarter = Math.ceil((date.getMonth() + 1) / 3); switch (token) { // 1, 2, 3, 4 - case 'q': + case "q": return String(quarter); // 01, 02, 03, 04 - - case 'qq': - return (0, _index6.default)(quarter, 2); + case "qq": + return (0, _index6.addLeadingZeros)(quarter, 2); // 1st, 2nd, 3rd, 4th - - case 'qo': - return localize.ordinalNumber(quarter, { - unit: 'quarter' - }); + case "qo": + return localize.ordinalNumber(quarter, { unit: "quarter" }); // Q1, Q2, Q3, Q4 - - case 'qqq': + case "qqq": return localize.quarter(quarter, { - width: 'abbreviated', - context: 'standalone' + width: "abbreviated", + context: "standalone", }); // 1, 2, 3, 4 (narrow quarter; could be not numerical) - - case 'qqqqq': + case "qqqqq": return localize.quarter(quarter, { - width: 'narrow', - context: 'standalone' + width: "narrow", + context: "standalone", }); // 1st quarter, 2nd quarter, ... - - case 'qqqq': + case "qqqq": default: return localize.quarter(quarter, { - width: 'wide', - context: 'standalone' + width: "wide", + context: "standalone", }); } }, - // Month - M: function M(date, token, localize) { - var month = date.getUTCMonth(); + // Month + M: function (date, token, localize) { + const month = date.getMonth(); switch (token) { - case 'M': - case 'MM': - return _index7.default.M(date, token); + case "M": + case "MM": + return _index7.lightFormatters.M(date, token); // 1st, 2nd, ..., 12th - - case 'Mo': - return localize.ordinalNumber(month + 1, { - unit: 'month' - }); + case "Mo": + return localize.ordinalNumber(month + 1, { unit: "month" }); // Jan, Feb, ..., Dec - - case 'MMM': + case "MMM": return localize.month(month, { - width: 'abbreviated', - context: 'formatting' + width: "abbreviated", + context: "formatting", }); // J, F, ..., D - - case 'MMMMM': + case "MMMMM": return localize.month(month, { - width: 'narrow', - context: 'formatting' + width: "narrow", + context: "formatting", }); // January, February, ..., December - - case 'MMMM': + case "MMMM": default: - return localize.month(month, { - width: 'wide', - context: 'formatting' - }); + return localize.month(month, { width: "wide", context: "formatting" }); } }, - // Stand-alone month - L: function L(date, token, localize) { - var month = date.getUTCMonth(); + // Stand-alone month + L: function (date, token, localize) { + const month = date.getMonth(); switch (token) { // 1, 2, ..., 12 - case 'L': + case "L": return String(month + 1); // 01, 02, ..., 12 - - case 'LL': - return (0, _index6.default)(month + 1, 2); + case "LL": + return (0, _index6.addLeadingZeros)(month + 1, 2); // 1st, 2nd, ..., 12th - - case 'Lo': - return localize.ordinalNumber(month + 1, { - unit: 'month' - }); + case "Lo": + return localize.ordinalNumber(month + 1, { unit: "month" }); // Jan, Feb, ..., Dec - - case 'LLL': + case "LLL": return localize.month(month, { - width: 'abbreviated', - context: 'standalone' + width: "abbreviated", + context: "standalone", }); // J, F, ..., D - - case 'LLLLL': + case "LLLLL": return localize.month(month, { - width: 'narrow', - context: 'standalone' + width: "narrow", + context: "standalone", }); // January, February, ..., December - - case 'LLLL': + case "LLLL": default: - return localize.month(month, { - width: 'wide', - context: 'standalone' - }); + return localize.month(month, { width: "wide", context: "standalone" }); } }, + // Local week of year - w: function w(date, token, localize, options) { - var week = (0, _index4.default)(date, options); + w: function (date, token, localize, options) { + const week = (0, _index4.getWeek)(date, options); - if (token === 'wo') { - return localize.ordinalNumber(week, { - unit: 'week' - }); + if (token === "wo") { + return localize.ordinalNumber(week, { unit: "week" }); } - return (0, _index6.default)(week, token.length); + return (0, _index6.addLeadingZeros)(week, token.length); }, + // ISO week of year - I: function I(date, token, localize) { - var isoWeek = (0, _index2.default)(date); + I: function (date, token, localize) { + const isoWeek = (0, _index2.getISOWeek)(date); - if (token === 'Io') { - return localize.ordinalNumber(isoWeek, { - unit: 'week' - }); + if (token === "Io") { + return localize.ordinalNumber(isoWeek, { unit: "week" }); } - return (0, _index6.default)(isoWeek, token.length); + return (0, _index6.addLeadingZeros)(isoWeek, token.length); }, + // Day of the month - d: function d(date, token, localize) { - if (token === 'do') { - return localize.ordinalNumber(date.getUTCDate(), { - unit: 'date' - }); + d: function (date, token, localize) { + if (token === "do") { + return localize.ordinalNumber(date.getDate(), { unit: "date" }); } - return _index7.default.d(date, token); + return _index7.lightFormatters.d(date, token); }, + // Day of year - D: function D(date, token, localize) { - var dayOfYear = (0, _index.default)(date); + D: function (date, token, localize) { + const dayOfYear = (0, _index.getDayOfYear)(date); - if (token === 'Do') { - return localize.ordinalNumber(dayOfYear, { - unit: 'dayOfYear' - }); + if (token === "Do") { + return localize.ordinalNumber(dayOfYear, { unit: "dayOfYear" }); } - return (0, _index6.default)(dayOfYear, token.length); + return (0, _index6.addLeadingZeros)(dayOfYear, token.length); }, - // Day of week - E: function E(date, token, localize) { - var dayOfWeek = date.getUTCDay(); + // Day of week + E: function (date, token, localize) { + const dayOfWeek = date.getDay(); switch (token) { // Tue - case 'E': - case 'EE': - case 'EEE': + case "E": + case "EE": + case "EEE": return localize.day(dayOfWeek, { - width: 'abbreviated', - context: 'formatting' + width: "abbreviated", + context: "formatting", }); // T - - case 'EEEEE': + case "EEEEE": return localize.day(dayOfWeek, { - width: 'narrow', - context: 'formatting' + width: "narrow", + context: "formatting", }); // Tu - - case 'EEEEEE': + case "EEEEEE": return localize.day(dayOfWeek, { - width: 'short', - context: 'formatting' + width: "short", + context: "formatting", }); // Tuesday - - case 'EEEE': + case "EEEE": default: return localize.day(dayOfWeek, { - width: 'wide', - context: 'formatting' + width: "wide", + context: "formatting", }); } }, - // Local day of week - e: function e(date, token, localize, options) { - var dayOfWeek = date.getUTCDay(); - var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; + // Local day of week + e: function (date, token, localize, options) { + const dayOfWeek = date.getDay(); + const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; switch (token) { // Numerical value (Nth day of week with current locale or weekStartsOn) - case 'e': + case "e": return String(localDayOfWeek); // Padded numerical value - - case 'ee': - return (0, _index6.default)(localDayOfWeek, 2); + case "ee": + return (0, _index6.addLeadingZeros)(localDayOfWeek, 2); // 1st, 2nd, ..., 7th - - case 'eo': - return localize.ordinalNumber(localDayOfWeek, { - unit: 'day' - }); - - case 'eee': + case "eo": + return localize.ordinalNumber(localDayOfWeek, { unit: "day" }); + case "eee": return localize.day(dayOfWeek, { - width: 'abbreviated', - context: 'formatting' + width: "abbreviated", + context: "formatting", }); // T - - case 'eeeee': + case "eeeee": return localize.day(dayOfWeek, { - width: 'narrow', - context: 'formatting' + width: "narrow", + context: "formatting", }); // Tu - - case 'eeeeee': + case "eeeeee": return localize.day(dayOfWeek, { - width: 'short', - context: 'formatting' + width: "short", + context: "formatting", }); // Tuesday - - case 'eeee': + case "eeee": default: return localize.day(dayOfWeek, { - width: 'wide', - context: 'formatting' + width: "wide", + context: "formatting", }); } }, - // Stand-alone local day of week - c: function c(date, token, localize, options) { - var dayOfWeek = date.getUTCDay(); - var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; + // Stand-alone local day of week + c: function (date, token, localize, options) { + const dayOfWeek = date.getDay(); + const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; switch (token) { // Numerical value (same as in `e`) - case 'c': + case "c": return String(localDayOfWeek); // Padded numerical value - - case 'cc': - return (0, _index6.default)(localDayOfWeek, token.length); + case "cc": + return (0, _index6.addLeadingZeros)(localDayOfWeek, token.length); // 1st, 2nd, ..., 7th - - case 'co': - return localize.ordinalNumber(localDayOfWeek, { - unit: 'day' - }); - - case 'ccc': + case "co": + return localize.ordinalNumber(localDayOfWeek, { unit: "day" }); + case "ccc": return localize.day(dayOfWeek, { - width: 'abbreviated', - context: 'standalone' + width: "abbreviated", + context: "standalone", }); // T - - case 'ccccc': + case "ccccc": return localize.day(dayOfWeek, { - width: 'narrow', - context: 'standalone' + width: "narrow", + context: "standalone", }); // Tu - - case 'cccccc': + case "cccccc": return localize.day(dayOfWeek, { - width: 'short', - context: 'standalone' + width: "short", + context: "standalone", }); // Tuesday - - case 'cccc': + case "cccc": default: return localize.day(dayOfWeek, { - width: 'wide', - context: 'standalone' + width: "wide", + context: "standalone", }); } }, - // ISO day of week - i: function i(date, token, localize) { - var dayOfWeek = date.getUTCDay(); - var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek; + // ISO day of week + i: function (date, token, localize) { + const dayOfWeek = date.getDay(); + const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek; switch (token) { // 2 - case 'i': + case "i": return String(isoDayOfWeek); // 02 - - case 'ii': - return (0, _index6.default)(isoDayOfWeek, token.length); + case "ii": + return (0, _index6.addLeadingZeros)(isoDayOfWeek, token.length); // 2nd - - case 'io': - return localize.ordinalNumber(isoDayOfWeek, { - unit: 'day' - }); + case "io": + return localize.ordinalNumber(isoDayOfWeek, { unit: "day" }); // Tue - - case 'iii': + case "iii": return localize.day(dayOfWeek, { - width: 'abbreviated', - context: 'formatting' + width: "abbreviated", + context: "formatting", }); // T - - case 'iiiii': + case "iiiii": return localize.day(dayOfWeek, { - width: 'narrow', - context: 'formatting' + width: "narrow", + context: "formatting", }); // Tu - - case 'iiiiii': + case "iiiiii": return localize.day(dayOfWeek, { - width: 'short', - context: 'formatting' + width: "short", + context: "formatting", }); // Tuesday - - case 'iiii': + case "iiii": default: return localize.day(dayOfWeek, { - width: 'wide', - context: 'formatting' + width: "wide", + context: "formatting", }); } }, + // AM or PM - a: function a(date, token, localize) { - var hours = date.getUTCHours(); - var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am'; + a: function (date, token, localize) { + const hours = date.getHours(); + const dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am"; switch (token) { - case 'a': - case 'aa': + case "a": + case "aa": return localize.dayPeriod(dayPeriodEnumValue, { - width: 'abbreviated', - context: 'formatting' + width: "abbreviated", + context: "formatting", }); - - case 'aaa': - return localize.dayPeriod(dayPeriodEnumValue, { - width: 'abbreviated', - context: 'formatting' - }).toLowerCase(); - - case 'aaaaa': + case "aaa": + return localize + .dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting", + }) + .toLowerCase(); + case "aaaaa": return localize.dayPeriod(dayPeriodEnumValue, { - width: 'narrow', - context: 'formatting' + width: "narrow", + context: "formatting", }); - - case 'aaaa': + case "aaaa": default: return localize.dayPeriod(dayPeriodEnumValue, { - width: 'wide', - context: 'formatting' + width: "wide", + context: "formatting", }); } }, - // AM, PM, midnight, noon - b: function b(date, token, localize) { - var hours = date.getUTCHours(); - var dayPeriodEnumValue; + // AM, PM, midnight, noon + b: function (date, token, localize) { + const hours = date.getHours(); + let dayPeriodEnumValue; if (hours === 12) { dayPeriodEnumValue = dayPeriodEnum.noon; } else if (hours === 0) { dayPeriodEnumValue = dayPeriodEnum.midnight; } else { - dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am'; + dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am"; } switch (token) { - case 'b': - case 'bb': + case "b": + case "bb": return localize.dayPeriod(dayPeriodEnumValue, { - width: 'abbreviated', - context: 'formatting' + width: "abbreviated", + context: "formatting", }); - - case 'bbb': - return localize.dayPeriod(dayPeriodEnumValue, { - width: 'abbreviated', - context: 'formatting' - }).toLowerCase(); - - case 'bbbbb': + case "bbb": + return localize + .dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting", + }) + .toLowerCase(); + case "bbbbb": return localize.dayPeriod(dayPeriodEnumValue, { - width: 'narrow', - context: 'formatting' + width: "narrow", + context: "formatting", }); - - case 'bbbb': + case "bbbb": default: return localize.dayPeriod(dayPeriodEnumValue, { - width: 'wide', - context: 'formatting' + width: "wide", + context: "formatting", }); } }, - // in the morning, in the afternoon, in the evening, at night - B: function B(date, token, localize) { - var hours = date.getUTCHours(); - var dayPeriodEnumValue; + // in the morning, in the afternoon, in the evening, at night + B: function (date, token, localize) { + const hours = date.getHours(); + let dayPeriodEnumValue; if (hours >= 17) { dayPeriodEnumValue = dayPeriodEnum.evening; } else if (hours >= 12) { @@ -4474,261 +4373,235 @@ var formatters = { } switch (token) { - case 'B': - case 'BB': - case 'BBB': + case "B": + case "BB": + case "BBB": return localize.dayPeriod(dayPeriodEnumValue, { - width: 'abbreviated', - context: 'formatting' + width: "abbreviated", + context: "formatting", }); - - case 'BBBBB': + case "BBBBB": return localize.dayPeriod(dayPeriodEnumValue, { - width: 'narrow', - context: 'formatting' + width: "narrow", + context: "formatting", }); - - case 'BBBB': + case "BBBB": default: return localize.dayPeriod(dayPeriodEnumValue, { - width: 'wide', - context: 'formatting' + width: "wide", + context: "formatting", }); } }, + // Hour [1-12] - h: function h(date, token, localize) { - if (token === 'ho') { - var hours = date.getUTCHours() % 12; + h: function (date, token, localize) { + if (token === "ho") { + let hours = date.getHours() % 12; if (hours === 0) hours = 12; - return localize.ordinalNumber(hours, { - unit: 'hour' - }); + return localize.ordinalNumber(hours, { unit: "hour" }); } - return _index7.default.h(date, token); + return _index7.lightFormatters.h(date, token); }, + // Hour [0-23] - H: function H(date, token, localize) { - if (token === 'Ho') { - return localize.ordinalNumber(date.getUTCHours(), { - unit: 'hour' - }); + H: function (date, token, localize) { + if (token === "Ho") { + return localize.ordinalNumber(date.getHours(), { unit: "hour" }); } - return _index7.default.H(date, token); + return _index7.lightFormatters.H(date, token); }, + // Hour [0-11] - K: function K(date, token, localize) { - var hours = date.getUTCHours() % 12; + K: function (date, token, localize) { + const hours = date.getHours() % 12; - if (token === 'Ko') { - return localize.ordinalNumber(hours, { - unit: 'hour' - }); + if (token === "Ko") { + return localize.ordinalNumber(hours, { unit: "hour" }); } - return (0, _index6.default)(hours, token.length); + return (0, _index6.addLeadingZeros)(hours, token.length); }, + // Hour [1-24] - k: function k(date, token, localize) { - var hours = date.getUTCHours(); + k: function (date, token, localize) { + let hours = date.getHours(); if (hours === 0) hours = 24; - if (token === 'ko') { - return localize.ordinalNumber(hours, { - unit: 'hour' - }); + if (token === "ko") { + return localize.ordinalNumber(hours, { unit: "hour" }); } - return (0, _index6.default)(hours, token.length); + return (0, _index6.addLeadingZeros)(hours, token.length); }, + // Minute - m: function m(date, token, localize) { - if (token === 'mo') { - return localize.ordinalNumber(date.getUTCMinutes(), { - unit: 'minute' - }); + m: function (date, token, localize) { + if (token === "mo") { + return localize.ordinalNumber(date.getMinutes(), { unit: "minute" }); } - return _index7.default.m(date, token); + return _index7.lightFormatters.m(date, token); }, + // Second - s: function s(date, token, localize) { - if (token === 'so') { - return localize.ordinalNumber(date.getUTCSeconds(), { - unit: 'second' - }); + s: function (date, token, localize) { + if (token === "so") { + return localize.ordinalNumber(date.getSeconds(), { unit: "second" }); } - return _index7.default.s(date, token); + return _index7.lightFormatters.s(date, token); }, + // Fraction of second - S: function S(date, token) { - return _index7.default.S(date, token); + S: function (date, token) { + return _index7.lightFormatters.S(date, token); }, + // Timezone (ISO-8601. If offset is 0, output is always `'Z'`) - X: function X(date, token, _localize, options) { - var originalDate = options._originalDate || date; - var timezoneOffset = originalDate.getTimezoneOffset(); + X: function (date, token, _localize) { + const timezoneOffset = date.getTimezoneOffset(); if (timezoneOffset === 0) { - return 'Z'; + return "Z"; } switch (token) { // Hours and optional minutes - case 'X': + case "X": return formatTimezoneWithOptionalMinutes(timezoneOffset); + // Hours, minutes and optional seconds without `:` delimiter // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets // so this token always has the same output as `XX` - - case 'XXXX': - case 'XX': - // Hours and minutes without `:` delimiter + case "XXXX": + case "XX": // Hours and minutes without `:` delimiter return formatTimezone(timezoneOffset); + // Hours, minutes and optional seconds with `:` delimiter // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets // so this token always has the same output as `XXX` - - case 'XXXXX': - case 'XXX': // Hours and minutes with `:` delimiter - + case "XXXXX": + case "XXX": // Hours and minutes with `:` delimiter default: - return formatTimezone(timezoneOffset, ':'); + return formatTimezone(timezoneOffset, ":"); } }, + // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent) - x: function x(date, token, _localize, options) { - var originalDate = options._originalDate || date; - var timezoneOffset = originalDate.getTimezoneOffset(); + x: function (date, token, _localize) { + const timezoneOffset = date.getTimezoneOffset(); switch (token) { // Hours and optional minutes - case 'x': + case "x": return formatTimezoneWithOptionalMinutes(timezoneOffset); + // Hours, minutes and optional seconds without `:` delimiter // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets // so this token always has the same output as `xx` - - case 'xxxx': - case 'xx': - // Hours and minutes without `:` delimiter + case "xxxx": + case "xx": // Hours and minutes without `:` delimiter return formatTimezone(timezoneOffset); + // Hours, minutes and optional seconds with `:` delimiter // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets // so this token always has the same output as `xxx` - - case 'xxxxx': - case 'xxx': // Hours and minutes with `:` delimiter - + case "xxxxx": + case "xxx": // Hours and minutes with `:` delimiter default: - return formatTimezone(timezoneOffset, ':'); + return formatTimezone(timezoneOffset, ":"); } }, + // Timezone (GMT) - O: function O(date, token, _localize, options) { - var originalDate = options._originalDate || date; - var timezoneOffset = originalDate.getTimezoneOffset(); + O: function (date, token, _localize) { + const timezoneOffset = date.getTimezoneOffset(); switch (token) { // Short - case 'O': - case 'OO': - case 'OOO': - return 'GMT' + formatTimezoneShort(timezoneOffset, ':'); + case "O": + case "OO": + case "OOO": + return "GMT" + formatTimezoneShort(timezoneOffset, ":"); // Long - - case 'OOOO': + case "OOOO": default: - return 'GMT' + formatTimezone(timezoneOffset, ':'); + return "GMT" + formatTimezone(timezoneOffset, ":"); } }, + // Timezone (specific non-location) - z: function z(date, token, _localize, options) { - var originalDate = options._originalDate || date; - var timezoneOffset = originalDate.getTimezoneOffset(); + z: function (date, token, _localize) { + const timezoneOffset = date.getTimezoneOffset(); switch (token) { // Short - case 'z': - case 'zz': - case 'zzz': - return 'GMT' + formatTimezoneShort(timezoneOffset, ':'); + case "z": + case "zz": + case "zzz": + return "GMT" + formatTimezoneShort(timezoneOffset, ":"); // Long - - case 'zzzz': + case "zzzz": default: - return 'GMT' + formatTimezone(timezoneOffset, ':'); + return "GMT" + formatTimezone(timezoneOffset, ":"); } }, + // Seconds timestamp - t: function t(date, token, _localize, options) { - var originalDate = options._originalDate || date; - var timestamp = Math.floor(originalDate.getTime() / 1000); - return (0, _index6.default)(timestamp, token.length); + t: function (date, token, _localize) { + const timestamp = Math.trunc(date.getTime() / 1000); + return (0, _index6.addLeadingZeros)(timestamp, token.length); }, - // Milliseconds timestamp - T: function T(date, token, _localize, options) { - var originalDate = options._originalDate || date; - var timestamp = originalDate.getTime(); - return (0, _index6.default)(timestamp, token.length); - } -}; -function formatTimezoneShort(offset, dirtyDelimiter) { - var sign = offset > 0 ? '-' : '+'; - var absOffset = Math.abs(offset); - var hours = Math.floor(absOffset / 60); - var minutes = absOffset % 60; + // Milliseconds timestamp + T: function (date, token, _localize) { + const timestamp = date.getTime(); + return (0, _index6.addLeadingZeros)(timestamp, token.length); + }, +}); +function formatTimezoneShort(offset, delimiter = "") { + const sign = offset > 0 ? "-" : "+"; + const absOffset = Math.abs(offset); + const hours = Math.trunc(absOffset / 60); + const minutes = absOffset % 60; if (minutes === 0) { return sign + String(hours); } - - var delimiter = dirtyDelimiter || ''; - return sign + String(hours) + delimiter + (0, _index6.default)(minutes, 2); + return ( + sign + String(hours) + delimiter + (0, _index6.addLeadingZeros)(minutes, 2) + ); } -function formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) { +function formatTimezoneWithOptionalMinutes(offset, delimiter) { if (offset % 60 === 0) { - var sign = offset > 0 ? '-' : '+'; - return sign + (0, _index6.default)(Math.abs(offset) / 60, 2); + const sign = offset > 0 ? "-" : "+"; + return sign + (0, _index6.addLeadingZeros)(Math.abs(offset) / 60, 2); } - - return formatTimezone(offset, dirtyDelimiter); + return formatTimezone(offset, delimiter); } -function formatTimezone(offset, dirtyDelimiter) { - var delimiter = dirtyDelimiter || ''; - var sign = offset > 0 ? '-' : '+'; - var absOffset = Math.abs(offset); - var hours = (0, _index6.default)(Math.floor(absOffset / 60), 2); - var minutes = (0, _index6.default)(absOffset % 60, 2); +function formatTimezone(offset, delimiter = "") { + const sign = offset > 0 ? "-" : "+"; + const absOffset = Math.abs(offset); + const hours = (0, _index6.addLeadingZeros)(Math.trunc(absOffset / 60), 2); + const minutes = (0, _index6.addLeadingZeros)(absOffset % 60, 2); return sign + hours + delimiter + minutes; } -var _default = formatters; -exports["default"] = _default; -module.exports = exports.default; /***/ }), -/***/ 5436: -/***/ ((module, exports, __nccwpck_require__) => { +/***/ 6701: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = void 0; - -var _index = _interopRequireDefault(__nccwpck_require__(3508)); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +exports.lightFormatters = void 0; +var _index = __nccwpck_require__(9443); /* * | | Unit | | Unit | @@ -4742,9 +4615,10 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * * Letters marked by * are not implemented but reserved by Unicode standard. */ -var formatters = { + +const lightFormatters = (exports.lightFormatters = { // Year - y: function y(date, token) { + y(date, token) { // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens // | Year | y | yy | yyy | yyyy | yyyyy | // |----------|-------|----|-------|-------|-------| @@ -4753,192 +4627,185 @@ var formatters = { // | AD 123 | 123 | 23 | 123 | 0123 | 00123 | // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 | // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 | - var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript) - var year = signedYear > 0 ? signedYear : 1 - signedYear; - return (0, _index.default)(token === 'yy' ? year % 100 : year, token.length); + const signedYear = date.getFullYear(); + // Returns 1 for 1 BC (which is year 0 in JavaScript) + const year = signedYear > 0 ? signedYear : 1 - signedYear; + return (0, _index.addLeadingZeros)( + token === "yy" ? year % 100 : year, + token.length, + ); }, + // Month - M: function M(date, token) { - var month = date.getUTCMonth(); - return token === 'M' ? String(month + 1) : (0, _index.default)(month + 1, 2); + M(date, token) { + const month = date.getMonth(); + return token === "M" + ? String(month + 1) + : (0, _index.addLeadingZeros)(month + 1, 2); }, + // Day of the month - d: function d(date, token) { - return (0, _index.default)(date.getUTCDate(), token.length); + d(date, token) { + return (0, _index.addLeadingZeros)(date.getDate(), token.length); }, + // AM or PM - a: function a(date, token) { - var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am'; + a(date, token) { + const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? "pm" : "am"; switch (token) { - case 'a': - case 'aa': + case "a": + case "aa": return dayPeriodEnumValue.toUpperCase(); - - case 'aaa': + case "aaa": return dayPeriodEnumValue; - - case 'aaaaa': + case "aaaaa": return dayPeriodEnumValue[0]; - - case 'aaaa': + case "aaaa": default: - return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.'; + return dayPeriodEnumValue === "am" ? "a.m." : "p.m."; } }, + // Hour [1-12] - h: function h(date, token) { - return (0, _index.default)(date.getUTCHours() % 12 || 12, token.length); + h(date, token) { + return (0, _index.addLeadingZeros)( + date.getHours() % 12 || 12, + token.length, + ); }, + // Hour [0-23] - H: function H(date, token) { - return (0, _index.default)(date.getUTCHours(), token.length); + H(date, token) { + return (0, _index.addLeadingZeros)(date.getHours(), token.length); }, + // Minute - m: function m(date, token) { - return (0, _index.default)(date.getUTCMinutes(), token.length); + m(date, token) { + return (0, _index.addLeadingZeros)(date.getMinutes(), token.length); }, + // Second - s: function s(date, token) { - return (0, _index.default)(date.getUTCSeconds(), token.length); + s(date, token) { + return (0, _index.addLeadingZeros)(date.getSeconds(), token.length); }, + // Fraction of second - S: function S(date, token) { - var numberOfDigits = token.length; - var milliseconds = date.getUTCMilliseconds(); - var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, numberOfDigits - 3)); - return (0, _index.default)(fractionalSeconds, token.length); - } -}; -var _default = formatters; -exports["default"] = _default; -module.exports = exports.default; + S(date, token) { + const numberOfDigits = token.length; + const milliseconds = date.getMilliseconds(); + const fractionalSeconds = Math.trunc( + milliseconds * Math.pow(10, numberOfDigits - 3), + ); + return (0, _index.addLeadingZeros)(fractionalSeconds, token.length); + }, +}); + /***/ }), -/***/ 7491: -/***/ ((module, exports) => { +/***/ 4673: +/***/ ((__unused_webpack_module, exports) => { "use strict"; +exports.longFormatters = void 0; -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = void 0; - -var dateLongFormatter = function dateLongFormatter(pattern, formatLong) { +const dateLongFormatter = (pattern, formatLong) => { switch (pattern) { - case 'P': - return formatLong.date({ - width: 'short' - }); - - case 'PP': - return formatLong.date({ - width: 'medium' - }); - - case 'PPP': - return formatLong.date({ - width: 'long' - }); - - case 'PPPP': + case "P": + return formatLong.date({ width: "short" }); + case "PP": + return formatLong.date({ width: "medium" }); + case "PPP": + return formatLong.date({ width: "long" }); + case "PPPP": default: - return formatLong.date({ - width: 'full' - }); + return formatLong.date({ width: "full" }); } }; -var timeLongFormatter = function timeLongFormatter(pattern, formatLong) { +const timeLongFormatter = (pattern, formatLong) => { switch (pattern) { - case 'p': - return formatLong.time({ - width: 'short' - }); - - case 'pp': - return formatLong.time({ - width: 'medium' - }); - - case 'ppp': - return formatLong.time({ - width: 'long' - }); - - case 'pppp': + case "p": + return formatLong.time({ width: "short" }); + case "pp": + return formatLong.time({ width: "medium" }); + case "ppp": + return formatLong.time({ width: "long" }); + case "pppp": default: - return formatLong.time({ - width: 'full' - }); + return formatLong.time({ width: "full" }); } }; -var dateTimeLongFormatter = function dateTimeLongFormatter(pattern, formatLong) { - var matchResult = pattern.match(/(P+)(p+)?/) || []; - var datePattern = matchResult[1]; - var timePattern = matchResult[2]; +const dateTimeLongFormatter = (pattern, formatLong) => { + const matchResult = pattern.match(/(P+)(p+)?/) || []; + const datePattern = matchResult[1]; + const timePattern = matchResult[2]; if (!timePattern) { return dateLongFormatter(pattern, formatLong); } - var dateTimeFormat; + let dateTimeFormat; switch (datePattern) { - case 'P': - dateTimeFormat = formatLong.dateTime({ - width: 'short' - }); + case "P": + dateTimeFormat = formatLong.dateTime({ width: "short" }); break; - - case 'PP': - dateTimeFormat = formatLong.dateTime({ - width: 'medium' - }); + case "PP": + dateTimeFormat = formatLong.dateTime({ width: "medium" }); break; - - case 'PPP': - dateTimeFormat = formatLong.dateTime({ - width: 'long' - }); + case "PPP": + dateTimeFormat = formatLong.dateTime({ width: "long" }); break; - - case 'PPPP': + case "PPPP": default: - dateTimeFormat = formatLong.dateTime({ - width: 'full' - }); + dateTimeFormat = formatLong.dateTime({ width: "full" }); break; } - return dateTimeFormat.replace('{{date}}', dateLongFormatter(datePattern, formatLong)).replace('{{time}}', timeLongFormatter(timePattern, formatLong)); + return dateTimeFormat + .replace("{{date}}", dateLongFormatter(datePattern, formatLong)) + .replace("{{time}}", timeLongFormatter(timePattern, formatLong)); }; -var longFormatters = { +const longFormatters = (exports.longFormatters = { p: timeLongFormatter, - P: dateTimeLongFormatter -}; -var _default = longFormatters; -exports["default"] = _default; -module.exports = exports.default; + P: dateTimeLongFormatter, +}); + /***/ }), -/***/ 8762: -/***/ ((module, exports) => { +/***/ 9253: +/***/ ((__unused_webpack_module, exports) => { "use strict"; +exports.getRoundingMethod = getRoundingMethod; -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = getTimezoneOffsetInMilliseconds; +function getRoundingMethod(method) { + return (number) => { + const round = method ? Math[method] : Math.trunc; + const result = round(number); + // Prevent negative zero + return result === 0 ? 0 : result; + }; +} + + +/***/ }), + +/***/ 4261: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.getTimezoneOffsetInMilliseconds = getTimezoneOffsetInMilliseconds; +var _index = __nccwpck_require__(4363); /** * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds. @@ -4952,8008 +4819,25089 @@ exports["default"] = getTimezoneOffsetInMilliseconds; * This function returns the timezone offset in milliseconds that takes seconds in account. */ function getTimezoneOffsetInMilliseconds(date) { - var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds())); - utcDate.setUTCFullYear(date.getFullYear()); - return date.getTime() - utcDate.getTime(); + const _date = (0, _index.toDate)(date); + const utcDate = new Date( + Date.UTC( + _date.getFullYear(), + _date.getMonth(), + _date.getDate(), + _date.getHours(), + _date.getMinutes(), + _date.getSeconds(), + _date.getMilliseconds(), + ), + ); + utcDate.setUTCFullYear(_date.getFullYear()); + return +date - +utcDate; } -module.exports = exports.default; /***/ }), -/***/ 5090: -/***/ ((module, exports, __nccwpck_require__) => { +/***/ 5084: +/***/ ((__unused_webpack_module, exports) => { "use strict"; +exports.isProtectedDayOfYearToken = isProtectedDayOfYearToken; +exports.isProtectedWeekYearToken = isProtectedWeekYearToken; +exports.warnOrThrowProtectedError = warnOrThrowProtectedError; +const dayOfYearTokenRE = /^D+$/; +const weekYearTokenRE = /^Y+$/; -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = getUTCDayOfYear; - -var _index = _interopRequireDefault(__nccwpck_require__(5539)); +const throwTokens = ["D", "DD", "YY", "YYYY"]; -var _index2 = _interopRequireDefault(__nccwpck_require__(2119)); +function isProtectedDayOfYearToken(token) { + return dayOfYearTokenRE.test(token); +} -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function isProtectedWeekYearToken(token) { + return weekYearTokenRE.test(token); +} -var MILLISECONDS_IN_DAY = 86400000; +function warnOrThrowProtectedError(token, format, input) { + const _message = message(token, format, input); + console.warn(_message); + if (throwTokens.includes(token)) throw new RangeError(_message); +} -function getUTCDayOfYear(dirtyDate) { - (0, _index2.default)(1, arguments); - var date = (0, _index.default)(dirtyDate); - var timestamp = date.getTime(); - date.setUTCMonth(0, 1); - date.setUTCHours(0, 0, 0, 0); - var startOfYearTimestamp = date.getTime(); - var difference = timestamp - startOfYearTimestamp; - return Math.floor(difference / MILLISECONDS_IN_DAY) + 1; +function message(token, format, input) { + const subject = token[0] === "Y" ? "years" : "days of the month"; + return `Use \`${token.toLowerCase()}\` instead of \`${token}\` (in \`${format}\`) for formatting ${subject} to the input \`${input}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`; } -module.exports = exports.default; /***/ }), -/***/ 897: -/***/ ((module, exports, __nccwpck_require__) => { +/***/ 3350: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; +exports.add = add; +var _index = __nccwpck_require__(6520); +var _index2 = __nccwpck_require__(2096); +var _index3 = __nccwpck_require__(2524); +var _index4 = __nccwpck_require__(4363); -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = getUTCISOWeekYear; - -var _index = _interopRequireDefault(__nccwpck_require__(5539)); - -var _index2 = _interopRequireDefault(__nccwpck_require__(2119)); - -var _index3 = _interopRequireDefault(__nccwpck_require__(439)); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/** + * @name add + * @category Common Helpers + * @summary Add the specified years, months, weeks, days, hours, minutes and seconds to the given date. + * + * @description + * Add the specified years, months, weeks, days, hours, minutes and seconds to the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param duration - The object with years, months, weeks, days, hours, minutes and seconds to be added. + * + * | Key | Description | + * |----------------|------------------------------------| + * | years | Amount of years to be added | + * | months | Amount of months to be added | + * | weeks | Amount of weeks to be added | + * | days | Amount of days to be added | + * | hours | Amount of hours to be added | + * | minutes | Amount of minutes to be added | + * | seconds | Amount of seconds to be added | + * + * All values default to 0 + * + * @returns The new date with the seconds added + * + * @example + * // Add the following duration to 1 September 2014, 10:19:50 + * const result = add(new Date(2014, 8, 1, 10, 19, 50), { + * years: 2, + * months: 9, + * weeks: 1, + * days: 7, + * hours: 5,\\-7 + * minutes: 9, + * seconds: 30, + * }) + * //=> Thu Jun 15 2017 15:29:20 + */ +function add(date, duration) { + const { + years = 0, + months = 0, + weeks = 0, + days = 0, + hours = 0, + minutes = 0, + seconds = 0, + } = duration; + + // Add years and months + const _date = (0, _index4.toDate)(date); + const dateWithMonths = + months || years + ? (0, _index2.addMonths)(_date, months + years * 12) + : _date; + + // Add weeks and days + const dateWithDays = + days || weeks + ? (0, _index.addDays)(dateWithMonths, days + weeks * 7) + : dateWithMonths; + + // Add days, hours, minutes and seconds + const minutesToAdd = minutes + hours * 60; + const secondsToAdd = seconds + minutesToAdd * 60; + const msToAdd = secondsToAdd * 1000; + const finalDate = (0, _index3.constructFrom)( + date, + dateWithDays.getTime() + msToAdd, + ); -function getUTCISOWeekYear(dirtyDate) { - (0, _index2.default)(1, arguments); - var date = (0, _index.default)(dirtyDate); - var year = date.getUTCFullYear(); - var fourthOfJanuaryOfNextYear = new Date(0); - fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4); - fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0); - var startOfNextYear = (0, _index3.default)(fourthOfJanuaryOfNextYear); - var fourthOfJanuaryOfThisYear = new Date(0); - fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4); - fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0); - var startOfThisYear = (0, _index3.default)(fourthOfJanuaryOfThisYear); - - if (date.getTime() >= startOfNextYear.getTime()) { - return year + 1; - } else if (date.getTime() >= startOfThisYear.getTime()) { - return year; - } else { - return year - 1; - } + return finalDate; } -module.exports = exports.default; /***/ }), -/***/ 1846: -/***/ ((module, exports, __nccwpck_require__) => { +/***/ 6976: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; +exports.addBusinessDays = addBusinessDays; +var _index = __nccwpck_require__(2524); +var _index2 = __nccwpck_require__(1627); +var _index3 = __nccwpck_require__(6169); +var _index4 = __nccwpck_require__(2989); +var _index5 = __nccwpck_require__(4363); -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = getUTCISOWeek; +/** + * @name addBusinessDays + * @category Date Extension Helpers + * @summary Add the specified number of business days (mon - fri) to the given date. + * + * @description + * Add the specified number of business days (mon - fri) to the given date, ignoring weekends. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param amount - The amount of business days to be added. + * + * @returns The new date with the business days added + * + * @example + * // Add 10 business days to 1 September 2014: + * const result = addBusinessDays(new Date(2014, 8, 1), 10) + * //=> Mon Sep 15 2014 00:00:00 (skipped weekend days) + */ +function addBusinessDays(date, amount) { + const _date = (0, _index5.toDate)(date); + const startedOnWeekend = (0, _index4.isWeekend)(_date); -var _index = _interopRequireDefault(__nccwpck_require__(5539)); + if (isNaN(amount)) return (0, _index.constructFrom)(date, NaN); -var _index2 = _interopRequireDefault(__nccwpck_require__(439)); + const hours = _date.getHours(); + const sign = amount < 0 ? -1 : 1; + const fullWeeks = Math.trunc(amount / 5); -var _index3 = _interopRequireDefault(__nccwpck_require__(47)); + _date.setDate(_date.getDate() + fullWeeks * 7); -var _index4 = _interopRequireDefault(__nccwpck_require__(2119)); + // Get remaining days not part of a full week + let restDays = Math.abs(amount % 5); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + // Loops over remaining days + while (restDays > 0) { + _date.setDate(_date.getDate() + sign); + if (!(0, _index4.isWeekend)(_date)) restDays -= 1; + } -var MILLISECONDS_IN_WEEK = 604800000; + // If the date is a weekend day and we reduce a dividable of + // 5 from it, we land on a weekend date. + // To counter this, we add days accordingly to land on the next business day + if (startedOnWeekend && (0, _index4.isWeekend)(_date) && amount !== 0) { + // If we're reducing days, we want to add days until we land on a weekday + // If we're adding days we want to reduce days until we land on a weekday + if ((0, _index2.isSaturday)(_date)) + _date.setDate(_date.getDate() + (sign < 0 ? 2 : -1)); + if ((0, _index3.isSunday)(_date)) + _date.setDate(_date.getDate() + (sign < 0 ? 1 : -2)); + } -function getUTCISOWeek(dirtyDate) { - (0, _index4.default)(1, arguments); - var date = (0, _index.default)(dirtyDate); - var diff = (0, _index2.default)(date).getTime() - (0, _index3.default)(date).getTime(); // Round the number of days to the nearest integer - // because the number of milliseconds in a week is not constant - // (e.g. it's different in the week of the daylight saving time clock shift) + // Restore hours to avoid DST lag + _date.setHours(hours); - return Math.round(diff / MILLISECONDS_IN_WEEK) + 1; + return _date; } -module.exports = exports.default; /***/ }), -/***/ 5439: -/***/ ((module, exports, __nccwpck_require__) => { +/***/ 6520: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; +exports.addDays = addDays; +var _index = __nccwpck_require__(4363); +var _index2 = __nccwpck_require__(2524); -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = getUTCWeekYear; - -var _index = _interopRequireDefault(__nccwpck_require__(5539)); - -var _index2 = _interopRequireDefault(__nccwpck_require__(2119)); - -var _index3 = _interopRequireDefault(__nccwpck_require__(1703)); - -var _index4 = _interopRequireDefault(__nccwpck_require__(9452)); - -var _index5 = __nccwpck_require__(5340); +/** + * @name addDays + * @category Day Helpers + * @summary Add the specified number of days to the given date. + * + * @description + * Add the specified number of days to the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param amount - The amount of days to be added. + * + * @returns The new date with the days added + * + * @example + * // Add 10 days to 1 September 2014: + * const result = addDays(new Date(2014, 8, 1), 10) + * //=> Thu Sep 11 2014 00:00:00 + */ +function addDays(date, amount) { + const _date = (0, _index.toDate)(date); + if (isNaN(amount)) return (0, _index2.constructFrom)(date, NaN); + if (!amount) { + // If 0 days, no-op to avoid changing times in the hour before end of DST + return _date; + } + _date.setDate(_date.getDate() + amount); + return _date; +} -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -function getUTCWeekYear(dirtyDate, options) { - var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; +/***/ }), - (0, _index2.default)(1, arguments); - var date = (0, _index.default)(dirtyDate); - var year = date.getUTCFullYear(); - var defaultOptions = (0, _index5.getDefaultOptions)(); - var firstWeekContainsDate = (0, _index4.default)((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN +/***/ 592: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) { - throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively'); - } +"use strict"; - var firstWeekOfNextYear = new Date(0); - firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate); - firstWeekOfNextYear.setUTCHours(0, 0, 0, 0); - var startOfNextYear = (0, _index3.default)(firstWeekOfNextYear, options); - var firstWeekOfThisYear = new Date(0); - firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate); - firstWeekOfThisYear.setUTCHours(0, 0, 0, 0); - var startOfThisYear = (0, _index3.default)(firstWeekOfThisYear, options); +exports.addHours = addHours; +var _index = __nccwpck_require__(9116); +var _index2 = __nccwpck_require__(2983); - if (date.getTime() >= startOfNextYear.getTime()) { - return year + 1; - } else if (date.getTime() >= startOfThisYear.getTime()) { - return year; - } else { - return year - 1; - } +/** + * @name addHours + * @category Hour Helpers + * @summary Add the specified number of hours to the given date. + * + * @description + * Add the specified number of hours to the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param amount - The amount of hours to be added. + * + * @returns The new date with the hours added + * + * @example + * // Add 2 hours to 10 July 2014 23:00:00: + * const result = addHours(new Date(2014, 6, 10, 23, 0), 2) + * //=> Fri Jul 11 2014 01:00:00 + */ +function addHours(date, amount) { + return (0, _index.addMilliseconds)(date, amount * _index2.millisecondsInHour); } -module.exports = exports.default; /***/ }), -/***/ 7406: -/***/ ((module, exports, __nccwpck_require__) => { +/***/ 990: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; +exports.addISOWeekYears = addISOWeekYears; +var _index = __nccwpck_require__(7569); +var _index2 = __nccwpck_require__(7489); -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = getUTCWeek; - -var _index = _interopRequireDefault(__nccwpck_require__(5539)); - -var _index2 = _interopRequireDefault(__nccwpck_require__(1703)); +/** + * @name addISOWeekYears + * @category ISO Week-Numbering Year Helpers + * @summary Add the specified number of ISO week-numbering years to the given date. + * + * @description + * Add the specified number of ISO week-numbering years to the given date. + * + * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param amount - The amount of ISO week-numbering years to be added. + * + * @returns The new date with the ISO week-numbering years added + * + * @example + * // Add 5 ISO week-numbering years to 2 July 2010: + * const result = addISOWeekYears(new Date(2010, 6, 2), 5) + * //=> Fri Jn 26 2015 00:00:00 + */ +function addISOWeekYears(date, amount) { + return (0, _index2.setISOWeekYear)( + date, + (0, _index.getISOWeekYear)(date) + amount, + ); +} -var _index3 = _interopRequireDefault(__nccwpck_require__(6903)); -var _index4 = _interopRequireDefault(__nccwpck_require__(2119)); +/***/ }), -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/***/ 9116: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -var MILLISECONDS_IN_WEEK = 604800000; +"use strict"; -function getUTCWeek(dirtyDate, options) { - (0, _index4.default)(1, arguments); - var date = (0, _index.default)(dirtyDate); - var diff = (0, _index2.default)(date, options).getTime() - (0, _index3.default)(date, options).getTime(); // Round the number of days to the nearest integer - // because the number of milliseconds in a week is not constant - // (e.g. it's different in the week of the daylight saving time clock shift) +exports.addMilliseconds = addMilliseconds; +var _index = __nccwpck_require__(4363); +var _index2 = __nccwpck_require__(2524); - return Math.round(diff / MILLISECONDS_IN_WEEK) + 1; +/** + * @name addMilliseconds + * @category Millisecond Helpers + * @summary Add the specified number of milliseconds to the given date. + * + * @description + * Add the specified number of milliseconds to the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param amount - The amount of milliseconds to be added. + * + * @returns The new date with the milliseconds added + * + * @example + * // Add 750 milliseconds to 10 July 2014 12:45:30.000: + * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750) + * //=> Thu Jul 10 2014 12:45:30.750 + */ +function addMilliseconds(date, amount) { + const timestamp = +(0, _index.toDate)(date); + return (0, _index2.constructFrom)(date, timestamp + amount); } -module.exports = exports.default; /***/ }), -/***/ 5905: -/***/ ((__unused_webpack_module, exports) => { +/***/ 8158: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; +exports.addMinutes = addMinutes; +var _index = __nccwpck_require__(9116); +var _index2 = __nccwpck_require__(2983); -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.isProtectedDayOfYearToken = isProtectedDayOfYearToken; -exports.isProtectedWeekYearToken = isProtectedWeekYearToken; -exports.throwProtectedError = throwProtectedError; -var protectedDayOfYearTokens = ['D', 'DD']; -var protectedWeekYearTokens = ['YY', 'YYYY']; - -function isProtectedDayOfYearToken(token) { - return protectedDayOfYearTokens.indexOf(token) !== -1; -} - -function isProtectedWeekYearToken(token) { - return protectedWeekYearTokens.indexOf(token) !== -1; +/** + * @name addMinutes + * @category Minute Helpers + * @summary Add the specified number of minutes to the given date. + * + * @description + * Add the specified number of minutes to the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param amount - The amount of minutes to be added. + * + * @returns The new date with the minutes added + * + * @example + * // Add 30 minutes to 10 July 2014 12:00:00: + * const result = addMinutes(new Date(2014, 6, 10, 12, 0), 30) + * //=> Thu Jul 10 2014 12:30:00 + */ +function addMinutes(date, amount) { + return (0, _index.addMilliseconds)( + date, + amount * _index2.millisecondsInMinute, + ); } -function throwProtectedError(token, format, input) { - if (token === 'YYYY') { - throw new RangeError("Use `yyyy` instead of `YYYY` (in `".concat(format, "`) for formatting years to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md")); - } else if (token === 'YY') { - throw new RangeError("Use `yy` instead of `YY` (in `".concat(format, "`) for formatting years to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md")); - } else if (token === 'D') { - throw new RangeError("Use `d` instead of `D` (in `".concat(format, "`) for formatting days of the month to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md")); - } else if (token === 'DD') { - throw new RangeError("Use `dd` instead of `DD` (in `".concat(format, "`) for formatting days of the month to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md")); - } -} /***/ }), -/***/ 2119: -/***/ ((module, exports) => { +/***/ 2096: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; +exports.addMonths = addMonths; +var _index = __nccwpck_require__(4363); +var _index2 = __nccwpck_require__(2524); -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = requiredArgs; - -function requiredArgs(required, args) { - if (args.length < required) { - throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present'); +/** + * @name addMonths + * @category Month Helpers + * @summary Add the specified number of months to the given date. + * + * @description + * Add the specified number of months to the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param amount - The amount of months to be added. + * + * @returns The new date with the months added + * + * @example + * // Add 5 months to 1 September 2014: + * const result = addMonths(new Date(2014, 8, 1), 5) + * //=> Sun Feb 01 2015 00:00:00 + * + * // Add one month to 30 January 2023: + * const result = addMonths(new Date(2023, 0, 30), 1) + * //=> Tue Feb 28 2023 00:00:00 + */ +function addMonths(date, amount) { + const _date = (0, _index.toDate)(date); + if (isNaN(amount)) return (0, _index2.constructFrom)(date, NaN); + if (!amount) { + // If 0 months, no-op to avoid changing times in the hour before end of DST + return _date; + } + const dayOfMonth = _date.getDate(); + + // The JS Date object supports date math by accepting out-of-bounds values for + // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and + // new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we + // want except that dates will wrap around the end of a month, meaning that + // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So + // we'll default to the end of the desired month by adding 1 to the desired + // month and using a date of 0 to back up one day to the end of the desired + // month. + const endOfDesiredMonth = (0, _index2.constructFrom)(date, _date.getTime()); + endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0); + const daysInMonth = endOfDesiredMonth.getDate(); + if (dayOfMonth >= daysInMonth) { + // If we're already at the end of the month, then this is the correct date + // and we're done. + return endOfDesiredMonth; + } else { + // Otherwise, we now know that setting the original day-of-month value won't + // cause an overflow, so set the desired day-of-month. Note that we can't + // just set the date of `endOfDesiredMonth` because that object may have had + // its time changed in the unusual case where where a DST transition was on + // the last day of the month and its local time was in the hour skipped or + // repeated next to a DST transition. So we use `date` instead which is + // guaranteed to still have the original time. + _date.setFullYear( + endOfDesiredMonth.getFullYear(), + endOfDesiredMonth.getMonth(), + dayOfMonth, + ); + return _date; } } -module.exports = exports.default; /***/ }), -/***/ 47: -/***/ ((module, exports, __nccwpck_require__) => { +/***/ 314: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; +exports.addQuarters = addQuarters; +var _index = __nccwpck_require__(2096); -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = startOfUTCISOWeekYear; +/** + * @name addQuarters + * @category Quarter Helpers + * @summary Add the specified number of year quarters to the given date. + * + * @description + * Add the specified number of year quarters to the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param amount - The amount of quarters to be added. + * + * @returns The new date with the quarters added + * + * @example + * // Add 1 quarter to 1 September 2014: + * const result = addQuarters(new Date(2014, 8, 1), 1) + * //=> Mon Dec 01 2014 00:00:00 + */ +function addQuarters(date, amount) { + const months = amount * 3; + return (0, _index.addMonths)(date, months); +} -var _index = _interopRequireDefault(__nccwpck_require__(897)); -var _index2 = _interopRequireDefault(__nccwpck_require__(439)); +/***/ }), -var _index3 = _interopRequireDefault(__nccwpck_require__(2119)); +/***/ 4595: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +"use strict"; -function startOfUTCISOWeekYear(dirtyDate) { - (0, _index3.default)(1, arguments); - var year = (0, _index.default)(dirtyDate); - var fourthOfJanuary = new Date(0); - fourthOfJanuary.setUTCFullYear(year, 0, 4); - fourthOfJanuary.setUTCHours(0, 0, 0, 0); - var date = (0, _index2.default)(fourthOfJanuary); - return date; +exports.addSeconds = addSeconds; +var _index = __nccwpck_require__(9116); + +/** + * @name addSeconds + * @category Second Helpers + * @summary Add the specified number of seconds to the given date. + * + * @description + * Add the specified number of seconds to the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param amount - The amount of seconds to be added. + * + * @returns The new date with the seconds added + * + * @example + * // Add 30 seconds to 10 July 2014 12:45:00: + * const result = addSeconds(new Date(2014, 6, 10, 12, 45, 0), 30) + * //=> Thu Jul 10 2014 12:45:30 + */ +function addSeconds(date, amount) { + return (0, _index.addMilliseconds)(date, amount * 1000); } -module.exports = exports.default; /***/ }), -/***/ 439: -/***/ ((module, exports, __nccwpck_require__) => { +/***/ 6178: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; +exports.addWeeks = addWeeks; +var _index = __nccwpck_require__(6520); -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = startOfUTCISOWeek; - -var _index = _interopRequireDefault(__nccwpck_require__(5539)); - -var _index2 = _interopRequireDefault(__nccwpck_require__(2119)); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function startOfUTCISOWeek(dirtyDate) { - (0, _index2.default)(1, arguments); - var weekStartsOn = 1; - var date = (0, _index.default)(dirtyDate); - var day = date.getUTCDay(); - var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; - date.setUTCDate(date.getUTCDate() - diff); - date.setUTCHours(0, 0, 0, 0); - return date; +/** + * @name addWeeks + * @category Week Helpers + * @summary Add the specified number of weeks to the given date. + * + * @description + * Add the specified number of week to the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param amount - The amount of weeks to be added. + * + * @returns The new date with the weeks added + * + * @example + * // Add 4 weeks to 1 September 2014: + * const result = addWeeks(new Date(2014, 8, 1), 4) + * //=> Mon Sep 29 2014 00:00:00 + */ +function addWeeks(date, amount) { + const days = amount * 7; + return (0, _index.addDays)(date, days); } -module.exports = exports.default; /***/ }), -/***/ 6903: -/***/ ((module, exports, __nccwpck_require__) => { +/***/ 3564: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; +exports.addYears = addYears; +var _index = __nccwpck_require__(2096); -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = startOfUTCWeekYear; - -var _index = _interopRequireDefault(__nccwpck_require__(5439)); +/** + * @name addYears + * @category Year Helpers + * @summary Add the specified number of years to the given date. + * + * @description + * Add the specified number of years to the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param amount - The amount of years to be added. + * + * @returns The new date with the years added + * + * @example + * // Add 5 years to 1 September 2014: + * const result = addYears(new Date(2014, 8, 1), 5) + * //=> Sun Sep 01 2019 00:00:00 + */ +function addYears(date, amount) { + return (0, _index.addMonths)(date, amount * 12); +} -var _index2 = _interopRequireDefault(__nccwpck_require__(2119)); -var _index3 = _interopRequireDefault(__nccwpck_require__(1703)); +/***/ }), -var _index4 = _interopRequireDefault(__nccwpck_require__(9452)); +/***/ 8948: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -var _index5 = __nccwpck_require__(5340); +"use strict"; -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +exports.areIntervalsOverlapping = areIntervalsOverlapping; +var _index = __nccwpck_require__(4363); -function startOfUTCWeekYear(dirtyDate, options) { - var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; - - (0, _index2.default)(1, arguments); - var defaultOptions = (0, _index5.getDefaultOptions)(); - var firstWeekContainsDate = (0, _index4.default)((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1); - var year = (0, _index.default)(dirtyDate, options); - var firstWeek = new Date(0); - firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate); - firstWeek.setUTCHours(0, 0, 0, 0); - var date = (0, _index3.default)(firstWeek, options); - return date; -} - -module.exports = exports.default; - -/***/ }), - -/***/ 1703: -/***/ ((module, exports, __nccwpck_require__) => { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = startOfUTCWeek; +/** + * The {@link areIntervalsOverlapping} function options. + */ -var _index = _interopRequireDefault(__nccwpck_require__(5539)); +/** + * @name areIntervalsOverlapping + * @category Interval Helpers + * @summary Is the given time interval overlapping with another time interval? + * + * @description + * Is the given time interval overlapping with another time interval? Adjacent intervals do not count as overlapping unless `inclusive` is set to `true`. + * + * @param intervalLeft - The first interval to compare. + * @param intervalRight - The second interval to compare. + * @param options - The object with options + * + * @returns Whether the time intervals are overlapping + * + * @example + * // For overlapping time intervals: + * areIntervalsOverlapping( + * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) }, + * { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) } + * ) + * //=> true + * + * @example + * // For non-overlapping time intervals: + * areIntervalsOverlapping( + * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) }, + * { start: new Date(2014, 0, 21), end: new Date(2014, 0, 22) } + * ) + * //=> false + * + * @example + * // For adjacent time intervals: + * areIntervalsOverlapping( + * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) }, + * { start: new Date(2014, 0, 20), end: new Date(2014, 0, 30) } + * ) + * //=> false + * + * @example + * // Using the inclusive option: + * areIntervalsOverlapping( + * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) }, + * { start: new Date(2014, 0, 20), end: new Date(2014, 0, 24) } + * ) + * //=> false + * + * @example + * areIntervalsOverlapping( + * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) }, + * { start: new Date(2014, 0, 20), end: new Date(2014, 0, 24) }, + * { inclusive: true } + * ) + * //=> true + */ +function areIntervalsOverlapping(intervalLeft, intervalRight, options) { + const [leftStartTime, leftEndTime] = [ + +(0, _index.toDate)(intervalLeft.start), + +(0, _index.toDate)(intervalLeft.end), + ].sort((a, b) => a - b); + const [rightStartTime, rightEndTime] = [ + +(0, _index.toDate)(intervalRight.start), + +(0, _index.toDate)(intervalRight.end), + ].sort((a, b) => a - b); -var _index2 = _interopRequireDefault(__nccwpck_require__(2119)); + if (options?.inclusive) + return leftStartTime <= rightEndTime && rightStartTime <= leftEndTime; -var _index3 = _interopRequireDefault(__nccwpck_require__(9452)); + return leftStartTime < rightEndTime && rightStartTime < leftEndTime; +} -var _index4 = __nccwpck_require__(5340); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/***/ }), -function startOfUTCWeek(dirtyDate, options) { - var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; +/***/ 5343: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - (0, _index2.default)(1, arguments); - var defaultOptions = (0, _index4.getDefaultOptions)(); - var weekStartsOn = (0, _index3.default)((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN +"use strict"; - if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) { - throw new RangeError('weekStartsOn must be between 0 and 6 inclusively'); - } +exports.clamp = clamp; +var _index = __nccwpck_require__(1321); +var _index2 = __nccwpck_require__(4143); - var date = (0, _index.default)(dirtyDate); - var day = date.getUTCDay(); - var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; - date.setUTCDate(date.getUTCDate() - diff); - date.setUTCHours(0, 0, 0, 0); - return date; +/** + * @name clamp + * @category Interval Helpers + * @summary Return a date bounded by the start and the end of the given interval + * + * @description + * Clamps a date to the lower bound with the start of the interval and the upper + * bound with the end of the interval. + * + * - When the date is less than the start of the interval, the start is returned. + * - When the date is greater than the end of the interval, the end is returned. + * - Otherwise the date is returned. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be bounded + * @param interval - The interval to bound to + * + * @returns The date bounded by the start and the end of the interval + * + * @example + * // What is Mar, 21, 2021 bounded to an interval starting at Mar, 22, 2021 and ending at Apr, 01, 2021 + * const result = clamp(new Date(2021, 2, 21), { + * start: new Date(2021, 2, 22), + * end: new Date(2021, 3, 1), + * }) + * //=> Mon Mar 22 2021 00:00:00 + */ +function clamp(date, interval) { + return (0, _index2.min)([ + (0, _index.max)([date, interval.start]), + interval.end, + ]); } -module.exports = exports.default; /***/ }), -/***/ 9452: -/***/ ((module, exports) => { +/***/ 3190: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; +exports.closestIndexTo = closestIndexTo; +var _index = __nccwpck_require__(4363); -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = toInteger; +/** + * @name closestIndexTo + * @category Common Helpers + * @summary Return an index of the closest date from the array comparing to the given date. + * + * @description + * Return an index of the closest date from the array comparing to the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateToCompare - The date to compare with + * @param dates - The array to search + * + * @returns An index of the date closest to the given date or undefined if no valid value is given + * + * @example + * // Which date is closer to 6 September 2015? + * const dateToCompare = new Date(2015, 8, 6) + * const datesArray = [ + * new Date(2015, 0, 1), + * new Date(2016, 0, 1), + * new Date(2017, 0, 1) + * ] + * const result = closestIndexTo(dateToCompare, datesArray) + * //=> 1 + */ +function closestIndexTo(dateToCompare, dates) { + const date = (0, _index.toDate)(dateToCompare); -function toInteger(dirtyNumber) { - if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) { - return NaN; - } + if (isNaN(Number(date))) return NaN; - var number = Number(dirtyNumber); + const timeToCompare = date.getTime(); - if (isNaN(number)) { - return number; - } + let result; + let minDistance; + dates.forEach(function (dirtyDate, index) { + const currentDate = (0, _index.toDate)(dirtyDate); - return number < 0 ? Math.ceil(number) : Math.floor(number); + if (isNaN(Number(currentDate))) { + result = NaN; + minDistance = NaN; + return; + } + + const distance = Math.abs(timeToCompare - currentDate.getTime()); + if (result == null || distance < minDistance) { + result = index; + minDistance = distance; + } + }); + + return result; } -module.exports = exports.default; /***/ }), -/***/ 8296: -/***/ ((module, exports, __nccwpck_require__) => { +/***/ 591: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = addMilliseconds; - -var _index = _interopRequireDefault(__nccwpck_require__(9452)); - -var _index2 = _interopRequireDefault(__nccwpck_require__(5539)); - -var _index3 = _interopRequireDefault(__nccwpck_require__(2119)); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +exports.closestTo = closestTo; +var _index = __nccwpck_require__(2524); +var _index2 = __nccwpck_require__(4363); /** - * @name addMilliseconds - * @category Millisecond Helpers - * @summary Add the specified number of milliseconds to the given date. + * @name closestTo + * @category Common Helpers + * @summary Return a date from the array closest to the given date. * * @description - * Add the specified number of milliseconds to the given date. + * Return a date from the array closest to the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateToCompare - The date to compare with + * @param dates - The array to search * - * @param {Date|Number} date - the date to be changed - * @param {Number} amount - the amount of milliseconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. - * @returns {Date} the new date with the milliseconds added - * @throws {TypeError} 2 arguments required + * @returns The date from the array closest to the given date or undefined if no valid value is given * * @example - * // Add 750 milliseconds to 10 July 2014 12:45:30.000: - * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750) - * //=> Thu Jul 10 2014 12:45:30.750 + * // Which date is closer to 6 September 2015: 1 January 2000 or 1 January 2030? + * const dateToCompare = new Date(2015, 8, 6) + * const result = closestTo(dateToCompare, [ + * new Date(2000, 0, 1), + * new Date(2030, 0, 1) + * ]) + * //=> Tue Jan 01 2030 00:00:00 */ -function addMilliseconds(dirtyDate, dirtyAmount) { - (0, _index3.default)(2, arguments); - var timestamp = (0, _index2.default)(dirtyDate).getTime(); - var amount = (0, _index.default)(dirtyAmount); - return new Date(timestamp + amount); -} +function closestTo(dateToCompare, dates) { + const date = (0, _index2.toDate)(dateToCompare); -module.exports = exports.default; + if (isNaN(Number(date))) return (0, _index.constructFrom)(dateToCompare, NaN); -/***/ }), + const timeToCompare = date.getTime(); -/***/ 4269: -/***/ ((module, exports, __nccwpck_require__) => { + let result; + let minDistance; + dates.forEach((dirtyDate) => { + const currentDate = (0, _index2.toDate)(dirtyDate); -"use strict"; + if (isNaN(Number(currentDate))) { + result = (0, _index.constructFrom)(dateToCompare, NaN); + minDistance = NaN; + return; + } + const distance = Math.abs(timeToCompare - currentDate.getTime()); + if (result == null || distance < minDistance) { + result = currentDate; + minDistance = distance; + } + }); -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = format; + return result; +} -var _index = _interopRequireDefault(__nccwpck_require__(313)); -var _index2 = _interopRequireDefault(__nccwpck_require__(5000)); +/***/ }), -var _index3 = _interopRequireDefault(__nccwpck_require__(5539)); +/***/ 2189: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -var _index4 = _interopRequireDefault(__nccwpck_require__(9955)); +"use strict"; -var _index5 = _interopRequireDefault(__nccwpck_require__(7491)); +exports.compareAsc = compareAsc; +var _index = __nccwpck_require__(4363); -var _index6 = _interopRequireDefault(__nccwpck_require__(8762)); +/** + * @name compareAsc + * @category Common Helpers + * @summary Compare the two dates and return -1, 0 or 1. + * + * @description + * Compare the two dates and return 1 if the first date is after the second, + * -1 if the first date is before the second or 0 if dates are equal. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The first date to compare + * @param dateRight - The second date to compare + * + * @returns The result of the comparison + * + * @example + * // Compare 11 February 1987 and 10 July 1989: + * const result = compareAsc(new Date(1987, 1, 11), new Date(1989, 6, 10)) + * //=> -1 + * + * @example + * // Sort the array of dates: + * const result = [ + * new Date(1995, 6, 2), + * new Date(1987, 1, 11), + * new Date(1989, 6, 10) + * ].sort(compareAsc) + * //=> [ + * // Wed Feb 11 1987 00:00:00, + * // Mon Jul 10 1989 00:00:00, + * // Sun Jul 02 1995 00:00:00 + * // ] + */ +function compareAsc(dateLeft, dateRight) { + const _dateLeft = (0, _index.toDate)(dateLeft); + const _dateRight = (0, _index.toDate)(dateRight); -var _index7 = __nccwpck_require__(5905); + const diff = _dateLeft.getTime() - _dateRight.getTime(); -var _index8 = _interopRequireDefault(__nccwpck_require__(9452)); + if (diff < 0) { + return -1; + } else if (diff > 0) { + return 1; + // Return 0 if diff is 0; return NaN if diff is NaN + } else { + return diff; + } +} -var _index9 = _interopRequireDefault(__nccwpck_require__(2119)); -var _index10 = __nccwpck_require__(5340); +/***/ }), -var _index11 = _interopRequireDefault(__nccwpck_require__(6964)); +/***/ 6234: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +"use strict"; -// This RegExp consists of three parts separated by `|`: -// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token -// (one of the certain letters followed by `o`) -// - (\w)\1* matches any sequences of the same letter -// - '' matches two quote characters in a row -// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('), -// except a single quote symbol, which ends the sequence. -// Two quote characters do not end the sequence. -// If there is no matching single quote -// then the sequence will continue until the end of the string. -// - . matches any single character unmatched by previous parts of the RegExps -var formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g; // This RegExp catches symbols escaped by quotes, and also -// sequences of symbols P, p, and the combinations like `PPPPPPPppppp` +exports.compareDesc = compareDesc; +var _index = __nccwpck_require__(4363); -var longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g; -var escapedStringRegExp = /^'([^]*?)'?$/; -var doubleQuoteRegExp = /''/g; -var unescapedLatinCharacterRegExp = /[a-zA-Z]/; /** - * @name format + * @name compareDesc * @category Common Helpers - * @summary Format the date. + * @summary Compare the two dates reverse chronologically and return -1, 0 or 1. * * @description - * Return the formatted date string in the given format. The result may vary by locale. - * - * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries. - * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md - * - * The characters wrapped between two single quotes characters (') are escaped. - * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote. - * (see the last example) - * - * Format of the string is based on Unicode Technical Standard #35: - * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table - * with a few additions (see note 7 below the table). - * - * Accepted patterns: - * | Unit | Pattern | Result examples | Notes | - * |---------------------------------|---------|-----------------------------------|-------| - * | Era | G..GGG | AD, BC | | - * | | GGGG | Anno Domini, Before Christ | 2 | - * | | GGGGG | A, B | | - * | Calendar year | y | 44, 1, 1900, 2017 | 5 | - * | | yo | 44th, 1st, 0th, 17th | 5,7 | - * | | yy | 44, 01, 00, 17 | 5 | - * | | yyy | 044, 001, 1900, 2017 | 5 | - * | | yyyy | 0044, 0001, 1900, 2017 | 5 | - * | | yyyyy | ... | 3,5 | - * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 | - * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 | - * | | YY | 44, 01, 00, 17 | 5,8 | - * | | YYY | 044, 001, 1900, 2017 | 5 | - * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 | - * | | YYYYY | ... | 3,5 | - * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 | - * | | RR | -43, 00, 01, 1900, 2017 | 5,7 | - * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 | - * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 | - * | | RRRRR | ... | 3,5,7 | - * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 | - * | | uu | -43, 01, 1900, 2017 | 5 | - * | | uuu | -043, 001, 1900, 2017 | 5 | - * | | uuuu | -0043, 0001, 1900, 2017 | 5 | - * | | uuuuu | ... | 3,5 | - * | Quarter (formatting) | Q | 1, 2, 3, 4 | | - * | | Qo | 1st, 2nd, 3rd, 4th | 7 | - * | | QQ | 01, 02, 03, 04 | | - * | | QQQ | Q1, Q2, Q3, Q4 | | - * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 | - * | | QQQQQ | 1, 2, 3, 4 | 4 | - * | Quarter (stand-alone) | q | 1, 2, 3, 4 | | - * | | qo | 1st, 2nd, 3rd, 4th | 7 | - * | | qq | 01, 02, 03, 04 | | - * | | qqq | Q1, Q2, Q3, Q4 | | - * | | qqqq | 1st quarter, 2nd quarter, ... | 2 | - * | | qqqqq | 1, 2, 3, 4 | 4 | - * | Month (formatting) | M | 1, 2, ..., 12 | | - * | | Mo | 1st, 2nd, ..., 12th | 7 | - * | | MM | 01, 02, ..., 12 | | - * | | MMM | Jan, Feb, ..., Dec | | - * | | MMMM | January, February, ..., December | 2 | - * | | MMMMM | J, F, ..., D | | - * | Month (stand-alone) | L | 1, 2, ..., 12 | | - * | | Lo | 1st, 2nd, ..., 12th | 7 | - * | | LL | 01, 02, ..., 12 | | - * | | LLL | Jan, Feb, ..., Dec | | - * | | LLLL | January, February, ..., December | 2 | - * | | LLLLL | J, F, ..., D | | - * | Local week of year | w | 1, 2, ..., 53 | | - * | | wo | 1st, 2nd, ..., 53th | 7 | - * | | ww | 01, 02, ..., 53 | | - * | ISO week of year | I | 1, 2, ..., 53 | 7 | - * | | Io | 1st, 2nd, ..., 53th | 7 | - * | | II | 01, 02, ..., 53 | 7 | - * | Day of month | d | 1, 2, ..., 31 | | - * | | do | 1st, 2nd, ..., 31st | 7 | - * | | dd | 01, 02, ..., 31 | | - * | Day of year | D | 1, 2, ..., 365, 366 | 9 | - * | | Do | 1st, 2nd, ..., 365th, 366th | 7 | - * | | DD | 01, 02, ..., 365, 366 | 9 | - * | | DDD | 001, 002, ..., 365, 366 | | - * | | DDDD | ... | 3 | - * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | | - * | | EEEE | Monday, Tuesday, ..., Sunday | 2 | - * | | EEEEE | M, T, W, T, F, S, S | | - * | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | | - * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 | - * | | io | 1st, 2nd, ..., 7th | 7 | - * | | ii | 01, 02, ..., 07 | 7 | - * | | iii | Mon, Tue, Wed, ..., Sun | 7 | - * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 | - * | | iiiii | M, T, W, T, F, S, S | 7 | - * | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 7 | - * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | | - * | | eo | 2nd, 3rd, ..., 1st | 7 | - * | | ee | 02, 03, ..., 01 | | - * | | eee | Mon, Tue, Wed, ..., Sun | | - * | | eeee | Monday, Tuesday, ..., Sunday | 2 | - * | | eeeee | M, T, W, T, F, S, S | | - * | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | | - * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | | - * | | co | 2nd, 3rd, ..., 1st | 7 | - * | | cc | 02, 03, ..., 01 | | - * | | ccc | Mon, Tue, Wed, ..., Sun | | - * | | cccc | Monday, Tuesday, ..., Sunday | 2 | - * | | ccccc | M, T, W, T, F, S, S | | - * | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | | - * | AM, PM | a..aa | AM, PM | | - * | | aaa | am, pm | | - * | | aaaa | a.m., p.m. | 2 | - * | | aaaaa | a, p | | - * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | | - * | | bbb | am, pm, noon, midnight | | - * | | bbbb | a.m., p.m., noon, midnight | 2 | - * | | bbbbb | a, p, n, mi | | - * | Flexible day period | B..BBB | at night, in the morning, ... | | - * | | BBBB | at night, in the morning, ... | 2 | - * | | BBBBB | at night, in the morning, ... | | - * | Hour [1-12] | h | 1, 2, ..., 11, 12 | | - * | | ho | 1st, 2nd, ..., 11th, 12th | 7 | - * | | hh | 01, 02, ..., 11, 12 | | - * | Hour [0-23] | H | 0, 1, 2, ..., 23 | | - * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 | - * | | HH | 00, 01, 02, ..., 23 | | - * | Hour [0-11] | K | 1, 2, ..., 11, 0 | | - * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 | - * | | KK | 01, 02, ..., 11, 00 | | - * | Hour [1-24] | k | 24, 1, 2, ..., 23 | | - * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 | - * | | kk | 24, 01, 02, ..., 23 | | - * | Minute | m | 0, 1, ..., 59 | | - * | | mo | 0th, 1st, ..., 59th | 7 | - * | | mm | 00, 01, ..., 59 | | - * | Second | s | 0, 1, ..., 59 | | - * | | so | 0th, 1st, ..., 59th | 7 | - * | | ss | 00, 01, ..., 59 | | - * | Fraction of second | S | 0, 1, ..., 9 | | - * | | SS | 00, 01, ..., 99 | | - * | | SSS | 000, 001, ..., 999 | | - * | | SSSS | ... | 3 | - * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | | - * | | XX | -0800, +0530, Z | | - * | | XXX | -08:00, +05:30, Z | | - * | | XXXX | -0800, +0530, Z, +123456 | 2 | - * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | | - * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | | - * | | xx | -0800, +0530, +0000 | | - * | | xxx | -08:00, +05:30, +00:00 | 2 | - * | | xxxx | -0800, +0530, +0000, +123456 | | - * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | | - * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | | - * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 | - * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 | - * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 | - * | Seconds timestamp | t | 512969520 | 7 | - * | | tt | ... | 3,7 | - * | Milliseconds timestamp | T | 512969520900 | 7 | - * | | TT | ... | 3,7 | - * | Long localized date | P | 04/29/1453 | 7 | - * | | PP | Apr 29, 1453 | 7 | - * | | PPP | April 29th, 1453 | 7 | - * | | PPPP | Friday, April 29th, 1453 | 2,7 | - * | Long localized time | p | 12:00 AM | 7 | - * | | pp | 12:00:00 AM | 7 | - * | | ppp | 12:00:00 AM GMT+2 | 7 | - * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 | - * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 | - * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 | - * | | PPPppp | April 29th, 1453 at ... | 7 | - * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 | - * Notes: - * 1. "Formatting" units (e.g. formatting quarter) in the default en-US locale - * are the same as "stand-alone" units, but are different in some languages. - * "Formatting" units are declined according to the rules of the language - * in the context of a date. "Stand-alone" units are always nominative singular: - * - * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'` - * - * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'` - * - * 2. Any sequence of the identical letters is a pattern, unless it is escaped by - * the single quote characters (see below). - * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`) - * the output will be the same as default pattern for this unit, usually - * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units - * are marked with "2" in the last column of the table. - * - * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'` - * - * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'` - * - * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'` - * - * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'` + * Compare the two dates and return -1 if the first date is after the second, + * 1 if the first date is before the second or 0 if dates are equal. * - * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'` + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * - * 3. Some patterns could be unlimited length (such as `yyyyyyyy`). - * The output will be padded with zeros to match the length of the pattern. + * @param dateLeft - The first date to compare + * @param dateRight - The second date to compare * - * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'` + * @returns The result of the comparison * - * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales. - * These tokens represent the shortest form of the quarter. + * @example + * // Compare 11 February 1987 and 10 July 1989 reverse chronologically: + * const result = compareDesc(new Date(1987, 1, 11), new Date(1989, 6, 10)) + * //=> 1 * - * 5. The main difference between `y` and `u` patterns are B.C. years: + * @example + * // Sort the array of dates in reverse chronological order: + * const result = [ + * new Date(1995, 6, 2), + * new Date(1987, 1, 11), + * new Date(1989, 6, 10) + * ].sort(compareDesc) + * //=> [ + * // Sun Jul 02 1995 00:00:00, + * // Mon Jul 10 1989 00:00:00, + * // Wed Feb 11 1987 00:00:00 + * // ] + */ +function compareDesc(dateLeft, dateRight) { + const _dateLeft = (0, _index.toDate)(dateLeft); + const _dateRight = (0, _index.toDate)(dateRight); + + const diff = _dateLeft.getTime() - _dateRight.getTime(); + + if (diff > 0) { + return -1; + } else if (diff < 0) { + return 1; + // Return 0 if diff is 0; return NaN if diff is NaN + } else { + return diff; + } +} + + +/***/ }), + +/***/ 2983: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +exports.secondsInYear = + exports.secondsInWeek = + exports.secondsInQuarter = + exports.secondsInMonth = + exports.secondsInMinute = + exports.secondsInHour = + exports.secondsInDay = + exports.quartersInYear = + exports.monthsInYear = + exports.monthsInQuarter = + exports.minutesInYear = + exports.minutesInMonth = + exports.minutesInHour = + exports.minutesInDay = + exports.minTime = + exports.millisecondsInWeek = + exports.millisecondsInSecond = + exports.millisecondsInMinute = + exports.millisecondsInHour = + exports.millisecondsInDay = + exports.maxTime = + exports.daysInYear = + exports.daysInWeek = + void 0; /** + * @module constants + * @summary Useful constants + * @description + * Collection of useful date constants. * - * | Year | `y` | `u` | - * |------|-----|-----| - * | AC 1 | 1 | 1 | - * | BC 1 | 1 | 0 | - * | BC 2 | 2 | -1 | + * The constants could be imported from `date-fns/constants`: * - * Also `yy` always returns the last two digits of a year, - * while `uu` pads single digit years to 2 characters and returns other years unchanged: + * ```ts + * import { maxTime, minTime } from "date-fns/constants"; * - * | Year | `yy` | `uu` | - * |------|------|------| - * | 1 | 01 | 01 | - * | 14 | 14 | 14 | - * | 376 | 76 | 376 | - * | 1453 | 53 | 1453 | + * function isAllowedTime(time) { + * return time <= maxTime && time >= minTime; + * } + * ``` + */ + +/** + * @constant + * @name daysInWeek + * @summary Days in 1 week. + */ +const daysInWeek = (exports.daysInWeek = 7); + +/** + * @constant + * @name daysInYear + * @summary Days in 1 year. * - * The same difference is true for local and ISO week-numbering years (`Y` and `R`), - * except local week-numbering years are dependent on `options.weekStartsOn` - * and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear} - * and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}). + * @description + * How many days in a year. * - * 6. Specific non-location timezones are currently unavailable in `date-fns`, - * so right now these tokens fall back to GMT timezones. + * One years equals 365.2425 days according to the formula: * - * 7. These patterns are not in the Unicode Technical Standard #35: - * - `i`: ISO day of week - * - `I`: ISO week of year - * - `R`: ISO week-numbering year - * - `t`: seconds timestamp - * - `T`: milliseconds timestamp - * - `o`: ordinal number modifier - * - `P`: long localized date - * - `p`: long localized time + * > Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400. + * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days + */ +const daysInYear = (exports.daysInYear = 365.2425); + +/** + * @constant + * @name maxTime + * @summary Maximum allowed time. * - * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years. - * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * @example + * import { maxTime } from "date-fns/constants"; * - * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month. - * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * const isValid = 8640000000000001 <= maxTime; + * //=> false * - * @param {Date|Number} date - the original date - * @param {String} format - the string of tokens - * @param {Object} [options] - an object with options. - * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale} - * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday) - * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is - * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`; - * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md - * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`; - * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md - * @returns {String} the formatted date string - * @throws {TypeError} 2 arguments required - * @throws {RangeError} `date` must not be Invalid Date - * @throws {RangeError} `options.locale` must contain `localize` property - * @throws {RangeError} `options.locale` must contain `formatLong` property - * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6 - * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7 - * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md - * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md - * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md - * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md - * @throws {RangeError} format string contains an unescaped latin alphabet character + * new Date(8640000000000001); + * //=> Invalid Date + */ +const maxTime = (exports.maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000); + +/** + * @constant + * @name minTime + * @summary Minimum allowed time. * * @example - * // Represent 11 February 2014 in middle-endian format: - * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy') - * //=> '02/11/2014' + * import { minTime } from "date-fns/constants"; * - * @example - * // Represent 2 July 2014 in Esperanto: - * import { eoLocale } from 'date-fns/locale/eo' - * const result = format(new Date(2014, 6, 2), "do 'de' MMMM yyyy", { - * locale: eoLocale - * }) - * //=> '2-a de julio 2014' + * const isValid = -8640000000000001 >= minTime; + * //=> false * - * @example - * // Escape string by single quote characters: - * const result = format(new Date(2014, 6, 2, 15), "h 'o''clock'") - * //=> "3 o'clock" + * new Date(-8640000000000001) + * //=> Invalid Date */ +const minTime = (exports.minTime = -maxTime); -function format(dirtyDate, dirtyFormatStr, options) { - var _ref, _options$locale, _ref2, _ref3, _ref4, _options$firstWeekCon, _options$locale2, _options$locale2$opti, _defaultOptions$local, _defaultOptions$local2, _ref5, _ref6, _ref7, _options$weekStartsOn, _options$locale3, _options$locale3$opti, _defaultOptions$local3, _defaultOptions$local4; - - (0, _index9.default)(2, arguments); - var formatStr = String(dirtyFormatStr); - var defaultOptions = (0, _index10.getDefaultOptions)(); - var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : _index11.default; - var firstWeekContainsDate = (0, _index8.default)((_ref2 = (_ref3 = (_ref4 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale2 = options.locale) === null || _options$locale2 === void 0 ? void 0 : (_options$locale2$opti = _options$locale2.options) === null || _options$locale2$opti === void 0 ? void 0 : _options$locale2$opti.firstWeekContainsDate) !== null && _ref4 !== void 0 ? _ref4 : defaultOptions.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : 1); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN - - if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) { - throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively'); - } - - var weekStartsOn = (0, _index8.default)((_ref5 = (_ref6 = (_ref7 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale3 = options.locale) === null || _options$locale3 === void 0 ? void 0 : (_options$locale3$opti = _options$locale3.options) === null || _options$locale3$opti === void 0 ? void 0 : _options$locale3$opti.weekStartsOn) !== null && _ref7 !== void 0 ? _ref7 : defaultOptions.weekStartsOn) !== null && _ref6 !== void 0 ? _ref6 : (_defaultOptions$local3 = defaultOptions.locale) === null || _defaultOptions$local3 === void 0 ? void 0 : (_defaultOptions$local4 = _defaultOptions$local3.options) === null || _defaultOptions$local4 === void 0 ? void 0 : _defaultOptions$local4.weekStartsOn) !== null && _ref5 !== void 0 ? _ref5 : 0); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN - - if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) { - throw new RangeError('weekStartsOn must be between 0 and 6 inclusively'); - } - - if (!locale.localize) { - throw new RangeError('locale must contain localize property'); - } +/** + * @constant + * @name millisecondsInWeek + * @summary Milliseconds in 1 week. + */ +const millisecondsInWeek = (exports.millisecondsInWeek = 604800000); - if (!locale.formatLong) { - throw new RangeError('locale must contain formatLong property'); - } +/** + * @constant + * @name millisecondsInDay + * @summary Milliseconds in 1 day. + */ +const millisecondsInDay = (exports.millisecondsInDay = 86400000); - var originalDate = (0, _index3.default)(dirtyDate); +/** + * @constant + * @name millisecondsInMinute + * @summary Milliseconds in 1 minute + */ +const millisecondsInMinute = (exports.millisecondsInMinute = 60000); - if (!(0, _index.default)(originalDate)) { - throw new RangeError('Invalid time value'); - } // Convert the date in system timezone to the same date in UTC+00:00 timezone. - // This ensures that when UTC functions will be implemented, locales will be compatible with them. - // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376 +/** + * @constant + * @name millisecondsInHour + * @summary Milliseconds in 1 hour + */ +const millisecondsInHour = (exports.millisecondsInHour = 3600000); +/** + * @constant + * @name millisecondsInSecond + * @summary Milliseconds in 1 second + */ +const millisecondsInSecond = (exports.millisecondsInSecond = 1000); - var timezoneOffset = (0, _index6.default)(originalDate); - var utcDate = (0, _index2.default)(originalDate, timezoneOffset); - var formatterOptions = { - firstWeekContainsDate: firstWeekContainsDate, - weekStartsOn: weekStartsOn, - locale: locale, - _originalDate: originalDate - }; - var result = formatStr.match(longFormattingTokensRegExp).map(function (substring) { - var firstCharacter = substring[0]; +/** + * @constant + * @name minutesInYear + * @summary Minutes in 1 year. + */ +const minutesInYear = (exports.minutesInYear = 525600); - if (firstCharacter === 'p' || firstCharacter === 'P') { - var longFormatter = _index5.default[firstCharacter]; - return longFormatter(substring, locale.formatLong); - } +/** + * @constant + * @name minutesInMonth + * @summary Minutes in 1 month. + */ +const minutesInMonth = (exports.minutesInMonth = 43200); - return substring; - }).join('').match(formattingTokensRegExp).map(function (substring) { - // Replace two single quote characters with one single quote character - if (substring === "''") { - return "'"; - } +/** + * @constant + * @name minutesInDay + * @summary Minutes in 1 day. + */ +const minutesInDay = (exports.minutesInDay = 1440); - var firstCharacter = substring[0]; +/** + * @constant + * @name minutesInHour + * @summary Minutes in 1 hour. + */ +const minutesInHour = (exports.minutesInHour = 60); - if (firstCharacter === "'") { - return cleanEscapedString(substring); - } +/** + * @constant + * @name monthsInQuarter + * @summary Months in 1 quarter. + */ +const monthsInQuarter = (exports.monthsInQuarter = 3); - var formatter = _index4.default[firstCharacter]; +/** + * @constant + * @name monthsInYear + * @summary Months in 1 year. + */ +const monthsInYear = (exports.monthsInYear = 12); - if (formatter) { - if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && (0, _index7.isProtectedWeekYearToken)(substring)) { - (0, _index7.throwProtectedError)(substring, dirtyFormatStr, String(dirtyDate)); - } +/** + * @constant + * @name quartersInYear + * @summary Quarters in 1 year + */ +const quartersInYear = (exports.quartersInYear = 4); - if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && (0, _index7.isProtectedDayOfYearToken)(substring)) { - (0, _index7.throwProtectedError)(substring, dirtyFormatStr, String(dirtyDate)); - } +/** + * @constant + * @name secondsInHour + * @summary Seconds in 1 hour. + */ +const secondsInHour = (exports.secondsInHour = 3600); - return formatter(utcDate, substring, locale.localize, formatterOptions); - } +/** + * @constant + * @name secondsInMinute + * @summary Seconds in 1 minute. + */ +const secondsInMinute = (exports.secondsInMinute = 60); - if (firstCharacter.match(unescapedLatinCharacterRegExp)) { - throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`'); - } +/** + * @constant + * @name secondsInDay + * @summary Seconds in 1 day. + */ +const secondsInDay = (exports.secondsInDay = secondsInHour * 24); - return substring; - }).join(''); - return result; -} +/** + * @constant + * @name secondsInWeek + * @summary Seconds in 1 week. + */ +const secondsInWeek = (exports.secondsInWeek = secondsInDay * 7); -function cleanEscapedString(input) { - var matched = input.match(escapedStringRegExp); +/** + * @constant + * @name secondsInYear + * @summary Seconds in 1 year. + */ +const secondsInYear = (exports.secondsInYear = secondsInDay * daysInYear); - if (!matched) { - return input; - } +/** + * @constant + * @name secondsInMonth + * @summary Seconds in 1 month + */ +const secondsInMonth = (exports.secondsInMonth = secondsInYear / 12); - return matched[1].replace(doubleQuoteRegExp, "'"); -} +/** + * @constant + * @name secondsInQuarter + * @summary Seconds in 1 quarter. + */ +const secondsInQuarter = (exports.secondsInQuarter = secondsInMonth * 3); -module.exports = exports.default; /***/ }), -/***/ 1959: -/***/ ((module, exports, __nccwpck_require__) => { +/***/ 2524: +/***/ ((__unused_webpack_module, exports) => { "use strict"; - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = isDate; - -var _index = _interopRequireDefault(__nccwpck_require__(2119)); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } +exports.constructFrom = constructFrom; /** - * @name isDate - * @category Common Helpers - * @summary Is the given value a date? + * @name constructFrom + * @category Generic Helpers + * @summary Constructs a date using the reference date and the value * * @description - * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes. + * The function constructs a new date using the constructor from the reference + * date and the given value. It helps to build generic functions that accept + * date extensions. * - * @param {*} value - the value to check - * @returns {boolean} true if the given value is a date - * @throws {TypeError} 1 arguments required + * It defaults to `Date` if the passed reference date is a number or a string. * - * @example - * // For a valid date: - * const result = isDate(new Date()) - * //=> true + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The reference date to take constructor from + * @param value - The value to create the date + * + * @returns Date initialized using the given date and value * * @example - * // For an invalid date: - * const result = isDate(new Date(NaN)) - * //=> true - * - * @example - * // For some value: - * const result = isDate('2014-02-31') - * //=> false - * - * @example - * // For an object: - * const result = isDate({}) - * //=> false + * import { constructFrom } from 'date-fns' + * + * // A function that clones a date preserving the original type + * function cloneDate { +/***/ 1105: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = isValid; - -var _index = _interopRequireDefault(__nccwpck_require__(1959)); - -var _index2 = _interopRequireDefault(__nccwpck_require__(5539)); - -var _index3 = _interopRequireDefault(__nccwpck_require__(2119)); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +exports.constructNow = constructNow; +var _index = __nccwpck_require__(2524); /** - * @name isValid - * @category Common Helpers - * @summary Is the given date valid? + * @name constructNow + * @category Generic Helpers + * @summary Constructs a new current date using the passed value constructor. + * @pure false * * @description - * Returns false if argument is Invalid Date and true otherwise. - * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate} - * Invalid Date is a Date, whose time value is NaN. + * The function constructs a new current date using the constructor from + * the reference date. It helps to build generic functions that accept date + * extensions and use the current date. * - * Time value of Date: http://es5.github.io/#x15.9.1.1 + * It defaults to `Date` if the passed reference date is a number or a string. * - * @param {*} date - the date to check - * @returns {Boolean} the date is valid - * @throws {TypeError} 1 argument required + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * - * @example - * // For the valid date: - * const result = isValid(new Date(2014, 1, 31)) - * //=> true + * @param date - The reference date to take constructor from * - * @example - * // For the value, convertable into a date: - * const result = isValid(1393804800000) - * //=> true + * @returns Current date initialized using the given date constructor * * @example - * // For the invalid date: - * const result = isValid(new Date('')) - * //=> false + * import { constructNow, isSameDay } from 'date-fns' + * + * function isToday( + * date: DateType | number | string, + * ): boolean { + * // If we were to use `new Date()` directly, the function would behave + * // differently in different timezones and return false for the same date. + * return isSameDay(date, constructNow(date)); + * } */ -function isValid(dirtyDate) { - (0, _index3.default)(1, arguments); - - if (!(0, _index.default)(dirtyDate) && typeof dirtyDate !== 'number') { - return false; - } - - var date = (0, _index2.default)(dirtyDate); - return !isNaN(Number(date)); +function constructNow(date) { + return (0, _index.constructFrom)(date, Date.now()); } -module.exports = exports.default; /***/ }), -/***/ 3473: -/***/ ((module, exports) => { +/***/ 5448: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; +exports.daysToWeeks = daysToWeeks; +var _index = __nccwpck_require__(2983); -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = buildFormatLongFn; - -function buildFormatLongFn(args) { - return function () { - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - // TODO: Remove String() - var width = options.width ? String(options.width) : args.defaultWidth; - var format = args.formats[width] || args.formats[args.defaultWidth]; - return format; - }; +/** + * @name daysToWeeks + * @category Conversion Helpers + * @summary Convert days to weeks. + * + * @description + * Convert a number of days to a full number of weeks. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param days - The number of days to be converted + * + * @returns The number of days converted in weeks + * + * @example + * // Convert 14 days to weeks: + * const result = daysToWeeks(14) + * //=> 2 + * + * @example + * // It uses trunc rounding: + * const result = daysToWeeks(13) + * //=> 1 + */ +function daysToWeeks(days) { + const weeks = days / _index.daysInWeek; + const result = Math.trunc(weeks); + // Prevent negative zero + return result === 0 ? 0 : result; } -module.exports = exports.default; /***/ }), -/***/ 5168: -/***/ ((module, exports) => { +/***/ 2859: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; +exports.differenceInBusinessDays = differenceInBusinessDays; +var _index = __nccwpck_require__(6520); +var _index2 = __nccwpck_require__(6255); +var _index3 = __nccwpck_require__(6803); +var _index4 = __nccwpck_require__(6623); +var _index5 = __nccwpck_require__(2989); +var _index6 = __nccwpck_require__(4363); -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = buildLocalizeFn; +/** + * @name differenceInBusinessDays + * @category Day Helpers + * @summary Get the number of business days between the given dates. + * + * @description + * Get the number of business day periods between the given dates. + * Business days being days that arent in the weekend. + * Like `differenceInCalendarDays`, the function removes the times from + * the dates before calculating the difference. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The later date + * @param dateRight - The earlier date + * + * @returns The number of business days + * + * @example + * // How many business days are between + * // 10 January 2014 and 20 July 2014? + * const result = differenceInBusinessDays( + * new Date(2014, 6, 20), + * new Date(2014, 0, 10) + * ) + * //=> 136 + * + * // How many business days are between + * // 30 November 2021 and 1 November 2021? + * const result = differenceInBusinessDays( + * new Date(2021, 10, 30), + * new Date(2021, 10, 1) + * ) + * //=> 21 + * + * // How many business days are between + * // 1 November 2021 and 1 December 2021? + * const result = differenceInBusinessDays( + * new Date(2021, 10, 1), + * new Date(2021, 11, 1) + * ) + * //=> -22 + * + * // How many business days are between + * // 1 November 2021 and 1 November 2021 ? + * const result = differenceInBusinessDays( + * new Date(2021, 10, 1), + * new Date(2021, 10, 1) + * ) + * //=> 0 + */ +function differenceInBusinessDays(dateLeft, dateRight) { + const _dateLeft = (0, _index6.toDate)(dateLeft); + let _dateRight = (0, _index6.toDate)(dateRight); -function buildLocalizeFn(args) { - return function (dirtyIndex, options) { - var context = options !== null && options !== void 0 && options.context ? String(options.context) : 'standalone'; - var valuesArray; - - if (context === 'formatting' && args.formattingValues) { - var defaultWidth = args.defaultFormattingWidth || args.defaultWidth; - var width = options !== null && options !== void 0 && options.width ? String(options.width) : defaultWidth; - valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth]; - } else { - var _defaultWidth = args.defaultWidth; + if (!(0, _index4.isValid)(_dateLeft) || !(0, _index4.isValid)(_dateRight)) + return NaN; - var _width = options !== null && options !== void 0 && options.width ? String(options.width) : args.defaultWidth; + const calendarDifference = (0, _index2.differenceInCalendarDays)( + _dateLeft, + _dateRight, + ); + const sign = calendarDifference < 0 ? -1 : 1; - valuesArray = args.values[_width] || args.values[_defaultWidth]; - } + const weeks = Math.trunc(calendarDifference / 7); - var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex; // @ts-ignore: For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it! + let result = weeks * 5; + _dateRight = (0, _index.addDays)(_dateRight, weeks * 7); - return valuesArray[index]; - }; + // the loop below will run at most 6 times to account for the remaining days that don't makeup a full week + while (!(0, _index3.isSameDay)(_dateLeft, _dateRight)) { + // sign is used to account for both negative and positive differences + result += (0, _index5.isWeekend)(_dateRight) ? 0 : sign; + _dateRight = (0, _index.addDays)(_dateRight, sign); + } + + // Prevent negative zero + return result === 0 ? 0 : result; } -module.exports = exports.default; /***/ }), -/***/ 5224: -/***/ ((module, exports) => { +/***/ 6255: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; +exports.differenceInCalendarDays = differenceInCalendarDays; +var _index = __nccwpck_require__(2983); +var _index2 = __nccwpck_require__(8400); +var _index3 = __nccwpck_require__(4261); -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = buildMatchFn; - -function buildMatchFn(args) { - return function (string) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var width = options.width; - var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth]; - var matchResult = string.match(matchPattern); - - if (!matchResult) { - return null; - } - - var matchedString = matchResult[0]; - var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth]; - var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) { - return pattern.test(matchedString); - }) : findKey(parsePatterns, function (pattern) { - return pattern.test(matchedString); - }); - var value; - value = args.valueCallback ? args.valueCallback(key) : key; - value = options.valueCallback ? options.valueCallback(value) : value; - var rest = string.slice(matchedString.length); - return { - value: value, - rest: rest - }; - }; -} - -function findKey(object, predicate) { - for (var key in object) { - if (object.hasOwnProperty(key) && predicate(object[key])) { - return key; - } - } - - return undefined; -} - -function findIndex(array, predicate) { - for (var key = 0; key < array.length; key++) { - if (predicate(array[key])) { - return key; - } - } - - return undefined; +/** + * @name differenceInCalendarDays + * @category Day Helpers + * @summary Get the number of calendar days between the given dates. + * + * @description + * Get the number of calendar days between the given dates. This means that the times are removed + * from the dates and then the difference in days is calculated. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The later date + * @param dateRight - The earlier date + * + * @returns The number of calendar days + * + * @example + * // How many calendar days are between + * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00? + * const result = differenceInCalendarDays( + * new Date(2012, 6, 2, 0, 0), + * new Date(2011, 6, 2, 23, 0) + * ) + * //=> 366 + * // How many calendar days are between + * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00? + * const result = differenceInCalendarDays( + * new Date(2011, 6, 3, 0, 1), + * new Date(2011, 6, 2, 23, 59) + * ) + * //=> 1 + */ +function differenceInCalendarDays(dateLeft, dateRight) { + const startOfDayLeft = (0, _index2.startOfDay)(dateLeft); + const startOfDayRight = (0, _index2.startOfDay)(dateRight); + + const timestampLeft = + +startOfDayLeft - + (0, _index3.getTimezoneOffsetInMilliseconds)(startOfDayLeft); + const timestampRight = + +startOfDayRight - + (0, _index3.getTimezoneOffsetInMilliseconds)(startOfDayRight); + + // Round the number of days to the nearest integer because the number of + // milliseconds in a day is not constant (e.g. it's different in the week of + // the daylight saving time clock shift). + return Math.round( + (timestampLeft - timestampRight) / _index.millisecondsInDay, + ); } -module.exports = exports.default; /***/ }), -/***/ 4170: -/***/ ((module, exports) => { +/***/ 3223: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; +exports.differenceInCalendarISOWeekYears = differenceInCalendarISOWeekYears; +var _index = __nccwpck_require__(7569); -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = buildMatchPatternFn; - -function buildMatchPatternFn(args) { - return function (string) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var matchResult = string.match(args.matchPattern); - if (!matchResult) return null; - var matchedString = matchResult[0]; - var parseResult = string.match(args.parsePattern); - if (!parseResult) return null; - var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0]; - value = options.valueCallback ? options.valueCallback(value) : value; - var rest = string.slice(matchedString.length); - return { - value: value, - rest: rest - }; - }; +/** + * @name differenceInCalendarISOWeekYears + * @category ISO Week-Numbering Year Helpers + * @summary Get the number of calendar ISO week-numbering years between the given dates. + * + * @description + * Get the number of calendar ISO week-numbering years between the given dates. + * + * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The later date + * @param dateRight - The earlier date + * + * @returns The number of calendar ISO week-numbering years + * + * @example + * // How many calendar ISO week-numbering years are 1 January 2010 and 1 January 2012? + * const result = differenceInCalendarISOWeekYears( + * new Date(2012, 0, 1), + * new Date(2010, 0, 1) + * ) + * //=> 2 + */ +function differenceInCalendarISOWeekYears(dateLeft, dateRight) { + return ( + (0, _index.getISOWeekYear)(dateLeft) - (0, _index.getISOWeekYear)(dateRight) + ); } -module.exports = exports.default; /***/ }), -/***/ 2866: -/***/ ((module, exports) => { +/***/ 3539: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; +exports.differenceInCalendarISOWeeks = differenceInCalendarISOWeeks; +var _index = __nccwpck_require__(2983); +var _index2 = __nccwpck_require__(1573); +var _index3 = __nccwpck_require__(4261); -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = void 0; -var formatDistanceLocale = { - lessThanXSeconds: { - one: 'less than a second', - other: 'less than {{count}} seconds' - }, - xSeconds: { - one: '1 second', - other: '{{count}} seconds' - }, - halfAMinute: 'half a minute', - lessThanXMinutes: { - one: 'less than a minute', - other: 'less than {{count}} minutes' - }, - xMinutes: { - one: '1 minute', - other: '{{count}} minutes' - }, - aboutXHours: { - one: 'about 1 hour', - other: 'about {{count}} hours' - }, - xHours: { - one: '1 hour', - other: '{{count}} hours' - }, - xDays: { - one: '1 day', - other: '{{count}} days' - }, - aboutXWeeks: { - one: 'about 1 week', - other: 'about {{count}} weeks' - }, - xWeeks: { - one: '1 week', - other: '{{count}} weeks' - }, - aboutXMonths: { - one: 'about 1 month', - other: 'about {{count}} months' - }, - xMonths: { - one: '1 month', - other: '{{count}} months' - }, - aboutXYears: { - one: 'about 1 year', - other: 'about {{count}} years' - }, - xYears: { - one: '1 year', - other: '{{count}} years' - }, - overXYears: { - one: 'over 1 year', - other: 'over {{count}} years' - }, - almostXYears: { - one: 'almost 1 year', - other: 'almost {{count}} years' - } -}; - -var formatDistance = function formatDistance(token, count, options) { - var result; - var tokenValue = formatDistanceLocale[token]; - - if (typeof tokenValue === 'string') { - result = tokenValue; - } else if (count === 1) { - result = tokenValue.one; - } else { - result = tokenValue.other.replace('{{count}}', count.toString()); - } - - if (options !== null && options !== void 0 && options.addSuffix) { - if (options.comparison && options.comparison > 0) { - return 'in ' + result; - } else { - return result + ' ago'; - } - } - - return result; -}; +/** + * @name differenceInCalendarISOWeeks + * @category ISO Week Helpers + * @summary Get the number of calendar ISO weeks between the given dates. + * + * @description + * Get the number of calendar ISO weeks between the given dates. + * + * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The later date + * @param dateRight - The earlier date + * + * @returns The number of calendar ISO weeks + * + * @example + * // How many calendar ISO weeks are between 6 July 2014 and 21 July 2014? + * const result = differenceInCalendarISOWeeks( + * new Date(2014, 6, 21), + * new Date(2014, 6, 6) + * ) + * //=> 3 + */ +function differenceInCalendarISOWeeks(dateLeft, dateRight) { + const startOfISOWeekLeft = (0, _index2.startOfISOWeek)(dateLeft); + const startOfISOWeekRight = (0, _index2.startOfISOWeek)(dateRight); + + const timestampLeft = + +startOfISOWeekLeft - + (0, _index3.getTimezoneOffsetInMilliseconds)(startOfISOWeekLeft); + const timestampRight = + +startOfISOWeekRight - + (0, _index3.getTimezoneOffsetInMilliseconds)(startOfISOWeekRight); + + // Round the number of weeks to the nearest integer because the number of + // milliseconds in a week is not constant (e.g. it's different in the week of + // the daylight saving time clock shift). + return Math.round( + (timestampLeft - timestampRight) / _index.millisecondsInWeek, + ); +} -var _default = formatDistance; -exports["default"] = _default; -module.exports = exports.default; /***/ }), -/***/ 1046: -/***/ ((module, exports, __nccwpck_require__) => { +/***/ 9449: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; +exports.differenceInCalendarMonths = differenceInCalendarMonths; +var _index = __nccwpck_require__(4363); -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = void 0; +/** + * @name differenceInCalendarMonths + * @category Month Helpers + * @summary Get the number of calendar months between the given dates. + * + * @description + * Get the number of calendar months between the given dates. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The later date + * @param dateRight - The earlier date + * + * @returns The number of calendar months + * + * @example + * // How many calendar months are between 31 January 2014 and 1 September 2014? + * const result = differenceInCalendarMonths( + * new Date(2014, 8, 1), + * new Date(2014, 0, 31) + * ) + * //=> 8 + */ +function differenceInCalendarMonths(dateLeft, dateRight) { + const _dateLeft = (0, _index.toDate)(dateLeft); + const _dateRight = (0, _index.toDate)(dateRight); -var _index = _interopRequireDefault(__nccwpck_require__(3473)); + const yearDiff = _dateLeft.getFullYear() - _dateRight.getFullYear(); + const monthDiff = _dateLeft.getMonth() - _dateRight.getMonth(); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + return yearDiff * 12 + monthDiff; +} -var dateFormats = { - full: 'EEEE, MMMM do, y', - long: 'MMMM do, y', - medium: 'MMM d, y', - short: 'MM/dd/yyyy' -}; -var timeFormats = { - full: 'h:mm:ss a zzzz', - long: 'h:mm:ss a z', - medium: 'h:mm:ss a', - short: 'h:mm a' -}; -var dateTimeFormats = { - full: "{{date}} 'at' {{time}}", - long: "{{date}} 'at' {{time}}", - medium: '{{date}}, {{time}}', - short: '{{date}}, {{time}}' -}; -var formatLong = { - date: (0, _index.default)({ - formats: dateFormats, - defaultWidth: 'full' - }), - time: (0, _index.default)({ - formats: timeFormats, - defaultWidth: 'full' - }), - dateTime: (0, _index.default)({ - formats: dateTimeFormats, - defaultWidth: 'full' - }) -}; -var _default = formatLong; -exports["default"] = _default; -module.exports = exports.default; /***/ }), -/***/ 5711: -/***/ ((module, exports) => { +/***/ 3966: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; +exports.differenceInCalendarQuarters = differenceInCalendarQuarters; +var _index = __nccwpck_require__(6349); +var _index2 = __nccwpck_require__(4363); -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = void 0; -var formatRelativeLocale = { - lastWeek: "'last' eeee 'at' p", - yesterday: "'yesterday at' p", - today: "'today at' p", - tomorrow: "'tomorrow at' p", - nextWeek: "eeee 'at' p", - other: 'P' -}; +/** + * @name differenceInCalendarQuarters + * @category Quarter Helpers + * @summary Get the number of calendar quarters between the given dates. + * + * @description + * Get the number of calendar quarters between the given dates. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The later date + * @param dateRight - The earlier date -var formatRelative = function formatRelative(token, _date, _baseDate, _options) { - return formatRelativeLocale[token]; -}; + * @returns The number of calendar quarters + * + * @example + * // How many calendar quarters are between 31 December 2013 and 2 July 2014? + * const result = differenceInCalendarQuarters( + * new Date(2014, 6, 2), + * new Date(2013, 11, 31) + * ) + * //=> 3 + */ +function differenceInCalendarQuarters(dateLeft, dateRight) { + const _dateLeft = (0, _index2.toDate)(dateLeft); + const _dateRight = (0, _index2.toDate)(dateRight); + + const yearDiff = _dateLeft.getFullYear() - _dateRight.getFullYear(); + const quarterDiff = + (0, _index.getQuarter)(_dateLeft) - (0, _index.getQuarter)(_dateRight); + + return yearDiff * 4 + quarterDiff; +} -var _default = formatRelative; -exports["default"] = _default; -module.exports = exports.default; /***/ }), -/***/ 8378: -/***/ ((module, exports, __nccwpck_require__) => { +/***/ 4494: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; +exports.differenceInCalendarWeeks = differenceInCalendarWeeks; +var _index = __nccwpck_require__(2983); +var _index2 = __nccwpck_require__(7421); -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = void 0; +var _index3 = __nccwpck_require__(4261); -var _index = _interopRequireDefault(__nccwpck_require__(5168)); +/** + * The {@link differenceInCalendarWeeks} function options. + */ -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/** + * @name differenceInCalendarWeeks + * @category Week Helpers + * @summary Get the number of calendar weeks between the given dates. + * + * @description + * Get the number of calendar weeks between the given dates. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The later date + * @param dateRight - The earlier date + * @param options - An object with options. + * + * @returns The number of calendar weeks + * + * @example + * // How many calendar weeks are between 5 July 2014 and 20 July 2014? + * const result = differenceInCalendarWeeks( + * new Date(2014, 6, 20), + * new Date(2014, 6, 5) + * ) + * //=> 3 + * + * @example + * // If the week starts on Monday, + * // how many calendar weeks are between 5 July 2014 and 20 July 2014? + * const result = differenceInCalendarWeeks( + * new Date(2014, 6, 20), + * new Date(2014, 6, 5), + * { weekStartsOn: 1 } + * ) + * //=> 2 + */ +function differenceInCalendarWeeks(dateLeft, dateRight, options) { + const startOfWeekLeft = (0, _index2.startOfWeek)(dateLeft, options); + const startOfWeekRight = (0, _index2.startOfWeek)(dateRight, options); + + const timestampLeft = + +startOfWeekLeft - + (0, _index3.getTimezoneOffsetInMilliseconds)(startOfWeekLeft); + const timestampRight = + +startOfWeekRight - + (0, _index3.getTimezoneOffsetInMilliseconds)(startOfWeekRight); + + // Round the number of days to the nearest integer because the number of + // milliseconds in a days is not constant (e.g. it's different in the week of + // the daylight saving time clock shift). + return Math.round( + (timestampLeft - timestampRight) / _index.millisecondsInWeek, + ); +} -var eraValues = { - narrow: ['B', 'A'], - abbreviated: ['BC', 'AD'], - wide: ['Before Christ', 'Anno Domini'] -}; -var quarterValues = { - narrow: ['1', '2', '3', '4'], - abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'], - wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter'] -}; // Note: in English, the names of days of the week and months are capitalized. -// If you are making a new locale based on this one, check if the same is true for the language you're working on. -// Generally, formatted dates should look like they are in the middle of a sentence, -// e.g. in Spanish language the weekdays and months should be in the lowercase. -var monthValues = { - narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'], - abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], - wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] -}; -var dayValues = { - narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'], - short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], - abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], - wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'] -}; -var dayPeriodValues = { - narrow: { - am: 'a', - pm: 'p', - midnight: 'mi', - noon: 'n', - morning: 'morning', - afternoon: 'afternoon', - evening: 'evening', - night: 'night' - }, - abbreviated: { - am: 'AM', - pm: 'PM', - midnight: 'midnight', - noon: 'noon', - morning: 'morning', - afternoon: 'afternoon', - evening: 'evening', - night: 'night' - }, - wide: { - am: 'a.m.', - pm: 'p.m.', - midnight: 'midnight', - noon: 'noon', - morning: 'morning', - afternoon: 'afternoon', - evening: 'evening', - night: 'night' - } -}; -var formattingDayPeriodValues = { - narrow: { - am: 'a', - pm: 'p', - midnight: 'mi', - noon: 'n', - morning: 'in the morning', - afternoon: 'in the afternoon', - evening: 'in the evening', - night: 'at night' - }, - abbreviated: { - am: 'AM', - pm: 'PM', - midnight: 'midnight', - noon: 'noon', - morning: 'in the morning', - afternoon: 'in the afternoon', - evening: 'in the evening', - night: 'at night' - }, - wide: { - am: 'a.m.', - pm: 'p.m.', - midnight: 'midnight', - noon: 'noon', - morning: 'in the morning', - afternoon: 'in the afternoon', - evening: 'in the evening', - night: 'at night' - } -}; +/***/ }), -var ordinalNumber = function ordinalNumber(dirtyNumber, _options) { - var number = Number(dirtyNumber); // If ordinal numbers depend on context, for example, - // if they are different for different grammatical genders, - // use `options.unit`. - // - // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear', - // 'day', 'hour', 'minute', 'second'. +/***/ 8667: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - var rem100 = number % 100; +"use strict"; - if (rem100 > 20 || rem100 < 10) { - switch (rem100 % 10) { - case 1: - return number + 'st'; +exports.differenceInCalendarYears = differenceInCalendarYears; +var _index = __nccwpck_require__(4363); - case 2: - return number + 'nd'; +/** + * @name differenceInCalendarYears + * @category Year Helpers + * @summary Get the number of calendar years between the given dates. + * + * @description + * Get the number of calendar years between the given dates. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The later date + * @param dateRight - The earlier date - case 3: - return number + 'rd'; - } - } + * @returns The number of calendar years + * + * @example + * // How many calendar years are between 31 December 2013 and 11 February 2015? + * const result = differenceInCalendarYears( + * new Date(2015, 1, 11), + * new Date(2013, 11, 31) + * ) + * //=> 2 + */ +function differenceInCalendarYears(dateLeft, dateRight) { + const _dateLeft = (0, _index.toDate)(dateLeft); + const _dateRight = (0, _index.toDate)(dateRight); - return number + 'th'; -}; + return _dateLeft.getFullYear() - _dateRight.getFullYear(); +} -var localize = { - ordinalNumber: ordinalNumber, - era: (0, _index.default)({ - values: eraValues, - defaultWidth: 'wide' - }), - quarter: (0, _index.default)({ - values: quarterValues, - defaultWidth: 'wide', - argumentCallback: function argumentCallback(quarter) { - return quarter - 1; - } - }), - month: (0, _index.default)({ - values: monthValues, - defaultWidth: 'wide' - }), - day: (0, _index.default)({ - values: dayValues, - defaultWidth: 'wide' - }), - dayPeriod: (0, _index.default)({ - values: dayPeriodValues, - defaultWidth: 'wide', - formattingValues: formattingDayPeriodValues, - defaultFormattingWidth: 'wide' - }) -}; -var _default = localize; -exports["default"] = _default; -module.exports = exports.default; /***/ }), -/***/ 2370: -/***/ ((module, exports, __nccwpck_require__) => { +/***/ 7263: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; +exports.differenceInDays = differenceInDays; +var _index = __nccwpck_require__(6255); +var _index2 = __nccwpck_require__(4363); -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = void 0; - -var _index = _interopRequireDefault(__nccwpck_require__(5224)); +/** + * @name differenceInDays + * @category Day Helpers + * @summary Get the number of full days between the given dates. + * + * @description + * Get the number of full day periods between two dates. Fractional days are + * truncated towards zero. + * + * One "full day" is the distance between a local time in one day to the same + * local time on the next or previous day. A full day can sometimes be less than + * or more than 24 hours if a daylight savings change happens between two dates. + * + * To ignore DST and only measure exact 24-hour periods, use this instead: + * `Math.trunc(differenceInHours(dateLeft, dateRight)/24)|0`. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The later date + * @param dateRight - The earlier date + * + * @returns The number of full days according to the local timezone + * + * @example + * // How many full days are between + * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00? + * const result = differenceInDays( + * new Date(2012, 6, 2, 0, 0), + * new Date(2011, 6, 2, 23, 0) + * ) + * //=> 365 + * + * @example + * // How many full days are between + * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00? + * const result = differenceInDays( + * new Date(2011, 6, 3, 0, 1), + * new Date(2011, 6, 2, 23, 59) + * ) + * //=> 0 + * + * @example + * // How many full days are between + * // 1 March 2020 0:00 and 1 June 2020 0:00 ? + * // Note: because local time is used, the + * // result will always be 92 days, even in + * // time zones where DST starts and the + * // period has only 92*24-1 hours. + * const result = differenceInDays( + * new Date(2020, 5, 1), + * new Date(2020, 2, 1) + * ) + * //=> 92 + */ +function differenceInDays(dateLeft, dateRight) { + const _dateLeft = (0, _index2.toDate)(dateLeft); + const _dateRight = (0, _index2.toDate)(dateRight); -var _index2 = _interopRequireDefault(__nccwpck_require__(4170)); + const sign = compareLocalAsc(_dateLeft, _dateRight); + const difference = Math.abs( + (0, _index.differenceInCalendarDays)(_dateLeft, _dateRight), + ); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + _dateLeft.setDate(_dateLeft.getDate() - sign * difference); -var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i; -var parseOrdinalNumberPattern = /\d+/i; -var matchEraPatterns = { - narrow: /^(b|a)/i, - abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i, - wide: /^(before christ|before common era|anno domini|common era)/i -}; -var parseEraPatterns = { - any: [/^b/i, /^(a|c)/i] -}; -var matchQuarterPatterns = { - narrow: /^[1234]/i, - abbreviated: /^q[1234]/i, - wide: /^[1234](th|st|nd|rd)? quarter/i -}; -var parseQuarterPatterns = { - any: [/1/i, /2/i, /3/i, /4/i] -}; -var matchMonthPatterns = { - narrow: /^[jfmasond]/i, - abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i, - wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i -}; -var parseMonthPatterns = { - narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i], - any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i] -}; -var matchDayPatterns = { - narrow: /^[smtwf]/i, - short: /^(su|mo|tu|we|th|fr|sa)/i, - abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i, - wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i -}; -var parseDayPatterns = { - narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i], - any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i] -}; -var matchDayPeriodPatterns = { - narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i, - any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i -}; -var parseDayPeriodPatterns = { - any: { - am: /^a/i, - pm: /^p/i, - midnight: /^mi/i, - noon: /^no/i, - morning: /morning/i, - afternoon: /afternoon/i, - evening: /evening/i, - night: /night/i + // Math.abs(diff in full days - diff in calendar days) === 1 if last calendar day is not full + // If so, result must be decreased by 1 in absolute value + const isLastDayNotFull = Number( + compareLocalAsc(_dateLeft, _dateRight) === -sign, + ); + const result = sign * (difference - isLastDayNotFull); + // Prevent negative zero + return result === 0 ? 0 : result; +} + +// Like `compareAsc` but uses local time not UTC, which is needed +// for accurate equality comparisons of UTC timestamps that end up +// having the same representation in local time, e.g. one hour before +// DST ends vs. the instant that DST ends. +function compareLocalAsc(dateLeft, dateRight) { + const diff = + dateLeft.getFullYear() - dateRight.getFullYear() || + dateLeft.getMonth() - dateRight.getMonth() || + dateLeft.getDate() - dateRight.getDate() || + dateLeft.getHours() - dateRight.getHours() || + dateLeft.getMinutes() - dateRight.getMinutes() || + dateLeft.getSeconds() - dateRight.getSeconds() || + dateLeft.getMilliseconds() - dateRight.getMilliseconds(); + + if (diff < 0) { + return -1; + } else if (diff > 0) { + return 1; + // Return 0 if diff is 0; return NaN if diff is NaN + } else { + return diff; } -}; -var match = { - ordinalNumber: (0, _index2.default)({ - matchPattern: matchOrdinalNumberPattern, - parsePattern: parseOrdinalNumberPattern, - valueCallback: function valueCallback(value) { - return parseInt(value, 10); - } - }), - era: (0, _index.default)({ - matchPatterns: matchEraPatterns, - defaultMatchWidth: 'wide', - parsePatterns: parseEraPatterns, - defaultParseWidth: 'any' - }), - quarter: (0, _index.default)({ - matchPatterns: matchQuarterPatterns, - defaultMatchWidth: 'wide', - parsePatterns: parseQuarterPatterns, - defaultParseWidth: 'any', - valueCallback: function valueCallback(index) { - return index + 1; - } - }), - month: (0, _index.default)({ - matchPatterns: matchMonthPatterns, - defaultMatchWidth: 'wide', - parsePatterns: parseMonthPatterns, - defaultParseWidth: 'any' - }), - day: (0, _index.default)({ - matchPatterns: matchDayPatterns, - defaultMatchWidth: 'wide', - parsePatterns: parseDayPatterns, - defaultParseWidth: 'any' - }), - dayPeriod: (0, _index.default)({ - matchPatterns: matchDayPeriodPatterns, - defaultMatchWidth: 'any', - parsePatterns: parseDayPeriodPatterns, - defaultParseWidth: 'any' - }) -}; -var _default = match; -exports["default"] = _default; -module.exports = exports.default; +} + /***/ }), -/***/ 9253: -/***/ ((module, exports, __nccwpck_require__) => { +/***/ 6891: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; +exports.differenceInHours = differenceInHours; +var _index = __nccwpck_require__(9253); +var _index2 = __nccwpck_require__(2983); +var _index3 = __nccwpck_require__(8632); -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = void 0; +/** + * The {@link differenceInHours} function options. + */ -var _index = _interopRequireDefault(__nccwpck_require__(2866)); +/** + * @name differenceInHours + * @category Hour Helpers + * @summary Get the number of hours between the given dates. + * + * @description + * Get the number of hours between the given dates. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The later date + * @param dateRight - The earlier date + * @param options - An object with options. + * + * @returns The number of hours + * + * @example + * // How many hours are between 2 July 2014 06:50:00 and 2 July 2014 19:00:00? + * const result = differenceInHours( + * new Date(2014, 6, 2, 19, 0), + * new Date(2014, 6, 2, 6, 50) + * ) + * //=> 12 + */ +function differenceInHours(dateLeft, dateRight, options) { + const diff = + (0, _index3.differenceInMilliseconds)(dateLeft, dateRight) / + _index2.millisecondsInHour; + return (0, _index.getRoundingMethod)(options?.roundingMethod)(diff); +} -var _index2 = _interopRequireDefault(__nccwpck_require__(1046)); -var _index3 = _interopRequireDefault(__nccwpck_require__(5711)); +/***/ }), -var _index4 = _interopRequireDefault(__nccwpck_require__(8378)); +/***/ 6901: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -var _index5 = _interopRequireDefault(__nccwpck_require__(2370)); +"use strict"; -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +exports.differenceInISOWeekYears = differenceInISOWeekYears; +var _index = __nccwpck_require__(2189); +var _index2 = __nccwpck_require__(3223); +var _index3 = __nccwpck_require__(1772); +var _index4 = __nccwpck_require__(4363); /** - * @type {Locale} - * @category Locales - * @summary English locale (United States). - * @language English - * @iso-639-2 eng - * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp} - * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss} - */ -var locale = { - code: 'en-US', - formatDistance: _index.default, - formatLong: _index2.default, - formatRelative: _index3.default, - localize: _index4.default, - match: _index5.default, - options: { - weekStartsOn: 0 - /* Sunday */ - , - firstWeekContainsDate: 1 - } -}; -var _default = locale; -exports["default"] = _default; -module.exports = exports.default; - -/***/ }), - -/***/ 5000: -/***/ ((module, exports, __nccwpck_require__) => { + * @name differenceInISOWeekYears + * @category ISO Week-Numbering Year Helpers + * @summary Get the number of full ISO week-numbering years between the given dates. + * + * @description + * Get the number of full ISO week-numbering years between the given dates. + * + * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The later date + * @param dateRight - The earlier date + * + * @returns The number of full ISO week-numbering years + * + * @example + * // How many full ISO week-numbering years are between 1 January 2010 and 1 January 2012? + * const result = differenceInISOWeekYears( + * new Date(2012, 0, 1), + * new Date(2010, 0, 1) + * ) + * //=> 1 + */ +function differenceInISOWeekYears(dateLeft, dateRight) { + let _dateLeft = (0, _index4.toDate)(dateLeft); + const _dateRight = (0, _index4.toDate)(dateRight); -"use strict"; + const sign = (0, _index.compareAsc)(_dateLeft, _dateRight); + const difference = Math.abs( + (0, _index2.differenceInCalendarISOWeekYears)(_dateLeft, _dateRight), + ); + _dateLeft = (0, _index3.subISOWeekYears)(_dateLeft, sign * difference); + // Math.abs(diff in full ISO years - diff in calendar ISO years) === 1 + // if last calendar ISO year is not full + // If so, result must be decreased by 1 in absolute value + const isLastISOWeekYearNotFull = Number( + (0, _index.compareAsc)(_dateLeft, _dateRight) === -sign, + ); + const result = sign * (difference - isLastISOWeekYearNotFull); + // Prevent negative zero + return result === 0 ? 0 : result; +} -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = subMilliseconds; -var _index = _interopRequireDefault(__nccwpck_require__(8296)); +/***/ }), -var _index2 = _interopRequireDefault(__nccwpck_require__(2119)); +/***/ 8632: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -var _index3 = _interopRequireDefault(__nccwpck_require__(9452)); +"use strict"; -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +exports.differenceInMilliseconds = differenceInMilliseconds; +var _index = __nccwpck_require__(4363); /** - * @name subMilliseconds + * @name differenceInMilliseconds * @category Millisecond Helpers - * @summary Subtract the specified number of milliseconds from the given date. + * @summary Get the number of milliseconds between the given dates. * * @description - * Subtract the specified number of milliseconds from the given date. + * Get the number of milliseconds between the given dates. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * - * @param {Date|Number} date - the date to be changed - * @param {Number} amount - the amount of milliseconds to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. - * @returns {Date} the new date with the milliseconds subtracted - * @throws {TypeError} 2 arguments required + * @param dateLeft - The later date + * @param dateRight - The earlier date + * + * @returns The number of milliseconds * * @example - * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000: - * const result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750) - * //=> Thu Jul 10 2014 12:45:29.250 + * // How many milliseconds are between + * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700? + * const result = differenceInMilliseconds( + * new Date(2014, 6, 2, 12, 30, 21, 700), + * new Date(2014, 6, 2, 12, 30, 20, 600) + * ) + * //=> 1100 */ -function subMilliseconds(dirtyDate, dirtyAmount) { - (0, _index2.default)(2, arguments); - var amount = (0, _index3.default)(dirtyAmount); - return (0, _index.default)(dirtyDate, -amount); +function differenceInMilliseconds(dateLeft, dateRight) { + return +(0, _index.toDate)(dateLeft) - +(0, _index.toDate)(dateRight); } -module.exports = exports.default; /***/ }), -/***/ 5539: -/***/ ((module, exports, __nccwpck_require__) => { +/***/ 8892: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; +exports.differenceInMinutes = differenceInMinutes; +var _index = __nccwpck_require__(9253); +var _index2 = __nccwpck_require__(2983); +var _index3 = __nccwpck_require__(8632); -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = toDate; - -var _index = _interopRequireDefault(__nccwpck_require__(2119)); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } +/** + * The {@link differenceInMinutes} function options. + */ /** - * @name toDate - * @category Common Helpers - * @summary Convert the given argument to an instance of Date. + * @name differenceInMinutes + * @category Minute Helpers + * @summary Get the number of minutes between the given dates. * * @description - * Convert the given argument to an instance of Date. - * - * If the argument is an instance of Date, the function returns its clone. + * Get the signed number of full (rounded towards 0) minutes between the given dates. * - * If the argument is a number, it is treated as a timestamp. + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * - * If the argument is none of the above, the function returns Invalid Date. + * @param dateLeft - The later date + * @param dateRight - The earlier date + * @param options - An object with options. * - * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`. + * @returns The number of minutes * - * @param {Date|Number} argument - the value to convert - * @returns {Date} the parsed date in the local time zone - * @throws {TypeError} 1 argument required + * @example + * // How many minutes are between 2 July 2014 12:07:59 and 2 July 2014 12:20:00? + * const result = differenceInMinutes( + * new Date(2014, 6, 2, 12, 20, 0), + * new Date(2014, 6, 2, 12, 7, 59) + * ) + * //=> 12 * * @example - * // Clone the date: - * const result = toDate(new Date(2014, 1, 11, 11, 30, 30)) - * //=> Tue Feb 11 2014 11:30:30 + * // How many minutes are between 10:01:59 and 10:00:00 + * const result = differenceInMinutes( + * new Date(2000, 0, 1, 10, 0, 0), + * new Date(2000, 0, 1, 10, 1, 59) + * ) + * //=> -1 + */ +function differenceInMinutes(dateLeft, dateRight, options) { + const diff = + (0, _index3.differenceInMilliseconds)(dateLeft, dateRight) / + _index2.millisecondsInMinute; + return (0, _index.getRoundingMethod)(options?.roundingMethod)(diff); +} + + +/***/ }), + +/***/ 2256: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.differenceInMonths = differenceInMonths; +var _index = __nccwpck_require__(2189); +var _index2 = __nccwpck_require__(9449); +var _index3 = __nccwpck_require__(8377); +var _index4 = __nccwpck_require__(4363); + +/** + * @name differenceInMonths + * @category Month Helpers + * @summary Get the number of full months between the given dates. + * + * @description + * Get the number of full months between the given dates using trunc as a default rounding method. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The later date + * @param dateRight - The earlier date + * + * @returns The number of full months * * @example - * // Convert the timestamp to date: - * const result = toDate(1392098430000) - * //=> Tue Feb 11 2014 11:30:30 + * // How many full months are between 31 January 2014 and 1 September 2014? + * const result = differenceInMonths(new Date(2014, 8, 1), new Date(2014, 0, 31)) + * //=> 7 */ -function toDate(argument) { - (0, _index.default)(1, arguments); - var argStr = Object.prototype.toString.call(argument); // Clone the date +function differenceInMonths(dateLeft, dateRight) { + const _dateLeft = (0, _index4.toDate)(dateLeft); + const _dateRight = (0, _index4.toDate)(dateRight); - if (argument instanceof Date || _typeof(argument) === 'object' && argStr === '[object Date]') { - // Prevent the date to lose the milliseconds when passed to new Date() in IE10 - return new Date(argument.getTime()); - } else if (typeof argument === 'number' || argStr === '[object Number]') { - return new Date(argument); + const sign = (0, _index.compareAsc)(_dateLeft, _dateRight); + const difference = Math.abs( + (0, _index2.differenceInCalendarMonths)(_dateLeft, _dateRight), + ); + let result; + + // Check for the difference of less than month + if (difference < 1) { + result = 0; } else { - if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') { - // eslint-disable-next-line no-console - console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments"); // eslint-disable-next-line no-console + if (_dateLeft.getMonth() === 1 && _dateLeft.getDate() > 27) { + // This will check if the date is end of Feb and assign a higher end of month date + // to compare it with Jan + _dateLeft.setDate(30); + } + + _dateLeft.setMonth(_dateLeft.getMonth() - sign * difference); - console.warn(new Error().stack); + // Math.abs(diff in full months - diff in calendar months) === 1 if last calendar month is not full + // If so, result must be decreased by 1 in absolute value + let isLastMonthNotFull = + (0, _index.compareAsc)(_dateLeft, _dateRight) === -sign; + + // Check for cases of one full calendar month + if ( + (0, _index3.isLastDayOfMonth)((0, _index4.toDate)(dateLeft)) && + difference === 1 && + (0, _index.compareAsc)(dateLeft, _dateRight) === 1 + ) { + isLastMonthNotFull = false; } - return new Date(NaN); + result = sign * (difference - Number(isLastMonthNotFull)); } + + // Prevent negative zero + return result === 0 ? 0 : result; } -module.exports = exports.default; /***/ }), -/***/ 4752: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 9498: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -var Stream = (__nccwpck_require__(2781).Stream); -var util = __nccwpck_require__(3837); +"use strict"; -module.exports = DelayedStream; -function DelayedStream() { - this.source = null; - this.dataSize = 0; - this.maxDataSize = 1024 * 1024; - this.pauseStream = true; +exports.differenceInQuarters = differenceInQuarters; +var _index = __nccwpck_require__(9253); +var _index2 = __nccwpck_require__(2256); - this._maxDataSizeExceeded = false; - this._released = false; - this._bufferedEvents = []; -} -util.inherits(DelayedStream, Stream); +/** + * The {@link differenceInQuarters} function options. + */ -DelayedStream.create = function(source, options) { - var delayedStream = new this(); +/** + * @name differenceInQuarters + * @category Quarter Helpers + * @summary Get the number of quarters between the given dates. + * + * @description + * Get the number of quarters between the given dates. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The later date + * @param dateRight - The earlier date + * @param options - An object with options. + * + * @returns The number of full quarters + * + * @example + * // How many full quarters are between 31 December 2013 and 2 July 2014? + * const result = differenceInQuarters(new Date(2014, 6, 2), new Date(2013, 11, 31)) + * //=> 2 + */ +function differenceInQuarters(dateLeft, dateRight, options) { + const diff = (0, _index2.differenceInMonths)(dateLeft, dateRight) / 3; + return (0, _index.getRoundingMethod)(options?.roundingMethod)(diff); +} - options = options || {}; - for (var option in options) { - delayedStream[option] = options[option]; - } - delayedStream.source = source; +/***/ }), - var realEmit = source.emit; - source.emit = function() { - delayedStream._handleEmit(arguments); - return realEmit.apply(source, arguments); - }; +/***/ 4146: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - source.on('error', function() {}); - if (delayedStream.pauseStream) { - source.pause(); - } +"use strict"; - return delayedStream; -}; +exports.differenceInSeconds = differenceInSeconds; +var _index = __nccwpck_require__(9253); +var _index2 = __nccwpck_require__(8632); -Object.defineProperty(DelayedStream.prototype, 'readable', { - configurable: true, - enumerable: true, - get: function() { - return this.source.readable; - } -}); +/** + * The {@link differenceInSeconds} function options. + */ -DelayedStream.prototype.setEncoding = function() { - return this.source.setEncoding.apply(this.source, arguments); -}; +/** + * @name differenceInSeconds + * @category Second Helpers + * @summary Get the number of seconds between the given dates. + * + * @description + * Get the number of seconds between the given dates. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The later date + * @param dateRight - The earlier date + * @param options - An object with options. + * + * @returns The number of seconds + * + * @example + * // How many seconds are between + * // 2 July 2014 12:30:07.999 and 2 July 2014 12:30:20.000? + * const result = differenceInSeconds( + * new Date(2014, 6, 2, 12, 30, 20, 0), + * new Date(2014, 6, 2, 12, 30, 7, 999) + * ) + * //=> 12 + */ +function differenceInSeconds(dateLeft, dateRight, options) { + const diff = + (0, _index2.differenceInMilliseconds)(dateLeft, dateRight) / 1000; + return (0, _index.getRoundingMethod)(options?.roundingMethod)(diff); +} -DelayedStream.prototype.resume = function() { - if (!this._released) { - this.release(); - } - this.source.resume(); -}; +/***/ }), -DelayedStream.prototype.pause = function() { - this.source.pause(); -}; +/***/ 2320: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -DelayedStream.prototype.release = function() { - this._released = true; +"use strict"; - this._bufferedEvents.forEach(function(args) { - this.emit.apply(this, args); - }.bind(this)); - this._bufferedEvents = []; -}; +exports.differenceInWeeks = differenceInWeeks; +var _index = __nccwpck_require__(9253); +var _index2 = __nccwpck_require__(7263); -DelayedStream.prototype.pipe = function() { - var r = Stream.prototype.pipe.apply(this, arguments); - this.resume(); - return r; -}; +/** + * The {@link differenceInWeeks} function options. + */ -DelayedStream.prototype._handleEmit = function(args) { - if (this._released) { - this.emit.apply(this, args); - return; - } +/** + * @name differenceInWeeks + * @category Week Helpers + * @summary Get the number of full weeks between the given dates. + * + * @description + * Get the number of full weeks between two dates. Fractional weeks are + * truncated towards zero by default. + * + * One "full week" is the distance between a local time in one day to the same + * local time 7 days earlier or later. A full week can sometimes be less than + * or more than 7*24 hours if a daylight savings change happens between two dates. + * + * To ignore DST and only measure exact 7*24-hour periods, use this instead: + * `Math.trunc(differenceInHours(dateLeft, dateRight)/(7*24))|0`. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The later date + * @param dateRight - The earlier date + * @param options - An object with options + * + * @returns The number of full weeks + * + * @example + * // How many full weeks are between 5 July 2014 and 20 July 2014? + * const result = differenceInWeeks(new Date(2014, 6, 20), new Date(2014, 6, 5)) + * //=> 2 + * + * @example + * // How many full weeks are between + * // 1 March 2020 0:00 and 6 June 2020 0:00 ? + * // Note: because local time is used, the + * // result will always be 8 weeks (54 days), + * // even if DST starts and the period has + * // only 54*24-1 hours. + * const result = differenceInWeeks( + * new Date(2020, 5, 1), + * new Date(2020, 2, 6) + * ) + * //=> 8 + */ +function differenceInWeeks(dateLeft, dateRight, options) { + const diff = (0, _index2.differenceInDays)(dateLeft, dateRight) / 7; + return (0, _index.getRoundingMethod)(options?.roundingMethod)(diff); +} - if (args[0] === 'data') { - this.dataSize += args[1].length; - this._checkIfMaxDataSizeExceeded(); - } - this._bufferedEvents.push(args); -}; +/***/ }), -DelayedStream.prototype._checkIfMaxDataSizeExceeded = function() { - if (this._maxDataSizeExceeded) { - return; - } +/***/ 2776: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - if (this.dataSize <= this.maxDataSize) { - return; - } +"use strict"; - this._maxDataSizeExceeded = true; - var message = - 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.' - this.emit('error', new Error(message)); -}; +exports.differenceInYears = differenceInYears; +var _index = __nccwpck_require__(2189); +var _index2 = __nccwpck_require__(8667); +var _index3 = __nccwpck_require__(4363); +/** + * @name differenceInYears + * @category Year Helpers + * @summary Get the number of full years between the given dates. + * + * @description + * Get the number of full years between the given dates. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The later date + * @param dateRight - The earlier date + * + * @returns The number of full years + * + * @example + * // How many full years are between 31 December 2013 and 11 February 2015? + * const result = differenceInYears(new Date(2015, 1, 11), new Date(2013, 11, 31)) + * //=> 1 + */ +function differenceInYears(dateLeft, dateRight) { + const _dateLeft = (0, _index3.toDate)(dateLeft); + const _dateRight = (0, _index3.toDate)(dateRight); -/***/ }), + const sign = (0, _index.compareAsc)(_dateLeft, _dateRight); + const difference = Math.abs( + (0, _index2.differenceInCalendarYears)(_dateLeft, _dateRight), + ); -/***/ 9373: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + // Set both dates to a valid leap year for accurate comparison when dealing + // with leap days + _dateLeft.setFullYear(1584); + _dateRight.setFullYear(1584); -var debug; + // Math.abs(diff in full years - diff in calendar years) === 1 if last calendar year is not full + // If so, result must be decreased by 1 in absolute value + const isLastYearNotFull = + (0, _index.compareAsc)(_dateLeft, _dateRight) === -sign; + const result = sign * (difference - +isLastYearNotFull); -module.exports = function () { - if (!debug) { - try { - /* eslint global-require: off */ - debug = __nccwpck_require__(7939)("follow-redirects"); - } - catch (error) { /* */ } - if (typeof debug !== "function") { - debug = function () { /* */ }; - } - } - debug.apply(null, arguments); -}; + // Prevent negative zero + return result === 0 ? 0 : result; +} /***/ }), -/***/ 1805: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 4003: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -var url = __nccwpck_require__(7310); -var URL = url.URL; -var http = __nccwpck_require__(3685); -var https = __nccwpck_require__(5687); -var Writable = (__nccwpck_require__(2781).Writable); -var assert = __nccwpck_require__(9491); -var debug = __nccwpck_require__(9373); +"use strict"; -// Create handlers that pass events from native requests -var events = ["abort", "aborted", "connect", "error", "socket", "timeout"]; -var eventHandlers = Object.create(null); -events.forEach(function (event) { - eventHandlers[event] = function (arg1, arg2, arg3) { - this._redirectable.emit(event, arg1, arg2, arg3); - }; -}); +exports.eachDayOfInterval = eachDayOfInterval; +var _index = __nccwpck_require__(4363); -var InvalidUrlError = createErrorType( - "ERR_INVALID_URL", - "Invalid URL", - TypeError -); -// Error types with codes -var RedirectionError = createErrorType( - "ERR_FR_REDIRECTION_FAILURE", - "Redirected request failed" -); -var TooManyRedirectsError = createErrorType( - "ERR_FR_TOO_MANY_REDIRECTS", - "Maximum number of redirects exceeded" -); -var MaxBodyLengthExceededError = createErrorType( - "ERR_FR_MAX_BODY_LENGTH_EXCEEDED", - "Request body larger than maxBodyLength limit" -); -var WriteAfterEndError = createErrorType( - "ERR_STREAM_WRITE_AFTER_END", - "write after end" -); +/** + * The {@link eachDayOfInterval} function options. + */ -// An HTTP(S) request that can be redirected -function RedirectableRequest(options, responseCallback) { - // Initialize the request - Writable.call(this); - this._sanitizeOptions(options); - this._options = options; - this._ended = false; - this._ending = false; - this._redirectCount = 0; - this._redirects = []; - this._requestBodyLength = 0; - this._requestBodyBuffers = []; +/** + * @name eachDayOfInterval + * @category Interval Helpers + * @summary Return the array of dates within the specified time interval. + * + * @description + * Return the array of dates within the specified time interval. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param interval - The interval. + * @param options - An object with options. + * + * @returns The array with starts of days from the day of the interval start to the day of the interval end + * + * @example + * // Each day between 6 October 2014 and 10 October 2014: + * const result = eachDayOfInterval({ + * start: new Date(2014, 9, 6), + * end: new Date(2014, 9, 10) + * }) + * //=> [ + * // Mon Oct 06 2014 00:00:00, + * // Tue Oct 07 2014 00:00:00, + * // Wed Oct 08 2014 00:00:00, + * // Thu Oct 09 2014 00:00:00, + * // Fri Oct 10 2014 00:00:00 + * // ] + */ +function eachDayOfInterval(interval, options) { + const startDate = (0, _index.toDate)(interval.start); + const endDate = (0, _index.toDate)(interval.end); - // Attach a callback if passed - if (responseCallback) { - this.on("response", responseCallback); + let reversed = +startDate > +endDate; + const endTime = reversed ? +startDate : +endDate; + const currentDate = reversed ? endDate : startDate; + currentDate.setHours(0, 0, 0, 0); + + let step = options?.step ?? 1; + if (!step) return []; + if (step < 0) { + step = -step; + reversed = !reversed; } - // React to responses of native requests - var self = this; - this._onNativeResponse = function (response) { - self._processResponse(response); - }; + const dates = []; - // Perform the first request - this._performRequest(); -} -RedirectableRequest.prototype = Object.create(Writable.prototype); + while (+currentDate <= endTime) { + dates.push((0, _index.toDate)(currentDate)); + currentDate.setDate(currentDate.getDate() + step); + currentDate.setHours(0, 0, 0, 0); + } -RedirectableRequest.prototype.abort = function () { - abortRequest(this._currentRequest); - this.emit("abort"); -}; + return reversed ? dates.reverse() : dates; +} -// Writes buffered data to the current native request -RedirectableRequest.prototype.write = function (data, encoding, callback) { - // Writing is not allowed if end has been called - if (this._ending) { - throw new WriteAfterEndError(); - } - // Validate input and shift parameters if necessary - if (!isString(data) && !isBuffer(data)) { - throw new TypeError("data should be a string, Buffer or Uint8Array"); - } - if (isFunction(encoding)) { - callback = encoding; - encoding = null; - } +/***/ }), - // Ignore empty buffers, since writing them doesn't invoke the callback - // https://github.com/nodejs/node/issues/22066 - if (data.length === 0) { - if (callback) { - callback(); - } - return; - } - // Only write when we don't exceed the maximum body length - if (this._requestBodyLength + data.length <= this._options.maxBodyLength) { - this._requestBodyLength += data.length; - this._requestBodyBuffers.push({ data: data, encoding: encoding }); - this._currentRequest.write(data, encoding, callback); - } - // Error when we exceed the maximum body length - else { - this.emit("error", new MaxBodyLengthExceededError()); - this.abort(); - } -}; +/***/ 6210: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -// Ends the current native request -RedirectableRequest.prototype.end = function (data, encoding, callback) { - // Shift parameters if necessary - if (isFunction(data)) { - callback = data; - data = encoding = null; - } - else if (isFunction(encoding)) { - callback = encoding; - encoding = null; - } +"use strict"; - // Write data if needed and end - if (!data) { - this._ended = this._ending = true; - this._currentRequest.end(null, null, callback); - } - else { - var self = this; - var currentRequest = this._currentRequest; - this.write(data, encoding, function () { - self._ended = true; - currentRequest.end(null, null, callback); - }); - this._ending = true; - } -}; +exports.eachHourOfInterval = eachHourOfInterval; +var _index = __nccwpck_require__(592); +var _index2 = __nccwpck_require__(4363); -// Sets a header value on the current native request -RedirectableRequest.prototype.setHeader = function (name, value) { - this._options.headers[name] = value; - this._currentRequest.setHeader(name, value); -}; +/** + * The {@link eachHourOfInterval} function options. + */ -// Clears a header value on the current native request -RedirectableRequest.prototype.removeHeader = function (name) { - delete this._options.headers[name]; - this._currentRequest.removeHeader(name); -}; +/** + * @name eachHourOfInterval + * @category Interval Helpers + * @summary Return the array of hours within the specified time interval. + * + * @description + * Return the array of hours within the specified time interval. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param interval - The interval. + * @param options - An object with options. + * + * @returns The array with starts of hours from the hour of the interval start to the hour of the interval end + * + * @example + * // Each hour between 6 October 2014, 12:00 and 6 October 2014, 15:00 + * const result = eachHourOfInterval({ + * start: new Date(2014, 9, 6, 12), + * end: new Date(2014, 9, 6, 15) + * }) + * //=> [ + * // Mon Oct 06 2014 12:00:00, + * // Mon Oct 06 2014 13:00:00, + * // Mon Oct 06 2014 14:00:00, + * // Mon Oct 06 2014 15:00:00 + * // ] + */ +function eachHourOfInterval(interval, options) { + const startDate = (0, _index2.toDate)(interval.start); + const endDate = (0, _index2.toDate)(interval.end); -// Global timeout for all underlying requests -RedirectableRequest.prototype.setTimeout = function (msecs, callback) { - var self = this; + let reversed = +startDate > +endDate; + const endTime = reversed ? +startDate : +endDate; + let currentDate = reversed ? endDate : startDate; + currentDate.setMinutes(0, 0, 0); - // Destroys the socket on timeout - function destroyOnTimeout(socket) { - socket.setTimeout(msecs); - socket.removeListener("timeout", socket.destroy); - socket.addListener("timeout", socket.destroy); + let step = options?.step ?? 1; + if (!step) return []; + if (step < 0) { + step = -step; + reversed = !reversed; } - // Sets up a timer to trigger a timeout event - function startTimer(socket) { - if (self._timeout) { - clearTimeout(self._timeout); - } - self._timeout = setTimeout(function () { - self.emit("timeout"); - clearTimer(); - }, msecs); - destroyOnTimeout(socket); + const dates = []; + + while (+currentDate <= endTime) { + dates.push((0, _index2.toDate)(currentDate)); + currentDate = (0, _index.addHours)(currentDate, step); } - // Stops a timeout from triggering - function clearTimer() { - // Clear the timeout - if (self._timeout) { - clearTimeout(self._timeout); - self._timeout = null; - } + return reversed ? dates.reverse() : dates; +} - // Clean up all attached listeners - self.removeListener("abort", clearTimer); - self.removeListener("error", clearTimer); - self.removeListener("response", clearTimer); - if (callback) { - self.removeListener("timeout", callback); - } - if (!self.socket) { - self._currentRequest.removeListener("socket", startTimer); - } - } - // Attach callback if passed - if (callback) { - this.on("timeout", callback); - } +/***/ }), - // Start the timer if or when the socket is opened - if (this.socket) { - startTimer(this.socket); - } - else { - this._currentRequest.once("socket", startTimer); - } +/***/ 3944: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - // Clean up on events - this.on("socket", destroyOnTimeout); - this.on("abort", clearTimer); - this.on("error", clearTimer); - this.on("response", clearTimer); +"use strict"; - return this; -}; +exports.eachMinuteOfInterval = eachMinuteOfInterval; +var _index = __nccwpck_require__(8158); +var _index2 = __nccwpck_require__(6921); +var _index3 = __nccwpck_require__(4363); -// Proxy all other public ClientRequest methods -[ - "flushHeaders", "getHeader", - "setNoDelay", "setSocketKeepAlive", -].forEach(function (method) { - RedirectableRequest.prototype[method] = function (a, b) { - return this._currentRequest[method](a, b); - }; -}); +/** + * The {@link eachMinuteOfInterval} function options. + */ -// Proxy all public ClientRequest properties -["aborted", "connection", "socket"].forEach(function (property) { - Object.defineProperty(RedirectableRequest.prototype, property, { - get: function () { return this._currentRequest[property]; }, - }); -}); +/** + * @name eachMinuteOfInterval + * @category Interval Helpers + * @summary Return the array of minutes within the specified time interval. + * + * @description + * Returns the array of minutes within the specified time interval. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param interval - The interval. + * @param options - An object with options. + * + * @returns The array with starts of minutes from the minute of the interval start to the minute of the interval end + * + * @example + * // Each minute between 14 October 2020, 13:00 and 14 October 2020, 13:03 + * const result = eachMinuteOfInterval({ + * start: new Date(2014, 9, 14, 13), + * end: new Date(2014, 9, 14, 13, 3) + * }) + * //=> [ + * // Wed Oct 14 2014 13:00:00, + * // Wed Oct 14 2014 13:01:00, + * // Wed Oct 14 2014 13:02:00, + * // Wed Oct 14 2014 13:03:00 + * // ] + */ +function eachMinuteOfInterval(interval, options) { + const startDate = (0, _index2.startOfMinute)( + (0, _index3.toDate)(interval.start), + ); + const endDate = (0, _index3.toDate)(interval.end); -RedirectableRequest.prototype._sanitizeOptions = function (options) { - // Ensure headers are always present - if (!options.headers) { - options.headers = {}; - } + let reversed = +startDate > +endDate; + const endTime = reversed ? +startDate : +endDate; + let currentDate = reversed ? endDate : startDate; - // Since http.request treats host as an alias of hostname, - // but the url module interprets host as hostname plus port, - // eliminate the host property to avoid confusion. - if (options.host) { - // Use hostname if set, because it has precedence - if (!options.hostname) { - options.hostname = options.host; - } - delete options.host; + let step = options?.step ?? 1; + if (!step) return []; + if (step < 0) { + step = -step; + reversed = !reversed; } - // Complete the URL object when necessary - if (!options.pathname && options.path) { - var searchPos = options.path.indexOf("?"); - if (searchPos < 0) { - options.pathname = options.path; - } - else { - options.pathname = options.path.substring(0, searchPos); - options.search = options.path.substring(searchPos); - } + const dates = []; + + while (+currentDate <= endTime) { + dates.push((0, _index3.toDate)(currentDate)); + currentDate = (0, _index.addMinutes)(currentDate, step); } -}; + return reversed ? dates.reverse() : dates; +} -// Executes the next native request (initial or redirect) -RedirectableRequest.prototype._performRequest = function () { - // Load the native protocol - var protocol = this._options.protocol; - var nativeProtocol = this._options.nativeProtocols[protocol]; - if (!nativeProtocol) { - this.emit("error", new TypeError("Unsupported protocol " + protocol)); - return; - } - // If specified, use the agent corresponding to the protocol - // (HTTP and HTTPS use different types of agents) - if (this._options.agents) { - var scheme = protocol.slice(0, -1); - this._options.agent = this._options.agents[scheme]; - } +/***/ }), - // Create the native request and set up its event handlers - var request = this._currentRequest = - nativeProtocol.request(this._options, this._onNativeResponse); - request._redirectable = this; - for (var event of events) { - request.on(event, eventHandlers[event]); - } +/***/ 9282: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - // RFC7230§5.3.1: When making a request directly to an origin server, […] - // a client MUST send only the absolute path […] as the request-target. - this._currentUrl = /^\//.test(this._options.path) ? - url.format(this._options) : - // When making a request to a proxy, […] - // a client MUST send the target URI in absolute-form […]. - this._options.path; +"use strict"; - // End a redirected request - // (The first request must be ended explicitly with RedirectableRequest#end) - if (this._isRedirect) { - // Write the request entity and end - var i = 0; - var self = this; - var buffers = this._requestBodyBuffers; - (function writeNext(error) { - // Only write if this request has not been redirected yet - /* istanbul ignore else */ - if (request === self._currentRequest) { - // Report any write errors - /* istanbul ignore if */ - if (error) { - self.emit("error", error); - } - // Write the next buffer if there are still left - else if (i < buffers.length) { - var buffer = buffers[i++]; - /* istanbul ignore else */ - if (!request.finished) { - request.write(buffer.data, buffer.encoding, writeNext); - } - } - // End the request if `end` has been called on us - else if (self._ended) { - request.end(); - } - } - }()); - } -}; +exports.eachMonthOfInterval = eachMonthOfInterval; +var _index = __nccwpck_require__(4363); -// Processes a response from the current native request -RedirectableRequest.prototype._processResponse = function (response) { - // Store the redirected response - var statusCode = response.statusCode; - if (this._options.trackRedirects) { - this._redirects.push({ - url: this._currentUrl, - headers: response.headers, - statusCode: statusCode, - }); - } +/** + * The {@link eachMonthOfInterval} function options. + */ - // RFC7231§6.4: The 3xx (Redirection) class of status code indicates - // that further action needs to be taken by the user agent in order to - // fulfill the request. If a Location header field is provided, - // the user agent MAY automatically redirect its request to the URI - // referenced by the Location field value, - // even if the specific status code is not understood. +/** + * @name eachMonthOfInterval + * @category Interval Helpers + * @summary Return the array of months within the specified time interval. + * + * @description + * Return the array of months within the specified time interval. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param interval - The interval + * + * @returns The array with starts of months from the month of the interval start to the month of the interval end + * + * @example + * // Each month between 6 February 2014 and 10 August 2014: + * const result = eachMonthOfInterval({ + * start: new Date(2014, 1, 6), + * end: new Date(2014, 7, 10) + * }) + * //=> [ + * // Sat Feb 01 2014 00:00:00, + * // Sat Mar 01 2014 00:00:00, + * // Tue Apr 01 2014 00:00:00, + * // Thu May 01 2014 00:00:00, + * // Sun Jun 01 2014 00:00:00, + * // Tue Jul 01 2014 00:00:00, + * // Fri Aug 01 2014 00:00:00 + * // ] + */ +function eachMonthOfInterval(interval, options) { + const startDate = (0, _index.toDate)(interval.start); + const endDate = (0, _index.toDate)(interval.end); - // If the response is not a redirect; return it as-is - var location = response.headers.location; - if (!location || this._options.followRedirects === false || - statusCode < 300 || statusCode >= 400) { - response.responseUrl = this._currentUrl; - response.redirects = this._redirects; - this.emit("response", response); + let reversed = +startDate > +endDate; + const endTime = reversed ? +startDate : +endDate; + const currentDate = reversed ? endDate : startDate; + currentDate.setHours(0, 0, 0, 0); + currentDate.setDate(1); - // Clean up - this._requestBodyBuffers = []; - return; + let step = options?.step ?? 1; + if (!step) return []; + if (step < 0) { + step = -step; + reversed = !reversed; } - // The response is a redirect, so abort the current request - abortRequest(this._currentRequest); - // Discard the remainder of the response to avoid waiting for data - response.destroy(); + const dates = []; - // RFC7231§6.4: A client SHOULD detect and intervene - // in cyclical redirections (i.e., "infinite" redirection loops). - if (++this._redirectCount > this._options.maxRedirects) { - this.emit("error", new TooManyRedirectsError()); - return; + while (+currentDate <= endTime) { + dates.push((0, _index.toDate)(currentDate)); + currentDate.setMonth(currentDate.getMonth() + step); } - // Store the request headers if applicable - var requestHeaders; - var beforeRedirect = this._options.beforeRedirect; - if (beforeRedirect) { - requestHeaders = Object.assign({ - // The Host header was set by nativeProtocol.request - Host: response.req.getHeader("host"), - }, this._options.headers); - } + return reversed ? dates.reverse() : dates; +} - // RFC7231§6.4: Automatic redirection needs to done with - // care for methods not known to be safe, […] - // RFC7231§6.4.2–3: For historical reasons, a user agent MAY change - // the request method from POST to GET for the subsequent request. - var method = this._options.method; - if ((statusCode === 301 || statusCode === 302) && this._options.method === "POST" || - // RFC7231§6.4.4: The 303 (See Other) status code indicates that - // the server is redirecting the user agent to a different resource […] - // A user agent can perform a retrieval request targeting that URI - // (a GET or HEAD request if using HTTP) […] - (statusCode === 303) && !/^(?:GET|HEAD)$/.test(this._options.method)) { - this._options.method = "GET"; - // Drop a possible entity and headers related to it - this._requestBodyBuffers = []; - removeMatchingHeaders(/^content-/i, this._options.headers); - } - // Drop the Host header, as the redirect might lead to a different host - var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers); +/***/ }), - // If the redirect is relative, carry over the host of the last request - var currentUrlParts = url.parse(this._currentUrl); - var currentHost = currentHostHeader || currentUrlParts.host; - var currentUrl = /^\w+:/.test(location) ? this._currentUrl : - url.format(Object.assign(currentUrlParts, { host: currentHost })); +/***/ 7094: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - // Determine the URL of the redirection - var redirectUrl; - try { - redirectUrl = url.resolve(currentUrl, location); - } - catch (cause) { - this.emit("error", new RedirectionError({ cause: cause })); - return; - } +"use strict"; - // Create the redirected request - debug("redirecting to", redirectUrl); - this._isRedirect = true; - var redirectUrlParts = url.parse(redirectUrl); - Object.assign(this._options, redirectUrlParts); +exports.eachQuarterOfInterval = eachQuarterOfInterval; +var _index = __nccwpck_require__(314); +var _index2 = __nccwpck_require__(7947); +var _index3 = __nccwpck_require__(4363); - // Drop confidential headers when redirecting to a less secure protocol - // or to a different domain that is not a superdomain - if (redirectUrlParts.protocol !== currentUrlParts.protocol && - redirectUrlParts.protocol !== "https:" || - redirectUrlParts.host !== currentHost && - !isSubdomain(redirectUrlParts.host, currentHost)) { - removeMatchingHeaders(/^(?:authorization|cookie)$/i, this._options.headers); - } +/** + * The {@link eachQuarterOfInterval} function options. + */ - // Evaluate the beforeRedirect callback - if (isFunction(beforeRedirect)) { - var responseDetails = { - headers: response.headers, - statusCode: statusCode, - }; - var requestDetails = { - url: currentUrl, - method: method, - headers: requestHeaders, - }; - try { - beforeRedirect(this._options, responseDetails, requestDetails); - } - catch (err) { - this.emit("error", err); - return; - } - this._sanitizeOptions(this._options); - } +/** + * @name eachQuarterOfInterval + * @category Interval Helpers + * @summary Return the array of quarters within the specified time interval. + * + * @description + * Return the array of quarters within the specified time interval. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param interval - The interval + * + * @returns The array with starts of quarters from the quarter of the interval start to the quarter of the interval end + * + * @example + * // Each quarter within interval 6 February 2014 - 10 August 2014: + * const result = eachQuarterOfInterval({ + * start: new Date(2014, 1, 6), + * end: new Date(2014, 7, 10) + * }) + * //=> [ + * // Wed Jan 01 2014 00:00:00, + * // Tue Apr 01 2014 00:00:00, + * // Tue Jul 01 2014 00:00:00, + * // ] + */ +function eachQuarterOfInterval(interval, options) { + const startDate = (0, _index3.toDate)(interval.start); + const endDate = (0, _index3.toDate)(interval.end); - // Perform the redirected request - try { - this._performRequest(); + let reversed = +startDate > +endDate; + const endTime = reversed + ? +(0, _index2.startOfQuarter)(startDate) + : +(0, _index2.startOfQuarter)(endDate); + let currentDate = reversed + ? (0, _index2.startOfQuarter)(endDate) + : (0, _index2.startOfQuarter)(startDate); + + let step = options?.step ?? 1; + if (!step) return []; + if (step < 0) { + step = -step; + reversed = !reversed; } - catch (cause) { - this.emit("error", new RedirectionError({ cause: cause })); + + const dates = []; + + while (+currentDate <= endTime) { + dates.push((0, _index3.toDate)(currentDate)); + currentDate = (0, _index.addQuarters)(currentDate, step); } -}; -// Wraps the key/value object of protocols with redirect functionality -function wrap(protocols) { - // Default settings - var exports = { - maxRedirects: 21, - maxBodyLength: 10 * 1024 * 1024, - }; + return reversed ? dates.reverse() : dates; +} - // Wrap each protocol - var nativeProtocols = {}; - Object.keys(protocols).forEach(function (scheme) { - var protocol = scheme + ":"; - var nativeProtocol = nativeProtocols[protocol] = protocols[scheme]; - var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol); - // Executes a request, following redirects - function request(input, options, callback) { - // Parse parameters - if (isString(input)) { - var parsed; - try { - parsed = urlToOptions(new URL(input)); - } - catch (err) { - /* istanbul ignore next */ - parsed = url.parse(input); - } - if (!isString(parsed.protocol)) { - throw new InvalidUrlError({ input }); - } - input = parsed; - } - else if (URL && (input instanceof URL)) { - input = urlToOptions(input); - } - else { - callback = options; - options = input; - input = { protocol: protocol }; - } - if (isFunction(options)) { - callback = options; - options = null; - } +/***/ }), - // Set defaults - options = Object.assign({ - maxRedirects: exports.maxRedirects, - maxBodyLength: exports.maxBodyLength, - }, input, options); - options.nativeProtocols = nativeProtocols; - if (!isString(options.host) && !isString(options.hostname)) { - options.hostname = "::1"; - } +/***/ 8334: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - assert.equal(options.protocol, protocol, "protocol mismatch"); - debug("options", options); - return new RedirectableRequest(options, callback); - } +"use strict"; - // Executes a GET request, following redirects - function get(input, options, callback) { - var wrappedRequest = wrappedProtocol.request(input, options, callback); - wrappedRequest.end(); - return wrappedRequest; - } +exports.eachWeekOfInterval = eachWeekOfInterval; +var _index = __nccwpck_require__(6178); +var _index2 = __nccwpck_require__(7421); +var _index3 = __nccwpck_require__(4363); - // Expose the properties on the wrapped protocol - Object.defineProperties(wrappedProtocol, { - request: { value: request, configurable: true, enumerable: true, writable: true }, - get: { value: get, configurable: true, enumerable: true, writable: true }, - }); - }); - return exports; -} +/** + * The {@link eachWeekOfInterval} function options. + */ -/* istanbul ignore next */ -function noop() { /* empty */ } +/** + * @name eachWeekOfInterval + * @category Interval Helpers + * @summary Return the array of weeks within the specified time interval. + * + * @description + * Return the array of weeks within the specified time interval. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param interval - The interval. + * @param options - An object with options. + * + * @returns The array with starts of weeks from the week of the interval start to the week of the interval end + * + * @example + * // Each week within interval 6 October 2014 - 23 November 2014: + * const result = eachWeekOfInterval({ + * start: new Date(2014, 9, 6), + * end: new Date(2014, 10, 23) + * }) + * //=> [ + * // Sun Oct 05 2014 00:00:00, + * // Sun Oct 12 2014 00:00:00, + * // Sun Oct 19 2014 00:00:00, + * // Sun Oct 26 2014 00:00:00, + * // Sun Nov 02 2014 00:00:00, + * // Sun Nov 09 2014 00:00:00, + * // Sun Nov 16 2014 00:00:00, + * // Sun Nov 23 2014 00:00:00 + * // ] + */ +function eachWeekOfInterval(interval, options) { + const startDate = (0, _index3.toDate)(interval.start); + const endDate = (0, _index3.toDate)(interval.end); -// from https://github.com/nodejs/node/blob/master/lib/internal/url.js -function urlToOptions(urlObject) { - var options = { - protocol: urlObject.protocol, - hostname: urlObject.hostname.startsWith("[") ? - /* istanbul ignore next */ - urlObject.hostname.slice(1, -1) : - urlObject.hostname, - hash: urlObject.hash, - search: urlObject.search, - pathname: urlObject.pathname, - path: urlObject.pathname + urlObject.search, - href: urlObject.href, - }; - if (urlObject.port !== "") { - options.port = Number(urlObject.port); - } - return options; -} + let reversed = +startDate > +endDate; + const startDateWeek = reversed + ? (0, _index2.startOfWeek)(endDate, options) + : (0, _index2.startOfWeek)(startDate, options); + const endDateWeek = reversed + ? (0, _index2.startOfWeek)(startDate, options) + : (0, _index2.startOfWeek)(endDate, options); -function removeMatchingHeaders(regex, headers) { - var lastValue; - for (var header in headers) { - if (regex.test(header)) { - lastValue = headers[header]; - delete headers[header]; - } - } - return (lastValue === null || typeof lastValue === "undefined") ? - undefined : String(lastValue).trim(); -} + // Some timezones switch DST at midnight, making start of day unreliable in these timezones, 3pm is a safe bet + startDateWeek.setHours(15); + endDateWeek.setHours(15); -function createErrorType(code, message, baseClass) { - // Create constructor - function CustomError(properties) { - Error.captureStackTrace(this, this.constructor); - Object.assign(this, properties || {}); - this.code = code; - this.message = this.cause ? message + ": " + this.cause.message : message; + const endTime = +endDateWeek.getTime(); + let currentDate = startDateWeek; + + let step = options?.step ?? 1; + if (!step) return []; + if (step < 0) { + step = -step; + reversed = !reversed; } - // Attach constructor and set default properties - CustomError.prototype = new (baseClass || Error)(); - CustomError.prototype.constructor = CustomError; - CustomError.prototype.name = "Error [" + code + "]"; - return CustomError; -} + const dates = []; -function abortRequest(request) { - for (var event of events) { - request.removeListener(event, eventHandlers[event]); + while (+currentDate <= endTime) { + currentDate.setHours(0); + dates.push((0, _index3.toDate)(currentDate)); + currentDate = (0, _index.addWeeks)(currentDate, step); + currentDate.setHours(15); } - request.on("error", noop); - request.abort(); -} -function isSubdomain(subdomain, domain) { - assert(isString(subdomain) && isString(domain)); - var dot = subdomain.length - domain.length - 1; - return dot > 0 && subdomain[dot] === "." && subdomain.endsWith(domain); + return reversed ? dates.reverse() : dates; } -function isString(value) { - return typeof value === "string" || value instanceof String; -} -function isFunction(value) { - return typeof value === "function"; -} +/***/ }), -function isBuffer(value) { - return typeof value === "object" && ("length" in value); -} +/***/ 8409: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -// Exports -module.exports = wrap({ http: http, https: https }); -module.exports.wrap = wrap; +"use strict"; +exports.eachWeekendOfInterval = eachWeekendOfInterval; +var _index = __nccwpck_require__(4003); +var _index2 = __nccwpck_require__(2989); -/***/ }), +/** + * @name eachWeekendOfInterval + * @category Interval Helpers + * @summary List all the Saturdays and Sundays in the given date interval. + * + * @description + * Get all the Saturdays and Sundays in the given date interval. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param interval - The given interval + * + * @returns An array containing all the Saturdays and Sundays + * + * @example + * // Lists all Saturdays and Sundays in the given date interval + * const result = eachWeekendOfInterval({ + * start: new Date(2018, 8, 17), + * end: new Date(2018, 8, 30) + * }) + * //=> [ + * // Sat Sep 22 2018 00:00:00, + * // Sun Sep 23 2018 00:00:00, + * // Sat Sep 29 2018 00:00:00, + * // Sun Sep 30 2018 00:00:00 + * // ] + */ +function eachWeekendOfInterval(interval) { + const dateInterval = (0, _index.eachDayOfInterval)(interval); + const weekends = []; + let index = 0; + while (index < dateInterval.length) { + const date = dateInterval[index++]; + if ((0, _index2.isWeekend)(date)) weekends.push(date); + } + return weekends; +} -/***/ 6872: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -var CombinedStream = __nccwpck_require__(5127); -var util = __nccwpck_require__(3837); -var path = __nccwpck_require__(1017); -var http = __nccwpck_require__(3685); -var https = __nccwpck_require__(5687); -var parseUrl = (__nccwpck_require__(7310).parse); -var fs = __nccwpck_require__(7147); -var Stream = (__nccwpck_require__(2781).Stream); -var mime = __nccwpck_require__(8254); -var asynckit = __nccwpck_require__(9633); -var populate = __nccwpck_require__(5630); +/***/ }), -// Public API -module.exports = FormData; +/***/ 4094: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -// make it a Stream -util.inherits(FormData, CombinedStream); +"use strict"; + +exports.eachWeekendOfMonth = eachWeekendOfMonth; +var _index = __nccwpck_require__(8409); +var _index2 = __nccwpck_require__(4810); +var _index3 = __nccwpck_require__(785); /** - * Create readable "multipart/form-data" streams. - * Can be used to submit forms - * and file uploads to other web applications. + * @name eachWeekendOfMonth + * @category Month Helpers + * @summary List all the Saturdays and Sundays in the given month. * - * @constructor - * @param {Object} options - Properties to be added/overriden for FormData and CombinedStream + * @description + * Get all the Saturdays and Sundays in the given month. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The given month + * + * @returns An array containing all the Saturdays and Sundays + * + * @example + * // Lists all Saturdays and Sundays in the given month + * const result = eachWeekendOfMonth(new Date(2022, 1, 1)) + * //=> [ + * // Sat Feb 05 2022 00:00:00, + * // Sun Feb 06 2022 00:00:00, + * // Sat Feb 12 2022 00:00:00, + * // Sun Feb 13 2022 00:00:00, + * // Sat Feb 19 2022 00:00:00, + * // Sun Feb 20 2022 00:00:00, + * // Sat Feb 26 2022 00:00:00, + * // Sun Feb 27 2022 00:00:00 + * // ] */ -function FormData(options) { - if (!(this instanceof FormData)) { - return new FormData(options); - } +function eachWeekendOfMonth(date) { + const start = (0, _index3.startOfMonth)(date); + const end = (0, _index2.endOfMonth)(date); + return (0, _index.eachWeekendOfInterval)({ start, end }); +} - this._overheadLength = 0; - this._valueLength = 0; - this._valuesToMeasure = []; - CombinedStream.call(this); +/***/ }), - options = options || {}; - for (var option in options) { - this[option] = options[option]; - } -} +/***/ 5622: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -FormData.LINE_BREAK = '\r\n'; -FormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream'; +"use strict"; -FormData.prototype.append = function(field, value, options) { +exports.eachWeekendOfYear = eachWeekendOfYear; +var _index = __nccwpck_require__(8409); +var _index2 = __nccwpck_require__(8126); +var _index3 = __nccwpck_require__(3346); - options = options || {}; +/** + * @name eachWeekendOfYear + * @category Year Helpers + * @summary List all the Saturdays and Sundays in the year. + * + * @description + * Get all the Saturdays and Sundays in the year. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The given year + * + * @returns An array containing all the Saturdays and Sundays + * + * @example + * // Lists all Saturdays and Sundays in the year + * const result = eachWeekendOfYear(new Date(2020, 1, 1)) + * //=> [ + * // Sat Jan 03 2020 00:00:00, + * // Sun Jan 04 2020 00:00:00, + * // ... + * // Sun Dec 27 2020 00:00:00 + * // ] + * ] + */ +function eachWeekendOfYear(date) { + const start = (0, _index3.startOfYear)(date); + const end = (0, _index2.endOfYear)(date); + return (0, _index.eachWeekendOfInterval)({ start, end }); +} - // allow filename as single option - if (typeof options == 'string') { - options = {filename: options}; - } - var append = CombinedStream.prototype.append.bind(this); +/***/ }), - // all that streamy business can't handle numbers - if (typeof value == 'number') { - value = '' + value; - } +/***/ 3700: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - // https://github.com/felixge/node-form-data/issues/38 - if (util.isArray(value)) { - // Please convert your array into string - // the way web server expects it - this._error(new Error('Arrays are not supported.')); - return; - } +"use strict"; - var header = this._multiPartHeader(field, value, options); - var footer = this._multiPartFooter(); +exports.eachYearOfInterval = eachYearOfInterval; +var _index = __nccwpck_require__(4363); - append(header); - append(value); - append(footer); +/** + * The {@link eachYearOfInterval} function options. + */ - // pass along options.knownLength - this._trackLength(header, value, options); -}; +/** + * @name eachYearOfInterval + * @category Interval Helpers + * @summary Return the array of yearly timestamps within the specified time interval. + * + * @description + * Return the array of yearly timestamps within the specified time interval. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param interval - The interval. + * + * @returns The array with starts of yearly timestamps from the month of the interval start to the month of the interval end + * + * @example + * // Each year between 6 February 2014 and 10 August 2017: + * const result = eachYearOfInterval({ + * start: new Date(2014, 1, 6), + * end: new Date(2017, 7, 10) + * }) + * //=> [ + * // Wed Jan 01 2014 00:00:00, + * // Thu Jan 01 2015 00:00:00, + * // Fri Jan 01 2016 00:00:00, + * // Sun Jan 01 2017 00:00:00 + * // ] + */ +function eachYearOfInterval(interval, options) { + const startDate = (0, _index.toDate)(interval.start); + const endDate = (0, _index.toDate)(interval.end); -FormData.prototype._trackLength = function(header, value, options) { - var valueLength = 0; + let reversed = +startDate > +endDate; + const endTime = reversed ? +startDate : +endDate; + const currentDate = reversed ? endDate : startDate; + currentDate.setHours(0, 0, 0, 0); + currentDate.setMonth(0, 1); - // used w/ getLengthSync(), when length is known. - // e.g. for streaming directly from a remote server, - // w/ a known file a size, and not wanting to wait for - // incoming file to finish to get its size. - if (options.knownLength != null) { - valueLength += +options.knownLength; - } else if (Buffer.isBuffer(value)) { - valueLength = value.length; - } else if (typeof value === 'string') { - valueLength = Buffer.byteLength(value); + let step = options?.step ?? 1; + if (!step) return []; + if (step < 0) { + step = -step; + reversed = !reversed; } - this._valueLength += valueLength; - - // @check why add CRLF? does this account for custom/multiple CRLFs? - this._overheadLength += - Buffer.byteLength(header) + - FormData.LINE_BREAK.length; + const dates = []; - // empty or either doesn't have path or not an http response or not a stream - if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) && !(value instanceof Stream))) { - return; + while (+currentDate <= endTime) { + dates.push((0, _index.toDate)(currentDate)); + currentDate.setFullYear(currentDate.getFullYear() + step); } - // no need to bother with the length - if (!options.knownLength) { - this._valuesToMeasure.push(value); - } -}; + return reversed ? dates.reverse() : dates; +} -FormData.prototype._lengthRetriever = function(value, callback) { - if (value.hasOwnProperty('fd')) { +/***/ }), - // take read range into a account - // `end` = Infinity –> read file till the end - // - // TODO: Looks like there is bug in Node fs.createReadStream - // it doesn't respect `end` options without `start` options - // Fix it when node fixes it. - // https://github.com/joyent/node/issues/7819 - if (value.end != undefined && value.end != Infinity && value.start != undefined) { +/***/ 4821: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - // when end specified - // no need to calculate range - // inclusive, starts with 0 - callback(null, value.end + 1 - (value.start ? value.start : 0)); +"use strict"; - // not that fast snoopy - } else { - // still need to fetch file size from fs - fs.stat(value.path, function(err, stat) { +exports.endOfDay = endOfDay; +var _index = __nccwpck_require__(4363); - var fileSize; +/** + * @name endOfDay + * @category Day Helpers + * @summary Return the end of a day for the given date. + * + * @description + * Return the end of a day for the given date. + * The result will be in the local timezone. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * + * @returns The end of a day + * + * @example + * // The end of a day for 2 September 2014 11:55:00: + * const result = endOfDay(new Date(2014, 8, 2, 11, 55, 0)) + * //=> Tue Sep 02 2014 23:59:59.999 + */ +function endOfDay(date) { + const _date = (0, _index.toDate)(date); + _date.setHours(23, 59, 59, 999); + return _date; +} - if (err) { - callback(err); - return; - } - // update final size based on the range options - fileSize = stat.size - (value.start ? value.start : 0); - callback(null, fileSize); - }); - } +/***/ }), - // or http response - } else if (value.hasOwnProperty('httpVersion')) { - callback(null, +value.headers['content-length']); +/***/ 7027: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - // or request stream http://github.com/mikeal/request - } else if (value.hasOwnProperty('httpModule')) { - // wait till response come back - value.on('response', function(response) { - value.pause(); - callback(null, +response.headers['content-length']); - }); - value.resume(); +"use strict"; - // something else - } else { - callback('Unknown stream'); - } -}; +exports.endOfDecade = endOfDecade; +var _index = __nccwpck_require__(4363); -FormData.prototype._multiPartHeader = function(field, value, options) { - // custom header specified (as string)? - // it becomes responsible for boundary - // (e.g. to handle extra CRLFs on .NET servers) - if (typeof options.header == 'string') { - return options.header; - } +/** + * @name endOfDecade + * @category Decade Helpers + * @summary Return the end of a decade for the given date. + * + * @description + * Return the end of a decade for the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * + * @returns The end of a decade + * + * @example + * // The end of a decade for 12 May 1984 00:00:00: + * const result = endOfDecade(new Date(1984, 4, 12, 00, 00, 00)) + * //=> Dec 31 1989 23:59:59.999 + */ +function endOfDecade(date) { + // TODO: Switch to more technical definition in of decades that start with 1 + // end with 0. I.e. 2001-2010 instead of current 2000-2009. It's a breaking + // change, so it can only be done in 4.0. + const _date = (0, _index.toDate)(date); + const year = _date.getFullYear(); + const decade = 9 + Math.floor(year / 10) * 10; + _date.setFullYear(decade, 11, 31); + _date.setHours(23, 59, 59, 999); + return _date; +} - var contentDisposition = this._getContentDisposition(value, options); - var contentType = this._getContentType(value, options); - var contents = ''; - var headers = { - // add custom disposition as third element or keep it two elements if not - 'Content-Disposition': ['form-data', 'name="' + field + '"'].concat(contentDisposition || []), - // if no content type. allow it to be empty array - 'Content-Type': [].concat(contentType || []) - }; +/***/ }), - // allow custom headers. - if (typeof options.header == 'object') { - populate(headers, options.header); - } +/***/ 4725: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - var header; - for (var prop in headers) { - if (!headers.hasOwnProperty(prop)) continue; - header = headers[prop]; - - // skip nullish headers. - if (header == null) { - continue; - } - - // convert all headers to arrays. - if (!Array.isArray(header)) { - header = [header]; - } - - // add non-empty headers. - if (header.length) { - contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK; - } - } - - return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK; -}; - -FormData.prototype._getContentDisposition = function(value, options) { +"use strict"; - var filename - , contentDisposition - ; +exports.endOfHour = endOfHour; +var _index = __nccwpck_require__(4363); - if (typeof options.filepath === 'string') { - // custom filepath for relative paths - filename = path.normalize(options.filepath).replace(/\\/g, '/'); - } else if (options.filename || value.name || value.path) { - // custom filename take precedence - // formidable and the browser add a name property - // fs- and request- streams have path property - filename = path.basename(options.filename || value.name || value.path); - } else if (value.readable && value.hasOwnProperty('httpVersion')) { - // or try http response - filename = path.basename(value.client._httpMessage.path || ''); - } +/** + * @name endOfHour + * @category Hour Helpers + * @summary Return the end of an hour for the given date. + * + * @description + * Return the end of an hour for the given date. + * The result will be in the local timezone. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * + * @returns The end of an hour + * + * @example + * // The end of an hour for 2 September 2014 11:55:00: + * const result = endOfHour(new Date(2014, 8, 2, 11, 55)) + * //=> Tue Sep 02 2014 11:59:59.999 + */ +function endOfHour(date) { + const _date = (0, _index.toDate)(date); + _date.setMinutes(59, 59, 999); + return _date; +} - if (filename) { - contentDisposition = 'filename="' + filename + '"'; - } - return contentDisposition; -}; +/***/ }), -FormData.prototype._getContentType = function(value, options) { +/***/ 2290: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - // use custom content-type above all - var contentType = options.contentType; +"use strict"; - // or try `name` from formidable, browser - if (!contentType && value.name) { - contentType = mime.lookup(value.name); - } +exports.endOfISOWeek = endOfISOWeek; +var _index = __nccwpck_require__(2974); - // or try `path` from fs-, request- streams - if (!contentType && value.path) { - contentType = mime.lookup(value.path); - } +/** + * @name endOfISOWeek + * @category ISO Week Helpers + * @summary Return the end of an ISO week for the given date. + * + * @description + * Return the end of an ISO week for the given date. + * The result will be in the local timezone. + * + * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * + * @returns The end of an ISO week + * + * @example + * // The end of an ISO week for 2 September 2014 11:55:00: + * const result = endOfISOWeek(new Date(2014, 8, 2, 11, 55, 0)) + * //=> Sun Sep 07 2014 23:59:59.999 + */ +function endOfISOWeek(date) { + return (0, _index.endOfWeek)(date, { weekStartsOn: 1 }); +} - // or if it's http-reponse - if (!contentType && value.readable && value.hasOwnProperty('httpVersion')) { - contentType = value.headers['content-type']; - } - // or guess it from the filepath or filename - if (!contentType && (options.filepath || options.filename)) { - contentType = mime.lookup(options.filepath || options.filename); - } +/***/ }), - // fallback to the default content type if `value` is not simple value - if (!contentType && typeof value == 'object') { - contentType = FormData.DEFAULT_CONTENT_TYPE; - } +/***/ 4588: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - return contentType; -}; +"use strict"; -FormData.prototype._multiPartFooter = function() { - return function(next) { - var footer = FormData.LINE_BREAK; +exports.endOfISOWeekYear = endOfISOWeekYear; +var _index = __nccwpck_require__(7569); +var _index2 = __nccwpck_require__(1573); +var _index3 = __nccwpck_require__(2524); - var lastPart = (this._streams.length === 0); - if (lastPart) { - footer += this._lastBoundary(); - } +/** + * @name endOfISOWeekYear + * @category ISO Week-Numbering Year Helpers + * @summary Return the end of an ISO week-numbering year for the given date. + * + * @description + * Return the end of an ISO week-numbering year, + * which always starts 3 days before the year's first Thursday. + * The result will be in the local timezone. + * + * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * + * @returns The end of an ISO week-numbering year + * + * @example + * // The end of an ISO week-numbering year for 2 July 2005: + * const result = endOfISOWeekYear(new Date(2005, 6, 2)) + * //=> Sun Jan 01 2006 23:59:59.999 + */ +function endOfISOWeekYear(date) { + const year = (0, _index.getISOWeekYear)(date); + const fourthOfJanuaryOfNextYear = (0, _index3.constructFrom)(date, 0); + fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4); + fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0); + const _date = (0, _index2.startOfISOWeek)(fourthOfJanuaryOfNextYear); + _date.setMilliseconds(_date.getMilliseconds() - 1); + return _date; +} - next(footer); - }.bind(this); -}; -FormData.prototype._lastBoundary = function() { - return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK; -}; +/***/ }), -FormData.prototype.getHeaders = function(userHeaders) { - var header; - var formHeaders = { - 'content-type': 'multipart/form-data; boundary=' + this.getBoundary() - }; +/***/ 1328: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - for (header in userHeaders) { - if (userHeaders.hasOwnProperty(header)) { - formHeaders[header.toLowerCase()] = userHeaders[header]; - } - } +"use strict"; - return formHeaders; -}; +exports.endOfMinute = endOfMinute; +var _index = __nccwpck_require__(4363); -FormData.prototype.setBoundary = function(boundary) { - this._boundary = boundary; -}; +/** + * @name endOfMinute + * @category Minute Helpers + * @summary Return the end of a minute for the given date. + * + * @description + * Return the end of a minute for the given date. + * The result will be in the local timezone. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * + * @returns The end of a minute + * + * @example + * // The end of a minute for 1 December 2014 22:15:45.400: + * const result = endOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400)) + * //=> Mon Dec 01 2014 22:15:59.999 + */ +function endOfMinute(date) { + const _date = (0, _index.toDate)(date); + _date.setSeconds(59, 999); + return _date; +} -FormData.prototype.getBoundary = function() { - if (!this._boundary) { - this._generateBoundary(); - } - return this._boundary; -}; +/***/ }), -FormData.prototype.getBuffer = function() { - var dataBuffer = new Buffer.alloc( 0 ); - var boundary = this.getBoundary(); +/***/ 4810: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - // Create the form content. Add Line breaks to the end of data. - for (var i = 0, len = this._streams.length; i < len; i++) { - if (typeof this._streams[i] !== 'function') { +"use strict"; - // Add content to the buffer. - if(Buffer.isBuffer(this._streams[i])) { - dataBuffer = Buffer.concat( [dataBuffer, this._streams[i]]); - }else { - dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(this._streams[i])]); - } +exports.endOfMonth = endOfMonth; +var _index = __nccwpck_require__(4363); - // Add break after content. - if (typeof this._streams[i] !== 'string' || this._streams[i].substring( 2, boundary.length + 2 ) !== boundary) { - dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(FormData.LINE_BREAK)] ); - } - } - } +/** + * @name endOfMonth + * @category Month Helpers + * @summary Return the end of a month for the given date. + * + * @description + * Return the end of a month for the given date. + * The result will be in the local timezone. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * + * @returns The end of a month + * + * @example + * // The end of a month for 2 September 2014 11:55:00: + * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0)) + * //=> Tue Sep 30 2014 23:59:59.999 + */ +function endOfMonth(date) { + const _date = (0, _index.toDate)(date); + const month = _date.getMonth(); + _date.setFullYear(_date.getFullYear(), month + 1, 0); + _date.setHours(23, 59, 59, 999); + return _date; +} - // Add the footer and return the Buffer object. - return Buffer.concat( [dataBuffer, Buffer.from(this._lastBoundary())] ); -}; -FormData.prototype._generateBoundary = function() { - // This generates a 50 character boundary similar to those used by Firefox. - // They are optimized for boyer-moore parsing. - var boundary = '--------------------------'; - for (var i = 0; i < 24; i++) { - boundary += Math.floor(Math.random() * 10).toString(16); - } +/***/ }), - this._boundary = boundary; -}; +/***/ 1561: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -// Note: getLengthSync DOESN'T calculate streams length -// As workaround one can calculate file size manually -// and add it as knownLength option -FormData.prototype.getLengthSync = function() { - var knownLength = this._overheadLength + this._valueLength; +"use strict"; - // Don't get confused, there are 3 "internal" streams for each keyval pair - // so it basically checks if there is any value added to the form - if (this._streams.length) { - knownLength += this._lastBoundary().length; - } +exports.endOfQuarter = endOfQuarter; +var _index = __nccwpck_require__(4363); - // https://github.com/form-data/form-data/issues/40 - if (!this.hasKnownLength()) { - // Some async length retrievers are present - // therefore synchronous length calculation is false. - // Please use getLength(callback) to get proper length - this._error(new Error('Cannot calculate proper length in synchronous way.')); - } +/** + * @name endOfQuarter + * @category Quarter Helpers + * @summary Return the end of a year quarter for the given date. + * + * @description + * Return the end of a year quarter for the given date. + * The result will be in the local timezone. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * + * @returns The end of a quarter + * + * @example + * // The end of a quarter for 2 September 2014 11:55:00: + * const result = endOfQuarter(new Date(2014, 8, 2, 11, 55, 0)) + * //=> Tue Sep 30 2014 23:59:59.999 + */ +function endOfQuarter(date) { + const _date = (0, _index.toDate)(date); + const currentMonth = _date.getMonth(); + const month = currentMonth - (currentMonth % 3) + 3; + _date.setMonth(month, 0); + _date.setHours(23, 59, 59, 999); + return _date; +} - return knownLength; -}; -// Public API to check if length of added values is known -// https://github.com/form-data/form-data/issues/196 -// https://github.com/form-data/form-data/issues/262 -FormData.prototype.hasKnownLength = function() { - var hasKnownLength = true; +/***/ }), - if (this._valuesToMeasure.length) { - hasKnownLength = false; - } +/***/ 9655: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - return hasKnownLength; -}; +"use strict"; -FormData.prototype.getLength = function(cb) { - var knownLength = this._overheadLength + this._valueLength; +exports.endOfSecond = endOfSecond; +var _index = __nccwpck_require__(4363); - if (this._streams.length) { - knownLength += this._lastBoundary().length; - } +/** + * @name endOfSecond + * @category Second Helpers + * @summary Return the end of a second for the given date. + * + * @description + * Return the end of a second for the given date. + * The result will be in the local timezone. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * + * @returns The end of a second + * + * @example + * // The end of a second for 1 December 2014 22:15:45.400: + * const result = endOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400)) + * //=> Mon Dec 01 2014 22:15:45.999 + */ +function endOfSecond(date) { + const _date = (0, _index.toDate)(date); + _date.setMilliseconds(999); + return _date; +} - if (!this._valuesToMeasure.length) { - process.nextTick(cb.bind(this, null, knownLength)); - return; - } - asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) { - if (err) { - cb(err); - return; - } +/***/ }), - values.forEach(function(length) { - knownLength += length; - }); +/***/ 7980: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - cb(null, knownLength); - }); -}; +"use strict"; -FormData.prototype.submit = function(params, cb) { - var request - , options - , defaults = {method: 'post'} - ; +exports.endOfToday = endOfToday; +var _index = __nccwpck_require__(4821); - // parse provided url if it's string - // or treat it as options object - if (typeof params == 'string') { +/** + * @name endOfToday + * @category Day Helpers + * @summary Return the end of today. + * @pure false + * + * @description + * Return the end of today. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @returns The end of today + * + * @example + * // If today is 6 October 2014: + * const result = endOfToday() + * //=> Mon Oct 6 2014 23:59:59.999 + */ +function endOfToday() { + return (0, _index.endOfDay)(Date.now()); +} - params = parseUrl(params); - options = populate({ - port: params.port, - path: params.pathname, - host: params.hostname, - protocol: params.protocol - }, defaults); - // use custom params - } else { +/***/ }), - options = populate(params, defaults); - // if no port provided use default one - if (!options.port) { - options.port = options.protocol == 'https:' ? 443 : 80; - } - } +/***/ 7064: +/***/ ((__unused_webpack_module, exports) => { - // put that good code in getHeaders to some use - options.headers = this.getHeaders(params.headers); +"use strict"; - // https if specified, fallback to http in any other case - if (options.protocol == 'https:') { - request = https.request(options); - } else { - request = http.request(options); - } +exports.endOfTomorrow = endOfTomorrow; /** + * @name endOfTomorrow + * @category Day Helpers + * @summary Return the end of tomorrow. + * @pure false + * + * @description + * Return the end of tomorrow. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @returns The end of tomorrow + * + * @example + * // If today is 6 October 2014: + * const result = endOfTomorrow() + * //=> Tue Oct 7 2014 23:59:59.999 + */ +function endOfTomorrow() { + const now = new Date(); + const year = now.getFullYear(); + const month = now.getMonth(); + const day = now.getDate(); + + const date = new Date(0); + date.setFullYear(year, month, day + 1); + date.setHours(23, 59, 59, 999); + return date; +} - // get content length and fire away - this.getLength(function(err, length) { - if (err && err !== 'Unknown stream') { - this._error(err); - return; - } - // add content length - if (length) { - request.setHeader('Content-Length', length); - } +/***/ }), - this.pipe(request); - if (cb) { - var onResponse; +/***/ 2974: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - var callback = function (error, responce) { - request.removeListener('error', callback); - request.removeListener('response', onResponse); +"use strict"; - return cb.call(this, error, responce); - }; +exports.endOfWeek = endOfWeek; +var _index = __nccwpck_require__(4363); - onResponse = callback.bind(this, null); +var _index2 = __nccwpck_require__(91); - request.on('error', callback); - request.on('response', onResponse); - } - }.bind(this)); +/** + * The {@link endOfWeek} function options. + */ - return request; -}; +/** + * @name endOfWeek + * @category Week Helpers + * @summary Return the end of a week for the given date. + * + * @description + * Return the end of a week for the given date. + * The result will be in the local timezone. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * @param options - An object with options + * + * @returns The end of a week + * + * @example + * // The end of a week for 2 September 2014 11:55:00: + * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0)) + * //=> Sat Sep 06 2014 23:59:59.999 + * + * @example + * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00: + * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 }) + * //=> Sun Sep 07 2014 23:59:59.999 + */ +function endOfWeek(date, options) { + const defaultOptions = (0, _index2.getDefaultOptions)(); + const weekStartsOn = + options?.weekStartsOn ?? + options?.locale?.options?.weekStartsOn ?? + defaultOptions.weekStartsOn ?? + defaultOptions.locale?.options?.weekStartsOn ?? + 0; -FormData.prototype._error = function(err) { - if (!this.error) { - this.error = err; - this.pause(); - this.emit('error', err); - } -}; + const _date = (0, _index.toDate)(date); + const day = _date.getDay(); + const diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn); -FormData.prototype.toString = function () { - return '[object FormData]'; -}; + _date.setDate(_date.getDate() + diff); + _date.setHours(23, 59, 59, 999); + return _date; +} /***/ }), -/***/ 5630: -/***/ ((module) => { +/***/ 8126: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -// populates missing values -module.exports = function(dst, src) { +"use strict"; - Object.keys(src).forEach(function(prop) - { - dst[prop] = dst[prop] || src[prop]; - }); +exports.endOfYear = endOfYear; +var _index = __nccwpck_require__(4363); - return dst; -}; +/** + * @name endOfYear + * @category Year Helpers + * @summary Return the end of a year for the given date. + * + * @description + * Return the end of a year for the given date. + * The result will be in the local timezone. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * + * @returns The end of a year + * + * @example + * // The end of a year for 2 September 2014 11:55:00: + * const result = endOfYear(new Date(2014, 8, 2, 11, 55, 00)) + * //=> Wed Dec 31 2014 23:59:59.999 + */ +function endOfYear(date) { + const _date = (0, _index.toDate)(date); + const year = _date.getFullYear(); + _date.setFullYear(year + 1, 0, 0); + _date.setHours(23, 59, 59, 999); + return _date; +} /***/ }), -/***/ 5697: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 8609: +/***/ ((__unused_webpack_module, exports) => { "use strict"; - - -//////////////////////////////////////////////////////////////////////////////// -// Helpers - -// Merge objects -// -function assign(obj /*from1, from2, from3, ...*/) { - var sources = Array.prototype.slice.call(arguments, 1); - - sources.forEach(function (source) { - if (!source) { return; } - - Object.keys(source).forEach(function (key) { - obj[key] = source[key]; - }); - }); - - return obj; +exports.endOfYesterday = endOfYesterday; /** + * @name endOfYesterday + * @category Day Helpers + * @summary Return the end of yesterday. + * @pure false + * + * @description + * Return the end of yesterday. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @returns The end of yesterday + * + * @example + * // If today is 6 October 2014: + * const result = endOfYesterday() + * //=> Sun Oct 5 2014 23:59:59.999 + */ +function endOfYesterday() { + const now = new Date(); + const year = now.getFullYear(); + const month = now.getMonth(); + const day = now.getDate(); + + const date = new Date(0); + date.setFullYear(year, month, day - 1); + date.setHours(23, 59, 59, 999); + return date; } -function _class(obj) { return Object.prototype.toString.call(obj); } -function isString(obj) { return _class(obj) === '[object String]'; } -function isObject(obj) { return _class(obj) === '[object Object]'; } -function isRegExp(obj) { return _class(obj) === '[object RegExp]'; } -function isFunction(obj) { return _class(obj) === '[object Function]'; } - - -function escapeRE(str) { return str.replace(/[.?*+^$[\]\\(){}|-]/g, '\\$&'); } - -//////////////////////////////////////////////////////////////////////////////// - -var defaultOptions = { - fuzzyLink: true, - fuzzyEmail: true, - fuzzyIP: false -}; - - -function isOptionsObj(obj) { - return Object.keys(obj || {}).reduce(function (acc, k) { - return acc || defaultOptions.hasOwnProperty(k); - }, false); -} +/***/ }), +/***/ 7862: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -var defaultSchemas = { - 'http:': { - validate: function (text, pos, self) { - var tail = text.slice(pos); +"use strict"; - if (!self.re.http) { - // compile lazily, because "host"-containing variables can change on tlds update. - self.re.http = new RegExp( - '^\\/\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i' - ); - } - if (self.re.http.test(tail)) { - return tail.match(self.re.http)[0].length; - } - return 0; - } +exports.format = exports.formatDate = format; +Object.defineProperty(exports, "formatters", ({ + enumerable: true, + get: function () { + return _index3.formatters; }, - 'https:': 'http:', - 'ftp:': 'http:', - '//': { - validate: function (text, pos, self) { - var tail = text.slice(pos); - - if (!self.re.no_http) { - // compile lazily, because "host"-containing variables can change on tlds update. - self.re.no_http = new RegExp( - '^' + - self.re.src_auth + - // Don't allow single-level domains, because of false positives like '//test' - // with code comments - '(?:localhost|(?:(?:' + self.re.src_domain + ')\\.)+' + self.re.src_domain_root + ')' + - self.re.src_port + - self.re.src_host_terminator + - self.re.src_path, - - 'i' - ); - } - - if (self.re.no_http.test(tail)) { - // should not be `://` & `///`, that protects from errors in protocol name - if (pos >= 3 && text[pos - 3] === ':') { return 0; } - if (pos >= 3 && text[pos - 3] === '/') { return 0; } - return tail.match(self.re.no_http)[0].length; - } - return 0; - } +})); +Object.defineProperty(exports, "longFormatters", ({ + enumerable: true, + get: function () { + return _index4.longFormatters; }, - 'mailto:': { - validate: function (text, pos, self) { - var tail = text.slice(pos); +})); +var _index = __nccwpck_require__(4434); +var _index2 = __nccwpck_require__(91); +var _index3 = __nccwpck_require__(1380); +var _index4 = __nccwpck_require__(4673); +var _index5 = __nccwpck_require__(5084); - if (!self.re.mailto) { - self.re.mailto = new RegExp( - '^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i' - ); - } - if (self.re.mailto.test(tail)) { - return tail.match(self.re.mailto)[0].length; - } - return 0; - } - } -}; +var _index6 = __nccwpck_require__(6623); +var _index7 = __nccwpck_require__(4363); -/*eslint-disable max-len*/ +// Rexports of internal for libraries to use. +// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874 -// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js) -var tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]'; +// This RegExp consists of three parts separated by `|`: +// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token +// (one of the certain letters followed by `o`) +// - (\w)\1* matches any sequences of the same letter +// - '' matches two quote characters in a row +// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('), +// except a single quote symbol, which ends the sequence. +// Two quote characters do not end the sequence. +// If there is no matching single quote +// then the sequence will continue until the end of the string. +// - . matches any single character unmatched by previous parts of the RegExps +const formattingTokensRegExp = + /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g; -// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead -var tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'.split('|'); +// This RegExp catches symbols escaped by quotes, and also +// sequences of symbols P, p, and the combinations like `PPPPPPPppppp` +const longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g; -/*eslint-enable max-len*/ +const escapedStringRegExp = /^'([^]*?)'?$/; +const doubleQuoteRegExp = /''/g; +const unescapedLatinCharacterRegExp = /[a-zA-Z]/; -//////////////////////////////////////////////////////////////////////////////// +/** + * The {@link format} function options. + */ -function resetScanCache(self) { - self.__index__ = -1; - self.__text_cache__ = ''; -} +/** + * @name format + * @alias formatDate + * @category Common Helpers + * @summary Format the date. + * + * @description + * Return the formatted date string in the given format. The result may vary by locale. + * + * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries. + * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * + * The characters wrapped between two single quotes characters (') are escaped. + * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote. + * (see the last example) + * + * Format of the string is based on Unicode Technical Standard #35: + * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table + * with a few additions (see note 7 below the table). + * + * Accepted patterns: + * | Unit | Pattern | Result examples | Notes | + * |---------------------------------|---------|-----------------------------------|-------| + * | Era | G..GGG | AD, BC | | + * | | GGGG | Anno Domini, Before Christ | 2 | + * | | GGGGG | A, B | | + * | Calendar year | y | 44, 1, 1900, 2017 | 5 | + * | | yo | 44th, 1st, 0th, 17th | 5,7 | + * | | yy | 44, 01, 00, 17 | 5 | + * | | yyy | 044, 001, 1900, 2017 | 5 | + * | | yyyy | 0044, 0001, 1900, 2017 | 5 | + * | | yyyyy | ... | 3,5 | + * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 | + * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 | + * | | YY | 44, 01, 00, 17 | 5,8 | + * | | YYY | 044, 001, 1900, 2017 | 5 | + * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 | + * | | YYYYY | ... | 3,5 | + * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 | + * | | RR | -43, 00, 01, 1900, 2017 | 5,7 | + * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 | + * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 | + * | | RRRRR | ... | 3,5,7 | + * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 | + * | | uu | -43, 01, 1900, 2017 | 5 | + * | | uuu | -043, 001, 1900, 2017 | 5 | + * | | uuuu | -0043, 0001, 1900, 2017 | 5 | + * | | uuuuu | ... | 3,5 | + * | Quarter (formatting) | Q | 1, 2, 3, 4 | | + * | | Qo | 1st, 2nd, 3rd, 4th | 7 | + * | | QQ | 01, 02, 03, 04 | | + * | | QQQ | Q1, Q2, Q3, Q4 | | + * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 | + * | | QQQQQ | 1, 2, 3, 4 | 4 | + * | Quarter (stand-alone) | q | 1, 2, 3, 4 | | + * | | qo | 1st, 2nd, 3rd, 4th | 7 | + * | | qq | 01, 02, 03, 04 | | + * | | qqq | Q1, Q2, Q3, Q4 | | + * | | qqqq | 1st quarter, 2nd quarter, ... | 2 | + * | | qqqqq | 1, 2, 3, 4 | 4 | + * | Month (formatting) | M | 1, 2, ..., 12 | | + * | | Mo | 1st, 2nd, ..., 12th | 7 | + * | | MM | 01, 02, ..., 12 | | + * | | MMM | Jan, Feb, ..., Dec | | + * | | MMMM | January, February, ..., December | 2 | + * | | MMMMM | J, F, ..., D | | + * | Month (stand-alone) | L | 1, 2, ..., 12 | | + * | | Lo | 1st, 2nd, ..., 12th | 7 | + * | | LL | 01, 02, ..., 12 | | + * | | LLL | Jan, Feb, ..., Dec | | + * | | LLLL | January, February, ..., December | 2 | + * | | LLLLL | J, F, ..., D | | + * | Local week of year | w | 1, 2, ..., 53 | | + * | | wo | 1st, 2nd, ..., 53th | 7 | + * | | ww | 01, 02, ..., 53 | | + * | ISO week of year | I | 1, 2, ..., 53 | 7 | + * | | Io | 1st, 2nd, ..., 53th | 7 | + * | | II | 01, 02, ..., 53 | 7 | + * | Day of month | d | 1, 2, ..., 31 | | + * | | do | 1st, 2nd, ..., 31st | 7 | + * | | dd | 01, 02, ..., 31 | | + * | Day of year | D | 1, 2, ..., 365, 366 | 9 | + * | | Do | 1st, 2nd, ..., 365th, 366th | 7 | + * | | DD | 01, 02, ..., 365, 366 | 9 | + * | | DDD | 001, 002, ..., 365, 366 | | + * | | DDDD | ... | 3 | + * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | | + * | | EEEE | Monday, Tuesday, ..., Sunday | 2 | + * | | EEEEE | M, T, W, T, F, S, S | | + * | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | | + * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 | + * | | io | 1st, 2nd, ..., 7th | 7 | + * | | ii | 01, 02, ..., 07 | 7 | + * | | iii | Mon, Tue, Wed, ..., Sun | 7 | + * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 | + * | | iiiii | M, T, W, T, F, S, S | 7 | + * | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 7 | + * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | | + * | | eo | 2nd, 3rd, ..., 1st | 7 | + * | | ee | 02, 03, ..., 01 | | + * | | eee | Mon, Tue, Wed, ..., Sun | | + * | | eeee | Monday, Tuesday, ..., Sunday | 2 | + * | | eeeee | M, T, W, T, F, S, S | | + * | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | | + * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | | + * | | co | 2nd, 3rd, ..., 1st | 7 | + * | | cc | 02, 03, ..., 01 | | + * | | ccc | Mon, Tue, Wed, ..., Sun | | + * | | cccc | Monday, Tuesday, ..., Sunday | 2 | + * | | ccccc | M, T, W, T, F, S, S | | + * | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | | + * | AM, PM | a..aa | AM, PM | | + * | | aaa | am, pm | | + * | | aaaa | a.m., p.m. | 2 | + * | | aaaaa | a, p | | + * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | | + * | | bbb | am, pm, noon, midnight | | + * | | bbbb | a.m., p.m., noon, midnight | 2 | + * | | bbbbb | a, p, n, mi | | + * | Flexible day period | B..BBB | at night, in the morning, ... | | + * | | BBBB | at night, in the morning, ... | 2 | + * | | BBBBB | at night, in the morning, ... | | + * | Hour [1-12] | h | 1, 2, ..., 11, 12 | | + * | | ho | 1st, 2nd, ..., 11th, 12th | 7 | + * | | hh | 01, 02, ..., 11, 12 | | + * | Hour [0-23] | H | 0, 1, 2, ..., 23 | | + * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 | + * | | HH | 00, 01, 02, ..., 23 | | + * | Hour [0-11] | K | 1, 2, ..., 11, 0 | | + * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 | + * | | KK | 01, 02, ..., 11, 00 | | + * | Hour [1-24] | k | 24, 1, 2, ..., 23 | | + * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 | + * | | kk | 24, 01, 02, ..., 23 | | + * | Minute | m | 0, 1, ..., 59 | | + * | | mo | 0th, 1st, ..., 59th | 7 | + * | | mm | 00, 01, ..., 59 | | + * | Second | s | 0, 1, ..., 59 | | + * | | so | 0th, 1st, ..., 59th | 7 | + * | | ss | 00, 01, ..., 59 | | + * | Fraction of second | S | 0, 1, ..., 9 | | + * | | SS | 00, 01, ..., 99 | | + * | | SSS | 000, 001, ..., 999 | | + * | | SSSS | ... | 3 | + * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | | + * | | XX | -0800, +0530, Z | | + * | | XXX | -08:00, +05:30, Z | | + * | | XXXX | -0800, +0530, Z, +123456 | 2 | + * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | | + * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | | + * | | xx | -0800, +0530, +0000 | | + * | | xxx | -08:00, +05:30, +00:00 | 2 | + * | | xxxx | -0800, +0530, +0000, +123456 | | + * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | | + * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | | + * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 | + * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 | + * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 | + * | Seconds timestamp | t | 512969520 | 7 | + * | | tt | ... | 3,7 | + * | Milliseconds timestamp | T | 512969520900 | 7 | + * | | TT | ... | 3,7 | + * | Long localized date | P | 04/29/1453 | 7 | + * | | PP | Apr 29, 1453 | 7 | + * | | PPP | April 29th, 1453 | 7 | + * | | PPPP | Friday, April 29th, 1453 | 2,7 | + * | Long localized time | p | 12:00 AM | 7 | + * | | pp | 12:00:00 AM | 7 | + * | | ppp | 12:00:00 AM GMT+2 | 7 | + * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 | + * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 | + * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 | + * | | PPPppp | April 29th, 1453 at ... | 7 | + * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 | + * Notes: + * 1. "Formatting" units (e.g. formatting quarter) in the default en-US locale + * are the same as "stand-alone" units, but are different in some languages. + * "Formatting" units are declined according to the rules of the language + * in the context of a date. "Stand-alone" units are always nominative singular: + * + * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'` + * + * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'` + * + * 2. Any sequence of the identical letters is a pattern, unless it is escaped by + * the single quote characters (see below). + * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`) + * the output will be the same as default pattern for this unit, usually + * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units + * are marked with "2" in the last column of the table. + * + * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'` + * + * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'` + * + * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'` + * + * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'` + * + * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'` + * + * 3. Some patterns could be unlimited length (such as `yyyyyyyy`). + * The output will be padded with zeros to match the length of the pattern. + * + * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'` + * + * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales. + * These tokens represent the shortest form of the quarter. + * + * 5. The main difference between `y` and `u` patterns are B.C. years: + * + * | Year | `y` | `u` | + * |------|-----|-----| + * | AC 1 | 1 | 1 | + * | BC 1 | 1 | 0 | + * | BC 2 | 2 | -1 | + * + * Also `yy` always returns the last two digits of a year, + * while `uu` pads single digit years to 2 characters and returns other years unchanged: + * + * | Year | `yy` | `uu` | + * |------|------|------| + * | 1 | 01 | 01 | + * | 14 | 14 | 14 | + * | 376 | 76 | 376 | + * | 1453 | 53 | 1453 | + * + * The same difference is true for local and ISO week-numbering years (`Y` and `R`), + * except local week-numbering years are dependent on `options.weekStartsOn` + * and `options.firstWeekContainsDate` (compare [getISOWeekYear](https://date-fns.org/docs/getISOWeekYear) + * and [getWeekYear](https://date-fns.org/docs/getWeekYear)). + * + * 6. Specific non-location timezones are currently unavailable in `date-fns`, + * so right now these tokens fall back to GMT timezones. + * + * 7. These patterns are not in the Unicode Technical Standard #35: + * - `i`: ISO day of week + * - `I`: ISO week of year + * - `R`: ISO week-numbering year + * - `t`: seconds timestamp + * - `T`: milliseconds timestamp + * - `o`: ordinal number modifier + * - `P`: long localized date + * - `p`: long localized time + * + * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years. + * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * + * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month. + * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * @param format - The string of tokens + * @param options - An object with options + * + * @returns The formatted date string + * + * @throws `date` must not be Invalid Date + * @throws `options.locale` must contain `localize` property + * @throws `options.locale` must contain `formatLong` property + * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * @throws format string contains an unescaped latin alphabet character + * + * @example + * // Represent 11 February 2014 in middle-endian format: + * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy') + * //=> '02/11/2014' + * + * @example + * // Represent 2 July 2014 in Esperanto: + * import { eoLocale } from 'date-fns/locale/eo' + * const result = format(new Date(2014, 6, 2), "do 'de' MMMM yyyy", { + * locale: eoLocale + * }) + * //=> '2-a de julio 2014' + * + * @example + * // Escape string by single quote characters: + * const result = format(new Date(2014, 6, 2, 15), "h 'o''clock'") + * //=> "3 o'clock" + */ +function format(date, formatStr, options) { + const defaultOptions = (0, _index2.getDefaultOptions)(); + const locale = + options?.locale ?? defaultOptions.locale ?? _index.defaultLocale; + + const firstWeekContainsDate = + options?.firstWeekContainsDate ?? + options?.locale?.options?.firstWeekContainsDate ?? + defaultOptions.firstWeekContainsDate ?? + defaultOptions.locale?.options?.firstWeekContainsDate ?? + 1; + + const weekStartsOn = + options?.weekStartsOn ?? + options?.locale?.options?.weekStartsOn ?? + defaultOptions.weekStartsOn ?? + defaultOptions.locale?.options?.weekStartsOn ?? + 0; + + const originalDate = (0, _index7.toDate)(date); + + if (!(0, _index6.isValid)(originalDate)) { + throw new RangeError("Invalid time value"); + } + + let parts = formatStr + .match(longFormattingTokensRegExp) + .map((substring) => { + const firstCharacter = substring[0]; + if (firstCharacter === "p" || firstCharacter === "P") { + const longFormatter = _index4.longFormatters[firstCharacter]; + return longFormatter(substring, locale.formatLong); + } + return substring; + }) + .join("") + .match(formattingTokensRegExp) + .map((substring) => { + // Replace two single quote characters with one single quote character + if (substring === "''") { + return { isToken: false, value: "'" }; + } -function createValidator(re) { - return function (text, pos) { - var tail = text.slice(pos); + const firstCharacter = substring[0]; + if (firstCharacter === "'") { + return { isToken: false, value: cleanEscapedString(substring) }; + } - if (re.test(tail)) { - return tail.match(re)[0].length; - } - return 0; - }; -} + if (_index3.formatters[firstCharacter]) { + return { isToken: true, value: substring }; + } -function createNormalizer() { - return function (match, self) { - self.normalize(match); + if (firstCharacter.match(unescapedLatinCharacterRegExp)) { + throw new RangeError( + "Format string contains an unescaped latin alphabet character `" + + firstCharacter + + "`", + ); + } + + return { isToken: false, value: substring }; + }); + + // invoke localize preprocessor (only for french locales at the moment) + if (locale.localize.preprocessor) { + parts = locale.localize.preprocessor(originalDate, parts); + } + + const formatterOptions = { + firstWeekContainsDate, + weekStartsOn, + locale, }; -} -// Schemas compiler. Build regexps. -// -function compile(self) { + return parts + .map((part) => { + if (!part.isToken) return part.value; - // Load & clone RE patterns. - var re = self.re = __nccwpck_require__(4185)(self.__opts__); + const token = part.value; - // Define dynamic patterns - var tlds = self.__tlds__.slice(); + if ( + (!options?.useAdditionalWeekYearTokens && + (0, _index5.isProtectedWeekYearToken)(token)) || + (!options?.useAdditionalDayOfYearTokens && + (0, _index5.isProtectedDayOfYearToken)(token)) + ) { + (0, _index5.warnOrThrowProtectedError)(token, formatStr, String(date)); + } - self.onCompile(); + const formatter = _index3.formatters[token[0]]; + return formatter(originalDate, token, locale.localize, formatterOptions); + }) + .join(""); +} - if (!self.__tlds_replaced__) { - tlds.push(tlds_2ch_src_re); +function cleanEscapedString(input) { + const matched = input.match(escapedStringRegExp); + + if (!matched) { + return input; } - tlds.push(re.src_xn); - re.src_tlds = tlds.join('|'); + return matched[1].replace(doubleQuoteRegExp, "'"); +} - function untpl(tpl) { return tpl.replace('%TLDS%', re.src_tlds); } - re.email_fuzzy = RegExp(untpl(re.tpl_email_fuzzy), 'i'); - re.link_fuzzy = RegExp(untpl(re.tpl_link_fuzzy), 'i'); - re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i'); - re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), 'i'); +/***/ }), - // - // Compile each schema - // +/***/ 5890: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - var aliases = []; +"use strict"; - self.__compiled__ = {}; // Reset compiled data +exports.formatDistance = formatDistance; +var _index = __nccwpck_require__(2189); +var _index2 = __nccwpck_require__(2983); +var _index3 = __nccwpck_require__(2256); +var _index4 = __nccwpck_require__(4146); +var _index5 = __nccwpck_require__(4363); - function schemaError(name, val) { - throw new Error('(LinkifyIt) Invalid schema "' + name + '": ' + val); - } +var _index6 = __nccwpck_require__(4434); +var _index7 = __nccwpck_require__(91); +var _index8 = __nccwpck_require__(4261); - Object.keys(self.__schemas__).forEach(function (name) { - var val = self.__schemas__[name]; +/** + * The {@link formatDistance} function options. + */ - // skip disabled methods - if (val === null) { return; } +/** + * @name formatDistance + * @category Common Helpers + * @summary Return the distance between the given dates in words. + * + * @description + * Return the distance between the given dates in words. + * + * | Distance between dates | Result | + * |-------------------------------------------------------------------|---------------------| + * | 0 ... 30 secs | less than a minute | + * | 30 secs ... 1 min 30 secs | 1 minute | + * | 1 min 30 secs ... 44 mins 30 secs | [2..44] minutes | + * | 44 mins ... 30 secs ... 89 mins 30 secs | about 1 hour | + * | 89 mins 30 secs ... 23 hrs 59 mins 30 secs | about [2..24] hours | + * | 23 hrs 59 mins 30 secs ... 41 hrs 59 mins 30 secs | 1 day | + * | 41 hrs 59 mins 30 secs ... 29 days 23 hrs 59 mins 30 secs | [2..30] days | + * | 29 days 23 hrs 59 mins 30 secs ... 44 days 23 hrs 59 mins 30 secs | about 1 month | + * | 44 days 23 hrs 59 mins 30 secs ... 59 days 23 hrs 59 mins 30 secs | about 2 months | + * | 59 days 23 hrs 59 mins 30 secs ... 1 yr | [2..12] months | + * | 1 yr ... 1 yr 3 months | about 1 year | + * | 1 yr 3 months ... 1 yr 9 month s | over 1 year | + * | 1 yr 9 months ... 2 yrs | almost 2 years | + * | N yrs ... N yrs 3 months | about N years | + * | N yrs 3 months ... N yrs 9 months | over N years | + * | N yrs 9 months ... N+1 yrs | almost N+1 years | + * + * With `options.includeSeconds == true`: + * | Distance between dates | Result | + * |------------------------|----------------------| + * | 0 secs ... 5 secs | less than 5 seconds | + * | 5 secs ... 10 secs | less than 10 seconds | + * | 10 secs ... 20 secs | less than 20 seconds | + * | 20 secs ... 40 secs | half a minute | + * | 40 secs ... 60 secs | less than a minute | + * | 60 secs ... 90 secs | 1 minute | + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date + * @param baseDate - The date to compare with + * @param options - An object with options + * + * @returns The distance in words + * + * @throws `date` must not be Invalid Date + * @throws `baseDate` must not be Invalid Date + * @throws `options.locale` must contain `formatDistance` property + * + * @example + * // What is the distance between 2 July 2014 and 1 January 2015? + * const result = formatDistance(new Date(2014, 6, 2), new Date(2015, 0, 1)) + * //=> '6 months' + * + * @example + * // What is the distance between 1 January 2015 00:00:15 + * // and 1 January 2015 00:00:00, including seconds? + * const result = formatDistance( + * new Date(2015, 0, 1, 0, 0, 15), + * new Date(2015, 0, 1, 0, 0, 0), + * { includeSeconds: true } + * ) + * //=> 'less than 20 seconds' + * + * @example + * // What is the distance from 1 January 2016 + * // to 1 January 2015, with a suffix? + * const result = formatDistance(new Date(2015, 0, 1), new Date(2016, 0, 1), { + * addSuffix: true + * }) + * //=> 'about 1 year ago' + * + * @example + * // What is the distance between 1 August 2016 and 1 January 2015 in Esperanto? + * import { eoLocale } from 'date-fns/locale/eo' + * const result = formatDistance(new Date(2016, 7, 1), new Date(2015, 0, 1), { + * locale: eoLocale + * }) + * //=> 'pli ol 1 jaro' + */ - var compiled = { validate: null, link: null }; +function formatDistance(date, baseDate, options) { + const defaultOptions = (0, _index7.getDefaultOptions)(); + const locale = + options?.locale ?? defaultOptions.locale ?? _index6.defaultLocale; + const minutesInAlmostTwoDays = 2520; - self.__compiled__[name] = compiled; + const comparison = (0, _index.compareAsc)(date, baseDate); - if (isObject(val)) { - if (isRegExp(val.validate)) { - compiled.validate = createValidator(val.validate); - } else if (isFunction(val.validate)) { - compiled.validate = val.validate; + if (isNaN(comparison)) { + throw new RangeError("Invalid time value"); + } + + const localizeOptions = Object.assign({}, options, { + addSuffix: options?.addSuffix, + comparison: comparison, + }); + + let dateLeft; + let dateRight; + if (comparison > 0) { + dateLeft = (0, _index5.toDate)(baseDate); + dateRight = (0, _index5.toDate)(date); + } else { + dateLeft = (0, _index5.toDate)(date); + dateRight = (0, _index5.toDate)(baseDate); + } + + const seconds = (0, _index4.differenceInSeconds)(dateRight, dateLeft); + const offsetInSeconds = + ((0, _index8.getTimezoneOffsetInMilliseconds)(dateRight) - + (0, _index8.getTimezoneOffsetInMilliseconds)(dateLeft)) / + 1000; + const minutes = Math.round((seconds - offsetInSeconds) / 60); + let months; + + // 0 up to 2 mins + if (minutes < 2) { + if (options?.includeSeconds) { + if (seconds < 5) { + return locale.formatDistance("lessThanXSeconds", 5, localizeOptions); + } else if (seconds < 10) { + return locale.formatDistance("lessThanXSeconds", 10, localizeOptions); + } else if (seconds < 20) { + return locale.formatDistance("lessThanXSeconds", 20, localizeOptions); + } else if (seconds < 40) { + return locale.formatDistance("halfAMinute", 0, localizeOptions); + } else if (seconds < 60) { + return locale.formatDistance("lessThanXMinutes", 1, localizeOptions); } else { - schemaError(name, val); + return locale.formatDistance("xMinutes", 1, localizeOptions); } - - if (isFunction(val.normalize)) { - compiled.normalize = val.normalize; - } else if (!val.normalize) { - compiled.normalize = createNormalizer(); + } else { + if (minutes === 0) { + return locale.formatDistance("lessThanXMinutes", 1, localizeOptions); } else { - schemaError(name, val); + return locale.formatDistance("xMinutes", minutes, localizeOptions); } - - return; } - if (isString(val)) { - aliases.push(name); - return; - } + // 2 mins up to 0.75 hrs + } else if (minutes < 45) { + return locale.formatDistance("xMinutes", minutes, localizeOptions); - schemaError(name, val); - }); + // 0.75 hrs up to 1.5 hrs + } else if (minutes < 90) { + return locale.formatDistance("aboutXHours", 1, localizeOptions); - // - // Compile postponed aliases - // + // 1.5 hrs up to 24 hrs + } else if (minutes < _index2.minutesInDay) { + const hours = Math.round(minutes / 60); + return locale.formatDistance("aboutXHours", hours, localizeOptions); - aliases.forEach(function (alias) { - if (!self.__compiled__[self.__schemas__[alias]]) { - // Silently fail on missed schemas to avoid errons on disable. - // schemaError(alias, self.__schemas__[alias]); - return; - } + // 1 day up to 1.75 days + } else if (minutes < minutesInAlmostTwoDays) { + return locale.formatDistance("xDays", 1, localizeOptions); - self.__compiled__[alias].validate = - self.__compiled__[self.__schemas__[alias]].validate; - self.__compiled__[alias].normalize = - self.__compiled__[self.__schemas__[alias]].normalize; - }); + // 1.75 days up to 30 days + } else if (minutes < _index2.minutesInMonth) { + const days = Math.round(minutes / _index2.minutesInDay); + return locale.formatDistance("xDays", days, localizeOptions); - // - // Fake record for guessed links - // - self.__compiled__[''] = { validate: null, normalize: createNormalizer() }; + // 1 month up to 2 months + } else if (minutes < _index2.minutesInMonth * 2) { + months = Math.round(minutes / _index2.minutesInMonth); + return locale.formatDistance("aboutXMonths", months, localizeOptions); + } - // - // Build schema condition - // - var slist = Object.keys(self.__compiled__) - .filter(function (name) { - // Filter disabled & fake schemas - return name.length > 0 && self.__compiled__[name]; - }) - .map(escapeRE) - .join('|'); - // (?!_) cause 1.5x slowdown - self.re.schema_test = RegExp('(^|(?!_)(?:[><\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'i'); - self.re.schema_search = RegExp('(^|(?!_)(?:[><\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'ig'); - self.re.schema_at_start = RegExp('^' + self.re.schema_search.source, 'i'); + months = (0, _index3.differenceInMonths)(dateRight, dateLeft); - self.re.pretest = RegExp( - '(' + self.re.schema_test.source + ')|(' + self.re.host_fuzzy_test.source + ')|@', - 'i' - ); + // 2 months up to 12 months + if (months < 12) { + const nearestMonth = Math.round(minutes / _index2.minutesInMonth); + return locale.formatDistance("xMonths", nearestMonth, localizeOptions); - // - // Cleanup - // + // 1 year up to max Date + } else { + const monthsSinceStartOfYear = months % 12; + const years = Math.trunc(months / 12); - resetScanCache(self); -} + // N years up to 1 years 3 months + if (monthsSinceStartOfYear < 3) { + return locale.formatDistance("aboutXYears", years, localizeOptions); -/** - * class Match - * - * Match result. Single element of array, returned by [[LinkifyIt#match]] - **/ -function Match(self, shift) { - var start = self.__index__, - end = self.__last_index__, - text = self.__text_cache__.slice(start, end); + // N years 3 months up to N years 9 months + } else if (monthsSinceStartOfYear < 9) { + return locale.formatDistance("overXYears", years, localizeOptions); - /** - * Match#schema -> String - * - * Prefix (protocol) for matched string. - **/ - this.schema = self.__schema__.toLowerCase(); - /** - * Match#index -> Number - * - * First position of matched string. - **/ - this.index = start + shift; - /** - * Match#lastIndex -> Number - * - * Next position after matched string. - **/ - this.lastIndex = end + shift; - /** - * Match#raw -> String - * - * Matched string. - **/ - this.raw = text; - /** - * Match#text -> String - * - * Notmalized text of matched string. - **/ - this.text = text; - /** - * Match#url -> String - * - * Normalized url of matched string. - **/ - this.url = text; + // N years 9 months up to N year 12 months + } else { + return locale.formatDistance("almostXYears", years + 1, localizeOptions); + } + } } -function createMatch(self, shift) { - var match = new Match(self, shift); - self.__compiled__[match.schema].normalize(match, self); +/***/ }), - return match; -} +/***/ 935: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.formatDistanceStrict = formatDistanceStrict; +var _index = __nccwpck_require__(4434); +var _index2 = __nccwpck_require__(91); +var _index3 = __nccwpck_require__(9253); +var _index4 = __nccwpck_require__(4261); +var _index5 = __nccwpck_require__(2189); +var _index6 = __nccwpck_require__(2983); +var _index7 = __nccwpck_require__(4363); /** - * class LinkifyIt - **/ + * The {@link formatDistanceStrict} function options. + */ /** - * new LinkifyIt(schemas, options) - * - schemas (Object): Optional. Additional schemas to validate (prefix/validator) - * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false } + * The unit used to format the distance in {@link formatDistanceStrict}. + */ + +/** + * @name formatDistanceStrict + * @category Common Helpers + * @summary Return the distance between the given dates in words. * - * Creates new linkifier instance with optional additional schemas. - * Can be called without `new` keyword for convenience. + * @description + * Return the distance between the given dates in words, using strict units. + * This is like `formatDistance`, but does not use helpers like 'almost', 'over', + * 'less than' and the like. * - * By default understands: + * | Distance between dates | Result | + * |------------------------|---------------------| + * | 0 ... 59 secs | [0..59] seconds | + * | 1 ... 59 mins | [1..59] minutes | + * | 1 ... 23 hrs | [1..23] hours | + * | 1 ... 29 days | [1..29] days | + * | 1 ... 11 months | [1..11] months | + * | 1 ... N years | [1..N] years | * - * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links - * - "fuzzy" links and emails (example.com, foo@bar.com). + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * - * `schemas` is an object, where each key/value describes protocol/rule: + * @param date - The date + * @param baseDate - The date to compare with + * @param options - An object with options * - * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:` - * for example). `linkify-it` makes shure that prefix is not preceeded with - * alphanumeric char and symbols. Only whitespaces and punctuation allowed. - * - __value__ - rule to check tail after link prefix - * - _String_ - just alias to existing rule - * - _Object_ - * - _validate_ - validator function (should return matched length on success), - * or `RegExp`. - * - _normalize_ - optional function to normalize text & url of matched result - * (for example, for @twitter mentions). + * @returns The distance in words * - * `options`: + * @throws `date` must not be Invalid Date + * @throws `baseDate` must not be Invalid Date + * @throws `options.unit` must be 'second', 'minute', 'hour', 'day', 'month' or 'year' + * @throws `options.locale` must contain `formatDistance` property * - * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`. - * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts - * like version numbers. Default `false`. - * - __fuzzyEmail__ - recognize emails without `mailto:` prefix. + * @example + * // What is the distance between 2 July 2014 and 1 January 2015? + * const result = formatDistanceStrict(new Date(2014, 6, 2), new Date(2015, 0, 2)) + * //=> '6 months' * - **/ -function LinkifyIt(schemas, options) { - if (!(this instanceof LinkifyIt)) { - return new LinkifyIt(schemas, options); + * @example + * // What is the distance between 1 January 2015 00:00:15 + * // and 1 January 2015 00:00:00? + * const result = formatDistanceStrict( + * new Date(2015, 0, 1, 0, 0, 15), + * new Date(2015, 0, 1, 0, 0, 0) + * ) + * //=> '15 seconds' + * + * @example + * // What is the distance from 1 January 2016 + * // to 1 January 2015, with a suffix? + * const result = formatDistanceStrict(new Date(2015, 0, 1), new Date(2016, 0, 1), { + * addSuffix: true + * }) + * //=> '1 year ago' + * + * @example + * // What is the distance from 1 January 2016 + * // to 1 January 2015, in minutes? + * const result = formatDistanceStrict(new Date(2016, 0, 1), new Date(2015, 0, 1), { + * unit: 'minute' + * }) + * //=> '525600 minutes' + * + * @example + * // What is the distance from 1 January 2015 + * // to 28 January 2015, in months, rounded up? + * const result = formatDistanceStrict(new Date(2015, 0, 28), new Date(2015, 0, 1), { + * unit: 'month', + * roundingMethod: 'ceil' + * }) + * //=> '1 month' + * + * @example + * // What is the distance between 1 August 2016 and 1 January 2015 in Esperanto? + * import { eoLocale } from 'date-fns/locale/eo' + * const result = formatDistanceStrict(new Date(2016, 7, 1), new Date(2015, 0, 1), { + * locale: eoLocale + * }) + * //=> '1 jaro' + */ + +function formatDistanceStrict(date, baseDate, options) { + const defaultOptions = (0, _index2.getDefaultOptions)(); + const locale = + options?.locale ?? defaultOptions.locale ?? _index.defaultLocale; + + const comparison = (0, _index5.compareAsc)(date, baseDate); + + if (isNaN(comparison)) { + throw new RangeError("Invalid time value"); } - if (!options) { - if (isOptionsObj(schemas)) { - options = schemas; - schemas = {}; + const localizeOptions = Object.assign({}, options, { + addSuffix: options?.addSuffix, + comparison: comparison, + }); + + let dateLeft; + let dateRight; + if (comparison > 0) { + dateLeft = (0, _index7.toDate)(baseDate); + dateRight = (0, _index7.toDate)(date); + } else { + dateLeft = (0, _index7.toDate)(date); + dateRight = (0, _index7.toDate)(baseDate); + } + + const roundingMethod = (0, _index3.getRoundingMethod)( + options?.roundingMethod ?? "round", + ); + + const milliseconds = dateRight.getTime() - dateLeft.getTime(); + const minutes = milliseconds / _index6.millisecondsInMinute; + + const timezoneOffset = + (0, _index4.getTimezoneOffsetInMilliseconds)(dateRight) - + (0, _index4.getTimezoneOffsetInMilliseconds)(dateLeft); + + // Use DST-normalized difference in minutes for years, months and days; + // use regular difference in minutes for hours, minutes and seconds. + const dstNormalizedMinutes = + (milliseconds - timezoneOffset) / _index6.millisecondsInMinute; + + const defaultUnit = options?.unit; + let unit; + if (!defaultUnit) { + if (minutes < 1) { + unit = "second"; + } else if (minutes < 60) { + unit = "minute"; + } else if (minutes < _index6.minutesInDay) { + unit = "hour"; + } else if (dstNormalizedMinutes < _index6.minutesInMonth) { + unit = "day"; + } else if (dstNormalizedMinutes < _index6.minutesInYear) { + unit = "month"; + } else { + unit = "year"; } + } else { + unit = defaultUnit; } - this.__opts__ = assign({}, defaultOptions, options); + // 0 up to 60 seconds + if (unit === "second") { + const seconds = roundingMethod(milliseconds / 1000); + return locale.formatDistance("xSeconds", seconds, localizeOptions); - // Cache last tested result. Used to skip repeating steps on next `match` call. - this.__index__ = -1; - this.__last_index__ = -1; // Next scan position - this.__schema__ = ''; - this.__text_cache__ = ''; + // 1 up to 60 mins + } else if (unit === "minute") { + const roundedMinutes = roundingMethod(minutes); + return locale.formatDistance("xMinutes", roundedMinutes, localizeOptions); - this.__schemas__ = assign({}, defaultSchemas, schemas); - this.__compiled__ = {}; + // 1 up to 24 hours + } else if (unit === "hour") { + const hours = roundingMethod(minutes / 60); + return locale.formatDistance("xHours", hours, localizeOptions); - this.__tlds__ = tlds_default; - this.__tlds_replaced__ = false; + // 1 up to 30 days + } else if (unit === "day") { + const days = roundingMethod(dstNormalizedMinutes / _index6.minutesInDay); + return locale.formatDistance("xDays", days, localizeOptions); - this.re = {}; - - compile(this); -} - - -/** chainable - * LinkifyIt#add(schema, definition) - * - schema (String): rule name (fixed pattern prefix) - * - definition (String|RegExp|Object): schema definition - * - * Add new rule definition. See constructor description for details. - **/ -LinkifyIt.prototype.add = function add(schema, definition) { - this.__schemas__[schema] = definition; - compile(this); - return this; -}; - - -/** chainable - * LinkifyIt#set(options) - * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false } - * - * Set recognition options for links without schema. - **/ -LinkifyIt.prototype.set = function set(options) { - this.__opts__ = assign(this.__opts__, options); - return this; -}; - - -/** - * LinkifyIt#test(text) -> Boolean - * - * Searches linkifiable pattern and returns `true` on success or `false` on fail. - **/ -LinkifyIt.prototype.test = function test(text) { - // Reset scan cache - this.__text_cache__ = text; - this.__index__ = -1; - - if (!text.length) { return false; } - - var m, ml, me, len, shift, next, re, tld_pos, at_pos; + // 1 up to 12 months + } else if (unit === "month") { + const months = roundingMethod( + dstNormalizedMinutes / _index6.minutesInMonth, + ); + return months === 12 && defaultUnit !== "month" + ? locale.formatDistance("xYears", 1, localizeOptions) + : locale.formatDistance("xMonths", months, localizeOptions); - // try to scan for link with schema - that's the most simple rule - if (this.re.schema_test.test(text)) { - re = this.re.schema_search; - re.lastIndex = 0; - while ((m = re.exec(text)) !== null) { - len = this.testSchemaAt(text, m[2], re.lastIndex); - if (len) { - this.__schema__ = m[2]; - this.__index__ = m.index + m[1].length; - this.__last_index__ = m.index + m[0].length + len; - break; - } - } + // 1 year up to max Date + } else { + const years = roundingMethod(dstNormalizedMinutes / _index6.minutesInYear); + return locale.formatDistance("xYears", years, localizeOptions); } +} - if (this.__opts__.fuzzyLink && this.__compiled__['http:']) { - // guess schemaless links - tld_pos = text.search(this.re.host_fuzzy_test); - if (tld_pos >= 0) { - // if tld is located after found link - no need to check fuzzy pattern - if (this.__index__ < 0 || tld_pos < this.__index__) { - if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) { - - shift = ml.index + ml[1].length; - - if (this.__index__ < 0 || shift < this.__index__) { - this.__schema__ = ''; - this.__index__ = shift; - this.__last_index__ = ml.index + ml[0].length; - } - } - } - } - } - if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) { - // guess schemaless emails - at_pos = text.indexOf('@'); - if (at_pos >= 0) { - // We can't skip this check, because this cases are possible: - // 192.168.1.1@gmail.com, my.in@example.com - if ((me = text.match(this.re.email_fuzzy)) !== null) { +/***/ }), - shift = me.index + me[1].length; - next = me.index + me[0].length; +/***/ 6132: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - if (this.__index__ < 0 || shift < this.__index__ || - (shift === this.__index__ && next > this.__last_index__)) { - this.__schema__ = 'mailto:'; - this.__index__ = shift; - this.__last_index__ = next; - } - } - } - } +"use strict"; - return this.__index__ >= 0; -}; +exports.formatDistanceToNow = formatDistanceToNow; +var _index = __nccwpck_require__(1105); +var _index2 = __nccwpck_require__(5890); /** - * LinkifyIt#pretest(text) -> Boolean - * - * Very quick check, that can give false positives. Returns true if link MAY BE - * can exists. Can be used for speed optimization, when you need to check that - * link NOT exists. - **/ -LinkifyIt.prototype.pretest = function pretest(text) { - return this.re.pretest.test(text); -}; - + * The {@link formatDistanceToNow} function options. + */ /** - * LinkifyIt#testSchemaAt(text, name, position) -> Number - * - text (String): text to scan - * - name (String): rule (schema) name - * - position (Number): text offset to check from + * @name formatDistanceToNow + * @category Common Helpers + * @summary Return the distance between the given date and now in words. + * @pure false * - * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly - * at given position. Returns length of found pattern (0 on fail). - **/ -LinkifyIt.prototype.testSchemaAt = function testSchemaAt(text, schema, pos) { - // If not supported schema check requested - terminate - if (!this.__compiled__[schema.toLowerCase()]) { - return 0; - } - return this.__compiled__[schema.toLowerCase()].validate(text, pos, this); -}; - - -/** - * LinkifyIt#match(text) -> Array|null + * @description + * Return the distance between the given date and now in words. + * + * | Distance to now | Result | + * |-------------------------------------------------------------------|---------------------| + * | 0 ... 30 secs | less than a minute | + * | 30 secs ... 1 min 30 secs | 1 minute | + * | 1 min 30 secs ... 44 mins 30 secs | [2..44] minutes | + * | 44 mins ... 30 secs ... 89 mins 30 secs | about 1 hour | + * | 89 mins 30 secs ... 23 hrs 59 mins 30 secs | about [2..24] hours | + * | 23 hrs 59 mins 30 secs ... 41 hrs 59 mins 30 secs | 1 day | + * | 41 hrs 59 mins 30 secs ... 29 days 23 hrs 59 mins 30 secs | [2..30] days | + * | 29 days 23 hrs 59 mins 30 secs ... 44 days 23 hrs 59 mins 30 secs | about 1 month | + * | 44 days 23 hrs 59 mins 30 secs ... 59 days 23 hrs 59 mins 30 secs | about 2 months | + * | 59 days 23 hrs 59 mins 30 secs ... 1 yr | [2..12] months | + * | 1 yr ... 1 yr 3 months | about 1 year | + * | 1 yr 3 months ... 1 yr 9 month s | over 1 year | + * | 1 yr 9 months ... 2 yrs | almost 2 years | + * | N yrs ... N yrs 3 months | about N years | + * | N yrs 3 months ... N yrs 9 months | over N years | + * | N yrs 9 months ... N+1 yrs | almost N+1 years | + * + * With `options.includeSeconds == true`: + * | Distance to now | Result | + * |---------------------|----------------------| + * | 0 secs ... 5 secs | less than 5 seconds | + * | 5 secs ... 10 secs | less than 10 seconds | + * | 10 secs ... 20 secs | less than 20 seconds | + * | 20 secs ... 40 secs | half a minute | + * | 40 secs ... 60 secs | less than a minute | + * | 60 secs ... 90 secs | 1 minute | + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The given date + * @param options - The object with options + * + * @returns The distance in words + * + * @throws `date` must not be Invalid Date + * @throws `options.locale` must contain `formatDistance` property * - * Returns array of found link descriptions or `null` on fail. We strongly - * recommend to use [[LinkifyIt#test]] first, for best speed. + * @example + * // If today is 1 January 2015, what is the distance to 2 July 2014? + * const result = formatDistanceToNow( + * new Date(2014, 6, 2) + * ) + * //=> '6 months' * - * ##### Result match description + * @example + * // If now is 1 January 2015 00:00:00, + * // what is the distance to 1 January 2015 00:00:15, including seconds? + * const result = formatDistanceToNow( + * new Date(2015, 0, 1, 0, 0, 15), + * {includeSeconds: true} + * ) + * //=> 'less than 20 seconds' * - * - __schema__ - link schema, can be empty for fuzzy links, or `//` for - * protocol-neutral links. - * - __index__ - offset of matched text - * - __lastIndex__ - index of next char after mathch end - * - __raw__ - matched text - * - __text__ - normalized text - * - __url__ - link, generated from matched text - **/ -LinkifyIt.prototype.match = function match(text) { - var shift = 0, result = []; - - // Try to take previous element from cache, if .test() called before - if (this.__index__ >= 0 && this.__text_cache__ === text) { - result.push(createMatch(this, shift)); - shift = this.__last_index__; - } + * @example + * // If today is 1 January 2015, + * // what is the distance to 1 January 2016, with a suffix? + * const result = formatDistanceToNow( + * new Date(2016, 0, 1), + * {addSuffix: true} + * ) + * //=> 'in about 1 year' + * + * @example + * // If today is 1 January 2015, + * // what is the distance to 1 August 2016 in Esperanto? + * const eoLocale = require('date-fns/locale/eo') + * const result = formatDistanceToNow( + * new Date(2016, 7, 1), + * {locale: eoLocale} + * ) + * //=> 'pli ol 1 jaro' + */ +function formatDistanceToNow(date, options) { + return (0, _index2.formatDistance)( + date, + (0, _index.constructNow)(date), + options, + ); +} - // Cut head if cache was used - var tail = shift ? text.slice(shift) : text; - // Scan string until end reached - while (this.test(tail)) { - result.push(createMatch(this, shift)); +/***/ }), - tail = tail.slice(this.__last_index__); - shift += this.__last_index__; - } +/***/ 9693: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - if (result.length) { - return result; - } +"use strict"; - return null; -}; +exports.formatDistanceToNowStrict = formatDistanceToNowStrict; +var _index = __nccwpck_require__(935); +var _index2 = __nccwpck_require__(1105); +/** + * The {@link formatDistanceToNowStrict} function options. + */ /** - * LinkifyIt#matchAtStart(text) -> Match|null + * @name formatDistanceToNowStrict + * @category Common Helpers + * @summary Return the distance between the given date and now in words. + * @pure false * - * Returns fully-formed (not fuzzy) link if it starts at the beginning - * of the string, and null otherwise. - **/ -LinkifyIt.prototype.matchAtStart = function matchAtStart(text) { - // Reset scan cache - this.__text_cache__ = text; - this.__index__ = -1; - - if (!text.length) return null; - - var m = this.re.schema_at_start.exec(text); - if (!m) return null; - - var len = this.testSchemaAt(text, m[2], m[0].length); - if (!len) return null; - - this.__schema__ = m[2]; - this.__index__ = m.index + m[1].length; - this.__last_index__ = m.index + m[0].length + len; - - return createMatch(this, 0); -}; - - -/** chainable - * LinkifyIt#tlds(list [, keepOld]) -> this - * - list (Array): list of tlds - * - keepOld (Boolean): merge with current list if `true` (`false` by default) + * @description + * Return the distance between the given dates in words, using strict units. + * This is like `formatDistance`, but does not use helpers like 'almost', 'over', + * 'less than' and the like. * - * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix) - * to avoid false positives. By default this algorythm used: + * | Distance between dates | Result | + * |------------------------|---------------------| + * | 0 ... 59 secs | [0..59] seconds | + * | 1 ... 59 mins | [1..59] minutes | + * | 1 ... 23 hrs | [1..23] hours | + * | 1 ... 29 days | [1..29] days | + * | 1 ... 11 months | [1..11] months | + * | 1 ... N years | [1..N] years | * - * - hostname with any 2-letter root zones are ok. - * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф - * are ok. - * - encoded (`xn--...`) root zones are ok. + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * - * If list is replaced, then exact match for 2-chars root zones will be checked. - **/ -LinkifyIt.prototype.tlds = function tlds(list, keepOld) { - list = Array.isArray(list) ? list : [ list ]; + * @param date - The given date + * @param options - An object with options. + * + * @returns The distance in words + * + * @throws `date` must not be Invalid Date + * @throws `options.locale` must contain `formatDistance` property + * + * @example + * // If today is 1 January 2015, what is the distance to 2 July 2014? + * const result = formatDistanceToNowStrict( + * new Date(2014, 6, 2) + * ) + * //=> '6 months' + * + * @example + * // If now is 1 January 2015 00:00:00, + * // what is the distance to 1 January 2015 00:00:15, including seconds? + * const result = formatDistanceToNowStrict( + * new Date(2015, 0, 1, 0, 0, 15) + * ) + * //=> '15 seconds' + * + * @example + * // If today is 1 January 2015, + * // what is the distance to 1 January 2016, with a suffix? + * const result = formatDistanceToNowStrict( + * new Date(2016, 0, 1), + * {addSuffix: true} + * ) + * //=> 'in 1 year' + * + * @example + * // If today is 28 January 2015, + * // what is the distance to 1 January 2015, in months, rounded up?? + * const result = formatDistanceToNowStrict(new Date(2015, 0, 1), { + * unit: 'month', + * roundingMethod: 'ceil' + * }) + * //=> '1 month' + * + * @example + * // If today is 1 January 2015, + * // what is the distance to 1 January 2016 in Esperanto? + * const eoLocale = require('date-fns/locale/eo') + * const result = formatDistanceToNowStrict( + * new Date(2016, 0, 1), + * {locale: eoLocale} + * ) + * //=> '1 jaro' + */ +function formatDistanceToNowStrict(date, options) { + return (0, _index.formatDistanceStrict)( + date, + (0, _index2.constructNow)(date), + options, + ); +} - if (!keepOld) { - this.__tlds__ = list.slice(); - this.__tlds_replaced__ = true; - compile(this); - return this; - } - this.__tlds__ = this.__tlds__.concat(list) - .sort() - .filter(function (el, idx, arr) { - return el !== arr[idx - 1]; - }) - .reverse(); +/***/ }), - compile(this); - return this; -}; +/***/ 10: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -/** - * LinkifyIt#normalize(match) - * - * Default normalizer (if schema does not define it's own). - **/ -LinkifyIt.prototype.normalize = function normalize(match) { +"use strict"; - // Do minimal possible changes by default. Need to collect feedback prior - // to move forward https://github.com/markdown-it/linkify-it/issues/1 +exports.formatDuration = formatDuration; - if (!match.schema) { match.url = 'http://' + match.url; } +var _index = __nccwpck_require__(4434); +var _index2 = __nccwpck_require__(91); - if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) { - match.url = 'mailto:' + match.url; - } -}; +/** + * The {@link formatDuration} function options. + */ +const defaultFormat = [ + "years", + "months", + "weeks", + "days", + "hours", + "minutes", + "seconds", +]; /** - * LinkifyIt#onCompile() + * @name formatDuration + * @category Common Helpers + * @summary Formats a duration in human-readable format * - * Override to modify basic RegExp-s. - **/ -LinkifyIt.prototype.onCompile = function onCompile() { -}; - + * @description + * Return human-readable duration string i.e. "9 months 2 days" + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param duration - The duration to format + * @param options - An object with options. + * + * @returns The formatted date string + * + * @example + * // Format full duration + * formatDuration({ + * years: 2, + * months: 9, + * weeks: 1, + * days: 7, + * hours: 5, + * minutes: 9, + * seconds: 30 + * }) + * //=> '2 years 9 months 1 week 7 days 5 hours 9 minutes 30 seconds' + * + * @example + * // Format partial duration + * formatDuration({ months: 9, days: 2 }) + * //=> '9 months 2 days' + * + * @example + * // Customize the format + * formatDuration( + * { + * years: 2, + * months: 9, + * weeks: 1, + * days: 7, + * hours: 5, + * minutes: 9, + * seconds: 30 + * }, + * { format: ['months', 'weeks'] } + * ) === '9 months 1 week' + * + * @example + * // Customize the zeros presence + * formatDuration({ years: 0, months: 9 }) + * //=> '9 months' + * formatDuration({ years: 0, months: 9 }, { zero: true }) + * //=> '0 years 9 months' + * + * @example + * // Customize the delimiter + * formatDuration({ years: 2, months: 9, weeks: 3 }, { delimiter: ', ' }) + * //=> '2 years, 9 months, 3 weeks' + */ +function formatDuration(duration, options) { + const defaultOptions = (0, _index2.getDefaultOptions)(); + const locale = + options?.locale ?? defaultOptions.locale ?? _index.defaultLocale; + const format = options?.format ?? defaultFormat; + const zero = options?.zero ?? false; + const delimiter = options?.delimiter ?? " "; + + if (!locale.formatDistance) { + return ""; + } + + const result = format + .reduce((acc, unit) => { + const token = `x${unit.replace(/(^.)/, (m) => m.toUpperCase())}`; + const value = duration[unit]; + if (value !== undefined && (zero || duration[unit])) { + return acc.concat(locale.formatDistance(token, value)); + } + return acc; + }, []) + .join(delimiter); -module.exports = LinkifyIt; + return result; +} /***/ }), -/***/ 4185: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 1474: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; +exports.formatISO = formatISO; +var _index = __nccwpck_require__(4363); +var _index2 = __nccwpck_require__(9443); -module.exports = function (opts) { - var re = {}; - opts = opts || {}; +/** + * The {@link formatISO} function options. + */ - // Use direct extract instead of `regenerate` to reduse browserified size - re.src_Any = (__nccwpck_require__(1393).source); - re.src_Cc = (__nccwpck_require__(1053).source); - re.src_Z = (__nccwpck_require__(3347).source); - re.src_P = (__nccwpck_require__(1550).source); +/** + * @name formatISO + * @category Common Helpers + * @summary Format the date according to the ISO 8601 standard (https://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a003169814.htm). + * + * @description + * Return the formatted date string in ISO 8601 format. Options may be passed to control the parts and notations of the date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * @param options - An object with options. + * + * @returns The formatted date string (in loca.l time zone) + * + * @throws `date` must not be Invalid Date + * + * @example + * // Represent 18 September 2019 in ISO 8601 format (local time zone is UTC): + * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52)) + * //=> '2019-09-18T19:00:52Z' + * + * @example + * // Represent 18 September 2019 in ISO 8601, short format (local time zone is UTC): + * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { format: 'basic' }) + * //=> '20190918T190052' + * + * @example + * // Represent 18 September 2019 in ISO 8601 format, date only: + * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { representation: 'date' }) + * //=> '2019-09-18' + * + * @example + * // Represent 18 September 2019 in ISO 8601 format, time only (local time zone is UTC): + * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { representation: 'time' }) + * //=> '19:00:52Z' + */ +function formatISO(date, options) { + const _date = (0, _index.toDate)(date); - // \p{\Z\P\Cc\CF} (white spaces + control + format + punctuation) - re.src_ZPCc = [ re.src_Z, re.src_P, re.src_Cc ].join('|'); + if (isNaN(_date.getTime())) { + throw new RangeError("Invalid time value"); + } - // \p{\Z\Cc} (white spaces + control) - re.src_ZCc = [ re.src_Z, re.src_Cc ].join('|'); + const format = options?.format ?? "extended"; + const representation = options?.representation ?? "complete"; - // Experimental. List of chars, completely prohibited in links - // because can separate it from other part of text - var text_separators = '[><\uff5c]'; + let result = ""; + let tzOffset = ""; - // All possible word characters (everything without punctuation, spaces & controls) - // Defined via punctuation & spaces to save space - // Should be something like \p{\L\N\S\M} (\w but without `_`) - re.src_pseudo_letter = '(?:(?!' + text_separators + '|' + re.src_ZPCc + ')' + re.src_Any + ')'; - // The same as abothe but without [0-9] - // var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')'; + const dateDelimiter = format === "extended" ? "-" : ""; + const timeDelimiter = format === "extended" ? ":" : ""; - //////////////////////////////////////////////////////////////////////////////// + // Representation is either 'date' or 'complete' + if (representation !== "time") { + const day = (0, _index2.addLeadingZeros)(_date.getDate(), 2); + const month = (0, _index2.addLeadingZeros)(_date.getMonth() + 1, 2); + const year = (0, _index2.addLeadingZeros)(_date.getFullYear(), 4); - re.src_ip4 = + // yyyyMMdd or yyyy-MM-dd. + result = `${year}${dateDelimiter}${month}${dateDelimiter}${day}`; + } - '(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'; + // Representation is either 'time' or 'complete' + if (representation !== "date") { + // Add the timezone. + const offset = _date.getTimezoneOffset(); - // Prohibit any of "@/[]()" in user/pass to avoid wrong domain fetch. - re.src_auth = '(?:(?:(?!' + re.src_ZCc + '|[@/\\[\\]()]).)+@)?'; + if (offset !== 0) { + const absoluteOffset = Math.abs(offset); + const hourOffset = (0, _index2.addLeadingZeros)( + Math.trunc(absoluteOffset / 60), + 2, + ); + const minuteOffset = (0, _index2.addLeadingZeros)(absoluteOffset % 60, 2); + // If less than 0, the sign is +, because it is ahead of time. + const sign = offset < 0 ? "+" : "-"; - re.src_port = + tzOffset = `${sign}${hourOffset}:${minuteOffset}`; + } else { + tzOffset = "Z"; + } - '(?::(?:6(?:[0-4]\\d{3}|5(?:[0-4]\\d{2}|5(?:[0-2]\\d|3[0-5])))|[1-5]?\\d{1,4}))?'; + const hour = (0, _index2.addLeadingZeros)(_date.getHours(), 2); + const minute = (0, _index2.addLeadingZeros)(_date.getMinutes(), 2); + const second = (0, _index2.addLeadingZeros)(_date.getSeconds(), 2); - re.src_host_terminator = + // If there's also date, separate it with time with 'T' + const separator = result === "" ? "" : "T"; - '(?=$|' + text_separators + '|' + re.src_ZPCc + ')' + - '(?!' + (opts['---'] ? '-(?!--)|' : '-|') + '_|:\\d|\\.-|\\.(?!$|' + re.src_ZPCc + '))'; + // Creates a time string consisting of hour, minute, and second, separated by delimiters, if defined. + const time = [hour, minute, second].join(timeDelimiter); - re.src_path = + // HHmmss or HH:mm:ss. + result = `${result}${separator}${time}${tzOffset}`; + } - '(?:' + - '[/?#]' + - '(?:' + - '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\]{}.,"\'?!\\-;]).|' + - '\\[(?:(?!' + re.src_ZCc + '|\\]).)*\\]|' + - '\\((?:(?!' + re.src_ZCc + '|[)]).)*\\)|' + - '\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\}|' + - '\\"(?:(?!' + re.src_ZCc + '|["]).)+\\"|' + - "\\'(?:(?!" + re.src_ZCc + "|[']).)+\\'|" + - "\\'(?=" + re.src_pseudo_letter + '|[-])|' + // allow `I'm_king` if no pair found - '\\.{2,}[a-zA-Z0-9%/&]|' + // google has many dots in "google search" links (#66, #81). - // github has ... in commit range links, - // Restrict to - // - english - // - percent-encoded - // - parts of file path - // - params separator - // until more examples found. - '\\.(?!' + re.src_ZCc + '|[.]|$)|' + - (opts['---'] ? - '\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate - : - '\\-+|' - ) + - ',(?!' + re.src_ZCc + '|$)|' + // allow `,,,` in paths - ';(?!' + re.src_ZCc + '|$)|' + // allow `;` if not followed by space-like char - '\\!+(?!' + re.src_ZCc + '|[!]|$)|' + // allow `!!!` in paths, but not at the end - '\\?(?!' + re.src_ZCc + '|[?]|$)' + - ')+' + - '|\\/' + - ')?'; + return result; +} - // Allow anything in markdown spec, forbid quote (") at the first position - // because emails enclosed in quotes are far more common - re.src_email_name = - '[\\-;:&=\\+\\$,\\.a-zA-Z0-9_][\\-;:&=\\+\\$,\\"\\.a-zA-Z0-9_]*'; +/***/ }), - re.src_xn = +/***/ 3317: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - 'xn--[a-z0-9\\-]{1,59}'; +"use strict"; - // More to read about domain names - // http://serverfault.com/questions/638260/ +exports.formatISO9075 = formatISO9075; +var _index = __nccwpck_require__(6623); +var _index2 = __nccwpck_require__(4363); - re.src_domain_root = +var _index3 = __nccwpck_require__(9443); - // Allow letters & digits (http://test1) - '(?:' + - re.src_xn + - '|' + - re.src_pseudo_letter + '{1,63}' + - ')'; +/** + * The {@link formatISO9075} function options. + */ - re.src_domain = +/** + * @name formatISO9075 + * @category Common Helpers + * @summary Format the date according to the ISO 9075 standard (https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_get-format). + * + * @description + * Return the formatted date string in ISO 9075 format. Options may be passed to control the parts and notations of the date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * @param options - An object with options. + * + * @returns The formatted date string + * + * @throws `date` must not be Invalid Date + * + * @example + * // Represent 18 September 2019 in ISO 9075 format: + * const result = formatISO9075(new Date(2019, 8, 18, 19, 0, 52)) + * //=> '2019-09-18 19:00:52' + * + * @example + * // Represent 18 September 2019 in ISO 9075, short format: + * const result = formatISO9075(new Date(2019, 8, 18, 19, 0, 52), { format: 'basic' }) + * //=> '20190918 190052' + * + * @example + * // Represent 18 September 2019 in ISO 9075 format, date only: + * const result = formatISO9075(new Date(2019, 8, 18, 19, 0, 52), { representation: 'date' }) + * //=> '2019-09-18' + * + * @example + * // Represent 18 September 2019 in ISO 9075 format, time only: + * const result = formatISO9075(new Date(2019, 8, 18, 19, 0, 52), { representation: 'time' }) + * //=> '19:00:52' + */ +function formatISO9075(date, options) { + const _date = (0, _index2.toDate)(date); - '(?:' + - re.src_xn + - '|' + - '(?:' + re.src_pseudo_letter + ')' + - '|' + - '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' + - ')'; + if (!(0, _index.isValid)(_date)) { + throw new RangeError("Invalid time value"); + } - re.src_host = + const format = options?.format ?? "extended"; + const representation = options?.representation ?? "complete"; - '(?:' + - // Don't need IP check, because digits are already allowed in normal domain names - // src_ip4 + - // '|' + - '(?:(?:(?:' + re.src_domain + ')\\.)*' + re.src_domain/*_root*/ + ')' + - ')'; + let result = ""; - re.tpl_host_fuzzy = + const dateDelimiter = format === "extended" ? "-" : ""; + const timeDelimiter = format === "extended" ? ":" : ""; - '(?:' + - re.src_ip4 + - '|' + - '(?:(?:(?:' + re.src_domain + ')\\.)+(?:%TLDS%))' + - ')'; + // Representation is either 'date' or 'complete' + if (representation !== "time") { + const day = (0, _index3.addLeadingZeros)(_date.getDate(), 2); + const month = (0, _index3.addLeadingZeros)(_date.getMonth() + 1, 2); + const year = (0, _index3.addLeadingZeros)(_date.getFullYear(), 4); - re.tpl_host_no_ip_fuzzy = + // yyyyMMdd or yyyy-MM-dd. + result = `${year}${dateDelimiter}${month}${dateDelimiter}${day}`; + } - '(?:(?:(?:' + re.src_domain + ')\\.)+(?:%TLDS%))'; + // Representation is either 'time' or 'complete' + if (representation !== "date") { + const hour = (0, _index3.addLeadingZeros)(_date.getHours(), 2); + const minute = (0, _index3.addLeadingZeros)(_date.getMinutes(), 2); + const second = (0, _index3.addLeadingZeros)(_date.getSeconds(), 2); - re.src_host_strict = + // If there's also date, separate it with time with a space + const separator = result === "" ? "" : " "; - re.src_host + re.src_host_terminator; + // HHmmss or HH:mm:ss. + result = `${result}${separator}${hour}${timeDelimiter}${minute}${timeDelimiter}${second}`; + } - re.tpl_host_fuzzy_strict = + return result; +} - re.tpl_host_fuzzy + re.src_host_terminator; - re.src_host_port_strict = +/***/ }), - re.src_host + re.src_port + re.src_host_terminator; +/***/ 469: +/***/ ((__unused_webpack_module, exports) => { - re.tpl_host_port_fuzzy_strict = +"use strict"; - re.tpl_host_fuzzy + re.src_port + re.src_host_terminator; +exports.formatISODuration = formatISODuration; - re.tpl_host_port_no_ip_fuzzy_strict = +/** + * @name formatISODuration + * @category Common Helpers + * @summary Format a duration object according as ISO 8601 duration string + * + * @description + * Format a duration object according to the ISO 8601 duration standard (https://www.digi.com/resources/documentation/digidocs//90001488-13/reference/r_iso_8601_duration_format.htm) + * + * @param duration - The duration to format + * + * @returns The ISO 8601 duration string + * + * @example + * // Format the given duration as ISO 8601 string + * const result = formatISODuration({ + * years: 39, + * months: 2, + * days: 20, + * hours: 7, + * minutes: 5, + * seconds: 0 + * }) + * //=> 'P39Y2M20DT0H0M0S' + */ +function formatISODuration(duration) { + const { + years = 0, + months = 0, + days = 0, + hours = 0, + minutes = 0, + seconds = 0, + } = duration; - re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator; + return `P${years}Y${months}M${days}DT${hours}H${minutes}M${seconds}S`; +} - //////////////////////////////////////////////////////////////////////////////// - // Main rules +/***/ }), - // Rude test fuzzy links by host, for quick deny - re.tpl_host_fuzzy_test = +/***/ 8517: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - 'localhost|www\\.|\\.\\d{1,3}\\.|(?:\\.(?:%TLDS%)(?:' + re.src_ZPCc + '|>|$))'; +"use strict"; - re.tpl_email_fuzzy = +exports.formatRFC3339 = formatRFC3339; +var _index = __nccwpck_require__(6623); +var _index2 = __nccwpck_require__(4363); +var _index3 = __nccwpck_require__(9443); - '(^|' + text_separators + '|"|\\(|' + re.src_ZCc + ')' + - '(' + re.src_email_name + '@' + re.tpl_host_fuzzy_strict + ')'; +/** + * The {@link formatRFC3339} function options. + */ - re.tpl_link_fuzzy = - // Fuzzy link can't be prepended with .:/\- and non punctuation. - // but can start with > (markdown blockquote) - '(^|(?![.:/\\-_@])(?:[$+<=>^`|\uff5c]|' + re.src_ZPCc + '))' + - '((?![$+<=>^`|\uff5c])' + re.tpl_host_port_fuzzy_strict + re.src_path + ')'; +/** + * @name formatRFC3339 + * @category Common Helpers + * @summary Format the date according to the RFC 3339 standard (https://tools.ietf.org/html/rfc3339#section-5.6). + * + * @description + * Return the formatted date string in RFC 3339 format. Options may be passed to control the parts and notations of the date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * @param options - An object with options. + * + * @returns The formatted date string + * + * @throws `date` must not be Invalid Date + * + * @example + * // Represent 18 September 2019 in RFC 3339 format: + * formatRFC3339(new Date(2019, 8, 18, 19, 0, 52)) + * //=> '2019-09-18T19:00:52Z' + * + * @example + * // Represent 18 September 2019 in RFC 3339 format, 3 digits of second fraction + * formatRFC3339(new Date(2019, 8, 18, 19, 0, 52, 234), { + * fractionDigits: 3 + * }) + * //=> '2019-09-18T19:00:52.234Z' + */ +function formatRFC3339(date, options) { + const _date = (0, _index2.toDate)(date); - re.tpl_link_no_ip_fuzzy = - // Fuzzy link can't be prepended with .:/\- and non punctuation. - // but can start with > (markdown blockquote) - '(^|(?![.:/\\-_@])(?:[$+<=>^`|\uff5c]|' + re.src_ZPCc + '))' + - '((?![$+<=>^`|\uff5c])' + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ')'; + if (!(0, _index.isValid)(_date)) { + throw new RangeError("Invalid time value"); + } - return re; -}; + const fractionDigits = options?.fractionDigits ?? 0; + const day = (0, _index3.addLeadingZeros)(_date.getDate(), 2); + const month = (0, _index3.addLeadingZeros)(_date.getMonth() + 1, 2); + const year = _date.getFullYear(); -/***/ }), + const hour = (0, _index3.addLeadingZeros)(_date.getHours(), 2); + const minute = (0, _index3.addLeadingZeros)(_date.getMinutes(), 2); + const second = (0, _index3.addLeadingZeros)(_date.getSeconds(), 2); -/***/ 1357: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + let fractionalSecond = ""; + if (fractionDigits > 0) { + const milliseconds = _date.getMilliseconds(); + const fractionalSeconds = Math.trunc( + milliseconds * Math.pow(10, fractionDigits - 3), + ); + fractionalSecond = + "." + (0, _index3.addLeadingZeros)(fractionalSeconds, fractionDigits); + } -"use strict"; + let offset = ""; + const tzOffset = _date.getTimezoneOffset(); + if (tzOffset !== 0) { + const absoluteOffset = Math.abs(tzOffset); + const hourOffset = (0, _index3.addLeadingZeros)( + Math.trunc(absoluteOffset / 60), + 2, + ); + const minuteOffset = (0, _index3.addLeadingZeros)(absoluteOffset % 60, 2); + // If less than 0, the sign is +, because it is ahead of time. + const sign = tzOffset < 0 ? "+" : "-"; + offset = `${sign}${hourOffset}:${minuteOffset}`; + } else { + offset = "Z"; + } -module.exports = __nccwpck_require__(6634); + return `${year}-${month}-${day}T${hour}:${minute}:${second}${fractionalSecond}${offset}`; +} /***/ }), -/***/ 4554: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 5771: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; -// HTML5 entities map: { name -> utf16string } -// +exports.formatRFC7231 = formatRFC7231; +var _index = __nccwpck_require__(6623); +var _index2 = __nccwpck_require__(4363); +var _index3 = __nccwpck_require__(9443); + +const days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; + +const months = [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec", +]; -/*eslint quotes:0*/ -module.exports = __nccwpck_require__(6973); +/** + * @name formatRFC7231 + * @category Common Helpers + * @summary Format the date according to the RFC 7231 standard (https://tools.ietf.org/html/rfc7231#section-7.1.1.1). + * + * @description + * Return the formatted date string in RFC 7231 format. + * The result will always be in UTC timezone. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * + * @returns The formatted date string + * + * @throws `date` must not be Invalid Date + * + * @example + * // Represent 18 September 2019 in RFC 7231 format: + * const result = formatRFC7231(new Date(2019, 8, 18, 19, 0, 52)) + * //=> 'Wed, 18 Sep 2019 19:00:52 GMT' + */ +function formatRFC7231(date) { + const _date = (0, _index2.toDate)(date); + if (!(0, _index.isValid)(_date)) { + throw new RangeError("Invalid time value"); + } -/***/ }), + const dayName = days[_date.getUTCDay()]; + const dayOfMonth = (0, _index3.addLeadingZeros)(_date.getUTCDate(), 2); + const monthName = months[_date.getUTCMonth()]; + const year = _date.getUTCFullYear(); -/***/ 2553: -/***/ ((module) => { + const hour = (0, _index3.addLeadingZeros)(_date.getUTCHours(), 2); + const minute = (0, _index3.addLeadingZeros)(_date.getUTCMinutes(), 2); + const second = (0, _index3.addLeadingZeros)(_date.getUTCSeconds(), 2); -"use strict"; -// List of valid html blocks names, accorting to commonmark spec -// http://jgm.github.io/CommonMark/spec.html#html-blocks - - - - -module.exports = [ - 'address', - 'article', - 'aside', - 'base', - 'basefont', - 'blockquote', - 'body', - 'caption', - 'center', - 'col', - 'colgroup', - 'dd', - 'details', - 'dialog', - 'dir', - 'div', - 'dl', - 'dt', - 'fieldset', - 'figcaption', - 'figure', - 'footer', - 'form', - 'frame', - 'frameset', - 'h1', - 'h2', - 'h3', - 'h4', - 'h5', - 'h6', - 'head', - 'header', - 'hr', - 'html', - 'iframe', - 'legend', - 'li', - 'link', - 'main', - 'menu', - 'menuitem', - 'nav', - 'noframes', - 'ol', - 'optgroup', - 'option', - 'p', - 'param', - 'section', - 'source', - 'summary', - 'table', - 'tbody', - 'td', - 'tfoot', - 'th', - 'thead', - 'title', - 'tr', - 'track', - 'ul' -]; + // Result variables. + return `${dayName}, ${dayOfMonth} ${monthName} ${year} ${hour}:${minute}:${second} GMT`; +} /***/ }), -/***/ 3133: -/***/ ((module) => { +/***/ 5893: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; -// Regexps to match html elements +exports.formatRelative = formatRelative; +var _index = __nccwpck_require__(6255); +var _index2 = __nccwpck_require__(7862); +var _index3 = __nccwpck_require__(4363); -var attr_name = '[a-zA-Z_:][a-zA-Z0-9:._-]*'; +var _index4 = __nccwpck_require__(4434); +var _index5 = __nccwpck_require__(91); -var unquoted = '[^"\'=<>`\\x00-\\x20]+'; -var single_quoted = "'[^']*'"; -var double_quoted = '"[^"]*"'; +/** + * The {@link formatRelative} function options. + */ + +/** + * @name formatRelative + * @category Common Helpers + * @summary Represent the date in words relative to the given base date. + * + * @description + * Represent the date in words relative to the given base date. + * + * | Distance to the base date | Result | + * |---------------------------|---------------------------| + * | Previous 6 days | last Sunday at 04:30 AM | + * | Last day | yesterday at 04:30 AM | + * | Same day | today at 04:30 AM | + * | Next day | tomorrow at 04:30 AM | + * | Next 6 days | Sunday at 04:30 AM | + * | Other | 12/31/2017 | + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to format + * @param baseDate - The date to compare with + * @param options - An object with options + * + * @returns The date in words + * + * @throws `date` must not be Invalid Date + * @throws `baseDate` must not be Invalid Date + * @throws `options.locale` must contain `localize` property + * @throws `options.locale` must contain `formatLong` property + * @throws `options.locale` must contain `formatRelative` property + * + * @example + * // Represent the date of 6 days ago in words relative to the given base date. In this example, today is Wednesday + * const result = formatRelative(subDays(new Date(), 6), new Date()) + * //=> "last Thursday at 12:45 AM" + */ +function formatRelative(date, baseDate, options) { + const _date = (0, _index3.toDate)(date); + const _baseDate = (0, _index3.toDate)(baseDate); + + const defaultOptions = (0, _index5.getDefaultOptions)(); + const locale = + options?.locale ?? defaultOptions.locale ?? _index4.defaultLocale; + const weekStartsOn = + options?.weekStartsOn ?? + options?.locale?.options?.weekStartsOn ?? + defaultOptions.weekStartsOn ?? + defaultOptions.locale?.options?.weekStartsOn ?? + 0; + + const diff = (0, _index.differenceInCalendarDays)(_date, _baseDate); + + if (isNaN(diff)) { + throw new RangeError("Invalid time value"); + } + + let token; + if (diff < -6) { + token = "other"; + } else if (diff < -1) { + token = "lastWeek"; + } else if (diff < 0) { + token = "yesterday"; + } else if (diff < 1) { + token = "today"; + } else if (diff < 2) { + token = "tomorrow"; + } else if (diff < 7) { + token = "nextWeek"; + } else { + token = "other"; + } + + const formatStr = locale.formatRelative(token, _date, _baseDate, { + locale, + weekStartsOn, + }); + return (0, _index2.format)(_date, formatStr, { locale, weekStartsOn }); +} -var attr_value = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')'; -var attribute = '(?:\\s+' + attr_name + '(?:\\s*=\\s*' + attr_value + ')?)'; +/***/ }), -var open_tag = '<[A-Za-z][A-Za-z0-9\\-]*' + attribute + '*\\s*\\/?>'; +/***/ 2201: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -var close_tag = '<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>'; -var comment = '|'; -var processing = '<[?][\\s\\S]*?[?]>'; -var declaration = ']*>'; -var cdata = ''; +"use strict"; -var HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment + - '|' + processing + '|' + declaration + '|' + cdata + ')'); -var HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')'); +exports.fromUnixTime = fromUnixTime; +var _index = __nccwpck_require__(4363); -module.exports.n = HTML_TAG_RE; -module.exports.q = HTML_OPEN_CLOSE_TAG_RE; +/** + * @name fromUnixTime + * @category Timestamp Helpers + * @summary Create a date from a Unix timestamp. + * + * @description + * Create a date from a Unix timestamp (in seconds). Decimal values will be discarded. + * + * @param unixTime - The given Unix timestamp (in seconds) + * + * @returns The date + * + * @example + * // Create the date 29 February 2012 11:45:05: + * const result = fromUnixTime(1330515905) + * //=> Wed Feb 29 2012 11:45:05 + */ +function fromUnixTime(unixTime) { + return (0, _index.toDate)(unixTime * 1000); +} /***/ }), -/***/ 6498: +/***/ 612: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; -// Utilities -// +exports.getDate = getDate; +var _index = __nccwpck_require__(4363); +/** + * @name getDate + * @category Day Helpers + * @summary Get the day of the month of the given date. + * + * @description + * Get the day of the month of the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The given date + * + * @returns The day of month + * + * @example + * // Which day of the month is 29 February 2012? + * const result = getDate(new Date(2012, 1, 29)) + * //=> 29 + */ +function getDate(date) { + const _date = (0, _index.toDate)(date); + const dayOfMonth = _date.getDate(); + return dayOfMonth; +} -function _class(obj) { return Object.prototype.toString.call(obj); } -function isString(obj) { return _class(obj) === '[object String]'; } +/***/ }), -var _hasOwnProperty = Object.prototype.hasOwnProperty; +/***/ 5404: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -function has(object, key) { - return _hasOwnProperty.call(object, key); +"use strict"; + +exports.getDay = getDay; +var _index = __nccwpck_require__(4363); + +/** + * @name getDay + * @category Weekday Helpers + * @summary Get the day of the week of the given date. + * + * @description + * Get the day of the week of the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The given date + * + * @returns The day of week, 0 represents Sunday + * + * @example + * // Which day of the week is 29 February 2012? + * const result = getDay(new Date(2012, 1, 29)) + * //=> 3 + */ +function getDay(date) { + const _date = (0, _index.toDate)(date); + const day = _date.getDay(); + return day; } -// Merge objects -// -function assign(obj /*from1, from2, from3, ...*/) { - var sources = Array.prototype.slice.call(arguments, 1); - sources.forEach(function (source) { - if (!source) { return; } +/***/ }), - if (typeof source !== 'object') { - throw new TypeError(source + 'must be object'); - } +/***/ 4243: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - Object.keys(source).forEach(function (key) { - obj[key] = source[key]; - }); - }); +"use strict"; - return obj; -} +exports.getDayOfYear = getDayOfYear; +var _index = __nccwpck_require__(6255); +var _index2 = __nccwpck_require__(3346); +var _index3 = __nccwpck_require__(4363); -// Remove element from array and put another array at those position. -// Useful for some operations with tokens -function arrayReplaceAt(src, pos, newElements) { - return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1)); +/** + * @name getDayOfYear + * @category Day Helpers + * @summary Get the day of the year of the given date. + * + * @description + * Get the day of the year of the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The given date + * + * @returns The day of year + * + * @example + * // Which day of the year is 2 July 2014? + * const result = getDayOfYear(new Date(2014, 6, 2)) + * //=> 183 + */ +function getDayOfYear(date) { + const _date = (0, _index3.toDate)(date); + const diff = (0, _index.differenceInCalendarDays)( + _date, + (0, _index2.startOfYear)(_date), + ); + const dayOfYear = diff + 1; + return dayOfYear; } -//////////////////////////////////////////////////////////////////////////////// -function isValidEntityCode(c) { - /*eslint no-bitwise:0*/ - // broken sequence - if (c >= 0xD800 && c <= 0xDFFF) { return false; } - // never used - if (c >= 0xFDD0 && c <= 0xFDEF) { return false; } - if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { return false; } - // control codes - if (c >= 0x00 && c <= 0x08) { return false; } - if (c === 0x0B) { return false; } - if (c >= 0x0E && c <= 0x1F) { return false; } - if (c >= 0x7F && c <= 0x9F) { return false; } - // out of range - if (c > 0x10FFFF) { return false; } - return true; -} +/***/ }), -function fromCodePoint(c) { - /*eslint no-bitwise:0*/ - if (c > 0xffff) { - c -= 0x10000; - var surrogate1 = 0xd800 + (c >> 10), - surrogate2 = 0xdc00 + (c & 0x3ff); +/***/ 9163: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - return String.fromCharCode(surrogate1, surrogate2); - } - return String.fromCharCode(c); -} +"use strict"; +exports.getDaysInMonth = getDaysInMonth; +var _index = __nccwpck_require__(4363); +var _index2 = __nccwpck_require__(2524); -var UNESCAPE_MD_RE = /\\([!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~])/g; -var ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi; -var UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi'); +/** + * @name getDaysInMonth + * @category Month Helpers + * @summary Get the number of days in a month of the given date. + * + * @description + * Get the number of days in a month of the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The given date + * + * @returns The number of days in a month + * + * @example + * // How many days are in February 2000? + * const result = getDaysInMonth(new Date(2000, 1)) + * //=> 29 + */ +function getDaysInMonth(date) { + const _date = (0, _index.toDate)(date); + const year = _date.getFullYear(); + const monthIndex = _date.getMonth(); + const lastDayOfMonth = (0, _index2.constructFrom)(date, 0); + lastDayOfMonth.setFullYear(year, monthIndex + 1, 0); + lastDayOfMonth.setHours(0, 0, 0, 0); + return lastDayOfMonth.getDate(); +} -var DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i; -var entities = __nccwpck_require__(4554); +/***/ }), -function replaceEntityPattern(match, name) { - var code = 0; +/***/ 3607: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - if (has(entities, name)) { - return entities[name]; - } +"use strict"; - if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) { - code = name[1].toLowerCase() === 'x' ? - parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10); +exports.getDaysInYear = getDaysInYear; +var _index = __nccwpck_require__(5288); +var _index2 = __nccwpck_require__(4363); - if (isValidEntityCode(code)) { - return fromCodePoint(code); - } +/** + * @name getDaysInYear + * @category Year Helpers + * @summary Get the number of days in a year of the given date. + * + * @description + * Get the number of days in a year of the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The given date + * + * @returns The number of days in a year + * + * @example + * // How many days are in 2012? + * const result = getDaysInYear(new Date(2012, 0, 1)) + * //=> 366 + */ +function getDaysInYear(date) { + const _date = (0, _index2.toDate)(date); + + if (String(new Date(_date)) === "Invalid Date") { + return NaN; } - return match; + return (0, _index.isLeapYear)(_date) ? 366 : 365; } -/*function replaceEntities(str) { - if (str.indexOf('&') < 0) { return str; } - return str.replace(ENTITY_RE, replaceEntityPattern); -}*/ +/***/ }), -function unescapeMd(str) { - if (str.indexOf('\\') < 0) { return str; } - return str.replace(UNESCAPE_MD_RE, '$1'); -} +/***/ 9144: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -function unescapeAll(str) { - if (str.indexOf('\\') < 0 && str.indexOf('&') < 0) { return str; } +"use strict"; - return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) { - if (escaped) { return escaped; } - return replaceEntityPattern(match, entity); - }); +exports.getDecade = getDecade; +var _index = __nccwpck_require__(4363); + +/** + * @name getDecade + * @category Decade Helpers + * @summary Get the decade of the given date. + * + * @description + * Get the decade of the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The given date + * + * @returns The year of decade + * + * @example + * // Which decade belongs 27 November 1942? + * const result = getDecade(new Date(1942, 10, 27)) + * //=> 1940 + */ +function getDecade(date) { + // TODO: Switch to more technical definition in of decades that start with 1 + // end with 0. I.e. 2001-2010 instead of current 2000-2009. It's a breaking + // change, so it can only be done in 4.0. + const _date = (0, _index.toDate)(date); + const year = _date.getFullYear(); + const decade = Math.floor(year / 10) * 10; + return decade; } -//////////////////////////////////////////////////////////////////////////////// -var HTML_ESCAPE_TEST_RE = /[&<>"]/; -var HTML_ESCAPE_REPLACE_RE = /[&<>"]/g; -var HTML_REPLACEMENTS = { - '&': '&', - '<': '<', - '>': '>', - '"': '"' -}; +/***/ }), -function replaceUnsafeChar(ch) { - return HTML_REPLACEMENTS[ch]; -} +/***/ 9380: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -function escapeHtml(str) { - if (HTML_ESCAPE_TEST_RE.test(str)) { - return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar); - } - return str; -} +"use strict"; -//////////////////////////////////////////////////////////////////////////////// +exports.getDefaultOptions = getDefaultOptions; -var REGEXP_ESCAPE_RE = /[.?*+^$[\]\\(){}|-]/g; +var _index = __nccwpck_require__(91); -function escapeRE(str) { - return str.replace(REGEXP_ESCAPE_RE, '\\$&'); +/** + * @name getDefaultOptions + * @category Common Helpers + * @summary Get default options. + * @pure false + * + * @description + * Returns an object that contains defaults for + * `options.locale`, `options.weekStartsOn` and `options.firstWeekContainsDate` + * arguments for all functions. + * + * You can change these with [setDefaultOptions](https://date-fns.org/docs/setDefaultOptions). + * + * @returns The default options + * + * @example + * const result = getDefaultOptions() + * //=> {} + * + * @example + * setDefaultOptions({ weekStarsOn: 1, firstWeekContainsDate: 4 }) + * const result = getDefaultOptions() + * //=> { weekStarsOn: 1, firstWeekContainsDate: 4 } + */ +function getDefaultOptions() { + return Object.assign({}, (0, _index.getDefaultOptions)()); } -//////////////////////////////////////////////////////////////////////////////// -function isSpace(code) { - switch (code) { - case 0x09: - case 0x20: - return true; - } - return false; -} +/***/ }), -// Zs (unicode class) || [\t\f\v\r\n] -function isWhiteSpace(code) { - if (code >= 0x2000 && code <= 0x200A) { return true; } - switch (code) { - case 0x09: // \t - case 0x0A: // \n - case 0x0B: // \v - case 0x0C: // \f - case 0x0D: // \r - case 0x20: - case 0xA0: - case 0x1680: - case 0x202F: - case 0x205F: - case 0x3000: - return true; - } - return false; -} +/***/ 4378: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -//////////////////////////////////////////////////////////////////////////////// +"use strict"; -/*eslint-disable max-len*/ -var UNICODE_PUNCT_RE = __nccwpck_require__(1550); +exports.getHours = getHours; +var _index = __nccwpck_require__(4363); -// Currently without astral characters support. -function isPunctChar(ch) { - return UNICODE_PUNCT_RE.test(ch); +/** + * @name getHours + * @category Hour Helpers + * @summary Get the hours of the given date. + * + * @description + * Get the hours of the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The given date + * + * @returns The hours + * + * @example + * // Get the hours of 29 February 2012 11:45:00: + * const result = getHours(new Date(2012, 1, 29, 11, 45)) + * //=> 11 + */ +function getHours(date) { + const _date = (0, _index.toDate)(date); + const hours = _date.getHours(); + return hours; } -// Markdown ASCII punctuation characters. -// -// !, ", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \, ], ^, _, `, {, |, }, or ~ -// http://spec.commonmark.org/0.15/#ascii-punctuation-character -// -// Don't confuse with unicode punctuation !!! It lacks some chars in ascii range. -// -function isMdAsciiPunct(ch) { - switch (ch) { - case 0x21/* ! */: - case 0x22/* " */: - case 0x23/* # */: - case 0x24/* $ */: - case 0x25/* % */: - case 0x26/* & */: - case 0x27/* ' */: - case 0x28/* ( */: - case 0x29/* ) */: - case 0x2A/* * */: - case 0x2B/* + */: - case 0x2C/* , */: - case 0x2D/* - */: - case 0x2E/* . */: - case 0x2F/* / */: - case 0x3A/* : */: - case 0x3B/* ; */: - case 0x3C/* < */: - case 0x3D/* = */: - case 0x3E/* > */: - case 0x3F/* ? */: - case 0x40/* @ */: - case 0x5B/* [ */: - case 0x5C/* \ */: - case 0x5D/* ] */: - case 0x5E/* ^ */: - case 0x5F/* _ */: - case 0x60/* ` */: - case 0x7B/* { */: - case 0x7C/* | */: - case 0x7D/* } */: - case 0x7E/* ~ */: - return true; - default: - return false; - } -} +/***/ }), -// Hepler to unify [reference labels]. -// -function normalizeReference(str) { - // Trim and collapse whitespace - // - str = str.trim().replace(/\s+/g, ' '); +/***/ 2487: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - // In node v10 'ẞ'.toLowerCase() === 'Ṿ', which is presumed to be a bug - // fixed in v12 (couldn't find any details). - // - // So treat this one as a special case - // (remove this when node v10 is no longer supported). - // - if ('ẞ'.toLowerCase() === 'Ṿ') { - str = str.replace(/ẞ/g, 'ß'); - } +"use strict"; - // .toLowerCase().toUpperCase() should get rid of all differences - // between letter variants. - // - // Simple .toLowerCase() doesn't normalize 125 code points correctly, - // and .toUpperCase doesn't normalize 6 of them (list of exceptions: - // İ, ϴ, ẞ, Ω, K, Å - those are already uppercased, but have differently - // uppercased versions). - // - // Here's an example showing how it happens. Lets take greek letter omega: - // uppercase U+0398 (Θ), U+03f4 (ϴ) and lowercase U+03b8 (θ), U+03d1 (ϑ) - // - // Unicode entries: - // 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8; - // 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398 - // 03D1;GREEK THETA SYMBOL;Ll;0;L; 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398 - // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L; 0398;;;;N;;;;03B8; - // - // Case-insensitive comparison should treat all of them as equivalent. - // - // But .toLowerCase() doesn't change ϑ (it's already lowercase), - // and .toUpperCase() doesn't change ϴ (already uppercase). - // - // Applying first lower then upper case normalizes any character: - // '\u0398\u03f4\u03b8\u03d1'.toLowerCase().toUpperCase() === '\u0398\u0398\u0398\u0398' - // - // Note: this is equivalent to unicode case folding; unicode normalization - // is a different step that is not required here. - // - // Final result should be uppercased, because it's later stored in an object - // (this avoid a conflict with Object.prototype members, - // most notably, `__proto__`) - // - return str.toLowerCase().toUpperCase(); -} +exports.getISODay = getISODay; +var _index = __nccwpck_require__(4363); -//////////////////////////////////////////////////////////////////////////////// +/** + * @name getISODay + * @category Weekday Helpers + * @summary Get the day of the ISO week of the given date. + * + * @description + * Get the day of the ISO week of the given date, + * which is 7 for Sunday, 1 for Monday etc. + * + * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The given date + * + * @returns The day of ISO week + * + * @example + * // Which day of the ISO week is 26 February 2012? + * const result = getISODay(new Date(2012, 1, 26)) + * //=> 7 + */ +function getISODay(date) { + const _date = (0, _index.toDate)(date); + let day = _date.getDay(); -// Re-export libraries commonly used in both markdown-it and its plugins, -// so plugins won't have to depend on them explicitly, which reduces their -// bundled size (e.g. a browser build). -// -exports.lib = {}; -exports.lib.mdurl = __nccwpck_require__(2090); -exports.lib.ucmicro = __nccwpck_require__(784); + if (day === 0) { + day = 7; + } -exports.assign = assign; -exports.isString = isString; -exports.has = has; -exports.unescapeMd = unescapeMd; -exports.unescapeAll = unescapeAll; -exports.isValidEntityCode = isValidEntityCode; -exports.fromCodePoint = fromCodePoint; -// exports.replaceEntities = replaceEntities; -exports.escapeHtml = escapeHtml; -exports.arrayReplaceAt = arrayReplaceAt; -exports.isSpace = isSpace; -exports.isWhiteSpace = isWhiteSpace; -exports.isMdAsciiPunct = isMdAsciiPunct; -exports.isPunctChar = isPunctChar; -exports.escapeRE = escapeRE; -exports.normalizeReference = normalizeReference; + return day; +} /***/ }), -/***/ 7141: +/***/ 2482: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; -// Just a shortcut for bulk export +exports.getISOWeek = getISOWeek; +var _index = __nccwpck_require__(2983); +var _index2 = __nccwpck_require__(1573); +var _index3 = __nccwpck_require__(9280); +var _index4 = __nccwpck_require__(4363); +/** + * @name getISOWeek + * @category ISO Week Helpers + * @summary Get the ISO week of the given date. + * + * @description + * Get the ISO week of the given date. + * + * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The given date + * + * @returns The ISO week + * + * @example + * // Which week of the ISO-week numbering year is 2 January 2005? + * const result = getISOWeek(new Date(2005, 0, 2)) + * //=> 53 + */ +function getISOWeek(date) { + const _date = (0, _index4.toDate)(date); + const diff = + +(0, _index2.startOfISOWeek)(_date) - + +(0, _index3.startOfISOWeekYear)(_date); -exports.parseLinkLabel = __nccwpck_require__(7936); -exports.parseLinkDestination = __nccwpck_require__(1470); -exports.parseLinkTitle = __nccwpck_require__(9429); + // Round the number of weeks to the nearest integer because the number of + // milliseconds in a week is not constant (e.g. it's different in the week of + // the daylight saving time clock shift). + return Math.round(diff / _index.millisecondsInWeek) + 1; +} /***/ }), -/***/ 1470: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 7569: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; -// Parse link destination -// +exports.getISOWeekYear = getISOWeekYear; +var _index = __nccwpck_require__(2524); +var _index2 = __nccwpck_require__(1573); +var _index3 = __nccwpck_require__(4363); +/** + * @name getISOWeekYear + * @category ISO Week-Numbering Year Helpers + * @summary Get the ISO week-numbering year of the given date. + * + * @description + * Get the ISO week-numbering year of the given date, + * which always starts 3 days before the year's first Thursday. + * + * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The given date + * + * @returns The ISO week-numbering year + * + * @example + * // Which ISO-week numbering year is 2 January 2005? + * const result = getISOWeekYear(new Date(2005, 0, 2)) + * //=> 2004 + */ +function getISOWeekYear(date) { + const _date = (0, _index3.toDate)(date); + const year = _date.getFullYear(); + + const fourthOfJanuaryOfNextYear = (0, _index.constructFrom)(date, 0); + fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4); + fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0); + const startOfNextYear = (0, _index2.startOfISOWeek)( + fourthOfJanuaryOfNextYear, + ); -var unescapeAll = (__nccwpck_require__(6498).unescapeAll); - + const fourthOfJanuaryOfThisYear = (0, _index.constructFrom)(date, 0); + fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4); + fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0); + const startOfThisYear = (0, _index2.startOfISOWeek)( + fourthOfJanuaryOfThisYear, + ); -module.exports = function parseLinkDestination(str, pos, max) { - var code, level, - lines = 0, - start = pos, - result = { - ok: false, - pos: 0, - lines: 0, - str: '' - }; + if (_date.getTime() >= startOfNextYear.getTime()) { + return year + 1; + } else if (_date.getTime() >= startOfThisYear.getTime()) { + return year; + } else { + return year - 1; + } +} - if (str.charCodeAt(pos) === 0x3C /* < */) { - pos++; - while (pos < max) { - code = str.charCodeAt(pos); - if (code === 0x0A /* \n */) { return result; } - if (code === 0x3C /* < */) { return result; } - if (code === 0x3E /* > */) { - result.pos = pos + 1; - result.str = unescapeAll(str.slice(start + 1, pos)); - result.ok = true; - return result; - } - if (code === 0x5C /* \ */ && pos + 1 < max) { - pos += 2; - continue; - } - pos++; - } +/***/ }), - // no closing '>' - return result; - } +/***/ 8688: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - // this should be ... } else { ... branch +"use strict"; - level = 0; - while (pos < max) { - code = str.charCodeAt(pos); +exports.getISOWeeksInYear = getISOWeeksInYear; +var _index = __nccwpck_require__(6178); +var _index2 = __nccwpck_require__(2983); +var _index3 = __nccwpck_require__(9280); - if (code === 0x20) { break; } +/** + * @name getISOWeeksInYear + * @category ISO Week-Numbering Year Helpers + * @summary Get the number of weeks in an ISO week-numbering year of the given date. + * + * @description + * Get the number of weeks in an ISO week-numbering year of the given date. + * + * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The given date + * + * @returns The number of ISO weeks in a year + * + * @example + * // How many weeks are in ISO week-numbering year 2015? + * const result = getISOWeeksInYear(new Date(2015, 1, 11)) + * //=> 53 + */ +function getISOWeeksInYear(date) { + const thisYear = (0, _index3.startOfISOWeekYear)(date); + const nextYear = (0, _index3.startOfISOWeekYear)( + (0, _index.addWeeks)(thisYear, 60), + ); + const diff = +nextYear - +thisYear; - // ascii control characters - if (code < 0x20 || code === 0x7F) { break; } + // Round the number of weeks to the nearest integer because the number of + // milliseconds in a week is not constant (e.g. it's different in the week of + // the daylight saving time clock shift). + return Math.round(diff / _index2.millisecondsInWeek); +} - if (code === 0x5C /* \ */ && pos + 1 < max) { - if (str.charCodeAt(pos + 1) === 0x20) { break; } - pos += 2; - continue; - } - if (code === 0x28 /* ( */) { - level++; - if (level > 32) { return result; } - } +/***/ }), - if (code === 0x29 /* ) */) { - if (level === 0) { break; } - level--; - } +/***/ 4168: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - pos++; - } +"use strict"; - if (start === pos) { return result; } - if (level !== 0) { return result; } +exports.getMilliseconds = getMilliseconds; +var _index = __nccwpck_require__(4363); - result.str = unescapeAll(str.slice(start, pos)); - result.lines = lines; - result.pos = pos; - result.ok = true; - return result; -}; +/** + * @name getMilliseconds + * @category Millisecond Helpers + * @summary Get the milliseconds of the given date. + * + * @description + * Get the milliseconds of the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The given date + * + * @returns The milliseconds + * + * @example + * // Get the milliseconds of 29 February 2012 11:45:05.123: + * const result = getMilliseconds(new Date(2012, 1, 29, 11, 45, 5, 123)) + * //=> 123 + */ +function getMilliseconds(date) { + const _date = (0, _index.toDate)(date); + const milliseconds = _date.getMilliseconds(); + return milliseconds; +} /***/ }), -/***/ 7936: -/***/ ((module) => { +/***/ 8205: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; -// Parse link label -// -// this function assumes that first character ("[") already matches; -// returns the end of the label -// +exports.getMinutes = getMinutes; +var _index = __nccwpck_require__(4363); -module.exports = function parseLinkLabel(state, start, disableNested) { - var level, found, marker, prevPos, - labelEnd = -1, - max = state.posMax, - oldPos = state.pos; +/** + * @name getMinutes + * @category Minute Helpers + * @summary Get the minutes of the given date. + * + * @description + * Get the minutes of the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The given date + * + * @returns The minutes + * + * @example + * // Get the minutes of 29 February 2012 11:45:05: + * const result = getMinutes(new Date(2012, 1, 29, 11, 45, 5)) + * //=> 45 + */ +function getMinutes(date) { + const _date = (0, _index.toDate)(date); + const minutes = _date.getMinutes(); + return minutes; +} - state.pos = start + 1; - level = 1; - while (state.pos < max) { - marker = state.src.charCodeAt(state.pos); - if (marker === 0x5D /* ] */) { - level--; - if (level === 0) { - found = true; - break; - } - } +/***/ }), - prevPos = state.pos; - state.md.inline.skipToken(state); - if (marker === 0x5B /* [ */) { - if (prevPos === state.pos - 1) { - // increase level if we find text `[`, which is not a part of any token - level++; - } else if (disableNested) { - state.pos = oldPos; - return -1; - } - } - } +/***/ 1436: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - if (found) { - labelEnd = state.pos; - } +"use strict"; - // restore old state - state.pos = oldPos; +exports.getMonth = getMonth; +var _index = __nccwpck_require__(4363); - return labelEnd; -}; +/** + * @name getMonth + * @category Month Helpers + * @summary Get the month of the given date. + * + * @description + * Get the month of the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The given date + * + * @returns The month index (0-11) + * + * @example + * // Which month is 29 February 2012? + * const result = getMonth(new Date(2012, 1, 29)) + * //=> 1 + */ +function getMonth(date) { + const _date = (0, _index.toDate)(date); + const month = _date.getMonth(); + return month; +} /***/ }), -/***/ 9429: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 4628: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; -// Parse link title -// - +exports.getOverlappingDaysInIntervals = getOverlappingDaysInIntervals; +var _index = __nccwpck_require__(4261); +var _index2 = __nccwpck_require__(2983); +var _index3 = __nccwpck_require__(4363); -var unescapeAll = (__nccwpck_require__(6498).unescapeAll); +/** + * @name getOverlappingDaysInIntervals + * @category Interval Helpers + * @summary Get the number of days that overlap in two time intervals + * + * @description + * Get the number of days that overlap in two time intervals. It uses the time + * between dates to calculate the number of days, rounding it up to include + * partial days. + * + * Two equal 0-length intervals will result in 0. Two equal 1ms intervals will + * result in 1. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param intervalLeft - The first interval to compare. + * @param intervalRight - The second interval to compare. + * + * @returns The number of days that overlap in two time intervals + * + * @example + * // For overlapping time intervals adds 1 for each started overlapping day: + * getOverlappingDaysInIntervals( + * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) }, + * { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) } + * ) + * //=> 3 + * + * @example + * // For non-overlapping time intervals returns 0: + * getOverlappingDaysInIntervals( + * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) }, + * { start: new Date(2014, 0, 21), end: new Date(2014, 0, 22) } + * ) + * //=> 0 + */ +function getOverlappingDaysInIntervals(intervalLeft, intervalRight) { + const [leftStart, leftEnd] = [ + +(0, _index3.toDate)(intervalLeft.start), + +(0, _index3.toDate)(intervalLeft.end), + ].sort((a, b) => a - b); + const [rightStart, rightEnd] = [ + +(0, _index3.toDate)(intervalRight.start), + +(0, _index3.toDate)(intervalRight.end), + ].sort((a, b) => a - b); -module.exports = function parseLinkTitle(str, pos, max) { - var code, - marker, - lines = 0, - start = pos, - result = { - ok: false, - pos: 0, - lines: 0, - str: '' - }; + // Prevent NaN result if intervals don't overlap at all. + const isOverlapping = leftStart < rightEnd && rightStart < leftEnd; + if (!isOverlapping) return 0; - if (pos >= max) { return result; } + // Remove the timezone offset to negate the DST effect on calculations. + const overlapLeft = rightStart < leftStart ? leftStart : rightStart; + const left = + overlapLeft - (0, _index.getTimezoneOffsetInMilliseconds)(overlapLeft); + const overlapRight = rightEnd > leftEnd ? leftEnd : rightEnd; + const right = + overlapRight - (0, _index.getTimezoneOffsetInMilliseconds)(overlapRight); - marker = str.charCodeAt(pos); + // Ceil the number to include partial days too. + return Math.ceil((right - left) / _index2.millisecondsInDay); +} - if (marker !== 0x22 /* " */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return result; } - pos++; +/***/ }), - // if opening marker is "(", switch it to closing marker ")" - if (marker === 0x28) { marker = 0x29; } +/***/ 6349: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - while (pos < max) { - code = str.charCodeAt(pos); - if (code === marker) { - result.pos = pos + 1; - result.lines = lines; - result.str = unescapeAll(str.slice(start + 1, pos)); - result.ok = true; - return result; - } else if (code === 0x28 /* ( */ && marker === 0x29 /* ) */) { - return result; - } else if (code === 0x0A) { - lines++; - } else if (code === 0x5C /* \ */ && pos + 1 < max) { - pos++; - if (str.charCodeAt(pos) === 0x0A) { - lines++; - } - } +"use strict"; - pos++; - } +exports.getQuarter = getQuarter; +var _index = __nccwpck_require__(4363); - return result; -}; +/** + * @name getQuarter + * @category Quarter Helpers + * @summary Get the year quarter of the given date. + * + * @description + * Get the year quarter of the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The given date + * + * @returns The quarter + * + * @example + * // Which quarter is 2 July 2014? + * const result = getQuarter(new Date(2014, 6, 2)) + * //=> 3 + */ +function getQuarter(date) { + const _date = (0, _index.toDate)(date); + const quarter = Math.trunc(_date.getMonth() / 3) + 1; + return quarter; +} /***/ }), -/***/ 6634: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 3663: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; -// Main parser class +exports.getSeconds = getSeconds; +var _index = __nccwpck_require__(4363); +/** + * @name getSeconds + * @category Second Helpers + * @summary Get the seconds of the given date. + * + * @description + * Get the seconds of the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The given date + * + * @returns The seconds + * + * @example + * // Get the seconds of 29 February 2012 11:45:05.123: + * const result = getSeconds(new Date(2012, 1, 29, 11, 45, 5, 123)) + * //=> 5 + */ +function getSeconds(date) { + const _date = (0, _index.toDate)(date); + const seconds = _date.getSeconds(); + return seconds; +} -var utils = __nccwpck_require__(6498); -var helpers = __nccwpck_require__(7141); -var Renderer = __nccwpck_require__(9155); -var ParserCore = __nccwpck_require__(6234); -var ParserBlock = __nccwpck_require__(1713); -var ParserInline = __nccwpck_require__(4230); -var LinkifyIt = __nccwpck_require__(5697); -var mdurl = __nccwpck_require__(2090); -var punycode = __nccwpck_require__(5477); +/***/ }), +/***/ 7436: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -var config = { - default: __nccwpck_require__(5370), - zero: __nccwpck_require__(21), - commonmark: __nccwpck_require__(9679) -}; +"use strict"; -//////////////////////////////////////////////////////////////////////////////// -// -// This validator can prohibit more than really needed to prevent XSS. It's a -// tradeoff to keep code simple and to be secure by default. -// -// If you need different setup - override validator method as you wish. Or -// replace it with dummy function and use external sanitizer. -// - -var BAD_PROTO_RE = /^(vbscript|javascript|file|data):/; -var GOOD_DATA_RE = /^data:image\/(gif|png|jpeg|webp);/; - -function validateLink(url) { - // url should be normalized at this point, and existing entities are decoded - var str = url.trim().toLowerCase(); +exports.getTime = getTime; +var _index = __nccwpck_require__(4363); - return BAD_PROTO_RE.test(str) ? (GOOD_DATA_RE.test(str) ? true : false) : true; +/** + * @name getTime + * @category Timestamp Helpers + * @summary Get the milliseconds timestamp of the given date. + * + * @description + * Get the milliseconds timestamp of the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The given date + * + * @returns The timestamp + * + * @example + * // Get the timestamp of 29 February 2012 11:45:05.123: + * const result = getTime(new Date(2012, 1, 29, 11, 45, 5, 123)) + * //=> 1330515905123 + */ +function getTime(date) { + const _date = (0, _index.toDate)(date); + const timestamp = _date.getTime(); + return timestamp; } -//////////////////////////////////////////////////////////////////////////////// +/***/ }), -var RECODE_HOSTNAME_FOR = [ 'http:', 'https:', 'mailto:' ]; +/***/ 5264: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -function normalizeLink(url) { - var parsed = mdurl.parse(url, true); +"use strict"; - if (parsed.hostname) { - // Encode hostnames in urls like: - // `http://host/`, `https://host/`, `mailto:user@host`, `//host/` - // - // We don't encode unknown schemas, because it's likely that we encode - // something we shouldn't (e.g. `skype:name` treated as `skype:host`) - // - if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) { - try { - parsed.hostname = punycode.toASCII(parsed.hostname); - } catch (er) { /**/ } - } - } +exports.getUnixTime = getUnixTime; +var _index = __nccwpck_require__(4363); - return mdurl.encode(mdurl.format(parsed)); +/** + * @name getUnixTime + * @category Timestamp Helpers + * @summary Get the seconds timestamp of the given date. + * + * @description + * Get the seconds timestamp of the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The given date + * + * @returns The timestamp + * + * @example + * // Get the timestamp of 29 February 2012 11:45:05 CET: + * const result = getUnixTime(new Date(2012, 1, 29, 11, 45, 5)) + * //=> 1330512305 + */ +function getUnixTime(date) { + return Math.trunc(+(0, _index.toDate)(date) / 1000); } -function normalizeLinkText(url) { - var parsed = mdurl.parse(url, true); - if (parsed.hostname) { - // Encode hostnames in urls like: - // `http://host/`, `https://host/`, `mailto:user@host`, `//host/` - // - // We don't encode unknown schemas, because it's likely that we encode - // something we shouldn't (e.g. `skype:name` treated as `skype:host`) - // - if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) { - try { - parsed.hostname = punycode.toUnicode(parsed.hostname); - } catch (er) { /**/ } - } - } +/***/ }), - // add '%' to exclude list because of https://github.com/markdown-it/markdown-it/issues/720 - return mdurl.decode(mdurl.format(parsed), mdurl.decode.defaultChars + '%'); -} +/***/ 3683: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { +"use strict"; + +exports.getWeek = getWeek; +var _index = __nccwpck_require__(2983); +var _index2 = __nccwpck_require__(7421); +var _index3 = __nccwpck_require__(4966); +var _index4 = __nccwpck_require__(4363); /** - * class MarkdownIt + * The {@link getWeek} function options. + */ + +/** + * @name getWeek + * @category Week Helpers + * @summary Get the local week index of the given date. * - * Main parser/renderer class. + * @description + * Get the local week index of the given date. + * The exact calculation depends on the values of + * `options.weekStartsOn` (which is the index of the first day of the week) + * and `options.firstWeekContainsDate` (which is the day of January, which is always in + * the first week of the week-numbering year) * - * ##### Usage + * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system * - * ```javascript - * // node.js, "classic" way: - * var MarkdownIt = require('markdown-it'), - * md = new MarkdownIt(); - * var result = md.render('# markdown-it rulezz!'); + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * - * // node.js, the same, but with sugar: - * var md = require('markdown-it')(); - * var result = md.render('# markdown-it rulezz!'); + * @param date - The given date + * @param options - An object with options * - * // browser without AMD, added to "window" on script load - * // Note, there are no dash. - * var md = window.markdownit(); - * var result = md.render('# markdown-it rulezz!'); - * ``` + * @returns The week * - * Single line rendering, without paragraph wrap: + * @example + * // Which week of the local week numbering year is 2 January 2005 with default options? + * const result = getWeek(new Date(2005, 0, 2)) + * //=> 2 * - * ```javascript - * var md = require('markdown-it')(); - * var result = md.renderInline('__markdown-it__ rulezz!'); - * ``` - **/ + * @example + * // Which week of the local week numbering year is 2 January 2005, + * // if Monday is the first day of the week, + * // and the first week of the year always contains 4 January? + * const result = getWeek(new Date(2005, 0, 2), { + * weekStartsOn: 1, + * firstWeekContainsDate: 4 + * }) + * //=> 53 + */ + +function getWeek(date, options) { + const _date = (0, _index4.toDate)(date); + const diff = + +(0, _index2.startOfWeek)(_date, options) - + +(0, _index3.startOfWeekYear)(_date, options); + + // Round the number of weeks to the nearest integer because the number of + // milliseconds in a week is not constant (e.g. it's different in the week of + // the daylight saving time clock shift). + return Math.round(diff / _index.millisecondsInWeek) + 1; +} + + +/***/ }), + +/***/ 53: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.getWeekOfMonth = getWeekOfMonth; +var _index = __nccwpck_require__(612); +var _index2 = __nccwpck_require__(5404); +var _index3 = __nccwpck_require__(785); + +var _index4 = __nccwpck_require__(91); /** - * new MarkdownIt([presetName, options]) - * - presetName (String): optional, `commonmark` / `zero` - * - options (Object) - * - * Creates parser instanse with given config. Can be called without `new`. - * - * ##### presetName - * - * MarkdownIt provides named presets as a convenience to quickly - * enable/disable active syntax rules and options for common use cases. - * - * - ["commonmark"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/commonmark.js) - - * configures parser to strict [CommonMark](http://commonmark.org/) mode. - * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.js) - - * similar to GFM, used when no preset name given. Enables all available rules, - * but still without html, typographer & autolinker. - * - ["zero"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/zero.js) - - * all rules disabled. Useful to quickly setup your config via `.enable()`. - * For example, when you need only `bold` and `italic` markup and nothing else. - * - * ##### options: - * - * - __html__ - `false`. Set `true` to enable HTML tags in source. Be careful! - * That's not safe! You may need external sanitizer to protect output from XSS. - * It's better to extend features via plugins, instead of enabling HTML. - * - __xhtmlOut__ - `false`. Set `true` to add '/' when closing single tags - * (`
`). This is needed only for full CommonMark compatibility. In real - * world you will need HTML output. - * - __breaks__ - `false`. Set `true` to convert `\n` in paragraphs into `
`. - * - __langPrefix__ - `language-`. CSS language class prefix for fenced blocks. - * Can be useful for external highlighters. - * - __linkify__ - `false`. Set `true` to autoconvert URL-like text to links. - * - __typographer__ - `false`. Set `true` to enable [some language-neutral - * replacement](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.js) + - * quotes beautification (smartquotes). - * - __quotes__ - `“”‘’`, String or Array. Double + single quotes replacement - * pairs, when typographer enabled and smartquotes on. For example, you can - * use `'«»„“'` for Russian, `'„“‚‘'` for German, and - * `['«\xA0', '\xA0»', '‹\xA0', '\xA0›']` for French (including nbsp). - * - __highlight__ - `null`. Highlighter function for fenced code blocks. - * Highlighter `function (str, lang)` should return escaped HTML. It can also - * return empty string if the source was not changed and should be escaped - * externaly. If result starts with 2 + */ +function getWeekOfMonth(date, options) { + const defaultOptions = (0, _index4.getDefaultOptions)(); + const weekStartsOn = + options?.weekStartsOn ?? + options?.locale?.options?.weekStartsOn ?? + defaultOptions.weekStartsOn ?? + defaultOptions.locale?.options?.weekStartsOn ?? + 0; + + const currentDayOfMonth = (0, _index.getDate)(date); + if (isNaN(currentDayOfMonth)) return NaN; + + const startWeekDay = (0, _index2.getDay)((0, _index3.startOfMonth)(date)); + + let lastDayOfFirstWeek = weekStartsOn - startWeekDay; + if (lastDayOfFirstWeek <= 0) lastDayOfFirstWeek += 7; + + const remainingDaysAfterFirstWeek = currentDayOfMonth - lastDayOfFirstWeek; + return Math.ceil(remainingDaysAfterFirstWeek / 7) + 1; +} + + +/***/ }), + +/***/ 79: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.getWeekYear = getWeekYear; +var _index = __nccwpck_require__(2524); +var _index2 = __nccwpck_require__(7421); +var _index3 = __nccwpck_require__(4363); + +var _index4 = __nccwpck_require__(91); + +/** + * The {@link getWeekYear} function options. + */ + +/** + * @name getWeekYear + * @category Week-Numbering Year Helpers + * @summary Get the local week-numbering year of the given date. * - * ```js - * var hljs = require('highlight.js') // https://highlightjs.org/ + * @description + * Get the local week-numbering year of the given date. + * The exact calculation depends on the values of + * `options.weekStartsOn` (which is the index of the first day of the week) + * and `options.firstWeekContainsDate` (which is the day of January, which is always in + * the first week of the week-numbering year) * - * var md = require('markdown-it')({ - * highlight: function (str, lang) { - * if (lang && hljs.getLanguage(lang)) { - * try { - * return hljs.highlight(str, { language: lang, ignoreIllegals: true }).value; - * } catch (__) {} - * } + * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system * - * return ''; // use external default escaping - * } - * }); - * ``` + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * - * Or with full wrapper override (if you need assign class to `
`):
+ * @param date - The given date
+ * @param options - An object with options.
  *
- * ```javascript
- * var hljs = require('highlight.js') // https://highlightjs.org/
+ * @returns The local week-numbering year
  *
- * // Actual default values
- * var md = require('markdown-it')({
- *   highlight: function (str, lang) {
- *     if (lang && hljs.getLanguage(lang)) {
- *       try {
- *         return '
' +
- *                hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +
- *                '
'; - * } catch (__) {} - * } + * @example + * // Which week numbering year is 26 December 2004 with the default settings? + * const result = getWeekYear(new Date(2004, 11, 26)) + * //=> 2005 * - * return '
' + md.utils.escapeHtml(str) + '
'; - * } - * }); - * ``` + * @example + * // Which week numbering year is 26 December 2004 if week starts on Saturday? + * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 }) + * //=> 2004 * - **/ -function MarkdownIt(presetName, options) { - if (!(this instanceof MarkdownIt)) { - return new MarkdownIt(presetName, options); - } - - if (!options) { - if (!utils.isString(presetName)) { - options = presetName || {}; - presetName = 'default'; - } - } - - /** - * MarkdownIt#inline -> ParserInline - * - * Instance of [[ParserInline]]. You may need it to add new rules when - * writing plugins. For simple rules control use [[MarkdownIt.disable]] and - * [[MarkdownIt.enable]]. - **/ - this.inline = new ParserInline(); - - /** - * MarkdownIt#block -> ParserBlock - * - * Instance of [[ParserBlock]]. You may need it to add new rules when - * writing plugins. For simple rules control use [[MarkdownIt.disable]] and - * [[MarkdownIt.enable]]. - **/ - this.block = new ParserBlock(); + * @example + * // Which week numbering year is 26 December 2004 if the first week contains 4 January? + * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 }) + * //=> 2004 + */ +function getWeekYear(date, options) { + const _date = (0, _index3.toDate)(date); + const year = _date.getFullYear(); + + const defaultOptions = (0, _index4.getDefaultOptions)(); + const firstWeekContainsDate = + options?.firstWeekContainsDate ?? + options?.locale?.options?.firstWeekContainsDate ?? + defaultOptions.firstWeekContainsDate ?? + defaultOptions.locale?.options?.firstWeekContainsDate ?? + 1; + + const firstWeekOfNextYear = (0, _index.constructFrom)(date, 0); + firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate); + firstWeekOfNextYear.setHours(0, 0, 0, 0); + const startOfNextYear = (0, _index2.startOfWeek)( + firstWeekOfNextYear, + options, + ); - /** - * MarkdownIt#core -> Core - * - * Instance of [[Core]] chain executor. You may need it to add new rules when - * writing plugins. For simple rules control use [[MarkdownIt.disable]] and - * [[MarkdownIt.enable]]. - **/ - this.core = new ParserCore(); + const firstWeekOfThisYear = (0, _index.constructFrom)(date, 0); + firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate); + firstWeekOfThisYear.setHours(0, 0, 0, 0); + const startOfThisYear = (0, _index2.startOfWeek)( + firstWeekOfThisYear, + options, + ); - /** - * MarkdownIt#renderer -> Renderer - * - * Instance of [[Renderer]]. Use it to modify output look. Or to add rendering - * rules for new token types, generated by plugins. - * - * ##### Example - * - * ```javascript - * var md = require('markdown-it')(); - * - * function myToken(tokens, idx, options, env, self) { - * //... - * return result; - * }; - * - * md.renderer.rules['my_token'] = myToken - * ``` - * - * See [[Renderer]] docs and [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js). - **/ - this.renderer = new Renderer(); + if (_date.getTime() >= startOfNextYear.getTime()) { + return year + 1; + } else if (_date.getTime() >= startOfThisYear.getTime()) { + return year; + } else { + return year - 1; + } +} - /** - * MarkdownIt#linkify -> LinkifyIt - * - * [linkify-it](https://github.com/markdown-it/linkify-it) instance. - * Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/linkify.js) - * rule. - **/ - this.linkify = new LinkifyIt(); - /** - * MarkdownIt#validateLink(url) -> Boolean - * - * Link validation function. CommonMark allows too much in links. By default - * we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas - * except some embedded image types. - * - * You can change this behaviour: - * - * ```javascript - * var md = require('markdown-it')(); - * // enable everything - * md.validateLink = function () { return true; } - * ``` - **/ - this.validateLink = validateLink; +/***/ }), - /** - * MarkdownIt#normalizeLink(url) -> String - * - * Function used to encode link url to a machine-readable format, - * which includes url-encoding, punycode, etc. - **/ - this.normalizeLink = normalizeLink; +/***/ 3471: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - /** - * MarkdownIt#normalizeLinkText(url) -> String - * - * Function used to decode link url to a human-readable format` - **/ - this.normalizeLinkText = normalizeLinkText; +"use strict"; +exports.getWeeksInMonth = getWeeksInMonth; +var _index = __nccwpck_require__(4494); +var _index2 = __nccwpck_require__(4276); +var _index3 = __nccwpck_require__(785); - // Expose utils & helpers for easy acces from plugins +/** + * The {@link getWeeksInMonth} function options. + */ - /** - * MarkdownIt#utils -> utils - * - * Assorted utility functions, useful to write plugins. See details - * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/common/utils.js). - **/ - this.utils = utils; +/** + * @name getWeeksInMonth + * @category Week Helpers + * @summary Get the number of calendar weeks a month spans. + * + * @description + * Get the number of calendar weeks the month in the given date spans. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The given date + * @param options - An object with options. + * + * @returns The number of calendar weeks + * + * @example + * // How many calendar weeks does February 2015 span? + * const result = getWeeksInMonth(new Date(2015, 1, 8)) + * //=> 4 + * + * @example + * // If the week starts on Monday, + * // how many calendar weeks does July 2017 span? + * const result = getWeeksInMonth(new Date(2017, 6, 5), { weekStartsOn: 1 }) + * //=> 6 + */ +function getWeeksInMonth(date, options) { + return ( + (0, _index.differenceInCalendarWeeks)( + (0, _index2.lastDayOfMonth)(date), + (0, _index3.startOfMonth)(date), + options, + ) + 1 + ); +} - /** - * MarkdownIt#helpers -> helpers - * - * Link components parser functions, useful to write plugins. See details - * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/helpers). - **/ - this.helpers = utils.assign({}, helpers); +/***/ }), - this.options = {}; - this.configure(presetName); +/***/ 6362: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - if (options) { this.set(options); } -} +"use strict"; +exports.getYear = getYear; +var _index = __nccwpck_require__(4363); -/** chainable - * MarkdownIt.set(options) - * - * Set parser options (in the same format as in constructor). Probably, you - * will never need it, but you can change options after constructor call. +/** + * @name getYear + * @category Year Helpers + * @summary Get the year of the given date. * - * ##### Example + * @description + * Get the year of the given date. * - * ```javascript - * var md = require('markdown-it')() - * .set({ html: true, breaks: true }) - * .set({ typographer, true }); - * ``` + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * - * __Note:__ To achieve the best possible performance, don't modify a - * `markdown-it` instance options on the fly. If you need multiple configurations - * it's best to create multiple instances and initialize each with separate - * config. - **/ -MarkdownIt.prototype.set = function (options) { - utils.assign(this.options, options); - return this; -}; - - -/** chainable, internal - * MarkdownIt.configure(presets) + * @param date - The given date * - * Batch load of all options and compenent settings. This is internal method, - * and you probably will not need it. But if you will - see available presets - * and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/lib/presets) + * @returns The year * - * We strongly recommend to use presets instead of direct config loads. That - * will give better compatibility with next versions. - **/ -MarkdownIt.prototype.configure = function (presets) { - var self = this, presetName; + * @example + * // Which year is 2 July 2014? + * const result = getYear(new Date(2014, 6, 2)) + * //=> 2014 + */ +function getYear(date) { + return (0, _index.toDate)(date).getFullYear(); +} - if (utils.isString(presets)) { - presetName = presets; - presets = config[presetName]; - if (!presets) { throw new Error('Wrong `markdown-it` preset "' + presetName + '", check name'); } - } - if (!presets) { throw new Error('Wrong `markdown-it` preset, can\'t be empty'); } +/***/ }), - if (presets.options) { self.set(presets.options); } +/***/ 4907: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - if (presets.components) { - Object.keys(presets.components).forEach(function (name) { - if (presets.components[name].rules) { - self[name].ruler.enableOnly(presets.components[name].rules); - } - if (presets.components[name].rules2) { - self[name].ruler2.enableOnly(presets.components[name].rules2); - } - }); - } - return this; -}; +"use strict"; +exports.hoursToMilliseconds = hoursToMilliseconds; +var _index = __nccwpck_require__(2983); -/** chainable - * MarkdownIt.enable(list, ignoreInvalid) - * - list (String|Array): rule name or list of rule names to enable - * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found. +/** + * @name hoursToMilliseconds + * @category Conversion Helpers + * @summary Convert hours to milliseconds. * - * Enable list or rules. It will automatically find appropriate components, - * containing rules with given names. If rule not found, and `ignoreInvalid` - * not set - throws exception. + * @description + * Convert a number of hours to a full number of milliseconds. * - * ##### Example + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * - * ```javascript - * var md = require('markdown-it')() - * .enable(['sub', 'sup']) - * .disable('smartquotes'); - * ``` - **/ -MarkdownIt.prototype.enable = function (list, ignoreInvalid) { - var result = []; - - if (!Array.isArray(list)) { list = [ list ]; } - - [ 'core', 'block', 'inline' ].forEach(function (chain) { - result = result.concat(this[chain].ruler.enable(list, true)); - }, this); + * @param hours - number of hours to be converted + * + * @returns The number of hours converted to milliseconds + * + * @example + * // Convert 2 hours to milliseconds: + * const result = hoursToMilliseconds(2) + * //=> 7200000 + */ +function hoursToMilliseconds(hours) { + return Math.trunc(hours * _index.millisecondsInHour); +} - result = result.concat(this.inline.ruler2.enable(list, true)); - var missed = list.filter(function (name) { return result.indexOf(name) < 0; }); +/***/ }), - if (missed.length && !ignoreInvalid) { - throw new Error('MarkdownIt. Failed to enable unknown rule(s): ' + missed); - } +/***/ 9538: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - return this; -}; +"use strict"; +exports.hoursToMinutes = hoursToMinutes; +var _index = __nccwpck_require__(2983); -/** chainable - * MarkdownIt.disable(list, ignoreInvalid) - * - list (String|Array): rule name or list of rule names to disable. - * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found. +/** + * @name hoursToMinutes + * @category Conversion Helpers + * @summary Convert hours to minutes. * - * The same as [[MarkdownIt.enable]], but turn specified rules off. - **/ -MarkdownIt.prototype.disable = function (list, ignoreInvalid) { - var result = []; - - if (!Array.isArray(list)) { list = [ list ]; } + * @description + * Convert a number of hours to a full number of minutes. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param hours - number of hours to be converted + * + * @returns The number of hours converted in minutes + * + * @example + * // Convert 2 hours to minutes: + * const result = hoursToMinutes(2) + * //=> 120 + */ +function hoursToMinutes(hours) { + return Math.trunc(hours * _index.minutesInHour); +} - [ 'core', 'block', 'inline' ].forEach(function (chain) { - result = result.concat(this[chain].ruler.disable(list, true)); - }, this); - result = result.concat(this.inline.ruler2.disable(list, true)); +/***/ }), - var missed = list.filter(function (name) { return result.indexOf(name) < 0; }); +/***/ 6726: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - if (missed.length && !ignoreInvalid) { - throw new Error('MarkdownIt. Failed to disable unknown rule(s): ' + missed); - } - return this; -}; +"use strict"; +exports.hoursToSeconds = hoursToSeconds; +var _index = __nccwpck_require__(2983); -/** chainable - * MarkdownIt.use(plugin, params) +/** + * @name hoursToSeconds + * @category Conversion Helpers + * @summary Convert hours to seconds. * - * Load specified plugin with given params into current parser instance. - * It's just a sugar to call `plugin(md, params)` with curring. + * @description + * Convert a number of hours to a full number of seconds. * - * ##### Example + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * - * ```javascript - * var iterator = require('markdown-it-for-inline'); - * var md = require('markdown-it')() - * .use(iterator, 'foo_replace', 'text', function (tokens, idx) { - * tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar'); - * }); - * ``` - **/ -MarkdownIt.prototype.use = function (plugin /*, params, ... */) { - var args = [ this ].concat(Array.prototype.slice.call(arguments, 1)); - plugin.apply(plugin, args); - return this; -}; - - -/** internal - * MarkdownIt.parse(src, env) -> Array - * - src (String): source string - * - env (Object): environment sandbox + * @param hours - The number of hours to be converted * - * Parse input string and return list of block tokens (special token type - * "inline" will contain list of inline tokens). You should not call this - * method directly, until you write custom renderer (for example, to produce - * AST). + * @returns The number of hours converted in seconds * - * `env` is used to pass data between "distributed" rules and return additional - * metadata like reference info, needed for the renderer. It also can be used to - * inject data in specific cases. Usually, you will be ok to pass `{}`, - * and then pass updated object to renderer. - **/ -MarkdownIt.prototype.parse = function (src, env) { - if (typeof src !== 'string') { - throw new Error('Input data should be a String'); - } + * @example + * // Convert 2 hours to seconds: + * const result = hoursToSeconds(2) + * //=> 7200 + */ +function hoursToSeconds(hours) { + return Math.trunc(hours * _index.secondsInHour); +} - var state = new this.core.State(src, this, env); - this.core.process(state); +/***/ }), - return state.tokens; -}; +/***/ 6044: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { +"use strict"; -/** - * MarkdownIt.render(src [, env]) -> String - * - src (String): source string - * - env (Object): environment sandbox + +var _index = __nccwpck_require__(3350); +Object.keys(_index).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index[key]; + }, + }); +}); +var _index2 = __nccwpck_require__(6976); +Object.keys(_index2).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index2[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index2[key]; + }, + }); +}); +var _index3 = __nccwpck_require__(6520); +Object.keys(_index3).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index3[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index3[key]; + }, + }); +}); +var _index4 = __nccwpck_require__(592); +Object.keys(_index4).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index4[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index4[key]; + }, + }); +}); +var _index5 = __nccwpck_require__(990); +Object.keys(_index5).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index5[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index5[key]; + }, + }); +}); +var _index6 = __nccwpck_require__(9116); +Object.keys(_index6).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index6[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index6[key]; + }, + }); +}); +var _index7 = __nccwpck_require__(8158); +Object.keys(_index7).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index7[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index7[key]; + }, + }); +}); +var _index8 = __nccwpck_require__(2096); +Object.keys(_index8).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index8[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index8[key]; + }, + }); +}); +var _index9 = __nccwpck_require__(314); +Object.keys(_index9).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index9[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index9[key]; + }, + }); +}); +var _index10 = __nccwpck_require__(4595); +Object.keys(_index10).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index10[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index10[key]; + }, + }); +}); +var _index11 = __nccwpck_require__(6178); +Object.keys(_index11).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index11[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index11[key]; + }, + }); +}); +var _index12 = __nccwpck_require__(3564); +Object.keys(_index12).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index12[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index12[key]; + }, + }); +}); +var _index13 = __nccwpck_require__(8948); +Object.keys(_index13).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index13[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index13[key]; + }, + }); +}); +var _index14 = __nccwpck_require__(5343); +Object.keys(_index14).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index14[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index14[key]; + }, + }); +}); +var _index15 = __nccwpck_require__(3190); +Object.keys(_index15).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index15[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index15[key]; + }, + }); +}); +var _index16 = __nccwpck_require__(591); +Object.keys(_index16).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index16[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index16[key]; + }, + }); +}); +var _index17 = __nccwpck_require__(2189); +Object.keys(_index17).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index17[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index17[key]; + }, + }); +}); +var _index18 = __nccwpck_require__(6234); +Object.keys(_index18).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index18[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index18[key]; + }, + }); +}); +var _index19 = __nccwpck_require__(2524); +Object.keys(_index19).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index19[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index19[key]; + }, + }); +}); +var _index20 = __nccwpck_require__(1105); +Object.keys(_index20).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index20[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index20[key]; + }, + }); +}); +var _index21 = __nccwpck_require__(5448); +Object.keys(_index21).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index21[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index21[key]; + }, + }); +}); +var _index22 = __nccwpck_require__(2859); +Object.keys(_index22).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index22[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index22[key]; + }, + }); +}); +var _index23 = __nccwpck_require__(6255); +Object.keys(_index23).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index23[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index23[key]; + }, + }); +}); +var _index24 = __nccwpck_require__(3223); +Object.keys(_index24).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index24[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index24[key]; + }, + }); +}); +var _index25 = __nccwpck_require__(3539); +Object.keys(_index25).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index25[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index25[key]; + }, + }); +}); +var _index26 = __nccwpck_require__(9449); +Object.keys(_index26).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index26[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index26[key]; + }, + }); +}); +var _index27 = __nccwpck_require__(3966); +Object.keys(_index27).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index27[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index27[key]; + }, + }); +}); +var _index28 = __nccwpck_require__(4494); +Object.keys(_index28).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index28[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index28[key]; + }, + }); +}); +var _index29 = __nccwpck_require__(8667); +Object.keys(_index29).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index29[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index29[key]; + }, + }); +}); +var _index30 = __nccwpck_require__(7263); +Object.keys(_index30).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index30[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index30[key]; + }, + }); +}); +var _index31 = __nccwpck_require__(6891); +Object.keys(_index31).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index31[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index31[key]; + }, + }); +}); +var _index32 = __nccwpck_require__(6901); +Object.keys(_index32).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index32[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index32[key]; + }, + }); +}); +var _index33 = __nccwpck_require__(8632); +Object.keys(_index33).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index33[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index33[key]; + }, + }); +}); +var _index34 = __nccwpck_require__(8892); +Object.keys(_index34).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index34[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index34[key]; + }, + }); +}); +var _index35 = __nccwpck_require__(2256); +Object.keys(_index35).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index35[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index35[key]; + }, + }); +}); +var _index36 = __nccwpck_require__(9498); +Object.keys(_index36).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index36[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index36[key]; + }, + }); +}); +var _index37 = __nccwpck_require__(4146); +Object.keys(_index37).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index37[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index37[key]; + }, + }); +}); +var _index38 = __nccwpck_require__(2320); +Object.keys(_index38).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index38[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index38[key]; + }, + }); +}); +var _index39 = __nccwpck_require__(2776); +Object.keys(_index39).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index39[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index39[key]; + }, + }); +}); +var _index40 = __nccwpck_require__(4003); +Object.keys(_index40).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index40[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index40[key]; + }, + }); +}); +var _index41 = __nccwpck_require__(6210); +Object.keys(_index41).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index41[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index41[key]; + }, + }); +}); +var _index42 = __nccwpck_require__(3944); +Object.keys(_index42).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index42[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index42[key]; + }, + }); +}); +var _index43 = __nccwpck_require__(9282); +Object.keys(_index43).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index43[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index43[key]; + }, + }); +}); +var _index44 = __nccwpck_require__(7094); +Object.keys(_index44).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index44[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index44[key]; + }, + }); +}); +var _index45 = __nccwpck_require__(8334); +Object.keys(_index45).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index45[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index45[key]; + }, + }); +}); +var _index46 = __nccwpck_require__(8409); +Object.keys(_index46).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index46[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index46[key]; + }, + }); +}); +var _index47 = __nccwpck_require__(4094); +Object.keys(_index47).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index47[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index47[key]; + }, + }); +}); +var _index48 = __nccwpck_require__(5622); +Object.keys(_index48).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index48[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index48[key]; + }, + }); +}); +var _index49 = __nccwpck_require__(3700); +Object.keys(_index49).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index49[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index49[key]; + }, + }); +}); +var _index50 = __nccwpck_require__(4821); +Object.keys(_index50).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index50[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index50[key]; + }, + }); +}); +var _index51 = __nccwpck_require__(7027); +Object.keys(_index51).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index51[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index51[key]; + }, + }); +}); +var _index52 = __nccwpck_require__(4725); +Object.keys(_index52).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index52[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index52[key]; + }, + }); +}); +var _index53 = __nccwpck_require__(2290); +Object.keys(_index53).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index53[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index53[key]; + }, + }); +}); +var _index54 = __nccwpck_require__(4588); +Object.keys(_index54).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index54[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index54[key]; + }, + }); +}); +var _index55 = __nccwpck_require__(1328); +Object.keys(_index55).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index55[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index55[key]; + }, + }); +}); +var _index56 = __nccwpck_require__(4810); +Object.keys(_index56).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index56[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index56[key]; + }, + }); +}); +var _index57 = __nccwpck_require__(1561); +Object.keys(_index57).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index57[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index57[key]; + }, + }); +}); +var _index58 = __nccwpck_require__(9655); +Object.keys(_index58).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index58[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index58[key]; + }, + }); +}); +var _index59 = __nccwpck_require__(7980); +Object.keys(_index59).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index59[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index59[key]; + }, + }); +}); +var _index60 = __nccwpck_require__(7064); +Object.keys(_index60).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index60[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index60[key]; + }, + }); +}); +var _index61 = __nccwpck_require__(2974); +Object.keys(_index61).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index61[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index61[key]; + }, + }); +}); +var _index62 = __nccwpck_require__(8126); +Object.keys(_index62).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index62[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index62[key]; + }, + }); +}); +var _index63 = __nccwpck_require__(8609); +Object.keys(_index63).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index63[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index63[key]; + }, + }); +}); +var _index64 = __nccwpck_require__(7862); +Object.keys(_index64).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index64[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index64[key]; + }, + }); +}); +var _index65 = __nccwpck_require__(5890); +Object.keys(_index65).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index65[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index65[key]; + }, + }); +}); +var _index66 = __nccwpck_require__(935); +Object.keys(_index66).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index66[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index66[key]; + }, + }); +}); +var _index67 = __nccwpck_require__(6132); +Object.keys(_index67).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index67[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index67[key]; + }, + }); +}); +var _index68 = __nccwpck_require__(9693); +Object.keys(_index68).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index68[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index68[key]; + }, + }); +}); +var _index69 = __nccwpck_require__(10); +Object.keys(_index69).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index69[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index69[key]; + }, + }); +}); +var _index70 = __nccwpck_require__(1474); +Object.keys(_index70).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index70[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index70[key]; + }, + }); +}); +var _index71 = __nccwpck_require__(3317); +Object.keys(_index71).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index71[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index71[key]; + }, + }); +}); +var _index72 = __nccwpck_require__(469); +Object.keys(_index72).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index72[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index72[key]; + }, + }); +}); +var _index73 = __nccwpck_require__(8517); +Object.keys(_index73).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index73[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index73[key]; + }, + }); +}); +var _index74 = __nccwpck_require__(5771); +Object.keys(_index74).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index74[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index74[key]; + }, + }); +}); +var _index75 = __nccwpck_require__(5893); +Object.keys(_index75).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index75[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index75[key]; + }, + }); +}); +var _index76 = __nccwpck_require__(2201); +Object.keys(_index76).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index76[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index76[key]; + }, + }); +}); +var _index77 = __nccwpck_require__(612); +Object.keys(_index77).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index77[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index77[key]; + }, + }); +}); +var _index78 = __nccwpck_require__(5404); +Object.keys(_index78).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index78[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index78[key]; + }, + }); +}); +var _index79 = __nccwpck_require__(4243); +Object.keys(_index79).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index79[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index79[key]; + }, + }); +}); +var _index80 = __nccwpck_require__(9163); +Object.keys(_index80).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index80[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index80[key]; + }, + }); +}); +var _index81 = __nccwpck_require__(3607); +Object.keys(_index81).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index81[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index81[key]; + }, + }); +}); +var _index82 = __nccwpck_require__(9144); +Object.keys(_index82).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index82[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index82[key]; + }, + }); +}); +var _index83 = __nccwpck_require__(9380); +Object.keys(_index83).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index83[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index83[key]; + }, + }); +}); +var _index84 = __nccwpck_require__(4378); +Object.keys(_index84).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index84[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index84[key]; + }, + }); +}); +var _index85 = __nccwpck_require__(2487); +Object.keys(_index85).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index85[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index85[key]; + }, + }); +}); +var _index86 = __nccwpck_require__(2482); +Object.keys(_index86).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index86[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index86[key]; + }, + }); +}); +var _index87 = __nccwpck_require__(7569); +Object.keys(_index87).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index87[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index87[key]; + }, + }); +}); +var _index88 = __nccwpck_require__(8688); +Object.keys(_index88).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index88[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index88[key]; + }, + }); +}); +var _index89 = __nccwpck_require__(4168); +Object.keys(_index89).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index89[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index89[key]; + }, + }); +}); +var _index90 = __nccwpck_require__(8205); +Object.keys(_index90).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index90[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index90[key]; + }, + }); +}); +var _index91 = __nccwpck_require__(1436); +Object.keys(_index91).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index91[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index91[key]; + }, + }); +}); +var _index92 = __nccwpck_require__(4628); +Object.keys(_index92).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index92[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index92[key]; + }, + }); +}); +var _index93 = __nccwpck_require__(6349); +Object.keys(_index93).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index93[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index93[key]; + }, + }); +}); +var _index94 = __nccwpck_require__(3663); +Object.keys(_index94).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index94[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index94[key]; + }, + }); +}); +var _index95 = __nccwpck_require__(7436); +Object.keys(_index95).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index95[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index95[key]; + }, + }); +}); +var _index96 = __nccwpck_require__(5264); +Object.keys(_index96).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index96[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index96[key]; + }, + }); +}); +var _index97 = __nccwpck_require__(3683); +Object.keys(_index97).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index97[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index97[key]; + }, + }); +}); +var _index98 = __nccwpck_require__(53); +Object.keys(_index98).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index98[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index98[key]; + }, + }); +}); +var _index99 = __nccwpck_require__(79); +Object.keys(_index99).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index99[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index99[key]; + }, + }); +}); +var _index100 = __nccwpck_require__(3471); +Object.keys(_index100).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index100[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index100[key]; + }, + }); +}); +var _index101 = __nccwpck_require__(6362); +Object.keys(_index101).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index101[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index101[key]; + }, + }); +}); +var _index102 = __nccwpck_require__(4907); +Object.keys(_index102).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index102[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index102[key]; + }, + }); +}); +var _index103 = __nccwpck_require__(9538); +Object.keys(_index103).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index103[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index103[key]; + }, + }); +}); +var _index104 = __nccwpck_require__(6726); +Object.keys(_index104).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index104[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index104[key]; + }, + }); +}); +var _index105 = __nccwpck_require__(7683); +Object.keys(_index105).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index105[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index105[key]; + }, + }); +}); +var _index106 = __nccwpck_require__(4927); +Object.keys(_index106).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index106[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index106[key]; + }, + }); +}); +var _index107 = __nccwpck_require__(1026); +Object.keys(_index107).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index107[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index107[key]; + }, + }); +}); +var _index108 = __nccwpck_require__(4601); +Object.keys(_index108).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index108[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index108[key]; + }, + }); +}); +var _index109 = __nccwpck_require__(5606); +Object.keys(_index109).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index109[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index109[key]; + }, + }); +}); +var _index110 = __nccwpck_require__(8715); +Object.keys(_index110).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index110[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index110[key]; + }, + }); +}); +var _index111 = __nccwpck_require__(8395); +Object.keys(_index111).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index111[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index111[key]; + }, + }); +}); +var _index112 = __nccwpck_require__(2792); +Object.keys(_index112).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index112[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index112[key]; + }, + }); +}); +var _index113 = __nccwpck_require__(4268); +Object.keys(_index113).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index113[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index113[key]; + }, + }); +}); +var _index114 = __nccwpck_require__(203); +Object.keys(_index114).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index114[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index114[key]; + }, + }); +}); +var _index115 = __nccwpck_require__(8574); +Object.keys(_index115).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index115[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index115[key]; + }, + }); +}); +var _index116 = __nccwpck_require__(3965); +Object.keys(_index116).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index116[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index116[key]; + }, + }); +}); +var _index117 = __nccwpck_require__(8377); +Object.keys(_index117).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index117[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index117[key]; + }, + }); +}); +var _index118 = __nccwpck_require__(5288); +Object.keys(_index118).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index118[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index118[key]; + }, + }); +}); +var _index119 = __nccwpck_require__(7894); +Object.keys(_index119).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index119[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index119[key]; + }, + }); +}); +var _index120 = __nccwpck_require__(4753); +Object.keys(_index120).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index120[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index120[key]; + }, + }); +}); +var _index121 = __nccwpck_require__(7728); +Object.keys(_index121).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index121[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index121[key]; + }, + }); +}); +var _index122 = __nccwpck_require__(6803); +Object.keys(_index122).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index122[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index122[key]; + }, + }); +}); +var _index123 = __nccwpck_require__(7366); +Object.keys(_index123).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index123[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index123[key]; + }, + }); +}); +var _index124 = __nccwpck_require__(7069); +Object.keys(_index124).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index124[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index124[key]; + }, + }); +}); +var _index125 = __nccwpck_require__(7038); +Object.keys(_index125).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index125[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index125[key]; + }, + }); +}); +var _index126 = __nccwpck_require__(2166); +Object.keys(_index126).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index126[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index126[key]; + }, + }); +}); +var _index127 = __nccwpck_require__(3183); +Object.keys(_index127).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index127[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index127[key]; + }, + }); +}); +var _index128 = __nccwpck_require__(9642); +Object.keys(_index128).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index128[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index128[key]; + }, + }); +}); +var _index129 = __nccwpck_require__(7187); +Object.keys(_index129).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index129[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index129[key]; + }, + }); +}); +var _index130 = __nccwpck_require__(6810); +Object.keys(_index130).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index130[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index130[key]; + }, + }); +}); +var _index131 = __nccwpck_require__(5972); +Object.keys(_index131).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index131[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index131[key]; + }, + }); +}); +var _index132 = __nccwpck_require__(1627); +Object.keys(_index132).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index132[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index132[key]; + }, + }); +}); +var _index133 = __nccwpck_require__(6169); +Object.keys(_index133).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index133[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index133[key]; + }, + }); +}); +var _index134 = __nccwpck_require__(3875); +Object.keys(_index134).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index134[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index134[key]; + }, + }); +}); +var _index135 = __nccwpck_require__(4859); +Object.keys(_index135).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index135[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index135[key]; + }, + }); +}); +var _index136 = __nccwpck_require__(4111); +Object.keys(_index136).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index136[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index136[key]; + }, + }); +}); +var _index137 = __nccwpck_require__(4002); +Object.keys(_index137).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index137[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index137[key]; + }, + }); +}); +var _index138 = __nccwpck_require__(8916); +Object.keys(_index138).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index138[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index138[key]; + }, + }); +}); +var _index139 = __nccwpck_require__(1375); +Object.keys(_index139).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index139[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index139[key]; + }, + }); +}); +var _index140 = __nccwpck_require__(9325); +Object.keys(_index140).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index140[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index140[key]; + }, + }); +}); +var _index141 = __nccwpck_require__(54); +Object.keys(_index141).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index141[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index141[key]; + }, + }); +}); +var _index142 = __nccwpck_require__(8817); +Object.keys(_index142).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index142[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index142[key]; + }, + }); +}); +var _index143 = __nccwpck_require__(1238); +Object.keys(_index143).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index143[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index143[key]; + }, + }); +}); +var _index144 = __nccwpck_require__(2447); +Object.keys(_index144).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index144[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index144[key]; + }, + }); +}); +var _index145 = __nccwpck_require__(3526); +Object.keys(_index145).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index145[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index145[key]; + }, + }); +}); +var _index146 = __nccwpck_require__(6623); +Object.keys(_index146).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index146[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index146[key]; + }, + }); +}); +var _index147 = __nccwpck_require__(459); +Object.keys(_index147).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index147[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index147[key]; + }, + }); +}); +var _index148 = __nccwpck_require__(2989); +Object.keys(_index148).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index148[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index148[key]; + }, + }); +}); +var _index149 = __nccwpck_require__(3467); +Object.keys(_index149).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index149[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index149[key]; + }, + }); +}); +var _index150 = __nccwpck_require__(1183); +Object.keys(_index150).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index150[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index150[key]; + }, + }); +}); +var _index151 = __nccwpck_require__(6304); +Object.keys(_index151).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index151[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index151[key]; + }, + }); +}); +var _index152 = __nccwpck_require__(1231); +Object.keys(_index152).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index152[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index152[key]; + }, + }); +}); +var _index153 = __nccwpck_require__(3113); +Object.keys(_index153).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index153[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index153[key]; + }, + }); +}); +var _index154 = __nccwpck_require__(4276); +Object.keys(_index154).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index154[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index154[key]; + }, + }); +}); +var _index155 = __nccwpck_require__(8420); +Object.keys(_index155).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index155[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index155[key]; + }, + }); +}); +var _index156 = __nccwpck_require__(6697); +Object.keys(_index156).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index156[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index156[key]; + }, + }); +}); +var _index157 = __nccwpck_require__(8645); +Object.keys(_index157).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index157[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index157[key]; + }, + }); +}); +var _index158 = __nccwpck_require__(753); +Object.keys(_index158).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index158[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index158[key]; + }, + }); +}); +var _index159 = __nccwpck_require__(1321); +Object.keys(_index159).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index159[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index159[key]; + }, + }); +}); +var _index160 = __nccwpck_require__(4603); +Object.keys(_index160).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index160[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index160[key]; + }, + }); +}); +var _index161 = __nccwpck_require__(1257); +Object.keys(_index161).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index161[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index161[key]; + }, + }); +}); +var _index162 = __nccwpck_require__(2675); +Object.keys(_index162).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index162[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index162[key]; + }, + }); +}); +var _index163 = __nccwpck_require__(8124); +Object.keys(_index163).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index163[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index163[key]; + }, + }); +}); +var _index164 = __nccwpck_require__(4143); +Object.keys(_index164).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index164[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index164[key]; + }, + }); +}); +var _index165 = __nccwpck_require__(4660); +Object.keys(_index165).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index165[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index165[key]; + }, + }); +}); +var _index166 = __nccwpck_require__(4807); +Object.keys(_index166).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index166[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index166[key]; + }, + }); +}); +var _index167 = __nccwpck_require__(9448); +Object.keys(_index167).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index167[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index167[key]; + }, + }); +}); +var _index168 = __nccwpck_require__(8799); +Object.keys(_index168).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index168[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index168[key]; + }, + }); +}); +var _index169 = __nccwpck_require__(2274); +Object.keys(_index169).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index169[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index169[key]; + }, + }); +}); +var _index170 = __nccwpck_require__(2355); +Object.keys(_index170).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index170[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index170[key]; + }, + }); +}); +var _index171 = __nccwpck_require__(1879); +Object.keys(_index171).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index171[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index171[key]; + }, + }); +}); +var _index172 = __nccwpck_require__(1373); +Object.keys(_index172).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index172[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index172[key]; + }, + }); +}); +var _index173 = __nccwpck_require__(5672); +Object.keys(_index173).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index173[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index173[key]; + }, + }); +}); +var _index174 = __nccwpck_require__(3870); +Object.keys(_index174).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index174[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index174[key]; + }, + }); +}); +var _index175 = __nccwpck_require__(2066); +Object.keys(_index175).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index175[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index175[key]; + }, + }); +}); +var _index176 = __nccwpck_require__(8044); +Object.keys(_index176).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index176[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index176[key]; + }, + }); +}); +var _index177 = __nccwpck_require__(7415); +Object.keys(_index177).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index177[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index177[key]; + }, + }); +}); +var _index178 = __nccwpck_require__(7784); +Object.keys(_index178).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index178[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index178[key]; + }, + }); +}); +var _index179 = __nccwpck_require__(5230); +Object.keys(_index179).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index179[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index179[key]; + }, + }); +}); +var _index180 = __nccwpck_require__(8852); +Object.keys(_index180).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index180[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index180[key]; + }, + }); +}); +var _index181 = __nccwpck_require__(3056); +Object.keys(_index181).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index181[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index181[key]; + }, + }); +}); +var _index182 = __nccwpck_require__(2742); +Object.keys(_index182).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index182[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index182[key]; + }, + }); +}); +var _index183 = __nccwpck_require__(48); +Object.keys(_index183).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index183[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index183[key]; + }, + }); +}); +var _index184 = __nccwpck_require__(8867); +Object.keys(_index184).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index184[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index184[key]; + }, + }); +}); +var _index185 = __nccwpck_require__(8045); +Object.keys(_index185).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index185[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index185[key]; + }, + }); +}); +var _index186 = __nccwpck_require__(5118); +Object.keys(_index186).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index186[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index186[key]; + }, + }); +}); +var _index187 = __nccwpck_require__(1541); +Object.keys(_index187).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index187[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index187[key]; + }, + }); +}); +var _index188 = __nccwpck_require__(2404); +Object.keys(_index188).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index188[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index188[key]; + }, + }); +}); +var _index189 = __nccwpck_require__(360); +Object.keys(_index189).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index189[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index189[key]; + }, + }); +}); +var _index190 = __nccwpck_require__(5334); +Object.keys(_index190).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index190[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index190[key]; + }, + }); +}); +var _index191 = __nccwpck_require__(1659); +Object.keys(_index191).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index191[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index191[key]; + }, + }); +}); +var _index192 = __nccwpck_require__(3255); +Object.keys(_index192).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index192[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index192[key]; + }, + }); +}); +var _index193 = __nccwpck_require__(6426); +Object.keys(_index193).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index193[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index193[key]; + }, + }); +}); +var _index194 = __nccwpck_require__(5131); +Object.keys(_index194).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index194[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index194[key]; + }, + }); +}); +var _index195 = __nccwpck_require__(9738); +Object.keys(_index195).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index195[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index195[key]; + }, + }); +}); +var _index196 = __nccwpck_require__(5178); +Object.keys(_index196).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index196[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index196[key]; + }, + }); +}); +var _index197 = __nccwpck_require__(4664); +Object.keys(_index197).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index197[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index197[key]; + }, + }); +}); +var _index198 = __nccwpck_require__(8952); +Object.keys(_index198).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index198[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index198[key]; + }, + }); +}); +var _index199 = __nccwpck_require__(4175); +Object.keys(_index199).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index199[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index199[key]; + }, + }); +}); +var _index200 = __nccwpck_require__(1106); +Object.keys(_index200).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index200[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index200[key]; + }, + }); +}); +var _index201 = __nccwpck_require__(8872); +Object.keys(_index201).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index201[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index201[key]; + }, + }); +}); +var _index202 = __nccwpck_require__(4794); +Object.keys(_index202).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index202[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index202[key]; + }, + }); +}); +var _index203 = __nccwpck_require__(8198); +Object.keys(_index203).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index203[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index203[key]; + }, + }); +}); +var _index204 = __nccwpck_require__(7489); +Object.keys(_index204).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index204[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index204[key]; + }, + }); +}); +var _index205 = __nccwpck_require__(8449); +Object.keys(_index205).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index205[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index205[key]; + }, + }); +}); +var _index206 = __nccwpck_require__(4305); +Object.keys(_index206).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index206[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index206[key]; + }, + }); +}); +var _index207 = __nccwpck_require__(5484); +Object.keys(_index207).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index207[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index207[key]; + }, + }); +}); +var _index208 = __nccwpck_require__(8435); +Object.keys(_index208).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index208[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index208[key]; + }, + }); +}); +var _index209 = __nccwpck_require__(1193); +Object.keys(_index209).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index209[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index209[key]; + }, + }); +}); +var _index210 = __nccwpck_require__(4084); +Object.keys(_index210).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index210[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index210[key]; + }, + }); +}); +var _index211 = __nccwpck_require__(6598); +Object.keys(_index211).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index211[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index211[key]; + }, + }); +}); +var _index212 = __nccwpck_require__(5420); +Object.keys(_index212).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index212[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index212[key]; + }, + }); +}); +var _index213 = __nccwpck_require__(8400); +Object.keys(_index213).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index213[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index213[key]; + }, + }); +}); +var _index214 = __nccwpck_require__(9739); +Object.keys(_index214).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index214[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index214[key]; + }, + }); +}); +var _index215 = __nccwpck_require__(5938); +Object.keys(_index215).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index215[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index215[key]; + }, + }); +}); +var _index216 = __nccwpck_require__(1573); +Object.keys(_index216).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index216[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index216[key]; + }, + }); +}); +var _index217 = __nccwpck_require__(9280); +Object.keys(_index217).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index217[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index217[key]; + }, + }); +}); +var _index218 = __nccwpck_require__(6921); +Object.keys(_index218).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index218[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index218[key]; + }, + }); +}); +var _index219 = __nccwpck_require__(785); +Object.keys(_index219).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index219[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index219[key]; + }, + }); +}); +var _index220 = __nccwpck_require__(7947); +Object.keys(_index220).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index220[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index220[key]; + }, + }); +}); +var _index221 = __nccwpck_require__(2839); +Object.keys(_index221).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index221[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index221[key]; + }, + }); +}); +var _index222 = __nccwpck_require__(3192); +Object.keys(_index222).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index222[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index222[key]; + }, + }); +}); +var _index223 = __nccwpck_require__(5519); +Object.keys(_index223).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index223[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index223[key]; + }, + }); +}); +var _index224 = __nccwpck_require__(7421); +Object.keys(_index224).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index224[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index224[key]; + }, + }); +}); +var _index225 = __nccwpck_require__(4966); +Object.keys(_index225).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index225[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index225[key]; + }, + }); +}); +var _index226 = __nccwpck_require__(3346); +Object.keys(_index226).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index226[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index226[key]; + }, + }); +}); +var _index227 = __nccwpck_require__(5892); +Object.keys(_index227).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index227[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index227[key]; + }, + }); +}); +var _index228 = __nccwpck_require__(6818); +Object.keys(_index228).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index228[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index228[key]; + }, + }); +}); +var _index229 = __nccwpck_require__(5505); +Object.keys(_index229).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index229[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index229[key]; + }, + }); +}); +var _index230 = __nccwpck_require__(8028); +Object.keys(_index230).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index230[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index230[key]; + }, + }); +}); +var _index231 = __nccwpck_require__(3219); +Object.keys(_index231).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index231[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index231[key]; + }, + }); +}); +var _index232 = __nccwpck_require__(1772); +Object.keys(_index232).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index232[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index232[key]; + }, + }); +}); +var _index233 = __nccwpck_require__(4864); +Object.keys(_index233).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index233[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index233[key]; + }, + }); +}); +var _index234 = __nccwpck_require__(6990); +Object.keys(_index234).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index234[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index234[key]; + }, + }); +}); +var _index235 = __nccwpck_require__(7749); +Object.keys(_index235).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index235[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index235[key]; + }, + }); +}); +var _index236 = __nccwpck_require__(9643); +Object.keys(_index236).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index236[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index236[key]; + }, + }); +}); +var _index237 = __nccwpck_require__(2981); +Object.keys(_index237).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index237[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index237[key]; + }, + }); +}); +var _index238 = __nccwpck_require__(1369); +Object.keys(_index238).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index238[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index238[key]; + }, + }); +}); +var _index239 = __nccwpck_require__(9970); +Object.keys(_index239).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index239[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index239[key]; + }, + }); +}); +var _index240 = __nccwpck_require__(4363); +Object.keys(_index240).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index240[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index240[key]; + }, + }); +}); +var _index241 = __nccwpck_require__(6025); +Object.keys(_index241).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index241[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index241[key]; + }, + }); +}); +var _index242 = __nccwpck_require__(6970); +Object.keys(_index242).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index242[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index242[key]; + }, + }); +}); +var _index243 = __nccwpck_require__(3512); +Object.keys(_index243).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index243[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index243[key]; + }, + }); +}); +var _index244 = __nccwpck_require__(9911); +Object.keys(_index244).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index244[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index244[key]; + }, + }); +}); +var _index245 = __nccwpck_require__(9943); +Object.keys(_index245).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _index245[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _index245[key]; + }, + }); +}); + + +/***/ }), + +/***/ 7683: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.interval = interval; +var _index = __nccwpck_require__(4363); + +/** + * The {@link interval} function options. + */ + +/** + * @name interval + * @category Interval Helpers + * @summary Creates an interval object and validates its values. + * + * @description + * Creates a normalized interval object and validates its values. If the interval is invalid, an exception is thrown. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param start - The start of the interval. + * @param end - The end of the interval. + * @param options - The options object. + * + * @throws `Start date is invalid` when `start` is invalid. + * @throws `End date is invalid` when `end` is invalid. + * @throws `End date must be after start date` when end is before `start` and `options.assertPositive` is true. + * + * @returns The normalized and validated interval object. + */ +function interval(start, end, options) { + const _start = (0, _index.toDate)(start); + if (isNaN(+_start)) throw new TypeError("Start date is invalid"); + + const _end = (0, _index.toDate)(end); + if (isNaN(+_end)) throw new TypeError("End date is invalid"); + + if (options?.assertPositive && +_start > +_end) + throw new TypeError("End date must be after start date"); + + return { start: _start, end: _end }; +} + + +/***/ }), + +/***/ 4927: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.intervalToDuration = intervalToDuration; +var _index = __nccwpck_require__(3350); +var _index2 = __nccwpck_require__(7263); +var _index3 = __nccwpck_require__(6891); +var _index4 = __nccwpck_require__(8892); +var _index5 = __nccwpck_require__(2256); +var _index6 = __nccwpck_require__(4146); +var _index7 = __nccwpck_require__(2776); +var _index8 = __nccwpck_require__(4363); + +/** + * @name intervalToDuration + * @category Common Helpers + * @summary Convert interval to duration + * + * @description + * Convert a interval object to a duration object. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param interval - The interval to convert to duration + * + * @returns The duration object + * + * @example + * // Get the duration between January 15, 1929 and April 4, 1968. + * intervalToDuration({ + * start: new Date(1929, 0, 15, 12, 0, 0), + * end: new Date(1968, 3, 4, 19, 5, 0) + * }) + * // => { years: 39, months: 2, days: 20, hours: 7, minutes: 5, seconds: 0 } + */ +function intervalToDuration(interval) { + const start = (0, _index8.toDate)(interval.start); + const end = (0, _index8.toDate)(interval.end); + + const duration = {}; + + const years = (0, _index7.differenceInYears)(end, start); + if (years) duration.years = years; + + const remainingMonths = (0, _index.add)(start, { years: duration.years }); + + const months = (0, _index5.differenceInMonths)(end, remainingMonths); + if (months) duration.months = months; + + const remainingDays = (0, _index.add)(remainingMonths, { + months: duration.months, + }); + + const days = (0, _index2.differenceInDays)(end, remainingDays); + if (days) duration.days = days; + + const remainingHours = (0, _index.add)(remainingDays, { + days: duration.days, + }); + + const hours = (0, _index3.differenceInHours)(end, remainingHours); + if (hours) duration.hours = hours; + + const remainingMinutes = (0, _index.add)(remainingHours, { + hours: duration.hours, + }); + + const minutes = (0, _index4.differenceInMinutes)(end, remainingMinutes); + if (minutes) duration.minutes = minutes; + + const remainingSeconds = (0, _index.add)(remainingMinutes, { + minutes: duration.minutes, + }); + + const seconds = (0, _index6.differenceInSeconds)(end, remainingSeconds); + if (seconds) duration.seconds = seconds; + + return duration; +} + + +/***/ }), + +/***/ 1026: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.intlFormat = intlFormat; +var _index = __nccwpck_require__(4363); + +/** + * The locale string (see: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#locales_argument). + */ + +/** + * The format options (see: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#options) + */ + +/** + * The locale options. + */ + +/** + * @name intlFormat + * @category Common Helpers + * @summary Format the date with Intl.DateTimeFormat (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat). + * + * @description + * Return the formatted date string in the given format. + * The method uses [`Intl.DateTimeFormat`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat) inside. + * formatOptions are the same as [`Intl.DateTimeFormat` options](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat#using_options) + * + * > ⚠️ Please note that before Node version 13.0.0, only the locale data for en-US is available by default. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to format + * + * @returns The formatted date string + * + * @throws `date` must not be Invalid Date + * + * @example + * // Represent 4 October 2019 in middle-endian format: + * const result = intlFormat(new Date(2019, 9, 4, 12, 30, 13, 456)) + * //=> 10/4/2019 + */ + +/** + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to format + * @param localeOptions - An object with locale + * + * @returns The formatted date string + * + * @throws `date` must not be Invalid Date + * + * @example + * // Represent 4 October 2019 in Korean. + * // Convert the date with locale's options. + * const result = intlFormat(new Date(2019, 9, 4, 12, 30, 13, 456), { + * locale: 'ko-KR', + * }) + * //=> 2019. 10. 4. + */ + +/** + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to format + * @param formatOptions - The format options + * + * @returns The formatted date string + * + * @throws `date` must not be Invalid Date + * + * @example + * // Represent 4 October 2019. + * // Convert the date with format's options. + * const result = intlFormat.default(new Date(2019, 9, 4, 12, 30, 13, 456), { + * year: 'numeric', + * month: 'numeric', + * day: 'numeric', + * hour: 'numeric', + * }) + * //=> 10/4/2019, 12 PM + */ + +/** + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to format + * @param formatOptions - The format options + * @param localeOptions - An object with locale + * + * @returns The formatted date string + * + * @throws `date` must not be Invalid Date + * + * @example + * // Represent 4 October 2019 in German. + * // Convert the date with format's options and locale's options. + * const result = intlFormat(new Date(2019, 9, 4, 12, 30, 13, 456), { + * weekday: 'long', + * year: 'numeric', + * month: 'long', + * day: 'numeric', + * }, { + * locale: 'de-DE', + * }) + * //=> Freitag, 4. Oktober 2019 + */ + +function intlFormat(date, formatOrLocale, localeOptions) { + let formatOptions; + + if (isFormatOptions(formatOrLocale)) { + formatOptions = formatOrLocale; + } else { + localeOptions = formatOrLocale; + } + + return new Intl.DateTimeFormat(localeOptions?.locale, formatOptions).format( + (0, _index.toDate)(date), + ); +} + +function isFormatOptions(opts) { + return opts !== undefined && !("locale" in opts); +} + + +/***/ }), + +/***/ 4601: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.intlFormatDistance = intlFormatDistance; +var _index = __nccwpck_require__(2983); + +var _index2 = __nccwpck_require__(6255); +var _index3 = __nccwpck_require__(9449); +var _index4 = __nccwpck_require__(3966); +var _index5 = __nccwpck_require__(4494); +var _index6 = __nccwpck_require__(8667); +var _index7 = __nccwpck_require__(6891); +var _index8 = __nccwpck_require__(8892); +var _index9 = __nccwpck_require__(4146); +var _index10 = __nccwpck_require__(4363); + +/** + * The {@link intlFormatDistance} function options. + */ + +/** + * The unit used to format the distance in {@link intlFormatDistance}. + */ + +/** + * @name intlFormatDistance + * @category Common Helpers + * @summary Formats distance between two dates in a human-readable format + * @description + * The function calculates the difference between two dates and formats it as a human-readable string. + * + * The function will pick the most appropriate unit depending on the distance between dates. For example, if the distance is a few hours, it might return `x hours`. If the distance is a few months, it might return `x months`. + * + * You can also specify a unit to force using it regardless of the distance to get a result like `123456 hours`. + * + * See the table below for the unit picking logic: + * + * | Distance between dates | Result (past) | Result (future) | + * | ---------------------- | -------------- | --------------- | + * | 0 seconds | now | now | + * | 1-59 seconds | X seconds ago | in X seconds | + * | 1-59 minutes | X minutes ago | in X minutes | + * | 1-23 hours | X hours ago | in X hours | + * | 1 day | yesterday | tomorrow | + * | 2-6 days | X days ago | in X days | + * | 7 days | last week | next week | + * | 8 days-1 month | X weeks ago | in X weeks | + * | 1 month | last month | next month | + * | 2-3 months | X months ago | in X months | + * | 1 quarter | last quarter | next quarter | + * | 2-3 quarters | X quarters ago | in X quarters | + * | 1 year | last year | next year | + * | 2+ years | X years ago | in X years | + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date + * @param baseDate - The date to compare with. + * @param options - An object with options. + * See MDN for details [Locale identification and negotiation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#locale_identification_and_negotiation) + * The narrow one could be similar to the short one for some locales. + * + * @returns The distance in words according to language-sensitive relative time formatting. + * + * @throws `date` must not be Invalid Date + * @throws `baseDate` must not be Invalid Date + * @throws `options.unit` must not be invalid Unit + * @throws `options.locale` must not be invalid locale + * @throws `options.localeMatcher` must not be invalid localeMatcher + * @throws `options.numeric` must not be invalid numeric + * @throws `options.style` must not be invalid style + * + * @example + * // What is the distance between the dates when the fist date is after the second? + * intlFormatDistance( + * new Date(1986, 3, 4, 11, 30, 0), + * new Date(1986, 3, 4, 10, 30, 0) + * ) + * //=> 'in 1 hour' + * + * // What is the distance between the dates when the fist date is before the second? + * intlFormatDistance( + * new Date(1986, 3, 4, 10, 30, 0), + * new Date(1986, 3, 4, 11, 30, 0) + * ) + * //=> '1 hour ago' + * + * @example + * // Use the unit option to force the function to output the result in quarters. Without setting it, the example would return "next year" + * intlFormatDistance( + * new Date(1987, 6, 4, 10, 30, 0), + * new Date(1986, 3, 4, 10, 30, 0), + * { unit: 'quarter' } + * ) + * //=> 'in 5 quarters' + * + * @example + * // Use the locale option to get the result in Spanish. Without setting it, the example would return "in 1 hour". + * intlFormatDistance( + * new Date(1986, 3, 4, 11, 30, 0), + * new Date(1986, 3, 4, 10, 30, 0), + * { locale: 'es' } + * ) + * //=> 'dentro de 1 hora' + * + * @example + * // Use the numeric option to force the function to use numeric values. Without setting it, the example would return "tomorrow". + * intlFormatDistance( + * new Date(1986, 3, 5, 11, 30, 0), + * new Date(1986, 3, 4, 11, 30, 0), + * { numeric: 'always' } + * ) + * //=> 'in 1 day' + * + * @example + * // Use the style option to force the function to use short values. Without setting it, the example would return "in 2 years". + * intlFormatDistance( + * new Date(1988, 3, 4, 11, 30, 0), + * new Date(1986, 3, 4, 11, 30, 0), + * { style: 'short' } + * ) + * //=> 'in 2 yr' + */ +function intlFormatDistance(date, baseDate, options) { + let value = 0; + let unit; + const dateLeft = (0, _index10.toDate)(date); + const dateRight = (0, _index10.toDate)(baseDate); + + if (!options?.unit) { + // Get the unit based on diffInSeconds calculations if no unit is specified + const diffInSeconds = (0, _index9.differenceInSeconds)(dateLeft, dateRight); // The smallest unit + + if (Math.abs(diffInSeconds) < _index.secondsInMinute) { + value = (0, _index9.differenceInSeconds)(dateLeft, dateRight); + unit = "second"; + } else if (Math.abs(diffInSeconds) < _index.secondsInHour) { + value = (0, _index8.differenceInMinutes)(dateLeft, dateRight); + unit = "minute"; + } else if ( + Math.abs(diffInSeconds) < _index.secondsInDay && + Math.abs((0, _index2.differenceInCalendarDays)(dateLeft, dateRight)) < 1 + ) { + value = (0, _index7.differenceInHours)(dateLeft, dateRight); + unit = "hour"; + } else if ( + Math.abs(diffInSeconds) < _index.secondsInWeek && + (value = (0, _index2.differenceInCalendarDays)(dateLeft, dateRight)) && + Math.abs(value) < 7 + ) { + unit = "day"; + } else if (Math.abs(diffInSeconds) < _index.secondsInMonth) { + value = (0, _index5.differenceInCalendarWeeks)(dateLeft, dateRight); + unit = "week"; + } else if (Math.abs(diffInSeconds) < _index.secondsInQuarter) { + value = (0, _index3.differenceInCalendarMonths)(dateLeft, dateRight); + unit = "month"; + } else if (Math.abs(diffInSeconds) < _index.secondsInYear) { + if ((0, _index4.differenceInCalendarQuarters)(dateLeft, dateRight) < 4) { + // To filter out cases that are less than a year but match 4 quarters + value = (0, _index4.differenceInCalendarQuarters)(dateLeft, dateRight); + unit = "quarter"; + } else { + value = (0, _index6.differenceInCalendarYears)(dateLeft, dateRight); + unit = "year"; + } + } else { + value = (0, _index6.differenceInCalendarYears)(dateLeft, dateRight); + unit = "year"; + } + } else { + // Get the value if unit is specified + unit = options?.unit; + if (unit === "second") { + value = (0, _index9.differenceInSeconds)(dateLeft, dateRight); + } else if (unit === "minute") { + value = (0, _index8.differenceInMinutes)(dateLeft, dateRight); + } else if (unit === "hour") { + value = (0, _index7.differenceInHours)(dateLeft, dateRight); + } else if (unit === "day") { + value = (0, _index2.differenceInCalendarDays)(dateLeft, dateRight); + } else if (unit === "week") { + value = (0, _index5.differenceInCalendarWeeks)(dateLeft, dateRight); + } else if (unit === "month") { + value = (0, _index3.differenceInCalendarMonths)(dateLeft, dateRight); + } else if (unit === "quarter") { + value = (0, _index4.differenceInCalendarQuarters)(dateLeft, dateRight); + } else if (unit === "year") { + value = (0, _index6.differenceInCalendarYears)(dateLeft, dateRight); + } + } + + const rtf = new Intl.RelativeTimeFormat(options?.locale, { + localeMatcher: options?.localeMatcher, + numeric: options?.numeric || "auto", + style: options?.style, + }); + + return rtf.format(value, unit); +} + + +/***/ }), + +/***/ 5606: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isAfter = isAfter; +var _index = __nccwpck_require__(4363); + +/** + * @name isAfter + * @category Common Helpers + * @summary Is the first date after the second one? + * + * @description + * Is the first date after the second one? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date that should be after the other one to return true + * @param dateToCompare - The date to compare with + * + * @returns The first date is after the second date + * + * @example + * // Is 10 July 1989 after 11 February 1987? + * const result = isAfter(new Date(1989, 6, 10), new Date(1987, 1, 11)) + * //=> true + */ +function isAfter(date, dateToCompare) { + const _date = (0, _index.toDate)(date); + const _dateToCompare = (0, _index.toDate)(dateToCompare); + return _date.getTime() > _dateToCompare.getTime(); +} + + +/***/ }), + +/***/ 8715: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isBefore = isBefore; +var _index = __nccwpck_require__(4363); + +/** + * @name isBefore + * @category Common Helpers + * @summary Is the first date before the second one? + * + * @description + * Is the first date before the second one? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date that should be before the other one to return true + * @param dateToCompare - The date to compare with + * + * @returns The first date is before the second date + * + * @example + * // Is 10 July 1989 before 11 February 1987? + * const result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11)) + * //=> false + */ +function isBefore(date, dateToCompare) { + const _date = (0, _index.toDate)(date); + const _dateToCompare = (0, _index.toDate)(dateToCompare); + return +_date < +_dateToCompare; +} + + +/***/ }), + +/***/ 8395: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +exports.isDate = isDate; /** + * @name isDate + * @category Common Helpers + * @summary Is the given value a date? + * + * @description + * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes. + * + * @param value - The value to check + * + * @returns True if the given value is a date + * + * @example + * // For a valid date: + * const result = isDate(new Date()) + * //=> true + * + * @example + * // For an invalid date: + * const result = isDate(new Date(NaN)) + * //=> true + * + * @example + * // For some value: + * const result = isDate('2014-02-31') + * //=> false + * + * @example + * // For an object: + * const result = isDate({}) + * //=> false + */ +function isDate(value) { + return ( + value instanceof Date || + (typeof value === "object" && + Object.prototype.toString.call(value) === "[object Date]") + ); +} + + +/***/ }), + +/***/ 2792: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isEqual = isEqual; +var _index = __nccwpck_require__(4363); + +/** + * @name isEqual + * @category Common Helpers + * @summary Are the given dates equal? + * + * @description + * Are the given dates equal? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The first date to compare + * @param dateRight - The second date to compare + * + * @returns The dates are equal + * + * @example + * // Are 2 July 2014 06:30:45.000 and 2 July 2014 06:30:45.500 equal? + * const result = isEqual( + * new Date(2014, 6, 2, 6, 30, 45, 0), + * new Date(2014, 6, 2, 6, 30, 45, 500) + * ) + * //=> false + */ +function isEqual(leftDate, rightDate) { + const _dateLeft = (0, _index.toDate)(leftDate); + const _dateRight = (0, _index.toDate)(rightDate); + return +_dateLeft === +_dateRight; +} + + +/***/ }), + +/***/ 4268: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +exports.isExists = isExists; /** + * @name isExists + * @category Common Helpers + * @summary Is the given date exists? + * + * @description + * Checks if the given arguments convert to an existing date. + * + * @param year - The year of the date to check + * @param month - The month of the date to check + * @param day - The day of the date to check + * + * @returns `true` if the date exists + * + * @example + * // For the valid date: + * const result = isExists(2018, 0, 31) + * //=> true + * + * @example + * // For the invalid date: + * const result = isExists(2018, 1, 31) + * //=> false + */ +function isExists(year, month, day) { + const date = new Date(year, month, day); + return ( + date.getFullYear() === year && + date.getMonth() === month && + date.getDate() === day + ); +} + + +/***/ }), + +/***/ 203: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isFirstDayOfMonth = isFirstDayOfMonth; +var _index = __nccwpck_require__(4363); + +/** + * @name isFirstDayOfMonth + * @category Month Helpers + * @summary Is the given date the first day of a month? + * + * @description + * Is the given date the first day of a month? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + + * @returns The date is the first day of a month + * + * @example + * // Is 1 September 2014 the first day of a month? + * const result = isFirstDayOfMonth(new Date(2014, 8, 1)) + * //=> true + */ +function isFirstDayOfMonth(date) { + return (0, _index.toDate)(date).getDate() === 1; +} + + +/***/ }), + +/***/ 8574: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isFriday = isFriday; +var _index = __nccwpck_require__(4363); + +/** + * @name isFriday + * @category Weekday Helpers + * @summary Is the given date Friday? + * + * @description + * Is the given date Friday? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + * + * @returns The date is Friday + * + * @example + * // Is 26 September 2014 Friday? + * const result = isFriday(new Date(2014, 8, 26)) + * //=> true + */ +function isFriday(date) { + return (0, _index.toDate)(date).getDay() === 5; +} + + +/***/ }), + +/***/ 3965: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isFuture = isFuture; +var _index = __nccwpck_require__(4363); + +/** + * @name isFuture + * @category Common Helpers + * @summary Is the given date in the future? + * @pure false + * + * @description + * Is the given date in the future? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + * + * @returns The date is in the future + * + * @example + * // If today is 6 October 2014, is 31 December 2014 in the future? + * const result = isFuture(new Date(2014, 11, 31)) + * //=> true + */ +function isFuture(date) { + return +(0, _index.toDate)(date) > Date.now(); +} + + +/***/ }), + +/***/ 8377: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isLastDayOfMonth = isLastDayOfMonth; +var _index = __nccwpck_require__(4821); +var _index2 = __nccwpck_require__(4810); +var _index3 = __nccwpck_require__(4363); + +/** + * @name isLastDayOfMonth + * @category Month Helpers + * @summary Is the given date the last day of a month? + * + * @description + * Is the given date the last day of a month? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + + * @returns The date is the last day of a month + * + * @example + * // Is 28 February 2014 the last day of a month? + * const result = isLastDayOfMonth(new Date(2014, 1, 28)) + * //=> true + */ +function isLastDayOfMonth(date) { + const _date = (0, _index3.toDate)(date); + return +(0, _index.endOfDay)(_date) === +(0, _index2.endOfMonth)(_date); +} + + +/***/ }), + +/***/ 5288: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isLeapYear = isLeapYear; +var _index = __nccwpck_require__(4363); + +/** + * @name isLeapYear + * @category Year Helpers + * @summary Is the given date in the leap year? + * + * @description + * Is the given date in the leap year? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + * + * @returns The date is in the leap year + * + * @example + * // Is 1 September 2012 in the leap year? + * const result = isLeapYear(new Date(2012, 8, 1)) + * //=> true + */ +function isLeapYear(date) { + const _date = (0, _index.toDate)(date); + const year = _date.getFullYear(); + return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0); +} + + +/***/ }), + +/***/ 7894: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isMatch = isMatch; +var _index = __nccwpck_require__(6623); +var _index2 = __nccwpck_require__(7784); + +/** + * The {@link isMatch} function options. + */ + +/** + * @name isMatch + * @category Common Helpers + * @summary validates the date string against given formats + * + * @description + * Return the true if given date is string correct against the given format else + * will return false. + * + * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries. + * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * + * The characters in the format string wrapped between two single quotes characters (') are escaped. + * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote. + * + * Format of the format string is based on Unicode Technical Standard #35: + * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table + * with a few additions (see note 5 below the table). + * + * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited + * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception: + * + * ```javascript + * isMatch('23 AM', 'HH a') + * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time + * ``` + * + * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true + * + * Accepted format string patterns: + * | Unit |Prior| Pattern | Result examples | Notes | + * |---------------------------------|-----|---------|-----------------------------------|-------| + * | Era | 140 | G..GGG | AD, BC | | + * | | | GGGG | Anno Domini, Before Christ | 2 | + * | | | GGGGG | A, B | | + * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 | + * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 | + * | | | yy | 44, 01, 00, 17 | 4 | + * | | | yyy | 044, 001, 123, 999 | 4 | + * | | | yyyy | 0044, 0001, 1900, 2017 | 4 | + * | | | yyyyy | ... | 2,4 | + * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 | + * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 | + * | | | YY | 44, 01, 00, 17 | 4,6 | + * | | | YYY | 044, 001, 123, 999 | 4 | + * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 | + * | | | YYYYY | ... | 2,4 | + * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 | + * | | | RR | -43, 01, 00, 17 | 4,5 | + * | | | RRR | -043, 001, 123, 999, -999 | 4,5 | + * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 | + * | | | RRRRR | ... | 2,4,5 | + * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 | + * | | | uu | -43, 01, 99, -99 | 4 | + * | | | uuu | -043, 001, 123, 999, -999 | 4 | + * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 | + * | | | uuuuu | ... | 2,4 | + * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | | + * | | | Qo | 1st, 2nd, 3rd, 4th | 5 | + * | | | QQ | 01, 02, 03, 04 | | + * | | | QQQ | Q1, Q2, Q3, Q4 | | + * | | | QQQQ | 1st quarter, 2nd quarter, ... | 2 | + * | | | QQQQQ | 1, 2, 3, 4 | 4 | + * | Quarter (stand-alone) | 120 | q | 1, 2, 3, 4 | | + * | | | qo | 1st, 2nd, 3rd, 4th | 5 | + * | | | qq | 01, 02, 03, 04 | | + * | | | qqq | Q1, Q2, Q3, Q4 | | + * | | | qqqq | 1st quarter, 2nd quarter, ... | 2 | + * | | | qqqqq | 1, 2, 3, 4 | 3 | + * | Month (formatting) | 110 | M | 1, 2, ..., 12 | | + * | | | Mo | 1st, 2nd, ..., 12th | 5 | + * | | | MM | 01, 02, ..., 12 | | + * | | | MMM | Jan, Feb, ..., Dec | | + * | | | MMMM | January, February, ..., December | 2 | + * | | | MMMMM | J, F, ..., D | | + * | Month (stand-alone) | 110 | L | 1, 2, ..., 12 | | + * | | | Lo | 1st, 2nd, ..., 12th | 5 | + * | | | LL | 01, 02, ..., 12 | | + * | | | LLL | Jan, Feb, ..., Dec | | + * | | | LLLL | January, February, ..., December | 2 | + * | | | LLLLL | J, F, ..., D | | + * | Local week of year | 100 | w | 1, 2, ..., 53 | | + * | | | wo | 1st, 2nd, ..., 53th | 5 | + * | | | ww | 01, 02, ..., 53 | | + * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 | + * | | | Io | 1st, 2nd, ..., 53th | 5 | + * | | | II | 01, 02, ..., 53 | 5 | + * | Day of month | 90 | d | 1, 2, ..., 31 | | + * | | | do | 1st, 2nd, ..., 31st | 5 | + * | | | dd | 01, 02, ..., 31 | | + * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 | + * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 | + * | | | DD | 01, 02, ..., 365, 366 | 7 | + * | | | DDD | 001, 002, ..., 365, 366 | | + * | | | DDDD | ... | 2 | + * | Day of week (formatting) | 90 | E..EEE | Mon, Tue, Wed, ..., Su | | + * | | | EEEE | Monday, Tuesday, ..., Sunday | 2 | + * | | | EEEEE | M, T, W, T, F, S, S | | + * | | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | | + * | ISO day of week (formatting) | 90 | i | 1, 2, 3, ..., 7 | 5 | + * | | | io | 1st, 2nd, ..., 7th | 5 | + * | | | ii | 01, 02, ..., 07 | 5 | + * | | | iii | Mon, Tue, Wed, ..., Su | 5 | + * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 | + * | | | iiiii | M, T, W, T, F, S, S | 5 | + * | | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 5 | + * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | | + * | | | eo | 2nd, 3rd, ..., 1st | 5 | + * | | | ee | 02, 03, ..., 01 | | + * | | | eee | Mon, Tue, Wed, ..., Su | | + * | | | eeee | Monday, Tuesday, ..., Sunday | 2 | + * | | | eeeee | M, T, W, T, F, S, S | | + * | | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | | + * | Local day of week (stand-alone) | 90 | c | 2, 3, 4, ..., 1 | | + * | | | co | 2nd, 3rd, ..., 1st | 5 | + * | | | cc | 02, 03, ..., 01 | | + * | | | ccc | Mon, Tue, Wed, ..., Su | | + * | | | cccc | Monday, Tuesday, ..., Sunday | 2 | + * | | | ccccc | M, T, W, T, F, S, S | | + * | | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | | + * | AM, PM | 80 | a..aaa | AM, PM | | + * | | | aaaa | a.m., p.m. | 2 | + * | | | aaaaa | a, p | | + * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | | + * | | | bbbb | a.m., p.m., noon, midnight | 2 | + * | | | bbbbb | a, p, n, mi | | + * | Flexible day period | 80 | B..BBB | at night, in the morning, ... | | + * | | | BBBB | at night, in the morning, ... | 2 | + * | | | BBBBB | at night, in the morning, ... | | + * | Hour [1-12] | 70 | h | 1, 2, ..., 11, 12 | | + * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 | + * | | | hh | 01, 02, ..., 11, 12 | | + * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | | + * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 | + * | | | HH | 00, 01, 02, ..., 23 | | + * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | | + * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 | + * | | | KK | 01, 02, ..., 11, 00 | | + * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | | + * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 | + * | | | kk | 24, 01, 02, ..., 23 | | + * | Minute | 60 | m | 0, 1, ..., 59 | | + * | | | mo | 0th, 1st, ..., 59th | 5 | + * | | | mm | 00, 01, ..., 59 | | + * | Second | 50 | s | 0, 1, ..., 59 | | + * | | | so | 0th, 1st, ..., 59th | 5 | + * | | | ss | 00, 01, ..., 59 | | + * | Seconds timestamp | 40 | t | 512969520 | | + * | | | tt | ... | 2 | + * | Fraction of second | 30 | S | 0, 1, ..., 9 | | + * | | | SS | 00, 01, ..., 99 | | + * | | | SSS | 000, 001, ..., 999 | | + * | | | SSSS | ... | 2 | + * | Milliseconds timestamp | 20 | T | 512969520900 | | + * | | | TT | ... | 2 | + * | Timezone (ISO-8601 w/ Z) | 10 | X | -08, +0530, Z | | + * | | | XX | -0800, +0530, Z | | + * | | | XXX | -08:00, +05:30, Z | | + * | | | XXXX | -0800, +0530, Z, +123456 | 2 | + * | | | XXXXX | -08:00, +05:30, Z, +12:34:56 | | + * | Timezone (ISO-8601 w/o Z) | 10 | x | -08, +0530, +00 | | + * | | | xx | -0800, +0530, +0000 | | + * | | | xxx | -08:00, +05:30, +00:00 | 2 | + * | | | xxxx | -0800, +0530, +0000, +123456 | | + * | | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | | + * | Long localized date | NA | P | 05/29/1453 | 5,8 | + * | | | PP | May 29, 1453 | | + * | | | PPP | May 29th, 1453 | | + * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 | + * | Long localized time | NA | p | 12:00 AM | 5,8 | + * | | | pp | 12:00:00 AM | | + * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | | + * | | | PPpp | May 29, 1453, 12:00:00 AM | | + * | | | PPPpp | May 29th, 1453 at ... | | + * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 | + * Notes: + * 1. "Formatting" units (e.g. formatting quarter) in the default en-US locale + * are the same as "stand-alone" units, but are different in some languages. + * "Formatting" units are declined according to the rules of the language + * in the context of a date. "Stand-alone" units are always nominative singular. + * In `format` function, they will produce different result: + * + * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'` + * + * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'` + * + * `isMatch` will try to match both formatting and stand-alone units interchangably. + * + * 2. Any sequence of the identical letters is a pattern, unless it is escaped by + * the single quote characters (see below). + * If the sequence is longer than listed in table: + * - for numerical units (`yyyyyyyy`) `isMatch` will try to match a number + * as wide as the sequence + * - for text units (`MMMMMMMM`) `isMatch` will try to match the widest variation of the unit. + * These variations are marked with "2" in the last column of the table. + * + * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales. + * These tokens represent the shortest form of the quarter. + * + * 4. The main difference between `y` and `u` patterns are B.C. years: + * + * | Year | `y` | `u` | + * |------|-----|-----| + * | AC 1 | 1 | 1 | + * | BC 1 | 1 | 0 | + * | BC 2 | 2 | -1 | + * + * Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`: + * + * `isMatch('50', 'yy') //=> true` + * + * `isMatch('75', 'yy') //=> true` + * + * while `uu` will use the year as is: + * + * `isMatch('50', 'uu') //=> true` + * + * `isMatch('75', 'uu') //=> true` + * + * The same difference is true for local and ISO week-numbering years (`Y` and `R`), + * except local week-numbering years are dependent on `options.weekStartsOn` + * and `options.firstWeekContainsDate` (compare [setISOWeekYear](https://date-fns.org/docs/setISOWeekYear) + * and [setWeekYear](https://date-fns.org/docs/setWeekYear)). + * + * 5. These patterns are not in the Unicode Technical Standard #35: + * - `i`: ISO day of week + * - `I`: ISO week of year + * - `R`: ISO week-numbering year + * - `o`: ordinal number modifier + * - `P`: long localized date + * - `p`: long localized time + * + * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years. + * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * + * 7. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month. + * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * + * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based + * on the given locale. + * + * using `en-US` locale: `P` => `MM/dd/yyyy` + * using `en-US` locale: `p` => `hh:mm a` + * using `pt-BR` locale: `P` => `dd/MM/yyyy` + * using `pt-BR` locale: `p` => `HH:mm` + * + * Values will be checked in the descending order of its unit's priority. + * Units of an equal priority overwrite each other in the order of appearance. + * + * If no values of higher priority are matched (e.g. when matching string 'January 1st' without a year), + * the values will be taken from today's using `new Date()` date which works as a context of parsing. + * + * The result may vary by locale. + * + * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateStr - The date string to verify + * @param format - The string of tokens + * @param options - An object with options. + * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * + * @returns Is format string a match for date string? + * + * @throws `options.locale` must contain `match` property + * @throws use `yyyy` instead of `YYYY` for formatting years; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * @throws use `yy` instead of `YY` for formatting years; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * @throws use `d` instead of `D` for formatting days of the month; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * @throws use `dd` instead of `DD` for formatting days of the month; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * @throws format string contains an unescaped latin alphabet character + * + * @example + * // Match 11 February 2014 from middle-endian format: + * const result = isMatch('02/11/2014', 'MM/dd/yyyy') + * //=> true + * + * @example + * // Match 28th of February in Esperanto locale in the context of 2010 year: + * import eo from 'date-fns/locale/eo' + * const result = isMatch('28-a de februaro', "do 'de' MMMM", { + * locale: eo + * }) + * //=> true + */ +function isMatch(dateStr, formatStr, options) { + return (0, _index.isValid)( + (0, _index2.parse)(dateStr, formatStr, new Date(), options), + ); +} + + +/***/ }), + +/***/ 4753: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isMonday = isMonday; +var _index = __nccwpck_require__(4363); + +/** + * @name isMonday + * @category Weekday Helpers + * @summary Is the given date Monday? + * + * @description + * Is the given date Monday? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + * + * @returns The date is Monday + * + * @example + * // Is 22 September 2014 Monday? + * const result = isMonday(new Date(2014, 8, 22)) + * //=> true + */ +function isMonday(date) { + return (0, _index.toDate)(date).getDay() === 1; +} + + +/***/ }), + +/***/ 7728: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isPast = isPast; +var _index = __nccwpck_require__(4363); + +/** + * @name isPast + * @category Common Helpers + * @summary Is the given date in the past? + * @pure false + * + * @description + * Is the given date in the past? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + * + * @returns The date is in the past + * + * @example + * // If today is 6 October 2014, is 2 July 2014 in the past? + * const result = isPast(new Date(2014, 6, 2)) + * //=> true + */ +function isPast(date) { + return +(0, _index.toDate)(date) < Date.now(); +} + + +/***/ }), + +/***/ 6803: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isSameDay = isSameDay; +var _index = __nccwpck_require__(8400); + +/** + * @name isSameDay + * @category Day Helpers + * @summary Are the given dates in the same day (and year and month)? + * + * @description + * Are the given dates in the same day (and year and month)? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The first date to check + * @param dateRight - The second date to check + + * @returns The dates are in the same day (and year and month) + * + * @example + * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day? + * const result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0)) + * //=> true + * + * @example + * // Are 4 September and 4 October in the same day? + * const result = isSameDay(new Date(2014, 8, 4), new Date(2014, 9, 4)) + * //=> false + * + * @example + * // Are 4 September, 2014 and 4 September, 2015 in the same day? + * const result = isSameDay(new Date(2014, 8, 4), new Date(2015, 8, 4)) + * //=> false + */ +function isSameDay(dateLeft, dateRight) { + const dateLeftStartOfDay = (0, _index.startOfDay)(dateLeft); + const dateRightStartOfDay = (0, _index.startOfDay)(dateRight); + + return +dateLeftStartOfDay === +dateRightStartOfDay; +} + + +/***/ }), + +/***/ 7366: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isSameHour = isSameHour; +var _index = __nccwpck_require__(5938); + +/** + * @name isSameHour + * @category Hour Helpers + * @summary Are the given dates in the same hour (and same day)? + * + * @description + * Are the given dates in the same hour (and same day)? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The first date to check + * @param dateRight - The second date to check + * + * @returns The dates are in the same hour (and same day) + * + * @example + * // Are 4 September 2014 06:00:00 and 4 September 06:30:00 in the same hour? + * const result = isSameHour(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 6, 30)) + * //=> true + * + * @example + * // Are 4 September 2014 06:00:00 and 5 September 06:00:00 in the same hour? + * const result = isSameHour(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 5, 6, 0)) + * //=> false + */ +function isSameHour(dateLeft, dateRight) { + const dateLeftStartOfHour = (0, _index.startOfHour)(dateLeft); + const dateRightStartOfHour = (0, _index.startOfHour)(dateRight); + + return +dateLeftStartOfHour === +dateRightStartOfHour; +} + + +/***/ }), + +/***/ 7069: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isSameISOWeek = isSameISOWeek; +var _index = __nccwpck_require__(6810); + +/** + * @name isSameISOWeek + * @category ISO Week Helpers + * @summary Are the given dates in the same ISO week (and year)? + * + * @description + * Are the given dates in the same ISO week (and year)? + * + * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The first date to check + * @param dateRight - The second date to check + * + * @returns The dates are in the same ISO week (and year) + * + * @example + * // Are 1 September 2014 and 7 September 2014 in the same ISO week? + * const result = isSameISOWeek(new Date(2014, 8, 1), new Date(2014, 8, 7)) + * //=> true + * + * @example + * // Are 1 September 2014 and 1 September 2015 in the same ISO week? + * const result = isSameISOWeek(new Date(2014, 8, 1), new Date(2015, 8, 1)) + * //=> false + */ +function isSameISOWeek(dateLeft, dateRight) { + return (0, _index.isSameWeek)(dateLeft, dateRight, { weekStartsOn: 1 }); +} + + +/***/ }), + +/***/ 7038: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isSameISOWeekYear = isSameISOWeekYear; +var _index = __nccwpck_require__(9280); + +/** + * @name isSameISOWeekYear + * @category ISO Week-Numbering Year Helpers + * @summary Are the given dates in the same ISO week-numbering year? + * + * @description + * Are the given dates in the same ISO week-numbering year? + * + * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The first date to check + * @param dateRight - The second date to check + * + * @returns The dates are in the same ISO week-numbering year + * + * @example + * // Are 29 December 2003 and 2 January 2005 in the same ISO week-numbering year? + * const result = isSameISOWeekYear(new Date(2003, 11, 29), new Date(2005, 0, 2)) + * //=> true + */ +function isSameISOWeekYear(dateLeft, dateRight) { + const dateLeftStartOfYear = (0, _index.startOfISOWeekYear)(dateLeft); + const dateRightStartOfYear = (0, _index.startOfISOWeekYear)(dateRight); + + return +dateLeftStartOfYear === +dateRightStartOfYear; +} + + +/***/ }), + +/***/ 2166: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isSameMinute = isSameMinute; +var _index = __nccwpck_require__(6921); + +/** + * @name isSameMinute + * @category Minute Helpers + * @summary Are the given dates in the same minute (and hour and day)? + * + * @description + * Are the given dates in the same minute (and hour and day)? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The first date to check + * @param dateRight - The second date to check + * + * @returns The dates are in the same minute (and hour and day) + * + * @example + * // Are 4 September 2014 06:30:00 and 4 September 2014 06:30:15 in the same minute? + * const result = isSameMinute( + * new Date(2014, 8, 4, 6, 30), + * new Date(2014, 8, 4, 6, 30, 15) + * ) + * //=> true + * + * @example + * // Are 4 September 2014 06:30:00 and 5 September 2014 06:30:00 in the same minute? + * const result = isSameMinute( + * new Date(2014, 8, 4, 6, 30), + * new Date(2014, 8, 5, 6, 30) + * ) + * //=> false + */ +function isSameMinute(dateLeft, dateRight) { + const dateLeftStartOfMinute = (0, _index.startOfMinute)(dateLeft); + const dateRightStartOfMinute = (0, _index.startOfMinute)(dateRight); + + return +dateLeftStartOfMinute === +dateRightStartOfMinute; +} + + +/***/ }), + +/***/ 3183: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isSameMonth = isSameMonth; +var _index = __nccwpck_require__(4363); + +/** + * @name isSameMonth + * @category Month Helpers + * @summary Are the given dates in the same month (and year)? + * + * @description + * Are the given dates in the same month (and year)? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The first date to check + * @param dateRight - The second date to check + * + * @returns The dates are in the same month (and year) + * + * @example + * // Are 2 September 2014 and 25 September 2014 in the same month? + * const result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25)) + * //=> true + * + * @example + * // Are 2 September 2014 and 25 September 2015 in the same month? + * const result = isSameMonth(new Date(2014, 8, 2), new Date(2015, 8, 25)) + * //=> false + */ +function isSameMonth(dateLeft, dateRight) { + const _dateLeft = (0, _index.toDate)(dateLeft); + const _dateRight = (0, _index.toDate)(dateRight); + return ( + _dateLeft.getFullYear() === _dateRight.getFullYear() && + _dateLeft.getMonth() === _dateRight.getMonth() + ); +} + + +/***/ }), + +/***/ 9642: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isSameQuarter = isSameQuarter; +var _index = __nccwpck_require__(7947); + +/** + * @name isSameQuarter + * @category Quarter Helpers + * @summary Are the given dates in the same quarter (and year)? + * + * @description + * Are the given dates in the same quarter (and year)? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The first date to check + * @param dateRight - The second date to check + + * @returns The dates are in the same quarter (and year) + * + * @example + * // Are 1 January 2014 and 8 March 2014 in the same quarter? + * const result = isSameQuarter(new Date(2014, 0, 1), new Date(2014, 2, 8)) + * //=> true + * + * @example + * // Are 1 January 2014 and 1 January 2015 in the same quarter? + * const result = isSameQuarter(new Date(2014, 0, 1), new Date(2015, 0, 1)) + * //=> false + */ +function isSameQuarter(dateLeft, dateRight) { + const dateLeftStartOfQuarter = (0, _index.startOfQuarter)(dateLeft); + const dateRightStartOfQuarter = (0, _index.startOfQuarter)(dateRight); + + return +dateLeftStartOfQuarter === +dateRightStartOfQuarter; +} + + +/***/ }), + +/***/ 7187: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isSameSecond = isSameSecond; +var _index = __nccwpck_require__(2839); + +/** + * @name isSameSecond + * @category Second Helpers + * @summary Are the given dates in the same second (and hour and day)? + * + * @description + * Are the given dates in the same second (and hour and day)? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The first date to check + * @param dateRight - The second date to check + * + * @returns The dates are in the same second (and hour and day) + * + * @example + * // Are 4 September 2014 06:30:15.000 and 4 September 2014 06:30.15.500 in the same second? + * const result = isSameSecond( + * new Date(2014, 8, 4, 6, 30, 15), + * new Date(2014, 8, 4, 6, 30, 15, 500) + * ) + * //=> true + * + * @example + * // Are 4 September 2014 06:00:15.000 and 4 September 2014 06:01.15.000 in the same second? + * const result = isSameSecond( + * new Date(2014, 8, 4, 6, 0, 15), + * new Date(2014, 8, 4, 6, 1, 15) + * ) + * //=> false + * + * @example + * // Are 4 September 2014 06:00:15.000 and 5 September 2014 06:00.15.000 in the same second? + * const result = isSameSecond( + * new Date(2014, 8, 4, 6, 0, 15), + * new Date(2014, 8, 5, 6, 0, 15) + * ) + * //=> false + */ +function isSameSecond(dateLeft, dateRight) { + const dateLeftStartOfSecond = (0, _index.startOfSecond)(dateLeft); + const dateRightStartOfSecond = (0, _index.startOfSecond)(dateRight); + + return +dateLeftStartOfSecond === +dateRightStartOfSecond; +} + + +/***/ }), + +/***/ 6810: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isSameWeek = isSameWeek; +var _index = __nccwpck_require__(7421); + +/** + * The {@link isSameWeek} function options. + */ + +/** + * @name isSameWeek + * @category Week Helpers + * @summary Are the given dates in the same week (and month and year)? + * + * @description + * Are the given dates in the same week (and month and year)? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The first date to check + * @param dateRight - The second date to check + * @param options - An object with options + * + * @returns The dates are in the same week (and month and year) + * + * @example + * // Are 31 August 2014 and 4 September 2014 in the same week? + * const result = isSameWeek(new Date(2014, 7, 31), new Date(2014, 8, 4)) + * //=> true + * + * @example + * // If week starts with Monday, + * // are 31 August 2014 and 4 September 2014 in the same week? + * const result = isSameWeek(new Date(2014, 7, 31), new Date(2014, 8, 4), { + * weekStartsOn: 1 + * }) + * //=> false + * + * @example + * // Are 1 January 2014 and 1 January 2015 in the same week? + * const result = isSameWeek(new Date(2014, 0, 1), new Date(2015, 0, 1)) + * //=> false + */ +function isSameWeek(dateLeft, dateRight, options) { + const dateLeftStartOfWeek = (0, _index.startOfWeek)(dateLeft, options); + const dateRightStartOfWeek = (0, _index.startOfWeek)(dateRight, options); + + return +dateLeftStartOfWeek === +dateRightStartOfWeek; +} + + +/***/ }), + +/***/ 5972: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isSameYear = isSameYear; +var _index = __nccwpck_require__(4363); + +/** + * @name isSameYear + * @category Year Helpers + * @summary Are the given dates in the same year? + * + * @description + * Are the given dates in the same year? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateLeft - The first date to check + * @param dateRight - The second date to check + * + * @returns The dates are in the same year + * + * @example + * // Are 2 September 2014 and 25 September 2014 in the same year? + * const result = isSameYear(new Date(2014, 8, 2), new Date(2014, 8, 25)) + * //=> true + */ +function isSameYear(dateLeft, dateRight) { + const _dateLeft = (0, _index.toDate)(dateLeft); + const _dateRight = (0, _index.toDate)(dateRight); + return _dateLeft.getFullYear() === _dateRight.getFullYear(); +} + + +/***/ }), + +/***/ 1627: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isSaturday = isSaturday; +var _index = __nccwpck_require__(4363); + +/** + * @name isSaturday + * @category Weekday Helpers + * @summary Is the given date Saturday? + * + * @description + * Is the given date Saturday? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + * + * @returns The date is Saturday + * + * @example + * // Is 27 September 2014 Saturday? + * const result = isSaturday(new Date(2014, 8, 27)) + * //=> true + */ +function isSaturday(date) { + return (0, _index.toDate)(date).getDay() === 6; +} + + +/***/ }), + +/***/ 6169: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isSunday = isSunday; +var _index = __nccwpck_require__(4363); + +/** + * @name isSunday + * @category Weekday Helpers + * @summary Is the given date Sunday? + * + * @description + * Is the given date Sunday? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + * + * @returns The date is Sunday + * + * @example + * // Is 21 September 2014 Sunday? + * const result = isSunday(new Date(2014, 8, 21)) + * //=> true + */ +function isSunday(date) { + return (0, _index.toDate)(date).getDay() === 0; +} + + +/***/ }), + +/***/ 3875: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isThisHour = isThisHour; +var _index = __nccwpck_require__(1105); +var _index2 = __nccwpck_require__(7366); + +/** + * @name isThisHour + * @category Hour Helpers + * @summary Is the given date in the same hour as the current date? + * @pure false + * + * @description + * Is the given date in the same hour as the current date? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + * + * @returns The date is in this hour + * + * @example + * // If now is 25 September 2014 18:30:15.500, + * // is 25 September 2014 18:00:00 in this hour? + * const result = isThisHour(new Date(2014, 8, 25, 18)) + * //=> true + */ +function isThisHour(date) { + return (0, _index2.isSameHour)(date, (0, _index.constructNow)(date)); +} + + +/***/ }), + +/***/ 4859: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isThisISOWeek = isThisISOWeek; +var _index = __nccwpck_require__(1105); +var _index2 = __nccwpck_require__(7069); + +/** + * @name isThisISOWeek + * @category ISO Week Helpers + * @summary Is the given date in the same ISO week as the current date? + * @pure false + * + * @description + * Is the given date in the same ISO week as the current date? + * + * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + * + * @returns The date is in this ISO week + * + * @example + * // If today is 25 September 2014, is 22 September 2014 in this ISO week? + * const result = isThisISOWeek(new Date(2014, 8, 22)) + * //=> true + */ + +function isThisISOWeek(date) { + return (0, _index2.isSameISOWeek)(date, (0, _index.constructNow)(date)); +} + + +/***/ }), + +/***/ 4111: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isThisMinute = isThisMinute; +var _index = __nccwpck_require__(1105); +var _index2 = __nccwpck_require__(2166); + +/** + * @name isThisMinute + * @category Minute Helpers + * @summary Is the given date in the same minute as the current date? + * @pure false + * + * @description + * Is the given date in the same minute as the current date? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + * + * @returns The date is in this minute + * + * @example + * // If now is 25 September 2014 18:30:15.500, + * // is 25 September 2014 18:30:00 in this minute? + * const result = isThisMinute(new Date(2014, 8, 25, 18, 30)) + * //=> true + */ + +function isThisMinute(date) { + return (0, _index2.isSameMinute)(date, (0, _index.constructNow)(date)); +} + + +/***/ }), + +/***/ 4002: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isThisMonth = isThisMonth; +var _index = __nccwpck_require__(1105); +var _index2 = __nccwpck_require__(3183); + +/** + * @name isThisMonth + * @category Month Helpers + * @summary Is the given date in the same month as the current date? + * @pure false + * + * @description + * Is the given date in the same month as the current date? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + * + * @returns The date is in this month + * + * @example + * // If today is 25 September 2014, is 15 September 2014 in this month? + * const result = isThisMonth(new Date(2014, 8, 15)) + * //=> true + */ + +function isThisMonth(date) { + return (0, _index2.isSameMonth)(date, (0, _index.constructNow)(date)); +} + + +/***/ }), + +/***/ 8916: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isThisQuarter = isThisQuarter; +var _index = __nccwpck_require__(1105); +var _index2 = __nccwpck_require__(9642); + +/** + * @name isThisQuarter + * @category Quarter Helpers + * @summary Is the given date in the same quarter as the current date? + * @pure false + * + * @description + * Is the given date in the same quarter as the current date? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + * + * @returns The date is in this quarter + * + * @example + * // If today is 25 September 2014, is 2 July 2014 in this quarter? + * const result = isThisQuarter(new Date(2014, 6, 2)) + * //=> true + */ +function isThisQuarter(date) { + return (0, _index2.isSameQuarter)(date, (0, _index.constructNow)(date)); +} + + +/***/ }), + +/***/ 1375: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isThisSecond = isThisSecond; +var _index = __nccwpck_require__(1105); +var _index2 = __nccwpck_require__(7187); + +/** + * @name isThisSecond + * @category Second Helpers + * @summary Is the given date in the same second as the current date? + * @pure false + * + * @description + * Is the given date in the same second as the current date? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + * + * @returns The date is in this second + * + * @example + * // If now is 25 September 2014 18:30:15.500, + * // is 25 September 2014 18:30:15.000 in this second? + * const result = isThisSecond(new Date(2014, 8, 25, 18, 30, 15)) + * //=> true + */ +function isThisSecond(date) { + return (0, _index2.isSameSecond)(date, (0, _index.constructNow)(date)); +} + + +/***/ }), + +/***/ 9325: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isThisWeek = isThisWeek; +var _index = __nccwpck_require__(1105); +var _index2 = __nccwpck_require__(6810); + +/** + * The {@link isThisWeek} function options. + */ + +/** + * @name isThisWeek + * @category Week Helpers + * @summary Is the given date in the same week as the current date? + * @pure false + * + * @description + * Is the given date in the same week as the current date? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + * @param options - The object with options + * + * @returns The date is in this week + * + * @example + * // If today is 25 September 2014, is 21 September 2014 in this week? + * const result = isThisWeek(new Date(2014, 8, 21)) + * //=> true + * + * @example + * // If today is 25 September 2014 and week starts with Monday + * // is 21 September 2014 in this week? + * const result = isThisWeek(new Date(2014, 8, 21), { weekStartsOn: 1 }) + * //=> false + */ +function isThisWeek(date, options) { + return (0, _index2.isSameWeek)(date, (0, _index.constructNow)(date), options); +} + + +/***/ }), + +/***/ 54: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isThisYear = isThisYear; +var _index = __nccwpck_require__(1105); +var _index2 = __nccwpck_require__(5972); + +/** + * @name isThisYear + * @category Year Helpers + * @summary Is the given date in the same year as the current date? + * @pure false + * + * @description + * Is the given date in the same year as the current date? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + * + * @returns The date is in this year + * + * @example + * // If today is 25 September 2014, is 2 July 2014 in this year? + * const result = isThisYear(new Date(2014, 6, 2)) + * //=> true + */ +function isThisYear(date) { + return (0, _index2.isSameYear)(date, (0, _index.constructNow)(date)); +} + + +/***/ }), + +/***/ 8817: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isThursday = isThursday; +var _index = __nccwpck_require__(4363); + +/** + * @name isThursday + * @category Weekday Helpers + * @summary Is the given date Thursday? + * + * @description + * Is the given date Thursday? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + * + * @returns The date is Thursday + * + * @example + * // Is 25 September 2014 Thursday? + * const result = isThursday(new Date(2014, 8, 25)) + * //=> true + */ +function isThursday(date) { + return (0, _index.toDate)(date).getDay() === 4; +} + + +/***/ }), + +/***/ 1238: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isToday = isToday; +var _index = __nccwpck_require__(1105); +var _index2 = __nccwpck_require__(6803); + +/** + * @name isToday + * @category Day Helpers + * @summary Is the given date today? + * @pure false + * + * @description + * Is the given date today? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + * + * @returns The date is today + * + * @example + * // If today is 6 October 2014, is 6 October 14:00:00 today? + * const result = isToday(new Date(2014, 9, 6, 14, 0)) + * //=> true + */ +function isToday(date) { + return (0, _index2.isSameDay)(date, (0, _index.constructNow)(date)); +} + + +/***/ }), + +/***/ 2447: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isTomorrow = isTomorrow; +var _index = __nccwpck_require__(6520); +var _index2 = __nccwpck_require__(1105); +var _index3 = __nccwpck_require__(6803); + +/** + * @name isTomorrow + * @category Day Helpers + * @summary Is the given date tomorrow? + * @pure false + * + * @description + * Is the given date tomorrow? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + * + * @returns The date is tomorrow + * + * @example + * // If today is 6 October 2014, is 7 October 14:00:00 tomorrow? + * const result = isTomorrow(new Date(2014, 9, 7, 14, 0)) + * //=> true + */ +function isTomorrow(date) { + return (0, _index3.isSameDay)( + date, + (0, _index.addDays)((0, _index2.constructNow)(date), 1), + ); +} + + +/***/ }), + +/***/ 3526: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isTuesday = isTuesday; +var _index = __nccwpck_require__(4363); + +/** + * @name isTuesday + * @category Weekday Helpers + * @summary Is the given date Tuesday? + * + * @description + * Is the given date Tuesday? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + * + * @returns The date is Tuesday + * + * @example + * // Is 23 September 2014 Tuesday? + * const result = isTuesday(new Date(2014, 8, 23)) + * //=> true + */ +function isTuesday(date) { + return (0, _index.toDate)(date).getDay() === 2; +} + + +/***/ }), + +/***/ 6623: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isValid = isValid; +var _index = __nccwpck_require__(8395); +var _index2 = __nccwpck_require__(4363); + +/** + * @name isValid + * @category Common Helpers + * @summary Is the given date valid? + * + * @description + * Returns false if argument is Invalid Date and true otherwise. + * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate) + * Invalid Date is a Date, whose time value is NaN. + * + * Time value of Date: http://es5.github.io/#x15.9.1.1 + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + * + * @returns The date is valid + * + * @example + * // For the valid date: + * const result = isValid(new Date(2014, 1, 31)) + * //=> true + * + * @example + * // For the value, convertable into a date: + * const result = isValid(1393804800000) + * //=> true + * + * @example + * // For the invalid date: + * const result = isValid(new Date('')) + * //=> false + */ +function isValid(date) { + if (!(0, _index.isDate)(date) && typeof date !== "number") { + return false; + } + const _date = (0, _index2.toDate)(date); + return !isNaN(Number(_date)); +} + + +/***/ }), + +/***/ 459: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isWednesday = isWednesday; +var _index = __nccwpck_require__(4363); + +/** + * @name isWednesday + * @category Weekday Helpers + * @summary Is the given date Wednesday? + * + * @description + * Is the given date Wednesday? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + * + * @returns The date is Wednesday + * + * @example + * // Is 24 September 2014 Wednesday? + * const result = isWednesday(new Date(2014, 8, 24)) + * //=> true + */ +function isWednesday(date) { + return (0, _index.toDate)(date).getDay() === 3; +} + + +/***/ }), + +/***/ 2989: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isWeekend = isWeekend; +var _index = __nccwpck_require__(4363); + +/** + * @name isWeekend + * @category Weekday Helpers + * @summary Does the given date fall on a weekend? + * + * @description + * Does the given date fall on a weekend? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + * + * @returns The date falls on a weekend + * + * @example + * // Does 5 October 2014 fall on a weekend? + * const result = isWeekend(new Date(2014, 9, 5)) + * //=> true + */ +function isWeekend(date) { + const day = (0, _index.toDate)(date).getDay(); + return day === 0 || day === 6; +} + + +/***/ }), + +/***/ 3467: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isWithinInterval = isWithinInterval; +var _index = __nccwpck_require__(4363); + +/** + * @name isWithinInterval + * @category Interval Helpers + * @summary Is the given date within the interval? + * + * @description + * Is the given date within the interval? (Including start and end.) + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + * @param interval - The interval to check + * + * @returns The date is within the interval + * + * @example + * // For the date within the interval: + * isWithinInterval(new Date(2014, 0, 3), { + * start: new Date(2014, 0, 1), + * end: new Date(2014, 0, 7) + * }) + * //=> true + * + * @example + * // For the date outside of the interval: + * isWithinInterval(new Date(2014, 0, 10), { + * start: new Date(2014, 0, 1), + * end: new Date(2014, 0, 7) + * }) + * //=> false + * + * @example + * // For date equal to interval start: + * isWithinInterval(date, { start, end: date }) + * // => true + * + * @example + * // For date equal to interval end: + * isWithinInterval(date, { start: date, end }) + * // => true + */ +function isWithinInterval(date, interval) { + const time = +(0, _index.toDate)(date); + const [startTime, endTime] = [ + +(0, _index.toDate)(interval.start), + +(0, _index.toDate)(interval.end), + ].sort((a, b) => a - b); + + return time >= startTime && time <= endTime; +} + + +/***/ }), + +/***/ 1183: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.isYesterday = isYesterday; +var _index = __nccwpck_require__(1105); +var _index2 = __nccwpck_require__(6803); +var _index3 = __nccwpck_require__(8028); + +/** + * @name isYesterday + * @category Day Helpers + * @summary Is the given date yesterday? + * @pure false + * + * @description + * Is the given date yesterday? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + * + * @returns The date is yesterday + * + * @example + * // If today is 6 October 2014, is 5 October 14:00:00 yesterday? + * const result = isYesterday(new Date(2014, 9, 5, 14, 0)) + * //=> true + */ +function isYesterday(date) { + return (0, _index2.isSameDay)( + date, + (0, _index3.subDays)((0, _index.constructNow)(date), 1), + ); +} + + +/***/ }), + +/***/ 6304: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.lastDayOfDecade = lastDayOfDecade; +var _index = __nccwpck_require__(4363); + +/** + * @name lastDayOfDecade + * @category Decade Helpers + * @summary Return the last day of a decade for the given date. + * + * @description + * Return the last day of a decade for the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * + * @returns The last day of a decade + * + * @example + * // The last day of a decade for 21 December 2012 21:12:00: + * const result = lastDayOfDecade(new Date(2012, 11, 21, 21, 12, 00)) + * //=> Wed Dec 31 2019 00:00:00 + */ +function lastDayOfDecade(date) { + // TODO: Switch to more technical definition in of decades that start with 1 + // end with 0. I.e. 2001-2010 instead of current 2000-2009. It's a breaking + // change, so it can only be done in 4.0. + const _date = (0, _index.toDate)(date); + const year = _date.getFullYear(); + const decade = 9 + Math.floor(year / 10) * 10; + _date.setFullYear(decade + 1, 0, 0); + _date.setHours(0, 0, 0, 0); + return _date; +} + + +/***/ }), + +/***/ 1231: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.lastDayOfISOWeek = lastDayOfISOWeek; +var _index = __nccwpck_require__(6697); + +/** + * @name lastDayOfISOWeek + * @category ISO Week Helpers + * @summary Return the last day of an ISO week for the given date. + * + * @description + * Return the last day of an ISO week for the given date. + * The result will be in the local timezone. + * + * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * + * @returns The last day of an ISO week + * + * @example + * // The last day of an ISO week for 2 September 2014 11:55:00: + * const result = lastDayOfISOWeek(new Date(2014, 8, 2, 11, 55, 0)) + * //=> Sun Sep 07 2014 00:00:00 + */ +function lastDayOfISOWeek(date) { + return (0, _index.lastDayOfWeek)(date, { weekStartsOn: 1 }); +} + + +/***/ }), + +/***/ 3113: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.lastDayOfISOWeekYear = lastDayOfISOWeekYear; +var _index = __nccwpck_require__(7569); +var _index2 = __nccwpck_require__(1573); +var _index3 = __nccwpck_require__(2524); + +/** + * @name lastDayOfISOWeekYear + * @category ISO Week-Numbering Year Helpers + * @summary Return the last day of an ISO week-numbering year for the given date. + * + * @description + * Return the last day of an ISO week-numbering year, + * which always starts 3 days before the year's first Thursday. + * The result will be in the local timezone. + * + * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * + * @returns The end of an ISO week-numbering year + * + * @example + * // The last day of an ISO week-numbering year for 2 July 2005: + * const result = lastDayOfISOWeekYear(new Date(2005, 6, 2)) + * //=> Sun Jan 01 2006 00:00:00 + */ +function lastDayOfISOWeekYear(date) { + const year = (0, _index.getISOWeekYear)(date); + const fourthOfJanuary = (0, _index3.constructFrom)(date, 0); + fourthOfJanuary.setFullYear(year + 1, 0, 4); + fourthOfJanuary.setHours(0, 0, 0, 0); + const _date = (0, _index2.startOfISOWeek)(fourthOfJanuary); + _date.setDate(_date.getDate() - 1); + return _date; +} + + +/***/ }), + +/***/ 4276: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.lastDayOfMonth = lastDayOfMonth; +var _index = __nccwpck_require__(4363); + +/** + * @name lastDayOfMonth + * @category Month Helpers + * @summary Return the last day of a month for the given date. + * + * @description + * Return the last day of a month for the given date. + * The result will be in the local timezone. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * + * @returns The last day of a month + * + * @example + * // The last day of a month for 2 September 2014 11:55:00: + * const result = lastDayOfMonth(new Date(2014, 8, 2, 11, 55, 0)) + * //=> Tue Sep 30 2014 00:00:00 + */ +function lastDayOfMonth(date) { + const _date = (0, _index.toDate)(date); + const month = _date.getMonth(); + _date.setFullYear(_date.getFullYear(), month + 1, 0); + _date.setHours(0, 0, 0, 0); + return _date; +} + + +/***/ }), + +/***/ 8420: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.lastDayOfQuarter = lastDayOfQuarter; +var _index = __nccwpck_require__(4363); + +/** + * @name lastDayOfQuarter + * @category Quarter Helpers + * @summary Return the last day of a year quarter for the given date. + * + * @description + * Return the last day of a year quarter for the given date. + * The result will be in the local timezone. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * + * @returns The last day of a quarter + * + * @example + * // The last day of a quarter for 2 September 2014 11:55:00: + * const result = lastDayOfQuarter(new Date(2014, 8, 2, 11, 55, 0)) + * //=> Tue Sep 30 2014 00:00:00 + */ +function lastDayOfQuarter(date) { + const _date = (0, _index.toDate)(date); + const currentMonth = _date.getMonth(); + const month = currentMonth - (currentMonth % 3) + 3; + _date.setMonth(month, 0); + _date.setHours(0, 0, 0, 0); + return _date; +} + + +/***/ }), + +/***/ 6697: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.lastDayOfWeek = lastDayOfWeek; +var _index = __nccwpck_require__(4363); + +var _index2 = __nccwpck_require__(91); + +/** + * The {@link lastDayOfWeek} function options. + */ + +/** + * @name lastDayOfWeek + * @category Week Helpers + * @summary Return the last day of a week for the given date. + * + * @description + * Return the last day of a week for the given date. + * The result will be in the local timezone. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * @param options - An object with options + * + * @returns The last day of a week + * + * @example + * // The last day of a week for 2 September 2014 11:55:00: + * const result = lastDayOfWeek(new Date(2014, 8, 2, 11, 55, 0)) + * //=> Sat Sep 06 2014 00:00:00 + * + * @example + * // If the week starts on Monday, the last day of the week for 2 September 2014 11:55:00: + * const result = lastDayOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 }) + * //=> Sun Sep 07 2014 00:00:00 + */ +function lastDayOfWeek(date, options) { + const defaultOptions = (0, _index2.getDefaultOptions)(); + const weekStartsOn = + options?.weekStartsOn ?? + options?.locale?.options?.weekStartsOn ?? + defaultOptions.weekStartsOn ?? + defaultOptions.locale?.options?.weekStartsOn ?? + 0; + + const _date = (0, _index.toDate)(date); + const day = _date.getDay(); + const diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn); + + _date.setHours(0, 0, 0, 0); + _date.setDate(_date.getDate() + diff); + return _date; +} + + +/***/ }), + +/***/ 8645: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.lastDayOfYear = lastDayOfYear; +var _index = __nccwpck_require__(4363); + +/** + * @name lastDayOfYear + * @category Year Helpers + * @summary Return the last day of a year for the given date. + * + * @description + * Return the last day of a year for the given date. + * The result will be in the local timezone. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * + * @returns The last day of a year + * + * @example + * // The last day of a year for 2 September 2014 11:55:00: + * const result = lastDayOfYear(new Date(2014, 8, 2, 11, 55, 00)) + * //=> Wed Dec 31 2014 00:00:00 + */ +function lastDayOfYear(date) { + const _date = (0, _index.toDate)(date); + const year = _date.getFullYear(); + _date.setFullYear(year + 1, 0, 0); + _date.setHours(0, 0, 0, 0); + return _date; +} + + +/***/ }), + +/***/ 753: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.lightFormat = lightFormat; +Object.defineProperty(exports, "lightFormatters", ({ + enumerable: true, + get: function () { + return _index3.lightFormatters; + }, +})); +var _index = __nccwpck_require__(6623); +var _index2 = __nccwpck_require__(4363); +var _index3 = __nccwpck_require__(6701); + +// Rexports of internal for libraries to use. +// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874 + +// This RegExp consists of three parts separated by `|`: +// - (\w)\1* matches any sequences of the same letter +// - '' matches two quote characters in a row +// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('), +// except a single quote symbol, which ends the sequence. +// Two quote characters do not end the sequence. +// If there is no matching single quote +// then the sequence will continue until the end of the string. +// - . matches any single character unmatched by previous parts of the RegExps +const formattingTokensRegExp = /(\w)\1*|''|'(''|[^'])+('|$)|./g; + +const escapedStringRegExp = /^'([^]*?)'?$/; +const doubleQuoteRegExp = /''/g; +const unescapedLatinCharacterRegExp = /[a-zA-Z]/; + +/** + * @private + */ + +/** + * @name lightFormat + * @category Common Helpers + * @summary Format the date. + * + * @description + * Return the formatted date string in the given format. Unlike `format`, + * `lightFormat` doesn't use locales and outputs date using the most popular tokens. + * + * > ⚠️ Please note that the `lightFormat` tokens differ from Moment.js and other libraries. + * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * + * The characters wrapped between two single quotes characters (') are escaped. + * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote. + * + * Format of the string is based on Unicode Technical Standard #35: + * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table + * + * Accepted patterns: + * | Unit | Pattern | Result examples | + * |---------------------------------|---------|-----------------------------------| + * | AM, PM | a..aaa | AM, PM | + * | | aaaa | a.m., p.m. | + * | | aaaaa | a, p | + * | Calendar year | y | 44, 1, 1900, 2017 | + * | | yy | 44, 01, 00, 17 | + * | | yyy | 044, 001, 000, 017 | + * | | yyyy | 0044, 0001, 1900, 2017 | + * | Month (formatting) | M | 1, 2, ..., 12 | + * | | MM | 01, 02, ..., 12 | + * | Day of month | d | 1, 2, ..., 31 | + * | | dd | 01, 02, ..., 31 | + * | Hour [1-12] | h | 1, 2, ..., 11, 12 | + * | | hh | 01, 02, ..., 11, 12 | + * | Hour [0-23] | H | 0, 1, 2, ..., 23 | + * | | HH | 00, 01, 02, ..., 23 | + * | Minute | m | 0, 1, ..., 59 | + * | | mm | 00, 01, ..., 59 | + * | Second | s | 0, 1, ..., 59 | + * | | ss | 00, 01, ..., 59 | + * | Fraction of second | S | 0, 1, ..., 9 | + * | | SS | 00, 01, ..., 99 | + * | | SSS | 000, 001, ..., 999 | + * | | SSSS | ... | + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * @param format - The string of tokens + * + * @returns The formatted date string + * + * @throws `Invalid time value` if the date is invalid + * @throws format string contains an unescaped latin alphabet character + * + * @example + * const result = lightFormat(new Date(2014, 1, 11), 'yyyy-MM-dd') + * //=> '2014-02-11' + */ +function lightFormat(date, formatStr) { + const _date = (0, _index2.toDate)(date); + + if (!(0, _index.isValid)(_date)) { + throw new RangeError("Invalid time value"); + } + + const tokens = formatStr.match(formattingTokensRegExp); + + // The only case when formattingTokensRegExp doesn't match the string is when it's empty + if (!tokens) return ""; + + const result = tokens + .map((substring) => { + // Replace two single quote characters with one single quote character + if (substring === "''") { + return "'"; + } + + const firstCharacter = substring[0]; + if (firstCharacter === "'") { + return cleanEscapedString(substring); + } + + const formatter = _index3.lightFormatters[firstCharacter]; + if (formatter) { + return formatter(_date, substring); + } + + if (firstCharacter.match(unescapedLatinCharacterRegExp)) { + throw new RangeError( + "Format string contains an unescaped latin alphabet character `" + + firstCharacter + + "`", + ); + } + + return substring; + }) + .join(""); + + return result; +} + +function cleanEscapedString(input) { + const matches = input.match(escapedStringRegExp); + + if (!matches) { + return input; + } + + return matches[1].replace(doubleQuoteRegExp, "'"); +} + + +/***/ }), + +/***/ 6326: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +exports.buildFormatLongFn = buildFormatLongFn; + +function buildFormatLongFn(args) { + return (options = {}) => { + // TODO: Remove String() + const width = options.width ? String(options.width) : args.defaultWidth; + const format = args.formats[width] || args.formats[args.defaultWidth]; + return format; + }; +} + + +/***/ }), + +/***/ 6811: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +exports.buildLocalizeFn = buildLocalizeFn; /* eslint-disable no-unused-vars */ + +/** + * The localize function argument callback which allows to convert raw value to + * the actual type. + * + * @param value - The value to convert + * + * @returns The converted value + */ + +/** + * The map of localized values for each width. + */ + +/** + * The index type of the locale unit value. It types conversion of units of + * values that don't start at 0 (i.e. quarters). + */ + +/** + * Converts the unit value to the tuple of values. + */ + +/** + * The tuple of localized era values. The first element represents BC, + * the second element represents AD. + */ + +/** + * The tuple of localized quarter values. The first element represents Q1. + */ + +/** + * The tuple of localized day values. The first element represents Sunday. + */ + +/** + * The tuple of localized month values. The first element represents January. + */ + +function buildLocalizeFn(args) { + return (value, options) => { + const context = options?.context ? String(options.context) : "standalone"; + + let valuesArray; + if (context === "formatting" && args.formattingValues) { + const defaultWidth = args.defaultFormattingWidth || args.defaultWidth; + const width = options?.width ? String(options.width) : defaultWidth; + + valuesArray = + args.formattingValues[width] || args.formattingValues[defaultWidth]; + } else { + const defaultWidth = args.defaultWidth; + const width = options?.width ? String(options.width) : args.defaultWidth; + + valuesArray = args.values[width] || args.values[defaultWidth]; + } + const index = args.argumentCallback ? args.argumentCallback(value) : value; + + // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it! + return valuesArray[index]; + }; +} + + +/***/ }), + +/***/ 1686: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +exports.buildMatchFn = buildMatchFn; + +function buildMatchFn(args) { + return (string, options = {}) => { + const width = options.width; + + const matchPattern = + (width && args.matchPatterns[width]) || + args.matchPatterns[args.defaultMatchWidth]; + const matchResult = string.match(matchPattern); + + if (!matchResult) { + return null; + } + const matchedString = matchResult[0]; + + const parsePatterns = + (width && args.parsePatterns[width]) || + args.parsePatterns[args.defaultParseWidth]; + + const key = Array.isArray(parsePatterns) + ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString)) + : // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type + findKey(parsePatterns, (pattern) => pattern.test(matchedString)); + + let value; + + value = args.valueCallback ? args.valueCallback(key) : key; + value = options.valueCallback + ? // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type + options.valueCallback(value) + : value; + + const rest = string.slice(matchedString.length); + + return { value, rest }; + }; +} + +function findKey(object, predicate) { + for (const key in object) { + if ( + Object.prototype.hasOwnProperty.call(object, key) && + predicate(object[key]) + ) { + return key; + } + } + return undefined; +} + +function findIndex(array, predicate) { + for (let key = 0; key < array.length; key++) { + if (predicate(array[key])) { + return key; + } + } + return undefined; +} + + +/***/ }), + +/***/ 708: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +exports.buildMatchPatternFn = buildMatchPatternFn; + +function buildMatchPatternFn(args) { + return (string, options = {}) => { + const matchResult = string.match(args.matchPattern); + if (!matchResult) return null; + const matchedString = matchResult[0]; + + const parseResult = string.match(args.parsePattern); + if (!parseResult) return null; + let value = args.valueCallback + ? args.valueCallback(parseResult[0]) + : parseResult[0]; + + // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type + value = options.valueCallback ? options.valueCallback(value) : value; + + const rest = string.slice(matchedString.length); + + return { value, rest }; + }; +} + + +/***/ }), + +/***/ 3963: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.enUS = void 0; +var _index = __nccwpck_require__(2432); +var _index2 = __nccwpck_require__(4022); +var _index3 = __nccwpck_require__(3653); +var _index4 = __nccwpck_require__(4206); +var _index5 = __nccwpck_require__(6585); + +/** + * @category Locales + * @summary English locale (United States). + * @language English + * @iso-639-2 eng + * @author Sasha Koss [@kossnocorp](https://github.com/kossnocorp) + * @author Lesha Koss [@leshakoss](https://github.com/leshakoss) + */ +const enUS = (exports.enUS = { + code: "en-US", + formatDistance: _index.formatDistance, + formatLong: _index2.formatLong, + formatRelative: _index3.formatRelative, + localize: _index4.localize, + match: _index5.match, + options: { + weekStartsOn: 0 /* Sunday */, + firstWeekContainsDate: 1, + }, +}); + + +/***/ }), + +/***/ 2432: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +exports.formatDistance = void 0; + +const formatDistanceLocale = { + lessThanXSeconds: { + one: "less than a second", + other: "less than {{count}} seconds", + }, + + xSeconds: { + one: "1 second", + other: "{{count}} seconds", + }, + + halfAMinute: "half a minute", + + lessThanXMinutes: { + one: "less than a minute", + other: "less than {{count}} minutes", + }, + + xMinutes: { + one: "1 minute", + other: "{{count}} minutes", + }, + + aboutXHours: { + one: "about 1 hour", + other: "about {{count}} hours", + }, + + xHours: { + one: "1 hour", + other: "{{count}} hours", + }, + + xDays: { + one: "1 day", + other: "{{count}} days", + }, + + aboutXWeeks: { + one: "about 1 week", + other: "about {{count}} weeks", + }, + + xWeeks: { + one: "1 week", + other: "{{count}} weeks", + }, + + aboutXMonths: { + one: "about 1 month", + other: "about {{count}} months", + }, + + xMonths: { + one: "1 month", + other: "{{count}} months", + }, + + aboutXYears: { + one: "about 1 year", + other: "about {{count}} years", + }, + + xYears: { + one: "1 year", + other: "{{count}} years", + }, + + overXYears: { + one: "over 1 year", + other: "over {{count}} years", + }, + + almostXYears: { + one: "almost 1 year", + other: "almost {{count}} years", + }, +}; + +const formatDistance = (token, count, options) => { + let result; + + const tokenValue = formatDistanceLocale[token]; + if (typeof tokenValue === "string") { + result = tokenValue; + } else if (count === 1) { + result = tokenValue.one; + } else { + result = tokenValue.other.replace("{{count}}", count.toString()); + } + + if (options?.addSuffix) { + if (options.comparison && options.comparison > 0) { + return "in " + result; + } else { + return result + " ago"; + } + } + + return result; +}; +exports.formatDistance = formatDistance; + + +/***/ }), + +/***/ 4022: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.formatLong = void 0; +var _index = __nccwpck_require__(6326); + +const dateFormats = { + full: "EEEE, MMMM do, y", + long: "MMMM do, y", + medium: "MMM d, y", + short: "MM/dd/yyyy", +}; + +const timeFormats = { + full: "h:mm:ss a zzzz", + long: "h:mm:ss a z", + medium: "h:mm:ss a", + short: "h:mm a", +}; + +const dateTimeFormats = { + full: "{{date}} 'at' {{time}}", + long: "{{date}} 'at' {{time}}", + medium: "{{date}}, {{time}}", + short: "{{date}}, {{time}}", +}; + +const formatLong = (exports.formatLong = { + date: (0, _index.buildFormatLongFn)({ + formats: dateFormats, + defaultWidth: "full", + }), + + time: (0, _index.buildFormatLongFn)({ + formats: timeFormats, + defaultWidth: "full", + }), + + dateTime: (0, _index.buildFormatLongFn)({ + formats: dateTimeFormats, + defaultWidth: "full", + }), +}); + + +/***/ }), + +/***/ 3653: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +exports.formatRelative = void 0; + +const formatRelativeLocale = { + lastWeek: "'last' eeee 'at' p", + yesterday: "'yesterday at' p", + today: "'today at' p", + tomorrow: "'tomorrow at' p", + nextWeek: "eeee 'at' p", + other: "P", +}; + +const formatRelative = (token, _date, _baseDate, _options) => + formatRelativeLocale[token]; +exports.formatRelative = formatRelative; + + +/***/ }), + +/***/ 4206: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.localize = void 0; +var _index = __nccwpck_require__(6811); + +const eraValues = { + narrow: ["B", "A"], + abbreviated: ["BC", "AD"], + wide: ["Before Christ", "Anno Domini"], +}; + +const quarterValues = { + narrow: ["1", "2", "3", "4"], + abbreviated: ["Q1", "Q2", "Q3", "Q4"], + wide: ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"], +}; + +// Note: in English, the names of days of the week and months are capitalized. +// If you are making a new locale based on this one, check if the same is true for the language you're working on. +// Generally, formatted dates should look like they are in the middle of a sentence, +// e.g. in Spanish language the weekdays and months should be in the lowercase. +const monthValues = { + narrow: ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], + abbreviated: [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec", + ], + + wide: [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December", + ], +}; + +const dayValues = { + narrow: ["S", "M", "T", "W", "T", "F", "S"], + short: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], + abbreviated: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], + wide: [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday", + ], +}; + +const dayPeriodValues = { + narrow: { + am: "a", + pm: "p", + midnight: "mi", + noon: "n", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night", + }, + abbreviated: { + am: "AM", + pm: "PM", + midnight: "midnight", + noon: "noon", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night", + }, + wide: { + am: "a.m.", + pm: "p.m.", + midnight: "midnight", + noon: "noon", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night", + }, +}; + +const formattingDayPeriodValues = { + narrow: { + am: "a", + pm: "p", + midnight: "mi", + noon: "n", + morning: "in the morning", + afternoon: "in the afternoon", + evening: "in the evening", + night: "at night", + }, + abbreviated: { + am: "AM", + pm: "PM", + midnight: "midnight", + noon: "noon", + morning: "in the morning", + afternoon: "in the afternoon", + evening: "in the evening", + night: "at night", + }, + wide: { + am: "a.m.", + pm: "p.m.", + midnight: "midnight", + noon: "noon", + morning: "in the morning", + afternoon: "in the afternoon", + evening: "in the evening", + night: "at night", + }, +}; + +const ordinalNumber = (dirtyNumber, _options) => { + const number = Number(dirtyNumber); + + // If ordinal numbers depend on context, for example, + // if they are different for different grammatical genders, + // use `options.unit`. + // + // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear', + // 'day', 'hour', 'minute', 'second'. + + const rem100 = number % 100; + if (rem100 > 20 || rem100 < 10) { + switch (rem100 % 10) { + case 1: + return number + "st"; + case 2: + return number + "nd"; + case 3: + return number + "rd"; + } + } + return number + "th"; +}; + +const localize = (exports.localize = { + ordinalNumber, + + era: (0, _index.buildLocalizeFn)({ + values: eraValues, + defaultWidth: "wide", + }), + + quarter: (0, _index.buildLocalizeFn)({ + values: quarterValues, + defaultWidth: "wide", + argumentCallback: (quarter) => quarter - 1, + }), + + month: (0, _index.buildLocalizeFn)({ + values: monthValues, + defaultWidth: "wide", + }), + + day: (0, _index.buildLocalizeFn)({ + values: dayValues, + defaultWidth: "wide", + }), + + dayPeriod: (0, _index.buildLocalizeFn)({ + values: dayPeriodValues, + defaultWidth: "wide", + formattingValues: formattingDayPeriodValues, + defaultFormattingWidth: "wide", + }), +}); + + +/***/ }), + +/***/ 6585: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.match = void 0; + +var _index = __nccwpck_require__(1686); +var _index2 = __nccwpck_require__(708); + +const matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i; +const parseOrdinalNumberPattern = /\d+/i; + +const matchEraPatterns = { + narrow: /^(b|a)/i, + abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i, + wide: /^(before christ|before common era|anno domini|common era)/i, +}; +const parseEraPatterns = { + any: [/^b/i, /^(a|c)/i], +}; + +const matchQuarterPatterns = { + narrow: /^[1234]/i, + abbreviated: /^q[1234]/i, + wide: /^[1234](th|st|nd|rd)? quarter/i, +}; +const parseQuarterPatterns = { + any: [/1/i, /2/i, /3/i, /4/i], +}; + +const matchMonthPatterns = { + narrow: /^[jfmasond]/i, + abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i, + wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i, +}; +const parseMonthPatterns = { + narrow: [ + /^j/i, + /^f/i, + /^m/i, + /^a/i, + /^m/i, + /^j/i, + /^j/i, + /^a/i, + /^s/i, + /^o/i, + /^n/i, + /^d/i, + ], + + any: [ + /^ja/i, + /^f/i, + /^mar/i, + /^ap/i, + /^may/i, + /^jun/i, + /^jul/i, + /^au/i, + /^s/i, + /^o/i, + /^n/i, + /^d/i, + ], +}; + +const matchDayPatterns = { + narrow: /^[smtwf]/i, + short: /^(su|mo|tu|we|th|fr|sa)/i, + abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i, + wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i, +}; +const parseDayPatterns = { + narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i], + any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i], +}; + +const matchDayPeriodPatterns = { + narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i, + any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i, +}; +const parseDayPeriodPatterns = { + any: { + am: /^a/i, + pm: /^p/i, + midnight: /^mi/i, + noon: /^no/i, + morning: /morning/i, + afternoon: /afternoon/i, + evening: /evening/i, + night: /night/i, + }, +}; + +const match = (exports.match = { + ordinalNumber: (0, _index2.buildMatchPatternFn)({ + matchPattern: matchOrdinalNumberPattern, + parsePattern: parseOrdinalNumberPattern, + valueCallback: (value) => parseInt(value, 10), + }), + + era: (0, _index.buildMatchFn)({ + matchPatterns: matchEraPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseEraPatterns, + defaultParseWidth: "any", + }), + + quarter: (0, _index.buildMatchFn)({ + matchPatterns: matchQuarterPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseQuarterPatterns, + defaultParseWidth: "any", + valueCallback: (index) => index + 1, + }), + + month: (0, _index.buildMatchFn)({ + matchPatterns: matchMonthPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseMonthPatterns, + defaultParseWidth: "any", + }), + + day: (0, _index.buildMatchFn)({ + matchPatterns: matchDayPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseDayPatterns, + defaultParseWidth: "any", + }), + + dayPeriod: (0, _index.buildMatchFn)({ + matchPatterns: matchDayPeriodPatterns, + defaultMatchWidth: "any", + parsePatterns: parseDayPeriodPatterns, + defaultParseWidth: "any", + }), +}); + + +/***/ }), + +/***/ 1321: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.max = max; +var _index = __nccwpck_require__(4363); + +/** + * @name max + * @category Common Helpers + * @summary Return the latest of the given dates. + * + * @description + * Return the latest of the given dates. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dates - The dates to compare + * + * @returns The latest of the dates + * + * @example + * // Which of these dates is the latest? + * const result = max([ + * new Date(1989, 6, 10), + * new Date(1987, 1, 11), + * new Date(1995, 6, 2), + * new Date(1990, 0, 1) + * ]) + * //=> Sun Jul 02 1995 00:00:00 + */ +function max(dates) { + let result; + dates.forEach(function (dirtyDate) { + const currentDate = (0, _index.toDate)(dirtyDate); + + if ( + result === undefined || + result < currentDate || + isNaN(Number(currentDate)) + ) { + result = currentDate; + } + }); + + return result || new Date(NaN); +} + + +/***/ }), + +/***/ 4603: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.milliseconds = milliseconds; +var _index = __nccwpck_require__(2983); + +/** + * @name milliseconds + * @category Millisecond Helpers + * @summary + * Returns the number of milliseconds in the specified, years, months, weeks, days, hours, minutes and seconds. + * + * @description + * Returns the number of milliseconds in the specified, years, months, weeks, days, hours, minutes and seconds. + * + * One years equals 365.2425 days according to the formula: + * + * > Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400. + * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days + * + * One month is a year divided by 12. + * + * @param duration - The object with years, months, weeks, days, hours, minutes and seconds to be added. + * + * @returns The milliseconds + * + * @example + * // 1 year in milliseconds + * milliseconds({ years: 1 }) + * //=> 31556952000 + * + * // 3 months in milliseconds + * milliseconds({ months: 3 }) + * //=> 7889238000 + */ +function milliseconds({ years, months, weeks, days, hours, minutes, seconds }) { + let totalDays = 0; + + if (years) totalDays += years * _index.daysInYear; + if (months) totalDays += months * (_index.daysInYear / 12); + if (weeks) totalDays += weeks * 7; + if (days) totalDays += days; + + let totalSeconds = totalDays * 24 * 60 * 60; + + if (hours) totalSeconds += hours * 60 * 60; + if (minutes) totalSeconds += minutes * 60; + if (seconds) totalSeconds += seconds; + + return Math.trunc(totalSeconds * 1000); +} + + +/***/ }), + +/***/ 1257: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.millisecondsToHours = millisecondsToHours; +var _index = __nccwpck_require__(2983); + +/** + * @name millisecondsToHours + * @category Conversion Helpers + * @summary Convert milliseconds to hours. + * + * @description + * Convert a number of milliseconds to a full number of hours. + * + * @param milliseconds - The number of milliseconds to be converted + * + * @returns The number of milliseconds converted in hours + * + * @example + * // Convert 7200000 milliseconds to hours: + * const result = millisecondsToHours(7200000) + * //=> 2 + * + * @example + * // It uses floor rounding: + * const result = millisecondsToHours(7199999) + * //=> 1 + */ +function millisecondsToHours(milliseconds) { + const hours = milliseconds / _index.millisecondsInHour; + return Math.trunc(hours); +} + + +/***/ }), + +/***/ 2675: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.millisecondsToMinutes = millisecondsToMinutes; +var _index = __nccwpck_require__(2983); + +/** + * @name millisecondsToMinutes + * @category Conversion Helpers + * @summary Convert milliseconds to minutes. + * + * @description + * Convert a number of milliseconds to a full number of minutes. + * + * @param milliseconds - The number of milliseconds to be converted + * + * @returns The number of milliseconds converted in minutes + * + * @example + * // Convert 60000 milliseconds to minutes: + * const result = millisecondsToMinutes(60000) + * //=> 1 + * + * @example + * // It uses floor rounding: + * const result = millisecondsToMinutes(119999) + * //=> 1 + */ +function millisecondsToMinutes(milliseconds) { + const minutes = milliseconds / _index.millisecondsInMinute; + return Math.trunc(minutes); +} + + +/***/ }), + +/***/ 8124: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.millisecondsToSeconds = millisecondsToSeconds; +var _index = __nccwpck_require__(2983); + +/** + * @name millisecondsToSeconds + * @category Conversion Helpers + * @summary Convert milliseconds to seconds. + * + * @description + * Convert a number of milliseconds to a full number of seconds. + * + * @param milliseconds - The number of milliseconds to be converted + * + * @returns The number of milliseconds converted in seconds + * + * @example + * // Convert 1000 miliseconds to seconds: + * const result = millisecondsToSeconds(1000) + * //=> 1 + * + * @example + * // It uses floor rounding: + * const result = millisecondsToSeconds(1999) + * //=> 1 + */ +function millisecondsToSeconds(milliseconds) { + const seconds = milliseconds / _index.millisecondsInSecond; + return Math.trunc(seconds); +} + + +/***/ }), + +/***/ 4143: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.min = min; +var _index = __nccwpck_require__(4363); + +/** + * @name min + * @category Common Helpers + * @summary Returns the earliest of the given dates. + * + * @description + * Returns the earliest of the given dates. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dates - The dates to compare + * + * @returns The earliest of the dates + * + * @example + * // Which of these dates is the earliest? + * const result = min([ + * new Date(1989, 6, 10), + * new Date(1987, 1, 11), + * new Date(1995, 6, 2), + * new Date(1990, 0, 1) + * ]) + * //=> Wed Feb 11 1987 00:00:00 + */ +function min(dates) { + let result; + + dates.forEach((dirtyDate) => { + const date = (0, _index.toDate)(dirtyDate); + if (!result || result > date || isNaN(+date)) { + result = date; + } + }); + + return result || new Date(NaN); +} + + +/***/ }), + +/***/ 4660: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.minutesToHours = minutesToHours; +var _index = __nccwpck_require__(2983); + +/** + * @name minutesToHours + * @category Conversion Helpers + * @summary Convert minutes to hours. + * + * @description + * Convert a number of minutes to a full number of hours. + * + * @param minutes - The number of minutes to be converted + * + * @returns The number of minutes converted in hours + * + * @example + * // Convert 140 minutes to hours: + * const result = minutesToHours(120) + * //=> 2 + * + * @example + * // It uses floor rounding: + * const result = minutesToHours(179) + * //=> 2 + */ +function minutesToHours(minutes) { + const hours = minutes / _index.minutesInHour; + return Math.trunc(hours); +} + + +/***/ }), + +/***/ 4807: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.minutesToMilliseconds = minutesToMilliseconds; +var _index = __nccwpck_require__(2983); + +/** + * @name minutesToMilliseconds + * @category Conversion Helpers + * @summary Convert minutes to milliseconds. + * + * @description + * Convert a number of minutes to a full number of milliseconds. + * + * @param minutes - The number of minutes to be converted + * + * @returns The number of minutes converted in milliseconds + * + * @example + * // Convert 2 minutes to milliseconds + * const result = minutesToMilliseconds(2) + * //=> 120000 + */ +function minutesToMilliseconds(minutes) { + return Math.trunc(minutes * _index.millisecondsInMinute); +} + + +/***/ }), + +/***/ 9448: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.minutesToSeconds = minutesToSeconds; +var _index = __nccwpck_require__(2983); + +/** + * @name minutesToSeconds + * @category Conversion Helpers + * @summary Convert minutes to seconds. + * + * @description + * Convert a number of minutes to a full number of seconds. + * + * @param minutes - The number of minutes to be converted + * + * @returns The number of minutes converted in seconds + * + * @example + * // Convert 2 minutes to seconds + * const result = minutesToSeconds(2) + * //=> 120 + */ +function minutesToSeconds(minutes) { + return Math.trunc(minutes * _index.secondsInMinute); +} + + +/***/ }), + +/***/ 8799: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.monthsToQuarters = monthsToQuarters; +var _index = __nccwpck_require__(2983); + +/** + * @name monthsToQuarters + * @category Conversion Helpers + * @summary Convert number of months to quarters. + * + * @description + * Convert a number of months to a full number of quarters. + * + * @param months - The number of months to be converted. + * + * @returns The number of months converted in quarters + * + * @example + * // Convert 6 months to quarters: + * const result = monthsToQuarters(6) + * //=> 2 + * + * @example + * // It uses floor rounding: + * const result = monthsToQuarters(7) + * //=> 2 + */ +function monthsToQuarters(months) { + const quarters = months / _index.monthsInQuarter; + return Math.trunc(quarters); +} + + +/***/ }), + +/***/ 2274: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.monthsToYears = monthsToYears; +var _index = __nccwpck_require__(2983); + +/** + * @name monthsToYears + * @category Conversion Helpers + * @summary Convert number of months to years. + * + * @description + * Convert a number of months to a full number of years. + * + * @param months - The number of months to be converted + * + * @returns The number of months converted in years + * + * @example + * // Convert 36 months to years: + * const result = monthsToYears(36) + * //=> 3 + * + * // It uses floor rounding: + * const result = monthsToYears(40) + * //=> 3 + */ +function monthsToYears(months) { + const years = months / _index.monthsInYear; + return Math.trunc(years); +} + + +/***/ }), + +/***/ 2355: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.nextDay = nextDay; +var _index = __nccwpck_require__(6520); +var _index2 = __nccwpck_require__(5404); + +/** + * @name nextDay + * @category Weekday Helpers + * @summary When is the next day of the week? + * + * @description + * When is the next day of the week? 0-6 the day of the week, 0 represents Sunday. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + * @param day - day of the week + * + * @returns The date is the next day of week + * + * @example + * // When is the next Monday after Mar, 20, 2020? + * const result = nextDay(new Date(2020, 2, 20), 1) + * //=> Mon Mar 23 2020 00:00:00 + * + * @example + * // When is the next Tuesday after Mar, 21, 2020? + * const result = nextDay(new Date(2020, 2, 21), 2) + * //=> Tue Mar 24 2020 00:00:00 + */ +function nextDay(date, day) { + let delta = day - (0, _index2.getDay)(date); + if (delta <= 0) delta += 7; + + return (0, _index.addDays)(date, delta); +} + + +/***/ }), + +/***/ 1879: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.nextFriday = nextFriday; +var _index = __nccwpck_require__(2355); + +/** + * @name nextFriday + * @category Weekday Helpers + * @summary When is the next Friday? + * + * @description + * When is the next Friday? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to start counting from + * + * @returns The next Friday + * + * @example + * // When is the next Friday after Mar, 22, 2020? + * const result = nextFriday(new Date(2020, 2, 22)) + * //=> Fri Mar 27 2020 00:00:00 + */ +function nextFriday(date) { + return (0, _index.nextDay)(date, 5); +} + + +/***/ }), + +/***/ 1373: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.nextMonday = nextMonday; +var _index = __nccwpck_require__(2355); + +/** + * @name nextMonday + * @category Weekday Helpers + * @summary When is the next Monday? + * + * @description + * When is the next Monday? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to start counting from + * + * @returns The next Monday + * + * @example + * // When is the next Monday after Mar, 22, 2020? + * const result = nextMonday(new Date(2020, 2, 22)) + * //=> Mon Mar 23 2020 00:00:00 + */ +function nextMonday(date) { + return (0, _index.nextDay)(date, 1); +} + + +/***/ }), + +/***/ 5672: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.nextSaturday = nextSaturday; +var _index = __nccwpck_require__(2355); + +/** + * @name nextSaturday + * @category Weekday Helpers + * @summary When is the next Saturday? + * + * @description + * When is the next Saturday? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to start counting from + * + * @returns The next Saturday + * + * @example + * // When is the next Saturday after Mar, 22, 2020? + * const result = nextSaturday(new Date(2020, 2, 22)) + * //=> Sat Mar 28 2020 00:00:00 + */ +function nextSaturday(date) { + return (0, _index.nextDay)(date, 6); +} + + +/***/ }), + +/***/ 3870: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.nextSunday = nextSunday; +var _index = __nccwpck_require__(2355); + +/** + * @name nextSunday + * @category Weekday Helpers + * @summary When is the next Sunday? + * + * @description + * When is the next Sunday? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to start counting from + * + * @returns The next Sunday + * + * @example + * // When is the next Sunday after Mar, 22, 2020? + * const result = nextSunday(new Date(2020, 2, 22)) + * //=> Sun Mar 29 2020 00:00:00 + */ +function nextSunday(date) { + return (0, _index.nextDay)(date, 0); +} + + +/***/ }), + +/***/ 2066: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.nextThursday = nextThursday; +var _index = __nccwpck_require__(2355); + +/** + * @name nextThursday + * @category Weekday Helpers + * @summary When is the next Thursday? + * + * @description + * When is the next Thursday? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to start counting from + * + * @returns The next Thursday + * + * @example + * // When is the next Thursday after Mar, 22, 2020? + * const result = nextThursday(new Date(2020, 2, 22)) + * //=> Thur Mar 26 2020 00:00:00 + */ +function nextThursday(date) { + return (0, _index.nextDay)(date, 4); +} + + +/***/ }), + +/***/ 8044: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.nextTuesday = nextTuesday; +var _index = __nccwpck_require__(2355); + +/** + * @name nextTuesday + * @category Weekday Helpers + * @summary When is the next Tuesday? + * + * @description + * When is the next Tuesday? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to start counting from + * + * @returns The next Tuesday + * + * @example + * // When is the next Tuesday after Mar, 22, 2020? + * const result = nextTuesday(new Date(2020, 2, 22)) + * //=> Tue Mar 24 2020 00:00:00 + */ +function nextTuesday(date) { + return (0, _index.nextDay)(date, 2); +} + + +/***/ }), + +/***/ 7415: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.nextWednesday = nextWednesday; +var _index = __nccwpck_require__(2355); + +/** + * @name nextWednesday + * @category Weekday Helpers + * @summary When is the next Wednesday? + * + * @description + * When is the next Wednesday? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to start counting from + * + * @returns The next Wednesday + * + * @example + * // When is the next Wednesday after Mar, 22, 2020? + * const result = nextWednesday(new Date(2020, 2, 22)) + * //=> Wed Mar 25 2020 00:00:00 + */ +function nextWednesday(date) { + return (0, _index.nextDay)(date, 3); +} + + +/***/ }), + +/***/ 7784: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +Object.defineProperty(exports, "longFormatters", ({ + enumerable: true, + get: function () { + return _index5.longFormatters; + }, +})); +exports.parse = parse; +Object.defineProperty(exports, "parsers", ({ + enumerable: true, + get: function () { + return _index7.parsers; + }, +})); +var _index = __nccwpck_require__(2524); +var _index2 = __nccwpck_require__(9380); +var _index3 = __nccwpck_require__(4434); +var _index4 = __nccwpck_require__(4363); + +var _index5 = __nccwpck_require__(4673); +var _index6 = __nccwpck_require__(5084); + +var _index7 = __nccwpck_require__(5446); + +var _Setter = __nccwpck_require__(6087); + +// Rexports of internal for libraries to use. +// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874 + +/** + * The {@link parse} function options. + */ + +// This RegExp consists of three parts separated by `|`: +// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token +// (one of the certain letters followed by `o`) +// - (\w)\1* matches any sequences of the same letter +// - '' matches two quote characters in a row +// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('), +// except a single quote symbol, which ends the sequence. +// Two quote characters do not end the sequence. +// If there is no matching single quote +// then the sequence will continue until the end of the string. +// - . matches any single character unmatched by previous parts of the RegExps +const formattingTokensRegExp = + /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g; + +// This RegExp catches symbols escaped by quotes, and also +// sequences of symbols P, p, and the combinations like `PPPPPPPppppp` +const longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g; + +const escapedStringRegExp = /^'([^]*?)'?$/; +const doubleQuoteRegExp = /''/g; + +const notWhitespaceRegExp = /\S/; +const unescapedLatinCharacterRegExp = /[a-zA-Z]/; + +/** + * @name parse + * @category Common Helpers + * @summary Parse the date. + * + * @description + * Return the date parsed from string using the given format string. + * + * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries. + * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * + * The characters in the format string wrapped between two single quotes characters (') are escaped. + * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote. + * + * Format of the format string is based on Unicode Technical Standard #35: + * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table + * with a few additions (see note 5 below the table). + * + * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited + * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception: + * + * ```javascript + * parse('23 AM', 'HH a', new Date()) + * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time + * ``` + * + * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true + * + * Accepted format string patterns: + * | Unit |Prior| Pattern | Result examples | Notes | + * |---------------------------------|-----|---------|-----------------------------------|-------| + * | Era | 140 | G..GGG | AD, BC | | + * | | | GGGG | Anno Domini, Before Christ | 2 | + * | | | GGGGG | A, B | | + * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 | + * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 | + * | | | yy | 44, 01, 00, 17 | 4 | + * | | | yyy | 044, 001, 123, 999 | 4 | + * | | | yyyy | 0044, 0001, 1900, 2017 | 4 | + * | | | yyyyy | ... | 2,4 | + * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 | + * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 | + * | | | YY | 44, 01, 00, 17 | 4,6 | + * | | | YYY | 044, 001, 123, 999 | 4 | + * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 | + * | | | YYYYY | ... | 2,4 | + * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 | + * | | | RR | -43, 01, 00, 17 | 4,5 | + * | | | RRR | -043, 001, 123, 999, -999 | 4,5 | + * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 | + * | | | RRRRR | ... | 2,4,5 | + * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 | + * | | | uu | -43, 01, 99, -99 | 4 | + * | | | uuu | -043, 001, 123, 999, -999 | 4 | + * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 | + * | | | uuuuu | ... | 2,4 | + * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | | + * | | | Qo | 1st, 2nd, 3rd, 4th | 5 | + * | | | QQ | 01, 02, 03, 04 | | + * | | | QQQ | Q1, Q2, Q3, Q4 | | + * | | | QQQQ | 1st quarter, 2nd quarter, ... | 2 | + * | | | QQQQQ | 1, 2, 3, 4 | 4 | + * | Quarter (stand-alone) | 120 | q | 1, 2, 3, 4 | | + * | | | qo | 1st, 2nd, 3rd, 4th | 5 | + * | | | qq | 01, 02, 03, 04 | | + * | | | qqq | Q1, Q2, Q3, Q4 | | + * | | | qqqq | 1st quarter, 2nd quarter, ... | 2 | + * | | | qqqqq | 1, 2, 3, 4 | 3 | + * | Month (formatting) | 110 | M | 1, 2, ..., 12 | | + * | | | Mo | 1st, 2nd, ..., 12th | 5 | + * | | | MM | 01, 02, ..., 12 | | + * | | | MMM | Jan, Feb, ..., Dec | | + * | | | MMMM | January, February, ..., December | 2 | + * | | | MMMMM | J, F, ..., D | | + * | Month (stand-alone) | 110 | L | 1, 2, ..., 12 | | + * | | | Lo | 1st, 2nd, ..., 12th | 5 | + * | | | LL | 01, 02, ..., 12 | | + * | | | LLL | Jan, Feb, ..., Dec | | + * | | | LLLL | January, February, ..., December | 2 | + * | | | LLLLL | J, F, ..., D | | + * | Local week of year | 100 | w | 1, 2, ..., 53 | | + * | | | wo | 1st, 2nd, ..., 53th | 5 | + * | | | ww | 01, 02, ..., 53 | | + * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 | + * | | | Io | 1st, 2nd, ..., 53th | 5 | + * | | | II | 01, 02, ..., 53 | 5 | + * | Day of month | 90 | d | 1, 2, ..., 31 | | + * | | | do | 1st, 2nd, ..., 31st | 5 | + * | | | dd | 01, 02, ..., 31 | | + * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 | + * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 | + * | | | DD | 01, 02, ..., 365, 366 | 7 | + * | | | DDD | 001, 002, ..., 365, 366 | | + * | | | DDDD | ... | 2 | + * | Day of week (formatting) | 90 | E..EEE | Mon, Tue, Wed, ..., Sun | | + * | | | EEEE | Monday, Tuesday, ..., Sunday | 2 | + * | | | EEEEE | M, T, W, T, F, S, S | | + * | | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | | + * | ISO day of week (formatting) | 90 | i | 1, 2, 3, ..., 7 | 5 | + * | | | io | 1st, 2nd, ..., 7th | 5 | + * | | | ii | 01, 02, ..., 07 | 5 | + * | | | iii | Mon, Tue, Wed, ..., Sun | 5 | + * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 | + * | | | iiiii | M, T, W, T, F, S, S | 5 | + * | | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 5 | + * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | | + * | | | eo | 2nd, 3rd, ..., 1st | 5 | + * | | | ee | 02, 03, ..., 01 | | + * | | | eee | Mon, Tue, Wed, ..., Sun | | + * | | | eeee | Monday, Tuesday, ..., Sunday | 2 | + * | | | eeeee | M, T, W, T, F, S, S | | + * | | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | | + * | Local day of week (stand-alone) | 90 | c | 2, 3, 4, ..., 1 | | + * | | | co | 2nd, 3rd, ..., 1st | 5 | + * | | | cc | 02, 03, ..., 01 | | + * | | | ccc | Mon, Tue, Wed, ..., Sun | | + * | | | cccc | Monday, Tuesday, ..., Sunday | 2 | + * | | | ccccc | M, T, W, T, F, S, S | | + * | | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | | + * | AM, PM | 80 | a..aaa | AM, PM | | + * | | | aaaa | a.m., p.m. | 2 | + * | | | aaaaa | a, p | | + * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | | + * | | | bbbb | a.m., p.m., noon, midnight | 2 | + * | | | bbbbb | a, p, n, mi | | + * | Flexible day period | 80 | B..BBB | at night, in the morning, ... | | + * | | | BBBB | at night, in the morning, ... | 2 | + * | | | BBBBB | at night, in the morning, ... | | + * | Hour [1-12] | 70 | h | 1, 2, ..., 11, 12 | | + * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 | + * | | | hh | 01, 02, ..., 11, 12 | | + * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | | + * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 | + * | | | HH | 00, 01, 02, ..., 23 | | + * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | | + * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 | + * | | | KK | 01, 02, ..., 11, 00 | | + * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | | + * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 | + * | | | kk | 24, 01, 02, ..., 23 | | + * | Minute | 60 | m | 0, 1, ..., 59 | | + * | | | mo | 0th, 1st, ..., 59th | 5 | + * | | | mm | 00, 01, ..., 59 | | + * | Second | 50 | s | 0, 1, ..., 59 | | + * | | | so | 0th, 1st, ..., 59th | 5 | + * | | | ss | 00, 01, ..., 59 | | + * | Seconds timestamp | 40 | t | 512969520 | | + * | | | tt | ... | 2 | + * | Fraction of second | 30 | S | 0, 1, ..., 9 | | + * | | | SS | 00, 01, ..., 99 | | + * | | | SSS | 000, 001, ..., 999 | | + * | | | SSSS | ... | 2 | + * | Milliseconds timestamp | 20 | T | 512969520900 | | + * | | | TT | ... | 2 | + * | Timezone (ISO-8601 w/ Z) | 10 | X | -08, +0530, Z | | + * | | | XX | -0800, +0530, Z | | + * | | | XXX | -08:00, +05:30, Z | | + * | | | XXXX | -0800, +0530, Z, +123456 | 2 | + * | | | XXXXX | -08:00, +05:30, Z, +12:34:56 | | + * | Timezone (ISO-8601 w/o Z) | 10 | x | -08, +0530, +00 | | + * | | | xx | -0800, +0530, +0000 | | + * | | | xxx | -08:00, +05:30, +00:00 | 2 | + * | | | xxxx | -0800, +0530, +0000, +123456 | | + * | | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | | + * | Long localized date | NA | P | 05/29/1453 | 5,8 | + * | | | PP | May 29, 1453 | | + * | | | PPP | May 29th, 1453 | | + * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 | + * | Long localized time | NA | p | 12:00 AM | 5,8 | + * | | | pp | 12:00:00 AM | | + * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | | + * | | | PPpp | May 29, 1453, 12:00:00 AM | | + * | | | PPPpp | May 29th, 1453 at ... | | + * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 | + * Notes: + * 1. "Formatting" units (e.g. formatting quarter) in the default en-US locale + * are the same as "stand-alone" units, but are different in some languages. + * "Formatting" units are declined according to the rules of the language + * in the context of a date. "Stand-alone" units are always nominative singular. + * In `format` function, they will produce different result: + * + * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'` + * + * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'` + * + * `parse` will try to match both formatting and stand-alone units interchangably. + * + * 2. Any sequence of the identical letters is a pattern, unless it is escaped by + * the single quote characters (see below). + * If the sequence is longer than listed in table: + * - for numerical units (`yyyyyyyy`) `parse` will try to match a number + * as wide as the sequence + * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit. + * These variations are marked with "2" in the last column of the table. + * + * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales. + * These tokens represent the shortest form of the quarter. + * + * 4. The main difference between `y` and `u` patterns are B.C. years: + * + * | Year | `y` | `u` | + * |------|-----|-----| + * | AC 1 | 1 | 1 | + * | BC 1 | 1 | 0 | + * | BC 2 | 2 | -1 | + * + * Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`: + * + * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00` + * + * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00` + * + * while `uu` will just assign the year as is: + * + * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00` + * + * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00` + * + * The same difference is true for local and ISO week-numbering years (`Y` and `R`), + * except local week-numbering years are dependent on `options.weekStartsOn` + * and `options.firstWeekContainsDate` (compare [setISOWeekYear](https://date-fns.org/docs/setISOWeekYear) + * and [setWeekYear](https://date-fns.org/docs/setWeekYear)). + * + * 5. These patterns are not in the Unicode Technical Standard #35: + * - `i`: ISO day of week + * - `I`: ISO week of year + * - `R`: ISO week-numbering year + * - `o`: ordinal number modifier + * - `P`: long localized date + * - `p`: long localized time + * + * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years. + * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * + * 7. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month. + * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * + * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based + * on the given locale. + * + * using `en-US` locale: `P` => `MM/dd/yyyy` + * using `en-US` locale: `p` => `hh:mm a` + * using `pt-BR` locale: `P` => `dd/MM/yyyy` + * using `pt-BR` locale: `p` => `HH:mm` + * + * Values will be assigned to the date in the descending order of its unit's priority. + * Units of an equal priority overwrite each other in the order of appearance. + * + * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year), + * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing. + * + * `referenceDate` must be passed for correct work of the function. + * If you're not sure which `referenceDate` to supply, create a new instance of Date: + * `parse('02/11/2014', 'MM/dd/yyyy', new Date())` + * In this case parsing will be done in the context of the current date. + * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`, + * then `Invalid Date` will be returned. + * + * The result may vary by locale. + * + * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned. + * + * If parsing failed, `Invalid Date` will be returned. + * Invalid Date is a Date, whose time value is NaN. + * Time value of Date: http://es5.github.io/#x15.9.1.1 + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param dateStr - The string to parse + * @param formatStr - The string of tokens + * @param referenceDate - defines values missing from the parsed dateString + * @param options - An object with options. + * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * + * @returns The parsed date + * + * @throws `options.locale` must contain `match` property + * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md + * @throws format string contains an unescaped latin alphabet character + * + * @example + * // Parse 11 February 2014 from middle-endian format: + * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date()) + * //=> Tue Feb 11 2014 00:00:00 + * + * @example + * // Parse 28th of February in Esperanto locale in the context of 2010 year: + * import eo from 'date-fns/locale/eo' + * var result = parse('28-a de februaro', "do 'de' MMMM", new Date(2010, 0, 1), { + * locale: eo + * }) + * //=> Sun Feb 28 2010 00:00:00 + */ +function parse(dateStr, formatStr, referenceDate, options) { + const defaultOptions = (0, _index2.getDefaultOptions)(); + const locale = + options?.locale ?? defaultOptions.locale ?? _index3.defaultLocale; + + const firstWeekContainsDate = + options?.firstWeekContainsDate ?? + options?.locale?.options?.firstWeekContainsDate ?? + defaultOptions.firstWeekContainsDate ?? + defaultOptions.locale?.options?.firstWeekContainsDate ?? + 1; + + const weekStartsOn = + options?.weekStartsOn ?? + options?.locale?.options?.weekStartsOn ?? + defaultOptions.weekStartsOn ?? + defaultOptions.locale?.options?.weekStartsOn ?? + 0; + + if (formatStr === "") { + if (dateStr === "") { + return (0, _index4.toDate)(referenceDate); + } else { + return (0, _index.constructFrom)(referenceDate, NaN); + } + } + + const subFnOptions = { + firstWeekContainsDate, + weekStartsOn, + locale, + }; + + // If timezone isn't specified, it will be set to the system timezone + const setters = [new _Setter.DateToSystemTimezoneSetter()]; + + const tokens = formatStr + .match(longFormattingTokensRegExp) + .map((substring) => { + const firstCharacter = substring[0]; + if (firstCharacter in _index5.longFormatters) { + const longFormatter = _index5.longFormatters[firstCharacter]; + return longFormatter(substring, locale.formatLong); + } + return substring; + }) + .join("") + .match(formattingTokensRegExp); + + const usedTokens = []; + + for (let token of tokens) { + if ( + !options?.useAdditionalWeekYearTokens && + (0, _index6.isProtectedWeekYearToken)(token) + ) { + (0, _index6.warnOrThrowProtectedError)(token, formatStr, dateStr); + } + if ( + !options?.useAdditionalDayOfYearTokens && + (0, _index6.isProtectedDayOfYearToken)(token) + ) { + (0, _index6.warnOrThrowProtectedError)(token, formatStr, dateStr); + } + + const firstCharacter = token[0]; + const parser = _index7.parsers[firstCharacter]; + if (parser) { + const { incompatibleTokens } = parser; + if (Array.isArray(incompatibleTokens)) { + const incompatibleToken = usedTokens.find( + (usedToken) => + incompatibleTokens.includes(usedToken.token) || + usedToken.token === firstCharacter, + ); + if (incompatibleToken) { + throw new RangeError( + `The format string mustn't contain \`${incompatibleToken.fullToken}\` and \`${token}\` at the same time`, + ); + } + } else if (parser.incompatibleTokens === "*" && usedTokens.length > 0) { + throw new RangeError( + `The format string mustn't contain \`${token}\` and any other token at the same time`, + ); + } + + usedTokens.push({ token: firstCharacter, fullToken: token }); + + const parseResult = parser.run( + dateStr, + token, + locale.match, + subFnOptions, + ); + + if (!parseResult) { + return (0, _index.constructFrom)(referenceDate, NaN); + } + + setters.push(parseResult.setter); + + dateStr = parseResult.rest; + } else { + if (firstCharacter.match(unescapedLatinCharacterRegExp)) { + throw new RangeError( + "Format string contains an unescaped latin alphabet character `" + + firstCharacter + + "`", + ); + } + + // Replace two single quote characters with one single quote character + if (token === "''") { + token = "'"; + } else if (firstCharacter === "'") { + token = cleanEscapedString(token); + } + + // Cut token from string, or, if string doesn't match the token, return Invalid Date + if (dateStr.indexOf(token) === 0) { + dateStr = dateStr.slice(token.length); + } else { + return (0, _index.constructFrom)(referenceDate, NaN); + } + } + } + + // Check if the remaining input contains something other than whitespace + if (dateStr.length > 0 && notWhitespaceRegExp.test(dateStr)) { + return (0, _index.constructFrom)(referenceDate, NaN); + } + + const uniquePrioritySetters = setters + .map((setter) => setter.priority) + .sort((a, b) => b - a) + .filter((priority, index, array) => array.indexOf(priority) === index) + .map((priority) => + setters + .filter((setter) => setter.priority === priority) + .sort((a, b) => b.subPriority - a.subPriority), + ) + .map((setterArray) => setterArray[0]); + + let date = (0, _index4.toDate)(referenceDate); + + if (isNaN(date.getTime())) { + return (0, _index.constructFrom)(referenceDate, NaN); + } + + const flags = {}; + for (const setter of uniquePrioritySetters) { + if (!setter.validate(date, subFnOptions)) { + return (0, _index.constructFrom)(referenceDate, NaN); + } + + const result = setter.set(date, flags, subFnOptions); + // Result is tuple (date, flags) + if (Array.isArray(result)) { + date = result[0]; + Object.assign(flags, result[1]); + // Result is date + } else { + date = result; + } + } + + return (0, _index.constructFrom)(referenceDate, date); +} + +function cleanEscapedString(input) { + return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, "'"); +} + + +/***/ }), + +/***/ 9250: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.Parser = void 0; +var _Setter = __nccwpck_require__(6087); + +class Parser { + run(dateString, token, match, options) { + const result = this.parse(dateString, token, match, options); + if (!result) { + return null; + } + + return { + setter: new _Setter.ValueSetter( + result.value, + this.validate, + this.set, + this.priority, + this.subPriority, + ), + rest: result.rest, + }; + } + + validate(_utcDate, _value, _options) { + return true; + } +} +exports.Parser = Parser; + + +/***/ }), + +/***/ 6087: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.ValueSetter = + exports.Setter = + exports.DateToSystemTimezoneSetter = + void 0; +var _index = __nccwpck_require__(6025); +var _index2 = __nccwpck_require__(2524); + +const TIMEZONE_UNIT_PRIORITY = 10; + +class Setter { + subPriority = 0; + + validate(_utcDate, _options) { + return true; + } +} +exports.Setter = Setter; + +class ValueSetter extends Setter { + constructor( + value, + + validateValue, + + setValue, + + priority, + subPriority, + ) { + super(); + this.value = value; + this.validateValue = validateValue; + this.setValue = setValue; + this.priority = priority; + if (subPriority) { + this.subPriority = subPriority; + } + } + + validate(date, options) { + return this.validateValue(date, this.value, options); + } + + set(date, flags, options) { + return this.setValue(date, flags, this.value, options); + } +} +exports.ValueSetter = ValueSetter; + +class DateToSystemTimezoneSetter extends Setter { + priority = TIMEZONE_UNIT_PRIORITY; + subPriority = -1; + set(date, flags) { + if (flags.timestampIsSet) return date; + return (0, _index2.constructFrom)(date, (0, _index.transpose)(date, Date)); + } +} +exports.DateToSystemTimezoneSetter = DateToSystemTimezoneSetter; + + +/***/ }), + +/***/ 4906: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +exports.timezonePatterns = exports.numericPatterns = void 0; +const numericPatterns = (exports.numericPatterns = { + month: /^(1[0-2]|0?\d)/, // 0 to 12 + date: /^(3[0-1]|[0-2]?\d)/, // 0 to 31 + dayOfYear: /^(36[0-6]|3[0-5]\d|[0-2]?\d?\d)/, // 0 to 366 + week: /^(5[0-3]|[0-4]?\d)/, // 0 to 53 + hour23h: /^(2[0-3]|[0-1]?\d)/, // 0 to 23 + hour24h: /^(2[0-4]|[0-1]?\d)/, // 0 to 24 + hour11h: /^(1[0-1]|0?\d)/, // 0 to 11 + hour12h: /^(1[0-2]|0?\d)/, // 0 to 12 + minute: /^[0-5]?\d/, // 0 to 59 + second: /^[0-5]?\d/, // 0 to 59 + + singleDigit: /^\d/, // 0 to 9 + twoDigits: /^\d{1,2}/, // 0 to 99 + threeDigits: /^\d{1,3}/, // 0 to 999 + fourDigits: /^\d{1,4}/, // 0 to 9999 + + anyDigitsSigned: /^-?\d+/, + singleDigitSigned: /^-?\d/, // 0 to 9, -0 to -9 + twoDigitsSigned: /^-?\d{1,2}/, // 0 to 99, -0 to -99 + threeDigitsSigned: /^-?\d{1,3}/, // 0 to 999, -0 to -999 + fourDigitsSigned: /^-?\d{1,4}/, // 0 to 9999, -0 to -9999 +}); + +const timezonePatterns = (exports.timezonePatterns = { + basicOptionalMinutes: /^([+-])(\d{2})(\d{2})?|Z/, + basic: /^([+-])(\d{2})(\d{2})|Z/, + basicOptionalSeconds: /^([+-])(\d{2})(\d{2})((\d{2}))?|Z/, + extended: /^([+-])(\d{2}):(\d{2})|Z/, + extendedOptionalSeconds: /^([+-])(\d{2}):(\d{2})(:(\d{2}))?|Z/, +}); + + +/***/ }), + +/***/ 5446: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.parsers = void 0; +var _EraParser = __nccwpck_require__(4903); +var _YearParser = __nccwpck_require__(1924); +var _LocalWeekYearParser = __nccwpck_require__(8346); +var _ISOWeekYearParser = __nccwpck_require__(1356); +var _ExtendedYearParser = __nccwpck_require__(4256); +var _QuarterParser = __nccwpck_require__(9367); +var _StandAloneQuarterParser = __nccwpck_require__(6171); +var _MonthParser = __nccwpck_require__(9809); +var _StandAloneMonthParser = __nccwpck_require__(6958); +var _LocalWeekParser = __nccwpck_require__(9083); +var _ISOWeekParser = __nccwpck_require__(6550); +var _DateParser = __nccwpck_require__(4192); +var _DayOfYearParser = __nccwpck_require__(6755); +var _DayParser = __nccwpck_require__(37); +var _LocalDayParser = __nccwpck_require__(9535); +var _StandAloneLocalDayParser = __nccwpck_require__(8691); +var _ISODayParser = __nccwpck_require__(7160); +var _AMPMParser = __nccwpck_require__(2501); +var _AMPMMidnightParser = __nccwpck_require__(4549); +var _DayPeriodParser = __nccwpck_require__(882); +var _Hour1to12Parser = __nccwpck_require__(2741); +var _Hour0to23Parser = __nccwpck_require__(5085); +var _Hour0To11Parser = __nccwpck_require__(9761); +var _Hour1To24Parser = __nccwpck_require__(5876); +var _MinuteParser = __nccwpck_require__(7993); +var _SecondParser = __nccwpck_require__(6533); +var _FractionOfSecondParser = __nccwpck_require__(8315); +var _ISOTimezoneWithZParser = __nccwpck_require__(8114); +var _ISOTimezoneParser = __nccwpck_require__(3409); +var _TimestampSecondsParser = __nccwpck_require__(6474); +var _TimestampMillisecondsParser = __nccwpck_require__(3912); + +/* + * | | Unit | | Unit | + * |-----|--------------------------------|-----|--------------------------------| + * | a | AM, PM | A* | Milliseconds in day | + * | b | AM, PM, noon, midnight | B | Flexible day period | + * | c | Stand-alone local day of week | C* | Localized hour w/ day period | + * | d | Day of month | D | Day of year | + * | e | Local day of week | E | Day of week | + * | f | | F* | Day of week in month | + * | g* | Modified Julian day | G | Era | + * | h | Hour [1-12] | H | Hour [0-23] | + * | i! | ISO day of week | I! | ISO week of year | + * | j* | Localized hour w/ day period | J* | Localized hour w/o day period | + * | k | Hour [1-24] | K | Hour [0-11] | + * | l* | (deprecated) | L | Stand-alone month | + * | m | Minute | M | Month | + * | n | | N | | + * | o! | Ordinal number modifier | O* | Timezone (GMT) | + * | p | | P | | + * | q | Stand-alone quarter | Q | Quarter | + * | r* | Related Gregorian year | R! | ISO week-numbering year | + * | s | Second | S | Fraction of second | + * | t! | Seconds timestamp | T! | Milliseconds timestamp | + * | u | Extended year | U* | Cyclic year | + * | v* | Timezone (generic non-locat.) | V* | Timezone (location) | + * | w | Local week of year | W* | Week of month | + * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) | + * | y | Year (abs) | Y | Local week-numbering year | + * | z* | Timezone (specific non-locat.) | Z* | Timezone (aliases) | + * + * Letters marked by * are not implemented but reserved by Unicode standard. + * + * Letters marked by ! are non-standard, but implemented by date-fns: + * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs) + * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days, + * i.e. 7 for Sunday, 1 for Monday, etc. + * - `I` is ISO week of year, as opposed to `w` which is local week of year. + * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year. + * `R` is supposed to be used in conjunction with `I` and `i` + * for universal ISO week-numbering date, whereas + * `Y` is supposed to be used in conjunction with `w` and `e` + * for week-numbering date specific to the locale. + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any -- It's ok, we want any here +const parsers = (exports.parsers = { + G: new _EraParser.EraParser(), + y: new _YearParser.YearParser(), + Y: new _LocalWeekYearParser.LocalWeekYearParser(), + R: new _ISOWeekYearParser.ISOWeekYearParser(), + u: new _ExtendedYearParser.ExtendedYearParser(), + Q: new _QuarterParser.QuarterParser(), + q: new _StandAloneQuarterParser.StandAloneQuarterParser(), + M: new _MonthParser.MonthParser(), + L: new _StandAloneMonthParser.StandAloneMonthParser(), + w: new _LocalWeekParser.LocalWeekParser(), + I: new _ISOWeekParser.ISOWeekParser(), + d: new _DateParser.DateParser(), + D: new _DayOfYearParser.DayOfYearParser(), + E: new _DayParser.DayParser(), + e: new _LocalDayParser.LocalDayParser(), + c: new _StandAloneLocalDayParser.StandAloneLocalDayParser(), + i: new _ISODayParser.ISODayParser(), + a: new _AMPMParser.AMPMParser(), + b: new _AMPMMidnightParser.AMPMMidnightParser(), + B: new _DayPeriodParser.DayPeriodParser(), + h: new _Hour1to12Parser.Hour1to12Parser(), + H: new _Hour0to23Parser.Hour0to23Parser(), + K: new _Hour0To11Parser.Hour0To11Parser(), + k: new _Hour1To24Parser.Hour1To24Parser(), + m: new _MinuteParser.MinuteParser(), + s: new _SecondParser.SecondParser(), + S: new _FractionOfSecondParser.FractionOfSecondParser(), + X: new _ISOTimezoneWithZParser.ISOTimezoneWithZParser(), + x: new _ISOTimezoneParser.ISOTimezoneParser(), + t: new _TimestampSecondsParser.TimestampSecondsParser(), + T: new _TimestampMillisecondsParser.TimestampMillisecondsParser(), +}); + + +/***/ }), + +/***/ 4549: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.AMPMMidnightParser = void 0; +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +class AMPMMidnightParser extends _Parser.Parser { + priority = 80; + + parse(dateString, token, match) { + switch (token) { + case "b": + case "bb": + case "bbb": + return ( + match.dayPeriod(dateString, { + width: "abbreviated", + context: "formatting", + }) || + match.dayPeriod(dateString, { + width: "narrow", + context: "formatting", + }) + ); + + case "bbbbb": + return match.dayPeriod(dateString, { + width: "narrow", + context: "formatting", + }); + case "bbbb": + default: + return ( + match.dayPeriod(dateString, { + width: "wide", + context: "formatting", + }) || + match.dayPeriod(dateString, { + width: "abbreviated", + context: "formatting", + }) || + match.dayPeriod(dateString, { + width: "narrow", + context: "formatting", + }) + ); + } + } + + set(date, _flags, value) { + date.setHours((0, _utils.dayPeriodEnumToHours)(value), 0, 0, 0); + return date; + } + + incompatibleTokens = ["a", "B", "H", "k", "t", "T"]; +} +exports.AMPMMidnightParser = AMPMMidnightParser; + + +/***/ }), + +/***/ 2501: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.AMPMParser = void 0; +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +class AMPMParser extends _Parser.Parser { + priority = 80; + + parse(dateString, token, match) { + switch (token) { + case "a": + case "aa": + case "aaa": + return ( + match.dayPeriod(dateString, { + width: "abbreviated", + context: "formatting", + }) || + match.dayPeriod(dateString, { + width: "narrow", + context: "formatting", + }) + ); + + case "aaaaa": + return match.dayPeriod(dateString, { + width: "narrow", + context: "formatting", + }); + case "aaaa": + default: + return ( + match.dayPeriod(dateString, { + width: "wide", + context: "formatting", + }) || + match.dayPeriod(dateString, { + width: "abbreviated", + context: "formatting", + }) || + match.dayPeriod(dateString, { + width: "narrow", + context: "formatting", + }) + ); + } + } + + set(date, _flags, value) { + date.setHours((0, _utils.dayPeriodEnumToHours)(value), 0, 0, 0); + return date; + } + + incompatibleTokens = ["b", "B", "H", "k", "t", "T"]; +} +exports.AMPMParser = AMPMParser; + + +/***/ }), + +/***/ 4192: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.DateParser = void 0; +var _constants = __nccwpck_require__(4906); +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +const DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; +const DAYS_IN_MONTH_LEAP_YEAR = [ + 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, +]; + +// Day of the month +class DateParser extends _Parser.Parser { + priority = 90; + subPriority = 1; + + parse(dateString, token, match) { + switch (token) { + case "d": + return (0, _utils.parseNumericPattern)( + _constants.numericPatterns.date, + dateString, + ); + case "do": + return match.ordinalNumber(dateString, { unit: "date" }); + default: + return (0, _utils.parseNDigits)(token.length, dateString); + } + } + + validate(date, value) { + const year = date.getFullYear(); + const isLeapYear = (0, _utils.isLeapYearIndex)(year); + const month = date.getMonth(); + if (isLeapYear) { + return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month]; + } else { + return value >= 1 && value <= DAYS_IN_MONTH[month]; + } + } + + set(date, _flags, value) { + date.setDate(value); + date.setHours(0, 0, 0, 0); + return date; + } + + incompatibleTokens = [ + "Y", + "R", + "q", + "Q", + "w", + "I", + "D", + "i", + "e", + "c", + "t", + "T", + ]; +} +exports.DateParser = DateParser; + + +/***/ }), + +/***/ 6755: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.DayOfYearParser = void 0; +var _constants = __nccwpck_require__(4906); +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +class DayOfYearParser extends _Parser.Parser { + priority = 90; + + subpriority = 1; + + parse(dateString, token, match) { + switch (token) { + case "D": + case "DD": + return (0, _utils.parseNumericPattern)( + _constants.numericPatterns.dayOfYear, + dateString, + ); + case "Do": + return match.ordinalNumber(dateString, { unit: "date" }); + default: + return (0, _utils.parseNDigits)(token.length, dateString); + } + } + + validate(date, value) { + const year = date.getFullYear(); + const isLeapYear = (0, _utils.isLeapYearIndex)(year); + if (isLeapYear) { + return value >= 1 && value <= 366; + } else { + return value >= 1 && value <= 365; + } + } + + set(date, _flags, value) { + date.setMonth(0, value); + date.setHours(0, 0, 0, 0); + return date; + } + + incompatibleTokens = [ + "Y", + "R", + "q", + "Q", + "M", + "L", + "w", + "I", + "d", + "E", + "i", + "e", + "c", + "t", + "T", + ]; +} +exports.DayOfYearParser = DayOfYearParser; + + +/***/ }), + +/***/ 37: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.DayParser = void 0; +var _index = __nccwpck_require__(8952); +var _Parser = __nccwpck_require__(9250); + +// Day of week +class DayParser extends _Parser.Parser { + priority = 90; + + parse(dateString, token, match) { + switch (token) { + // Tue + case "E": + case "EE": + case "EEE": + return ( + match.day(dateString, { + width: "abbreviated", + context: "formatting", + }) || + match.day(dateString, { width: "short", context: "formatting" }) || + match.day(dateString, { width: "narrow", context: "formatting" }) + ); + + // T + case "EEEEE": + return match.day(dateString, { + width: "narrow", + context: "formatting", + }); + // Tu + case "EEEEEE": + return ( + match.day(dateString, { width: "short", context: "formatting" }) || + match.day(dateString, { width: "narrow", context: "formatting" }) + ); + + // Tuesday + case "EEEE": + default: + return ( + match.day(dateString, { width: "wide", context: "formatting" }) || + match.day(dateString, { + width: "abbreviated", + context: "formatting", + }) || + match.day(dateString, { width: "short", context: "formatting" }) || + match.day(dateString, { width: "narrow", context: "formatting" }) + ); + } + } + + validate(_date, value) { + return value >= 0 && value <= 6; + } + + set(date, _flags, value, options) { + date = (0, _index.setDay)(date, value, options); + date.setHours(0, 0, 0, 0); + return date; + } + + incompatibleTokens = ["D", "i", "e", "c", "t", "T"]; +} +exports.DayParser = DayParser; + + +/***/ }), + +/***/ 882: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.DayPeriodParser = void 0; +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +// in the morning, in the afternoon, in the evening, at night +class DayPeriodParser extends _Parser.Parser { + priority = 80; + + parse(dateString, token, match) { + switch (token) { + case "B": + case "BB": + case "BBB": + return ( + match.dayPeriod(dateString, { + width: "abbreviated", + context: "formatting", + }) || + match.dayPeriod(dateString, { + width: "narrow", + context: "formatting", + }) + ); + + case "BBBBB": + return match.dayPeriod(dateString, { + width: "narrow", + context: "formatting", + }); + case "BBBB": + default: + return ( + match.dayPeriod(dateString, { + width: "wide", + context: "formatting", + }) || + match.dayPeriod(dateString, { + width: "abbreviated", + context: "formatting", + }) || + match.dayPeriod(dateString, { + width: "narrow", + context: "formatting", + }) + ); + } + } + + set(date, _flags, value) { + date.setHours((0, _utils.dayPeriodEnumToHours)(value), 0, 0, 0); + return date; + } + + incompatibleTokens = ["a", "b", "t", "T"]; +} +exports.DayPeriodParser = DayPeriodParser; + + +/***/ }), + +/***/ 4903: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.EraParser = void 0; + +var _Parser = __nccwpck_require__(9250); + +class EraParser extends _Parser.Parser { + priority = 140; + + parse(dateString, token, match) { + switch (token) { + // AD, BC + case "G": + case "GG": + case "GGG": + return ( + match.era(dateString, { width: "abbreviated" }) || + match.era(dateString, { width: "narrow" }) + ); + + // A, B + case "GGGGG": + return match.era(dateString, { width: "narrow" }); + // Anno Domini, Before Christ + case "GGGG": + default: + return ( + match.era(dateString, { width: "wide" }) || + match.era(dateString, { width: "abbreviated" }) || + match.era(dateString, { width: "narrow" }) + ); + } + } + + set(date, flags, value) { + flags.era = value; + date.setFullYear(value, 0, 1); + date.setHours(0, 0, 0, 0); + return date; + } + + incompatibleTokens = ["R", "u", "t", "T"]; +} +exports.EraParser = EraParser; + + +/***/ }), + +/***/ 4256: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.ExtendedYearParser = void 0; +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +class ExtendedYearParser extends _Parser.Parser { + priority = 130; + + parse(dateString, token) { + if (token === "u") { + return (0, _utils.parseNDigitsSigned)(4, dateString); + } + + return (0, _utils.parseNDigitsSigned)(token.length, dateString); + } + + set(date, _flags, value) { + date.setFullYear(value, 0, 1); + date.setHours(0, 0, 0, 0); + return date; + } + + incompatibleTokens = ["G", "y", "Y", "R", "w", "I", "i", "e", "c", "t", "T"]; +} +exports.ExtendedYearParser = ExtendedYearParser; + + +/***/ }), + +/***/ 8315: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.FractionOfSecondParser = void 0; +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +class FractionOfSecondParser extends _Parser.Parser { + priority = 30; + + parse(dateString, token) { + const valueCallback = (value) => + Math.trunc(value * Math.pow(10, -token.length + 3)); + return (0, _utils.mapValue)( + (0, _utils.parseNDigits)(token.length, dateString), + valueCallback, + ); + } + + set(date, _flags, value) { + date.setMilliseconds(value); + return date; + } + + incompatibleTokens = ["t", "T"]; +} +exports.FractionOfSecondParser = FractionOfSecondParser; + + +/***/ }), + +/***/ 9761: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.Hour0To11Parser = void 0; +var _constants = __nccwpck_require__(4906); +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +class Hour0To11Parser extends _Parser.Parser { + priority = 70; + + parse(dateString, token, match) { + switch (token) { + case "K": + return (0, _utils.parseNumericPattern)( + _constants.numericPatterns.hour11h, + dateString, + ); + case "Ko": + return match.ordinalNumber(dateString, { unit: "hour" }); + default: + return (0, _utils.parseNDigits)(token.length, dateString); + } + } + + validate(_date, value) { + return value >= 0 && value <= 11; + } + + set(date, _flags, value) { + const isPM = date.getHours() >= 12; + if (isPM && value < 12) { + date.setHours(value + 12, 0, 0, 0); + } else { + date.setHours(value, 0, 0, 0); + } + return date; + } + + incompatibleTokens = ["h", "H", "k", "t", "T"]; +} +exports.Hour0To11Parser = Hour0To11Parser; + + +/***/ }), + +/***/ 5085: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.Hour0to23Parser = void 0; +var _constants = __nccwpck_require__(4906); +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +class Hour0to23Parser extends _Parser.Parser { + priority = 70; + + parse(dateString, token, match) { + switch (token) { + case "H": + return (0, _utils.parseNumericPattern)( + _constants.numericPatterns.hour23h, + dateString, + ); + case "Ho": + return match.ordinalNumber(dateString, { unit: "hour" }); + default: + return (0, _utils.parseNDigits)(token.length, dateString); + } + } + + validate(_date, value) { + return value >= 0 && value <= 23; + } + + set(date, _flags, value) { + date.setHours(value, 0, 0, 0); + return date; + } + + incompatibleTokens = ["a", "b", "h", "K", "k", "t", "T"]; +} +exports.Hour0to23Parser = Hour0to23Parser; + + +/***/ }), + +/***/ 5876: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.Hour1To24Parser = void 0; +var _constants = __nccwpck_require__(4906); +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +class Hour1To24Parser extends _Parser.Parser { + priority = 70; + + parse(dateString, token, match) { + switch (token) { + case "k": + return (0, _utils.parseNumericPattern)( + _constants.numericPatterns.hour24h, + dateString, + ); + case "ko": + return match.ordinalNumber(dateString, { unit: "hour" }); + default: + return (0, _utils.parseNDigits)(token.length, dateString); + } + } + + validate(_date, value) { + return value >= 1 && value <= 24; + } + + set(date, _flags, value) { + const hours = value <= 24 ? value % 24 : value; + date.setHours(hours, 0, 0, 0); + return date; + } + + incompatibleTokens = ["a", "b", "h", "H", "K", "t", "T"]; +} +exports.Hour1To24Parser = Hour1To24Parser; + + +/***/ }), + +/***/ 2741: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.Hour1to12Parser = void 0; +var _constants = __nccwpck_require__(4906); +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +class Hour1to12Parser extends _Parser.Parser { + priority = 70; + + parse(dateString, token, match) { + switch (token) { + case "h": + return (0, _utils.parseNumericPattern)( + _constants.numericPatterns.hour12h, + dateString, + ); + case "ho": + return match.ordinalNumber(dateString, { unit: "hour" }); + default: + return (0, _utils.parseNDigits)(token.length, dateString); + } + } + + validate(_date, value) { + return value >= 1 && value <= 12; + } + + set(date, _flags, value) { + const isPM = date.getHours() >= 12; + if (isPM && value < 12) { + date.setHours(value + 12, 0, 0, 0); + } else if (!isPM && value === 12) { + date.setHours(0, 0, 0, 0); + } else { + date.setHours(value, 0, 0, 0); + } + return date; + } + + incompatibleTokens = ["H", "K", "k", "t", "T"]; +} +exports.Hour1to12Parser = Hour1to12Parser; + + +/***/ }), + +/***/ 7160: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.ISODayParser = void 0; +var _index = __nccwpck_require__(4794); +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +// ISO day of week +class ISODayParser extends _Parser.Parser { + priority = 90; + + parse(dateString, token, match) { + const valueCallback = (value) => { + if (value === 0) { + return 7; + } + return value; + }; + + switch (token) { + // 2 + case "i": + case "ii": // 02 + return (0, _utils.parseNDigits)(token.length, dateString); + // 2nd + case "io": + return match.ordinalNumber(dateString, { unit: "day" }); + // Tue + case "iii": + return (0, _utils.mapValue)( + match.day(dateString, { + width: "abbreviated", + context: "formatting", + }) || + match.day(dateString, { + width: "short", + context: "formatting", + }) || + match.day(dateString, { + width: "narrow", + context: "formatting", + }), + valueCallback, + ); + // T + case "iiiii": + return (0, _utils.mapValue)( + match.day(dateString, { + width: "narrow", + context: "formatting", + }), + valueCallback, + ); + // Tu + case "iiiiii": + return (0, _utils.mapValue)( + match.day(dateString, { + width: "short", + context: "formatting", + }) || + match.day(dateString, { + width: "narrow", + context: "formatting", + }), + valueCallback, + ); + // Tuesday + case "iiii": + default: + return (0, _utils.mapValue)( + match.day(dateString, { + width: "wide", + context: "formatting", + }) || + match.day(dateString, { + width: "abbreviated", + context: "formatting", + }) || + match.day(dateString, { + width: "short", + context: "formatting", + }) || + match.day(dateString, { + width: "narrow", + context: "formatting", + }), + valueCallback, + ); + } + } + + validate(_date, value) { + return value >= 1 && value <= 7; + } + + set(date, _flags, value) { + date = (0, _index.setISODay)(date, value); + date.setHours(0, 0, 0, 0); + return date; + } + + incompatibleTokens = [ + "y", + "Y", + "u", + "q", + "Q", + "M", + "L", + "w", + "d", + "D", + "E", + "e", + "c", + "t", + "T", + ]; +} +exports.ISODayParser = ISODayParser; + + +/***/ }), + +/***/ 3409: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.ISOTimezoneParser = void 0; +var _index = __nccwpck_require__(2524); +var _index2 = __nccwpck_require__(4261); +var _constants = __nccwpck_require__(4906); +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +// Timezone (ISO-8601) +class ISOTimezoneParser extends _Parser.Parser { + priority = 10; + + parse(dateString, token) { + switch (token) { + case "x": + return (0, _utils.parseTimezonePattern)( + _constants.timezonePatterns.basicOptionalMinutes, + dateString, + ); + case "xx": + return (0, _utils.parseTimezonePattern)( + _constants.timezonePatterns.basic, + dateString, + ); + case "xxxx": + return (0, _utils.parseTimezonePattern)( + _constants.timezonePatterns.basicOptionalSeconds, + dateString, + ); + case "xxxxx": + return (0, _utils.parseTimezonePattern)( + _constants.timezonePatterns.extendedOptionalSeconds, + dateString, + ); + case "xxx": + default: + return (0, _utils.parseTimezonePattern)( + _constants.timezonePatterns.extended, + dateString, + ); + } + } + + set(date, flags, value) { + if (flags.timestampIsSet) return date; + return (0, _index.constructFrom)( + date, + date.getTime() - + (0, _index2.getTimezoneOffsetInMilliseconds)(date) - + value, + ); + } + + incompatibleTokens = ["t", "T", "X"]; +} +exports.ISOTimezoneParser = ISOTimezoneParser; + + +/***/ }), + +/***/ 8114: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.ISOTimezoneWithZParser = void 0; +var _index = __nccwpck_require__(2524); +var _index2 = __nccwpck_require__(4261); +var _constants = __nccwpck_require__(4906); +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +// Timezone (ISO-8601. +00:00 is `'Z'`) +class ISOTimezoneWithZParser extends _Parser.Parser { + priority = 10; + + parse(dateString, token) { + switch (token) { + case "X": + return (0, _utils.parseTimezonePattern)( + _constants.timezonePatterns.basicOptionalMinutes, + dateString, + ); + case "XX": + return (0, _utils.parseTimezonePattern)( + _constants.timezonePatterns.basic, + dateString, + ); + case "XXXX": + return (0, _utils.parseTimezonePattern)( + _constants.timezonePatterns.basicOptionalSeconds, + dateString, + ); + case "XXXXX": + return (0, _utils.parseTimezonePattern)( + _constants.timezonePatterns.extendedOptionalSeconds, + dateString, + ); + case "XXX": + default: + return (0, _utils.parseTimezonePattern)( + _constants.timezonePatterns.extended, + dateString, + ); + } + } + + set(date, flags, value) { + if (flags.timestampIsSet) return date; + return (0, _index.constructFrom)( + date, + date.getTime() - + (0, _index2.getTimezoneOffsetInMilliseconds)(date) - + value, + ); + } + + incompatibleTokens = ["t", "T", "x"]; +} +exports.ISOTimezoneWithZParser = ISOTimezoneWithZParser; + + +/***/ }), + +/***/ 6550: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.ISOWeekParser = void 0; +var _index = __nccwpck_require__(8198); +var _index2 = __nccwpck_require__(1573); +var _constants = __nccwpck_require__(4906); +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +// ISO week of year +class ISOWeekParser extends _Parser.Parser { + priority = 100; + + parse(dateString, token, match) { + switch (token) { + case "I": + return (0, _utils.parseNumericPattern)( + _constants.numericPatterns.week, + dateString, + ); + case "Io": + return match.ordinalNumber(dateString, { unit: "week" }); + default: + return (0, _utils.parseNDigits)(token.length, dateString); + } + } + + validate(_date, value) { + return value >= 1 && value <= 53; + } + + set(date, _flags, value) { + return (0, _index2.startOfISOWeek)((0, _index.setISOWeek)(date, value)); + } + + incompatibleTokens = [ + "y", + "Y", + "u", + "q", + "Q", + "M", + "L", + "w", + "d", + "D", + "e", + "c", + "t", + "T", + ]; +} +exports.ISOWeekParser = ISOWeekParser; + + +/***/ }), + +/***/ 1356: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.ISOWeekYearParser = void 0; +var _index = __nccwpck_require__(1573); +var _index2 = __nccwpck_require__(2524); +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +// ISO week-numbering year +class ISOWeekYearParser extends _Parser.Parser { + priority = 130; + + parse(dateString, token) { + if (token === "R") { + return (0, _utils.parseNDigitsSigned)(4, dateString); + } + + return (0, _utils.parseNDigitsSigned)(token.length, dateString); + } + + set(date, _flags, value) { + const firstWeekOfYear = (0, _index2.constructFrom)(date, 0); + firstWeekOfYear.setFullYear(value, 0, 4); + firstWeekOfYear.setHours(0, 0, 0, 0); + return (0, _index.startOfISOWeek)(firstWeekOfYear); + } + + incompatibleTokens = [ + "G", + "y", + "Y", + "u", + "Q", + "q", + "M", + "L", + "w", + "d", + "D", + "e", + "c", + "t", + "T", + ]; +} +exports.ISOWeekYearParser = ISOWeekYearParser; + + +/***/ }), + +/***/ 9535: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.LocalDayParser = void 0; +var _index = __nccwpck_require__(8952); +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +// Local day of week +class LocalDayParser extends _Parser.Parser { + priority = 90; + parse(dateString, token, match, options) { + const valueCallback = (value) => { + // We want here floor instead of trunc, so we get -7 for value 0 instead of 0 + const wholeWeekDays = Math.floor((value - 1) / 7) * 7; + return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays; + }; + + switch (token) { + // 3 + case "e": + case "ee": // 03 + return (0, _utils.mapValue)( + (0, _utils.parseNDigits)(token.length, dateString), + valueCallback, + ); + // 3rd + case "eo": + return (0, _utils.mapValue)( + match.ordinalNumber(dateString, { + unit: "day", + }), + valueCallback, + ); + // Tue + case "eee": + return ( + match.day(dateString, { + width: "abbreviated", + context: "formatting", + }) || + match.day(dateString, { width: "short", context: "formatting" }) || + match.day(dateString, { width: "narrow", context: "formatting" }) + ); + + // T + case "eeeee": + return match.day(dateString, { + width: "narrow", + context: "formatting", + }); + // Tu + case "eeeeee": + return ( + match.day(dateString, { width: "short", context: "formatting" }) || + match.day(dateString, { width: "narrow", context: "formatting" }) + ); + + // Tuesday + case "eeee": + default: + return ( + match.day(dateString, { width: "wide", context: "formatting" }) || + match.day(dateString, { + width: "abbreviated", + context: "formatting", + }) || + match.day(dateString, { width: "short", context: "formatting" }) || + match.day(dateString, { width: "narrow", context: "formatting" }) + ); + } + } + + validate(_date, value) { + return value >= 0 && value <= 6; + } + + set(date, _flags, value, options) { + date = (0, _index.setDay)(date, value, options); + date.setHours(0, 0, 0, 0); + return date; + } + + incompatibleTokens = [ + "y", + "R", + "u", + "q", + "Q", + "M", + "L", + "I", + "d", + "D", + "E", + "i", + "c", + "t", + "T", + ]; +} +exports.LocalDayParser = LocalDayParser; + + +/***/ }), + +/***/ 9083: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.LocalWeekParser = void 0; +var _index = __nccwpck_require__(4084); +var _index2 = __nccwpck_require__(7421); +var _constants = __nccwpck_require__(4906); +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +// Local week of year +class LocalWeekParser extends _Parser.Parser { + priority = 100; + + parse(dateString, token, match) { + switch (token) { + case "w": + return (0, _utils.parseNumericPattern)( + _constants.numericPatterns.week, + dateString, + ); + case "wo": + return match.ordinalNumber(dateString, { unit: "week" }); + default: + return (0, _utils.parseNDigits)(token.length, dateString); + } + } + + validate(_date, value) { + return value >= 1 && value <= 53; + } + + set(date, _flags, value, options) { + return (0, _index2.startOfWeek)( + (0, _index.setWeek)(date, value, options), + options, + ); + } + + incompatibleTokens = [ + "y", + "R", + "u", + "q", + "Q", + "M", + "L", + "I", + "d", + "D", + "i", + "t", + "T", + ]; +} +exports.LocalWeekParser = LocalWeekParser; + + +/***/ }), + +/***/ 8346: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.LocalWeekYearParser = void 0; +var _index = __nccwpck_require__(79); + +var _index2 = __nccwpck_require__(7421); +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +// Local week-numbering year +class LocalWeekYearParser extends _Parser.Parser { + priority = 130; + + parse(dateString, token, match) { + const valueCallback = (year) => ({ + year, + isTwoDigitYear: token === "YY", + }); + + switch (token) { + case "Y": + return (0, _utils.mapValue)( + (0, _utils.parseNDigits)(4, dateString), + valueCallback, + ); + case "Yo": + return (0, _utils.mapValue)( + match.ordinalNumber(dateString, { + unit: "year", + }), + valueCallback, + ); + default: + return (0, _utils.mapValue)( + (0, _utils.parseNDigits)(token.length, dateString), + valueCallback, + ); + } + } + + validate(_date, value) { + return value.isTwoDigitYear || value.year > 0; + } + + set(date, flags, value, options) { + const currentYear = (0, _index.getWeekYear)(date, options); + + if (value.isTwoDigitYear) { + const normalizedTwoDigitYear = (0, _utils.normalizeTwoDigitYear)( + value.year, + currentYear, + ); + date.setFullYear( + normalizedTwoDigitYear, + 0, + options.firstWeekContainsDate, + ); + date.setHours(0, 0, 0, 0); + return (0, _index2.startOfWeek)(date, options); + } + + const year = + !("era" in flags) || flags.era === 1 ? value.year : 1 - value.year; + date.setFullYear(year, 0, options.firstWeekContainsDate); + date.setHours(0, 0, 0, 0); + return (0, _index2.startOfWeek)(date, options); + } + + incompatibleTokens = [ + "y", + "R", + "u", + "Q", + "q", + "M", + "L", + "I", + "d", + "D", + "i", + "t", + "T", + ]; +} +exports.LocalWeekYearParser = LocalWeekYearParser; + + +/***/ }), + +/***/ 7993: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.MinuteParser = void 0; +var _constants = __nccwpck_require__(4906); +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +class MinuteParser extends _Parser.Parser { + priority = 60; + + parse(dateString, token, match) { + switch (token) { + case "m": + return (0, _utils.parseNumericPattern)( + _constants.numericPatterns.minute, + dateString, + ); + case "mo": + return match.ordinalNumber(dateString, { unit: "minute" }); + default: + return (0, _utils.parseNDigits)(token.length, dateString); + } + } + + validate(_date, value) { + return value >= 0 && value <= 59; + } + + set(date, _flags, value) { + date.setMinutes(value, 0, 0); + return date; + } + + incompatibleTokens = ["t", "T"]; +} +exports.MinuteParser = MinuteParser; + + +/***/ }), + +/***/ 9809: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.MonthParser = void 0; +var _constants = __nccwpck_require__(4906); +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +class MonthParser extends _Parser.Parser { + incompatibleTokens = [ + "Y", + "R", + "q", + "Q", + "L", + "w", + "I", + "D", + "i", + "e", + "c", + "t", + "T", + ]; + + priority = 110; + + parse(dateString, token, match) { + const valueCallback = (value) => value - 1; + + switch (token) { + // 1, 2, ..., 12 + case "M": + return (0, _utils.mapValue)( + (0, _utils.parseNumericPattern)( + _constants.numericPatterns.month, + dateString, + ), + valueCallback, + ); + // 01, 02, ..., 12 + case "MM": + return (0, _utils.mapValue)( + (0, _utils.parseNDigits)(2, dateString), + valueCallback, + ); + // 1st, 2nd, ..., 12th + case "Mo": + return (0, _utils.mapValue)( + match.ordinalNumber(dateString, { + unit: "month", + }), + valueCallback, + ); + // Jan, Feb, ..., Dec + case "MMM": + return ( + match.month(dateString, { + width: "abbreviated", + context: "formatting", + }) || + match.month(dateString, { width: "narrow", context: "formatting" }) + ); + + // J, F, ..., D + case "MMMMM": + return match.month(dateString, { + width: "narrow", + context: "formatting", + }); + // January, February, ..., December + case "MMMM": + default: + return ( + match.month(dateString, { width: "wide", context: "formatting" }) || + match.month(dateString, { + width: "abbreviated", + context: "formatting", + }) || + match.month(dateString, { width: "narrow", context: "formatting" }) + ); + } + } + + validate(_date, value) { + return value >= 0 && value <= 11; + } + + set(date, _flags, value) { + date.setMonth(value, 1); + date.setHours(0, 0, 0, 0); + return date; + } +} +exports.MonthParser = MonthParser; + + +/***/ }), + +/***/ 9367: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.QuarterParser = void 0; +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +class QuarterParser extends _Parser.Parser { + priority = 120; + + parse(dateString, token, match) { + switch (token) { + // 1, 2, 3, 4 + case "Q": + case "QQ": // 01, 02, 03, 04 + return (0, _utils.parseNDigits)(token.length, dateString); + // 1st, 2nd, 3rd, 4th + case "Qo": + return match.ordinalNumber(dateString, { unit: "quarter" }); + // Q1, Q2, Q3, Q4 + case "QQQ": + return ( + match.quarter(dateString, { + width: "abbreviated", + context: "formatting", + }) || + match.quarter(dateString, { + width: "narrow", + context: "formatting", + }) + ); + + // 1, 2, 3, 4 (narrow quarter; could be not numerical) + case "QQQQQ": + return match.quarter(dateString, { + width: "narrow", + context: "formatting", + }); + // 1st quarter, 2nd quarter, ... + case "QQQQ": + default: + return ( + match.quarter(dateString, { + width: "wide", + context: "formatting", + }) || + match.quarter(dateString, { + width: "abbreviated", + context: "formatting", + }) || + match.quarter(dateString, { + width: "narrow", + context: "formatting", + }) + ); + } + } + + validate(_date, value) { + return value >= 1 && value <= 4; + } + + set(date, _flags, value) { + date.setMonth((value - 1) * 3, 1); + date.setHours(0, 0, 0, 0); + return date; + } + + incompatibleTokens = [ + "Y", + "R", + "q", + "M", + "L", + "w", + "I", + "d", + "D", + "i", + "e", + "c", + "t", + "T", + ]; +} +exports.QuarterParser = QuarterParser; + + +/***/ }), + +/***/ 6533: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.SecondParser = void 0; +var _constants = __nccwpck_require__(4906); +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +class SecondParser extends _Parser.Parser { + priority = 50; + + parse(dateString, token, match) { + switch (token) { + case "s": + return (0, _utils.parseNumericPattern)( + _constants.numericPatterns.second, + dateString, + ); + case "so": + return match.ordinalNumber(dateString, { unit: "second" }); + default: + return (0, _utils.parseNDigits)(token.length, dateString); + } + } + + validate(_date, value) { + return value >= 0 && value <= 59; + } + + set(date, _flags, value) { + date.setSeconds(value, 0); + return date; + } + + incompatibleTokens = ["t", "T"]; +} +exports.SecondParser = SecondParser; + + +/***/ }), + +/***/ 8691: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.StandAloneLocalDayParser = void 0; +var _index = __nccwpck_require__(8952); +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +// Stand-alone local day of week +class StandAloneLocalDayParser extends _Parser.Parser { + priority = 90; + + parse(dateString, token, match, options) { + const valueCallback = (value) => { + // We want here floor instead of trunc, so we get -7 for value 0 instead of 0 + const wholeWeekDays = Math.floor((value - 1) / 7) * 7; + return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays; + }; + + switch (token) { + // 3 + case "c": + case "cc": // 03 + return (0, _utils.mapValue)( + (0, _utils.parseNDigits)(token.length, dateString), + valueCallback, + ); + // 3rd + case "co": + return (0, _utils.mapValue)( + match.ordinalNumber(dateString, { + unit: "day", + }), + valueCallback, + ); + // Tue + case "ccc": + return ( + match.day(dateString, { + width: "abbreviated", + context: "standalone", + }) || + match.day(dateString, { width: "short", context: "standalone" }) || + match.day(dateString, { width: "narrow", context: "standalone" }) + ); + + // T + case "ccccc": + return match.day(dateString, { + width: "narrow", + context: "standalone", + }); + // Tu + case "cccccc": + return ( + match.day(dateString, { width: "short", context: "standalone" }) || + match.day(dateString, { width: "narrow", context: "standalone" }) + ); + + // Tuesday + case "cccc": + default: + return ( + match.day(dateString, { width: "wide", context: "standalone" }) || + match.day(dateString, { + width: "abbreviated", + context: "standalone", + }) || + match.day(dateString, { width: "short", context: "standalone" }) || + match.day(dateString, { width: "narrow", context: "standalone" }) + ); + } + } + + validate(_date, value) { + return value >= 0 && value <= 6; + } + + set(date, _flags, value, options) { + date = (0, _index.setDay)(date, value, options); + date.setHours(0, 0, 0, 0); + return date; + } + + incompatibleTokens = [ + "y", + "R", + "u", + "q", + "Q", + "M", + "L", + "I", + "d", + "D", + "E", + "i", + "e", + "t", + "T", + ]; +} +exports.StandAloneLocalDayParser = StandAloneLocalDayParser; + + +/***/ }), + +/***/ 6958: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.StandAloneMonthParser = void 0; +var _constants = __nccwpck_require__(4906); +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +class StandAloneMonthParser extends _Parser.Parser { + priority = 110; + + parse(dateString, token, match) { + const valueCallback = (value) => value - 1; + + switch (token) { + // 1, 2, ..., 12 + case "L": + return (0, _utils.mapValue)( + (0, _utils.parseNumericPattern)( + _constants.numericPatterns.month, + dateString, + ), + valueCallback, + ); + // 01, 02, ..., 12 + case "LL": + return (0, _utils.mapValue)( + (0, _utils.parseNDigits)(2, dateString), + valueCallback, + ); + // 1st, 2nd, ..., 12th + case "Lo": + return (0, _utils.mapValue)( + match.ordinalNumber(dateString, { + unit: "month", + }), + valueCallback, + ); + // Jan, Feb, ..., Dec + case "LLL": + return ( + match.month(dateString, { + width: "abbreviated", + context: "standalone", + }) || + match.month(dateString, { width: "narrow", context: "standalone" }) + ); + + // J, F, ..., D + case "LLLLL": + return match.month(dateString, { + width: "narrow", + context: "standalone", + }); + // January, February, ..., December + case "LLLL": + default: + return ( + match.month(dateString, { width: "wide", context: "standalone" }) || + match.month(dateString, { + width: "abbreviated", + context: "standalone", + }) || + match.month(dateString, { width: "narrow", context: "standalone" }) + ); + } + } + + validate(_date, value) { + return value >= 0 && value <= 11; + } + + set(date, _flags, value) { + date.setMonth(value, 1); + date.setHours(0, 0, 0, 0); + return date; + } + + incompatibleTokens = [ + "Y", + "R", + "q", + "Q", + "M", + "w", + "I", + "D", + "i", + "e", + "c", + "t", + "T", + ]; +} +exports.StandAloneMonthParser = StandAloneMonthParser; + + +/***/ }), + +/***/ 6171: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.StandAloneQuarterParser = void 0; +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +class StandAloneQuarterParser extends _Parser.Parser { + priority = 120; + + parse(dateString, token, match) { + switch (token) { + // 1, 2, 3, 4 + case "q": + case "qq": // 01, 02, 03, 04 + return (0, _utils.parseNDigits)(token.length, dateString); + // 1st, 2nd, 3rd, 4th + case "qo": + return match.ordinalNumber(dateString, { unit: "quarter" }); + // Q1, Q2, Q3, Q4 + case "qqq": + return ( + match.quarter(dateString, { + width: "abbreviated", + context: "standalone", + }) || + match.quarter(dateString, { + width: "narrow", + context: "standalone", + }) + ); + + // 1, 2, 3, 4 (narrow quarter; could be not numerical) + case "qqqqq": + return match.quarter(dateString, { + width: "narrow", + context: "standalone", + }); + // 1st quarter, 2nd quarter, ... + case "qqqq": + default: + return ( + match.quarter(dateString, { + width: "wide", + context: "standalone", + }) || + match.quarter(dateString, { + width: "abbreviated", + context: "standalone", + }) || + match.quarter(dateString, { + width: "narrow", + context: "standalone", + }) + ); + } + } + + validate(_date, value) { + return value >= 1 && value <= 4; + } + + set(date, _flags, value) { + date.setMonth((value - 1) * 3, 1); + date.setHours(0, 0, 0, 0); + return date; + } + + incompatibleTokens = [ + "Y", + "R", + "Q", + "M", + "L", + "w", + "I", + "d", + "D", + "i", + "e", + "c", + "t", + "T", + ]; +} +exports.StandAloneQuarterParser = StandAloneQuarterParser; + + +/***/ }), + +/***/ 3912: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.TimestampMillisecondsParser = void 0; +var _index = __nccwpck_require__(2524); +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +class TimestampMillisecondsParser extends _Parser.Parser { + priority = 20; + + parse(dateString) { + return (0, _utils.parseAnyDigitsSigned)(dateString); + } + + set(date, _flags, value) { + return [(0, _index.constructFrom)(date, value), { timestampIsSet: true }]; + } + + incompatibleTokens = "*"; +} +exports.TimestampMillisecondsParser = TimestampMillisecondsParser; + + +/***/ }), + +/***/ 6474: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.TimestampSecondsParser = void 0; +var _index = __nccwpck_require__(2524); +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +class TimestampSecondsParser extends _Parser.Parser { + priority = 40; + + parse(dateString) { + return (0, _utils.parseAnyDigitsSigned)(dateString); + } + + set(date, _flags, value) { + return [ + (0, _index.constructFrom)(date, value * 1000), + { timestampIsSet: true }, + ]; + } + + incompatibleTokens = "*"; +} +exports.TimestampSecondsParser = TimestampSecondsParser; + + +/***/ }), + +/***/ 1924: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.YearParser = void 0; +var _Parser = __nccwpck_require__(9250); + +var _utils = __nccwpck_require__(1962); + +// From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns +// | Year | y | yy | yyy | yyyy | yyyyy | +// |----------|-------|----|-------|-------|-------| +// | AD 1 | 1 | 01 | 001 | 0001 | 00001 | +// | AD 12 | 12 | 12 | 012 | 0012 | 00012 | +// | AD 123 | 123 | 23 | 123 | 0123 | 00123 | +// | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 | +// | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 | +class YearParser extends _Parser.Parser { + priority = 130; + incompatibleTokens = ["Y", "R", "u", "w", "I", "i", "e", "c", "t", "T"]; + + parse(dateString, token, match) { + const valueCallback = (year) => ({ + year, + isTwoDigitYear: token === "yy", + }); + + switch (token) { + case "y": + return (0, _utils.mapValue)( + (0, _utils.parseNDigits)(4, dateString), + valueCallback, + ); + case "yo": + return (0, _utils.mapValue)( + match.ordinalNumber(dateString, { + unit: "year", + }), + valueCallback, + ); + default: + return (0, _utils.mapValue)( + (0, _utils.parseNDigits)(token.length, dateString), + valueCallback, + ); + } + } + + validate(_date, value) { + return value.isTwoDigitYear || value.year > 0; + } + + set(date, flags, value) { + const currentYear = date.getFullYear(); + + if (value.isTwoDigitYear) { + const normalizedTwoDigitYear = (0, _utils.normalizeTwoDigitYear)( + value.year, + currentYear, + ); + date.setFullYear(normalizedTwoDigitYear, 0, 1); + date.setHours(0, 0, 0, 0); + return date; + } + + const year = + !("era" in flags) || flags.era === 1 ? value.year : 1 - value.year; + date.setFullYear(year, 0, 1); + date.setHours(0, 0, 0, 0); + return date; + } +} +exports.YearParser = YearParser; + + +/***/ }), + +/***/ 1962: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.dayPeriodEnumToHours = dayPeriodEnumToHours; +exports.isLeapYearIndex = isLeapYearIndex; +exports.mapValue = mapValue; +exports.normalizeTwoDigitYear = normalizeTwoDigitYear; +exports.parseAnyDigitsSigned = parseAnyDigitsSigned; +exports.parseNDigits = parseNDigits; +exports.parseNDigitsSigned = parseNDigitsSigned; +exports.parseNumericPattern = parseNumericPattern; +exports.parseTimezonePattern = parseTimezonePattern; +var _index = __nccwpck_require__(2983); + +var _constants = __nccwpck_require__(4906); + +function mapValue(parseFnResult, mapFn) { + if (!parseFnResult) { + return parseFnResult; + } + + return { + value: mapFn(parseFnResult.value), + rest: parseFnResult.rest, + }; +} + +function parseNumericPattern(pattern, dateString) { + const matchResult = dateString.match(pattern); + + if (!matchResult) { + return null; + } + + return { + value: parseInt(matchResult[0], 10), + rest: dateString.slice(matchResult[0].length), + }; +} + +function parseTimezonePattern(pattern, dateString) { + const matchResult = dateString.match(pattern); + + if (!matchResult) { + return null; + } + + // Input is 'Z' + if (matchResult[0] === "Z") { + return { + value: 0, + rest: dateString.slice(1), + }; + } + + const sign = matchResult[1] === "+" ? 1 : -1; + const hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0; + const minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0; + const seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0; + + return { + value: + sign * + (hours * _index.millisecondsInHour + + minutes * _index.millisecondsInMinute + + seconds * _index.millisecondsInSecond), + rest: dateString.slice(matchResult[0].length), + }; +} + +function parseAnyDigitsSigned(dateString) { + return parseNumericPattern( + _constants.numericPatterns.anyDigitsSigned, + dateString, + ); +} + +function parseNDigits(n, dateString) { + switch (n) { + case 1: + return parseNumericPattern( + _constants.numericPatterns.singleDigit, + dateString, + ); + case 2: + return parseNumericPattern( + _constants.numericPatterns.twoDigits, + dateString, + ); + case 3: + return parseNumericPattern( + _constants.numericPatterns.threeDigits, + dateString, + ); + case 4: + return parseNumericPattern( + _constants.numericPatterns.fourDigits, + dateString, + ); + default: + return parseNumericPattern(new RegExp("^\\d{1," + n + "}"), dateString); + } +} + +function parseNDigitsSigned(n, dateString) { + switch (n) { + case 1: + return parseNumericPattern( + _constants.numericPatterns.singleDigitSigned, + dateString, + ); + case 2: + return parseNumericPattern( + _constants.numericPatterns.twoDigitsSigned, + dateString, + ); + case 3: + return parseNumericPattern( + _constants.numericPatterns.threeDigitsSigned, + dateString, + ); + case 4: + return parseNumericPattern( + _constants.numericPatterns.fourDigitsSigned, + dateString, + ); + default: + return parseNumericPattern(new RegExp("^-?\\d{1," + n + "}"), dateString); + } +} + +function dayPeriodEnumToHours(dayPeriod) { + switch (dayPeriod) { + case "morning": + return 4; + case "evening": + return 17; + case "pm": + case "noon": + case "afternoon": + return 12; + case "am": + case "midnight": + case "night": + default: + return 0; + } +} + +function normalizeTwoDigitYear(twoDigitYear, currentYear) { + const isCommonEra = currentYear > 0; + // Absolute number of the current year: + // 1 -> 1 AC + // 0 -> 1 BC + // -1 -> 2 BC + const absCurrentYear = isCommonEra ? currentYear : 1 - currentYear; + + let result; + if (absCurrentYear <= 50) { + result = twoDigitYear || 100; + } else { + const rangeEnd = absCurrentYear + 50; + const rangeEndCentury = Math.trunc(rangeEnd / 100) * 100; + const isPreviousCentury = twoDigitYear >= rangeEnd % 100; + result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0); + } + + return isCommonEra ? result : 1 - result; +} + +function isLeapYearIndex(year) { + return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0); +} + + +/***/ }), + +/***/ 5230: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.parseISO = parseISO; +var _index = __nccwpck_require__(2983); + +/** + * The {@link parseISO} function options. + */ + +/** + * @name parseISO + * @category Common Helpers + * @summary Parse ISO string + * + * @description + * Parse the given string in ISO 8601 format and return an instance of Date. + * + * Function accepts complete ISO 8601 formats as well as partial implementations. + * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601 + * + * If the argument isn't a string, the function cannot parse the string or + * the values are invalid, it returns Invalid Date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param argument - The value to convert + * @param options - An object with options + * + * @returns The parsed date in the local time zone + * + * @example + * // Convert string '2014-02-11T11:30:30' to date: + * const result = parseISO('2014-02-11T11:30:30') + * //=> Tue Feb 11 2014 11:30:30 + * + * @example + * // Convert string '+02014101' to date, + * // if the additional number of digits in the extended year format is 1: + * const result = parseISO('+02014101', { additionalDigits: 1 }) + * //=> Fri Apr 11 2014 00:00:00 + */ +function parseISO(argument, options) { + const additionalDigits = options?.additionalDigits ?? 2; + const dateStrings = splitDateString(argument); + + let date; + if (dateStrings.date) { + const parseYearResult = parseYear(dateStrings.date, additionalDigits); + date = parseDate(parseYearResult.restDateString, parseYearResult.year); + } + + if (!date || isNaN(date.getTime())) { + return new Date(NaN); + } + + const timestamp = date.getTime(); + let time = 0; + let offset; + + if (dateStrings.time) { + time = parseTime(dateStrings.time); + if (isNaN(time)) { + return new Date(NaN); + } + } + + if (dateStrings.timezone) { + offset = parseTimezone(dateStrings.timezone); + if (isNaN(offset)) { + return new Date(NaN); + } + } else { + const dirtyDate = new Date(timestamp + time); + // JS parsed string assuming it's in UTC timezone + // but we need it to be parsed in our timezone + // so we use utc values to build date in our timezone. + // Year values from 0 to 99 map to the years 1900 to 1999 + // so set year explicitly with setFullYear. + const result = new Date(0); + result.setFullYear( + dirtyDate.getUTCFullYear(), + dirtyDate.getUTCMonth(), + dirtyDate.getUTCDate(), + ); + result.setHours( + dirtyDate.getUTCHours(), + dirtyDate.getUTCMinutes(), + dirtyDate.getUTCSeconds(), + dirtyDate.getUTCMilliseconds(), + ); + return result; + } + + return new Date(timestamp + time + offset); +} + +const patterns = { + dateTimeDelimiter: /[T ]/, + timeZoneDelimiter: /[Z ]/i, + timezone: /([Z+-].*)$/, +}; + +const dateRegex = + /^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/; +const timeRegex = + /^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/; +const timezoneRegex = /^([+-])(\d{2})(?::?(\d{2}))?$/; + +function splitDateString(dateString) { + const dateStrings = {}; + const array = dateString.split(patterns.dateTimeDelimiter); + let timeString; + + // The regex match should only return at maximum two array elements. + // [date], [time], or [date, time]. + if (array.length > 2) { + return dateStrings; + } + + if (/:/.test(array[0])) { + timeString = array[0]; + } else { + dateStrings.date = array[0]; + timeString = array[1]; + if (patterns.timeZoneDelimiter.test(dateStrings.date)) { + dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0]; + timeString = dateString.substr( + dateStrings.date.length, + dateString.length, + ); + } + } + + if (timeString) { + const token = patterns.timezone.exec(timeString); + if (token) { + dateStrings.time = timeString.replace(token[1], ""); + dateStrings.timezone = token[1]; + } else { + dateStrings.time = timeString; + } + } + + return dateStrings; +} + +function parseYear(dateString, additionalDigits) { + const regex = new RegExp( + "^(?:(\\d{4}|[+-]\\d{" + + (4 + additionalDigits) + + "})|(\\d{2}|[+-]\\d{" + + (2 + additionalDigits) + + "})$)", + ); + + const captures = dateString.match(regex); + // Invalid ISO-formatted year + if (!captures) return { year: NaN, restDateString: "" }; + + const year = captures[1] ? parseInt(captures[1]) : null; + const century = captures[2] ? parseInt(captures[2]) : null; + + // either year or century is null, not both + return { + year: century === null ? year : century * 100, + restDateString: dateString.slice((captures[1] || captures[2]).length), + }; +} + +function parseDate(dateString, year) { + // Invalid ISO-formatted year + if (year === null) return new Date(NaN); + + const captures = dateString.match(dateRegex); + // Invalid ISO-formatted string + if (!captures) return new Date(NaN); + + const isWeekDate = !!captures[4]; + const dayOfYear = parseDateUnit(captures[1]); + const month = parseDateUnit(captures[2]) - 1; + const day = parseDateUnit(captures[3]); + const week = parseDateUnit(captures[4]); + const dayOfWeek = parseDateUnit(captures[5]) - 1; + + if (isWeekDate) { + if (!validateWeekDate(year, week, dayOfWeek)) { + return new Date(NaN); + } + return dayOfISOWeekYear(year, week, dayOfWeek); + } else { + const date = new Date(0); + if ( + !validateDate(year, month, day) || + !validateDayOfYearDate(year, dayOfYear) + ) { + return new Date(NaN); + } + date.setUTCFullYear(year, month, Math.max(dayOfYear, day)); + return date; + } +} + +function parseDateUnit(value) { + return value ? parseInt(value) : 1; +} + +function parseTime(timeString) { + const captures = timeString.match(timeRegex); + if (!captures) return NaN; // Invalid ISO-formatted time + + const hours = parseTimeUnit(captures[1]); + const minutes = parseTimeUnit(captures[2]); + const seconds = parseTimeUnit(captures[3]); + + if (!validateTime(hours, minutes, seconds)) { + return NaN; + } + + return ( + hours * _index.millisecondsInHour + + minutes * _index.millisecondsInMinute + + seconds * 1000 + ); +} + +function parseTimeUnit(value) { + return (value && parseFloat(value.replace(",", "."))) || 0; +} + +function parseTimezone(timezoneString) { + if (timezoneString === "Z") return 0; + + const captures = timezoneString.match(timezoneRegex); + if (!captures) return 0; + + const sign = captures[1] === "+" ? -1 : 1; + const hours = parseInt(captures[2]); + const minutes = (captures[3] && parseInt(captures[3])) || 0; + + if (!validateTimezone(hours, minutes)) { + return NaN; + } + + return ( + sign * + (hours * _index.millisecondsInHour + minutes * _index.millisecondsInMinute) + ); +} + +function dayOfISOWeekYear(isoWeekYear, week, day) { + const date = new Date(0); + date.setUTCFullYear(isoWeekYear, 0, 4); + const fourthOfJanuaryDay = date.getUTCDay() || 7; + const diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay; + date.setUTCDate(date.getUTCDate() + diff); + return date; +} + +// Validation functions + +// February is null to handle the leap year (using ||) +const daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + +function isLeapYearIndex(year) { + return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0); +} + +function validateDate(year, month, date) { + return ( + month >= 0 && + month <= 11 && + date >= 1 && + date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28)) + ); +} + +function validateDayOfYearDate(year, dayOfYear) { + return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365); +} + +function validateWeekDate(_year, week, day) { + return week >= 1 && week <= 53 && day >= 0 && day <= 6; +} + +function validateTime(hours, minutes, seconds) { + if (hours === 24) { + return minutes === 0 && seconds === 0; + } + + return ( + seconds >= 0 && + seconds < 60 && + minutes >= 0 && + minutes < 60 && + hours >= 0 && + hours < 25 + ); +} + +function validateTimezone(_hours, minutes) { + return minutes >= 0 && minutes <= 59; +} + + +/***/ }), + +/***/ 8852: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +exports.parseJSON = parseJSON; /** + * @name parseJSON + * @category Common Helpers + * @summary Parse a JSON date string + * + * @description + * Converts a complete ISO date string in UTC time, the typical format for transmitting + * a date in JSON, to a JavaScript `Date` instance. + * + * This is a minimal implementation for converting dates retrieved from a JSON API to + * a `Date` instance which can be used with other functions in the `date-fns` library. + * The following formats are supported: + * + * - `2000-03-15T05:20:10.123Z`: The output of `.toISOString()` and `JSON.stringify(new Date())` + * - `2000-03-15T05:20:10Z`: Without milliseconds + * - `2000-03-15T05:20:10+00:00`: With a zero offset, the default JSON encoded format in some other languages + * - `2000-03-15T05:20:10+05:45`: With a positive or negative offset, the default JSON encoded format in some other languages + * - `2000-03-15T05:20:10+0000`: With a zero offset without a colon + * - `2000-03-15T05:20:10`: Without a trailing 'Z' symbol + * - `2000-03-15T05:20:10.1234567`: Up to 7 digits in milliseconds field. Only first 3 are taken into account since JS does not allow fractional milliseconds + * - `2000-03-15 05:20:10`: With a space instead of a 'T' separator for APIs returning a SQL date without reformatting + * + * For convenience and ease of use these other input types are also supported + * via [toDate](https://date-fns.org/docs/toDate): + * + * - A `Date` instance will be cloned + * - A `number` will be treated as a timestamp + * + * Any other input type or invalid date strings will return an `Invalid Date`. + * + * @param dateStr - A fully formed ISO8601 date string to convert + * + * @returns The parsed date in the local time zone + */ +function parseJSON(dateStr) { + const parts = dateStr.match( + /(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2}):(\d{2})(?:\.(\d{0,7}))?(?:Z|(.)(\d{2}):?(\d{2})?)?/, + ); + if (parts) { + // Group 8 matches the sign + return new Date( + Date.UTC( + +parts[1], + +parts[2] - 1, + +parts[3], + +parts[4] - (+parts[9] || 0) * (parts[8] == "-" ? -1 : 1), + +parts[5] - (+parts[10] || 0) * (parts[8] == "-" ? -1 : 1), + +parts[6], + +((parts[7] || "0") + "00").substring(0, 3), + ), + ); + } + return new Date(NaN); +} + + +/***/ }), + +/***/ 3056: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.previousDay = previousDay; +var _index = __nccwpck_require__(5404); +var _index2 = __nccwpck_require__(8028); + +/** + * @name previousDay + * @category Weekday Helpers + * @summary When is the previous day of the week? + * + * @description + * When is the previous day of the week? 0-6 the day of the week, 0 represents Sunday. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to check + * @param day - The day of the week + * + * @returns The date is the previous day of week + * + * @example + * // When is the previous Monday before Mar, 20, 2020? + * const result = previousDay(new Date(2020, 2, 20), 1) + * //=> Mon Mar 16 2020 00:00:00 + * + * @example + * // When is the previous Tuesday before Mar, 21, 2020? + * const result = previousDay(new Date(2020, 2, 21), 2) + * //=> Tue Mar 17 2020 00:00:00 + */ +function previousDay(date, day) { + let delta = (0, _index.getDay)(date) - day; + if (delta <= 0) delta += 7; + + return (0, _index2.subDays)(date, delta); +} + + +/***/ }), + +/***/ 2742: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.previousFriday = previousFriday; +var _index = __nccwpck_require__(3056); + +/** + * @name previousFriday + * @category Weekday Helpers + * @summary When is the previous Friday? + * + * @description + * When is the previous Friday? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to start counting from + * + * @returns The previous Friday + * + * @example + * // When is the previous Friday before Jun, 19, 2021? + * const result = previousFriday(new Date(2021, 5, 19)) + * //=> Fri June 18 2021 00:00:00 + */ +function previousFriday(date) { + return (0, _index.previousDay)(date, 5); +} + + +/***/ }), + +/***/ 48: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.previousMonday = previousMonday; +var _index = __nccwpck_require__(3056); + +/** + * @name previousMonday + * @category Weekday Helpers + * @summary When is the previous Monday? + * + * @description + * When is the previous Monday? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to start counting from + * + * @returns The previous Monday + * + * @example + * // When is the previous Monday before Jun, 18, 2021? + * const result = previousMonday(new Date(2021, 5, 18)) + * //=> Mon June 14 2021 00:00:00 + */ +function previousMonday(date) { + return (0, _index.previousDay)(date, 1); +} + + +/***/ }), + +/***/ 8867: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.previousSaturday = previousSaturday; +var _index = __nccwpck_require__(3056); + +/** + * @name previousSaturday + * @category Weekday Helpers + * @summary When is the previous Saturday? + * + * @description + * When is the previous Saturday? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to start counting from + * + * @returns The previous Saturday + * + * @example + * // When is the previous Saturday before Jun, 20, 2021? + * const result = previousSaturday(new Date(2021, 5, 20)) + * //=> Sat June 19 2021 00:00:00 + */ +function previousSaturday(date) { + return (0, _index.previousDay)(date, 6); +} + + +/***/ }), + +/***/ 8045: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.previousSunday = previousSunday; +var _index = __nccwpck_require__(3056); + +/** + * @name previousSunday + * @category Weekday Helpers + * @summary When is the previous Sunday? + * + * @description + * When is the previous Sunday? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to start counting from + * + * @returns The previous Sunday + * + * @example + * // When is the previous Sunday before Jun, 21, 2021? + * const result = previousSunday(new Date(2021, 5, 21)) + * //=> Sun June 20 2021 00:00:00 + */ +function previousSunday(date) { + return (0, _index.previousDay)(date, 0); +} + + +/***/ }), + +/***/ 5118: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.previousThursday = previousThursday; +var _index = __nccwpck_require__(3056); + +/** + * @name previousThursday + * @category Weekday Helpers + * @summary When is the previous Thursday? + * + * @description + * When is the previous Thursday? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to start counting from + * + * @returns The previous Thursday + * + * @example + * // When is the previous Thursday before Jun, 18, 2021? + * const result = previousThursday(new Date(2021, 5, 18)) + * //=> Thu June 17 2021 00:00:00 + */ +function previousThursday(date) { + return (0, _index.previousDay)(date, 4); +} + + +/***/ }), + +/***/ 1541: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.previousTuesday = previousTuesday; +var _index = __nccwpck_require__(3056); + +/** + * @name previousTuesday + * @category Weekday Helpers + * @summary When is the previous Tuesday? + * + * @description + * When is the previous Tuesday? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to start counting from + * + * @returns The previous Tuesday + * + * @example + * // When is the previous Tuesday before Jun, 18, 2021? + * const result = previousTuesday(new Date(2021, 5, 18)) + * //=> Tue June 15 2021 00:00:00 + */ +function previousTuesday(date) { + return (0, _index.previousDay)(date, 2); +} + + +/***/ }), + +/***/ 2404: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.previousWednesday = previousWednesday; +var _index = __nccwpck_require__(3056); + +/** + * @name previousWednesday + * @category Weekday Helpers + * @summary When is the previous Wednesday? + * + * @description + * When is the previous Wednesday? + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to start counting from + * + * @returns The previous Wednesday + * + * @example + * // When is the previous Wednesday before Jun, 18, 2021? + * const result = previousWednesday(new Date(2021, 5, 18)) + * //=> Wed June 16 2021 00:00:00 + */ +function previousWednesday(date) { + return (0, _index.previousDay)(date, 3); +} + + +/***/ }), + +/***/ 360: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.quartersToMonths = quartersToMonths; +var _index = __nccwpck_require__(2983); + +/** + * @name quartersToMonths + * @category Conversion Helpers + * @summary Convert number of quarters to months. + * + * @description + * Convert a number of quarters to a full number of months. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param quarters - The number of quarters to be converted + * + * @returns The number of quarters converted in months + * + * @example + * // Convert 2 quarters to months + * const result = quartersToMonths(2) + * //=> 6 + */ +function quartersToMonths(quarters) { + return Math.trunc(quarters * _index.monthsInQuarter); +} + + +/***/ }), + +/***/ 5334: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.quartersToYears = quartersToYears; +var _index = __nccwpck_require__(2983); + +/** + * @name quartersToYears + * @category Conversion Helpers + * @summary Convert number of quarters to years. + * + * @description + * Convert a number of quarters to a full number of years. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param quarters - The number of quarters to be converted + * + * @returns The number of quarters converted in years + * + * @example + * // Convert 8 quarters to years + * const result = quartersToYears(8) + * //=> 2 + * + * @example + * // It uses floor rounding: + * const result = quartersToYears(11) + * //=> 2 + */ +function quartersToYears(quarters) { + const years = quarters / _index.quartersInYear; + return Math.trunc(years); +} + + +/***/ }), + +/***/ 1659: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.roundToNearestHours = roundToNearestHours; +var _index = __nccwpck_require__(9253); +var _index2 = __nccwpck_require__(2524); +var _index3 = __nccwpck_require__(4363); + +/** + * The {@link roundToNearestHours} function options. + */ + +/** + * @name roundToNearestHours + * @category Hour Helpers + * @summary Rounds the given date to the nearest hour + * + * @description + * Rounds the given date to the nearest hour (or number of hours). + * Rounds up when the given date is exactly between the nearest round hours. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to round + * @param options - An object with options. + * + * @returns The new date rounded to the closest hour + * + * @example + * // Round 10 July 2014 12:34:56 to nearest hour: + * const result = roundToNearestHours(new Date(2014, 6, 10, 12, 34, 56)) + * //=> Thu Jul 10 2014 13:00:00 + * + * @example + * // Round 10 July 2014 12:34:56 to nearest half hour: + * const result = roundToNearestHours(new Date(2014, 6, 10, 12, 34, 56), { nearestTo: 6 }) + * //=> Thu Jul 10 2014 12:00:00 + + * @example + * // Round 10 July 2014 12:34:56 to nearest half hour: + * const result = roundToNearestHours(new Date(2014, 6, 10, 12, 34, 56), { nearestTo: 8 }) + * //=> Thu Jul 10 2014 16:00:00 + +* @example + * // Floor (rounds down) 10 July 2014 12:34:56 to nearest hour: + * const result = roundToNearestHours(new Date(2014, 6, 10, 1, 23, 45), { roundingMethod: 'ceil' }) + * //=> Thu Jul 10 2014 02:00:00 + * + * @example + * // Ceil (rounds up) 10 July 2014 12:34:56 to nearest quarter hour: + * const result = roundToNearestHours(new Date(2014, 6, 10, 12, 34, 56), { roundingMethod: 'floor', nearestTo: 8 }) + * //=> Thu Jul 10 2014 08:00:00 + */ +function roundToNearestHours(date, options) { + const nearestTo = options?.nearestTo ?? 1; + + if (nearestTo < 1 || nearestTo > 12) + return (0, _index2.constructFrom)(date, NaN); + + const _date = (0, _index3.toDate)(date); + const fractionalMinutes = _date.getMinutes() / 60; + const fractionalSeconds = _date.getSeconds() / 60 / 60; + const fractionalMilliseconds = _date.getMilliseconds() / 1000 / 60 / 60; + const hours = + _date.getHours() + + fractionalMinutes + + fractionalSeconds + + fractionalMilliseconds; + + // Unlike the `differenceIn*` functions, the default rounding behavior is `round` and not 'trunc' + const method = options?.roundingMethod ?? "round"; + const roundingMethod = (0, _index.getRoundingMethod)(method); + + // nearestTo option does not care daylight savings time + const roundedHours = roundingMethod(hours / nearestTo) * nearestTo; + + const result = (0, _index2.constructFrom)(date, _date); + result.setHours(roundedHours, 0, 0, 0); + return result; +} + + +/***/ }), + +/***/ 3255: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.roundToNearestMinutes = roundToNearestMinutes; +var _index = __nccwpck_require__(9253); +var _index2 = __nccwpck_require__(2524); +var _index3 = __nccwpck_require__(4363); + +/** + * The {@link roundToNearestMinutes} function options. + */ + +/** + * @name roundToNearestMinutes + * @category Minute Helpers + * @summary Rounds the given date to the nearest minute + * + * @description + * Rounds the given date to the nearest minute (or number of minutes). + * Rounds up when the given date is exactly between the nearest round minutes. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to round + * @param options - An object with options. + * + * @returns The new date rounded to the closest minute + * + * @example + * // Round 10 July 2014 12:12:34 to nearest minute: + * const result = roundToNearestMinutes(new Date(2014, 6, 10, 12, 12, 34)) + * //=> Thu Jul 10 2014 12:13:00 + * + * @example + * // Round 10 July 2014 12:12:34 to nearest quarter hour: + * const result = roundToNearestMinutes(new Date(2014, 6, 10, 12, 12, 34), { nearestTo: 15 }) + * //=> Thu Jul 10 2014 12:15:00 + * + * @example + * // Floor (rounds down) 10 July 2014 12:12:34 to nearest minute: + * const result = roundToNearestMinutes(new Date(2014, 6, 10, 12, 12, 34), { roundingMethod: 'floor' }) + * //=> Thu Jul 10 2014 12:12:00 + * + * @example + * // Ceil (rounds up) 10 July 2014 12:12:34 to nearest half hour: + * const result = roundToNearestMinutes(new Date(2014, 6, 10, 12, 12, 34), { roundingMethod: 'ceil', nearestTo: 30 }) + * //=> Thu Jul 10 2014 12:30:00 + */ +function roundToNearestMinutes(date, options) { + const nearestTo = options?.nearestTo ?? 1; + + if (nearestTo < 1 || nearestTo > 30) + return (0, _index2.constructFrom)(date, NaN); + + const _date = (0, _index3.toDate)(date); + const fractionalSeconds = _date.getSeconds() / 60; + const fractionalMilliseconds = _date.getMilliseconds() / 1000 / 60; + const minutes = + _date.getMinutes() + fractionalSeconds + fractionalMilliseconds; + + // Unlike the `differenceIn*` functions, the default rounding behavior is `round` and not 'trunc' + const method = options?.roundingMethod ?? "round"; + const roundingMethod = (0, _index.getRoundingMethod)(method); + + const roundedMinutes = roundingMethod(minutes / nearestTo) * nearestTo; + + const result = (0, _index2.constructFrom)(date, _date); + result.setMinutes(roundedMinutes, 0, 0); + return result; +} + + +/***/ }), + +/***/ 6426: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.secondsToHours = secondsToHours; +var _index = __nccwpck_require__(2983); + +/** + * @name secondsToHours + * @category Conversion Helpers + * @summary Convert seconds to hours. + * + * @description + * Convert a number of seconds to a full number of hours. + * + * @param seconds - The number of seconds to be converted + * + * @returns The number of seconds converted in hours + * + * @example + * // Convert 7200 seconds into hours + * const result = secondsToHours(7200) + * //=> 2 + * + * @example + * // It uses floor rounding: + * const result = secondsToHours(7199) + * //=> 1 + */ +function secondsToHours(seconds) { + const hours = seconds / _index.secondsInHour; + return Math.trunc(hours); +} + + +/***/ }), + +/***/ 5131: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.secondsToMilliseconds = secondsToMilliseconds; +var _index = __nccwpck_require__(2983); + +/** + * @name secondsToMilliseconds + * @category Conversion Helpers + * @summary Convert seconds to milliseconds. + * + * @description + * Convert a number of seconds to a full number of milliseconds. + * + * @param seconds - The number of seconds to be converted + * + * @returns The number of seconds converted in milliseconds + * + * @example + * // Convert 2 seconds into milliseconds + * const result = secondsToMilliseconds(2) + * //=> 2000 + */ +function secondsToMilliseconds(seconds) { + return seconds * _index.millisecondsInSecond; +} + + +/***/ }), + +/***/ 9738: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.secondsToMinutes = secondsToMinutes; +var _index = __nccwpck_require__(2983); + +/** + * @name secondsToMinutes + * @category Conversion Helpers + * @summary Convert seconds to minutes. + * + * @description + * Convert a number of seconds to a full number of minutes. + * + * @param seconds - The number of seconds to be converted + * + * @returns The number of seconds converted in minutes + * + * @example + * // Convert 120 seconds into minutes + * const result = secondsToMinutes(120) + * //=> 2 + * + * @example + * // It uses floor rounding: + * const result = secondsToMinutes(119) + * //=> 1 + */ +function secondsToMinutes(seconds) { + const minutes = seconds / _index.secondsInMinute; + return Math.trunc(minutes); +} + + +/***/ }), + +/***/ 5178: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.set = set; +var _index = __nccwpck_require__(2524); +var _index2 = __nccwpck_require__(5484); +var _index3 = __nccwpck_require__(4363); + +/** + * @name set + * @category Common Helpers + * @summary Set date values to a given date. + * + * @description + * Set date values to a given date. + * + * Sets time values to date from object `values`. + * A value is not set if it is undefined or null or doesn't exist in `values`. + * + * Note about bundle size: `set` does not internally use `setX` functions from date-fns but instead opts + * to use native `Date#setX` methods. If you use this function, you may not want to include the + * other `setX` functions that date-fns provides if you are concerned about the bundle size. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param values - The date values to be set + * + * @returns The new date with options set + * + * @example + * // Transform 1 September 2014 into 20 October 2015 in a single line: + * const result = set(new Date(2014, 8, 20), { year: 2015, month: 9, date: 20 }) + * //=> Tue Oct 20 2015 00:00:00 + * + * @example + * // Set 12 PM to 1 September 2014 01:23:45 to 1 September 2014 12:00:00: + * const result = set(new Date(2014, 8, 1, 1, 23, 45), { hours: 12 }) + * //=> Mon Sep 01 2014 12:23:45 + */ + +function set(date, values) { + let _date = (0, _index3.toDate)(date); + + // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date + if (isNaN(+_date)) { + return (0, _index.constructFrom)(date, NaN); + } + + if (values.year != null) { + _date.setFullYear(values.year); + } + + if (values.month != null) { + _date = (0, _index2.setMonth)(_date, values.month); + } + + if (values.date != null) { + _date.setDate(values.date); + } + + if (values.hours != null) { + _date.setHours(values.hours); + } + + if (values.minutes != null) { + _date.setMinutes(values.minutes); + } + + if (values.seconds != null) { + _date.setSeconds(values.seconds); + } + + if (values.milliseconds != null) { + _date.setMilliseconds(values.milliseconds); + } + + return _date; +} + + +/***/ }), + +/***/ 4664: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.setDate = setDate; +var _index = __nccwpck_require__(4363); + +/** + * @name setDate + * @category Day Helpers + * @summary Set the day of the month to the given date. + * + * @description + * Set the day of the month to the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param dayOfMonth - The day of the month of the new date + * + * @returns The new date with the day of the month set + * + * @example + * // Set the 30th day of the month to 1 September 2014: + * const result = setDate(new Date(2014, 8, 1), 30) + * //=> Tue Sep 30 2014 00:00:00 + */ +function setDate(date, dayOfMonth) { + const _date = (0, _index.toDate)(date); + _date.setDate(dayOfMonth); + return _date; +} + + +/***/ }), + +/***/ 8952: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.setDay = setDay; +var _index = __nccwpck_require__(6520); +var _index2 = __nccwpck_require__(4363); + +var _index3 = __nccwpck_require__(91); + +/** + * The {@link setDay} function options. + */ + +/** + * @name setDay + * @category Weekday Helpers + * @summary Set the day of the week to the given date. + * + * @description + * Set the day of the week to the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param day - The day of the week of the new date + * @param options - An object with options. + * + * @returns The new date with the day of the week set + * + * @example + * // Set week day to Sunday, with the default weekStartsOn of Sunday: + * const result = setDay(new Date(2014, 8, 1), 0) + * //=> Sun Aug 31 2014 00:00:00 + * + * @example + * // Set week day to Sunday, with a weekStartsOn of Monday: + * const result = setDay(new Date(2014, 8, 1), 0, { weekStartsOn: 1 }) + * //=> Sun Sep 07 2014 00:00:00 + */ +function setDay(date, day, options) { + const defaultOptions = (0, _index3.getDefaultOptions)(); + const weekStartsOn = + options?.weekStartsOn ?? + options?.locale?.options?.weekStartsOn ?? + defaultOptions.weekStartsOn ?? + defaultOptions.locale?.options?.weekStartsOn ?? + 0; + + const _date = (0, _index2.toDate)(date); + const currentDay = _date.getDay(); + + const remainder = day % 7; + const dayIndex = (remainder + 7) % 7; + + const delta = 7 - weekStartsOn; + const diff = + day < 0 || day > 6 + ? day - ((currentDay + delta) % 7) + : ((dayIndex + delta) % 7) - ((currentDay + delta) % 7); + return (0, _index.addDays)(_date, diff); +} + + +/***/ }), + +/***/ 4175: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.setDayOfYear = setDayOfYear; +var _index = __nccwpck_require__(4363); + +/** + * @name setDayOfYear + * @category Day Helpers + * @summary Set the day of the year to the given date. + * + * @description + * Set the day of the year to the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param dayOfYear - The day of the year of the new date + * + * @returns The new date with the day of the year set + * + * @example + * // Set the 2nd day of the year to 2 July 2014: + * const result = setDayOfYear(new Date(2014, 6, 2), 2) + * //=> Thu Jan 02 2014 00:00:00 + */ +function setDayOfYear(date, dayOfYear) { + const _date = (0, _index.toDate)(date); + _date.setMonth(0); + _date.setDate(dayOfYear); + return _date; +} + + +/***/ }), + +/***/ 1106: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.setDefaultOptions = setDefaultOptions; + +var _index = __nccwpck_require__(91); + +/** + * @name setDefaultOptions + * @category Common Helpers + * @summary Set default options including locale. + * @pure false + * + * @description + * Sets the defaults for + * `options.locale`, `options.weekStartsOn` and `options.firstWeekContainsDate` + * arguments for all functions. + * + * @param options - An object with options + * + * @example + * // Set global locale: + * import { es } from 'date-fns/locale' + * setDefaultOptions({ locale: es }) + * const result = format(new Date(2014, 8, 2), 'PPPP') + * //=> 'martes, 2 de septiembre de 2014' + * + * @example + * // Start of the week for 2 September 2014: + * const result = startOfWeek(new Date(2014, 8, 2)) + * //=> Sun Aug 31 2014 00:00:00 + * + * @example + * // Start of the week for 2 September 2014, + * // when we set that week starts on Monday by default: + * setDefaultOptions({ weekStartsOn: 1 }) + * const result = startOfWeek(new Date(2014, 8, 2)) + * //=> Mon Sep 01 2014 00:00:00 + * + * @example + * // Manually set options take priority over default options: + * setDefaultOptions({ weekStartsOn: 1 }) + * const result = startOfWeek(new Date(2014, 8, 2), { weekStartsOn: 0 }) + * //=> Sun Aug 31 2014 00:00:00 + * + * @example + * // Remove the option by setting it to `undefined`: + * setDefaultOptions({ weekStartsOn: 1 }) + * setDefaultOptions({ weekStartsOn: undefined }) + * const result = startOfWeek(new Date(2014, 8, 2)) + * //=> Sun Aug 31 2014 00:00:00 + */ +function setDefaultOptions(options) { + const result = {}; + const defaultOptions = (0, _index.getDefaultOptions)(); + + for (const property in defaultOptions) { + if (Object.prototype.hasOwnProperty.call(defaultOptions, property)) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type + result[property] = defaultOptions[property]; + } + } + + for (const property in options) { + if (Object.prototype.hasOwnProperty.call(options, property)) { + if (options[property] === undefined) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type + delete result[property]; + } else { + // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type + result[property] = options[property]; + } + } + } + + (0, _index.setDefaultOptions)(result); +} + + +/***/ }), + +/***/ 8872: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.setHours = setHours; +var _index = __nccwpck_require__(4363); + +/** + * @name setHours + * @category Hour Helpers + * @summary Set the hours to the given date. + * + * @description + * Set the hours to the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param hours - The hours of the new date + * + * @returns The new date with the hours set + * + * @example + * // Set 4 hours to 1 September 2014 11:30:00: + * const result = setHours(new Date(2014, 8, 1, 11, 30), 4) + * //=> Mon Sep 01 2014 04:30:00 + */ +function setHours(date, hours) { + const _date = (0, _index.toDate)(date); + _date.setHours(hours); + return _date; +} + + +/***/ }), + +/***/ 4794: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.setISODay = setISODay; +var _index = __nccwpck_require__(6520); +var _index2 = __nccwpck_require__(2487); +var _index3 = __nccwpck_require__(4363); + +/** + * @name setISODay + * @category Weekday Helpers + * @summary Set the day of the ISO week to the given date. + * + * @description + * Set the day of the ISO week to the given date. + * ISO week starts with Monday. + * 7 is the index of Sunday, 1 is the index of Monday etc. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param day - The day of the ISO week of the new date + * + * @returns The new date with the day of the ISO week set + * + * @example + * // Set Sunday to 1 September 2014: + * const result = setISODay(new Date(2014, 8, 1), 7) + * //=> Sun Sep 07 2014 00:00:00 + */ +function setISODay(date, day) { + const _date = (0, _index3.toDate)(date); + const currentDay = (0, _index2.getISODay)(_date); + const diff = day - currentDay; + return (0, _index.addDays)(_date, diff); +} + + +/***/ }), + +/***/ 8198: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.setISOWeek = setISOWeek; +var _index = __nccwpck_require__(2482); +var _index2 = __nccwpck_require__(4363); + +/** + * @name setISOWeek + * @category ISO Week Helpers + * @summary Set the ISO week to the given date. + * + * @description + * Set the ISO week to the given date, saving the weekday number. + * + * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param week - The ISO week of the new date + * + * @returns The new date with the ISO week set + * + * @example + * // Set the 53rd ISO week to 7 August 2004: + * const result = setISOWeek(new Date(2004, 7, 7), 53) + * //=> Sat Jan 01 2005 00:00:00 + */ +function setISOWeek(date, week) { + const _date = (0, _index2.toDate)(date); + const diff = (0, _index.getISOWeek)(_date) - week; + _date.setDate(_date.getDate() - diff * 7); + return _date; +} + + +/***/ }), + +/***/ 7489: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.setISOWeekYear = setISOWeekYear; +var _index = __nccwpck_require__(2524); +var _index2 = __nccwpck_require__(6255); +var _index3 = __nccwpck_require__(9280); +var _index4 = __nccwpck_require__(4363); + +/** + * @name setISOWeekYear + * @category ISO Week-Numbering Year Helpers + * @summary Set the ISO week-numbering year to the given date. + * + * @description + * Set the ISO week-numbering year to the given date, + * saving the week number and the weekday number. + * + * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param weekYear - The ISO week-numbering year of the new date + * + * @returns The new date with the ISO week-numbering year set + * + * @example + * // Set ISO week-numbering year 2007 to 29 December 2008: + * const result = setISOWeekYear(new Date(2008, 11, 29), 2007) + * //=> Mon Jan 01 2007 00:00:00 + */ +function setISOWeekYear(date, weekYear) { + let _date = (0, _index4.toDate)(date); + const diff = (0, _index2.differenceInCalendarDays)( + _date, + (0, _index3.startOfISOWeekYear)(_date), + ); + const fourthOfJanuary = (0, _index.constructFrom)(date, 0); + fourthOfJanuary.setFullYear(weekYear, 0, 4); + fourthOfJanuary.setHours(0, 0, 0, 0); + _date = (0, _index3.startOfISOWeekYear)(fourthOfJanuary); + _date.setDate(_date.getDate() + diff); + return _date; +} + + +/***/ }), + +/***/ 8449: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.setMilliseconds = setMilliseconds; +var _index = __nccwpck_require__(4363); + +/** + * @name setMilliseconds + * @category Millisecond Helpers + * @summary Set the milliseconds to the given date. + * + * @description + * Set the milliseconds to the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param milliseconds - The milliseconds of the new date + * + * @returns The new date with the milliseconds set + * + * @example + * // Set 300 milliseconds to 1 September 2014 11:30:40.500: + * const result = setMilliseconds(new Date(2014, 8, 1, 11, 30, 40, 500), 300) + * //=> Mon Sep 01 2014 11:30:40.300 + */ +function setMilliseconds(date, milliseconds) { + const _date = (0, _index.toDate)(date); + _date.setMilliseconds(milliseconds); + return _date; +} + + +/***/ }), + +/***/ 4305: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.setMinutes = setMinutes; +var _index = __nccwpck_require__(4363); + +/** + * @name setMinutes + * @category Minute Helpers + * @summary Set the minutes to the given date. + * + * @description + * Set the minutes to the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param minutes - The minutes of the new date + * + * @returns The new date with the minutes set + * + * @example + * // Set 45 minutes to 1 September 2014 11:30:40: + * const result = setMinutes(new Date(2014, 8, 1, 11, 30, 40), 45) + * //=> Mon Sep 01 2014 11:45:40 + */ +function setMinutes(date, minutes) { + const _date = (0, _index.toDate)(date); + _date.setMinutes(minutes); + return _date; +} + + +/***/ }), + +/***/ 5484: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.setMonth = setMonth; +var _index = __nccwpck_require__(2524); +var _index2 = __nccwpck_require__(9163); +var _index3 = __nccwpck_require__(4363); + +/** + * @name setMonth + * @category Month Helpers + * @summary Set the month to the given date. + * + * @description + * Set the month to the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param month - The month index to set (0-11) + * + * @returns The new date with the month set + * + * @example + * // Set February to 1 September 2014: + * const result = setMonth(new Date(2014, 8, 1), 1) + * //=> Sat Feb 01 2014 00:00:00 + */ +function setMonth(date, month) { + const _date = (0, _index3.toDate)(date); + const year = _date.getFullYear(); + const day = _date.getDate(); + + const dateWithDesiredMonth = (0, _index.constructFrom)(date, 0); + dateWithDesiredMonth.setFullYear(year, month, 15); + dateWithDesiredMonth.setHours(0, 0, 0, 0); + const daysInMonth = (0, _index2.getDaysInMonth)(dateWithDesiredMonth); + // Set the last day of the new month + // if the original date was the last day of the longer month + _date.setMonth(month, Math.min(day, daysInMonth)); + return _date; +} + + +/***/ }), + +/***/ 8435: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.setQuarter = setQuarter; +var _index = __nccwpck_require__(5484); +var _index2 = __nccwpck_require__(4363); + +/** + * @name setQuarter + * @category Quarter Helpers + * @summary Set the year quarter to the given date. + * + * @description + * Set the year quarter to the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param quarter - The quarter of the new date + * + * @returns The new date with the quarter set + * + * @example + * // Set the 2nd quarter to 2 July 2014: + * const result = setQuarter(new Date(2014, 6, 2), 2) + * //=> Wed Apr 02 2014 00:00:00 + */ +function setQuarter(date, quarter) { + const _date = (0, _index2.toDate)(date); + const oldQuarter = Math.trunc(_date.getMonth() / 3) + 1; + const diff = quarter - oldQuarter; + return (0, _index.setMonth)(_date, _date.getMonth() + diff * 3); +} + + +/***/ }), + +/***/ 1193: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.setSeconds = setSeconds; +var _index = __nccwpck_require__(4363); + +/** + * @name setSeconds + * @category Second Helpers + * @summary Set the seconds to the given date. + * + * @description + * Set the seconds to the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param seconds - The seconds of the new date + * + * @returns The new date with the seconds set + * + * @example + * // Set 45 seconds to 1 September 2014 11:30:40: + * const result = setSeconds(new Date(2014, 8, 1, 11, 30, 40), 45) + * //=> Mon Sep 01 2014 11:30:45 + */ +function setSeconds(date, seconds) { + const _date = (0, _index.toDate)(date); + _date.setSeconds(seconds); + return _date; +} + + +/***/ }), + +/***/ 4084: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.setWeek = setWeek; +var _index = __nccwpck_require__(3683); +var _index2 = __nccwpck_require__(4363); + +/** + * The {@link setWeek} function options. + */ + +/** + * @name setWeek + * @category Week Helpers + * @summary Set the local week to the given date. + * + * @description + * Set the local week to the given date, saving the weekday number. + * The exact calculation depends on the values of + * `options.weekStartsOn` (which is the index of the first day of the week) + * and `options.firstWeekContainsDate` (which is the day of January, which is always in + * the first week of the week-numbering year) + * + * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param week - The week of the new date + * @param options - An object with options + * + * @returns The new date with the local week set + * + * @example + * // Set the 1st week to 2 January 2005 with default options: + * const result = setWeek(new Date(2005, 0, 2), 1) + * //=> Sun Dec 26 2004 00:00:00 + * + * @example + * // Set the 1st week to 2 January 2005, + * // if Monday is the first day of the week, + * // and the first week of the year always contains 4 January: + * const result = setWeek(new Date(2005, 0, 2), 1, { + * weekStartsOn: 1, + * firstWeekContainsDate: 4 + * }) + * //=> Sun Jan 4 2004 00:00:00 + */ +function setWeek(date, week, options) { + const _date = (0, _index2.toDate)(date); + const diff = (0, _index.getWeek)(_date, options) - week; + _date.setDate(_date.getDate() - diff * 7); + return _date; +} + + +/***/ }), + +/***/ 6598: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.setWeekYear = setWeekYear; +var _index = __nccwpck_require__(2524); +var _index2 = __nccwpck_require__(6255); +var _index3 = __nccwpck_require__(4966); +var _index4 = __nccwpck_require__(4363); + +var _index5 = __nccwpck_require__(91); + +/** + * The {@link setWeekYear} function options. + */ + +/** + * @name setWeekYear + * @category Week-Numbering Year Helpers + * @summary Set the local week-numbering year to the given date. + * + * @description + * Set the local week-numbering year to the given date, + * saving the week number and the weekday number. + * The exact calculation depends on the values of + * `options.weekStartsOn` (which is the index of the first day of the week) + * and `options.firstWeekContainsDate` (which is the day of January, which is always in + * the first week of the week-numbering year) + * + * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param weekYear - The local week-numbering year of the new date + * @param options - An object with options + * + * @returns The new date with the local week-numbering year set + * + * @example + * // Set the local week-numbering year 2004 to 2 January 2010 with default options: + * const result = setWeekYear(new Date(2010, 0, 2), 2004) + * //=> Sat Jan 03 2004 00:00:00 + * + * @example + * // Set the local week-numbering year 2004 to 2 January 2010, + * // if Monday is the first day of week + * // and 4 January is always in the first week of the year: + * const result = setWeekYear(new Date(2010, 0, 2), 2004, { + * weekStartsOn: 1, + * firstWeekContainsDate: 4 + * }) + * //=> Sat Jan 01 2005 00:00:00 + */ +function setWeekYear(date, weekYear, options) { + const defaultOptions = (0, _index5.getDefaultOptions)(); + const firstWeekContainsDate = + options?.firstWeekContainsDate ?? + options?.locale?.options?.firstWeekContainsDate ?? + defaultOptions.firstWeekContainsDate ?? + defaultOptions.locale?.options?.firstWeekContainsDate ?? + 1; + + let _date = (0, _index4.toDate)(date); + const diff = (0, _index2.differenceInCalendarDays)( + _date, + (0, _index3.startOfWeekYear)(_date, options), + ); + const firstWeek = (0, _index.constructFrom)(date, 0); + firstWeek.setFullYear(weekYear, 0, firstWeekContainsDate); + firstWeek.setHours(0, 0, 0, 0); + _date = (0, _index3.startOfWeekYear)(firstWeek, options); + _date.setDate(_date.getDate() + diff); + return _date; +} + + +/***/ }), + +/***/ 5420: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.setYear = setYear; +var _index = __nccwpck_require__(2524); +var _index2 = __nccwpck_require__(4363); + +/** + * @name setYear + * @category Year Helpers + * @summary Set the year to the given date. + * + * @description + * Set the year to the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param year - The year of the new date + * + * @returns The new date with the year set + * + * @example + * // Set year 2013 to 1 September 2014: + * const result = setYear(new Date(2014, 8, 1), 2013) + * //=> Sun Sep 01 2013 00:00:00 + */ +function setYear(date, year) { + const _date = (0, _index2.toDate)(date); + + // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date + if (isNaN(+_date)) { + return (0, _index.constructFrom)(date, NaN); + } + + _date.setFullYear(year); + return _date; +} + + +/***/ }), + +/***/ 8400: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.startOfDay = startOfDay; +var _index = __nccwpck_require__(4363); + +/** + * @name startOfDay + * @category Day Helpers + * @summary Return the start of a day for the given date. + * + * @description + * Return the start of a day for the given date. + * The result will be in the local timezone. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * + * @returns The start of a day + * + * @example + * // The start of a day for 2 September 2014 11:55:00: + * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0)) + * //=> Tue Sep 02 2014 00:00:00 + */ +function startOfDay(date) { + const _date = (0, _index.toDate)(date); + _date.setHours(0, 0, 0, 0); + return _date; +} + + +/***/ }), + +/***/ 9739: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.startOfDecade = startOfDecade; +var _index = __nccwpck_require__(4363); + +/** + * @name startOfDecade + * @category Decade Helpers + * @summary Return the start of a decade for the given date. + * + * @description + * Return the start of a decade for the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * + * @returns The start of a decade + * + * @example + * // The start of a decade for 21 October 2015 00:00:00: + * const result = startOfDecade(new Date(2015, 9, 21, 00, 00, 00)) + * //=> Jan 01 2010 00:00:00 + */ +function startOfDecade(date) { + // TODO: Switch to more technical definition in of decades that start with 1 + // end with 0. I.e. 2001-2010 instead of current 2000-2009. It's a breaking + // change, so it can only be done in 4.0. + const _date = (0, _index.toDate)(date); + const year = _date.getFullYear(); + const decade = Math.floor(year / 10) * 10; + _date.setFullYear(decade, 0, 1); + _date.setHours(0, 0, 0, 0); + return _date; +} + + +/***/ }), + +/***/ 5938: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.startOfHour = startOfHour; +var _index = __nccwpck_require__(4363); + +/** + * @name startOfHour + * @category Hour Helpers + * @summary Return the start of an hour for the given date. + * + * @description + * Return the start of an hour for the given date. + * The result will be in the local timezone. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * + * @returns The start of an hour + * + * @example + * // The start of an hour for 2 September 2014 11:55:00: + * const result = startOfHour(new Date(2014, 8, 2, 11, 55)) + * //=> Tue Sep 02 2014 11:00:00 + */ +function startOfHour(date) { + const _date = (0, _index.toDate)(date); + _date.setMinutes(0, 0, 0); + return _date; +} + + +/***/ }), + +/***/ 1573: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.startOfISOWeek = startOfISOWeek; +var _index = __nccwpck_require__(7421); + +/** + * @name startOfISOWeek + * @category ISO Week Helpers + * @summary Return the start of an ISO week for the given date. + * + * @description + * Return the start of an ISO week for the given date. + * The result will be in the local timezone. + * + * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * + * @returns The start of an ISO week + * + * @example + * // The start of an ISO week for 2 September 2014 11:55:00: + * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0)) + * //=> Mon Sep 01 2014 00:00:00 + */ +function startOfISOWeek(date) { + return (0, _index.startOfWeek)(date, { weekStartsOn: 1 }); +} + + +/***/ }), + +/***/ 9280: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.startOfISOWeekYear = startOfISOWeekYear; +var _index = __nccwpck_require__(7569); +var _index2 = __nccwpck_require__(1573); +var _index3 = __nccwpck_require__(2524); + +/** + * @name startOfISOWeekYear + * @category ISO Week-Numbering Year Helpers + * @summary Return the start of an ISO week-numbering year for the given date. + * + * @description + * Return the start of an ISO week-numbering year, + * which always starts 3 days before the year's first Thursday. + * The result will be in the local timezone. + * + * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * + * @returns The start of an ISO week-numbering year + * + * @example + * // The start of an ISO week-numbering year for 2 July 2005: + * const result = startOfISOWeekYear(new Date(2005, 6, 2)) + * //=> Mon Jan 03 2005 00:00:00 + */ +function startOfISOWeekYear(date) { + const year = (0, _index.getISOWeekYear)(date); + const fourthOfJanuary = (0, _index3.constructFrom)(date, 0); + fourthOfJanuary.setFullYear(year, 0, 4); + fourthOfJanuary.setHours(0, 0, 0, 0); + return (0, _index2.startOfISOWeek)(fourthOfJanuary); +} + + +/***/ }), + +/***/ 6921: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.startOfMinute = startOfMinute; +var _index = __nccwpck_require__(4363); + +/** + * @name startOfMinute + * @category Minute Helpers + * @summary Return the start of a minute for the given date. + * + * @description + * Return the start of a minute for the given date. + * The result will be in the local timezone. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * + * @returns The start of a minute + * + * @example + * // The start of a minute for 1 December 2014 22:15:45.400: + * const result = startOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400)) + * //=> Mon Dec 01 2014 22:15:00 + */ +function startOfMinute(date) { + const _date = (0, _index.toDate)(date); + _date.setSeconds(0, 0); + return _date; +} + + +/***/ }), + +/***/ 785: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.startOfMonth = startOfMonth; +var _index = __nccwpck_require__(4363); + +/** + * @name startOfMonth + * @category Month Helpers + * @summary Return the start of a month for the given date. + * + * @description + * Return the start of a month for the given date. + * The result will be in the local timezone. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * + * @returns The start of a month + * + * @example + * // The start of a month for 2 September 2014 11:55:00: + * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0)) + * //=> Mon Sep 01 2014 00:00:00 + */ +function startOfMonth(date) { + const _date = (0, _index.toDate)(date); + _date.setDate(1); + _date.setHours(0, 0, 0, 0); + return _date; +} + + +/***/ }), + +/***/ 7947: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.startOfQuarter = startOfQuarter; +var _index = __nccwpck_require__(4363); + +/** + * @name startOfQuarter + * @category Quarter Helpers + * @summary Return the start of a year quarter for the given date. + * + * @description + * Return the start of a year quarter for the given date. + * The result will be in the local timezone. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * + * @returns The start of a quarter + * + * @example + * // The start of a quarter for 2 September 2014 11:55:00: + * const result = startOfQuarter(new Date(2014, 8, 2, 11, 55, 0)) + * //=> Tue Jul 01 2014 00:00:00 + */ +function startOfQuarter(date) { + const _date = (0, _index.toDate)(date); + const currentMonth = _date.getMonth(); + const month = currentMonth - (currentMonth % 3); + _date.setMonth(month, 1); + _date.setHours(0, 0, 0, 0); + return _date; +} + + +/***/ }), + +/***/ 2839: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.startOfSecond = startOfSecond; +var _index = __nccwpck_require__(4363); + +/** + * @name startOfSecond + * @category Second Helpers + * @summary Return the start of a second for the given date. + * + * @description + * Return the start of a second for the given date. + * The result will be in the local timezone. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * + * @returns The start of a second + * + * @example + * // The start of a second for 1 December 2014 22:15:45.400: + * const result = startOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400)) + * //=> Mon Dec 01 2014 22:15:45.000 + */ +function startOfSecond(date) { + const _date = (0, _index.toDate)(date); + _date.setMilliseconds(0); + return _date; +} + + +/***/ }), + +/***/ 3192: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.startOfToday = startOfToday; +var _index = __nccwpck_require__(8400); + +/** + * @name startOfToday + * @category Day Helpers + * @summary Return the start of today. + * @pure false + * + * @description + * Return the start of today. + * + * @returns The start of today + * + * @example + * // If today is 6 October 2014: + * const result = startOfToday() + * //=> Mon Oct 6 2014 00:00:00 + */ +function startOfToday() { + return (0, _index.startOfDay)(Date.now()); +} + + +/***/ }), + +/***/ 5519: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +exports.startOfTomorrow = startOfTomorrow; /** + * @name startOfTomorrow + * @category Day Helpers + * @summary Return the start of tomorrow. + * @pure false + * + * @description + * Return the start of tomorrow. + * + * @returns The start of tomorrow + * + * @example + * // If today is 6 October 2014: + * const result = startOfTomorrow() + * //=> Tue Oct 7 2014 00:00:00 + */ +function startOfTomorrow() { + const now = new Date(); + const year = now.getFullYear(); + const month = now.getMonth(); + const day = now.getDate(); + + const date = new Date(0); + date.setFullYear(year, month, day + 1); + date.setHours(0, 0, 0, 0); + return date; +} + + +/***/ }), + +/***/ 7421: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.startOfWeek = startOfWeek; +var _index = __nccwpck_require__(4363); + +var _index2 = __nccwpck_require__(91); + +/** + * The {@link startOfWeek} function options. + */ + +/** + * @name startOfWeek + * @category Week Helpers + * @summary Return the start of a week for the given date. + * + * @description + * Return the start of a week for the given date. + * The result will be in the local timezone. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * @param options - An object with options + * + * @returns The start of a week + * + * @example + * // The start of a week for 2 September 2014 11:55:00: + * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0)) + * //=> Sun Aug 31 2014 00:00:00 + * + * @example + * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00: + * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 }) + * //=> Mon Sep 01 2014 00:00:00 + */ +function startOfWeek(date, options) { + const defaultOptions = (0, _index2.getDefaultOptions)(); + const weekStartsOn = + options?.weekStartsOn ?? + options?.locale?.options?.weekStartsOn ?? + defaultOptions.weekStartsOn ?? + defaultOptions.locale?.options?.weekStartsOn ?? + 0; + + const _date = (0, _index.toDate)(date); + const day = _date.getDay(); + const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; + + _date.setDate(_date.getDate() - diff); + _date.setHours(0, 0, 0, 0); + return _date; +} + + +/***/ }), + +/***/ 4966: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.startOfWeekYear = startOfWeekYear; +var _index = __nccwpck_require__(2524); +var _index2 = __nccwpck_require__(79); +var _index3 = __nccwpck_require__(7421); + +var _index4 = __nccwpck_require__(91); + +/** + * The {@link startOfWeekYear} function options. + */ + +/** + * @name startOfWeekYear + * @category Week-Numbering Year Helpers + * @summary Return the start of a local week-numbering year for the given date. + * + * @description + * Return the start of a local week-numbering year. + * The exact calculation depends on the values of + * `options.weekStartsOn` (which is the index of the first day of the week) + * and `options.firstWeekContainsDate` (which is the day of January, which is always in + * the first week of the week-numbering year) + * + * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * @param options - An object with options + * + * @returns The start of a week-numbering year + * + * @example + * // The start of an a week-numbering year for 2 July 2005 with default settings: + * const result = startOfWeekYear(new Date(2005, 6, 2)) + * //=> Sun Dec 26 2004 00:00:00 + * + * @example + * // The start of a week-numbering year for 2 July 2005 + * // if Monday is the first day of week + * // and 4 January is always in the first week of the year: + * const result = startOfWeekYear(new Date(2005, 6, 2), { + * weekStartsOn: 1, + * firstWeekContainsDate: 4 + * }) + * //=> Mon Jan 03 2005 00:00:00 + */ +function startOfWeekYear(date, options) { + const defaultOptions = (0, _index4.getDefaultOptions)(); + const firstWeekContainsDate = + options?.firstWeekContainsDate ?? + options?.locale?.options?.firstWeekContainsDate ?? + defaultOptions.firstWeekContainsDate ?? + defaultOptions.locale?.options?.firstWeekContainsDate ?? + 1; + + const year = (0, _index2.getWeekYear)(date, options); + const firstWeek = (0, _index.constructFrom)(date, 0); + firstWeek.setFullYear(year, 0, firstWeekContainsDate); + firstWeek.setHours(0, 0, 0, 0); + const _date = (0, _index3.startOfWeek)(firstWeek, options); + return _date; +} + + +/***/ }), + +/***/ 3346: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.startOfYear = startOfYear; +var _index = __nccwpck_require__(4363); +var _index2 = __nccwpck_require__(2524); + +/** + * @name startOfYear + * @category Year Helpers + * @summary Return the start of a year for the given date. + * + * @description + * Return the start of a year for the given date. + * The result will be in the local timezone. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The original date + * + * @returns The start of a year + * + * @example + * // The start of a year for 2 September 2014 11:55:00: + * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00)) + * //=> Wed Jan 01 2014 00:00:00 + */ +function startOfYear(date) { + const cleanDate = (0, _index.toDate)(date); + const _date = (0, _index2.constructFrom)(date, 0); + _date.setFullYear(cleanDate.getFullYear(), 0, 1); + _date.setHours(0, 0, 0, 0); + return _date; +} + + +/***/ }), + +/***/ 5892: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +exports.startOfYesterday = startOfYesterday; /** + * @name startOfYesterday + * @category Day Helpers + * @summary Return the start of yesterday. + * @pure false + * + * @description + * Return the start of yesterday. + * + * @returns The start of yesterday + * + * @example + * // If today is 6 October 2014: + * const result = startOfYesterday() + * //=> Sun Oct 5 2014 00:00:00 + */ +function startOfYesterday() { + const now = new Date(); + const year = now.getFullYear(); + const month = now.getMonth(); + const day = now.getDate(); + + const date = new Date(0); + date.setFullYear(year, month, day - 1); + date.setHours(0, 0, 0, 0); + return date; +} + + +/***/ }), + +/***/ 6818: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.sub = sub; +var _index = __nccwpck_require__(8028); +var _index2 = __nccwpck_require__(7749); + +var _index3 = __nccwpck_require__(2524); + +/** + * @name sub + * @category Common Helpers + * @summary Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date. + * + * @description + * Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param duration - The object with years, months, weeks, days, hours, minutes and seconds to be subtracted + * + * | Key | Description | + * |---------|------------------------------------| + * | years | Amount of years to be subtracted | + * | months | Amount of months to be subtracted | + * | weeks | Amount of weeks to be subtracted | + * | days | Amount of days to be subtracted | + * | hours | Amount of hours to be subtracted | + * | minutes | Amount of minutes to be subtracted | + * | seconds | Amount of seconds to be subtracted | + * + * All values default to 0 + * + * @returns The new date with the seconds subtracted + * + * @example + * // Subtract the following duration from 15 June 2017 15:29:20 + * const result = sub(new Date(2017, 5, 15, 15, 29, 20), { + * years: 2, + * months: 9, + * weeks: 1, + * days: 7, + * hours: 5, + * minutes: 9, + * seconds: 30 + * }) + * //=> Mon Sep 1 2014 10:19:50 + */ +function sub(date, duration) { + const { + years = 0, + months = 0, + weeks = 0, + days = 0, + hours = 0, + minutes = 0, + seconds = 0, + } = duration; + + // Subtract years and months + const dateWithoutMonths = (0, _index2.subMonths)(date, months + years * 12); + + // Subtract weeks and days + const dateWithoutDays = (0, _index.subDays)( + dateWithoutMonths, + days + weeks * 7, + ); + + // Subtract hours, minutes and seconds + const minutestoSub = minutes + hours * 60; + const secondstoSub = seconds + minutestoSub * 60; + const mstoSub = secondstoSub * 1000; + const finalDate = (0, _index3.constructFrom)( + date, + dateWithoutDays.getTime() - mstoSub, + ); + + return finalDate; +} + + +/***/ }), + +/***/ 5505: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.subBusinessDays = subBusinessDays; +var _index = __nccwpck_require__(6976); + +/** + * @name subBusinessDays + * @category Day Helpers + * @summary Substract the specified number of business days (mon - fri) to the given date. + * + * @description + * Substract the specified number of business days (mon - fri) to the given date, ignoring weekends. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param amount - The amount of business days to be subtracted. + * + * @returns The new date with the business days subtracted + * + * @example + * // Substract 10 business days from 1 September 2014: + * const result = subBusinessDays(new Date(2014, 8, 1), 10) + * //=> Mon Aug 18 2014 00:00:00 (skipped weekend days) + */ +function subBusinessDays(date, amount) { + return (0, _index.addBusinessDays)(date, -amount); +} + + +/***/ }), + +/***/ 8028: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.subDays = subDays; +var _index = __nccwpck_require__(6520); + +/** + * @name subDays + * @category Day Helpers + * @summary Subtract the specified number of days from the given date. + * + * @description + * Subtract the specified number of days from the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param amount - The amount of days to be subtracted. + * + * @returns The new date with the days subtracted + * + * @example + * // Subtract 10 days from 1 September 2014: + * const result = subDays(new Date(2014, 8, 1), 10) + * //=> Fri Aug 22 2014 00:00:00 + */ +function subDays(date, amount) { + return (0, _index.addDays)(date, -amount); +} + + +/***/ }), + +/***/ 3219: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.subHours = subHours; +var _index = __nccwpck_require__(592); + +/** + * @name subHours + * @category Hour Helpers + * @summary Subtract the specified number of hours from the given date. + * + * @description + * Subtract the specified number of hours from the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param amount - The amount of hours to be subtracted. + * + * @returns The new date with the hours subtracted + * + * @example + * // Subtract 2 hours from 11 July 2014 01:00:00: + * const result = subHours(new Date(2014, 6, 11, 1, 0), 2) + * //=> Thu Jul 10 2014 23:00:00 + */ +function subHours(date, amount) { + return (0, _index.addHours)(date, -amount); +} + + +/***/ }), + +/***/ 1772: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.subISOWeekYears = subISOWeekYears; +var _index = __nccwpck_require__(990); + +/** + * @name subISOWeekYears + * @category ISO Week-Numbering Year Helpers + * @summary Subtract the specified number of ISO week-numbering years from the given date. + * + * @description + * Subtract the specified number of ISO week-numbering years from the given date. + * + * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param amount - The amount of ISO week-numbering years to be subtracted. + * + * @returns The new date with the ISO week-numbering years subtracted + * + * @example + * // Subtract 5 ISO week-numbering years from 1 September 2014: + * const result = subISOWeekYears(new Date(2014, 8, 1), 5) + * //=> Mon Aug 31 2009 00:00:00 + */ +function subISOWeekYears(date, amount) { + return (0, _index.addISOWeekYears)(date, -amount); +} + + +/***/ }), + +/***/ 4864: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.subMilliseconds = subMilliseconds; +var _index = __nccwpck_require__(9116); + +/** + * @name subMilliseconds + * @category Millisecond Helpers + * @summary Subtract the specified number of milliseconds from the given date. + * + * @description + * Subtract the specified number of milliseconds from the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param amount - The amount of milliseconds to be subtracted. + * + * @returns The new date with the milliseconds subtracted + * + * @example + * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000: + * const result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750) + * //=> Thu Jul 10 2014 12:45:29.250 + */ +function subMilliseconds(date, amount) { + return (0, _index.addMilliseconds)(date, -amount); +} + + +/***/ }), + +/***/ 6990: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.subMinutes = subMinutes; +var _index = __nccwpck_require__(8158); + +/** + * @name subMinutes + * @category Minute Helpers + * @summary Subtract the specified number of minutes from the given date. + * + * @description + * Subtract the specified number of minutes from the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param amount - The amount of minutes to be subtracted. + * + * @returns The new date with the minutes subtracted + * + * @example + * // Subtract 30 minutes from 10 July 2014 12:00:00: + * const result = subMinutes(new Date(2014, 6, 10, 12, 0), 30) + * //=> Thu Jul 10 2014 11:30:00 + */ +function subMinutes(date, amount) { + return (0, _index.addMinutes)(date, -amount); +} + + +/***/ }), + +/***/ 7749: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.subMonths = subMonths; +var _index = __nccwpck_require__(2096); + +/** + * @name subMonths + * @category Month Helpers + * @summary Subtract the specified number of months from the given date. + * + * @description + * Subtract the specified number of months from the given date. * - * Render markdown string into html. It does all magic for you :). + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * - * `env` can be used to inject additional metadata (`{}` by default). - * But you will not need it with high probability. See also comment - * in [[MarkdownIt.parse]]. - **/ -MarkdownIt.prototype.render = function (src, env) { - env = env || {}; + * @param date - The date to be changed + * @param amount - The amount of months to be subtracted. + * + * @returns The new date with the months subtracted + * + * @example + * // Subtract 5 months from 1 February 2015: + * const result = subMonths(new Date(2015, 1, 1), 5) + * //=> Mon Sep 01 2014 00:00:00 + */ +function subMonths(date, amount) { + return (0, _index.addMonths)(date, -amount); +} - return this.renderer.render(this.parse(src, env), this.options, env); -}; +/***/ }), -/** internal - * MarkdownIt.parseInline(src, env) -> Array - * - src (String): source string - * - env (Object): environment sandbox +/***/ 9643: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.subQuarters = subQuarters; +var _index = __nccwpck_require__(314); + +/** + * @name subQuarters + * @category Quarter Helpers + * @summary Subtract the specified number of year quarters from the given date. * - * The same as [[MarkdownIt.parse]] but skip all block rules. It returns the - * block tokens list with the single `inline` element, containing parsed inline - * tokens in `children` property. Also updates `env` object. - **/ -MarkdownIt.prototype.parseInline = function (src, env) { - var state = new this.core.State(src, this, env); + * @description + * Subtract the specified number of year quarters from the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param amount - The amount of quarters to be subtracted. + * + * @returns The new date with the quarters subtracted + * + * @example + * // Subtract 3 quarters from 1 September 2014: + * const result = subQuarters(new Date(2014, 8, 1), 3) + * //=> Sun Dec 01 2013 00:00:00 + */ +function subQuarters(date, amount) { + return (0, _index.addQuarters)(date, -amount); +} - state.inlineMode = true; - this.core.process(state); - return state.tokens; -}; +/***/ }), + +/***/ 2981: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; +exports.subSeconds = subSeconds; +var _index = __nccwpck_require__(4595); /** - * MarkdownIt.renderInline(src [, env]) -> String - * - src (String): source string - * - env (Object): environment sandbox + * @name subSeconds + * @category Second Helpers + * @summary Subtract the specified number of seconds from the given date. * - * Similar to [[MarkdownIt.render]] but for single paragraph content. Result - * will NOT be wrapped into `

` tags. - **/ -MarkdownIt.prototype.renderInline = function (src, env) { - env = env || {}; + * @description + * Subtract the specified number of seconds from the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param amount - The amount of seconds to be subtracted. + * + * @returns The new date with the seconds subtracted + * + * @example + * // Subtract 30 seconds from 10 July 2014 12:45:00: + * const result = subSeconds(new Date(2014, 6, 10, 12, 45, 0), 30) + * //=> Thu Jul 10 2014 12:44:30 + */ +function subSeconds(date, amount) { + return (0, _index.addSeconds)(date, -amount); +} - return this.renderer.render(this.parseInline(src, env), this.options, env); + +/***/ }), + +/***/ 1369: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.subWeeks = subWeeks; +var _index = __nccwpck_require__(6178); + +/** + * @name subWeeks + * @category Week Helpers + * @summary Subtract the specified number of weeks from the given date. + * + * @description + * Subtract the specified number of weeks from the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param amount - The amount of weeks to be subtracted. + * + * @returns The new date with the weeks subtracted + * + * @example + * // Subtract 4 weeks from 1 September 2014: + * const result = subWeeks(new Date(2014, 8, 1), 4) + * //=> Mon Aug 04 2014 00:00:00 + */ +function subWeeks(date, amount) { + return (0, _index.addWeeks)(date, -amount); +} + + +/***/ }), + +/***/ 9970: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.subYears = subYears; +var _index = __nccwpck_require__(3564); + +/** + * @name subYears + * @category Year Helpers + * @summary Subtract the specified number of years from the given date. + * + * @description + * Subtract the specified number of years from the given date. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param date - The date to be changed + * @param amount - The amount of years to be subtracted. + * + * @returns The new date with the years subtracted + * + * @example + * // Subtract 5 years from 1 September 2014: + * const result = subYears(new Date(2014, 8, 1), 5) + * //=> Tue Sep 01 2009 00:00:00 + */ +function subYears(date, amount) { + return (0, _index.addYears)(date, -amount); +} + + +/***/ }), + +/***/ 4363: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +exports.toDate = toDate; + +/** + * @name toDate + * @category Common Helpers + * @summary Convert the given argument to an instance of Date. + * + * @description + * Convert the given argument to an instance of Date. + * + * If the argument is an instance of Date, the function returns its clone. + * + * If the argument is a number, it is treated as a timestamp. + * + * If the argument is none of the above, the function returns Invalid Date. + * + * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`. + * + * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). + * + * @param argument - The value to convert + * + * @returns The parsed date in the local time zone + * + * @example + * // Clone the date: + * const result = toDate(new Date(2014, 1, 11, 11, 30, 30)) + * //=> Tue Feb 11 2014 11:30:30 + * + * @example + * // Convert the timestamp to date: + * const result = toDate(1392098430000) + * //=> Tue Feb 11 2014 11:30:30 + */ +function toDate(argument) { + const argStr = Object.prototype.toString.call(argument); + + // Clone the date + if ( + argument instanceof Date || + (typeof argument === "object" && argStr === "[object Date]") + ) { + // Prevent the date to lose the milliseconds when passed to new Date() in IE10 + return new argument.constructor(+argument); + } else if ( + typeof argument === "number" || + argStr === "[object Number]" || + typeof argument === "string" || + argStr === "[object String]" + ) { + // TODO: Can we get rid of as? + return new Date(argument); + } else { + // TODO: Can we get rid of as? + return new Date(NaN); + } +} + + +/***/ }), + +/***/ 6025: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.transpose = transpose; +var _index = __nccwpck_require__(2524); + +/** + * @name transpose + * @category Generic Helpers + * @summary Transpose the date to the given constructor. + * + * @description + * The function transposes the date to the given constructor. It helps you + * to transpose the date in the system time zone to say `UTCDate` or any other + * date extension. + * + * @typeParam DateInputType - The input `Date` type derived from the passed argument. + * @typeParam DateOutputType - The output `Date` type derived from the passed constructor. + * + * @param fromDate - The date to use values from + * @param constructor - The date constructor to use + * + * @returns Date transposed to the given constructor + * + * @example + * // Create July 10, 2022 00:00 in locale time zone + * const date = new Date(2022, 6, 10) + * //=> 'Sun Jul 10 2022 00:00:00 GMT+0800 (Singapore Standard Time)' + * + * @example + * // Transpose the date to July 10, 2022 00:00 in UTC + * transpose(date, UTCDate) + * //=> 'Sun Jul 10 2022 00:00:00 GMT+0000 (Coordinated Universal Time)' + */ +function transpose(fromDate, constructor) { + const date = + constructor instanceof Date + ? (0, _index.constructFrom)(constructor, 0) + : new constructor(0); + date.setFullYear( + fromDate.getFullYear(), + fromDate.getMonth(), + fromDate.getDate(), + ); + date.setHours( + fromDate.getHours(), + fromDate.getMinutes(), + fromDate.getSeconds(), + fromDate.getMilliseconds(), + ); + return date; +} + + +/***/ }), + +/***/ 6970: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.weeksToDays = weeksToDays; +var _index = __nccwpck_require__(2983); + +/** + * @name weeksToDays + * @category Conversion Helpers + * @summary Convert weeks to days. + * + * @description + * Convert a number of weeks to a full number of days. + * + * @param weeks - The number of weeks to be converted + * + * @returns The number of weeks converted in days + * + * @example + * // Convert 2 weeks into days + * const result = weeksToDays(2) + * //=> 14 + */ +function weeksToDays(weeks) { + return Math.trunc(weeks * _index.daysInWeek); +} + + +/***/ }), + +/***/ 3512: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.yearsToDays = yearsToDays; +var _index = __nccwpck_require__(2983); + +/** + * @name yearsToDays + * @category Conversion Helpers + * @summary Convert years to days. + * + * @description + * Convert a number of years to a full number of days. + * + * @param years - The number of years to be converted + * + * @returns The number of years converted in days + * + * @example + * // Convert 2 years into days + * const result = yearsToDays(2) + * //=> 730 + */ +function yearsToDays(years) { + return Math.trunc(years * _index.daysInYear); +} + + +/***/ }), + +/***/ 9911: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.yearsToMonths = yearsToMonths; +var _index = __nccwpck_require__(2983); + +/** + * @name yearsToMonths + * @category Conversion Helpers + * @summary Convert years to months. + * + * @description + * Convert a number of years to a full number of months. + * + * @param years - The number of years to be converted + * + * @returns The number of years converted in months + * + * @example + * // Convert 2 years into months + * const result = yearsToMonths(2) + * //=> 24 + */ +function yearsToMonths(years) { + return Math.trunc(years * _index.monthsInYear); +} + + +/***/ }), + +/***/ 9943: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +exports.yearsToQuarters = yearsToQuarters; +var _index = __nccwpck_require__(2983); + +/** + * @name yearsToQuarters + * @category Conversion Helpers + * @summary Convert years to quarters. + * + * @description + * Convert a number of years to a full number of quarters. + * + * @param years - The number of years to be converted + * + * @returns The number of years converted in quarters + * + * @example + * // Convert 2 years to quarters + * const result = yearsToQuarters(2) + * //=> 8 + */ +function yearsToQuarters(years) { + return Math.trunc(years * _index.quartersInYear); +} + + +/***/ }), + +/***/ 4752: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +var Stream = (__nccwpck_require__(2781).Stream); +var util = __nccwpck_require__(3837); + +module.exports = DelayedStream; +function DelayedStream() { + this.source = null; + this.dataSize = 0; + this.maxDataSize = 1024 * 1024; + this.pauseStream = true; + + this._maxDataSizeExceeded = false; + this._released = false; + this._bufferedEvents = []; +} +util.inherits(DelayedStream, Stream); + +DelayedStream.create = function(source, options) { + var delayedStream = new this(); + + options = options || {}; + for (var option in options) { + delayedStream[option] = options[option]; + } + + delayedStream.source = source; + + var realEmit = source.emit; + source.emit = function() { + delayedStream._handleEmit(arguments); + return realEmit.apply(source, arguments); + }; + + source.on('error', function() {}); + if (delayedStream.pauseStream) { + source.pause(); + } + + return delayedStream; }; +Object.defineProperty(DelayedStream.prototype, 'readable', { + configurable: true, + enumerable: true, + get: function() { + return this.source.readable; + } +}); -module.exports = MarkdownIt; +DelayedStream.prototype.setEncoding = function() { + return this.source.setEncoding.apply(this.source, arguments); +}; + +DelayedStream.prototype.resume = function() { + if (!this._released) { + this.release(); + } + + this.source.resume(); +}; + +DelayedStream.prototype.pause = function() { + this.source.pause(); +}; + +DelayedStream.prototype.release = function() { + this._released = true; + + this._bufferedEvents.forEach(function(args) { + this.emit.apply(this, args); + }.bind(this)); + this._bufferedEvents = []; +}; +DelayedStream.prototype.pipe = function() { + var r = Stream.prototype.pipe.apply(this, arguments); + this.resume(); + return r; +}; + +DelayedStream.prototype._handleEmit = function(args) { + if (this._released) { + this.emit.apply(this, args); + return; + } + + if (args[0] === 'data') { + this.dataSize += args[1].length; + this._checkIfMaxDataSizeExceeded(); + } + + this._bufferedEvents.push(args); +}; + +DelayedStream.prototype._checkIfMaxDataSizeExceeded = function() { + if (this._maxDataSizeExceeded) { + return; + } + + if (this.dataSize <= this.maxDataSize) { + return; + } + + this._maxDataSizeExceeded = true; + var message = + 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.' + this.emit('error', new Error(message)); +}; + + +/***/ }), + +/***/ 7934: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.decodeXML = exports.decodeHTMLStrict = exports.decodeHTMLAttribute = exports.decodeHTML = exports.determineBranch = exports.EntityDecoder = exports.DecodingMode = exports.BinTrieFlags = exports.fromCodePoint = exports.replaceCodePoint = exports.decodeCodePoint = exports.xmlDecodeTree = exports.htmlDecodeTree = void 0; +var decode_data_html_js_1 = __importDefault(__nccwpck_require__(3067)); +exports.htmlDecodeTree = decode_data_html_js_1.default; +var decode_data_xml_js_1 = __importDefault(__nccwpck_require__(7305)); +exports.xmlDecodeTree = decode_data_xml_js_1.default; +var decode_codepoint_js_1 = __importStar(__nccwpck_require__(4550)); +exports.decodeCodePoint = decode_codepoint_js_1.default; +var decode_codepoint_js_2 = __nccwpck_require__(4550); +Object.defineProperty(exports, "replaceCodePoint", ({ enumerable: true, get: function () { return decode_codepoint_js_2.replaceCodePoint; } })); +Object.defineProperty(exports, "fromCodePoint", ({ enumerable: true, get: function () { return decode_codepoint_js_2.fromCodePoint; } })); +var CharCodes; +(function (CharCodes) { + CharCodes[CharCodes["NUM"] = 35] = "NUM"; + CharCodes[CharCodes["SEMI"] = 59] = "SEMI"; + CharCodes[CharCodes["EQUALS"] = 61] = "EQUALS"; + CharCodes[CharCodes["ZERO"] = 48] = "ZERO"; + CharCodes[CharCodes["NINE"] = 57] = "NINE"; + CharCodes[CharCodes["LOWER_A"] = 97] = "LOWER_A"; + CharCodes[CharCodes["LOWER_F"] = 102] = "LOWER_F"; + CharCodes[CharCodes["LOWER_X"] = 120] = "LOWER_X"; + CharCodes[CharCodes["LOWER_Z"] = 122] = "LOWER_Z"; + CharCodes[CharCodes["UPPER_A"] = 65] = "UPPER_A"; + CharCodes[CharCodes["UPPER_F"] = 70] = "UPPER_F"; + CharCodes[CharCodes["UPPER_Z"] = 90] = "UPPER_Z"; +})(CharCodes || (CharCodes = {})); +/** Bit that needs to be set to convert an upper case ASCII character to lower case */ +var TO_LOWER_BIT = 32; +var BinTrieFlags; +(function (BinTrieFlags) { + BinTrieFlags[BinTrieFlags["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH"; + BinTrieFlags[BinTrieFlags["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH"; + BinTrieFlags[BinTrieFlags["JUMP_TABLE"] = 127] = "JUMP_TABLE"; +})(BinTrieFlags = exports.BinTrieFlags || (exports.BinTrieFlags = {})); +function isNumber(code) { + return code >= CharCodes.ZERO && code <= CharCodes.NINE; +} +function isHexadecimalCharacter(code) { + return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) || + (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F)); +} +function isAsciiAlphaNumeric(code) { + return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) || + (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) || + isNumber(code)); +} +/** + * Checks if the given character is a valid end character for an entity in an attribute. + * + * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error. + * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state + */ +function isEntityInAttributeInvalidEnd(code) { + return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code); +} +var EntityDecoderState; +(function (EntityDecoderState) { + EntityDecoderState[EntityDecoderState["EntityStart"] = 0] = "EntityStart"; + EntityDecoderState[EntityDecoderState["NumericStart"] = 1] = "NumericStart"; + EntityDecoderState[EntityDecoderState["NumericDecimal"] = 2] = "NumericDecimal"; + EntityDecoderState[EntityDecoderState["NumericHex"] = 3] = "NumericHex"; + EntityDecoderState[EntityDecoderState["NamedEntity"] = 4] = "NamedEntity"; +})(EntityDecoderState || (EntityDecoderState = {})); +var DecodingMode; +(function (DecodingMode) { + /** Entities in text nodes that can end with any character. */ + DecodingMode[DecodingMode["Legacy"] = 0] = "Legacy"; + /** Only allow entities terminated with a semicolon. */ + DecodingMode[DecodingMode["Strict"] = 1] = "Strict"; + /** Entities in attributes have limitations on ending characters. */ + DecodingMode[DecodingMode["Attribute"] = 2] = "Attribute"; +})(DecodingMode = exports.DecodingMode || (exports.DecodingMode = {})); +/** + * Token decoder with support of writing partial entities. + */ +var EntityDecoder = /** @class */ (function () { + function EntityDecoder( + /** The tree used to decode entities. */ + decodeTree, + /** + * The function that is called when a codepoint is decoded. + * + * For multi-byte named entities, this will be called multiple times, + * with the second codepoint, and the same `consumed` value. + * + * @param codepoint The decoded codepoint. + * @param consumed The number of bytes consumed by the decoder. + */ + emitCodePoint, + /** An object that is used to produce errors. */ + errors) { + this.decodeTree = decodeTree; + this.emitCodePoint = emitCodePoint; + this.errors = errors; + /** The current state of the decoder. */ + this.state = EntityDecoderState.EntityStart; + /** Characters that were consumed while parsing an entity. */ + this.consumed = 1; + /** + * The result of the entity. + * + * Either the result index of a numeric entity, or the codepoint of a + * numeric entity. + */ + this.result = 0; + /** The current index in the decode tree. */ + this.treeIndex = 0; + /** The number of characters that were consumed in excess. */ + this.excess = 1; + /** The mode in which the decoder is operating. */ + this.decodeMode = DecodingMode.Strict; + } + /** Resets the instance to make it reusable. */ + EntityDecoder.prototype.startEntity = function (decodeMode) { + this.decodeMode = decodeMode; + this.state = EntityDecoderState.EntityStart; + this.result = 0; + this.treeIndex = 0; + this.excess = 1; + this.consumed = 1; + }; + /** + * Write an entity to the decoder. This can be called multiple times with partial entities. + * If the entity is incomplete, the decoder will return -1. + * + * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the + * entity is incomplete, and resume when the next string is written. + * + * @param string The string containing the entity (or a continuation of the entity). + * @param offset The offset at which the entity begins. Should be 0 if this is not the first call. + * @returns The number of characters that were consumed, or -1 if the entity is incomplete. + */ + EntityDecoder.prototype.write = function (str, offset) { + switch (this.state) { + case EntityDecoderState.EntityStart: { + if (str.charCodeAt(offset) === CharCodes.NUM) { + this.state = EntityDecoderState.NumericStart; + this.consumed += 1; + return this.stateNumericStart(str, offset + 1); + } + this.state = EntityDecoderState.NamedEntity; + return this.stateNamedEntity(str, offset); + } + case EntityDecoderState.NumericStart: { + return this.stateNumericStart(str, offset); + } + case EntityDecoderState.NumericDecimal: { + return this.stateNumericDecimal(str, offset); + } + case EntityDecoderState.NumericHex: { + return this.stateNumericHex(str, offset); + } + case EntityDecoderState.NamedEntity: { + return this.stateNamedEntity(str, offset); + } + } + }; + /** + * Switches between the numeric decimal and hexadecimal states. + * + * Equivalent to the `Numeric character reference state` in the HTML spec. + * + * @param str The string containing the entity (or a continuation of the entity). + * @param offset The current offset. + * @returns The number of characters that were consumed, or -1 if the entity is incomplete. + */ + EntityDecoder.prototype.stateNumericStart = function (str, offset) { + if (offset >= str.length) { + return -1; + } + if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) { + this.state = EntityDecoderState.NumericHex; + this.consumed += 1; + return this.stateNumericHex(str, offset + 1); + } + this.state = EntityDecoderState.NumericDecimal; + return this.stateNumericDecimal(str, offset); + }; + EntityDecoder.prototype.addToNumericResult = function (str, start, end, base) { + if (start !== end) { + var digitCount = end - start; + this.result = + this.result * Math.pow(base, digitCount) + + parseInt(str.substr(start, digitCount), base); + this.consumed += digitCount; + } + }; + /** + * Parses a hexadecimal numeric entity. + * + * Equivalent to the `Hexademical character reference state` in the HTML spec. + * + * @param str The string containing the entity (or a continuation of the entity). + * @param offset The current offset. + * @returns The number of characters that were consumed, or -1 if the entity is incomplete. + */ + EntityDecoder.prototype.stateNumericHex = function (str, offset) { + var startIdx = offset; + while (offset < str.length) { + var char = str.charCodeAt(offset); + if (isNumber(char) || isHexadecimalCharacter(char)) { + offset += 1; + } + else { + this.addToNumericResult(str, startIdx, offset, 16); + return this.emitNumericEntity(char, 3); + } + } + this.addToNumericResult(str, startIdx, offset, 16); + return -1; + }; + /** + * Parses a decimal numeric entity. + * + * Equivalent to the `Decimal character reference state` in the HTML spec. + * + * @param str The string containing the entity (or a continuation of the entity). + * @param offset The current offset. + * @returns The number of characters that were consumed, or -1 if the entity is incomplete. + */ + EntityDecoder.prototype.stateNumericDecimal = function (str, offset) { + var startIdx = offset; + while (offset < str.length) { + var char = str.charCodeAt(offset); + if (isNumber(char)) { + offset += 1; + } + else { + this.addToNumericResult(str, startIdx, offset, 10); + return this.emitNumericEntity(char, 2); + } + } + this.addToNumericResult(str, startIdx, offset, 10); + return -1; + }; + /** + * Validate and emit a numeric entity. + * + * Implements the logic from the `Hexademical character reference start + * state` and `Numeric character reference end state` in the HTML spec. + * + * @param lastCp The last code point of the entity. Used to see if the + * entity was terminated with a semicolon. + * @param expectedLength The minimum number of characters that should be + * consumed. Used to validate that at least one digit + * was consumed. + * @returns The number of characters that were consumed. + */ + EntityDecoder.prototype.emitNumericEntity = function (lastCp, expectedLength) { + var _a; + // Ensure we consumed at least one digit. + if (this.consumed <= expectedLength) { + (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed); + return 0; + } + // Figure out if this is a legit end of the entity + if (lastCp === CharCodes.SEMI) { + this.consumed += 1; + } + else if (this.decodeMode === DecodingMode.Strict) { + return 0; + } + this.emitCodePoint((0, decode_codepoint_js_1.replaceCodePoint)(this.result), this.consumed); + if (this.errors) { + if (lastCp !== CharCodes.SEMI) { + this.errors.missingSemicolonAfterCharacterReference(); + } + this.errors.validateNumericCharacterReference(this.result); + } + return this.consumed; + }; + /** + * Parses a named entity. + * + * Equivalent to the `Named character reference state` in the HTML spec. + * + * @param str The string containing the entity (or a continuation of the entity). + * @param offset The current offset. + * @returns The number of characters that were consumed, or -1 if the entity is incomplete. + */ + EntityDecoder.prototype.stateNamedEntity = function (str, offset) { + var decodeTree = this.decodeTree; + var current = decodeTree[this.treeIndex]; + // The mask is the number of bytes of the value, including the current byte. + var valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14; + for (; offset < str.length; offset++, this.excess++) { + var char = str.charCodeAt(offset); + this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char); + if (this.treeIndex < 0) { + return this.result === 0 || + // If we are parsing an attribute + (this.decodeMode === DecodingMode.Attribute && + // We shouldn't have consumed any characters after the entity, + (valueLength === 0 || + // And there should be no invalid characters. + isEntityInAttributeInvalidEnd(char))) + ? 0 + : this.emitNotTerminatedNamedEntity(); + } + current = decodeTree[this.treeIndex]; + valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14; + // If the branch is a value, store it and continue + if (valueLength !== 0) { + // If the entity is terminated by a semicolon, we are done. + if (char === CharCodes.SEMI) { + return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess); + } + // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it. + if (this.decodeMode !== DecodingMode.Strict) { + this.result = this.treeIndex; + this.consumed += this.excess; + this.excess = 0; + } + } + } + return -1; + }; + /** + * Emit a named entity that was not terminated with a semicolon. + * + * @returns The number of characters consumed. + */ + EntityDecoder.prototype.emitNotTerminatedNamedEntity = function () { + var _a; + var _b = this, result = _b.result, decodeTree = _b.decodeTree; + var valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14; + this.emitNamedEntityData(result, valueLength, this.consumed); + (_a = this.errors) === null || _a === void 0 ? void 0 : _a.missingSemicolonAfterCharacterReference(); + return this.consumed; + }; + /** + * Emit a named entity. + * + * @param result The index of the entity in the decode tree. + * @param valueLength The number of bytes in the entity. + * @param consumed The number of characters consumed. + * + * @returns The number of characters consumed. + */ + EntityDecoder.prototype.emitNamedEntityData = function (result, valueLength, consumed) { + var decodeTree = this.decodeTree; + this.emitCodePoint(valueLength === 1 + ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH + : decodeTree[result + 1], consumed); + if (valueLength === 3) { + // For multi-byte values, we need to emit the second byte. + this.emitCodePoint(decodeTree[result + 2], consumed); + } + return consumed; + }; + /** + * Signal to the parser that the end of the input was reached. + * + * Remaining data will be emitted and relevant errors will be produced. + * + * @returns The number of characters consumed. + */ + EntityDecoder.prototype.end = function () { + var _a; + switch (this.state) { + case EntityDecoderState.NamedEntity: { + // Emit a named entity if we have one. + return this.result !== 0 && + (this.decodeMode !== DecodingMode.Attribute || + this.result === this.treeIndex) + ? this.emitNotTerminatedNamedEntity() + : 0; + } + // Otherwise, emit a numeric entity if we have one. + case EntityDecoderState.NumericDecimal: { + return this.emitNumericEntity(0, 2); + } + case EntityDecoderState.NumericHex: { + return this.emitNumericEntity(0, 3); + } + case EntityDecoderState.NumericStart: { + (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed); + return 0; + } + case EntityDecoderState.EntityStart: { + // Return 0 if we have no entity. + return 0; + } + } + }; + return EntityDecoder; +}()); +exports.EntityDecoder = EntityDecoder; +/** + * Creates a function that decodes entities in a string. + * + * @param decodeTree The decode tree. + * @returns A function that decodes entities in a string. + */ +function getDecoder(decodeTree) { + var ret = ""; + var decoder = new EntityDecoder(decodeTree, function (str) { return (ret += (0, decode_codepoint_js_1.fromCodePoint)(str)); }); + return function decodeWithTrie(str, decodeMode) { + var lastIndex = 0; + var offset = 0; + while ((offset = str.indexOf("&", offset)) >= 0) { + ret += str.slice(lastIndex, offset); + decoder.startEntity(decodeMode); + var len = decoder.write(str, + // Skip the "&" + offset + 1); + if (len < 0) { + lastIndex = offset + decoder.end(); + break; + } + lastIndex = offset + len; + // If `len` is 0, skip the current `&` and continue. + offset = len === 0 ? lastIndex + 1 : lastIndex; + } + var result = ret + str.slice(lastIndex); + // Make sure we don't keep a reference to the final string. + ret = ""; + return result; + }; +} +/** + * Determines the branch of the current node that is taken given the current + * character. This function is used to traverse the trie. + * + * @param decodeTree The trie. + * @param current The current node. + * @param nodeIdx The index right after the current node and its value. + * @param char The current character. + * @returns The index of the next node, or -1 if no branch is taken. + */ +function determineBranch(decodeTree, current, nodeIdx, char) { + var branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7; + var jumpOffset = current & BinTrieFlags.JUMP_TABLE; + // Case 1: Single branch encoded in jump offset + if (branchCount === 0) { + return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1; + } + // Case 2: Multiple branches encoded in jump table + if (jumpOffset) { + var value = char - jumpOffset; + return value < 0 || value >= branchCount + ? -1 + : decodeTree[nodeIdx + value] - 1; + } + // Case 3: Multiple branches encoded in dictionary + // Binary search for the character. + var lo = nodeIdx; + var hi = lo + branchCount - 1; + while (lo <= hi) { + var mid = (lo + hi) >>> 1; + var midVal = decodeTree[mid]; + if (midVal < char) { + lo = mid + 1; + } + else if (midVal > char) { + hi = mid - 1; + } + else { + return decodeTree[mid + branchCount]; + } + } + return -1; +} +exports.determineBranch = determineBranch; +var htmlDecoder = getDecoder(decode_data_html_js_1.default); +var xmlDecoder = getDecoder(decode_data_xml_js_1.default); +/** + * Decodes an HTML string. + * + * @param str The string to decode. + * @param mode The decoding mode. + * @returns The decoded string. + */ +function decodeHTML(str, mode) { + if (mode === void 0) { mode = DecodingMode.Legacy; } + return htmlDecoder(str, mode); +} +exports.decodeHTML = decodeHTML; +/** + * Decodes an HTML string in an attribute. + * + * @param str The string to decode. + * @returns The decoded string. + */ +function decodeHTMLAttribute(str) { + return htmlDecoder(str, DecodingMode.Attribute); +} +exports.decodeHTMLAttribute = decodeHTMLAttribute; +/** + * Decodes an HTML string, requiring all entities to be terminated by a semicolon. + * + * @param str The string to decode. + * @returns The decoded string. + */ +function decodeHTMLStrict(str) { + return htmlDecoder(str, DecodingMode.Strict); +} +exports.decodeHTMLStrict = decodeHTMLStrict; +/** + * Decodes an XML string, requiring all entities to be terminated by a semicolon. + * + * @param str The string to decode. + * @returns The decoded string. + */ +function decodeXML(str) { + return xmlDecoder(str, DecodingMode.Strict); +} +exports.decodeXML = decodeXML; +//# sourceMappingURL=decode.js.map /***/ }), -/***/ 1713: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 4550: +/***/ ((__unused_webpack_module, exports) => { "use strict"; -/** internal - * class ParserBlock - * - * Block-level tokenizer. - **/ - - - -var Ruler = __nccwpck_require__(2789); - - -var _rules = [ - // First 2 params - rule name & source. Secondary array - list of rules, - // which can be terminated by this one. - [ 'table', __nccwpck_require__(7489), [ 'paragraph', 'reference' ] ], - [ 'code', __nccwpck_require__(2731) ], - [ 'fence', __nccwpck_require__(4215), [ 'paragraph', 'reference', 'blockquote', 'list' ] ], - [ 'blockquote', __nccwpck_require__(7429), [ 'paragraph', 'reference', 'blockquote', 'list' ] ], - [ 'hr', __nccwpck_require__(276), [ 'paragraph', 'reference', 'blockquote', 'list' ] ], - [ 'list', __nccwpck_require__(6506), [ 'paragraph', 'reference', 'blockquote' ] ], - [ 'reference', __nccwpck_require__(9281) ], - [ 'html_block', __nccwpck_require__(4697), [ 'paragraph', 'reference', 'blockquote' ] ], - [ 'heading', __nccwpck_require__(8392), [ 'paragraph', 'reference', 'blockquote' ] ], - [ 'lheading', __nccwpck_require__(3817) ], - [ 'paragraph', __nccwpck_require__(4205) ] -]; - +// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134 +var _a; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.replaceCodePoint = exports.fromCodePoint = void 0; +var decodeMap = new Map([ + [0, 65533], + // C1 Unicode control character reference replacements + [128, 8364], + [130, 8218], + [131, 402], + [132, 8222], + [133, 8230], + [134, 8224], + [135, 8225], + [136, 710], + [137, 8240], + [138, 352], + [139, 8249], + [140, 338], + [142, 381], + [145, 8216], + [146, 8217], + [147, 8220], + [148, 8221], + [149, 8226], + [150, 8211], + [151, 8212], + [152, 732], + [153, 8482], + [154, 353], + [155, 8250], + [156, 339], + [158, 382], + [159, 376], +]); /** - * new ParserBlock() - **/ -function ParserBlock() { - /** - * ParserBlock#ruler -> Ruler - * - * [[Ruler]] instance. Keep configuration of block rules. - **/ - this.ruler = new Ruler(); - - for (var i = 0; i < _rules.length; i++) { - this.ruler.push(_rules[i][0], _rules[i][1], { alt: (_rules[i][2] || []).slice() }); - } + * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point. + */ +exports.fromCodePoint = +// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins +(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) { + var output = ""; + if (codePoint > 0xffff) { + codePoint -= 0x10000; + output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800); + codePoint = 0xdc00 | (codePoint & 0x3ff); + } + output += String.fromCharCode(codePoint); + return output; +}; +/** + * Replace the given code point with a replacement character if it is a + * surrogate or is outside the valid range. Otherwise return the code + * point unchanged. + */ +function replaceCodePoint(codePoint) { + var _a; + if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) { + return 0xfffd; + } + return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint; } +exports.replaceCodePoint = replaceCodePoint; +/** + * Replace the code point if relevant, then convert it to a string. + * + * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead. + * @param codePoint The code point to decode. + * @returns The decoded code point. + */ +function decodeCodePoint(codePoint) { + return (0, exports.fromCodePoint)(replaceCodePoint(codePoint)); +} +exports["default"] = decodeCodePoint; +//# sourceMappingURL=decode_codepoint.js.map +/***/ }), -// Generate tokens for input range -// -ParserBlock.prototype.tokenize = function (state, startLine, endLine) { - var ok, i, - rules = this.ruler.getRules(''), - len = rules.length, - line = startLine, - hasEmptyLines = false, - maxNesting = state.md.options.maxNesting; - - while (line < endLine) { - state.line = line = state.skipEmptyLines(line); - if (line >= endLine) { break; } - - // Termination condition for nested calls. - // Nested calls currently used for blockquotes & lists - if (state.sCount[line] < state.blkIndent) { break; } - - // If nesting level exceeded - skip tail to the end. That's not ordinary - // situation and we should not care about content. - if (state.level >= maxNesting) { - state.line = endLine; - break; - } +/***/ 3772: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - // Try all possible rules. - // On success, rule should: - // - // - update `state.line` - // - update `state.tokens` - // - return true +"use strict"; - for (i = 0; i < len; i++) { - ok = rules[i](state, line, endLine, false); - if (ok) { break; } +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.encodeNonAsciiHTML = exports.encodeHTML = void 0; +var encode_html_js_1 = __importDefault(__nccwpck_require__(6468)); +var escape_js_1 = __nccwpck_require__(5947); +var htmlReplacer = /[\t\n!-,./:-@[-`\f{-}$\x80-\uFFFF]/g; +/** + * Encodes all characters in the input using HTML entities. This includes + * characters that are valid ASCII characters in HTML documents, such as `#`. + * + * To get a more compact output, consider using the `encodeNonAsciiHTML` + * function, which will only encode characters that are not valid in HTML + * documents, as well as non-ASCII characters. + * + * If a character has no equivalent entity, a numeric hexadecimal reference + * (eg. `ü`) will be used. + */ +function encodeHTML(data) { + return encodeHTMLTrieRe(htmlReplacer, data); +} +exports.encodeHTML = encodeHTML; +/** + * Encodes all non-ASCII characters, as well as characters not valid in HTML + * documents using HTML entities. This function will not encode characters that + * are valid in HTML documents, such as `#`. + * + * If a character has no equivalent entity, a numeric hexadecimal reference + * (eg. `ü`) will be used. + */ +function encodeNonAsciiHTML(data) { + return encodeHTMLTrieRe(escape_js_1.xmlReplacer, data); +} +exports.encodeNonAsciiHTML = encodeNonAsciiHTML; +function encodeHTMLTrieRe(regExp, str) { + var ret = ""; + var lastIdx = 0; + var match; + while ((match = regExp.exec(str)) !== null) { + var i = match.index; + ret += str.substring(lastIdx, i); + var char = str.charCodeAt(i); + var next = encode_html_js_1.default.get(char); + if (typeof next === "object") { + // We are in a branch. Try to match the next char. + if (i + 1 < str.length) { + var nextChar = str.charCodeAt(i + 1); + var value = typeof next.n === "number" + ? next.n === nextChar + ? next.o + : undefined + : next.n.get(nextChar); + if (value !== undefined) { + ret += value; + lastIdx = regExp.lastIndex += 1; + continue; + } + } + next = next.v; + } + // We might have a tree node without a value; skip and use a numeric entity. + if (next !== undefined) { + ret += next; + lastIdx = i + 1; + } + else { + var cp = (0, escape_js_1.getCodePoint)(str, i); + ret += "&#x".concat(cp.toString(16), ";"); + // Increase by 1 if we have a surrogate pair + lastIdx = regExp.lastIndex += Number(cp !== char); + } } + return ret + str.substr(lastIdx); +} +//# sourceMappingURL=encode.js.map - // set state.tight if we had an empty line before current tag - // i.e. latest empty line should not count - state.tight = !hasEmptyLines; +/***/ }), - // paragraph might "eat" one newline after it in nested lists - if (state.isEmpty(state.line - 1)) { - hasEmptyLines = true; - } +/***/ 5947: +/***/ ((__unused_webpack_module, exports) => { - line = state.line; +"use strict"; - if (line < endLine && state.isEmpty(line)) { - hasEmptyLines = true; - line++; - state.line = line; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.escapeText = exports.escapeAttribute = exports.escapeUTF8 = exports.escape = exports.encodeXML = exports.getCodePoint = exports.xmlReplacer = void 0; +exports.xmlReplacer = /["&'<>$\x80-\uFFFF]/g; +var xmlCodeMap = new Map([ + [34, """], + [38, "&"], + [39, "'"], + [60, "<"], + [62, ">"], +]); +// For compatibility with node < 4, we wrap `codePointAt` +exports.getCodePoint = +// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition +String.prototype.codePointAt != null + ? function (str, index) { return str.codePointAt(index); } + : // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + function (c, index) { + return (c.charCodeAt(index) & 0xfc00) === 0xd800 + ? (c.charCodeAt(index) - 0xd800) * 0x400 + + c.charCodeAt(index + 1) - + 0xdc00 + + 0x10000 + : c.charCodeAt(index); + }; +/** + * Encodes all non-ASCII characters, as well as characters not valid in XML + * documents using XML entities. + * + * If a character has no equivalent entity, a + * numeric hexadecimal reference (eg. `ü`) will be used. + */ +function encodeXML(str) { + var ret = ""; + var lastIdx = 0; + var match; + while ((match = exports.xmlReplacer.exec(str)) !== null) { + var i = match.index; + var char = str.charCodeAt(i); + var next = xmlCodeMap.get(char); + if (next !== undefined) { + ret += str.substring(lastIdx, i) + next; + lastIdx = i + 1; + } + else { + ret += "".concat(str.substring(lastIdx, i), "&#x").concat((0, exports.getCodePoint)(str, i).toString(16), ";"); + // Increase by 1 if we have a surrogate pair + lastIdx = exports.xmlReplacer.lastIndex += Number((char & 0xfc00) === 0xd800); + } } - } -}; - - + return ret + str.substr(lastIdx); +} +exports.encodeXML = encodeXML; /** - * ParserBlock.parse(str, md, env, outTokens) + * Encodes all non-ASCII characters, as well as characters not valid in XML + * documents using numeric hexadecimal reference (eg. `ü`). * - * Process input string and push block tokens into `outTokens` - **/ -ParserBlock.prototype.parse = function (src, md, env, outTokens) { - var state; + * Have a look at `escapeUTF8` if you want a more concise output at the expense + * of reduced transportability. + * + * @param data String to escape. + */ +exports.escape = encodeXML; +/** + * Creates a function that escapes all characters matched by the given regular + * expression using the given map of characters to escape to their entities. + * + * @param regex Regular expression to match characters to escape. + * @param map Map of characters to escape to their entities. + * + * @returns Function that escapes all characters matched by the given regular + * expression using the given map of characters to escape to their entities. + */ +function getEscaper(regex, map) { + return function escape(data) { + var match; + var lastIdx = 0; + var result = ""; + while ((match = regex.exec(data))) { + if (lastIdx !== match.index) { + result += data.substring(lastIdx, match.index); + } + // We know that this character will be in the map. + result += map.get(match[0].charCodeAt(0)); + // Every match will be of length 1 + lastIdx = match.index + 1; + } + return result + data.substring(lastIdx); + }; +} +/** + * Encodes all characters not valid in XML documents using XML entities. + * + * Note that the output will be character-set dependent. + * + * @param data String to escape. + */ +exports.escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap); +/** + * Encodes all characters that have to be escaped in HTML attributes, + * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}. + * + * @param data String to escape. + */ +exports.escapeAttribute = getEscaper(/["&\u00A0]/g, new Map([ + [34, """], + [38, "&"], + [160, " "], +])); +/** + * Encodes all characters that have to be escaped in HTML text, + * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}. + * + * @param data String to escape. + */ +exports.escapeText = getEscaper(/[&<>\u00A0]/g, new Map([ + [38, "&"], + [60, "<"], + [62, ">"], + [160, " "], +])); +//# sourceMappingURL=escape.js.map - if (!src) { return; } +/***/ }), - state = new this.State(src, md, env, outTokens); +/***/ 3067: +/***/ ((__unused_webpack_module, exports) => { - this.tokenize(state, state.line, state.lineMax); -}; +"use strict"; +// Generated using scripts/write-decode-map.ts +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports["default"] = new Uint16Array( +// prettier-ignore +"\u1d41<\xd5\u0131\u028a\u049d\u057b\u05d0\u0675\u06de\u07a2\u07d6\u080f\u0a4a\u0a91\u0da1\u0e6d\u0f09\u0f26\u10ca\u1228\u12e1\u1415\u149d\u14c3\u14df\u1525\0\0\0\0\0\0\u156b\u16cd\u198d\u1c12\u1ddd\u1f7e\u2060\u21b0\u228d\u23c0\u23fb\u2442\u2824\u2912\u2d08\u2e48\u2fce\u3016\u32ba\u3639\u37ac\u38fe\u3a28\u3a71\u3ae0\u3b2e\u0800EMabcfglmnoprstu\\bfms\x7f\x84\x8b\x90\x95\x98\xa6\xb3\xb9\xc8\xcflig\u803b\xc6\u40c6P\u803b&\u4026cute\u803b\xc1\u40c1reve;\u4102\u0100iyx}rc\u803b\xc2\u40c2;\u4410r;\uc000\ud835\udd04rave\u803b\xc0\u40c0pha;\u4391acr;\u4100d;\u6a53\u0100gp\x9d\xa1on;\u4104f;\uc000\ud835\udd38plyFunction;\u6061ing\u803b\xc5\u40c5\u0100cs\xbe\xc3r;\uc000\ud835\udc9cign;\u6254ilde\u803b\xc3\u40c3ml\u803b\xc4\u40c4\u0400aceforsu\xe5\xfb\xfe\u0117\u011c\u0122\u0127\u012a\u0100cr\xea\xf2kslash;\u6216\u0176\xf6\xf8;\u6ae7ed;\u6306y;\u4411\u0180crt\u0105\u010b\u0114ause;\u6235noullis;\u612ca;\u4392r;\uc000\ud835\udd05pf;\uc000\ud835\udd39eve;\u42d8c\xf2\u0113mpeq;\u624e\u0700HOacdefhilorsu\u014d\u0151\u0156\u0180\u019e\u01a2\u01b5\u01b7\u01ba\u01dc\u0215\u0273\u0278\u027ecy;\u4427PY\u803b\xa9\u40a9\u0180cpy\u015d\u0162\u017aute;\u4106\u0100;i\u0167\u0168\u62d2talDifferentialD;\u6145leys;\u612d\u0200aeio\u0189\u018e\u0194\u0198ron;\u410cdil\u803b\xc7\u40c7rc;\u4108nint;\u6230ot;\u410a\u0100dn\u01a7\u01adilla;\u40b8terDot;\u40b7\xf2\u017fi;\u43a7rcle\u0200DMPT\u01c7\u01cb\u01d1\u01d6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01e2\u01f8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020foubleQuote;\u601duote;\u6019\u0200lnpu\u021e\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6a74\u0180git\u022f\u0236\u023aruent;\u6261nt;\u622fourIntegral;\u622e\u0100fr\u024c\u024e;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6a2fcr;\uc000\ud835\udc9ep\u0100;C\u0284\u0285\u62d3ap;\u624d\u0580DJSZacefios\u02a0\u02ac\u02b0\u02b4\u02b8\u02cb\u02d7\u02e1\u02e6\u0333\u048d\u0100;o\u0179\u02a5trahd;\u6911cy;\u4402cy;\u4405cy;\u440f\u0180grs\u02bf\u02c4\u02c7ger;\u6021r;\u61a1hv;\u6ae4\u0100ay\u02d0\u02d5ron;\u410e;\u4414l\u0100;t\u02dd\u02de\u6207a;\u4394r;\uc000\ud835\udd07\u0100af\u02eb\u0327\u0100cm\u02f0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031ccute;\u40b4o\u0174\u030b\u030d;\u42d9bleAcute;\u42ddrave;\u4060ilde;\u42dcond;\u62c4ferentialD;\u6146\u0470\u033d\0\0\0\u0342\u0354\0\u0405f;\uc000\ud835\udd3b\u0180;DE\u0348\u0349\u034d\u40a8ot;\u60dcqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03cf\u03e2\u03f8ontourIntegra\xec\u0239o\u0274\u0379\0\0\u037b\xbb\u0349nArrow;\u61d3\u0100eo\u0387\u03a4ft\u0180ART\u0390\u0396\u03a1rrow;\u61d0ightArrow;\u61d4e\xe5\u02cang\u0100LR\u03ab\u03c4eft\u0100AR\u03b3\u03b9rrow;\u67f8ightArrow;\u67faightArrow;\u67f9ight\u0100AT\u03d8\u03derrow;\u61d2ee;\u62a8p\u0241\u03e9\0\0\u03efrrow;\u61d1ownArrow;\u61d5erticalBar;\u6225n\u0300ABLRTa\u0412\u042a\u0430\u045e\u047f\u037crrow\u0180;BU\u041d\u041e\u0422\u6193ar;\u6913pArrow;\u61f5reve;\u4311eft\u02d2\u043a\0\u0446\0\u0450ightVector;\u6950eeVector;\u695eector\u0100;B\u0459\u045a\u61bdar;\u6956ight\u01d4\u0467\0\u0471eeVector;\u695fector\u0100;B\u047a\u047b\u61c1ar;\u6957ee\u0100;A\u0486\u0487\u62a4rrow;\u61a7\u0100ct\u0492\u0497r;\uc000\ud835\udc9frok;\u4110\u0800NTacdfglmopqstux\u04bd\u04c0\u04c4\u04cb\u04de\u04e2\u04e7\u04ee\u04f5\u0521\u052f\u0536\u0552\u055d\u0560\u0565G;\u414aH\u803b\xd0\u40d0cute\u803b\xc9\u40c9\u0180aiy\u04d2\u04d7\u04dcron;\u411arc\u803b\xca\u40ca;\u442dot;\u4116r;\uc000\ud835\udd08rave\u803b\xc8\u40c8ement;\u6208\u0100ap\u04fa\u04fecr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65fberySmallSquare;\u65ab\u0100gp\u0526\u052aon;\u4118f;\uc000\ud835\udd3csilon;\u4395u\u0100ai\u053c\u0549l\u0100;T\u0542\u0543\u6a75ilde;\u6242librium;\u61cc\u0100ci\u0557\u055ar;\u6130m;\u6a73a;\u4397ml\u803b\xcb\u40cb\u0100ip\u056a\u056fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058d\u05b2\u05ccy;\u4424r;\uc000\ud835\udd09lled\u0253\u0597\0\0\u05a3mallSquare;\u65fcerySmallSquare;\u65aa\u0370\u05ba\0\u05bf\0\0\u05c4f;\uc000\ud835\udd3dAll;\u6200riertrf;\u6131c\xf2\u05cb\u0600JTabcdfgorst\u05e8\u05ec\u05ef\u05fa\u0600\u0612\u0616\u061b\u061d\u0623\u066c\u0672cy;\u4403\u803b>\u403emma\u0100;d\u05f7\u05f8\u4393;\u43dcreve;\u411e\u0180eiy\u0607\u060c\u0610dil;\u4122rc;\u411c;\u4413ot;\u4120r;\uc000\ud835\udd0a;\u62d9pf;\uc000\ud835\udd3eeater\u0300EFGLST\u0635\u0644\u064e\u0656\u065b\u0666qual\u0100;L\u063e\u063f\u6265ess;\u62dbullEqual;\u6267reater;\u6aa2ess;\u6277lantEqual;\u6a7eilde;\u6273cr;\uc000\ud835\udca2;\u626b\u0400Aacfiosu\u0685\u068b\u0696\u069b\u069e\u06aa\u06be\u06caRDcy;\u442a\u0100ct\u0690\u0694ek;\u42c7;\u405eirc;\u4124r;\u610clbertSpace;\u610b\u01f0\u06af\0\u06b2f;\u610dizontalLine;\u6500\u0100ct\u06c3\u06c5\xf2\u06a9rok;\u4126mp\u0144\u06d0\u06d8ownHum\xf0\u012fqual;\u624f\u0700EJOacdfgmnostu\u06fa\u06fe\u0703\u0707\u070e\u071a\u071e\u0721\u0728\u0744\u0778\u078b\u078f\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803b\xcd\u40cd\u0100iy\u0713\u0718rc\u803b\xce\u40ce;\u4418ot;\u4130r;\u6111rave\u803b\xcc\u40cc\u0180;ap\u0720\u072f\u073f\u0100cg\u0734\u0737r;\u412ainaryI;\u6148lie\xf3\u03dd\u01f4\u0749\0\u0762\u0100;e\u074d\u074e\u622c\u0100gr\u0753\u0758ral;\u622bsection;\u62c2isible\u0100CT\u076c\u0772omma;\u6063imes;\u6062\u0180gpt\u077f\u0783\u0788on;\u412ef;\uc000\ud835\udd40a;\u4399cr;\u6110ilde;\u4128\u01eb\u079a\0\u079ecy;\u4406l\u803b\xcf\u40cf\u0280cfosu\u07ac\u07b7\u07bc\u07c2\u07d0\u0100iy\u07b1\u07b5rc;\u4134;\u4419r;\uc000\ud835\udd0dpf;\uc000\ud835\udd41\u01e3\u07c7\0\u07ccr;\uc000\ud835\udca5rcy;\u4408kcy;\u4404\u0380HJacfos\u07e4\u07e8\u07ec\u07f1\u07fd\u0802\u0808cy;\u4425cy;\u440cppa;\u439a\u0100ey\u07f6\u07fbdil;\u4136;\u441ar;\uc000\ud835\udd0epf;\uc000\ud835\udd42cr;\uc000\ud835\udca6\u0580JTaceflmost\u0825\u0829\u082c\u0850\u0863\u09b3\u09b8\u09c7\u09cd\u0a37\u0a47cy;\u4409\u803b<\u403c\u0280cmnpr\u0837\u083c\u0841\u0844\u084dute;\u4139bda;\u439bg;\u67ealacetrf;\u6112r;\u619e\u0180aey\u0857\u085c\u0861ron;\u413ddil;\u413b;\u441b\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087e\u08a9\u08b1\u08e0\u08e6\u08fc\u092f\u095b\u0390\u096a\u0100nr\u0883\u088fgleBracket;\u67e8row\u0180;BR\u0899\u089a\u089e\u6190ar;\u61e4ightArrow;\u61c6eiling;\u6308o\u01f5\u08b7\0\u08c3bleBracket;\u67e6n\u01d4\u08c8\0\u08d2eeVector;\u6961ector\u0100;B\u08db\u08dc\u61c3ar;\u6959loor;\u630aight\u0100AV\u08ef\u08f5rrow;\u6194ector;\u694e\u0100er\u0901\u0917e\u0180;AV\u0909\u090a\u0910\u62a3rrow;\u61a4ector;\u695aiangle\u0180;BE\u0924\u0925\u0929\u62b2ar;\u69cfqual;\u62b4p\u0180DTV\u0937\u0942\u094cownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61bfar;\u6958ector\u0100;B\u0965\u0966\u61bcar;\u6952ight\xe1\u039cs\u0300EFGLST\u097e\u098b\u0995\u099d\u09a2\u09adqualGreater;\u62daullEqual;\u6266reater;\u6276ess;\u6aa1lantEqual;\u6a7dilde;\u6272r;\uc000\ud835\udd0f\u0100;e\u09bd\u09be\u62d8ftarrow;\u61daidot;\u413f\u0180npw\u09d4\u0a16\u0a1bg\u0200LRlr\u09de\u09f7\u0a02\u0a10eft\u0100AR\u09e6\u09ecrrow;\u67f5ightArrow;\u67f7ightArrow;\u67f6eft\u0100ar\u03b3\u0a0aight\xe1\u03bfight\xe1\u03caf;\uc000\ud835\udd43er\u0100LR\u0a22\u0a2ceftArrow;\u6199ightArrow;\u6198\u0180cht\u0a3e\u0a40\u0a42\xf2\u084c;\u61b0rok;\u4141;\u626a\u0400acefiosu\u0a5a\u0a5d\u0a60\u0a77\u0a7c\u0a85\u0a8b\u0a8ep;\u6905y;\u441c\u0100dl\u0a65\u0a6fiumSpace;\u605flintrf;\u6133r;\uc000\ud835\udd10nusPlus;\u6213pf;\uc000\ud835\udd44c\xf2\u0a76;\u439c\u0480Jacefostu\u0aa3\u0aa7\u0aad\u0ac0\u0b14\u0b19\u0d91\u0d97\u0d9ecy;\u440acute;\u4143\u0180aey\u0ab4\u0ab9\u0aberon;\u4147dil;\u4145;\u441d\u0180gsw\u0ac7\u0af0\u0b0eative\u0180MTV\u0ad3\u0adf\u0ae8ediumSpace;\u600bhi\u0100cn\u0ae6\u0ad8\xeb\u0ad9eryThi\xee\u0ad9ted\u0100GL\u0af8\u0b06reaterGreate\xf2\u0673essLes\xf3\u0a48Line;\u400ar;\uc000\ud835\udd11\u0200Bnpt\u0b22\u0b28\u0b37\u0b3areak;\u6060BreakingSpace;\u40a0f;\u6115\u0680;CDEGHLNPRSTV\u0b55\u0b56\u0b6a\u0b7c\u0ba1\u0beb\u0c04\u0c5e\u0c84\u0ca6\u0cd8\u0d61\u0d85\u6aec\u0100ou\u0b5b\u0b64ngruent;\u6262pCap;\u626doubleVerticalBar;\u6226\u0180lqx\u0b83\u0b8a\u0b9bement;\u6209ual\u0100;T\u0b92\u0b93\u6260ilde;\uc000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0bb6\u0bb7\u0bbd\u0bc9\u0bd3\u0bd8\u0be5\u626fqual;\u6271ullEqual;\uc000\u2267\u0338reater;\uc000\u226b\u0338ess;\u6279lantEqual;\uc000\u2a7e\u0338ilde;\u6275ump\u0144\u0bf2\u0bfdownHump;\uc000\u224e\u0338qual;\uc000\u224f\u0338e\u0100fs\u0c0a\u0c27tTriangle\u0180;BE\u0c1a\u0c1b\u0c21\u62eaar;\uc000\u29cf\u0338qual;\u62ecs\u0300;EGLST\u0c35\u0c36\u0c3c\u0c44\u0c4b\u0c58\u626equal;\u6270reater;\u6278ess;\uc000\u226a\u0338lantEqual;\uc000\u2a7d\u0338ilde;\u6274ested\u0100GL\u0c68\u0c79reaterGreater;\uc000\u2aa2\u0338essLess;\uc000\u2aa1\u0338recedes\u0180;ES\u0c92\u0c93\u0c9b\u6280qual;\uc000\u2aaf\u0338lantEqual;\u62e0\u0100ei\u0cab\u0cb9verseElement;\u620cghtTriangle\u0180;BE\u0ccb\u0ccc\u0cd2\u62ebar;\uc000\u29d0\u0338qual;\u62ed\u0100qu\u0cdd\u0d0cuareSu\u0100bp\u0ce8\u0cf9set\u0100;E\u0cf0\u0cf3\uc000\u228f\u0338qual;\u62e2erset\u0100;E\u0d03\u0d06\uc000\u2290\u0338qual;\u62e3\u0180bcp\u0d13\u0d24\u0d4eset\u0100;E\u0d1b\u0d1e\uc000\u2282\u20d2qual;\u6288ceeds\u0200;EST\u0d32\u0d33\u0d3b\u0d46\u6281qual;\uc000\u2ab0\u0338lantEqual;\u62e1ilde;\uc000\u227f\u0338erset\u0100;E\u0d58\u0d5b\uc000\u2283\u20d2qual;\u6289ilde\u0200;EFT\u0d6e\u0d6f\u0d75\u0d7f\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uc000\ud835\udca9ilde\u803b\xd1\u40d1;\u439d\u0700Eacdfgmoprstuv\u0dbd\u0dc2\u0dc9\u0dd5\u0ddb\u0de0\u0de7\u0dfc\u0e02\u0e20\u0e22\u0e32\u0e3f\u0e44lig;\u4152cute\u803b\xd3\u40d3\u0100iy\u0dce\u0dd3rc\u803b\xd4\u40d4;\u441eblac;\u4150r;\uc000\ud835\udd12rave\u803b\xd2\u40d2\u0180aei\u0dee\u0df2\u0df6cr;\u414cga;\u43a9cron;\u439fpf;\uc000\ud835\udd46enCurly\u0100DQ\u0e0e\u0e1aoubleQuote;\u601cuote;\u6018;\u6a54\u0100cl\u0e27\u0e2cr;\uc000\ud835\udcaaash\u803b\xd8\u40d8i\u016c\u0e37\u0e3cde\u803b\xd5\u40d5es;\u6a37ml\u803b\xd6\u40d6er\u0100BP\u0e4b\u0e60\u0100ar\u0e50\u0e53r;\u603eac\u0100ek\u0e5a\u0e5c;\u63deet;\u63b4arenthesis;\u63dc\u0480acfhilors\u0e7f\u0e87\u0e8a\u0e8f\u0e92\u0e94\u0e9d\u0eb0\u0efcrtialD;\u6202y;\u441fr;\uc000\ud835\udd13i;\u43a6;\u43a0usMinus;\u40b1\u0100ip\u0ea2\u0eadncareplan\xe5\u069df;\u6119\u0200;eio\u0eb9\u0eba\u0ee0\u0ee4\u6abbcedes\u0200;EST\u0ec8\u0ec9\u0ecf\u0eda\u627aqual;\u6aaflantEqual;\u627cilde;\u627eme;\u6033\u0100dp\u0ee9\u0eeeuct;\u620fortion\u0100;a\u0225\u0ef9l;\u621d\u0100ci\u0f01\u0f06r;\uc000\ud835\udcab;\u43a8\u0200Ufos\u0f11\u0f16\u0f1b\u0f1fOT\u803b\"\u4022r;\uc000\ud835\udd14pf;\u611acr;\uc000\ud835\udcac\u0600BEacefhiorsu\u0f3e\u0f43\u0f47\u0f60\u0f73\u0fa7\u0faa\u0fad\u1096\u10a9\u10b4\u10bearr;\u6910G\u803b\xae\u40ae\u0180cnr\u0f4e\u0f53\u0f56ute;\u4154g;\u67ebr\u0100;t\u0f5c\u0f5d\u61a0l;\u6916\u0180aey\u0f67\u0f6c\u0f71ron;\u4158dil;\u4156;\u4420\u0100;v\u0f78\u0f79\u611cerse\u0100EU\u0f82\u0f99\u0100lq\u0f87\u0f8eement;\u620builibrium;\u61cbpEquilibrium;\u696fr\xbb\u0f79o;\u43a1ght\u0400ACDFTUVa\u0fc1\u0feb\u0ff3\u1022\u1028\u105b\u1087\u03d8\u0100nr\u0fc6\u0fd2gleBracket;\u67e9row\u0180;BL\u0fdc\u0fdd\u0fe1\u6192ar;\u61e5eftArrow;\u61c4eiling;\u6309o\u01f5\u0ff9\0\u1005bleBracket;\u67e7n\u01d4\u100a\0\u1014eeVector;\u695dector\u0100;B\u101d\u101e\u61c2ar;\u6955loor;\u630b\u0100er\u102d\u1043e\u0180;AV\u1035\u1036\u103c\u62a2rrow;\u61a6ector;\u695biangle\u0180;BE\u1050\u1051\u1055\u62b3ar;\u69d0qual;\u62b5p\u0180DTV\u1063\u106e\u1078ownVector;\u694feeVector;\u695cector\u0100;B\u1082\u1083\u61bear;\u6954ector\u0100;B\u1091\u1092\u61c0ar;\u6953\u0100pu\u109b\u109ef;\u611dndImplies;\u6970ightarrow;\u61db\u0100ch\u10b9\u10bcr;\u611b;\u61b1leDelayed;\u69f4\u0680HOacfhimoqstu\u10e4\u10f1\u10f7\u10fd\u1119\u111e\u1151\u1156\u1161\u1167\u11b5\u11bb\u11bf\u0100Cc\u10e9\u10eeHcy;\u4429y;\u4428FTcy;\u442ccute;\u415a\u0280;aeiy\u1108\u1109\u110e\u1113\u1117\u6abcron;\u4160dil;\u415erc;\u415c;\u4421r;\uc000\ud835\udd16ort\u0200DLRU\u112a\u1134\u113e\u1149ownArrow\xbb\u041eeftArrow\xbb\u089aightArrow\xbb\u0fddpArrow;\u6191gma;\u43a3allCircle;\u6218pf;\uc000\ud835\udd4a\u0272\u116d\0\0\u1170t;\u621aare\u0200;ISU\u117b\u117c\u1189\u11af\u65a1ntersection;\u6293u\u0100bp\u118f\u119eset\u0100;E\u1197\u1198\u628fqual;\u6291erset\u0100;E\u11a8\u11a9\u6290qual;\u6292nion;\u6294cr;\uc000\ud835\udcaear;\u62c6\u0200bcmp\u11c8\u11db\u1209\u120b\u0100;s\u11cd\u11ce\u62d0et\u0100;E\u11cd\u11d5qual;\u6286\u0100ch\u11e0\u1205eeds\u0200;EST\u11ed\u11ee\u11f4\u11ff\u627bqual;\u6ab0lantEqual;\u627dilde;\u627fTh\xe1\u0f8c;\u6211\u0180;es\u1212\u1213\u1223\u62d1rset\u0100;E\u121c\u121d\u6283qual;\u6287et\xbb\u1213\u0580HRSacfhiors\u123e\u1244\u1249\u1255\u125e\u1271\u1276\u129f\u12c2\u12c8\u12d1ORN\u803b\xde\u40deADE;\u6122\u0100Hc\u124e\u1252cy;\u440by;\u4426\u0100bu\u125a\u125c;\u4009;\u43a4\u0180aey\u1265\u126a\u126fron;\u4164dil;\u4162;\u4422r;\uc000\ud835\udd17\u0100ei\u127b\u1289\u01f2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128e\u1298kSpace;\uc000\u205f\u200aSpace;\u6009lde\u0200;EFT\u12ab\u12ac\u12b2\u12bc\u623cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uc000\ud835\udd4bipleDot;\u60db\u0100ct\u12d6\u12dbr;\uc000\ud835\udcafrok;\u4166\u0ae1\u12f7\u130e\u131a\u1326\0\u132c\u1331\0\0\0\0\0\u1338\u133d\u1377\u1385\0\u13ff\u1404\u140a\u1410\u0100cr\u12fb\u1301ute\u803b\xda\u40dar\u0100;o\u1307\u1308\u619fcir;\u6949r\u01e3\u1313\0\u1316y;\u440eve;\u416c\u0100iy\u131e\u1323rc\u803b\xdb\u40db;\u4423blac;\u4170r;\uc000\ud835\udd18rave\u803b\xd9\u40d9acr;\u416a\u0100di\u1341\u1369er\u0100BP\u1348\u135d\u0100ar\u134d\u1350r;\u405fac\u0100ek\u1357\u1359;\u63dfet;\u63b5arenthesis;\u63ddon\u0100;P\u1370\u1371\u62c3lus;\u628e\u0100gp\u137b\u137fon;\u4172f;\uc000\ud835\udd4c\u0400ADETadps\u1395\u13ae\u13b8\u13c4\u03e8\u13d2\u13d7\u13f3rrow\u0180;BD\u1150\u13a0\u13a4ar;\u6912ownArrow;\u61c5ownArrow;\u6195quilibrium;\u696eee\u0100;A\u13cb\u13cc\u62a5rrow;\u61a5own\xe1\u03f3er\u0100LR\u13de\u13e8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13f9\u13fa\u43d2on;\u43a5ing;\u416ecr;\uc000\ud835\udcb0ilde;\u4168ml\u803b\xdc\u40dc\u0480Dbcdefosv\u1427\u142c\u1430\u1433\u143e\u1485\u148a\u1490\u1496ash;\u62abar;\u6aeby;\u4412ash\u0100;l\u143b\u143c\u62a9;\u6ae6\u0100er\u1443\u1445;\u62c1\u0180bty\u144c\u1450\u147aar;\u6016\u0100;i\u144f\u1455cal\u0200BLST\u1461\u1465\u146a\u1474ar;\u6223ine;\u407ceparator;\u6758ilde;\u6240ThinSpace;\u600ar;\uc000\ud835\udd19pf;\uc000\ud835\udd4dcr;\uc000\ud835\udcb1dash;\u62aa\u0280cefos\u14a7\u14ac\u14b1\u14b6\u14bcirc;\u4174dge;\u62c0r;\uc000\ud835\udd1apf;\uc000\ud835\udd4ecr;\uc000\ud835\udcb2\u0200fios\u14cb\u14d0\u14d2\u14d8r;\uc000\ud835\udd1b;\u439epf;\uc000\ud835\udd4fcr;\uc000\ud835\udcb3\u0480AIUacfosu\u14f1\u14f5\u14f9\u14fd\u1504\u150f\u1514\u151a\u1520cy;\u442fcy;\u4407cy;\u442ecute\u803b\xdd\u40dd\u0100iy\u1509\u150drc;\u4176;\u442br;\uc000\ud835\udd1cpf;\uc000\ud835\udd50cr;\uc000\ud835\udcb4ml;\u4178\u0400Hacdefos\u1535\u1539\u153f\u154b\u154f\u155d\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417d;\u4417ot;\u417b\u01f2\u1554\0\u155boWidt\xe8\u0ad9a;\u4396r;\u6128pf;\u6124cr;\uc000\ud835\udcb5\u0be1\u1583\u158a\u1590\0\u15b0\u15b6\u15bf\0\0\0\0\u15c6\u15db\u15eb\u165f\u166d\0\u1695\u169b\u16b2\u16b9\0\u16becute\u803b\xe1\u40e1reve;\u4103\u0300;Ediuy\u159c\u159d\u15a1\u15a3\u15a8\u15ad\u623e;\uc000\u223e\u0333;\u623frc\u803b\xe2\u40e2te\u80bb\xb4\u0306;\u4430lig\u803b\xe6\u40e6\u0100;r\xb2\u15ba;\uc000\ud835\udd1erave\u803b\xe0\u40e0\u0100ep\u15ca\u15d6\u0100fp\u15cf\u15d4sym;\u6135\xe8\u15d3ha;\u43b1\u0100ap\u15dfc\u0100cl\u15e4\u15e7r;\u4101g;\u6a3f\u0264\u15f0\0\0\u160a\u0280;adsv\u15fa\u15fb\u15ff\u1601\u1607\u6227nd;\u6a55;\u6a5clope;\u6a58;\u6a5a\u0380;elmrsz\u1618\u1619\u161b\u161e\u163f\u164f\u1659\u6220;\u69a4e\xbb\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163a\u163c\u163e;\u69a8;\u69a9;\u69aa;\u69ab;\u69ac;\u69ad;\u69ae;\u69aft\u0100;v\u1645\u1646\u621fb\u0100;d\u164c\u164d\u62be;\u699d\u0100pt\u1654\u1657h;\u6222\xbb\xb9arr;\u637c\u0100gp\u1663\u1667on;\u4105f;\uc000\ud835\udd52\u0380;Eaeiop\u12c1\u167b\u167d\u1682\u1684\u1687\u168a;\u6a70cir;\u6a6f;\u624ad;\u624bs;\u4027rox\u0100;e\u12c1\u1692\xf1\u1683ing\u803b\xe5\u40e5\u0180cty\u16a1\u16a6\u16a8r;\uc000\ud835\udcb6;\u402amp\u0100;e\u12c1\u16af\xf1\u0288ilde\u803b\xe3\u40e3ml\u803b\xe4\u40e4\u0100ci\u16c2\u16c8onin\xf4\u0272nt;\u6a11\u0800Nabcdefiklnoprsu\u16ed\u16f1\u1730\u173c\u1743\u1748\u1778\u177d\u17e0\u17e6\u1839\u1850\u170d\u193d\u1948\u1970ot;\u6aed\u0100cr\u16f6\u171ek\u0200ceps\u1700\u1705\u170d\u1713ong;\u624cpsilon;\u43f6rime;\u6035im\u0100;e\u171a\u171b\u623dq;\u62cd\u0176\u1722\u1726ee;\u62bded\u0100;g\u172c\u172d\u6305e\xbb\u172drk\u0100;t\u135c\u1737brk;\u63b6\u0100oy\u1701\u1741;\u4431quo;\u601e\u0280cmprt\u1753\u175b\u1761\u1764\u1768aus\u0100;e\u010a\u0109ptyv;\u69b0s\xe9\u170cno\xf5\u0113\u0180ahw\u176f\u1771\u1773;\u43b2;\u6136een;\u626cr;\uc000\ud835\udd1fg\u0380costuvw\u178d\u179d\u17b3\u17c1\u17d5\u17db\u17de\u0180aiu\u1794\u1796\u179a\xf0\u0760rc;\u65efp\xbb\u1371\u0180dpt\u17a4\u17a8\u17adot;\u6a00lus;\u6a01imes;\u6a02\u0271\u17b9\0\0\u17becup;\u6a06ar;\u6605riangle\u0100du\u17cd\u17d2own;\u65bdp;\u65b3plus;\u6a04e\xe5\u1444\xe5\u14adarow;\u690d\u0180ako\u17ed\u1826\u1835\u0100cn\u17f2\u1823k\u0180lst\u17fa\u05ab\u1802ozenge;\u69ebriangle\u0200;dlr\u1812\u1813\u1818\u181d\u65b4own;\u65beeft;\u65c2ight;\u65b8k;\u6423\u01b1\u182b\0\u1833\u01b2\u182f\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183e\u184d\u0100;q\u1843\u1846\uc000=\u20e5uiv;\uc000\u2261\u20e5t;\u6310\u0200ptwx\u1859\u185e\u1867\u186cf;\uc000\ud835\udd53\u0100;t\u13cb\u1863om\xbb\u13cctie;\u62c8\u0600DHUVbdhmptuv\u1885\u1896\u18aa\u18bb\u18d7\u18db\u18ec\u18ff\u1905\u190a\u1910\u1921\u0200LRlr\u188e\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18a1\u18a2\u18a4\u18a6\u18a8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18b3\u18b5\u18b7\u18b9;\u655d;\u655a;\u655c;\u6559\u0380;HLRhlr\u18ca\u18cb\u18cd\u18cf\u18d1\u18d3\u18d5\u6551;\u656c;\u6563;\u6560;\u656b;\u6562;\u655fox;\u69c9\u0200LRlr\u18e4\u18e6\u18e8\u18ea;\u6555;\u6552;\u6510;\u650c\u0280;DUdu\u06bd\u18f7\u18f9\u18fb\u18fd;\u6565;\u6568;\u652c;\u6534inus;\u629flus;\u629eimes;\u62a0\u0200LRlr\u1919\u191b\u191d\u191f;\u655b;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193b\u6502;\u656a;\u6561;\u655e;\u653c;\u6524;\u651c\u0100ev\u0123\u1942bar\u803b\xa6\u40a6\u0200ceio\u1951\u1956\u195a\u1960r;\uc000\ud835\udcb7mi;\u604fm\u0100;e\u171a\u171cl\u0180;bh\u1968\u1969\u196b\u405c;\u69c5sub;\u67c8\u016c\u1974\u197el\u0100;e\u1979\u197a\u6022t\xbb\u197ap\u0180;Ee\u012f\u1985\u1987;\u6aae\u0100;q\u06dc\u06db\u0ce1\u19a7\0\u19e8\u1a11\u1a15\u1a32\0\u1a37\u1a50\0\0\u1ab4\0\0\u1ac1\0\0\u1b21\u1b2e\u1b4d\u1b52\0\u1bfd\0\u1c0c\u0180cpr\u19ad\u19b2\u19ddute;\u4107\u0300;abcds\u19bf\u19c0\u19c4\u19ca\u19d5\u19d9\u6229nd;\u6a44rcup;\u6a49\u0100au\u19cf\u19d2p;\u6a4bp;\u6a47ot;\u6a40;\uc000\u2229\ufe00\u0100eo\u19e2\u19e5t;\u6041\xee\u0693\u0200aeiu\u19f0\u19fb\u1a01\u1a05\u01f0\u19f5\0\u19f8s;\u6a4don;\u410ddil\u803b\xe7\u40e7rc;\u4109ps\u0100;s\u1a0c\u1a0d\u6a4cm;\u6a50ot;\u410b\u0180dmn\u1a1b\u1a20\u1a26il\u80bb\xb8\u01adptyv;\u69b2t\u8100\xa2;e\u1a2d\u1a2e\u40a2r\xe4\u01b2r;\uc000\ud835\udd20\u0180cei\u1a3d\u1a40\u1a4dy;\u4447ck\u0100;m\u1a47\u1a48\u6713ark\xbb\u1a48;\u43c7r\u0380;Ecefms\u1a5f\u1a60\u1a62\u1a6b\u1aa4\u1aaa\u1aae\u65cb;\u69c3\u0180;el\u1a69\u1a6a\u1a6d\u42c6q;\u6257e\u0261\u1a74\0\0\u1a88rrow\u0100lr\u1a7c\u1a81eft;\u61baight;\u61bb\u0280RSacd\u1a92\u1a94\u1a96\u1a9a\u1a9f\xbb\u0f47;\u64c8st;\u629birc;\u629aash;\u629dnint;\u6a10id;\u6aefcir;\u69c2ubs\u0100;u\u1abb\u1abc\u6663it\xbb\u1abc\u02ec\u1ac7\u1ad4\u1afa\0\u1b0aon\u0100;e\u1acd\u1ace\u403a\u0100;q\xc7\xc6\u026d\u1ad9\0\0\u1ae2a\u0100;t\u1ade\u1adf\u402c;\u4040\u0180;fl\u1ae8\u1ae9\u1aeb\u6201\xee\u1160e\u0100mx\u1af1\u1af6ent\xbb\u1ae9e\xf3\u024d\u01e7\u1afe\0\u1b07\u0100;d\u12bb\u1b02ot;\u6a6dn\xf4\u0246\u0180fry\u1b10\u1b14\u1b17;\uc000\ud835\udd54o\xe4\u0254\u8100\xa9;s\u0155\u1b1dr;\u6117\u0100ao\u1b25\u1b29rr;\u61b5ss;\u6717\u0100cu\u1b32\u1b37r;\uc000\ud835\udcb8\u0100bp\u1b3c\u1b44\u0100;e\u1b41\u1b42\u6acf;\u6ad1\u0100;e\u1b49\u1b4a\u6ad0;\u6ad2dot;\u62ef\u0380delprvw\u1b60\u1b6c\u1b77\u1b82\u1bac\u1bd4\u1bf9arr\u0100lr\u1b68\u1b6a;\u6938;\u6935\u0270\u1b72\0\0\u1b75r;\u62dec;\u62dfarr\u0100;p\u1b7f\u1b80\u61b6;\u693d\u0300;bcdos\u1b8f\u1b90\u1b96\u1ba1\u1ba5\u1ba8\u622arcap;\u6a48\u0100au\u1b9b\u1b9ep;\u6a46p;\u6a4aot;\u628dr;\u6a45;\uc000\u222a\ufe00\u0200alrv\u1bb5\u1bbf\u1bde\u1be3rr\u0100;m\u1bbc\u1bbd\u61b7;\u693cy\u0180evw\u1bc7\u1bd4\u1bd8q\u0270\u1bce\0\0\u1bd2re\xe3\u1b73u\xe3\u1b75ee;\u62ceedge;\u62cfen\u803b\xa4\u40a4earrow\u0100lr\u1bee\u1bf3eft\xbb\u1b80ight\xbb\u1bbde\xe4\u1bdd\u0100ci\u1c01\u1c07onin\xf4\u01f7nt;\u6231lcty;\u632d\u0980AHabcdefhijlorstuwz\u1c38\u1c3b\u1c3f\u1c5d\u1c69\u1c75\u1c8a\u1c9e\u1cac\u1cb7\u1cfb\u1cff\u1d0d\u1d7b\u1d91\u1dab\u1dbb\u1dc6\u1dcdr\xf2\u0381ar;\u6965\u0200glrs\u1c48\u1c4d\u1c52\u1c54ger;\u6020eth;\u6138\xf2\u1133h\u0100;v\u1c5a\u1c5b\u6010\xbb\u090a\u016b\u1c61\u1c67arow;\u690fa\xe3\u0315\u0100ay\u1c6e\u1c73ron;\u410f;\u4434\u0180;ao\u0332\u1c7c\u1c84\u0100gr\u02bf\u1c81r;\u61catseq;\u6a77\u0180glm\u1c91\u1c94\u1c98\u803b\xb0\u40b0ta;\u43b4ptyv;\u69b1\u0100ir\u1ca3\u1ca8sht;\u697f;\uc000\ud835\udd21ar\u0100lr\u1cb3\u1cb5\xbb\u08dc\xbb\u101e\u0280aegsv\u1cc2\u0378\u1cd6\u1cdc\u1ce0m\u0180;os\u0326\u1cca\u1cd4nd\u0100;s\u0326\u1cd1uit;\u6666amma;\u43ddin;\u62f2\u0180;io\u1ce7\u1ce8\u1cf8\u40f7de\u8100\xf7;o\u1ce7\u1cf0ntimes;\u62c7n\xf8\u1cf7cy;\u4452c\u026f\u1d06\0\0\u1d0arn;\u631eop;\u630d\u0280lptuw\u1d18\u1d1d\u1d22\u1d49\u1d55lar;\u4024f;\uc000\ud835\udd55\u0280;emps\u030b\u1d2d\u1d37\u1d3d\u1d42q\u0100;d\u0352\u1d33ot;\u6251inus;\u6238lus;\u6214quare;\u62a1blebarwedg\xe5\xfan\u0180adh\u112e\u1d5d\u1d67ownarrow\xf3\u1c83arpoon\u0100lr\u1d72\u1d76ef\xf4\u1cb4igh\xf4\u1cb6\u0162\u1d7f\u1d85karo\xf7\u0f42\u026f\u1d8a\0\0\u1d8ern;\u631fop;\u630c\u0180cot\u1d98\u1da3\u1da6\u0100ry\u1d9d\u1da1;\uc000\ud835\udcb9;\u4455l;\u69f6rok;\u4111\u0100dr\u1db0\u1db4ot;\u62f1i\u0100;f\u1dba\u1816\u65bf\u0100ah\u1dc0\u1dc3r\xf2\u0429a\xf2\u0fa6angle;\u69a6\u0100ci\u1dd2\u1dd5y;\u445fgrarr;\u67ff\u0900Dacdefglmnopqrstux\u1e01\u1e09\u1e19\u1e38\u0578\u1e3c\u1e49\u1e61\u1e7e\u1ea5\u1eaf\u1ebd\u1ee1\u1f2a\u1f37\u1f44\u1f4e\u1f5a\u0100Do\u1e06\u1d34o\xf4\u1c89\u0100cs\u1e0e\u1e14ute\u803b\xe9\u40e9ter;\u6a6e\u0200aioy\u1e22\u1e27\u1e31\u1e36ron;\u411br\u0100;c\u1e2d\u1e2e\u6256\u803b\xea\u40ealon;\u6255;\u444dot;\u4117\u0100Dr\u1e41\u1e45ot;\u6252;\uc000\ud835\udd22\u0180;rs\u1e50\u1e51\u1e57\u6a9aave\u803b\xe8\u40e8\u0100;d\u1e5c\u1e5d\u6a96ot;\u6a98\u0200;ils\u1e6a\u1e6b\u1e72\u1e74\u6a99nters;\u63e7;\u6113\u0100;d\u1e79\u1e7a\u6a95ot;\u6a97\u0180aps\u1e85\u1e89\u1e97cr;\u4113ty\u0180;sv\u1e92\u1e93\u1e95\u6205et\xbb\u1e93p\u01001;\u1e9d\u1ea4\u0133\u1ea1\u1ea3;\u6004;\u6005\u6003\u0100gs\u1eaa\u1eac;\u414bp;\u6002\u0100gp\u1eb4\u1eb8on;\u4119f;\uc000\ud835\udd56\u0180als\u1ec4\u1ece\u1ed2r\u0100;s\u1eca\u1ecb\u62d5l;\u69e3us;\u6a71i\u0180;lv\u1eda\u1edb\u1edf\u43b5on\xbb\u1edb;\u43f5\u0200csuv\u1eea\u1ef3\u1f0b\u1f23\u0100io\u1eef\u1e31rc\xbb\u1e2e\u0269\u1ef9\0\0\u1efb\xed\u0548ant\u0100gl\u1f02\u1f06tr\xbb\u1e5dess\xbb\u1e7a\u0180aei\u1f12\u1f16\u1f1als;\u403dst;\u625fv\u0100;D\u0235\u1f20D;\u6a78parsl;\u69e5\u0100Da\u1f2f\u1f33ot;\u6253rr;\u6971\u0180cdi\u1f3e\u1f41\u1ef8r;\u612fo\xf4\u0352\u0100ah\u1f49\u1f4b;\u43b7\u803b\xf0\u40f0\u0100mr\u1f53\u1f57l\u803b\xeb\u40ebo;\u60ac\u0180cip\u1f61\u1f64\u1f67l;\u4021s\xf4\u056e\u0100eo\u1f6c\u1f74ctatio\xee\u0559nential\xe5\u0579\u09e1\u1f92\0\u1f9e\0\u1fa1\u1fa7\0\0\u1fc6\u1fcc\0\u1fd3\0\u1fe6\u1fea\u2000\0\u2008\u205allingdotse\xf1\u1e44y;\u4444male;\u6640\u0180ilr\u1fad\u1fb3\u1fc1lig;\u8000\ufb03\u0269\u1fb9\0\0\u1fbdg;\u8000\ufb00ig;\u8000\ufb04;\uc000\ud835\udd23lig;\u8000\ufb01lig;\uc000fj\u0180alt\u1fd9\u1fdc\u1fe1t;\u666dig;\u8000\ufb02ns;\u65b1of;\u4192\u01f0\u1fee\0\u1ff3f;\uc000\ud835\udd57\u0100ak\u05bf\u1ff7\u0100;v\u1ffc\u1ffd\u62d4;\u6ad9artint;\u6a0d\u0100ao\u200c\u2055\u0100cs\u2011\u2052\u03b1\u201a\u2030\u2038\u2045\u2048\0\u2050\u03b2\u2022\u2025\u2027\u202a\u202c\0\u202e\u803b\xbd\u40bd;\u6153\u803b\xbc\u40bc;\u6155;\u6159;\u615b\u01b3\u2034\0\u2036;\u6154;\u6156\u02b4\u203e\u2041\0\0\u2043\u803b\xbe\u40be;\u6157;\u615c5;\u6158\u01b6\u204c\0\u204e;\u615a;\u615d8;\u615el;\u6044wn;\u6322cr;\uc000\ud835\udcbb\u0880Eabcdefgijlnorstv\u2082\u2089\u209f\u20a5\u20b0\u20b4\u20f0\u20f5\u20fa\u20ff\u2103\u2112\u2138\u0317\u213e\u2152\u219e\u0100;l\u064d\u2087;\u6a8c\u0180cmp\u2090\u2095\u209dute;\u41f5ma\u0100;d\u209c\u1cda\u43b3;\u6a86reve;\u411f\u0100iy\u20aa\u20aerc;\u411d;\u4433ot;\u4121\u0200;lqs\u063e\u0642\u20bd\u20c9\u0180;qs\u063e\u064c\u20c4lan\xf4\u0665\u0200;cdl\u0665\u20d2\u20d5\u20e5c;\u6aa9ot\u0100;o\u20dc\u20dd\u6a80\u0100;l\u20e2\u20e3\u6a82;\u6a84\u0100;e\u20ea\u20ed\uc000\u22db\ufe00s;\u6a94r;\uc000\ud835\udd24\u0100;g\u0673\u061bmel;\u6137cy;\u4453\u0200;Eaj\u065a\u210c\u210e\u2110;\u6a92;\u6aa5;\u6aa4\u0200Eaes\u211b\u211d\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6a8arox\xbb\u2124\u0100;q\u212e\u212f\u6a88\u0100;q\u212e\u211bim;\u62e7pf;\uc000\ud835\udd58\u0100ci\u2143\u2146r;\u610am\u0180;el\u066b\u214e\u2150;\u6a8e;\u6a90\u8300>;cdlqr\u05ee\u2160\u216a\u216e\u2173\u2179\u0100ci\u2165\u2167;\u6aa7r;\u6a7aot;\u62d7Par;\u6995uest;\u6a7c\u0280adels\u2184\u216a\u2190\u0656\u219b\u01f0\u2189\0\u218epro\xf8\u209er;\u6978q\u0100lq\u063f\u2196les\xf3\u2088i\xed\u066b\u0100en\u21a3\u21adrtneqq;\uc000\u2269\ufe00\xc5\u21aa\u0500Aabcefkosy\u21c4\u21c7\u21f1\u21f5\u21fa\u2218\u221d\u222f\u2268\u227dr\xf2\u03a0\u0200ilmr\u21d0\u21d4\u21d7\u21dbrs\xf0\u1484f\xbb\u2024il\xf4\u06a9\u0100dr\u21e0\u21e4cy;\u444a\u0180;cw\u08f4\u21eb\u21efir;\u6948;\u61adar;\u610firc;\u4125\u0180alr\u2201\u220e\u2213rts\u0100;u\u2209\u220a\u6665it\xbb\u220alip;\u6026con;\u62b9r;\uc000\ud835\udd25s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223a\u223e\u2243\u225e\u2263rr;\u61fftht;\u623bk\u0100lr\u2249\u2253eftarrow;\u61a9ightarrow;\u61aaf;\uc000\ud835\udd59bar;\u6015\u0180clt\u226f\u2274\u2278r;\uc000\ud835\udcbdas\xe8\u21f4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xbb\u1c5b\u0ae1\u22a3\0\u22aa\0\u22b8\u22c5\u22ce\0\u22d5\u22f3\0\0\u22f8\u2322\u2367\u2362\u237f\0\u2386\u23aa\u23b4cute\u803b\xed\u40ed\u0180;iy\u0771\u22b0\u22b5rc\u803b\xee\u40ee;\u4438\u0100cx\u22bc\u22bfy;\u4435cl\u803b\xa1\u40a1\u0100fr\u039f\u22c9;\uc000\ud835\udd26rave\u803b\xec\u40ec\u0200;ino\u073e\u22dd\u22e9\u22ee\u0100in\u22e2\u22e6nt;\u6a0ct;\u622dfin;\u69dcta;\u6129lig;\u4133\u0180aop\u22fe\u231a\u231d\u0180cgt\u2305\u2308\u2317r;\u412b\u0180elp\u071f\u230f\u2313in\xe5\u078ear\xf4\u0720h;\u4131f;\u62b7ed;\u41b5\u0280;cfot\u04f4\u232c\u2331\u233d\u2341are;\u6105in\u0100;t\u2338\u2339\u621eie;\u69dddo\xf4\u2319\u0280;celp\u0757\u234c\u2350\u235b\u2361al;\u62ba\u0100gr\u2355\u2359er\xf3\u1563\xe3\u234darhk;\u6a17rod;\u6a3c\u0200cgpt\u236f\u2372\u2376\u237by;\u4451on;\u412ff;\uc000\ud835\udd5aa;\u43b9uest\u803b\xbf\u40bf\u0100ci\u238a\u238fr;\uc000\ud835\udcben\u0280;Edsv\u04f4\u239b\u239d\u23a1\u04f3;\u62f9ot;\u62f5\u0100;v\u23a6\u23a7\u62f4;\u62f3\u0100;i\u0777\u23aelde;\u4129\u01eb\u23b8\0\u23bccy;\u4456l\u803b\xef\u40ef\u0300cfmosu\u23cc\u23d7\u23dc\u23e1\u23e7\u23f5\u0100iy\u23d1\u23d5rc;\u4135;\u4439r;\uc000\ud835\udd27ath;\u4237pf;\uc000\ud835\udd5b\u01e3\u23ec\0\u23f1r;\uc000\ud835\udcbfrcy;\u4458kcy;\u4454\u0400acfghjos\u240b\u2416\u2422\u2427\u242d\u2431\u2435\u243bppa\u0100;v\u2413\u2414\u43ba;\u43f0\u0100ey\u241b\u2420dil;\u4137;\u443ar;\uc000\ud835\udd28reen;\u4138cy;\u4445cy;\u445cpf;\uc000\ud835\udd5ccr;\uc000\ud835\udcc0\u0b80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248d\u2491\u250e\u253d\u255a\u2580\u264e\u265e\u2665\u2679\u267d\u269a\u26b2\u26d8\u275d\u2768\u278b\u27c0\u2801\u2812\u0180art\u2477\u247a\u247cr\xf2\u09c6\xf2\u0395ail;\u691barr;\u690e\u0100;g\u0994\u248b;\u6a8bar;\u6962\u0963\u24a5\0\u24aa\0\u24b1\0\0\0\0\0\u24b5\u24ba\0\u24c6\u24c8\u24cd\0\u24f9ute;\u413amptyv;\u69b4ra\xee\u084cbda;\u43bbg\u0180;dl\u088e\u24c1\u24c3;\u6991\xe5\u088e;\u6a85uo\u803b\xab\u40abr\u0400;bfhlpst\u0899\u24de\u24e6\u24e9\u24eb\u24ee\u24f1\u24f5\u0100;f\u089d\u24e3s;\u691fs;\u691d\xeb\u2252p;\u61abl;\u6939im;\u6973l;\u61a2\u0180;ae\u24ff\u2500\u2504\u6aabil;\u6919\u0100;s\u2509\u250a\u6aad;\uc000\u2aad\ufe00\u0180abr\u2515\u2519\u251drr;\u690crk;\u6772\u0100ak\u2522\u252cc\u0100ek\u2528\u252a;\u407b;\u405b\u0100es\u2531\u2533;\u698bl\u0100du\u2539\u253b;\u698f;\u698d\u0200aeuy\u2546\u254b\u2556\u2558ron;\u413e\u0100di\u2550\u2554il;\u413c\xec\u08b0\xe2\u2529;\u443b\u0200cqrs\u2563\u2566\u256d\u257da;\u6936uo\u0100;r\u0e19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694bh;\u61b2\u0280;fgqs\u258b\u258c\u0989\u25f3\u25ff\u6264t\u0280ahlrt\u2598\u25a4\u25b7\u25c2\u25e8rrow\u0100;t\u0899\u25a1a\xe9\u24f6arpoon\u0100du\u25af\u25b4own\xbb\u045ap\xbb\u0966eftarrows;\u61c7ight\u0180ahs\u25cd\u25d6\u25derrow\u0100;s\u08f4\u08a7arpoon\xf3\u0f98quigarro\xf7\u21f0hreetimes;\u62cb\u0180;qs\u258b\u0993\u25falan\xf4\u09ac\u0280;cdgs\u09ac\u260a\u260d\u261d\u2628c;\u6aa8ot\u0100;o\u2614\u2615\u6a7f\u0100;r\u261a\u261b\u6a81;\u6a83\u0100;e\u2622\u2625\uc000\u22da\ufe00s;\u6a93\u0280adegs\u2633\u2639\u263d\u2649\u264bppro\xf8\u24c6ot;\u62d6q\u0100gq\u2643\u2645\xf4\u0989gt\xf2\u248c\xf4\u099bi\xed\u09b2\u0180ilr\u2655\u08e1\u265asht;\u697c;\uc000\ud835\udd29\u0100;E\u099c\u2663;\u6a91\u0161\u2669\u2676r\u0100du\u25b2\u266e\u0100;l\u0965\u2673;\u696alk;\u6584cy;\u4459\u0280;acht\u0a48\u2688\u268b\u2691\u2696r\xf2\u25c1orne\xf2\u1d08ard;\u696bri;\u65fa\u0100io\u269f\u26a4dot;\u4140ust\u0100;a\u26ac\u26ad\u63b0che\xbb\u26ad\u0200Eaes\u26bb\u26bd\u26c9\u26d4;\u6268p\u0100;p\u26c3\u26c4\u6a89rox\xbb\u26c4\u0100;q\u26ce\u26cf\u6a87\u0100;q\u26ce\u26bbim;\u62e6\u0400abnoptwz\u26e9\u26f4\u26f7\u271a\u272f\u2741\u2747\u2750\u0100nr\u26ee\u26f1g;\u67ecr;\u61fdr\xeb\u08c1g\u0180lmr\u26ff\u270d\u2714eft\u0100ar\u09e6\u2707ight\xe1\u09f2apsto;\u67fcight\xe1\u09fdparrow\u0100lr\u2725\u2729ef\xf4\u24edight;\u61ac\u0180afl\u2736\u2739\u273dr;\u6985;\uc000\ud835\udd5dus;\u6a2dimes;\u6a34\u0161\u274b\u274fst;\u6217\xe1\u134e\u0180;ef\u2757\u2758\u1800\u65cange\xbb\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277c\u2785\u2787r\xf2\u08a8orne\xf2\u1d8car\u0100;d\u0f98\u2783;\u696d;\u600eri;\u62bf\u0300achiqt\u2798\u279d\u0a40\u27a2\u27ae\u27bbquo;\u6039r;\uc000\ud835\udcc1m\u0180;eg\u09b2\u27aa\u27ac;\u6a8d;\u6a8f\u0100bu\u252a\u27b3o\u0100;r\u0e1f\u27b9;\u601arok;\u4142\u8400<;cdhilqr\u082b\u27d2\u2639\u27dc\u27e0\u27e5\u27ea\u27f0\u0100ci\u27d7\u27d9;\u6aa6r;\u6a79re\xe5\u25f2mes;\u62c9arr;\u6976uest;\u6a7b\u0100Pi\u27f5\u27f9ar;\u6996\u0180;ef\u2800\u092d\u181b\u65c3r\u0100du\u2807\u280dshar;\u694ahar;\u6966\u0100en\u2817\u2821rtneqq;\uc000\u2268\ufe00\xc5\u281e\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288e\u2893\u28a0\u28a5\u28a8\u28da\u28e2\u28e4\u0a83\u28f3\u2902Dot;\u623a\u0200clpr\u284e\u2852\u2863\u287dr\u803b\xaf\u40af\u0100et\u2857\u2859;\u6642\u0100;e\u285e\u285f\u6720se\xbb\u285f\u0100;s\u103b\u2868to\u0200;dlu\u103b\u2873\u2877\u287bow\xee\u048cef\xf4\u090f\xf0\u13d1ker;\u65ae\u0100oy\u2887\u288cmma;\u6a29;\u443cash;\u6014asuredangle\xbb\u1626r;\uc000\ud835\udd2ao;\u6127\u0180cdn\u28af\u28b4\u28c9ro\u803b\xb5\u40b5\u0200;acd\u1464\u28bd\u28c0\u28c4s\xf4\u16a7ir;\u6af0ot\u80bb\xb7\u01b5us\u0180;bd\u28d2\u1903\u28d3\u6212\u0100;u\u1d3c\u28d8;\u6a2a\u0163\u28de\u28e1p;\u6adb\xf2\u2212\xf0\u0a81\u0100dp\u28e9\u28eeels;\u62a7f;\uc000\ud835\udd5e\u0100ct\u28f8\u28fdr;\uc000\ud835\udcc2pos\xbb\u159d\u0180;lm\u2909\u290a\u290d\u43bctimap;\u62b8\u0c00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297e\u2989\u2998\u29da\u29e9\u2a15\u2a1a\u2a58\u2a5d\u2a83\u2a95\u2aa4\u2aa8\u2b04\u2b07\u2b44\u2b7f\u2bae\u2c34\u2c67\u2c7c\u2ce9\u0100gt\u2947\u294b;\uc000\u22d9\u0338\u0100;v\u2950\u0bcf\uc000\u226b\u20d2\u0180elt\u295a\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61cdightarrow;\u61ce;\uc000\u22d8\u0338\u0100;v\u297b\u0c47\uc000\u226a\u20d2ightarrow;\u61cf\u0100Dd\u298e\u2993ash;\u62afash;\u62ae\u0280bcnpt\u29a3\u29a7\u29ac\u29b1\u29ccla\xbb\u02deute;\u4144g;\uc000\u2220\u20d2\u0280;Eiop\u0d84\u29bc\u29c0\u29c5\u29c8;\uc000\u2a70\u0338d;\uc000\u224b\u0338s;\u4149ro\xf8\u0d84ur\u0100;a\u29d3\u29d4\u666el\u0100;s\u29d3\u0b38\u01f3\u29df\0\u29e3p\u80bb\xa0\u0b37mp\u0100;e\u0bf9\u0c00\u0280aeouy\u29f4\u29fe\u2a03\u2a10\u2a13\u01f0\u29f9\0\u29fb;\u6a43on;\u4148dil;\u4146ng\u0100;d\u0d7e\u2a0aot;\uc000\u2a6d\u0338p;\u6a42;\u443dash;\u6013\u0380;Aadqsx\u0b92\u2a29\u2a2d\u2a3b\u2a41\u2a45\u2a50rr;\u61d7r\u0100hr\u2a33\u2a36k;\u6924\u0100;o\u13f2\u13f0ot;\uc000\u2250\u0338ui\xf6\u0b63\u0100ei\u2a4a\u2a4ear;\u6928\xed\u0b98ist\u0100;s\u0ba0\u0b9fr;\uc000\ud835\udd2b\u0200Eest\u0bc5\u2a66\u2a79\u2a7c\u0180;qs\u0bbc\u2a6d\u0be1\u0180;qs\u0bbc\u0bc5\u2a74lan\xf4\u0be2i\xed\u0bea\u0100;r\u0bb6\u2a81\xbb\u0bb7\u0180Aap\u2a8a\u2a8d\u2a91r\xf2\u2971rr;\u61aear;\u6af2\u0180;sv\u0f8d\u2a9c\u0f8c\u0100;d\u2aa1\u2aa2\u62fc;\u62facy;\u445a\u0380AEadest\u2ab7\u2aba\u2abe\u2ac2\u2ac5\u2af6\u2af9r\xf2\u2966;\uc000\u2266\u0338rr;\u619ar;\u6025\u0200;fqs\u0c3b\u2ace\u2ae3\u2aeft\u0100ar\u2ad4\u2ad9rro\xf7\u2ac1ightarro\xf7\u2a90\u0180;qs\u0c3b\u2aba\u2aealan\xf4\u0c55\u0100;s\u0c55\u2af4\xbb\u0c36i\xed\u0c5d\u0100;r\u0c35\u2afei\u0100;e\u0c1a\u0c25i\xe4\u0d90\u0100pt\u2b0c\u2b11f;\uc000\ud835\udd5f\u8180\xac;in\u2b19\u2b1a\u2b36\u40acn\u0200;Edv\u0b89\u2b24\u2b28\u2b2e;\uc000\u22f9\u0338ot;\uc000\u22f5\u0338\u01e1\u0b89\u2b33\u2b35;\u62f7;\u62f6i\u0100;v\u0cb8\u2b3c\u01e1\u0cb8\u2b41\u2b43;\u62fe;\u62fd\u0180aor\u2b4b\u2b63\u2b69r\u0200;ast\u0b7b\u2b55\u2b5a\u2b5flle\xec\u0b7bl;\uc000\u2afd\u20e5;\uc000\u2202\u0338lint;\u6a14\u0180;ce\u0c92\u2b70\u2b73u\xe5\u0ca5\u0100;c\u0c98\u2b78\u0100;e\u0c92\u2b7d\xf1\u0c98\u0200Aait\u2b88\u2b8b\u2b9d\u2ba7r\xf2\u2988rr\u0180;cw\u2b94\u2b95\u2b99\u619b;\uc000\u2933\u0338;\uc000\u219d\u0338ghtarrow\xbb\u2b95ri\u0100;e\u0ccb\u0cd6\u0380chimpqu\u2bbd\u2bcd\u2bd9\u2b04\u0b78\u2be4\u2bef\u0200;cer\u0d32\u2bc6\u0d37\u2bc9u\xe5\u0d45;\uc000\ud835\udcc3ort\u026d\u2b05\0\0\u2bd6ar\xe1\u2b56m\u0100;e\u0d6e\u2bdf\u0100;q\u0d74\u0d73su\u0100bp\u2beb\u2bed\xe5\u0cf8\xe5\u0d0b\u0180bcp\u2bf6\u2c11\u2c19\u0200;Ees\u2bff\u2c00\u0d22\u2c04\u6284;\uc000\u2ac5\u0338et\u0100;e\u0d1b\u2c0bq\u0100;q\u0d23\u2c00c\u0100;e\u0d32\u2c17\xf1\u0d38\u0200;Ees\u2c22\u2c23\u0d5f\u2c27\u6285;\uc000\u2ac6\u0338et\u0100;e\u0d58\u2c2eq\u0100;q\u0d60\u2c23\u0200gilr\u2c3d\u2c3f\u2c45\u2c47\xec\u0bd7lde\u803b\xf1\u40f1\xe7\u0c43iangle\u0100lr\u2c52\u2c5ceft\u0100;e\u0c1a\u2c5a\xf1\u0c26ight\u0100;e\u0ccb\u2c65\xf1\u0cd7\u0100;m\u2c6c\u2c6d\u43bd\u0180;es\u2c74\u2c75\u2c79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2c8f\u2c94\u2c99\u2c9e\u2ca3\u2cb0\u2cb6\u2cd3\u2ce3ash;\u62adarr;\u6904p;\uc000\u224d\u20d2ash;\u62ac\u0100et\u2ca8\u2cac;\uc000\u2265\u20d2;\uc000>\u20d2nfin;\u69de\u0180Aet\u2cbd\u2cc1\u2cc5rr;\u6902;\uc000\u2264\u20d2\u0100;r\u2cca\u2ccd\uc000<\u20d2ie;\uc000\u22b4\u20d2\u0100At\u2cd8\u2cdcrr;\u6903rie;\uc000\u22b5\u20d2im;\uc000\u223c\u20d2\u0180Aan\u2cf0\u2cf4\u2d02rr;\u61d6r\u0100hr\u2cfa\u2cfdk;\u6923\u0100;o\u13e7\u13e5ear;\u6927\u1253\u1a95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2d2d\0\u2d38\u2d48\u2d60\u2d65\u2d72\u2d84\u1b07\0\0\u2d8d\u2dab\0\u2dc8\u2dce\0\u2ddc\u2e19\u2e2b\u2e3e\u2e43\u0100cs\u2d31\u1a97ute\u803b\xf3\u40f3\u0100iy\u2d3c\u2d45r\u0100;c\u1a9e\u2d42\u803b\xf4\u40f4;\u443e\u0280abios\u1aa0\u2d52\u2d57\u01c8\u2d5alac;\u4151v;\u6a38old;\u69bclig;\u4153\u0100cr\u2d69\u2d6dir;\u69bf;\uc000\ud835\udd2c\u036f\u2d79\0\0\u2d7c\0\u2d82n;\u42dbave\u803b\xf2\u40f2;\u69c1\u0100bm\u2d88\u0df4ar;\u69b5\u0200acit\u2d95\u2d98\u2da5\u2da8r\xf2\u1a80\u0100ir\u2d9d\u2da0r;\u69beoss;\u69bbn\xe5\u0e52;\u69c0\u0180aei\u2db1\u2db5\u2db9cr;\u414dga;\u43c9\u0180cdn\u2dc0\u2dc5\u01cdron;\u43bf;\u69b6pf;\uc000\ud835\udd60\u0180ael\u2dd4\u2dd7\u01d2r;\u69b7rp;\u69b9\u0380;adiosv\u2dea\u2deb\u2dee\u2e08\u2e0d\u2e10\u2e16\u6228r\xf2\u1a86\u0200;efm\u2df7\u2df8\u2e02\u2e05\u6a5dr\u0100;o\u2dfe\u2dff\u6134f\xbb\u2dff\u803b\xaa\u40aa\u803b\xba\u40bagof;\u62b6r;\u6a56lope;\u6a57;\u6a5b\u0180clo\u2e1f\u2e21\u2e27\xf2\u2e01ash\u803b\xf8\u40f8l;\u6298i\u016c\u2e2f\u2e34de\u803b\xf5\u40f5es\u0100;a\u01db\u2e3as;\u6a36ml\u803b\xf6\u40f6bar;\u633d\u0ae1\u2e5e\0\u2e7d\0\u2e80\u2e9d\0\u2ea2\u2eb9\0\0\u2ecb\u0e9c\0\u2f13\0\0\u2f2b\u2fbc\0\u2fc8r\u0200;ast\u0403\u2e67\u2e72\u0e85\u8100\xb6;l\u2e6d\u2e6e\u40b6le\xec\u0403\u0269\u2e78\0\0\u2e7bm;\u6af3;\u6afdy;\u443fr\u0280cimpt\u2e8b\u2e8f\u2e93\u1865\u2e97nt;\u4025od;\u402eil;\u6030enk;\u6031r;\uc000\ud835\udd2d\u0180imo\u2ea8\u2eb0\u2eb4\u0100;v\u2ead\u2eae\u43c6;\u43d5ma\xf4\u0a76ne;\u660e\u0180;tv\u2ebf\u2ec0\u2ec8\u43c0chfork\xbb\u1ffd;\u43d6\u0100au\u2ecf\u2edfn\u0100ck\u2ed5\u2eddk\u0100;h\u21f4\u2edb;\u610e\xf6\u21f4s\u0480;abcdemst\u2ef3\u2ef4\u1908\u2ef9\u2efd\u2f04\u2f06\u2f0a\u2f0e\u402bcir;\u6a23ir;\u6a22\u0100ou\u1d40\u2f02;\u6a25;\u6a72n\u80bb\xb1\u0e9dim;\u6a26wo;\u6a27\u0180ipu\u2f19\u2f20\u2f25ntint;\u6a15f;\uc000\ud835\udd61nd\u803b\xa3\u40a3\u0500;Eaceinosu\u0ec8\u2f3f\u2f41\u2f44\u2f47\u2f81\u2f89\u2f92\u2f7e\u2fb6;\u6ab3p;\u6ab7u\xe5\u0ed9\u0100;c\u0ece\u2f4c\u0300;acens\u0ec8\u2f59\u2f5f\u2f66\u2f68\u2f7eppro\xf8\u2f43urlye\xf1\u0ed9\xf1\u0ece\u0180aes\u2f6f\u2f76\u2f7approx;\u6ab9qq;\u6ab5im;\u62e8i\xed\u0edfme\u0100;s\u2f88\u0eae\u6032\u0180Eas\u2f78\u2f90\u2f7a\xf0\u2f75\u0180dfp\u0eec\u2f99\u2faf\u0180als\u2fa0\u2fa5\u2faalar;\u632eine;\u6312urf;\u6313\u0100;t\u0efb\u2fb4\xef\u0efbrel;\u62b0\u0100ci\u2fc0\u2fc5r;\uc000\ud835\udcc5;\u43c8ncsp;\u6008\u0300fiopsu\u2fda\u22e2\u2fdf\u2fe5\u2feb\u2ff1r;\uc000\ud835\udd2epf;\uc000\ud835\udd62rime;\u6057cr;\uc000\ud835\udcc6\u0180aeo\u2ff8\u3009\u3013t\u0100ei\u2ffe\u3005rnion\xf3\u06b0nt;\u6a16st\u0100;e\u3010\u3011\u403f\xf1\u1f19\xf4\u0f14\u0a80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30e0\u310e\u312b\u3147\u3162\u3172\u318e\u3206\u3215\u3224\u3229\u3258\u326e\u3272\u3290\u32b0\u32b7\u0180art\u3047\u304a\u304cr\xf2\u10b3\xf2\u03ddail;\u691car\xf2\u1c65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307f\u308f\u3094\u30cc\u0100eu\u306d\u3071;\uc000\u223d\u0331te;\u4155i\xe3\u116emptyv;\u69b3g\u0200;del\u0fd1\u3089\u308b\u308d;\u6992;\u69a5\xe5\u0fd1uo\u803b\xbb\u40bbr\u0580;abcfhlpstw\u0fdc\u30ac\u30af\u30b7\u30b9\u30bc\u30be\u30c0\u30c3\u30c7\u30cap;\u6975\u0100;f\u0fe0\u30b4s;\u6920;\u6933s;\u691e\xeb\u225d\xf0\u272el;\u6945im;\u6974l;\u61a3;\u619d\u0100ai\u30d1\u30d5il;\u691ao\u0100;n\u30db\u30dc\u6236al\xf3\u0f1e\u0180abr\u30e7\u30ea\u30eer\xf2\u17e5rk;\u6773\u0100ak\u30f3\u30fdc\u0100ek\u30f9\u30fb;\u407d;\u405d\u0100es\u3102\u3104;\u698cl\u0100du\u310a\u310c;\u698e;\u6990\u0200aeuy\u3117\u311c\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xec\u0ff2\xe2\u30fa;\u4440\u0200clqs\u3134\u3137\u313d\u3144a;\u6937dhar;\u6969uo\u0100;r\u020e\u020dh;\u61b3\u0180acg\u314e\u315f\u0f44l\u0200;ips\u0f78\u3158\u315b\u109cn\xe5\u10bbar\xf4\u0fa9t;\u65ad\u0180ilr\u3169\u1023\u316esht;\u697d;\uc000\ud835\udd2f\u0100ao\u3177\u3186r\u0100du\u317d\u317f\xbb\u047b\u0100;l\u1091\u3184;\u696c\u0100;v\u318b\u318c\u43c1;\u43f1\u0180gns\u3195\u31f9\u31fcht\u0300ahlrst\u31a4\u31b0\u31c2\u31d8\u31e4\u31eerrow\u0100;t\u0fdc\u31ada\xe9\u30c8arpoon\u0100du\u31bb\u31bfow\xee\u317ep\xbb\u1092eft\u0100ah\u31ca\u31d0rrow\xf3\u0feaarpoon\xf3\u0551ightarrows;\u61c9quigarro\xf7\u30cbhreetimes;\u62ccg;\u42daingdotse\xf1\u1f32\u0180ahm\u320d\u3210\u3213r\xf2\u0feaa\xf2\u0551;\u600foust\u0100;a\u321e\u321f\u63b1che\xbb\u321fmid;\u6aee\u0200abpt\u3232\u323d\u3240\u3252\u0100nr\u3237\u323ag;\u67edr;\u61fer\xeb\u1003\u0180afl\u3247\u324a\u324er;\u6986;\uc000\ud835\udd63us;\u6a2eimes;\u6a35\u0100ap\u325d\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6a12ar\xf2\u31e3\u0200achq\u327b\u3280\u10bc\u3285quo;\u603ar;\uc000\ud835\udcc7\u0100bu\u30fb\u328ao\u0100;r\u0214\u0213\u0180hir\u3297\u329b\u32a0re\xe5\u31f8mes;\u62cai\u0200;efl\u32aa\u1059\u1821\u32ab\u65b9tri;\u69celuhar;\u6968;\u611e\u0d61\u32d5\u32db\u32df\u332c\u3338\u3371\0\u337a\u33a4\0\0\u33ec\u33f0\0\u3428\u3448\u345a\u34ad\u34b1\u34ca\u34f1\0\u3616\0\0\u3633cute;\u415bqu\xef\u27ba\u0500;Eaceinpsy\u11ed\u32f3\u32f5\u32ff\u3302\u330b\u330f\u331f\u3326\u3329;\u6ab4\u01f0\u32fa\0\u32fc;\u6ab8on;\u4161u\xe5\u11fe\u0100;d\u11f3\u3307il;\u415frc;\u415d\u0180Eas\u3316\u3318\u331b;\u6ab6p;\u6abaim;\u62e9olint;\u6a13i\xed\u1204;\u4441ot\u0180;be\u3334\u1d47\u3335\u62c5;\u6a66\u0380Aacmstx\u3346\u334a\u3357\u335b\u335e\u3363\u336drr;\u61d8r\u0100hr\u3350\u3352\xeb\u2228\u0100;o\u0a36\u0a34t\u803b\xa7\u40a7i;\u403bwar;\u6929m\u0100in\u3369\xf0nu\xf3\xf1t;\u6736r\u0100;o\u3376\u2055\uc000\ud835\udd30\u0200acoy\u3382\u3386\u3391\u33a0rp;\u666f\u0100hy\u338b\u338fcy;\u4449;\u4448rt\u026d\u3399\0\0\u339ci\xe4\u1464ara\xec\u2e6f\u803b\xad\u40ad\u0100gm\u33a8\u33b4ma\u0180;fv\u33b1\u33b2\u33b2\u43c3;\u43c2\u0400;deglnpr\u12ab\u33c5\u33c9\u33ce\u33d6\u33de\u33e1\u33e6ot;\u6a6a\u0100;q\u12b1\u12b0\u0100;E\u33d3\u33d4\u6a9e;\u6aa0\u0100;E\u33db\u33dc\u6a9d;\u6a9fe;\u6246lus;\u6a24arr;\u6972ar\xf2\u113d\u0200aeit\u33f8\u3408\u340f\u3417\u0100ls\u33fd\u3404lsetm\xe9\u336ahp;\u6a33parsl;\u69e4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341c\u341d\u6aaa\u0100;s\u3422\u3423\u6aac;\uc000\u2aac\ufe00\u0180flp\u342e\u3433\u3442tcy;\u444c\u0100;b\u3438\u3439\u402f\u0100;a\u343e\u343f\u69c4r;\u633ff;\uc000\ud835\udd64a\u0100dr\u344d\u0402es\u0100;u\u3454\u3455\u6660it\xbb\u3455\u0180csu\u3460\u3479\u349f\u0100au\u3465\u346fp\u0100;s\u1188\u346b;\uc000\u2293\ufe00p\u0100;s\u11b4\u3475;\uc000\u2294\ufe00u\u0100bp\u347f\u348f\u0180;es\u1197\u119c\u3486et\u0100;e\u1197\u348d\xf1\u119d\u0180;es\u11a8\u11ad\u3496et\u0100;e\u11a8\u349d\xf1\u11ae\u0180;af\u117b\u34a6\u05b0r\u0165\u34ab\u05b1\xbb\u117car\xf2\u1148\u0200cemt\u34b9\u34be\u34c2\u34c5r;\uc000\ud835\udcc8tm\xee\xf1i\xec\u3415ar\xe6\u11be\u0100ar\u34ce\u34d5r\u0100;f\u34d4\u17bf\u6606\u0100an\u34da\u34edight\u0100ep\u34e3\u34eapsilo\xee\u1ee0h\xe9\u2eafs\xbb\u2852\u0280bcmnp\u34fb\u355e\u1209\u358b\u358e\u0480;Edemnprs\u350e\u350f\u3511\u3515\u351e\u3523\u352c\u3531\u3536\u6282;\u6ac5ot;\u6abd\u0100;d\u11da\u351aot;\u6ac3ult;\u6ac1\u0100Ee\u3528\u352a;\u6acb;\u628alus;\u6abfarr;\u6979\u0180eiu\u353d\u3552\u3555t\u0180;en\u350e\u3545\u354bq\u0100;q\u11da\u350feq\u0100;q\u352b\u3528m;\u6ac7\u0100bp\u355a\u355c;\u6ad5;\u6ad3c\u0300;acens\u11ed\u356c\u3572\u3579\u357b\u3326ppro\xf8\u32faurlye\xf1\u11fe\xf1\u11f3\u0180aes\u3582\u3588\u331bppro\xf8\u331aq\xf1\u3317g;\u666a\u0680123;Edehlmnps\u35a9\u35ac\u35af\u121c\u35b2\u35b4\u35c0\u35c9\u35d5\u35da\u35df\u35e8\u35ed\u803b\xb9\u40b9\u803b\xb2\u40b2\u803b\xb3\u40b3;\u6ac6\u0100os\u35b9\u35bct;\u6abeub;\u6ad8\u0100;d\u1222\u35c5ot;\u6ac4s\u0100ou\u35cf\u35d2l;\u67c9b;\u6ad7arr;\u697bult;\u6ac2\u0100Ee\u35e4\u35e6;\u6acc;\u628blus;\u6ac0\u0180eiu\u35f4\u3609\u360ct\u0180;en\u121c\u35fc\u3602q\u0100;q\u1222\u35b2eq\u0100;q\u35e7\u35e4m;\u6ac8\u0100bp\u3611\u3613;\u6ad4;\u6ad6\u0180Aan\u361c\u3620\u362drr;\u61d9r\u0100hr\u3626\u3628\xeb\u222e\u0100;o\u0a2b\u0a29war;\u692alig\u803b\xdf\u40df\u0be1\u3651\u365d\u3660\u12ce\u3673\u3679\0\u367e\u36c2\0\0\0\0\0\u36db\u3703\0\u3709\u376c\0\0\0\u3787\u0272\u3656\0\0\u365bget;\u6316;\u43c4r\xeb\u0e5f\u0180aey\u3666\u366b\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uc000\ud835\udd31\u0200eiko\u3686\u369d\u36b5\u36bc\u01f2\u368b\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369b\u43b8ym;\u43d1\u0100cn\u36a2\u36b2k\u0100as\u36a8\u36aeppro\xf8\u12c1im\xbb\u12acs\xf0\u129e\u0100as\u36ba\u36ae\xf0\u12c1rn\u803b\xfe\u40fe\u01ec\u031f\u36c6\u22e7es\u8180\xd7;bd\u36cf\u36d0\u36d8\u40d7\u0100;a\u190f\u36d5r;\u6a31;\u6a30\u0180eps\u36e1\u36e3\u3700\xe1\u2a4d\u0200;bcf\u0486\u36ec\u36f0\u36f4ot;\u6336ir;\u6af1\u0100;o\u36f9\u36fc\uc000\ud835\udd65rk;\u6ada\xe1\u3362rime;\u6034\u0180aip\u370f\u3712\u3764d\xe5\u1248\u0380adempst\u3721\u374d\u3740\u3751\u3757\u375c\u375fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65b5own\xbb\u1dbbeft\u0100;e\u2800\u373e\xf1\u092e;\u625cight\u0100;e\u32aa\u374b\xf1\u105aot;\u65ecinus;\u6a3alus;\u6a39b;\u69cdime;\u6a3bezium;\u63e2\u0180cht\u3772\u377d\u3781\u0100ry\u3777\u377b;\uc000\ud835\udcc9;\u4446cy;\u445brok;\u4167\u0100io\u378b\u378ex\xf4\u1777head\u0100lr\u3797\u37a0eftarro\xf7\u084fightarrow\xbb\u0f5d\u0900AHabcdfghlmoprstuw\u37d0\u37d3\u37d7\u37e4\u37f0\u37fc\u380e\u381c\u3823\u3834\u3851\u385d\u386b\u38a9\u38cc\u38d2\u38ea\u38f6r\xf2\u03edar;\u6963\u0100cr\u37dc\u37e2ute\u803b\xfa\u40fa\xf2\u1150r\u01e3\u37ea\0\u37edy;\u445eve;\u416d\u0100iy\u37f5\u37farc\u803b\xfb\u40fb;\u4443\u0180abh\u3803\u3806\u380br\xf2\u13adlac;\u4171a\xf2\u13c3\u0100ir\u3813\u3818sht;\u697e;\uc000\ud835\udd32rave\u803b\xf9\u40f9\u0161\u3827\u3831r\u0100lr\u382c\u382e\xbb\u0957\xbb\u1083lk;\u6580\u0100ct\u3839\u384d\u026f\u383f\0\0\u384arn\u0100;e\u3845\u3846\u631cr\xbb\u3846op;\u630fri;\u65f8\u0100al\u3856\u385acr;\u416b\u80bb\xa8\u0349\u0100gp\u3862\u3866on;\u4173f;\uc000\ud835\udd66\u0300adhlsu\u114b\u3878\u387d\u1372\u3891\u38a0own\xe1\u13b3arpoon\u0100lr\u3888\u388cef\xf4\u382digh\xf4\u382fi\u0180;hl\u3899\u389a\u389c\u43c5\xbb\u13faon\xbb\u389aparrows;\u61c8\u0180cit\u38b0\u38c4\u38c8\u026f\u38b6\0\0\u38c1rn\u0100;e\u38bc\u38bd\u631dr\xbb\u38bdop;\u630eng;\u416fri;\u65f9cr;\uc000\ud835\udcca\u0180dir\u38d9\u38dd\u38e2ot;\u62f0lde;\u4169i\u0100;f\u3730\u38e8\xbb\u1813\u0100am\u38ef\u38f2r\xf2\u38a8l\u803b\xfc\u40fcangle;\u69a7\u0780ABDacdeflnoprsz\u391c\u391f\u3929\u392d\u39b5\u39b8\u39bd\u39df\u39e4\u39e8\u39f3\u39f9\u39fd\u3a01\u3a20r\xf2\u03f7ar\u0100;v\u3926\u3927\u6ae8;\u6ae9as\xe8\u03e1\u0100nr\u3932\u3937grt;\u699c\u0380eknprst\u34e3\u3946\u394b\u3952\u395d\u3964\u3996app\xe1\u2415othin\xe7\u1e96\u0180hir\u34eb\u2ec8\u3959op\xf4\u2fb5\u0100;h\u13b7\u3962\xef\u318d\u0100iu\u3969\u396dgm\xe1\u33b3\u0100bp\u3972\u3984setneq\u0100;q\u397d\u3980\uc000\u228a\ufe00;\uc000\u2acb\ufe00setneq\u0100;q\u398f\u3992\uc000\u228b\ufe00;\uc000\u2acc\ufe00\u0100hr\u399b\u399fet\xe1\u369ciangle\u0100lr\u39aa\u39afeft\xbb\u0925ight\xbb\u1051y;\u4432ash\xbb\u1036\u0180elr\u39c4\u39d2\u39d7\u0180;be\u2dea\u39cb\u39cfar;\u62bbq;\u625alip;\u62ee\u0100bt\u39dc\u1468a\xf2\u1469r;\uc000\ud835\udd33tr\xe9\u39aesu\u0100bp\u39ef\u39f1\xbb\u0d1c\xbb\u0d59pf;\uc000\ud835\udd67ro\xf0\u0efbtr\xe9\u39b4\u0100cu\u3a06\u3a0br;\uc000\ud835\udccb\u0100bp\u3a10\u3a18n\u0100Ee\u3980\u3a16\xbb\u397en\u0100Ee\u3992\u3a1e\xbb\u3990igzag;\u699a\u0380cefoprs\u3a36\u3a3b\u3a56\u3a5b\u3a54\u3a61\u3a6airc;\u4175\u0100di\u3a40\u3a51\u0100bg\u3a45\u3a49ar;\u6a5fe\u0100;q\u15fa\u3a4f;\u6259erp;\u6118r;\uc000\ud835\udd34pf;\uc000\ud835\udd68\u0100;e\u1479\u3a66at\xe8\u1479cr;\uc000\ud835\udccc\u0ae3\u178e\u3a87\0\u3a8b\0\u3a90\u3a9b\0\0\u3a9d\u3aa8\u3aab\u3aaf\0\0\u3ac3\u3ace\0\u3ad8\u17dc\u17dftr\xe9\u17d1r;\uc000\ud835\udd35\u0100Aa\u3a94\u3a97r\xf2\u03c3r\xf2\u09f6;\u43be\u0100Aa\u3aa1\u3aa4r\xf2\u03b8r\xf2\u09eba\xf0\u2713is;\u62fb\u0180dpt\u17a4\u3ab5\u3abe\u0100fl\u3aba\u17a9;\uc000\ud835\udd69im\xe5\u17b2\u0100Aa\u3ac7\u3acar\xf2\u03cer\xf2\u0a01\u0100cq\u3ad2\u17b8r;\uc000\ud835\udccd\u0100pt\u17d6\u3adcr\xe9\u17d4\u0400acefiosu\u3af0\u3afd\u3b08\u3b0c\u3b11\u3b15\u3b1b\u3b21c\u0100uy\u3af6\u3afbte\u803b\xfd\u40fd;\u444f\u0100iy\u3b02\u3b06rc;\u4177;\u444bn\u803b\xa5\u40a5r;\uc000\ud835\udd36cy;\u4457pf;\uc000\ud835\udd6acr;\uc000\ud835\udcce\u0100cm\u3b26\u3b29y;\u444el\u803b\xff\u40ff\u0500acdefhiosw\u3b42\u3b48\u3b54\u3b58\u3b64\u3b69\u3b6d\u3b74\u3b7a\u3b80cute;\u417a\u0100ay\u3b4d\u3b52ron;\u417e;\u4437ot;\u417c\u0100et\u3b5d\u3b61tr\xe6\u155fa;\u43b6r;\uc000\ud835\udd37cy;\u4436grarr;\u61ddpf;\uc000\ud835\udd6bcr;\uc000\ud835\udccf\u0100jn\u3b85\u3b87;\u600dj;\u600c" + .split("") + .map(function (c) { return c.charCodeAt(0); })); +//# sourceMappingURL=decode-data-html.js.map -ParserBlock.prototype.State = __nccwpck_require__(1368); +/***/ }), +/***/ 7305: +/***/ ((__unused_webpack_module, exports) => { -module.exports = ParserBlock; +"use strict"; +// Generated using scripts/write-decode-map.ts +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports["default"] = new Uint16Array( +// prettier-ignore +"\u0200aglq\t\x15\x18\x1b\u026d\x0f\0\0\x12p;\u4026os;\u4027t;\u403et;\u403cuot;\u4022" + .split("") + .map(function (c) { return c.charCodeAt(0); })); +//# sourceMappingURL=decode-data-xml.js.map /***/ }), -/***/ 6234: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 6468: +/***/ ((__unused_webpack_module, exports) => { "use strict"; -/** internal - * class Core - * - * Top-level rules executor. Glues block/inline parsers and does intermediate - * transformations. - **/ +// Generated using scripts/write-encode-map.ts +Object.defineProperty(exports, "__esModule", ({ value: true })); +function restoreDiff(arr) { + for (var i = 1; i < arr.length; i++) { + arr[i][0] += arr[i - 1][0] + 1; + } + return arr; +} +// prettier-ignore +exports["default"] = new Map(/* #__PURE__ */ restoreDiff([[9, " "], [0, " "], [22, "!"], [0, """], [0, "#"], [0, "$"], [0, "%"], [0, "&"], [0, "'"], [0, "("], [0, ")"], [0, "*"], [0, "+"], [0, ","], [1, "."], [0, "/"], [10, ":"], [0, ";"], [0, { v: "<", n: 8402, o: "<⃒" }], [0, { v: "=", n: 8421, o: "=⃥" }], [0, { v: ">", n: 8402, o: ">⃒" }], [0, "?"], [0, "@"], [26, "["], [0, "\"], [0, "]"], [0, "^"], [0, "_"], [0, "`"], [5, { n: 106, o: "fj" }], [20, "{"], [0, "|"], [0, "}"], [34, " "], [0, "¡"], [0, "¢"], [0, "£"], [0, "¤"], [0, "¥"], [0, "¦"], [0, "§"], [0, "¨"], [0, "©"], [0, "ª"], [0, "«"], [0, "¬"], [0, "­"], [0, "®"], [0, "¯"], [0, "°"], [0, "±"], [0, "²"], [0, "³"], [0, "´"], [0, "µ"], [0, "¶"], [0, "·"], [0, "¸"], [0, "¹"], [0, "º"], [0, "»"], [0, "¼"], [0, "½"], [0, "¾"], [0, "¿"], [0, "À"], [0, "Á"], [0, "Â"], [0, "Ã"], [0, "Ä"], [0, "Å"], [0, "Æ"], [0, "Ç"], [0, "È"], [0, "É"], [0, "Ê"], [0, "Ë"], [0, "Ì"], [0, "Í"], [0, "Î"], [0, "Ï"], [0, "Ð"], [0, "Ñ"], [0, "Ò"], [0, "Ó"], [0, "Ô"], [0, "Õ"], [0, "Ö"], [0, "×"], [0, "Ø"], [0, "Ù"], [0, "Ú"], [0, "Û"], [0, "Ü"], [0, "Ý"], [0, "Þ"], [0, "ß"], [0, "à"], [0, "á"], [0, "â"], [0, "ã"], [0, "ä"], [0, "å"], [0, "æ"], [0, "ç"], [0, "è"], [0, "é"], [0, "ê"], [0, "ë"], [0, "ì"], [0, "í"], [0, "î"], [0, "ï"], [0, "ð"], [0, "ñ"], [0, "ò"], [0, "ó"], [0, "ô"], [0, "õ"], [0, "ö"], [0, "÷"], [0, "ø"], [0, "ù"], [0, "ú"], [0, "û"], [0, "ü"], [0, "ý"], [0, "þ"], [0, "ÿ"], [0, "Ā"], [0, "ā"], [0, "Ă"], [0, "ă"], [0, "Ą"], [0, "ą"], [0, "Ć"], [0, "ć"], [0, "Ĉ"], [0, "ĉ"], [0, "Ċ"], [0, "ċ"], [0, "Č"], [0, "č"], [0, "Ď"], [0, "ď"], [0, "Đ"], [0, "đ"], [0, "Ē"], [0, "ē"], [2, "Ė"], [0, "ė"], [0, "Ę"], [0, "ę"], [0, "Ě"], [0, "ě"], [0, "Ĝ"], [0, "ĝ"], [0, "Ğ"], [0, "ğ"], [0, "Ġ"], [0, "ġ"], [0, "Ģ"], [1, "Ĥ"], [0, "ĥ"], [0, "Ħ"], [0, "ħ"], [0, "Ĩ"], [0, "ĩ"], [0, "Ī"], [0, "ī"], [2, "Į"], [0, "į"], [0, "İ"], [0, "ı"], [0, "IJ"], [0, "ij"], [0, "Ĵ"], [0, "ĵ"], [0, "Ķ"], [0, "ķ"], [0, "ĸ"], [0, "Ĺ"], [0, "ĺ"], [0, "Ļ"], [0, "ļ"], [0, "Ľ"], [0, "ľ"], [0, "Ŀ"], [0, "ŀ"], [0, "Ł"], [0, "ł"], [0, "Ń"], [0, "ń"], [0, "Ņ"], [0, "ņ"], [0, "Ň"], [0, "ň"], [0, "ʼn"], [0, "Ŋ"], [0, "ŋ"], [0, "Ō"], [0, "ō"], [2, "Ő"], [0, "ő"], [0, "Œ"], [0, "œ"], [0, "Ŕ"], [0, "ŕ"], [0, "Ŗ"], [0, "ŗ"], [0, "Ř"], [0, "ř"], [0, "Ś"], [0, "ś"], [0, "Ŝ"], [0, "ŝ"], [0, "Ş"], [0, "ş"], [0, "Š"], [0, "š"], [0, "Ţ"], [0, "ţ"], [0, "Ť"], [0, "ť"], [0, "Ŧ"], [0, "ŧ"], [0, "Ũ"], [0, "ũ"], [0, "Ū"], [0, "ū"], [0, "Ŭ"], [0, "ŭ"], [0, "Ů"], [0, "ů"], [0, "Ű"], [0, "ű"], [0, "Ų"], [0, "ų"], [0, "Ŵ"], [0, "ŵ"], [0, "Ŷ"], [0, "ŷ"], [0, "Ÿ"], [0, "Ź"], [0, "ź"], [0, "Ż"], [0, "ż"], [0, "Ž"], [0, "ž"], [19, "ƒ"], [34, "Ƶ"], [63, "ǵ"], [65, "ȷ"], [142, "ˆ"], [0, "ˇ"], [16, "˘"], [0, "˙"], [0, "˚"], [0, "˛"], [0, "˜"], [0, "˝"], [51, "̑"], [127, "Α"], [0, "Β"], [0, "Γ"], [0, "Δ"], [0, "Ε"], [0, "Ζ"], [0, "Η"], [0, "Θ"], [0, "Ι"], [0, "Κ"], [0, "Λ"], [0, "Μ"], [0, "Ν"], [0, "Ξ"], [0, "Ο"], [0, "Π"], [0, "Ρ"], [1, "Σ"], [0, "Τ"], [0, "Υ"], [0, "Φ"], [0, "Χ"], [0, "Ψ"], [0, "Ω"], [7, "α"], [0, "β"], [0, "γ"], [0, "δ"], [0, "ε"], [0, "ζ"], [0, "η"], [0, "θ"], [0, "ι"], [0, "κ"], [0, "λ"], [0, "μ"], [0, "ν"], [0, "ξ"], [0, "ο"], [0, "π"], [0, "ρ"], [0, "ς"], [0, "σ"], [0, "τ"], [0, "υ"], [0, "φ"], [0, "χ"], [0, "ψ"], [0, "ω"], [7, "ϑ"], [0, "ϒ"], [2, "ϕ"], [0, "ϖ"], [5, "Ϝ"], [0, "ϝ"], [18, "ϰ"], [0, "ϱ"], [3, "ϵ"], [0, "϶"], [10, "Ё"], [0, "Ђ"], [0, "Ѓ"], [0, "Є"], [0, "Ѕ"], [0, "І"], [0, "Ї"], [0, "Ј"], [0, "Љ"], [0, "Њ"], [0, "Ћ"], [0, "Ќ"], [1, "Ў"], [0, "Џ"], [0, "А"], [0, "Б"], [0, "В"], [0, "Г"], [0, "Д"], [0, "Е"], [0, "Ж"], [0, "З"], [0, "И"], [0, "Й"], [0, "К"], [0, "Л"], [0, "М"], [0, "Н"], [0, "О"], [0, "П"], [0, "Р"], [0, "С"], [0, "Т"], [0, "У"], [0, "Ф"], [0, "Х"], [0, "Ц"], [0, "Ч"], [0, "Ш"], [0, "Щ"], [0, "Ъ"], [0, "Ы"], [0, "Ь"], [0, "Э"], [0, "Ю"], [0, "Я"], [0, "а"], [0, "б"], [0, "в"], [0, "г"], [0, "д"], [0, "е"], [0, "ж"], [0, "з"], [0, "и"], [0, "й"], [0, "к"], [0, "л"], [0, "м"], [0, "н"], [0, "о"], [0, "п"], [0, "р"], [0, "с"], [0, "т"], [0, "у"], [0, "ф"], [0, "х"], [0, "ц"], [0, "ч"], [0, "ш"], [0, "щ"], [0, "ъ"], [0, "ы"], [0, "ь"], [0, "э"], [0, "ю"], [0, "я"], [1, "ё"], [0, "ђ"], [0, "ѓ"], [0, "є"], [0, "ѕ"], [0, "і"], [0, "ї"], [0, "ј"], [0, "љ"], [0, "њ"], [0, "ћ"], [0, "ќ"], [1, "ў"], [0, "џ"], [7074, " "], [0, " "], [0, " "], [0, " "], [1, " "], [0, " "], [0, " "], [0, " "], [0, "​"], [0, "‌"], [0, "‍"], [0, "‎"], [0, "‏"], [0, "‐"], [2, "–"], [0, "—"], [0, "―"], [0, "‖"], [1, "‘"], [0, "’"], [0, "‚"], [1, "“"], [0, "”"], [0, "„"], [1, "†"], [0, "‡"], [0, "•"], [2, "‥"], [0, "…"], [9, "‰"], [0, "‱"], [0, "′"], [0, "″"], [0, "‴"], [0, "‵"], [3, "‹"], [0, "›"], [3, "‾"], [2, "⁁"], [1, "⁃"], [0, "⁄"], [10, "⁏"], [7, "⁗"], [7, { v: " ", n: 8202, o: "  " }], [0, "⁠"], [0, "⁡"], [0, "⁢"], [0, "⁣"], [72, "€"], [46, "⃛"], [0, "⃜"], [37, "ℂ"], [2, "℅"], [4, "ℊ"], [0, "ℋ"], [0, "ℌ"], [0, "ℍ"], [0, "ℎ"], [0, "ℏ"], [0, "ℐ"], [0, "ℑ"], [0, "ℒ"], [0, "ℓ"], [1, "ℕ"], [0, "№"], [0, "℗"], [0, "℘"], [0, "ℙ"], [0, "ℚ"], [0, "ℛ"], [0, "ℜ"], [0, "ℝ"], [0, "℞"], [3, "™"], [1, "ℤ"], [2, "℧"], [0, "ℨ"], [0, "℩"], [2, "ℬ"], [0, "ℭ"], [1, "ℯ"], [0, "ℰ"], [0, "ℱ"], [1, "ℳ"], [0, "ℴ"], [0, "ℵ"], [0, "ℶ"], [0, "ℷ"], [0, "ℸ"], [12, "ⅅ"], [0, "ⅆ"], [0, "ⅇ"], [0, "ⅈ"], [10, "⅓"], [0, "⅔"], [0, "⅕"], [0, "⅖"], [0, "⅗"], [0, "⅘"], [0, "⅙"], [0, "⅚"], [0, "⅛"], [0, "⅜"], [0, "⅝"], [0, "⅞"], [49, "←"], [0, "↑"], [0, "→"], [0, "↓"], [0, "↔"], [0, "↕"], [0, "↖"], [0, "↗"], [0, "↘"], [0, "↙"], [0, "↚"], [0, "↛"], [1, { v: "↝", n: 824, o: "↝̸" }], [0, "↞"], [0, "↟"], [0, "↠"], [0, "↡"], [0, "↢"], [0, "↣"], [0, "↤"], [0, "↥"], [0, "↦"], [0, "↧"], [1, "↩"], [0, "↪"], [0, "↫"], [0, "↬"], [0, "↭"], [0, "↮"], [1, "↰"], [0, "↱"], [0, "↲"], [0, "↳"], [1, "↵"], [0, "↶"], [0, "↷"], [2, "↺"], [0, "↻"], [0, "↼"], [0, "↽"], [0, "↾"], [0, "↿"], [0, "⇀"], [0, "⇁"], [0, "⇂"], [0, "⇃"], [0, "⇄"], [0, "⇅"], [0, "⇆"], [0, "⇇"], [0, "⇈"], [0, "⇉"], [0, "⇊"], [0, "⇋"], [0, "⇌"], [0, "⇍"], [0, "⇎"], [0, "⇏"], [0, "⇐"], [0, "⇑"], [0, "⇒"], [0, "⇓"], [0, "⇔"], [0, "⇕"], [0, "⇖"], [0, "⇗"], [0, "⇘"], [0, "⇙"], [0, "⇚"], [0, "⇛"], [1, "⇝"], [6, "⇤"], [0, "⇥"], [15, "⇵"], [7, "⇽"], [0, "⇾"], [0, "⇿"], [0, "∀"], [0, "∁"], [0, { v: "∂", n: 824, o: "∂̸" }], [0, "∃"], [0, "∄"], [0, "∅"], [1, "∇"], [0, "∈"], [0, "∉"], [1, "∋"], [0, "∌"], [2, "∏"], [0, "∐"], [0, "∑"], [0, "−"], [0, "∓"], [0, "∔"], [1, "∖"], [0, "∗"], [0, "∘"], [1, "√"], [2, "∝"], [0, "∞"], [0, "∟"], [0, { v: "∠", n: 8402, o: "∠⃒" }], [0, "∡"], [0, "∢"], [0, "∣"], [0, "∤"], [0, "∥"], [0, "∦"], [0, "∧"], [0, "∨"], [0, { v: "∩", n: 65024, o: "∩︀" }], [0, { v: "∪", n: 65024, o: "∪︀" }], [0, "∫"], [0, "∬"], [0, "∭"], [0, "∮"], [0, "∯"], [0, "∰"], [0, "∱"], [0, "∲"], [0, "∳"], [0, "∴"], [0, "∵"], [0, "∶"], [0, "∷"], [0, "∸"], [1, "∺"], [0, "∻"], [0, { v: "∼", n: 8402, o: "∼⃒" }], [0, { v: "∽", n: 817, o: "∽̱" }], [0, { v: "∾", n: 819, o: "∾̳" }], [0, "∿"], [0, "≀"], [0, "≁"], [0, { v: "≂", n: 824, o: "≂̸" }], [0, "≃"], [0, "≄"], [0, "≅"], [0, "≆"], [0, "≇"], [0, "≈"], [0, "≉"], [0, "≊"], [0, { v: "≋", n: 824, o: "≋̸" }], [0, "≌"], [0, { v: "≍", n: 8402, o: "≍⃒" }], [0, { v: "≎", n: 824, o: "≎̸" }], [0, { v: "≏", n: 824, o: "≏̸" }], [0, { v: "≐", n: 824, o: "≐̸" }], [0, "≑"], [0, "≒"], [0, "≓"], [0, "≔"], [0, "≕"], [0, "≖"], [0, "≗"], [1, "≙"], [0, "≚"], [1, "≜"], [2, "≟"], [0, "≠"], [0, { v: "≡", n: 8421, o: "≡⃥" }], [0, "≢"], [1, { v: "≤", n: 8402, o: "≤⃒" }], [0, { v: "≥", n: 8402, o: "≥⃒" }], [0, { v: "≦", n: 824, o: "≦̸" }], [0, { v: "≧", n: 824, o: "≧̸" }], [0, { v: "≨", n: 65024, o: "≨︀" }], [0, { v: "≩", n: 65024, o: "≩︀" }], [0, { v: "≪", n: new Map(/* #__PURE__ */ restoreDiff([[824, "≪̸"], [7577, "≪⃒"]])) }], [0, { v: "≫", n: new Map(/* #__PURE__ */ restoreDiff([[824, "≫̸"], [7577, "≫⃒"]])) }], [0, "≬"], [0, "≭"], [0, "≮"], [0, "≯"], [0, "≰"], [0, "≱"], [0, "≲"], [0, "≳"], [0, "≴"], [0, "≵"], [0, "≶"], [0, "≷"], [0, "≸"], [0, "≹"], [0, "≺"], [0, "≻"], [0, "≼"], [0, "≽"], [0, "≾"], [0, { v: "≿", n: 824, o: "≿̸" }], [0, "⊀"], [0, "⊁"], [0, { v: "⊂", n: 8402, o: "⊂⃒" }], [0, { v: "⊃", n: 8402, o: "⊃⃒" }], [0, "⊄"], [0, "⊅"], [0, "⊆"], [0, "⊇"], [0, "⊈"], [0, "⊉"], [0, { v: "⊊", n: 65024, o: "⊊︀" }], [0, { v: "⊋", n: 65024, o: "⊋︀" }], [1, "⊍"], [0, "⊎"], [0, { v: "⊏", n: 824, o: "⊏̸" }], [0, { v: "⊐", n: 824, o: "⊐̸" }], [0, "⊑"], [0, "⊒"], [0, { v: "⊓", n: 65024, o: "⊓︀" }], [0, { v: "⊔", n: 65024, o: "⊔︀" }], [0, "⊕"], [0, "⊖"], [0, "⊗"], [0, "⊘"], [0, "⊙"], [0, "⊚"], [0, "⊛"], [1, "⊝"], [0, "⊞"], [0, "⊟"], [0, "⊠"], [0, "⊡"], [0, "⊢"], [0, "⊣"], [0, "⊤"], [0, "⊥"], [1, "⊧"], [0, "⊨"], [0, "⊩"], [0, "⊪"], [0, "⊫"], [0, "⊬"], [0, "⊭"], [0, "⊮"], [0, "⊯"], [0, "⊰"], [1, "⊲"], [0, "⊳"], [0, { v: "⊴", n: 8402, o: "⊴⃒" }], [0, { v: "⊵", n: 8402, o: "⊵⃒" }], [0, "⊶"], [0, "⊷"], [0, "⊸"], [0, "⊹"], [0, "⊺"], [0, "⊻"], [1, "⊽"], [0, "⊾"], [0, "⊿"], [0, "⋀"], [0, "⋁"], [0, "⋂"], [0, "⋃"], [0, "⋄"], [0, "⋅"], [0, "⋆"], [0, "⋇"], [0, "⋈"], [0, "⋉"], [0, "⋊"], [0, "⋋"], [0, "⋌"], [0, "⋍"], [0, "⋎"], [0, "⋏"], [0, "⋐"], [0, "⋑"], [0, "⋒"], [0, "⋓"], [0, "⋔"], [0, "⋕"], [0, "⋖"], [0, "⋗"], [0, { v: "⋘", n: 824, o: "⋘̸" }], [0, { v: "⋙", n: 824, o: "⋙̸" }], [0, { v: "⋚", n: 65024, o: "⋚︀" }], [0, { v: "⋛", n: 65024, o: "⋛︀" }], [2, "⋞"], [0, "⋟"], [0, "⋠"], [0, "⋡"], [0, "⋢"], [0, "⋣"], [2, "⋦"], [0, "⋧"], [0, "⋨"], [0, "⋩"], [0, "⋪"], [0, "⋫"], [0, "⋬"], [0, "⋭"], [0, "⋮"], [0, "⋯"], [0, "⋰"], [0, "⋱"], [0, "⋲"], [0, "⋳"], [0, "⋴"], [0, { v: "⋵", n: 824, o: "⋵̸" }], [0, "⋶"], [0, "⋷"], [1, { v: "⋹", n: 824, o: "⋹̸" }], [0, "⋺"], [0, "⋻"], [0, "⋼"], [0, "⋽"], [0, "⋾"], [6, "⌅"], [0, "⌆"], [1, "⌈"], [0, "⌉"], [0, "⌊"], [0, "⌋"], [0, "⌌"], [0, "⌍"], [0, "⌎"], [0, "⌏"], [0, "⌐"], [1, "⌒"], [0, "⌓"], [1, "⌕"], [0, "⌖"], [5, "⌜"], [0, "⌝"], [0, "⌞"], [0, "⌟"], [2, "⌢"], [0, "⌣"], [9, "⌭"], [0, "⌮"], [7, "⌶"], [6, "⌽"], [1, "⌿"], [60, "⍼"], [51, "⎰"], [0, "⎱"], [2, "⎴"], [0, "⎵"], [0, "⎶"], [37, "⏜"], [0, "⏝"], [0, "⏞"], [0, "⏟"], [2, "⏢"], [4, "⏧"], [59, "␣"], [164, "Ⓢ"], [55, "─"], [1, "│"], [9, "┌"], [3, "┐"], [3, "└"], [3, "┘"], [3, "├"], [7, "┤"], [7, "┬"], [7, "┴"], [7, "┼"], [19, "═"], [0, "║"], [0, "╒"], [0, "╓"], [0, "╔"], [0, "╕"], [0, "╖"], [0, "╗"], [0, "╘"], [0, "╙"], [0, "╚"], [0, "╛"], [0, "╜"], [0, "╝"], [0, "╞"], [0, "╟"], [0, "╠"], [0, "╡"], [0, "╢"], [0, "╣"], [0, "╤"], [0, "╥"], [0, "╦"], [0, "╧"], [0, "╨"], [0, "╩"], [0, "╪"], [0, "╫"], [0, "╬"], [19, "▀"], [3, "▄"], [3, "█"], [8, "░"], [0, "▒"], [0, "▓"], [13, "□"], [8, "▪"], [0, "▫"], [1, "▭"], [0, "▮"], [2, "▱"], [1, "△"], [0, "▴"], [0, "▵"], [2, "▸"], [0, "▹"], [3, "▽"], [0, "▾"], [0, "▿"], [2, "◂"], [0, "◃"], [6, "◊"], [0, "○"], [32, "◬"], [2, "◯"], [8, "◸"], [0, "◹"], [0, "◺"], [0, "◻"], [0, "◼"], [8, "★"], [0, "☆"], [7, "☎"], [49, "♀"], [1, "♂"], [29, "♠"], [2, "♣"], [1, "♥"], [0, "♦"], [3, "♪"], [2, "♭"], [0, "♮"], [0, "♯"], [163, "✓"], [3, "✗"], [8, "✠"], [21, "✶"], [33, "❘"], [25, "❲"], [0, "❳"], [84, "⟈"], [0, "⟉"], [28, "⟦"], [0, "⟧"], [0, "⟨"], [0, "⟩"], [0, "⟪"], [0, "⟫"], [0, "⟬"], [0, "⟭"], [7, "⟵"], [0, "⟶"], [0, "⟷"], [0, "⟸"], [0, "⟹"], [0, "⟺"], [1, "⟼"], [2, "⟿"], [258, "⤂"], [0, "⤃"], [0, "⤄"], [0, "⤅"], [6, "⤌"], [0, "⤍"], [0, "⤎"], [0, "⤏"], [0, "⤐"], [0, "⤑"], [0, "⤒"], [0, "⤓"], [2, "⤖"], [2, "⤙"], [0, "⤚"], [0, "⤛"], [0, "⤜"], [0, "⤝"], [0, "⤞"], [0, "⤟"], [0, "⤠"], [2, "⤣"], [0, "⤤"], [0, "⤥"], [0, "⤦"], [0, "⤧"], [0, "⤨"], [0, "⤩"], [0, "⤪"], [8, { v: "⤳", n: 824, o: "⤳̸" }], [1, "⤵"], [0, "⤶"], [0, "⤷"], [0, "⤸"], [0, "⤹"], [2, "⤼"], [0, "⤽"], [7, "⥅"], [2, "⥈"], [0, "⥉"], [0, "⥊"], [0, "⥋"], [2, "⥎"], [0, "⥏"], [0, "⥐"], [0, "⥑"], [0, "⥒"], [0, "⥓"], [0, "⥔"], [0, "⥕"], [0, "⥖"], [0, "⥗"], [0, "⥘"], [0, "⥙"], [0, "⥚"], [0, "⥛"], [0, "⥜"], [0, "⥝"], [0, "⥞"], [0, "⥟"], [0, "⥠"], [0, "⥡"], [0, "⥢"], [0, "⥣"], [0, "⥤"], [0, "⥥"], [0, "⥦"], [0, "⥧"], [0, "⥨"], [0, "⥩"], [0, "⥪"], [0, "⥫"], [0, "⥬"], [0, "⥭"], [0, "⥮"], [0, "⥯"], [0, "⥰"], [0, "⥱"], [0, "⥲"], [0, "⥳"], [0, "⥴"], [0, "⥵"], [0, "⥶"], [1, "⥸"], [0, "⥹"], [1, "⥻"], [0, "⥼"], [0, "⥽"], [0, "⥾"], [0, "⥿"], [5, "⦅"], [0, "⦆"], [4, "⦋"], [0, "⦌"], [0, "⦍"], [0, "⦎"], [0, "⦏"], [0, "⦐"], [0, "⦑"], [0, "⦒"], [0, "⦓"], [0, "⦔"], [0, "⦕"], [0, "⦖"], [3, "⦚"], [1, "⦜"], [0, "⦝"], [6, "⦤"], [0, "⦥"], [0, "⦦"], [0, "⦧"], [0, "⦨"], [0, "⦩"], [0, "⦪"], [0, "⦫"], [0, "⦬"], [0, "⦭"], [0, "⦮"], [0, "⦯"], [0, "⦰"], [0, "⦱"], [0, "⦲"], [0, "⦳"], [0, "⦴"], [0, "⦵"], [0, "⦶"], [0, "⦷"], [1, "⦹"], [1, "⦻"], [0, "⦼"], [1, "⦾"], [0, "⦿"], [0, "⧀"], [0, "⧁"], [0, "⧂"], [0, "⧃"], [0, "⧄"], [0, "⧅"], [3, "⧉"], [3, "⧍"], [0, "⧎"], [0, { v: "⧏", n: 824, o: "⧏̸" }], [0, { v: "⧐", n: 824, o: "⧐̸" }], [11, "⧜"], [0, "⧝"], [0, "⧞"], [4, "⧣"], [0, "⧤"], [0, "⧥"], [5, "⧫"], [8, "⧴"], [1, "⧶"], [9, "⨀"], [0, "⨁"], [0, "⨂"], [1, "⨄"], [1, "⨆"], [5, "⨌"], [0, "⨍"], [2, "⨐"], [0, "⨑"], [0, "⨒"], [0, "⨓"], [0, "⨔"], [0, "⨕"], [0, "⨖"], [0, "⨗"], [10, "⨢"], [0, "⨣"], [0, "⨤"], [0, "⨥"], [0, "⨦"], [0, "⨧"], [1, "⨩"], [0, "⨪"], [2, "⨭"], [0, "⨮"], [0, "⨯"], [0, "⨰"], [0, "⨱"], [1, "⨳"], [0, "⨴"], [0, "⨵"], [0, "⨶"], [0, "⨷"], [0, "⨸"], [0, "⨹"], [0, "⨺"], [0, "⨻"], [0, "⨼"], [2, "⨿"], [0, "⩀"], [1, "⩂"], [0, "⩃"], [0, "⩄"], [0, "⩅"], [0, "⩆"], [0, "⩇"], [0, "⩈"], [0, "⩉"], [0, "⩊"], [0, "⩋"], [0, "⩌"], [0, "⩍"], [2, "⩐"], [2, "⩓"], [0, "⩔"], [0, "⩕"], [0, "⩖"], [0, "⩗"], [0, "⩘"], [1, "⩚"], [0, "⩛"], [0, "⩜"], [0, "⩝"], [1, "⩟"], [6, "⩦"], [3, "⩪"], [2, { v: "⩭", n: 824, o: "⩭̸" }], [0, "⩮"], [0, "⩯"], [0, { v: "⩰", n: 824, o: "⩰̸" }], [0, "⩱"], [0, "⩲"], [0, "⩳"], [0, "⩴"], [0, "⩵"], [1, "⩷"], [0, "⩸"], [0, "⩹"], [0, "⩺"], [0, "⩻"], [0, "⩼"], [0, { v: "⩽", n: 824, o: "⩽̸" }], [0, { v: "⩾", n: 824, o: "⩾̸" }], [0, "⩿"], [0, "⪀"], [0, "⪁"], [0, "⪂"], [0, "⪃"], [0, "⪄"], [0, "⪅"], [0, "⪆"], [0, "⪇"], [0, "⪈"], [0, "⪉"], [0, "⪊"], [0, "⪋"], [0, "⪌"], [0, "⪍"], [0, "⪎"], [0, "⪏"], [0, "⪐"], [0, "⪑"], [0, "⪒"], [0, "⪓"], [0, "⪔"], [0, "⪕"], [0, "⪖"], [0, "⪗"], [0, "⪘"], [0, "⪙"], [0, "⪚"], [2, "⪝"], [0, "⪞"], [0, "⪟"], [0, "⪠"], [0, { v: "⪡", n: 824, o: "⪡̸" }], [0, { v: "⪢", n: 824, o: "⪢̸" }], [1, "⪤"], [0, "⪥"], [0, "⪦"], [0, "⪧"], [0, "⪨"], [0, "⪩"], [0, "⪪"], [0, "⪫"], [0, { v: "⪬", n: 65024, o: "⪬︀" }], [0, { v: "⪭", n: 65024, o: "⪭︀" }], [0, "⪮"], [0, { v: "⪯", n: 824, o: "⪯̸" }], [0, { v: "⪰", n: 824, o: "⪰̸" }], [2, "⪳"], [0, "⪴"], [0, "⪵"], [0, "⪶"], [0, "⪷"], [0, "⪸"], [0, "⪹"], [0, "⪺"], [0, "⪻"], [0, "⪼"], [0, "⪽"], [0, "⪾"], [0, "⪿"], [0, "⫀"], [0, "⫁"], [0, "⫂"], [0, "⫃"], [0, "⫄"], [0, { v: "⫅", n: 824, o: "⫅̸" }], [0, { v: "⫆", n: 824, o: "⫆̸" }], [0, "⫇"], [0, "⫈"], [2, { v: "⫋", n: 65024, o: "⫋︀" }], [0, { v: "⫌", n: 65024, o: "⫌︀" }], [2, "⫏"], [0, "⫐"], [0, "⫑"], [0, "⫒"], [0, "⫓"], [0, "⫔"], [0, "⫕"], [0, "⫖"], [0, "⫗"], [0, "⫘"], [0, "⫙"], [0, "⫚"], [0, "⫛"], [8, "⫤"], [1, "⫦"], [0, "⫧"], [0, "⫨"], [0, "⫩"], [1, "⫫"], [0, "⫬"], [0, "⫭"], [0, "⫮"], [0, "⫯"], [0, "⫰"], [0, "⫱"], [0, "⫲"], [0, "⫳"], [9, { v: "⫽", n: 8421, o: "⫽⃥" }], [44343, { n: new Map(/* #__PURE__ */ restoreDiff([[56476, "𝒜"], [1, "𝒞"], [0, "𝒟"], [2, "𝒢"], [2, "𝒥"], [0, "𝒦"], [2, "𝒩"], [0, "𝒪"], [0, "𝒫"], [0, "𝒬"], [1, "𝒮"], [0, "𝒯"], [0, "𝒰"], [0, "𝒱"], [0, "𝒲"], [0, "𝒳"], [0, "𝒴"], [0, "𝒵"], [0, "𝒶"], [0, "𝒷"], [0, "𝒸"], [0, "𝒹"], [1, "𝒻"], [1, "𝒽"], [0, "𝒾"], [0, "𝒿"], [0, "𝓀"], [0, "𝓁"], [0, "𝓂"], [0, "𝓃"], [1, "𝓅"], [0, "𝓆"], [0, "𝓇"], [0, "𝓈"], [0, "𝓉"], [0, "𝓊"], [0, "𝓋"], [0, "𝓌"], [0, "𝓍"], [0, "𝓎"], [0, "𝓏"], [52, "𝔄"], [0, "𝔅"], [1, "𝔇"], [0, "𝔈"], [0, "𝔉"], [0, "𝔊"], [2, "𝔍"], [0, "𝔎"], [0, "𝔏"], [0, "𝔐"], [0, "𝔑"], [0, "𝔒"], [0, "𝔓"], [0, "𝔔"], [1, "𝔖"], [0, "𝔗"], [0, "𝔘"], [0, "𝔙"], [0, "𝔚"], [0, "𝔛"], [0, "𝔜"], [1, "𝔞"], [0, "𝔟"], [0, "𝔠"], [0, "𝔡"], [0, "𝔢"], [0, "𝔣"], [0, "𝔤"], [0, "𝔥"], [0, "𝔦"], [0, "𝔧"], [0, "𝔨"], [0, "𝔩"], [0, "𝔪"], [0, "𝔫"], [0, "𝔬"], [0, "𝔭"], [0, "𝔮"], [0, "𝔯"], [0, "𝔰"], [0, "𝔱"], [0, "𝔲"], [0, "𝔳"], [0, "𝔴"], [0, "𝔵"], [0, "𝔶"], [0, "𝔷"], [0, "𝔸"], [0, "𝔹"], [1, "𝔻"], [0, "𝔼"], [0, "𝔽"], [0, "𝔾"], [1, "𝕀"], [0, "𝕁"], [0, "𝕂"], [0, "𝕃"], [0, "𝕄"], [1, "𝕆"], [3, "𝕊"], [0, "𝕋"], [0, "𝕌"], [0, "𝕍"], [0, "𝕎"], [0, "𝕏"], [0, "𝕐"], [1, "𝕒"], [0, "𝕓"], [0, "𝕔"], [0, "𝕕"], [0, "𝕖"], [0, "𝕗"], [0, "𝕘"], [0, "𝕙"], [0, "𝕚"], [0, "𝕛"], [0, "𝕜"], [0, "𝕝"], [0, "𝕞"], [0, "𝕟"], [0, "𝕠"], [0, "𝕡"], [0, "𝕢"], [0, "𝕣"], [0, "𝕤"], [0, "𝕥"], [0, "𝕦"], [0, "𝕧"], [0, "𝕨"], [0, "𝕩"], [0, "𝕪"], [0, "𝕫"]])) }], [8906, "ff"], [0, "fi"], [0, "fl"], [0, "ffi"], [0, "ffl"]])); +//# sourceMappingURL=encode-html.js.map +/***/ }), -var Ruler = __nccwpck_require__(2789); - - -var _rules = [ - [ 'normalize', __nccwpck_require__(3272) ], - [ 'block', __nccwpck_require__(4324) ], - [ 'inline', __nccwpck_require__(9835) ], - [ 'linkify', __nccwpck_require__(7373) ], - [ 'replacements', __nccwpck_require__(2378) ], - [ 'smartquotes', __nccwpck_require__(5349) ], - // `text_join` finds `text_special` tokens (for escape sequences) - // and joins them with the rest of the text - [ 'text_join', __nccwpck_require__(747) ] -]; +/***/ 912: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { +"use strict"; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.decodeXMLStrict = exports.decodeHTML5Strict = exports.decodeHTML4Strict = exports.decodeHTML5 = exports.decodeHTML4 = exports.decodeHTMLAttribute = exports.decodeHTMLStrict = exports.decodeHTML = exports.decodeXML = exports.DecodingMode = exports.EntityDecoder = exports.encodeHTML5 = exports.encodeHTML4 = exports.encodeNonAsciiHTML = exports.encodeHTML = exports.escapeText = exports.escapeAttribute = exports.escapeUTF8 = exports.escape = exports.encodeXML = exports.encode = exports.decodeStrict = exports.decode = exports.EncodingMode = exports.EntityLevel = void 0; +var decode_js_1 = __nccwpck_require__(7934); +var encode_js_1 = __nccwpck_require__(3772); +var escape_js_1 = __nccwpck_require__(5947); +/** The level of entities to support. */ +var EntityLevel; +(function (EntityLevel) { + /** Support only XML entities. */ + EntityLevel[EntityLevel["XML"] = 0] = "XML"; + /** Support HTML entities, which are a superset of XML entities. */ + EntityLevel[EntityLevel["HTML"] = 1] = "HTML"; +})(EntityLevel = exports.EntityLevel || (exports.EntityLevel = {})); +var EncodingMode; +(function (EncodingMode) { + /** + * The output is UTF-8 encoded. Only characters that need escaping within + * XML will be escaped. + */ + EncodingMode[EncodingMode["UTF8"] = 0] = "UTF8"; + /** + * The output consists only of ASCII characters. Characters that need + * escaping within HTML, and characters that aren't ASCII characters will + * be escaped. + */ + EncodingMode[EncodingMode["ASCII"] = 1] = "ASCII"; + /** + * Encode all characters that have an equivalent entity, as well as all + * characters that are not ASCII characters. + */ + EncodingMode[EncodingMode["Extensive"] = 2] = "Extensive"; + /** + * Encode all characters that have to be escaped in HTML attributes, + * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}. + */ + EncodingMode[EncodingMode["Attribute"] = 3] = "Attribute"; + /** + * Encode all characters that have to be escaped in HTML text, + * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}. + */ + EncodingMode[EncodingMode["Text"] = 4] = "Text"; +})(EncodingMode = exports.EncodingMode || (exports.EncodingMode = {})); /** - * new Core() - **/ -function Core() { - /** - * Core#ruler -> Ruler - * - * [[Ruler]] instance. Keep configuration of core rules. - **/ - this.ruler = new Ruler(); - - for (var i = 0; i < _rules.length; i++) { - this.ruler.push(_rules[i][0], _rules[i][1]); - } + * Decodes a string with entities. + * + * @param data String to decode. + * @param options Decoding options. + */ +function decode(data, options) { + if (options === void 0) { options = EntityLevel.XML; } + var level = typeof options === "number" ? options : options.level; + if (level === EntityLevel.HTML) { + var mode = typeof options === "object" ? options.mode : undefined; + return (0, decode_js_1.decodeHTML)(data, mode); + } + return (0, decode_js_1.decodeXML)(data); } - - +exports.decode = decode; /** - * Core.process(state) + * Decodes a string with entities. Does not allow missing trailing semicolons for entities. * - * Executes core chain rules. - **/ -Core.prototype.process = function (state) { - var i, l, rules; - - rules = this.ruler.getRules(''); - - for (i = 0, l = rules.length; i < l; i++) { - rules[i](state); - } -}; - -Core.prototype.State = __nccwpck_require__(1744); - - -module.exports = Core; - + * @param data String to decode. + * @param options Decoding options. + * @deprecated Use `decode` with the `mode` set to `Strict`. + */ +function decodeStrict(data, options) { + var _a; + if (options === void 0) { options = EntityLevel.XML; } + var opts = typeof options === "number" ? { level: options } : options; + (_a = opts.mode) !== null && _a !== void 0 ? _a : (opts.mode = decode_js_1.DecodingMode.Strict); + return decode(data, opts); +} +exports.decodeStrict = decodeStrict; +/** + * Encodes a string with entities. + * + * @param data String to encode. + * @param options Encoding options. + */ +function encode(data, options) { + if (options === void 0) { options = EntityLevel.XML; } + var opts = typeof options === "number" ? { level: options } : options; + // Mode `UTF8` just escapes XML entities + if (opts.mode === EncodingMode.UTF8) + return (0, escape_js_1.escapeUTF8)(data); + if (opts.mode === EncodingMode.Attribute) + return (0, escape_js_1.escapeAttribute)(data); + if (opts.mode === EncodingMode.Text) + return (0, escape_js_1.escapeText)(data); + if (opts.level === EntityLevel.HTML) { + if (opts.mode === EncodingMode.ASCII) { + return (0, encode_js_1.encodeNonAsciiHTML)(data); + } + return (0, encode_js_1.encodeHTML)(data); + } + // ASCII and Extensive are equivalent + return (0, escape_js_1.encodeXML)(data); +} +exports.encode = encode; +var escape_js_2 = __nccwpck_require__(5947); +Object.defineProperty(exports, "encodeXML", ({ enumerable: true, get: function () { return escape_js_2.encodeXML; } })); +Object.defineProperty(exports, "escape", ({ enumerable: true, get: function () { return escape_js_2.escape; } })); +Object.defineProperty(exports, "escapeUTF8", ({ enumerable: true, get: function () { return escape_js_2.escapeUTF8; } })); +Object.defineProperty(exports, "escapeAttribute", ({ enumerable: true, get: function () { return escape_js_2.escapeAttribute; } })); +Object.defineProperty(exports, "escapeText", ({ enumerable: true, get: function () { return escape_js_2.escapeText; } })); +var encode_js_2 = __nccwpck_require__(3772); +Object.defineProperty(exports, "encodeHTML", ({ enumerable: true, get: function () { return encode_js_2.encodeHTML; } })); +Object.defineProperty(exports, "encodeNonAsciiHTML", ({ enumerable: true, get: function () { return encode_js_2.encodeNonAsciiHTML; } })); +// Legacy aliases (deprecated) +Object.defineProperty(exports, "encodeHTML4", ({ enumerable: true, get: function () { return encode_js_2.encodeHTML; } })); +Object.defineProperty(exports, "encodeHTML5", ({ enumerable: true, get: function () { return encode_js_2.encodeHTML; } })); +var decode_js_2 = __nccwpck_require__(7934); +Object.defineProperty(exports, "EntityDecoder", ({ enumerable: true, get: function () { return decode_js_2.EntityDecoder; } })); +Object.defineProperty(exports, "DecodingMode", ({ enumerable: true, get: function () { return decode_js_2.DecodingMode; } })); +Object.defineProperty(exports, "decodeXML", ({ enumerable: true, get: function () { return decode_js_2.decodeXML; } })); +Object.defineProperty(exports, "decodeHTML", ({ enumerable: true, get: function () { return decode_js_2.decodeHTML; } })); +Object.defineProperty(exports, "decodeHTMLStrict", ({ enumerable: true, get: function () { return decode_js_2.decodeHTMLStrict; } })); +Object.defineProperty(exports, "decodeHTMLAttribute", ({ enumerable: true, get: function () { return decode_js_2.decodeHTMLAttribute; } })); +// Legacy aliases (deprecated) +Object.defineProperty(exports, "decodeHTML4", ({ enumerable: true, get: function () { return decode_js_2.decodeHTML; } })); +Object.defineProperty(exports, "decodeHTML5", ({ enumerable: true, get: function () { return decode_js_2.decodeHTML; } })); +Object.defineProperty(exports, "decodeHTML4Strict", ({ enumerable: true, get: function () { return decode_js_2.decodeHTMLStrict; } })); +Object.defineProperty(exports, "decodeHTML5Strict", ({ enumerable: true, get: function () { return decode_js_2.decodeHTMLStrict; } })); +Object.defineProperty(exports, "decodeXMLStrict", ({ enumerable: true, get: function () { return decode_js_2.decodeXML; } })); +//# sourceMappingURL=index.js.map /***/ }), -/***/ 4230: +/***/ 5108: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -"use strict"; -/** internal - * class ParserInline - * - * Tokenizes paragraph content. - **/ +var debug; +module.exports = function () { + if (!debug) { + try { + /* eslint global-require: off */ + debug = __nccwpck_require__(7939)("follow-redirects"); + } + catch (error) { /* */ } + if (typeof debug !== "function") { + debug = function () { /* */ }; + } + } + debug.apply(null, arguments); +}; -var Ruler = __nccwpck_require__(2789); +/***/ }), +/***/ 4033: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -//////////////////////////////////////////////////////////////////////////////// -// Parser rules +var url = __nccwpck_require__(7310); +var URL = url.URL; +var http = __nccwpck_require__(3685); +var https = __nccwpck_require__(5687); +var Writable = (__nccwpck_require__(2781).Writable); +var assert = __nccwpck_require__(9491); +var debug = __nccwpck_require__(5108); -var _rules = [ - [ 'text', __nccwpck_require__(4391) ], - [ 'linkify', __nccwpck_require__(1537) ], - [ 'newline', __nccwpck_require__(9760) ], - [ 'escape', __nccwpck_require__(7039) ], - [ 'backticks', __nccwpck_require__(8864) ], - [ 'strikethrough', (__nccwpck_require__(2156)/* .tokenize */ .w) ], - [ 'emphasis', (__nccwpck_require__(5830)/* .tokenize */ .w) ], - [ 'link', __nccwpck_require__(155) ], - [ 'image', __nccwpck_require__(9636) ], - [ 'autolink', __nccwpck_require__(5281) ], - [ 'html_inline', __nccwpck_require__(9230) ], - [ 'entity', __nccwpck_require__(8261) ] +// Whether to use the native URL object or the legacy url module +var useNativeURL = false; +try { + assert(new URL()); +} +catch (error) { + useNativeURL = error.code === "ERR_INVALID_URL"; +} + +// URL fields to preserve in copy operations +var preservedUrlFields = [ + "auth", + "host", + "hostname", + "href", + "path", + "pathname", + "port", + "protocol", + "query", + "search", + "hash", ]; -// `rule2` ruleset was created specifically for emphasis/strikethrough -// post-processing and may be changed in the future. -// -// Don't use this for anything except pairs (plugins working with `balance_pairs`). -// -var _rules2 = [ - [ 'balance_pairs', __nccwpck_require__(1219) ], - [ 'strikethrough', (__nccwpck_require__(2156)/* .postProcess */ .g) ], - [ 'emphasis', (__nccwpck_require__(5830)/* .postProcess */ .g) ], - // rules for pairs separate '**' into its own text tokens, which may be left unused, - // rule below merges unused segments back with the rest of the text - [ 'fragments_join', __nccwpck_require__(3269) ] -]; +// Create handlers that pass events from native requests +var events = ["abort", "aborted", "connect", "error", "socket", "timeout"]; +var eventHandlers = Object.create(null); +events.forEach(function (event) { + eventHandlers[event] = function (arg1, arg2, arg3) { + this._redirectable.emit(event, arg1, arg2, arg3); + }; +}); +// Error types with codes +var InvalidUrlError = createErrorType( + "ERR_INVALID_URL", + "Invalid URL", + TypeError +); +var RedirectionError = createErrorType( + "ERR_FR_REDIRECTION_FAILURE", + "Redirected request failed" +); +var TooManyRedirectsError = createErrorType( + "ERR_FR_TOO_MANY_REDIRECTS", + "Maximum number of redirects exceeded", + RedirectionError +); +var MaxBodyLengthExceededError = createErrorType( + "ERR_FR_MAX_BODY_LENGTH_EXCEEDED", + "Request body larger than maxBodyLength limit" +); +var WriteAfterEndError = createErrorType( + "ERR_STREAM_WRITE_AFTER_END", + "write after end" +); -/** - * new ParserInline() - **/ -function ParserInline() { - var i; +// istanbul ignore next +var destroy = Writable.prototype.destroy || noop; - /** - * ParserInline#ruler -> Ruler - * - * [[Ruler]] instance. Keep configuration of inline rules. - **/ - this.ruler = new Ruler(); +// An HTTP(S) request that can be redirected +function RedirectableRequest(options, responseCallback) { + // Initialize the request + Writable.call(this); + this._sanitizeOptions(options); + this._options = options; + this._ended = false; + this._ending = false; + this._redirectCount = 0; + this._redirects = []; + this._requestBodyLength = 0; + this._requestBodyBuffers = []; - for (i = 0; i < _rules.length; i++) { - this.ruler.push(_rules[i][0], _rules[i][1]); + // Attach a callback if passed + if (responseCallback) { + this.on("response", responseCallback); } - /** - * ParserInline#ruler2 -> Ruler - * - * [[Ruler]] instance. Second ruler used for post-processing - * (e.g. in emphasis-like rules). - **/ - this.ruler2 = new Ruler(); + // React to responses of native requests + var self = this; + this._onNativeResponse = function (response) { + try { + self._processResponse(response); + } + catch (cause) { + self.emit("error", cause instanceof RedirectionError ? + cause : new RedirectionError({ cause: cause })); + } + }; - for (i = 0; i < _rules2.length; i++) { - this.ruler2.push(_rules2[i][0], _rules2[i][1]); - } + // Perform the first request + this._performRequest(); } +RedirectableRequest.prototype = Object.create(Writable.prototype); +RedirectableRequest.prototype.abort = function () { + destroyRequest(this._currentRequest); + this._currentRequest.abort(); + this.emit("abort"); +}; -// Skip single token by running all rules in validation mode; -// returns `true` if any rule reported success -// -ParserInline.prototype.skipToken = function (state) { - var ok, i, pos = state.pos, - rules = this.ruler.getRules(''), - len = rules.length, - maxNesting = state.md.options.maxNesting, - cache = state.cache; - +RedirectableRequest.prototype.destroy = function (error) { + destroyRequest(this._currentRequest, error); + destroy.call(this, error); + return this; +}; - if (typeof cache[pos] !== 'undefined') { - state.pos = cache[pos]; - return; +// Writes buffered data to the current native request +RedirectableRequest.prototype.write = function (data, encoding, callback) { + // Writing is not allowed if end has been called + if (this._ending) { + throw new WriteAfterEndError(); } - if (state.level < maxNesting) { - for (i = 0; i < len; i++) { - // Increment state.level and decrement it later to limit recursion. - // It's harmless to do here, because no tokens are created. But ideally, - // we'd need a separate private state variable for this purpose. - // - state.level++; - ok = rules[i](state, true); - state.level--; - - if (ok) { break; } - } - } else { - // Too much nesting, just skip until the end of the paragraph. - // - // NOTE: this will cause links to behave incorrectly in the following case, - // when an amount of `[` is exactly equal to `maxNesting + 1`: - // - // [[[[[[[[[[[[[[[[[[[[[foo]() - // - // TODO: remove this workaround when CM standard will allow nested links - // (we can replace it by preventing links from being parsed in - // validation mode) - // - state.pos = state.posMax; + // Validate input and shift parameters if necessary + if (!isString(data) && !isBuffer(data)) { + throw new TypeError("data should be a string, Buffer or Uint8Array"); + } + if (isFunction(encoding)) { + callback = encoding; + encoding = null; } - if (!ok) { state.pos++; } - cache[pos] = state.pos; -}; - - -// Generate tokens for input range -// -ParserInline.prototype.tokenize = function (state) { - var ok, i, - rules = this.ruler.getRules(''), - len = rules.length, - end = state.posMax, - maxNesting = state.md.options.maxNesting; - - while (state.pos < end) { - // Try all possible rules. - // On success, rule should: - // - // - update `state.pos` - // - update `state.tokens` - // - return true - - if (state.level < maxNesting) { - for (i = 0; i < len; i++) { - ok = rules[i](state, false); - if (ok) { break; } - } - } - - if (ok) { - if (state.pos >= end) { break; } - continue; + // Ignore empty buffers, since writing them doesn't invoke the callback + // https://github.com/nodejs/node/issues/22066 + if (data.length === 0) { + if (callback) { + callback(); } - - state.pending += state.src[state.pos++]; + return; } - - if (state.pending) { - state.pushPending(); + // Only write when we don't exceed the maximum body length + if (this._requestBodyLength + data.length <= this._options.maxBodyLength) { + this._requestBodyLength += data.length; + this._requestBodyBuffers.push({ data: data, encoding: encoding }); + this._currentRequest.write(data, encoding, callback); + } + // Error when we exceed the maximum body length + else { + this.emit("error", new MaxBodyLengthExceededError()); + this.abort(); } }; +// Ends the current native request +RedirectableRequest.prototype.end = function (data, encoding, callback) { + // Shift parameters if necessary + if (isFunction(data)) { + callback = data; + data = encoding = null; + } + else if (isFunction(encoding)) { + callback = encoding; + encoding = null; + } -/** - * ParserInline.parse(str, md, env, outTokens) - * - * Process input string and push inline tokens into `outTokens` - **/ -ParserInline.prototype.parse = function (str, md, env, outTokens) { - var i, rules, len; - var state = new this.State(str, md, env, outTokens); - - this.tokenize(state); - - rules = this.ruler2.getRules(''); - len = rules.length; - - for (i = 0; i < len; i++) { - rules[i](state); + // Write data if needed and end + if (!data) { + this._ended = this._ending = true; + this._currentRequest.end(null, null, callback); + } + else { + var self = this; + var currentRequest = this._currentRequest; + this.write(data, encoding, function () { + self._ended = true; + currentRequest.end(null, null, callback); + }); + this._ending = true; } }; +// Sets a header value on the current native request +RedirectableRequest.prototype.setHeader = function (name, value) { + this._options.headers[name] = value; + this._currentRequest.setHeader(name, value); +}; -ParserInline.prototype.State = __nccwpck_require__(997); - - -module.exports = ParserInline; - - -/***/ }), - -/***/ 9679: -/***/ ((module) => { - -"use strict"; -// Commonmark default options - - - - -module.exports = { - options: { - html: true, // Enable HTML tags in source - xhtmlOut: true, // Use '/' to close single tags (
) - breaks: false, // Convert '\n' in paragraphs into
- langPrefix: 'language-', // CSS language prefix for fenced blocks - linkify: false, // autoconvert URL-like texts to links - - // Enable some language-neutral replacements + quotes beautification - typographer: false, - - // Double + single quotes replacement pairs, when typographer enabled, - // and smartquotes on. Could be either a String or an Array. - // - // For example, you can use '«»„“' for Russian, '„“‚‘' for German, - // and ['«\xA0', '\xA0»', '‹\xA0', '\xA0›'] for French (including nbsp). - quotes: '\u201c\u201d\u2018\u2019', /* “”‘’ */ - - // Highlighter function. Should return escaped HTML, - // or '' if the source string is not changed and should be escaped externaly. - // If result starts with { -"use strict"; -// markdown-it default options + // Stops a timeout from triggering + function clearTimer() { + // Clear the timeout + if (self._timeout) { + clearTimeout(self._timeout); + self._timeout = null; + } + // Clean up all attached listeners + self.removeListener("abort", clearTimer); + self.removeListener("error", clearTimer); + self.removeListener("response", clearTimer); + self.removeListener("close", clearTimer); + if (callback) { + self.removeListener("timeout", callback); + } + if (!self.socket) { + self._currentRequest.removeListener("socket", startTimer); + } + } + // Attach callback if passed + if (callback) { + this.on("timeout", callback); + } + // Start the timer if or when the socket is opened + if (this.socket) { + startTimer(this.socket); + } + else { + this._currentRequest.once("socket", startTimer); + } -module.exports = { - options: { - html: false, // Enable HTML tags in source - xhtmlOut: false, // Use '/' to close single tags (
) - breaks: false, // Convert '\n' in paragraphs into
- langPrefix: 'language-', // CSS language prefix for fenced blocks - linkify: false, // autoconvert URL-like texts to links + // Clean up on events + this.on("socket", destroyOnTimeout); + this.on("abort", clearTimer); + this.on("error", clearTimer); + this.on("response", clearTimer); + this.on("close", clearTimer); - // Enable some language-neutral replacements + quotes beautification - typographer: false, + return this; +}; - // Double + single quotes replacement pairs, when typographer enabled, - // and smartquotes on. Could be either a String or an Array. - // - // For example, you can use '«»„“' for Russian, '„“‚‘' for German, - // and ['«\xA0', '\xA0»', '‹\xA0', '\xA0›'] for French (including nbsp). - quotes: '\u201c\u201d\u2018\u2019', /* “”‘’ */ +// Proxy all other public ClientRequest methods +[ + "flushHeaders", "getHeader", + "setNoDelay", "setSocketKeepAlive", +].forEach(function (method) { + RedirectableRequest.prototype[method] = function (a, b) { + return this._currentRequest[method](a, b); + }; +}); - // Highlighter function. Should return escaped HTML, - // or '' if the source string is not changed and should be escaped externaly. - // If result starts with { - -"use strict"; -// "Zero" preset, with nothing enabled. Useful for manual configuring of simple -// modes. For example, to parse bold/italic only. - - +// Executes the next native request (initial or redirect) +RedirectableRequest.prototype._performRequest = function () { + // Load the native protocol + var protocol = this._options.protocol; + var nativeProtocol = this._options.nativeProtocols[protocol]; + if (!nativeProtocol) { + throw new TypeError("Unsupported protocol " + protocol); + } + // If specified, use the agent corresponding to the protocol + // (HTTP and HTTPS use different types of agents) + if (this._options.agents) { + var scheme = protocol.slice(0, -1); + this._options.agent = this._options.agents[scheme]; + } -module.exports = { - options: { - html: false, // Enable HTML tags in source - xhtmlOut: false, // Use '/' to close single tags (
) - breaks: false, // Convert '\n' in paragraphs into
- langPrefix: 'language-', // CSS language prefix for fenced blocks - linkify: false, // autoconvert URL-like texts to links + // Create the native request and set up its event handlers + var request = this._currentRequest = + nativeProtocol.request(this._options, this._onNativeResponse); + request._redirectable = this; + for (var event of events) { + request.on(event, eventHandlers[event]); + } - // Enable some language-neutral replacements + quotes beautification - typographer: false, + // RFC7230§5.3.1: When making a request directly to an origin server, […] + // a client MUST send only the absolute path […] as the request-target. + this._currentUrl = /^\//.test(this._options.path) ? + url.format(this._options) : + // When making a request to a proxy, […] + // a client MUST send the target URI in absolute-form […]. + this._options.path; - // Double + single quotes replacement pairs, when typographer enabled, - // and smartquotes on. Could be either a String or an Array. - // - // For example, you can use '«»„“' for Russian, '„“‚‘' for German, - // and ['«\xA0', '\xA0»', '‹\xA0', '\xA0›'] for French (including nbsp). - quotes: '\u201c\u201d\u2018\u2019', /* “”‘’ */ + // End a redirected request + // (The first request must be ended explicitly with RedirectableRequest#end) + if (this._isRedirect) { + // Write the request entity and end + var i = 0; + var self = this; + var buffers = this._requestBodyBuffers; + (function writeNext(error) { + // Only write if this request has not been redirected yet + /* istanbul ignore else */ + if (request === self._currentRequest) { + // Report any write errors + /* istanbul ignore if */ + if (error) { + self.emit("error", error); + } + // Write the next buffer if there are still left + else if (i < buffers.length) { + var buffer = buffers[i++]; + /* istanbul ignore else */ + if (!request.finished) { + request.write(buffer.data, buffer.encoding, writeNext); + } + } + // End the request if `end` has been called on us + else if (self._ended) { + request.end(); + } + } + }()); + } +}; - // Highlighter function. Should return escaped HTML, - // or '' if the source string is not changed and should be escaped externaly. - // If result starts with = 400) { + response.responseUrl = this._currentUrl; + response.redirects = this._redirects; + this.emit("response", response); - core: { - rules: [ - 'normalize', - 'block', - 'inline', - 'text_join' - ] - }, + // Clean up + this._requestBodyBuffers = []; + return; + } - block: { - rules: [ - 'paragraph' - ] - }, + // The response is a redirect, so abort the current request + destroyRequest(this._currentRequest); + // Discard the remainder of the response to avoid waiting for data + response.destroy(); - inline: { - rules: [ - 'text' - ], - rules2: [ - 'balance_pairs', - 'fragments_join' - ] - } + // RFC7231§6.4: A client SHOULD detect and intervene + // in cyclical redirections (i.e., "infinite" redirection loops). + if (++this._redirectCount > this._options.maxRedirects) { + throw new TooManyRedirectsError(); } -}; + // Store the request headers if applicable + var requestHeaders; + var beforeRedirect = this._options.beforeRedirect; + if (beforeRedirect) { + requestHeaders = Object.assign({ + // The Host header was set by nativeProtocol.request + Host: response.req.getHeader("host"), + }, this._options.headers); + } -/***/ }), + // RFC7231§6.4: Automatic redirection needs to done with + // care for methods not known to be safe, […] + // RFC7231§6.4.2–3: For historical reasons, a user agent MAY change + // the request method from POST to GET for the subsequent request. + var method = this._options.method; + if ((statusCode === 301 || statusCode === 302) && this._options.method === "POST" || + // RFC7231§6.4.4: The 303 (See Other) status code indicates that + // the server is redirecting the user agent to a different resource […] + // A user agent can perform a retrieval request targeting that URI + // (a GET or HEAD request if using HTTP) […] + (statusCode === 303) && !/^(?:GET|HEAD)$/.test(this._options.method)) { + this._options.method = "GET"; + // Drop a possible entity and headers related to it + this._requestBodyBuffers = []; + removeMatchingHeaders(/^content-/i, this._options.headers); + } -/***/ 9155: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + // Drop the Host header, as the redirect might lead to a different host + var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers); -"use strict"; -/** - * class Renderer - * - * Generates HTML from parsed token stream. Each instance has independent - * copy of rules. Those can be rewritten with ease. Also, you can add new - * rules if you create plugin and adds new token types. - **/ + // If the redirect is relative, carry over the host of the last request + var currentUrlParts = parseUrl(this._currentUrl); + var currentHost = currentHostHeader || currentUrlParts.host; + var currentUrl = /^\w+:/.test(location) ? this._currentUrl : + url.format(Object.assign(currentUrlParts, { host: currentHost })); + // Create the redirected request + var redirectUrl = resolveUrl(location, currentUrl); + debug("redirecting to", redirectUrl.href); + this._isRedirect = true; + spreadUrlObject(redirectUrl, this._options); + // Drop confidential headers when redirecting to a less secure protocol + // or to a different domain that is not a superdomain + if (redirectUrl.protocol !== currentUrlParts.protocol && + redirectUrl.protocol !== "https:" || + redirectUrl.host !== currentHost && + !isSubdomain(redirectUrl.host, currentHost)) { + removeMatchingHeaders(/^(?:(?:proxy-)?authorization|cookie)$/i, this._options.headers); + } -var assign = (__nccwpck_require__(6498).assign); -var unescapeAll = (__nccwpck_require__(6498).unescapeAll); -var escapeHtml = (__nccwpck_require__(6498).escapeHtml); + // Evaluate the beforeRedirect callback + if (isFunction(beforeRedirect)) { + var responseDetails = { + headers: response.headers, + statusCode: statusCode, + }; + var requestDetails = { + url: currentUrl, + method: method, + headers: requestHeaders, + }; + beforeRedirect(this._options, responseDetails, requestDetails); + this._sanitizeOptions(this._options); + } + // Perform the redirected request + this._performRequest(); +}; -//////////////////////////////////////////////////////////////////////////////// +// Wraps the key/value object of protocols with redirect functionality +function wrap(protocols) { + // Default settings + var exports = { + maxRedirects: 21, + maxBodyLength: 10 * 1024 * 1024, + }; -var default_rules = {}; + // Wrap each protocol + var nativeProtocols = {}; + Object.keys(protocols).forEach(function (scheme) { + var protocol = scheme + ":"; + var nativeProtocol = nativeProtocols[protocol] = protocols[scheme]; + var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol); + // Executes a request, following redirects + function request(input, options, callback) { + // Parse parameters, ensuring that input is an object + if (isURL(input)) { + input = spreadUrlObject(input); + } + else if (isString(input)) { + input = spreadUrlObject(parseUrl(input)); + } + else { + callback = options; + options = validateUrl(input); + input = { protocol: protocol }; + } + if (isFunction(options)) { + callback = options; + options = null; + } -default_rules.code_inline = function (tokens, idx, options, env, slf) { - var token = tokens[idx]; + // Set defaults + options = Object.assign({ + maxRedirects: exports.maxRedirects, + maxBodyLength: exports.maxBodyLength, + }, input, options); + options.nativeProtocols = nativeProtocols; + if (!isString(options.host) && !isString(options.hostname)) { + options.hostname = "::1"; + } - return '' + - escapeHtml(tokens[idx].content) + - ''; -}; + assert.equal(options.protocol, protocol, "protocol mismatch"); + debug("options", options); + return new RedirectableRequest(options, callback); + } + // Executes a GET request, following redirects + function get(input, options, callback) { + var wrappedRequest = wrappedProtocol.request(input, options, callback); + wrappedRequest.end(); + return wrappedRequest; + } -default_rules.code_block = function (tokens, idx, options, env, slf) { - var token = tokens[idx]; + // Expose the properties on the wrapped protocol + Object.defineProperties(wrappedProtocol, { + request: { value: request, configurable: true, enumerable: true, writable: true }, + get: { value: get, configurable: true, enumerable: true, writable: true }, + }); + }); + return exports; +} - return '' + - escapeHtml(tokens[idx].content) + - '

\n'; -}; +function noop() { /* empty */ } +function parseUrl(input) { + var parsed; + /* istanbul ignore else */ + if (useNativeURL) { + parsed = new URL(input); + } + else { + // Ensure the URL is valid and absolute + parsed = validateUrl(url.parse(input)); + if (!isString(parsed.protocol)) { + throw new InvalidUrlError({ input }); + } + } + return parsed; +} -default_rules.fence = function (tokens, idx, options, env, slf) { - var token = tokens[idx], - info = token.info ? unescapeAll(token.info).trim() : '', - langName = '', - langAttrs = '', - highlighted, i, arr, tmpAttrs, tmpToken; +function resolveUrl(relative, base) { + /* istanbul ignore next */ + return useNativeURL ? new URL(relative, base) : parseUrl(url.resolve(base, relative)); +} - if (info) { - arr = info.split(/(\s+)/g); - langName = arr[0]; - langAttrs = arr.slice(2).join(''); +function validateUrl(input) { + if (/^\[/.test(input.hostname) && !/^\[[:0-9a-f]+\]$/i.test(input.hostname)) { + throw new InvalidUrlError({ input: input.href || input }); + } + if (/^\[/.test(input.host) && !/^\[[:0-9a-f]+\](:\d+)?$/i.test(input.host)) { + throw new InvalidUrlError({ input: input.href || input }); } + return input; +} - if (options.highlight) { - highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content); - } else { - highlighted = escapeHtml(token.content); +function spreadUrlObject(urlObject, target) { + var spread = target || {}; + for (var key of preservedUrlFields) { + spread[key] = urlObject[key]; } - if (highlighted.indexOf('' - + highlighted - + '\n'; } + return (lastValue === null || typeof lastValue === "undefined") ? + undefined : String(lastValue).trim(); +} +function createErrorType(code, message, baseClass) { + // Create constructor + function CustomError(properties) { + Error.captureStackTrace(this, this.constructor); + Object.assign(this, properties || {}); + this.code = code; + this.message = this.cause ? message + ": " + this.cause.message : message; + } - return '
'
-        + highlighted
-        + '
\n'; -}; - - -default_rules.image = function (tokens, idx, options, env, slf) { - var token = tokens[idx]; - - // "alt" attr MUST be set, even if empty. Because it's mandatory and - // should be placed on proper position for tests. - // - // Replace content with actual value + // Attach constructor and set default properties + CustomError.prototype = new (baseClass || Error)(); + Object.defineProperties(CustomError.prototype, { + constructor: { + value: CustomError, + enumerable: false, + }, + name: { + value: "Error [" + code + "]", + enumerable: false, + }, + }); + return CustomError; +} - token.attrs[token.attrIndex('alt')][1] = - slf.renderInlineAsText(token.children, options, env); +function destroyRequest(request, error) { + for (var event of events) { + request.removeListener(event, eventHandlers[event]); + } + request.on("error", noop); + request.destroy(error); +} - return slf.renderToken(tokens, idx, options); -}; +function isSubdomain(subdomain, domain) { + assert(isString(subdomain) && isString(domain)); + var dot = subdomain.length - domain.length - 1; + return dot > 0 && subdomain[dot] === "." && subdomain.endsWith(domain); +} +function isString(value) { + return typeof value === "string" || value instanceof String; +} -default_rules.hardbreak = function (tokens, idx, options /*, env */) { - return options.xhtmlOut ? '
\n' : '
\n'; -}; -default_rules.softbreak = function (tokens, idx, options /*, env */) { - return options.breaks ? (options.xhtmlOut ? '
\n' : '
\n') : '\n'; -}; +function isFunction(value) { + return typeof value === "function"; +} +function isBuffer(value) { + return typeof value === "object" && ("length" in value); +} -default_rules.text = function (tokens, idx /*, options, env */) { - return escapeHtml(tokens[idx].content); -}; +function isURL(value) { + return URL && value instanceof URL; +} +// Exports +module.exports = wrap({ http: http, https: https }); +module.exports.wrap = wrap; -default_rules.html_block = function (tokens, idx /*, options, env */) { - return tokens[idx].content; -}; -default_rules.html_inline = function (tokens, idx /*, options, env */) { - return tokens[idx].content; -}; +/***/ }), -/** - * new Renderer() - * - * Creates new [[Renderer]] instance and fill [[Renderer#rules]] with defaults. - **/ -function Renderer() { +/***/ 6872: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - /** - * Renderer#rules -> Object - * - * Contains render rules for tokens. Can be updated and extended. - * - * ##### Example - * - * ```javascript - * var md = require('markdown-it')(); - * - * md.renderer.rules.strong_open = function () { return ''; }; - * md.renderer.rules.strong_close = function () { return ''; }; - * - * var result = md.renderInline(...); - * ``` - * - * Each rule is called as independent static function with fixed signature: - * - * ```javascript - * function my_token_render(tokens, idx, options, env, renderer) { - * // ... - * return renderedHTML; - * } - * ``` - * - * See [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js) - * for more details and examples. - **/ - this.rules = assign({}, default_rules); -} +var CombinedStream = __nccwpck_require__(5127); +var util = __nccwpck_require__(3837); +var path = __nccwpck_require__(1017); +var http = __nccwpck_require__(3685); +var https = __nccwpck_require__(5687); +var parseUrl = (__nccwpck_require__(7310).parse); +var fs = __nccwpck_require__(7147); +var Stream = (__nccwpck_require__(2781).Stream); +var mime = __nccwpck_require__(8254); +var asynckit = __nccwpck_require__(9633); +var populate = __nccwpck_require__(5630); + +// Public API +module.exports = FormData; +// make it a Stream +util.inherits(FormData, CombinedStream); /** - * Renderer.renderAttrs(token) -> String + * Create readable "multipart/form-data" streams. + * Can be used to submit forms + * and file uploads to other web applications. * - * Render token attributes to string. - **/ -Renderer.prototype.renderAttrs = function renderAttrs(token) { - var i, l, result; + * @constructor + * @param {Object} options - Properties to be added/overriden for FormData and CombinedStream + */ +function FormData(options) { + if (!(this instanceof FormData)) { + return new FormData(options); + } - if (!token.attrs) { return ''; } + this._overheadLength = 0; + this._valueLength = 0; + this._valuesToMeasure = []; - result = ''; + CombinedStream.call(this); - for (i = 0, l = token.attrs.length; i < l; i++) { - result += ' ' + escapeHtml(token.attrs[i][0]) + '="' + escapeHtml(token.attrs[i][1]) + '"'; + options = options || {}; + for (var option in options) { + this[option] = options[option]; } +} - return result; -}; +FormData.LINE_BREAK = '\r\n'; +FormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream'; +FormData.prototype.append = function(field, value, options) { -/** - * Renderer.renderToken(tokens, idx, options) -> String - * - tokens (Array): list of tokens - * - idx (Numbed): token index to render - * - options (Object): params of parser instance - * - * Default token renderer. Can be overriden by custom function - * in [[Renderer#rules]]. - **/ -Renderer.prototype.renderToken = function renderToken(tokens, idx, options) { - var nextToken, - result = '', - needLf = false, - token = tokens[idx]; + options = options || {}; - // Tight list paragraphs - if (token.hidden) { - return ''; + // allow filename as single option + if (typeof options == 'string') { + options = {filename: options}; } - // Insert a newline between hidden paragraph and subsequent opening - // block-level tag. - // - // For example, here we should insert a newline before blockquote: - // - a - // > - // - if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) { - result += '\n'; + var append = CombinedStream.prototype.append.bind(this); + + // all that streamy business can't handle numbers + if (typeof value == 'number') { + value = '' + value; } - // Add token name, e.g. ``. - // - needLf = false; + // no need to bother with the length + if (!options.knownLength) { + this._valuesToMeasure.push(value); + } +}; + +FormData.prototype._lengthRetriever = function(value, callback) { + + if (value.hasOwnProperty('fd')) { + + // take read range into a account + // `end` = Infinity –> read file till the end + // + // TODO: Looks like there is bug in Node fs.createReadStream + // it doesn't respect `end` options without `start` options + // Fix it when node fixes it. + // https://github.com/joyent/node/issues/7819 + if (value.end != undefined && value.end != Infinity && value.start != undefined) { + + // when end specified + // no need to calculate range + // inclusive, starts with 0 + callback(null, value.end + 1 - (value.start ? value.start : 0)); + + // not that fast snoopy + } else { + // still need to fetch file size from fs + fs.stat(value.path, function(err, stat) { + + var fileSize; + + if (err) { + callback(err); + return; } - } + + // update final size based on the range options + fileSize = stat.size - (value.start ? value.start : 0); + callback(null, fileSize); + }); } - } - result += needLf ? '>\n' : '>'; + // or http response + } else if (value.hasOwnProperty('httpVersion')) { + callback(null, +value.headers['content-length']); - return result; + // or request stream http://github.com/mikeal/request + } else if (value.hasOwnProperty('httpModule')) { + // wait till response come back + value.on('response', function(response) { + value.pause(); + callback(null, +response.headers['content-length']); + }); + value.resume(); + + // something else + } else { + callback('Unknown stream'); + } }; +FormData.prototype._multiPartHeader = function(field, value, options) { + // custom header specified (as string)? + // it becomes responsible for boundary + // (e.g. to handle extra CRLFs on .NET servers) + if (typeof options.header == 'string') { + return options.header; + } -/** - * Renderer.renderInline(tokens, options, env) -> String - * - tokens (Array): list on block tokens to render - * - options (Object): params of parser instance - * - env (Object): additional data from parsed input (references, for example) - * - * The same as [[Renderer.render]], but for single token of `inline` type. - **/ -Renderer.prototype.renderInline = function (tokens, options, env) { - var type, - result = '', - rules = this.rules; + var contentDisposition = this._getContentDisposition(value, options); + var contentType = this._getContentType(value, options); - for (var i = 0, len = tokens.length; i < len; i++) { - type = tokens[i].type; + var contents = ''; + var headers = { + // add custom disposition as third element or keep it two elements if not + 'Content-Disposition': ['form-data', 'name="' + field + '"'].concat(contentDisposition || []), + // if no content type. allow it to be empty array + 'Content-Type': [].concat(contentType || []) + }; - if (typeof rules[type] !== 'undefined') { - result += rules[type](tokens, i, options, env, this); - } else { - result += this.renderToken(tokens, i, options); - } + // allow custom headers. + if (typeof options.header == 'object') { + populate(headers, options.header); } - return result; -}; + var header; + for (var prop in headers) { + if (!headers.hasOwnProperty(prop)) continue; + header = headers[prop]; + // skip nullish headers. + if (header == null) { + continue; + } -/** internal - * Renderer.renderInlineAsText(tokens, options, env) -> String - * - tokens (Array): list on block tokens to render - * - options (Object): params of parser instance - * - env (Object): additional data from parsed input (references, for example) - * - * Special kludge for image `alt` attributes to conform CommonMark spec. - * Don't try to use it! Spec requires to show `alt` content with stripped markup, - * instead of simple escaping. - **/ -Renderer.prototype.renderInlineAsText = function (tokens, options, env) { - var result = ''; + // convert all headers to arrays. + if (!Array.isArray(header)) { + header = [header]; + } - for (var i = 0, len = tokens.length; i < len; i++) { - if (tokens[i].type === 'text') { - result += tokens[i].content; - } else if (tokens[i].type === 'image') { - result += this.renderInlineAsText(tokens[i].children, options, env); - } else if (tokens[i].type === 'softbreak') { - result += '\n'; + // add non-empty headers. + if (header.length) { + contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK; } } - return result; + return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK; }; +FormData.prototype._getContentDisposition = function(value, options) { -/** - * Renderer.render(tokens, options, env) -> String - * - tokens (Array): list on block tokens to render - * - options (Object): params of parser instance - * - env (Object): additional data from parsed input (references, for example) - * - * Takes token stream and generates HTML. Probably, you will never need to call - * this method directly. - **/ -Renderer.prototype.render = function (tokens, options, env) { - var i, len, type, - result = '', - rules = this.rules; + var filename + , contentDisposition + ; - for (i = 0, len = tokens.length; i < len; i++) { - type = tokens[i].type; + if (typeof options.filepath === 'string') { + // custom filepath for relative paths + filename = path.normalize(options.filepath).replace(/\\/g, '/'); + } else if (options.filename || value.name || value.path) { + // custom filename take precedence + // formidable and the browser add a name property + // fs- and request- streams have path property + filename = path.basename(options.filename || value.name || value.path); + } else if (value.readable && value.hasOwnProperty('httpVersion')) { + // or try http response + filename = path.basename(value.client._httpMessage.path || ''); + } - if (type === 'inline') { - result += this.renderInline(tokens[i].children, options, env); - } else if (typeof rules[type] !== 'undefined') { - result += rules[tokens[i].type](tokens, i, options, env, this); - } else { - result += this.renderToken(tokens, i, options, env); - } + if (filename) { + contentDisposition = 'filename="' + filename + '"'; } - return result; + return contentDisposition; }; -module.exports = Renderer; +FormData.prototype._getContentType = function(value, options) { + // use custom content-type above all + var contentType = options.contentType; -/***/ }), + // or try `name` from formidable, browser + if (!contentType && value.name) { + contentType = mime.lookup(value.name); + } -/***/ 2789: -/***/ ((module) => { + // or try `path` from fs-, request- streams + if (!contentType && value.path) { + contentType = mime.lookup(value.path); + } -"use strict"; -/** - * class Ruler - * - * Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and - * [[MarkdownIt#inline]] to manage sequences of functions (rules): - * - * - keep rules in defined order - * - assign the name to each rule - * - enable/disable rules - * - add/replace rules - * - allow assign rules to additional named chains (in the same) - * - cacheing lists of active rules - * - * You will not need use this class directly until write plugins. For simple - * rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and - * [[MarkdownIt.use]]. - **/ + // or if it's http-reponse + if (!contentType && value.readable && value.hasOwnProperty('httpVersion')) { + contentType = value.headers['content-type']; + } + // or guess it from the filepath or filename + if (!contentType && (options.filepath || options.filename)) { + contentType = mime.lookup(options.filepath || options.filename); + } + // fallback to the default content type if `value` is not simple value + if (!contentType && typeof value == 'object') { + contentType = FormData.DEFAULT_CONTENT_TYPE; + } -/** - * new Ruler() - **/ -function Ruler() { - // List of added rules. Each element is: - // - // { - // name: XXX, - // enabled: Boolean, - // fn: Function(), - // alt: [ name2, name3 ] - // } - // - this.__rules__ = []; + return contentType; +}; - // Cached rule chains. - // - // First level - chain name, '' for default. - // Second level - diginal anchor for fast filtering by charcodes. - // - this.__cache__ = null; -} +FormData.prototype._multiPartFooter = function() { + return function(next) { + var footer = FormData.LINE_BREAK; -//////////////////////////////////////////////////////////////////////////////// -// Helper methods, should not be used directly + var lastPart = (this._streams.length === 0); + if (lastPart) { + footer += this._lastBoundary(); + } + next(footer); + }.bind(this); +}; -// Find rule index by name -// -Ruler.prototype.__find__ = function (name) { - for (var i = 0; i < this.__rules__.length; i++) { - if (this.__rules__[i].name === name) { - return i; +FormData.prototype._lastBoundary = function() { + return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK; +}; + +FormData.prototype.getHeaders = function(userHeaders) { + var header; + var formHeaders = { + 'content-type': 'multipart/form-data; boundary=' + this.getBoundary() + }; + + for (header in userHeaders) { + if (userHeaders.hasOwnProperty(header)) { + formHeaders[header.toLowerCase()] = userHeaders[header]; } } - return -1; + + return formHeaders; }; +FormData.prototype.setBoundary = function(boundary) { + this._boundary = boundary; +}; -// Build rules lookup cache -// -Ruler.prototype.__compile__ = function () { - var self = this; - var chains = [ '' ]; +FormData.prototype.getBoundary = function() { + if (!this._boundary) { + this._generateBoundary(); + } - // collect unique names - self.__rules__.forEach(function (rule) { - if (!rule.enabled) { return; } + return this._boundary; +}; - rule.alt.forEach(function (altName) { - if (chains.indexOf(altName) < 0) { - chains.push(altName); - } - }); - }); +FormData.prototype.getBuffer = function() { + var dataBuffer = new Buffer.alloc( 0 ); + var boundary = this.getBoundary(); - self.__cache__ = {}; + // Create the form content. Add Line breaks to the end of data. + for (var i = 0, len = this._streams.length; i < len; i++) { + if (typeof this._streams[i] !== 'function') { - chains.forEach(function (chain) { - self.__cache__[chain] = []; - self.__rules__.forEach(function (rule) { - if (!rule.enabled) { return; } + // Add content to the buffer. + if(Buffer.isBuffer(this._streams[i])) { + dataBuffer = Buffer.concat( [dataBuffer, this._streams[i]]); + }else { + dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(this._streams[i])]); + } - if (chain && rule.alt.indexOf(chain) < 0) { return; } + // Add break after content. + if (typeof this._streams[i] !== 'string' || this._streams[i].substring( 2, boundary.length + 2 ) !== boundary) { + dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(FormData.LINE_BREAK)] ); + } + } + } - self.__cache__[chain].push(rule.fn); - }); - }); + // Add the footer and return the Buffer object. + return Buffer.concat( [dataBuffer, Buffer.from(this._lastBoundary())] ); }; +FormData.prototype._generateBoundary = function() { + // This generates a 50 character boundary similar to those used by Firefox. + // They are optimized for boyer-moore parsing. + var boundary = '--------------------------'; + for (var i = 0; i < 24; i++) { + boundary += Math.floor(Math.random() * 10).toString(16); + } -/** - * Ruler.at(name, fn [, options]) - * - name (String): rule name to replace. - * - fn (Function): new rule function. - * - options (Object): new rule options (not mandatory). - * - * Replace rule by name with new function & options. Throws error if name not - * found. - * - * ##### Options: - * - * - __alt__ - array with names of "alternate" chains. - * - * ##### Example - * - * Replace existing typographer replacement rule with new one: - * - * ```javascript - * var md = require('markdown-it')(); - * - * md.core.ruler.at('replacements', function replace(state) { - * //... - * }); - * ``` - **/ -Ruler.prototype.at = function (name, fn, options) { - var index = this.__find__(name); - var opt = options || {}; - - if (index === -1) { throw new Error('Parser rule not found: ' + name); } - - this.__rules__[index].fn = fn; - this.__rules__[index].alt = opt.alt || []; - this.__cache__ = null; + this._boundary = boundary; }; +// Note: getLengthSync DOESN'T calculate streams length +// As workaround one can calculate file size manually +// and add it as knownLength option +FormData.prototype.getLengthSync = function() { + var knownLength = this._overheadLength + this._valueLength; -/** - * Ruler.before(beforeName, ruleName, fn [, options]) - * - beforeName (String): new rule will be added before this one. - * - ruleName (String): name of added rule. - * - fn (Function): rule function. - * - options (Object): rule options (not mandatory). - * - * Add new rule to chain before one with given name. See also - * [[Ruler.after]], [[Ruler.push]]. - * - * ##### Options: - * - * - __alt__ - array with names of "alternate" chains. - * - * ##### Example - * - * ```javascript - * var md = require('markdown-it')(); - * - * md.block.ruler.before('paragraph', 'my_rule', function replace(state) { - * //... - * }); - * ``` - **/ -Ruler.prototype.before = function (beforeName, ruleName, fn, options) { - var index = this.__find__(beforeName); - var opt = options || {}; + // Don't get confused, there are 3 "internal" streams for each keyval pair + // so it basically checks if there is any value added to the form + if (this._streams.length) { + knownLength += this._lastBoundary().length; + } + + // https://github.com/form-data/form-data/issues/40 + if (!this.hasKnownLength()) { + // Some async length retrievers are present + // therefore synchronous length calculation is false. + // Please use getLength(callback) to get proper length + this._error(new Error('Cannot calculate proper length in synchronous way.')); + } - if (index === -1) { throw new Error('Parser rule not found: ' + beforeName); } + return knownLength; +}; - this.__rules__.splice(index, 0, { - name: ruleName, - enabled: true, - fn: fn, - alt: opt.alt || [] - }); +// Public API to check if length of added values is known +// https://github.com/form-data/form-data/issues/196 +// https://github.com/form-data/form-data/issues/262 +FormData.prototype.hasKnownLength = function() { + var hasKnownLength = true; - this.__cache__ = null; -}; + if (this._valuesToMeasure.length) { + hasKnownLength = false; + } + return hasKnownLength; +}; -/** - * Ruler.after(afterName, ruleName, fn [, options]) - * - afterName (String): new rule will be added after this one. - * - ruleName (String): name of added rule. - * - fn (Function): rule function. - * - options (Object): rule options (not mandatory). - * - * Add new rule to chain after one with given name. See also - * [[Ruler.before]], [[Ruler.push]]. - * - * ##### Options: - * - * - __alt__ - array with names of "alternate" chains. - * - * ##### Example - * - * ```javascript - * var md = require('markdown-it')(); - * - * md.inline.ruler.after('text', 'my_rule', function replace(state) { - * //... - * }); - * ``` - **/ -Ruler.prototype.after = function (afterName, ruleName, fn, options) { - var index = this.__find__(afterName); - var opt = options || {}; +FormData.prototype.getLength = function(cb) { + var knownLength = this._overheadLength + this._valueLength; - if (index === -1) { throw new Error('Parser rule not found: ' + afterName); } + if (this._streams.length) { + knownLength += this._lastBoundary().length; + } - this.__rules__.splice(index + 1, 0, { - name: ruleName, - enabled: true, - fn: fn, - alt: opt.alt || [] - }); + if (!this._valuesToMeasure.length) { + process.nextTick(cb.bind(this, null, knownLength)); + return; + } - this.__cache__ = null; -}; + asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) { + if (err) { + cb(err); + return; + } -/** - * Ruler.push(ruleName, fn [, options]) - * - ruleName (String): name of added rule. - * - fn (Function): rule function. - * - options (Object): rule options (not mandatory). - * - * Push new rule to the end of chain. See also - * [[Ruler.before]], [[Ruler.after]]. - * - * ##### Options: - * - * - __alt__ - array with names of "alternate" chains. - * - * ##### Example - * - * ```javascript - * var md = require('markdown-it')(); - * - * md.core.ruler.push('my_rule', function replace(state) { - * //... - * }); - * ``` - **/ -Ruler.prototype.push = function (ruleName, fn, options) { - var opt = options || {}; + values.forEach(function(length) { + knownLength += length; + }); - this.__rules__.push({ - name: ruleName, - enabled: true, - fn: fn, - alt: opt.alt || [] + cb(null, knownLength); }); - - this.__cache__ = null; }; +FormData.prototype.submit = function(params, cb) { + var request + , options + , defaults = {method: 'post'} + ; -/** - * Ruler.enable(list [, ignoreInvalid]) -> Array - * - list (String|Array): list of rule names to enable. - * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found. - * - * Enable rules with given names. If any rule name not found - throw Error. - * Errors can be disabled by second param. - * - * Returns list of found rule names (if no exception happened). - * - * See also [[Ruler.disable]], [[Ruler.enableOnly]]. - **/ -Ruler.prototype.enable = function (list, ignoreInvalid) { - if (!Array.isArray(list)) { list = [ list ]; } + // parse provided url if it's string + // or treat it as options object + if (typeof params == 'string') { - var result = []; + params = parseUrl(params); + options = populate({ + port: params.port, + path: params.pathname, + host: params.hostname, + protocol: params.protocol + }, defaults); - // Search by name and enable - list.forEach(function (name) { - var idx = this.__find__(name); + // use custom params + } else { - if (idx < 0) { - if (ignoreInvalid) { return; } - throw new Error('Rules manager: invalid rule name ' + name); + options = populate(params, defaults); + // if no port provided use default one + if (!options.port) { + options.port = options.protocol == 'https:' ? 443 : 80; } - this.__rules__[idx].enabled = true; - result.push(name); - }, this); - - this.__cache__ = null; - return result; -}; + } + // put that good code in getHeaders to some use + options.headers = this.getHeaders(params.headers); -/** - * Ruler.enableOnly(list [, ignoreInvalid]) - * - list (String|Array): list of rule names to enable (whitelist). - * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found. - * - * Enable rules with given names, and disable everything else. If any rule name - * not found - throw Error. Errors can be disabled by second param. - * - * See also [[Ruler.disable]], [[Ruler.enable]]. - **/ -Ruler.prototype.enableOnly = function (list, ignoreInvalid) { - if (!Array.isArray(list)) { list = [ list ]; } + // https if specified, fallback to http in any other case + if (options.protocol == 'https:') { + request = https.request(options); + } else { + request = http.request(options); + } - this.__rules__.forEach(function (rule) { rule.enabled = false; }); + // get content length and fire away + this.getLength(function(err, length) { + if (err && err !== 'Unknown stream') { + this._error(err); + return; + } - this.enable(list, ignoreInvalid); -}; + // add content length + if (length) { + request.setHeader('Content-Length', length); + } + this.pipe(request); + if (cb) { + var onResponse; -/** - * Ruler.disable(list [, ignoreInvalid]) -> Array - * - list (String|Array): list of rule names to disable. - * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found. - * - * Disable rules with given names. If any rule name not found - throw Error. - * Errors can be disabled by second param. - * - * Returns list of found rule names (if no exception happened). - * - * See also [[Ruler.enable]], [[Ruler.enableOnly]]. - **/ -Ruler.prototype.disable = function (list, ignoreInvalid) { - if (!Array.isArray(list)) { list = [ list ]; } + var callback = function (error, responce) { + request.removeListener('error', callback); + request.removeListener('response', onResponse); - var result = []; + return cb.call(this, error, responce); + }; - // Search by name and disable - list.forEach(function (name) { - var idx = this.__find__(name); + onResponse = callback.bind(this, null); - if (idx < 0) { - if (ignoreInvalid) { return; } - throw new Error('Rules manager: invalid rule name ' + name); + request.on('error', callback); + request.on('response', onResponse); } - this.__rules__[idx].enabled = false; - result.push(name); - }, this); + }.bind(this)); - this.__cache__ = null; - return result; + return request; }; - -/** - * Ruler.getRules(chainName) -> Array - * - * Return array of active functions (rules) for given chain name. It analyzes - * rules configuration, compiles caches if not exists and returns result. - * - * Default chain name is `''` (empty string). It can't be skipped. That's - * done intentionally, to keep signature monomorphic for high speed. - **/ -Ruler.prototype.getRules = function (chainName) { - if (this.__cache__ === null) { - this.__compile__(); +FormData.prototype._error = function(err) { + if (!this.error) { + this.error = err; + this.pause(); + this.emit('error', err); } +}; - // Chain can be empty, if rules disabled. But we still have to return Array. - return this.__cache__[chainName] || []; +FormData.prototype.toString = function () { + return '[object FormData]'; }; -module.exports = Ruler; + +/***/ }), + +/***/ 5630: +/***/ ((module) => { + +// populates missing values +module.exports = function(dst, src) { + + Object.keys(src).forEach(function(prop) + { + dst[prop] = dst[prop] || src[prop]; + }); + + return dst; +}; /***/ }), -/***/ 7429: +/***/ 1409: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; -// Block quotes +var uc_micro = __nccwpck_require__(4113); -var isSpace = (__nccwpck_require__(6498).isSpace); - - -module.exports = function blockquote(state, startLine, endLine, silent) { - var adjustTab, - ch, - i, - initial, - l, - lastLineEmpty, - lines, - nextLine, - offset, - oldBMarks, - oldBSCount, - oldIndent, - oldParentType, - oldSCount, - oldTShift, - spaceAfterMarker, - terminate, - terminatorRules, - token, - isOutdented, - oldLineMax = state.lineMax, - pos = state.bMarks[startLine] + state.tShift[startLine], - max = state.eMarks[startLine]; +function reFactory (opts) { + const re = {}; + opts = opts || {}; - // if it's indented more than 3 spaces, it should be a code block - if (state.sCount[startLine] - state.blkIndent >= 4) { return false; } + re.src_Any = uc_micro.Any.source; + re.src_Cc = uc_micro.Cc.source; + re.src_Z = uc_micro.Z.source; + re.src_P = uc_micro.P.source; - // check the block quote marker - if (state.src.charCodeAt(pos++) !== 0x3E/* > */) { return false; } + // \p{\Z\P\Cc\CF} (white spaces + control + format + punctuation) + re.src_ZPCc = [re.src_Z, re.src_P, re.src_Cc].join('|'); - // we know that it's going to be a valid blockquote, - // so no point trying to find the end of it in silent mode - if (silent) { return true; } + // \p{\Z\Cc} (white spaces + control) + re.src_ZCc = [re.src_Z, re.src_Cc].join('|'); - // set offset past spaces and ">" - initial = offset = state.sCount[startLine] + 1; + // Experimental. List of chars, completely prohibited in links + // because can separate it from other part of text + const text_separators = '[><\uff5c]'; - // skip one optional space after '>' - if (state.src.charCodeAt(pos) === 0x20 /* space */) { - // ' > test ' - // ^ -- position start of line here: - pos++; - initial++; - offset++; - adjustTab = false; - spaceAfterMarker = true; - } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) { - spaceAfterMarker = true; - - if ((state.bsCount[startLine] + offset) % 4 === 3) { - // ' >\t test ' - // ^ -- position start of line here (tab has width===1) - pos++; - initial++; - offset++; - adjustTab = false; - } else { - // ' >\t test ' - // ^ -- position start of line here + shift bsCount slightly - // to make extra space appear - adjustTab = true; - } - } else { - spaceAfterMarker = false; - } + // All possible word characters (everything without punctuation, spaces & controls) + // Defined via punctuation & spaces to save space + // Should be something like \p{\L\N\S\M} (\w but without `_`) + re.src_pseudo_letter = '(?:(?!' + text_separators + '|' + re.src_ZPCc + ')' + re.src_Any + ')'; + // The same as abothe but without [0-9] + // var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')'; - oldBMarks = [ state.bMarks[startLine] ]; - state.bMarks[startLine] = pos; + re.src_ip4 = - while (pos < max) { - ch = state.src.charCodeAt(pos); + '(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'; - if (isSpace(ch)) { - if (ch === 0x09) { - offset += 4 - (offset + state.bsCount[startLine] + (adjustTab ? 1 : 0)) % 4; - } else { - offset++; - } - } else { - break; - } + // Prohibit any of "@/[]()" in user/pass to avoid wrong domain fetch. + re.src_auth = '(?:(?:(?!' + re.src_ZCc + '|[@/\\[\\]()]).)+@)?'; - pos++; - } + re.src_port = - oldBSCount = [ state.bsCount[startLine] ]; - state.bsCount[startLine] = state.sCount[startLine] + 1 + (spaceAfterMarker ? 1 : 0); + '(?::(?:6(?:[0-4]\\d{3}|5(?:[0-4]\\d{2}|5(?:[0-2]\\d|3[0-5])))|[1-5]?\\d{1,4}))?'; - lastLineEmpty = pos >= max; + re.src_host_terminator = - oldSCount = [ state.sCount[startLine] ]; - state.sCount[startLine] = offset - initial; + '(?=$|' + text_separators + '|' + re.src_ZPCc + ')' + + '(?!' + (opts['---'] ? '-(?!--)|' : '-|') + '_|:\\d|\\.-|\\.(?!$|' + re.src_ZPCc + '))'; - oldTShift = [ state.tShift[startLine] ]; - state.tShift[startLine] = pos - state.bMarks[startLine]; + re.src_path = - terminatorRules = state.md.block.ruler.getRules('blockquote'); + '(?:' + + '[/?#]' + + '(?:' + + '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\]{}.,"\'?!\\-;]).|' + + '\\[(?:(?!' + re.src_ZCc + '|\\]).)*\\]|' + + '\\((?:(?!' + re.src_ZCc + '|[)]).)*\\)|' + + '\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\}|' + + '\\"(?:(?!' + re.src_ZCc + '|["]).)+\\"|' + + "\\'(?:(?!" + re.src_ZCc + "|[']).)+\\'|" + - oldParentType = state.parentType; - state.parentType = 'blockquote'; + // allow `I'm_king` if no pair found + "\\'(?=" + re.src_pseudo_letter + '|[-])|' + - // Search the end of the block - // - // Block ends with either: - // 1. an empty line outside: - // ``` - // > test - // - // ``` - // 2. an empty line inside: - // ``` - // > - // test - // ``` - // 3. another tag: - // ``` - // > test - // - - - - // ``` - for (nextLine = startLine + 1; nextLine < endLine; nextLine++) { - // check if it's outdented, i.e. it's inside list item and indented - // less than said list item: - // - // ``` - // 1. anything - // > current blockquote - // 2. checking this line - // ``` - isOutdented = state.sCount[nextLine] < state.blkIndent; + // google has many dots in "google search" links (#66, #81). + // github has ... in commit range links, + // Restrict to + // - english + // - percent-encoded + // - parts of file path + // - params separator + // until more examples found. + '\\.{2,}[a-zA-Z0-9%/&]|' + - pos = state.bMarks[nextLine] + state.tShift[nextLine]; - max = state.eMarks[nextLine]; + '\\.(?!' + re.src_ZCc + '|[.]|$)|' + + (opts['---'] + ? '\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate + : '\\-+|' + ) + + // allow `,,,` in paths + ',(?!' + re.src_ZCc + '|$)|' + - if (pos >= max) { - // Case 1: line is not inside the blockquote, and this line is empty. - break; - } + // allow `;` if not followed by space-like char + ';(?!' + re.src_ZCc + '|$)|' + - if (state.src.charCodeAt(pos++) === 0x3E/* > */ && !isOutdented) { - // This line is inside the blockquote. + // allow `!!!` in paths, but not at the end + '\\!+(?!' + re.src_ZCc + '|[!]|$)|' + - // set offset past spaces and ">" - initial = offset = state.sCount[nextLine] + 1; + '\\?(?!' + re.src_ZCc + '|[?]|$)' + + ')+' + + '|\\/' + + ')?'; - // skip one optional space after '>' - if (state.src.charCodeAt(pos) === 0x20 /* space */) { - // ' > test ' - // ^ -- position start of line here: - pos++; - initial++; - offset++; - adjustTab = false; - spaceAfterMarker = true; - } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) { - spaceAfterMarker = true; + // Allow anything in markdown spec, forbid quote (") at the first position + // because emails enclosed in quotes are far more common + re.src_email_name = - if ((state.bsCount[nextLine] + offset) % 4 === 3) { - // ' >\t test ' - // ^ -- position start of line here (tab has width===1) - pos++; - initial++; - offset++; - adjustTab = false; - } else { - // ' >\t test ' - // ^ -- position start of line here + shift bsCount slightly - // to make extra space appear - adjustTab = true; - } - } else { - spaceAfterMarker = false; - } + '[\\-;:&=\\+\\$,\\.a-zA-Z0-9_][\\-;:&=\\+\\$,\\"\\.a-zA-Z0-9_]*'; - oldBMarks.push(state.bMarks[nextLine]); - state.bMarks[nextLine] = pos; + re.src_xn = - while (pos < max) { - ch = state.src.charCodeAt(pos); + 'xn--[a-z0-9\\-]{1,59}'; - if (isSpace(ch)) { - if (ch === 0x09) { - offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4; - } else { - offset++; - } - } else { - break; - } + // More to read about domain names + // http://serverfault.com/questions/638260/ - pos++; - } + re.src_domain_root = - lastLineEmpty = pos >= max; + // Allow letters & digits (http://test1) + '(?:' + + re.src_xn + + '|' + + re.src_pseudo_letter + '{1,63}' + + ')'; - oldBSCount.push(state.bsCount[nextLine]); - state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0); + re.src_domain = - oldSCount.push(state.sCount[nextLine]); - state.sCount[nextLine] = offset - initial; + '(?:' + + re.src_xn + + '|' + + '(?:' + re.src_pseudo_letter + ')' + + '|' + + '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' + + ')'; - oldTShift.push(state.tShift[nextLine]); - state.tShift[nextLine] = pos - state.bMarks[nextLine]; - continue; - } + re.src_host = - // Case 2: line is not inside the blockquote, and the last line was empty. - if (lastLineEmpty) { break; } + '(?:' + + // Don't need IP check, because digits are already allowed in normal domain names + // src_ip4 + + // '|' + + '(?:(?:(?:' + re.src_domain + ')\\.)*' + re.src_domain/* _root */ + ')' + + ')'; - // Case 3: another tag found. - terminate = false; - for (i = 0, l = terminatorRules.length; i < l; i++) { - if (terminatorRules[i](state, nextLine, endLine, true)) { - terminate = true; - break; - } - } + re.tpl_host_fuzzy = - if (terminate) { - // Quirk to enforce "hard termination mode" for paragraphs; - // normally if you call `tokenize(state, startLine, nextLine)`, - // paragraphs will look below nextLine for paragraph continuation, - // but if blockquote is terminated by another tag, they shouldn't - state.lineMax = nextLine; + '(?:' + + re.src_ip4 + + '|' + + '(?:(?:(?:' + re.src_domain + ')\\.)+(?:%TLDS%))' + + ')'; - if (state.blkIndent !== 0) { - // state.blkIndent was non-zero, we now set it to zero, - // so we need to re-calculate all offsets to appear as - // if indent wasn't changed - oldBMarks.push(state.bMarks[nextLine]); - oldBSCount.push(state.bsCount[nextLine]); - oldTShift.push(state.tShift[nextLine]); - oldSCount.push(state.sCount[nextLine]); - state.sCount[nextLine] -= state.blkIndent; - } + re.tpl_host_no_ip_fuzzy = - break; - } + '(?:(?:(?:' + re.src_domain + ')\\.)+(?:%TLDS%))'; - oldBMarks.push(state.bMarks[nextLine]); - oldBSCount.push(state.bsCount[nextLine]); - oldTShift.push(state.tShift[nextLine]); - oldSCount.push(state.sCount[nextLine]); + re.src_host_strict = - // A negative indentation means that this is a paragraph continuation - // - state.sCount[nextLine] = -1; - } + re.src_host + re.src_host_terminator; - oldIndent = state.blkIndent; - state.blkIndent = 0; + re.tpl_host_fuzzy_strict = - token = state.push('blockquote_open', 'blockquote', 1); - token.markup = '>'; - token.map = lines = [ startLine, 0 ]; + re.tpl_host_fuzzy + re.src_host_terminator; - state.md.block.tokenize(state, startLine, nextLine); + re.src_host_port_strict = - token = state.push('blockquote_close', 'blockquote', -1); - token.markup = '>'; + re.src_host + re.src_port + re.src_host_terminator; - state.lineMax = oldLineMax; - state.parentType = oldParentType; - lines[1] = state.line; + re.tpl_host_port_fuzzy_strict = - // Restore original tShift; this might not be necessary since the parser - // has already been here, but just to make sure we can do that. - for (i = 0; i < oldTShift.length; i++) { - state.bMarks[i + startLine] = oldBMarks[i]; - state.tShift[i + startLine] = oldTShift[i]; - state.sCount[i + startLine] = oldSCount[i]; - state.bsCount[i + startLine] = oldBSCount[i]; - } - state.blkIndent = oldIndent; + re.tpl_host_fuzzy + re.src_port + re.src_host_terminator; + + re.tpl_host_port_no_ip_fuzzy_strict = + + re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator; + + // + // Main rules + // + + // Rude test fuzzy links by host, for quick deny + re.tpl_host_fuzzy_test = + + 'localhost|www\\.|\\.\\d{1,3}\\.|(?:\\.(?:%TLDS%)(?:' + re.src_ZPCc + '|>|$))'; + + re.tpl_email_fuzzy = + + '(^|' + text_separators + '|"|\\(|' + re.src_ZCc + ')' + + '(' + re.src_email_name + '@' + re.tpl_host_fuzzy_strict + ')'; + + re.tpl_link_fuzzy = + // Fuzzy link can't be prepended with .:/\- and non punctuation. + // but can start with > (markdown blockquote) + '(^|(?![.:/\\-_@])(?:[$+<=>^`|\uff5c]|' + re.src_ZPCc + '))' + + '((?![$+<=>^`|\uff5c])' + re.tpl_host_port_fuzzy_strict + re.src_path + ')'; + + re.tpl_link_no_ip_fuzzy = + // Fuzzy link can't be prepended with .:/\- and non punctuation. + // but can start with > (markdown blockquote) + '(^|(?![.:/\\-_@])(?:[$+<=>^`|\uff5c]|' + re.src_ZPCc + '))' + + '((?![$+<=>^`|\uff5c])' + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ')'; - return true; -}; + return re +} +// +// Helpers +// -/***/ }), +// Merge objects +// +function assign (obj /* from1, from2, from3, ... */) { + const sources = Array.prototype.slice.call(arguments, 1); -/***/ 2731: -/***/ ((module) => { + sources.forEach(function (source) { + if (!source) { return } -"use strict"; -// Code block (4 spaces padded) + Object.keys(source).forEach(function (key) { + obj[key] = source[key]; + }); + }); + return obj +} +function _class (obj) { return Object.prototype.toString.call(obj) } +function isString (obj) { return _class(obj) === '[object String]' } +function isObject (obj) { return _class(obj) === '[object Object]' } +function isRegExp (obj) { return _class(obj) === '[object RegExp]' } +function isFunction (obj) { return _class(obj) === '[object Function]' } +function escapeRE (str) { return str.replace(/[.?*+^$[\]\\(){}|-]/g, '\\$&') } -module.exports = function code(state, startLine, endLine/*, silent*/) { - var nextLine, last, token; +// - if (state.sCount[startLine] - state.blkIndent < 4) { return false; } +const defaultOptions = { + fuzzyLink: true, + fuzzyEmail: true, + fuzzyIP: false +}; - last = nextLine = startLine + 1; +function isOptionsObj (obj) { + return Object.keys(obj || {}).reduce(function (acc, k) { + /* eslint-disable-next-line no-prototype-builtins */ + return acc || defaultOptions.hasOwnProperty(k) + }, false) +} - while (nextLine < endLine) { - if (state.isEmpty(nextLine)) { - nextLine++; - continue; - } +const defaultSchemas = { + 'http:': { + validate: function (text, pos, self) { + const tail = text.slice(pos); - if (state.sCount[nextLine] - state.blkIndent >= 4) { - nextLine++; - last = nextLine; - continue; + if (!self.re.http) { + // compile lazily, because "host"-containing variables can change on tlds update. + self.re.http = new RegExp( + '^\\/\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i' + ); + } + if (self.re.http.test(tail)) { + return tail.match(self.re.http)[0].length + } + return 0 } - break; - } + }, + 'https:': 'http:', + 'ftp:': 'http:', + '//': { + validate: function (text, pos, self) { + const tail = text.slice(pos); - state.line = last; + if (!self.re.no_http) { + // compile lazily, because "host"-containing variables can change on tlds update. + self.re.no_http = new RegExp( + '^' + + self.re.src_auth + + // Don't allow single-level domains, because of false positives like '//test' + // with code comments + '(?:localhost|(?:(?:' + self.re.src_domain + ')\\.)+' + self.re.src_domain_root + ')' + + self.re.src_port + + self.re.src_host_terminator + + self.re.src_path, - token = state.push('code_block', 'code', 0); - token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + '\n'; - token.map = [ startLine, state.line ]; + 'i' + ); + } - return true; + if (self.re.no_http.test(tail)) { + // should not be `://` & `///`, that protects from errors in protocol name + if (pos >= 3 && text[pos - 3] === ':') { return 0 } + if (pos >= 3 && text[pos - 3] === '/') { return 0 } + return tail.match(self.re.no_http)[0].length + } + return 0 + } + }, + 'mailto:': { + validate: function (text, pos, self) { + const tail = text.slice(pos); + + if (!self.re.mailto) { + self.re.mailto = new RegExp( + '^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i' + ); + } + if (self.re.mailto.test(tail)) { + return tail.match(self.re.mailto)[0].length + } + return 0 + } + } }; +// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js) +/* eslint-disable-next-line max-len */ +const tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]'; -/***/ }), +// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead +const tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'.split('|'); -/***/ 4215: -/***/ ((module) => { +function resetScanCache (self) { + self.__index__ = -1; + self.__text_cache__ = ''; +} -"use strict"; -// fences (``` lang, ~~~ lang) +function createValidator (re) { + return function (text, pos) { + const tail = text.slice(pos); + if (re.test(tail)) { + return tail.match(re)[0].length + } + return 0 + } +} +function createNormalizer () { + return function (match, self) { + self.normalize(match); + } +} +// Schemas compiler. Build regexps. +// +function compile (self) { + // Load & clone RE patterns. + const re = self.re = reFactory(self.__opts__); -module.exports = function fence(state, startLine, endLine, silent) { - var marker, len, params, nextLine, mem, token, markup, - haveEndMarker = false, - pos = state.bMarks[startLine] + state.tShift[startLine], - max = state.eMarks[startLine]; + // Define dynamic patterns + const tlds = self.__tlds__.slice(); - // if it's indented more than 3 spaces, it should be a code block - if (state.sCount[startLine] - state.blkIndent >= 4) { return false; } + self.onCompile(); - if (pos + 3 > max) { return false; } + if (!self.__tlds_replaced__) { + tlds.push(tlds_2ch_src_re); + } + tlds.push(re.src_xn); - marker = state.src.charCodeAt(pos); + re.src_tlds = tlds.join('|'); - if (marker !== 0x7E/* ~ */ && marker !== 0x60 /* ` */) { - return false; - } + function untpl (tpl) { return tpl.replace('%TLDS%', re.src_tlds) } - // scan marker length - mem = pos; - pos = state.skipChars(pos, marker); + re.email_fuzzy = RegExp(untpl(re.tpl_email_fuzzy), 'i'); + re.link_fuzzy = RegExp(untpl(re.tpl_link_fuzzy), 'i'); + re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i'); + re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), 'i'); - len = pos - mem; + // + // Compile each schema + // - if (len < 3) { return false; } + const aliases = []; - markup = state.src.slice(mem, pos); - params = state.src.slice(pos, max); + self.__compiled__ = {}; // Reset compiled data - if (marker === 0x60 /* ` */) { - if (params.indexOf(String.fromCharCode(marker)) >= 0) { - return false; - } + function schemaError (name, val) { + throw new Error('(LinkifyIt) Invalid schema "' + name + '": ' + val) } - // Since start is found, we can report success here in validation mode - if (silent) { return true; } + Object.keys(self.__schemas__).forEach(function (name) { + const val = self.__schemas__[name]; - // search end of block - nextLine = startLine; + // skip disabled methods + if (val === null) { return } - for (;;) { - nextLine++; - if (nextLine >= endLine) { - // unclosed block should be autoclosed by end of document. - // also block seems to be autoclosed by end of parent - break; - } + const compiled = { validate: null, link: null }; - pos = mem = state.bMarks[nextLine] + state.tShift[nextLine]; - max = state.eMarks[nextLine]; + self.__compiled__[name] = compiled; - if (pos < max && state.sCount[nextLine] < state.blkIndent) { - // non-empty line with negative indent should stop the list: - // - ``` - // test - break; - } + if (isObject(val)) { + if (isRegExp(val.validate)) { + compiled.validate = createValidator(val.validate); + } else if (isFunction(val.validate)) { + compiled.validate = val.validate; + } else { + schemaError(name, val); + } - if (state.src.charCodeAt(pos) !== marker) { continue; } + if (isFunction(val.normalize)) { + compiled.normalize = val.normalize; + } else if (!val.normalize) { + compiled.normalize = createNormalizer(); + } else { + schemaError(name, val); + } - if (state.sCount[nextLine] - state.blkIndent >= 4) { - // closing fence should be indented less than 4 spaces - continue; + return } - pos = state.skipChars(pos, marker); + if (isString(val)) { + aliases.push(name); + return + } - // closing code fence must be at least as long as the opening one - if (pos - mem < len) { continue; } + schemaError(name, val); + }); - // make sure tail has spaces only - pos = state.skipSpaces(pos); + // + // Compile postponed aliases + // - if (pos < max) { continue; } + aliases.forEach(function (alias) { + if (!self.__compiled__[self.__schemas__[alias]]) { + // Silently fail on missed schemas to avoid errons on disable. + // schemaError(alias, self.__schemas__[alias]); + return + } - haveEndMarker = true; - // found! - break; - } + self.__compiled__[alias].validate = + self.__compiled__[self.__schemas__[alias]].validate; + self.__compiled__[alias].normalize = + self.__compiled__[self.__schemas__[alias]].normalize; + }); - // If a fence has heading spaces, they should be removed from its inner block - len = state.sCount[startLine]; + // + // Fake record for guessed links + // + self.__compiled__[''] = { validate: null, normalize: createNormalizer() }; - state.line = nextLine + (haveEndMarker ? 1 : 0); + // + // Build schema condition + // + const slist = Object.keys(self.__compiled__) + .filter(function (name) { + // Filter disabled & fake schemas + return name.length > 0 && self.__compiled__[name] + }) + .map(escapeRE) + .join('|'); + // (?!_) cause 1.5x slowdown + self.re.schema_test = RegExp('(^|(?!_)(?:[><\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'i'); + self.re.schema_search = RegExp('(^|(?!_)(?:[><\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'ig'); + self.re.schema_at_start = RegExp('^' + self.re.schema_search.source, 'i'); - token = state.push('fence', 'code', 0); - token.info = params; - token.content = state.getLines(startLine + 1, nextLine, len, true); - token.markup = markup; - token.map = [ startLine, state.line ]; + self.re.pretest = RegExp( + '(' + self.re.schema_test.source + ')|(' + self.re.host_fuzzy_test.source + ')|@', + 'i' + ); - return true; -}; + // + // Cleanup + // + resetScanCache(self); +} -/***/ }), +/** + * class Match + * + * Match result. Single element of array, returned by [[LinkifyIt#match]] + **/ +function Match (self, shift) { + const start = self.__index__; + const end = self.__last_index__; + const text = self.__text_cache__.slice(start, end); -/***/ 8392: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + /** + * Match#schema -> String + * + * Prefix (protocol) for matched string. + **/ + this.schema = self.__schema__.toLowerCase(); + /** + * Match#index -> Number + * + * First position of matched string. + **/ + this.index = start + shift; + /** + * Match#lastIndex -> Number + * + * Next position after matched string. + **/ + this.lastIndex = end + shift; + /** + * Match#raw -> String + * + * Matched string. + **/ + this.raw = text; + /** + * Match#text -> String + * + * Notmalized text of matched string. + **/ + this.text = text; + /** + * Match#url -> String + * + * Normalized url of matched string. + **/ + this.url = text; +} -"use strict"; -// heading (#, ##, ...) +function createMatch (self, shift) { + const match = new Match(self, shift); + self.__compiled__[match.schema].normalize(match, self); + return match +} -var isSpace = (__nccwpck_require__(6498).isSpace); +/** + * class LinkifyIt + **/ +/** + * new LinkifyIt(schemas, options) + * - schemas (Object): Optional. Additional schemas to validate (prefix/validator) + * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false } + * + * Creates new linkifier instance with optional additional schemas. + * Can be called without `new` keyword for convenience. + * + * By default understands: + * + * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links + * - "fuzzy" links and emails (example.com, foo@bar.com). + * + * `schemas` is an object, where each key/value describes protocol/rule: + * + * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:` + * for example). `linkify-it` makes shure that prefix is not preceeded with + * alphanumeric char and symbols. Only whitespaces and punctuation allowed. + * - __value__ - rule to check tail after link prefix + * - _String_ - just alias to existing rule + * - _Object_ + * - _validate_ - validator function (should return matched length on success), + * or `RegExp`. + * - _normalize_ - optional function to normalize text & url of matched result + * (for example, for @twitter mentions). + * + * `options`: + * + * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`. + * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts + * like version numbers. Default `false`. + * - __fuzzyEmail__ - recognize emails without `mailto:` prefix. + * + **/ +function LinkifyIt (schemas, options) { + if (!(this instanceof LinkifyIt)) { + return new LinkifyIt(schemas, options) + } -module.exports = function heading(state, startLine, endLine, silent) { - var ch, level, tmp, token, - pos = state.bMarks[startLine] + state.tShift[startLine], - max = state.eMarks[startLine]; + if (!options) { + if (isOptionsObj(schemas)) { + options = schemas; + schemas = {}; + } + } - // if it's indented more than 3 spaces, it should be a code block - if (state.sCount[startLine] - state.blkIndent >= 4) { return false; } + this.__opts__ = assign({}, defaultOptions, options); - ch = state.src.charCodeAt(pos); + // Cache last tested result. Used to skip repeating steps on next `match` call. + this.__index__ = -1; + this.__last_index__ = -1; // Next scan position + this.__schema__ = ''; + this.__text_cache__ = ''; - if (ch !== 0x23/* # */ || pos >= max) { return false; } + this.__schemas__ = assign({}, defaultSchemas, schemas); + this.__compiled__ = {}; - // count heading level - level = 1; - ch = state.src.charCodeAt(++pos); - while (ch === 0x23/* # */ && pos < max && level <= 6) { - level++; - ch = state.src.charCodeAt(++pos); - } + this.__tlds__ = tlds_default; + this.__tlds_replaced__ = false; - if (level > 6 || (pos < max && !isSpace(ch))) { return false; } + this.re = {}; - if (silent) { return true; } + compile(this); +} - // Let's cut tails like ' ### ' from the end of string +/** chainable + * LinkifyIt#add(schema, definition) + * - schema (String): rule name (fixed pattern prefix) + * - definition (String|RegExp|Object): schema definition + * + * Add new rule definition. See constructor description for details. + **/ +LinkifyIt.prototype.add = function add (schema, definition) { + this.__schemas__[schema] = definition; + compile(this); + return this +}; - max = state.skipSpacesBack(max, pos); - tmp = state.skipCharsBack(max, 0x23, pos); // # - if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) { - max = tmp; - } +/** chainable + * LinkifyIt#set(options) + * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false } + * + * Set recognition options for links without schema. + **/ +LinkifyIt.prototype.set = function set (options) { + this.__opts__ = assign(this.__opts__, options); + return this +}; - state.line = startLine + 1; +/** + * LinkifyIt#test(text) -> Boolean + * + * Searches linkifiable pattern and returns `true` on success or `false` on fail. + **/ +LinkifyIt.prototype.test = function test (text) { + // Reset scan cache + this.__text_cache__ = text; + this.__index__ = -1; - token = state.push('heading_open', 'h' + String(level), 1); - token.markup = '########'.slice(0, level); - token.map = [ startLine, state.line ]; + if (!text.length) { return false } - token = state.push('inline', '', 0); - token.content = state.src.slice(pos, max).trim(); - token.map = [ startLine, state.line ]; - token.children = []; + let m, ml, me, len, shift, next, re, tld_pos, at_pos; - token = state.push('heading_close', 'h' + String(level), -1); - token.markup = '########'.slice(0, level); + // try to scan for link with schema - that's the most simple rule + if (this.re.schema_test.test(text)) { + re = this.re.schema_search; + re.lastIndex = 0; + while ((m = re.exec(text)) !== null) { + len = this.testSchemaAt(text, m[2], re.lastIndex); + if (len) { + this.__schema__ = m[2]; + this.__index__ = m.index + m[1].length; + this.__last_index__ = m.index + m[0].length + len; + break + } + } + } - return true; -}; + if (this.__opts__.fuzzyLink && this.__compiled__['http:']) { + // guess schemaless links + tld_pos = text.search(this.re.host_fuzzy_test); + if (tld_pos >= 0) { + // if tld is located after found link - no need to check fuzzy pattern + if (this.__index__ < 0 || tld_pos < this.__index__) { + if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) { + shift = ml.index + ml[1].length; + if (this.__index__ < 0 || shift < this.__index__) { + this.__schema__ = ''; + this.__index__ = shift; + this.__last_index__ = ml.index + ml[0].length; + } + } + } + } + } -/***/ }), + if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) { + // guess schemaless emails + at_pos = text.indexOf('@'); + if (at_pos >= 0) { + // We can't skip this check, because this cases are possible: + // 192.168.1.1@gmail.com, my.in@example.com + if ((me = text.match(this.re.email_fuzzy)) !== null) { + shift = me.index + me[1].length; + next = me.index + me[0].length; -/***/ 276: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + if (this.__index__ < 0 || shift < this.__index__ || + (shift === this.__index__ && next > this.__last_index__)) { + this.__schema__ = 'mailto:'; + this.__index__ = shift; + this.__last_index__ = next; + } + } + } + } -"use strict"; -// Horizontal rule + return this.__index__ >= 0 +}; +/** + * LinkifyIt#pretest(text) -> Boolean + * + * Very quick check, that can give false positives. Returns true if link MAY BE + * can exists. Can be used for speed optimization, when you need to check that + * link NOT exists. + **/ +LinkifyIt.prototype.pretest = function pretest (text) { + return this.re.pretest.test(text) +}; +/** + * LinkifyIt#testSchemaAt(text, name, position) -> Number + * - text (String): text to scan + * - name (String): rule (schema) name + * - position (Number): text offset to check from + * + * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly + * at given position. Returns length of found pattern (0 on fail). + **/ +LinkifyIt.prototype.testSchemaAt = function testSchemaAt (text, schema, pos) { + // If not supported schema check requested - terminate + if (!this.__compiled__[schema.toLowerCase()]) { + return 0 + } + return this.__compiled__[schema.toLowerCase()].validate(text, pos, this) +}; -var isSpace = (__nccwpck_require__(6498).isSpace); +/** + * LinkifyIt#match(text) -> Array|null + * + * Returns array of found link descriptions or `null` on fail. We strongly + * recommend to use [[LinkifyIt#test]] first, for best speed. + * + * ##### Result match description + * + * - __schema__ - link schema, can be empty for fuzzy links, or `//` for + * protocol-neutral links. + * - __index__ - offset of matched text + * - __lastIndex__ - index of next char after mathch end + * - __raw__ - matched text + * - __text__ - normalized text + * - __url__ - link, generated from matched text + **/ +LinkifyIt.prototype.match = function match (text) { + const result = []; + let shift = 0; + // Try to take previous element from cache, if .test() called before + if (this.__index__ >= 0 && this.__text_cache__ === text) { + result.push(createMatch(this, shift)); + shift = this.__last_index__; + } -module.exports = function hr(state, startLine, endLine, silent) { - var marker, cnt, ch, token, - pos = state.bMarks[startLine] + state.tShift[startLine], - max = state.eMarks[startLine]; + // Cut head if cache was used + let tail = shift ? text.slice(shift) : text; - // if it's indented more than 3 spaces, it should be a code block - if (state.sCount[startLine] - state.blkIndent >= 4) { return false; } + // Scan string until end reached + while (this.test(tail)) { + result.push(createMatch(this, shift)); - marker = state.src.charCodeAt(pos++); + tail = tail.slice(this.__last_index__); + shift += this.__last_index__; + } - // Check hr marker - if (marker !== 0x2A/* * */ && - marker !== 0x2D/* - */ && - marker !== 0x5F/* _ */) { - return false; + if (result.length) { + return result } - // markers can be mixed with spaces, but there should be at least 3 of them + return null +}; - cnt = 1; - while (pos < max) { - ch = state.src.charCodeAt(pos++); - if (ch !== marker && !isSpace(ch)) { return false; } - if (ch === marker) { cnt++; } - } +/** + * LinkifyIt#matchAtStart(text) -> Match|null + * + * Returns fully-formed (not fuzzy) link if it starts at the beginning + * of the string, and null otherwise. + **/ +LinkifyIt.prototype.matchAtStart = function matchAtStart (text) { + // Reset scan cache + this.__text_cache__ = text; + this.__index__ = -1; - if (cnt < 3) { return false; } + if (!text.length) return null - if (silent) { return true; } + const m = this.re.schema_at_start.exec(text); + if (!m) return null - state.line = startLine + 1; + const len = this.testSchemaAt(text, m[2], m[0].length); + if (!len) return null - token = state.push('hr', 'hr', 0); - token.map = [ startLine, state.line ]; - token.markup = Array(cnt + 1).join(String.fromCharCode(marker)); + this.__schema__ = m[2]; + this.__index__ = m.index + m[1].length; + this.__last_index__ = m.index + m[0].length + len; - return true; + return createMatch(this, 0) }; +/** chainable + * LinkifyIt#tlds(list [, keepOld]) -> this + * - list (Array): list of tlds + * - keepOld (Boolean): merge with current list if `true` (`false` by default) + * + * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix) + * to avoid false positives. By default this algorythm used: + * + * - hostname with any 2-letter root zones are ok. + * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф + * are ok. + * - encoded (`xn--...`) root zones are ok. + * + * If list is replaced, then exact match for 2-chars root zones will be checked. + **/ +LinkifyIt.prototype.tlds = function tlds (list, keepOld) { + list = Array.isArray(list) ? list : [list]; -/***/ }), - -/***/ 4697: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + if (!keepOld) { + this.__tlds__ = list.slice(); + this.__tlds_replaced__ = true; + compile(this); + return this + } -"use strict"; -// HTML block + this.__tlds__ = this.__tlds__.concat(list) + .sort() + .filter(function (el, idx, arr) { + return el !== arr[idx - 1] + }) + .reverse(); + compile(this); + return this +}; +/** + * LinkifyIt#normalize(match) + * + * Default normalizer (if schema does not define it's own). + **/ +LinkifyIt.prototype.normalize = function normalize (match) { + // Do minimal possible changes by default. Need to collect feedback prior + // to move forward https://github.com/markdown-it/linkify-it/issues/1 + if (!match.schema) { match.url = 'http://' + match.url; } -var block_names = __nccwpck_require__(2553); -var HTML_OPEN_CLOSE_TAG_RE = (__nccwpck_require__(3133)/* .HTML_OPEN_CLOSE_TAG_RE */ .q); + if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) { + match.url = 'mailto:' + match.url; + } +}; -// An array of opening and corresponding closing sequences for html tags, -// last argument defines whether it can terminate a paragraph or not -// -var HTML_SEQUENCES = [ - [ /^<(script|pre|style|textarea)(?=(\s|>|$))/i, /<\/(script|pre|style|textarea)>/i, true ], - [ /^/, true ], - [ /^<\?/, /\?>/, true ], - [ /^/, true ], - [ /^/, true ], - [ new RegExp('^|$))', 'i'), /^$/, true ], - [ new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + '\\s*$'), /^$/, false ] -]; +/** + * LinkifyIt#onCompile() + * + * Override to modify basic RegExp-s. + **/ +LinkifyIt.prototype.onCompile = function onCompile () { +}; +module.exports = LinkifyIt; -module.exports = function html_block(state, startLine, endLine, silent) { - var i, nextLine, token, lineText, - pos = state.bMarks[startLine] + state.tShift[startLine], - max = state.eMarks[startLine]; - // if it's indented more than 3 spaces, it should be a code block - if (state.sCount[startLine] - state.blkIndent >= 4) { return false; } +/***/ }), - if (!state.md.options.html) { return false; } +/***/ 3597: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; } +"use strict"; - lineText = state.src.slice(pos, max); - for (i = 0; i < HTML_SEQUENCES.length; i++) { - if (HTML_SEQUENCES[i][0].test(lineText)) { break; } +var mdurl = __nccwpck_require__(3211); +var ucmicro = __nccwpck_require__(4113); +var entities = __nccwpck_require__(912); +var LinkifyIt = __nccwpck_require__(1409); +var punycode = __nccwpck_require__(4328); + +function _interopNamespaceDefault(e) { + var n = Object.create(null); + if (e) { + Object.keys(e).forEach(function (k) { + if (k !== 'default') { + var d = Object.getOwnPropertyDescriptor(e, k); + Object.defineProperty(n, k, d.get ? d : { + enumerable: true, + get: function () { return e[k]; } + }); + } + }); } + n.default = e; + return Object.freeze(n); +} - if (i === HTML_SEQUENCES.length) { return false; } - - if (silent) { - // true if this sequence can be a terminator, false otherwise - return HTML_SEQUENCES[i][2]; - } +var mdurl__namespace = /*#__PURE__*/_interopNamespaceDefault(mdurl); +var ucmicro__namespace = /*#__PURE__*/_interopNamespaceDefault(ucmicro); - nextLine = startLine + 1; +// Utilities +// - // If we are here - we detected HTML block. - // Let's roll down till block end. - if (!HTML_SEQUENCES[i][1].test(lineText)) { - for (; nextLine < endLine; nextLine++) { - if (state.sCount[nextLine] < state.blkIndent) { break; } +function _class(obj) { + return Object.prototype.toString.call(obj); +} +function isString(obj) { + return _class(obj) === '[object String]'; +} +const _hasOwnProperty = Object.prototype.hasOwnProperty; +function has(object, key) { + return _hasOwnProperty.call(object, key); +} - pos = state.bMarks[nextLine] + state.tShift[nextLine]; - max = state.eMarks[nextLine]; - lineText = state.src.slice(pos, max); +// Merge objects +// +function assign(obj /* from1, from2, from3, ... */) { + const sources = Array.prototype.slice.call(arguments, 1); + sources.forEach(function (source) { + if (!source) { + return; + } + if (typeof source !== 'object') { + throw new TypeError(source + 'must be object'); + } + Object.keys(source).forEach(function (key) { + obj[key] = source[key]; + }); + }); + return obj; +} - if (HTML_SEQUENCES[i][1].test(lineText)) { - if (lineText.length !== 0) { nextLine++; } - break; - } +// Remove element from array and put another array at those position. +// Useful for some operations with tokens +function arrayReplaceAt(src, pos, newElements) { + return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1)); +} +function isValidEntityCode(c) { + /* eslint no-bitwise:0 */ + // broken sequence + if (c >= 0xD800 && c <= 0xDFFF) { + return false; + } + // never used + if (c >= 0xFDD0 && c <= 0xFDEF) { + return false; + } + if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { + return false; + } + // control codes + if (c >= 0x00 && c <= 0x08) { + return false; + } + if (c === 0x0B) { + return false; + } + if (c >= 0x0E && c <= 0x1F) { + return false; + } + if (c >= 0x7F && c <= 0x9F) { + return false; + } + // out of range + if (c > 0x10FFFF) { + return false; + } + return true; +} +function fromCodePoint(c) { + /* eslint no-bitwise:0 */ + if (c > 0xffff) { + c -= 0x10000; + const surrogate1 = 0xd800 + (c >> 10); + const surrogate2 = 0xdc00 + (c & 0x3ff); + return String.fromCharCode(surrogate1, surrogate2); + } + return String.fromCharCode(c); +} +const UNESCAPE_MD_RE = /\\([!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])/g; +const ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi; +const UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi'); +const DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i; +function replaceEntityPattern(match, name) { + if (name.charCodeAt(0) === 0x23 /* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) { + const code = name[1].toLowerCase() === 'x' ? parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10); + if (isValidEntityCode(code)) { + return fromCodePoint(code); } + return match; } + const decoded = entities.decodeHTML(match); + if (decoded !== match) { + return decoded; + } + return match; +} - state.line = nextLine; +/* function replaceEntities(str) { + if (str.indexOf('&') < 0) { return str; } - token = state.push('html_block', '', 0); - token.map = [ startLine, nextLine ]; - token.content = state.getLines(startLine, nextLine, state.blkIndent, true); + return str.replace(ENTITY_RE, replaceEntityPattern); +} */ - return true; +function unescapeMd(str) { + if (str.indexOf('\\') < 0) { + return str; + } + return str.replace(UNESCAPE_MD_RE, '$1'); +} +function unescapeAll(str) { + if (str.indexOf('\\') < 0 && str.indexOf('&') < 0) { + return str; + } + return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) { + if (escaped) { + return escaped; + } + return replaceEntityPattern(match, entity); + }); +} +const HTML_ESCAPE_TEST_RE = /[&<>"]/; +const HTML_ESCAPE_REPLACE_RE = /[&<>"]/g; +const HTML_REPLACEMENTS = { + '&': '&', + '<': '<', + '>': '>', + '"': '"' }; +function replaceUnsafeChar(ch) { + return HTML_REPLACEMENTS[ch]; +} +function escapeHtml(str) { + if (HTML_ESCAPE_TEST_RE.test(str)) { + return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar); + } + return str; +} +const REGEXP_ESCAPE_RE = /[.?*+^$[\]\\(){}|-]/g; +function escapeRE(str) { + return str.replace(REGEXP_ESCAPE_RE, '\\$&'); +} +function isSpace(code) { + switch (code) { + case 0x09: + case 0x20: + return true; + } + return false; +} +// Zs (unicode class) || [\t\f\v\r\n] +function isWhiteSpace(code) { + if (code >= 0x2000 && code <= 0x200A) { + return true; + } + switch (code) { + case 0x09: // \t + case 0x0A: // \n + case 0x0B: // \v + case 0x0C: // \f + case 0x0D: // \r + case 0x20: + case 0xA0: + case 0x1680: + case 0x202F: + case 0x205F: + case 0x3000: + return true; + } + return false; +} -/***/ }), - -/***/ 3817: -/***/ ((module) => { - -"use strict"; -// lheading (---, ===) - - - +/* eslint-disable max-len */ -module.exports = function lheading(state, startLine, endLine/*, silent*/) { - var content, terminate, i, l, token, pos, max, level, marker, - nextLine = startLine + 1, oldParentType, - terminatorRules = state.md.block.ruler.getRules('paragraph'); +// Currently without astral characters support. +function isPunctChar(ch) { + return ucmicro__namespace.P.test(ch) || ucmicro__namespace.S.test(ch); +} - // if it's indented more than 3 spaces, it should be a code block - if (state.sCount[startLine] - state.blkIndent >= 4) { return false; } +// Markdown ASCII punctuation characters. +// +// !, ", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \, ], ^, _, `, {, |, }, or ~ +// http://spec.commonmark.org/0.15/#ascii-punctuation-character +// +// Don't confuse with unicode punctuation !!! It lacks some chars in ascii range. +// +function isMdAsciiPunct(ch) { + switch (ch) { + case 0x21 /* ! */: + case 0x22 /* " */: + case 0x23 /* # */: + case 0x24 /* $ */: + case 0x25 /* % */: + case 0x26 /* & */: + case 0x27 /* ' */: + case 0x28 /* ( */: + case 0x29 /* ) */: + case 0x2A /* * */: + case 0x2B /* + */: + case 0x2C /* , */: + case 0x2D /* - */: + case 0x2E /* . */: + case 0x2F /* / */: + case 0x3A /* : */: + case 0x3B /* ; */: + case 0x3C /* < */: + case 0x3D /* = */: + case 0x3E /* > */: + case 0x3F /* ? */: + case 0x40 /* @ */: + case 0x5B /* [ */: + case 0x5C /* \ */: + case 0x5D /* ] */: + case 0x5E /* ^ */: + case 0x5F /* _ */: + case 0x60 /* ` */: + case 0x7B /* { */: + case 0x7C /* | */: + case 0x7D /* } */: + case 0x7E /* ~ */: + return true; + default: + return false; + } +} - oldParentType = state.parentType; - state.parentType = 'paragraph'; // use paragraph to match terminatorRules +// Hepler to unify [reference labels]. +// +function normalizeReference(str) { + // Trim and collapse whitespace + // + str = str.trim().replace(/\s+/g, ' '); - // jump line-by-line until empty one or EOF - for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) { - // this would be a code block normally, but after paragraph - // it's considered a lazy continuation regardless of what's there - if (state.sCount[nextLine] - state.blkIndent > 3) { continue; } + // In node v10 'ẞ'.toLowerCase() === 'Ṿ', which is presumed to be a bug + // fixed in v12 (couldn't find any details). + // + // So treat this one as a special case + // (remove this when node v10 is no longer supported). + // + if ('ẞ'.toLowerCase() === 'Ṿ') { + str = str.replace(/ẞ/g, 'ß'); + } - // - // Check for underline in setext header - // - if (state.sCount[nextLine] >= state.blkIndent) { - pos = state.bMarks[nextLine] + state.tShift[nextLine]; - max = state.eMarks[nextLine]; + // .toLowerCase().toUpperCase() should get rid of all differences + // between letter variants. + // + // Simple .toLowerCase() doesn't normalize 125 code points correctly, + // and .toUpperCase doesn't normalize 6 of them (list of exceptions: + // İ, ϴ, ẞ, Ω, K, Å - those are already uppercased, but have differently + // uppercased versions). + // + // Here's an example showing how it happens. Lets take greek letter omega: + // uppercase U+0398 (Θ), U+03f4 (ϴ) and lowercase U+03b8 (θ), U+03d1 (ϑ) + // + // Unicode entries: + // 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8; + // 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398 + // 03D1;GREEK THETA SYMBOL;Ll;0;L; 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398 + // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L; 0398;;;;N;;;;03B8; + // + // Case-insensitive comparison should treat all of them as equivalent. + // + // But .toLowerCase() doesn't change ϑ (it's already lowercase), + // and .toUpperCase() doesn't change ϴ (already uppercase). + // + // Applying first lower then upper case normalizes any character: + // '\u0398\u03f4\u03b8\u03d1'.toLowerCase().toUpperCase() === '\u0398\u0398\u0398\u0398' + // + // Note: this is equivalent to unicode case folding; unicode normalization + // is a different step that is not required here. + // + // Final result should be uppercased, because it's later stored in an object + // (this avoid a conflict with Object.prototype members, + // most notably, `__proto__`) + // + return str.toLowerCase().toUpperCase(); +} - if (pos < max) { - marker = state.src.charCodeAt(pos); +// Re-export libraries commonly used in both markdown-it and its plugins, +// so plugins won't have to depend on them explicitly, which reduces their +// bundled size (e.g. a browser build). +// +const lib = { + mdurl: mdurl__namespace, + ucmicro: ucmicro__namespace +}; + +var utils = /*#__PURE__*/Object.freeze({ + __proto__: null, + arrayReplaceAt: arrayReplaceAt, + assign: assign, + escapeHtml: escapeHtml, + escapeRE: escapeRE, + fromCodePoint: fromCodePoint, + has: has, + isMdAsciiPunct: isMdAsciiPunct, + isPunctChar: isPunctChar, + isSpace: isSpace, + isString: isString, + isValidEntityCode: isValidEntityCode, + isWhiteSpace: isWhiteSpace, + lib: lib, + normalizeReference: normalizeReference, + unescapeAll: unescapeAll, + unescapeMd: unescapeMd +}); - if (marker === 0x2D/* - */ || marker === 0x3D/* = */) { - pos = state.skipChars(pos, marker); - pos = state.skipSpaces(pos); +// Parse link label +// +// this function assumes that first character ("[") already matches; +// returns the end of the label +// - if (pos >= max) { - level = (marker === 0x3D/* = */ ? 1 : 2); - break; - } - } +function parseLinkLabel(state, start, disableNested) { + let level, found, marker, prevPos; + const max = state.posMax; + const oldPos = state.pos; + state.pos = start + 1; + level = 1; + while (state.pos < max) { + marker = state.src.charCodeAt(state.pos); + if (marker === 0x5D /* ] */) { + level--; + if (level === 0) { + found = true; + break; } } - - // quirk for blockquotes, this line should already be checked by that rule - if (state.sCount[nextLine] < 0) { continue; } - - // Some tags can terminate paragraph without empty line. - terminate = false; - for (i = 0, l = terminatorRules.length; i < l; i++) { - if (terminatorRules[i](state, nextLine, endLine, true)) { - terminate = true; - break; + prevPos = state.pos; + state.md.inline.skipToken(state); + if (marker === 0x5B /* [ */) { + if (prevPos === state.pos - 1) { + // increase level if we find text `[`, which is not a part of any token + level++; + } else if (disableNested) { + state.pos = oldPos; + return -1; } } - if (terminate) { break; } } - - if (!level) { - // Didn't find valid underline - return false; + let labelEnd = -1; + if (found) { + labelEnd = state.pos; } - content = state.getLines(startLine, nextLine, state.blkIndent, false).trim(); - - state.line = nextLine + 1; - - token = state.push('heading_open', 'h' + String(level), 1); - token.markup = String.fromCharCode(marker); - token.map = [ startLine, state.line ]; - - token = state.push('inline', '', 0); - token.content = content; - token.map = [ startLine, state.line - 1 ]; - token.children = []; - - token = state.push('heading_close', 'h' + String(level), -1); - token.markup = String.fromCharCode(marker); - - state.parentType = oldParentType; - - return true; -}; - + // restore old state + state.pos = oldPos; + return labelEnd; +} -/***/ }), +// Parse link destination +// -/***/ 6506: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +function parseLinkDestination(str, start, max) { + let code; + let pos = start; + const result = { + ok: false, + pos: 0, + str: '' + }; + if (str.charCodeAt(pos) === 0x3C /* < */) { + pos++; + while (pos < max) { + code = str.charCodeAt(pos); + if (code === 0x0A /* \n */) { + return result; + } + if (code === 0x3C /* < */) { + return result; + } + if (code === 0x3E /* > */) { + result.pos = pos + 1; + result.str = unescapeAll(str.slice(start + 1, pos)); + result.ok = true; + return result; + } + if (code === 0x5C /* \ */ && pos + 1 < max) { + pos += 2; + continue; + } + pos++; + } -"use strict"; -// Lists + // no closing '>' + return result; + } + // this should be ... } else { ... branch + let level = 0; + while (pos < max) { + code = str.charCodeAt(pos); + if (code === 0x20) { + break; + } -var isSpace = (__nccwpck_require__(6498).isSpace); + // ascii control characters + if (code < 0x20 || code === 0x7F) { + break; + } + if (code === 0x5C /* \ */ && pos + 1 < max) { + if (str.charCodeAt(pos + 1) === 0x20) { + break; + } + pos += 2; + continue; + } + if (code === 0x28 /* ( */) { + level++; + if (level > 32) { + return result; + } + } + if (code === 0x29 /* ) */) { + if (level === 0) { + break; + } + level--; + } + pos++; + } + if (start === pos) { + return result; + } + if (level !== 0) { + return result; + } + result.str = unescapeAll(str.slice(start, pos)); + result.pos = pos; + result.ok = true; + return result; +} +// Parse link title +// -// Search `[-+*][\n ]`, returns next pos after marker on success -// or -1 on fail. -function skipBulletListMarker(state, startLine) { - var marker, pos, max, ch; - pos = state.bMarks[startLine] + state.tShift[startLine]; - max = state.eMarks[startLine]; +// Parse link title within `str` in [start, max] range, +// or continue previous parsing if `prev_state` is defined (equal to result of last execution). +// +function parseLinkTitle(str, start, max, prev_state) { + let code; + let pos = start; + const state = { + // if `true`, this is a valid link title + ok: false, + // if `true`, this link can be continued on the next line + can_continue: false, + // if `ok`, it's the position of the first character after the closing marker + pos: 0, + // if `ok`, it's the unescaped title + str: '', + // expected closing marker character code + marker: 0 + }; + if (prev_state) { + // this is a continuation of a previous parseLinkTitle call on the next line, + // used in reference links only + state.str = prev_state.str; + state.marker = prev_state.marker; + } else { + if (pos >= max) { + return state; + } + let marker = str.charCodeAt(pos); + if (marker !== 0x22 /* " */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { + return state; + } + start++; + pos++; - marker = state.src.charCodeAt(pos++); - // Check bullet - if (marker !== 0x2A/* * */ && - marker !== 0x2D/* - */ && - marker !== 0x2B/* + */) { - return -1; + // if opening marker is "(", switch it to closing marker ")" + if (marker === 0x28) { + marker = 0x29; + } + state.marker = marker; } - - if (pos < max) { - ch = state.src.charCodeAt(pos); - - if (!isSpace(ch)) { - // " -test " - is not a list item - return -1; + while (pos < max) { + code = str.charCodeAt(pos); + if (code === state.marker) { + state.pos = pos + 1; + state.str += unescapeAll(str.slice(start, pos)); + state.ok = true; + return state; + } else if (code === 0x28 /* ( */ && state.marker === 0x29 /* ) */) { + return state; + } else if (code === 0x5C /* \ */ && pos + 1 < max) { + pos++; } + pos++; } - return pos; + // no closing marker found, but this link title may continue on the next line (for references) + state.can_continue = true; + state.str += unescapeAll(str.slice(start, pos)); + return state; } -// Search `\d+[.)][\n ]`, returns next pos after marker on success -// or -1 on fail. -function skipOrderedListMarker(state, startLine) { - var ch, - start = state.bMarks[startLine] + state.tShift[startLine], - pos = start, - max = state.eMarks[startLine]; - - // List marker should have at least 2 chars (digit + dot) - if (pos + 1 >= max) { return -1; } +// Just a shortcut for bulk export - ch = state.src.charCodeAt(pos++); +var helpers = /*#__PURE__*/Object.freeze({ + __proto__: null, + parseLinkDestination: parseLinkDestination, + parseLinkLabel: parseLinkLabel, + parseLinkTitle: parseLinkTitle +}); - if (ch < 0x30/* 0 */ || ch > 0x39/* 9 */) { return -1; } +/** + * class Renderer + * + * Generates HTML from parsed token stream. Each instance has independent + * copy of rules. Those can be rewritten with ease. Also, you can add new + * rules if you create plugin and adds new token types. + **/ - for (;;) { - // EOL -> fail - if (pos >= max) { return -1; } +const default_rules = {}; +default_rules.code_inline = function (tokens, idx, options, env, slf) { + const token = tokens[idx]; + return '' + escapeHtml(token.content) + ''; +}; +default_rules.code_block = function (tokens, idx, options, env, slf) { + const token = tokens[idx]; + return '' + escapeHtml(tokens[idx].content) + '\n'; +}; +default_rules.fence = function (tokens, idx, options, env, slf) { + const token = tokens[idx]; + const info = token.info ? unescapeAll(token.info).trim() : ''; + let langName = ''; + let langAttrs = ''; + if (info) { + const arr = info.split(/(\s+)/g); + langName = arr[0]; + langAttrs = arr.slice(2).join(''); + } + let highlighted; + if (options.highlight) { + highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content); + } else { + highlighted = escapeHtml(token.content); + } + if (highlighted.indexOf('= 0x30/* 0 */ && ch <= 0x39/* 9 */) { + // Fake token just to render attributes + const tmpToken = { + attrs: tmpAttrs + }; + return `
${highlighted}
\n`; + } + return `
${highlighted}
\n`; +}; +default_rules.image = function (tokens, idx, options, env, slf) { + const token = tokens[idx]; - // List marker should have no more than 9 digits - // (prevents integer overflow in browsers) - if (pos - start >= 10) { return -1; } + // "alt" attr MUST be set, even if empty. Because it's mandatory and + // should be placed on proper position for tests. + // + // Replace content with actual value - continue; - } + token.attrs[token.attrIndex('alt')][1] = slf.renderInlineAsText(token.children, options, env); + return slf.renderToken(tokens, idx, options); +}; +default_rules.hardbreak = function (tokens, idx, options /*, env */) { + return options.xhtmlOut ? '
\n' : '
\n'; +}; +default_rules.softbreak = function (tokens, idx, options /*, env */) { + return options.breaks ? options.xhtmlOut ? '
\n' : '
\n' : '\n'; +}; +default_rules.text = function (tokens, idx /*, options, env */) { + return escapeHtml(tokens[idx].content); +}; +default_rules.html_block = function (tokens, idx /*, options, env */) { + return tokens[idx].content; +}; +default_rules.html_inline = function (tokens, idx /*, options, env */) { + return tokens[idx].content; +}; - // found valid marker - if (ch === 0x29/* ) */ || ch === 0x2e/* . */) { - break; - } +/** + * new Renderer() + * + * Creates new [[Renderer]] instance and fill [[Renderer#rules]] with defaults. + **/ +function Renderer() { + /** + * Renderer#rules -> Object + * + * Contains render rules for tokens. Can be updated and extended. + * + * ##### Example + * + * ```javascript + * var md = require('markdown-it')(); + * + * md.renderer.rules.strong_open = function () { return ''; }; + * md.renderer.rules.strong_close = function () { return ''; }; + * + * var result = md.renderInline(...); + * ``` + * + * Each rule is called as independent static function with fixed signature: + * + * ```javascript + * function my_token_render(tokens, idx, options, env, renderer) { + * // ... + * return renderedHTML; + * } + * ``` + * + * See [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.mjs) + * for more details and examples. + **/ + this.rules = assign({}, default_rules); +} - return -1; +/** + * Renderer.renderAttrs(token) -> String + * + * Render token attributes to string. + **/ +Renderer.prototype.renderAttrs = function renderAttrs(token) { + let i, l, result; + if (!token.attrs) { + return ''; + } + result = ''; + for (i = 0, l = token.attrs.length; i < l; i++) { + result += ' ' + escapeHtml(token.attrs[i][0]) + '="' + escapeHtml(token.attrs[i][1]) + '"'; } + return result; +}; +/** + * Renderer.renderToken(tokens, idx, options) -> String + * - tokens (Array): list of tokens + * - idx (Numbed): token index to render + * - options (Object): params of parser instance + * + * Default token renderer. Can be overriden by custom function + * in [[Renderer#rules]]. + **/ +Renderer.prototype.renderToken = function renderToken(tokens, idx, options) { + const token = tokens[idx]; + let result = ''; - if (pos < max) { - ch = state.src.charCodeAt(pos); - - if (!isSpace(ch)) { - // " 1.test " - is not a list item - return -1; - } + // Tight list paragraphs + if (token.hidden) { + return ''; } - return pos; -} - -function markTightParagraphs(state, idx) { - var i, l, - level = state.level + 2; - for (i = idx + 2, l = state.tokens.length - 2; i < l; i++) { - if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') { - state.tokens[i + 2].hidden = true; - state.tokens[i].hidden = true; - i += 2; - } + // Insert a newline between hidden paragraph and subsequent opening + // block-level tag. + // + // For example, here we should insert a newline before blockquote: + // - a + // > + // + if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) { + result += '\n'; } -} + // Add token name, e.g. `= 4) { return false; } + // Encode attributes, e.g. `= 0 && - state.sCount[startLine] - state.listIndent >= 4 && - state.sCount[startLine] < state.blkIndent) { - return false; + // Add a slash for self-closing tags, e.g. `= state.blkIndent) { - isTerminatingParagraph = true; + // Check if we need to add a newline after this tag + let needLf = false; + if (token.block) { + needLf = true; + if (token.nesting === 1) { + if (idx + 1 < tokens.length) { + const nextToken = tokens[idx + 1]; + if (nextToken.type === 'inline' || nextToken.hidden) { + // Block-level tag containing an inline tag. + // + needLf = false; + } else if (nextToken.nesting === -1 && nextToken.tag === token.tag) { + // Opening tag + closing tag of the same type. E.g. `
  • `. + // + needLf = false; + } + } } } + result += needLf ? '>\n' : '>'; + return result; +}; - // Detect list type and position after marker - if ((posAfterMarker = skipOrderedListMarker(state, startLine)) >= 0) { - isOrdered = true; - start = state.bMarks[startLine] + state.tShift[startLine]; - markerValue = Number(state.src.slice(start, posAfterMarker - 1)); - - // If we're starting a new ordered list right after - // a paragraph, it should start with 1. - if (isTerminatingParagraph && markerValue !== 1) return false; - - } else if ((posAfterMarker = skipBulletListMarker(state, startLine)) >= 0) { - isOrdered = false; - - } else { - return false; +/** + * Renderer.renderInline(tokens, options, env) -> String + * - tokens (Array): list on block tokens to render + * - options (Object): params of parser instance + * - env (Object): additional data from parsed input (references, for example) + * + * The same as [[Renderer.render]], but for single token of `inline` type. + **/ +Renderer.prototype.renderInline = function (tokens, options, env) { + let result = ''; + const rules = this.rules; + for (let i = 0, len = tokens.length; i < len; i++) { + const type = tokens[i].type; + if (typeof rules[type] !== 'undefined') { + result += rules[type](tokens, i, options, env, this); + } else { + result += this.renderToken(tokens, i, options); + } } + return result; +}; - // If we're starting a new unordered list right after - // a paragraph, first line should not be empty. - if (isTerminatingParagraph) { - if (state.skipSpaces(posAfterMarker) >= state.eMarks[startLine]) return false; +/** internal + * Renderer.renderInlineAsText(tokens, options, env) -> String + * - tokens (Array): list on block tokens to render + * - options (Object): params of parser instance + * - env (Object): additional data from parsed input (references, for example) + * + * Special kludge for image `alt` attributes to conform CommonMark spec. + * Don't try to use it! Spec requires to show `alt` content with stripped markup, + * instead of simple escaping. + **/ +Renderer.prototype.renderInlineAsText = function (tokens, options, env) { + let result = ''; + for (let i = 0, len = tokens.length; i < len; i++) { + switch (tokens[i].type) { + case 'text': + result += tokens[i].content; + break; + case 'image': + result += this.renderInlineAsText(tokens[i].children, options, env); + break; + case 'html_inline': + case 'html_block': + result += tokens[i].content; + break; + case 'softbreak': + case 'hardbreak': + result += '\n'; + break; + // all other tokens are skipped + } } + return result; +}; - // We should terminate list on style change. Remember first one to compare. - markerCharCode = state.src.charCodeAt(posAfterMarker - 1); - - // For validation mode we can terminate immediately - if (silent) { return true; } - - // Start list - listTokIdx = state.tokens.length; - - if (isOrdered) { - token = state.push('ordered_list_open', 'ol', 1); - if (markerValue !== 1) { - token.attrs = [ [ 'start', markerValue ] ]; +/** + * Renderer.render(tokens, options, env) -> String + * - tokens (Array): list on block tokens to render + * - options (Object): params of parser instance + * - env (Object): additional data from parsed input (references, for example) + * + * Takes token stream and generates HTML. Probably, you will never need to call + * this method directly. + **/ +Renderer.prototype.render = function (tokens, options, env) { + let result = ''; + const rules = this.rules; + for (let i = 0, len = tokens.length; i < len; i++) { + const type = tokens[i].type; + if (type === 'inline') { + result += this.renderInline(tokens[i].children, options, env); + } else if (typeof rules[type] !== 'undefined') { + result += rules[type](tokens, i, options, env, this); + } else { + result += this.renderToken(tokens, i, options, env); } - - } else { - token = state.push('bullet_list_open', 'ul', 1); } + return result; +}; - token.map = listLines = [ startLine, 0 ]; - token.markup = String.fromCharCode(markerCharCode); +/** + * class Ruler + * + * Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and + * [[MarkdownIt#inline]] to manage sequences of functions (rules): + * + * - keep rules in defined order + * - assign the name to each rule + * - enable/disable rules + * - add/replace rules + * - allow assign rules to additional named chains (in the same) + * - cacheing lists of active rules + * + * You will not need use this class directly until write plugins. For simple + * rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and + * [[MarkdownIt.use]]. + **/ +/** + * new Ruler() + **/ +function Ruler() { + // List of added rules. Each element is: // - // Iterate list items + // { + // name: XXX, + // enabled: Boolean, + // fn: Function(), + // alt: [ name2, name3 ] + // } // + this.__rules__ = []; - nextLine = startLine; - prevEmptyEnd = false; - terminatorRules = state.md.block.ruler.getRules('list'); - - oldParentType = state.parentType; - state.parentType = 'list'; - - while (nextLine < endLine) { - pos = posAfterMarker; - max = state.eMarks[nextLine]; - - initial = offset = state.sCount[nextLine] + posAfterMarker - (state.bMarks[startLine] + state.tShift[startLine]); - - while (pos < max) { - ch = state.src.charCodeAt(pos); + // Cached rule chains. + // + // First level - chain name, '' for default. + // Second level - diginal anchor for fast filtering by charcodes. + // + this.__cache__ = null; +} - if (ch === 0x09) { - offset += 4 - (offset + state.bsCount[nextLine]) % 4; - } else if (ch === 0x20) { - offset++; - } else { - break; - } +// Helper methods, should not be used directly - pos++; +// Find rule index by name +// +Ruler.prototype.__find__ = function (name) { + for (let i = 0; i < this.__rules__.length; i++) { + if (this.__rules__[i].name === name) { + return i; } + } + return -1; +}; - contentStart = pos; +// Build rules lookup cache +// +Ruler.prototype.__compile__ = function () { + const self = this; + const chains = ['']; - if (contentStart >= max) { - // trimming space in "- \n 3" case, indent is 1 here - indentAfterMarker = 1; - } else { - indentAfterMarker = offset - initial; + // collect unique names + self.__rules__.forEach(function (rule) { + if (!rule.enabled) { + return; } + rule.alt.forEach(function (altName) { + if (chains.indexOf(altName) < 0) { + chains.push(altName); + } + }); + }); + self.__cache__ = {}; + chains.forEach(function (chain) { + self.__cache__[chain] = []; + self.__rules__.forEach(function (rule) { + if (!rule.enabled) { + return; + } + if (chain && rule.alt.indexOf(chain) < 0) { + return; + } + self.__cache__[chain].push(rule.fn); + }); + }); +}; - // If we have more than 4 spaces, the indent is 1 - // (the rest is just indented code block) - if (indentAfterMarker > 4) { indentAfterMarker = 1; } - - // " - test" - // ^^^^^ - calculating total length of this thing - indent = initial + indentAfterMarker; - - // Run subparser & write tokens - token = state.push('list_item_open', 'li', 1); - token.markup = String.fromCharCode(markerCharCode); - token.map = itemLines = [ startLine, 0 ]; - if (isOrdered) { - token.info = state.src.slice(start, posAfterMarker - 1); - } +/** + * Ruler.at(name, fn [, options]) + * - name (String): rule name to replace. + * - fn (Function): new rule function. + * - options (Object): new rule options (not mandatory). + * + * Replace rule by name with new function & options. Throws error if name not + * found. + * + * ##### Options: + * + * - __alt__ - array with names of "alternate" chains. + * + * ##### Example + * + * Replace existing typographer replacement rule with new one: + * + * ```javascript + * var md = require('markdown-it')(); + * + * md.core.ruler.at('replacements', function replace(state) { + * //... + * }); + * ``` + **/ +Ruler.prototype.at = function (name, fn, options) { + const index = this.__find__(name); + const opt = options || {}; + if (index === -1) { + throw new Error('Parser rule not found: ' + name); + } + this.__rules__[index].fn = fn; + this.__rules__[index].alt = opt.alt || []; + this.__cache__ = null; +}; - // change current state, then restore it after parser subcall - oldTight = state.tight; - oldTShift = state.tShift[startLine]; - oldSCount = state.sCount[startLine]; +/** + * Ruler.before(beforeName, ruleName, fn [, options]) + * - beforeName (String): new rule will be added before this one. + * - ruleName (String): name of added rule. + * - fn (Function): rule function. + * - options (Object): rule options (not mandatory). + * + * Add new rule to chain before one with given name. See also + * [[Ruler.after]], [[Ruler.push]]. + * + * ##### Options: + * + * - __alt__ - array with names of "alternate" chains. + * + * ##### Example + * + * ```javascript + * var md = require('markdown-it')(); + * + * md.block.ruler.before('paragraph', 'my_rule', function replace(state) { + * //... + * }); + * ``` + **/ +Ruler.prototype.before = function (beforeName, ruleName, fn, options) { + const index = this.__find__(beforeName); + const opt = options || {}; + if (index === -1) { + throw new Error('Parser rule not found: ' + beforeName); + } + this.__rules__.splice(index, 0, { + name: ruleName, + enabled: true, + fn, + alt: opt.alt || [] + }); + this.__cache__ = null; +}; - // - example list - // ^ listIndent position will be here - // ^ blkIndent position will be here - // - oldListIndent = state.listIndent; - state.listIndent = state.blkIndent; - state.blkIndent = indent; +/** + * Ruler.after(afterName, ruleName, fn [, options]) + * - afterName (String): new rule will be added after this one. + * - ruleName (String): name of added rule. + * - fn (Function): rule function. + * - options (Object): rule options (not mandatory). + * + * Add new rule to chain after one with given name. See also + * [[Ruler.before]], [[Ruler.push]]. + * + * ##### Options: + * + * - __alt__ - array with names of "alternate" chains. + * + * ##### Example + * + * ```javascript + * var md = require('markdown-it')(); + * + * md.inline.ruler.after('text', 'my_rule', function replace(state) { + * //... + * }); + * ``` + **/ +Ruler.prototype.after = function (afterName, ruleName, fn, options) { + const index = this.__find__(afterName); + const opt = options || {}; + if (index === -1) { + throw new Error('Parser rule not found: ' + afterName); + } + this.__rules__.splice(index + 1, 0, { + name: ruleName, + enabled: true, + fn, + alt: opt.alt || [] + }); + this.__cache__ = null; +}; - state.tight = true; - state.tShift[startLine] = contentStart - state.bMarks[startLine]; - state.sCount[startLine] = offset; +/** + * Ruler.push(ruleName, fn [, options]) + * - ruleName (String): name of added rule. + * - fn (Function): rule function. + * - options (Object): rule options (not mandatory). + * + * Push new rule to the end of chain. See also + * [[Ruler.before]], [[Ruler.after]]. + * + * ##### Options: + * + * - __alt__ - array with names of "alternate" chains. + * + * ##### Example + * + * ```javascript + * var md = require('markdown-it')(); + * + * md.core.ruler.push('my_rule', function replace(state) { + * //... + * }); + * ``` + **/ +Ruler.prototype.push = function (ruleName, fn, options) { + const opt = options || {}; + this.__rules__.push({ + name: ruleName, + enabled: true, + fn, + alt: opt.alt || [] + }); + this.__cache__ = null; +}; - if (contentStart >= max && state.isEmpty(startLine + 1)) { - // workaround for this case - // (list item is empty, list terminates before "foo"): - // ~~~~~~~~ - // - - // - // foo - // ~~~~~~~~ - state.line = Math.min(state.line + 2, endLine); - } else { - state.md.block.tokenize(state, startLine, endLine, true); - } +/** + * Ruler.enable(list [, ignoreInvalid]) -> Array + * - list (String|Array): list of rule names to enable. + * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found. + * + * Enable rules with given names. If any rule name not found - throw Error. + * Errors can be disabled by second param. + * + * Returns list of found rule names (if no exception happened). + * + * See also [[Ruler.disable]], [[Ruler.enableOnly]]. + **/ +Ruler.prototype.enable = function (list, ignoreInvalid) { + if (!Array.isArray(list)) { + list = [list]; + } + const result = []; - // If any of list item is tight, mark list as tight - if (!state.tight || prevEmptyEnd) { - tight = false; + // Search by name and enable + list.forEach(function (name) { + const idx = this.__find__(name); + if (idx < 0) { + if (ignoreInvalid) { + return; + } + throw new Error('Rules manager: invalid rule name ' + name); } - // Item become loose if finish with empty line, - // but we should filter last element, because it means list finish - prevEmptyEnd = (state.line - startLine) > 1 && state.isEmpty(state.line - 1); - - state.blkIndent = state.listIndent; - state.listIndent = oldListIndent; - state.tShift[startLine] = oldTShift; - state.sCount[startLine] = oldSCount; - state.tight = oldTight; - - token = state.push('list_item_close', 'li', -1); - token.markup = String.fromCharCode(markerCharCode); - - nextLine = startLine = state.line; - itemLines[1] = nextLine; - contentStart = state.bMarks[startLine]; - - if (nextLine >= endLine) { break; } + this.__rules__[idx].enabled = true; + result.push(name); + }, this); + this.__cache__ = null; + return result; +}; - // - // Try to check if list is terminated or continued. - // - if (state.sCount[nextLine] < state.blkIndent) { break; } +/** + * Ruler.enableOnly(list [, ignoreInvalid]) + * - list (String|Array): list of rule names to enable (whitelist). + * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found. + * + * Enable rules with given names, and disable everything else. If any rule name + * not found - throw Error. Errors can be disabled by second param. + * + * See also [[Ruler.disable]], [[Ruler.enable]]. + **/ +Ruler.prototype.enableOnly = function (list, ignoreInvalid) { + if (!Array.isArray(list)) { + list = [list]; + } + this.__rules__.forEach(function (rule) { + rule.enabled = false; + }); + this.enable(list, ignoreInvalid); +}; - // if it's indented more than 3 spaces, it should be a code block - if (state.sCount[startLine] - state.blkIndent >= 4) { break; } +/** + * Ruler.disable(list [, ignoreInvalid]) -> Array + * - list (String|Array): list of rule names to disable. + * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found. + * + * Disable rules with given names. If any rule name not found - throw Error. + * Errors can be disabled by second param. + * + * Returns list of found rule names (if no exception happened). + * + * See also [[Ruler.enable]], [[Ruler.enableOnly]]. + **/ +Ruler.prototype.disable = function (list, ignoreInvalid) { + if (!Array.isArray(list)) { + list = [list]; + } + const result = []; - // fail if terminating block found - terminate = false; - for (i = 0, l = terminatorRules.length; i < l; i++) { - if (terminatorRules[i](state, nextLine, endLine, true)) { - terminate = true; - break; + // Search by name and disable + list.forEach(function (name) { + const idx = this.__find__(name); + if (idx < 0) { + if (ignoreInvalid) { + return; } + throw new Error('Rules manager: invalid rule name ' + name); } - if (terminate) { break; } - - // fail if list has another type - if (isOrdered) { - posAfterMarker = skipOrderedListMarker(state, nextLine); - if (posAfterMarker < 0) { break; } - start = state.bMarks[nextLine] + state.tShift[nextLine]; - } else { - posAfterMarker = skipBulletListMarker(state, nextLine); - if (posAfterMarker < 0) { break; } - } + this.__rules__[idx].enabled = false; + result.push(name); + }, this); + this.__cache__ = null; + return result; +}; - if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) { break; } +/** + * Ruler.getRules(chainName) -> Array + * + * Return array of active functions (rules) for given chain name. It analyzes + * rules configuration, compiles caches if not exists and returns result. + * + * Default chain name is `''` (empty string). It can't be skipped. That's + * done intentionally, to keep signature monomorphic for high speed. + **/ +Ruler.prototype.getRules = function (chainName) { + if (this.__cache__ === null) { + this.__compile__(); } - // Finalize list - if (isOrdered) { - token = state.push('ordered_list_close', 'ol', -1); - } else { - token = state.push('bullet_list_close', 'ul', -1); - } - token.markup = String.fromCharCode(markerCharCode); + // Chain can be empty, if rules disabled. But we still have to return Array. + return this.__cache__[chainName] || []; +}; - listLines[1] = nextLine; - state.line = nextLine; +// Token class - state.parentType = oldParentType; +/** + * class Token + **/ - // mark paragraphs tight if needed - if (tight) { - markTightParagraphs(state, listTokIdx); - } +/** + * new Token(type, tag, nesting) + * + * Create new token and fill passed properties. + **/ +function Token(type, tag, nesting) { + /** + * Token#type -> String + * + * Type of the token (string, e.g. "paragraph_open") + **/ + this.type = type; - return true; -}; + /** + * Token#tag -> String + * + * html tag name, e.g. "p" + **/ + this.tag = tag; + /** + * Token#attrs -> Array + * + * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]` + **/ + this.attrs = null; -/***/ }), + /** + * Token#map -> Array + * + * Source map info. Format: `[ line_begin, line_end ]` + **/ + this.map = null; -/***/ 4205: -/***/ ((module) => { + /** + * Token#nesting -> Number + * + * Level change (number in {-1, 0, 1} set), where: + * + * - `1` means the tag is opening + * - `0` means the tag is self-closing + * - `-1` means the tag is closing + **/ + this.nesting = nesting; -"use strict"; -// Paragraph + /** + * Token#level -> Number + * + * nesting level, the same as `state.level` + **/ + this.level = 0; + /** + * Token#children -> Array + * + * An array of child nodes (inline and img tokens) + **/ + this.children = null; + /** + * Token#content -> String + * + * In a case of self-closing tag (code, html, fence, etc.), + * it has contents of this tag. + **/ + this.content = ''; + /** + * Token#markup -> String + * + * '*' or '_' for emphasis, fence string for fence, etc. + **/ + this.markup = ''; -module.exports = function paragraph(state, startLine/*, endLine*/) { - var content, terminate, i, l, token, oldParentType, - nextLine = startLine + 1, - terminatorRules = state.md.block.ruler.getRules('paragraph'), - endLine = state.lineMax; + /** + * Token#info -> String + * + * Additional information: + * + * - Info string for "fence" tokens + * - The value "auto" for autolink "link_open" and "link_close" tokens + * - The string value of the item marker for ordered-list "list_item_open" tokens + **/ + this.info = ''; - oldParentType = state.parentType; - state.parentType = 'paragraph'; + /** + * Token#meta -> Object + * + * A place for plugins to store an arbitrary data + **/ + this.meta = null; - // jump line-by-line until empty one or EOF - for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) { - // this would be a code block normally, but after paragraph - // it's considered a lazy continuation regardless of what's there - if (state.sCount[nextLine] - state.blkIndent > 3) { continue; } + /** + * Token#block -> Boolean + * + * True for block-level tokens, false for inline tokens. + * Used in renderer to calculate line breaks + **/ + this.block = false; - // quirk for blockquotes, this line should already be checked by that rule - if (state.sCount[nextLine] < 0) { continue; } + /** + * Token#hidden -> Boolean + * + * If it's true, ignore this element when rendering. Used for tight lists + * to hide paragraphs. + **/ + this.hidden = false; +} - // Some tags can terminate paragraph without empty line. - terminate = false; - for (i = 0, l = terminatorRules.length; i < l; i++) { - if (terminatorRules[i](state, nextLine, endLine, true)) { - terminate = true; - break; - } +/** + * Token.attrIndex(name) -> Number + * + * Search attribute index by name. + **/ +Token.prototype.attrIndex = function attrIndex(name) { + if (!this.attrs) { + return -1; + } + const attrs = this.attrs; + for (let i = 0, len = attrs.length; i < len; i++) { + if (attrs[i][0] === name) { + return i; } - if (terminate) { break; } } + return -1; +}; - content = state.getLines(startLine, nextLine, state.blkIndent, false).trim(); - - state.line = nextLine; - - token = state.push('paragraph_open', 'p', 1); - token.map = [ startLine, state.line ]; - - token = state.push('inline', '', 0); - token.content = content; - token.map = [ startLine, state.line ]; - token.children = []; +/** + * Token.attrPush(attrData) + * + * Add `[ name, value ]` attribute to list. Init attrs if necessary + **/ +Token.prototype.attrPush = function attrPush(attrData) { + if (this.attrs) { + this.attrs.push(attrData); + } else { + this.attrs = [attrData]; + } +}; - token = state.push('paragraph_close', 'p', -1); +/** + * Token.attrSet(name, value) + * + * Set `name` attribute to `value`. Override old value if exists. + **/ +Token.prototype.attrSet = function attrSet(name, value) { + const idx = this.attrIndex(name); + const attrData = [name, value]; + if (idx < 0) { + this.attrPush(attrData); + } else { + this.attrs[idx] = attrData; + } +}; - state.parentType = oldParentType; +/** + * Token.attrGet(name) + * + * Get the value of attribute `name`, or null if it does not exist. + **/ +Token.prototype.attrGet = function attrGet(name) { + const idx = this.attrIndex(name); + let value = null; + if (idx >= 0) { + value = this.attrs[idx][1]; + } + return value; +}; - return true; +/** + * Token.attrJoin(name, value) + * + * Join value to existing attribute via space. Or create new attribute if not + * exists. Useful to operate with token classes. + **/ +Token.prototype.attrJoin = function attrJoin(name, value) { + const idx = this.attrIndex(name); + if (idx < 0) { + this.attrPush([name, value]); + } else { + this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value; + } }; +// Core state object +// -/***/ }), +function StateCore(src, md, env) { + this.src = src; + this.env = env; + this.tokens = []; + this.inlineMode = false; + this.md = md; // link to parser instance +} -/***/ 9281: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +// re-export Token class to use in core rules +StateCore.prototype.Token = Token; -"use strict"; +// Normalize input string +// https://spec.commonmark.org/0.29/#line-ending +const NEWLINES_RE = /\r\n?|\n/g; +const NULL_RE = /\0/g; +function normalize(state) { + let str; + // Normalize newlines + str = state.src.replace(NEWLINES_RE, '\n'); -var normalizeReference = (__nccwpck_require__(6498).normalizeReference); -var isSpace = (__nccwpck_require__(6498).isSpace); + // Replace NULL characters + str = str.replace(NULL_RE, '\uFFFD'); + state.src = str; +} +function block(state) { + let token; + if (state.inlineMode) { + token = new state.Token('inline', '', 0); + token.content = state.src; + token.map = [0, 1]; + token.children = []; + state.tokens.push(token); + } else { + state.md.block.parse(state.src, state.md, state.env, state.tokens); + } +} -module.exports = function reference(state, startLine, _endLine, silent) { - var ch, - destEndPos, - destEndLineNo, - endLine, - href, - i, - l, - label, - labelEnd, - oldParentType, - res, - start, - str, - terminate, - terminatorRules, - title, - lines = 0, - pos = state.bMarks[startLine] + state.tShift[startLine], - max = state.eMarks[startLine], - nextLine = startLine + 1; +function inline(state) { + const tokens = state.tokens; - // if it's indented more than 3 spaces, it should be a code block - if (state.sCount[startLine] - state.blkIndent >= 4) { return false; } + // Parse inlines + for (let i = 0, l = tokens.length; i < l; i++) { + const tok = tokens[i]; + if (tok.type === 'inline') { + state.md.inline.parse(tok.content, state.md, state.env, tok.children); + } + } +} - if (state.src.charCodeAt(pos) !== 0x5B/* [ */) { return false; } +// Replace link-like texts with link nodes. +// +// Currently restricted by `md.validateLink()` to http/https/ftp +// - // Simple check to quickly interrupt scan on [link](url) at the start of line. - // Can be useful on practice: https://github.com/markdown-it/markdown-it/issues/54 - while (++pos < max) { - if (state.src.charCodeAt(pos) === 0x5D /* ] */ && - state.src.charCodeAt(pos - 1) !== 0x5C/* \ */) { - if (pos + 1 === max) { return false; } - if (state.src.charCodeAt(pos + 1) !== 0x3A/* : */) { return false; } - break; - } +function isLinkOpen$1(str) { + return /^\s]/i.test(str); +} +function isLinkClose$1(str) { + return /^<\/a\s*>/i.test(str); +} +function linkify$1(state) { + const blockTokens = state.tokens; + if (!state.md.options.linkify) { + return; } + for (let j = 0, l = blockTokens.length; j < l; j++) { + if (blockTokens[j].type !== 'inline' || !state.md.linkify.pretest(blockTokens[j].content)) { + continue; + } + let tokens = blockTokens[j].children; + let htmlLinkLevel = 0; - endLine = state.lineMax; + // We scan from the end, to keep position when new tags added. + // Use reversed logic in links start/end match + for (let i = tokens.length - 1; i >= 0; i--) { + const currentToken = tokens[i]; - // jump line-by-line until empty one or EOF - terminatorRules = state.md.block.ruler.getRules('reference'); + // Skip content of markdown links + if (currentToken.type === 'link_close') { + i--; + while (tokens[i].level !== currentToken.level && tokens[i].type !== 'link_open') { + i--; + } + continue; + } + + // Skip content of html tag links + if (currentToken.type === 'html_inline') { + if (isLinkOpen$1(currentToken.content) && htmlLinkLevel > 0) { + htmlLinkLevel--; + } + if (isLinkClose$1(currentToken.content)) { + htmlLinkLevel++; + } + } + if (htmlLinkLevel > 0) { + continue; + } + if (currentToken.type === 'text' && state.md.linkify.test(currentToken.content)) { + const text = currentToken.content; + let links = state.md.linkify.match(text); - oldParentType = state.parentType; - state.parentType = 'reference'; + // Now split string to nodes + const nodes = []; + let level = currentToken.level; + let lastPos = 0; - for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) { - // this would be a code block normally, but after paragraph - // it's considered a lazy continuation regardless of what's there - if (state.sCount[nextLine] - state.blkIndent > 3) { continue; } + // forbid escape sequence at the start of the string, + // this avoids http\://example.com/ from being linkified as + // http://example.com/ + if (links.length > 0 && links[0].index === 0 && i > 0 && tokens[i - 1].type === 'text_special') { + links = links.slice(1); + } + for (let ln = 0; ln < links.length; ln++) { + const url = links[ln].url; + const fullUrl = state.md.normalizeLink(url); + if (!state.md.validateLink(fullUrl)) { + continue; + } + let urlText = links[ln].text; - // quirk for blockquotes, this line should already be checked by that rule - if (state.sCount[nextLine] < 0) { continue; } + // Linkifier might send raw hostnames like "example.com", where url + // starts with domain name. So we prepend http:// in those cases, + // and remove it afterwards. + // + if (!links[ln].schema) { + urlText = state.md.normalizeLinkText('http://' + urlText).replace(/^http:\/\//, ''); + } else if (links[ln].schema === 'mailto:' && !/^mailto:/i.test(urlText)) { + urlText = state.md.normalizeLinkText('mailto:' + urlText).replace(/^mailto:/, ''); + } else { + urlText = state.md.normalizeLinkText(urlText); + } + const pos = links[ln].index; + if (pos > lastPos) { + const token = new state.Token('text', '', 0); + token.content = text.slice(lastPos, pos); + token.level = level; + nodes.push(token); + } + const token_o = new state.Token('link_open', 'a', 1); + token_o.attrs = [['href', fullUrl]]; + token_o.level = level++; + token_o.markup = 'linkify'; + token_o.info = 'auto'; + nodes.push(token_o); + const token_t = new state.Token('text', '', 0); + token_t.content = urlText; + token_t.level = level; + nodes.push(token_t); + const token_c = new state.Token('link_close', 'a', -1); + token_c.level = --level; + token_c.markup = 'linkify'; + token_c.info = 'auto'; + nodes.push(token_c); + lastPos = links[ln].lastIndex; + } + if (lastPos < text.length) { + const token = new state.Token('text', '', 0); + token.content = text.slice(lastPos); + token.level = level; + nodes.push(token); + } - // Some tags can terminate paragraph without empty line. - terminate = false; - for (i = 0, l = terminatorRules.length; i < l; i++) { - if (terminatorRules[i](state, nextLine, endLine, true)) { - terminate = true; - break; + // replace current node + blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes); } } - if (terminate) { break; } } +} - str = state.getLines(startLine, nextLine, state.blkIndent, false).trim(); - max = str.length; +// Simple typographic replacements +// +// (c) (C) → © +// (tm) (TM) → ™ +// (r) (R) → ® +// +- → ± +// ... → … (also ?.... → ?.., !.... → !..) +// ???????? → ???, !!!!! → !!!, `,,` → `,` +// -- → –, --- → — +// - for (pos = 1; pos < max; pos++) { - ch = str.charCodeAt(pos); - if (ch === 0x5B /* [ */) { - return false; - } else if (ch === 0x5D /* ] */) { - labelEnd = pos; - break; - } else if (ch === 0x0A /* \n */) { - lines++; - } else if (ch === 0x5C /* \ */) { - pos++; - if (pos < max && str.charCodeAt(pos) === 0x0A) { - lines++; +// TODO: +// - fractionals 1/2, 1/4, 3/4 -> ½, ¼, ¾ +// - multiplications 2 x 4 -> 2 × 4 + +const RARE_RE = /\+-|\.\.|\?\?\?\?|!!!!|,,|--/; + +// Workaround for phantomjs - need regex without /g flag, +// or root check will fail every second time +const SCOPED_ABBR_TEST_RE = /\((c|tm|r)\)/i; +const SCOPED_ABBR_RE = /\((c|tm|r)\)/ig; +const SCOPED_ABBR = { + c: '©', + r: '®', + tm: '™' +}; +function replaceFn(match, name) { + return SCOPED_ABBR[name.toLowerCase()]; +} +function replace_scoped(inlineTokens) { + let inside_autolink = 0; + for (let i = inlineTokens.length - 1; i >= 0; i--) { + const token = inlineTokens[i]; + if (token.type === 'text' && !inside_autolink) { + token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn); + } + if (token.type === 'link_open' && token.info === 'auto') { + inside_autolink--; + } + if (token.type === 'link_close' && token.info === 'auto') { + inside_autolink++; + } + } +} +function replace_rare(inlineTokens) { + let inside_autolink = 0; + for (let i = inlineTokens.length - 1; i >= 0; i--) { + const token = inlineTokens[i]; + if (token.type === 'text' && !inside_autolink) { + if (RARE_RE.test(token.content)) { + token.content = token.content.replace(/\+-/g, '±') + // .., ..., ....... -> … + // but ?..... & !..... -> ?.. & !.. + .replace(/\.{2,}/g, '…').replace(/([?!])…/g, '$1..').replace(/([?!]){4,}/g, '$1$1$1').replace(/,{2,}/g, ',') + // em-dash + .replace(/(^|[^-])---(?=[^-]|$)/mg, '$1\u2014') + // en-dash + .replace(/(^|\s)--(?=\s|$)/mg, '$1\u2013').replace(/(^|[^-\s])--(?=[^-\s]|$)/mg, '$1\u2013'); } } + if (token.type === 'link_open' && token.info === 'auto') { + inside_autolink--; + } + if (token.type === 'link_close' && token.info === 'auto') { + inside_autolink++; + } + } +} +function replace(state) { + let blkIdx; + if (!state.md.options.typographer) { + return; + } + for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) { + if (state.tokens[blkIdx].type !== 'inline') { + continue; + } + if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) { + replace_scoped(state.tokens[blkIdx].children); + } + if (RARE_RE.test(state.tokens[blkIdx].content)) { + replace_rare(state.tokens[blkIdx].children); + } } +} - if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A/* : */) { return false; } +// Convert straight quotation marks to typographic ones +// - // [label]: destination 'title' - // ^^^ skip optional whitespace here - for (pos = labelEnd + 2; pos < max; pos++) { - ch = str.charCodeAt(pos); - if (ch === 0x0A) { - lines++; - } else if (isSpace(ch)) { - /*eslint no-empty:0*/ - } else { - break; +const QUOTE_TEST_RE = /['"]/; +const QUOTE_RE = /['"]/g; +const APOSTROPHE = '\u2019'; /* ’ */ + +function replaceAt(str, index, ch) { + return str.slice(0, index) + ch + str.slice(index + 1); +} +function process_inlines(tokens, state) { + let j; + const stack = []; + for (let i = 0; i < tokens.length; i++) { + const token = tokens[i]; + const thisLevel = tokens[i].level; + for (j = stack.length - 1; j >= 0; j--) { + if (stack[j].level <= thisLevel) { + break; + } } - } + stack.length = j + 1; + if (token.type !== 'text') { + continue; + } + let text = token.content; + let pos = 0; + let max = text.length; - // [label]: destination 'title' - // ^^^^^^^^^^^ parse this - res = state.md.helpers.parseLinkDestination(str, pos, max); - if (!res.ok) { return false; } + /* eslint no-labels:0,block-scoped-var:0 */ + OUTER: while (pos < max) { + QUOTE_RE.lastIndex = pos; + const t = QUOTE_RE.exec(text); + if (!t) { + break; + } + let canOpen = true; + let canClose = true; + pos = t.index + 1; + const isSingle = t[0] === "'"; - href = state.md.normalizeLink(res.str); - if (!state.md.validateLink(href)) { return false; } + // Find previous character, + // default to space if it's the beginning of the line + // + let lastChar = 0x20; + if (t.index - 1 >= 0) { + lastChar = text.charCodeAt(t.index - 1); + } else { + for (j = i - 1; j >= 0; j--) { + if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // lastChar defaults to 0x20 + if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline' - pos = res.pos; - lines += res.lines; + lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1); + break; + } + } - // save cursor state, we could require to rollback later - destEndPos = pos; - destEndLineNo = lines; + // Find next character, + // default to space if it's the end of the line + // + let nextChar = 0x20; + if (pos < max) { + nextChar = text.charCodeAt(pos); + } else { + for (j = i + 1; j < tokens.length; j++) { + if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // nextChar defaults to 0x20 + if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline' - // [label]: destination 'title' - // ^^^ skipping those spaces - start = pos; - for (; pos < max; pos++) { - ch = str.charCodeAt(pos); - if (ch === 0x0A) { - lines++; - } else if (isSpace(ch)) { - /*eslint no-empty:0*/ - } else { - break; + nextChar = tokens[j].content.charCodeAt(0); + break; + } + } + const isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar)); + const isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar)); + const isLastWhiteSpace = isWhiteSpace(lastChar); + const isNextWhiteSpace = isWhiteSpace(nextChar); + if (isNextWhiteSpace) { + canOpen = false; + } else if (isNextPunctChar) { + if (!(isLastWhiteSpace || isLastPunctChar)) { + canOpen = false; + } + } + if (isLastWhiteSpace) { + canClose = false; + } else if (isLastPunctChar) { + if (!(isNextWhiteSpace || isNextPunctChar)) { + canClose = false; + } + } + if (nextChar === 0x22 /* " */ && t[0] === '"') { + if (lastChar >= 0x30 /* 0 */ && lastChar <= 0x39 /* 9 */) { + // special case: 1"" - count first quote as an inch + canClose = canOpen = false; + } + } + if (canOpen && canClose) { + // Replace quotes in the middle of punctuation sequence, but not + // in the middle of the words, i.e.: + // + // 1. foo " bar " baz - not replaced + // 2. foo-"-bar-"-baz - replaced + // 3. foo"bar"baz - not replaced + // + canOpen = isLastPunctChar; + canClose = isNextPunctChar; + } + if (!canOpen && !canClose) { + // middle of word + if (isSingle) { + token.content = replaceAt(token.content, t.index, APOSTROPHE); + } + continue; + } + if (canClose) { + // this could be a closing quote, rewind the stack to get a match + for (j = stack.length - 1; j >= 0; j--) { + let item = stack[j]; + if (stack[j].level < thisLevel) { + break; + } + if (item.single === isSingle && stack[j].level === thisLevel) { + item = stack[j]; + let openQuote; + let closeQuote; + if (isSingle) { + openQuote = state.md.options.quotes[2]; + closeQuote = state.md.options.quotes[3]; + } else { + openQuote = state.md.options.quotes[0]; + closeQuote = state.md.options.quotes[1]; + } + + // replace token.content *before* tokens[item.token].content, + // because, if they are pointing at the same token, replaceAt + // could mess up indices when quote length != 1 + token.content = replaceAt(token.content, t.index, closeQuote); + tokens[item.token].content = replaceAt(tokens[item.token].content, item.pos, openQuote); + pos += closeQuote.length - 1; + if (item.token === i) { + pos += openQuote.length - 1; + } + text = token.content; + max = text.length; + stack.length = j; + continue OUTER; + } + } + } + if (canOpen) { + stack.push({ + token: i, + pos: t.index, + single: isSingle, + level: thisLevel + }); + } else if (canClose && isSingle) { + token.content = replaceAt(token.content, t.index, APOSTROPHE); + } } } - - // [label]: destination 'title' - // ^^^^^^^ parse this - res = state.md.helpers.parseLinkTitle(str, pos, max); - if (pos < max && start !== pos && res.ok) { - title = res.str; - pos = res.pos; - lines += res.lines; - } else { - title = ''; - pos = destEndPos; - lines = destEndLineNo; +} +function smartquotes(state) { + /* eslint max-depth:0 */ + if (!state.md.options.typographer) { + return; } - - // skip trailing spaces until the rest of the line - while (pos < max) { - ch = str.charCodeAt(pos); - if (!isSpace(ch)) { break; } - pos++; + for (let blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) { + if (state.tokens[blkIdx].type !== 'inline' || !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) { + continue; + } + process_inlines(state.tokens[blkIdx].children, state); } +} - if (pos < max && str.charCodeAt(pos) !== 0x0A) { - if (title) { - // garbage at the end of the line after title, - // but it could still be a valid reference if we roll back - title = ''; - pos = destEndPos; - lines = destEndLineNo; - while (pos < max) { - ch = str.charCodeAt(pos); - if (!isSpace(ch)) { break; } - pos++; +// Join raw text tokens with the rest of the text +// +// This is set as a separate rule to provide an opportunity for plugins +// to run text replacements after text join, but before escape join. +// +// For example, `\:)` shouldn't be replaced with an emoji. +// + +function text_join(state) { + let curr, last; + const blockTokens = state.tokens; + const l = blockTokens.length; + for (let j = 0; j < l; j++) { + if (blockTokens[j].type !== 'inline') continue; + const tokens = blockTokens[j].children; + const max = tokens.length; + for (curr = 0; curr < max; curr++) { + if (tokens[curr].type === 'text_special') { + tokens[curr].type = 'text'; } } + for (curr = last = 0; curr < max; curr++) { + if (tokens[curr].type === 'text' && curr + 1 < max && tokens[curr + 1].type === 'text') { + // collapse two adjacent text nodes + tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content; + } else { + if (curr !== last) { + tokens[last] = tokens[curr]; + } + last++; + } + } + if (curr !== last) { + tokens.length = last; + } } +} - if (pos < max && str.charCodeAt(pos) !== 0x0A) { - // garbage at the end of the line - return false; - } - - label = normalizeReference(str.slice(1, labelEnd)); - if (!label) { - // CommonMark 0.20 disallows empty labels - return false; - } +/** internal + * class Core + * + * Top-level rules executor. Glues block/inline parsers and does intermediate + * transformations. + **/ - // Reference can not terminate anything. This check is for safety only. - /*istanbul ignore if*/ - if (silent) { return true; } +const _rules$2 = [['normalize', normalize], ['block', block], ['inline', inline], ['linkify', linkify$1], ['replacements', replace], ['smartquotes', smartquotes], +// `text_join` finds `text_special` tokens (for escape sequences) +// and joins them with the rest of the text +['text_join', text_join]]; - if (typeof state.env.references === 'undefined') { - state.env.references = {}; - } - if (typeof state.env.references[label] === 'undefined') { - state.env.references[label] = { title: title, href: href }; +/** + * new Core() + **/ +function Core() { + /** + * Core#ruler -> Ruler + * + * [[Ruler]] instance. Keep configuration of core rules. + **/ + this.ruler = new Ruler(); + for (let i = 0; i < _rules$2.length; i++) { + this.ruler.push(_rules$2[i][0], _rules$2[i][1]); } +} - state.parentType = oldParentType; - - state.line = startLine + lines + 1; - return true; +/** + * Core.process(state) + * + * Executes core chain rules. + **/ +Core.prototype.process = function (state) { + const rules = this.ruler.getRules(''); + for (let i = 0, l = rules.length; i < l; i++) { + rules[i](state); + } }; +Core.prototype.State = StateCore; - -/***/ }), - -/***/ 1368: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; // Parser state class - - -var Token = __nccwpck_require__(4742); -var isSpace = (__nccwpck_require__(6498).isSpace); - - function StateBlock(src, md, env, tokens) { - var ch, s, start, pos, len, indent, offset, indent_found; - this.src = src; // link to parser instance - this.md = md; - + this.md = md; this.env = env; // @@ -12961,11 +29909,10 @@ function StateBlock(src, md, env, tokens) { // this.tokens = tokens; - - this.bMarks = []; // line begin offsets for fast jumps - this.eMarks = []; // line end offsets for fast jumps - this.tShift = []; // offsets of the first non-space characters (tabs not expanded) - this.sCount = []; // indents for each line (tabs expanded) + this.bMarks = []; // line begin offsets for fast jumps + this.eMarks = []; // line end offsets for fast jumps + this.tShift = []; // offsets of the first non-space characters (tabs not expanded) + this.sCount = []; // indents for each line (tabs expanded) // An amount of virtual spaces (tabs expanded) between beginning // of each line (bMarks) and real beginning of that line. @@ -12980,35 +29927,29 @@ function StateBlock(src, md, env, tokens) { this.bsCount = []; // block parser variables - this.blkIndent = 0; // required block content indent (for example, if we are - // inside a list, it would be positioned after list marker) - this.line = 0; // line index in src - this.lineMax = 0; // lines count - this.tight = false; // loose/tight mode for lists - this.ddIndent = -1; // indent of the current dd block (-1 if there isn't any) + + // required block content indent (for example, if we are + // inside a list, it would be positioned after list marker) + this.blkIndent = 0; + this.line = 0; // line index in src + this.lineMax = 0; // lines count + this.tight = false; // loose/tight mode for lists + this.ddIndent = -1; // indent of the current dd block (-1 if there isn't any) this.listIndent = -1; // indent of the current list block (-1 if there isn't any) // can be 'blockquote', 'list', 'root', 'paragraph' or 'reference' // used in lists to determine if they interrupt a paragraph this.parentType = 'root'; - this.level = 0; - // renderer - this.result = ''; - // Create caches // Generate markers. - s = this.src; - indent_found = false; - - for (start = pos = indent = offset = 0, len = s.length; pos < len; pos++) { - ch = s.charCodeAt(pos); - + const s = this.src; + for (let start = 0, pos = 0, indent = 0, offset = 0, len = s.length, indent_found = false; pos < len; pos++) { + const ch = s.charCodeAt(pos); if (!indent_found) { if (isSpace(ch)) { indent++; - if (ch === 0x09) { offset += 4 - offset % 4; } else { @@ -13019,15 +29960,15 @@ function StateBlock(src, md, env, tokens) { indent_found = true; } } - if (ch === 0x0A || pos === len - 1) { - if (ch !== 0x0A) { pos++; } + if (ch !== 0x0A) { + pos++; + } this.bMarks.push(start); this.eMarks.push(pos); this.tShift.push(indent); this.sCount.push(offset); this.bsCount.push(0); - indent_found = false; indent = 0; offset = 0; @@ -13041,16 +29982,14 @@ function StateBlock(src, md, env, tokens) { this.tShift.push(0); this.sCount.push(0); this.bsCount.push(0); - this.lineMax = this.bMarks.length - 1; // don't count last fake line } // Push new token to "stream". // StateBlock.prototype.push = function (type, tag, nesting) { - var token = new Token(type, tag, nesting); + const token = new Token(type, tag, nesting); token.block = true; - if (nesting < 0) this.level--; // closing tag token.level = this.level; if (nesting > 0) this.level++; // opening tag @@ -13058,13 +29997,11 @@ StateBlock.prototype.push = function (type, tag, nesting) { this.tokens.push(token); return token; }; - StateBlock.prototype.isEmpty = function isEmpty(line) { return this.bMarks[line] + this.tShift[line] >= this.eMarks[line]; }; - StateBlock.prototype.skipEmptyLines = function skipEmptyLines(from) { - for (var max = this.lineMax; from < max; from++) { + for (let max = this.lineMax; from < max; from++) { if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) { break; } @@ -13074,68 +30011,70 @@ StateBlock.prototype.skipEmptyLines = function skipEmptyLines(from) { // Skip spaces from given position. StateBlock.prototype.skipSpaces = function skipSpaces(pos) { - var ch; - - for (var max = this.src.length; pos < max; pos++) { - ch = this.src.charCodeAt(pos); - if (!isSpace(ch)) { break; } + for (let max = this.src.length; pos < max; pos++) { + const ch = this.src.charCodeAt(pos); + if (!isSpace(ch)) { + break; + } } return pos; }; // Skip spaces from given position in reverse. StateBlock.prototype.skipSpacesBack = function skipSpacesBack(pos, min) { - if (pos <= min) { return pos; } - + if (pos <= min) { + return pos; + } while (pos > min) { - if (!isSpace(this.src.charCodeAt(--pos))) { return pos + 1; } + if (!isSpace(this.src.charCodeAt(--pos))) { + return pos + 1; + } } return pos; }; // Skip char codes from given position StateBlock.prototype.skipChars = function skipChars(pos, code) { - for (var max = this.src.length; pos < max; pos++) { - if (this.src.charCodeAt(pos) !== code) { break; } + for (let max = this.src.length; pos < max; pos++) { + if (this.src.charCodeAt(pos) !== code) { + break; + } } return pos; }; // Skip char codes reverse from given position - 1 StateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code, min) { - if (pos <= min) { return pos; } - + if (pos <= min) { + return pos; + } while (pos > min) { - if (code !== this.src.charCodeAt(--pos)) { return pos + 1; } + if (code !== this.src.charCodeAt(--pos)) { + return pos + 1; + } } return pos; }; // cut lines range from source. StateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF) { - var i, lineIndent, ch, first, last, queue, lineStart, - line = begin; - if (begin >= end) { return ''; } - - queue = new Array(end - begin); - - for (i = 0; line < end; line++, i++) { - lineIndent = 0; - lineStart = first = this.bMarks[line]; - + const queue = new Array(end - begin); + for (let i = 0, line = begin; line < end; line++, i++) { + let lineIndent = 0; + const lineStart = this.bMarks[line]; + let first = lineStart; + let last; if (line + 1 < end || keepLastLF) { // No need for bounds check because we have fake entry on tail. last = this.eMarks[line] + 1; } else { last = this.eMarks[line]; } - while (first < last && lineIndent < indent) { - ch = this.src.charCodeAt(first); - + const ch = this.src.charCodeAt(first); if (isSpace(ch)) { if (ch === 0x09) { lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4; @@ -13148,10 +30087,8 @@ StateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF } else { break; } - first++; } - if (lineIndent > indent) { // partially expanding tabs in code blocks, e.g '\t\tfoobar' // with indent=2 becomes ' \tfoobar' @@ -13160,50 +30097,37 @@ StateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF queue[i] = this.src.slice(first, last); } } - return queue.join(''); }; // re-export Token class to use in block rules StateBlock.prototype.Token = Token; - -module.exports = StateBlock; - - -/***/ }), - -/***/ 7489: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; // GFM table, https://github.github.com/gfm/#tables-extension- - -var isSpace = (__nccwpck_require__(6498).isSpace); - - +// Limit the amount of empty autocompleted cells in a table, +// see https://github.com/markdown-it/markdown-it/issues/1000, +// +// Both pulldown-cmark and commonmark-hs limit the number of cells this way to ~200k. +// We set it to 65k, which can expand user input by a factor of x370 +// (256x256 square is 1.8kB expanded into 650kB). +const MAX_AUTOCOMPLETED_CELLS = 0x10000; function getLine(state, line) { - var pos = state.bMarks[line] + state.tShift[line], - max = state.eMarks[line]; - + const pos = state.bMarks[line] + state.tShift[line]; + const max = state.eMarks[line]; return state.src.slice(pos, max); } - function escapedSplit(str) { - var result = [], - pos = 0, - max = str.length, - ch, - isEscaped = false, - lastPos = 0, - current = ''; - - ch = str.charCodeAt(pos); - + const result = []; + const max = str.length; + let pos = 0; + let ch = str.charCodeAt(pos); + let isEscaped = false; + let lastPos = 0; + let current = ''; while (pos < max) { - if (ch === 0x7c/* | */) { + if (ch === 0x7c /* | */) { if (!isEscaped) { // pipe separating cells, '|' result.push(current + str.substring(lastPos, pos)); @@ -13215,69 +30139,65 @@ function escapedSplit(str) { lastPos = pos; } } - - isEscaped = (ch === 0x5c/* \ */); + isEscaped = ch === 0x5c /* \ */; pos++; - ch = str.charCodeAt(pos); } - result.push(current + str.substring(lastPos)); - return result; } - - -module.exports = function table(state, startLine, endLine, silent) { - var ch, lineText, pos, i, l, nextLine, columns, columnCount, token, - aligns, t, tableLines, tbodyLines, oldParentType, terminate, - terminatorRules, firstCh, secondCh; - +function table(state, startLine, endLine, silent) { // should have at least two lines - if (startLine + 2 > endLine) { return false; } - - nextLine = startLine + 1; - - if (state.sCount[nextLine] < state.blkIndent) { return false; } + if (startLine + 2 > endLine) { + return false; + } + let nextLine = startLine + 1; + if (state.sCount[nextLine] < state.blkIndent) { + return false; + } // if it's indented more than 3 spaces, it should be a code block - if (state.sCount[nextLine] - state.blkIndent >= 4) { return false; } + if (state.sCount[nextLine] - state.blkIndent >= 4) { + return false; + } // first character of the second line should be '|', '-', ':', // and no other characters are allowed but spaces; // basically, this is the equivalent of /^[-:|][-:|\s]*$/ regexp - pos = state.bMarks[nextLine] + state.tShift[nextLine]; - if (pos >= state.eMarks[nextLine]) { return false; } - - firstCh = state.src.charCodeAt(pos++); - if (firstCh !== 0x7C/* | */ && firstCh !== 0x2D/* - */ && firstCh !== 0x3A/* : */) { return false; } - - if (pos >= state.eMarks[nextLine]) { return false; } - - secondCh = state.src.charCodeAt(pos++); - if (secondCh !== 0x7C/* | */ && secondCh !== 0x2D/* - */ && secondCh !== 0x3A/* : */ && !isSpace(secondCh)) { + let pos = state.bMarks[nextLine] + state.tShift[nextLine]; + if (pos >= state.eMarks[nextLine]) { + return false; + } + const firstCh = state.src.charCodeAt(pos++); + if (firstCh !== 0x7C /* | */ && firstCh !== 0x2D /* - */ && firstCh !== 0x3A /* : */) { + return false; + } + if (pos >= state.eMarks[nextLine]) { + return false; + } + const secondCh = state.src.charCodeAt(pos++); + if (secondCh !== 0x7C /* | */ && secondCh !== 0x2D /* - */ && secondCh !== 0x3A /* : */ && !isSpace(secondCh)) { return false; } // if first character is '-', then second character must not be a space // (due to parsing ambiguity with list) - if (firstCh === 0x2D/* - */ && isSpace(secondCh)) { return false; } - + if (firstCh === 0x2D /* - */ && isSpace(secondCh)) { + return false; + } while (pos < state.eMarks[nextLine]) { - ch = state.src.charCodeAt(pos); - - if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */ && !isSpace(ch)) { return false; } - + const ch = state.src.charCodeAt(pos); + if (ch !== 0x7C /* | */ && ch !== 0x2D /* - */ && ch !== 0x3A /* : */ && !isSpace(ch)) { + return false; + } pos++; } - - lineText = getLine(state, startLine + 1); - - columns = lineText.split('|'); - aligns = []; - for (i = 0; i < columns.length; i++) { - t = columns[i].trim(); + let lineText = getLine(state, startLine + 1); + let columns = lineText.split('|'); + const aligns = []; + for (let i = 0; i < columns.length; i++) { + const t = columns[i].trim(); if (!t) { // allow empty columns before and after table, but not in between columns; // e.g. allow ` |---| `, disallow ` ---||--- ` @@ -13287,1277 +30207,1669 @@ module.exports = function table(state, startLine, endLine, silent) { return false; } } - - if (!/^:?-+:?$/.test(t)) { return false; } - if (t.charCodeAt(t.length - 1) === 0x3A/* : */) { - aligns.push(t.charCodeAt(0) === 0x3A/* : */ ? 'center' : 'right'); - } else if (t.charCodeAt(0) === 0x3A/* : */) { + if (!/^:?-+:?$/.test(t)) { + return false; + } + if (t.charCodeAt(t.length - 1) === 0x3A /* : */) { + aligns.push(t.charCodeAt(0) === 0x3A /* : */ ? 'center' : 'right'); + } else if (t.charCodeAt(0) === 0x3A /* : */) { aligns.push('left'); } else { aligns.push(''); } } - lineText = getLine(state, startLine).trim(); - if (lineText.indexOf('|') === -1) { return false; } - if (state.sCount[startLine] - state.blkIndent >= 4) { return false; } + if (lineText.indexOf('|') === -1) { + return false; + } + if (state.sCount[startLine] - state.blkIndent >= 4) { + return false; + } columns = escapedSplit(lineText); if (columns.length && columns[0] === '') columns.shift(); if (columns.length && columns[columns.length - 1] === '') columns.pop(); // header row will define an amount of columns in the entire table, // and align row should be exactly the same (the rest of the rows can differ) - columnCount = columns.length; - if (columnCount === 0 || columnCount !== aligns.length) { return false; } - - if (silent) { return true; } - - oldParentType = state.parentType; + const columnCount = columns.length; + if (columnCount === 0 || columnCount !== aligns.length) { + return false; + } + if (silent) { + return true; + } + const oldParentType = state.parentType; state.parentType = 'table'; // use 'blockquote' lists for termination because it's // the most similar to tables - terminatorRules = state.md.block.ruler.getRules('blockquote'); - - token = state.push('table_open', 'table', 1); - token.map = tableLines = [ startLine, 0 ]; - - token = state.push('thead_open', 'thead', 1); - token.map = [ startLine, startLine + 1 ]; - - token = state.push('tr_open', 'tr', 1); - token.map = [ startLine, startLine + 1 ]; - - for (i = 0; i < columns.length; i++) { - token = state.push('th_open', 'th', 1); + const terminatorRules = state.md.block.ruler.getRules('blockquote'); + const token_to = state.push('table_open', 'table', 1); + const tableLines = [startLine, 0]; + token_to.map = tableLines; + const token_tho = state.push('thead_open', 'thead', 1); + token_tho.map = [startLine, startLine + 1]; + const token_htro = state.push('tr_open', 'tr', 1); + token_htro.map = [startLine, startLine + 1]; + for (let i = 0; i < columns.length; i++) { + const token_ho = state.push('th_open', 'th', 1); if (aligns[i]) { - token.attrs = [ [ 'style', 'text-align:' + aligns[i] ] ]; + token_ho.attrs = [['style', 'text-align:' + aligns[i]]]; } - - token = state.push('inline', '', 0); - token.content = columns[i].trim(); - token.children = []; - - token = state.push('th_close', 'th', -1); + const token_il = state.push('inline', '', 0); + token_il.content = columns[i].trim(); + token_il.children = []; + state.push('th_close', 'th', -1); } - - token = state.push('tr_close', 'tr', -1); - token = state.push('thead_close', 'thead', -1); - + state.push('tr_close', 'tr', -1); + state.push('thead_close', 'thead', -1); + let tbodyLines; + let autocompletedCells = 0; for (nextLine = startLine + 2; nextLine < endLine; nextLine++) { - if (state.sCount[nextLine] < state.blkIndent) { break; } - - terminate = false; - for (i = 0, l = terminatorRules.length; i < l; i++) { + if (state.sCount[nextLine] < state.blkIndent) { + break; + } + let terminate = false; + for (let i = 0, l = terminatorRules.length; i < l; i++) { if (terminatorRules[i](state, nextLine, endLine, true)) { terminate = true; break; } } - - if (terminate) { break; } + if (terminate) { + break; + } lineText = getLine(state, nextLine).trim(); - if (!lineText) { break; } - if (state.sCount[nextLine] - state.blkIndent >= 4) { break; } + if (!lineText) { + break; + } + if (state.sCount[nextLine] - state.blkIndent >= 4) { + break; + } columns = escapedSplit(lineText); if (columns.length && columns[0] === '') columns.shift(); if (columns.length && columns[columns.length - 1] === '') columns.pop(); + // note: autocomplete count can be negative if user specifies more columns than header, + // but that does not affect intended use (which is limiting expansion) + autocompletedCells += columnCount - columns.length; + if (autocompletedCells > MAX_AUTOCOMPLETED_CELLS) { + break; + } if (nextLine === startLine + 2) { - token = state.push('tbody_open', 'tbody', 1); - token.map = tbodyLines = [ startLine + 2, 0 ]; + const token_tbo = state.push('tbody_open', 'tbody', 1); + token_tbo.map = tbodyLines = [startLine + 2, 0]; } - - token = state.push('tr_open', 'tr', 1); - token.map = [ nextLine, nextLine + 1 ]; - - for (i = 0; i < columnCount; i++) { - token = state.push('td_open', 'td', 1); + const token_tro = state.push('tr_open', 'tr', 1); + token_tro.map = [nextLine, nextLine + 1]; + for (let i = 0; i < columnCount; i++) { + const token_tdo = state.push('td_open', 'td', 1); if (aligns[i]) { - token.attrs = [ [ 'style', 'text-align:' + aligns[i] ] ]; + token_tdo.attrs = [['style', 'text-align:' + aligns[i]]]; } - - token = state.push('inline', '', 0); - token.content = columns[i] ? columns[i].trim() : ''; - token.children = []; - - token = state.push('td_close', 'td', -1); + const token_il = state.push('inline', '', 0); + token_il.content = columns[i] ? columns[i].trim() : ''; + token_il.children = []; + state.push('td_close', 'td', -1); } - token = state.push('tr_close', 'tr', -1); + state.push('tr_close', 'tr', -1); } - if (tbodyLines) { - token = state.push('tbody_close', 'tbody', -1); + state.push('tbody_close', 'tbody', -1); tbodyLines[1] = nextLine; } - - token = state.push('table_close', 'table', -1); + state.push('table_close', 'table', -1); tableLines[1] = nextLine; - state.parentType = oldParentType; state.line = nextLine; return true; -}; - - -/***/ }), - -/***/ 4324: -/***/ ((module) => { - -"use strict"; - - - -module.exports = function block(state) { - var token; - - if (state.inlineMode) { - token = new state.Token('inline', '', 0); - token.content = state.src; - token.map = [ 0, 1 ]; - token.children = []; - state.tokens.push(token); - } else { - state.md.block.parse(state.src, state.md, state.env, state.tokens); - } -}; - - -/***/ }), - -/***/ 9835: -/***/ ((module) => { - -"use strict"; - - -module.exports = function inline(state) { - var tokens = state.tokens, tok, i, l; - - // Parse inlines - for (i = 0, l = tokens.length; i < l; i++) { - tok = tokens[i]; - if (tok.type === 'inline') { - state.md.inline.parse(tok.content, state.md, state.env, tok.children); - } - } -}; - - -/***/ }), - -/***/ 7373: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; -// Replace link-like texts with link nodes. -// -// Currently restricted by `md.validateLink()` to http/https/ftp -// - - - -var arrayReplaceAt = (__nccwpck_require__(6498).arrayReplaceAt); - - -function isLinkOpen(str) { - return /^\s]/i.test(str); -} -function isLinkClose(str) { - return /^<\/a\s*>/i.test(str); } +// Code block (4 spaces padded) -module.exports = function linkify(state) { - var i, j, l, tokens, token, currentToken, nodes, ln, text, pos, lastPos, - level, htmlLinkLevel, url, fullUrl, urlText, - blockTokens = state.tokens, - links; - - if (!state.md.options.linkify) { return; } - - for (j = 0, l = blockTokens.length; j < l; j++) { - if (blockTokens[j].type !== 'inline' || - !state.md.linkify.pretest(blockTokens[j].content)) { +function code(state, startLine, endLine /*, silent */) { + if (state.sCount[startLine] - state.blkIndent < 4) { + return false; + } + let nextLine = startLine + 1; + let last = nextLine; + while (nextLine < endLine) { + if (state.isEmpty(nextLine)) { + nextLine++; continue; } - - tokens = blockTokens[j].children; - - htmlLinkLevel = 0; - - // We scan from the end, to keep position when new tags added. - // Use reversed logic in links start/end match - for (i = tokens.length - 1; i >= 0; i--) { - currentToken = tokens[i]; - - // Skip content of markdown links - if (currentToken.type === 'link_close') { - i--; - while (tokens[i].level !== currentToken.level && tokens[i].type !== 'link_open') { - i--; - } - continue; - } - - // Skip content of html tag links - if (currentToken.type === 'html_inline') { - if (isLinkOpen(currentToken.content) && htmlLinkLevel > 0) { - htmlLinkLevel--; - } - if (isLinkClose(currentToken.content)) { - htmlLinkLevel++; - } - } - if (htmlLinkLevel > 0) { continue; } - - if (currentToken.type === 'text' && state.md.linkify.test(currentToken.content)) { - - text = currentToken.content; - links = state.md.linkify.match(text); - - // Now split string to nodes - nodes = []; - level = currentToken.level; - lastPos = 0; - - // forbid escape sequence at the start of the string, - // this avoids http\://example.com/ from being linkified as - // http://example.com/ - if (links.length > 0 && - links[0].index === 0 && - i > 0 && - tokens[i - 1].type === 'text_special') { - links = links.slice(1); - } - - for (ln = 0; ln < links.length; ln++) { - url = links[ln].url; - fullUrl = state.md.normalizeLink(url); - if (!state.md.validateLink(fullUrl)) { continue; } - - urlText = links[ln].text; - - // Linkifier might send raw hostnames like "example.com", where url - // starts with domain name. So we prepend http:// in those cases, - // and remove it afterwards. - // - if (!links[ln].schema) { - urlText = state.md.normalizeLinkText('http://' + urlText).replace(/^http:\/\//, ''); - } else if (links[ln].schema === 'mailto:' && !/^mailto:/i.test(urlText)) { - urlText = state.md.normalizeLinkText('mailto:' + urlText).replace(/^mailto:/, ''); - } else { - urlText = state.md.normalizeLinkText(urlText); - } - - pos = links[ln].index; - - if (pos > lastPos) { - token = new state.Token('text', '', 0); - token.content = text.slice(lastPos, pos); - token.level = level; - nodes.push(token); - } - - token = new state.Token('link_open', 'a', 1); - token.attrs = [ [ 'href', fullUrl ] ]; - token.level = level++; - token.markup = 'linkify'; - token.info = 'auto'; - nodes.push(token); - - token = new state.Token('text', '', 0); - token.content = urlText; - token.level = level; - nodes.push(token); - - token = new state.Token('link_close', 'a', -1); - token.level = --level; - token.markup = 'linkify'; - token.info = 'auto'; - nodes.push(token); - - lastPos = links[ln].lastIndex; - } - if (lastPos < text.length) { - token = new state.Token('text', '', 0); - token.content = text.slice(lastPos); - token.level = level; - nodes.push(token); - } - - // replace current node - blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes); - } + if (state.sCount[nextLine] - state.blkIndent >= 4) { + nextLine++; + last = nextLine; + continue; } + break; } -}; - - -/***/ }), - -/***/ 3272: -/***/ ((module) => { - -"use strict"; -// Normalize input string - - - - -// https://spec.commonmark.org/0.29/#line-ending -var NEWLINES_RE = /\r\n?|\n/g; -var NULL_RE = /\0/g; - - -module.exports = function normalize(state) { - var str; - - // Normalize newlines - str = state.src.replace(NEWLINES_RE, '\n'); - - // Replace NULL characters - str = str.replace(NULL_RE, '\uFFFD'); - - state.src = str; -}; - - -/***/ }), - -/***/ 2378: -/***/ ((module) => { - -"use strict"; -// Simple typographic replacements -// -// (c) (C) → © -// (tm) (TM) → ™ -// (r) (R) → ® -// +- → ± -// (p) (P) -> § -// ... → … (also ?.... → ?.., !.... → !..) -// ???????? → ???, !!!!! → !!!, `,,` → `,` -// -- → –, --- → — -// - - -// TODO: -// - fractionals 1/2, 1/4, 3/4 -> ½, ¼, ¾ -// - multiplications 2 x 4 -> 2 × 4 - -var RARE_RE = /\+-|\.\.|\?\?\?\?|!!!!|,,|--/; - -// Workaround for phantomjs - need regex without /g flag, -// or root check will fail every second time -var SCOPED_ABBR_TEST_RE = /\((c|tm|r)\)/i; - -var SCOPED_ABBR_RE = /\((c|tm|r)\)/ig; -var SCOPED_ABBR = { - c: '©', - r: '®', - tm: '™' -}; - -function replaceFn(match, name) { - return SCOPED_ABBR[name.toLowerCase()]; + state.line = last; + const token = state.push('code_block', 'code', 0); + token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + '\n'; + token.map = [startLine, state.line]; + return true; } -function replace_scoped(inlineTokens) { - var i, token, inside_autolink = 0; - - for (i = inlineTokens.length - 1; i >= 0; i--) { - token = inlineTokens[i]; +// fences (``` lang, ~~~ lang) - if (token.type === 'text' && !inside_autolink) { - token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn); - } +function fence(state, startLine, endLine, silent) { + let pos = state.bMarks[startLine] + state.tShift[startLine]; + let max = state.eMarks[startLine]; - if (token.type === 'link_open' && token.info === 'auto') { - inside_autolink--; - } + // if it's indented more than 3 spaces, it should be a code block + if (state.sCount[startLine] - state.blkIndent >= 4) { + return false; + } + if (pos + 3 > max) { + return false; + } + const marker = state.src.charCodeAt(pos); + if (marker !== 0x7E /* ~ */ && marker !== 0x60 /* ` */) { + return false; + } - if (token.type === 'link_close' && token.info === 'auto') { - inside_autolink++; + // scan marker length + let mem = pos; + pos = state.skipChars(pos, marker); + let len = pos - mem; + if (len < 3) { + return false; + } + const markup = state.src.slice(mem, pos); + const params = state.src.slice(pos, max); + if (marker === 0x60 /* ` */) { + if (params.indexOf(String.fromCharCode(marker)) >= 0) { + return false; } } -} -function replace_rare(inlineTokens) { - var i, token, inside_autolink = 0; - - for (i = inlineTokens.length - 1; i >= 0; i--) { - token = inlineTokens[i]; + // Since start is found, we can report success here in validation mode + if (silent) { + return true; + } - if (token.type === 'text' && !inside_autolink) { - if (RARE_RE.test(token.content)) { - token.content = token.content - .replace(/\+-/g, '±') - // .., ..., ....... -> … - // but ?..... & !..... -> ?.. & !.. - .replace(/\.{2,}/g, '…').replace(/([?!])…/g, '$1..') - .replace(/([?!]){4,}/g, '$1$1$1').replace(/,{2,}/g, ',') - // em-dash - .replace(/(^|[^-])---(?=[^-]|$)/mg, '$1\u2014') - // en-dash - .replace(/(^|\s)--(?=\s|$)/mg, '$1\u2013') - .replace(/(^|[^-\s])--(?=[^-\s]|$)/mg, '$1\u2013'); - } + // search end of block + let nextLine = startLine; + let haveEndMarker = false; + for (;;) { + nextLine++; + if (nextLine >= endLine) { + // unclosed block should be autoclosed by end of document. + // also block seems to be autoclosed by end of parent + break; } - - if (token.type === 'link_open' && token.info === 'auto') { - inside_autolink--; + pos = mem = state.bMarks[nextLine] + state.tShift[nextLine]; + max = state.eMarks[nextLine]; + if (pos < max && state.sCount[nextLine] < state.blkIndent) { + // non-empty line with negative indent should stop the list: + // - ``` + // test + break; } - - if (token.type === 'link_close' && token.info === 'auto') { - inside_autolink++; + if (state.src.charCodeAt(pos) !== marker) { + continue; } - } -} - - -module.exports = function replace(state) { - var blkIdx; - - if (!state.md.options.typographer) { return; } - - for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) { - - if (state.tokens[blkIdx].type !== 'inline') { continue; } - - if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) { - replace_scoped(state.tokens[blkIdx].children); + if (state.sCount[nextLine] - state.blkIndent >= 4) { + // closing fence should be indented less than 4 spaces + continue; } + pos = state.skipChars(pos, marker); - if (RARE_RE.test(state.tokens[blkIdx].content)) { - replace_rare(state.tokens[blkIdx].children); + // closing code fence must be at least as long as the opening one + if (pos - mem < len) { + continue; } + // make sure tail has spaces only + pos = state.skipSpaces(pos); + if (pos < max) { + continue; + } + haveEndMarker = true; + // found! + break; } -}; - - -/***/ }), -/***/ 5349: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; -// Convert straight quotation marks to typographic ones -// - - - -var isWhiteSpace = (__nccwpck_require__(6498).isWhiteSpace); -var isPunctChar = (__nccwpck_require__(6498).isPunctChar); -var isMdAsciiPunct = (__nccwpck_require__(6498).isMdAsciiPunct); - -var QUOTE_TEST_RE = /['"]/; -var QUOTE_RE = /['"]/g; -var APOSTROPHE = '\u2019'; /* ’ */ - - -function replaceAt(str, index, ch) { - return str.slice(0, index) + ch + str.slice(index + 1); + // If a fence has heading spaces, they should be removed from its inner block + len = state.sCount[startLine]; + state.line = nextLine + (haveEndMarker ? 1 : 0); + const token = state.push('fence', 'code', 0); + token.info = params; + token.content = state.getLines(startLine + 1, nextLine, len, true); + token.markup = markup; + token.map = [startLine, state.line]; + return true; } -function process_inlines(tokens, state) { - var i, token, text, t, pos, max, thisLevel, item, lastChar, nextChar, - isLastPunctChar, isNextPunctChar, isLastWhiteSpace, isNextWhiteSpace, - canOpen, canClose, j, isSingle, stack, openQuote, closeQuote; - - stack = []; - - for (i = 0; i < tokens.length; i++) { - token = tokens[i]; - - thisLevel = tokens[i].level; - - for (j = stack.length - 1; j >= 0; j--) { - if (stack[j].level <= thisLevel) { break; } - } - stack.length = j + 1; +// Block quotes - if (token.type !== 'text') { continue; } +function blockquote(state, startLine, endLine, silent) { + let pos = state.bMarks[startLine] + state.tShift[startLine]; + let max = state.eMarks[startLine]; + const oldLineMax = state.lineMax; - text = token.content; - pos = 0; - max = text.length; + // if it's indented more than 3 spaces, it should be a code block + if (state.sCount[startLine] - state.blkIndent >= 4) { + return false; + } - /*eslint no-labels:0,block-scoped-var:0*/ - OUTER: - while (pos < max) { - QUOTE_RE.lastIndex = pos; - t = QUOTE_RE.exec(text); - if (!t) { break; } + // check the block quote marker + if (state.src.charCodeAt(pos) !== 0x3E /* > */) { + return false; + } - canOpen = canClose = true; - pos = t.index + 1; - isSingle = (t[0] === "'"); + // we know that it's going to be a valid blockquote, + // so no point trying to find the end of it in silent mode + if (silent) { + return true; + } + const oldBMarks = []; + const oldBSCount = []; + const oldSCount = []; + const oldTShift = []; + const terminatorRules = state.md.block.ruler.getRules('blockquote'); + const oldParentType = state.parentType; + state.parentType = 'blockquote'; + let lastLineEmpty = false; + let nextLine; - // Find previous character, - // default to space if it's the beginning of the line - // - lastChar = 0x20; + // Search the end of the block + // + // Block ends with either: + // 1. an empty line outside: + // ``` + // > test + // + // ``` + // 2. an empty line inside: + // ``` + // > + // test + // ``` + // 3. another tag: + // ``` + // > test + // - - - + // ``` + for (nextLine = startLine; nextLine < endLine; nextLine++) { + // check if it's outdented, i.e. it's inside list item and indented + // less than said list item: + // + // ``` + // 1. anything + // > current blockquote + // 2. checking this line + // ``` + const isOutdented = state.sCount[nextLine] < state.blkIndent; + pos = state.bMarks[nextLine] + state.tShift[nextLine]; + max = state.eMarks[nextLine]; + if (pos >= max) { + // Case 1: line is not inside the blockquote, and this line is empty. + break; + } + if (state.src.charCodeAt(pos++) === 0x3E /* > */ && !isOutdented) { + // This line is inside the blockquote. - if (t.index - 1 >= 0) { - lastChar = text.charCodeAt(t.index - 1); - } else { - for (j = i - 1; j >= 0; j--) { - if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // lastChar defaults to 0x20 - if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline' + // set offset past spaces and ">" + let initial = state.sCount[nextLine] + 1; + let spaceAfterMarker; + let adjustTab; - lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1); - break; + // skip one optional space after '>' + if (state.src.charCodeAt(pos) === 0x20 /* space */) { + // ' > test ' + // ^ -- position start of line here: + pos++; + initial++; + adjustTab = false; + spaceAfterMarker = true; + } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) { + spaceAfterMarker = true; + if ((state.bsCount[nextLine] + initial) % 4 === 3) { + // ' >\t test ' + // ^ -- position start of line here (tab has width===1) + pos++; + initial++; + adjustTab = false; + } else { + // ' >\t test ' + // ^ -- position start of line here + shift bsCount slightly + // to make extra space appear + adjustTab = true; } - } - - // Find next character, - // default to space if it's the end of the line - // - nextChar = 0x20; - - if (pos < max) { - nextChar = text.charCodeAt(pos); } else { - for (j = i + 1; j < tokens.length; j++) { - if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // nextChar defaults to 0x20 - if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline' - - nextChar = tokens[j].content.charCodeAt(0); - break; - } - } - - isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar)); - isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar)); - - isLastWhiteSpace = isWhiteSpace(lastChar); - isNextWhiteSpace = isWhiteSpace(nextChar); - - if (isNextWhiteSpace) { - canOpen = false; - } else if (isNextPunctChar) { - if (!(isLastWhiteSpace || isLastPunctChar)) { - canOpen = false; - } + spaceAfterMarker = false; } - - if (isLastWhiteSpace) { - canClose = false; - } else if (isLastPunctChar) { - if (!(isNextWhiteSpace || isNextPunctChar)) { - canClose = false; + let offset = initial; + oldBMarks.push(state.bMarks[nextLine]); + state.bMarks[nextLine] = pos; + while (pos < max) { + const ch = state.src.charCodeAt(pos); + if (isSpace(ch)) { + if (ch === 0x09) { + offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4; + } else { + offset++; + } + } else { + break; } + pos++; } + lastLineEmpty = pos >= max; + oldBSCount.push(state.bsCount[nextLine]); + state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0); + oldSCount.push(state.sCount[nextLine]); + state.sCount[nextLine] = offset - initial; + oldTShift.push(state.tShift[nextLine]); + state.tShift[nextLine] = pos - state.bMarks[nextLine]; + continue; + } - if (nextChar === 0x22 /* " */ && t[0] === '"') { - if (lastChar >= 0x30 /* 0 */ && lastChar <= 0x39 /* 9 */) { - // special case: 1"" - count first quote as an inch - canClose = canOpen = false; - } - } + // Case 2: line is not inside the blockquote, and the last line was empty. + if (lastLineEmpty) { + break; + } - if (canOpen && canClose) { - // Replace quotes in the middle of punctuation sequence, but not - // in the middle of the words, i.e.: - // - // 1. foo " bar " baz - not replaced - // 2. foo-"-bar-"-baz - replaced - // 3. foo"bar"baz - not replaced - // - canOpen = isLastPunctChar; - canClose = isNextPunctChar; + // Case 3: another tag found. + let terminate = false; + for (let i = 0, l = terminatorRules.length; i < l; i++) { + if (terminatorRules[i](state, nextLine, endLine, true)) { + terminate = true; + break; } - - if (!canOpen && !canClose) { - // middle of word - if (isSingle) { - token.content = replaceAt(token.content, t.index, APOSTROPHE); - } - continue; + } + if (terminate) { + // Quirk to enforce "hard termination mode" for paragraphs; + // normally if you call `tokenize(state, startLine, nextLine)`, + // paragraphs will look below nextLine for paragraph continuation, + // but if blockquote is terminated by another tag, they shouldn't + state.lineMax = nextLine; + if (state.blkIndent !== 0) { + // state.blkIndent was non-zero, we now set it to zero, + // so we need to re-calculate all offsets to appear as + // if indent wasn't changed + oldBMarks.push(state.bMarks[nextLine]); + oldBSCount.push(state.bsCount[nextLine]); + oldTShift.push(state.tShift[nextLine]); + oldSCount.push(state.sCount[nextLine]); + state.sCount[nextLine] -= state.blkIndent; } + break; + } + oldBMarks.push(state.bMarks[nextLine]); + oldBSCount.push(state.bsCount[nextLine]); + oldTShift.push(state.tShift[nextLine]); + oldSCount.push(state.sCount[nextLine]); - if (canClose) { - // this could be a closing quote, rewind the stack to get a match - for (j = stack.length - 1; j >= 0; j--) { - item = stack[j]; - if (stack[j].level < thisLevel) { break; } - if (item.single === isSingle && stack[j].level === thisLevel) { - item = stack[j]; + // A negative indentation means that this is a paragraph continuation + // + state.sCount[nextLine] = -1; + } + const oldIndent = state.blkIndent; + state.blkIndent = 0; + const token_o = state.push('blockquote_open', 'blockquote', 1); + token_o.markup = '>'; + const lines = [startLine, 0]; + token_o.map = lines; + state.md.block.tokenize(state, startLine, nextLine); + const token_c = state.push('blockquote_close', 'blockquote', -1); + token_c.markup = '>'; + state.lineMax = oldLineMax; + state.parentType = oldParentType; + lines[1] = state.line; - if (isSingle) { - openQuote = state.md.options.quotes[2]; - closeQuote = state.md.options.quotes[3]; - } else { - openQuote = state.md.options.quotes[0]; - closeQuote = state.md.options.quotes[1]; - } + // Restore original tShift; this might not be necessary since the parser + // has already been here, but just to make sure we can do that. + for (let i = 0; i < oldTShift.length; i++) { + state.bMarks[i + startLine] = oldBMarks[i]; + state.tShift[i + startLine] = oldTShift[i]; + state.sCount[i + startLine] = oldSCount[i]; + state.bsCount[i + startLine] = oldBSCount[i]; + } + state.blkIndent = oldIndent; + return true; +} - // replace token.content *before* tokens[item.token].content, - // because, if they are pointing at the same token, replaceAt - // could mess up indices when quote length != 1 - token.content = replaceAt(token.content, t.index, closeQuote); - tokens[item.token].content = replaceAt( - tokens[item.token].content, item.pos, openQuote); +// Horizontal rule - pos += closeQuote.length - 1; - if (item.token === i) { pos += openQuote.length - 1; } +function hr(state, startLine, endLine, silent) { + const max = state.eMarks[startLine]; + // if it's indented more than 3 spaces, it should be a code block + if (state.sCount[startLine] - state.blkIndent >= 4) { + return false; + } + let pos = state.bMarks[startLine] + state.tShift[startLine]; + const marker = state.src.charCodeAt(pos++); - text = token.content; - max = text.length; + // Check hr marker + if (marker !== 0x2A /* * */ && marker !== 0x2D /* - */ && marker !== 0x5F /* _ */) { + return false; + } - stack.length = j; - continue OUTER; - } - } - } + // markers can be mixed with spaces, but there should be at least 3 of them - if (canOpen) { - stack.push({ - token: i, - pos: t.index, - single: isSingle, - level: thisLevel - }); - } else if (canClose && isSingle) { - token.content = replaceAt(token.content, t.index, APOSTROPHE); - } + let cnt = 1; + while (pos < max) { + const ch = state.src.charCodeAt(pos++); + if (ch !== marker && !isSpace(ch)) { + return false; + } + if (ch === marker) { + cnt++; } } + if (cnt < 3) { + return false; + } + if (silent) { + return true; + } + state.line = startLine + 1; + const token = state.push('hr', 'hr', 0); + token.map = [startLine, state.line]; + token.markup = Array(cnt + 1).join(String.fromCharCode(marker)); + return true; } +// Lists -module.exports = function smartquotes(state) { - /*eslint max-depth:0*/ - var blkIdx; - if (!state.md.options.typographer) { return; } +// Search `[-+*][\n ]`, returns next pos after marker on success +// or -1 on fail. +function skipBulletListMarker(state, startLine) { + const max = state.eMarks[startLine]; + let pos = state.bMarks[startLine] + state.tShift[startLine]; + const marker = state.src.charCodeAt(pos++); + // Check bullet + if (marker !== 0x2A /* * */ && marker !== 0x2D /* - */ && marker !== 0x2B /* + */) { + return -1; + } + if (pos < max) { + const ch = state.src.charCodeAt(pos); + if (!isSpace(ch)) { + // " -test " - is not a list item + return -1; + } + } + return pos; +} - for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) { +// Search `\d+[.)][\n ]`, returns next pos after marker on success +// or -1 on fail. +function skipOrderedListMarker(state, startLine) { + const start = state.bMarks[startLine] + state.tShift[startLine]; + const max = state.eMarks[startLine]; + let pos = start; - if (state.tokens[blkIdx].type !== 'inline' || - !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) { + // List marker should have at least 2 chars (digit + dot) + if (pos + 1 >= max) { + return -1; + } + let ch = state.src.charCodeAt(pos++); + if (ch < 0x30 /* 0 */ || ch > 0x39 /* 9 */) { + return -1; + } + for (;;) { + // EOL -> fail + if (pos >= max) { + return -1; + } + ch = state.src.charCodeAt(pos++); + if (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) { + // List marker should have no more than 9 digits + // (prevents integer overflow in browsers) + if (pos - start >= 10) { + return -1; + } continue; } - process_inlines(state.tokens[blkIdx].children, state); + // found valid marker + if (ch === 0x29 /* ) */ || ch === 0x2e /* . */) { + break; + } + return -1; } -}; - + if (pos < max) { + ch = state.src.charCodeAt(pos); + if (!isSpace(ch)) { + // " 1.test " - is not a list item + return -1; + } + } + return pos; +} +function markTightParagraphs(state, idx) { + const level = state.level + 2; + for (let i = idx + 2, l = state.tokens.length - 2; i < l; i++) { + if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') { + state.tokens[i + 2].hidden = true; + state.tokens[i].hidden = true; + i += 2; + } + } +} +function list(state, startLine, endLine, silent) { + let max, pos, start, token; + let nextLine = startLine; + let tight = true; -/***/ }), + // if it's indented more than 3 spaces, it should be a code block + if (state.sCount[nextLine] - state.blkIndent >= 4) { + return false; + } -/***/ 1744: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + // Special case: + // - item 1 + // - item 2 + // - item 3 + // - item 4 + // - this one is a paragraph continuation + if (state.listIndent >= 0 && state.sCount[nextLine] - state.listIndent >= 4 && state.sCount[nextLine] < state.blkIndent) { + return false; + } + let isTerminatingParagraph = false; -"use strict"; -// Core state object -// + // limit conditions when list can interrupt + // a paragraph (validation mode only) + if (silent && state.parentType === 'paragraph') { + // Next list item should still terminate previous list item; + // + // This code can fail if plugins use blkIndent as well as lists, + // but I hope the spec gets fixed long before that happens. + // + if (state.sCount[nextLine] >= state.blkIndent) { + isTerminatingParagraph = true; + } + } + // Detect list type and position after marker + let isOrdered; + let markerValue; + let posAfterMarker; + if ((posAfterMarker = skipOrderedListMarker(state, nextLine)) >= 0) { + isOrdered = true; + start = state.bMarks[nextLine] + state.tShift[nextLine]; + markerValue = Number(state.src.slice(start, posAfterMarker - 1)); -var Token = __nccwpck_require__(4742); + // If we're starting a new ordered list right after + // a paragraph, it should start with 1. + if (isTerminatingParagraph && markerValue !== 1) return false; + } else if ((posAfterMarker = skipBulletListMarker(state, nextLine)) >= 0) { + isOrdered = false; + } else { + return false; + } + // If we're starting a new unordered list right after + // a paragraph, first line should not be empty. + if (isTerminatingParagraph) { + if (state.skipSpaces(posAfterMarker) >= state.eMarks[nextLine]) return false; + } -function StateCore(src, md, env) { - this.src = src; - this.env = env; - this.tokens = []; - this.inlineMode = false; - this.md = md; // link to parser instance -} + // For validation mode we can terminate immediately + if (silent) { + return true; + } -// re-export Token class to use in core rules -StateCore.prototype.Token = Token; + // We should terminate list on style change. Remember first one to compare. + const markerCharCode = state.src.charCodeAt(posAfterMarker - 1); + // Start list + const listTokIdx = state.tokens.length; + if (isOrdered) { + token = state.push('ordered_list_open', 'ol', 1); + if (markerValue !== 1) { + token.attrs = [['start', markerValue]]; + } + } else { + token = state.push('bullet_list_open', 'ul', 1); + } + const listLines = [nextLine, 0]; + token.map = listLines; + token.markup = String.fromCharCode(markerCharCode); -module.exports = StateCore; + // + // Iterate list items + // + let prevEmptyEnd = false; + const terminatorRules = state.md.block.ruler.getRules('list'); + const oldParentType = state.parentType; + state.parentType = 'list'; + while (nextLine < endLine) { + pos = posAfterMarker; + max = state.eMarks[nextLine]; + const initial = state.sCount[nextLine] + posAfterMarker - (state.bMarks[nextLine] + state.tShift[nextLine]); + let offset = initial; + while (pos < max) { + const ch = state.src.charCodeAt(pos); + if (ch === 0x09) { + offset += 4 - (offset + state.bsCount[nextLine]) % 4; + } else if (ch === 0x20) { + offset++; + } else { + break; + } + pos++; + } + const contentStart = pos; + let indentAfterMarker; + if (contentStart >= max) { + // trimming space in "- \n 3" case, indent is 1 here + indentAfterMarker = 1; + } else { + indentAfterMarker = offset - initial; + } -/***/ }), + // If we have more than 4 spaces, the indent is 1 + // (the rest is just indented code block) + if (indentAfterMarker > 4) { + indentAfterMarker = 1; + } -/***/ 747: -/***/ ((module) => { + // " - test" + // ^^^^^ - calculating total length of this thing + const indent = initial + indentAfterMarker; -"use strict"; -// Join raw text tokens with the rest of the text -// -// This is set as a separate rule to provide an opportunity for plugins -// to run text replacements after text join, but before escape join. -// -// For example, `\:)` shouldn't be replaced with an emoji. -// + // Run subparser & write tokens + token = state.push('list_item_open', 'li', 1); + token.markup = String.fromCharCode(markerCharCode); + const itemLines = [nextLine, 0]; + token.map = itemLines; + if (isOrdered) { + token.info = state.src.slice(start, posAfterMarker - 1); + } + // change current state, then restore it after parser subcall + const oldTight = state.tight; + const oldTShift = state.tShift[nextLine]; + const oldSCount = state.sCount[nextLine]; + // - example list + // ^ listIndent position will be here + // ^ blkIndent position will be here + // + const oldListIndent = state.listIndent; + state.listIndent = state.blkIndent; + state.blkIndent = indent; + state.tight = true; + state.tShift[nextLine] = contentStart - state.bMarks[nextLine]; + state.sCount[nextLine] = offset; + if (contentStart >= max && state.isEmpty(nextLine + 1)) { + // workaround for this case + // (list item is empty, list terminates before "foo"): + // ~~~~~~~~ + // - + // + // foo + // ~~~~~~~~ + state.line = Math.min(state.line + 2, endLine); + } else { + state.md.block.tokenize(state, nextLine, endLine, true); + } -module.exports = function text_join(state) { - var j, l, tokens, curr, max, last, - blockTokens = state.tokens; + // If any of list item is tight, mark list as tight + if (!state.tight || prevEmptyEnd) { + tight = false; + } + // Item become loose if finish with empty line, + // but we should filter last element, because it means list finish + prevEmptyEnd = state.line - nextLine > 1 && state.isEmpty(state.line - 1); + state.blkIndent = state.listIndent; + state.listIndent = oldListIndent; + state.tShift[nextLine] = oldTShift; + state.sCount[nextLine] = oldSCount; + state.tight = oldTight; + token = state.push('list_item_close', 'li', -1); + token.markup = String.fromCharCode(markerCharCode); + nextLine = state.line; + itemLines[1] = nextLine; + if (nextLine >= endLine) { + break; + } - for (j = 0, l = blockTokens.length; j < l; j++) { - if (blockTokens[j].type !== 'inline') continue; + // + // Try to check if list is terminated or continued. + // + if (state.sCount[nextLine] < state.blkIndent) { + break; + } - tokens = blockTokens[j].children; - max = tokens.length; + // if it's indented more than 3 spaces, it should be a code block + if (state.sCount[nextLine] - state.blkIndent >= 4) { + break; + } - for (curr = 0; curr < max; curr++) { - if (tokens[curr].type === 'text_special') { - tokens[curr].type = 'text'; + // fail if terminating block found + let terminate = false; + for (let i = 0, l = terminatorRules.length; i < l; i++) { + if (terminatorRules[i](state, nextLine, endLine, true)) { + terminate = true; + break; } } + if (terminate) { + break; + } - for (curr = last = 0; curr < max; curr++) { - if (tokens[curr].type === 'text' && - curr + 1 < max && - tokens[curr + 1].type === 'text') { - - // collapse two adjacent text nodes - tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content; - } else { - if (curr !== last) { tokens[last] = tokens[curr]; } - - last++; + // fail if list has another type + if (isOrdered) { + posAfterMarker = skipOrderedListMarker(state, nextLine); + if (posAfterMarker < 0) { + break; + } + start = state.bMarks[nextLine] + state.tShift[nextLine]; + } else { + posAfterMarker = skipBulletListMarker(state, nextLine); + if (posAfterMarker < 0) { + break; } } - - if (curr !== last) { - tokens.length = last; + if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) { + break; } } -}; - - -/***/ }), - -/***/ 5281: -/***/ ((module) => { - -"use strict"; -// Process autolinks '' - - - - -/*eslint max-len:0*/ -var EMAIL_RE = /^([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/; -var AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.\-]{1,31}):([^<>\x00-\x20]*)$/; - - -module.exports = function autolink(state, silent) { - var url, fullUrl, token, ch, start, max, - pos = state.pos; - if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; } - - start = state.pos; - max = state.posMax; + // Finalize list + if (isOrdered) { + token = state.push('ordered_list_close', 'ol', -1); + } else { + token = state.push('bullet_list_close', 'ul', -1); + } + token.markup = String.fromCharCode(markerCharCode); + listLines[1] = nextLine; + state.line = nextLine; + state.parentType = oldParentType; - for (;;) { - if (++pos >= max) return false; + // mark paragraphs tight if needed + if (tight) { + markTightParagraphs(state, listTokIdx); + } + return true; +} - ch = state.src.charCodeAt(pos); +function reference(state, startLine, _endLine, silent) { + let pos = state.bMarks[startLine] + state.tShift[startLine]; + let max = state.eMarks[startLine]; + let nextLine = startLine + 1; - if (ch === 0x3C /* < */) return false; - if (ch === 0x3E /* > */) break; + // if it's indented more than 3 spaces, it should be a code block + if (state.sCount[startLine] - state.blkIndent >= 4) { + return false; } + if (state.src.charCodeAt(pos) !== 0x5B /* [ */) { + return false; + } + function getNextLine(nextLine) { + const endLine = state.lineMax; + if (nextLine >= endLine || state.isEmpty(nextLine)) { + // empty line or end of input + return null; + } + let isContinuation = false; - url = state.src.slice(start + 1, pos); - - if (AUTOLINK_RE.test(url)) { - fullUrl = state.md.normalizeLink(url); - if (!state.md.validateLink(fullUrl)) { return false; } + // this would be a code block normally, but after paragraph + // it's considered a lazy continuation regardless of what's there + if (state.sCount[nextLine] - state.blkIndent > 3) { + isContinuation = true; + } - if (!silent) { - token = state.push('link_open', 'a', 1); - token.attrs = [ [ 'href', fullUrl ] ]; - token.markup = 'autolink'; - token.info = 'auto'; + // quirk for blockquotes, this line should already be checked by that rule + if (state.sCount[nextLine] < 0) { + isContinuation = true; + } + if (!isContinuation) { + const terminatorRules = state.md.block.ruler.getRules('reference'); + const oldParentType = state.parentType; + state.parentType = 'reference'; + + // Some tags can terminate paragraph without empty line. + let terminate = false; + for (let i = 0, l = terminatorRules.length; i < l; i++) { + if (terminatorRules[i](state, nextLine, endLine, true)) { + terminate = true; + break; + } + } + state.parentType = oldParentType; + if (terminate) { + // terminated by another block + return null; + } + } + const pos = state.bMarks[nextLine] + state.tShift[nextLine]; + const max = state.eMarks[nextLine]; - token = state.push('text', '', 0); - token.content = state.md.normalizeLinkText(url); + // max + 1 explicitly includes the newline + return state.src.slice(pos, max + 1); + } + let str = state.src.slice(pos, max + 1); + max = str.length; + let labelEnd = -1; + for (pos = 1; pos < max; pos++) { + const ch = str.charCodeAt(pos); + if (ch === 0x5B /* [ */) { + return false; + } else if (ch === 0x5D /* ] */) { + labelEnd = pos; + break; + } else if (ch === 0x0A /* \n */) { + const lineContent = getNextLine(nextLine); + if (lineContent !== null) { + str += lineContent; + max = str.length; + nextLine++; + } + } else if (ch === 0x5C /* \ */) { + pos++; + if (pos < max && str.charCodeAt(pos) === 0x0A) { + const lineContent = getNextLine(nextLine); + if (lineContent !== null) { + str += lineContent; + max = str.length; + nextLine++; + } + } + } + } + if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A /* : */) { + return false; + } - token = state.push('link_close', 'a', -1); - token.markup = 'autolink'; - token.info = 'auto'; + // [label]: destination 'title' + // ^^^ skip optional whitespace here + for (pos = labelEnd + 2; pos < max; pos++) { + const ch = str.charCodeAt(pos); + if (ch === 0x0A) { + const lineContent = getNextLine(nextLine); + if (lineContent !== null) { + str += lineContent; + max = str.length; + nextLine++; + } + } else if (isSpace(ch)) ; else { + break; } + } - state.pos += url.length + 2; - return true; + // [label]: destination 'title' + // ^^^^^^^^^^^ parse this + const destRes = state.md.helpers.parseLinkDestination(str, pos, max); + if (!destRes.ok) { + return false; + } + const href = state.md.normalizeLink(destRes.str); + if (!state.md.validateLink(href)) { + return false; } + pos = destRes.pos; - if (EMAIL_RE.test(url)) { - fullUrl = state.md.normalizeLink('mailto:' + url); - if (!state.md.validateLink(fullUrl)) { return false; } + // save cursor state, we could require to rollback later + const destEndPos = pos; + const destEndLineNo = nextLine; - if (!silent) { - token = state.push('link_open', 'a', 1); - token.attrs = [ [ 'href', fullUrl ] ]; - token.markup = 'autolink'; - token.info = 'auto'; + // [label]: destination 'title' + // ^^^ skipping those spaces + const start = pos; + for (; pos < max; pos++) { + const ch = str.charCodeAt(pos); + if (ch === 0x0A) { + const lineContent = getNextLine(nextLine); + if (lineContent !== null) { + str += lineContent; + max = str.length; + nextLine++; + } + } else if (isSpace(ch)) ; else { + break; + } + } - token = state.push('text', '', 0); - token.content = state.md.normalizeLinkText(url); + // [label]: destination 'title' + // ^^^^^^^ parse this + let titleRes = state.md.helpers.parseLinkTitle(str, pos, max); + while (titleRes.can_continue) { + const lineContent = getNextLine(nextLine); + if (lineContent === null) break; + str += lineContent; + pos = max; + max = str.length; + nextLine++; + titleRes = state.md.helpers.parseLinkTitle(str, pos, max, titleRes); + } + let title; + if (pos < max && start !== pos && titleRes.ok) { + title = titleRes.str; + pos = titleRes.pos; + } else { + title = ''; + pos = destEndPos; + nextLine = destEndLineNo; + } - token = state.push('link_close', 'a', -1); - token.markup = 'autolink'; - token.info = 'auto'; + // skip trailing spaces until the rest of the line + while (pos < max) { + const ch = str.charCodeAt(pos); + if (!isSpace(ch)) { + break; + } + pos++; + } + if (pos < max && str.charCodeAt(pos) !== 0x0A) { + if (title) { + // garbage at the end of the line after title, + // but it could still be a valid reference if we roll back + title = ''; + pos = destEndPos; + nextLine = destEndLineNo; + while (pos < max) { + const ch = str.charCodeAt(pos); + if (!isSpace(ch)) { + break; + } + pos++; + } } + } + if (pos < max && str.charCodeAt(pos) !== 0x0A) { + // garbage at the end of the line + return false; + } + const label = normalizeReference(str.slice(1, labelEnd)); + if (!label) { + // CommonMark 0.20 disallows empty labels + return false; + } - state.pos += url.length + 2; + // Reference can not terminate anything. This check is for safety only. + /* istanbul ignore if */ + if (silent) { return true; } + if (typeof state.env.references === 'undefined') { + state.env.references = {}; + } + if (typeof state.env.references[label] === 'undefined') { + state.env.references[label] = { + title, + href + }; + } + state.line = nextLine; + return true; +} - return false; -}; - - -/***/ }), - -/***/ 8864: -/***/ ((module) => { - -"use strict"; -// Parse backticks - - +// List of valid html blocks names, according to commonmark spec +// https://spec.commonmark.org/0.30/#html-blocks +var block_names = ['address', 'article', 'aside', 'base', 'basefont', 'blockquote', 'body', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dialog', 'dir', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hr', 'html', 'iframe', 'legend', 'li', 'link', 'main', 'menu', 'menuitem', 'nav', 'noframes', 'ol', 'optgroup', 'option', 'p', 'param', 'search', 'section', 'summary', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul']; -module.exports = function backtick(state, silent) { - var start, max, marker, token, matchStart, matchEnd, openerLength, closerLength, - pos = state.pos, - ch = state.src.charCodeAt(pos); +// Regexps to match html elements - if (ch !== 0x60/* ` */) { return false; } +const attr_name = '[a-zA-Z_:][a-zA-Z0-9:._-]*'; +const unquoted = '[^"\'=<>`\\x00-\\x20]+'; +const single_quoted = "'[^']*'"; +const double_quoted = '"[^"]*"'; +const attr_value = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')'; +const attribute = '(?:\\s+' + attr_name + '(?:\\s*=\\s*' + attr_value + ')?)'; +const open_tag = '<[A-Za-z][A-Za-z0-9\\-]*' + attribute + '*\\s*\\/?>'; +const close_tag = '<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>'; +const comment = ''; +const processing = '<[?][\\s\\S]*?[?]>'; +const declaration = ']*>'; +const cdata = ''; +const HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment + '|' + processing + '|' + declaration + '|' + cdata + ')'); +const HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')'); - start = pos; - pos++; - max = state.posMax; +// HTML block - // scan marker length - while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++; } - marker = state.src.slice(start, pos); - openerLength = marker.length; +// An array of opening and corresponding closing sequences for html tags, +// last argument defines whether it can terminate a paragraph or not +// +const HTML_SEQUENCES = [[/^<(script|pre|style|textarea)(?=(\s|>|$))/i, /<\/(script|pre|style|textarea)>/i, true], [/^/, true], [/^<\?/, /\?>/, true], [/^/, true], [/^/, true], [new RegExp('^|$))', 'i'), /^$/, true], [new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + '\\s*$'), /^$/, false]]; +function html_block(state, startLine, endLine, silent) { + let pos = state.bMarks[startLine] + state.tShift[startLine]; + let max = state.eMarks[startLine]; - if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) { - if (!silent) state.pending += marker; - state.pos += openerLength; - return true; + // if it's indented more than 3 spaces, it should be a code block + if (state.sCount[startLine] - state.blkIndent >= 4) { + return false; } + if (!state.md.options.html) { + return false; + } + if (state.src.charCodeAt(pos) !== 0x3C /* < */) { + return false; + } + let lineText = state.src.slice(pos, max); + let i = 0; + for (; i < HTML_SEQUENCES.length; i++) { + if (HTML_SEQUENCES[i][0].test(lineText)) { + break; + } + } + if (i === HTML_SEQUENCES.length) { + return false; + } + if (silent) { + // true if this sequence can be a terminator, false otherwise + return HTML_SEQUENCES[i][2]; + } + let nextLine = startLine + 1; - matchStart = matchEnd = pos; - - // Nothing found in the cache, scan until the end of the line (or until marker is found) - while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) { - matchEnd = matchStart + 1; - - // scan marker length - while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60/* ` */) { matchEnd++; } - - closerLength = matchEnd - matchStart; - - if (closerLength === openerLength) { - // Found matching closer length. - if (!silent) { - token = state.push('code_inline', 'code', 0); - token.markup = marker; - token.content = state.src.slice(pos, matchStart) - .replace(/\n/g, ' ') - .replace(/^ (.+) $/, '$1'); + // If we are here - we detected HTML block. + // Let's roll down till block end. + if (!HTML_SEQUENCES[i][1].test(lineText)) { + for (; nextLine < endLine; nextLine++) { + if (state.sCount[nextLine] < state.blkIndent) { + break; + } + pos = state.bMarks[nextLine] + state.tShift[nextLine]; + max = state.eMarks[nextLine]; + lineText = state.src.slice(pos, max); + if (HTML_SEQUENCES[i][1].test(lineText)) { + if (lineText.length !== 0) { + nextLine++; + } + break; } - state.pos = matchEnd; - return true; } - - // Some different length found, put it in cache as upper limit of where closer can be found - state.backticks[closerLength] = matchStart; } - - // Scanned through the end, didn't find anything - state.backticksScanned = true; - - if (!silent) state.pending += marker; - state.pos += openerLength; + state.line = nextLine; + const token = state.push('html_block', '', 0); + token.map = [startLine, nextLine]; + token.content = state.getLines(startLine, nextLine, state.blkIndent, true); return true; -}; - - -/***/ }), +} -/***/ 1219: -/***/ ((module) => { +// heading (#, ##, ...) -"use strict"; -// For each opening emphasis-like marker find a matching closing one -// +function heading(state, startLine, endLine, silent) { + let pos = state.bMarks[startLine] + state.tShift[startLine]; + let max = state.eMarks[startLine]; + // if it's indented more than 3 spaces, it should be a code block + if (state.sCount[startLine] - state.blkIndent >= 4) { + return false; + } + let ch = state.src.charCodeAt(pos); + if (ch !== 0x23 /* # */ || pos >= max) { + return false; + } + // count heading level + let level = 1; + ch = state.src.charCodeAt(++pos); + while (ch === 0x23 /* # */ && pos < max && level <= 6) { + level++; + ch = state.src.charCodeAt(++pos); + } + if (level > 6 || pos < max && !isSpace(ch)) { + return false; + } + if (silent) { + return true; + } -function processDelimiters(state, delimiters) { - var closerIdx, openerIdx, closer, opener, minOpenerIdx, newMinOpenerIdx, - isOddMatch, lastJump, - openersBottom = {}, - max = delimiters.length; + // Let's cut tails like ' ### ' from the end of string - if (!max) return; + max = state.skipSpacesBack(max, pos); + const tmp = state.skipCharsBack(max, 0x23, pos); // # + if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) { + max = tmp; + } + state.line = startLine + 1; + const token_o = state.push('heading_open', 'h' + String(level), 1); + token_o.markup = '########'.slice(0, level); + token_o.map = [startLine, state.line]; + const token_i = state.push('inline', '', 0); + token_i.content = state.src.slice(pos, max).trim(); + token_i.map = [startLine, state.line]; + token_i.children = []; + const token_c = state.push('heading_close', 'h' + String(level), -1); + token_c.markup = '########'.slice(0, level); + return true; +} - // headerIdx is the first delimiter of the current (where closer is) delimiter run - var headerIdx = 0; - var lastTokenIdx = -2; // needs any value lower than -1 - var jumps = []; +// lheading (---, ===) - for (closerIdx = 0; closerIdx < max; closerIdx++) { - closer = delimiters[closerIdx]; +function lheading(state, startLine, endLine /*, silent */) { + const terminatorRules = state.md.block.ruler.getRules('paragraph'); - jumps.push(0); + // if it's indented more than 3 spaces, it should be a code block + if (state.sCount[startLine] - state.blkIndent >= 4) { + return false; + } + const oldParentType = state.parentType; + state.parentType = 'paragraph'; // use paragraph to match terminatorRules - // markers belong to same delimiter run if: - // - they have adjacent tokens - // - AND markers are the same - // - if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) { - headerIdx = closerIdx; + // jump line-by-line until empty one or EOF + let level = 0; + let marker; + let nextLine = startLine + 1; + for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) { + // this would be a code block normally, but after paragraph + // it's considered a lazy continuation regardless of what's there + if (state.sCount[nextLine] - state.blkIndent > 3) { + continue; } - lastTokenIdx = closer.token; - - // Length is only used for emphasis-specific "rule of 3", - // if it's not defined (in strikethrough or 3rd party plugins), - // we can default it to 0 to disable those checks. // - closer.length = closer.length || 0; - - if (!closer.close) continue; - - // Previously calculated lower bounds (previous fails) - // for each marker, each delimiter length modulo 3, - // and for whether this closer can be an opener; - // https://github.com/commonmark/cmark/commit/34250e12ccebdc6372b8b49c44fab57c72443460 - if (!openersBottom.hasOwnProperty(closer.marker)) { - openersBottom[closer.marker] = [ -1, -1, -1, -1, -1, -1 ]; - } - - minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length % 3)]; - - openerIdx = headerIdx - jumps[headerIdx] - 1; - - newMinOpenerIdx = openerIdx; - - for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) { - opener = delimiters[openerIdx]; - - if (opener.marker !== closer.marker) continue; - - if (opener.open && opener.end < 0) { - - isOddMatch = false; - - // from spec: - // - // If one of the delimiters can both open and close emphasis, then the - // sum of the lengths of the delimiter runs containing the opening and - // closing delimiters must not be a multiple of 3 unless both lengths - // are multiples of 3. - // - if (opener.close || closer.open) { - if ((opener.length + closer.length) % 3 === 0) { - if (opener.length % 3 !== 0 || closer.length % 3 !== 0) { - isOddMatch = true; - } + // Check for underline in setext header + // + if (state.sCount[nextLine] >= state.blkIndent) { + let pos = state.bMarks[nextLine] + state.tShift[nextLine]; + const max = state.eMarks[nextLine]; + if (pos < max) { + marker = state.src.charCodeAt(pos); + if (marker === 0x2D /* - */ || marker === 0x3D /* = */) { + pos = state.skipChars(pos, marker); + pos = state.skipSpaces(pos); + if (pos >= max) { + level = marker === 0x3D /* = */ ? 1 : 2; + break; } } + } + } - if (!isOddMatch) { - // If previous delimiter cannot be an opener, we can safely skip - // the entire sequence in future checks. This is required to make - // sure algorithm has linear complexity (see *_*_*_*_*_... case). - // - lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open ? - jumps[openerIdx - 1] + 1 : - 0; - - jumps[closerIdx] = closerIdx - openerIdx + lastJump; - jumps[openerIdx] = lastJump; + // quirk for blockquotes, this line should already be checked by that rule + if (state.sCount[nextLine] < 0) { + continue; + } - closer.open = false; - opener.end = closerIdx; - opener.close = false; - newMinOpenerIdx = -1; - // treat next token as start of run, - // it optimizes skips in **<...>**a**<...>** pathological case - lastTokenIdx = -2; - break; - } + // Some tags can terminate paragraph without empty line. + let terminate = false; + for (let i = 0, l = terminatorRules.length; i < l; i++) { + if (terminatorRules[i](state, nextLine, endLine, true)) { + terminate = true; + break; } } - - if (newMinOpenerIdx !== -1) { - // If match for this delimiter run failed, we want to set lower bound for - // future lookups. This is required to make sure algorithm has linear - // complexity. - // - // See details here: - // https://github.com/commonmark/cmark/issues/178#issuecomment-270417442 - // - openersBottom[closer.marker][(closer.open ? 3 : 0) + ((closer.length || 0) % 3)] = newMinOpenerIdx; + if (terminate) { + break; } } + if (!level) { + // Didn't find valid underline + return false; + } + const content = state.getLines(startLine, nextLine, state.blkIndent, false).trim(); + state.line = nextLine + 1; + const token_o = state.push('heading_open', 'h' + String(level), 1); + token_o.markup = String.fromCharCode(marker); + token_o.map = [startLine, state.line]; + const token_i = state.push('inline', '', 0); + token_i.content = content; + token_i.map = [startLine, state.line - 1]; + token_i.children = []; + const token_c = state.push('heading_close', 'h' + String(level), -1); + token_c.markup = String.fromCharCode(marker); + state.parentType = oldParentType; + return true; } +// Paragraph -module.exports = function link_pairs(state) { - var curr, - tokens_meta = state.tokens_meta, - max = state.tokens_meta.length; - - processDelimiters(state, state.delimiters); +function paragraph(state, startLine, endLine) { + const terminatorRules = state.md.block.ruler.getRules('paragraph'); + const oldParentType = state.parentType; + let nextLine = startLine + 1; + state.parentType = 'paragraph'; - for (curr = 0; curr < max; curr++) { - if (tokens_meta[curr] && tokens_meta[curr].delimiters) { - processDelimiters(state, tokens_meta[curr].delimiters); + // jump line-by-line until empty one or EOF + for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) { + // this would be a code block normally, but after paragraph + // it's considered a lazy continuation regardless of what's there + if (state.sCount[nextLine] - state.blkIndent > 3) { + continue; } - } -}; + // quirk for blockquotes, this line should already be checked by that rule + if (state.sCount[nextLine] < 0) { + continue; + } -/***/ }), - -/***/ 5830: -/***/ ((module) => { + // Some tags can terminate paragraph without empty line. + let terminate = false; + for (let i = 0, l = terminatorRules.length; i < l; i++) { + if (terminatorRules[i](state, nextLine, endLine, true)) { + terminate = true; + break; + } + } + if (terminate) { + break; + } + } + const content = state.getLines(startLine, nextLine, state.blkIndent, false).trim(); + state.line = nextLine; + const token_o = state.push('paragraph_open', 'p', 1); + token_o.map = [startLine, state.line]; + const token_i = state.push('inline', '', 0); + token_i.content = content; + token_i.map = [startLine, state.line]; + token_i.children = []; + state.push('paragraph_close', 'p', -1); + state.parentType = oldParentType; + return true; +} -"use strict"; -// Process *this* and _that_ -// +/** internal + * class ParserBlock + * + * Block-level tokenizer. + **/ +const _rules$1 = [ +// First 2 params - rule name & source. Secondary array - list of rules, +// which can be terminated by this one. +['table', table, ['paragraph', 'reference']], ['code', code], ['fence', fence, ['paragraph', 'reference', 'blockquote', 'list']], ['blockquote', blockquote, ['paragraph', 'reference', 'blockquote', 'list']], ['hr', hr, ['paragraph', 'reference', 'blockquote', 'list']], ['list', list, ['paragraph', 'reference', 'blockquote']], ['reference', reference], ['html_block', html_block, ['paragraph', 'reference', 'blockquote']], ['heading', heading, ['paragraph', 'reference', 'blockquote']], ['lheading', lheading], ['paragraph', paragraph]]; +/** + * new ParserBlock() + **/ +function ParserBlock() { + /** + * ParserBlock#ruler -> Ruler + * + * [[Ruler]] instance. Keep configuration of block rules. + **/ + this.ruler = new Ruler(); + for (let i = 0; i < _rules$1.length; i++) { + this.ruler.push(_rules$1[i][0], _rules$1[i][1], { + alt: (_rules$1[i][2] || []).slice() + }); + } +} -// Insert each marker as a separate text token, and add it to delimiter list +// Generate tokens for input range // -module.exports.w = function emphasis(state, silent) { - var i, scanned, token, - start = state.pos, - marker = state.src.charCodeAt(start); - - if (silent) { return false; } - - if (marker !== 0x5F /* _ */ && marker !== 0x2A /* * */) { return false; } - - scanned = state.scanDelims(state.pos, marker === 0x2A); +ParserBlock.prototype.tokenize = function (state, startLine, endLine) { + const rules = this.ruler.getRules(''); + const len = rules.length; + const maxNesting = state.md.options.maxNesting; + let line = startLine; + let hasEmptyLines = false; + while (line < endLine) { + state.line = line = state.skipEmptyLines(line); + if (line >= endLine) { + break; + } - for (i = 0; i < scanned.length; i++) { - token = state.push('text', '', 0); - token.content = String.fromCharCode(marker); + // Termination condition for nested calls. + // Nested calls currently used for blockquotes & lists + if (state.sCount[line] < state.blkIndent) { + break; + } - state.delimiters.push({ - // Char code of the starting marker (number). - // - marker: marker, + // If nesting level exceeded - skip tail to the end. That's not ordinary + // situation and we should not care about content. + if (state.level >= maxNesting) { + state.line = endLine; + break; + } - // Total length of these series of delimiters. - // - length: scanned.length, + // Try all possible rules. + // On success, rule should: + // + // - update `state.line` + // - update `state.tokens` + // - return true + const prevLine = state.line; + let ok = false; + for (let i = 0; i < len; i++) { + ok = rules[i](state, line, endLine, false); + if (ok) { + if (prevLine >= state.line) { + throw new Error("block rule didn't increment state.line"); + } + break; + } + } - // A position of the token this delimiter corresponds to. - // - token: state.tokens.length - 1, + // this can only happen if user disables paragraph rule + if (!ok) throw new Error('none of the block rules matched'); - // If this delimiter is matched as a valid opener, `end` will be - // equal to its position, otherwise it's `-1`. - // - end: -1, + // set state.tight if we had an empty line before current tag + // i.e. latest empty line should not count + state.tight = !hasEmptyLines; - // Boolean flags that determine if this delimiter could open or close - // an emphasis. - // - open: scanned.can_open, - close: scanned.can_close - }); + // paragraph might "eat" one newline after it in nested lists + if (state.isEmpty(state.line - 1)) { + hasEmptyLines = true; + } + line = state.line; + if (line < endLine && state.isEmpty(line)) { + hasEmptyLines = true; + line++; + state.line = line; + } } +}; - state.pos += scanned.length; - - return true; +/** + * ParserBlock.parse(str, md, env, outTokens) + * + * Process input string and push block tokens into `outTokens` + **/ +ParserBlock.prototype.parse = function (src, md, env, outTokens) { + if (!src) { + return; + } + const state = new this.State(src, md, env, outTokens); + this.tokenize(state, state.line, state.lineMax); }; +ParserBlock.prototype.State = StateBlock; +// Inline parser state -function postProcess(state, delimiters) { - var i, - startDelim, - endDelim, - token, - ch, - isStrong, - max = delimiters.length; - - for (i = max - 1; i >= 0; i--) { - startDelim = delimiters[i]; - - if (startDelim.marker !== 0x5F/* _ */ && startDelim.marker !== 0x2A/* * */) { - continue; - } +function StateInline(src, md, env, outTokens) { + this.src = src; + this.env = env; + this.md = md; + this.tokens = outTokens; + this.tokens_meta = Array(outTokens.length); + this.pos = 0; + this.posMax = this.src.length; + this.level = 0; + this.pending = ''; + this.pendingLevel = 0; - // Process only opening markers - if (startDelim.end === -1) { - continue; - } + // Stores { start: end } pairs. Useful for backtrack + // optimization of pairs parse (emphasis, strikes). + this.cache = {}; - endDelim = delimiters[startDelim.end]; + // List of emphasis-like delimiters for current tag + this.delimiters = []; - // If the previous delimiter has the same marker and is adjacent to this one, - // merge those into one strong delimiter. - // - // `whatever` -> `whatever` - // - isStrong = i > 0 && - delimiters[i - 1].end === startDelim.end + 1 && - // check that first two markers match and adjacent - delimiters[i - 1].marker === startDelim.marker && - delimiters[i - 1].token === startDelim.token - 1 && - // check that last two markers are adjacent (we can safely assume they match) - delimiters[startDelim.end + 1].token === endDelim.token + 1; - - ch = String.fromCharCode(startDelim.marker); - - token = state.tokens[startDelim.token]; - token.type = isStrong ? 'strong_open' : 'em_open'; - token.tag = isStrong ? 'strong' : 'em'; - token.nesting = 1; - token.markup = isStrong ? ch + ch : ch; - token.content = ''; + // Stack of delimiter lists for upper level tags + this._prev_delimiters = []; - token = state.tokens[endDelim.token]; - token.type = isStrong ? 'strong_close' : 'em_close'; - token.tag = isStrong ? 'strong' : 'em'; - token.nesting = -1; - token.markup = isStrong ? ch + ch : ch; - token.content = ''; + // backtick length => last seen position + this.backticks = {}; + this.backticksScanned = false; - if (isStrong) { - state.tokens[delimiters[i - 1].token].content = ''; - state.tokens[delimiters[startDelim.end + 1].token].content = ''; - i--; - } - } + // Counter used to disable inline linkify-it execution + // inside and markdown links + this.linkLevel = 0; } - -// Walk through delimiter list and replace text tokens with tags +// Flush pending text // -module.exports.g = function emphasis(state) { - var curr, - tokens_meta = state.tokens_meta, - max = state.tokens_meta.length; - - postProcess(state, state.delimiters); +StateInline.prototype.pushPending = function () { + const token = new Token('text', '', 0); + token.content = this.pending; + token.level = this.pendingLevel; + this.tokens.push(token); + this.pending = ''; + return token; +}; - for (curr = 0; curr < max; curr++) { - if (tokens_meta[curr] && tokens_meta[curr].delimiters) { - postProcess(state, tokens_meta[curr].delimiters); - } +// Push new token to "stream". +// If pending text exists - flush it as text token +// +StateInline.prototype.push = function (type, tag, nesting) { + if (this.pending) { + this.pushPending(); + } + const token = new Token(type, tag, nesting); + let token_meta = null; + if (nesting < 0) { + // closing tag + this.level--; + this.delimiters = this._prev_delimiters.pop(); + } + token.level = this.level; + if (nesting > 0) { + // opening tag + this.level++; + this._prev_delimiters.push(this.delimiters); + this.delimiters = []; + token_meta = { + delimiters: this.delimiters + }; } + this.pendingLevel = this.level; + this.tokens.push(token); + this.tokens_meta.push(token_meta); + return token; }; +// Scan a sequence of emphasis-like markers, and determine whether +// it can start an emphasis sequence or end an emphasis sequence. +// +// - start - position to scan from (it should point at a valid marker); +// - canSplitWord - determine if these markers can be found inside a word +// +StateInline.prototype.scanDelims = function (start, canSplitWord) { + const max = this.posMax; + const marker = this.src.charCodeAt(start); -/***/ }), - -/***/ 8261: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; -// Process html entity - {, ¯, ", ... - + // treat beginning of the line as a whitespace + const lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20; + let pos = start; + while (pos < max && this.src.charCodeAt(pos) === marker) { + pos++; + } + const count = pos - start; + // treat end of the line as a whitespace + const nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20; + const isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar)); + const isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar)); + const isLastWhiteSpace = isWhiteSpace(lastChar); + const isNextWhiteSpace = isWhiteSpace(nextChar); + const left_flanking = !isNextWhiteSpace && (!isNextPunctChar || isLastWhiteSpace || isLastPunctChar); + const right_flanking = !isLastWhiteSpace && (!isLastPunctChar || isNextWhiteSpace || isNextPunctChar); + const can_open = left_flanking && (canSplitWord || !right_flanking || isLastPunctChar); + const can_close = right_flanking && (canSplitWord || !left_flanking || isNextPunctChar); + return { + can_open, + can_close, + length: count + }; +}; -var entities = __nccwpck_require__(4554); -var has = (__nccwpck_require__(6498).has); -var isValidEntityCode = (__nccwpck_require__(6498).isValidEntityCode); -var fromCodePoint = (__nccwpck_require__(6498).fromCodePoint); +// re-export Token class to use in block rules +StateInline.prototype.Token = Token; +// Skip text characters for text token, place those to pending buffer +// and increment current pos -var DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i; -var NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i; +// Rule to skip pure text +// '{}$%@~+=:' reserved for extentions +// !, ", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \, ], ^, _, `, {, |, }, or ~ -module.exports = function entity(state, silent) { - var ch, code, match, token, pos = state.pos, max = state.posMax; +// !!!! Don't confuse with "Markdown ASCII Punctuation" chars +// http://spec.commonmark.org/0.15/#ascii-punctuation-character +function isTerminatorChar(ch) { + switch (ch) { + case 0x0A /* \n */: + case 0x21 /* ! */: + case 0x23 /* # */: + case 0x24 /* $ */: + case 0x25 /* % */: + case 0x26 /* & */: + case 0x2A /* * */: + case 0x2B /* + */: + case 0x2D /* - */: + case 0x3A /* : */: + case 0x3C /* < */: + case 0x3D /* = */: + case 0x3E /* > */: + case 0x40 /* @ */: + case 0x5B /* [ */: + case 0x5C /* \ */: + case 0x5D /* ] */: + case 0x5E /* ^ */: + case 0x5F /* _ */: + case 0x60 /* ` */: + case 0x7B /* { */: + case 0x7D /* } */: + case 0x7E /* ~ */: + return true; + default: + return false; + } +} +function text(state, silent) { + let pos = state.pos; + while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) { + pos++; + } + if (pos === state.pos) { + return false; + } + if (!silent) { + state.pending += state.src.slice(state.pos, pos); + } + state.pos = pos; + return true; +} - if (state.src.charCodeAt(pos) !== 0x26/* & */) return false; +// Alternative implementation, for memory. +// +// It costs 10% of performance, but allows extend terminators list, if place it +// to `ParserInline` property. Probably, will switch to it sometime, such +// flexibility required. - if (pos + 1 >= max) return false; +/* +var TERMINATOR_RE = /[\n!#$%&*+\-:<=>@[\\\]^_`{}~]/; - ch = state.src.charCodeAt(pos + 1); +module.exports = function text(state, silent) { + var pos = state.pos, + idx = state.src.slice(pos).search(TERMINATOR_RE); - if (ch === 0x23 /* # */) { - match = state.src.slice(pos).match(DIGITAL_RE); - if (match) { - if (!silent) { - code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10); + // first char is terminator -> empty text + if (idx === 0) { return false; } - token = state.push('text_special', '', 0); - token.content = isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD); - token.markup = match[0]; - token.info = 'entity'; - } - state.pos += match[0].length; - return true; - } - } else { - match = state.src.slice(pos).match(NAMED_RE); - if (match) { - if (has(entities, match[1])) { - if (!silent) { - token = state.push('text_special', '', 0); - token.content = entities[match[1]]; - token.markup = match[0]; - token.info = 'entity'; - } - state.pos += match[0].length; - return true; - } - } + // no terminator -> text till end of string + if (idx < 0) { + if (!silent) { state.pending += state.src.slice(pos); } + state.pos = state.src.length; + return true; } - return false; -}; - + if (!silent) { state.pending += state.src.slice(pos, pos + idx); } -/***/ }), + state.pos += idx; -/***/ 7039: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + return true; +}; */ -"use strict"; -// Process escaped chars and hardbreaks +// Process links like https://example.org/ +// RFC3986: scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." ) +const SCHEME_RE = /(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$/i; +function linkify(state, silent) { + if (!state.md.options.linkify) return false; + if (state.linkLevel > 0) return false; + const pos = state.pos; + const max = state.posMax; + if (pos + 3 > max) return false; + if (state.src.charCodeAt(pos) !== 0x3A /* : */) return false; + if (state.src.charCodeAt(pos + 1) !== 0x2F /* / */) return false; + if (state.src.charCodeAt(pos + 2) !== 0x2F /* / */) return false; + const match = state.pending.match(SCHEME_RE); + if (!match) return false; + const proto = match[1]; + const link = state.md.linkify.matchAtStart(state.src.slice(pos - proto.length)); + if (!link) return false; + let url = link.url; + // invalid link, but still detected by linkify somehow; + // need to check to prevent infinite loop below + if (url.length <= proto.length) return false; -var isSpace = (__nccwpck_require__(6498).isSpace); + // disallow '*' at the end of the link (conflicts with emphasis) + url = url.replace(/\*+$/, ''); + const fullUrl = state.md.normalizeLink(url); + if (!state.md.validateLink(fullUrl)) return false; + if (!silent) { + state.pending = state.pending.slice(0, -proto.length); + const token_o = state.push('link_open', 'a', 1); + token_o.attrs = [['href', fullUrl]]; + token_o.markup = 'linkify'; + token_o.info = 'auto'; + const token_t = state.push('text', '', 0); + token_t.content = state.md.normalizeLinkText(url); + const token_c = state.push('link_close', 'a', -1); + token_c.markup = 'linkify'; + token_c.info = 'auto'; + } + state.pos += url.length - proto.length; + return true; +} -var ESCAPED = []; +// Proceess '\n' -for (var i = 0; i < 256; i++) { ESCAPED.push(0); } +function newline(state, silent) { + let pos = state.pos; + if (state.src.charCodeAt(pos) !== 0x0A /* \n */) { + return false; + } + const pmax = state.pending.length - 1; + const max = state.posMax; -'\\!"#$%&\'()*+,./:;<=>?@[]^_`{|}~-' - .split('').forEach(function (ch) { ESCAPED[ch.charCodeAt(0)] = 1; }); + // ' \n' -> hardbreak + // Lookup in pending chars is bad practice! Don't copy to other rules! + // Pending string is stored in concat mode, indexed lookups will cause + // convertion to flat mode. + if (!silent) { + if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) { + if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) { + // Find whitespaces tail of pending chars. + let ws = pmax - 1; + while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 0x20) ws--; + state.pending = state.pending.slice(0, ws); + state.push('hardbreak', 'br', 0); + } else { + state.pending = state.pending.slice(0, -1); + state.push('softbreak', 'br', 0); + } + } else { + state.push('softbreak', 'br', 0); + } + } + pos++; + // skip heading spaces for next line + while (pos < max && isSpace(state.src.charCodeAt(pos))) { + pos++; + } + state.pos = pos; + return true; +} -module.exports = function escape(state, silent) { - var ch1, ch2, origStr, escapedStr, token, pos = state.pos, max = state.posMax; +// Process escaped chars and hardbreaks - if (state.src.charCodeAt(pos) !== 0x5C/* \ */) return false; +const ESCAPED = []; +for (let i = 0; i < 256; i++) { + ESCAPED.push(0); +} +'\\!"#$%&\'()*+,./:;<=>?@[]^_`{|}~-'.split('').forEach(function (ch) { + ESCAPED[ch.charCodeAt(0)] = 1; +}); +function escape(state, silent) { + let pos = state.pos; + const max = state.posMax; + if (state.src.charCodeAt(pos) !== 0x5C /* \ */) return false; pos++; // '\' at the end of the inline block if (pos >= max) return false; - - ch1 = state.src.charCodeAt(pos); - + let ch1 = state.src.charCodeAt(pos); if (ch1 === 0x0A) { if (!silent) { state.push('hardbreak', 'br', 0); } - pos++; // skip leading whitespaces from next line while (pos < max) { @@ -14565,358 +31877,325 @@ module.exports = function escape(state, silent) { if (!isSpace(ch1)) break; pos++; } - state.pos = pos; return true; } - - escapedStr = state.src[pos]; - + let escapedStr = state.src[pos]; if (ch1 >= 0xD800 && ch1 <= 0xDBFF && pos + 1 < max) { - ch2 = state.src.charCodeAt(pos + 1); - + const ch2 = state.src.charCodeAt(pos + 1); if (ch2 >= 0xDC00 && ch2 <= 0xDFFF) { escapedStr += state.src[pos + 1]; pos++; } } - - origStr = '\\' + escapedStr; - + const origStr = '\\' + escapedStr; if (!silent) { - token = state.push('text_special', '', 0); - + const token = state.push('text_special', '', 0); if (ch1 < 256 && ESCAPED[ch1] !== 0) { token.content = escapedStr; } else { token.content = origStr; } - token.markup = origStr; - token.info = 'escape'; + token.info = 'escape'; } - state.pos = pos + 1; return true; -}; - - -/***/ }), - -/***/ 3269: -/***/ ((module) => { - -"use strict"; -// Clean up tokens after emphasis and strikethrough postprocessing: -// merge adjacent text nodes into one and re-calculate all token levels -// -// This is necessary because initially emphasis delimiter markers (*, _, ~) -// are treated as their own separate text tokens. Then emphasis rule either -// leaves them as text (needed to merge with adjacent text) or turns them -// into opening/closing tags (which messes up levels inside). -// - - - -module.exports = function fragments_join(state) { - var curr, last, - level = 0, - tokens = state.tokens, - max = state.tokens.length; - - for (curr = last = 0; curr < max; curr++) { - // re-calculate levels after emphasis/strikethrough turns some text nodes - // into opening/closing tags - if (tokens[curr].nesting < 0) level--; // closing tag - tokens[curr].level = level; - if (tokens[curr].nesting > 0) level++; // opening tag - - if (tokens[curr].type === 'text' && - curr + 1 < max && - tokens[curr + 1].type === 'text') { +} - // collapse two adjacent text nodes - tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content; - } else { - if (curr !== last) { tokens[last] = tokens[curr]; } +// Parse backticks - last++; - } +function backtick(state, silent) { + let pos = state.pos; + const ch = state.src.charCodeAt(pos); + if (ch !== 0x60 /* ` */) { + return false; } + const start = pos; + pos++; + const max = state.posMax; - if (curr !== last) { - tokens.length = last; + // scan marker length + while (pos < max && state.src.charCodeAt(pos) === 0x60 /* ` */) { + pos++; } -}; - - -/***/ }), - -/***/ 9230: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; -// Process html tags - - - - -var HTML_TAG_RE = (__nccwpck_require__(3133)/* .HTML_TAG_RE */ .n); + const marker = state.src.slice(start, pos); + const openerLength = marker.length; + if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) { + if (!silent) state.pending += marker; + state.pos += openerLength; + return true; + } + let matchEnd = pos; + let matchStart; + // Nothing found in the cache, scan until the end of the line (or until marker is found) + while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) { + matchEnd = matchStart + 1; -function isLinkOpen(str) { - return /^\s]/i.test(str); -} -function isLinkClose(str) { - return /^<\/a\s*>/i.test(str); -} + // scan marker length + while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60 /* ` */) { + matchEnd++; + } + const closerLength = matchEnd - matchStart; + if (closerLength === openerLength) { + // Found matching closer length. + if (!silent) { + const token = state.push('code_inline', 'code', 0); + token.markup = marker; + token.content = state.src.slice(pos, matchStart).replace(/\n/g, ' ').replace(/^ (.+) $/, '$1'); + } + state.pos = matchEnd; + return true; + } + // Some different length found, put it in cache as upper limit of where closer can be found + state.backticks[closerLength] = matchStart; + } -function isLetter(ch) { - /*eslint no-bitwise:0*/ - var lc = ch | 0x20; // to lower case - return (lc >= 0x61/* a */) && (lc <= 0x7a/* z */); + // Scanned through the end, didn't find anything + state.backticksScanned = true; + if (!silent) state.pending += marker; + state.pos += openerLength; + return true; } +// ~~strike through~~ +// -module.exports = function html_inline(state, silent) { - var ch, match, max, token, - pos = state.pos; - - if (!state.md.options.html) { return false; } - - // Check start - max = state.posMax; - if (state.src.charCodeAt(pos) !== 0x3C/* < */ || - pos + 2 >= max) { +// Insert each marker as a separate text token, and add it to delimiter list +// +function strikethrough_tokenize(state, silent) { + const start = state.pos; + const marker = state.src.charCodeAt(start); + if (silent) { return false; } - - // Quick fail on second char - ch = state.src.charCodeAt(pos + 1); - if (ch !== 0x21/* ! */ && - ch !== 0x3F/* ? */ && - ch !== 0x2F/* / */ && - !isLetter(ch)) { + if (marker !== 0x7E /* ~ */) { return false; } - - match = state.src.slice(pos).match(HTML_TAG_RE); - if (!match) { return false; } - - if (!silent) { - token = state.push('html_inline', '', 0); - token.content = state.src.slice(pos, pos + match[0].length); - - if (isLinkOpen(token.content)) state.linkLevel++; - if (isLinkClose(token.content)) state.linkLevel--; + const scanned = state.scanDelims(state.pos, true); + let len = scanned.length; + const ch = String.fromCharCode(marker); + if (len < 2) { + return false; } - state.pos += match[0].length; + let token; + if (len % 2) { + token = state.push('text', '', 0); + token.content = ch; + len--; + } + for (let i = 0; i < len; i += 2) { + token = state.push('text', '', 0); + token.content = ch + ch; + state.delimiters.push({ + marker, + length: 0, + // disable "rule of 3" length checks meant for emphasis + token: state.tokens.length - 1, + end: -1, + open: scanned.can_open, + close: scanned.can_close + }); + } + state.pos += scanned.length; return true; -}; - - -/***/ }), - -/***/ 9636: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; -// Process ![image]( "title") - - - -var normalizeReference = (__nccwpck_require__(6498).normalizeReference); -var isSpace = (__nccwpck_require__(6498).isSpace); - - -module.exports = function image(state, silent) { - var attrs, - code, - content, - label, - labelEnd, - labelStart, - pos, - ref, - res, - title, - token, - tokens, - start, - href = '', - oldPos = state.pos, - max = state.posMax; - - if (state.src.charCodeAt(state.pos) !== 0x21/* ! */) { return false; } - if (state.src.charCodeAt(state.pos + 1) !== 0x5B/* [ */) { return false; } - - labelStart = state.pos + 2; - labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false); - - // parser failed to find ']', so it's not a valid link - if (labelEnd < 0) { return false; } - - pos = labelEnd + 1; - if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) { - // - // Inline link - // - - // [link]( "title" ) - // ^^ skipping these spaces - pos++; - for (; pos < max; pos++) { - code = state.src.charCodeAt(pos); - if (!isSpace(code) && code !== 0x0A) { break; } +} +function postProcess$1(state, delimiters) { + let token; + const loneMarkers = []; + const max = delimiters.length; + for (let i = 0; i < max; i++) { + const startDelim = delimiters[i]; + if (startDelim.marker !== 0x7E /* ~ */) { + continue; + } + if (startDelim.end === -1) { + continue; + } + const endDelim = delimiters[startDelim.end]; + token = state.tokens[startDelim.token]; + token.type = 's_open'; + token.tag = 's'; + token.nesting = 1; + token.markup = '~~'; + token.content = ''; + token = state.tokens[endDelim.token]; + token.type = 's_close'; + token.tag = 's'; + token.nesting = -1; + token.markup = '~~'; + token.content = ''; + if (state.tokens[endDelim.token - 1].type === 'text' && state.tokens[endDelim.token - 1].content === '~') { + loneMarkers.push(endDelim.token - 1); } - if (pos >= max) { return false; } + } - // [link]( "title" ) - // ^^^^^^ parsing link destination - start = pos; - res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax); - if (res.ok) { - href = state.md.normalizeLink(res.str); - if (state.md.validateLink(href)) { - pos = res.pos; - } else { - href = ''; - } + // If a marker sequence has an odd number of characters, it's splitted + // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the + // start of the sequence. + // + // So, we have to move all those markers after subsequent s_close tags. + // + while (loneMarkers.length) { + const i = loneMarkers.pop(); + let j = i + 1; + while (j < state.tokens.length && state.tokens[j].type === 's_close') { + j++; + } + j--; + if (i !== j) { + token = state.tokens[j]; + state.tokens[j] = state.tokens[i]; + state.tokens[i] = token; } + } +} - // [link]( "title" ) - // ^^ skipping these spaces - start = pos; - for (; pos < max; pos++) { - code = state.src.charCodeAt(pos); - if (!isSpace(code) && code !== 0x0A) { break; } +// Walk through delimiter list and replace text tokens with tags +// +function strikethrough_postProcess(state) { + const tokens_meta = state.tokens_meta; + const max = state.tokens_meta.length; + postProcess$1(state, state.delimiters); + for (let curr = 0; curr < max; curr++) { + if (tokens_meta[curr] && tokens_meta[curr].delimiters) { + postProcess$1(state, tokens_meta[curr].delimiters); } + } +} +var r_strikethrough = { + tokenize: strikethrough_tokenize, + postProcess: strikethrough_postProcess +}; - // [link]( "title" ) - // ^^^^^^^ parsing link title - res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax); - if (pos < max && start !== pos && res.ok) { - title = res.str; - pos = res.pos; +// Process *this* and _that_ +// - // [link]( "title" ) - // ^^ skipping these spaces - for (; pos < max; pos++) { - code = state.src.charCodeAt(pos); - if (!isSpace(code) && code !== 0x0A) { break; } - } - } else { - title = ''; +// Insert each marker as a separate text token, and add it to delimiter list +// +function emphasis_tokenize(state, silent) { + const start = state.pos; + const marker = state.src.charCodeAt(start); + if (silent) { + return false; + } + if (marker !== 0x5F /* _ */ && marker !== 0x2A /* * */) { + return false; + } + const scanned = state.scanDelims(state.pos, marker === 0x2A); + for (let i = 0; i < scanned.length; i++) { + const token = state.push('text', '', 0); + token.content = String.fromCharCode(marker); + state.delimiters.push({ + // Char code of the starting marker (number). + // + marker, + // Total length of these series of delimiters. + // + length: scanned.length, + // A position of the token this delimiter corresponds to. + // + token: state.tokens.length - 1, + // If this delimiter is matched as a valid opener, `end` will be + // equal to its position, otherwise it's `-1`. + // + end: -1, + // Boolean flags that determine if this delimiter could open or close + // an emphasis. + // + open: scanned.can_open, + close: scanned.can_close + }); + } + state.pos += scanned.length; + return true; +} +function postProcess(state, delimiters) { + const max = delimiters.length; + for (let i = max - 1; i >= 0; i--) { + const startDelim = delimiters[i]; + if (startDelim.marker !== 0x5F /* _ */ && startDelim.marker !== 0x2A /* * */) { + continue; } - if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) { - state.pos = oldPos; - return false; + // Process only opening markers + if (startDelim.end === -1) { + continue; } - pos++; - } else { + const endDelim = delimiters[startDelim.end]; + + // If the previous delimiter has the same marker and is adjacent to this one, + // merge those into one strong delimiter. // - // Link reference + // `whatever` -> `whatever` // - if (typeof state.env.references === 'undefined') { return false; } - - if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) { - start = pos + 1; - pos = state.md.helpers.parseLinkLabel(state, pos); - if (pos >= 0) { - label = state.src.slice(start, pos++); - } else { - pos = labelEnd + 1; - } - } else { - pos = labelEnd + 1; - } - - // covers label === '' and label === undefined - // (collapsed reference link and shortcut reference link respectively) - if (!label) { label = state.src.slice(labelStart, labelEnd); } - - ref = state.env.references[normalizeReference(label)]; - if (!ref) { - state.pos = oldPos; - return false; + const isStrong = i > 0 && delimiters[i - 1].end === startDelim.end + 1 && + // check that first two markers match and adjacent + delimiters[i - 1].marker === startDelim.marker && delimiters[i - 1].token === startDelim.token - 1 && + // check that last two markers are adjacent (we can safely assume they match) + delimiters[startDelim.end + 1].token === endDelim.token + 1; + const ch = String.fromCharCode(startDelim.marker); + const token_o = state.tokens[startDelim.token]; + token_o.type = isStrong ? 'strong_open' : 'em_open'; + token_o.tag = isStrong ? 'strong' : 'em'; + token_o.nesting = 1; + token_o.markup = isStrong ? ch + ch : ch; + token_o.content = ''; + const token_c = state.tokens[endDelim.token]; + token_c.type = isStrong ? 'strong_close' : 'em_close'; + token_c.tag = isStrong ? 'strong' : 'em'; + token_c.nesting = -1; + token_c.markup = isStrong ? ch + ch : ch; + token_c.content = ''; + if (isStrong) { + state.tokens[delimiters[i - 1].token].content = ''; + state.tokens[delimiters[startDelim.end + 1].token].content = ''; + i--; } - href = ref.href; - title = ref.title; } +} - // - // We found the end of the link, and know for a fact it's a valid link; - // so all that's left to do is to call tokenizer. - // - if (!silent) { - content = state.src.slice(labelStart, labelEnd); - - state.md.inline.parse( - content, - state.md, - state.env, - tokens = [] - ); - - token = state.push('image', 'img', 0); - token.attrs = attrs = [ [ 'src', href ], [ 'alt', '' ] ]; - token.children = tokens; - token.content = content; - - if (title) { - attrs.push([ 'title', title ]); +// Walk through delimiter list and replace text tokens with tags +// +function emphasis_post_process(state) { + const tokens_meta = state.tokens_meta; + const max = state.tokens_meta.length; + postProcess(state, state.delimiters); + for (let curr = 0; curr < max; curr++) { + if (tokens_meta[curr] && tokens_meta[curr].delimiters) { + postProcess(state, tokens_meta[curr].delimiters); } } - - state.pos = pos; - state.posMax = max; - return true; +} +var r_emphasis = { + tokenize: emphasis_tokenize, + postProcess: emphasis_post_process }; - -/***/ }), - -/***/ 155: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; // Process [link]( "stuff") - - -var normalizeReference = (__nccwpck_require__(6498).normalizeReference); -var isSpace = (__nccwpck_require__(6498).isSpace); - - -module.exports = function link(state, silent) { - var attrs, - code, - label, - labelEnd, - labelStart, - pos, - res, - ref, - token, - href = '', - title = '', - oldPos = state.pos, - max = state.posMax, - start = state.pos, - parseReference = true; - - if (state.src.charCodeAt(state.pos) !== 0x5B/* [ */) { return false; } - - labelStart = state.pos + 1; - labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true); +function link(state, silent) { + let code, label, res, ref; + let href = ''; + let title = ''; + let start = state.pos; + let parseReference = true; + if (state.src.charCodeAt(state.pos) !== 0x5B /* [ */) { + return false; + } + const oldPos = state.pos; + const max = state.posMax; + const labelStart = state.pos + 1; + const labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true); // parser failed to find ']', so it's not a valid link - if (labelEnd < 0) { return false; } - - pos = labelEnd + 1; - if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) { + if (labelEnd < 0) { + return false; + } + let pos = labelEnd + 1; + if (pos < max && state.src.charCodeAt(pos) === 0x28 /* ( */) { // // Inline link // @@ -14929,9 +32208,13 @@ module.exports = function link(state, silent) { pos++; for (; pos < max; pos++) { code = state.src.charCodeAt(pos); - if (!isSpace(code) && code !== 0x0A) { break; } + if (!isSpace(code) && code !== 0x0A) { + break; + } + } + if (pos >= max) { + return false; } - if (pos >= max) { return false; } // [link]( "title" ) // ^^^^^^ parsing link destination @@ -14950,7 +32233,9 @@ module.exports = function link(state, silent) { start = pos; for (; pos < max; pos++) { code = state.src.charCodeAt(pos); - if (!isSpace(code) && code !== 0x0A) { break; } + if (!isSpace(code) && code !== 0x0A) { + break; + } } // [link]( "title" ) @@ -14964,25 +32249,26 @@ module.exports = function link(state, silent) { // ^^ skipping these spaces for (; pos < max; pos++) { code = state.src.charCodeAt(pos); - if (!isSpace(code) && code !== 0x0A) { break; } + if (!isSpace(code) && code !== 0x0A) { + break; + } } } } - - if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) { + if (pos >= max || state.src.charCodeAt(pos) !== 0x29 /* ) */) { // parsing a valid shortcut link failed, fallback to reference parseReference = true; } pos++; } - if (parseReference) { // // Link reference // - if (typeof state.env.references === 'undefined') { return false; } - - if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) { + if (typeof state.env.references === 'undefined') { + return false; + } + if (pos < max && state.src.charCodeAt(pos) === 0x5B /* [ */) { start = pos + 1; pos = state.md.helpers.parseLinkLabel(state, pos); if (pos >= 0) { @@ -14996,8 +32282,9 @@ module.exports = function link(state, silent) { // covers label === '' and label === undefined // (collapsed reference link and shortcut reference link respectively) - if (!label) { label = state.src.slice(labelStart, labelEnd); } - + if (!label) { + label = state.src.slice(labelStart, labelEnd); + } ref = state.env.references[normalizeReference(label)]; if (!ref) { state.pos = oldPos; @@ -15014,819 +32301,1334 @@ module.exports = function link(state, silent) { if (!silent) { state.pos = labelStart; state.posMax = labelEnd; - - token = state.push('link_open', 'a', 1); - token.attrs = attrs = [ [ 'href', href ] ]; + const token_o = state.push('link_open', 'a', 1); + const attrs = [['href', href]]; + token_o.attrs = attrs; if (title) { - attrs.push([ 'title', title ]); + attrs.push(['title', title]); } - state.linkLevel++; state.md.inline.tokenize(state); state.linkLevel--; - - token = state.push('link_close', 'a', -1); + state.push('link_close', 'a', -1); } - state.pos = pos; state.posMax = max; return true; -}; - - -/***/ }), - -/***/ 1537: -/***/ ((module) => { - -"use strict"; -// Process links like https://example.org/ - - - - -// RFC3986: scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." ) -var SCHEME_RE = /(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$/i; - - -module.exports = function linkify(state, silent) { - var pos, max, match, proto, link, url, fullUrl, token; - - if (!state.md.options.linkify) return false; - if (state.linkLevel > 0) return false; - - pos = state.pos; - max = state.posMax; - - if (pos + 3 > max) return false; - if (state.src.charCodeAt(pos) !== 0x3A/* : */) return false; - if (state.src.charCodeAt(pos + 1) !== 0x2F/* / */) return false; - if (state.src.charCodeAt(pos + 2) !== 0x2F/* / */) return false; - - match = state.pending.match(SCHEME_RE); - if (!match) return false; - - proto = match[1]; - - link = state.md.linkify.matchAtStart(state.src.slice(pos - proto.length)); - if (!link) return false; - - url = link.url; - - // disallow '*' at the end of the link (conflicts with emphasis) - url = url.replace(/\*+$/, ''); - - fullUrl = state.md.normalizeLink(url); - if (!state.md.validateLink(fullUrl)) return false; - - if (!silent) { - state.pending = state.pending.slice(0, -proto.length); - - token = state.push('link_open', 'a', 1); - token.attrs = [ [ 'href', fullUrl ] ]; - token.markup = 'linkify'; - token.info = 'auto'; +} - token = state.push('text', '', 0); - token.content = state.md.normalizeLinkText(url); +// Process ![image]( "title") - token = state.push('link_close', 'a', -1); - token.markup = 'linkify'; - token.info = 'auto'; +function image(state, silent) { + let code, content, label, pos, ref, res, title, start; + let href = ''; + const oldPos = state.pos; + const max = state.posMax; + if (state.src.charCodeAt(state.pos) !== 0x21 /* ! */) { + return false; } + if (state.src.charCodeAt(state.pos + 1) !== 0x5B /* [ */) { + return false; + } + const labelStart = state.pos + 2; + const labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false); - state.pos += url.length - proto.length; - return true; -}; - - -/***/ }), - -/***/ 9760: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; -// Proceess '\n' - - - -var isSpace = (__nccwpck_require__(6498).isSpace); - + // parser failed to find ']', so it's not a valid link + if (labelEnd < 0) { + return false; + } + pos = labelEnd + 1; + if (pos < max && state.src.charCodeAt(pos) === 0x28 /* ( */) { + // + // Inline link + // -module.exports = function newline(state, silent) { - var pmax, max, ws, pos = state.pos; + // [link]( "title" ) + // ^^ skipping these spaces + pos++; + for (; pos < max; pos++) { + code = state.src.charCodeAt(pos); + if (!isSpace(code) && code !== 0x0A) { + break; + } + } + if (pos >= max) { + return false; + } - if (state.src.charCodeAt(pos) !== 0x0A/* \n */) { return false; } + // [link]( "title" ) + // ^^^^^^ parsing link destination + start = pos; + res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax); + if (res.ok) { + href = state.md.normalizeLink(res.str); + if (state.md.validateLink(href)) { + pos = res.pos; + } else { + href = ''; + } + } - pmax = state.pending.length - 1; - max = state.posMax; + // [link]( "title" ) + // ^^ skipping these spaces + start = pos; + for (; pos < max; pos++) { + code = state.src.charCodeAt(pos); + if (!isSpace(code) && code !== 0x0A) { + break; + } + } - // ' \n' -> hardbreak - // Lookup in pending chars is bad practice! Don't copy to other rules! - // Pending string is stored in concat mode, indexed lookups will cause - // convertion to flat mode. - if (!silent) { - if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) { - if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) { - // Find whitespaces tail of pending chars. - ws = pmax - 1; - while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 0x20) ws--; + // [link]( "title" ) + // ^^^^^^^ parsing link title + res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax); + if (pos < max && start !== pos && res.ok) { + title = res.str; + pos = res.pos; - state.pending = state.pending.slice(0, ws); - state.push('hardbreak', 'br', 0); + // [link]( "title" ) + // ^^ skipping these spaces + for (; pos < max; pos++) { + code = state.src.charCodeAt(pos); + if (!isSpace(code) && code !== 0x0A) { + break; + } + } + } else { + title = ''; + } + if (pos >= max || state.src.charCodeAt(pos) !== 0x29 /* ) */) { + state.pos = oldPos; + return false; + } + pos++; + } else { + // + // Link reference + // + if (typeof state.env.references === 'undefined') { + return false; + } + if (pos < max && state.src.charCodeAt(pos) === 0x5B /* [ */) { + start = pos + 1; + pos = state.md.helpers.parseLinkLabel(state, pos); + if (pos >= 0) { + label = state.src.slice(start, pos++); } else { - state.pending = state.pending.slice(0, -1); - state.push('softbreak', 'br', 0); + pos = labelEnd + 1; } - } else { - state.push('softbreak', 'br', 0); + pos = labelEnd + 1; } - } - pos++; - - // skip heading spaces for next line - while (pos < max && isSpace(state.src.charCodeAt(pos))) { pos++; } + // covers label === '' and label === undefined + // (collapsed reference link and shortcut reference link respectively) + if (!label) { + label = state.src.slice(labelStart, labelEnd); + } + ref = state.env.references[normalizeReference(label)]; + if (!ref) { + state.pos = oldPos; + return false; + } + href = ref.href; + title = ref.title; + } + // + // We found the end of the link, and know for a fact it's a valid link; + // so all that's left to do is to call tokenizer. + // + if (!silent) { + content = state.src.slice(labelStart, labelEnd); + const tokens = []; + state.md.inline.parse(content, state.md, state.env, tokens); + const token = state.push('image', 'img', 0); + const attrs = [['src', href], ['alt', '']]; + token.attrs = attrs; + token.children = tokens; + token.content = content; + if (title) { + attrs.push(['title', title]); + } + } state.pos = pos; + state.posMax = max; return true; -}; - - -/***/ }), - -/***/ 997: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; -// Inline parser state - - - - -var Token = __nccwpck_require__(4742); -var isWhiteSpace = (__nccwpck_require__(6498).isWhiteSpace); -var isPunctChar = (__nccwpck_require__(6498).isPunctChar); -var isMdAsciiPunct = (__nccwpck_require__(6498).isMdAsciiPunct); - - -function StateInline(src, md, env, outTokens) { - this.src = src; - this.env = env; - this.md = md; - this.tokens = outTokens; - this.tokens_meta = Array(outTokens.length); - - this.pos = 0; - this.posMax = this.src.length; - this.level = 0; - this.pending = ''; - this.pendingLevel = 0; - - // Stores { start: end } pairs. Useful for backtrack - // optimization of pairs parse (emphasis, strikes). - this.cache = {}; - - // List of emphasis-like delimiters for current tag - this.delimiters = []; - - // Stack of delimiter lists for upper level tags - this._prev_delimiters = []; - - // backtick length => last seen position - this.backticks = {}; - this.backticksScanned = false; - - // Counter used to disable inline linkify-it execution - // inside and markdown links - this.linkLevel = 0; } +// Process autolinks '' -// Flush pending text -// -StateInline.prototype.pushPending = function () { - var token = new Token('text', '', 0); - token.content = this.pending; - token.level = this.pendingLevel; - this.tokens.push(token); - this.pending = ''; - return token; -}; - - -// Push new token to "stream". -// If pending text exists - flush it as text token -// -StateInline.prototype.push = function (type, tag, nesting) { - if (this.pending) { - this.pushPending(); - } - - var token = new Token(type, tag, nesting); - var token_meta = null; - - if (nesting < 0) { - // closing tag - this.level--; - this.delimiters = this._prev_delimiters.pop(); +/* eslint max-len:0 */ +const EMAIL_RE = /^([a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/; +/* eslint-disable-next-line no-control-regex */ +const AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.-]{1,31}):([^<>\x00-\x20]*)$/; +function autolink(state, silent) { + let pos = state.pos; + if (state.src.charCodeAt(pos) !== 0x3C /* < */) { + return false; } - - token.level = this.level; - - if (nesting > 0) { - // opening tag - this.level++; - this._prev_delimiters.push(this.delimiters); - this.delimiters = []; - token_meta = { delimiters: this.delimiters }; + const start = state.pos; + const max = state.posMax; + for (;;) { + if (++pos >= max) return false; + const ch = state.src.charCodeAt(pos); + if (ch === 0x3C /* < */) return false; + if (ch === 0x3E /* > */) break; } - - this.pendingLevel = this.level; - this.tokens.push(token); - this.tokens_meta.push(token_meta); - return token; -}; - - -// Scan a sequence of emphasis-like markers, and determine whether -// it can start an emphasis sequence or end an emphasis sequence. -// -// - start - position to scan from (it should point at a valid marker); -// - canSplitWord - determine if these markers can be found inside a word -// -StateInline.prototype.scanDelims = function (start, canSplitWord) { - var pos = start, lastChar, nextChar, count, can_open, can_close, - isLastWhiteSpace, isLastPunctChar, - isNextWhiteSpace, isNextPunctChar, - left_flanking = true, - right_flanking = true, - max = this.posMax, - marker = this.src.charCodeAt(start); - - // treat beginning of the line as a whitespace - lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20; - - while (pos < max && this.src.charCodeAt(pos) === marker) { pos++; } - - count = pos - start; - - // treat end of the line as a whitespace - nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20; - - isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar)); - isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar)); - - isLastWhiteSpace = isWhiteSpace(lastChar); - isNextWhiteSpace = isWhiteSpace(nextChar); - - if (isNextWhiteSpace) { - left_flanking = false; - } else if (isNextPunctChar) { - if (!(isLastWhiteSpace || isLastPunctChar)) { - left_flanking = false; + const url = state.src.slice(start + 1, pos); + if (AUTOLINK_RE.test(url)) { + const fullUrl = state.md.normalizeLink(url); + if (!state.md.validateLink(fullUrl)) { + return false; } - } - - if (isLastWhiteSpace) { - right_flanking = false; - } else if (isLastPunctChar) { - if (!(isNextWhiteSpace || isNextPunctChar)) { - right_flanking = false; + if (!silent) { + const token_o = state.push('link_open', 'a', 1); + token_o.attrs = [['href', fullUrl]]; + token_o.markup = 'autolink'; + token_o.info = 'auto'; + const token_t = state.push('text', '', 0); + token_t.content = state.md.normalizeLinkText(url); + const token_c = state.push('link_close', 'a', -1); + token_c.markup = 'autolink'; + token_c.info = 'auto'; } + state.pos += url.length + 2; + return true; } - - if (!canSplitWord) { - can_open = left_flanking && (!right_flanking || isLastPunctChar); - can_close = right_flanking && (!left_flanking || isNextPunctChar); - } else { - can_open = left_flanking; - can_close = right_flanking; + if (EMAIL_RE.test(url)) { + const fullUrl = state.md.normalizeLink('mailto:' + url); + if (!state.md.validateLink(fullUrl)) { + return false; + } + if (!silent) { + const token_o = state.push('link_open', 'a', 1); + token_o.attrs = [['href', fullUrl]]; + token_o.markup = 'autolink'; + token_o.info = 'auto'; + const token_t = state.push('text', '', 0); + token_t.content = state.md.normalizeLinkText(url); + const token_c = state.push('link_close', 'a', -1); + token_c.markup = 'autolink'; + token_c.info = 'auto'; + } + state.pos += url.length + 2; + return true; } + return false; +} - return { - can_open: can_open, - can_close: can_close, - length: count - }; -}; - - -// re-export Token class to use in block rules -StateInline.prototype.Token = Token; - - -module.exports = StateInline; - - -/***/ }), - -/***/ 2156: -/***/ ((module) => { - -"use strict"; -// ~~strike through~~ -// - - - -// Insert each marker as a separate text token, and add it to delimiter list -// -module.exports.w = function strikethrough(state, silent) { - var i, scanned, token, len, ch, - start = state.pos, - marker = state.src.charCodeAt(start); - - if (silent) { return false; } - - if (marker !== 0x7E/* ~ */) { return false; } +// Process html tags - scanned = state.scanDelims(state.pos, true); - len = scanned.length; - ch = String.fromCharCode(marker); +function isLinkOpen(str) { + return /^\s]/i.test(str); +} +function isLinkClose(str) { + return /^<\/a\s*>/i.test(str); +} +function isLetter(ch) { + /* eslint no-bitwise:0 */ + const lc = ch | 0x20; // to lower case + return lc >= 0x61 /* a */ && lc <= 0x7a /* z */; +} +function html_inline(state, silent) { + if (!state.md.options.html) { + return false; + } - if (len < 2) { return false; } + // Check start + const max = state.posMax; + const pos = state.pos; + if (state.src.charCodeAt(pos) !== 0x3C /* < */ || pos + 2 >= max) { + return false; + } - if (len % 2) { - token = state.push('text', '', 0); - token.content = ch; - len--; + // Quick fail on second char + const ch = state.src.charCodeAt(pos + 1); + if (ch !== 0x21 /* ! */ && ch !== 0x3F /* ? */ && ch !== 0x2F /* / */ && !isLetter(ch)) { + return false; + } + const match = state.src.slice(pos).match(HTML_TAG_RE); + if (!match) { + return false; } + if (!silent) { + const token = state.push('html_inline', '', 0); + token.content = match[0]; + if (isLinkOpen(token.content)) state.linkLevel++; + if (isLinkClose(token.content)) state.linkLevel--; + } + state.pos += match[0].length; + return true; +} - for (i = 0; i < len; i += 2) { - token = state.push('text', '', 0); - token.content = ch + ch; +// Process html entity - {, ¯, ", ... - state.delimiters.push({ - marker: marker, - length: 0, // disable "rule of 3" length checks meant for emphasis - token: state.tokens.length - 1, - end: -1, - open: scanned.can_open, - close: scanned.can_close - }); +const DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i; +const NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i; +function entity(state, silent) { + const pos = state.pos; + const max = state.posMax; + if (state.src.charCodeAt(pos) !== 0x26 /* & */) return false; + if (pos + 1 >= max) return false; + const ch = state.src.charCodeAt(pos + 1); + if (ch === 0x23 /* # */) { + const match = state.src.slice(pos).match(DIGITAL_RE); + if (match) { + if (!silent) { + const code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10); + const token = state.push('text_special', '', 0); + token.content = isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD); + token.markup = match[0]; + token.info = 'entity'; + } + state.pos += match[0].length; + return true; + } + } else { + const match = state.src.slice(pos).match(NAMED_RE); + if (match) { + const decoded = entities.decodeHTML(match[0]); + if (decoded !== match[0]) { + if (!silent) { + const token = state.push('text_special', '', 0); + token.content = decoded; + token.markup = match[0]; + token.info = 'entity'; + } + state.pos += match[0].length; + return true; + } + } } + return false; +} - state.pos += scanned.length; +// For each opening emphasis-like marker find a matching closing one +// - return true; -}; +function processDelimiters(delimiters) { + const openersBottom = {}; + const max = delimiters.length; + if (!max) return; + // headerIdx is the first delimiter of the current (where closer is) delimiter run + let headerIdx = 0; + let lastTokenIdx = -2; // needs any value lower than -1 + const jumps = []; + for (let closerIdx = 0; closerIdx < max; closerIdx++) { + const closer = delimiters[closerIdx]; + jumps.push(0); -function postProcess(state, delimiters) { - var i, j, - startDelim, - endDelim, - token, - loneMarkers = [], - max = delimiters.length; + // markers belong to same delimiter run if: + // - they have adjacent tokens + // - AND markers are the same + // + if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) { + headerIdx = closerIdx; + } + lastTokenIdx = closer.token; - for (i = 0; i < max; i++) { - startDelim = delimiters[i]; + // Length is only used for emphasis-specific "rule of 3", + // if it's not defined (in strikethrough or 3rd party plugins), + // we can default it to 0 to disable those checks. + // + closer.length = closer.length || 0; + if (!closer.close) continue; - if (startDelim.marker !== 0x7E/* ~ */) { - continue; + // Previously calculated lower bounds (previous fails) + // for each marker, each delimiter length modulo 3, + // and for whether this closer can be an opener; + // https://github.com/commonmark/cmark/commit/34250e12ccebdc6372b8b49c44fab57c72443460 + /* eslint-disable-next-line no-prototype-builtins */ + if (!openersBottom.hasOwnProperty(closer.marker)) { + openersBottom[closer.marker] = [-1, -1, -1, -1, -1, -1]; } + const minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + closer.length % 3]; + let openerIdx = headerIdx - jumps[headerIdx] - 1; + let newMinOpenerIdx = openerIdx; + for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) { + const opener = delimiters[openerIdx]; + if (opener.marker !== closer.marker) continue; + if (opener.open && opener.end < 0) { + let isOddMatch = false; - if (startDelim.end === -1) { - continue; + // from spec: + // + // If one of the delimiters can both open and close emphasis, then the + // sum of the lengths of the delimiter runs containing the opening and + // closing delimiters must not be a multiple of 3 unless both lengths + // are multiples of 3. + // + if (opener.close || closer.open) { + if ((opener.length + closer.length) % 3 === 0) { + if (opener.length % 3 !== 0 || closer.length % 3 !== 0) { + isOddMatch = true; + } + } + } + if (!isOddMatch) { + // If previous delimiter cannot be an opener, we can safely skip + // the entire sequence in future checks. This is required to make + // sure algorithm has linear complexity (see *_*_*_*_*_... case). + // + const lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open ? jumps[openerIdx - 1] + 1 : 0; + jumps[closerIdx] = closerIdx - openerIdx + lastJump; + jumps[openerIdx] = lastJump; + closer.open = false; + opener.end = closerIdx; + opener.close = false; + newMinOpenerIdx = -1; + // treat next token as start of run, + // it optimizes skips in **<...>**a**<...>** pathological case + lastTokenIdx = -2; + break; + } + } } - - endDelim = delimiters[startDelim.end]; - - token = state.tokens[startDelim.token]; - token.type = 's_open'; - token.tag = 's'; - token.nesting = 1; - token.markup = '~~'; - token.content = ''; - - token = state.tokens[endDelim.token]; - token.type = 's_close'; - token.tag = 's'; - token.nesting = -1; - token.markup = '~~'; - token.content = ''; - - if (state.tokens[endDelim.token - 1].type === 'text' && - state.tokens[endDelim.token - 1].content === '~') { - - loneMarkers.push(endDelim.token - 1); + if (newMinOpenerIdx !== -1) { + // If match for this delimiter run failed, we want to set lower bound for + // future lookups. This is required to make sure algorithm has linear + // complexity. + // + // See details here: + // https://github.com/commonmark/cmark/issues/178#issuecomment-270417442 + // + openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length || 0) % 3] = newMinOpenerIdx; } } - - // If a marker sequence has an odd number of characters, it's splitted - // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the - // start of the sequence. - // - // So, we have to move all those markers after subsequent s_close tags. - // - while (loneMarkers.length) { - i = loneMarkers.pop(); - j = i + 1; - - while (j < state.tokens.length && state.tokens[j].type === 's_close') { - j++; - } - - j--; - - if (i !== j) { - token = state.tokens[j]; - state.tokens[j] = state.tokens[i]; - state.tokens[i] = token; +} +function link_pairs(state) { + const tokens_meta = state.tokens_meta; + const max = state.tokens_meta.length; + processDelimiters(state.delimiters); + for (let curr = 0; curr < max; curr++) { + if (tokens_meta[curr] && tokens_meta[curr].delimiters) { + processDelimiters(tokens_meta[curr].delimiters); } } } - -// Walk through delimiter list and replace text tokens with tags +// Clean up tokens after emphasis and strikethrough postprocessing: +// merge adjacent text nodes into one and re-calculate all token levels +// +// This is necessary because initially emphasis delimiter markers (*, _, ~) +// are treated as their own separate text tokens. Then emphasis rule either +// leaves them as text (needed to merge with adjacent text) or turns them +// into opening/closing tags (which messes up levels inside). // -module.exports.g = function strikethrough(state) { - var curr, - tokens_meta = state.tokens_meta, - max = state.tokens_meta.length; - postProcess(state, state.delimiters); +function fragments_join(state) { + let curr, last; + let level = 0; + const tokens = state.tokens; + const max = state.tokens.length; + for (curr = last = 0; curr < max; curr++) { + // re-calculate levels after emphasis/strikethrough turns some text nodes + // into opening/closing tags + if (tokens[curr].nesting < 0) level--; // closing tag + tokens[curr].level = level; + if (tokens[curr].nesting > 0) level++; // opening tag - for (curr = 0; curr < max; curr++) { - if (tokens_meta[curr] && tokens_meta[curr].delimiters) { - postProcess(state, tokens_meta[curr].delimiters); + if (tokens[curr].type === 'text' && curr + 1 < max && tokens[curr + 1].type === 'text') { + // collapse two adjacent text nodes + tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content; + } else { + if (curr !== last) { + tokens[last] = tokens[curr]; + } + last++; } } -}; - - -/***/ }), - -/***/ 4391: -/***/ ((module) => { + if (curr !== last) { + tokens.length = last; + } +} -"use strict"; -// Skip text characters for text token, place those to pending buffer -// and increment current pos +/** internal + * class ParserInline + * + * Tokenizes paragraph content. + **/ +// Parser rules +const _rules = [['text', text], ['linkify', linkify], ['newline', newline], ['escape', escape], ['backticks', backtick], ['strikethrough', r_strikethrough.tokenize], ['emphasis', r_emphasis.tokenize], ['link', link], ['image', image], ['autolink', autolink], ['html_inline', html_inline], ['entity', entity]]; -// Rule to skip pure text -// '{}$%@~+=:' reserved for extentions +// `rule2` ruleset was created specifically for emphasis/strikethrough +// post-processing and may be changed in the future. +// +// Don't use this for anything except pairs (plugins working with `balance_pairs`). +// +const _rules2 = [['balance_pairs', link_pairs], ['strikethrough', r_strikethrough.postProcess], ['emphasis', r_emphasis.postProcess], +// rules for pairs separate '**' into its own text tokens, which may be left unused, +// rule below merges unused segments back with the rest of the text +['fragments_join', fragments_join]]; -// !, ", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \, ], ^, _, `, {, |, }, or ~ +/** + * new ParserInline() + **/ +function ParserInline() { + /** + * ParserInline#ruler -> Ruler + * + * [[Ruler]] instance. Keep configuration of inline rules. + **/ + this.ruler = new Ruler(); + for (let i = 0; i < _rules.length; i++) { + this.ruler.push(_rules[i][0], _rules[i][1]); + } -// !!!! Don't confuse with "Markdown ASCII Punctuation" chars -// http://spec.commonmark.org/0.15/#ascii-punctuation-character -function isTerminatorChar(ch) { - switch (ch) { - case 0x0A/* \n */: - case 0x21/* ! */: - case 0x23/* # */: - case 0x24/* $ */: - case 0x25/* % */: - case 0x26/* & */: - case 0x2A/* * */: - case 0x2B/* + */: - case 0x2D/* - */: - case 0x3A/* : */: - case 0x3C/* < */: - case 0x3D/* = */: - case 0x3E/* > */: - case 0x40/* @ */: - case 0x5B/* [ */: - case 0x5C/* \ */: - case 0x5D/* ] */: - case 0x5E/* ^ */: - case 0x5F/* _ */: - case 0x60/* ` */: - case 0x7B/* { */: - case 0x7D/* } */: - case 0x7E/* ~ */: - return true; - default: - return false; + /** + * ParserInline#ruler2 -> Ruler + * + * [[Ruler]] instance. Second ruler used for post-processing + * (e.g. in emphasis-like rules). + **/ + this.ruler2 = new Ruler(); + for (let i = 0; i < _rules2.length; i++) { + this.ruler2.push(_rules2[i][0], _rules2[i][1]); } } -module.exports = function text(state, silent) { - var pos = state.pos; - - while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) { - pos++; +// Skip single token by running all rules in validation mode; +// returns `true` if any rule reported success +// +ParserInline.prototype.skipToken = function (state) { + const pos = state.pos; + const rules = this.ruler.getRules(''); + const len = rules.length; + const maxNesting = state.md.options.maxNesting; + const cache = state.cache; + if (typeof cache[pos] !== 'undefined') { + state.pos = cache[pos]; + return; } - - if (pos === state.pos) { return false; } - - if (!silent) { state.pending += state.src.slice(state.pos, pos); } - - state.pos = pos; - - return true; + let ok = false; + if (state.level < maxNesting) { + for (let i = 0; i < len; i++) { + // Increment state.level and decrement it later to limit recursion. + // It's harmless to do here, because no tokens are created. But ideally, + // we'd need a separate private state variable for this purpose. + // + state.level++; + ok = rules[i](state, true); + state.level--; + if (ok) { + if (pos >= state.pos) { + throw new Error("inline rule didn't increment state.pos"); + } + break; + } + } + } else { + // Too much nesting, just skip until the end of the paragraph. + // + // NOTE: this will cause links to behave incorrectly in the following case, + // when an amount of `[` is exactly equal to `maxNesting + 1`: + // + // [[[[[[[[[[[[[[[[[[[[[foo]() + // + // TODO: remove this workaround when CM standard will allow nested links + // (we can replace it by preventing links from being parsed in + // validation mode) + // + state.pos = state.posMax; + } + if (!ok) { + state.pos++; + } + cache[pos] = state.pos; }; -// Alternative implementation, for memory. +// Generate tokens for input range // -// It costs 10% of performance, but allows extend terminators list, if place it -// to `ParcerInline` property. Probably, will switch to it sometime, such -// flexibility required. +ParserInline.prototype.tokenize = function (state) { + const rules = this.ruler.getRules(''); + const len = rules.length; + const end = state.posMax; + const maxNesting = state.md.options.maxNesting; + while (state.pos < end) { + // Try all possible rules. + // On success, rule should: + // + // - update `state.pos` + // - update `state.tokens` + // - return true + const prevPos = state.pos; + let ok = false; + if (state.level < maxNesting) { + for (let i = 0; i < len; i++) { + ok = rules[i](state, false); + if (ok) { + if (prevPos >= state.pos) { + throw new Error("inline rule didn't increment state.pos"); + } + break; + } + } + } + if (ok) { + if (state.pos >= end) { + break; + } + continue; + } + state.pending += state.src[state.pos++]; + } + if (state.pending) { + state.pushPending(); + } +}; -/* -var TERMINATOR_RE = /[\n!#$%&*+\-:<=>@[\\\]^_`{}~]/; +/** + * ParserInline.parse(str, md, env, outTokens) + * + * Process input string and push inline tokens into `outTokens` + **/ +ParserInline.prototype.parse = function (str, md, env, outTokens) { + const state = new this.State(str, md, env, outTokens); + this.tokenize(state); + const rules = this.ruler2.getRules(''); + const len = rules.length; + for (let i = 0; i < len; i++) { + rules[i](state); + } +}; +ParserInline.prototype.State = StateInline; -module.exports = function text(state, silent) { - var pos = state.pos, - idx = state.src.slice(pos).search(TERMINATOR_RE); +// markdown-it default options - // first char is terminator -> empty text - if (idx === 0) { return false; } +var cfg_default = { + options: { + // Enable HTML tags in source + html: false, + // Use '/' to close single tags (
    ) + xhtmlOut: false, + // Convert '\n' in paragraphs into
    + breaks: false, + // CSS language prefix for fenced blocks + langPrefix: 'language-', + // autoconvert URL-like texts to links + linkify: false, + // Enable some language-neutral replacements + quotes beautification + typographer: false, + // Double + single quotes replacement pairs, when typographer enabled, + // and smartquotes on. Could be either a String or an Array. + // + // For example, you can use '«»„“' for Russian, '„“‚‘' for German, + // and ['«\xA0', '\xA0»', '‹\xA0', '\xA0›'] for French (including nbsp). + quotes: '\u201c\u201d\u2018\u2019', + /* “”‘’ */ - // no terminator -> text till end of string - if (idx < 0) { - if (!silent) { state.pending += state.src.slice(pos); } - state.pos = state.src.length; - return true; + // Highlighter function. Should return escaped HTML, + // or '' if the source string is not changed and should be escaped externaly. + // If result starts with ) + xhtmlOut: false, + // Convert '\n' in paragraphs into
    + breaks: false, + // CSS language prefix for fenced blocks + langPrefix: 'language-', + // autoconvert URL-like texts to links + linkify: false, + // Enable some language-neutral replacements + quotes beautification + typographer: false, + // Double + single quotes replacement pairs, when typographer enabled, + // and smartquotes on. Could be either a String or an Array. + // + // For example, you can use '«»„“' for Russian, '„“‚‘' for German, + // and ['«\xA0', '\xA0»', '‹\xA0', '\xA0›'] for French (including nbsp). + quotes: '\u201c\u201d\u2018\u2019', + /* “”‘’ */ - return true; -};*/ + // Highlighter function. Should return escaped HTML, + // or '' if the source string is not changed and should be escaped externaly. + // If result starts with ) + xhtmlOut: true, + // Convert '\n' in paragraphs into
    + breaks: false, + // CSS language prefix for fenced blocks + langPrefix: 'language-', + // autoconvert URL-like texts to links + linkify: false, + // Enable some language-neutral replacements + quotes beautification + typographer: false, + // Double + single quotes replacement pairs, when typographer enabled, + // and smartquotes on. Could be either a String or an Array. + // + // For example, you can use '«»„“' for Russian, '„“‚‘' for German, + // and ['«\xA0', '\xA0»', '‹\xA0', '\xA0›'] for French (including nbsp). + quotes: '\u201c\u201d\u2018\u2019', + /* “”‘’ */ -/***/ 4742: -/***/ ((module) => { + // Highlighter function. Should return escaped HTML, + // or '' if the source string is not changed and should be escaped externaly. + // If result starts with = 0) { + try { + parsed.hostname = punycode.toASCII(parsed.hostname); + } catch (er) {/**/} + } + } + return mdurl__namespace.encode(mdurl__namespace.format(parsed)); +} +function normalizeLinkText(url) { + const parsed = mdurl__namespace.parse(url, true); + if (parsed.hostname) { + // Encode hostnames in urls like: + // `http://host/`, `https://host/`, `mailto:user@host`, `//host/` + // + // We don't encode unknown schemas, because it's likely that we encode + // something we shouldn't (e.g. `skype:name` treated as `skype:host`) + // + if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) { + try { + parsed.hostname = punycode.toUnicode(parsed.hostname); + } catch (er) {/**/} + } + } + // add '%' to exclude list because of https://github.com/markdown-it/markdown-it/issues/720 + return mdurl__namespace.decode(mdurl__namespace.format(parsed), mdurl__namespace.decode.defaultChars + '%'); +} /** - * class Token + * class MarkdownIt + * + * Main parser/renderer class. + * + * ##### Usage + * + * ```javascript + * // node.js, "classic" way: + * var MarkdownIt = require('markdown-it'), + * md = new MarkdownIt(); + * var result = md.render('# markdown-it rulezz!'); + * + * // node.js, the same, but with sugar: + * var md = require('markdown-it')(); + * var result = md.render('# markdown-it rulezz!'); + * + * // browser without AMD, added to "window" on script load + * // Note, there are no dash. + * var md = window.markdownit(); + * var result = md.render('# markdown-it rulezz!'); + * ``` + * + * Single line rendering, without paragraph wrap: + * + * ```javascript + * var md = require('markdown-it')(); + * var result = md.renderInline('__markdown-it__ rulezz!'); + * ``` **/ /** - * new Token(type, tag, nesting) + * new MarkdownIt([presetName, options]) + * - presetName (String): optional, `commonmark` / `zero` + * - options (Object) + * + * Creates parser instanse with given config. Can be called without `new`. + * + * ##### presetName + * + * MarkdownIt provides named presets as a convenience to quickly + * enable/disable active syntax rules and options for common use cases. + * + * - ["commonmark"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/commonmark.mjs) - + * configures parser to strict [CommonMark](http://commonmark.org/) mode. + * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.mjs) - + * similar to GFM, used when no preset name given. Enables all available rules, + * but still without html, typographer & autolinker. + * - ["zero"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/zero.mjs) - + * all rules disabled. Useful to quickly setup your config via `.enable()`. + * For example, when you need only `bold` and `italic` markup and nothing else. + * + * ##### options: + * + * - __html__ - `false`. Set `true` to enable HTML tags in source. Be careful! + * That's not safe! You may need external sanitizer to protect output from XSS. + * It's better to extend features via plugins, instead of enabling HTML. + * - __xhtmlOut__ - `false`. Set `true` to add '/' when closing single tags + * (`
    `). This is needed only for full CommonMark compatibility. In real + * world you will need HTML output. + * - __breaks__ - `false`. Set `true` to convert `\n` in paragraphs into `
    `. + * - __langPrefix__ - `language-`. CSS language class prefix for fenced blocks. + * Can be useful for external highlighters. + * - __linkify__ - `false`. Set `true` to autoconvert URL-like text to links. + * - __typographer__ - `false`. Set `true` to enable [some language-neutral + * replacement](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.mjs) + + * quotes beautification (smartquotes). + * - __quotes__ - `“”‘’`, String or Array. Double + single quotes replacement + * pairs, when typographer enabled and smartquotes on. For example, you can + * use `'«»„“'` for Russian, `'„“‚‘'` for German, and + * `['«\xA0', '\xA0»', '‹\xA0', '\xA0›']` for French (including nbsp). + * - __highlight__ - `null`. Highlighter function for fenced code blocks. + * Highlighter `function (str, lang)` should return escaped HTML. It can also + * return empty string if the source was not changed and should be escaped + * externaly. If result starts with ` or ``): + * + * ```javascript + * var hljs = require('highlight.js') // https://highlightjs.org/ + * + * // Actual default values + * var md = require('markdown-it')({ + * highlight: function (str, lang) { + * if (lang && hljs.getLanguage(lang)) { + * try { + * return '
    ' +
    + *                hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +
    + *                '
    '; + * } catch (__) {} + * } + * + * return '
    ' + md.utils.escapeHtml(str) + '
    '; + * } + * }); + * ``` * - * Create new token and fill passed properties. **/ -function Token(type, tag, nesting) { - /** - * Token#type -> String - * - * Type of the token (string, e.g. "paragraph_open") - **/ - this.type = type; +function MarkdownIt(presetName, options) { + if (!(this instanceof MarkdownIt)) { + return new MarkdownIt(presetName, options); + } + if (!options) { + if (!isString(presetName)) { + options = presetName || {}; + presetName = 'default'; + } + } /** - * Token#tag -> String + * MarkdownIt#inline -> ParserInline * - * html tag name, e.g. "p" + * Instance of [[ParserInline]]. You may need it to add new rules when + * writing plugins. For simple rules control use [[MarkdownIt.disable]] and + * [[MarkdownIt.enable]]. **/ - this.tag = tag; + this.inline = new ParserInline(); /** - * Token#attrs -> Array + * MarkdownIt#block -> ParserBlock * - * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]` + * Instance of [[ParserBlock]]. You may need it to add new rules when + * writing plugins. For simple rules control use [[MarkdownIt.disable]] and + * [[MarkdownIt.enable]]. **/ - this.attrs = null; + this.block = new ParserBlock(); /** - * Token#map -> Array + * MarkdownIt#core -> Core * - * Source map info. Format: `[ line_begin, line_end ]` + * Instance of [[Core]] chain executor. You may need it to add new rules when + * writing plugins. For simple rules control use [[MarkdownIt.disable]] and + * [[MarkdownIt.enable]]. **/ - this.map = null; + this.core = new Core(); /** - * Token#nesting -> Number + * MarkdownIt#renderer -> Renderer * - * Level change (number in {-1, 0, 1} set), where: + * Instance of [[Renderer]]. Use it to modify output look. Or to add rendering + * rules for new token types, generated by plugins. * - * - `1` means the tag is opening - * - `0` means the tag is self-closing - * - `-1` means the tag is closing - **/ - this.nesting = nesting; - - /** - * Token#level -> Number + * ##### Example * - * nesting level, the same as `state.level` - **/ - this.level = 0; - - /** - * Token#children -> Array + * ```javascript + * var md = require('markdown-it')(); * - * An array of child nodes (inline and img tokens) + * function myToken(tokens, idx, options, env, self) { + * //... + * return result; + * }; + * + * md.renderer.rules['my_token'] = myToken + * ``` + * + * See [[Renderer]] docs and [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.mjs). **/ - this.children = null; + this.renderer = new Renderer(); /** - * Token#content -> String + * MarkdownIt#linkify -> LinkifyIt * - * In a case of self-closing tag (code, html, fence, etc.), - * it has contents of this tag. + * [linkify-it](https://github.com/markdown-it/linkify-it) instance. + * Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/linkify.mjs) + * rule. **/ - this.content = ''; + this.linkify = new LinkifyIt(); /** - * Token#markup -> String + * MarkdownIt#validateLink(url) -> Boolean * - * '*' or '_' for emphasis, fence string for fence, etc. + * Link validation function. CommonMark allows too much in links. By default + * we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas + * except some embedded image types. + * + * You can change this behaviour: + * + * ```javascript + * var md = require('markdown-it')(); + * // enable everything + * md.validateLink = function () { return true; } + * ``` **/ - this.markup = ''; + this.validateLink = validateLink; /** - * Token#info -> String - * - * Additional information: + * MarkdownIt#normalizeLink(url) -> String * - * - Info string for "fence" tokens - * - The value "auto" for autolink "link_open" and "link_close" tokens - * - The string value of the item marker for ordered-list "list_item_open" tokens + * Function used to encode link url to a machine-readable format, + * which includes url-encoding, punycode, etc. **/ - this.info = ''; + this.normalizeLink = normalizeLink; /** - * Token#meta -> Object + * MarkdownIt#normalizeLinkText(url) -> String * - * A place for plugins to store an arbitrary data + * Function used to decode link url to a human-readable format` **/ - this.meta = null; + this.normalizeLinkText = normalizeLinkText; + + // Expose utils & helpers for easy acces from plugins /** - * Token#block -> Boolean + * MarkdownIt#utils -> utils * - * True for block-level tokens, false for inline tokens. - * Used in renderer to calculate line breaks + * Assorted utility functions, useful to write plugins. See details + * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/common/utils.mjs). **/ - this.block = false; + this.utils = utils; /** - * Token#hidden -> Boolean + * MarkdownIt#helpers -> helpers * - * If it's true, ignore this element when rendering. Used for tight lists - * to hide paragraphs. + * Link components parser functions, useful to write plugins. See details + * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/helpers). **/ - this.hidden = false; + this.helpers = assign({}, helpers); + this.options = {}; + this.configure(presetName); + if (options) { + this.set(options); + } } - -/** - * Token.attrIndex(name) -> Number +/** chainable + * MarkdownIt.set(options) * - * Search attribute index by name. + * Set parser options (in the same format as in constructor). Probably, you + * will never need it, but you can change options after constructor call. + * + * ##### Example + * + * ```javascript + * var md = require('markdown-it')() + * .set({ html: true, breaks: true }) + * .set({ typographer, true }); + * ``` + * + * __Note:__ To achieve the best possible performance, don't modify a + * `markdown-it` instance options on the fly. If you need multiple configurations + * it's best to create multiple instances and initialize each with separate + * config. **/ -Token.prototype.attrIndex = function attrIndex(name) { - var attrs, i, len; - - if (!this.attrs) { return -1; } - - attrs = this.attrs; +MarkdownIt.prototype.set = function (options) { + assign(this.options, options); + return this; +}; - for (i = 0, len = attrs.length; i < len; i++) { - if (attrs[i][0] === name) { return i; } +/** chainable, internal + * MarkdownIt.configure(presets) + * + * Batch load of all options and compenent settings. This is internal method, + * and you probably will not need it. But if you will - see available presets + * and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/lib/presets) + * + * We strongly recommend to use presets instead of direct config loads. That + * will give better compatibility with next versions. + **/ +MarkdownIt.prototype.configure = function (presets) { + const self = this; + if (isString(presets)) { + const presetName = presets; + presets = config[presetName]; + if (!presets) { + throw new Error('Wrong `markdown-it` preset "' + presetName + '", check name'); + } } - return -1; + if (!presets) { + throw new Error('Wrong `markdown-it` preset, can\'t be empty'); + } + if (presets.options) { + self.set(presets.options); + } + if (presets.components) { + Object.keys(presets.components).forEach(function (name) { + if (presets.components[name].rules) { + self[name].ruler.enableOnly(presets.components[name].rules); + } + if (presets.components[name].rules2) { + self[name].ruler2.enableOnly(presets.components[name].rules2); + } + }); + } + return this; }; - -/** - * Token.attrPush(attrData) +/** chainable + * MarkdownIt.enable(list, ignoreInvalid) + * - list (String|Array): rule name or list of rule names to enable + * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found. * - * Add `[ name, value ]` attribute to list. Init attrs if necessary + * Enable list or rules. It will automatically find appropriate components, + * containing rules with given names. If rule not found, and `ignoreInvalid` + * not set - throws exception. + * + * ##### Example + * + * ```javascript + * var md = require('markdown-it')() + * .enable(['sub', 'sup']) + * .disable('smartquotes'); + * ``` **/ -Token.prototype.attrPush = function attrPush(attrData) { - if (this.attrs) { - this.attrs.push(attrData); - } else { - this.attrs = [ attrData ]; +MarkdownIt.prototype.enable = function (list, ignoreInvalid) { + let result = []; + if (!Array.isArray(list)) { + list = [list]; } + ['core', 'block', 'inline'].forEach(function (chain) { + result = result.concat(this[chain].ruler.enable(list, true)); + }, this); + result = result.concat(this.inline.ruler2.enable(list, true)); + const missed = list.filter(function (name) { + return result.indexOf(name) < 0; + }); + if (missed.length && !ignoreInvalid) { + throw new Error('MarkdownIt. Failed to enable unknown rule(s): ' + missed); + } + return this; }; - -/** - * Token.attrSet(name, value) +/** chainable + * MarkdownIt.disable(list, ignoreInvalid) + * - list (String|Array): rule name or list of rule names to disable. + * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found. * - * Set `name` attribute to `value`. Override old value if exists. + * The same as [[MarkdownIt.enable]], but turn specified rules off. **/ -Token.prototype.attrSet = function attrSet(name, value) { - var idx = this.attrIndex(name), - attrData = [ name, value ]; - - if (idx < 0) { - this.attrPush(attrData); - } else { - this.attrs[idx] = attrData; +MarkdownIt.prototype.disable = function (list, ignoreInvalid) { + let result = []; + if (!Array.isArray(list)) { + list = [list]; } + ['core', 'block', 'inline'].forEach(function (chain) { + result = result.concat(this[chain].ruler.disable(list, true)); + }, this); + result = result.concat(this.inline.ruler2.disable(list, true)); + const missed = list.filter(function (name) { + return result.indexOf(name) < 0; + }); + if (missed.length && !ignoreInvalid) { + throw new Error('MarkdownIt. Failed to disable unknown rule(s): ' + missed); + } + return this; }; +/** chainable + * MarkdownIt.use(plugin, params) + * + * Load specified plugin with given params into current parser instance. + * It's just a sugar to call `plugin(md, params)` with curring. + * + * ##### Example + * + * ```javascript + * var iterator = require('markdown-it-for-inline'); + * var md = require('markdown-it')() + * .use(iterator, 'foo_replace', 'text', function (tokens, idx) { + * tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar'); + * }); + * ``` + **/ +MarkdownIt.prototype.use = function (plugin /*, params, ... */) { + const args = [this].concat(Array.prototype.slice.call(arguments, 1)); + plugin.apply(plugin, args); + return this; +}; -/** - * Token.attrGet(name) +/** internal + * MarkdownIt.parse(src, env) -> Array + * - src (String): source string + * - env (Object): environment sandbox * - * Get the value of attribute `name`, or null if it does not exist. + * Parse input string and return list of block tokens (special token type + * "inline" will contain list of inline tokens). You should not call this + * method directly, until you write custom renderer (for example, to produce + * AST). + * + * `env` is used to pass data between "distributed" rules and return additional + * metadata like reference info, needed for the renderer. It also can be used to + * inject data in specific cases. Usually, you will be ok to pass `{}`, + * and then pass updated object to renderer. **/ -Token.prototype.attrGet = function attrGet(name) { - var idx = this.attrIndex(name), value = null; - if (idx >= 0) { - value = this.attrs[idx][1]; +MarkdownIt.prototype.parse = function (src, env) { + if (typeof src !== 'string') { + throw new Error('Input data should be a String'); } - return value; + const state = new this.core.State(src, this, env); + this.core.process(state); + return state.tokens; }; - /** - * Token.attrJoin(name, value) + * MarkdownIt.render(src [, env]) -> String + * - src (String): source string + * - env (Object): environment sandbox * - * Join value to existing attribute via space. Or create new attribute if not - * exists. Useful to operate with token classes. + * Render markdown string into html. It does all magic for you :). + * + * `env` can be used to inject additional metadata (`{}` by default). + * But you will not need it with high probability. See also comment + * in [[MarkdownIt.parse]]. **/ -Token.prototype.attrJoin = function attrJoin(name, value) { - var idx = this.attrIndex(name); +MarkdownIt.prototype.render = function (src, env) { + env = env || {}; + return this.renderer.render(this.parse(src, env), this.options, env); +}; - if (idx < 0) { - this.attrPush([ name, value ]); - } else { - this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value; - } +/** internal + * MarkdownIt.parseInline(src, env) -> Array + * - src (String): source string + * - env (Object): environment sandbox + * + * The same as [[MarkdownIt.parse]] but skip all block rules. It returns the + * block tokens list with the single `inline` element, containing parsed inline + * tokens in `children` property. Also updates `env` object. + **/ +MarkdownIt.prototype.parseInline = function (src, env) { + const state = new this.core.State(src, this, env); + state.inlineMode = true; + this.core.process(state); + return state.tokens; }; +/** + * MarkdownIt.renderInline(src [, env]) -> String + * - src (String): source string + * - env (Object): environment sandbox + * + * Similar to [[MarkdownIt.render]] but for single paragraph content. Result + * will NOT be wrapped into `

    ` tags. + **/ +MarkdownIt.prototype.renderInline = function (src, env) { + env = env || {}; + return this.renderer.render(this.parseInline(src, env), this.options, env); +}; -module.exports = Token; +module.exports = MarkdownIt; /***/ }), -/***/ 2805: -/***/ ((module) => { +/***/ 3211: +/***/ ((__unused_webpack_module, exports) => { "use strict"; - - /* eslint-disable no-bitwise */ -var decodeCache = {}; +const decodeCache = {}; -function getDecodeCache(exclude) { - var i, ch, cache = decodeCache[exclude]; - if (cache) { return cache; } +function getDecodeCache (exclude) { + let cache = decodeCache[exclude]; + if (cache) { return cache } cache = decodeCache[exclude] = []; - for (i = 0; i < 128; i++) { - ch = String.fromCharCode(i); + for (let i = 0; i < 128; i++) { + const ch = String.fromCharCode(i); cache.push(ch); } - for (i = 0; i < exclude.length; i++) { - ch = exclude.charCodeAt(i); + for (let i = 0; i < exclude.length; i++) { + const ch = exclude.charCodeAt(i); cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2); } - return cache; + return cache } - // Decode percent-encoded string. // -function decode(string, exclude) { - var cache; - +function decode (string, exclude) { if (typeof exclude !== 'string') { exclude = decode.defaultChars; } - cache = getDecodeCache(exclude); + const cache = getDecodeCache(exclude); - return string.replace(/(%[a-f0-9]{2})+/gi, function(seq) { - var i, l, b1, b2, b3, b4, chr, - result = ''; + return string.replace(/(%[a-f0-9]{2})+/gi, function (seq) { + let result = ''; - for (i = 0, l = seq.length; i < l; i += 3) { - b1 = parseInt(seq.slice(i + 1, i + 3), 16); + for (let i = 0, l = seq.length; i < l; i += 3) { + const b1 = parseInt(seq.slice(i + 1, i + 3), 16); if (b1 < 0x80) { result += cache[b1]; - continue; + continue } if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) { // 110xxxxx 10xxxxxx - b2 = parseInt(seq.slice(i + 4, i + 6), 16); + const b2 = parseInt(seq.slice(i + 4, i + 6), 16); if ((b2 & 0xC0) === 0x80) { - chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F); + const chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F); if (chr < 0x80) { result += '\ufffd\ufffd'; @@ -15835,17 +33637,17 @@ function decode(string, exclude) { } i += 3; - continue; + continue } } if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) { // 1110xxxx 10xxxxxx 10xxxxxx - b2 = parseInt(seq.slice(i + 4, i + 6), 16); - b3 = parseInt(seq.slice(i + 7, i + 9), 16); + const b2 = parseInt(seq.slice(i + 4, i + 6), 16); + const b3 = parseInt(seq.slice(i + 7, i + 9), 16); if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) { - chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F); + const chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F); if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) { result += '\ufffd\ufffd\ufffd'; @@ -15854,18 +33656,18 @@ function decode(string, exclude) { } i += 6; - continue; + continue } } if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) { // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx - b2 = parseInt(seq.slice(i + 4, i + 6), 16); - b3 = parseInt(seq.slice(i + 7, i + 9), 16); - b4 = parseInt(seq.slice(i + 10, i + 12), 16); + const b2 = parseInt(seq.slice(i + 4, i + 6), 16); + const b3 = parseInt(seq.slice(i + 7, i + 9), 16); + const b4 = parseInt(seq.slice(i + 10, i + 12), 16); if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) { - chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F); + let chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F); if (chr < 0x10000 || chr > 0x10FFFF) { result += '\ufffd\ufffd\ufffd\ufffd'; @@ -15875,49 +33677,33 @@ function decode(string, exclude) { } i += 9; - continue; + continue } } result += '\ufffd'; } - return result; - }); + return result + }) } - -decode.defaultChars = ';/?:@&=+$,#'; +decode.defaultChars = ';/?:@&=+$,#'; decode.componentChars = ''; - -module.exports = decode; - - -/***/ }), - -/***/ 6056: -/***/ ((module) => { - -"use strict"; - - - - -var encodeCache = {}; - +const encodeCache = {}; // Create a lookup array where anything but characters in `chars` string // and alphanumeric chars is percent-encoded. // -function getEncodeCache(exclude) { - var i, ch, cache = encodeCache[exclude]; - if (cache) { return cache; } +function getEncodeCache (exclude) { + let cache = encodeCache[exclude]; + if (cache) { return cache } cache = encodeCache[exclude] = []; - for (i = 0; i < 128; i++) { - ch = String.fromCharCode(i); + for (let i = 0; i < 128; i++) { + const ch = String.fromCharCode(i); if (/^[0-9a-z]$/i.test(ch)) { // always allow unencoded alphanumeric characters @@ -15927,14 +33713,13 @@ function getEncodeCache(exclude) { } } - for (i = 0; i < exclude.length; i++) { + for (let i = 0; i < exclude.length; i++) { cache[exclude.charCodeAt(i)] = exclude[i]; } - return cache; + return cache } - // Encode unsafe characters with percent-encoding, skipping already // encoded sequences. // @@ -15942,13 +33727,10 @@ function getEncodeCache(exclude) { // - exclude - list of characters to ignore (in addition to a-zA-Z0-9) // - keepEscaped - don't encode '%' in a correct escape sequence (default: true) // -function encode(string, exclude, keepEscaped) { - var i, l, code, nextCode, cache, - result = ''; - +function encode (string, exclude, keepEscaped) { if (typeof exclude !== 'string') { // encode(string, keepEscaped) - keepEscaped = exclude; + keepEscaped = exclude; exclude = encode.defaultChars; } @@ -15956,62 +33738,49 @@ function encode(string, exclude, keepEscaped) { keepEscaped = true; } - cache = getEncodeCache(exclude); + const cache = getEncodeCache(exclude); + let result = ''; - for (i = 0, l = string.length; i < l; i++) { - code = string.charCodeAt(i); + for (let i = 0, l = string.length; i < l; i++) { + const code = string.charCodeAt(i); if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) { if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) { result += string.slice(i, i + 3); i += 2; - continue; + continue } } if (code < 128) { result += cache[code]; - continue; + continue } if (code >= 0xD800 && code <= 0xDFFF) { if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) { - nextCode = string.charCodeAt(i + 1); + const nextCode = string.charCodeAt(i + 1); if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) { result += encodeURIComponent(string[i] + string[i + 1]); i++; - continue; + continue } } result += '%EF%BF%BD'; - continue; + continue } result += encodeURIComponent(string[i]); } - return result; + return result } -encode.defaultChars = ";/?:@&=+$,-_.!~*'()#"; +encode.defaultChars = ";/?:@&=+$,-_.!~*'()#"; encode.componentChars = "-_.!~*'()"; - -module.exports = encode; - - -/***/ }), - -/***/ 8447: -/***/ ((module) => { - -"use strict"; - - - - -module.exports = function format(url) { - var result = ''; +function format (url) { + let result = ''; result += url.protocol || ''; result += url.slashes ? '//' : ''; @@ -16029,31 +33798,9 @@ module.exports = function format(url) { result += url.search || ''; result += url.hash || ''; - return result; -}; - - -/***/ }), - -/***/ 2090: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - - -module.exports.encode = __nccwpck_require__(6056); -module.exports.decode = __nccwpck_require__(2805); -module.exports.format = __nccwpck_require__(8447); -module.exports.parse = __nccwpck_require__(4642); - - -/***/ }), - -/***/ 4642: -/***/ ((module) => { + return result +} -"use strict"; // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -16075,8 +33822,6 @@ module.exports.parse = __nccwpck_require__(4642); // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE // USE OR OTHER DEALINGS IN THE SOFTWARE. - - // // Changes from joyent/node: // @@ -16098,8 +33843,7 @@ module.exports.parse = __nccwpck_require__(4642); // which can be constructed using other parts of the url. // - -function Url() { +function Url () { this.protocol = null; this.slashes = null; this.auth = null; @@ -16114,63 +33858,62 @@ function Url() { // define these here so at least they only have to be // compiled once on the first module load. -var protocolPattern = /^([a-z0-9.+-]+:)/i, - portPattern = /:[0-9]*$/, - - // Special case for a simple path URL - simplePathPattern = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/, - - // RFC 2396: characters reserved for delimiting URLs. - // We actually just auto-escape these. - delims = [ '<', '>', '"', '`', ' ', '\r', '\n', '\t' ], - - // RFC 2396: characters not allowed for various reasons. - unwise = [ '{', '}', '|', '\\', '^', '`' ].concat(delims), - - // Allowed by RFCs, but cause of XSS attacks. Always escape these. - autoEscape = [ '\'' ].concat(unwise), - // Characters that are never ever allowed in a hostname. - // Note that any invalid chars are also handled, but these - // are the ones that are *expected* to be seen, so we fast-path - // them. - nonHostChars = [ '%', '/', '?', ';', '#' ].concat(autoEscape), - hostEndingChars = [ '/', '?', '#' ], - hostnameMaxLen = 255, - hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/, - hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/, - // protocols that can allow "unsafe" and "unwise" chars. - /* eslint-disable no-script-url */ - // protocols that never have a hostname. - hostlessProtocol = { - 'javascript': true, - 'javascript:': true - }, - // protocols that always contain a // bit. - slashedProtocol = { - 'http': true, - 'https': true, - 'ftp': true, - 'gopher': true, - 'file': true, - 'http:': true, - 'https:': true, - 'ftp:': true, - 'gopher:': true, - 'file:': true - }; - /* eslint-enable no-script-url */ - -function urlParse(url, slashesDenoteHost) { - if (url && url instanceof Url) { return url; } - - var u = new Url(); +const protocolPattern = /^([a-z0-9.+-]+:)/i; +const portPattern = /:[0-9]*$/; + +// Special case for a simple path URL +/* eslint-disable-next-line no-useless-escape */ +const simplePathPattern = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/; + +// RFC 2396: characters reserved for delimiting URLs. +// We actually just auto-escape these. +const delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t']; + +// RFC 2396: characters not allowed for various reasons. +const unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims); + +// Allowed by RFCs, but cause of XSS attacks. Always escape these. +const autoEscape = ['\''].concat(unwise); +// Characters that are never ever allowed in a hostname. +// Note that any invalid chars are also handled, but these +// are the ones that are *expected* to be seen, so we fast-path +// them. +const nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape); +const hostEndingChars = ['/', '?', '#']; +const hostnameMaxLen = 255; +const hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/; +const hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/; +// protocols that can allow "unsafe" and "unwise" chars. +// protocols that never have a hostname. +const hostlessProtocol = { + javascript: true, + 'javascript:': true +}; +// protocols that always contain a // bit. +const slashedProtocol = { + http: true, + https: true, + ftp: true, + gopher: true, + file: true, + 'http:': true, + 'https:': true, + 'ftp:': true, + 'gopher:': true, + 'file:': true +}; + +function urlParse (url, slashesDenoteHost) { + if (url && url instanceof Url) return url + + const u = new Url(); u.parse(url, slashesDenoteHost); - return u; + return u } -Url.prototype.parse = function(url, slashesDenoteHost) { - var i, l, lowerProto, hec, slashes, - rest = url; +Url.prototype.parse = function (url, slashesDenoteHost) { + let lowerProto, hec, slashes; + let rest = url; // trim before proceeding. // This is to support parse stuff like " http://foo.com \n" @@ -16178,17 +33921,17 @@ Url.prototype.parse = function(url, slashesDenoteHost) { if (!slashesDenoteHost && url.split('#').length === 1) { // Try fast path regexp - var simplePath = simplePathPattern.exec(rest); + const simplePath = simplePathPattern.exec(rest); if (simplePath) { this.pathname = simplePath[1]; if (simplePath[2]) { this.search = simplePath[2]; } - return this; + return this } } - var proto = protocolPattern.exec(rest); + let proto = protocolPattern.exec(rest); if (proto) { proto = proto[0]; lowerProto = proto.toLowerCase(); @@ -16200,6 +33943,7 @@ Url.prototype.parse = function(url, slashesDenoteHost) { // user@server is *always* interpreted as a hostname, and url // resolution will treat //foo/bar as host=foo,path=bar because that's // how the browser resolves relative URLs. + /* eslint-disable-next-line no-useless-escape */ if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) { slashes = rest.substr(0, 2) === '//'; if (slashes && !(proto && hostlessProtocol[proto])) { @@ -16210,7 +33954,6 @@ Url.prototype.parse = function(url, slashesDenoteHost) { if (!hostlessProtocol[proto] && (slashes || (proto && !slashedProtocol[proto]))) { - // there's a hostname. // the first instance of /, ?, ;, or # ends the host. // @@ -16227,8 +33970,8 @@ Url.prototype.parse = function(url, slashesDenoteHost) { // Review our test case against browsers more comprehensively. // find the first instance of any hostEndingChars - var hostEnd = -1; - for (i = 0; i < hostEndingChars.length; i++) { + let hostEnd = -1; + for (let i = 0; i < hostEndingChars.length; i++) { hec = rest.indexOf(hostEndingChars[i]); if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) { hostEnd = hec; @@ -16237,7 +33980,7 @@ Url.prototype.parse = function(url, slashesDenoteHost) { // at this point, either we have an explicit point where the // auth portion cannot go past, or the last @ char is the decider. - var auth, atSign; + let auth, atSign; if (hostEnd === -1) { // atSign can be anywhere. atSign = rest.lastIndexOf('@'); @@ -16257,7 +34000,7 @@ Url.prototype.parse = function(url, slashesDenoteHost) { // the host is the remaining to the left of the first non-host char hostEnd = -1; - for (i = 0; i < nonHostChars.length; i++) { + for (let i = 0; i < nonHostChars.length; i++) { hec = rest.indexOf(nonHostChars[i]); if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) { hostEnd = hec; @@ -16269,7 +34012,7 @@ Url.prototype.parse = function(url, slashesDenoteHost) { } if (rest[hostEnd - 1] === ':') { hostEnd--; } - var host = rest.slice(0, hostEnd); + const host = rest.slice(0, hostEnd); rest = rest.slice(hostEnd); // pull out port. @@ -16281,18 +34024,18 @@ Url.prototype.parse = function(url, slashesDenoteHost) { // if hostname begins with [ and ends with ] // assume that it's an IPv6 address. - var ipv6Hostname = this.hostname[0] === '[' && + const ipv6Hostname = this.hostname[0] === '[' && this.hostname[this.hostname.length - 1] === ']'; // validate a little. if (!ipv6Hostname) { - var hostparts = this.hostname.split(/\./); - for (i = 0, l = hostparts.length; i < l; i++) { - var part = hostparts[i]; - if (!part) { continue; } + const hostparts = this.hostname.split(/\./); + for (let i = 0, l = hostparts.length; i < l; i++) { + const part = hostparts[i]; + if (!part) { continue } if (!part.match(hostnamePartPattern)) { - var newpart = ''; - for (var j = 0, k = part.length; j < k; j++) { + let newpart = ''; + for (let j = 0, k = part.length; j < k; j++) { if (part.charCodeAt(j) > 127) { // we replace non-ASCII char with a temporary placeholder // we need this to make sure size of hostname is not @@ -16304,9 +34047,9 @@ Url.prototype.parse = function(url, slashesDenoteHost) { } // we test again with ASCII char only if (!newpart.match(hostnamePartPattern)) { - var validParts = hostparts.slice(0, i); - var notHost = hostparts.slice(i + 1); - var bit = part.match(hostnamePartStart); + const validParts = hostparts.slice(0, i); + const notHost = hostparts.slice(i + 1); + const bit = part.match(hostnamePartStart); if (bit) { validParts.push(bit[1]); notHost.unshift(bit[2]); @@ -16315,7 +34058,7 @@ Url.prototype.parse = function(url, slashesDenoteHost) { rest = notHost.join('.') + rest; } this.hostname = validParts.join('.'); - break; + break } } } @@ -16333,13 +34076,13 @@ Url.prototype.parse = function(url, slashesDenoteHost) { } // chop off from the tail first. - var hash = rest.indexOf('#'); + const hash = rest.indexOf('#'); if (hash !== -1) { // got a fragment string. this.hash = rest.substr(hash); rest = rest.slice(0, hash); } - var qm = rest.indexOf('?'); + const qm = rest.indexOf('?'); if (qm !== -1) { this.search = rest.substr(qm); rest = rest.slice(0, qm); @@ -16350,11 +34093,11 @@ Url.prototype.parse = function(url, slashesDenoteHost) { this.pathname = ''; } - return this; + return this }; -Url.prototype.parseHost = function(host) { - var port = portPattern.exec(host); +Url.prototype.parseHost = function (host) { + let port = portPattern.exec(host); if (port) { port = port[0]; if (port !== ':') { @@ -16365,7 +34108,10 @@ Url.prototype.parseHost = function(host) { if (host) { this.hostname = host; } }; -module.exports = urlParse; +exports.decode = decode; +exports.encode = encode; +exports.format = format; +exports.parse = urlParse; /***/ }), @@ -16584,7 +34330,7 @@ function populateMaps (extensions, types) { /***/ }), -/***/ 5654: +/***/ 4150: /***/ ((module) => { "use strict"; @@ -16905,7 +34651,7 @@ module.exports = addressparser; /***/ }), -/***/ 4177: +/***/ 9558: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; @@ -17055,7 +34801,7 @@ module.exports = { /***/ }), -/***/ 8229: +/***/ 527: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; @@ -17064,9 +34810,9 @@ module.exports = { // FIXME: // replace this Transform mess with a method that pipes input argument to output argument -const MessageParser = __nccwpck_require__(3334); -const RelaxedBody = __nccwpck_require__(6942); -const sign = __nccwpck_require__(8653); +const MessageParser = __nccwpck_require__(2691); +const RelaxedBody = __nccwpck_require__(9792); +const sign = __nccwpck_require__(5618); const PassThrough = (__nccwpck_require__(2781).PassThrough); const fs = __nccwpck_require__(7147); const path = __nccwpck_require__(1017); @@ -17314,7 +35060,7 @@ module.exports = DKIM; /***/ }), -/***/ 3334: +/***/ 2691: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; @@ -17477,7 +35223,7 @@ module.exports = MessageParser; /***/ }), -/***/ 6942: +/***/ 9792: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; @@ -17639,14 +35385,14 @@ module.exports = RelaxedBody; /***/ }), -/***/ 8653: +/***/ 5618: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; -const punycode = __nccwpck_require__(5477); -const mimeFuncs = __nccwpck_require__(2875); +const punycode = __nccwpck_require__(7772); +const mimeFuncs = __nccwpck_require__(1973); const crypto = __nccwpck_require__(6113); /** @@ -17764,7 +35510,7 @@ function relaxedHeaderLine(line) { /***/ }), -/***/ 1618: +/***/ 6064: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; @@ -18053,7 +35799,7 @@ module.exports = Cookies; /***/ }), -/***/ 1387: +/***/ 7439: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; @@ -18064,8 +35810,8 @@ const https = __nccwpck_require__(5687); const urllib = __nccwpck_require__(7310); const zlib = __nccwpck_require__(9796); const PassThrough = (__nccwpck_require__(2781).PassThrough); -const Cookies = __nccwpck_require__(1618); -const packageData = __nccwpck_require__(1149); +const Cookies = __nccwpck_require__(6064); +const packageData = __nccwpck_require__(3023); const net = __nccwpck_require__(1808); const MAX_REDIRECTS = 5; @@ -18335,14 +36081,14 @@ function nmfetch(url, options) { /***/ }), -/***/ 4633: +/***/ 1539: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; -const packageData = __nccwpck_require__(1149); -const shared = __nccwpck_require__(4601); +const packageData = __nccwpck_require__(3023); +const shared = __nccwpck_require__(7697); /** * Generates a Transport object to generate JSON output @@ -18425,7 +36171,7 @@ module.exports = JSONTransport; /***/ }), -/***/ 6329: +/***/ 3575: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; @@ -18433,8 +36179,9 @@ module.exports = JSONTransport; -const MimeNode = __nccwpck_require__(3889); -const mimeFuncs = __nccwpck_require__(2875); +const MimeNode = __nccwpck_require__(865); +const mimeFuncs = __nccwpck_require__(1973); +const parseDataURI = (__nccwpck_require__(7697).parseDataURI); /** * Creates the object for composing a MimeNode instance out from the mail options @@ -18522,9 +36269,13 @@ class MailComposer { attachment = this._processDataUrl(attachment); } + let contentType = attachment.contentType || mimeFuncs.detectMimeType(attachment.filename || attachment.path || attachment.href || 'bin'); + let isImage = /^image\//i.test(contentType); + let contentDisposition = attachment.contentDisposition || (isMessageNode || (isImage && attachment.cid) ? 'inline' : 'attachment'); + data = { - contentType: attachment.contentType || mimeFuncs.detectMimeType(attachment.filename || attachment.path || attachment.href || 'bin'), - contentDisposition: attachment.contentDisposition || (isMessageNode ? 'inline' : 'attachment'), + contentType, + contentDisposition, contentTransferEncoding: 'contentTransferEncoding' in attachment ? attachment.contentTransferEncoding : 'base64' }; @@ -18937,7 +36688,10 @@ class MailComposer { } if (!/^text\//i.test(element.contentType) || element.contentDisposition) { - node.setHeader('Content-Disposition', element.contentDisposition || (element.cid ? 'inline' : 'attachment')); + node.setHeader( + 'Content-Disposition', + element.contentDisposition || (element.cid && /^image\//i.test(element.contentType) ? 'inline' : 'attachment') + ); } if (typeof element.content === 'string' && !['utf8', 'usascii', 'ascii'].includes(encoding)) { @@ -18961,12 +36715,17 @@ class MailComposer { * @return {Object} Parsed element */ _processDataUrl(element) { - let parts = (element.path || element.href).match(/^data:((?:[^;]*;)*(?:[^,]*)),(.*)$/i); - if (!parts) { + let parsedDataUri; + if ((element.path || element.href).match(/^data:/)) { + parsedDataUri = parseDataURI(element.path || element.href); + } + + if (!parsedDataUri) { return element; } - element.content = /\bbase64$/i.test(parts[1]) ? Buffer.from(parts[2], 'base64') : Buffer.from(decodeURIComponent(parts[2])); + element.content = parsedDataUri.data; + element.contentType = element.contentType || parsedDataUri.contentType; if ('path' in element) { element.path = false; @@ -18976,12 +36735,6 @@ class MailComposer { element.href = false; } - parts[1].split(';').forEach(item => { - if (/^\w+\/[^/]+$/i.test(item)) { - element.contentType = element.contentType || item.toLowerCase(); - } - }); - return element; } } @@ -18991,22 +36744,22 @@ module.exports = MailComposer; /***/ }), -/***/ 5635: +/***/ 6227: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; const EventEmitter = __nccwpck_require__(2361); -const shared = __nccwpck_require__(4601); -const mimeTypes = __nccwpck_require__(5547); -const MailComposer = __nccwpck_require__(6329); -const DKIM = __nccwpck_require__(8229); -const httpProxyClient = __nccwpck_require__(8954); +const shared = __nccwpck_require__(7697); +const mimeTypes = __nccwpck_require__(8000); +const MailComposer = __nccwpck_require__(3575); +const DKIM = __nccwpck_require__(527); +const httpProxyClient = __nccwpck_require__(4894); const util = __nccwpck_require__(3837); const urllib = __nccwpck_require__(7310); -const packageData = __nccwpck_require__(1149); -const MailMessage = __nccwpck_require__(2426); +const packageData = __nccwpck_require__(3023); +const MailMessage = __nccwpck_require__(5678); const net = __nccwpck_require__(1808); const dns = __nccwpck_require__(9523); const crypto = __nccwpck_require__(6113); @@ -19392,21 +37145,23 @@ class Mail extends EventEmitter { return callback(err); } let cidCounter = 0; - html = (html || '').toString().replace(/(]* src\s*=[\s"']*)(data:([^;]+);[^"'>\s]+)/gi, (match, prefix, dataUri, mimeType) => { - let cid = crypto.randomBytes(10).toString('hex') + '@localhost'; - if (!mail.data.attachments) { - mail.data.attachments = []; - } - if (!Array.isArray(mail.data.attachments)) { - mail.data.attachments = [].concat(mail.data.attachments || []); - } - mail.data.attachments.push({ - path: dataUri, - cid, - filename: 'image-' + ++cidCounter + '.' + mimeTypes.detectExtension(mimeType) + html = (html || '') + .toString() + .replace(/(]{0,1024} src\s{0,20}=[\s"']{0,20})(data:([^;]+);[^"'>\s]+)/gi, (match, prefix, dataUri, mimeType) => { + let cid = crypto.randomBytes(10).toString('hex') + '@localhost'; + if (!mail.data.attachments) { + mail.data.attachments = []; + } + if (!Array.isArray(mail.data.attachments)) { + mail.data.attachments = [].concat(mail.data.attachments || []); + } + mail.data.attachments.push({ + path: dataUri, + cid, + filename: 'image-' + ++cidCounter + '.' + mimeTypes.detectExtension(mimeType) + }); + return prefix + 'cid:' + cid; }); - return prefix + 'cid:' + cid; - }); mail.data.html = html; callback(); }); @@ -19426,15 +37181,15 @@ module.exports = Mail; /***/ }), -/***/ 2426: +/***/ 5678: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; -const shared = __nccwpck_require__(4601); -const MimeNode = __nccwpck_require__(3889); -const mimeFuncs = __nccwpck_require__(2875); +const shared = __nccwpck_require__(7697); +const MimeNode = __nccwpck_require__(865); +const mimeFuncs = __nccwpck_require__(1973); class MailMessage { constructor(mailer, data) { @@ -19749,7 +37504,7 @@ module.exports = MailMessage; /***/ }), -/***/ 2875: +/***/ 1973: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; @@ -19757,9 +37512,9 @@ module.exports = MailMessage; -const base64 = __nccwpck_require__(4177); -const qp = __nccwpck_require__(2879); -const mimeTypes = __nccwpck_require__(5547); +const base64 = __nccwpck_require__(9558); +const qp = __nccwpck_require__(1177); +const mimeTypes = __nccwpck_require__(8000); module.exports = { /** @@ -20382,7 +38137,7 @@ module.exports = { /***/ }), -/***/ 5547: +/***/ 8000: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; @@ -22492,7 +40247,7 @@ module.exports = { /***/ }), -/***/ 3889: +/***/ 865: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; @@ -22502,19 +40257,19 @@ module.exports = { const crypto = __nccwpck_require__(6113); const fs = __nccwpck_require__(7147); -const punycode = __nccwpck_require__(5477); +const punycode = __nccwpck_require__(7772); const PassThrough = (__nccwpck_require__(2781).PassThrough); -const shared = __nccwpck_require__(4601); +const shared = __nccwpck_require__(7697); -const mimeFuncs = __nccwpck_require__(2875); -const qp = __nccwpck_require__(2879); -const base64 = __nccwpck_require__(4177); -const addressparser = __nccwpck_require__(5654); -const nmfetch = __nccwpck_require__(1387); -const LastNewline = __nccwpck_require__(8397); +const mimeFuncs = __nccwpck_require__(1973); +const qp = __nccwpck_require__(1177); +const base64 = __nccwpck_require__(9558); +const addressparser = __nccwpck_require__(4150); +const nmfetch = __nccwpck_require__(7439); +const LastNewline = __nccwpck_require__(1371); -const LeWindows = __nccwpck_require__(6148); -const LeUnix = __nccwpck_require__(8520); +const LeWindows = __nccwpck_require__(7523); +const LeUnix = __nccwpck_require__(2243); /** * Creates a new mime tree node. Assumes 'multipart/*' as the content type @@ -22995,6 +40750,15 @@ class MimeNode { if (!this.getHeader('MIME-Version')) { this.setHeader('MIME-Version', '1.0'); } + + // Ensure that Content-Type is the last header for the root node + for (let i = this._headers.length - 2; i >= 0; i--) { + let header = this._headers[i]; + if (header.key === 'Content-Type') { + this._headers.splice(i, 1); + this._headers.push(header); + } + } } this._headers.forEach(header => { @@ -23448,7 +41212,15 @@ class MimeNode { if (content._resolvedValue) { // pass string or buffer content as a stream contentStream = new PassThrough(); - setImmediate(() => contentStream.end(content._resolvedValue)); + + setImmediate(() => { + try { + contentStream.end(content._resolvedValue); + } catch (err) { + contentStream.emit('error', err); + } + }); + return contentStream; } else if (typeof content.pipe === 'function') { // assume as stream @@ -23472,7 +41244,14 @@ class MimeNode { } else { // pass string or buffer content as a stream contentStream = new PassThrough(); - setImmediate(() => contentStream.end(content || '')); + + setImmediate(() => { + try { + contentStream.end(content || ''); + } catch (err) { + contentStream.emit('error', err); + } + }); return contentStream; } } @@ -23716,7 +41495,7 @@ class MimeNode { * @returns {String} Mime word encoded string if needed */ _encodeAddressName(name) { - if (!/^[\w ']*$/.test(name)) { + if (!/^[\w ]*$/.test(name)) { if (/^[\x20-\x7e]*$/.test(name)) { return '"' + name.replace(/([\\"])/g, '\\$1') + '"'; } else { @@ -23790,7 +41569,7 @@ module.exports = MimeNode; /***/ }), -/***/ 8397: +/***/ 1371: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; @@ -23831,7 +41610,7 @@ module.exports = LastNewline; /***/ }), -/***/ 8520: +/***/ 2243: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; @@ -23882,7 +41661,7 @@ module.exports = LeWindows; /***/ }), -/***/ 6148: +/***/ 7523: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; @@ -23942,22 +41721,22 @@ module.exports = LeWindows; /***/ }), -/***/ 4654: +/***/ 4352: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; -const Mailer = __nccwpck_require__(5635); -const shared = __nccwpck_require__(4601); -const SMTPPool = __nccwpck_require__(6426); -const SMTPTransport = __nccwpck_require__(7171); -const SendmailTransport = __nccwpck_require__(279); -const StreamTransport = __nccwpck_require__(460); -const JSONTransport = __nccwpck_require__(4633); -const SESTransport = __nccwpck_require__(7161); -const nmfetch = __nccwpck_require__(1387); -const packageData = __nccwpck_require__(1149); +const Mailer = __nccwpck_require__(6227); +const shared = __nccwpck_require__(7697); +const SMTPPool = __nccwpck_require__(464); +const SMTPTransport = __nccwpck_require__(8014); +const SendmailTransport = __nccwpck_require__(6784); +const StreamTransport = __nccwpck_require__(4405); +const JSONTransport = __nccwpck_require__(1539); +const SESTransport = __nccwpck_require__(9532); +const nmfetch = __nccwpck_require__(7439); +const packageData = __nccwpck_require__(3023); const ETHEREAL_API = (process.env.ETHEREAL_API || 'https://api.nodemailer.com').replace(/\/+$/, ''); const ETHEREAL_WEB = (process.env.ETHEREAL_WEB || 'https://ethereal.email').replace(/\/+$/, ''); @@ -24093,7 +41872,475 @@ module.exports.getTestMessageUrl = function (info) { /***/ }), -/***/ 2879: +/***/ 7772: +/***/ ((module) => { + +"use strict"; +/* + +Copied from https://github.com/mathiasbynens/punycode.js/blob/ef3505c8abb5143a00d53ce59077c9f7f4b2ac47/punycode.js + +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ +/* eslint callback-return: 0, no-bitwise: 0, eqeqeq: 0, prefer-arrow-callback: 0, object-shorthand: 0 */ + + + +/** Highest positive signed 32-bit float value */ +const maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 + +/** Bootstring parameters */ +const base = 36; +const tMin = 1; +const tMax = 26; +const skew = 38; +const damp = 700; +const initialBias = 72; +const initialN = 128; // 0x80 +const delimiter = '-'; // '\x2D' + +/** Regular expressions */ +const regexPunycode = /^xn--/; +const regexNonASCII = /[^\0-\x7F]/; // Note: U+007F DEL is excluded too. +const regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators + +/** Error messages */ +const errors = { + overflow: 'Overflow: input needs wider integers to process', + 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', + 'invalid-input': 'Invalid input' +}; + +/** Convenience shortcuts */ +const baseMinusTMin = base - tMin; +const floor = Math.floor; +const stringFromCharCode = String.fromCharCode; + +/*--------------------------------------------------------------------------*/ + +/** + * A generic error utility function. + * @private + * @param {String} type The error type. + * @returns {Error} Throws a `RangeError` with the applicable error message. + */ +function error(type) { + throw new RangeError(errors[type]); +} + +/** + * A generic `Array#map` utility function. + * @private + * @param {Array} array The array to iterate over. + * @param {Function} callback The function that gets called for every array + * item. + * @returns {Array} A new array of values returned by the callback function. + */ +function map(array, callback) { + const result = []; + let length = array.length; + while (length--) { + result[length] = callback(array[length]); + } + return result; +} + +/** + * A simple `Array#map`-like wrapper to work with domain name strings or email + * addresses. + * @private + * @param {String} domain The domain name or email address. + * @param {Function} callback The function that gets called for every + * character. + * @returns {String} A new string of characters returned by the callback + * function. + */ +function mapDomain(domain, callback) { + const parts = domain.split('@'); + let result = ''; + if (parts.length > 1) { + // In email addresses, only the domain name should be punycoded. Leave + // the local part (i.e. everything up to `@`) intact. + result = parts[0] + '@'; + domain = parts[1]; + } + // Avoid `split(regex)` for IE8 compatibility. See #17. + domain = domain.replace(regexSeparators, '\x2E'); + const labels = domain.split('.'); + const encoded = map(labels, callback).join('.'); + return result + encoded; +} + +/** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + * @see `punycode.ucs2.encode` + * @see + * @memberOf punycode.ucs2 + * @name decode + * @param {String} string The Unicode input string (UCS-2). + * @returns {Array} The new array of code points. + */ +function ucs2decode(string) { + const output = []; + let counter = 0; + const length = string.length; + while (counter < length) { + const value = string.charCodeAt(counter++); + if (value >= 0xd800 && value <= 0xdbff && counter < length) { + // It's a high surrogate, and there is a next character. + const extra = string.charCodeAt(counter++); + if ((extra & 0xfc00) == 0xdc00) { + // Low surrogate. + output.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000); + } else { + // It's an unmatched surrogate; only append this code unit, in case the + // next code unit is the high surrogate of a surrogate pair. + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; +} + +/** + * Creates a string based on an array of numeric code points. + * @see `punycode.ucs2.decode` + * @memberOf punycode.ucs2 + * @name encode + * @param {Array} codePoints The array of numeric code points. + * @returns {String} The new Unicode string (UCS-2). + */ +const ucs2encode = codePoints => String.fromCodePoint(...codePoints); + +/** + * Converts a basic code point into a digit/integer. + * @see `digitToBasic()` + * @private + * @param {Number} codePoint The basic numeric code point value. + * @returns {Number} The numeric value of a basic code point (for use in + * representing integers) in the range `0` to `base - 1`, or `base` if + * the code point does not represent a value. + */ +const basicToDigit = function (codePoint) { + if (codePoint >= 0x30 && codePoint < 0x3a) { + return 26 + (codePoint - 0x30); + } + if (codePoint >= 0x41 && codePoint < 0x5b) { + return codePoint - 0x41; + } + if (codePoint >= 0x61 && codePoint < 0x7b) { + return codePoint - 0x61; + } + return base; +}; + +/** + * Converts a digit/integer into a basic code point. + * @see `basicToDigit()` + * @private + * @param {Number} digit The numeric value of a basic code point. + * @returns {Number} The basic code point whose value (when used for + * representing integers) is `digit`, which needs to be in the range + * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is + * used; else, the lowercase form is used. The behavior is undefined + * if `flag` is non-zero and `digit` has no uppercase form. + */ +const digitToBasic = function (digit, flag) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); +}; + +/** + * Bias adaptation function as per section 3.4 of RFC 3492. + * https://tools.ietf.org/html/rfc3492#section-3.4 + * @private + */ +const adapt = function (delta, numPoints, firstTime) { + let k = 0; + delta = firstTime ? floor(delta / damp) : delta >> 1; + delta += floor(delta / numPoints); + for (; /* no initialization */ delta > (baseMinusTMin * tMax) >> 1; k += base) { + delta = floor(delta / baseMinusTMin); + } + return floor(k + ((baseMinusTMin + 1) * delta) / (delta + skew)); +}; + +/** + * Converts a Punycode string of ASCII-only symbols to a string of Unicode + * symbols. + * @memberOf punycode + * @param {String} input The Punycode string of ASCII-only symbols. + * @returns {String} The resulting string of Unicode symbols. + */ +const decode = function (input) { + // Don't use UCS-2. + const output = []; + const inputLength = input.length; + let i = 0; + let n = initialN; + let bias = initialBias; + + // Handle the basic code points: let `basic` be the number of input code + // points before the last delimiter, or `0` if there is none, then copy + // the first basic code points to the output. + + let basic = input.lastIndexOf(delimiter); + if (basic < 0) { + basic = 0; + } + + for (let j = 0; j < basic; ++j) { + // if it's not a basic code point + if (input.charCodeAt(j) >= 0x80) { + error('not-basic'); + } + output.push(input.charCodeAt(j)); + } + + // Main decoding loop: start just after the last delimiter if any basic code + // points were copied; start at the beginning otherwise. + + for (let index = basic > 0 ? basic + 1 : 0; index < inputLength /* no final expression */; ) { + // `index` is the index of the next character to be consumed. + // Decode a generalized variable-length integer into `delta`, + // which gets added to `i`. The overflow checking is easier + // if we increase `i` as we go, then subtract off its starting + // value at the end to obtain `delta`. + const oldi = i; + for (let w = 1, k = base /* no condition */; ; k += base) { + if (index >= inputLength) { + error('invalid-input'); + } + + const digit = basicToDigit(input.charCodeAt(index++)); + + if (digit >= base) { + error('invalid-input'); + } + if (digit > floor((maxInt - i) / w)) { + error('overflow'); + } + + i += digit * w; + const t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias; + + if (digit < t) { + break; + } + + const baseMinusT = base - t; + if (w > floor(maxInt / baseMinusT)) { + error('overflow'); + } + + w *= baseMinusT; + } + + const out = output.length + 1; + bias = adapt(i - oldi, out, oldi == 0); + + // `i` was supposed to wrap around from `out` to `0`, + // incrementing `n` each time, so we'll fix that now: + if (floor(i / out) > maxInt - n) { + error('overflow'); + } + + n += floor(i / out); + i %= out; + + // Insert `n` at position `i` of the output. + output.splice(i++, 0, n); + } + + return String.fromCodePoint(...output); +}; + +/** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + * @memberOf punycode + * @param {String} input The string of Unicode symbols. + * @returns {String} The resulting Punycode string of ASCII-only symbols. + */ +const encode = function (input) { + const output = []; + + // Convert the input in UCS-2 to an array of Unicode code points. + input = ucs2decode(input); + + // Cache the length. + const inputLength = input.length; + + // Initialize the state. + let n = initialN; + let delta = 0; + let bias = initialBias; + + // Handle the basic code points. + for (const currentValue of input) { + if (currentValue < 0x80) { + output.push(stringFromCharCode(currentValue)); + } + } + + const basicLength = output.length; + let handledCPCount = basicLength; + + // `handledCPCount` is the number of code points that have been handled; + // `basicLength` is the number of basic code points. + + // Finish the basic string with a delimiter unless it's empty. + if (basicLength) { + output.push(delimiter); + } + + // Main encoding loop: + while (handledCPCount < inputLength) { + // All non-basic code points < n have been handled already. Find the next + // larger one: + let m = maxInt; + for (const currentValue of input) { + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } + + // Increase `delta` enough to advance the decoder's state to , + // but guard against overflow. + const handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { + error('overflow'); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + for (const currentValue of input) { + if (currentValue < n && ++delta > maxInt) { + error('overflow'); + } + if (currentValue === n) { + // Represent delta as a generalized variable-length integer. + let q = delta; + for (let k = base /* no condition */; ; k += base) { + const t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias; + if (q < t) { + break; + } + const qMinusT = q - t; + const baseMinusT = base - t; + output.push(stringFromCharCode(digitToBasic(t + (qMinusT % baseMinusT), 0))); + q = floor(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q, 0))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength); + delta = 0; + ++handledCPCount; + } + } + + ++delta; + ++n; + } + return output.join(''); +}; + +/** + * Converts a Punycode string representing a domain name or an email address + * to Unicode. Only the Punycoded parts of the input will be converted, i.e. + * it doesn't matter if you call it on a string that has already been + * converted to Unicode. + * @memberOf punycode + * @param {String} input The Punycoded domain name or email address to + * convert to Unicode. + * @returns {String} The Unicode representation of the given Punycode + * string. + */ +const toUnicode = function (input) { + return mapDomain(input, function (string) { + return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string; + }); +}; + +/** + * Converts a Unicode string representing a domain name or an email address to + * Punycode. Only the non-ASCII parts of the domain name will be converted, + * i.e. it doesn't matter if you call it with a domain that's already in + * ASCII. + * @memberOf punycode + * @param {String} input The domain name or email address to convert, as a + * Unicode string. + * @returns {String} The Punycode representation of the given domain name or + * email address. + */ +const toASCII = function (input) { + return mapDomain(input, function (string) { + return regexNonASCII.test(string) ? 'xn--' + encode(string) : string; + }); +}; + +/*--------------------------------------------------------------------------*/ + +/** Define the public API */ +const punycode = { + /** + * A string representing the current Punycode.js version number. + * @memberOf punycode + * @type String + */ + version: '2.3.1', + /** + * An object of methods to convert from JavaScript's internal character + * representation (UCS-2) to Unicode code points, and back. + * @see + * @memberOf punycode + * @type Object + */ + ucs2: { + decode: ucs2decode, + encode: ucs2encode + }, + decode: decode, + encode: encode, + toASCII: toASCII, + toUnicode: toUnicode +}; + +module.exports = punycode; + + +/***/ }), + +/***/ 1177: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; @@ -24320,15 +42567,15 @@ module.exports = { /***/ }), -/***/ 279: +/***/ 6784: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; const spawn = (__nccwpck_require__(2081).spawn); -const packageData = __nccwpck_require__(1149); -const shared = __nccwpck_require__(4601); +const packageData = __nccwpck_require__(3023); +const shared = __nccwpck_require__(7697); /** * Generates a Transport object for Sendmail @@ -24538,16 +42785,16 @@ module.exports = SendmailTransport; /***/ }), -/***/ 7161: +/***/ 9532: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; const EventEmitter = __nccwpck_require__(2361); -const packageData = __nccwpck_require__(1149); -const shared = __nccwpck_require__(4601); -const LeWindows = __nccwpck_require__(6148); +const packageData = __nccwpck_require__(3023); +const shared = __nccwpck_require__(7697); +const LeWindows = __nccwpck_require__(7523); /** * Generates a Transport object for AWS SES @@ -24895,7 +43142,7 @@ module.exports = SESTransport; /***/ }), -/***/ 4601: +/***/ 7697: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; @@ -24906,7 +43153,7 @@ module.exports = SESTransport; const urllib = __nccwpck_require__(7310); const util = __nccwpck_require__(3837); const fs = __nccwpck_require__(7147); -const nmfetch = __nccwpck_require__(1387); +const nmfetch = __nccwpck_require__(7439); const dns = __nccwpck_require__(9523); const net = __nccwpck_require__(1808); const os = __nccwpck_require__(2037); @@ -25319,6 +43566,55 @@ module.exports.callbackPromise = (resolve, reject) => } }; +module.exports.parseDataURI = uri => { + let input = uri; + let commaPos = input.indexOf(','); + if (!commaPos) { + return uri; + } + + let data = input.substring(commaPos + 1); + let metaStr = input.substring('data:'.length, commaPos); + + let encoding; + + let metaEntries = metaStr.split(';'); + let lastMetaEntry = metaEntries.length > 1 ? metaEntries[metaEntries.length - 1] : false; + if (lastMetaEntry && lastMetaEntry.indexOf('=') < 0) { + encoding = lastMetaEntry.toLowerCase(); + metaEntries.pop(); + } + + let contentType = metaEntries.shift() || 'application/octet-stream'; + let params = {}; + for (let entry of metaEntries) { + let sep = entry.indexOf('='); + if (sep >= 0) { + let key = entry.substring(0, sep); + let value = entry.substring(sep + 1); + params[key] = value; + } + } + + switch (encoding) { + case 'base64': + data = Buffer.from(data, 'base64'); + break; + case 'utf8': + data = Buffer.from(data); + break; + default: + try { + data = Buffer.from(decodeURIComponent(data)); + } catch (err) { + data = Buffer.from(data); + } + data = Buffer.from(data); + } + + return { data, encoding, contentType, params }; +}; + /** * Resolves a String or a Buffer value for content value. Useful if the value * is a Stream or a file or an URL. If the value is a Stream, overwrites @@ -25371,11 +43667,12 @@ module.exports.resolveContent = (data, key, callback) => { contentStream = nmfetch(content.path || content.href); return resolveStream(contentStream, callback); } else if (/^data:/i.test(content.path || content.href)) { - let parts = (content.path || content.href).match(/^data:((?:[^;]*;)*(?:[^,]*)),(.*)$/i); - if (!parts) { + let parsedDataUri = module.exports.parseDataURI(content.path || content.href); + + if (!parsedDataUri || !parsedDataUri.data) { return callback(null, Buffer.from(0)); } - return callback(null, /\bbase64$/i.test(parts[1]) ? Buffer.from(parts[2], 'base64') : Buffer.from(decodeURIComponent(parts[2]))); + return callback(null, parsedDataUri.data); } else if (content.path) { return resolveStream(fs.createReadStream(content.path), callback); } @@ -25541,7 +43838,7 @@ function createDefaultLogger(levels) { /***/ }), -/***/ 5442: +/***/ 8113: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; @@ -25657,7 +43954,7 @@ module.exports = DataStream; /***/ }), -/***/ 8954: +/***/ 4894: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; @@ -25808,21 +44105,21 @@ module.exports = httpProxyClient; /***/ }), -/***/ 8008: +/***/ 8755: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; -const packageInfo = __nccwpck_require__(1149); +const packageInfo = __nccwpck_require__(3023); const EventEmitter = (__nccwpck_require__(2361).EventEmitter); const net = __nccwpck_require__(1808); const tls = __nccwpck_require__(4404); const os = __nccwpck_require__(2037); const crypto = __nccwpck_require__(6113); -const DataStream = __nccwpck_require__(5442); +const DataStream = __nccwpck_require__(8113); const PassThrough = (__nccwpck_require__(2781).PassThrough); -const shared = __nccwpck_require__(4601); +const shared = __nccwpck_require__(7697); // default timeout values in ms const CONNECTION_TIMEOUT = 2 * 60 * 1000; // how much to wait for the connection to be established @@ -25872,6 +44169,8 @@ class SMTPConnection extends EventEmitter { this.port = Number(this.options.port) || (this.secureConnection ? 465 : 587); this.host = this.options.host || 'localhost'; + this.servername = this.options.servername ? this.options.servername : !net.isIP(this.host) ? this.host : false; + this.allowInternalNetworkInterfaces = this.options.allowInternalNetworkInterfaces || false; if (typeof this.options.secure === 'undefined' && this.port === 465) { @@ -26110,6 +44409,12 @@ class SMTPConnection extends EventEmitter { opts[key] = this.options.tls[key]; }); } + + // ensure servername for SNI + if (this.servername && !opts.servername) { + opts.servername = this.servername; + } + return shared.resolveHostname(opts, (err, resolved) => { if (err) { return setImmediate(() => this._onError(err, 'EDNS', false, 'CONN')); @@ -26248,7 +44553,7 @@ class SMTPConnection extends EventEmitter { } if (this._authMethod !== 'XOAUTH2' && (!this._auth.credentials || !this._auth.credentials.user || !this._auth.credentials.pass)) { - if (this._auth.user && this._auth.pass) { + if ((this._auth.user && this._auth.pass) || this.customAuth.has(this._authMethod)) { this._auth.credentials = { user: this._auth.user, pass: this._auth.pass, @@ -26631,6 +44936,20 @@ class SMTPConnection extends EventEmitter { * @event */ _onClose() { + let serverResponse = false; + + if (this._remainder && this._remainder.trim()) { + if (this.options.debug || this.options.transactionLog) { + this.logger.debug( + { + tnx: 'server' + }, + this._remainder.replace(/\r?\n$/, '') + ); + } + this.lastServerResponse = serverResponse = this._remainder.trim(); + } + this.logger.info( { tnx: 'network' @@ -26639,9 +44958,11 @@ class SMTPConnection extends EventEmitter { ); if (this.upgrading && !this._destroyed) { - return this._onError(new Error('Connection closed unexpectedly'), 'ETLS', false, 'CONN'); + return this._onError(new Error('Connection closed unexpectedly'), 'ETLS', serverResponse, 'CONN'); } else if (![this._actionGreeting, this.close].includes(this._responseActions[0]) && !this._destroyed) { - return this._onError(new Error('Connection closed unexpectedly'), 'ECONNECTION', false, 'CONN'); + return this._onError(new Error('Connection closed unexpectedly'), 'ECONNECTION', serverResponse, 'CONN'); + } else if (/^[45]\d{2}\b/.test(serverResponse)) { + return this._onError(new Error('Connection closed unexpectedly'), 'ECONNECTION', serverResponse, 'CONN'); } this._destroy(); @@ -26702,6 +45023,11 @@ class SMTPConnection extends EventEmitter { opts[key] = this.options.tls[key]; }); + // ensure servername for SNI + if (this.servername && !opts.servername) { + opts.servername = this.servername; + } + this.upgrading = true; // tls.connect is not an asynchronous function however it may still throw errors and requires to be wrapped with try/catch try { @@ -26758,14 +45084,14 @@ class SMTPConnection extends EventEmitter { if (!str.trim()) { // skip unexpected empty lines - setImmediate(() => this._processResponse(true)); + setImmediate(() => this._processResponse()); } let action = this._responseActions.shift(); if (typeof action === 'function') { action.call(this, str); - setImmediate(() => this._processResponse(true)); + setImmediate(() => this._processResponse()); } else { return this._onError(new Error('Unexpected Response'), 'EPROTOCOL', str, 'CONN'); } @@ -27612,18 +45938,18 @@ module.exports = SMTPConnection; /***/ }), -/***/ 6426: +/***/ 464: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; const EventEmitter = __nccwpck_require__(2361); -const PoolResource = __nccwpck_require__(6654); -const SMTPConnection = __nccwpck_require__(8008); -const wellKnown = __nccwpck_require__(9852); -const shared = __nccwpck_require__(4601); -const packageData = __nccwpck_require__(1149); +const PoolResource = __nccwpck_require__(1602); +const SMTPConnection = __nccwpck_require__(8755); +const wellKnown = __nccwpck_require__(3755); +const shared = __nccwpck_require__(7697); +const packageData = __nccwpck_require__(3023); /** * Creates a SMTP pool transport object for Nodemailer @@ -28268,15 +46594,15 @@ module.exports = SMTPPool; /***/ }), -/***/ 6654: +/***/ 1602: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; -const SMTPConnection = __nccwpck_require__(8008); -const assign = (__nccwpck_require__(4601).assign); -const XOAuth2 = __nccwpck_require__(6467); +const SMTPConnection = __nccwpck_require__(8755); +const assign = (__nccwpck_require__(7697).assign); +const XOAuth2 = __nccwpck_require__(6473); const EventEmitter = __nccwpck_require__(2361); /** @@ -28529,18 +46855,18 @@ module.exports = PoolResource; /***/ }), -/***/ 7171: +/***/ 8014: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; const EventEmitter = __nccwpck_require__(2361); -const SMTPConnection = __nccwpck_require__(8008); -const wellKnown = __nccwpck_require__(9852); -const shared = __nccwpck_require__(4601); -const XOAuth2 = __nccwpck_require__(6467); -const packageData = __nccwpck_require__(1149); +const SMTPConnection = __nccwpck_require__(8755); +const wellKnown = __nccwpck_require__(3755); +const shared = __nccwpck_require__(7697); +const XOAuth2 = __nccwpck_require__(6473); +const packageData = __nccwpck_require__(3023); /** * Creates a SMTP transport object for Nodemailer @@ -28953,14 +47279,14 @@ module.exports = SMTPTransport; /***/ }), -/***/ 460: +/***/ 4405: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; -const packageData = __nccwpck_require__(1149); -const shared = __nccwpck_require__(4601); +const packageData = __nccwpck_require__(3023); +const shared = __nccwpck_require__(7697); /** * Generates a Transport object for streaming @@ -29096,13 +47422,13 @@ module.exports = StreamTransport; /***/ }), -/***/ 9852: +/***/ 3755: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; -const services = __nccwpck_require__(6445); +const services = __nccwpck_require__(560); const normalized = {}; Object.keys(services).forEach(key => { @@ -29151,16 +47477,16 @@ module.exports = function (key) { /***/ }), -/***/ 6467: +/***/ 6473: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; const Stream = (__nccwpck_require__(2781).Stream); -const nmfetch = __nccwpck_require__(1387); +const nmfetch = __nccwpck_require__(7439); const crypto = __nccwpck_require__(6113); -const shared = __nccwpck_require__(4601); +const shared = __nccwpck_require__(7697); /** * XOAUTH2 access_token generator for Gmail. @@ -29649,6 +47975,457 @@ function getEnv(key) { exports.getProxyForUrl = getProxyForUrl; +/***/ }), + +/***/ 4328: +/***/ ((module) => { + +"use strict"; + + +/** Highest positive signed 32-bit float value */ +const maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 + +/** Bootstring parameters */ +const base = 36; +const tMin = 1; +const tMax = 26; +const skew = 38; +const damp = 700; +const initialBias = 72; +const initialN = 128; // 0x80 +const delimiter = '-'; // '\x2D' + +/** Regular expressions */ +const regexPunycode = /^xn--/; +const regexNonASCII = /[^\0-\x7F]/; // Note: U+007F DEL is excluded too. +const regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators + +/** Error messages */ +const errors = { + 'overflow': 'Overflow: input needs wider integers to process', + 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', + 'invalid-input': 'Invalid input' +}; + +/** Convenience shortcuts */ +const baseMinusTMin = base - tMin; +const floor = Math.floor; +const stringFromCharCode = String.fromCharCode; + +/*--------------------------------------------------------------------------*/ + +/** + * A generic error utility function. + * @private + * @param {String} type The error type. + * @returns {Error} Throws a `RangeError` with the applicable error message. + */ +function error(type) { + throw new RangeError(errors[type]); +} + +/** + * A generic `Array#map` utility function. + * @private + * @param {Array} array The array to iterate over. + * @param {Function} callback The function that gets called for every array + * item. + * @returns {Array} A new array of values returned by the callback function. + */ +function map(array, callback) { + const result = []; + let length = array.length; + while (length--) { + result[length] = callback(array[length]); + } + return result; +} + +/** + * A simple `Array#map`-like wrapper to work with domain name strings or email + * addresses. + * @private + * @param {String} domain The domain name or email address. + * @param {Function} callback The function that gets called for every + * character. + * @returns {String} A new string of characters returned by the callback + * function. + */ +function mapDomain(domain, callback) { + const parts = domain.split('@'); + let result = ''; + if (parts.length > 1) { + // In email addresses, only the domain name should be punycoded. Leave + // the local part (i.e. everything up to `@`) intact. + result = parts[0] + '@'; + domain = parts[1]; + } + // Avoid `split(regex)` for IE8 compatibility. See #17. + domain = domain.replace(regexSeparators, '\x2E'); + const labels = domain.split('.'); + const encoded = map(labels, callback).join('.'); + return result + encoded; +} + +/** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + * @see `punycode.ucs2.encode` + * @see + * @memberOf punycode.ucs2 + * @name decode + * @param {String} string The Unicode input string (UCS-2). + * @returns {Array} The new array of code points. + */ +function ucs2decode(string) { + const output = []; + let counter = 0; + const length = string.length; + while (counter < length) { + const value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // It's a high surrogate, and there is a next character. + const extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { // Low surrogate. + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // It's an unmatched surrogate; only append this code unit, in case the + // next code unit is the high surrogate of a surrogate pair. + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; +} + +/** + * Creates a string based on an array of numeric code points. + * @see `punycode.ucs2.decode` + * @memberOf punycode.ucs2 + * @name encode + * @param {Array} codePoints The array of numeric code points. + * @returns {String} The new Unicode string (UCS-2). + */ +const ucs2encode = codePoints => String.fromCodePoint(...codePoints); + +/** + * Converts a basic code point into a digit/integer. + * @see `digitToBasic()` + * @private + * @param {Number} codePoint The basic numeric code point value. + * @returns {Number} The numeric value of a basic code point (for use in + * representing integers) in the range `0` to `base - 1`, or `base` if + * the code point does not represent a value. + */ +const basicToDigit = function(codePoint) { + if (codePoint >= 0x30 && codePoint < 0x3A) { + return 26 + (codePoint - 0x30); + } + if (codePoint >= 0x41 && codePoint < 0x5B) { + return codePoint - 0x41; + } + if (codePoint >= 0x61 && codePoint < 0x7B) { + return codePoint - 0x61; + } + return base; +}; + +/** + * Converts a digit/integer into a basic code point. + * @see `basicToDigit()` + * @private + * @param {Number} digit The numeric value of a basic code point. + * @returns {Number} The basic code point whose value (when used for + * representing integers) is `digit`, which needs to be in the range + * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is + * used; else, the lowercase form is used. The behavior is undefined + * if `flag` is non-zero and `digit` has no uppercase form. + */ +const digitToBasic = function(digit, flag) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); +}; + +/** + * Bias adaptation function as per section 3.4 of RFC 3492. + * https://tools.ietf.org/html/rfc3492#section-3.4 + * @private + */ +const adapt = function(delta, numPoints, firstTime) { + let k = 0; + delta = firstTime ? floor(delta / damp) : delta >> 1; + delta += floor(delta / numPoints); + for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor(delta / baseMinusTMin); + } + return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); +}; + +/** + * Converts a Punycode string of ASCII-only symbols to a string of Unicode + * symbols. + * @memberOf punycode + * @param {String} input The Punycode string of ASCII-only symbols. + * @returns {String} The resulting string of Unicode symbols. + */ +const decode = function(input) { + // Don't use UCS-2. + const output = []; + const inputLength = input.length; + let i = 0; + let n = initialN; + let bias = initialBias; + + // Handle the basic code points: let `basic` be the number of input code + // points before the last delimiter, or `0` if there is none, then copy + // the first basic code points to the output. + + let basic = input.lastIndexOf(delimiter); + if (basic < 0) { + basic = 0; + } + + for (let j = 0; j < basic; ++j) { + // if it's not a basic code point + if (input.charCodeAt(j) >= 0x80) { + error('not-basic'); + } + output.push(input.charCodeAt(j)); + } + + // Main decoding loop: start just after the last delimiter if any basic code + // points were copied; start at the beginning otherwise. + + for (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { + + // `index` is the index of the next character to be consumed. + // Decode a generalized variable-length integer into `delta`, + // which gets added to `i`. The overflow checking is easier + // if we increase `i` as we go, then subtract off its starting + // value at the end to obtain `delta`. + const oldi = i; + for (let w = 1, k = base; /* no condition */; k += base) { + + if (index >= inputLength) { + error('invalid-input'); + } + + const digit = basicToDigit(input.charCodeAt(index++)); + + if (digit >= base) { + error('invalid-input'); + } + if (digit > floor((maxInt - i) / w)) { + error('overflow'); + } + + i += digit * w; + const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + + if (digit < t) { + break; + } + + const baseMinusT = base - t; + if (w > floor(maxInt / baseMinusT)) { + error('overflow'); + } + + w *= baseMinusT; + + } + + const out = output.length + 1; + bias = adapt(i - oldi, out, oldi == 0); + + // `i` was supposed to wrap around from `out` to `0`, + // incrementing `n` each time, so we'll fix that now: + if (floor(i / out) > maxInt - n) { + error('overflow'); + } + + n += floor(i / out); + i %= out; + + // Insert `n` at position `i` of the output. + output.splice(i++, 0, n); + + } + + return String.fromCodePoint(...output); +}; + +/** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + * @memberOf punycode + * @param {String} input The string of Unicode symbols. + * @returns {String} The resulting Punycode string of ASCII-only symbols. + */ +const encode = function(input) { + const output = []; + + // Convert the input in UCS-2 to an array of Unicode code points. + input = ucs2decode(input); + + // Cache the length. + const inputLength = input.length; + + // Initialize the state. + let n = initialN; + let delta = 0; + let bias = initialBias; + + // Handle the basic code points. + for (const currentValue of input) { + if (currentValue < 0x80) { + output.push(stringFromCharCode(currentValue)); + } + } + + const basicLength = output.length; + let handledCPCount = basicLength; + + // `handledCPCount` is the number of code points that have been handled; + // `basicLength` is the number of basic code points. + + // Finish the basic string with a delimiter unless it's empty. + if (basicLength) { + output.push(delimiter); + } + + // Main encoding loop: + while (handledCPCount < inputLength) { + + // All non-basic code points < n have been handled already. Find the next + // larger one: + let m = maxInt; + for (const currentValue of input) { + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } + + // Increase `delta` enough to advance the decoder's state to , + // but guard against overflow. + const handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { + error('overflow'); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + for (const currentValue of input) { + if (currentValue < n && ++delta > maxInt) { + error('overflow'); + } + if (currentValue === n) { + // Represent delta as a generalized variable-length integer. + let q = delta; + for (let k = base; /* no condition */; k += base) { + const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + if (q < t) { + break; + } + const qMinusT = q - t; + const baseMinusT = base - t; + output.push( + stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) + ); + q = floor(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q, 0))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength); + delta = 0; + ++handledCPCount; + } + } + + ++delta; + ++n; + + } + return output.join(''); +}; + +/** + * Converts a Punycode string representing a domain name or an email address + * to Unicode. Only the Punycoded parts of the input will be converted, i.e. + * it doesn't matter if you call it on a string that has already been + * converted to Unicode. + * @memberOf punycode + * @param {String} input The Punycoded domain name or email address to + * convert to Unicode. + * @returns {String} The Unicode representation of the given Punycode + * string. + */ +const toUnicode = function(input) { + return mapDomain(input, function(string) { + return regexPunycode.test(string) + ? decode(string.slice(4).toLowerCase()) + : string; + }); +}; + +/** + * Converts a Unicode string representing a domain name or an email address to + * Punycode. Only the non-ASCII parts of the domain name will be converted, + * i.e. it doesn't matter if you call it with a domain that's already in + * ASCII. + * @memberOf punycode + * @param {String} input The domain name or email address to convert, as a + * Unicode string. + * @returns {String} The Punycode representation of the given domain name or + * email address. + */ +const toASCII = function(input) { + return mapDomain(input, function(string) { + return regexNonASCII.test(string) + ? 'xn--' + encode(string) + : string; + }); +}; + +/*--------------------------------------------------------------------------*/ + +/** Define the public API */ +const punycode = { + /** + * A string representing the current Punycode.js version number. + * @memberOf punycode + * @type String + */ + 'version': '2.3.1', + /** + * An object of methods to convert from JavaScript's internal character + * representation (UCS-2) to Unicode code points, and back. + * @see + * @memberOf punycode + * @type Object + */ + 'ucs2': { + 'decode': ucs2decode, + 'encode': ucs2encode + }, + 'decode': decode, + 'encode': encode, + 'toASCII': toASCII, + 'toUnicode': toUnicode +}; + +module.exports = punycode; + + /***/ }), /***/ 4249: @@ -29931,53 +48708,31 @@ exports.debug = debug; // for test /***/ }), -/***/ 1053: -/***/ ((module) => { - -module.exports=/[\0-\x1F\x7F-\x9F]/ - -/***/ }), - -/***/ 2274: -/***/ ((module) => { - -module.exports=/[\xAD\u0600-\u0605\u061C\u06DD\u070F\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/ - -/***/ }), - -/***/ 1550: -/***/ ((module) => { - -module.exports=/[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4E\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/ - -/***/ }), +/***/ 4113: +/***/ ((__unused_webpack_module, exports) => { -/***/ 3347: -/***/ ((module) => { +"use strict"; -module.exports=/[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/ -/***/ }), +var regex$5 = /[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; -/***/ 784: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { +var regex$4 = /[\0-\x1F\x7F-\x9F]/; -"use strict"; +var regex$3 = /[\xAD\u0600-\u0605\u061C\u06DD\u070F\u0890\u0891\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC3F]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/; +var regex$2 = /[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDEAD\uDF55-\uDF59\uDF86-\uDF89]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDEB9\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2\uDF00-\uDF09]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDF43-\uDF4F\uDFFF]|\uD809[\uDC70-\uDC74]|\uD80B[\uDFF1\uDFF2]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/; -exports.Any = __nccwpck_require__(1393); -exports.Cc = __nccwpck_require__(1053); -exports.Cf = __nccwpck_require__(2274); -exports.P = __nccwpck_require__(1550); -exports.Z = __nccwpck_require__(3347); +var regex$1 = /[\$\+<->\^`\|~\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u07FE\u07FF\u0888\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D4F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20C0\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFF\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u31EF\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uAB6A\uAB6B\uFB29\uFBB2-\uFBC2\uFD40-\uFD4F\uFDCF\uFDFC-\uFDFF\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD]|\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD807[\uDFD5-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD833[\uDF50-\uDFC3]|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDEA\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838[\uDD4F\uDEFF]|\uD83B[\uDCAC\uDCB0\uDD2E\uDEF0\uDEF1]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED7\uDEDC-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF76\uDF7B-\uDFD9\uDFE0-\uDFEB\uDFF0]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDE53\uDE60-\uDE6D\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC5\uDECE-\uDEDB\uDEE0-\uDEE8\uDEF0-\uDEF8\uDF00-\uDF92\uDF94-\uDFCA]/; +var regex = /[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/; -/***/ }), +exports.Any = regex$5; +exports.Cc = regex$4; +exports.Cf = regex$3; +exports.P = regex$2; +exports.S = regex$1; +exports.Z = regex; -/***/ 1393: -/***/ ((module) => { - -module.exports=/[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/ /***/ }), @@ -30723,14 +49478,6 @@ module.exports = require("path"); /***/ }), -/***/ 5477: -/***/ ((module) => { - -"use strict"; -module.exports = require("punycode"); - -/***/ }), - /***/ 2781: /***/ ((module) => { @@ -30771,11 +49518,11 @@ module.exports = require("zlib"); /***/ }), -/***/ 7268: +/***/ 4778: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; -// Axios v1.3.6 Copyright (c) 2023 Matt Zabriskie and contributors +// Axios v1.6.8 Copyright (c) 2024 Matt Zabriskie and contributors const FormData$1 = __nccwpck_require__(6872); @@ -30784,10 +49531,10 @@ const proxyFromEnv = __nccwpck_require__(2170); const http = __nccwpck_require__(3685); const https = __nccwpck_require__(5687); const util = __nccwpck_require__(3837); -const followRedirects = __nccwpck_require__(1805); +const followRedirects = __nccwpck_require__(4033); const zlib = __nccwpck_require__(9796); const stream = __nccwpck_require__(2781); -const EventEmitter = __nccwpck_require__(2361); +const events = __nccwpck_require__(2361); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } @@ -30799,7 +49546,6 @@ const util__default = /*#__PURE__*/_interopDefaultLegacy(util); const followRedirects__default = /*#__PURE__*/_interopDefaultLegacy(followRedirects); const zlib__default = /*#__PURE__*/_interopDefaultLegacy(zlib); const stream__default = /*#__PURE__*/_interopDefaultLegacy(stream); -const EventEmitter__default = /*#__PURE__*/_interopDefaultLegacy(EventEmitter); function bind(fn, thisArg) { return function wrap() { @@ -31345,8 +50091,9 @@ const reduceDescriptors = (obj, reducer) => { const reducedDescriptors = {}; forEach(descriptors, (descriptor, name) => { - if (reducer(descriptor, name, obj) !== false) { - reducedDescriptors[name] = descriptor; + let ret; + if ((ret = reducer(descriptor, name, obj)) !== false) { + reducedDescriptors[name] = ret || descriptor; } }); @@ -31467,7 +50214,12 @@ const toJSONObject = (obj) => { return visit(obj, 0); }; -const utils = { +const isAsyncFn = kindOfTest('AsyncFunction'); + +const isThenable = (thing) => + thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch); + +const utils$1 = { isArray, isArrayBuffer, isBuffer, @@ -31516,7 +50268,9 @@ const utils = { ALPHABET, generateString, isSpecCompliantForm, - toJSONObject + toJSONObject, + isAsyncFn, + isThenable }; /** @@ -31547,7 +50301,7 @@ function AxiosError(message, code, config, request, response) { response && (this.response = response); } -utils.inherits(AxiosError, Error, { +utils$1.inherits(AxiosError, Error, { toJSON: function toJSON() { return { // Standard @@ -31562,7 +50316,7 @@ utils.inherits(AxiosError, Error, { columnNumber: this.columnNumber, stack: this.stack, // Axios - config: utils.toJSONObject(this.config), + config: utils$1.toJSONObject(this.config), code: this.code, status: this.response && this.response.status ? this.response.status : null }; @@ -31597,7 +50351,7 @@ Object.defineProperty(prototype$1, 'isAxiosError', {value: true}); AxiosError.from = (error, code, config, request, response, customProps) => { const axiosError = Object.create(prototype$1); - utils.toFlatObject(error, axiosError, function filter(obj) { + utils$1.toFlatObject(error, axiosError, function filter(obj) { return obj !== Error.prototype; }, prop => { return prop !== 'isAxiosError'; @@ -31622,7 +50376,7 @@ AxiosError.from = (error, code, config, request, response, customProps) => { * @returns {boolean} */ function isVisitable(thing) { - return utils.isPlainObject(thing) || utils.isArray(thing); + return utils$1.isPlainObject(thing) || utils$1.isArray(thing); } /** @@ -31633,7 +50387,7 @@ function isVisitable(thing) { * @returns {string} the key without the brackets. */ function removeBrackets(key) { - return utils.endsWith(key, '[]') ? key.slice(0, -2) : key; + return utils$1.endsWith(key, '[]') ? key.slice(0, -2) : key; } /** @@ -31662,10 +50416,10 @@ function renderKey(path, key, dots) { * @returns {boolean} */ function isFlatArray(arr) { - return utils.isArray(arr) && !arr.some(isVisitable); + return utils$1.isArray(arr) && !arr.some(isVisitable); } -const predicates = utils.toFlatObject(utils, {}, null, function filter(prop) { +const predicates = utils$1.toFlatObject(utils$1, {}, null, function filter(prop) { return /^is[A-Z]/.test(prop); }); @@ -31693,7 +50447,7 @@ const predicates = utils.toFlatObject(utils, {}, null, function filter(prop) { * @returns */ function toFormData(obj, formData, options) { - if (!utils.isObject(obj)) { + if (!utils$1.isObject(obj)) { throw new TypeError('target must be an object'); } @@ -31701,13 +50455,13 @@ function toFormData(obj, formData, options) { formData = formData || new (FormData__default["default"] || FormData)(); // eslint-disable-next-line no-param-reassign - options = utils.toFlatObject(options, { + options = utils$1.toFlatObject(options, { metaTokens: true, dots: false, indexes: false }, false, function defined(option, source) { // eslint-disable-next-line no-eq-null,eqeqeq - return !utils.isUndefined(source[option]); + return !utils$1.isUndefined(source[option]); }); const metaTokens = options.metaTokens; @@ -31716,24 +50470,24 @@ function toFormData(obj, formData, options) { const dots = options.dots; const indexes = options.indexes; const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob; - const useBlob = _Blob && utils.isSpecCompliantForm(formData); + const useBlob = _Blob && utils$1.isSpecCompliantForm(formData); - if (!utils.isFunction(visitor)) { + if (!utils$1.isFunction(visitor)) { throw new TypeError('visitor must be a function'); } function convertValue(value) { if (value === null) return ''; - if (utils.isDate(value)) { + if (utils$1.isDate(value)) { return value.toISOString(); } - if (!useBlob && utils.isBlob(value)) { + if (!useBlob && utils$1.isBlob(value)) { throw new AxiosError('Blob is not supported. Use a Buffer instead.'); } - if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) { + if (utils$1.isArrayBuffer(value) || utils$1.isTypedArray(value)) { return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value); } @@ -31754,20 +50508,20 @@ function toFormData(obj, formData, options) { let arr = value; if (value && !path && typeof value === 'object') { - if (utils.endsWith(key, '{}')) { + if (utils$1.endsWith(key, '{}')) { // eslint-disable-next-line no-param-reassign key = metaTokens ? key : key.slice(0, -2); // eslint-disable-next-line no-param-reassign value = JSON.stringify(value); } else if ( - (utils.isArray(value) && isFlatArray(value)) || - ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value)) + (utils$1.isArray(value) && isFlatArray(value)) || + ((utils$1.isFileList(value) || utils$1.endsWith(key, '[]')) && (arr = utils$1.toArray(value)) )) { // eslint-disable-next-line no-param-reassign key = removeBrackets(key); arr.forEach(function each(el, index) { - !(utils.isUndefined(el) || el === null) && formData.append( + !(utils$1.isUndefined(el) || el === null) && formData.append( // eslint-disable-next-line no-nested-ternary indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'), convertValue(el) @@ -31795,7 +50549,7 @@ function toFormData(obj, formData, options) { }); function build(value, path) { - if (utils.isUndefined(value)) return; + if (utils$1.isUndefined(value)) return; if (stack.indexOf(value) !== -1) { throw Error('Circular reference detected in ' + path.join('.')); @@ -31803,9 +50557,9 @@ function toFormData(obj, formData, options) { stack.push(value); - utils.forEach(value, function each(el, key) { - const result = !(utils.isUndefined(el) || el === null) && visitor.call( - formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers + utils$1.forEach(value, function each(el, key) { + const result = !(utils$1.isUndefined(el) || el === null) && visitor.call( + formData, el, utils$1.isString(key) ? key.trim() : key, path, exposedHelpers ); if (result === true) { @@ -31816,7 +50570,7 @@ function toFormData(obj, formData, options) { stack.pop(); } - if (!utils.isObject(obj)) { + if (!utils$1.isObject(obj)) { throw new TypeError('data must be an object'); } @@ -31920,7 +50674,7 @@ function buildURL(url, params, options) { if (serializeFn) { serializedParams = serializeFn(params, options); } else { - serializedParams = utils.isURLSearchParams(params) ? + serializedParams = utils$1.isURLSearchParams(params) ? params.toString() : new AxiosURLSearchParams(params, options).toString(_encode); } @@ -31995,7 +50749,7 @@ class InterceptorManager { * @returns {void} */ forEach(fn) { - utils.forEach(this.handlers, function forEachHandler(h) { + utils$1.forEach(this.handlers, function forEachHandler(h) { if (h !== null) { fn(h); } @@ -32013,7 +50767,7 @@ const transitionalDefaults = { const URLSearchParams = url__default["default"].URLSearchParams; -const platform = { +const platform$1 = { isNode: true, classes: { URLSearchParams, @@ -32023,10 +50777,64 @@ const platform = { protocols: [ 'http', 'https', 'file', 'data' ] }; +const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined'; + +/** + * Determine if we're running in a standard browser environment + * + * This allows axios to run in a web worker, and react-native. + * Both environments support XMLHttpRequest, but not fully standard globals. + * + * web workers: + * typeof window -> undefined + * typeof document -> undefined + * + * react-native: + * navigator.product -> 'ReactNative' + * nativescript + * navigator.product -> 'NativeScript' or 'NS' + * + * @returns {boolean} + */ +const hasStandardBrowserEnv = ( + (product) => { + return hasBrowserEnv && ['ReactNative', 'NativeScript', 'NS'].indexOf(product) < 0 + })(typeof navigator !== 'undefined' && navigator.product); + +/** + * Determine if we're running in a standard browser webWorker environment + * + * Although the `isStandardBrowserEnv` method indicates that + * `allows axios to run in a web worker`, the WebWorker will still be + * filtered out due to its judgment standard + * `typeof window !== 'undefined' && typeof document !== 'undefined'`. + * This leads to a problem when axios post `FormData` in webWorker + */ +const hasStandardBrowserWebWorkerEnv = (() => { + return ( + typeof WorkerGlobalScope !== 'undefined' && + // eslint-disable-next-line no-undef + self instanceof WorkerGlobalScope && + typeof self.importScripts === 'function' + ); +})(); + +const utils = /*#__PURE__*/Object.freeze({ + __proto__: null, + hasBrowserEnv: hasBrowserEnv, + hasStandardBrowserWebWorkerEnv: hasStandardBrowserWebWorkerEnv, + hasStandardBrowserEnv: hasStandardBrowserEnv +}); + +const platform = { + ...utils, + ...platform$1 +}; + function toURLEncodedForm(data, options) { return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({ visitor: function(value, key, path, helpers) { - if (utils.isBuffer(value)) { + if (platform.isNode && utils$1.isBuffer(value)) { this.append(key, value.toString('base64')); return false; } @@ -32048,7 +50856,7 @@ function parsePropPath(name) { // foo.x.y.z // foo-x-y-z // foo x y z - return utils.matchAll(/\w+|\[(\w*)]/g, name).map(match => { + return utils$1.matchAll(/\w+|\[(\w*)]/g, name).map(match => { return match[0] === '[]' ? '' : match[1] || match[0]; }); } @@ -32083,12 +50891,15 @@ function arrayToObject(arr) { function formDataToJSON(formData) { function buildPath(path, value, target, index) { let name = path[index++]; + + if (name === '__proto__') return true; + const isNumericKey = Number.isFinite(+name); const isLast = index >= path.length; - name = !name && utils.isArray(target) ? target.length : name; + name = !name && utils$1.isArray(target) ? target.length : name; if (isLast) { - if (utils.hasOwnProp(target, name)) { + if (utils$1.hasOwnProp(target, name)) { target[name] = [target[name], value]; } else { target[name] = value; @@ -32097,23 +50908,23 @@ function formDataToJSON(formData) { return !isNumericKey; } - if (!target[name] || !utils.isObject(target[name])) { + if (!target[name] || !utils$1.isObject(target[name])) { target[name] = []; } const result = buildPath(path, value, target[name], index); - if (result && utils.isArray(target[name])) { + if (result && utils$1.isArray(target[name])) { target[name] = arrayToObject(target[name]); } return !isNumericKey; } - if (utils.isFormData(formData) && utils.isFunction(formData.entries)) { + if (utils$1.isFormData(formData) && utils$1.isFunction(formData.entries)) { const obj = {}; - utils.forEachEntry(formData, (name, value) => { + utils$1.forEachEntry(formData, (name, value) => { buildPath(parsePropPath(name), value, obj, 0); }); @@ -32123,10 +50934,6 @@ function formDataToJSON(formData) { return null; } -const DEFAULT_CONTENT_TYPE = { - 'Content-Type': undefined -}; - /** * It takes a string, tries to parse it, and if it fails, it returns the stringified version * of the input @@ -32138,10 +50945,10 @@ const DEFAULT_CONTENT_TYPE = { * @returns {string} A stringified version of the rawValue. */ function stringifySafely(rawValue, parser, encoder) { - if (utils.isString(rawValue)) { + if (utils$1.isString(rawValue)) { try { (parser || JSON.parse)(rawValue); - return utils.trim(rawValue); + return utils$1.trim(rawValue); } catch (e) { if (e.name !== 'SyntaxError') { throw e; @@ -32161,33 +50968,30 @@ const defaults = { transformRequest: [function transformRequest(data, headers) { const contentType = headers.getContentType() || ''; const hasJSONContentType = contentType.indexOf('application/json') > -1; - const isObjectPayload = utils.isObject(data); + const isObjectPayload = utils$1.isObject(data); - if (isObjectPayload && utils.isHTMLForm(data)) { + if (isObjectPayload && utils$1.isHTMLForm(data)) { data = new FormData(data); } - const isFormData = utils.isFormData(data); + const isFormData = utils$1.isFormData(data); if (isFormData) { - if (!hasJSONContentType) { - return data; - } return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data; } - if (utils.isArrayBuffer(data) || - utils.isBuffer(data) || - utils.isStream(data) || - utils.isFile(data) || - utils.isBlob(data) + if (utils$1.isArrayBuffer(data) || + utils$1.isBuffer(data) || + utils$1.isStream(data) || + utils$1.isFile(data) || + utils$1.isBlob(data) ) { return data; } - if (utils.isArrayBufferView(data)) { + if (utils$1.isArrayBufferView(data)) { return data.buffer; } - if (utils.isURLSearchParams(data)) { + if (utils$1.isURLSearchParams(data)) { headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false); return data.toString(); } @@ -32199,7 +51003,7 @@ const defaults = { return toURLEncodedForm(data, this.formSerializer).toString(); } - if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) { + if ((isFileList = utils$1.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) { const _FormData = this.env && this.env.FormData; return toFormData( @@ -32223,7 +51027,7 @@ const defaults = { const forcedJSONParsing = transitional && transitional.forcedJSONParsing; const JSONRequested = this.responseType === 'json'; - if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) { + if (data && utils$1.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) { const silentJSONParsing = transitional && transitional.silentJSONParsing; const strictJSONParsing = !silentJSONParsing && JSONRequested; @@ -32265,24 +51069,21 @@ const defaults = { headers: { common: { - 'Accept': 'application/json, text/plain, */*' + 'Accept': 'application/json, text/plain, */*', + 'Content-Type': undefined } } }; -utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { +utils$1.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => { defaults.headers[method] = {}; }); -utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { - defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE); -}); - const defaults$1 = defaults; // RawAxiosHeaders whose duplicates are ignored by node // c.f. https://nodejs.org/api/http.html#http_message_headers -const ignoreDuplicateOf = utils.toObjectSet([ +const ignoreDuplicateOf = utils$1.toObjectSet([ 'age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', @@ -32343,7 +51144,7 @@ function normalizeValue(value) { return value; } - return utils.isArray(value) ? value.map(normalizeValue) : String(value); + return utils$1.isArray(value) ? value.map(normalizeValue) : String(value); } function parseTokens(str) { @@ -32361,7 +51162,7 @@ function parseTokens(str) { const isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim()); function matchHeaderValue(context, value, header, filter, isHeaderNameFilter) { - if (utils.isFunction(filter)) { + if (utils$1.isFunction(filter)) { return filter.call(this, value, header); } @@ -32369,13 +51170,13 @@ function matchHeaderValue(context, value, header, filter, isHeaderNameFilter) { value = header; } - if (!utils.isString(value)) return; + if (!utils$1.isString(value)) return; - if (utils.isString(filter)) { + if (utils$1.isString(filter)) { return value.indexOf(filter) !== -1; } - if (utils.isRegExp(filter)) { + if (utils$1.isRegExp(filter)) { return filter.test(value); } } @@ -32388,7 +51189,7 @@ function formatHeader(header) { } function buildAccessors(obj, header) { - const accessorName = utils.toCamelCase(' ' + header); + const accessorName = utils$1.toCamelCase(' ' + header); ['get', 'set', 'has'].forEach(methodName => { Object.defineProperty(obj, methodName + accessorName, { @@ -32415,7 +51216,7 @@ class AxiosHeaders { throw new Error('header name must be a non-empty string'); } - const key = utils.findKey(self, lHeader); + const key = utils$1.findKey(self, lHeader); if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) { self[key || _header] = normalizeValue(_value); @@ -32423,11 +51224,11 @@ class AxiosHeaders { } const setHeaders = (headers, _rewrite) => - utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite)); + utils$1.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite)); - if (utils.isPlainObject(header) || header instanceof this.constructor) { + if (utils$1.isPlainObject(header) || header instanceof this.constructor) { setHeaders(header, valueOrRewrite); - } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) { + } else if(utils$1.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) { setHeaders(parseHeaders(header), valueOrRewrite); } else { header != null && setHeader(valueOrRewrite, header, rewrite); @@ -32440,7 +51241,7 @@ class AxiosHeaders { header = normalizeHeader(header); if (header) { - const key = utils.findKey(this, header); + const key = utils$1.findKey(this, header); if (key) { const value = this[key]; @@ -32453,11 +51254,11 @@ class AxiosHeaders { return parseTokens(value); } - if (utils.isFunction(parser)) { + if (utils$1.isFunction(parser)) { return parser.call(this, value, key); } - if (utils.isRegExp(parser)) { + if (utils$1.isRegExp(parser)) { return parser.exec(value); } @@ -32470,7 +51271,7 @@ class AxiosHeaders { header = normalizeHeader(header); if (header) { - const key = utils.findKey(this, header); + const key = utils$1.findKey(this, header); return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher))); } @@ -32486,7 +51287,7 @@ class AxiosHeaders { _header = normalizeHeader(_header); if (_header) { - const key = utils.findKey(self, _header); + const key = utils$1.findKey(self, _header); if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) { delete self[key]; @@ -32496,7 +51297,7 @@ class AxiosHeaders { } } - if (utils.isArray(header)) { + if (utils$1.isArray(header)) { header.forEach(deleteHeader); } else { deleteHeader(header); @@ -32525,8 +51326,8 @@ class AxiosHeaders { const self = this; const headers = {}; - utils.forEach(this, (value, header) => { - const key = utils.findKey(headers, header); + utils$1.forEach(this, (value, header) => { + const key = utils$1.findKey(headers, header); if (key) { self[key] = normalizeValue(value); @@ -32555,8 +51356,8 @@ class AxiosHeaders { toJSON(asStrings) { const obj = Object.create(null); - utils.forEach(this, (value, header) => { - value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value); + utils$1.forEach(this, (value, header) => { + value != null && value !== false && (obj[header] = asStrings && utils$1.isArray(value) ? value.join(', ') : value); }); return obj; @@ -32603,7 +51404,7 @@ class AxiosHeaders { } } - utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header); + utils$1.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header); return this; } @@ -32611,8 +51412,18 @@ class AxiosHeaders { AxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']); -utils.freezeMethods(AxiosHeaders.prototype); -utils.freezeMethods(AxiosHeaders); +// reserved names hotfix +utils$1.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => { + let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set` + return { + get: () => value, + set(headerValue) { + this[mapped] = headerValue; + } + } +}); + +utils$1.freezeMethods(AxiosHeaders); const AxiosHeaders$1 = AxiosHeaders; @@ -32630,7 +51441,7 @@ function transformData(fns, response) { const headers = AxiosHeaders$1.from(context.headers); let data = context.data; - utils.forEach(fns, function transform(fn) { + utils$1.forEach(fns, function transform(fn) { data = fn.call(config, data, headers.normalize(), response ? response.status : undefined); }); @@ -32658,7 +51469,7 @@ function CanceledError(message, config, request) { this.name = 'CanceledError'; } -utils.inherits(CanceledError, AxiosError, { +utils$1.inherits(CanceledError, AxiosError, { __CANCEL__: true }); @@ -32710,7 +51521,7 @@ function isAbsoluteURL(url) { */ function combineURLs(baseURL, relativeURL) { return relativeURL - ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '') + ? baseURL.replace(/\/?\/$/, '') + '/' + relativeURL.replace(/^\/+/, '') : baseURL; } @@ -32731,7 +51542,7 @@ function buildFullPath(baseURL, requestedURL) { return requestedURL; } -const VERSION = "1.3.6"; +const VERSION = "1.6.8"; function parseProtocol(url) { const match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url); @@ -32872,7 +51683,7 @@ const kInternals = Symbol('internals'); class AxiosTransformStream extends stream__default["default"].Transform{ constructor(options) { - options = utils.toFlatObject(options, { + options = utils$1.toFlatObject(options, { maxRate: 0, chunkSize: 64 * 1024, minChunkSize: 100, @@ -32880,7 +51691,7 @@ class AxiosTransformStream extends stream__default["default"].Transform{ ticksRate: 2, samplesCount: 15 }, null, (prop, source) => { - return !utils.isUndefined(source[prop]); + return !utils$1.isUndefined(source[prop]); }); super({ @@ -33069,7 +51880,7 @@ const readBlob = async function* (blob) { const readBlob$1 = readBlob; -const BOUNDARY_ALPHABET = utils.ALPHABET.ALPHA_DIGIT + '-_'; +const BOUNDARY_ALPHABET = utils$1.ALPHABET.ALPHA_DIGIT + '-_'; const textEncoder = new util.TextEncoder(); @@ -33080,7 +51891,7 @@ const CRLF_BYTES_COUNT = 2; class FormDataPart { constructor(name, value) { const {escapeName} = this.constructor; - const isStringValue = utils.isString(value); + const isStringValue = utils$1.isString(value); let headers = `Content-Disposition: form-data; name="${escapeName(name)}"${ !isStringValue && value.name ? `; filename="${escapeName(value.name)}"` : '' @@ -33107,7 +51918,7 @@ class FormDataPart { const {value} = this; - if(utils.isTypedArray(value)) { + if(utils$1.isTypedArray(value)) { yield value; } else { yield* readBlob$1(value); @@ -33129,10 +51940,10 @@ const formDataToStream = (form, headersHandler, options) => { const { tag = 'form-data-boundary', size = 25, - boundary = tag + '-' + utils.generateString(size, BOUNDARY_ALPHABET) + boundary = tag + '-' + utils$1.generateString(size, BOUNDARY_ALPHABET) } = options || {}; - if(!utils.isFormData(form)) { + if(!utils$1.isFormData(form)) { throw TypeError('FormData instance required'); } @@ -33152,7 +51963,7 @@ const formDataToStream = (form, headersHandler, options) => { contentLength += boundaryBytes.byteLength * parts.length; - contentLength = utils.toFiniteNumber(contentLength); + contentLength = utils$1.toFiniteNumber(contentLength); const computedHeaders = { 'Content-Type': `multipart/form-data; boundary=${boundary}` @@ -33201,6 +52012,21 @@ class ZlibHeaderTransformStream extends stream__default["default"].Transform { const ZlibHeaderTransformStream$1 = ZlibHeaderTransformStream; +const callbackify = (fn, reducer) => { + return utils$1.isAsyncFn(fn) ? function (...args) { + const cb = args.pop(); + fn.apply(this, args).then((value) => { + try { + reducer ? cb(null, ...reducer(value)) : cb(null, value); + } catch (err) { + cb(err); + } + }, cb); + } : fn; +}; + +const callbackify$1 = callbackify; + const zlibOptions = { flush: zlib__default["default"].constants.Z_SYNC_FLUSH, finishFlush: zlib__default["default"].constants.Z_SYNC_FLUSH @@ -33211,7 +52037,7 @@ const brotliOptions = { finishFlush: zlib__default["default"].constants.BROTLI_OPERATION_FLUSH }; -const isBrotliSupported = utils.isFunction(zlib__default["default"].createBrotliDecompress); +const isBrotliSupported = utils$1.isFunction(zlib__default["default"].createBrotliDecompress); const {http: httpFollow, https: httpsFollow} = followRedirects__default["default"]; @@ -33229,12 +52055,12 @@ const supportedProtocols = platform.protocols.map(protocol => { * * @returns {Object} */ -function dispatchBeforeRedirect(options) { +function dispatchBeforeRedirect(options, responseDetails) { if (options.beforeRedirects.proxy) { options.beforeRedirects.proxy(options); } if (options.beforeRedirects.config) { - options.beforeRedirects.config(options); + options.beforeRedirects.config(options, responseDetails); } } @@ -33291,7 +52117,7 @@ function setProxy(options, configProxy, location) { }; } -const isHttpAdapterSupported = typeof process !== 'undefined' && utils.kindOf(process) === 'process'; +const isHttpAdapterSupported = typeof process !== 'undefined' && utils$1.kindOf(process) === 'process'; // temporary hotfix @@ -33320,18 +52146,46 @@ const wrapAsync = (asyncExecutor) => { }) }; +const resolveFamily = ({address, family}) => { + if (!utils$1.isString(address)) { + throw TypeError('address must be a string'); + } + return ({ + address, + family: family || (address.indexOf('.') < 0 ? 6 : 4) + }); +}; + +const buildAddressEntry = (address, family) => resolveFamily(utils$1.isObject(address) ? address : {address, family}); + /*eslint consistent-return:0*/ const httpAdapter = isHttpAdapterSupported && function httpAdapter(config) { return wrapAsync(async function dispatchHttpRequest(resolve, reject, onDone) { - let {data} = config; + let {data, lookup, family} = config; const {responseType, responseEncoding} = config; const method = config.method.toUpperCase(); let isDone; let rejected = false; let req; + if (lookup) { + const _lookup = callbackify$1(lookup, (value) => utils$1.isArray(value) ? value : [value]); + // hotfix to support opt.all option which is required for node 20.x + lookup = (hostname, opt, cb) => { + _lookup(hostname, opt, (err, arg0, arg1) => { + if (err) { + return cb(err); + } + + const addresses = utils$1.isArray(arg0) ? arg0.map(addr => buildAddressEntry(addr)) : [buildAddressEntry(arg0, arg1)]; + + opt.all ? cb(err, addresses) : cb(err, addresses[0].address, addresses[0].family); + }); + }; + } + // temporary internal emitter until the AxiosRequest class will be implemented - const emitter = new EventEmitter__default["default"](); + const emitter = new events.EventEmitter(); const onFinished = () => { if (config.cancelToken) { @@ -33395,7 +52249,7 @@ const httpAdapter = isHttpAdapterSupported && function httpAdapter(config) { convertedData = convertedData.toString(responseEncoding); if (!responseEncoding || responseEncoding === 'utf8') { - convertedData = utils.stripBOM(convertedData); + convertedData = utils$1.stripBOM(convertedData); } } else if (responseType === 'stream') { convertedData = stream__default["default"].Readable.from(convertedData); @@ -33433,7 +52287,7 @@ const httpAdapter = isHttpAdapterSupported && function httpAdapter(config) { let maxDownloadRate = undefined; // support for spec compliant FormData objects - if (utils.isSpecCompliantForm(data)) { + if (utils$1.isSpecCompliantForm(data)) { const userBoundary = headers.getContentType(/boundary=([-_\w\d]{10,70})/i); data = formDataToStream$1(data, (formHeaders) => { @@ -33443,7 +52297,7 @@ const httpAdapter = isHttpAdapterSupported && function httpAdapter(config) { boundary: userBoundary && userBoundary[1] || undefined }); // support for https://www.npmjs.com/package/form-data api - } else if (utils.isFormData(data) && utils.isFunction(data.getHeaders)) { + } else if (utils$1.isFormData(data) && utils$1.isFunction(data.getHeaders)) { headers.set(data.getHeaders()); if (!headers.hasContentLength()) { @@ -33454,14 +52308,14 @@ const httpAdapter = isHttpAdapterSupported && function httpAdapter(config) { } catch (e) { } } - } else if (utils.isBlob(data)) { + } else if (utils$1.isBlob(data)) { data.size && headers.setContentType(data.type || 'application/octet-stream'); headers.setContentLength(data.size || 0); data = stream__default["default"].Readable.from(readBlob$1(data)); - } else if (data && !utils.isStream(data)) { - if (Buffer.isBuffer(data)) ; else if (utils.isArrayBuffer(data)) { + } else if (data && !utils$1.isStream(data)) { + if (Buffer.isBuffer(data)) ; else if (utils$1.isArrayBuffer(data)) { data = Buffer.from(new Uint8Array(data)); - } else if (utils.isString(data)) { + } else if (utils$1.isString(data)) { data = Buffer.from(data, 'utf-8'); } else { return reject(new AxiosError( @@ -33483,9 +52337,9 @@ const httpAdapter = isHttpAdapterSupported && function httpAdapter(config) { } } - const contentLength = utils.toFiniteNumber(headers.getContentLength()); + const contentLength = utils$1.toFiniteNumber(headers.getContentLength()); - if (utils.isArray(maxRate)) { + if (utils$1.isArray(maxRate)) { maxUploadRate = maxRate[0]; maxDownloadRate = maxRate[1]; } else { @@ -33493,14 +52347,14 @@ const httpAdapter = isHttpAdapterSupported && function httpAdapter(config) { } if (data && (onUploadProgress || maxUploadRate)) { - if (!utils.isStream(data)) { + if (!utils$1.isStream(data)) { data = stream__default["default"].Readable.from(data, {objectMode: false}); } data = stream__default["default"].pipeline([data, new AxiosTransformStream$1({ length: contentLength, - maxRate: utils.toFiniteNumber(maxUploadRate) - })], utils.noop); + maxRate: utils$1.toFiniteNumber(maxUploadRate) + })], utils$1.noop); onUploadProgress && data.on('progress', progress => { onUploadProgress(Object.assign(progress, { @@ -33553,10 +52407,14 @@ const httpAdapter = isHttpAdapterSupported && function httpAdapter(config) { agents: { http: config.httpAgent, https: config.httpsAgent }, auth, protocol, + family, beforeRedirect: dispatchBeforeRedirect, beforeRedirects: {} }; + // cacheable-lookup integration hotfix + !utils$1.isUndefined(lookup) && (options.lookup = lookup); + if (config.socketPath) { options.socketPath = config.socketPath; } else { @@ -33603,8 +52461,8 @@ const httpAdapter = isHttpAdapterSupported && function httpAdapter(config) { if (onDownloadProgress) { const transformStream = new AxiosTransformStream$1({ - length: utils.toFiniteNumber(responseLength), - maxRate: utils.toFiniteNumber(maxDownloadRate) + length: utils$1.toFiniteNumber(responseLength), + maxRate: utils$1.toFiniteNumber(maxDownloadRate) }); onDownloadProgress && transformStream.on('progress', progress => { @@ -33630,7 +52488,7 @@ const httpAdapter = isHttpAdapterSupported && function httpAdapter(config) { delete res.headers['content-encoding']; } - switch (res.headers['content-encoding']) { + switch ((res.headers['content-encoding'] || '').toLowerCase()) { /*eslint default-case:0*/ case 'gzip': case 'x-gzip': @@ -33659,7 +52517,7 @@ const httpAdapter = isHttpAdapterSupported && function httpAdapter(config) { } } - responseStream = streams.length > 1 ? stream__default["default"].pipeline(streams, utils.noop) : streams[0]; + responseStream = streams.length > 1 ? stream__default["default"].pipeline(streams, utils$1.noop) : streams[0]; const offListeners = stream__default["default"].finished(responseStream, () => { offListeners(); @@ -33721,12 +52579,12 @@ const httpAdapter = isHttpAdapterSupported && function httpAdapter(config) { if (responseType !== 'arraybuffer') { responseData = responseData.toString(responseEncoding); if (!responseEncoding || responseEncoding === 'utf8') { - responseData = utils.stripBOM(responseData); + responseData = utils$1.stripBOM(responseData); } } response.data = responseData; } catch (err) { - reject(AxiosError.from(err, null, config, response.request, response)); + return reject(AxiosError.from(err, null, config, response.request, response)); } settle(resolve, reject, response); }); @@ -33763,7 +52621,7 @@ const httpAdapter = isHttpAdapterSupported && function httpAdapter(config) { // This is forcing a int timeout to avoid problems if the `req` interface doesn't handle other types. const timeout = parseInt(config.timeout, 10); - if (isNaN(timeout)) { + if (Number.isNaN(timeout)) { reject(new AxiosError( 'error trying to parse `config.timeout` to int', AxiosError.ERR_BAD_OPTION_VALUE, @@ -33798,7 +52656,7 @@ const httpAdapter = isHttpAdapterSupported && function httpAdapter(config) { // Send the request - if (utils.isStream(data)) { + if (utils$1.isStream(data)) { let ended = false; let errored = false; @@ -33824,55 +52682,46 @@ const httpAdapter = isHttpAdapterSupported && function httpAdapter(config) { }); }; -const cookies = platform.isStandardBrowserEnv ? +const cookies = platform.hasStandardBrowserEnv ? -// Standard browser envs support document.cookie - (function standardBrowserEnv() { - return { - write: function write(name, value, expires, path, domain, secure) { - const cookie = []; - cookie.push(name + '=' + encodeURIComponent(value)); + // Standard browser envs support document.cookie + { + write(name, value, expires, path, domain, secure) { + const cookie = [name + '=' + encodeURIComponent(value)]; - if (utils.isNumber(expires)) { - cookie.push('expires=' + new Date(expires).toGMTString()); - } + utils$1.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString()); - if (utils.isString(path)) { - cookie.push('path=' + path); - } + utils$1.isString(path) && cookie.push('path=' + path); - if (utils.isString(domain)) { - cookie.push('domain=' + domain); - } + utils$1.isString(domain) && cookie.push('domain=' + domain); - if (secure === true) { - cookie.push('secure'); - } + secure === true && cookie.push('secure'); - document.cookie = cookie.join('; '); - }, + document.cookie = cookie.join('; '); + }, - read: function read(name) { - const match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); - return (match ? decodeURIComponent(match[3]) : null); - }, + read(name) { + const match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); + return (match ? decodeURIComponent(match[3]) : null); + }, - remove: function remove(name) { - this.write(name, '', Date.now() - 86400000); - } - }; - })() : + remove(name) { + this.write(name, '', Date.now() - 86400000); + } + } -// Non standard browser env (web workers, react-native) lack needed support. - (function nonStandardBrowserEnv() { - return { - write: function write() {}, - read: function read() { return null; }, - remove: function remove() {} - }; - })(); + : -const isURLSameOrigin = platform.isStandardBrowserEnv ? + // Non-standard browser env (web workers, react-native) lack needed support. + { + write() {}, + read() { + return null; + }, + remove() {} + }; + +const isURLSameOrigin = platform.hasStandardBrowserEnv ? // Standard browser envs have full support of the APIs needed to test // whether the request URL is of the same origin as current location. @@ -33882,7 +52731,7 @@ const isURLSameOrigin = platform.isStandardBrowserEnv ? let originURL; /** - * Parse a URL to discover it's components + * Parse a URL to discover its components * * @param {String} url The URL to be parsed * @returns {Object} @@ -33922,7 +52771,7 @@ const isURLSameOrigin = platform.isStandardBrowserEnv ? * @returns {boolean} True if URL shares the same origin, otherwise false */ return function isURLSameOrigin(requestURL) { - const parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL; + const parsed = (utils$1.isString(requestURL)) ? resolveURL(requestURL) : requestURL; return (parsed.protocol === originURL.protocol && parsed.host === originURL.host); }; @@ -33970,7 +52819,7 @@ const xhrAdapter = isXHRAdapterSupported && function (config) { return new Promise(function dispatchXhrRequest(resolve, reject) { let requestData = config.data; const requestHeaders = AxiosHeaders$1.from(config.headers).normalize(); - const responseType = config.responseType; + let {responseType, withXSRFToken} = config; let onCanceled; function done() { if (config.cancelToken) { @@ -33982,8 +52831,16 @@ const xhrAdapter = isXHRAdapterSupported && function (config) { } } - if (utils.isFormData(requestData) && (platform.isStandardBrowserEnv || platform.isStandardBrowserWebWorkerEnv)) { - requestHeaders.setContentType(false); // Let the browser set it + let contentType; + + if (utils$1.isFormData(requestData)) { + if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) { + requestHeaders.setContentType(false); // Let the browser set it + } else if ((contentType = requestHeaders.getContentType()) !== false) { + // fix semicolon duplication issue for ReactNative FormData implementation + const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : []; + requestHeaders.setContentType([type || 'multipart/form-data', ...tokens].join('; ')); + } } let request = new XMLHttpRequest(); @@ -34098,13 +52955,16 @@ const xhrAdapter = isXHRAdapterSupported && function (config) { // Add xsrf header // This is only done if running in a standard browser environment. // Specifically not if we're in a web worker, or react-native. - if (platform.isStandardBrowserEnv) { - // Add xsrf header - const xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) - && config.xsrfCookieName && cookies.read(config.xsrfCookieName); + if(platform.hasStandardBrowserEnv) { + withXSRFToken && utils$1.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(config)); + + if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(fullPath))) { + // Add xsrf header + const xsrfValue = config.xsrfHeaderName && config.xsrfCookieName && cookies.read(config.xsrfCookieName); - if (xsrfValue) { - requestHeaders.set(config.xsrfHeaderName, xsrfValue); + if (xsrfValue) { + requestHeaders.set(config.xsrfHeaderName, xsrfValue); + } } } @@ -34113,13 +52973,13 @@ const xhrAdapter = isXHRAdapterSupported && function (config) { // Add headers to the request if ('setRequestHeader' in request) { - utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) { + utils$1.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) { request.setRequestHeader(key, val); }); } // Add withCredentials to request if needed - if (!utils.isUndefined(config.withCredentials)) { + if (!utils$1.isUndefined(config.withCredentials)) { request.withCredentials = !!config.withCredentials; } @@ -34174,8 +53034,8 @@ const knownAdapters = { xhr: xhrAdapter }; -utils.forEach(knownAdapters, (fn, value) => { - if(fn) { +utils$1.forEach(knownAdapters, (fn, value) => { + if (fn) { try { Object.defineProperty(fn, 'name', {value}); } catch (e) { @@ -34185,38 +53045,56 @@ utils.forEach(knownAdapters, (fn, value) => { } }); +const renderReason = (reason) => `- ${reason}`; + +const isResolvedHandle = (adapter) => utils$1.isFunction(adapter) || adapter === null || adapter === false; + const adapters = { getAdapter: (adapters) => { - adapters = utils.isArray(adapters) ? adapters : [adapters]; + adapters = utils$1.isArray(adapters) ? adapters : [adapters]; const {length} = adapters; let nameOrAdapter; let adapter; + const rejectedReasons = {}; + for (let i = 0; i < length; i++) { nameOrAdapter = adapters[i]; - if((adapter = utils.isString(nameOrAdapter) ? knownAdapters[nameOrAdapter.toLowerCase()] : nameOrAdapter)) { + let id; + + adapter = nameOrAdapter; + + if (!isResolvedHandle(nameOrAdapter)) { + adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()]; + + if (adapter === undefined) { + throw new AxiosError(`Unknown adapter '${id}'`); + } + } + + if (adapter) { break; } + + rejectedReasons[id || '#' + i] = adapter; } if (!adapter) { - if (adapter === false) { - throw new AxiosError( - `Adapter ${nameOrAdapter} is not supported by the environment`, - 'ERR_NOT_SUPPORT' + + const reasons = Object.entries(rejectedReasons) + .map(([id, state]) => `adapter ${id} ` + + (state === false ? 'is not supported by the environment' : 'is not available in the build') ); - } - throw new Error( - utils.hasOwnProp(knownAdapters, nameOrAdapter) ? - `Adapter '${nameOrAdapter}' is not available in the build` : - `Unknown adapter '${nameOrAdapter}'` - ); - } + let s = length ? + (reasons.length > 1 ? 'since :\n' + reasons.map(renderReason).join('\n') : ' ' + renderReason(reasons[0])) : + 'as no adapter specified'; - if (!utils.isFunction(adapter)) { - throw new TypeError('adapter is not a function'); + throw new AxiosError( + `There is no suitable adapter to dispatch the request ` + s, + 'ERR_NOT_SUPPORT' + ); } return adapter; @@ -34297,7 +53175,7 @@ function dispatchRequest(config) { }); } -const headersToObject = (thing) => thing instanceof AxiosHeaders$1 ? thing.toJSON() : thing; +const headersToObject = (thing) => thing instanceof AxiosHeaders$1 ? { ...thing } : thing; /** * Config-specific merge-function which creates a new config-object @@ -34314,11 +53192,11 @@ function mergeConfig(config1, config2) { const config = {}; function getMergedValue(target, source, caseless) { - if (utils.isPlainObject(target) && utils.isPlainObject(source)) { - return utils.merge.call({caseless}, target, source); - } else if (utils.isPlainObject(source)) { - return utils.merge({}, source); - } else if (utils.isArray(source)) { + if (utils$1.isPlainObject(target) && utils$1.isPlainObject(source)) { + return utils$1.merge.call({caseless}, target, source); + } else if (utils$1.isPlainObject(source)) { + return utils$1.merge({}, source); + } else if (utils$1.isArray(source)) { return source.slice(); } return source; @@ -34326,25 +53204,25 @@ function mergeConfig(config1, config2) { // eslint-disable-next-line consistent-return function mergeDeepProperties(a, b, caseless) { - if (!utils.isUndefined(b)) { + if (!utils$1.isUndefined(b)) { return getMergedValue(a, b, caseless); - } else if (!utils.isUndefined(a)) { + } else if (!utils$1.isUndefined(a)) { return getMergedValue(undefined, a, caseless); } } // eslint-disable-next-line consistent-return function valueFromConfig2(a, b) { - if (!utils.isUndefined(b)) { + if (!utils$1.isUndefined(b)) { return getMergedValue(undefined, b); } } // eslint-disable-next-line consistent-return function defaultToConfig2(a, b) { - if (!utils.isUndefined(b)) { + if (!utils$1.isUndefined(b)) { return getMergedValue(undefined, b); - } else if (!utils.isUndefined(a)) { + } else if (!utils$1.isUndefined(a)) { return getMergedValue(undefined, a); } } @@ -34369,6 +53247,7 @@ function mergeConfig(config1, config2) { timeout: defaultToConfig2, timeoutMessage: defaultToConfig2, withCredentials: defaultToConfig2, + withXSRFToken: defaultToConfig2, adapter: defaultToConfig2, responseType: defaultToConfig2, xsrfCookieName: defaultToConfig2, @@ -34389,10 +53268,10 @@ function mergeConfig(config1, config2) { headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true) }; - utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) { + utils$1.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) { const merge = mergeMap[prop] || mergeDeepProperties; const configValue = merge(config1[prop], config2[prop], prop); - (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); + (utils$1.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); }); return config; @@ -34511,7 +53390,31 @@ class Axios { * * @returns {Promise} The Promise to be fulfilled */ - request(configOrUrl, config) { + async request(configOrUrl, config) { + try { + return await this._request(configOrUrl, config); + } catch (err) { + if (err instanceof Error) { + let dummy; + + Error.captureStackTrace ? Error.captureStackTrace(dummy = {}) : (dummy = new Error()); + + // slice off the Error: ... line + const stack = dummy.stack ? dummy.stack.replace(/^.+\n/, '') : ''; + + if (!err.stack) { + err.stack = stack; + // match without the 2 top stack lines + } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\n.+\n/, ''))) { + err.stack += '\n' + stack; + } + } + + throw err; + } + } + + _request(configOrUrl, config) { /*eslint no-param-reassign:0*/ // Allow for axios('example/url'[, config]) a la fetch API if (typeof configOrUrl === 'string') { @@ -34534,7 +53437,7 @@ class Axios { } if (paramsSerializer != null) { - if (utils.isFunction(paramsSerializer)) { + if (utils$1.isFunction(paramsSerializer)) { config.paramsSerializer = { serialize: paramsSerializer }; @@ -34549,15 +53452,13 @@ class Axios { // Set config.method config.method = (config.method || this.defaults.method || 'get').toLowerCase(); - let contextHeaders; - // Flatten headers - contextHeaders = headers && utils.merge( + let contextHeaders = headers && utils$1.merge( headers.common, headers[config.method] ); - contextHeaders && utils.forEach( + headers && utils$1.forEach( ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], (method) => { delete headers[method]; @@ -34644,7 +53545,7 @@ class Axios { } // Provide aliases for supported request methods -utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { +utils$1.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { /*eslint func-names:0*/ Axios.prototype[method] = function(url, config) { return this.request(mergeConfig(config || {}, { @@ -34655,7 +53556,7 @@ utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData }; }); -utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { +utils$1.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { /*eslint func-names:0*/ function generateHTTPMethod(isForm) { @@ -34831,7 +53732,7 @@ function spread(callback) { * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false */ function isAxiosError(payload) { - return utils.isObject(payload) && (payload.isAxiosError === true); + return utils$1.isObject(payload) && (payload.isAxiosError === true); } const HttpStatusCode = { @@ -34918,10 +53819,10 @@ function createInstance(defaultConfig) { const instance = bind(Axios$1.prototype.request, context); // Copy axios.prototype to instance - utils.extend(instance, Axios$1.prototype, context, {allOwnKeys: true}); + utils$1.extend(instance, Axios$1.prototype, context, {allOwnKeys: true}); // Copy context to instance - utils.extend(instance, context, null, {allOwnKeys: true}); + utils$1.extend(instance, context, null, {allOwnKeys: true}); // Factory for creating new instances instance.create = function create(instanceConfig) { @@ -34965,7 +53866,9 @@ axios.mergeConfig = mergeConfig; axios.AxiosHeaders = AxiosHeaders$1; -axios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing); +axios.formToJSON = thing => formDataToJSON(utils$1.isHTMLForm(thing) ? new FormData(thing) : thing); + +axios.getAdapter = adapters.getAdapter; axios.HttpStatusCode = HttpStatusCode$1; @@ -34975,14 +53878,6 @@ module.exports = axios; //# sourceMappingURL=axios.cjs.map -/***/ }), - -/***/ 6973: -/***/ ((module) => { - -"use strict"; -module.exports = JSON.parse('{"Aacute":"Á","aacute":"á","Abreve":"Ă","abreve":"ă","ac":"∾","acd":"∿","acE":"∾̳","Acirc":"Â","acirc":"â","acute":"´","Acy":"А","acy":"а","AElig":"Æ","aelig":"æ","af":"⁡","Afr":"𝔄","afr":"𝔞","Agrave":"À","agrave":"à","alefsym":"ℵ","aleph":"ℵ","Alpha":"Α","alpha":"α","Amacr":"Ā","amacr":"ā","amalg":"⨿","amp":"&","AMP":"&","andand":"⩕","And":"⩓","and":"∧","andd":"⩜","andslope":"⩘","andv":"⩚","ang":"∠","ange":"⦤","angle":"∠","angmsdaa":"⦨","angmsdab":"⦩","angmsdac":"⦪","angmsdad":"⦫","angmsdae":"⦬","angmsdaf":"⦭","angmsdag":"⦮","angmsdah":"⦯","angmsd":"∡","angrt":"∟","angrtvb":"⊾","angrtvbd":"⦝","angsph":"∢","angst":"Å","angzarr":"⍼","Aogon":"Ą","aogon":"ą","Aopf":"𝔸","aopf":"𝕒","apacir":"⩯","ap":"≈","apE":"⩰","ape":"≊","apid":"≋","apos":"\'","ApplyFunction":"⁡","approx":"≈","approxeq":"≊","Aring":"Å","aring":"å","Ascr":"𝒜","ascr":"𝒶","Assign":"≔","ast":"*","asymp":"≈","asympeq":"≍","Atilde":"Ã","atilde":"ã","Auml":"Ä","auml":"ä","awconint":"∳","awint":"⨑","backcong":"≌","backepsilon":"϶","backprime":"‵","backsim":"∽","backsimeq":"⋍","Backslash":"∖","Barv":"⫧","barvee":"⊽","barwed":"⌅","Barwed":"⌆","barwedge":"⌅","bbrk":"⎵","bbrktbrk":"⎶","bcong":"≌","Bcy":"Б","bcy":"б","bdquo":"„","becaus":"∵","because":"∵","Because":"∵","bemptyv":"⦰","bepsi":"϶","bernou":"ℬ","Bernoullis":"ℬ","Beta":"Β","beta":"β","beth":"ℶ","between":"≬","Bfr":"𝔅","bfr":"𝔟","bigcap":"⋂","bigcirc":"◯","bigcup":"⋃","bigodot":"⨀","bigoplus":"⨁","bigotimes":"⨂","bigsqcup":"⨆","bigstar":"★","bigtriangledown":"▽","bigtriangleup":"△","biguplus":"⨄","bigvee":"⋁","bigwedge":"⋀","bkarow":"⤍","blacklozenge":"⧫","blacksquare":"▪","blacktriangle":"▴","blacktriangledown":"▾","blacktriangleleft":"◂","blacktriangleright":"▸","blank":"␣","blk12":"▒","blk14":"░","blk34":"▓","block":"█","bne":"=⃥","bnequiv":"≡⃥","bNot":"⫭","bnot":"⌐","Bopf":"𝔹","bopf":"𝕓","bot":"⊥","bottom":"⊥","bowtie":"⋈","boxbox":"⧉","boxdl":"┐","boxdL":"╕","boxDl":"╖","boxDL":"╗","boxdr":"┌","boxdR":"╒","boxDr":"╓","boxDR":"╔","boxh":"─","boxH":"═","boxhd":"┬","boxHd":"╤","boxhD":"╥","boxHD":"╦","boxhu":"┴","boxHu":"╧","boxhU":"╨","boxHU":"╩","boxminus":"⊟","boxplus":"⊞","boxtimes":"⊠","boxul":"┘","boxuL":"╛","boxUl":"╜","boxUL":"╝","boxur":"└","boxuR":"╘","boxUr":"╙","boxUR":"╚","boxv":"│","boxV":"║","boxvh":"┼","boxvH":"╪","boxVh":"╫","boxVH":"╬","boxvl":"┤","boxvL":"╡","boxVl":"╢","boxVL":"╣","boxvr":"├","boxvR":"╞","boxVr":"╟","boxVR":"╠","bprime":"‵","breve":"˘","Breve":"˘","brvbar":"¦","bscr":"𝒷","Bscr":"ℬ","bsemi":"⁏","bsim":"∽","bsime":"⋍","bsolb":"⧅","bsol":"\\\\","bsolhsub":"⟈","bull":"•","bullet":"•","bump":"≎","bumpE":"⪮","bumpe":"≏","Bumpeq":"≎","bumpeq":"≏","Cacute":"Ć","cacute":"ć","capand":"⩄","capbrcup":"⩉","capcap":"⩋","cap":"∩","Cap":"⋒","capcup":"⩇","capdot":"⩀","CapitalDifferentialD":"ⅅ","caps":"∩︀","caret":"⁁","caron":"ˇ","Cayleys":"ℭ","ccaps":"⩍","Ccaron":"Č","ccaron":"č","Ccedil":"Ç","ccedil":"ç","Ccirc":"Ĉ","ccirc":"ĉ","Cconint":"∰","ccups":"⩌","ccupssm":"⩐","Cdot":"Ċ","cdot":"ċ","cedil":"¸","Cedilla":"¸","cemptyv":"⦲","cent":"¢","centerdot":"·","CenterDot":"·","cfr":"𝔠","Cfr":"ℭ","CHcy":"Ч","chcy":"ч","check":"✓","checkmark":"✓","Chi":"Χ","chi":"χ","circ":"ˆ","circeq":"≗","circlearrowleft":"↺","circlearrowright":"↻","circledast":"⊛","circledcirc":"⊚","circleddash":"⊝","CircleDot":"⊙","circledR":"®","circledS":"Ⓢ","CircleMinus":"⊖","CirclePlus":"⊕","CircleTimes":"⊗","cir":"○","cirE":"⧃","cire":"≗","cirfnint":"⨐","cirmid":"⫯","cirscir":"⧂","ClockwiseContourIntegral":"∲","CloseCurlyDoubleQuote":"”","CloseCurlyQuote":"’","clubs":"♣","clubsuit":"♣","colon":":","Colon":"∷","Colone":"⩴","colone":"≔","coloneq":"≔","comma":",","commat":"@","comp":"∁","compfn":"∘","complement":"∁","complexes":"ℂ","cong":"≅","congdot":"⩭","Congruent":"≡","conint":"∮","Conint":"∯","ContourIntegral":"∮","copf":"𝕔","Copf":"ℂ","coprod":"∐","Coproduct":"∐","copy":"©","COPY":"©","copysr":"℗","CounterClockwiseContourIntegral":"∳","crarr":"↵","cross":"✗","Cross":"⨯","Cscr":"𝒞","cscr":"𝒸","csub":"⫏","csube":"⫑","csup":"⫐","csupe":"⫒","ctdot":"⋯","cudarrl":"⤸","cudarrr":"⤵","cuepr":"⋞","cuesc":"⋟","cularr":"↶","cularrp":"⤽","cupbrcap":"⩈","cupcap":"⩆","CupCap":"≍","cup":"∪","Cup":"⋓","cupcup":"⩊","cupdot":"⊍","cupor":"⩅","cups":"∪︀","curarr":"↷","curarrm":"⤼","curlyeqprec":"⋞","curlyeqsucc":"⋟","curlyvee":"⋎","curlywedge":"⋏","curren":"¤","curvearrowleft":"↶","curvearrowright":"↷","cuvee":"⋎","cuwed":"⋏","cwconint":"∲","cwint":"∱","cylcty":"⌭","dagger":"†","Dagger":"‡","daleth":"ℸ","darr":"↓","Darr":"↡","dArr":"⇓","dash":"‐","Dashv":"⫤","dashv":"⊣","dbkarow":"⤏","dblac":"˝","Dcaron":"Ď","dcaron":"ď","Dcy":"Д","dcy":"д","ddagger":"‡","ddarr":"⇊","DD":"ⅅ","dd":"ⅆ","DDotrahd":"⤑","ddotseq":"⩷","deg":"°","Del":"∇","Delta":"Δ","delta":"δ","demptyv":"⦱","dfisht":"⥿","Dfr":"𝔇","dfr":"𝔡","dHar":"⥥","dharl":"⇃","dharr":"⇂","DiacriticalAcute":"´","DiacriticalDot":"˙","DiacriticalDoubleAcute":"˝","DiacriticalGrave":"`","DiacriticalTilde":"˜","diam":"⋄","diamond":"⋄","Diamond":"⋄","diamondsuit":"♦","diams":"♦","die":"¨","DifferentialD":"ⅆ","digamma":"ϝ","disin":"⋲","div":"÷","divide":"÷","divideontimes":"⋇","divonx":"⋇","DJcy":"Ђ","djcy":"ђ","dlcorn":"⌞","dlcrop":"⌍","dollar":"$","Dopf":"𝔻","dopf":"𝕕","Dot":"¨","dot":"˙","DotDot":"⃜","doteq":"≐","doteqdot":"≑","DotEqual":"≐","dotminus":"∸","dotplus":"∔","dotsquare":"⊡","doublebarwedge":"⌆","DoubleContourIntegral":"∯","DoubleDot":"¨","DoubleDownArrow":"⇓","DoubleLeftArrow":"⇐","DoubleLeftRightArrow":"⇔","DoubleLeftTee":"⫤","DoubleLongLeftArrow":"⟸","DoubleLongLeftRightArrow":"⟺","DoubleLongRightArrow":"⟹","DoubleRightArrow":"⇒","DoubleRightTee":"⊨","DoubleUpArrow":"⇑","DoubleUpDownArrow":"⇕","DoubleVerticalBar":"∥","DownArrowBar":"⤓","downarrow":"↓","DownArrow":"↓","Downarrow":"⇓","DownArrowUpArrow":"⇵","DownBreve":"̑","downdownarrows":"⇊","downharpoonleft":"⇃","downharpoonright":"⇂","DownLeftRightVector":"⥐","DownLeftTeeVector":"⥞","DownLeftVectorBar":"⥖","DownLeftVector":"↽","DownRightTeeVector":"⥟","DownRightVectorBar":"⥗","DownRightVector":"⇁","DownTeeArrow":"↧","DownTee":"⊤","drbkarow":"⤐","drcorn":"⌟","drcrop":"⌌","Dscr":"𝒟","dscr":"𝒹","DScy":"Ѕ","dscy":"ѕ","dsol":"⧶","Dstrok":"Đ","dstrok":"đ","dtdot":"⋱","dtri":"▿","dtrif":"▾","duarr":"⇵","duhar":"⥯","dwangle":"⦦","DZcy":"Џ","dzcy":"џ","dzigrarr":"⟿","Eacute":"É","eacute":"é","easter":"⩮","Ecaron":"Ě","ecaron":"ě","Ecirc":"Ê","ecirc":"ê","ecir":"≖","ecolon":"≕","Ecy":"Э","ecy":"э","eDDot":"⩷","Edot":"Ė","edot":"ė","eDot":"≑","ee":"ⅇ","efDot":"≒","Efr":"𝔈","efr":"𝔢","eg":"⪚","Egrave":"È","egrave":"è","egs":"⪖","egsdot":"⪘","el":"⪙","Element":"∈","elinters":"⏧","ell":"ℓ","els":"⪕","elsdot":"⪗","Emacr":"Ē","emacr":"ē","empty":"∅","emptyset":"∅","EmptySmallSquare":"◻","emptyv":"∅","EmptyVerySmallSquare":"▫","emsp13":" ","emsp14":" ","emsp":" ","ENG":"Ŋ","eng":"ŋ","ensp":" ","Eogon":"Ę","eogon":"ę","Eopf":"𝔼","eopf":"𝕖","epar":"⋕","eparsl":"⧣","eplus":"⩱","epsi":"ε","Epsilon":"Ε","epsilon":"ε","epsiv":"ϵ","eqcirc":"≖","eqcolon":"≕","eqsim":"≂","eqslantgtr":"⪖","eqslantless":"⪕","Equal":"⩵","equals":"=","EqualTilde":"≂","equest":"≟","Equilibrium":"⇌","equiv":"≡","equivDD":"⩸","eqvparsl":"⧥","erarr":"⥱","erDot":"≓","escr":"ℯ","Escr":"ℰ","esdot":"≐","Esim":"⩳","esim":"≂","Eta":"Η","eta":"η","ETH":"Ð","eth":"ð","Euml":"Ë","euml":"ë","euro":"€","excl":"!","exist":"∃","Exists":"∃","expectation":"ℰ","exponentiale":"ⅇ","ExponentialE":"ⅇ","fallingdotseq":"≒","Fcy":"Ф","fcy":"ф","female":"♀","ffilig":"ffi","fflig":"ff","ffllig":"ffl","Ffr":"𝔉","ffr":"𝔣","filig":"fi","FilledSmallSquare":"◼","FilledVerySmallSquare":"▪","fjlig":"fj","flat":"♭","fllig":"fl","fltns":"▱","fnof":"ƒ","Fopf":"𝔽","fopf":"𝕗","forall":"∀","ForAll":"∀","fork":"⋔","forkv":"⫙","Fouriertrf":"ℱ","fpartint":"⨍","frac12":"½","frac13":"⅓","frac14":"¼","frac15":"⅕","frac16":"⅙","frac18":"⅛","frac23":"⅔","frac25":"⅖","frac34":"¾","frac35":"⅗","frac38":"⅜","frac45":"⅘","frac56":"⅚","frac58":"⅝","frac78":"⅞","frasl":"⁄","frown":"⌢","fscr":"𝒻","Fscr":"ℱ","gacute":"ǵ","Gamma":"Γ","gamma":"γ","Gammad":"Ϝ","gammad":"ϝ","gap":"⪆","Gbreve":"Ğ","gbreve":"ğ","Gcedil":"Ģ","Gcirc":"Ĝ","gcirc":"ĝ","Gcy":"Г","gcy":"г","Gdot":"Ġ","gdot":"ġ","ge":"≥","gE":"≧","gEl":"⪌","gel":"⋛","geq":"≥","geqq":"≧","geqslant":"⩾","gescc":"⪩","ges":"⩾","gesdot":"⪀","gesdoto":"⪂","gesdotol":"⪄","gesl":"⋛︀","gesles":"⪔","Gfr":"𝔊","gfr":"𝔤","gg":"≫","Gg":"⋙","ggg":"⋙","gimel":"ℷ","GJcy":"Ѓ","gjcy":"ѓ","gla":"⪥","gl":"≷","glE":"⪒","glj":"⪤","gnap":"⪊","gnapprox":"⪊","gne":"⪈","gnE":"≩","gneq":"⪈","gneqq":"≩","gnsim":"⋧","Gopf":"𝔾","gopf":"𝕘","grave":"`","GreaterEqual":"≥","GreaterEqualLess":"⋛","GreaterFullEqual":"≧","GreaterGreater":"⪢","GreaterLess":"≷","GreaterSlantEqual":"⩾","GreaterTilde":"≳","Gscr":"𝒢","gscr":"ℊ","gsim":"≳","gsime":"⪎","gsiml":"⪐","gtcc":"⪧","gtcir":"⩺","gt":">","GT":">","Gt":"≫","gtdot":"⋗","gtlPar":"⦕","gtquest":"⩼","gtrapprox":"⪆","gtrarr":"⥸","gtrdot":"⋗","gtreqless":"⋛","gtreqqless":"⪌","gtrless":"≷","gtrsim":"≳","gvertneqq":"≩︀","gvnE":"≩︀","Hacek":"ˇ","hairsp":" ","half":"½","hamilt":"ℋ","HARDcy":"Ъ","hardcy":"ъ","harrcir":"⥈","harr":"↔","hArr":"⇔","harrw":"↭","Hat":"^","hbar":"ℏ","Hcirc":"Ĥ","hcirc":"ĥ","hearts":"♥","heartsuit":"♥","hellip":"…","hercon":"⊹","hfr":"𝔥","Hfr":"ℌ","HilbertSpace":"ℋ","hksearow":"⤥","hkswarow":"⤦","hoarr":"⇿","homtht":"∻","hookleftarrow":"↩","hookrightarrow":"↪","hopf":"𝕙","Hopf":"ℍ","horbar":"―","HorizontalLine":"─","hscr":"𝒽","Hscr":"ℋ","hslash":"ℏ","Hstrok":"Ħ","hstrok":"ħ","HumpDownHump":"≎","HumpEqual":"≏","hybull":"⁃","hyphen":"‐","Iacute":"Í","iacute":"í","ic":"⁣","Icirc":"Î","icirc":"î","Icy":"И","icy":"и","Idot":"İ","IEcy":"Е","iecy":"е","iexcl":"¡","iff":"⇔","ifr":"𝔦","Ifr":"ℑ","Igrave":"Ì","igrave":"ì","ii":"ⅈ","iiiint":"⨌","iiint":"∭","iinfin":"⧜","iiota":"℩","IJlig":"IJ","ijlig":"ij","Imacr":"Ī","imacr":"ī","image":"ℑ","ImaginaryI":"ⅈ","imagline":"ℐ","imagpart":"ℑ","imath":"ı","Im":"ℑ","imof":"⊷","imped":"Ƶ","Implies":"⇒","incare":"℅","in":"∈","infin":"∞","infintie":"⧝","inodot":"ı","intcal":"⊺","int":"∫","Int":"∬","integers":"ℤ","Integral":"∫","intercal":"⊺","Intersection":"⋂","intlarhk":"⨗","intprod":"⨼","InvisibleComma":"⁣","InvisibleTimes":"⁢","IOcy":"Ё","iocy":"ё","Iogon":"Į","iogon":"į","Iopf":"𝕀","iopf":"𝕚","Iota":"Ι","iota":"ι","iprod":"⨼","iquest":"¿","iscr":"𝒾","Iscr":"ℐ","isin":"∈","isindot":"⋵","isinE":"⋹","isins":"⋴","isinsv":"⋳","isinv":"∈","it":"⁢","Itilde":"Ĩ","itilde":"ĩ","Iukcy":"І","iukcy":"і","Iuml":"Ï","iuml":"ï","Jcirc":"Ĵ","jcirc":"ĵ","Jcy":"Й","jcy":"й","Jfr":"𝔍","jfr":"𝔧","jmath":"ȷ","Jopf":"𝕁","jopf":"𝕛","Jscr":"𝒥","jscr":"𝒿","Jsercy":"Ј","jsercy":"ј","Jukcy":"Є","jukcy":"є","Kappa":"Κ","kappa":"κ","kappav":"ϰ","Kcedil":"Ķ","kcedil":"ķ","Kcy":"К","kcy":"к","Kfr":"𝔎","kfr":"𝔨","kgreen":"ĸ","KHcy":"Х","khcy":"х","KJcy":"Ќ","kjcy":"ќ","Kopf":"𝕂","kopf":"𝕜","Kscr":"𝒦","kscr":"𝓀","lAarr":"⇚","Lacute":"Ĺ","lacute":"ĺ","laemptyv":"⦴","lagran":"ℒ","Lambda":"Λ","lambda":"λ","lang":"⟨","Lang":"⟪","langd":"⦑","langle":"⟨","lap":"⪅","Laplacetrf":"ℒ","laquo":"«","larrb":"⇤","larrbfs":"⤟","larr":"←","Larr":"↞","lArr":"⇐","larrfs":"⤝","larrhk":"↩","larrlp":"↫","larrpl":"⤹","larrsim":"⥳","larrtl":"↢","latail":"⤙","lAtail":"⤛","lat":"⪫","late":"⪭","lates":"⪭︀","lbarr":"⤌","lBarr":"⤎","lbbrk":"❲","lbrace":"{","lbrack":"[","lbrke":"⦋","lbrksld":"⦏","lbrkslu":"⦍","Lcaron":"Ľ","lcaron":"ľ","Lcedil":"Ļ","lcedil":"ļ","lceil":"⌈","lcub":"{","Lcy":"Л","lcy":"л","ldca":"⤶","ldquo":"“","ldquor":"„","ldrdhar":"⥧","ldrushar":"⥋","ldsh":"↲","le":"≤","lE":"≦","LeftAngleBracket":"⟨","LeftArrowBar":"⇤","leftarrow":"←","LeftArrow":"←","Leftarrow":"⇐","LeftArrowRightArrow":"⇆","leftarrowtail":"↢","LeftCeiling":"⌈","LeftDoubleBracket":"⟦","LeftDownTeeVector":"⥡","LeftDownVectorBar":"⥙","LeftDownVector":"⇃","LeftFloor":"⌊","leftharpoondown":"↽","leftharpoonup":"↼","leftleftarrows":"⇇","leftrightarrow":"↔","LeftRightArrow":"↔","Leftrightarrow":"⇔","leftrightarrows":"⇆","leftrightharpoons":"⇋","leftrightsquigarrow":"↭","LeftRightVector":"⥎","LeftTeeArrow":"↤","LeftTee":"⊣","LeftTeeVector":"⥚","leftthreetimes":"⋋","LeftTriangleBar":"⧏","LeftTriangle":"⊲","LeftTriangleEqual":"⊴","LeftUpDownVector":"⥑","LeftUpTeeVector":"⥠","LeftUpVectorBar":"⥘","LeftUpVector":"↿","LeftVectorBar":"⥒","LeftVector":"↼","lEg":"⪋","leg":"⋚","leq":"≤","leqq":"≦","leqslant":"⩽","lescc":"⪨","les":"⩽","lesdot":"⩿","lesdoto":"⪁","lesdotor":"⪃","lesg":"⋚︀","lesges":"⪓","lessapprox":"⪅","lessdot":"⋖","lesseqgtr":"⋚","lesseqqgtr":"⪋","LessEqualGreater":"⋚","LessFullEqual":"≦","LessGreater":"≶","lessgtr":"≶","LessLess":"⪡","lesssim":"≲","LessSlantEqual":"⩽","LessTilde":"≲","lfisht":"⥼","lfloor":"⌊","Lfr":"𝔏","lfr":"𝔩","lg":"≶","lgE":"⪑","lHar":"⥢","lhard":"↽","lharu":"↼","lharul":"⥪","lhblk":"▄","LJcy":"Љ","ljcy":"љ","llarr":"⇇","ll":"≪","Ll":"⋘","llcorner":"⌞","Lleftarrow":"⇚","llhard":"⥫","lltri":"◺","Lmidot":"Ŀ","lmidot":"ŀ","lmoustache":"⎰","lmoust":"⎰","lnap":"⪉","lnapprox":"⪉","lne":"⪇","lnE":"≨","lneq":"⪇","lneqq":"≨","lnsim":"⋦","loang":"⟬","loarr":"⇽","lobrk":"⟦","longleftarrow":"⟵","LongLeftArrow":"⟵","Longleftarrow":"⟸","longleftrightarrow":"⟷","LongLeftRightArrow":"⟷","Longleftrightarrow":"⟺","longmapsto":"⟼","longrightarrow":"⟶","LongRightArrow":"⟶","Longrightarrow":"⟹","looparrowleft":"↫","looparrowright":"↬","lopar":"⦅","Lopf":"𝕃","lopf":"𝕝","loplus":"⨭","lotimes":"⨴","lowast":"∗","lowbar":"_","LowerLeftArrow":"↙","LowerRightArrow":"↘","loz":"◊","lozenge":"◊","lozf":"⧫","lpar":"(","lparlt":"⦓","lrarr":"⇆","lrcorner":"⌟","lrhar":"⇋","lrhard":"⥭","lrm":"‎","lrtri":"⊿","lsaquo":"‹","lscr":"𝓁","Lscr":"ℒ","lsh":"↰","Lsh":"↰","lsim":"≲","lsime":"⪍","lsimg":"⪏","lsqb":"[","lsquo":"‘","lsquor":"‚","Lstrok":"Ł","lstrok":"ł","ltcc":"⪦","ltcir":"⩹","lt":"<","LT":"<","Lt":"≪","ltdot":"⋖","lthree":"⋋","ltimes":"⋉","ltlarr":"⥶","ltquest":"⩻","ltri":"◃","ltrie":"⊴","ltrif":"◂","ltrPar":"⦖","lurdshar":"⥊","luruhar":"⥦","lvertneqq":"≨︀","lvnE":"≨︀","macr":"¯","male":"♂","malt":"✠","maltese":"✠","Map":"⤅","map":"↦","mapsto":"↦","mapstodown":"↧","mapstoleft":"↤","mapstoup":"↥","marker":"▮","mcomma":"⨩","Mcy":"М","mcy":"м","mdash":"—","mDDot":"∺","measuredangle":"∡","MediumSpace":" ","Mellintrf":"ℳ","Mfr":"𝔐","mfr":"𝔪","mho":"℧","micro":"µ","midast":"*","midcir":"⫰","mid":"∣","middot":"·","minusb":"⊟","minus":"−","minusd":"∸","minusdu":"⨪","MinusPlus":"∓","mlcp":"⫛","mldr":"…","mnplus":"∓","models":"⊧","Mopf":"𝕄","mopf":"𝕞","mp":"∓","mscr":"𝓂","Mscr":"ℳ","mstpos":"∾","Mu":"Μ","mu":"μ","multimap":"⊸","mumap":"⊸","nabla":"∇","Nacute":"Ń","nacute":"ń","nang":"∠⃒","nap":"≉","napE":"⩰̸","napid":"≋̸","napos":"ʼn","napprox":"≉","natural":"♮","naturals":"ℕ","natur":"♮","nbsp":" ","nbump":"≎̸","nbumpe":"≏̸","ncap":"⩃","Ncaron":"Ň","ncaron":"ň","Ncedil":"Ņ","ncedil":"ņ","ncong":"≇","ncongdot":"⩭̸","ncup":"⩂","Ncy":"Н","ncy":"н","ndash":"–","nearhk":"⤤","nearr":"↗","neArr":"⇗","nearrow":"↗","ne":"≠","nedot":"≐̸","NegativeMediumSpace":"​","NegativeThickSpace":"​","NegativeThinSpace":"​","NegativeVeryThinSpace":"​","nequiv":"≢","nesear":"⤨","nesim":"≂̸","NestedGreaterGreater":"≫","NestedLessLess":"≪","NewLine":"\\n","nexist":"∄","nexists":"∄","Nfr":"𝔑","nfr":"𝔫","ngE":"≧̸","nge":"≱","ngeq":"≱","ngeqq":"≧̸","ngeqslant":"⩾̸","nges":"⩾̸","nGg":"⋙̸","ngsim":"≵","nGt":"≫⃒","ngt":"≯","ngtr":"≯","nGtv":"≫̸","nharr":"↮","nhArr":"⇎","nhpar":"⫲","ni":"∋","nis":"⋼","nisd":"⋺","niv":"∋","NJcy":"Њ","njcy":"њ","nlarr":"↚","nlArr":"⇍","nldr":"‥","nlE":"≦̸","nle":"≰","nleftarrow":"↚","nLeftarrow":"⇍","nleftrightarrow":"↮","nLeftrightarrow":"⇎","nleq":"≰","nleqq":"≦̸","nleqslant":"⩽̸","nles":"⩽̸","nless":"≮","nLl":"⋘̸","nlsim":"≴","nLt":"≪⃒","nlt":"≮","nltri":"⋪","nltrie":"⋬","nLtv":"≪̸","nmid":"∤","NoBreak":"⁠","NonBreakingSpace":" ","nopf":"𝕟","Nopf":"ℕ","Not":"⫬","not":"¬","NotCongruent":"≢","NotCupCap":"≭","NotDoubleVerticalBar":"∦","NotElement":"∉","NotEqual":"≠","NotEqualTilde":"≂̸","NotExists":"∄","NotGreater":"≯","NotGreaterEqual":"≱","NotGreaterFullEqual":"≧̸","NotGreaterGreater":"≫̸","NotGreaterLess":"≹","NotGreaterSlantEqual":"⩾̸","NotGreaterTilde":"≵","NotHumpDownHump":"≎̸","NotHumpEqual":"≏̸","notin":"∉","notindot":"⋵̸","notinE":"⋹̸","notinva":"∉","notinvb":"⋷","notinvc":"⋶","NotLeftTriangleBar":"⧏̸","NotLeftTriangle":"⋪","NotLeftTriangleEqual":"⋬","NotLess":"≮","NotLessEqual":"≰","NotLessGreater":"≸","NotLessLess":"≪̸","NotLessSlantEqual":"⩽̸","NotLessTilde":"≴","NotNestedGreaterGreater":"⪢̸","NotNestedLessLess":"⪡̸","notni":"∌","notniva":"∌","notnivb":"⋾","notnivc":"⋽","NotPrecedes":"⊀","NotPrecedesEqual":"⪯̸","NotPrecedesSlantEqual":"⋠","NotReverseElement":"∌","NotRightTriangleBar":"⧐̸","NotRightTriangle":"⋫","NotRightTriangleEqual":"⋭","NotSquareSubset":"⊏̸","NotSquareSubsetEqual":"⋢","NotSquareSuperset":"⊐̸","NotSquareSupersetEqual":"⋣","NotSubset":"⊂⃒","NotSubsetEqual":"⊈","NotSucceeds":"⊁","NotSucceedsEqual":"⪰̸","NotSucceedsSlantEqual":"⋡","NotSucceedsTilde":"≿̸","NotSuperset":"⊃⃒","NotSupersetEqual":"⊉","NotTilde":"≁","NotTildeEqual":"≄","NotTildeFullEqual":"≇","NotTildeTilde":"≉","NotVerticalBar":"∤","nparallel":"∦","npar":"∦","nparsl":"⫽⃥","npart":"∂̸","npolint":"⨔","npr":"⊀","nprcue":"⋠","nprec":"⊀","npreceq":"⪯̸","npre":"⪯̸","nrarrc":"⤳̸","nrarr":"↛","nrArr":"⇏","nrarrw":"↝̸","nrightarrow":"↛","nRightarrow":"⇏","nrtri":"⋫","nrtrie":"⋭","nsc":"⊁","nsccue":"⋡","nsce":"⪰̸","Nscr":"𝒩","nscr":"𝓃","nshortmid":"∤","nshortparallel":"∦","nsim":"≁","nsime":"≄","nsimeq":"≄","nsmid":"∤","nspar":"∦","nsqsube":"⋢","nsqsupe":"⋣","nsub":"⊄","nsubE":"⫅̸","nsube":"⊈","nsubset":"⊂⃒","nsubseteq":"⊈","nsubseteqq":"⫅̸","nsucc":"⊁","nsucceq":"⪰̸","nsup":"⊅","nsupE":"⫆̸","nsupe":"⊉","nsupset":"⊃⃒","nsupseteq":"⊉","nsupseteqq":"⫆̸","ntgl":"≹","Ntilde":"Ñ","ntilde":"ñ","ntlg":"≸","ntriangleleft":"⋪","ntrianglelefteq":"⋬","ntriangleright":"⋫","ntrianglerighteq":"⋭","Nu":"Ν","nu":"ν","num":"#","numero":"№","numsp":" ","nvap":"≍⃒","nvdash":"⊬","nvDash":"⊭","nVdash":"⊮","nVDash":"⊯","nvge":"≥⃒","nvgt":">⃒","nvHarr":"⤄","nvinfin":"⧞","nvlArr":"⤂","nvle":"≤⃒","nvlt":"<⃒","nvltrie":"⊴⃒","nvrArr":"⤃","nvrtrie":"⊵⃒","nvsim":"∼⃒","nwarhk":"⤣","nwarr":"↖","nwArr":"⇖","nwarrow":"↖","nwnear":"⤧","Oacute":"Ó","oacute":"ó","oast":"⊛","Ocirc":"Ô","ocirc":"ô","ocir":"⊚","Ocy":"О","ocy":"о","odash":"⊝","Odblac":"Ő","odblac":"ő","odiv":"⨸","odot":"⊙","odsold":"⦼","OElig":"Œ","oelig":"œ","ofcir":"⦿","Ofr":"𝔒","ofr":"𝔬","ogon":"˛","Ograve":"Ò","ograve":"ò","ogt":"⧁","ohbar":"⦵","ohm":"Ω","oint":"∮","olarr":"↺","olcir":"⦾","olcross":"⦻","oline":"‾","olt":"⧀","Omacr":"Ō","omacr":"ō","Omega":"Ω","omega":"ω","Omicron":"Ο","omicron":"ο","omid":"⦶","ominus":"⊖","Oopf":"𝕆","oopf":"𝕠","opar":"⦷","OpenCurlyDoubleQuote":"“","OpenCurlyQuote":"‘","operp":"⦹","oplus":"⊕","orarr":"↻","Or":"⩔","or":"∨","ord":"⩝","order":"ℴ","orderof":"ℴ","ordf":"ª","ordm":"º","origof":"⊶","oror":"⩖","orslope":"⩗","orv":"⩛","oS":"Ⓢ","Oscr":"𝒪","oscr":"ℴ","Oslash":"Ø","oslash":"ø","osol":"⊘","Otilde":"Õ","otilde":"õ","otimesas":"⨶","Otimes":"⨷","otimes":"⊗","Ouml":"Ö","ouml":"ö","ovbar":"⌽","OverBar":"‾","OverBrace":"⏞","OverBracket":"⎴","OverParenthesis":"⏜","para":"¶","parallel":"∥","par":"∥","parsim":"⫳","parsl":"⫽","part":"∂","PartialD":"∂","Pcy":"П","pcy":"п","percnt":"%","period":".","permil":"‰","perp":"⊥","pertenk":"‱","Pfr":"𝔓","pfr":"𝔭","Phi":"Φ","phi":"φ","phiv":"ϕ","phmmat":"ℳ","phone":"☎","Pi":"Π","pi":"π","pitchfork":"⋔","piv":"ϖ","planck":"ℏ","planckh":"ℎ","plankv":"ℏ","plusacir":"⨣","plusb":"⊞","pluscir":"⨢","plus":"+","plusdo":"∔","plusdu":"⨥","pluse":"⩲","PlusMinus":"±","plusmn":"±","plussim":"⨦","plustwo":"⨧","pm":"±","Poincareplane":"ℌ","pointint":"⨕","popf":"𝕡","Popf":"ℙ","pound":"£","prap":"⪷","Pr":"⪻","pr":"≺","prcue":"≼","precapprox":"⪷","prec":"≺","preccurlyeq":"≼","Precedes":"≺","PrecedesEqual":"⪯","PrecedesSlantEqual":"≼","PrecedesTilde":"≾","preceq":"⪯","precnapprox":"⪹","precneqq":"⪵","precnsim":"⋨","pre":"⪯","prE":"⪳","precsim":"≾","prime":"′","Prime":"″","primes":"ℙ","prnap":"⪹","prnE":"⪵","prnsim":"⋨","prod":"∏","Product":"∏","profalar":"⌮","profline":"⌒","profsurf":"⌓","prop":"∝","Proportional":"∝","Proportion":"∷","propto":"∝","prsim":"≾","prurel":"⊰","Pscr":"𝒫","pscr":"𝓅","Psi":"Ψ","psi":"ψ","puncsp":" ","Qfr":"𝔔","qfr":"𝔮","qint":"⨌","qopf":"𝕢","Qopf":"ℚ","qprime":"⁗","Qscr":"𝒬","qscr":"𝓆","quaternions":"ℍ","quatint":"⨖","quest":"?","questeq":"≟","quot":"\\"","QUOT":"\\"","rAarr":"⇛","race":"∽̱","Racute":"Ŕ","racute":"ŕ","radic":"√","raemptyv":"⦳","rang":"⟩","Rang":"⟫","rangd":"⦒","range":"⦥","rangle":"⟩","raquo":"»","rarrap":"⥵","rarrb":"⇥","rarrbfs":"⤠","rarrc":"⤳","rarr":"→","Rarr":"↠","rArr":"⇒","rarrfs":"⤞","rarrhk":"↪","rarrlp":"↬","rarrpl":"⥅","rarrsim":"⥴","Rarrtl":"⤖","rarrtl":"↣","rarrw":"↝","ratail":"⤚","rAtail":"⤜","ratio":"∶","rationals":"ℚ","rbarr":"⤍","rBarr":"⤏","RBarr":"⤐","rbbrk":"❳","rbrace":"}","rbrack":"]","rbrke":"⦌","rbrksld":"⦎","rbrkslu":"⦐","Rcaron":"Ř","rcaron":"ř","Rcedil":"Ŗ","rcedil":"ŗ","rceil":"⌉","rcub":"}","Rcy":"Р","rcy":"р","rdca":"⤷","rdldhar":"⥩","rdquo":"”","rdquor":"”","rdsh":"↳","real":"ℜ","realine":"ℛ","realpart":"ℜ","reals":"ℝ","Re":"ℜ","rect":"▭","reg":"®","REG":"®","ReverseElement":"∋","ReverseEquilibrium":"⇋","ReverseUpEquilibrium":"⥯","rfisht":"⥽","rfloor":"⌋","rfr":"𝔯","Rfr":"ℜ","rHar":"⥤","rhard":"⇁","rharu":"⇀","rharul":"⥬","Rho":"Ρ","rho":"ρ","rhov":"ϱ","RightAngleBracket":"⟩","RightArrowBar":"⇥","rightarrow":"→","RightArrow":"→","Rightarrow":"⇒","RightArrowLeftArrow":"⇄","rightarrowtail":"↣","RightCeiling":"⌉","RightDoubleBracket":"⟧","RightDownTeeVector":"⥝","RightDownVectorBar":"⥕","RightDownVector":"⇂","RightFloor":"⌋","rightharpoondown":"⇁","rightharpoonup":"⇀","rightleftarrows":"⇄","rightleftharpoons":"⇌","rightrightarrows":"⇉","rightsquigarrow":"↝","RightTeeArrow":"↦","RightTee":"⊢","RightTeeVector":"⥛","rightthreetimes":"⋌","RightTriangleBar":"⧐","RightTriangle":"⊳","RightTriangleEqual":"⊵","RightUpDownVector":"⥏","RightUpTeeVector":"⥜","RightUpVectorBar":"⥔","RightUpVector":"↾","RightVectorBar":"⥓","RightVector":"⇀","ring":"˚","risingdotseq":"≓","rlarr":"⇄","rlhar":"⇌","rlm":"‏","rmoustache":"⎱","rmoust":"⎱","rnmid":"⫮","roang":"⟭","roarr":"⇾","robrk":"⟧","ropar":"⦆","ropf":"𝕣","Ropf":"ℝ","roplus":"⨮","rotimes":"⨵","RoundImplies":"⥰","rpar":")","rpargt":"⦔","rppolint":"⨒","rrarr":"⇉","Rrightarrow":"⇛","rsaquo":"›","rscr":"𝓇","Rscr":"ℛ","rsh":"↱","Rsh":"↱","rsqb":"]","rsquo":"’","rsquor":"’","rthree":"⋌","rtimes":"⋊","rtri":"▹","rtrie":"⊵","rtrif":"▸","rtriltri":"⧎","RuleDelayed":"⧴","ruluhar":"⥨","rx":"℞","Sacute":"Ś","sacute":"ś","sbquo":"‚","scap":"⪸","Scaron":"Š","scaron":"š","Sc":"⪼","sc":"≻","sccue":"≽","sce":"⪰","scE":"⪴","Scedil":"Ş","scedil":"ş","Scirc":"Ŝ","scirc":"ŝ","scnap":"⪺","scnE":"⪶","scnsim":"⋩","scpolint":"⨓","scsim":"≿","Scy":"С","scy":"с","sdotb":"⊡","sdot":"⋅","sdote":"⩦","searhk":"⤥","searr":"↘","seArr":"⇘","searrow":"↘","sect":"§","semi":";","seswar":"⤩","setminus":"∖","setmn":"∖","sext":"✶","Sfr":"𝔖","sfr":"𝔰","sfrown":"⌢","sharp":"♯","SHCHcy":"Щ","shchcy":"щ","SHcy":"Ш","shcy":"ш","ShortDownArrow":"↓","ShortLeftArrow":"←","shortmid":"∣","shortparallel":"∥","ShortRightArrow":"→","ShortUpArrow":"↑","shy":"­","Sigma":"Σ","sigma":"σ","sigmaf":"ς","sigmav":"ς","sim":"∼","simdot":"⩪","sime":"≃","simeq":"≃","simg":"⪞","simgE":"⪠","siml":"⪝","simlE":"⪟","simne":"≆","simplus":"⨤","simrarr":"⥲","slarr":"←","SmallCircle":"∘","smallsetminus":"∖","smashp":"⨳","smeparsl":"⧤","smid":"∣","smile":"⌣","smt":"⪪","smte":"⪬","smtes":"⪬︀","SOFTcy":"Ь","softcy":"ь","solbar":"⌿","solb":"⧄","sol":"/","Sopf":"𝕊","sopf":"𝕤","spades":"♠","spadesuit":"♠","spar":"∥","sqcap":"⊓","sqcaps":"⊓︀","sqcup":"⊔","sqcups":"⊔︀","Sqrt":"√","sqsub":"⊏","sqsube":"⊑","sqsubset":"⊏","sqsubseteq":"⊑","sqsup":"⊐","sqsupe":"⊒","sqsupset":"⊐","sqsupseteq":"⊒","square":"□","Square":"□","SquareIntersection":"⊓","SquareSubset":"⊏","SquareSubsetEqual":"⊑","SquareSuperset":"⊐","SquareSupersetEqual":"⊒","SquareUnion":"⊔","squarf":"▪","squ":"□","squf":"▪","srarr":"→","Sscr":"𝒮","sscr":"𝓈","ssetmn":"∖","ssmile":"⌣","sstarf":"⋆","Star":"⋆","star":"☆","starf":"★","straightepsilon":"ϵ","straightphi":"ϕ","strns":"¯","sub":"⊂","Sub":"⋐","subdot":"⪽","subE":"⫅","sube":"⊆","subedot":"⫃","submult":"⫁","subnE":"⫋","subne":"⊊","subplus":"⪿","subrarr":"⥹","subset":"⊂","Subset":"⋐","subseteq":"⊆","subseteqq":"⫅","SubsetEqual":"⊆","subsetneq":"⊊","subsetneqq":"⫋","subsim":"⫇","subsub":"⫕","subsup":"⫓","succapprox":"⪸","succ":"≻","succcurlyeq":"≽","Succeeds":"≻","SucceedsEqual":"⪰","SucceedsSlantEqual":"≽","SucceedsTilde":"≿","succeq":"⪰","succnapprox":"⪺","succneqq":"⪶","succnsim":"⋩","succsim":"≿","SuchThat":"∋","sum":"∑","Sum":"∑","sung":"♪","sup1":"¹","sup2":"²","sup3":"³","sup":"⊃","Sup":"⋑","supdot":"⪾","supdsub":"⫘","supE":"⫆","supe":"⊇","supedot":"⫄","Superset":"⊃","SupersetEqual":"⊇","suphsol":"⟉","suphsub":"⫗","suplarr":"⥻","supmult":"⫂","supnE":"⫌","supne":"⊋","supplus":"⫀","supset":"⊃","Supset":"⋑","supseteq":"⊇","supseteqq":"⫆","supsetneq":"⊋","supsetneqq":"⫌","supsim":"⫈","supsub":"⫔","supsup":"⫖","swarhk":"⤦","swarr":"↙","swArr":"⇙","swarrow":"↙","swnwar":"⤪","szlig":"ß","Tab":"\\t","target":"⌖","Tau":"Τ","tau":"τ","tbrk":"⎴","Tcaron":"Ť","tcaron":"ť","Tcedil":"Ţ","tcedil":"ţ","Tcy":"Т","tcy":"т","tdot":"⃛","telrec":"⌕","Tfr":"𝔗","tfr":"𝔱","there4":"∴","therefore":"∴","Therefore":"∴","Theta":"Θ","theta":"θ","thetasym":"ϑ","thetav":"ϑ","thickapprox":"≈","thicksim":"∼","ThickSpace":"  ","ThinSpace":" ","thinsp":" ","thkap":"≈","thksim":"∼","THORN":"Þ","thorn":"þ","tilde":"˜","Tilde":"∼","TildeEqual":"≃","TildeFullEqual":"≅","TildeTilde":"≈","timesbar":"⨱","timesb":"⊠","times":"×","timesd":"⨰","tint":"∭","toea":"⤨","topbot":"⌶","topcir":"⫱","top":"⊤","Topf":"𝕋","topf":"𝕥","topfork":"⫚","tosa":"⤩","tprime":"‴","trade":"™","TRADE":"™","triangle":"▵","triangledown":"▿","triangleleft":"◃","trianglelefteq":"⊴","triangleq":"≜","triangleright":"▹","trianglerighteq":"⊵","tridot":"◬","trie":"≜","triminus":"⨺","TripleDot":"⃛","triplus":"⨹","trisb":"⧍","tritime":"⨻","trpezium":"⏢","Tscr":"𝒯","tscr":"𝓉","TScy":"Ц","tscy":"ц","TSHcy":"Ћ","tshcy":"ћ","Tstrok":"Ŧ","tstrok":"ŧ","twixt":"≬","twoheadleftarrow":"↞","twoheadrightarrow":"↠","Uacute":"Ú","uacute":"ú","uarr":"↑","Uarr":"↟","uArr":"⇑","Uarrocir":"⥉","Ubrcy":"Ў","ubrcy":"ў","Ubreve":"Ŭ","ubreve":"ŭ","Ucirc":"Û","ucirc":"û","Ucy":"У","ucy":"у","udarr":"⇅","Udblac":"Ű","udblac":"ű","udhar":"⥮","ufisht":"⥾","Ufr":"𝔘","ufr":"𝔲","Ugrave":"Ù","ugrave":"ù","uHar":"⥣","uharl":"↿","uharr":"↾","uhblk":"▀","ulcorn":"⌜","ulcorner":"⌜","ulcrop":"⌏","ultri":"◸","Umacr":"Ū","umacr":"ū","uml":"¨","UnderBar":"_","UnderBrace":"⏟","UnderBracket":"⎵","UnderParenthesis":"⏝","Union":"⋃","UnionPlus":"⊎","Uogon":"Ų","uogon":"ų","Uopf":"𝕌","uopf":"𝕦","UpArrowBar":"⤒","uparrow":"↑","UpArrow":"↑","Uparrow":"⇑","UpArrowDownArrow":"⇅","updownarrow":"↕","UpDownArrow":"↕","Updownarrow":"⇕","UpEquilibrium":"⥮","upharpoonleft":"↿","upharpoonright":"↾","uplus":"⊎","UpperLeftArrow":"↖","UpperRightArrow":"↗","upsi":"υ","Upsi":"ϒ","upsih":"ϒ","Upsilon":"Υ","upsilon":"υ","UpTeeArrow":"↥","UpTee":"⊥","upuparrows":"⇈","urcorn":"⌝","urcorner":"⌝","urcrop":"⌎","Uring":"Ů","uring":"ů","urtri":"◹","Uscr":"𝒰","uscr":"𝓊","utdot":"⋰","Utilde":"Ũ","utilde":"ũ","utri":"▵","utrif":"▴","uuarr":"⇈","Uuml":"Ü","uuml":"ü","uwangle":"⦧","vangrt":"⦜","varepsilon":"ϵ","varkappa":"ϰ","varnothing":"∅","varphi":"ϕ","varpi":"ϖ","varpropto":"∝","varr":"↕","vArr":"⇕","varrho":"ϱ","varsigma":"ς","varsubsetneq":"⊊︀","varsubsetneqq":"⫋︀","varsupsetneq":"⊋︀","varsupsetneqq":"⫌︀","vartheta":"ϑ","vartriangleleft":"⊲","vartriangleright":"⊳","vBar":"⫨","Vbar":"⫫","vBarv":"⫩","Vcy":"В","vcy":"в","vdash":"⊢","vDash":"⊨","Vdash":"⊩","VDash":"⊫","Vdashl":"⫦","veebar":"⊻","vee":"∨","Vee":"⋁","veeeq":"≚","vellip":"⋮","verbar":"|","Verbar":"‖","vert":"|","Vert":"‖","VerticalBar":"∣","VerticalLine":"|","VerticalSeparator":"❘","VerticalTilde":"≀","VeryThinSpace":" ","Vfr":"𝔙","vfr":"𝔳","vltri":"⊲","vnsub":"⊂⃒","vnsup":"⊃⃒","Vopf":"𝕍","vopf":"𝕧","vprop":"∝","vrtri":"⊳","Vscr":"𝒱","vscr":"𝓋","vsubnE":"⫋︀","vsubne":"⊊︀","vsupnE":"⫌︀","vsupne":"⊋︀","Vvdash":"⊪","vzigzag":"⦚","Wcirc":"Ŵ","wcirc":"ŵ","wedbar":"⩟","wedge":"∧","Wedge":"⋀","wedgeq":"≙","weierp":"℘","Wfr":"𝔚","wfr":"𝔴","Wopf":"𝕎","wopf":"𝕨","wp":"℘","wr":"≀","wreath":"≀","Wscr":"𝒲","wscr":"𝓌","xcap":"⋂","xcirc":"◯","xcup":"⋃","xdtri":"▽","Xfr":"𝔛","xfr":"𝔵","xharr":"⟷","xhArr":"⟺","Xi":"Ξ","xi":"ξ","xlarr":"⟵","xlArr":"⟸","xmap":"⟼","xnis":"⋻","xodot":"⨀","Xopf":"𝕏","xopf":"𝕩","xoplus":"⨁","xotime":"⨂","xrarr":"⟶","xrArr":"⟹","Xscr":"𝒳","xscr":"𝓍","xsqcup":"⨆","xuplus":"⨄","xutri":"△","xvee":"⋁","xwedge":"⋀","Yacute":"Ý","yacute":"ý","YAcy":"Я","yacy":"я","Ycirc":"Ŷ","ycirc":"ŷ","Ycy":"Ы","ycy":"ы","yen":"¥","Yfr":"𝔜","yfr":"𝔶","YIcy":"Ї","yicy":"ї","Yopf":"𝕐","yopf":"𝕪","Yscr":"𝒴","yscr":"𝓎","YUcy":"Ю","yucy":"ю","yuml":"ÿ","Yuml":"Ÿ","Zacute":"Ź","zacute":"ź","Zcaron":"Ž","zcaron":"ž","Zcy":"З","zcy":"з","Zdot":"Ż","zdot":"ż","zeetrf":"ℨ","ZeroWidthSpace":"​","Zeta":"Ζ","zeta":"ζ","zfr":"𝔷","Zfr":"ℨ","ZHcy":"Ж","zhcy":"ж","zigrarr":"⇝","zopf":"𝕫","Zopf":"ℤ","Zscr":"𝒵","zscr":"𝓏","zwj":"‍","zwnj":"‌"}'); - /***/ }), /***/ 8891: @@ -34993,19 +53888,19 @@ module.exports = JSON.parse('{"application/1d-interleaved-parityfec":{"source":" /***/ }), -/***/ 6445: +/***/ 560: /***/ ((module) => { "use strict"; -module.exports = JSON.parse('{"126":{"host":"smtp.126.com","port":465,"secure":true},"163":{"host":"smtp.163.com","port":465,"secure":true},"1und1":{"host":"smtp.1und1.de","port":465,"secure":true,"authMethod":"LOGIN"},"AOL":{"domains":["aol.com"],"host":"smtp.aol.com","port":587},"Bluewin":{"host":"smtpauths.bluewin.ch","domains":["bluewin.ch"],"port":465},"DebugMail":{"host":"debugmail.io","port":25},"DynectEmail":{"aliases":["Dynect"],"host":"smtp.dynect.net","port":25},"Ethereal":{"aliases":["ethereal.email"],"host":"smtp.ethereal.email","port":587},"FastMail":{"domains":["fastmail.fm"],"host":"smtp.fastmail.com","port":465,"secure":true},"GandiMail":{"aliases":["Gandi","Gandi Mail"],"host":"mail.gandi.net","port":587},"Gmail":{"aliases":["Google Mail"],"domains":["gmail.com","googlemail.com"],"host":"smtp.gmail.com","port":465,"secure":true},"Godaddy":{"host":"smtpout.secureserver.net","port":25},"GodaddyAsia":{"host":"smtp.asia.secureserver.net","port":25},"GodaddyEurope":{"host":"smtp.europe.secureserver.net","port":25},"hot.ee":{"host":"mail.hot.ee"},"Hotmail":{"aliases":["Outlook","Outlook.com","Hotmail.com"],"domains":["hotmail.com","outlook.com"],"host":"smtp-mail.outlook.com","port":587},"iCloud":{"aliases":["Me","Mac"],"domains":["me.com","mac.com"],"host":"smtp.mail.me.com","port":587},"Infomaniak":{"host":"mail.infomaniak.com","domains":["ik.me","ikmail.com","etik.com"],"port":587},"mail.ee":{"host":"smtp.mail.ee"},"Mail.ru":{"host":"smtp.mail.ru","port":465,"secure":true},"Maildev":{"port":1025,"ignoreTLS":true},"Mailgun":{"host":"smtp.mailgun.org","port":465,"secure":true},"Mailjet":{"host":"in.mailjet.com","port":587},"Mailosaur":{"host":"mailosaur.io","port":25},"Mailtrap":{"host":"smtp.mailtrap.io","port":2525},"Mandrill":{"host":"smtp.mandrillapp.com","port":587},"Naver":{"host":"smtp.naver.com","port":587},"One":{"host":"send.one.com","port":465,"secure":true},"OpenMailBox":{"aliases":["OMB","openmailbox.org"],"host":"smtp.openmailbox.org","port":465,"secure":true},"Outlook365":{"host":"smtp.office365.com","port":587,"secure":false},"OhMySMTP":{"host":"smtp.ohmysmtp.com","port":587,"secure":false},"Postmark":{"aliases":["PostmarkApp"],"host":"smtp.postmarkapp.com","port":2525},"qiye.aliyun":{"host":"smtp.mxhichina.com","port":"465","secure":true},"QQ":{"domains":["qq.com"],"host":"smtp.qq.com","port":465,"secure":true},"QQex":{"aliases":["QQ Enterprise"],"domains":["exmail.qq.com"],"host":"smtp.exmail.qq.com","port":465,"secure":true},"SendCloud":{"host":"smtp.sendcloud.net","port":2525},"SendGrid":{"host":"smtp.sendgrid.net","port":587},"SendinBlue":{"host":"smtp-relay.sendinblue.com","port":587},"SendPulse":{"host":"smtp-pulse.com","port":465,"secure":true},"SES":{"host":"email-smtp.us-east-1.amazonaws.com","port":465,"secure":true},"SES-US-EAST-1":{"host":"email-smtp.us-east-1.amazonaws.com","port":465,"secure":true},"SES-US-WEST-2":{"host":"email-smtp.us-west-2.amazonaws.com","port":465,"secure":true},"SES-EU-WEST-1":{"host":"email-smtp.eu-west-1.amazonaws.com","port":465,"secure":true},"Sparkpost":{"aliases":["SparkPost","SparkPost Mail"],"domains":["sparkpost.com"],"host":"smtp.sparkpostmail.com","port":587,"secure":false},"Tipimail":{"host":"smtp.tipimail.com","port":587},"Yahoo":{"domains":["yahoo.com"],"host":"smtp.mail.yahoo.com","port":465,"secure":true},"Yandex":{"domains":["yandex.ru"],"host":"smtp.yandex.ru","port":465,"secure":true},"Zoho":{"host":"smtp.zoho.com","port":465,"secure":true,"authMethod":"LOGIN"}}'); +module.exports = JSON.parse('{"126":{"host":"smtp.126.com","port":465,"secure":true},"163":{"host":"smtp.163.com","port":465,"secure":true},"1und1":{"host":"smtp.1und1.de","port":465,"secure":true,"authMethod":"LOGIN"},"Aliyun":{"domains":["aliyun.com"],"host":"smtp.aliyun.com","port":465,"secure":true},"AOL":{"domains":["aol.com"],"host":"smtp.aol.com","port":587},"Bluewin":{"host":"smtpauths.bluewin.ch","domains":["bluewin.ch"],"port":465},"DebugMail":{"host":"debugmail.io","port":25},"DynectEmail":{"aliases":["Dynect"],"host":"smtp.dynect.net","port":25},"Ethereal":{"aliases":["ethereal.email"],"host":"smtp.ethereal.email","port":587},"FastMail":{"domains":["fastmail.fm"],"host":"smtp.fastmail.com","port":465,"secure":true},"Forward Email":{"aliases":["FE","ForwardEmail"],"domains":["forwardemail.net"],"host":"smtp.forwardemail.net","port":465,"secure":true},"GandiMail":{"aliases":["Gandi","Gandi Mail"],"host":"mail.gandi.net","port":587},"Gmail":{"aliases":["Google Mail"],"domains":["gmail.com","googlemail.com"],"host":"smtp.gmail.com","port":465,"secure":true},"Godaddy":{"host":"smtpout.secureserver.net","port":25},"GodaddyAsia":{"host":"smtp.asia.secureserver.net","port":25},"GodaddyEurope":{"host":"smtp.europe.secureserver.net","port":25},"hot.ee":{"host":"mail.hot.ee"},"Hotmail":{"aliases":["Outlook","Outlook.com","Hotmail.com"],"domains":["hotmail.com","outlook.com"],"host":"smtp-mail.outlook.com","port":587},"iCloud":{"aliases":["Me","Mac"],"domains":["me.com","mac.com"],"host":"smtp.mail.me.com","port":587},"Infomaniak":{"host":"mail.infomaniak.com","domains":["ik.me","ikmail.com","etik.com"],"port":587},"mail.ee":{"host":"smtp.mail.ee"},"Mail.ru":{"host":"smtp.mail.ru","port":465,"secure":true},"Mailcatch.app":{"host":"sandbox-smtp.mailcatch.app","port":2525},"Maildev":{"port":1025,"ignoreTLS":true},"Mailgun":{"host":"smtp.mailgun.org","port":465,"secure":true},"Mailjet":{"host":"in.mailjet.com","port":587},"Mailosaur":{"host":"mailosaur.io","port":25},"Mailtrap":{"host":"smtp.mailtrap.io","port":2525},"Mandrill":{"host":"smtp.mandrillapp.com","port":587},"Naver":{"host":"smtp.naver.com","port":587},"One":{"host":"send.one.com","port":465,"secure":true},"OpenMailBox":{"aliases":["OMB","openmailbox.org"],"host":"smtp.openmailbox.org","port":465,"secure":true},"Outlook365":{"host":"smtp.office365.com","port":587,"secure":false},"OhMySMTP":{"host":"smtp.ohmysmtp.com","port":587,"secure":false},"Postmark":{"aliases":["PostmarkApp"],"host":"smtp.postmarkapp.com","port":2525},"qiye.aliyun":{"host":"smtp.mxhichina.com","port":"465","secure":true},"QQ":{"domains":["qq.com"],"host":"smtp.qq.com","port":465,"secure":true},"QQex":{"aliases":["QQ Enterprise"],"domains":["exmail.qq.com"],"host":"smtp.exmail.qq.com","port":465,"secure":true},"SendCloud":{"host":"smtp.sendcloud.net","port":2525},"SendGrid":{"host":"smtp.sendgrid.net","port":587},"SendinBlue":{"aliases":["Brevo"],"host":"smtp-relay.brevo.com","port":587},"SendPulse":{"host":"smtp-pulse.com","port":465,"secure":true},"SES":{"host":"email-smtp.us-east-1.amazonaws.com","port":465,"secure":true},"SES-US-EAST-1":{"host":"email-smtp.us-east-1.amazonaws.com","port":465,"secure":true},"SES-US-WEST-2":{"host":"email-smtp.us-west-2.amazonaws.com","port":465,"secure":true},"SES-EU-WEST-1":{"host":"email-smtp.eu-west-1.amazonaws.com","port":465,"secure":true},"SES-AP-SOUTH-1":{"host":"email-smtp.ap-south-1.amazonaws.com","port":465,"secure":true},"SES-AP-NORTHEAST-1":{"host":"email-smtp.ap-northeast-1.amazonaws.com","port":465,"secure":true},"SES-AP-NORTHEAST-2":{"host":"email-smtp.ap-northeast-2.amazonaws.com","port":465,"secure":true},"SES-AP-NORTHEAST-3":{"host":"email-smtp.ap-northeast-3.amazonaws.com","port":465,"secure":true},"SES-AP-SOUTHEAST-1":{"host":"email-smtp.ap-southeast-1.amazonaws.com","port":465,"secure":true},"SES-AP-SOUTHEAST-2":{"host":"email-smtp.ap-southeast-2.amazonaws.com","port":465,"secure":true},"Sparkpost":{"aliases":["SparkPost","SparkPost Mail"],"domains":["sparkpost.com"],"host":"smtp.sparkpostmail.com","port":587,"secure":false},"Tipimail":{"host":"smtp.tipimail.com","port":587},"Yahoo":{"domains":["yahoo.com"],"host":"smtp.mail.yahoo.com","port":465,"secure":true},"Yandex":{"domains":["yandex.ru"],"host":"smtp.yandex.ru","port":465,"secure":true},"Zoho":{"host":"smtp.zoho.com","port":465,"secure":true,"authMethod":"LOGIN"}}'); /***/ }), -/***/ 1149: +/***/ 3023: /***/ ((module) => { "use strict"; -module.exports = JSON.parse('{"name":"nodemailer","version":"6.9.1","description":"Easy as cake e-mail sending from your Node.js applications","main":"lib/nodemailer.js","scripts":{"test":"grunt --trace-warnings"},"repository":{"type":"git","url":"https://github.com/nodemailer/nodemailer.git"},"keywords":["Nodemailer"],"author":"Andris Reinman","license":"MIT","bugs":{"url":"https://github.com/nodemailer/nodemailer/issues"},"homepage":"https://nodemailer.com/","devDependencies":{"@aws-sdk/client-ses":"3.259.0","aws-sdk":"2.1303.0","bunyan":"1.8.15","chai":"4.3.7","eslint-config-nodemailer":"1.2.0","eslint-config-prettier":"8.6.0","grunt":"1.5.3","grunt-cli":"1.4.3","grunt-eslint":"24.0.1","grunt-mocha-test":"0.13.3","libbase64":"1.2.1","libmime":"5.2.0","libqp":"2.0.1","mocha":"10.2.0","nodemailer-ntlm-auth":"1.0.3","proxy":"1.0.2","proxy-test-server":"1.0.0","sinon":"15.0.1","smtp-server":"3.11.0"},"engines":{"node":">=6.0.0"}}'); +module.exports = JSON.parse('{"name":"nodemailer","version":"6.9.13","description":"Easy as cake e-mail sending from your Node.js applications","main":"lib/nodemailer.js","scripts":{"test":"node --test --test-concurrency=1 test/**/*.test.js test/**/*-test.js","test:coverage":"c8 node --test --test-concurrency=1 test/**/*.test.js test/**/*-test.js","lint":"eslint .","update":"rm -rf node_modules/ package-lock.json && ncu -u && npm install"},"repository":{"type":"git","url":"https://github.com/nodemailer/nodemailer.git"},"keywords":["Nodemailer"],"author":"Andris Reinman","license":"MIT-0","bugs":{"url":"https://github.com/nodemailer/nodemailer/issues"},"homepage":"https://nodemailer.com/","devDependencies":{"@aws-sdk/client-ses":"3.529.1","bunyan":"1.8.15","c8":"9.1.0","eslint":"8.57.0","eslint-config-nodemailer":"1.2.0","eslint-config-prettier":"9.1.0","libbase64":"1.3.0","libmime":"5.3.4","libqp":"2.1.0","nodemailer-ntlm-auth":"1.0.4","proxy":"1.0.2","proxy-test-server":"1.0.0","smtp-server":"3.13.3"},"engines":{"node":">=6.0.0"}}'); /***/ }) diff --git a/dist/licenses.txt b/dist/licenses.txt index e49e24e..f7c62ae 100644 --- a/dist/licenses.txt +++ b/dist/licenses.txt @@ -367,8 +367,8 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. nodemailer -MIT -Copyright (c) 2011-2019 Andris Reinman +MIT-0 +Copyright (c) 2011-2023 Andris Reinman Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -410,6 +410,30 @@ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +punycode.js +MIT +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + tunnel MIT The MIT License (MIT) diff --git a/package.json b/package.json index 9de160b..49a7420 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ ], "repository": { "type": "git", - "url": "git+https://github.com/actions/typescript-action.git" + "url": "git+https://github.com/yjl9903/fetch-captain.git" }, "license": "MIT", "author": "XLor", @@ -22,11 +22,11 @@ "release": "node ./scripts/release.mjs" }, "dependencies": { - "@actions/core": "^1.10.0", - "axios": "^1.3.6", - "date-fns": "^2.29.3", - "markdown-it": "^13.0.1", - "nodemailer": "^6.9.1" + "@actions/core": "^1.10.1", + "axios": "^1.6.8", + "date-fns": "^3.6.0", + "markdown-it": "^14.1.0", + "nodemailer": "^6.9.13" }, "devDependencies": { "@types/markdown-it": "12.2.3", @@ -36,8 +36,8 @@ "execa": "7.1.1", "fs-extra": "11.1.1", "js-yaml": "4.1.0", - "prettier": "^2.8.8", + "prettier": "^3.2.5", "typescript": "5.0.4" }, - "packageManager": "pnpm@8.3.1" + "packageManager": "pnpm@9.0.6" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 42f04b5..b5ef926 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,356 +1,422 @@ -lockfileVersion: '6.0' - -dependencies: - '@actions/core': - specifier: ^1.10.0 - version: 1.10.0 - axios: - specifier: ^1.3.6 - version: 1.3.6 - date-fns: - specifier: ^2.29.3 - version: 2.29.3 - markdown-it: - specifier: ^13.0.1 - version: 13.0.1 - nodemailer: - specifier: ^6.9.1 - version: 6.9.1 - -devDependencies: - '@types/markdown-it': - specifier: 12.2.3 - version: 12.2.3 - '@types/node': - specifier: 18.16.0 - version: 18.16.0 - '@types/nodemailer': - specifier: 6.4.7 - version: 6.4.7 - '@vercel/ncc': - specifier: 0.36.1 - version: 0.36.1 - execa: - specifier: 7.1.1 - version: 7.1.1 - fs-extra: - specifier: 11.1.1 - version: 11.1.1 - js-yaml: - specifier: 4.1.0 - version: 4.1.0 - prettier: - specifier: ^2.8.8 - version: 2.8.8 - typescript: - specifier: 5.0.4 - version: 5.0.4 +lockfileVersion: '9.0' -packages: +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: - /@actions/core@1.10.0: - resolution: {integrity: sha512-2aZDDa3zrrZbP5ZYg159sNoLRb61nQ7awl5pSvIq5Qpj81vwDzdMRKzkWJGJuwVvWpvZKx7vspJALyvaaIQyug==} + .: dependencies: - '@actions/http-client': 2.0.1 - uuid: 8.3.2 - dev: false + '@actions/core': + specifier: ^1.10.1 + version: 1.10.1 + axios: + specifier: ^1.6.8 + version: 1.6.8 + date-fns: + specifier: ^3.6.0 + version: 3.6.0 + markdown-it: + specifier: ^14.1.0 + version: 14.1.0 + nodemailer: + specifier: ^6.9.13 + version: 6.9.13 + devDependencies: + '@types/markdown-it': + specifier: 12.2.3 + version: 12.2.3 + '@types/node': + specifier: 18.16.0 + version: 18.16.0 + '@types/nodemailer': + specifier: 6.4.7 + version: 6.4.7 + '@vercel/ncc': + specifier: 0.36.1 + version: 0.36.1 + execa: + specifier: 7.1.1 + version: 7.1.1 + fs-extra: + specifier: 11.1.1 + version: 11.1.1 + js-yaml: + specifier: 4.1.0 + version: 4.1.0 + prettier: + specifier: ^3.2.5 + version: 3.2.5 + typescript: + specifier: 5.0.4 + version: 5.0.4 + +packages: - /@actions/http-client@2.0.1: + '@actions/core@1.10.1': + resolution: {integrity: sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==} + + '@actions/http-client@2.0.1': resolution: {integrity: sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==} - dependencies: - tunnel: 0.0.6 - dev: false - /@types/linkify-it@3.0.2: + '@types/linkify-it@3.0.2': resolution: {integrity: sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==} - dev: true - /@types/markdown-it@12.2.3: + '@types/markdown-it@12.2.3': resolution: {integrity: sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==} - dependencies: - '@types/linkify-it': 3.0.2 - '@types/mdurl': 1.0.2 - dev: true - /@types/mdurl@1.0.2: + '@types/mdurl@1.0.2': resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==} - dev: true - /@types/node@18.16.0: + '@types/node@18.16.0': resolution: {integrity: sha512-BsAaKhB+7X+H4GnSjGhJG9Qi8Tw+inU9nJDwmD5CgOmBLEI6ArdhikpLX7DjbjDRDTbqZzU2LSQNZg8WGPiSZQ==} - dev: true - /@types/nodemailer@6.4.7: + '@types/nodemailer@6.4.7': resolution: {integrity: sha512-f5qCBGAn/f0qtRcd4SEn88c8Fp3Swct1731X4ryPKqS61/A3LmmzN8zaEz7hneJvpjFbUUgY7lru/B/7ODTazg==} - dependencies: - '@types/node': 18.16.0 - dev: true - /@vercel/ncc@0.36.1: + '@vercel/ncc@0.36.1': resolution: {integrity: sha512-S4cL7Taa9yb5qbv+6wLgiKVZ03Qfkc4jGRuiUQMQ8HGBD5pcNRnHeYM33zBvJE4/zJGjJJ8GScB+WmTsn9mORw==} hasBin: true - dev: true - /argparse@2.0.1: + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - /asynckit@0.4.0: + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: false - /axios@1.3.6: - resolution: {integrity: sha512-PEcdkk7JcdPiMDkvM4K6ZBRYq9keuVJsToxm2zQIM70Qqo2WHTdJZMXcG9X+RmRp2VPNUQC8W1RAGbgt6b1yMg==} - dependencies: - follow-redirects: 1.15.2 - form-data: 4.0.0 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - dev: false + axios@1.6.8: + resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==} - /combined-stream@1.0.8: + combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} - dependencies: - delayed-stream: 1.0.0 - dev: false - /cross-spawn@7.0.3: + cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - dev: true - /date-fns@2.29.3: - resolution: {integrity: sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==} - engines: {node: '>=0.11'} - dev: false + date-fns@3.6.0: + resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} - /delayed-stream@1.0.0: + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - dev: false - /entities@3.0.1: - resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - dev: false - /execa@7.1.1: + execa@7.1.1: resolution: {integrity: sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==} engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 4.3.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.1.0 - onetime: 6.0.0 - signal-exit: 3.0.7 - strip-final-newline: 3.0.0 - dev: true - /follow-redirects@1.15.2: - resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} + follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} engines: {node: '>=4.0'} peerDependencies: debug: '*' peerDependenciesMeta: debug: optional: true - dev: false - /form-data@4.0.0: + form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.34 - dev: false - /fs-extra@11.1.1: + fs-extra@11.1.1: resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} engines: {node: '>=14.14'} - dependencies: - graceful-fs: 4.2.9 - jsonfile: 6.1.0 - universalify: 2.0.0 - dev: true - /get-stream@6.0.1: + get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - dev: true - /graceful-fs@4.2.9: + graceful-fs@4.2.9: resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==} - dev: true - /human-signals@4.3.0: + human-signals@4.3.0: resolution: {integrity: sha512-zyzVyMjpGBX2+6cDVZeFPCdtOtdsxOeseRhB9tkQ6xXmGUNrcnBzdEKPy3VPNYz+4gy1oukVOXcrJCunSyc6QQ==} engines: {node: '>=14.18.0'} - dev: true - /is-stream@3.0.0: + is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - /isexe@2.0.0: + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true - /js-yaml@4.1.0: + js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - dependencies: - argparse: 2.0.1 - dev: true - /jsonfile@6.1.0: + jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - dependencies: - universalify: 2.0.0 - optionalDependencies: - graceful-fs: 4.2.9 - dev: true - /linkify-it@4.0.1: - resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==} - dependencies: - uc.micro: 1.0.6 - dev: false + linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - /markdown-it@13.0.1: - resolution: {integrity: sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==} + markdown-it@14.1.0: + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} hasBin: true - dependencies: - argparse: 2.0.1 - entities: 3.0.1 - linkify-it: 4.0.1 - mdurl: 1.0.1 - uc.micro: 1.0.6 - dev: false - /mdurl@1.0.1: - resolution: {integrity: sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=} - dev: false + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} - /merge-stream@2.0.0: + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true - /mime-db@1.51.0: + mime-db@1.51.0: resolution: {integrity: sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==} engines: {node: '>= 0.6'} - dev: false - /mime-types@2.1.34: + mime-types@2.1.34: resolution: {integrity: sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==} engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.51.0 - dev: false - /mimic-fn@4.0.0: + mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} - dev: true - /nodemailer@6.9.1: - resolution: {integrity: sha512-qHw7dOiU5UKNnQpXktdgQ1d3OFgRAekuvbJLcdG5dnEo/GtcTHRYM7+UfJARdOFU9WUQO8OiIamgWPmiSFHYAA==} + nodemailer@6.9.13: + resolution: {integrity: sha512-7o38Yogx6krdoBf3jCAqnIN4oSQFx+fMa0I7dK1D+me9kBxx12D+/33wSb+fhOCtIxvYJ+4x4IMEhmhCKfAiOA==} engines: {node: '>=6.0.0'} - dev: false - /npm-run-path@5.1.0: + npm-run-path@5.1.0: resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - path-key: 4.0.0 - dev: true - /onetime@6.0.0: + onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} - dependencies: - mimic-fn: 4.0.0 - dev: true - /path-key@3.1.1: + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - dev: true - /path-key@4.0.0: + path-key@4.0.0: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} - dev: true - /prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} + prettier@3.2.5: + resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} + engines: {node: '>=14'} hasBin: true - dev: true - /proxy-from-env@1.1.0: + proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: false - /shebang-command@2.0.0: + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} - dependencies: - shebang-regex: 3.0.0 - dev: true - /shebang-regex@3.0.0: + shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - dev: true - /signal-exit@3.0.7: + signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true - /strip-final-newline@3.0.0: + strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} - dev: true - /tunnel@0.0.6: + tunnel@0.0.6: resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} - dev: false - /typescript@5.0.4: + typescript@5.0.4: resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} engines: {node: '>=12.20'} hasBin: true - dev: true - /uc.micro@1.0.6: - resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} - dev: false + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} - /universalify@2.0.0: + universalify@2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} - dev: true - /uuid@8.3.2: + uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true - dev: false - /which@2.0.2: + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true + +snapshots: + + '@actions/core@1.10.1': + dependencies: + '@actions/http-client': 2.0.1 + uuid: 8.3.2 + + '@actions/http-client@2.0.1': + dependencies: + tunnel: 0.0.6 + + '@types/linkify-it@3.0.2': {} + + '@types/markdown-it@12.2.3': + dependencies: + '@types/linkify-it': 3.0.2 + '@types/mdurl': 1.0.2 + + '@types/mdurl@1.0.2': {} + + '@types/node@18.16.0': {} + + '@types/nodemailer@6.4.7': + dependencies: + '@types/node': 18.16.0 + + '@vercel/ncc@0.36.1': {} + + argparse@2.0.1: {} + + asynckit@0.4.0: {} + + axios@1.6.8: + dependencies: + follow-redirects: 1.15.6 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + date-fns@3.6.0: {} + + delayed-stream@1.0.0: {} + + entities@4.5.0: {} + + execa@7.1.1: + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 4.3.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + + follow-redirects@1.15.6: {} + + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.34 + + fs-extra@11.1.1: + dependencies: + graceful-fs: 4.2.9 + jsonfile: 6.1.0 + universalify: 2.0.0 + + get-stream@6.0.1: {} + + graceful-fs@4.2.9: {} + + human-signals@4.3.0: {} + + is-stream@3.0.0: {} + + isexe@2.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.0 + optionalDependencies: + graceful-fs: 4.2.9 + + linkify-it@5.0.0: + dependencies: + uc.micro: 2.1.0 + + markdown-it@14.1.0: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + + mdurl@2.0.0: {} + + merge-stream@2.0.0: {} + + mime-db@1.51.0: {} + + mime-types@2.1.34: + dependencies: + mime-db: 1.51.0 + + mimic-fn@4.0.0: {} + + nodemailer@6.9.13: {} + + npm-run-path@5.1.0: + dependencies: + path-key: 4.0.0 + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + prettier@3.2.5: {} + + proxy-from-env@1.1.0: {} + + punycode.js@2.3.1: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + signal-exit@3.0.7: {} + + strip-final-newline@3.0.0: {} + + tunnel@0.0.6: {} + + typescript@5.0.4: {} + + uc.micro@2.1.0: {} + + universalify@2.0.0: {} + + uuid@8.3.2: {} + + which@2.0.2: dependencies: isexe: 2.0.0 - dev: true diff --git a/src/email.ts b/src/email.ts index 1045d6b..94cf50b 100644 --- a/src/email.ts +++ b/src/email.ts @@ -1,8 +1,8 @@ import * as core from '@actions/core'; -import { createTransport } from 'nodemailer'; -import { readFileSync } from 'fs'; import MarkdownIt from 'markdown-it'; -import format from 'date-fns/format'; +import { format } from 'date-fns'; +import { readFileSync } from 'fs'; +import { createTransport } from 'nodemailer'; import { User } from './types'; import { style } from './style'; diff --git a/src/main.ts b/src/main.ts index d7394f6..c86bf60 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,9 +1,9 @@ -import * as core from '@actions/core'; -import format from 'date-fns/format'; - import path from 'path'; import { existsSync, mkdirSync, writeFileSync } from 'fs'; +import * as core from '@actions/core'; +import { format } from 'date-fns'; + import { Client } from './client'; import { padLeft } from './utils'; import { sendEmail } from './email';