From 8afd0f1aa52864fa97e002d3414498f26098a95e Mon Sep 17 00:00:00 2001 From: Dan Cox Date: Mon, 16 Dec 2024 02:22:37 -0600 Subject: [PATCH] Disabling E2E testing until all Puppeteer tests are fixed --- build/editor.bundle.js | 1 - build/format.bundle.js | 36177 ++++++++++++++++++++++----------------- build/format.css | 2 +- dist/format.js | 2 +- package-lock.json | 897 +- package.json | 24 +- src/Storage.js | 5 +- src/Storylets.js | 3 +- test/setup.js | 4 +- 9 files changed, 20805 insertions(+), 16310 deletions(-) diff --git a/build/editor.bundle.js b/build/editor.bundle.js index 7cb938b1..41ddc0ab 100644 --- a/build/editor.bundle.js +++ b/build/editor.bundle.js @@ -1,5 +1,4 @@ /******/ (() => { // webpackBootstrap -var __webpack_exports__ = {}; (function () { // Create an element const test = document.createElement('p'); diff --git a/build/format.bundle.js b/build/format.bundle.js index 3a87ad7c..61c8cf65 100644 --- a/build/format.bundle.js +++ b/build/format.bundle.js @@ -1,7 +1,7 @@ /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ -/***/ 7083: +/***/ 4155: /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; @@ -52,13 +52,13 @@ */ -var fs = __webpack_require__(7790); -var path = __webpack_require__(5272); -var utils = __webpack_require__(1176); +var fs = __webpack_require__(7280); +var path = __webpack_require__(7024); +var utils = __webpack_require__(3182); var scopeOptionWarned = false; /** @type {string} */ -var _VERSION_STRING = (__webpack_require__(3558)/* .version */ .i8); +var _VERSION_STRING = (__webpack_require__(3840)/* .version */ .rE); var _DEFAULT_OPEN_DELIMITER = '<'; var _DEFAULT_CLOSE_DELIMITER = '>'; var _DEFAULT_DELIMITER = '%'; @@ -513,8 +513,8 @@ exports.clearCache = function () { exports.cache.reset(); }; -function Template(text, opts) { - opts = opts || utils.createNullProtoObjWherePossible(); +function Template(text, optsParam) { + var opts = utils.hasOwnOnlyObject(optsParam); var options = utils.createNullProtoObjWherePossible(); this.templateText = text; /** @type {string | null} */ @@ -958,9 +958,10 @@ if (typeof window != 'undefined') { } + /***/ }), -/***/ 1176: +/***/ 3182: /***/ ((__unused_webpack_module, exports) => { "use strict"; @@ -1204,114 +1205,1146 @@ exports.createNullProtoObjWherePossible = (function () { }; })(); +exports.hasOwnOnlyObject = function (obj) { + var o = exports.createNullProtoObjWherePossible(); + for (var p in obj) { + if (hasOwn(obj, p)) { + o[p] = obj[p]; + } + } + return o; +}; /***/ }), -/***/ 7187: -/***/ ((module) => { +/***/ 9878: +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; -// Copyright Joyent, Inc. and other Node contributors. -// -// 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. - - - -var R = typeof Reflect === 'object' ? Reflect : null -var ReflectApply = R && typeof R.apply === 'function' - ? R.apply - : function ReflectApply(target, receiver, args) { - return Function.prototype.apply.call(target, receiver, args); - } -var ReflectOwnKeys -if (R && typeof R.ownKeys === 'function') { - ReflectOwnKeys = R.ownKeys -} else if (Object.getOwnPropertySymbols) { - ReflectOwnKeys = function ReflectOwnKeys(target) { - return Object.getOwnPropertyNames(target) - .concat(Object.getOwnPropertySymbols(target)); - }; -} else { - ReflectOwnKeys = function ReflectOwnKeys(target) { - return Object.getOwnPropertyNames(target); - }; +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(__webpack_require__(3603)); +exports.htmlDecodeTree = decode_data_html_js_1.default; +var decode_data_xml_js_1 = __importDefault(__webpack_require__(2517)); +exports.xmlDecodeTree = decode_data_xml_js_1.default; +var decode_codepoint_js_1 = __importStar(__webpack_require__(5096)); +exports.decodeCodePoint = decode_codepoint_js_1.default; +var decode_codepoint_js_2 = __webpack_require__(5096); +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; + }; } - -function ProcessEmitWarning(warning) { - if (console && console.warn) console.warn(warning); +/** + * 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; } - -var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) { - return value !== value; +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); } - -function EventEmitter() { - EventEmitter.init.call(this); +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); } -module.exports = EventEmitter; -module.exports.once = once; +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 -// Backwards-compat with node 0.10.x -EventEmitter.EventEmitter = EventEmitter; +/***/ }), -EventEmitter.prototype._events = undefined; -EventEmitter.prototype._eventsCount = 0; -EventEmitter.prototype._maxListeners = undefined; +/***/ 5096: +/***/ ((__unused_webpack_module, exports) => { -// By default EventEmitters will print a warning if more than 10 listeners are -// added to it. This is a useful default which helps finding memory leaks. -var defaultMaxListeners = 10; +"use strict"; -function checkListener(listener) { - if (typeof listener !== 'function') { - throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); - } +// 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], +]); +/** + * 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 -Object.defineProperty(EventEmitter, 'defaultMaxListeners', { - enumerable: true, - get: function() { - return defaultMaxListeners; - }, - set: function(arg) { - if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) { - throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.'); - } - defaultMaxListeners = arg; - } -}); +/***/ }), -EventEmitter.init = function() { +/***/ 1818: +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - if (this._events === undefined || - this._events === Object.getPrototypeOf(this)._events) { - this._events = Object.create(null); - this._eventsCount = 0; - } +"use strict"; - this._maxListeners = this._maxListeners || undefined; +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(__webpack_require__(5504)); +var escape_js_1 = __webpack_require__(5987); +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 + +/***/ }), + +/***/ 5987: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +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; +/** + * Encodes all non-ASCII characters, as well as characters not valid in XML + * documents using numeric hexadecimal reference (eg. `ü`). + * + * 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 + +/***/ }), + +/***/ 3603: +/***/ ((__unused_webpack_module, exports) => { + +"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 + +/***/ }), + +/***/ 2517: +/***/ ((__unused_webpack_module, exports) => { + +"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 + +/***/ }), + +/***/ 5504: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// 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 + +/***/ }), + +/***/ 2730: +/***/ ((__unused_webpack_module, exports, __webpack_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 = __webpack_require__(9878); +var encode_js_1 = __webpack_require__(1818); +var escape_js_1 = __webpack_require__(5987); +/** 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 = {})); +/** + * 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; +/** + * Decodes a string with entities. Does not allow missing trailing semicolons for entities. + * + * @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 = __webpack_require__(5987); +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 = __webpack_require__(1818); +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 = __webpack_require__(9878); +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 + +/***/ }), + +/***/ 7007: +/***/ ((module) => { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// 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. + + + +var R = typeof Reflect === 'object' ? Reflect : null +var ReflectApply = R && typeof R.apply === 'function' + ? R.apply + : function ReflectApply(target, receiver, args) { + return Function.prototype.apply.call(target, receiver, args); + } + +var ReflectOwnKeys +if (R && typeof R.ownKeys === 'function') { + ReflectOwnKeys = R.ownKeys +} else if (Object.getOwnPropertySymbols) { + ReflectOwnKeys = function ReflectOwnKeys(target) { + return Object.getOwnPropertyNames(target) + .concat(Object.getOwnPropertySymbols(target)); + }; +} else { + ReflectOwnKeys = function ReflectOwnKeys(target) { + return Object.getOwnPropertyNames(target); + }; +} + +function ProcessEmitWarning(warning) { + if (console && console.warn) console.warn(warning); +} + +var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) { + return value !== value; +} + +function EventEmitter() { + EventEmitter.init.call(this); +} +module.exports = EventEmitter; +module.exports.once = once; + +// Backwards-compat with node 0.10.x +EventEmitter.EventEmitter = EventEmitter; + +EventEmitter.prototype._events = undefined; +EventEmitter.prototype._eventsCount = 0; +EventEmitter.prototype._maxListeners = undefined; + +// By default EventEmitters will print a warning if more than 10 listeners are +// added to it. This is a useful default which helps finding memory leaks. +var defaultMaxListeners = 10; + +function checkListener(listener) { + if (typeof listener !== 'function') { + throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); + } +} + +Object.defineProperty(EventEmitter, 'defaultMaxListeners', { + enumerable: true, + get: function() { + return defaultMaxListeners; + }, + set: function(arg) { + if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) { + throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.'); + } + defaultMaxListeners = arg; + } +}); + +EventEmitter.init = function() { + + if (this._events === undefined || + this._events === Object.getPrototypeOf(this)._events) { + this._events = Object.create(null); + this._eventsCount = 0; + } + + this._maxListeners = this._maxListeners || undefined; +}; + // Obviously not all Emitters should be limited to 10. This function allows // that to be increased. Set to zero for unlimited. EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { @@ -1714,18 +2747,18 @@ function eventTargetAgnosticAddListener(emitter, name, listener, flags) { /***/ }), -/***/ 9755: +/***/ 4692: /***/ (function(module, exports) { var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! - * jQuery JavaScript Library v3.7.0 + * jQuery JavaScript Library v3.7.1 * https://jquery.com/ * * Copyright OpenJS Foundation and other contributors * Released under the MIT license * https://jquery.org/license * - * Date: 2023-05-11T18:29Z + * Date: 2023-08-28T13:37Z */ ( function( global, factory ) { @@ -1866,7 +2899,7 @@ function toType( obj ) { -var version = "3.7.0", +var version = "3.7.1", rhtmlSuffix = /HTML$/i, @@ -2130,9 +3163,14 @@ jQuery.extend( { // Do not traverse comment nodes ret += jQuery.text( node ); } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + } + if ( nodeType === 1 || nodeType === 11 ) { return elem.textContent; - } else if ( nodeType === 3 || nodeType === 4 ) { + } + if ( nodeType === 9 ) { + return elem.documentElement.textContent; + } + if ( nodeType === 3 || nodeType === 4 ) { return elem.nodeValue; } @@ -2845,12 +3883,17 @@ function setDocument( node ) { documentElement.msMatchesSelector; // Support: IE 9 - 11+, Edge 12 - 18+ - // Accessing iframe documents after unload throws "permission denied" errors (see trac-13936) - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( preferredDoc != document && + // Accessing iframe documents after unload throws "permission denied" errors + // (see trac-13936). + // Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`, + // all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well. + if ( documentElement.msMatchesSelector && + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + preferredDoc != document && ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { // Support: IE 9 - 11+, Edge 12 - 18+ @@ -4413,12 +5456,12 @@ jQuery.find = find; jQuery.expr[ ":" ] = jQuery.expr.pseudos; jQuery.unique = jQuery.uniqueSort; -// These have always been private, but they used to be documented -// as part of Sizzle so let's maintain them in the 3.x line -// for backwards compatibility purposes. +// These have always been private, but they used to be documented as part of +// Sizzle so let's maintain them for now for backwards compatibility purposes. find.compile = compile; find.select = select; find.setDocument = setDocument; +find.tokenize = tokenize; find.escape = jQuery.escapeSelector; find.getText = jQuery.text; @@ -7632,7 +8675,7 @@ function domManip( collection, args, callback, ignored ) { if ( hasScripts ) { doc = scripts[ scripts.length - 1 ].ownerDocument; - // Reenable scripts + // Re-enable scripts jQuery.map( scripts, restoreScript ); // Evaluate executable scripts on first document insertion @@ -8089,7 +9132,7 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); trChild = document.createElement( "div" ); table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; - tr.style.cssText = "border:1px solid"; + tr.style.cssText = "box-sizing:content-box;border:1px solid"; // Support: Chrome 86+ // Height set through cssText does not get applied. @@ -8101,7 +9144,7 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); // In our bodyBackground.html iframe, // display for all div elements is set to "inline", // which causes a problem only in Android 8 Chrome 86. - // Ensuring the div is display: block + // Ensuring the div is `display: block` // gets around this issue. trChild.style.display = "block"; @@ -12269,7 +13312,9 @@ jQuery.fn.extend( { }, hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + return this + .on( "mouseenter", fnOver ) + .on( "mouseleave", fnOut || fnOver ); } } ); @@ -12426,84 +13471,271 @@ return jQuery; /***/ }), -/***/ 8337: +/***/ 2814: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; +var uc_micro = __webpack_require__(3492); -//////////////////////////////////////////////////////////////////////////////// -// Helpers - -// Merge objects -// -function assign(obj /*from1, from2, from3, ...*/) { - var sources = Array.prototype.slice.call(arguments, 1); +function reFactory (opts) { + const re = {}; + opts = opts || {}; - sources.forEach(function (source) { - if (!source) { return; } + 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; - Object.keys(source).forEach(function (key) { - obj[key] = source[key]; - }); - }); + // \p{\Z\P\Cc\CF} (white spaces + control + format + punctuation) + re.src_ZPCc = [re.src_Z, re.src_P, re.src_Cc].join('|'); - return obj; -} + // \p{\Z\Cc} (white spaces + control) + re.src_ZCc = [re.src_Z, re.src_Cc].join('|'); -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]'; } + // Experimental. List of chars, completely prohibited in links + // because can separate it from other part of text + const text_separators = '[><\uff5c]'; + // 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 + ')'; -function escapeRE(str) { return str.replace(/[.?*+^$[\]\\(){}|-]/g, '\\$&'); } + re.src_ip4 = -//////////////////////////////////////////////////////////////////////////////// + '(?:(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]?)'; + // Prohibit any of "@/[]()" in user/pass to avoid wrong domain fetch. + re.src_auth = '(?:(?:(?!' + re.src_ZCc + '|[@/\\[\\]()]).)+@)?'; -var defaultOptions = { - fuzzyLink: true, - fuzzyEmail: true, - fuzzyIP: false -}; + re.src_port = + '(?::(?:6(?:[0-4]\\d{3}|5(?:[0-4]\\d{2}|5(?:[0-2]\\d|3[0-5])))|[1-5]?\\d{1,4}))?'; -function isOptionsObj(obj) { - return Object.keys(obj || {}).reduce(function (acc, k) { - return acc || defaultOptions.hasOwnProperty(k); - }, false); -} + re.src_host_terminator = + '(?=$|' + text_separators + '|' + re.src_ZPCc + ')' + + '(?!' + (opts['---'] ? '-(?!--)|' : '-|') + '_|:\\d|\\.-|\\.(?!$|' + re.src_ZPCc + '))'; -var defaultSchemas = { - 'http:': { - validate: function (text, pos, self) { - var tail = text.slice(pos); + re.src_path = - if (!self.re.http) { - // compile lazily, because "host"-containing variables can change on tlds update. - self.re.http = new RegExp( + '(?:' + + '[/?#]' + + '(?:' + + '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\]{}.,"\'?!\\-;]).|' + + '\\[(?:(?!' + re.src_ZCc + '|\\]).)*\\]|' + + '\\((?:(?!' + re.src_ZCc + '|[)]).)*\\)|' + + '\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\}|' + + '\\"(?:(?!' + re.src_ZCc + '|["]).)+\\"|' + + "\\'(?:(?!" + re.src_ZCc + "|[']).)+\\'|" + + + // allow `I'm_king` if no pair found + "\\'(?=" + re.src_pseudo_letter + '|[-])|' + + + // 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%/&]|' + + + '\\.(?!' + re.src_ZCc + '|[.]|$)|' + + (opts['---'] + ? '\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate + : '\\-+|' + ) + + // 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 + '|[!]|$)|' + + + '\\?(?!' + re.src_ZCc + '|[?]|$)' + + ')+' + + '|\\/' + + ')?'; + + // 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 = + + 'xn--[a-z0-9\\-]{1,59}'; + + // More to read about domain names + // http://serverfault.com/questions/638260/ + + re.src_domain_root = + + // Allow letters & digits (http://test1) + '(?:' + + re.src_xn + + '|' + + re.src_pseudo_letter + '{1,63}' + + ')'; + + re.src_domain = + + '(?:' + + re.src_xn + + '|' + + '(?:' + re.src_pseudo_letter + ')' + + '|' + + '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' + + ')'; + + re.src_host = + + '(?:' + + // Don't need IP check, because digits are already allowed in normal domain names + // src_ip4 + + // '|' + + '(?:(?:(?:' + re.src_domain + ')\\.)*' + re.src_domain/* _root */ + ')' + + ')'; + + re.tpl_host_fuzzy = + + '(?:' + + re.src_ip4 + + '|' + + '(?:(?:(?:' + re.src_domain + ')\\.)+(?:%TLDS%))' + + ')'; + + re.tpl_host_no_ip_fuzzy = + + '(?:(?:(?:' + re.src_domain + ')\\.)+(?:%TLDS%))'; + + re.src_host_strict = + + re.src_host + re.src_host_terminator; + + re.tpl_host_fuzzy_strict = + + re.tpl_host_fuzzy + re.src_host_terminator; + + re.src_host_port_strict = + + re.src_host + re.src_port + re.src_host_terminator; + + re.tpl_host_port_fuzzy_strict = + + 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 re +} + +// +// Helpers +// + +// Merge objects +// +function assign (obj /* from1, from2, from3, ... */) { + const 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 +} + +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, '\\$&') } + +// + +const defaultOptions = { + fuzzyLink: true, + fuzzyEmail: true, + fuzzyIP: false +}; + +function isOptionsObj (obj) { + return Object.keys(obj || {}).reduce(function (acc, k) { + /* eslint-disable-next-line no-prototype-builtins */ + return acc || defaultOptions.hasOwnProperty(k) + }, false) +} + +const defaultSchemas = { + 'http:': { + validate: function (text, pos, self) { + const tail = text.slice(pos); + + 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 tail.match(self.re.http)[0].length } - return 0; + return 0 } }, - 'https:': 'http:', - 'ftp:': 'http:', - '//': { + 'https:': 'http:', + 'ftp:': 'http:', + '//': { validate: function (text, pos, self) { - var tail = text.slice(pos); + const 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.no_http = new RegExp( '^' + self.re.src_auth + // Don't allow single-level domains, because of false positives like '//test' @@ -12519,73 +13751,67 @@ var defaultSchemas = { 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; + 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; + return 0 } }, 'mailto:': { validate: function (text, pos, self) { - var tail = text.slice(pos); + const tail = text.slice(pos); if (!self.re.mailto) { - self.re.mailto = new RegExp( + 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 tail.match(self.re.mailto)[0].length } - return 0; + return 0 } } }; -/*eslint-disable max-len*/ - // 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]'; +/* 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 -var tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'.split('|'); +const tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'.split('|'); -/*eslint-enable max-len*/ - -//////////////////////////////////////////////////////////////////////////////// - -function resetScanCache(self) { +function resetScanCache (self) { self.__index__ = -1; - self.__text_cache__ = ''; + self.__text_cache__ = ''; } -function createValidator(re) { +function createValidator (re) { return function (text, pos) { - var tail = text.slice(pos); + const tail = text.slice(pos); if (re.test(tail)) { - return tail.match(re)[0].length; + return tail.match(re)[0].length } - return 0; - }; + return 0 + } } -function createNormalizer() { +function createNormalizer () { return function (match, self) { self.normalize(match); - }; + } } // Schemas compiler. Build regexps. // -function compile(self) { - +function compile (self) { // Load & clone RE patterns. - var re = self.re = __webpack_require__(6066)(self.__opts__); + const re = self.re = reFactory(self.__opts__); // Define dynamic patterns - var tlds = self.__tlds__.slice(); + const tlds = self.__tlds__.slice(); self.onCompile(); @@ -12596,32 +13822,32 @@ function compile(self) { re.src_tlds = tlds.join('|'); - function untpl(tpl) { return tpl.replace('%TLDS%', re.src_tlds); } + 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.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'); + re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), 'i'); // // Compile each schema // - var aliases = []; + const aliases = []; self.__compiled__ = {}; // Reset compiled data - function schemaError(name, val) { - throw new Error('(LinkifyIt) Invalid schema "' + name + '": ' + val); + function schemaError (name, val) { + throw new Error('(LinkifyIt) Invalid schema "' + name + '": ' + val) } Object.keys(self.__schemas__).forEach(function (name) { - var val = self.__schemas__[name]; + const val = self.__schemas__[name]; // skip disabled methods - if (val === null) { return; } + if (val === null) { return } - var compiled = { validate: null, link: null }; + const compiled = { validate: null, link: null }; self.__compiled__[name] = compiled; @@ -12642,12 +13868,12 @@ function compile(self) { schemaError(name, val); } - return; + return } if (isString(val)) { aliases.push(name); - return; + return } schemaError(name, val); @@ -12661,7 +13887,7 @@ function compile(self) { if (!self.__compiled__[self.__schemas__[alias]]) { // Silently fail on missed schemas to avoid errons on disable. // schemaError(alias, self.__schemas__[alias]); - return; + return } self.__compiled__[alias].validate = @@ -12678,16 +13904,16 @@ function compile(self) { // // 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('|'); + 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_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'); self.re.pretest = RegExp( @@ -12707,23 +13933,23 @@ function compile(self) { * * 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); +function Match (self, shift) { + const start = self.__index__; + const end = self.__last_index__; + const text = self.__text_cache__.slice(start, end); /** * Match#schema -> String * * Prefix (protocol) for matched string. **/ - this.schema = self.__schema__.toLowerCase(); + this.schema = self.__schema__.toLowerCase(); /** * Match#index -> Number * * First position of matched string. **/ - this.index = start + shift; + this.index = start + shift; /** * Match#lastIndex -> Number * @@ -12735,30 +13961,29 @@ function Match(self, shift) { * * Matched string. **/ - this.raw = text; + this.raw = text; /** * Match#text -> String * * Notmalized text of matched string. **/ - this.text = text; + this.text = text; /** * Match#url -> String * * Normalized url of matched string. **/ - this.url = text; + this.url = text; } -function createMatch(self, shift) { - var match = new Match(self, shift); +function createMatch (self, shift) { + const match = new Match(self, shift); self.__compiled__[match.schema].normalize(match, self); - return match; + return match } - /** * class LinkifyIt **/ @@ -12797,9 +14022,9 @@ function createMatch(self, shift) { * - __fuzzyEmail__ - recognize emails without `mailto:` prefix. * **/ -function LinkifyIt(schemas, options) { +function LinkifyIt (schemas, options) { if (!(this instanceof LinkifyIt)) { - return new LinkifyIt(schemas, options); + return new LinkifyIt(schemas, options) } if (!options) { @@ -12809,26 +14034,25 @@ function LinkifyIt(schemas, options) { } } - this.__opts__ = assign({}, defaultOptions, options); + this.__opts__ = assign({}, defaultOptions, options); // 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__ = ''; + this.__index__ = -1; + this.__last_index__ = -1; // Next scan position + this.__schema__ = ''; + this.__text_cache__ = ''; - this.__schemas__ = assign({}, defaultSchemas, schemas); - this.__compiled__ = {}; + this.__schemas__ = assign({}, defaultSchemas, schemas); + this.__compiled__ = {}; - this.__tlds__ = tlds_default; - this.__tlds_replaced__ = false; + this.__tlds__ = tlds_default; + this.__tlds_replaced__ = false; this.re = {}; compile(this); } - /** chainable * LinkifyIt#add(schema, definition) * - schema (String): rule name (fixed pattern prefix) @@ -12836,38 +14060,36 @@ function LinkifyIt(schemas, options) { * * Add new rule definition. See constructor description for details. **/ -LinkifyIt.prototype.add = function add(schema, definition) { +LinkifyIt.prototype.add = function add (schema, definition) { this.__schemas__[schema] = definition; compile(this); - return 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) { +LinkifyIt.prototype.set = function set (options) { this.__opts__ = assign(this.__opts__, options); - return this; + return this }; - /** * LinkifyIt#test(text) -> Boolean * * Searches linkifiable pattern and returns `true` on success or `false` on fail. **/ -LinkifyIt.prototype.test = function test(text) { +LinkifyIt.prototype.test = function test (text) { // Reset scan cache this.__text_cache__ = text; - this.__index__ = -1; + this.__index__ = -1; - if (!text.length) { return false; } + if (!text.length) { return false } - var m, ml, me, len, shift, next, re, tld_pos, at_pos; + let m, ml, me, len, shift, next, re, tld_pos, at_pos; // try to scan for link with schema - that's the most simple rule if (this.re.schema_test.test(text)) { @@ -12876,10 +14098,10 @@ LinkifyIt.prototype.test = function test(text) { 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.__schema__ = m[2]; + this.__index__ = m.index + m[1].length; this.__last_index__ = m.index + m[0].length + len; - break; + break } } } @@ -12891,12 +14113,11 @@ LinkifyIt.prototype.test = function test(text) { // 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.__schema__ = ''; + this.__index__ = shift; this.__last_index__ = ml.index + ml[0].length; } } @@ -12911,24 +14132,22 @@ LinkifyIt.prototype.test = function test(text) { // 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; + next = me.index + me[0].length; if (this.__index__ < 0 || shift < this.__index__ || (shift === this.__index__ && next > this.__last_index__)) { - this.__schema__ = 'mailto:'; - this.__index__ = shift; + this.__schema__ = 'mailto:'; + this.__index__ = shift; this.__last_index__ = next; } } } } - return this.__index__ >= 0; + return this.__index__ >= 0 }; - /** * LinkifyIt#pretest(text) -> Boolean * @@ -12936,11 +14155,10 @@ LinkifyIt.prototype.test = function test(text) { * 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.prototype.pretest = function pretest (text) { + return this.re.pretest.test(text) }; - /** * LinkifyIt#testSchemaAt(text, name, position) -> Number * - text (String): text to scan @@ -12950,15 +14168,14 @@ LinkifyIt.prototype.pretest = function pretest(text) { * 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) { +LinkifyIt.prototype.testSchemaAt = function testSchemaAt (text, schema, pos) { // If not supported schema check requested - terminate if (!this.__compiled__[schema.toLowerCase()]) { - return 0; + return 0 } - return this.__compiled__[schema.toLowerCase()].validate(text, pos, this); + return this.__compiled__[schema.toLowerCase()].validate(text, pos, this) }; - /** * LinkifyIt#match(text) -> Array|null * @@ -12975,8 +14192,9 @@ LinkifyIt.prototype.testSchemaAt = function testSchemaAt(text, schema, pos) { * - __text__ - normalized text * - __url__ - link, generated from matched text **/ -LinkifyIt.prototype.match = function match(text) { - var shift = 0, result = []; +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) { @@ -12985,7 +14203,7 @@ LinkifyIt.prototype.match = function match(text) { } // Cut head if cache was used - var tail = shift ? text.slice(shift) : text; + let tail = shift ? text.slice(shift) : text; // Scan string until end reached while (this.test(tail)) { @@ -12996,40 +14214,38 @@ LinkifyIt.prototype.match = function match(text) { } if (result.length) { - return result; + return result } - return null; + return null }; - /** * 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) { +LinkifyIt.prototype.matchAtStart = function matchAtStart (text) { // Reset scan cache this.__text_cache__ = text; - this.__index__ = -1; + this.__index__ = -1; - if (!text.length) return null; + if (!text.length) return null - var m = this.re.schema_at_start.exec(text); - if (!m) return null; + const 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; + const 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.__schema__ = m[2]; + this.__index__ = m.index + m[1].length; this.__last_index__ = m.index + m[0].length + len; - return createMatch(this, 0); + return createMatch(this, 0) }; - /** chainable * LinkifyIt#tlds(list [, keepOld]) -> this * - list (Array): list of tlds @@ -13045,25 +14261,25 @@ LinkifyIt.prototype.matchAtStart = function matchAtStart(text) { * * 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 ]; +LinkifyIt.prototype.tlds = function tlds (list, keepOld) { + list = Array.isArray(list) ? list : [list]; if (!keepOld) { this.__tlds__ = list.slice(); this.__tlds_replaced__ = true; compile(this); - return this; + return this } this.__tlds__ = this.__tlds__.concat(list) - .sort() - .filter(function (el, idx, arr) { - return el !== arr[idx - 1]; - }) - .reverse(); + .sort() + .filter(function (el, idx, arr) { + return el !== arr[idx - 1] + }) + .reverse(); compile(this); - return this; + return this }; /** @@ -13071,8 +14287,7 @@ LinkifyIt.prototype.tlds = function tlds(list, keepOld) { * * Default normalizer (if schema does not define it's own). **/ -LinkifyIt.prototype.normalize = function normalize(match) { - +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 @@ -13083,508 +14298,193 @@ LinkifyIt.prototype.normalize = function normalize(match) { } }; - /** * LinkifyIt#onCompile() * * Override to modify basic RegExp-s. **/ -LinkifyIt.prototype.onCompile = function onCompile() { +LinkifyIt.prototype.onCompile = function onCompile () { }; - module.exports = LinkifyIt; /***/ }), -/***/ 6066: +/***/ 383: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; +var mdurl = __webpack_require__(5778); +var ucmicro = __webpack_require__(3492); +var entities = __webpack_require__(2730); +var LinkifyIt = __webpack_require__(2814); +var punycode = __webpack_require__(7444); -module.exports = function (opts) { - var re = {}; - opts = opts || {}; - - // Use direct extract instead of `regenerate` to reduse browserified size - re.src_Any = (__webpack_require__(9369).source); - re.src_Cc = (__webpack_require__(9413).source); - re.src_Z = (__webpack_require__(5045).source); - re.src_P = (__webpack_require__(3189).source); - - // \p{\Z\P\Cc\CF} (white spaces + control + format + punctuation) - re.src_ZPCc = [ re.src_Z, re.src_P, re.src_Cc ].join('|'); - - // \p{\Z\Cc} (white spaces + control) - re.src_ZCc = [ re.src_Z, re.src_Cc ].join('|'); - - // Experimental. List of chars, completely prohibited in links - // because can separate it from other part of text - var text_separators = '[><\uff5c]'; - - // 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 + ')'; - - //////////////////////////////////////////////////////////////////////////////// - - re.src_ip4 = - - '(?:(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]?)'; - - // Prohibit any of "@/[]()" in user/pass to avoid wrong domain fetch. - re.src_auth = '(?:(?:(?!' + re.src_ZCc + '|[@/\\[\\]()]).)+@)?'; - - re.src_port = +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); +} - '(?::(?:6(?:[0-4]\\d{3}|5(?:[0-4]\\d{2}|5(?:[0-2]\\d|3[0-5])))|[1-5]?\\d{1,4}))?'; +var mdurl__namespace = /*#__PURE__*/_interopNamespaceDefault(mdurl); +var ucmicro__namespace = /*#__PURE__*/_interopNamespaceDefault(ucmicro); - re.src_host_terminator = +// Utilities +// - '(?=$|' + text_separators + '|' + re.src_ZPCc + ')' + - '(?!' + (opts['---'] ? '-(?!--)|' : '-|') + '_|:\\d|\\.-|\\.(?!$|' + re.src_ZPCc + '))'; +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); +} - re.src_path = - - '(?:' + - '[/?#]' + - '(?:' + - '(?!' + 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 + '|[?]|$)' + - ')+' + - '|\\/' + - ')?'; - - // 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 = - - 'xn--[a-z0-9\\-]{1,59}'; - - // More to read about domain names - // http://serverfault.com/questions/638260/ - - re.src_domain_root = - - // Allow letters & digits (http://test1) - '(?:' + - re.src_xn + - '|' + - re.src_pseudo_letter + '{1,63}' + - ')'; - - re.src_domain = - - '(?:' + - re.src_xn + - '|' + - '(?:' + re.src_pseudo_letter + ')' + - '|' + - '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' + - ')'; - - re.src_host = - - '(?:' + - // Don't need IP check, because digits are already allowed in normal domain names - // src_ip4 + - // '|' + - '(?:(?:(?:' + re.src_domain + ')\\.)*' + re.src_domain/*_root*/ + ')' + - ')'; - - re.tpl_host_fuzzy = - - '(?:' + - re.src_ip4 + - '|' + - '(?:(?:(?:' + re.src_domain + ')\\.)+(?:%TLDS%))' + - ')'; - - re.tpl_host_no_ip_fuzzy = - - '(?:(?:(?:' + re.src_domain + ')\\.)+(?:%TLDS%))'; - - re.src_host_strict = - - re.src_host + re.src_host_terminator; - - re.tpl_host_fuzzy_strict = - - re.tpl_host_fuzzy + re.src_host_terminator; - - re.src_host_port_strict = - - re.src_host + re.src_port + re.src_host_terminator; - - re.tpl_host_port_fuzzy_strict = - - 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 re; -}; - - -/***/ }), - -/***/ 9980: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - - -module.exports = __webpack_require__(7024); - - -/***/ }), - -/***/ 6233: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// HTML5 entities map: { name -> utf16string } -// - - -/*eslint quotes:0*/ -module.exports = __webpack_require__(9323); - - -/***/ }), - -/***/ 813: -/***/ ((module) => { - -"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' -]; - - -/***/ }), - -/***/ 1947: -/***/ ((module) => { - -"use strict"; -// Regexps to match html elements - - - -var attr_name = '[a-zA-Z_:][a-zA-Z0-9:._-]*'; - -var unquoted = '[^"\'=<>`\\x00-\\x20]+'; -var single_quoted = "'[^']*'"; -var double_quoted = '"[^"]*"'; - -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*\\/?>'; - -var close_tag = '<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>'; -var comment = '|'; -var processing = '<[?][\\s\\S]*?[?]>'; -var declaration = ']*>'; -var cdata = ''; - -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 + ')'); - -module.exports.n = HTML_TAG_RE; -module.exports.q = HTML_OPEN_CLOSE_TAG_RE; - - -/***/ }), - -/***/ 7022: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -// Utilities -// - - - -function _class(obj) { return Object.prototype.toString.call(obj); } - -function isString(obj) { return _class(obj) === '[object String]'; } - -var _hasOwnProperty = Object.prototype.hasOwnProperty; - -function has(object, key) { - return _hasOwnProperty.call(object, key); -} - -// 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'); - } - - Object.keys(source).forEach(function (key) { - obj[key] = source[key]; - }); - }); - - return obj; -} +// 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; +} // 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*/ + /* eslint no-bitwise:0 */ // broken sequence - if (c >= 0xD800 && c <= 0xDFFF) { return false; } + 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; } + 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; } + 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; } + if (c > 0x10FFFF) { + return false; + } return true; } - function fromCodePoint(c) { - /*eslint no-bitwise:0*/ + /* eslint no-bitwise:0 */ if (c > 0xffff) { c -= 0x10000; - var surrogate1 = 0xd800 + (c >> 10), - surrogate2 = 0xdc00 + (c & 0x3ff); - + const surrogate1 = 0xd800 + (c >> 10); + const surrogate2 = 0xdc00 + (c & 0x3ff); return String.fromCharCode(surrogate1, surrogate2); } return String.fromCharCode(c); } - - -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'); - -var DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i; - -var entities = __webpack_require__(6233); - +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) { - var code = 0; - - if (has(entities, name)) { - return entities[name]; - } - - 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); - + 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; } -/*function replaceEntities(str) { +/* function replaceEntities(str) { if (str.indexOf('&') < 0) { return str; } return str.replace(ENTITY_RE, replaceEntityPattern); -}*/ +} */ function unescapeMd(str) { - if (str.indexOf('\\') < 0) { return 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; } - + if (str.indexOf('\\') < 0 && str.indexOf('&') < 0) { + return str; + } return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) { - if (escaped) { return escaped; } + if (escaped) { + return escaped; + } return replaceEntityPattern(match, entity); }); } - -//////////////////////////////////////////////////////////////////////////////// - -var HTML_ESCAPE_TEST_RE = /[&<>"]/; -var HTML_ESCAPE_REPLACE_RE = /[&<>"]/g; -var HTML_REPLACEMENTS = { +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; } - -//////////////////////////////////////////////////////////////////////////////// - -var REGEXP_ESCAPE_RE = /[.?*+^$[\]\\(){}|-]/g; - +const REGEXP_ESCAPE_RE = /[.?*+^$[\]\\(){}|-]/g; function escapeRE(str) { return str.replace(REGEXP_ESCAPE_RE, '\\$&'); } - -//////////////////////////////////////////////////////////////////////////////// - function isSpace(code) { switch (code) { case 0x09: @@ -13596,7 +14496,9 @@ function isSpace(code) { // Zs (unicode class) || [\t\f\v\r\n] function isWhiteSpace(code) { - if (code >= 0x2000 && code <= 0x200A) { return true; } + if (code >= 0x2000 && code <= 0x200A) { + return true; + } switch (code) { case 0x09: // \t case 0x0A: // \n @@ -13614,17 +14516,13 @@ function isWhiteSpace(code) { return false; } -//////////////////////////////////////////////////////////////////////////////// - -/*eslint-disable max-len*/ -var UNICODE_PUNCT_RE = __webpack_require__(3189); +/* eslint-disable max-len */ // Currently without astral characters support. function isPunctChar(ch) { - return UNICODE_PUNCT_RE.test(ch); + return ucmicro__namespace.P.test(ch) || ucmicro__namespace.S.test(ch); } - // Markdown ASCII punctuation characters. // // !, ", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \, ], ^, _, `, {, |, }, or ~ @@ -13634,38 +14532,38 @@ function isPunctChar(ch) { // 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/* ~ */: + 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; @@ -13724,80 +14622,99 @@ function normalizeReference(str) { return str.toLowerCase().toUpperCase(); } -//////////////////////////////////////////////////////////////////////////////// - // 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 = __webpack_require__(8765); -exports.lib.ucmicro = __webpack_require__(4205); - -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; - - -/***/ }), - -/***/ 1685: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -// Just a shortcut for bulk export - - - -exports.parseLinkLabel = __webpack_require__(3595); -exports.parseLinkDestination = __webpack_require__(2548); -exports.parseLinkTitle = __webpack_require__(8040); - - -/***/ }), - -/***/ 2548: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +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 +}); -"use strict"; -// Parse link destination +// Parse link label +// +// this function assumes that first character ("[") already matches; +// returns the end of the label // +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; + } + } + 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; + } + } + } + let labelEnd = -1; + if (found) { + labelEnd = state.pos; + } + // restore old state + state.pos = oldPos; + return labelEnd; +} -var unescapeAll = (__webpack_require__(7022).unescapeAll); - - -module.exports = function parseLinkDestination(str, pos, max) { - var code, level, - lines = 0, - start = pos, - result = { - ok: false, - pos: 0, - lines: 0, - str: '' - }; +// Parse link destination +// +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 === 0x0A /* \n */) { + return result; + } + if (code === 0x3C /* < */) { + return result; + } if (code === 0x3E /* > */) { result.pos = pos + 1; result.str = unescapeAll(str.slice(start + 1, pos)); @@ -13808,7 +14725,6 @@ module.exports = function parseLinkDestination(str, pos, max) { pos += 2; continue; } - pos++; } @@ -13818,890 +14734,1412 @@ module.exports = function parseLinkDestination(str, pos, max) { // this should be ... } else { ... branch - level = 0; + let level = 0; while (pos < max) { code = str.charCodeAt(pos); - - if (code === 0x20) { break; } + if (code === 0x20) { + break; + } // ascii control characters - if (code < 0x20 || code === 0x7F) { break; } - + if (code < 0x20 || code === 0x7F) { + break; + } if (code === 0x5C /* \ */ && pos + 1 < max) { - if (str.charCodeAt(pos + 1) === 0x20) { break; } + if (str.charCodeAt(pos + 1) === 0x20) { + break; + } pos += 2; continue; } - if (code === 0x28 /* ( */) { level++; - if (level > 32) { return result; } + if (level > 32) { + return result; + } } - if (code === 0x29 /* ) */) { - if (level === 0) { break; } + if (level === 0) { + break; + } level--; } - pos++; } - - if (start === pos) { return result; } - if (level !== 0) { return result; } - + if (start === pos) { + return result; + } + if (level !== 0) { + return result; + } result.str = unescapeAll(str.slice(start, pos)); - result.lines = lines; result.pos = pos; result.ok = true; return result; -}; - - -/***/ }), - -/***/ 3595: -/***/ ((module) => { +} -"use strict"; -// Parse link label -// -// this function assumes that first character ("[") already matches; -// returns the end of the label +// Parse link title // -module.exports = function parseLinkLabel(state, start, disableNested) { - var level, found, marker, prevPos, - labelEnd = -1, - max = state.posMax, - 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; - } +// 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; } - - 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; - } + let marker = str.charCodeAt(pos); + if (marker !== 0x22 /* " */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { + return state; } - } + start++; + pos++; - if (found) { - labelEnd = state.pos; + // if opening marker is "(", switch it to closing marker ")" + if (marker === 0x28) { + marker = 0x29; + } + state.marker = marker; } - - // restore old state - state.pos = oldPos; - - return labelEnd; -}; - - -/***/ }), - -/***/ 8040: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Parse link title -// - - - -var unescapeAll = (__webpack_require__(7022).unescapeAll); - - -module.exports = function parseLinkTitle(str, pos, max) { - var code, - marker, - lines = 0, - start = pos, - result = { - ok: false, - pos: 0, - lines: 0, - str: '' - }; - - if (pos >= max) { return result; } - - marker = str.charCodeAt(pos); - - if (marker !== 0x22 /* " */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return result; } - - pos++; - - // if opening marker is "(", switch it to closing marker ")" - if (marker === 0x28) { marker = 0x29; } - 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++; + 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++; - if (str.charCodeAt(pos) === 0x0A) { - lines++; - } } - pos++; } - return result; -}; - - -/***/ }), - -/***/ 7024: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Main parser class + // 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; +} +// Just a shortcut for bulk export +var helpers = /*#__PURE__*/Object.freeze({ + __proto__: null, + parseLinkDestination: parseLinkDestination, + parseLinkLabel: parseLinkLabel, + parseLinkTitle: parseLinkTitle +}); +/** + * 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. + **/ -var utils = __webpack_require__(7022); -var helpers = __webpack_require__(1685); -var Renderer = __webpack_require__(7529); -var ParserCore = __webpack_require__(7346); -var ParserBlock = __webpack_require__(2471); -var ParserInline = __webpack_require__(4485); -var LinkifyIt = __webpack_require__(8337); -var mdurl = __webpack_require__(8765); -var punycode = __webpack_require__(3689); +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('${highlighted}\n`; + } + return `
${highlighted}
\n`; }; +default_rules.image = function (tokens, idx, options, env, slf) { + const token = tokens[idx]; -//////////////////////////////////////////////////////////////////////////////// -// -// 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);/; + // "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 -function validateLink(url) { - // url should be normalized at this point, and existing entities are decoded - var str = url.trim().toLowerCase(); + 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; +}; - return BAD_PROTO_RE.test(str) ? (GOOD_DATA_RE.test(str) ? true : false) : true; +/** + * 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); } -//////////////////////////////////////////////////////////////////////////////// - - -var RECODE_HOSTNAME_FOR = [ 'http:', 'https:', 'mailto:' ]; +/** + * 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; +}; -function normalizeLink(url) { - var parsed = mdurl.parse(url, true); +/** + * 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 (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) { /**/ } + // Tight list paragraphs + if (token.hidden) { + return ''; + } + + // 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. ``. + // + needLf = false; + } + } } } + result += needLf ? '>\n' : '>'; + return result; +}; - return mdurl.encode(mdurl.format(parsed)); -} +/** + * 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; +}; -function normalizeLinkText(url) { - var parsed = mdurl.parse(url, true); +/** 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; +}; - 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) { /**/ } +/** + * 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); } } + return result; +}; - // add '%' to exclude list because of https://github.com/markdown-it/markdown-it/issues/720 - return mdurl.decode(mdurl.format(parsed), mdurl.decode.defaultChars + '%'); +/** + * 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: + // + // { + // name: XXX, + // enabled: Boolean, + // fn: Function(), + // alt: [ name2, name3 ] + // } + // + this.__rules__ = []; + + // Cached rule chains. + // + // First level - chain name, '' for default. + // Second level - diginal anchor for fast filtering by charcodes. + // + this.__cache__ = null; } +// Helper methods, should not be used directly + +// 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; +}; + +// Build rules lookup cache +// +Ruler.prototype.__compile__ = function () { + const self = this; + const chains = ['']; + + // 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); + }); + }); +}; /** - * class MarkdownIt - * - * Main parser/renderer class. + * Ruler.at(name, fn [, options]) + * - name (String): rule name to replace. + * - fn (Function): new rule function. + * - options (Object): new rule options (not mandatory). * - * ##### Usage + * Replace rule by name with new function & options. Throws error if name not + * found. * - * ```javascript - * // node.js, "classic" way: - * var MarkdownIt = require('markdown-it'), - * md = new MarkdownIt(); - * var result = md.render('# markdown-it rulezz!'); + * ##### Options: * - * // node.js, the same, but with sugar: - * var md = require('markdown-it')(); - * var result = md.render('# markdown-it rulezz!'); + * - __alt__ - array with names of "alternate" chains. * - * // 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!'); - * ``` + * ##### Example * - * Single line rendering, without paragraph wrap: + * Replace existing typographer replacement rule with new one: * * ```javascript * var md = require('markdown-it')(); - * var result = md.renderInline('__markdown-it__ rulezz!'); + * + * 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; +}; + /** - * new MarkdownIt([presetName, options]) - * - presetName (String): optional, `commonmark` / `zero` - * - options (Object) + * 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). * - * Creates parser instanse with given config. Can be called without `new`. + * Add new rule to chain before one with given name. See also + * [[Ruler.after]], [[Ruler.push]]. * - * ##### presetName + * ##### Options: * - * MarkdownIt provides named presets as a convenience to quickly - * enable/disable active syntax rules and options for common use cases. + * - __alt__ - array with names of "alternate" chains. * - * - ["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. + * ##### Example * - * ##### options: + * ```javascript + * var md = require('markdown-it')(); * - * - __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 Array + * - list (String|Array): list of rule names to enable. + * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found. * - * Or with full wrapper override (if you need assign class to `
`):
+ * Enable rules with given names. If any rule name not found - throw Error.
+ * Errors can be disabled by second param.
  *
- * ```javascript
- * var hljs = require('highlight.js') // https://highlightjs.org/
+ * Returns list of found rule names (if no exception happened).
  *
- * // 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 (__) {} - * } + * See also [[Ruler.disable]], [[Ruler.enableOnly]]. + **/ +Ruler.prototype.enable = function (list, ignoreInvalid) { + if (!Array.isArray(list)) { + list = [list]; + } + const result = []; + + // 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); + } + this.__rules__[idx].enabled = true; + result.push(name); + }, this); + this.__cache__ = null; + return result; +}; + +/** + * 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. * - * return '
' + md.utils.escapeHtml(str) + '
'; - * } - * }); - * ``` + * 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]]. **/ -function MarkdownIt(presetName, options) { - if (!(this instanceof MarkdownIt)) { - return new MarkdownIt(presetName, options); +Ruler.prototype.enableOnly = function (list, ignoreInvalid) { + if (!Array.isArray(list)) { + list = [list]; + } + this.__rules__.forEach(function (rule) { + rule.enabled = false; + }); + this.enable(list, ignoreInvalid); +}; + +/** + * 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 = []; - if (!options) { - if (!utils.isString(presetName)) { - options = presetName || {}; - presetName = 'default'; + // 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); } + this.__rules__[idx].enabled = false; + result.push(name); + }, this); + this.__cache__ = null; + return result; +}; + +/** + * 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__(); } - /** - * 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(); + // Chain can be empty, if rules disabled. But we still have to return Array. + return this.__cache__[chainName] || []; +}; - /** - * 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(); +// Token class - /** - * MarkdownIt#core -> Core +/** + * class Token + **/ + +/** + * new Token(type, tag, nesting) + * + * Create new token and fill passed properties. + **/ +function Token(type, tag, nesting) { + /** + * Token#type -> String * - * 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]]. + * Type of the token (string, e.g. "paragraph_open") **/ - this.core = new ParserCore(); + this.type = type; /** - * 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 - * ``` + * Token#tag -> String * - * See [[Renderer]] docs and [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js). + * html tag name, e.g. "p" **/ - this.renderer = new Renderer(); + this.tag = tag; /** - * MarkdownIt#linkify -> LinkifyIt + * Token#attrs -> Array * - * [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. + * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]` **/ - this.linkify = new LinkifyIt(); + this.attrs = null; /** - * MarkdownIt#validateLink(url) -> Boolean + * Token#map -> Array * - * 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. + * Source map info. Format: `[ line_begin, line_end ]` + **/ + this.map = null; + + /** + * Token#nesting -> Number * - * You can change this behaviour: + * Level change (number in {-1, 0, 1} set), where: * - * ```javascript - * var md = require('markdown-it')(); - * // enable everything - * md.validateLink = function () { return true; } - * ``` + * - `1` means the tag is opening + * - `0` means the tag is self-closing + * - `-1` means the tag is closing **/ - this.validateLink = validateLink; + this.nesting = nesting; /** - * MarkdownIt#normalizeLink(url) -> String + * Token#level -> Number * - * Function used to encode link url to a machine-readable format, - * which includes url-encoding, punycode, etc. + * nesting level, the same as `state.level` **/ - this.normalizeLink = normalizeLink; + this.level = 0; /** - * MarkdownIt#normalizeLinkText(url) -> String + * Token#children -> Array * - * Function used to decode link url to a human-readable format` + * An array of child nodes (inline and img tokens) **/ - this.normalizeLinkText = normalizeLinkText; - + this.children = null; - // Expose utils & helpers for easy acces from plugins + /** + * Token#content -> String + * + * In a case of self-closing tag (code, html, fence, etc.), + * it has contents of this tag. + **/ + this.content = ''; /** - * MarkdownIt#utils -> utils + * Token#markup -> String * - * Assorted utility functions, useful to write plugins. See details - * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/common/utils.js). + * '*' or '_' for emphasis, fence string for fence, etc. **/ - this.utils = utils; + this.markup = ''; /** - * MarkdownIt#helpers -> helpers + * Token#info -> String * - * Link components parser functions, useful to write plugins. See details - * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/helpers). + * 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.helpers = utils.assign({}, helpers); + this.info = ''; + /** + * Token#meta -> Object + * + * A place for plugins to store an arbitrary data + **/ + this.meta = null; - this.options = {}; - this.configure(presetName); + /** + * Token#block -> Boolean + * + * True for block-level tokens, false for inline tokens. + * Used in renderer to calculate line breaks + **/ + this.block = false; - if (options) { this.set(options); } + /** + * Token#hidden -> Boolean + * + * If it's true, ignore this element when rendering. Used for tight lists + * to hide paragraphs. + **/ + this.hidden = false; } - -/** 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. - * - * ##### Example - * - * ```javascript - * var md = require('markdown-it')() - * .set({ html: true, breaks: true }) - * .set({ typographer, true }); - * ``` +/** + * Token.attrIndex(name) -> Number * - * __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. + * Search attribute index by name. **/ -MarkdownIt.prototype.set = function (options) { - utils.assign(this.options, options); - return this; +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; + } + } + return -1; }; - -/** 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) +/** + * Token.attrPush(attrData) * - * We strongly recommend to use presets instead of direct config loads. That - * will give better compatibility with next versions. + * Add `[ name, value ]` attribute to list. Init attrs if necessary **/ -MarkdownIt.prototype.configure = function (presets) { - var self = this, presetName; - - if (utils.isString(presets)) { - presetName = presets; - presets = config[presetName]; - if (!presets) { throw new Error('Wrong `markdown-it` preset "' + presetName + '", check name'); } +Token.prototype.attrPush = function attrPush(attrData) { + if (this.attrs) { + this.attrs.push(attrData); + } else { + this.attrs = [attrData]; } +}; - 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); - } - }); +/** + * 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; } - return this; }; - -/** 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. - * - * 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 +/** + * Token.attrGet(name) * - * ```javascript - * var md = require('markdown-it')() - * .enable(['sub', 'sup']) - * .disable('smartquotes'); - * ``` + * Get the value of attribute `name`, or null if it does not exist. **/ -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); - - 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); +Token.prototype.attrGet = function attrGet(name) { + const idx = this.attrIndex(name); + let value = null; + if (idx >= 0) { + value = this.attrs[idx][1]; } - - return this; + return 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. +/** + * Token.attrJoin(name, value) * - * The same as [[MarkdownIt.enable]], but turn specified rules off. + * Join value to existing attribute via space. Or create new attribute if not + * exists. Useful to operate with token classes. **/ -MarkdownIt.prototype.disable = function (list, ignoreInvalid) { - var 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)); - - var 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); +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; } - return this; }; +// Core state object +// -/** 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, ... */) { - 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 - * - * 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. - **/ -MarkdownIt.prototype.parse = function (src, env) { - if (typeof src !== 'string') { - throw new Error('Input data should be a String'); - } - - var state = new this.core.State(src, this, env); - - this.core.process(state); - - return state.tokens; -}; - - -/** - * MarkdownIt.render(src [, env]) -> String - * - src (String): source string - * - env (Object): environment sandbox - * - * 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]]. - **/ -MarkdownIt.prototype.render = function (src, env) { - env = env || {}; - - 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 - * - * 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); - - state.inlineMode = true; - this.core.process(state); - - return state.tokens; -}; +function StateCore(src, md, env) { + this.src = src; + this.env = env; + this.tokens = []; + this.inlineMode = false; + this.md = md; // link to parser instance +} +// re-export Token class to use in core rules +StateCore.prototype.Token = Token; -/** - * 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 || {}; +// Normalize input string - return this.renderer.render(this.parseInline(src, env), this.options, env); -}; +// 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'); -module.exports = MarkdownIt; + // 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); + } +} -/***/ }), +function inline(state) { + const tokens = state.tokens; -/***/ 2471: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + // 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); + } + } +} -"use strict"; -/** internal - * class ParserBlock - * - * Block-level tokenizer. - **/ +// Replace link-like texts with link nodes. +// +// Currently restricted by `md.validateLink()` to http/https/ftp +// +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; + // 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]; -var Ruler = __webpack_require__(9580); + // 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); -var _rules = [ - // First 2 params - rule name & source. Secondary array - list of rules, - // which can be terminated by this one. - [ 'table', __webpack_require__(1785), [ 'paragraph', 'reference' ] ], - [ 'code', __webpack_require__(8768) ], - [ 'fence', __webpack_require__(3542), [ 'paragraph', 'reference', 'blockquote', 'list' ] ], - [ 'blockquote', __webpack_require__(5258), [ 'paragraph', 'reference', 'blockquote', 'list' ] ], - [ 'hr', __webpack_require__(5634), [ 'paragraph', 'reference', 'blockquote', 'list' ] ], - [ 'list', __webpack_require__(8532), [ 'paragraph', 'reference', 'blockquote' ] ], - [ 'reference', __webpack_require__(3804) ], - [ 'html_block', __webpack_require__(6329), [ 'paragraph', 'reference', 'blockquote' ] ], - [ 'heading', __webpack_require__(1630), [ 'paragraph', 'reference', 'blockquote' ] ], - [ 'lheading', __webpack_require__(6850) ], - [ 'paragraph', __webpack_require__(6864) ] -]; + // Now split string to nodes + const nodes = []; + let level = currentToken.level; + let 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 (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; -/** - * new ParserBlock() - **/ -function ParserBlock() { - /** - * ParserBlock#ruler -> Ruler - * - * [[Ruler]] instance. Keep configuration of block rules. - **/ - this.ruler = new Ruler(); + // 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); + } - for (var i = 0; i < _rules.length; i++) { - this.ruler.push(_rules[i][0], _rules[i][1], { alt: (_rules[i][2] || []).slice() }); + // replace current node + blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes); + } + } } } - -// Generate tokens for input range +// Simple typographic replacements +// +// (c) (C) → © +// (tm) (TM) → ™ +// (r) (R) → ® +// +- → ± +// ... → … (also ?.... → ?.., !.... → !..) +// ???????? → ???, !!!!! → !!!, `,,` → `,` +// -- → –, --- → — // -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; } +// TODO: +// - fractionals 1/2, 1/4, 3/4 -> ½, ¼, ¾ +// - multiplications 2 x 4 -> 2 × 4 - // Termination condition for nested calls. - // Nested calls currently used for blockquotes & lists - if (state.sCount[line] < state.blkIndent) { break; } +const RARE_RE = /\+-|\.\.|\?\?\?\?|!!!!|,,|--/; - // 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; +// 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); } - - // Try all possible rules. - // On success, rule should: - // - // - update `state.line` - // - update `state.tokens` - // - return true - - for (i = 0; i < len; i++) { - ok = rules[i](state, line, endLine, false); - if (ok) { break; } + if (token.type === 'link_open' && token.info === 'auto') { + inside_autolink--; } - - // 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; + if (token.type === 'link_close' && token.info === 'auto') { + inside_autolink++; } - - line = state.line; - - if (line < endLine && state.isEmpty(line)) { - hasEmptyLines = true; - line++; - state.line = line; + } +} +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); + } + } +} -/** - * ParserBlock.parse(str, md, env, outTokens) - * - * Process input string and push block tokens into `outTokens` - **/ -ParserBlock.prototype.parse = function (src, md, env, outTokens) { - var state; +// Convert straight quotation marks to typographic ones +// - if (!src) { return; } +const QUOTE_TEST_RE = /['"]/; +const QUOTE_RE = /['"]/g; +const APOSTROPHE = '\u2019'; /* ’ */ - state = new this.State(src, md, env, outTokens); +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; - this.tokenize(state, state.line, state.lineMax); -}; + /* 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] === "'"; + // 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' -ParserBlock.prototype.State = __webpack_require__(2948); + lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1); + break; + } + } + // 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' -module.exports = ParserBlock; + 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); + } + } + } +} +function smartquotes(state) { + /* eslint max-depth:0 */ + if (!state.md.options.typographer) { + return; + } + 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); + } +} -/***/ }), +// 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. +// -/***/ 7346: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +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; + } + } +} -"use strict"; /** internal * class Core * @@ -14709,23 +16147,10 @@ module.exports = ParserBlock; * transformations. **/ - - -var Ruler = __webpack_require__(9580); - - -var _rules = [ - [ 'normalize', __webpack_require__(4129) ], - [ 'block', __webpack_require__(898) ], - [ 'inline', __webpack_require__(9827) ], - [ 'linkify', __webpack_require__(7830) ], - [ 'replacements', __webpack_require__(2834) ], - [ 'smartquotes', __webpack_require__(8450) ], - // `text_join` finds `text_special` tokens (for escape sequences) - // and joins them with the rest of the text - [ 'text_join', __webpack_require__(6633) ] -]; - +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]]; /** * new Core() @@ -14737,16365 +16162,19423 @@ function Core() { * [[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]); + for (let i = 0; i < _rules$2.length; i++) { + this.ruler.push(_rules$2[i][0], _rules$2[i][1]); } } - /** * Core.process(state) * * 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++) { + const rules = this.ruler.getRules(''); + for (let i = 0, l = rules.length; i < l; i++) { rules[i](state); } }; +Core.prototype.State = StateCore; -Core.prototype.State = __webpack_require__(6480); +// Parser state class +function StateBlock(src, md, env, tokens) { + this.src = src; -module.exports = Core; + // link to parser instance + this.md = md; + this.env = env; + // + // Internal state vartiables + // -/***/ }), + 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) -/***/ 4485: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + // An amount of virtual spaces (tabs expanded) between beginning + // of each line (bMarks) and real beginning of that line. + // + // It exists only as a hack because blockquotes override bMarks + // losing information in the process. + // + // It's used only when expanding tabs, you can think about it as + // an initial tab length, e.g. bsCount=21 applied to string `\t123` + // means first tab should be expanded to 4-21%4 === 3 spaces. + // + this.bsCount = []; -"use strict"; -/** internal - * class ParserInline - * - * Tokenizes paragraph content. - **/ + // block parser variables + // 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; -var Ruler = __webpack_require__(9580); - - -//////////////////////////////////////////////////////////////////////////////// -// Parser rules - -var _rules = [ - [ 'text', __webpack_require__(9941) ], - [ 'linkify', __webpack_require__(2906) ], - [ 'newline', __webpack_require__(3905) ], - [ 'escape', __webpack_require__(1917) ], - [ 'backticks', __webpack_require__(40) ], - [ 'strikethrough', (__webpack_require__(4814)/* .tokenize */ .w) ], - [ 'emphasis', (__webpack_require__(7894)/* .tokenize */ .w) ], - [ 'link', __webpack_require__(1727) ], - [ 'image', __webpack_require__(3006) ], - [ 'autolink', __webpack_require__(3420) ], - [ 'html_inline', __webpack_require__(1779) ], - [ 'entity', __webpack_require__(9391) ] -]; - -// `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', __webpack_require__(9354) ], - [ 'strikethrough', (__webpack_require__(4814)/* .postProcess */ .g) ], - [ 'emphasis', (__webpack_require__(7894)/* .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', __webpack_require__(9969) ] -]; - - -/** - * new ParserInline() - **/ -function ParserInline() { - var i; - - /** - * ParserInline#ruler -> Ruler - * - * [[Ruler]] instance. Keep configuration of inline rules. - **/ - this.ruler = new Ruler(); - - for (i = 0; i < _rules.length; i++) { - this.ruler.push(_rules[i][0], _rules[i][1]); + // Create caches + // Generate markers. + 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 { + offset++; + } + continue; + } else { + indent_found = true; + } + } + if (ch === 0x0A || pos === len - 1) { + 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; + start = pos + 1; + } } - /** - * ParserInline#ruler2 -> Ruler - * - * [[Ruler]] instance. Second ruler used for post-processing - * (e.g. in emphasis-like rules). - **/ - this.ruler2 = new Ruler(); - - for (i = 0; i < _rules2.length; i++) { - this.ruler2.push(_rules2[i][0], _rules2[i][1]); - } + // Push fake entry to simplify cache bounds checks + this.bMarks.push(s.length); + this.eMarks.push(s.length); + this.tShift.push(0); + this.sCount.push(0); + this.bsCount.push(0); + this.lineMax = this.bMarks.length - 1; // don't count last fake line } - -// Skip single token by running all rules in validation mode; -// returns `true` if any rule reported success +// Push new token to "stream". // -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; - +StateBlock.prototype.push = function (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 - if (typeof cache[pos] !== 'undefined') { - state.pos = cache[pos]; - return; + 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 (let max = this.lineMax; from < max; from++) { + if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) { + break; + } } + return from; +}; - 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; } +// Skip spaces from given position. +StateBlock.prototype.skipSpaces = function skipSpaces(pos) { + for (let max = this.src.length; pos < max; pos++) { + const ch = this.src.charCodeAt(pos); + if (!isSpace(ch)) { + 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; + return 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; } - } +// Skip spaces from given position in reverse. +StateBlock.prototype.skipSpacesBack = function skipSpacesBack(pos, min) { + if (pos <= min) { + return pos; + } + while (pos > min) { + if (!isSpace(this.src.charCodeAt(--pos))) { + return pos + 1; } + } + return pos; +}; - if (ok) { - if (state.pos >= end) { break; } - continue; +// Skip char codes from given position +StateBlock.prototype.skipChars = function skipChars(pos, code) { + for (let max = this.src.length; pos < max; pos++) { + if (this.src.charCodeAt(pos) !== code) { + break; } - - state.pending += state.src[state.pos++]; } + return pos; +}; - if (state.pending) { - state.pushPending(); +// Skip char codes reverse from given position - 1 +StateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code, min) { + if (pos <= min) { + return pos; + } + while (pos > min) { + if (code !== this.src.charCodeAt(--pos)) { + return pos + 1; + } } + return pos; }; - -/** - * 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); +// cut lines range from source. +StateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF) { + if (begin >= end) { + return ''; + } + 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) { + const ch = this.src.charCodeAt(first); + if (isSpace(ch)) { + if (ch === 0x09) { + lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4; + } else { + lineIndent++; + } + } else if (first - lineStart < this.tShift[line]) { + // patched tShift masked characters to look like spaces (blockquotes, list markers) + lineIndent++; + } else { + break; + } + first++; + } + if (lineIndent > indent) { + // partially expanding tabs in code blocks, e.g '\t\tfoobar' + // with indent=2 becomes ' \tfoobar' + queue[i] = new Array(lineIndent - indent + 1).join(' ') + this.src.slice(first, last); + } else { + queue[i] = this.src.slice(first, last); + } } + return queue.join(''); }; +// re-export Token class to use in block rules +StateBlock.prototype.Token = Token; -ParserInline.prototype.State = __webpack_require__(670); - - -module.exports = ParserInline; +// GFM table, https://github.github.com/gfm/#tables-extension- -/***/ }), +// 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) { + const pos = state.bMarks[line] + state.tShift[line]; + const max = state.eMarks[line]; + return state.src.slice(pos, max); +} +function escapedSplit(str) { + 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 (!isEscaped) { + // pipe separating cells, '|' + result.push(current + str.substring(lastPos, pos)); + current = ''; + lastPos = pos + 1; + } else { + // escaped pipe, '\|' + current += str.substring(lastPos, pos - 1); + lastPos = pos; + } + } + isEscaped = ch === 0x5c /* \ */; + pos++; + ch = str.charCodeAt(pos); + } + result.push(current + str.substring(lastPos)); + return result; +} +function table(state, startLine, endLine, silent) { + // should have at least two lines + if (startLine + 2 > endLine) { + return false; + } + let nextLine = startLine + 1; + if (state.sCount[nextLine] < state.blkIndent) { + return false; + } -/***/ 6895: -/***/ ((module) => { - -"use strict"; -// Commonmark default options + // if it's indented more than 3 spaces, it should be a code block + 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 + 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; + } + while (pos < state.eMarks[nextLine]) { + const ch = state.src.charCodeAt(pos); + if (ch !== 0x7C /* | */ && ch !== 0x2D /* - */ && ch !== 0x3A /* : */ && !isSpace(ch)) { + return false; + } + pos++; + } + 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 ` ---||--- ` + if (i === 0 || i === columns.length - 1) { + continue; + } else { + 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 /* : */) { + 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; + } + columns = escapedSplit(lineText); + if (columns.length && columns[0] === '') columns.shift(); + if (columns.length && columns[columns.length - 1] === '') columns.pop(); -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 + // 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) + const columnCount = columns.length; + if (columnCount === 0 || columnCount !== aligns.length) { + return false; + } + if (silent) { + return true; + } + const oldParentType = state.parentType; + state.parentType = 'table'; - // Enable some language-neutral replacements + quotes beautification - typographer: false, + // use 'blockquote' lists for termination because it's + // the most similar to tables + 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_ho.attrs = [['style', 'text-align:' + aligns[i]]]; + } + const token_il = state.push('inline', '', 0); + token_il.content = columns[i].trim(); + token_il.children = []; + state.push('th_close', 'th', -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; + } + 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; + } + lineText = getLine(state, nextLine).trim(); + 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(); - // 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', /* “”‘’ */ + // 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) { + const token_tbo = state.push('tbody_open', 'tbody', 1); + token_tbo.map = tbodyLines = [startLine + 2, 0]; + } + 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_tdo.attrs = [['style', 'text-align:' + aligns[i]]]; + } + const token_il = state.push('inline', '', 0); + token_il.content = columns[i] ? columns[i].trim() : ''; + token_il.children = []; + state.push('td_close', 'td', -1); + } + state.push('tr_close', 'tr', -1); + } + if (tbodyLines) { + state.push('tbody_close', 'tbody', -1); + tbodyLines[1] = nextLine; + } + state.push('table_close', 'table', -1); + tableLines[1] = nextLine; + state.parentType = oldParentType; + state.line = nextLine; + 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 = 4) { + nextLine++; + last = nextLine; + continue; + } + break; + } + 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; +} - components: { +// fences (``` lang, ~~~ lang) - core: { - rules: [ - 'normalize', - 'block', - 'inline', - 'text_join' - ] - }, +function fence(state, startLine, endLine, silent) { + let pos = state.bMarks[startLine] + state.tShift[startLine]; + let max = state.eMarks[startLine]; - block: { - rules: [ - 'blockquote', - 'code', - 'fence', - 'heading', - 'hr', - 'html_block', - 'lheading', - 'list', - 'reference', - 'paragraph' - ] - }, + // 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; + } - inline: { - rules: [ - 'autolink', - 'backticks', - 'emphasis', - 'entity', - 'escape', - 'html_inline', - 'image', - 'link', - 'newline', - 'text' - ], - rules2: [ - 'balance_pairs', - 'emphasis', - 'fragments_join' - ] + // 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; } } -}; + // Since start is found, we can report success here in validation mode + if (silent) { + return true; + } -/***/ }), + // 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; + } + 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 (state.src.charCodeAt(pos) !== marker) { + continue; + } + if (state.sCount[nextLine] - state.blkIndent >= 4) { + // closing fence should be indented less than 4 spaces + continue; + } + pos = state.skipChars(pos, marker); -/***/ 4218: -/***/ ((module) => { + // closing code fence must be at least as long as the opening one + if (pos - mem < len) { + continue; + } -"use strict"; -// markdown-it default options + // make sure tail has spaces only + pos = state.skipSpaces(pos); + if (pos < max) { + continue; + } + haveEndMarker = true; + // found! + break; + } + // 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; +} +// Block quotes +function blockquote(state, startLine, endLine, silent) { + let pos = state.bMarks[startLine] + state.tShift[startLine]; + let max = state.eMarks[startLine]; + const oldLineMax = state.lineMax; -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 + // if it's indented more than 3 spaces, it should be a code block + if (state.sCount[startLine] - state.blkIndent >= 4) { + return false; + } - // Enable some language-neutral replacements + quotes beautification - typographer: false, + // check the block quote marker + if (state.src.charCodeAt(pos) !== 0x3E /* > */) { + return 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', /* “”‘’ */ + // 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; - // Highlighter function. Should return escaped HTML, - // or '' if the source string is not changed and should be escaped externaly. - // If result starts with 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: // - highlight: null, - - maxNesting: 100 // Internal protection, recursion limit - }, - - components: { - - core: {}, - block: {}, - inline: {} - } -}; - - -/***/ }), - -/***/ 873: -/***/ ((module) => { - -"use strict"; -// "Zero" preset, with nothing enabled. Useful for manual configuring of simple -// modes. For example, to parse bold/italic only. - + // ``` + // 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. + // set offset past spaces and ">" + let initial = state.sCount[nextLine] + 1; + let spaceAfterMarker; + let adjustTab; + // 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; + } + } else { + spaceAfterMarker = 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; + } -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 + // Case 2: line is not inside the blockquote, and the last line was empty. + if (lastLineEmpty) { + break; + } - // Enable some language-neutral replacements + quotes beautification - typographer: false, + // 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 (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]); - // Double + single quotes replacement pairs, when typographer enabled, - // and smartquotes on. Could be either a String or an Array. + // A negative indentation means that this is a paragraph continuation // - // For example, you can use '«»„“' for Russian, '„“‚‘' for German, - // and ['«\xA0', '\xA0»', '‹\xA0', '\xA0›'] for French (including nbsp). - quotes: '\u201c\u201d\u2018\u2019', /* “”‘’ */ + 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; - // Highlighter function. Should return escaped HTML, - // or '' if the source string is not changed and should be escaped externaly. - // If result starts with = 4) { + return false; + } + let pos = state.bMarks[startLine] + state.tShift[startLine]; + const marker = state.src.charCodeAt(pos++); - core: { - rules: [ - 'normalize', - 'block', - 'inline', - 'text_join' - ] - }, + // Check hr marker + if (marker !== 0x2A /* * */ && marker !== 0x2D /* - */ && marker !== 0x5F /* _ */) { + return false; + } - block: { - rules: [ - 'paragraph' - ] - }, + // markers can be mixed with spaces, but there should be at least 3 of them - inline: { - rules: [ - 'text' - ], - rules2: [ - 'balance_pairs', - 'fragments_join' - ] + 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 -/***/ }), -/***/ 7529: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +// 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; +} -"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. - **/ +// 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; + // 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; + } + // 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; -var assign = (__webpack_require__(7022).assign); -var unescapeAll = (__webpack_require__(7022).unescapeAll); -var escapeHtml = (__webpack_require__(7022).escapeHtml); + // if it's indented more than 3 spaces, it should be a code block + if (state.sCount[nextLine] - state.blkIndent >= 4) { + return false; + } + // 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; -//////////////////////////////////////////////////////////////////////////////// + // 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; + } + } -var default_rules = {}; + // 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)); + // 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; + } -default_rules.code_inline = function (tokens, idx, options, env, slf) { - var token = tokens[idx]; - - return '' + - escapeHtml(tokens[idx].content) + - ''; -}; + // 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; + } + // For validation mode we can terminate immediately + if (silent) { + return true; + } -default_rules.code_block = function (tokens, idx, options, env, slf) { - var token = tokens[idx]; + // We should terminate list on style change. Remember first one to compare. + const markerCharCode = state.src.charCodeAt(posAfterMarker - 1); - return '' + - escapeHtml(tokens[idx].content) + - '

\n'; -}; + // 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); + // + // Iterate list items + // -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; + 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 (info) { - arr = info.split(/(\s+)/g); - langName = arr[0]; - langAttrs = arr.slice(2).join(''); - } + // If we have more than 4 spaces, the indent is 1 + // (the rest is just indented code block) + if (indentAfterMarker > 4) { + indentAfterMarker = 1; + } - if (options.highlight) { - highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content); - } else { - highlighted = escapeHtml(token.content); - } + // " - test" + // ^^^^^ - calculating total length of this thing + const indent = initial + indentAfterMarker; - if (highlighted.indexOf('= 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 { - tmpAttrs[i] = tmpAttrs[i].slice(); - tmpAttrs[i][1] += ' ' + options.langPrefix + langName; + state.md.block.tokenize(state, nextLine, endLine, true); } - // Fake token just to render attributes - tmpToken = { - attrs: tmpAttrs - }; + // 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; + } - return '
'
-          + highlighted
-          + '
\n'; - } + // + // Try to check if list is terminated or continued. + // + if (state.sCount[nextLine] < state.blkIndent) { + break; + } + // if it's indented more than 3 spaces, it should be a code block + if (state.sCount[nextLine] - state.blkIndent >= 4) { + break; + } - return '
'
-        + highlighted
-        + '
\n'; -}; + // 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; + } + // 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 (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) { + break; + } + } -default_rules.image = function (tokens, idx, options, env, slf) { - var token = tokens[idx]; + // 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; - // "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 + // mark paragraphs tight if needed + if (tight) { + markTightParagraphs(state, listTokIdx); + } + return true; +} - token.attrs[token.attrIndex('alt')][1] = - slf.renderInlineAsText(token.children, options, env); +function reference(state, startLine, _endLine, silent) { + let pos = state.bMarks[startLine] + state.tShift[startLine]; + let max = state.eMarks[startLine]; + let nextLine = startLine + 1; - return slf.renderToken(tokens, idx, options); -}; + // 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; + // 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; + } -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'; -}; + // 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]; + // 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; + } -default_rules.text = function (tokens, idx /*, options, env */) { - return escapeHtml(tokens[idx].content); -}; + // [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; + } + } + // [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; -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; -}; + // save cursor state, we could require to rollback later + const destEndPos = pos; + const destEndLineNo = nextLine; + // [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; + } + } -/** - * new Renderer() - * - * Creates new [[Renderer]] instance and fill [[Renderer#rules]] with defaults. - **/ -function Renderer() { + // [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; + } - /** - * 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); -} + // 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; + } + // 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; +} -/** - * Renderer.renderAttrs(token) -> String - * - * Render token attributes to string. - **/ -Renderer.prototype.renderAttrs = function renderAttrs(token) { - var i, l, result; +// List of valid html blocks names, according to commonmark spec +// https://spec.commonmark.org/0.30/#html-blocks - if (!token.attrs) { return ''; } +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']; - result = ''; +// Regexps to match html elements - for (i = 0, l = token.attrs.length; i < l; i++) { - result += ' ' + escapeHtml(token.attrs[i][0]) + '="' + escapeHtml(token.attrs[i][1]) + '"'; - } +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 + ')'); - return result; -}; +// HTML block -/** - * 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]; +// 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]; - // Tight list paragraphs - if (token.hidden) { - return ''; + // if it's indented more than 3 spaces, it should be a code block + if (state.sCount[startLine] - state.blkIndent >= 4) { + return false; } - - // 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'; + if (!state.md.options.html) { + return false; } - - // Add token name, e.g. ``. - // - needLf = false; + // 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.line = nextLine; + const token = state.push('html_block', '', 0); + token.map = [startLine, nextLine]; + token.content = state.getLines(startLine, nextLine, state.blkIndent, true); + return true; +} - result += needLf ? '>\n' : '>'; +// heading (#, ##, ...) - return result; -}; +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; + } -/** - * 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; + // 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; + } - for (var i = 0, len = tokens.length; i < len; i++) { - type = tokens[i].type; + // Let's cut tails like ' ### ' from the end of string - if (typeof rules[type] !== 'undefined') { - result += rules[type](tokens, i, options, env, this); - } else { - result += this.renderToken(tokens, i, options); - } + 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; +} - return result; -}; - +// lheading (---, ===) -/** 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 = ''; +function lheading(state, startLine, endLine /*, silent */) { + const terminatorRules = state.md.block.ruler.getRules('paragraph'); - 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'; - } + // 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 - return result; -}; - + // 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; + } -/** - * 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; + // + // 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; + } + } + } + } - for (i = 0, len = tokens.length; i < len; i++) { - type = tokens[i].type; + // quirk for blockquotes, this line should already be checked by that rule + if (state.sCount[nextLine] < 0) { + continue; + } - 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); + // 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; + } + } + 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; +} - return result; -}; +// Paragraph -module.exports = Renderer; +function paragraph(state, startLine, endLine) { + const terminatorRules = state.md.block.ruler.getRules('paragraph'); + const oldParentType = state.parentType; + let nextLine = startLine + 1; + state.parentType = 'paragraph'; + // 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; + } -/***/ 9580: -/***/ ((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"; -/** - * 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 +/** internal + * class ParserBlock * - * You will not need use this class directly until write plugins. For simple - * rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and - * [[MarkdownIt.use]]. + * 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 Ruler() + * new ParserBlock() **/ -function Ruler() { - // List of added rules. Each element is: - // - // { - // name: XXX, - // enabled: Boolean, - // fn: Function(), - // alt: [ name2, name3 ] - // } - // - this.__rules__ = []; - - // Cached rule chains. - // - // First level - chain name, '' for default. - // Second level - diginal anchor for fast filtering by charcodes. - // - this.__cache__ = null; +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() + }); + } } -//////////////////////////////////////////////////////////////////////////////// -// Helper methods, should not be used directly - - -// Find rule index by name +// Generate tokens for input range // -Ruler.prototype.__find__ = function (name) { - for (var i = 0; i < this.__rules__.length; i++) { - if (this.__rules__[i].name === name) { - return i; +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; } - } - return -1; -}; + // Termination condition for nested calls. + // Nested calls currently used for blockquotes & lists + if (state.sCount[line] < state.blkIndent) { + break; + } -// Build rules lookup cache -// -Ruler.prototype.__compile__ = function () { - var self = this; - var chains = [ '' ]; - - // collect unique names - self.__rules__.forEach(function (rule) { - if (!rule.enabled) { return; } + // 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; + } - rule.alt.forEach(function (altName) { - if (chains.indexOf(altName) < 0) { - chains.push(altName); + // 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; } - }); - }); - - self.__cache__ = {}; + } - chains.forEach(function (chain) { - self.__cache__[chain] = []; - self.__rules__.forEach(function (rule) { - if (!rule.enabled) { return; } + // this can only happen if user disables paragraph rule + if (!ok) throw new Error('none of the block rules matched'); - if (chain && rule.alt.indexOf(chain) < 0) { return; } + // set state.tight if we had an empty line before current tag + // i.e. latest empty line should not count + state.tight = !hasEmptyLines; - self.__cache__[chain].push(rule.fn); - }); - }); + // 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; + } + } }; - /** - * 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')(); + * ParserBlock.parse(str, md, env, outTokens) * - * md.core.ruler.at('replacements', function replace(state) { - * //... - * }); - * ``` + * Process input string and push block tokens into `outTokens` **/ -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; +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 -/** - * 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 || {}; +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; - if (index === -1) { throw new Error('Parser rule not found: ' + beforeName); } + // Stores { start: end } pairs. Useful for backtrack + // optimization of pairs parse (emphasis, strikes). + this.cache = {}; - this.__rules__.splice(index, 0, { - name: ruleName, - enabled: true, - fn: fn, - alt: opt.alt || [] - }); + // List of emphasis-like delimiters for current tag + this.delimiters = []; - this.__cache__ = null; -}; + // Stack of delimiter lists for upper level tags + this._prev_delimiters = []; + // backtick length => last seen position + this.backticks = {}; + this.backticksScanned = false; -/** - * 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 || {}; - - if (index === -1) { throw new Error('Parser rule not found: ' + afterName); } + // Counter used to disable inline linkify-it execution + // inside and markdown links + this.linkLevel = 0; +} - this.__rules__.splice(index + 1, 0, { - name: ruleName, - enabled: true, - fn: fn, - alt: opt.alt || [] - }); +// Flush pending text +// +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; +}; - this.__cache__ = null; +// 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; }; -/** - * 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 || {}; +// 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); - this.__rules__.push({ - name: ruleName, - enabled: true, - fn: fn, - alt: opt.alt || [] - }); + // 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; - this.__cache__ = null; + // 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 + }; }; +// re-export Token class to use in block rules +StateInline.prototype.Token = Token; -/** - * 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 ]; } - - var result = []; +// Skip text characters for text token, place those to pending buffer +// and increment current pos - // Search by name and enable - list.forEach(function (name) { - var idx = this.__find__(name); +// Rule to skip pure text +// '{}$%@~+=:' reserved for extentions - if (idx < 0) { - if (ignoreInvalid) { return; } - throw new Error('Rules manager: invalid rule name ' + name); - } - this.__rules__[idx].enabled = true; - result.push(name); - }, this); +// !, ", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \, ], ^, _, `, {, |, }, or ~ - this.__cache__ = null; - return result; -}; +// !!!! 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; +} +// 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. -/** - * 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 ]; } +/* +var TERMINATOR_RE = /[\n!#$%&*+\-:<=>@[\\\]^_`{}~]/; - this.__rules__.forEach(function (rule) { rule.enabled = false; }); +module.exports = function text(state, silent) { + var pos = state.pos, + idx = state.src.slice(pos).search(TERMINATOR_RE); - this.enable(list, ignoreInvalid); -}; + // first char is terminator -> empty text + if (idx === 0) { return false; } + // 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; + } -/** - * 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 ]; } + if (!silent) { state.pending += state.src.slice(pos, pos + idx); } - var result = []; + state.pos += idx; - // Search by name and disable - list.forEach(function (name) { - var idx = this.__find__(name); + return true; +}; */ - if (idx < 0) { - if (ignoreInvalid) { return; } - throw new Error('Rules manager: invalid rule name ' + name); - } - this.__rules__[idx].enabled = false; - result.push(name); - }, this); +// Process links like https://example.org/ - this.__cache__ = null; - return result; -}; +// 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; -/** - * 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__(); + // 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; +} - // Chain can be empty, if rules disabled. But we still have to return Array. - return this.__cache__[chainName] || []; -}; - -module.exports = Ruler; - - -/***/ }), +// Proceess '\n' -/***/ 5258: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +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; -"use strict"; -// Block quotes - - - -var isSpace = (__webpack_require__(7022).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]; - - // if it's indented more than 3 spaces, it should be a code block - if (state.sCount[startLine] - state.blkIndent >= 4) { return false; } + // ' \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++; - // check the block quote marker - if (state.src.charCodeAt(pos++) !== 0x3E/* > */) { return false; } + // skip heading spaces for next line + while (pos < max && isSpace(state.src.charCodeAt(pos))) { + pos++; + } + state.pos = pos; + return true; +} - // 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; } +// Process escaped chars and hardbreaks - // set offset past spaces and ">" - initial = offset = state.sCount[startLine] + 1; +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++; - // skip one optional space after '>' - if (state.src.charCodeAt(pos) === 0x20 /* space */) { - // ' > test ' - // ^ -- position start of line here: + // '\' at the end of the inline block + if (pos >= max) return false; + let ch1 = state.src.charCodeAt(pos); + if (ch1 === 0x0A) { + if (!silent) { + state.push('hardbreak', 'br', 0); + } 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) + // skip leading whitespaces from next line + while (pos < max) { + ch1 = state.src.charCodeAt(pos); + if (!isSpace(ch1)) break; + pos++; + } + state.pos = pos; + return true; + } + let escapedStr = state.src[pos]; + if (ch1 >= 0xD800 && ch1 <= 0xDBFF && pos + 1 < max) { + const ch2 = state.src.charCodeAt(pos + 1); + if (ch2 >= 0xDC00 && ch2 <= 0xDFFF) { + escapedStr += state.src[pos + 1]; pos++; - initial++; - offset++; - adjustTab = false; + } + } + const origStr = '\\' + escapedStr; + if (!silent) { + const token = state.push('text_special', '', 0); + if (ch1 < 256 && ESCAPED[ch1] !== 0) { + token.content = escapedStr; } else { - // ' >\t test ' - // ^ -- position start of line here + shift bsCount slightly - // to make extra space appear - adjustTab = true; + token.content = origStr; } - } else { - spaceAfterMarker = false; + token.markup = origStr; + token.info = 'escape'; } + state.pos = pos + 1; + return true; +} - oldBMarks = [ state.bMarks[startLine] ]; - state.bMarks[startLine] = pos; - - while (pos < max) { - ch = state.src.charCodeAt(pos); +// Parse backticks - if (isSpace(ch)) { - if (ch === 0x09) { - offset += 4 - (offset + state.bsCount[startLine] + (adjustTab ? 1 : 0)) % 4; - } else { - offset++; - } - } else { - break; - } +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; + // scan marker length + while (pos < max && state.src.charCodeAt(pos) === 0x60 /* ` */) { pos++; } + 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; - oldBSCount = [ state.bsCount[startLine] ]; - state.bsCount[startLine] = state.sCount[startLine] + 1 + (spaceAfterMarker ? 1 : 0); + // 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; - lastLineEmpty = pos >= max; + // 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; + } - oldSCount = [ state.sCount[startLine] ]; - state.sCount[startLine] = offset - initial; + // Some different length found, put it in cache as upper limit of where closer can be found + state.backticks[closerLength] = matchStart; + } - oldTShift = [ state.tShift[startLine] ]; - state.tShift[startLine] = pos - state.bMarks[startLine]; + // Scanned through the end, didn't find anything + state.backticksScanned = true; + if (!silent) state.pending += marker; + state.pos += openerLength; + return true; +} - terminatorRules = state.md.block.ruler.getRules('blockquote'); +// ~~strike through~~ +// - oldParentType = state.parentType; - state.parentType = 'blockquote'; +// 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; + } + if (marker !== 0x7E /* ~ */) { + return false; + } + const scanned = state.scanDelims(state.pos, true); + let len = scanned.length; + const ch = String.fromCharCode(marker); + if (len < 2) { + return false; + } + 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; +} +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); + } + } - // Search the end of the block + // If a marker sequence has an odd number of characters, it's splitted + // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the + // start of the sequence. // - // Block ends with either: - // 1. an empty line outside: - // ``` - // > test + // So, we have to move all those markers after subsequent s_close tags. // - // ``` - // 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; - - pos = state.bMarks[nextLine] + state.tShift[nextLine]; - max = state.eMarks[nextLine]; + 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; + } + } +} - if (pos >= max) { - // Case 1: line is not inside the blockquote, and this line is empty. - 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 +}; - if (state.src.charCodeAt(pos++) === 0x3E/* > */ && !isOutdented) { - // This line is inside the blockquote. +// Process *this* and _that_ +// - // set offset past spaces and ">" - initial = offset = state.sCount[nextLine] + 1; +// 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; + } - // 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; + // Process only opening markers + if (startDelim.end === -1) { + continue; + } + const endDelim = delimiters[startDelim.end]; - 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; - } - - oldBMarks.push(state.bMarks[nextLine]); - state.bMarks[nextLine] = pos; - - while (pos < max) { - 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++; - } + // If the previous delimiter has the same marker and is adjacent to this one, + // merge those into one strong delimiter. + // + // `whatever` -> `whatever` + // + 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--; + } + } +} - lastLineEmpty = pos >= max; +// 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); + } + } +} +var r_emphasis = { + tokenize: emphasis_tokenize, + postProcess: emphasis_post_process +}; - oldBSCount.push(state.bsCount[nextLine]); - state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0); +// Process [link]( "stuff") - oldSCount.push(state.sCount[nextLine]); - state.sCount[nextLine] = offset - initial; +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); - oldTShift.push(state.tShift[nextLine]); - state.tShift[nextLine] = pos - state.bMarks[nextLine]; - continue; - } + // parser failed to find ']', so it's not a valid link + if (labelEnd < 0) { + return false; + } + let pos = labelEnd + 1; + if (pos < max && state.src.charCodeAt(pos) === 0x28 /* ( */) { + // + // Inline link + // - // Case 2: line is not inside the blockquote, and the last line was empty. - if (lastLineEmpty) { break; } + // might have found a valid shortcut link, disable reference parsing + parseReference = false; - // 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; + // [link]( "title" ) + // ^^ skipping these spaces + pos++; + for (; pos < max; pos++) { + code = state.src.charCodeAt(pos); + if (!isSpace(code) && code !== 0x0A) { break; } } - - 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; + if (pos >= max) { + return false; } - oldBMarks.push(state.bMarks[nextLine]); - oldBSCount.push(state.bsCount[nextLine]); - oldTShift.push(state.tShift[nextLine]); - oldSCount.push(state.sCount[nextLine]); - - // A negative indentation means that this is a paragraph continuation - // - state.sCount[nextLine] = -1; - } - - oldIndent = state.blkIndent; - state.blkIndent = 0; - - token = state.push('blockquote_open', 'blockquote', 1); - token.markup = '>'; - token.map = lines = [ startLine, 0 ]; - - state.md.block.tokenize(state, startLine, nextLine); + // [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 = ''; + } - token = state.push('blockquote_close', 'blockquote', -1); - token.markup = '>'; + // [link]( "title" ) + // ^^ skipping these spaces + start = pos; + for (; pos < max; pos++) { + code = state.src.charCodeAt(pos); + if (!isSpace(code) && code !== 0x0A) { + break; + } + } - state.lineMax = oldLineMax; - state.parentType = oldParentType; - lines[1] = state.line; + // [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; - // 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]; + // [link]( "title" ) + // ^^ skipping these spaces + for (; pos < max; pos++) { + code = state.src.charCodeAt(pos); + if (!isSpace(code) && code !== 0x0A) { + break; + } + } + } + } + if (pos >= max || state.src.charCodeAt(pos) !== 0x29 /* ) */) { + // parsing a valid shortcut link failed, fallback to reference + parseReference = true; + } + pos++; } - state.blkIndent = oldIndent; - - return true; -}; - - -/***/ }), - -/***/ 8768: -/***/ ((module) => { - -"use strict"; -// Code block (4 spaces padded) - - - - -module.exports = function code(state, startLine, endLine/*, silent*/) { - var nextLine, last, token; - - if (state.sCount[startLine] - state.blkIndent < 4) { return false; } - - last = nextLine = startLine + 1; - - while (nextLine < endLine) { - if (state.isEmpty(nextLine)) { - nextLine++; - continue; + if (parseReference) { + // + // 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 { + pos = labelEnd + 1; + } + } else { + pos = labelEnd + 1; } - if (state.sCount[nextLine] - state.blkIndent >= 4) { - nextLine++; - last = nextLine; - continue; + // covers label === '' and label === undefined + // (collapsed reference link and shortcut reference link respectively) + if (!label) { + label = state.src.slice(labelStart, labelEnd); } - break; + ref = state.env.references[normalizeReference(label)]; + if (!ref) { + state.pos = oldPos; + return false; + } + href = ref.href; + title = ref.title; } - state.line = last; - - token = state.push('code_block', 'code', 0); - token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + '\n'; - token.map = [ startLine, state.line ]; - + // + // 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) { + state.pos = labelStart; + state.posMax = labelEnd; + const token_o = state.push('link_open', 'a', 1); + const attrs = [['href', href]]; + token_o.attrs = attrs; + if (title) { + attrs.push(['title', title]); + } + state.linkLevel++; + state.md.inline.tokenize(state); + state.linkLevel--; + state.push('link_close', 'a', -1); + } + state.pos = pos; + state.posMax = max; return true; -}; - - -/***/ }), - -/***/ 3542: -/***/ ((module) => { - -"use strict"; -// fences (``` lang, ~~~ lang) - - - - -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]; - - // 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; } +// Process ![image]( "title") - marker = state.src.charCodeAt(pos); +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); - if (marker !== 0x7E/* ~ */ && marker !== 0x60 /* ` */) { + // 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 + // - // scan marker length - mem = pos; - pos = state.skipChars(pos, marker); + // [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; + } - len = pos - mem; + // [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 (len < 3) { return false; } + // [link]( "title" ) + // ^^ skipping these spaces + start = pos; + for (; pos < max; pos++) { + code = state.src.charCodeAt(pos); + if (!isSpace(code) && code !== 0x0A) { + break; + } + } - markup = state.src.slice(mem, pos); - params = state.src.slice(pos, max); + // [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; - if (marker === 0x60 /* ` */) { - if (params.indexOf(String.fromCharCode(marker)) >= 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 { + 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; } + href = ref.href; + title = ref.title; } - // Since start is found, we can report success here in validation mode - if (silent) { return true; } + // + // 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; +} - // search end of block - nextLine = startLine; +// Process autolinks '' +/* 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; + } + const start = state.pos; + const max = state.posMax; 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 (++pos >= max) return false; + const ch = state.src.charCodeAt(pos); + if (ch === 0x3C /* < */) return false; + if (ch === 0x3E /* > */) break; + } + 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; } - - 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 (!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'; } - - if (state.src.charCodeAt(pos) !== marker) { continue; } - - if (state.sCount[nextLine] - state.blkIndent >= 4) { - // closing fence should be indented less than 4 spaces - continue; + state.pos += url.length + 2; + return true; + } + if (EMAIL_RE.test(url)) { + const fullUrl = state.md.normalizeLink('mailto:' + url); + if (!state.md.validateLink(fullUrl)) { + return false; } - - pos = state.skipChars(pos, marker); - - // 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; + 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; +} - // If a fence has heading spaces, they should be removed from its inner block - len = state.sCount[startLine]; +// Process html tags - state.line = nextLine + (haveEndMarker ? 1 : 0); +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; + } - 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 ]; + // Check start + const max = state.posMax; + const pos = state.pos; + if (state.src.charCodeAt(pos) !== 0x3C /* < */ || pos + 2 >= max) { + return false; + } + // 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; -}; - - -/***/ }), - -/***/ 1630: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// heading (#, ##, ...) - - - -var isSpace = (__webpack_require__(7022).isSpace); - - -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 it's indented more than 3 spaces, it should be a code block - if (state.sCount[startLine] - state.blkIndent >= 4) { return false; } - - ch = state.src.charCodeAt(pos); +} - if (ch !== 0x23/* # */ || pos >= max) { return false; } +// Process html entity - {, ¯, ", ... - // count heading level - level = 1; - ch = state.src.charCodeAt(++pos); - while (ch === 0x23/* # */ && pos < max && level <= 6) { - level++; - ch = state.src.charCodeAt(++pos); +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; +} - if (level > 6 || (pos < max && !isSpace(ch))) { return false; } - - if (silent) { return true; } - - // Let's cut tails like ' ### ' from the end of string - - max = state.skipSpacesBack(max, pos); - tmp = state.skipCharsBack(max, 0x23, pos); // # - if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) { - max = tmp; - } +// For each opening emphasis-like marker find a matching closing one +// - state.line = startLine + 1; +function processDelimiters(delimiters) { + const openersBottom = {}; + const max = delimiters.length; + if (!max) return; - token = state.push('heading_open', 'h' + String(level), 1); - token.markup = '########'.slice(0, level); - token.map = [ startLine, state.line ]; + // 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); - token = state.push('inline', '', 0); - token.content = state.src.slice(pos, max).trim(); - token.map = [ startLine, state.line ]; - token.children = []; + // 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; - token = state.push('heading_close', 'h' + String(level), -1); - token.markup = '########'.slice(0, level); + // 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; - return true; -}; + // 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; - -/***/ }), - -/***/ 5634: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Horizontal rule - - - -var isSpace = (__webpack_require__(7022).isSpace); - - -module.exports = function hr(state, startLine, endLine, silent) { - var marker, cnt, ch, token, - 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; } - - marker = state.src.charCodeAt(pos++); - - // Check hr marker - if (marker !== 0x2A/* * */ && - marker !== 0x2D/* - */ && - marker !== 0x5F/* _ */) { - return 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; + } + } + } + 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; + } + } + } + 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; + } } - - // markers can be mixed with spaces, but there should be at least 3 of them - - cnt = 1; - while (pos < max) { - ch = state.src.charCodeAt(pos++); - if (ch !== marker && !isSpace(ch)) { return false; } - if (ch === marker) { cnt++; } +} +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); + } } +} - if (cnt < 3) { return false; } - - if (silent) { return true; } - - state.line = startLine + 1; - - token = state.push('hr', 'hr', 0); - token.map = [ startLine, state.line ]; - token.markup = Array(cnt + 1).join(String.fromCharCode(marker)); - - return true; -}; - - -/***/ }), +// 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). +// -/***/ 6329: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +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 -"use strict"; -// HTML block + 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; + } +} +/** internal + * class ParserInline + * + * Tokenizes paragraph content. + **/ +// Parser rules -var block_names = __webpack_require__(813); -var HTML_OPEN_CLOSE_TAG_RE = (__webpack_require__(1947)/* .HTML_OPEN_CLOSE_TAG_RE */ .q); +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]]; -// An array of opening and corresponding closing sequences for html tags, -// last argument defines whether it can terminate a paragraph or not +// `rule2` ruleset was created specifically for emphasis/strikethrough +// post-processing and may be changed in the future. // -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 ] -]; - - -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; } - - if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; } - - lineText = state.src.slice(pos, max); +// 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]]; - for (i = 0; i < HTML_SEQUENCES.length; i++) { - if (HTML_SEQUENCES[i][0].test(lineText)) { break; } +/** + * 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]); } - if (i === HTML_SEQUENCES.length) { return false; } - - if (silent) { - // true if this sequence can be a terminator, false otherwise - return HTML_SEQUENCES[i][2]; + /** + * 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]); } +} - nextLine = startLine + 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++; } +// 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; + } + 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; } - - state.line = nextLine; - - token = state.push('html_block', '', 0); - token.map = [ startLine, nextLine ]; - token.content = state.getLines(startLine, nextLine, state.blkIndent, true); - - return true; + if (!ok) { + state.pos++; + } + cache[pos] = state.pos; }; - -/***/ }), - -/***/ 6850: -/***/ ((module) => { - -"use strict"; -// lheading (---, ===) - - - - -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'); - - // if it's indented more than 3 spaces, it should be a code block - if (state.sCount[startLine] - state.blkIndent >= 4) { return false; } - - oldParentType = state.parentType; - state.parentType = 'paragraph'; // use paragraph to match terminatorRules - - // 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; } - - // - // Check for underline in setext header +// Generate tokens for input range +// +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: // - if (state.sCount[nextLine] >= state.blkIndent) { - pos = state.bMarks[nextLine] + state.tShift[nextLine]; - 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; + // - 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; } } } - - // 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; + if (ok) { + if (state.pos >= end) { break; } + continue; } - if (terminate) { break; } + state.pending += state.src[state.pos++]; } - - if (!level) { - // Didn't find valid underline - return false; + if (state.pending) { + state.pushPending(); } - - 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; }; +/** + * 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; -/***/ }), - -/***/ 8532: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Lists - - - -var isSpace = (__webpack_require__(7022).isSpace); - - -// Search `[-+*][\n ]`, returns next pos after marker on success -// or -1 on fail. -function skipBulletListMarker(state, startLine) { - var marker, pos, max, ch; +// markdown-it default options - pos = state.bMarks[startLine] + state.tShift[startLine]; - max = state.eMarks[startLine]; +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', + /* “”‘’ */ - marker = state.src.charCodeAt(pos++); - // Check bullet - if (marker !== 0x2A/* * */ && - marker !== 0x2D/* - */ && - marker !== 0x2B/* + */) { - return -1; + // 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', + /* “”‘’ */ + + // Highlighter function. Should return escaped HTML, + // or '' if the source string is not changed and should be escaped externaly. + // If result starts with = max) { return -1; } - - 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; } +// Commonmark default options - continue; - } +var cfg_commonmark = { + options: { + // Enable HTML tags in source + html: true, + // Use '/' to close single tags (
) + 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', + /* “”‘’ */ - // found valid marker - if (ch === 0x29/* ) */ || ch === 0x2e/* . */) { - break; + // 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)); } - - -module.exports = function list(state, startLine, endLine, silent) { - var ch, - contentStart, - i, - indent, - indentAfterMarker, - initial, - isOrdered, - itemLines, - l, - listLines, - listTokIdx, - markerCharCode, - markerValue, - max, - nextLine, - offset, - oldListIndent, - oldParentType, - oldSCount, - oldTShift, - oldTight, - pos, - posAfterMarker, - prevEmptyEnd, - start, - terminate, - terminatorRules, - token, - isTerminatingParagraph = false, - tight = true; - - // if it's indented more than 3 spaces, it should be a code block - if (state.sCount[startLine] - state.blkIndent >= 4) { return false; } - - // Special case: - // - item 1 - // - item 2 - // - item 3 - // - item 4 - // - this one is a paragraph continuation - if (state.listIndent >= 0 && - state.sCount[startLine] - state.listIndent >= 4 && - state.sCount[startLine] < state.blkIndent) { - return false; - } - - // 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; +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/` // - // This code can fail if plugins use blkIndent as well as lists, - // but I hope the spec gets fixed long before that happens. + // 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 (state.sCount[startLine] >= state.blkIndent) { - isTerminatingParagraph = true; + if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) { + try { + parsed.hostname = punycode.toUnicode(parsed.hostname); + } catch (er) {/**/} } } - // 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; + // 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 + '%'); +} - } else { - return false; - } +/** + * 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!'); + * ``` + **/ - // 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; - } - - // 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 ] ]; - } - - } else { - token = state.push('bullet_list_open', 'ul', 1); - } - - token.map = listLines = [ startLine, 0 ]; - token.markup = String.fromCharCode(markerCharCode); - - // - // Iterate list items - // - - 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); - - if (ch === 0x09) { - offset += 4 - (offset + state.bsCount[nextLine]) % 4; - } else if (ch === 0x20) { - offset++; - } else { - break; - } - - pos++; - } - - contentStart = pos; - - 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; } - - // " - 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); - } - - // change current state, then restore it after parser subcall - oldTight = state.tight; - oldTShift = state.tShift[startLine]; - oldSCount = state.sCount[startLine]; - - // - example list - // ^ listIndent position will be here - // ^ blkIndent position will be here - // - oldListIndent = state.listIndent; - state.listIndent = state.blkIndent; - state.blkIndent = indent; - - state.tight = true; - state.tShift[startLine] = contentStart - state.bMarks[startLine]; - state.sCount[startLine] = offset; - - 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); - } - - // 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 - 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; } - - // - // Try to check if list is terminated or continued. - // - if (state.sCount[nextLine] < state.blkIndent) { break; } - - // if it's indented more than 3 spaces, it should be a code block - if (state.sCount[startLine] - state.blkIndent >= 4) { break; } - - // 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; - } - } - 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; } - } - - if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) { break; } - } - - // 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; - - // mark paragraphs tight if needed - if (tight) { - markTightParagraphs(state, listTokIdx); - } - - return true; -}; - - -/***/ }), - -/***/ 6864: -/***/ ((module) => { - -"use strict"; -// Paragraph - - - - -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; - - oldParentType = state.parentType; - state.parentType = 'paragraph'; - - // 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; } - - // 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; - } - } - if (terminate) { break; } - } - - 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 = state.push('paragraph_close', 'p', -1); - - state.parentType = oldParentType; - - return true; -}; - - -/***/ }), - -/***/ 3804: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - - -var normalizeReference = (__webpack_require__(7022).normalizeReference); -var isSpace = (__webpack_require__(7022).isSpace); - - -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; - - // 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; } - - // 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; - } - } - - endLine = state.lineMax; - - // jump line-by-line until empty one or EOF - terminatorRules = state.md.block.ruler.getRules('reference'); - - oldParentType = state.parentType; - state.parentType = 'reference'; - - 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; } - - // 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; - } - } - if (terminate) { break; } - } - - str = state.getLines(startLine, nextLine, state.blkIndent, false).trim(); - max = str.length; - - 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++; - } - } - } - - if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A/* : */) { return false; } - - // [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; - } - } - - // [label]: destination 'title' - // ^^^^^^^^^^^ parse this - res = state.md.helpers.parseLinkDestination(str, pos, max); - if (!res.ok) { return false; } - - href = state.md.normalizeLink(res.str); - if (!state.md.validateLink(href)) { return false; } - - pos = res.pos; - lines += res.lines; - - // save cursor state, we could require to rollback later - destEndPos = pos; - destEndLineNo = lines; - - // [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; - } - } - - // [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; - } - - // skip trailing spaces until the rest of the line - while (pos < max) { - 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; - lines = destEndLineNo; - while (pos < max) { - 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; - } - - label = normalizeReference(str.slice(1, labelEnd)); - if (!label) { - // CommonMark 0.20 disallows empty labels - return false; - } - - // 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: title, href: href }; - } - - state.parentType = oldParentType; - - state.line = startLine + lines + 1; - return true; -}; - - -/***/ }), - -/***/ 2948: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Parser state class - - - -var Token = __webpack_require__(5872); -var isSpace = (__webpack_require__(7022).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.env = env; - - // - // Internal state vartiables - // - - 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) - - // An amount of virtual spaces (tabs expanded) between beginning - // of each line (bMarks) and real beginning of that line. - // - // It exists only as a hack because blockquotes override bMarks - // losing information in the process. - // - // It's used only when expanding tabs, you can think about it as - // an initial tab length, e.g. bsCount=21 applied to string `\t123` - // means first tab should be expanded to 4-21%4 === 3 spaces. - // - 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) - 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); - - if (!indent_found) { - if (isSpace(ch)) { - indent++; - - if (ch === 0x09) { - offset += 4 - offset % 4; - } else { - offset++; - } - continue; - } else { - indent_found = true; - } - } - - if (ch === 0x0A || pos === len - 1) { - 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; - start = pos + 1; - } - } - - // Push fake entry to simplify cache bounds checks - this.bMarks.push(s.length); - this.eMarks.push(s.length); - 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); - token.block = true; - - if (nesting < 0) this.level--; // closing tag - token.level = this.level; - if (nesting > 0) this.level++; // opening tag - - 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++) { - if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) { - break; - } - } - return 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; } - } - return pos; -}; - -// Skip spaces from given position in reverse. -StateBlock.prototype.skipSpacesBack = function skipSpacesBack(pos, min) { - if (pos <= min) { return pos; } - - while (pos > min) { - 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; } - } - return pos; -}; - -// Skip char codes reverse from given position - 1 -StateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code, min) { - if (pos <= min) { return pos; } - - while (pos > min) { - 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]; - - 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); - - if (isSpace(ch)) { - if (ch === 0x09) { - lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4; - } else { - lineIndent++; - } - } else if (first - lineStart < this.tShift[line]) { - // patched tShift masked characters to look like spaces (blockquotes, list markers) - lineIndent++; - } else { - break; - } - - first++; - } - - if (lineIndent > indent) { - // partially expanding tabs in code blocks, e.g '\t\tfoobar' - // with indent=2 becomes ' \tfoobar' - queue[i] = new Array(lineIndent - indent + 1).join(' ') + this.src.slice(first, last); - } else { - 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; - - -/***/ }), - -/***/ 1785: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// GFM table, https://github.github.com/gfm/#tables-extension- - - - -var isSpace = (__webpack_require__(7022).isSpace); - - -function getLine(state, line) { - var pos = state.bMarks[line] + state.tShift[line], - 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); - - while (pos < max) { - if (ch === 0x7c/* | */) { - if (!isEscaped) { - // pipe separating cells, '|' - result.push(current + str.substring(lastPos, pos)); - current = ''; - lastPos = pos + 1; - } else { - // escaped pipe, '\|' - current += str.substring(lastPos, pos - 1); - lastPos = pos; - } - } - - 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; - - // should have at least two lines - if (startLine + 2 > endLine) { return false; } - - 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; } - - // 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)) { - 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; } - - while (pos < state.eMarks[nextLine]) { - 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(); - if (!t) { - // allow empty columns before and after table, but not in between columns; - // e.g. allow ` |---| `, disallow ` ---||--- ` - if (i === 0 || i === columns.length - 1) { - continue; - } else { - 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/* : */) { - 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; } - 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; - 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); - if (aligns[i]) { - token.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); - } - - token = state.push('tr_close', 'tr', -1); - token = state.push('thead_close', 'thead', -1); - - 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 (terminatorRules[i](state, nextLine, endLine, true)) { - terminate = true; - break; - } - } - - if (terminate) { break; } - lineText = getLine(state, nextLine).trim(); - 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(); - - if (nextLine === startLine + 2) { - token = state.push('tbody_open', 'tbody', 1); - token.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); - if (aligns[i]) { - token.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); - } - token = state.push('tr_close', 'tr', -1); - } - - if (tbodyLines) { - token = state.push('tbody_close', 'tbody', -1); - tbodyLines[1] = nextLine; - } - - token = state.push('table_close', 'table', -1); - tableLines[1] = nextLine; - - state.parentType = oldParentType; - state.line = nextLine; - return true; -}; - - -/***/ }), - -/***/ 898: -/***/ ((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); - } -}; - - -/***/ }), - -/***/ 9827: -/***/ ((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); - } - } -}; - - -/***/ }), - -/***/ 7830: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Replace link-like texts with link nodes. -// -// Currently restricted by `md.validateLink()` to http/https/ftp -// - - - -var arrayReplaceAt = (__webpack_require__(7022).arrayReplaceAt); - - -function isLinkOpen(str) { - return /^\s]/i.test(str); -} -function isLinkClose(str) { - return /^<\/a\s*>/i.test(str); -} - - -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)) { - 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); - } - } - } -}; - - -/***/ }), - -/***/ 4129: -/***/ ((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; -}; - - -/***/ }), - -/***/ 2834: -/***/ ((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()]; -} - -function replace_scoped(inlineTokens) { - var i, token, inside_autolink = 0; - - for (i = inlineTokens.length - 1; i >= 0; i--) { - 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) { - var i, token, inside_autolink = 0; - - for (i = inlineTokens.length - 1; i >= 0; i--) { - 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++; - } - } -} - - -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 (RARE_RE.test(state.tokens[blkIdx].content)) { - replace_rare(state.tokens[blkIdx].children); - } - - } -}; - - -/***/ }), - -/***/ 8450: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Convert straight quotation marks to typographic ones -// - - - -var isWhiteSpace = (__webpack_require__(7022).isWhiteSpace); -var isPunctChar = (__webpack_require__(7022).isPunctChar); -var isMdAsciiPunct = (__webpack_require__(7022).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); -} - -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; - - if (token.type !== 'text') { continue; } - - text = token.content; - pos = 0; - max = text.length; - - /*eslint no-labels:0,block-scoped-var:0*/ - OUTER: - while (pos < max) { - QUOTE_RE.lastIndex = pos; - t = QUOTE_RE.exec(text); - if (!t) { break; } - - canOpen = canClose = true; - pos = t.index + 1; - isSingle = (t[0] === "'"); - - // Find previous character, - // default to space if it's the beginning of the line - // - 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' - - lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1); - break; - } - } - - // 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; - } - } - - 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--) { - item = stack[j]; - if (stack[j].level < thisLevel) { break; } - if (item.single === isSingle && stack[j].level === thisLevel) { - item = stack[j]; - - 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); - } - } - } -} - - -module.exports = function smartquotes(state) { - /*eslint max-depth:0*/ - var blkIdx; - - if (!state.md.options.typographer) { return; } - - for (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); - } -}; - - -/***/ }), - -/***/ 6480: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Core state object -// - - -var Token = __webpack_require__(5872); - - -function StateCore(src, md, env) { - this.src = src; - this.env = env; - this.tokens = []; - this.inlineMode = false; - this.md = md; // link to parser instance -} - -// re-export Token class to use in core rules -StateCore.prototype.Token = Token; - - -module.exports = StateCore; - - -/***/ }), - -/***/ 6633: -/***/ ((module) => { - -"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. -// - - - -module.exports = function text_join(state) { - var j, l, tokens, curr, max, last, - blockTokens = state.tokens; - - for (j = 0, l = blockTokens.length; j < l; j++) { - if (blockTokens[j].type !== 'inline') continue; - - tokens = blockTokens[j].children; - 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; - } - } -}; - - -/***/ }), - -/***/ 3420: -/***/ ((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; - - for (;;) { - if (++pos >= max) return false; - - ch = state.src.charCodeAt(pos); - - if (ch === 0x3C /* < */) return false; - if (ch === 0x3E /* > */) break; - } - - url = state.src.slice(start + 1, pos); - - if (AUTOLINK_RE.test(url)) { - fullUrl = state.md.normalizeLink(url); - if (!state.md.validateLink(fullUrl)) { return false; } - - if (!silent) { - token = state.push('link_open', 'a', 1); - token.attrs = [ [ 'href', fullUrl ] ]; - token.markup = 'autolink'; - token.info = 'auto'; - - token = state.push('text', '', 0); - token.content = state.md.normalizeLinkText(url); - - token = state.push('link_close', 'a', -1); - token.markup = 'autolink'; - token.info = 'auto'; - } - - state.pos += url.length + 2; - return true; - } - - if (EMAIL_RE.test(url)) { - fullUrl = state.md.normalizeLink('mailto:' + url); - if (!state.md.validateLink(fullUrl)) { return false; } - - if (!silent) { - token = state.push('link_open', 'a', 1); - token.attrs = [ [ 'href', fullUrl ] ]; - token.markup = 'autolink'; - token.info = 'auto'; - - token = state.push('text', '', 0); - token.content = state.md.normalizeLinkText(url); - - token = state.push('link_close', 'a', -1); - token.markup = 'autolink'; - token.info = 'auto'; - } - - state.pos += url.length + 2; - return true; - } - - return false; -}; - - -/***/ }), - -/***/ 40: -/***/ ((module) => { - -"use strict"; -// Parse backticks - - - - -module.exports = function backtick(state, silent) { - var start, max, marker, token, matchStart, matchEnd, openerLength, closerLength, - pos = state.pos, - ch = state.src.charCodeAt(pos); - - if (ch !== 0x60/* ` */) { return false; } - - start = pos; - pos++; - max = state.posMax; - - // scan marker length - while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++; } - - marker = state.src.slice(start, pos); - openerLength = marker.length; - - if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) { - if (!silent) state.pending += marker; - state.pos += openerLength; - return true; - } - - 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'); - } - 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; - return true; -}; - - -/***/ }), - -/***/ 9354: -/***/ ((module) => { - -"use strict"; -// For each opening emphasis-like marker find a matching closing one -// - - - -function processDelimiters(state, delimiters) { - var closerIdx, openerIdx, closer, opener, minOpenerIdx, newMinOpenerIdx, - isOddMatch, lastJump, - openersBottom = {}, - max = delimiters.length; - - if (!max) return; - - // 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 = []; - - for (closerIdx = 0; closerIdx < max; closerIdx++) { - closer = delimiters[closerIdx]; - - jumps.push(0); - - // 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; - - // 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; - } - } - } - - 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; - - 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; - } - } - } - - 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; - } - } -} - - -module.exports = function link_pairs(state) { - var curr, - tokens_meta = state.tokens_meta, - max = state.tokens_meta.length; - - processDelimiters(state, state.delimiters); - - for (curr = 0; curr < max; curr++) { - if (tokens_meta[curr] && tokens_meta[curr].delimiters) { - processDelimiters(state, tokens_meta[curr].delimiters); - } - } -}; - - -/***/ }), - -/***/ 7894: -/***/ ((module) => { - -"use strict"; -// Process *this* and _that_ -// - - - -// Insert each marker as a separate text token, and add it to delimiter list -// -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); - - for (i = 0; i < scanned.length; i++) { - token = state.push('text', '', 0); - token.content = String.fromCharCode(marker); - - state.delimiters.push({ - // Char code of the starting marker (number). - // - marker: 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) { - 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; - } - - // Process only opening markers - if (startDelim.end === -1) { - continue; - } - - endDelim = delimiters[startDelim.end]; - - // 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 = ''; - - 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 = ''; - - if (isStrong) { - state.tokens[delimiters[i - 1].token].content = ''; - state.tokens[delimiters[startDelim.end + 1].token].content = ''; - i--; - } - } -} - - -// Walk through delimiter list and replace text tokens with tags -// -module.exports.g = function emphasis(state) { - var curr, - tokens_meta = state.tokens_meta, - max = state.tokens_meta.length; - - postProcess(state, state.delimiters); - - for (curr = 0; curr < max; curr++) { - if (tokens_meta[curr] && tokens_meta[curr].delimiters) { - postProcess(state, tokens_meta[curr].delimiters); - } - } -}; - - -/***/ }), - -/***/ 9391: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Process html entity - {, ¯, ", ... - - - -var entities = __webpack_require__(6233); -var has = (__webpack_require__(7022).has); -var isValidEntityCode = (__webpack_require__(7022).isValidEntityCode); -var fromCodePoint = (__webpack_require__(7022).fromCodePoint); - - -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; - - -module.exports = function entity(state, silent) { - var ch, code, match, token, pos = state.pos, max = state.posMax; - - if (state.src.charCodeAt(pos) !== 0x26/* & */) return false; - - if (pos + 1 >= max) return false; - - ch = state.src.charCodeAt(pos + 1); - - 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); - - 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; - } - } - } - - return false; -}; - - -/***/ }), - -/***/ 1917: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Process escaped chars and hardbreaks - - - -var isSpace = (__webpack_require__(7022).isSpace); - -var ESCAPED = []; - -for (var i = 0; i < 256; i++) { ESCAPED.push(0); } - -'\\!"#$%&\'()*+,./:;<=>?@[]^_`{|}~-' - .split('').forEach(function (ch) { ESCAPED[ch.charCodeAt(0)] = 1; }); - - -module.exports = function escape(state, silent) { - var ch1, ch2, origStr, escapedStr, token, pos = state.pos, 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); - - if (ch1 === 0x0A) { - if (!silent) { - state.push('hardbreak', 'br', 0); - } - - pos++; - // skip leading whitespaces from next line - while (pos < max) { - ch1 = state.src.charCodeAt(pos); - if (!isSpace(ch1)) break; - pos++; - } - - state.pos = pos; - return true; - } - - escapedStr = state.src[pos]; - - if (ch1 >= 0xD800 && ch1 <= 0xDBFF && pos + 1 < max) { - ch2 = state.src.charCodeAt(pos + 1); - - if (ch2 >= 0xDC00 && ch2 <= 0xDFFF) { - escapedStr += state.src[pos + 1]; - pos++; - } - } - - origStr = '\\' + escapedStr; - - if (!silent) { - 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'; - } - - state.pos = pos + 1; - return true; -}; - - -/***/ }), - -/***/ 9969: -/***/ ((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]; } - - last++; - } - } - - if (curr !== last) { - tokens.length = last; - } -}; - - -/***/ }), - -/***/ 1779: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Process html tags - - - - -var HTML_TAG_RE = (__webpack_require__(1947)/* .HTML_TAG_RE */ .n); - - -function isLinkOpen(str) { - return /^\s]/i.test(str); -} -function isLinkClose(str) { - return /^<\/a\s*>/i.test(str); -} - - -function isLetter(ch) { - /*eslint no-bitwise:0*/ - var lc = ch | 0x20; // to lower case - return (lc >= 0x61/* a */) && (lc <= 0x7a/* z */); -} - - -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) { - return false; - } - - // Quick fail on second char - ch = state.src.charCodeAt(pos + 1); - if (ch !== 0x21/* ! */ && - ch !== 0x3F/* ? */ && - ch !== 0x2F/* / */ && - !isLetter(ch)) { - 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--; - } - state.pos += match[0].length; - return true; -}; - - -/***/ }), - -/***/ 3006: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Process ![image]( "title") - - - -var normalizeReference = (__webpack_require__(7022).normalizeReference); -var isSpace = (__webpack_require__(7022).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; } - } - 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 = ''; - } - } - - // [link]( "title" ) - // ^^ skipping these spaces - start = pos; - for (; pos < max; pos++) { - code = state.src.charCodeAt(pos); - if (!isSpace(code) && code !== 0x0A) { break; } - } - - // [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; - - // [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 { - 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; - } - 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 ]); - } - } - - state.pos = pos; - state.posMax = max; - return true; -}; - - -/***/ }), - -/***/ 1727: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Process [link]( "stuff") - - - -var normalizeReference = (__webpack_require__(7022).normalizeReference); -var isSpace = (__webpack_require__(7022).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); - - // 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 - // - - // might have found a valid shortcut link, disable reference parsing - parseReference = false; - - // [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; } - - // [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 = ''; - } - - // [link]( "title" ) - // ^^ skipping these spaces - start = pos; - for (; pos < max; pos++) { - code = state.src.charCodeAt(pos); - if (!isSpace(code) && code !== 0x0A) { break; } - } - - // [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; - - // [link]( "title" ) - // ^^ skipping these spaces - for (; pos < max; pos++) { - code = state.src.charCodeAt(pos); - if (!isSpace(code) && code !== 0x0A) { break; } - } - } - } - - 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/* [ */) { - 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; - } - 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) { - state.pos = labelStart; - state.posMax = labelEnd; - - token = state.push('link_open', 'a', 1); - token.attrs = attrs = [ [ 'href', href ] ]; - if (title) { - attrs.push([ 'title', title ]); - } - - state.linkLevel++; - state.md.inline.tokenize(state); - state.linkLevel--; - - token = state.push('link_close', 'a', -1); - } - - state.pos = pos; - state.posMax = max; - return true; -}; - - -/***/ }), - -/***/ 2906: -/***/ ((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); - - token = state.push('link_close', 'a', -1); - token.markup = 'linkify'; - token.info = 'auto'; - } - - state.pos += url.length - proto.length; - return true; -}; - - -/***/ }), - -/***/ 3905: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Proceess '\n' - - - -var isSpace = (__webpack_require__(7022).isSpace); - - -module.exports = function newline(state, silent) { - var pmax, max, ws, pos = state.pos; - - if (state.src.charCodeAt(pos) !== 0x0A/* \n */) { return false; } - - pmax = state.pending.length - 1; - max = state.posMax; - - // ' \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--; - - 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; -}; - - -/***/ }), - -/***/ 670: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Inline parser state - - - - -var Token = __webpack_require__(5872); -var isWhiteSpace = (__webpack_require__(7022).isWhiteSpace); -var isPunctChar = (__webpack_require__(7022).isPunctChar); -var isMdAsciiPunct = (__webpack_require__(7022).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; -} - - -// 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(); +/** + * 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) + '
'; + * } + * }); + * ``` + * + **/ +function MarkdownIt(presetName, options) { + if (!(this instanceof MarkdownIt)) { + return new MarkdownIt(presetName, options); } - - var token = new Token(type, tag, nesting); - var token_meta = null; - - if (nesting < 0) { - // closing tag - this.level--; - this.delimiters = this._prev_delimiters.pop(); + if (!options) { + if (!isString(presetName)) { + options = presetName || {}; + presetName = 'default'; + } } - token.level = this.level; - - if (nesting > 0) { - // opening tag - this.level++; - this._prev_delimiters.push(this.delimiters); - this.delimiters = []; - token_meta = { delimiters: this.delimiters }; - } + /** + * 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(); - this.pendingLevel = this.level; - this.tokens.push(token); - this.tokens_meta.push(token_meta); - return token; -}; + /** + * 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(); + /** + * 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 Core(); -// 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); + /** + * 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.mjs). + **/ + this.renderer = new Renderer(); - // treat beginning of the line as a whitespace - lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20; + /** + * 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.mjs) + * rule. + **/ + this.linkify = new LinkifyIt(); - while (pos < max && this.src.charCodeAt(pos) === marker) { pos++; } + /** + * 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; - count = pos - start; + /** + * MarkdownIt#normalizeLink(url) -> String + * + * Function used to encode link url to a machine-readable format, + * which includes url-encoding, punycode, etc. + **/ + this.normalizeLink = normalizeLink; - // treat end of the line as a whitespace - nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20; + /** + * MarkdownIt#normalizeLinkText(url) -> String + * + * Function used to decode link url to a human-readable format` + **/ + this.normalizeLinkText = normalizeLinkText; - isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar)); - isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar)); + // Expose utils & helpers for easy acces from plugins - isLastWhiteSpace = isWhiteSpace(lastChar); - isNextWhiteSpace = isWhiteSpace(nextChar); + /** + * 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.mjs). + **/ + this.utils = utils; - if (isNextWhiteSpace) { - left_flanking = false; - } else if (isNextPunctChar) { - if (!(isLastWhiteSpace || isLastPunctChar)) { - left_flanking = false; - } + /** + * 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 = assign({}, helpers); + this.options = {}; + this.configure(presetName); + if (options) { + this.set(options); } +} + +/** 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. + * + * ##### 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. + **/ +MarkdownIt.prototype.set = function (options) { + assign(this.options, options); + return this; +}; - if (isLastWhiteSpace) { - right_flanking = false; - } else if (isLastPunctChar) { - if (!(isNextWhiteSpace || isNextPunctChar)) { - right_flanking = false; +/** 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'); } } - - 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 (!presets) { + throw new Error('Wrong `markdown-it` preset, can\'t be empty'); } - - 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; - - -/***/ }), - -/***/ 4814: -/***/ ((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; } - - scanned = state.scanDelims(state.pos, true); - len = scanned.length; - ch = String.fromCharCode(marker); - - if (len < 2) { return false; } - - if (len % 2) { - token = state.push('text', '', 0); - token.content = ch; - len--; + if (presets.options) { + self.set(presets.options); } - - for (i = 0; i < len; i += 2) { - token = state.push('text', '', 0); - token.content = ch + ch; - - 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 + 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); + } }); } - - state.pos += scanned.length; - - return true; + return this; }; - -function postProcess(state, delimiters) { - var i, j, - startDelim, - endDelim, - token, - loneMarkers = [], - max = delimiters.length; - - for (i = 0; i < max; i++) { - startDelim = delimiters[i]; - - if (startDelim.marker !== 0x7E/* ~ */) { - continue; - } - - if (startDelim.end === -1) { - continue; - } - - 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); - } +/** 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. + * + * 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'); + * ``` + **/ +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; +}; - // 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++; - } +/** 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. + * + * The same as [[MarkdownIt.enable]], but turn specified rules off. + **/ +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; +}; - j--; +/** 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; +}; - if (i !== j) { - token = state.tokens[j]; - state.tokens[j] = state.tokens[i]; - state.tokens[i] = token; - } +/** internal + * MarkdownIt.parse(src, env) -> Array + * - src (String): source string + * - env (Object): environment sandbox + * + * 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. + **/ +MarkdownIt.prototype.parse = function (src, env) { + if (typeof src !== 'string') { + throw new Error('Input data should be a String'); } -} - + const state = new this.core.State(src, this, env); + this.core.process(state); + return state.tokens; +}; -// Walk through delimiter list and replace text tokens with tags -// -module.exports.g = function strikethrough(state) { - var curr, - tokens_meta = state.tokens_meta, - max = state.tokens_meta.length; +/** + * MarkdownIt.render(src [, env]) -> String + * - src (String): source string + * - env (Object): environment sandbox + * + * 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]]. + **/ +MarkdownIt.prototype.render = function (src, env) { + env = env || {}; + return this.renderer.render(this.parse(src, env), this.options, env); +}; - postProcess(state, state.delimiters); +/** 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; +}; - for (curr = 0; curr < max; curr++) { - if (tokens_meta[curr] && tokens_meta[curr].delimiters) { - postProcess(state, tokens_meta[curr].delimiters); - } - } +/** + * 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 = MarkdownIt; + /***/ }), -/***/ 9941: -/***/ ((module) => { +/***/ 5778: +/***/ ((__unused_webpack_module, exports) => { "use strict"; -// Skip text characters for text token, place those to pending buffer -// and increment current pos +/* eslint-disable no-bitwise */ +const decodeCache = {}; -// Rule to skip pure text -// '{}$%@~+=:' reserved for extentions +function getDecodeCache (exclude) { + let cache = decodeCache[exclude]; + if (cache) { return cache } -// !, ", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \, ], ^, _, `, {, |, }, or ~ + cache = decodeCache[exclude] = []; -// !!!! 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; + for (let i = 0; i < 128; i++) { + const ch = String.fromCharCode(i); + cache.push(ch); } -} - -module.exports = function text(state, silent) { - var pos = state.pos; - while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) { - pos++; + for (let i = 0; i < exclude.length; i++) { + const ch = exclude.charCodeAt(i); + cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2); } - if (pos === state.pos) { return false; } - - if (!silent) { state.pending += state.src.slice(state.pos, pos); } - - state.pos = pos; - - return true; -}; + return cache +} -// Alternative implementation, for memory. +// Decode percent-encoded string. // -// 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. - -/* -var TERMINATOR_RE = /[\n!#$%&*+\-:<=>@[\\\]^_`{}~]/; - -module.exports = function text(state, silent) { - var pos = state.pos, - idx = state.src.slice(pos).search(TERMINATOR_RE); - - // first char is terminator -> empty text - if (idx === 0) { return false; } - - // 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; +function decode (string, exclude) { + if (typeof exclude !== 'string') { + exclude = decode.defaultChars; } - if (!silent) { state.pending += state.src.slice(pos, pos + idx); } - - state.pos += idx; - - return true; -};*/ - - -/***/ }), - -/***/ 5872: -/***/ ((module) => { - -"use strict"; -// Token class - - + const cache = getDecodeCache(exclude); + return string.replace(/(%[a-f0-9]{2})+/gi, function (seq) { + let result = ''; -/** - * class Token - **/ - -/** - * 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; - - /** - * Token#tag -> String - * - * html tag name, e.g. "p" - **/ - this.tag = tag; + for (let i = 0, l = seq.length; i < l; i += 3) { + const b1 = parseInt(seq.slice(i + 1, i + 3), 16); - /** - * Token#attrs -> Array - * - * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]` - **/ - this.attrs = null; + if (b1 < 0x80) { + result += cache[b1]; + continue + } - /** - * Token#map -> Array - * - * Source map info. Format: `[ line_begin, line_end ]` - **/ - this.map = null; + if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) { + // 110xxxxx 10xxxxxx + const b2 = parseInt(seq.slice(i + 4, i + 6), 16); - /** - * 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; + if ((b2 & 0xC0) === 0x80) { + const chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F); - /** - * Token#level -> Number - * - * nesting level, the same as `state.level` - **/ - this.level = 0; + if (chr < 0x80) { + result += '\ufffd\ufffd'; + } else { + result += String.fromCharCode(chr); + } - /** - * Token#children -> Array - * - * An array of child nodes (inline and img tokens) - **/ - this.children = null; + i += 3; + continue + } + } - /** - * Token#content -> String - * - * In a case of self-closing tag (code, html, fence, etc.), - * it has contents of this tag. - **/ - this.content = ''; + if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) { + // 1110xxxx 10xxxxxx 10xxxxxx + const b2 = parseInt(seq.slice(i + 4, i + 6), 16); + const b3 = parseInt(seq.slice(i + 7, i + 9), 16); - /** - * Token#markup -> String - * - * '*' or '_' for emphasis, fence string for fence, etc. - **/ - this.markup = ''; + if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) { + const chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F); - /** - * 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 = ''; + if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) { + result += '\ufffd\ufffd\ufffd'; + } else { + result += String.fromCharCode(chr); + } - /** - * Token#meta -> Object - * - * A place for plugins to store an arbitrary data - **/ - this.meta = null; + i += 6; + continue + } + } - /** - * Token#block -> Boolean - * - * True for block-level tokens, false for inline tokens. - * Used in renderer to calculate line breaks - **/ - this.block = false; + if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) { + // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx + 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); - /** - * Token#hidden -> Boolean - * - * If it's true, ignore this element when rendering. Used for tight lists - * to hide paragraphs. - **/ - this.hidden = false; -} + if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) { + let chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F); + if (chr < 0x10000 || chr > 0x10FFFF) { + result += '\ufffd\ufffd\ufffd\ufffd'; + } else { + chr -= 0x10000; + result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF)); + } -/** - * Token.attrIndex(name) -> Number - * - * Search attribute index by name. - **/ -Token.prototype.attrIndex = function attrIndex(name) { - var attrs, i, len; + i += 9; + continue + } + } - if (!this.attrs) { return -1; } + result += '\ufffd'; + } - attrs = this.attrs; + return result + }) +} - for (i = 0, len = attrs.length; i < len; i++) { - if (attrs[i][0] === name) { return i; } - } - return -1; -}; +decode.defaultChars = ';/?:@&=+$,#'; +decode.componentChars = ''; +const encodeCache = {}; -/** - * 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 ]; - } -}; +// Create a lookup array where anything but characters in `chars` string +// and alphanumeric chars is percent-encoded. +// +function getEncodeCache (exclude) { + let cache = encodeCache[exclude]; + if (cache) { return cache } + cache = encodeCache[exclude] = []; -/** - * Token.attrSet(name, value) - * - * Set `name` attribute to `value`. Override old value if exists. - **/ -Token.prototype.attrSet = function attrSet(name, value) { - var idx = this.attrIndex(name), - attrData = [ name, value ]; + for (let i = 0; i < 128; i++) { + const ch = String.fromCharCode(i); - if (idx < 0) { - this.attrPush(attrData); - } else { - this.attrs[idx] = attrData; + if (/^[0-9a-z]$/i.test(ch)) { + // always allow unencoded alphanumeric characters + cache.push(ch); + } else { + cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2)); + } } -}; - -/** - * Token.attrGet(name) - * - * Get the value of attribute `name`, or null if it does not exist. - **/ -Token.prototype.attrGet = function attrGet(name) { - var idx = this.attrIndex(name), value = null; - if (idx >= 0) { - value = this.attrs[idx][1]; + for (let i = 0; i < exclude.length; i++) { + cache[exclude.charCodeAt(i)] = exclude[i]; } - return value; -}; + return cache +} -/** - * 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) { - var idx = this.attrIndex(name); +// Encode unsafe characters with percent-encoding, skipping already +// encoded sequences. +// +// - string - string to encode +// - 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) { + if (typeof exclude !== 'string') { + // encode(string, keepEscaped) + keepEscaped = exclude; + exclude = encode.defaultChars; + } - if (idx < 0) { - this.attrPush([ name, value ]); - } else { - this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value; + if (typeof keepEscaped === 'undefined') { + keepEscaped = true; } -}; + const cache = getEncodeCache(exclude); + let result = ''; -module.exports = Token; + 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 + } + } -/***/ }), + if (code < 128) { + result += cache[code]; + continue + } -/***/ 3122: -/***/ ((module) => { + if (code >= 0xD800 && code <= 0xDFFF) { + if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) { + const nextCode = string.charCodeAt(i + 1); + if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) { + result += encodeURIComponent(string[i] + string[i + 1]); + i++; + continue + } + } + result += '%EF%BF%BD'; + continue + } -"use strict"; + result += encodeURIComponent(string[i]); + } + return result +} +encode.defaultChars = ";/?:@&=+$,-_.!~*'()#"; +encode.componentChars = "-_.!~*'()"; +function format (url) { + let result = ''; -/* eslint-disable no-bitwise */ + result += url.protocol || ''; + result += url.slashes ? '//' : ''; + result += url.auth ? url.auth + '@' : ''; -var decodeCache = {}; + if (url.hostname && url.hostname.indexOf(':') !== -1) { + // ipv6 address + result += '[' + url.hostname + ']'; + } else { + result += url.hostname || ''; + } -function getDecodeCache(exclude) { - var i, ch, cache = decodeCache[exclude]; - if (cache) { return cache; } + result += url.port ? ':' + url.port : ''; + result += url.pathname || ''; + result += url.search || ''; + result += url.hash || ''; - cache = decodeCache[exclude] = []; + return result +} - for (i = 0; i < 128; i++) { - ch = String.fromCharCode(i); - cache.push(ch); - } +// Copyright Joyent, Inc. and other Node contributors. +// +// 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. - for (i = 0; i < exclude.length; i++) { - ch = exclude.charCodeAt(i); - cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2); - } +// +// Changes from joyent/node: +// +// 1. No leading slash in paths, +// e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/` +// +// 2. Backslashes are not replaced with slashes, +// so `http:\\example.org\` is treated like a relative path +// +// 3. Trailing colon is treated like a part of the path, +// i.e. in `http://example.org:foo` pathname is `:foo` +// +// 4. Nothing is URL-encoded in the resulting object, +// (in joyent/node some chars in auth and paths are encoded) +// +// 5. `url.parse()` does not have `parseQueryString` argument +// +// 6. Removed extraneous result properties: `host`, `path`, `query`, etc., +// which can be constructed using other parts of the url. +// - return cache; +function Url () { + this.protocol = null; + this.slashes = null; + this.auth = null; + this.port = null; + this.hostname = null; + this.hash = null; + this.search = null; + this.pathname = null; } +// Reference: RFC 3986, RFC 1808, RFC 2396 -// Decode percent-encoded string. -// -function decode(string, exclude) { - var cache; +// define these here so at least they only have to be +// compiled once on the first module load. +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 +} + +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" + rest = rest.trim(); + + if (!slashesDenoteHost && url.split('#').length === 1) { + // Try fast path regexp + const simplePath = simplePathPattern.exec(rest); + if (simplePath) { + this.pathname = simplePath[1]; + if (simplePath[2]) { + this.search = simplePath[2]; + } + return this + } + } - if (typeof exclude !== 'string') { - exclude = decode.defaultChars; + let proto = protocolPattern.exec(rest); + if (proto) { + proto = proto[0]; + lowerProto = proto.toLowerCase(); + this.protocol = proto; + rest = rest.substr(proto.length); } - cache = getDecodeCache(exclude); + // figure out if it's got a host + // 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])) { + rest = rest.substr(2); + this.slashes = true; + } + } - return string.replace(/(%[a-f0-9]{2})+/gi, function(seq) { - var i, l, b1, b2, b3, b4, chr, - result = ''; + if (!hostlessProtocol[proto] && + (slashes || (proto && !slashedProtocol[proto]))) { + // there's a hostname. + // the first instance of /, ?, ;, or # ends the host. + // + // If there is an @ in the hostname, then non-host chars *are* allowed + // to the left of the last @ sign, unless some host-ending character + // comes *before* the @-sign. + // URLs are obnoxious. + // + // ex: + // http://a@b@c/ => user:a@b host:c + // http://a@b?@c => user:a host:c path:/?@c - for (i = 0, l = seq.length; i < l; i += 3) { - b1 = parseInt(seq.slice(i + 1, i + 3), 16); + // v0.12 TODO(isaacs): This is not quite how Chrome does things. + // Review our test case against browsers more comprehensively. - if (b1 < 0x80) { - result += cache[b1]; - continue; + // find the first instance of any hostEndingChars + 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; } + } - if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) { - // 110xxxxx 10xxxxxx - b2 = parseInt(seq.slice(i + 4, i + 6), 16); - - if ((b2 & 0xC0) === 0x80) { - chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F); + // at this point, either we have an explicit point where the + // auth portion cannot go past, or the last @ char is the decider. + let auth, atSign; + if (hostEnd === -1) { + // atSign can be anywhere. + atSign = rest.lastIndexOf('@'); + } else { + // atSign must be in auth portion. + // http://a@b/c@d => host:b auth:a path:/c@d + atSign = rest.lastIndexOf('@', hostEnd); + } - if (chr < 0x80) { - result += '\ufffd\ufffd'; - } else { - result += String.fromCharCode(chr); - } + // Now we have a portion which is definitely the auth. + // Pull that off. + if (atSign !== -1) { + auth = rest.slice(0, atSign); + rest = rest.slice(atSign + 1); + this.auth = auth; + } - i += 3; - continue; - } + // the host is the remaining to the left of the first non-host char + hostEnd = -1; + for (let i = 0; i < nonHostChars.length; i++) { + hec = rest.indexOf(nonHostChars[i]); + if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) { + hostEnd = hec; } + } + // if we still have not hit it, then the entire thing is a host. + if (hostEnd === -1) { + hostEnd = rest.length; + } - 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); - - if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) { - chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F); - - if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) { - result += '\ufffd\ufffd\ufffd'; - } else { - result += String.fromCharCode(chr); - } + if (rest[hostEnd - 1] === ':') { hostEnd--; } + const host = rest.slice(0, hostEnd); + rest = rest.slice(hostEnd); - i += 6; - continue; - } - } + // pull out port. + this.parseHost(host); - 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); + // we've indicated that there is a hostname, + // so even if it's empty, it has to be present. + this.hostname = this.hostname || ''; - if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) { - chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F); + // if hostname begins with [ and ends with ] + // assume that it's an IPv6 address. + const ipv6Hostname = this.hostname[0] === '[' && + this.hostname[this.hostname.length - 1] === ']'; - if (chr < 0x10000 || chr > 0x10FFFF) { - result += '\ufffd\ufffd\ufffd\ufffd'; - } else { - chr -= 0x10000; - result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF)); + // validate a little. + if (!ipv6Hostname) { + 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)) { + 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 + // broken by replacing non-ASCII by nothing + newpart += 'x'; + } else { + newpart += part[j]; + } + } + // we test again with ASCII char only + if (!newpart.match(hostnamePartPattern)) { + 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]); + } + if (notHost.length) { + rest = notHost.join('.') + rest; + } + this.hostname = validParts.join('.'); + break } - - i += 9; - continue; } } + } - result += '\ufffd'; + if (this.hostname.length > hostnameMaxLen) { + this.hostname = ''; } - return result; - }); -} + // strip [ and ] from the hostname + // the host field still retains them, though + if (ipv6Hostname) { + this.hostname = this.hostname.substr(1, this.hostname.length - 2); + } + } + // chop off from the tail first. + const hash = rest.indexOf('#'); + if (hash !== -1) { + // got a fragment string. + this.hash = rest.substr(hash); + rest = rest.slice(0, hash); + } + const qm = rest.indexOf('?'); + if (qm !== -1) { + this.search = rest.substr(qm); + rest = rest.slice(0, qm); + } + if (rest) { this.pathname = rest; } + if (slashedProtocol[lowerProto] && + this.hostname && !this.pathname) { + this.pathname = ''; + } -decode.defaultChars = ';/?:@&=+$,#'; -decode.componentChars = ''; + return this +}; +Url.prototype.parseHost = function (host) { + let port = portPattern.exec(host); + if (port) { + port = port[0]; + if (port !== ':') { + this.port = port.substr(1); + } + host = host.substr(0, host.length - port.length); + } + if (host) { this.hostname = host; } +}; -module.exports = decode; +exports.decode = decode; +exports.encode = encode; +exports.format = format; +exports.parse = urlParse; /***/ }), -/***/ 729: -/***/ ((module) => { - -"use strict"; - - - - -var encodeCache = {}; +/***/ 6878: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var aggregator_exports = {}; +__export(aggregator_exports, { + Aggregator: () => Aggregator +}); +module.exports = __toCommonJS(aggregator_exports); +var import_core = __webpack_require__(2760); +var import_lazy = __webpack_require__(8625); +var import_util = __webpack_require__(7839); +class Aggregator { + #pipeline; + #options; + constructor(pipeline, options) { + this.#pipeline = pipeline; + this.#options = (0, import_core.initOptions)(options); + } + /** + * Returns an {@link Iterator} for lazy evaluation of the pipeline. + * + * @param {*} collection An array or iterator object + * @returns {Iterator} an iterator object + */ + stream(collection, options) { + let iterator = (0, import_lazy.Lazy)(collection); + const opts = options ?? this.#options; + const mode = opts.processingMode; + if (mode == import_core.ProcessingMode.CLONE_ALL || mode == import_core.ProcessingMode.CLONE_INPUT) { + iterator.map(import_util.cloneDeep); + } + const stages = new Array(); + if (!(0, import_util.isEmpty)(this.#pipeline)) { + for (const operator of this.#pipeline) { + const operatorKeys = Object.keys(operator); + const opName = operatorKeys[0]; + const call = (0, import_core.getOperator)("pipeline", opName, opts); + (0, import_util.assert)( + operatorKeys.length === 1 && !!call, + `invalid pipeline operator ${opName}` + ); + stages.push(opName); + iterator = call(iterator, operator[opName], opts); + } + } + if (mode == import_core.ProcessingMode.CLONE_OUTPUT || mode == import_core.ProcessingMode.CLONE_ALL && !!(0, import_util.intersection)([["$group", "$unwind"], stages]).length) { + iterator.map(import_util.cloneDeep); + } + return iterator; + } + /** + * Return the results of the aggregation as an array. + * + * @param collection + */ + run(collection, options) { + return this.stream(collection, options).value(); + } +} +// Annotate the CommonJS export names for ESM import in node: +0 && (0); -// 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; } - cache = encodeCache[exclude] = []; +/***/ }), - for (i = 0; i < 128; i++) { - ch = String.fromCharCode(i); +/***/ 2760: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - if (/^[0-9a-z]$/i.test(ch)) { - // always allow unencoded alphanumeric characters - cache.push(ch); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var core_exports = {}; +__export(core_exports, { + ComputeOptions: () => ComputeOptions, + Context: () => Context, + OperatorType: () => OperatorType, + ProcessingMode: () => ProcessingMode, + computeValue: () => computeValue, + getOperator: () => getOperator, + initOptions: () => initOptions, + redact: () => redact, + useOperators: () => useOperators +}); +module.exports = __toCommonJS(core_exports); +var import_util = __webpack_require__(7839); +var ProcessingMode = /* @__PURE__ */ ((ProcessingMode2) => { + ProcessingMode2["CLONE_ALL"] = "CLONE_ALL"; + ProcessingMode2["CLONE_INPUT"] = "CLONE_INPUT"; + ProcessingMode2["CLONE_OUTPUT"] = "CLONE_OUTPUT"; + ProcessingMode2["CLONE_OFF"] = "CLONE_OFF"; + return ProcessingMode2; +})(ProcessingMode || {}); +class ComputeOptions { + #options; + /** Reference to the root object when processing subgraphs of the object. */ + #root; + #local; + constructor(options, root, local) { + this.#options = options; + this.update(root, local); + } + /** + * Initialize new ComputeOptions. + * + * @param options + * @param root + * @param local + * @returns {ComputeOptions} + */ + static init(options, root, local) { + return options instanceof ComputeOptions ? new ComputeOptions(options.#options, options.root ?? root, { + ...options.#local, + ...local, + // retain existing variables + variables: Object.assign( + {}, + options.#local?.variables, + local?.variables + ) + }) : new ComputeOptions(options, root, local); + } + /** + * Updates the internal state. + * + * @param root The new root context for this object. + * @param local The new local state to merge into current if it exists. + * @returns + */ + update(root, local) { + this.#root = root; + const variables = Object.assign( + {}, + this.#local?.variables, + local?.variables + ); + if (Object.keys(variables).length) { + this.#local = { ...local, variables }; } else { - cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2)); + this.#local = local ?? {}; + } + return this; + } + getOptions() { + return Object.freeze({ + ...this.#options, + context: Context.from(this.#options.context) + }); + } + get root() { + return this.#root; + } + get local() { + return this.#local; + } + get idKey() { + return this.#options.idKey; + } + get collation() { + return this.#options?.collation; + } + get processingMode() { + return this.#options?.processingMode || "CLONE_OFF" /* CLONE_OFF */; + } + get useStrictMode() { + return this.#options?.useStrictMode; + } + get scriptEnabled() { + return this.#options?.scriptEnabled; + } + get useGlobalContext() { + return this.#options?.useGlobalContext; + } + get hashFunction() { + return this.#options?.hashFunction; + } + get collectionResolver() { + return this.#options?.collectionResolver; + } + get jsonSchemaValidator() { + return this.#options?.jsonSchemaValidator; + } + get variables() { + return this.#options?.variables; + } + get context() { + return this.#options?.context; + } +} +function initOptions(options) { + return options instanceof ComputeOptions ? options.getOptions() : Object.freeze({ + idKey: "_id", + scriptEnabled: true, + useStrictMode: true, + useGlobalContext: true, + processingMode: "CLONE_OFF" /* CLONE_OFF */, + ...options, + context: options?.context ? Context.from(options?.context) : Context.init() + }); +} +var OperatorType = /* @__PURE__ */ ((OperatorType2) => { + OperatorType2["ACCUMULATOR"] = "accumulator"; + OperatorType2["EXPRESSION"] = "expression"; + OperatorType2["PIPELINE"] = "pipeline"; + OperatorType2["PROJECTION"] = "projection"; + OperatorType2["QUERY"] = "query"; + OperatorType2["WINDOW"] = "window"; + return OperatorType2; +})(OperatorType || {}); +class Context { + #operators = /* @__PURE__ */ new Map(); + constructor() { + } + static init() { + return new Context(); + } + static from(ctx) { + const instance = Context.init(); + if ((0, import_util.isNil)(ctx)) return instance; + ctx.#operators.forEach((v, k) => instance.addOperators(k, v)); + return instance; + } + addOperators(type, operators) { + if (!this.#operators.has(type)) this.#operators.set(type, {}); + for (const [name, fn] of Object.entries(operators)) { + if (!this.getOperator(type, name)) { + this.#operators.get(type)[name] = fn; + } } + return this; } - - for (i = 0; i < exclude.length; i++) { - cache[exclude.charCodeAt(i)] = exclude[i]; + getOperator(type, name) { + const ops = this.#operators.get(type) ?? {}; + return ops[name] ?? null; + } + addAccumulatorOps(ops) { + return this.addOperators("accumulator", ops); + } + addExpressionOps(ops) { + return this.addOperators("expression", ops); + } + addQueryOps(ops) { + return this.addOperators("query", ops); + } + addPipelineOps(ops) { + return this.addOperators("pipeline", ops); + } + addProjectionOps(ops) { + return this.addOperators("projection", ops); + } + addWindowOps(ops) { + return this.addOperators("window", ops); } - - return cache; } - - -// Encode unsafe characters with percent-encoding, skipping already -// encoded sequences. -// -// - string - string to encode -// - 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 = ''; - - if (typeof exclude !== 'string') { - // encode(string, keepEscaped) - keepEscaped = exclude; - exclude = encode.defaultChars; +const GLOBAL_CONTEXT = Context.init(); +function useOperators(type, operators) { + for (const [name, fn] of Object.entries(operators)) { + (0, import_util.assert)( + (0, import_util.isFunction)(fn) && (0, import_util.isOperator)(name), + `'${name}' is not a valid operator` + ); + const currentFn = getOperator(type, name, null); + (0, import_util.assert)( + !currentFn || fn === currentFn, + `${name} already exists for '${type}' operators. Cannot change operator function once registered.` + ); } - - if (typeof keepEscaped === 'undefined') { - keepEscaped = true; + switch (type) { + case "accumulator": + GLOBAL_CONTEXT.addAccumulatorOps(operators); + break; + case "expression": + GLOBAL_CONTEXT.addExpressionOps(operators); + break; + case "pipeline": + GLOBAL_CONTEXT.addPipelineOps(operators); + break; + case "projection": + GLOBAL_CONTEXT.addProjectionOps(operators); + break; + case "query": + GLOBAL_CONTEXT.addQueryOps(operators); + break; + case "window": + GLOBAL_CONTEXT.addWindowOps(operators); + break; } - - cache = getEncodeCache(exclude); - - for (i = 0, l = string.length; i < l; i++) { - 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; +} +function getOperator(type, name, options) { + const { context: ctx, useGlobalContext: fallback } = options || {}; + const fn = ctx ? ctx.getOperator(type, name) : null; + return !fn && fallback ? GLOBAL_CONTEXT.getOperator(type, name) : fn; +} +function computeValue(obj, expr, operator, options) { + const copts = ComputeOptions.init(options, obj); + return !!operator && (0, import_util.isOperator)(operator) ? computeOperator(obj, expr, operator, copts) : computeExpression(obj, expr, copts); +} +const SYSTEM_VARS = ["$$ROOT", "$$CURRENT", "$$REMOVE", "$$NOW"]; +function computeExpression(obj, expr, options) { + if ((0, import_util.isString)(expr) && expr.length > 0 && expr[0] === "$") { + if (REDACT_ACTIONS.includes(expr)) return expr; + let ctx = options.root; + const arr = expr.split("."); + if (SYSTEM_VARS.includes(arr[0])) { + switch (arr[0]) { + case "$$ROOT": + break; + case "$$CURRENT": + ctx = obj; + break; + case "$$REMOVE": + ctx = void 0; + break; + case "$$NOW": + ctx = /* @__PURE__ */ new Date(); + break; } + expr = expr.slice(arr[0].length + 1); + } else if (arr[0].slice(0, 2) === "$$") { + ctx = Object.assign( + {}, + // global vars + options.variables, + // current item is added before local variables because the binding may be changed. + { this: obj }, + // local vars + options?.local?.variables + ); + const name = arr[0].slice(2); + (0, import_util.assert)((0, import_util.has)(ctx, name), `Use of undefined variable: ${name}`); + expr = expr.slice(2); + } else { + expr = expr.slice(1); } - - if (code < 128) { - result += cache[code]; - continue; + return expr === "" ? ctx : (0, import_util.resolve)(ctx, expr); + } + if ((0, import_util.isArray)(expr)) { + return expr.map((item) => computeExpression(obj, item, options)); + } + if ((0, import_util.isObject)(expr)) { + const result = {}; + const elems = Object.entries(expr); + for (const [key, val] of elems) { + if ((0, import_util.isOperator)(key)) { + (0, import_util.assert)(elems.length == 1, "expression must have single operator."); + return computeOperator(obj, val, key, options); + } + result[key] = computeExpression(obj, val, options); } - - if (code >= 0xD800 && code <= 0xDFFF) { - if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) { - nextCode = string.charCodeAt(i + 1); - if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) { - result += encodeURIComponent(string[i] + string[i + 1]); - i++; - continue; + return result; + } + return expr; +} +function computeOperator(obj, expr, operator, options) { + const callExpression = getOperator( + "expression", + operator, + options + ); + if (callExpression) return callExpression(obj, expr, options); + const callAccumulator = getOperator( + "accumulator", + operator, + options + ); + (0, import_util.assert)(!!callAccumulator, `accumulator '${operator}' is not registered.`); + if (!(0, import_util.isArray)(obj)) { + obj = computeExpression(obj, expr, options); + expr = null; + } + (0, import_util.assert)((0, import_util.isArray)(obj), `arguments must resolve to array for ${operator}.`); + return callAccumulator( + obj, + expr, + options.update(null, options.local) + // reset the root object. + ); +} +const REDACT_ACTIONS = ["$$KEEP", "$$PRUNE", "$$DESCEND"]; +function redact(obj, expr, options) { + const action = computeValue(obj, expr, null, options); + switch (action) { + case "$$KEEP": + return obj; + case "$$PRUNE": + return void 0; + case "$$DESCEND": { + if (!(0, import_util.has)(expr, "$cond")) return obj; + const output = {}; + for (const [key, value] of Object.entries(obj)) { + if ((0, import_util.isArray)(value)) { + const res = new Array(); + for (let elem of value) { + if ((0, import_util.isObject)(elem)) { + elem = redact(elem, expr, options.update(elem)); + } + if (!(0, import_util.isNil)(elem)) res.push(elem); + } + output[key] = res; + } else if ((0, import_util.isObject)(value)) { + const res = redact( + value, + expr, + options.update(value) + ); + if (!(0, import_util.isNil)(res)) output[key] = res; + } else { + output[key] = value; } } - result += '%EF%BF%BD'; - continue; + return output; } - - result += encodeURIComponent(string[i]); + default: + return action; } - - return result; } - -encode.defaultChars = ";/?:@&=+$,-_.!~*'()#"; -encode.componentChars = "-_.!~*'()"; - - -module.exports = encode; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 2201: -/***/ ((module) => { - -"use strict"; - - - - -module.exports = function format(url) { - var result = ''; - - result += url.protocol || ''; - result += url.slashes ? '//' : ''; - result += url.auth ? url.auth + '@' : ''; +/***/ 4529: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - if (url.hostname && url.hostname.indexOf(':') !== -1) { - // ipv6 address - result += '[' + url.hostname + ']'; - } else { - result += url.hostname || ''; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } - - result += url.port ? ':' + url.port : ''; - result += url.pathname || ''; - result += url.search || ''; - result += url.hash || ''; - - return result; + return to; }; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var cursor_exports = {}; +__export(cursor_exports, { + Cursor: () => Cursor +}); +module.exports = __toCommonJS(cursor_exports); +var import_aggregator = __webpack_require__(6878); +var import_lazy = __webpack_require__(8625); +var import_util = __webpack_require__(7839); +class Cursor { + #source; + #predicate; + #projection; + #options; + #operators = []; + #result = null; + #buffer = []; + constructor(source, predicate, projection, options) { + this.#source = source; + this.#predicate = predicate; + this.#projection = projection; + this.#options = options; + } + /** Returns the iterator from running the query */ + fetch() { + if (this.#result) return this.#result; + if ((0, import_util.isObject)(this.#projection)) { + this.#operators.push({ $project: this.#projection }); + } + this.#result = (0, import_lazy.Lazy)(this.#source).filter(this.#predicate); + if (this.#operators.length > 0) { + this.#result = new import_aggregator.Aggregator(this.#operators, this.#options).stream( + this.#result + ); + } + return this.#result; + } + /** Returns an iterator with the buffered data included */ + fetchAll() { + const buffered = (0, import_lazy.Lazy)([...this.#buffer]); + this.#buffer = []; + return (0, import_lazy.concat)(buffered, this.fetch()); + } + /** + * Return remaining objects in the cursor as an array. This method exhausts the cursor + * @returns {Array} + */ + all() { + return this.fetchAll().value(); + } + /** + * Returns the number of objects return in the cursor. This method exhausts the cursor + * @returns {Number} + */ + count() { + return this.all().length; + } + /** + * Returns a cursor that begins returning results only after passing or skipping a number of documents. + * @param {Number} n the number of results to skip. + * @return {Cursor} Returns the cursor, so you can chain this call. + */ + skip(n) { + this.#operators.push({ $skip: n }); + return this; + } + /** + * Constrains the size of a cursor's result set. + * @param {Number} n the number of results to limit to. + * @return {Cursor} Returns the cursor, so you can chain this call. + */ + limit(n) { + this.#operators.push({ $limit: n }); + return this; + } + /** + * Returns results ordered according to a sort specification. + * @param {AnyObject} modifier an object of key and values specifying the sort order. 1 for ascending and -1 for descending + * @return {Cursor} Returns the cursor, so you can chain this call. + */ + sort(modifier) { + this.#operators.push({ $sort: modifier }); + return this; + } + /** + * Specifies the collation for the cursor returned by the `mingo.Query.find` + * @param {*} spec + */ + collation(spec) { + this.#options = { ...this.#options, collation: spec }; + return this; + } + /** + * Returns the next document in a cursor. + * @returns {AnyObject | Boolean} + */ + next() { + if (this.#buffer.length > 0) { + return this.#buffer.pop(); + } + const o = this.fetch().next(); + if (o.done) return; + return o.value; + } + /** + * Returns true if the cursor has documents and can be iterated. + * @returns {boolean} + */ + hasNext() { + if (this.#buffer.length > 0) return true; + const o = this.fetch().next(); + if (o.done) return false; + this.#buffer.push(o.value); + return true; + } + /** + * Applies a function to each document in a cursor and collects the return values in an array. + * @param fn + * @returns {Array} + */ + map(fn) { + return this.all().map(fn); + } + /** + * Applies a JavaScript function for every document in a cursor. + * @param fn + */ + forEach(fn) { + this.all().forEach(fn); + } + [Symbol.iterator]() { + return this.fetchAll(); + } +} +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8765: +/***/ 8543: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; - - - -module.exports.encode = __webpack_require__(729); -module.exports.decode = __webpack_require__(3122); -module.exports.format = __webpack_require__(2201); -module.exports.parse = __webpack_require__(9553); - - -/***/ }), - -/***/ 9553: -/***/ ((module) => { - -"use strict"; -// Copyright Joyent, Inc. and other Node contributors. -// -// 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. - - - -// -// Changes from joyent/node: -// -// 1. No leading slash in paths, -// e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/` -// -// 2. Backslashes are not replaced with slashes, -// so `http:\\example.org\` is treated like a relative path -// -// 3. Trailing colon is treated like a part of the path, -// i.e. in `http://example.org:foo` pathname is `:foo` -// -// 4. Nothing is URL-encoded in the resulting object, -// (in joyent/node some chars in auth and paths are encoded) -// -// 5. `url.parse()` does not have `parseQueryString` argument -// -// 6. Removed extraneous result properties: `host`, `path`, `query`, etc., -// which can be constructed using other parts of the url. -// - - -function Url() { - this.protocol = null; - this.slashes = null; - this.auth = null; - this.port = null; - this.hostname = null; - this.hash = null; - this.search = null; - this.pathname = null; -} - -// Reference: RFC 3986, RFC 1808, RFC 2396 - -// 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(); - u.parse(url, slashesDenoteHost); - return u; -} - -Url.prototype.parse = function(url, slashesDenoteHost) { - var i, l, lowerProto, hec, slashes, - rest = url; - - // trim before proceeding. - // This is to support parse stuff like " http://foo.com \n" - rest = rest.trim(); - - if (!slashesDenoteHost && url.split('#').length === 1) { - // Try fast path regexp - var simplePath = simplePathPattern.exec(rest); - if (simplePath) { - this.pathname = simplePath[1]; - if (simplePath[2]) { - this.search = simplePath[2]; - } - return this; - } +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var src_exports = {}; +__export(src_exports, { + Aggregator: () => import_aggregator2.Aggregator, + Query: () => import_query2.Query, + aggregate: () => aggregate, + createUpdater: () => import_updater2.createUpdater, + default: () => src_default, + find: () => find, + remove: () => remove, + update: () => import_updater2.update +}); +module.exports = __toCommonJS(src_exports); +var import_basic = __webpack_require__(5864); +var import_aggregator = __webpack_require__(6878); +var import_query = __webpack_require__(6535); +var import_updater = __webpack_require__(3550); +var import_aggregator2 = __webpack_require__(6878); +var import_query2 = __webpack_require__(6535); +var import_updater2 = __webpack_require__(3550); +function find(collection, criteria, projection, options) { + return new import_query.Query(criteria, options).find(collection, projection); +} +function remove(collection, criteria, options) { + return new import_query.Query(criteria, options).remove(collection); +} +function aggregate(collection, pipeline, options) { + return new import_aggregator.Aggregator(pipeline, options).run(collection); +} +var src_default = { + Aggregator: import_aggregator.Aggregator, + Query: import_query.Query, + aggregate, + createUpdater: import_updater.createUpdater, + find, + remove, + update: import_updater.update +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); - var proto = protocolPattern.exec(rest); - if (proto) { - proto = proto[0]; - lowerProto = proto.toLowerCase(); - this.protocol = proto; - rest = rest.substr(proto.length); - } - // figure out if it's got a host - // 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. - if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) { - slashes = rest.substr(0, 2) === '//'; - if (slashes && !(proto && hostlessProtocol[proto])) { - rest = rest.substr(2); - this.slashes = true; - } +/***/ }), + +/***/ 5864: +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var import_core = __webpack_require__(2760); +var booleanOperators = __toESM(__webpack_require__(1703)); +var comparisonOperators = __toESM(__webpack_require__(3336)); +var import_pipeline = __webpack_require__(6936); +var projectionOperators = __toESM(__webpack_require__(4487)); +var queryOperators = __toESM(__webpack_require__(8510)); +(0, import_core.useOperators)("expression", { + ...booleanOperators, + ...comparisonOperators +}); +(0, import_core.useOperators)("pipeline", { + $project: import_pipeline.$project, + $skip: import_pipeline.$skip, + $limit: import_pipeline.$limit, + $sort: import_pipeline.$sort +}); +(0, import_core.useOperators)("projection", projectionOperators); +(0, import_core.useOperators)("query", queryOperators); - if (!hostlessProtocol[proto] && - (slashes || (proto && !slashedProtocol[proto]))) { - // there's a hostname. - // the first instance of /, ?, ;, or # ends the host. - // - // If there is an @ in the hostname, then non-host chars *are* allowed - // to the left of the last @ sign, unless some host-ending character - // comes *before* the @-sign. - // URLs are obnoxious. - // - // ex: - // http://a@b@c/ => user:a@b host:c - // http://a@b?@c => user:a host:c path:/?@c +/***/ }), - // v0.12 TODO(isaacs): This is not quite how Chrome does things. - // Review our test case against browsers more comprehensively. +/***/ 8625: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - // find the first instance of any hostEndingChars - var hostEnd = -1; - for (i = 0; i < hostEndingChars.length; i++) { - hec = rest.indexOf(hostEndingChars[i]); - if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) { - hostEnd = hec; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var lazy_exports = {}; +__export(lazy_exports, { + Iterator: () => Iterator, + Lazy: () => Lazy, + concat: () => concat +}); +module.exports = __toCommonJS(lazy_exports); +var import_util = __webpack_require__(7839); +function Lazy(source) { + return source instanceof Iterator ? source : new Iterator(source); +} +function concat(...iterators) { + let index = 0; + return Lazy(() => { + while (index < iterators.length) { + const o = iterators[index].next(); + if (!o.done) return o; + index++; + } + return { done: true }; + }); +} +function isGenerator(o) { + return !!o && typeof o === "object" && o?.next instanceof Function; +} +function dropItem(array, i) { + const rest = array.slice(i + 1); + array.splice(i); + Array.prototype.push.apply(array, rest); +} +const DONE = new Error(); +var Action = /* @__PURE__ */ ((Action2) => { + Action2[Action2["MAP"] = 0] = "MAP"; + Action2[Action2["FILTER"] = 1] = "FILTER"; + Action2[Action2["TAKE"] = 2] = "TAKE"; + Action2[Action2["DROP"] = 3] = "DROP"; + return Action2; +})(Action || {}); +function createCallback(nextFn, iteratees, buffer) { + let done = false; + let index = -1; + let bufferIndex = 0; + return function(storeResult) { + try { + outer: while (!done) { + let o = nextFn(); + index++; + let i = -1; + const size = iteratees.length; + let innerDone = false; + while (++i < size) { + const r = iteratees[i]; + switch (r.action) { + case 0 /* MAP */: + o = r.func(o, index); + break; + case 1 /* FILTER */: + if (!r.func(o, index)) continue outer; + break; + case 2 /* TAKE */: + --r.count; + if (!r.count) innerDone = true; + break; + case 3 /* DROP */: + --r.count; + if (!r.count) dropItem(iteratees, i); + continue outer; + default: + break outer; + } + } + done = innerDone; + if (storeResult) { + buffer[bufferIndex++] = o; + } else { + return { value: o, done: false }; + } } + } catch (e) { + if (e !== DONE) throw e; } - - // 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; - if (hostEnd === -1) { - // atSign can be anywhere. - atSign = rest.lastIndexOf('@'); - } else { - // atSign must be in auth portion. - // http://a@b/c@d => host:b auth:a path:/c@d - atSign = rest.lastIndexOf('@', hostEnd); + done = true; + return { done }; + }; +} +class Iterator { + /** + * @param {*} source An iterable object or function. + * Array - return one element per cycle + * Object{next:Function} - call next() for the next value (this also handles generator functions) + * Function - call to return the next value + * @param {Function} fn An optional transformation function + */ + constructor(source) { + this.#iteratees = []; + this.#yieldedValues = []; + this.isDone = false; + let nextVal; + if (source instanceof Function) { + source = { next: source }; + } + if (isGenerator(source)) { + const src = source; + nextVal = () => { + const o = src.next(); + if (o.done) throw DONE; + return o.value; + }; + } else if ((0, import_util.isArray)(source)) { + const data = source; + const size = data.length; + let index = 0; + nextVal = () => { + if (index < size) return data[index++]; + throw DONE; + }; + } else if (!(source instanceof Function)) { + throw new import_util.MingoError( + `Lazy must be initialized with an array, generator, or function.` + ); } - - // Now we have a portion which is definitely the auth. - // Pull that off. - if (atSign !== -1) { - auth = rest.slice(0, atSign); - rest = rest.slice(atSign + 1); - this.auth = auth; + this.#getNext = createCallback( + nextVal, + this.#iteratees, + this.#yieldedValues + ); + } + #iteratees; + #yieldedValues; + #getNext; + /** + * Add an iteratee to this lazy sequence + */ + push(action, value) { + if (typeof value === "function") { + this.#iteratees.push({ action, func: value }); + } else if (typeof value === "number") { + this.#iteratees.push({ action, count: value }); } - - // the host is the remaining to the left of the first non-host char - hostEnd = -1; - for (i = 0; i < nonHostChars.length; i++) { - hec = rest.indexOf(nonHostChars[i]); - if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) { - hostEnd = hec; + return this; + } + next() { + return this.#getNext(); + } + // Iteratees methods + /** + * Transform each item in the sequence to a new value + * @param {Function} f + */ + map(f) { + return this.push(0 /* MAP */, f); + } + /** + * Select only items matching the given predicate + * @param {Function} pred + */ + filter(predicate) { + return this.push(1 /* FILTER */, predicate); + } + /** + * Take given numbe for values from sequence + * @param {Number} n A number greater than 0 + */ + take(n) { + return n > 0 ? this.push(2 /* TAKE */, n) : this; + } + /** + * Drop a number of values from the sequence + * @param {Number} n Number of items to drop greater than 0 + */ + drop(n) { + return n > 0 ? this.push(3 /* DROP */, n) : this; + } + // Transformations + /** + * Returns a new lazy object with results of the transformation + * The entire sequence is realized. + * + * @param {Callback} fn Tranform function of type (Array) => (Any) + */ + transform(fn) { + const self = this; + let iter; + return Lazy(() => { + if (!iter) { + iter = Lazy(fn(self.value())); } + return iter.next(); + }); + } + // Terminal methods + /** + * Returns the fully realized values of the iterators. + * The return value will be an array unless `lazy.first()` was used. + * The realized values are cached for subsequent calls. + */ + value() { + if (!this.isDone) { + this.isDone = this.#getNext(true).done; } - // if we still have not hit it, then the entire thing is a host. - if (hostEnd === -1) { - hostEnd = rest.length; + return this.#yieldedValues; + } + /** + * Execute the funcion for each value. Will stop when an execution returns false. + * @param {Function} f + * @returns {Boolean} false iff `f` return false for AnyVal execution, otherwise true + */ + each(f) { + for (; ; ) { + const o = this.next(); + if (o.done) break; + if (f(o.value) === false) return false; } + return true; + } + /** + * Returns the reduction of sequence according the reducing function + * + * @param {*} f a reducing function + * @param {*} initialValue + */ + reduce(f, initialValue) { + let o = this.next(); + if (initialValue === void 0 && !o.done) { + initialValue = o.value; + o = this.next(); + } + while (!o.done) { + initialValue = f(initialValue, o.value); + o = this.next(); + } + return initialValue; + } + /** + * Returns the number of matched items in the sequence + */ + size() { + return this.reduce( + (acc, _) => ++acc, + 0 + ); + } + [Symbol.iterator]() { + return this; + } +} +// Annotate the CommonJS export names for ESM import in node: +0 && (0); - if (rest[hostEnd - 1] === ':') { hostEnd--; } - var host = rest.slice(0, hostEnd); - rest = rest.slice(hostEnd); - - // pull out port. - this.parseHost(host); - // we've indicated that there is a hostname, - // so even if it's empty, it has to be present. - this.hostname = this.hostname || ''; +/***/ }), - // if hostname begins with [ and ends with ] - // assume that it's an IPv6 address. - var ipv6Hostname = this.hostname[0] === '[' && - this.hostname[this.hostname.length - 1] === ']'; +/***/ 4330: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - // 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; } - if (!part.match(hostnamePartPattern)) { - var newpart = ''; - for (var 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 - // broken by replacing non-ASCII by nothing - newpart += 'x'; - } else { - newpart += part[j]; - } - } - // 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); - if (bit) { - validParts.push(bit[1]); - notHost.unshift(bit[2]); - } - if (notHost.length) { - rest = notHost.join('.') + rest; - } - this.hostname = validParts.join('.'); - break; - } - } +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var predicates_exports = {}; +__export(predicates_exports, { + $all: () => $all, + $elemMatch: () => $elemMatch, + $eq: () => $eq, + $exists: () => $exists, + $gt: () => $gt, + $gte: () => $gte, + $in: () => $in, + $lt: () => $lt, + $lte: () => $lte, + $mod: () => $mod, + $ne: () => $ne, + $nin: () => $nin, + $regex: () => $regex, + $size: () => $size, + $type: () => $type, + createExpressionOperator: () => createExpressionOperator, + createQueryOperator: () => createQueryOperator +}); +module.exports = __toCommonJS(predicates_exports); +var import_core = __webpack_require__(2760); +var import_query = __webpack_require__(6535); +var import_util = __webpack_require__(7839); +function createQueryOperator(predicate) { + const f = (selector, value, options) => { + const opts = { unwrapArray: true }; + const depth = Math.max(1, selector.split(".").length - 1); + return (obj) => { + const lhs = (0, import_util.resolve)(obj, selector, opts); + return predicate(lhs, value, { ...options, depth }); + }; + }; + f.op = "query"; + return f; +} +function createExpressionOperator(predicate) { + return (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + return predicate(...args); + }; +} +function $eq(a, b, options) { + if ((0, import_util.isEqual)(a, b)) return true; + if ((0, import_util.isNil)(a) && (0, import_util.isNil)(b)) return true; + if ((0, import_util.isArray)(a)) { + return a.some((v) => (0, import_util.isEqual)(v, b)) || (0, import_util.flatten)(a, options?.depth).some((v) => (0, import_util.isEqual)(v, b)); + } + return false; +} +function $ne(a, b, options) { + return !$eq(a, b, options); +} +function $in(a, b, options) { + if ((0, import_util.isNil)(a)) return b.some((v) => v === null); + return (0, import_util.intersection)([(0, import_util.ensureArray)(a), b], options?.hashFunction).length > 0; +} +function $nin(a, b, options) { + return !$in(a, b, options); +} +function $lt(a, b, _options) { + return compare(a, b, (x, y) => (0, import_util.compare)(x, y) < 0); +} +function $lte(a, b, _options) { + return compare(a, b, (x, y) => (0, import_util.compare)(x, y) <= 0); +} +function $gt(a, b, _options) { + return compare(a, b, (x, y) => (0, import_util.compare)(x, y) > 0); +} +function $gte(a, b, _options) { + return compare(a, b, (x, y) => (0, import_util.compare)(x, y) >= 0); +} +function $mod(a, b, _options) { + return (0, import_util.ensureArray)(a).some( + (x) => b.length === 2 && x % b[0] === b[1] + ); +} +function $regex(a, b, options) { + const lhs = (0, import_util.ensureArray)(a); + const match = (x) => (0, import_util.isString)(x) && (0, import_util.truthy)(b.exec(x), options?.useStrictMode); + return lhs.some(match) || (0, import_util.flatten)(lhs, 1).some(match); +} +function $exists(a, b, _options) { + return (b === false || b === 0) && a === void 0 || (b === true || b === 1) && a !== void 0; +} +function $all(values, queries, options) { + if (!(0, import_util.isArray)(values) || !(0, import_util.isArray)(queries) || !values.length || !queries.length) { + return false; + } + let matched = true; + for (const query of queries) { + if (!matched) break; + if ((0, import_util.isObject)(query) && Object.keys(query).includes("$elemMatch")) { + matched = $elemMatch(values, query["$elemMatch"], options); + } else if ((0, import_util.isRegExp)(query)) { + matched = values.some((s) => typeof s === "string" && query.test(s)); + } else { + matched = values.some((v) => (0, import_util.isEqual)(query, v)); + } + } + return matched; +} +function $size(a, b, _options) { + return Array.isArray(a) && a.length === b; +} +function isNonBooleanOperator(name) { + return (0, import_util.isOperator)(name) && ["$and", "$or", "$nor"].indexOf(name) === -1; +} +function $elemMatch(a, b, options) { + if ((0, import_util.isArray)(a) && !(0, import_util.isEmpty)(a)) { + let format = (x) => x; + let criteria = b; + if (Object.keys(b).every(isNonBooleanOperator)) { + criteria = { temp: b }; + format = (x) => ({ temp: x }); + } + const query = new import_query.Query(criteria, options); + for (let i = 0, len = a.length; i < len; i++) { + if (query.test(format(a[i]))) { + return true; } } + } + return false; +} +const isNull = (a) => a === null; +const compareFuncs = { + array: import_util.isArray, + boolean: import_util.isBoolean, + date: import_util.isDate, + number: import_util.isNumber, + null: isNull, + object: import_util.isObject, + regex: import_util.isRegExp, + string: import_util.isString, + // added for completeness + undefined: import_util.isNil, + // deprecated + function: (_) => { + throw new import_util.MingoError("unsupported type key `function`."); + }, + // Mongo identifiers + 1: import_util.isNumber, + //double + 2: import_util.isString, + 3: import_util.isObject, + 4: import_util.isArray, + 6: import_util.isNil, + // deprecated + 8: import_util.isBoolean, + 9: import_util.isDate, + 10: isNull, + 11: import_util.isRegExp, + 16: import_util.isNumber, + 18: import_util.isNumber, + 19: import_util.isNumber + //decimal +}; +function compareType(a, b, _) { + const f = compareFuncs[b]; + return f ? f(a) : false; +} +function $type(a, b, options) { + return (0, import_util.isArray)(b) ? b.findIndex((t) => compareType(a, t, options)) >= 0 : compareType(a, b, options); +} +function compare(a, b, f) { + return (0, import_util.ensureArray)(a).some((x) => (0, import_util.typeOf)(x) === (0, import_util.typeOf)(b) && f(x, b)); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (0); - if (this.hostname.length > hostnameMaxLen) { - this.hostname = ''; - } - // strip [ and ] from the hostname - // the host field still retains them, though - if (ipv6Hostname) { - this.hostname = this.hostname.substr(1, this.hostname.length - 2); - } - } +/***/ }), + +/***/ 1424: +/***/ ((module) => { - // chop off from the tail first. - var hash = rest.indexOf('#'); - if (hash !== -1) { - // got a fragment string. - this.hash = rest.substr(hash); - rest = rest.slice(0, hash); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } - var qm = rest.indexOf('?'); - if (qm !== -1) { - this.search = rest.substr(qm); - rest = rest.slice(0, qm); + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var internal_exports = {}; +__export(internal_exports, { + covariance: () => covariance, + stddev: () => stddev +}); +module.exports = __toCommonJS(internal_exports); +function stddev(data, sampled = true) { + const sum = data.reduce((acc, n) => acc + n, 0); + const N = data.length || 1; + const avg = sum / N; + return Math.sqrt( + data.reduce((acc, n) => acc + Math.pow(n - avg, 2), 0) / (N - Number(sampled)) + ); +} +function covariance(dataset, sampled = true) { + if (!dataset) return null; + if (dataset.length < 2) return sampled ? null : 0; + let meanX = 0; + let meanY = 0; + for (const [x, y] of dataset) { + meanX += x; + meanY += y; } - if (rest) { this.pathname = rest; } - if (slashedProtocol[lowerProto] && - this.hostname && !this.pathname) { - this.pathname = ''; + meanX /= dataset.length; + meanY /= dataset.length; + let result = 0; + for (const [x, y] of dataset) { + result += (x - meanX) * (y - meanY); } + return result / (dataset.length - Number(sampled)); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (0); - return this; + +/***/ }), + +/***/ 4426: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var accumulator_exports = {}; +__export(accumulator_exports, { + $accumulator: () => $accumulator +}); +module.exports = __toCommonJS(accumulator_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $accumulator = (collection, expr, options) => { + (0, import_util.assert)( + !!options && options.scriptEnabled, + "$accumulator operator requires 'scriptEnabled' option to be true" + ); + if (collection.length == 0) return expr.initArgs; + const copts = import_core.ComputeOptions.init(options); + const initArgs = (0, import_core.computeValue)( + {}, + expr.initArgs || [], + null, + copts.update(copts?.local?.groupId || {}) + ); + let state = expr.init.call(null, ...initArgs); + for (const doc of collection) { + const args = (0, import_core.computeValue)( + doc, + expr.accumulateArgs, + null, + copts.update(doc) + ); + state = expr.accumulate.call(null, ...[state, ...args]); + } + return expr.finalize ? expr.finalize.call(null, state) : state; }; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); -Url.prototype.parseHost = function(host) { - var port = portPattern.exec(host); - if (port) { - port = port[0]; - if (port !== ':') { - this.port = port.substr(1); - } - host = host.substr(0, host.length - port.length); + +/***/ }), + +/***/ 320: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } - if (host) { this.hostname = host; } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var addToSet_exports = {}; +__export(addToSet_exports, { + $addToSet: () => $addToSet +}); +module.exports = __toCommonJS(addToSet_exports); +var import_util = __webpack_require__(7839); +var import_push = __webpack_require__(4518); +const $addToSet = (collection, expr, options) => { + return (0, import_util.unique)( + (0, import_push.$push)(collection, expr, options), + options?.hashFunction + ); }; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); + -module.exports = urlParse; +/***/ }), + +/***/ 9000: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var avg_exports = {}; +__export(avg_exports, { + $avg: () => $avg +}); +module.exports = __toCommonJS(avg_exports); +var import_util = __webpack_require__(7839); +var import_push = __webpack_require__(4518); +const $avg = (collection, expr, options) => { + const data = (0, import_push.$push)(collection, expr, options).filter(import_util.isNumber); + const sum = data.reduce((acc, n) => acc + n, 0); + return sum / (data.length || 1); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 7268: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +/***/ 5045: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var bottom_exports = {}; +__export(bottom_exports, { + $bottom: () => $bottom +}); +module.exports = __toCommonJS(bottom_exports); +var import_bottomN = __webpack_require__(4683); +const $bottom = (collection, expr, options) => (0, import_bottomN.$bottomN)(collection, { ...expr, n: 1 }, options); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.Aggregator = void 0; -const core_1 = __webpack_require__(9587); -const lazy_1 = __webpack_require__(9176); -const util_1 = __webpack_require__(7216); -/** - * Provides functionality for the mongoDB aggregation pipeline - * - * @param pipeline an Array of pipeline operators - * @param options An optional Options to pass the aggregator - * @constructor - */ -class Aggregator { - constructor(pipeline, options) { - this.pipeline = pipeline; - this.options = (0, core_1.initOptions)(options); - } - /** - * Returns an `Lazy` iterator for processing results of pipeline - * - * @param {*} collection An array or iterator object - * @returns {Iterator} an iterator object - */ - stream(collection) { - let iterator = (0, lazy_1.Lazy)(collection); - const mode = this.options.processingMode; - if (mode == core_1.ProcessingMode.CLONE_ALL || - mode == core_1.ProcessingMode.CLONE_INPUT) { - iterator.map(util_1.cloneDeep); - } - const pipelineOperators = new Array(); - if (!(0, util_1.isEmpty)(this.pipeline)) { - // run aggregation pipeline - for (const operator of this.pipeline) { - const operatorKeys = Object.keys(operator); - const opName = operatorKeys[0]; - const call = (0, core_1.getOperator)(core_1.OperatorType.PIPELINE, opName, this.options); - (0, util_1.assert)(operatorKeys.length === 1 && !!call, `invalid pipeline operator ${opName}`); - pipelineOperators.push(opName); - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - iterator = call(iterator, operator[opName], this.options); - } - } - // operators that may share object graphs of inputs. - // we only need to clone the output for these since the objects will already be distinct for other operators. - if (mode == core_1.ProcessingMode.CLONE_OUTPUT || - (mode == core_1.ProcessingMode.CLONE_ALL && - !!(0, util_1.intersection)([["$group", "$unwind"], pipelineOperators]).length)) { - iterator.map(util_1.cloneDeep); - } - return iterator; - } - /** - * Return the results of the aggregation as an array. - * - * @param {*} collection - * @param {*} query - */ - run(collection) { - return this.stream(collection).value(); - } -} -exports.Aggregator = Aggregator; + +/***/ }), + +/***/ 4683: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var bottomN_exports = {}; +__export(bottomN_exports, { + $bottomN: () => $bottomN +}); +module.exports = __toCommonJS(bottomN_exports); +var import_aggregator = __webpack_require__(6878); +var import_core = __webpack_require__(2760); +var import_push = __webpack_require__(4518); +const $bottomN = (collection, expr, options) => { + const copts = import_core.ComputeOptions.init(options); + const { n, sortBy } = (0, import_core.computeValue)( + copts.local.groupId, + expr, + null, + copts + ); + const result = new import_aggregator.Aggregator([{ $sort: sortBy }], copts).run(collection); + const m = result.length; + const p = n; + return (0, import_push.$push)(m <= p ? result : result.slice(m - p), expr.output, copts); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 9587: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +/***/ 6995: +/***/ ((module) => { -"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var count_exports = {}; +__export(count_exports, { + $count: () => $count +}); +module.exports = __toCommonJS(count_exports); +const $count = (collection, _expr, _options) => collection.length; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.redact = exports.computeValue = exports.getOperator = exports.useOperators = exports.Context = exports.OperatorType = exports.initOptions = exports.ComputeOptions = exports.ProcessingMode = void 0; -const util_1 = __webpack_require__(7216); -/** - * This controls how input and output documents are processed to meet different application needs. - * Each mode has different trade offs for; immutability, reference sharing, and performance. - */ -var ProcessingMode; -(function (ProcessingMode) { - /** - * Clone inputs prior to processing, and the outputs if some objects graphs may be shared. - * Use this option to keep input collection immutable and to get distinct output objects. - * - * Note: This option is expensive and reduces performance. - */ - ProcessingMode["CLONE_ALL"] = "CLONE_ALL"; - /** - * Clones inputs prior to processing. - * This option will return output objects with shared graphs in their path if specific operators are used. - * Use this option to keep the input collection immutable. - * - */ - ProcessingMode["CLONE_INPUT"] = "CLONE_INPUT"; - /** - * Clones the output to return distinct objects with no shared paths. - * This option modifies the input collection and during processing. - */ - ProcessingMode["CLONE_OUTPUT"] = "CLONE_OUTPUT"; - /** - * Turn off cloning and modifies the input collection as needed. - * This option will also return output objects with shared paths in their graph when specific operators are used. - * This option provides the greatest speedup for the biggest tradeoff. - * When using the aggregation pipeline, you can use the "$out" operator to collect immutable intermediate results. - * - * @default - */ - ProcessingMode["CLONE_OFF"] = "CLONE_OFF"; -})(ProcessingMode = exports.ProcessingMode || (exports.ProcessingMode = {})); -/** Custom type to facilitate type checking for global options */ -class ComputeOptions { - constructor(_opts, - /** Reference to the root object when processing subgraphs of the object. */ - _root, _local, - /** The current time in milliseconds. Remains the same throughout all stages of the aggregation pipeline. */ - timestamp = Date.now()) { - this._opts = _opts; - this._root = _root; - this._local = _local; - this.timestamp = timestamp; - this.update(_root, _local); - } - /** - * Initialize new ComputeOptions. - * - * @param options - * @param root - * @param local - * @returns {ComputeOptions} - */ - static init(options, root, local) { - return options instanceof ComputeOptions - ? new ComputeOptions(options._opts, (0, util_1.isNil)(options.root) ? root : options.root, Object.assign({}, options.local, local)) - : new ComputeOptions(options, root, local); - } - /** Updates the internal mutable state. */ - update(root, local) { - var _a; - // NOTE: this is done for efficiency to avoid creating too many intermediate options objects. - this._root = root; - this._local = local - ? Object.assign({}, local, { - variables: Object.assign({}, (_a = this._local) === null || _a === void 0 ? void 0 : _a.variables, local === null || local === void 0 ? void 0 : local.variables) - }) - : local; - return this; - } - getOptions() { - return Object.freeze(Object.assign(Object.assign({}, this._opts), { context: Context.from(this._opts.context) })); - } - get root() { - return this._root; - } - get local() { - return this._local; - } - get idKey() { - return this._opts.idKey; - } - get collation() { - var _a; - return (_a = this._opts) === null || _a === void 0 ? void 0 : _a.collation; - } - get processingMode() { - var _a; - return ((_a = this._opts) === null || _a === void 0 ? void 0 : _a.processingMode) || ProcessingMode.CLONE_OFF; - } - get useStrictMode() { - var _a; - return (_a = this._opts) === null || _a === void 0 ? void 0 : _a.useStrictMode; - } - get scriptEnabled() { - var _a; - return (_a = this._opts) === null || _a === void 0 ? void 0 : _a.scriptEnabled; - } - get useGlobalContext() { - var _a; - return (_a = this._opts) === null || _a === void 0 ? void 0 : _a.useGlobalContext; - } - get hashFunction() { - var _a; - return (_a = this._opts) === null || _a === void 0 ? void 0 : _a.hashFunction; - } - get collectionResolver() { - var _a; - return (_a = this._opts) === null || _a === void 0 ? void 0 : _a.collectionResolver; - } - get jsonSchemaValidator() { - var _a; - return (_a = this._opts) === null || _a === void 0 ? void 0 : _a.jsonSchemaValidator; - } - get variables() { - var _a; - return (_a = this._opts) === null || _a === void 0 ? void 0 : _a.variables; - } - get context() { - var _a; - return (_a = this._opts) === null || _a === void 0 ? void 0 : _a.context; - } -} -exports.ComputeOptions = ComputeOptions; -/** - * Creates an Option from another where required keys are initialized. - * @param options Options - */ -function initOptions(options) { - return options instanceof ComputeOptions - ? options.getOptions() - : Object.freeze(Object.assign(Object.assign({ idKey: "_id", scriptEnabled: true, useStrictMode: true, useGlobalContext: true, processingMode: ProcessingMode.CLONE_OFF }, options), { context: (options === null || options === void 0 ? void 0 : options.context) - ? Context.from(options === null || options === void 0 ? void 0 : options.context) - : Context.init({}) })); -} -exports.initOptions = initOptions; -/** - * The different groups of operators - */ -var OperatorType; -(function (OperatorType) { - OperatorType["ACCUMULATOR"] = "accumulator"; - OperatorType["EXPRESSION"] = "expression"; - OperatorType["PIPELINE"] = "pipeline"; - OperatorType["PROJECTION"] = "projection"; - OperatorType["QUERY"] = "query"; - OperatorType["WINDOW"] = "window"; -})(OperatorType = exports.OperatorType || (exports.OperatorType = {})); -class Context { - constructor(ops) { - this.operators = (0, util_1.cloneDeep)(ops); - } - static init(ops) { - return new Context((0, util_1.merge)({ - [OperatorType.ACCUMULATOR]: {}, - [OperatorType.EXPRESSION]: {}, - [OperatorType.PIPELINE]: {}, - [OperatorType.PROJECTION]: {}, - [OperatorType.QUERY]: {}, - [OperatorType.WINDOW]: {} - }, ops, { skipValidation: true })); - } - static from(ctx) { - return new Context(ctx.operators); - } - addOperators(type, ops) { - for (const [name, fn] of Object.entries(ops)) { - if (!this.getOperator(type, name)) { - this.operators[type][name] = fn; - } - } - return this; - } - // register - addAccumulatorOps(ops) { - return this.addOperators(OperatorType.ACCUMULATOR, ops); - } - addExpressionOps(ops) { - return this.addOperators(OperatorType.EXPRESSION, ops); - } - addQueryOps(ops) { - return this.addOperators(OperatorType.QUERY, ops); - } - addPipelineOps(ops) { - return this.addOperators(OperatorType.PIPELINE, ops); - } - addProjectionOps(ops) { - return this.addOperators(OperatorType.PROJECTION, ops); - } - addWindowOps(ops) { - return this.addOperators(OperatorType.WINDOW, ops); - } - // getters - getOperator(type, name) { - return type in this.operators ? this.operators[type][name] || null : null; - } -} -exports.Context = Context; -// operator definitions -const CONTEXT = Context.init({}); -/** - * Register fully specified operators for the given operator class. - * - * @param type The operator type - * @param operators Map of the operators - */ -function useOperators(type, operators) { - for (const [name, fn] of Object.entries(operators)) { - (0, util_1.assert)((0, util_1.isFunction)(fn) && (0, util_1.isOperator)(name), `'${name}' is not a valid operator`); - const currentFn = getOperator(type, name, null); - (0, util_1.assert)(!currentFn || fn === currentFn, `${name} already exists for '${type}' operators. Cannot change operator function once registered.`); - } - // toss the operator salad :) - CONTEXT.addOperators(type, operators); -} -exports.useOperators = useOperators; -/** - * Returns the operator function or undefined if it is not found - * @param type Type of operator - * @param operator Name of the operator - */ -function getOperator(type, operator, options) { - const { context: ctx, useGlobalContext: fallback } = options || {}; - const fn = ctx ? ctx.getOperator(type, operator) : null; - return !fn && fallback ? CONTEXT.getOperator(type, operator) : fn; -} -exports.getOperator = getOperator; -/* eslint-disable unused-imports/no-unused-vars-ts */ -/** - * Implementation of system variables - * @type {Object} - */ -const systemVariables = { - $$ROOT(obj, expr, options) { - return options.root; - }, - $$CURRENT(obj, expr, options) { - return obj; - }, - $$REMOVE(obj, expr, options) { - return undefined; - }, - $$NOW(obj, expr, options) { - return new Date(options.timestamp); - } + +/***/ }), + +/***/ 3516: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -/** - * Implementation of $redact variables - * - * Each function accepts 3 arguments (obj, expr, options) - * - * @type {Object} - */ -const redactVariables = { - $$KEEP(obj, expr, options) { - return obj; - }, - $$PRUNE(obj, expr, options) { - return undefined; - }, - $$DESCEND(obj, expr, options) { - // traverse nested documents iff there is a $cond - if (!(0, util_1.has)(expr, "$cond")) - return obj; - let result; - for (const [key, current] of Object.entries(obj)) { - if ((0, util_1.isObjectLike)(current)) { - if (current instanceof Array) { - const array = []; - for (let elem of current) { - if ((0, util_1.isObject)(elem)) { - elem = redact(elem, expr, options.update(elem)); - } - if (!(0, util_1.isNil)(elem)) { - array.push(elem); - } - } - result = array; - } - else { - result = redact(current, expr, options.update(current)); - } - if ((0, util_1.isNil)(result)) { - delete obj[key]; // pruned result - } - else { - obj[key] = result; - } - } - } - return obj; - } +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -/* eslint-enable unused-imports/no-unused-vars-ts */ -/** - * Computes the value of the expression on the object for the given operator - * - * @param obj the current object from the collection - * @param expr the expression for the given field - * @param operator the operator to resolve the field with - * @param options {Object} extra options - * @returns {*} - */ -function computeValue(obj, expr, operator, options) { - var _a; - // ensure valid options exist on first invocation - const copts = ComputeOptions.init(options, obj); - operator = operator || ""; - if ((0, util_1.isOperator)(operator)) { - // if the field of the object is a valid operator - const callExpression = getOperator(OperatorType.EXPRESSION, operator, options); - if (callExpression) - return callExpression(obj, expr, copts); - // we also handle $group accumulator operators - const callAccumulator = getOperator(OperatorType.ACCUMULATOR, operator, options); - if (callAccumulator) { - // if object is not an array, first try to compute using the expression - if (!(obj instanceof Array)) { - obj = computeValue(obj, expr, null, copts); - expr = null; - } - // validate that we have an array - (0, util_1.assert)(obj instanceof Array, `'${operator}' target must be an array.`); - // for accumulators, we use the global options since the root is specific to each element within array. - return callAccumulator(obj, expr, - // reset the root object for accumulators. - copts.update(null, copts.local)); - } - // operator was not found - throw new Error(`operator '${operator}' is not registered`); - } - // if expr is a string and begins with "$$", then we have a variable. - // this can be one of; redact variable, system variable, user-defined variable. - // we check and process them in that order. - // - // if expr begins only a single "$", then it is a path to a field on the object. - if ((0, util_1.isString)(expr) && expr.length > 0 && expr[0] === "$") { - // we return redact variables as literals - if ((0, util_1.has)(redactVariables, expr)) { - return expr; - } - // default to root for resolving path. - let context = copts.root; - // handle selectors with explicit prefix - const arr = expr.split("."); - if ((0, util_1.has)(systemVariables, arr[0])) { - // set 'root' only the first time it is required to be used for all subsequent calls - // if it already available on the options, it will be used - context = systemVariables[arr[0]](obj, null, copts); - expr = expr.slice(arr[0].length + 1); // +1 for '.' - } - else if (arr[0].slice(0, 2) === "$$") { - // handle user-defined variables - context = Object.assign({}, copts.variables, // global vars - // current item is added before local variables because the binding may be changed. - { this: obj }, (_a = copts.local) === null || _a === void 0 ? void 0 : _a.variables // local vars - ); - const prefix = arr[0].slice(2); - (0, util_1.assert)((0, util_1.has)(context, prefix), `Use of undefined variable: ${prefix}`); - expr = expr.slice(2); - } - else { - // 'expr' is a path to a field on the object. - expr = expr.slice(1); - } - if (expr === "") - return context; - return (0, util_1.resolve)(context, expr); - } - // check and return value if already in a resolved state - if ((0, util_1.isArray)(expr)) { - return expr.map((item) => computeValue(obj, item, null, copts)); - } - else if ((0, util_1.isObject)(expr)) { - const result = {}; - for (const [key, val] of Object.entries(expr)) { - result[key] = computeValue(obj, val, key, copts); - // must run ONLY one aggregate operator per expression - // if so, return result of the computed value - if ([OperatorType.EXPRESSION, OperatorType.ACCUMULATOR].some(t => !!getOperator(t, key, options))) { - // there should be only one operator - (0, util_1.assert)(Object.keys(expr).length === 1, "Invalid aggregation expression '" + JSON.stringify(expr) + "'"); - return result[key]; - } - } - return result; - } - return expr; -} -exports.computeValue = computeValue; -/** - * Redact an object - * @param {Object} obj The object to redact - * @param {*} expr The redact expression - * @param {*} options Options for value - * @return {*} returns the result of the redacted object - */ -function redact(obj, expr, options) { - const result = computeValue(obj, expr, null, options); - return (0, util_1.has)(redactVariables, result) - ? redactVariables[result](obj, expr, options) - : result; -} -exports.redact = redact; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var covariancePop_exports = {}; +__export(covariancePop_exports, { + $covariancePop: () => $covariancePop +}); +module.exports = __toCommonJS(covariancePop_exports); +var import_internal = __webpack_require__(1424); +var import_push = __webpack_require__(4518); +const $covariancePop = (collection, expr, options) => (0, import_internal.covariance)((0, import_push.$push)(collection, expr, options), false); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); + + +/***/ }), + +/***/ 4862: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var covarianceSamp_exports = {}; +__export(covarianceSamp_exports, { + $covarianceSamp: () => $covarianceSamp +}); +module.exports = __toCommonJS(covarianceSamp_exports); +var import_internal = __webpack_require__(1424); +var import_push = __webpack_require__(4518); +const $covarianceSamp = (collection, expr, options) => (0, import_internal.covariance)((0, import_push.$push)(collection, expr, options), true); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 3645: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +/***/ 1058: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var first_exports = {}; +__export(first_exports, { + $first: () => $first +}); +module.exports = __toCommonJS(first_exports); +var import_core = __webpack_require__(2760); +const $first = (collection, expr, options) => { + if (collection.length === 0) return void 0; + const copts = import_core.ComputeOptions.init(options).update(collection[0]); + return (0, import_core.computeValue)(collection[0], expr, null, copts); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.Cursor = void 0; -const aggregator_1 = __webpack_require__(7268); -const lazy_1 = __webpack_require__(9176); -const util_1 = __webpack_require__(7216); -/** - * Cursor to iterate and perform filtering on matched objects. - * This object must not be used directly. A cursor may be obtaine from calling `find()` on an instance of `Query`. - * - * @param collection The input source of the collection - * @param predicate A predicate function to test documents - * @param projection A projection criteria - * @param options Options - * @constructor - */ -class Cursor { - constructor(source, predicate, projection, options) { - this.source = source; - this.predicate = predicate; - this.projection = projection; - this.options = options; - this.operators = []; - this.result = null; - this.buffer = []; - } - /** Returns the iterator from running the query */ - fetch() { - if (this.result) - return this.result; - // add projection operator - if ((0, util_1.isObject)(this.projection)) { - this.operators.push({ $project: this.projection }); - } - // filter collection - this.result = (0, lazy_1.Lazy)(this.source).filter(this.predicate); - if (this.operators.length > 0) { - this.result = new aggregator_1.Aggregator(this.operators, this.options).stream(this.result); - } - return this.result; - } - /** Returns an iterator with the buffered data included */ - fetchAll() { - const buffered = (0, lazy_1.Lazy)([...this.buffer]); - this.buffer = []; - return (0, lazy_1.compose)(buffered, this.fetch()); - } - /** - * Return remaining objects in the cursor as an array. This method exhausts the cursor - * @returns {Array} - */ - all() { - return this.fetchAll().value(); - } - /** - * Returns the number of objects return in the cursor. This method exhausts the cursor - * @returns {Number} - */ - count() { - return this.all().length; - } - /** - * Returns a cursor that begins returning results only after passing or skipping a number of documents. - * @param {Number} n the number of results to skip. - * @return {Cursor} Returns the cursor, so you can chain this call. - */ - skip(n) { - this.operators.push({ $skip: n }); - return this; - } - /** - * Constrains the size of a cursor's result set. - * @param {Number} n the number of results to limit to. - * @return {Cursor} Returns the cursor, so you can chain this call. - */ - limit(n) { - this.operators.push({ $limit: n }); - return this; - } - /** - * Returns results ordered according to a sort specification. - * @param {Object} modifier an object of key and values specifying the sort order. 1 for ascending and -1 for descending - * @return {Cursor} Returns the cursor, so you can chain this call. - */ - sort(modifier) { - this.operators.push({ $sort: modifier }); - return this; - } - /** - * Specifies the collation for the cursor returned by the `mingo.Query.find` - * @param {*} spec - */ - collation(spec) { - this.options = Object.assign(Object.assign({}, this.options), { collation: spec }); - return this; - } - /** - * Returns the next document in a cursor. - * @returns {Object | Boolean} - */ - next() { - // yield value obtains in hasNext() - if (this.buffer.length > 0) { - return this.buffer.pop(); - } - const o = this.fetch().next(); - if (o.done) - return; - return o.value; - } - /** - * Returns true if the cursor has documents and can be iterated. - * @returns {boolean} - */ - hasNext() { - // there is a value in the buffer - if (this.buffer.length > 0) - return true; - const o = this.fetch().next(); - if (o.done) - return false; - this.buffer.push(o.value); - return true; - } - /** - * Applies a function to each document in a cursor and collects the return values in an array. - * @param callback - * @returns {Array} - */ - map(callback) { - return this.all().map(callback); - } - /** - * Applies a JavaScript function for every document in a cursor. - * @param callback - */ - forEach(callback) { - this.all().forEach(callback); - } - [Symbol.iterator]() { - return this.fetchAll(); - } -} -exports.Cursor = Cursor; + +/***/ }), + +/***/ 6550: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var firstN_exports = {}; +__export(firstN_exports, { + $firstN: () => $firstN +}); +module.exports = __toCommonJS(firstN_exports); +var import_core = __webpack_require__(2760); +var import_push = __webpack_require__(4518); +const $firstN = (collection, expr, options) => { + const copts = import_core.ComputeOptions.init(options); + const m = collection.length; + const n = (0, import_core.computeValue)(copts?.local?.groupId, expr.n, null, copts); + return (0, import_push.$push)( + m <= n ? collection : collection.slice(0, n), + expr.input, + options + ); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 6090: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +/***/ 1248: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var accumulator_exports = {}; +module.exports = __toCommonJS(accumulator_exports); +__reExport(accumulator_exports, __webpack_require__(4426), module.exports); +__reExport(accumulator_exports, __webpack_require__(320), module.exports); +__reExport(accumulator_exports, __webpack_require__(9000), module.exports); +__reExport(accumulator_exports, __webpack_require__(5045), module.exports); +__reExport(accumulator_exports, __webpack_require__(4683), module.exports); +__reExport(accumulator_exports, __webpack_require__(6995), module.exports); +__reExport(accumulator_exports, __webpack_require__(3516), module.exports); +__reExport(accumulator_exports, __webpack_require__(4862), module.exports); +__reExport(accumulator_exports, __webpack_require__(1058), module.exports); +__reExport(accumulator_exports, __webpack_require__(6550), module.exports); +__reExport(accumulator_exports, __webpack_require__(9666), module.exports); +__reExport(accumulator_exports, __webpack_require__(3830), module.exports); +__reExport(accumulator_exports, __webpack_require__(4674), module.exports); +__reExport(accumulator_exports, __webpack_require__(6870), module.exports); +__reExport(accumulator_exports, __webpack_require__(9524), module.exports); +__reExport(accumulator_exports, __webpack_require__(8702), module.exports); +__reExport(accumulator_exports, __webpack_require__(2908), module.exports); +__reExport(accumulator_exports, __webpack_require__(2184), module.exports); +__reExport(accumulator_exports, __webpack_require__(6393), module.exports); +__reExport(accumulator_exports, __webpack_require__(4518), module.exports); +__reExport(accumulator_exports, __webpack_require__(1779), module.exports); +__reExport(accumulator_exports, __webpack_require__(9388), module.exports); +__reExport(accumulator_exports, __webpack_require__(3295), module.exports); +__reExport(accumulator_exports, __webpack_require__(7995), module.exports); +__reExport(accumulator_exports, __webpack_require__(1977), module.exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); + + +/***/ }), + +/***/ 9666: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.aggregate = exports.remove = exports.find = exports.Query = exports.Aggregator = void 0; -// loads basic operators -__webpack_require__(9207); -const aggregator_1 = __webpack_require__(7268); -const query_1 = __webpack_require__(809); -var aggregator_2 = __webpack_require__(7268); -Object.defineProperty(exports, "Aggregator", ({ enumerable: true, get: function () { return aggregator_2.Aggregator; } })); -var query_2 = __webpack_require__(809); -Object.defineProperty(exports, "Query", ({ enumerable: true, get: function () { return query_2.Query; } })); -/** - * Performs a query on a collection and returns a cursor object. - * Shorthand for `Query(criteria).find(collection, projection)` - * - * @param collection Array of objects - * @param criteria Query criteria - * @param projection Projection criteria - * @param options - * @returns {Cursor} A cursor of results - */ -function find(collection, criteria, projection, options) { - return new query_1.Query(criteria, options).find(collection, projection); -} -exports.find = find; -/** - * Returns a new array without objects which match the criteria - * - * @param collection Array of objects - * @param criteria Query criteria of objects to remove - * @param options - * @returns {Array} New filtered array - */ -function remove(collection, criteria, options) { - return new query_1.Query(criteria, options).remove(collection); -} -exports.remove = remove; -/** - * Return the result collection after running the aggregation pipeline for the given collection. - * Shorthand for `(new Aggregator(pipeline, options)).run(collection)` - * - * @param collection array or stream of objects - * @param pipeline The pipeline operators to use - * @param options - * @returns {Array} New array of results - */ -function aggregate(collection, pipeline, options) { - return new aggregator_1.Aggregator(pipeline, options).run(collection); -} -exports.aggregate = aggregate; -// default interface -exports["default"] = { - Aggregator: aggregator_1.Aggregator, - Query: query_1.Query, - aggregate, - find, - remove +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var last_exports = {}; +__export(last_exports, { + $last: () => $last +}); +module.exports = __toCommonJS(last_exports); +var import_core = __webpack_require__(2760); +const $last = (collection, expr, options) => { + if (collection.length === 0) return void 0; + const obj = collection[collection.length - 1]; + const copts = import_core.ComputeOptions.init(options).update(obj); + return (0, import_core.computeValue)(obj, expr, null, copts); }; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 9207: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; +/***/ 3830: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -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 __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var lastN_exports = {}; +__export(lastN_exports, { + $lastN: () => $lastN }); -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; +module.exports = __toCommonJS(lastN_exports); +var import_core = __webpack_require__(2760); +var import_push = __webpack_require__(4518); +const $lastN = (collection, expr, options) => { + const copts = import_core.ComputeOptions.init(options); + const m = collection.length; + const n = (0, import_core.computeValue)(copts?.local?.groupId, expr.n, null, copts); + return (0, import_push.$push)( + m <= n ? collection : collection.slice(m - n), + expr.input, + options + ); }; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.BASIC_CONTEXT = void 0; -/** - * Loads all Query and Projection operators - */ -const core_1 = __webpack_require__(9587); -const booleanOperators = __importStar(__webpack_require__(628)); -const comparisonOperators = __importStar(__webpack_require__(4591)); -const pipeline_1 = __webpack_require__(6582); -const projectionOperators = __importStar(__webpack_require__(3791)); -const queryOperators = __importStar(__webpack_require__(5444)); -(0, core_1.useOperators)(core_1.OperatorType.EXPRESSION, Object.assign(Object.assign({}, booleanOperators), comparisonOperators)); -(0, core_1.useOperators)(core_1.OperatorType.PIPELINE, { - $project: pipeline_1.$project, - $skip: pipeline_1.$skip, - $limit: pipeline_1.$limit, - $sort: pipeline_1.$sort -}); -(0, core_1.useOperators)(core_1.OperatorType.PROJECTION, projectionOperators); -(0, core_1.useOperators)(core_1.OperatorType.QUERY, queryOperators); -/** The basic context for queries. */ -exports.BASIC_CONTEXT = core_1.Context.init({ - [core_1.OperatorType.EXPRESSION]: Object.assign(Object.assign({}, booleanOperators), comparisonOperators), - [core_1.OperatorType.PIPELINE]: { - $project: pipeline_1.$project, - $skip: pipeline_1.$skip, - $limit: pipeline_1.$limit, - $sort: pipeline_1.$sort - }, - [core_1.OperatorType.PROJECTION]: projectionOperators, - [core_1.OperatorType.QUERY]: queryOperators +// Annotate the CommonJS export names for ESM import in node: +0 && (0); + + +/***/ }), + +/***/ 4674: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var max_exports = {}; +__export(max_exports, { + $max: () => $max }); +module.exports = __toCommonJS(max_exports); +var import_util = __webpack_require__(7839); +var import_push = __webpack_require__(4518); +const $max = (collection, expr, options) => { + const items = (0, import_push.$push)(collection, expr, options); + if ((0, import_util.isEmpty)(items)) return null; + (0, import_util.assert)((0, import_util.isArray)(items), "$max: input must resolve to array"); + let max = items[0]; + for (const n of items) { + if ((0, import_util.isNil)(n) || isNaN(n)) continue; + if ((0, import_util.compare)(n, max) >= 0) max = n; + } + return max; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 9176: -/***/ ((__unused_webpack_module, exports) => { +/***/ 6870: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var maxN_exports = {}; +__export(maxN_exports, { + $maxN: () => $maxN +}); +module.exports = __toCommonJS(maxN_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +var import_push = __webpack_require__(4518); +const $maxN = (collection, expr, options) => { + const copts = import_core.ComputeOptions.init(options); + const m = collection.length; + const n = (0, import_core.computeValue)(copts?.local?.groupId, expr.n, null, copts); + const arr = (0, import_push.$push)(collection, expr.input, options).filter((o) => !(0, import_util.isNil)(o)); + arr.sort((a, b) => -1 * (0, import_util.compare)(a, b)); + return m <= n ? arr : arr.slice(0, n); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.Iterator = exports.compose = exports.Lazy = void 0; -/** - * Returns an iterator - * @param {*} source An iterable source (Array, Function, Generator, or Iterator) - */ -function Lazy(source) { - return source instanceof Iterator ? source : new Iterator(source); -} -exports.Lazy = Lazy; -function compose(...iterators) { - let index = 0; - return Lazy(() => { - while (index < iterators.length) { - const o = iterators[index].next(); - if (!o.done) - return o; - index++; - } - return { done: true }; - }); -} -exports.compose = compose; -/** - * Checks whether the given object is compatible with a generator i.e Object{next:Function} - * @param {*} o An object - */ -function isGenerator(o) { - return (!!o && typeof o === "object" && (o === null || o === void 0 ? void 0 : o.next) instanceof Function); -} -function dropItem(array, i) { - const rest = array.slice(i + 1); - array.splice(i); - Array.prototype.push.apply(array, rest); -} -// stop iteration error -const DONE = new Error(); -// Lazy function actions -var Action; -(function (Action) { - Action[Action["MAP"] = 0] = "MAP"; - Action[Action["FILTER"] = 1] = "FILTER"; - Action[Action["TAKE"] = 2] = "TAKE"; - Action[Action["DROP"] = 3] = "DROP"; -})(Action || (Action = {})); -function createCallback(nextFn, iteratees, buffer) { - let done = false; - let index = -1; - let bufferIndex = 0; // index for the buffer - return function (storeResult) { - // special hack to collect all values into buffer - try { - outer: while (!done) { - let o = nextFn(); - index++; - let i = -1; - const size = iteratees.length; - let innerDone = false; - while (++i < size) { - const r = iteratees[i]; - switch (r.action) { - case Action.MAP: - o = r.func(o, index); - break; - case Action.FILTER: - if (!r.func(o, index)) - continue outer; - break; - case Action.TAKE: - --r.count; - if (!r.count) - innerDone = true; - break; - case Action.DROP: - --r.count; - if (!r.count) - dropItem(iteratees, i); - continue outer; - default: - break outer; - } - } - done = innerDone; - if (storeResult) { - buffer[bufferIndex++] = o; - } - else { - return { value: o, done: false }; - } - } - } - catch (e) { - if (e !== DONE) - throw e; - } - done = true; - return { done }; - }; -} -/** - * A lazy collection iterator yields a single value at time upon request - */ -class Iterator { - /** - * @param {*} source An iterable object or function. - * Array - return one element per cycle - * Object{next:Function} - call next() for the next value (this also handles generator functions) - * Function - call to return the next value - * @param {Function} fn An optional transformation function - */ - constructor(source) { - this.iteratees = []; - this.yieldedValues = []; - this.isDone = false; - let nextVal; - if (source instanceof Function) { - // make iterable - source = { next: source }; - } - if (isGenerator(source)) { - const src = source; - nextVal = () => { - const o = src.next(); - if (o.done) - throw DONE; - return o.value; - }; - } - else if (source instanceof Array) { - const data = source; - const size = data.length; - let index = 0; - nextVal = () => { - if (index < size) - return data[index++]; - throw DONE; - }; - } - else if (!(source instanceof Function)) { - throw new Error(`Source is of type '${typeof source}'. Must be Array, Function, or Generator`); - } - // create next function - this.getNext = createCallback(nextVal, this.iteratees, this.yieldedValues); - } - /** - * Add an iteratee to this lazy sequence - */ - push(action, value) { - if (typeof value === "function") { - this.iteratees.push({ action, func: value }); - } - else if (typeof value === "number") { - this.iteratees.push({ action, count: value }); - } - return this; - } - next() { - return this.getNext(); - } - // Iteratees methods - /** - * Transform each item in the sequence to a new value - * @param {Function} f - */ - map(f) { - return this.push(Action.MAP, f); - } - /** - * Select only items matching the given predicate - * @param {Function} pred - */ - filter(predicate) { - return this.push(Action.FILTER, predicate); - } - /** - * Take given numbe for values from sequence - * @param {Number} n A number greater than 0 - */ - take(n) { - return n > 0 ? this.push(Action.TAKE, n) : this; - } - /** - * Drop a number of values from the sequence - * @param {Number} n Number of items to drop greater than 0 - */ - drop(n) { - return n > 0 ? this.push(Action.DROP, n) : this; - } - // Transformations - /** - * Returns a new lazy object with results of the transformation - * The entire sequence is realized. - * - * @param {Function} fn Tranform function of type (Array) => (Any) - */ - transform(fn) { - const self = this; - let iter; - return Lazy(() => { - if (!iter) { - iter = Lazy(fn(self.value())); - } - return iter.next(); - }); - } - // Terminal methods - /** - * Returns the fully realized values of the iterators. - * The return value will be an array unless `lazy.first()` was used. - * The realized values are cached for subsequent calls - */ - value() { - if (!this.isDone) { - this.isDone = this.getNext(true).done; - } - return this.yieldedValues; - } - /** - * Execute the funcion for each value. Will stop when an execution returns false. - * @param {Function} f - * @returns {Boolean} false iff `f` return false for AnyVal execution, otherwise true - */ - each(f) { - for (;;) { - const o = this.next(); - if (o.done) - break; - if (f(o.value) === false) - return false; - } - return true; - } - /** - * Returns the reduction of sequence according the reducing function - * - * @param {*} f a reducing function - * @param {*} init - */ - reduce(f, initialValue) { - let o = this.next(); - if (initialValue === undefined && !o.done) { - initialValue = o.value; - o = this.next(); - } - while (!o.done) { - initialValue = f(initialValue, o.value); - o = this.next(); - } - return initialValue; - } - /** - * Returns the number of matched items in the sequence - */ - size() { - return this.reduce(((acc, _) => ++acc), 0); - } - [Symbol.iterator]() { - /* eslint-disable @typescript-eslint/no-unsafe-return */ - return this; - } -} -exports.Iterator = Iterator; +/***/ }), + +/***/ 9524: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var median_exports = {}; +__export(median_exports, { + $median: () => $median +}); +module.exports = __toCommonJS(median_exports); +var import_percentile = __webpack_require__(6393); +const $median = (collection, expr, options) => (0, import_percentile.$percentile)(collection, { ...expr, p: [0.5] }, options).pop(); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); -/***/ }), -/***/ 4414: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +/***/ }), -"use strict"; +/***/ 8702: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * Predicates used for Query and Expression operators. - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$type = exports.$elemMatch = exports.$size = exports.$all = exports.$exists = exports.$regex = exports.$mod = exports.$gte = exports.$gt = exports.$lte = exports.$lt = exports.$nin = exports.$in = exports.$ne = exports.$eq = exports.createExpressionOperator = exports.createQueryOperator = void 0; -const core_1 = __webpack_require__(9587); -const query_1 = __webpack_require__(809); -const util_1 = __webpack_require__(7216); -/** - * Returns a query operator created from the predicate - * - * @param predicate Predicate function - */ -function createQueryOperator(predicate) { - const f = (selector, value, options) => { - const opts = { unwrapArray: true }; - const depth = Math.max(1, selector.split(".").length - 1); - return (obj) => { - // value of field must be fully resolved. - const lhs = (0, util_1.resolve)(obj, selector, opts); - return predicate(lhs, value, Object.assign(Object.assign({}, options), { depth })); - }; - }; - f.op = "query"; - return f; // as QueryOperator; -} -exports.createQueryOperator = createQueryOperator; -/** - * Returns an expression operator created from the predicate - * - * @param predicate Predicate function - */ -function createExpressionOperator(predicate) { - return (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - return predicate(...args); - }; -} -exports.createExpressionOperator = createExpressionOperator; -/** - * Checks that two values are equal. - * - * @param a The lhs operand as resolved from the object by the given selector - * @param b The rhs operand provided by the user - * @returns {*} - */ -function $eq(a, b, options) { - // start with simple equality check - if ((0, util_1.isEqual)(a, b)) - return true; - // https://docs.mongodb.com/manual/tutorial/query-for-null-fields/ - if ((0, util_1.isNil)(a) && (0, util_1.isNil)(b)) - return true; - // check - if (a instanceof Array) { - const eq = util_1.isEqual.bind(null, b); - return a.some(eq) || (0, util_1.flatten)(a, options === null || options === void 0 ? void 0 : options.depth).some(eq); - } - return false; -} -exports.$eq = $eq; -/** - * Matches all values that are not equal to the value specified in the query. - * - * @param a - * @param b - * @returns {boolean} - */ -function $ne(a, b, options) { - return !$eq(a, b, options); -} -exports.$ne = $ne; -/** - * Matches any of the values that exist in an array specified in the query. - * - * @param a - * @param b - * @returns {*} - */ -function $in(a, b, options) { - // queries for null should be able to find undefined fields - if ((0, util_1.isNil)(a)) - return b.some(v => v === null); - return (0, util_1.intersection)([(0, util_1.ensureArray)(a), b], options === null || options === void 0 ? void 0 : options.hashFunction).length > 0; -} -exports.$in = $in; -/** - * Matches values that do not exist in an array specified to the query. - * - * @param a - * @param b - * @returns {*|boolean} - */ -function $nin(a, b, options) { - return !$in(a, b, options); -} -exports.$nin = $nin; -/** - * Matches values that are less than the value specified in the query. - * - * @param a - * @param b - * @returns {boolean} - */ -function $lt(a, b, options) { - return compare(a, b, (x, y) => (0, util_1.compare)(x, y) < 0); -} -exports.$lt = $lt; -/** - * Matches values that are less than or equal to the value specified in the query. - * - * @param a - * @param b - * @returns {boolean} - */ -function $lte(a, b, options) { - return compare(a, b, (x, y) => (0, util_1.compare)(x, y) <= 0); -} -exports.$lte = $lte; -/** - * Matches values that are greater than the value specified in the query. - * - * @param a - * @param b - * @returns {boolean} - */ -function $gt(a, b, options) { - return compare(a, b, (x, y) => (0, util_1.compare)(x, y) > 0); -} -exports.$gt = $gt; -/** - * Matches values that are greater than or equal to the value specified in the query. - * - * @param a - * @param b - * @returns {boolean} - */ -function $gte(a, b, options) { - return compare(a, b, (x, y) => (0, util_1.compare)(x, y) >= 0); -} -exports.$gte = $gte; -/** - * Performs a modulo operation on the value of a field and selects documents with a specified result. - * - * @param a - * @param b - * @returns {boolean} - */ -function $mod(a, b, options) { - return (0, util_1.ensureArray)(a).some(((x) => b.length === 2 && x % b[0] === b[1])); -} -exports.$mod = $mod; -/** - * Selects documents where values match a specified regular expression. - * - * @param a - * @param b - * @returns {boolean} - */ -function $regex(a, b, options) { - const lhs = (0, util_1.ensureArray)(a); - const match = (x) => (0, util_1.isString)(x) && (0, util_1.truthy)(b.exec(x), options === null || options === void 0 ? void 0 : options.useStrictMode); - return lhs.some(match) || (0, util_1.flatten)(lhs, 1).some(match); -} -exports.$regex = $regex; -/** - * Matches documents that have the specified field. - * - * @param a - * @param b - * @returns {boolean} - */ -function $exists(a, b, options) { - return (((b === false || b === 0) && a === undefined) || - ((b === true || b === 1) && a !== undefined)); -} -exports.$exists = $exists; -/** - * Matches arrays that contain all elements specified in the query. - * - * @param values - * @param queries - * @returns boolean - */ -function $all(values, queries, options) { - if (!(0, util_1.isArray)(values) || - !(0, util_1.isArray)(queries) || - !values.length || - !queries.length) { - return false; - } - let matched = true; - for (const query of queries) { - // no need to check all the queries. - if (!matched) - break; - if ((0, util_1.isObject)(query) && (0, util_1.inArray)(Object.keys(query), "$elemMatch")) { - matched = $elemMatch(values, query["$elemMatch"], options); - } - else if (query instanceof RegExp) { - matched = values.some(s => typeof s === "string" && query.test(s)); - } - else { - matched = values.some(v => (0, util_1.isEqual)(query, v)); - } - } - return matched; -} -exports.$all = $all; -/** - * Selects documents if the array field is a specified size. - * - * @param a - * @param b - * @returns {*|boolean} - */ -function $size(a, b, options) { - return Array.isArray(a) && a.length === b; -} -exports.$size = $size; -function isNonBooleanOperator(name) { - return (0, util_1.isOperator)(name) && ["$and", "$or", "$nor"].indexOf(name) === -1; -} -/** - * Selects documents if element in the array field matches all the specified $elemMatch condition. - * - * @param a {Array} element to match against - * @param b {Object} subquery - */ -function $elemMatch(a, b, options) { - // should return false for non-matching input - if ((0, util_1.isArray)(a) && !(0, util_1.isEmpty)(a)) { - let format = (x) => x; - let criteria = b; - // If we find a boolean operator in the subquery, we fake a field to point to it. This is an - // attempt to ensure that it is a valid criteria. We cannot make this substitution for operators - // like $and/$or/$nor; as otherwise, this faking will break our query. - if (Object.keys(b).every(isNonBooleanOperator)) { - criteria = { temp: b }; - format = x => ({ temp: x }); - } - const query = new query_1.Query(criteria, options); - for (let i = 0, len = a.length; i < len; i++) { - if (query.test(format(a[i]))) { - return true; - } - } - } - return false; -} -exports.$elemMatch = $elemMatch; -// helper functions -const isNull = (a) => a === null; -const isInt = (a) => (0, util_1.isNumber)(a) && - a >= util_1.MIN_INT && - a <= util_1.MAX_INT && - a.toString().indexOf(".") === -1; -const isLong = (a) => (0, util_1.isNumber)(a) && - a >= util_1.MIN_LONG && - a <= util_1.MAX_LONG && - a.toString().indexOf(".") === -1; -/** Mapping of type to predicate */ -const compareFuncs = { - array: util_1.isArray, - bool: util_1.isBoolean, - boolean: util_1.isBoolean, - date: util_1.isDate, - decimal: util_1.isNumber, - double: util_1.isNumber, - int: isInt, - long: isLong, - number: util_1.isNumber, - null: isNull, - object: util_1.isObject, - regex: util_1.isRegExp, - regexp: util_1.isRegExp, - string: util_1.isString, - // added for completeness - undefined: util_1.isNil, - function: (_) => { - throw new Error("unsupported type key `function`."); - }, - // Mongo identifiers - 1: util_1.isNumber, - 2: util_1.isString, - 3: util_1.isObject, - 4: util_1.isArray, - 6: util_1.isNil, - 8: util_1.isBoolean, - 9: util_1.isDate, - 10: isNull, - 11: util_1.isRegExp, - 16: isInt, - 18: isLong, - 19: util_1.isNumber //decimal +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -/** - * Selects documents if a field is of the specified type. - * - * @param a - * @param b - * @returns {boolean} - */ -function compareType(a, b, _) { - const f = compareFuncs[b]; - return f ? f(a) : false; -} -/** - * Selects documents if a field is of the specified type. - * - * @param a - * @param b - * @returns {boolean} - */ -function $type(a, b, options) { - return Array.isArray(b) - ? b.findIndex(t => compareType(a, t, options)) >= 0 - : compareType(a, b, options); -} -exports.$type = $type; -function compare(a, b, f) { - return (0, util_1.ensureArray)(a).some(x => (0, util_1.getType)(x) === (0, util_1.getType)(b) && f(x, b)); -} +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var mergeObjects_exports = {}; +__export(mergeObjects_exports, { + $mergeObjects: () => $mergeObjects +}); +module.exports = __toCommonJS(mergeObjects_exports); +var import_core = __webpack_require__(2760); +var import_mergeObjects = __webpack_require__(4420); +const $mergeObjects = (collection, expr, options) => { + const arr = (0, import_core.computeValue)(collection, expr, null, options); + return (0, import_mergeObjects.$mergeObjects)(null, arr, options); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8680: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; +/***/ 2908: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.covariance = exports.stddev = void 0; -/** - * Compute the standard deviation of the data set - * @param {Array} array of numbers - * @param {Boolean} if true calculates a sample standard deviation, otherwise calculates a population stddev - * @return {Number} - */ -function stddev(data, sampled = true) { - const sum = data.reduce((acc, n) => acc + n, 0); - const N = data.length || 1; - const avg = sum / N; - return Math.sqrt(data.reduce((acc, n) => acc + Math.pow(n - avg, 2), 0) / - (N - Number(sampled))); -} -exports.stddev = stddev; -function covariance(dataset, sampled = true) { - if (!dataset) - return null; - if (dataset.length < 2) - return sampled ? null : 0; - let meanX = 0.0; - let meanY = 0.0; - for (const [x, y] of dataset) { - meanX += x; - meanY += y; - } - meanX /= dataset.length; - meanY /= dataset.length; - let result = 0; - for (const [x, y] of dataset) { - result += (x - meanX) * (y - meanY); - } - return result / (dataset.length - Number(sampled)); -} -exports.covariance = covariance; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var min_exports = {}; +__export(min_exports, { + $min: () => $min +}); +module.exports = __toCommonJS(min_exports); +var import_util = __webpack_require__(7839); +var import_push = __webpack_require__(4518); +const $min = (collection, expr, options) => { + const items = (0, import_push.$push)(collection, expr, options); + if ((0, import_util.isEmpty)(items)) return null; + (0, import_util.assert)((0, import_util.isArray)(items), "$min: input must resolve to array"); + let min = items[0]; + for (const n of items) { + if ((0, import_util.isNil)(n) || isNaN(n)) continue; + if ((0, import_util.compare)(n, min) <= 0) min = n; + } + return min; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 9329: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +/***/ 2184: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var minN_exports = {}; +__export(minN_exports, { + $minN: () => $minN +}); +module.exports = __toCommonJS(minN_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +var import_push = __webpack_require__(4518); +const $minN = (collection, expr, options) => { + const copts = import_core.ComputeOptions.init(options); + const m = collection.length; + const n = (0, import_core.computeValue)(copts?.local?.groupId, expr.n, null, copts); + const arr = (0, import_push.$push)(collection, expr.input, options).filter((o) => !(0, import_util.isNil)(o)); + arr.sort(import_util.compare); + return m <= n ? arr : arr.slice(0, n); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); -// Custom Aggregation Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#custom-aggregation-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$accumulator = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Defines a custom accumulator function. - * - * @param {Array} collection The input array - * @param {*} expr The expression for the operator - * @param {Options} options Options - */ -const $accumulator = (collection, expr, options) => { - var _a; - (0, util_1.assert)(!!options && options.scriptEnabled, "$accumulator operator requires 'scriptEnabled' option to be true"); - if (collection.length == 0) - return expr.initArgs; - const copts = core_1.ComputeOptions.init(options); - const initArgs = (0, core_1.computeValue)({}, expr.initArgs || [], null, copts.update(((_a = copts === null || copts === void 0 ? void 0 : copts.local) === null || _a === void 0 ? void 0 : _a.groupId) || {})); - let state = expr.init.call(null, ...initArgs); - for (const doc of collection) { - // get arguments for document - const args = (0, core_1.computeValue)(doc, expr.accumulateArgs, null, copts.update(doc)); - // update the state with each documents value - // eslint-disable-next-line - state = expr.accumulate.call(null, ...[state, ...args]); + +/***/ }), + +/***/ 6393: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var percentile_exports = {}; +__export(percentile_exports, { + $percentile: () => $percentile +}); +module.exports = __toCommonJS(percentile_exports); +var import_util = __webpack_require__(7839); +var import_push = __webpack_require__(4518); +const $percentile = (collection, expr, options) => { + const X = (0, import_push.$push)(collection, expr.input, options).filter(import_util.isNumber).sort(); + const centiles = (0, import_push.$push)(expr.p, "$$CURRENT", options).filter(import_util.isNumber); + const method = expr.method || "approximate"; + return centiles.map((p) => { + (0, import_util.assert)( + p > 0 && p <= 1, + `percentile value must be between 0 (exclusive) and 1 (inclusive): invalid '${p}'.` + ); + const r = p * (X.length - 1) + 1; + const ri = Math.floor(r); + const result = r === ri ? X[r - 1] : X[ri - 1] + r % 1 * (X[ri] - X[ri - 1] || 0); + switch (method) { + case "exact": + return result; + case "approximate": { + const i = (0, import_util.findInsertIndex)(X, result); + return i / X.length >= p ? X[Math.max(i - 1, 0)] : X[i]; + } } - return (expr.finalize ? expr.finalize.call(null, state) : state); + }); }; -exports.$accumulator = $accumulator; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8911: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +/***/ 4518: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var push_exports = {}; +__export(push_exports, { + $push: () => $push +}); +module.exports = __toCommonJS(push_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $push = (collection, expr, options) => { + if ((0, import_util.isNil)(expr)) return collection; + const copts = import_core.ComputeOptions.init(options); + return collection.map( + (obj) => (0, import_core.computeValue)(obj, expr, null, copts.update(obj)) + ); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$addToSet = void 0; -const util_1 = __webpack_require__(7216); -const push_1 = __webpack_require__(7835); -/** - * Returns an array of all the unique values for the selected field among for each document in that group. - * - * @param {Array} collection The input array - * @param {Object} expr The right-hand side expression value of the operator - * @param {Options} options The options to use for this operation - * @returns {*} - */ -const $addToSet = (collection, expr, options) => { - return (0, util_1.unique)((0, push_1.$push)(collection, expr, options), options === null || options === void 0 ? void 0 : options.hashFunction); + +/***/ }), + +/***/ 1779: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$addToSet = $addToSet; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var stdDevPop_exports = {}; +__export(stdDevPop_exports, { + $stdDevPop: () => $stdDevPop +}); +module.exports = __toCommonJS(stdDevPop_exports); +var import_util = __webpack_require__(7839); +var import_internal = __webpack_require__(1424); +var import_push = __webpack_require__(4518); +const $stdDevPop = (collection, expr, options) => (0, import_internal.stddev)((0, import_push.$push)(collection, expr, options).filter(import_util.isNumber), false); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 9891: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +/***/ 9388: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var stdDevSamp_exports = {}; +__export(stdDevSamp_exports, { + $stdDevSamp: () => $stdDevSamp +}); +module.exports = __toCommonJS(stdDevSamp_exports); +var import_util = __webpack_require__(7839); +var import_internal = __webpack_require__(1424); +var import_push = __webpack_require__(4518); +const $stdDevSamp = (collection, expr, options) => (0, import_internal.stddev)((0, import_push.$push)(collection, expr, options).filter(import_util.isNumber), true); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$avg = void 0; -const util_1 = __webpack_require__(7216); -const push_1 = __webpack_require__(7835); -/** - * Returns an average of all the values in a group. - * - * @param {Array} collection The input array - * @param {Object} expr The right-hand side expression value of the operator - * @param {Options} options The options to use for this operation - * @returns {Number} - */ -const $avg = (collection, expr, options) => { - const data = (0, push_1.$push)(collection, expr, options).filter(util_1.isNumber); - const sum = data.reduce((acc, n) => acc + n, 0); - return sum / (data.length || 1); + +/***/ }), + +/***/ 3295: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$avg = $avg; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var sum_exports = {}; +__export(sum_exports, { + $sum: () => $sum +}); +module.exports = __toCommonJS(sum_exports); +var import_util = __webpack_require__(7839); +var import_push = __webpack_require__(4518); +const $sum = (collection, expr, options) => { + if (!(0, import_util.isArray)(collection)) return 0; + if ((0, import_util.isNumber)(expr)) return collection.length * expr; + const nums = (0, import_push.$push)(collection, expr, options).filter(import_util.isNumber); + return nums.reduce((acc, n) => acc + n, 0); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8474: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +/***/ 7995: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var top_exports = {}; +__export(top_exports, { + $top: () => $top +}); +module.exports = __toCommonJS(top_exports); +var import_topN = __webpack_require__(1977); +const $top = (collection, expr, options) => (0, import_topN.$topN)(collection, { ...expr, n: 1 }, options); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$bottom = void 0; -const bottomN_1 = __webpack_require__(2102); -/** - * Returns the bottom element within a group according to the specified sort order. - * - * @param {Array} collection The input array - * @param {Object} expr The right-hand side expression value of the operator - * @param {Options} options The options to use for this operation - * @returns {*} - */ -const $bottom = (collection, expr, options) => (0, bottomN_1.$bottomN)(collection, Object.assign(Object.assign({}, expr), { n: 1 }), options); -exports.$bottom = $bottom; + +/***/ }), + +/***/ 1977: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var topN_exports = {}; +__export(topN_exports, { + $topN: () => $topN +}); +module.exports = __toCommonJS(topN_exports); +var import_aggregator = __webpack_require__(6878); +var import_core = __webpack_require__(2760); +var import_push = __webpack_require__(4518); +const $topN = (collection, expr, options) => { + const copts = import_core.ComputeOptions.init(options); + const { n, sortBy } = (0, import_core.computeValue)( + copts.local.groupId, + expr, + null, + copts + ); + const result = new import_aggregator.Aggregator([{ $sort: sortBy }, { $limit: n }], copts).run( + collection + ); + return (0, import_push.$push)(result, expr.output, copts); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 2102: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 6405: +/***/ ((module) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$bottomN = void 0; -// https://www.mongodb.com/docs/manual/reference/operator/aggregation/bottomN/#mongodb-group-grp.-bottomN -const aggregator_1 = __webpack_require__(7268); -const core_1 = __webpack_require__(9587); -const push_1 = __webpack_require__(7835); -/** - * Returns an aggregation of the bottom n elements within a group, according to the specified sort order. - * If the group contains fewer than n elements, $bottomN returns all elements in the group. - * - * @param {Array} collection The input array - * @param {Object} expr The right-hand side expression value of the operator - * @param {Options} options The options to use for this operation - * @returns {*} - */ -const $bottomN = (collection, expr, options) => { - const copts = core_1.ComputeOptions.init(options); - const { n, sortBy } = (0, core_1.computeValue)(copts.local.groupId, expr, null, copts); - const result = new aggregator_1.Aggregator([{ $sort: sortBy }], copts).run(collection); - const m = result.length; - const p = n; - return (0, push_1.$push)(m <= p ? result : result.slice(m - p), expr.output, copts); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$bottomN = $bottomN; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var internal_exports = {}; +__export(internal_exports, { + truncate: () => truncate +}); +module.exports = __toCommonJS(internal_exports); +function truncate(num, places = 0, roundOff = false) { + const sign = Math.abs(num) === num ? 1 : -1; + num = Math.abs(num); + let result = Math.trunc(num); + const decimals = parseFloat((num - result).toFixed(places + 1)); + if (places === 0) { + const firstDigit = Math.trunc(10 * decimals); + if (roundOff && ((result & 1) === 1 && firstDigit >= 5 || firstDigit > 5)) { + result++; + } + } else if (places > 0) { + const offset = Math.pow(10, places); + let remainder = Math.trunc(decimals * offset); + const lastDigit = Math.trunc(decimals * offset * 10) % 10; + if (roundOff && lastDigit > 5) { + remainder += 1; + } + result = (result * offset + remainder) / offset; + } else if (places < 0) { + const offset = Math.pow(10, -1 * places); + let excess = result % offset; + result = Math.max(0, result - excess); + if (roundOff && sign === -1) { + while (excess > 10) { + excess -= excess % 10; + } + if (result > 0 && excess >= 5) { + result += offset; + } + } + } + return result * sign; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 1514: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; +/***/ 9133: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$count = void 0; -/** - * Returns the number of documents in the group or window. - * - * @param {Array} collection The input array - * @param {Object} expr The right-hand side expression value of the operator - * @returns {*} - */ -const $count = (collection, _expr, _options) => collection.length; -exports.$count = $count; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var abs_exports = {}; +__export(abs_exports, { + $abs: () => $abs +}); +module.exports = __toCommonJS(abs_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $abs = (obj, expr, options) => { + const n = (0, import_core.computeValue)(obj, expr, null, options); + return (0, import_util.isNil)(n) ? null : Math.abs(n); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 7212: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 9566: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$covariancePop = void 0; -const _internal_1 = __webpack_require__(8680); -const push_1 = __webpack_require__(7835); -/** - * Returns the population covariance of two numeric expressions. - * @param {Array} collection - * @param {Object} expr - * @return {Number|null} - */ -const $covariancePop = (collection, expr, options) => (0, _internal_1.covariance)((0, push_1.$push)(collection, expr, options), false); -exports.$covariancePop = $covariancePop; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var add_exports = {}; +__export(add_exports, { + $add: () => $add +}); +module.exports = __toCommonJS(add_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $add = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + let hasDate = false; + let sum = 0; + for (const n of args) { + if ((0, import_util.isDate)(n)) { + (0, import_util.assert)(!hasDate, "'$add' can only have one date value"); + hasDate = true; + } + sum += +n; + } + return hasDate ? new Date(sum) : sum; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 1662: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 7888: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$covarianceSamp = void 0; -const _internal_1 = __webpack_require__(8680); -const push_1 = __webpack_require__(7835); -/** - * Returns the sample covariance of two numeric expressions. - * @param {Array} collection - * @param {Object} expr - * @return {Number|null} - */ -const $covarianceSamp = (collection, expr, options) => (0, _internal_1.covariance)((0, push_1.$push)(collection, expr, options), true); -exports.$covarianceSamp = $covarianceSamp; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var ceil_exports = {}; +__export(ceil_exports, { + $ceil: () => $ceil +}); +module.exports = __toCommonJS(ceil_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $ceil = (obj, expr, options) => { + const n = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isNil)(n)) return null; + (0, import_util.assert)((0, import_util.isNumber)(n) || isNaN(n), "$ceil expression must resolve to a number."); + return Math.ceil(n); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 2452: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 4424: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$first = void 0; -const core_1 = __webpack_require__(9587); -/** - * Returns the first value in a group. - * - * @param {Array} collection The input array - * @param {Object} expr The right-hand side expression value of the operator - * @returns {*} - */ -const $first = (collection, expr, options) => { - return collection.length > 0 - ? (0, core_1.computeValue)(collection[0], expr, null, options) - : undefined; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var divide_exports = {}; +__export(divide_exports, { + $divide: () => $divide +}); +module.exports = __toCommonJS(divide_exports); +var import_core = __webpack_require__(2760); +const $divide = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + return args[0] / args[1]; }; -exports.$first = $first; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 3445: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 9490: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$firstN = void 0; -// https://www.mongodb.com/docs/manual/reference/operator/aggregation/firstN/ -const core_1 = __webpack_require__(9587); -const push_1 = __webpack_require__(7835); -/** - * Returns an aggregation of the first n elements within a group. The elements returned are meaningful only if in a specified sort order. - * If the group contains fewer than n elements, $firstN returns all elements in the group. - * - * @param {Array} collection The input array - * @param {Object} expr The right-hand side expression value of the operator - * @param {Options} options The options to use for this operation - * @returns {*} - */ -const $firstN = (collection, expr, options) => { - var _a; - const copts = core_1.ComputeOptions.init(options); - const m = collection.length; - const n = (0, core_1.computeValue)((_a = copts === null || copts === void 0 ? void 0 : copts.local) === null || _a === void 0 ? void 0 : _a.groupId, expr.n, null, copts); - return (0, push_1.$push)(m <= n ? collection : collection.slice(0, n), expr.input, options); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var exp_exports = {}; +__export(exp_exports, { + $exp: () => $exp +}); +module.exports = __toCommonJS(exp_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $exp = (obj, expr, options) => { + const n = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isNil)(n)) return null; + (0, import_util.assert)((0, import_util.isNumber)(n) || isNaN(n), "$exp expression must resolve to a number."); + return Math.exp(n); }; -exports.$firstN = $firstN; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 3424: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; +/***/ 2175: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * Group stage Accumulator Operators. https://docs.mongodb.com/manual/reference/operator/aggregation- - */ -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 __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(9329), exports); -__exportStar(__webpack_require__(8911), exports); -__exportStar(__webpack_require__(9891), exports); -__exportStar(__webpack_require__(8474), exports); -__exportStar(__webpack_require__(2102), exports); -__exportStar(__webpack_require__(1514), exports); -__exportStar(__webpack_require__(7212), exports); -__exportStar(__webpack_require__(1662), exports); -__exportStar(__webpack_require__(2452), exports); -__exportStar(__webpack_require__(3445), exports); -__exportStar(__webpack_require__(5026), exports); -__exportStar(__webpack_require__(9799), exports); -__exportStar(__webpack_require__(7133), exports); -__exportStar(__webpack_require__(8542), exports); -__exportStar(__webpack_require__(4785), exports); -__exportStar(__webpack_require__(5613), exports); -__exportStar(__webpack_require__(3946), exports); -__exportStar(__webpack_require__(7835), exports); -__exportStar(__webpack_require__(2257), exports); -__exportStar(__webpack_require__(4393), exports); -__exportStar(__webpack_require__(7970), exports); -__exportStar(__webpack_require__(1382), exports); -__exportStar(__webpack_require__(7097), exports); - - -/***/ }), - -/***/ 5026: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$last = void 0; -const core_1 = __webpack_require__(9587); -/** - * Returns the last value in the collection. - * - * @param {Array} collection The input array - * @param {Object} expr The right-hand side expression value of the operator - * @param {Options} options The options to use for this operation - * @returns {*} - */ -const $last = (collection, expr, options) => { - return collection.length > 0 - ? (0, core_1.computeValue)(collection[collection.length - 1], expr, null, options) - : undefined; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var floor_exports = {}; +__export(floor_exports, { + $floor: () => $floor +}); +module.exports = __toCommonJS(floor_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $floor = (obj, expr, options) => { + const n = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isNil)(n)) return null; + (0, import_util.assert)( + (0, import_util.isNumber)(n) || isNaN(n), + "$floor expression must resolve to a number." + ); + return Math.floor(n); }; -exports.$last = $last; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 9799: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +/***/ 4125: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var arithmetic_exports = {}; +module.exports = __toCommonJS(arithmetic_exports); +__reExport(arithmetic_exports, __webpack_require__(9133), module.exports); +__reExport(arithmetic_exports, __webpack_require__(9566), module.exports); +__reExport(arithmetic_exports, __webpack_require__(7888), module.exports); +__reExport(arithmetic_exports, __webpack_require__(4424), module.exports); +__reExport(arithmetic_exports, __webpack_require__(9490), module.exports); +__reExport(arithmetic_exports, __webpack_require__(2175), module.exports); +__reExport(arithmetic_exports, __webpack_require__(3023), module.exports); +__reExport(arithmetic_exports, __webpack_require__(5571), module.exports); +__reExport(arithmetic_exports, __webpack_require__(7462), module.exports); +__reExport(arithmetic_exports, __webpack_require__(7229), module.exports); +__reExport(arithmetic_exports, __webpack_require__(353), module.exports); +__reExport(arithmetic_exports, __webpack_require__(9319), module.exports); +__reExport(arithmetic_exports, __webpack_require__(5057), module.exports); +__reExport(arithmetic_exports, __webpack_require__(6451), module.exports); +__reExport(arithmetic_exports, __webpack_require__(8413), module.exports); +__reExport(arithmetic_exports, __webpack_require__(731), module.exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); + + +/***/ }), + +/***/ 3023: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$lastN = void 0; -// https://www.mongodb.com/docs/manual/reference/operator/aggregation/lastN/ -const core_1 = __webpack_require__(9587); -const push_1 = __webpack_require__(7835); -/** - * Returns an aggregation of the last n elements within a group. The elements returned are meaningful only if in a specified sort order. - * If the group contains fewer than n elements, $lastN returns all elements in the group. - * - * @param {Array} collection The input array - * @param {Object} expr The right-hand side expression value of the operator - * @param {Options} options The options to use for this operation - * @returns {*} - */ -const $lastN = (collection, expr, options) => { - var _a; - const copts = core_1.ComputeOptions.init(options); - const m = collection.length; - const n = (0, core_1.computeValue)((_a = copts === null || copts === void 0 ? void 0 : copts.local) === null || _a === void 0 ? void 0 : _a.groupId, expr.n, null, copts); - return (0, push_1.$push)(m <= n ? collection : collection.slice(m - n), expr.input, options); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var ln_exports = {}; +__export(ln_exports, { + $ln: () => $ln +}); +module.exports = __toCommonJS(ln_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $ln = (obj, expr, options) => { + const n = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isNil)(n)) return null; + (0, import_util.assert)((0, import_util.isNumber)(n) || isNaN(n), "$ln expression must resolve to a number."); + return Math.log(n); }; -exports.$lastN = $lastN; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 7133: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 5571: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$max = void 0; -const util_1 = __webpack_require__(7216); -const push_1 = __webpack_require__(7835); -/** - * Returns the highest value in a group. - * - * @param {Array} collection The input array - * @param {Object} expr The right-hand side expression value of the operator - * @param {Options} options The options to use for this operation - * @returns {*} - */ -const $max = (collection, expr, options) => { - const nums = (0, push_1.$push)(collection, expr, options).filter(util_1.isNotNaN); - const n = nums.reduce((acc, n) => ((0, util_1.compare)(n, acc) >= 0 ? n : acc), -Infinity); - return n === -Infinity ? undefined : n; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$max = $max; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var log_exports = {}; +__export(log_exports, { + $log: () => $log +}); +module.exports = __toCommonJS(log_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $log = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + const msg = "$log expression must resolve to array(2) of numbers"; + (0, import_util.assert)((0, import_util.isArray)(args) && args.length === 2, msg); + if (args.some(import_util.isNil)) return null; + (0, import_util.assert)(args.some(isNaN) || args.every(import_util.isNumber), msg); + return Math.log10(args[0]) / Math.log10(args[1]); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8542: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 7462: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$maxN = void 0; -// https://www.mongodb.com/docs/manual/reference/operator/aggregation/maxN -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -const push_1 = __webpack_require__(7835); -/** - * Returns an aggregation of the maxmimum value n elements within a group. - * If the group contains fewer than n elements, $maxN returns all elements in the group. - * - * @param {Array} collection The input array - * @param {Object} expr The right-hand side expression value of the operator - * @param {Options} options The options to use for this operation - * @returns {*} - */ -const $maxN = (collection, expr, options) => { - var _a; - const copts = core_1.ComputeOptions.init(options); - const m = collection.length; - const n = (0, core_1.computeValue)((_a = copts === null || copts === void 0 ? void 0 : copts.local) === null || _a === void 0 ? void 0 : _a.groupId, expr.n, null, copts); - const arr = (0, push_1.$push)(collection, expr.input, options).filter(o => !(0, util_1.isNil)(o)); - arr.sort((a, b) => -1 * (0, util_1.compare)(a, b)); - return m <= n ? arr : arr.slice(0, n); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$maxN = $maxN; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var log10_exports = {}; +__export(log10_exports, { + $log10: () => $log10 +}); +module.exports = __toCommonJS(log10_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $log10 = (obj, expr, options) => { + const n = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isNil)(n)) return null; + (0, import_util.assert)( + (0, import_util.isNumber)(n) || isNaN(n), + "$log10 expression must resolve to a number." + ); + return Math.log10(n); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 4785: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 7229: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$mergeObjects = void 0; -const mergeObjects_1 = __webpack_require__(9531); -/** - * Combines multiple documents into a single document. - * - * @param {Array} collection The input array - * @param {Object} _ The right-hand side expression value of the operator - * @param {Options} options The options to use for this operation - * @returns {Array|*} - */ -const $mergeObjects = (collection, _, options) => (0, mergeObjects_1.$mergeObjects)({ docs: collection }, "$docs", options); -exports.$mergeObjects = $mergeObjects; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var mod_exports = {}; +__export(mod_exports, { + $mod: () => $mod +}); +module.exports = __toCommonJS(mod_exports); +var import_core = __webpack_require__(2760); +const $mod = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + return args[0] % args[1]; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5613: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 353: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$min = void 0; -const util_1 = __webpack_require__(7216); -const push_1 = __webpack_require__(7835); -/** - * Returns the lowest value in a group. - * - * @param {Array} collection The input array - * @param {Object} expr The right-hand side expression value of the operator - * @param {Options} The options to use for this operator - * @returns {*} - */ -const $min = (collection, expr, options) => { - const nums = (0, push_1.$push)(collection, expr, options).filter(util_1.isNotNaN); - const n = nums.reduce((acc, n) => ((0, util_1.compare)(n, acc) <= 0 ? n : acc), Infinity); - return n === Infinity ? undefined : n; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var multiply_exports = {}; +__export(multiply_exports, { + $multiply: () => $multiply +}); +module.exports = __toCommonJS(multiply_exports); +var import_core = __webpack_require__(2760); +const $multiply = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + return args.reduce((acc, num) => acc * num, 1); }; -exports.$min = $min; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 3946: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +/***/ 9319: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var pow_exports = {}; +__export(pow_exports, { + $pow: () => $pow +}); +module.exports = __toCommonJS(pow_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $pow = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + (0, import_util.assert)( + (0, import_util.isArray)(args) && args.length === 2 && args.every(import_util.isNumber), + "$pow expression must resolve to array(2) of numbers" + ); + (0, import_util.assert)( + !(args[0] === 0 && args[1] < 0), + "$pow cannot raise 0 to a negative exponent" + ); + return Math.pow(args[0], args[1]); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$minN = void 0; -// https://www.mongodb.com/docs/manual/reference/operator/aggregation/minN -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -const push_1 = __webpack_require__(7835); -/** - * Returns an aggregation of the minimum value n elements within a group. - * If the group contains fewer than n elements, $minN returns all elements in the group. - * - * @param {Array} collection The input array - * @param {Object} expr The right-hand side expression value of the operator - * @param {Options} options The options to use for this operation - * @returns {*} - */ -const $minN = (collection, expr, options) => { - var _a; - const copts = core_1.ComputeOptions.init(options); - const m = collection.length; - const n = (0, core_1.computeValue)((_a = copts === null || copts === void 0 ? void 0 : copts.local) === null || _a === void 0 ? void 0 : _a.groupId, expr.n, null, copts); - const arr = (0, push_1.$push)(collection, expr.input, options).filter(o => !(0, util_1.isNil)(o)); - arr.sort(util_1.compare); - return m <= n ? arr : arr.slice(0, n); + +/***/ }), + +/***/ 5057: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$minN = $minN; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var round_exports = {}; +__export(round_exports, { + $round: () => $round +}); +module.exports = __toCommonJS(round_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +var import_internal = __webpack_require__(6405); +const $round = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + const num = args[0]; + const place = args[1]; + if ((0, import_util.isNil)(num) || isNaN(num) || Math.abs(num) === Infinity) return num; + (0, import_util.assert)((0, import_util.isNumber)(num), "$round expression must resolve to a number."); + return (0, import_internal.truncate)(num, place, true); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 7835: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +/***/ 6451: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var sqrt_exports = {}; +__export(sqrt_exports, { + $sqrt: () => $sqrt +}); +module.exports = __toCommonJS(sqrt_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $sqrt = (obj, expr, options) => { + const n = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isNil)(n)) return null; + (0, import_util.assert)( + (0, import_util.isNumber)(n) && n > 0 || isNaN(n), + "$sqrt expression must resolve to non-negative number." + ); + return Math.sqrt(n); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$push = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Returns an array of all values for the selected field among for each document in that group. - * - * @param {Array} collection The input array - * @param {Object} expr The right-hand side expression value of the operator - * @param {Options} options The options to use for this operation - * @returns {Array|*} - */ -const $push = (collection, expr, options) => { - if ((0, util_1.isNil)(expr)) - return collection; - const copts = core_1.ComputeOptions.init(options); - return collection.map(obj => (0, core_1.computeValue)(obj, expr, null, copts.update(obj))); + +/***/ }), + +/***/ 8413: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var subtract_exports = {}; +__export(subtract_exports, { + $subtract: () => $subtract +}); +module.exports = __toCommonJS(subtract_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $subtract = (obj, expr, options) => { + const [a, b] = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isNumber)(a) && (0, import_util.isNumber)(b) || (0, import_util.isDate)(a) && (0, import_util.isDate)(b)) return +a - +b; + if ((0, import_util.isDate)(a) && (0, import_util.isNumber)(b)) return new Date(+a - b); + (0, import_util.assert)(false, "$subtract: must resolve to number/date."); }; -exports.$push = $push; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 2257: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 731: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$stdDevPop = void 0; -const util_1 = __webpack_require__(7216); -const _internal_1 = __webpack_require__(8680); -const push_1 = __webpack_require__(7835); -/** - * Returns the population standard deviation of the input values. - * - * @param {Array} collection The input array - * @param {Object} expr The right-hand side expression value of the operator - * @param {Options} options The options to use for this operation - * @return {Number} - */ -const $stdDevPop = (collection, expr, options) => (0, _internal_1.stddev)((0, push_1.$push)(collection, expr, options).filter(util_1.isNumber), false); -exports.$stdDevPop = $stdDevPop; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var trunc_exports = {}; +__export(trunc_exports, { + $trunc: () => $trunc +}); +module.exports = __toCommonJS(trunc_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +var import_internal = __webpack_require__(6405); +const $trunc = (obj, expr, options) => { + const arr = (0, import_core.computeValue)(obj, expr, null, options); + const num = arr[0]; + const places = arr[1]; + if ((0, import_util.isNil)(num) || isNaN(num) || Math.abs(num) === Infinity) return num; + (0, import_util.assert)((0, import_util.isNumber)(num), "$trunc expression must resolve to a number."); + (0, import_util.assert)( + (0, import_util.isNil)(places) || (0, import_util.isNumber)(places) && places > -20 && places < 100, + "$trunc expression has invalid place" + ); + return (0, import_internal.truncate)(num, places, false); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 4393: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 3261: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$stdDevSamp = void 0; -const util_1 = __webpack_require__(7216); -const _internal_1 = __webpack_require__(8680); -const push_1 = __webpack_require__(7835); -/** - * Returns the sample standard deviation of the input values. - * @param {Array} collection - * @param {Object} expr - * @return {Number|null} - */ -const $stdDevSamp = (collection, expr, options) => (0, _internal_1.stddev)((0, push_1.$push)(collection, expr, options).filter(util_1.isNumber), true); -exports.$stdDevSamp = $stdDevSamp; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var arrayElemAt_exports = {}; +__export(arrayElemAt_exports, { + $arrayElemAt: () => $arrayElemAt +}); +module.exports = __toCommonJS(arrayElemAt_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $arrayElemAt = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + (0, import_util.assert)( + (0, import_util.isArray)(args) && args.length === 2, + "$arrayElemAt expression must resolve to array(2)" + ); + if (args.some(import_util.isNil)) return null; + const index = args[1]; + const arr = args[0]; + if (index < 0 && Math.abs(index) <= arr.length) { + return arr[(index + arr.length) % arr.length]; + } else if (index >= 0 && index < arr.length) { + return arr[index]; + } + return void 0; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 7970: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 3285: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$sum = void 0; -const util_1 = __webpack_require__(7216); -const push_1 = __webpack_require__(7835); -/** - * Returns the sum of all the values in a group. - * - * @param {Array} collection The input array - * @param {Object} expr The right-hand side expression value of the operator - * @returns {Number} - */ -const $sum = (collection, expr, options) => { - if (!(0, util_1.isArray)(collection)) - return 0; - // take a short cut if expr is number literal - if ((0, util_1.isNumber)(expr)) - return collection.length * expr; - const nums = (0, push_1.$push)(collection, expr, options).filter(util_1.isNumber); - return nums.reduce((acc, n) => acc + n, 0); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var arrayToObject_exports = {}; +__export(arrayToObject_exports, { + $arrayToObject: () => $arrayToObject +}); +module.exports = __toCommonJS(arrayToObject_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $arrayToObject = (obj, expr, options) => { + const arr = (0, import_core.computeValue)(obj, expr, null, options); + (0, import_util.assert)((0, import_util.isArray)(arr), "$arrayToObject: expression must resolve to an array"); + return arr.reduce((newObj, val) => { + while ((0, import_util.isArray)(val) && val.length === 1) val = val[0]; + if ((0, import_util.isArray)(val) && val.length == 2) { + newObj[val[0]] = val[1]; + } else { + const valObj = val; + (0, import_util.assert)( + (0, import_util.isObject)(valObj) && (0, import_util.has)(valObj, "k") && (0, import_util.has)(valObj, "v"), + "$arrayToObject expression is invalid." + ); + newObj[valObj.k] = valObj.v; + } + return newObj; + }, {}); }; -exports.$sum = $sum; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 1382: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 8590: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$top = void 0; -const topN_1 = __webpack_require__(7097); -/** - * Returns the top element within a group according to the specified sort order. - * - * @param {Array} collection The input array - * @param {Object} expr The right-hand side expression value of the operator - * @param {Options} options The options to use for this operation - * @returns {*} - */ -const $top = (collection, expr, options) => (0, topN_1.$topN)(collection, Object.assign(Object.assign({}, expr), { n: 1 }), options); -exports.$top = $top; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var concatArrays_exports = {}; +__export(concatArrays_exports, { + $concatArrays: () => $concatArrays +}); +module.exports = __toCommonJS(concatArrays_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $concatArrays = (obj, expr, options) => { + const nArray = (0, import_core.computeValue)(obj, expr, null, options); + (0, import_util.assert)((0, import_util.isArray)(nArray), "$concatArrays: input must resolve to an array"); + let size = 0; + for (const arr of nArray) { + if ((0, import_util.isNil)(arr)) return null; + size += arr.length; + } + const result = new Array(size); + let i = 0; + for (const arr of nArray) for (const item of arr) result[i++] = item; + return result; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 7097: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 8106: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$topN = void 0; -// https://www.mongodb.com/docs/manual/reference/operator/aggregation/topN/#mongodb-group-grp.-topN -const aggregator_1 = __webpack_require__(7268); -const core_1 = __webpack_require__(9587); -const push_1 = __webpack_require__(7835); -/** - * Returns an aggregation of the top n elements within a group, according to the specified sort order. - * If the group contains fewer than n elements, $topN returns all elements in the group. - * - * @param {Array} collection The input array - * @param {Object} expr The right-hand side expression value of the operator - * @param {Options} options The options to use for this operation - * @returns {*} - */ -const $topN = (collection, expr, options) => { - const copts = core_1.ComputeOptions.init(options); - const { n, sortBy } = (0, core_1.computeValue)(copts.local.groupId, expr, null, copts); - const result = new aggregator_1.Aggregator([{ $sort: sortBy }, { $limit: n }], copts).run(collection); - return (0, push_1.$push)(result, expr.output, copts); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var filter_exports = {}; +__export(filter_exports, { + $filter: () => $filter +}); +module.exports = __toCommonJS(filter_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $filter = (obj, expr, options) => { + const input = (0, import_core.computeValue)(obj, expr.input, null, options); + if ((0, import_util.isNil)(input)) return null; + (0, import_util.assert)((0, import_util.isArray)(input), "$filter 'input' expression must resolve to an array"); + const copts = import_core.ComputeOptions.init(options, obj); + const k = expr.as || "this"; + const local = { + variables: { [k]: null } + }; + return input.filter((o) => { + local.variables[k] = o; + const b = (0, import_core.computeValue)( + obj, + expr.cond, + null, + copts.update(copts.root, local) + ); + return (0, import_util.truthy)(b, options.useStrictMode); + }); }; -exports.$topN = $topN; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 6026: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; +/***/ 6976: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.truncate = void 0; -/** - * Truncates integer value to number of places. If roundOff is specified round value instead to the number of places - * @param {Number} num - * @param {Number} places - * @param {Boolean} roundOff - */ -function truncate(num, places, roundOff) { - const sign = Math.abs(num) === num ? 1 : -1; - num = Math.abs(num); - let result = Math.trunc(num); - const decimals = parseFloat((num - result).toFixed(places + 1)); - if (places === 0) { - const firstDigit = Math.trunc(10 * decimals); - if (roundOff && - (((result & 1) === 1 && firstDigit >= 5) || firstDigit > 5)) { - result++; - } - } - else if (places > 0) { - const offset = Math.pow(10, places); - let remainder = Math.trunc(decimals * offset); - // last digit before cut off - const lastDigit = Math.trunc(decimals * offset * 10) % 10; - // add one if last digit is greater than 5 - if (roundOff && lastDigit > 5) { - remainder += 1; - } - // compute decimal remainder and add to whole number - // manually formatting float re - result = (result * offset + remainder) / offset; - } - else if (places < 0) { - // handle negative decimal places - const offset = Math.pow(10, -1 * places); - let excess = result % offset; - result = Math.max(0, result - excess); - // for negative values the absolute must increase so we round up the last digit if >= 5 - if (roundOff && sign === -1) { - while (excess > 10) { - excess -= excess % 10; - } - if (result > 0 && excess >= 5) { - result += offset; - } - } - } - return result * sign; -} -exports.truncate = truncate; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var first_exports = {}; +__export(first_exports, { + $first: () => $first +}); +module.exports = __toCommonJS(first_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +var import_first = __webpack_require__(1058); +const $first = (obj, expr, options) => { + if ((0, import_util.isArray)(obj)) return (0, import_first.$first)(obj, expr, options); + const arr = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isNil)(arr)) return null; + (0, import_util.assert)( + (0, import_util.isArray)(arr) && arr.length > 0, + "$first must resolve to a non-empty array." + ); + return (0, import_util.flatten)(arr)[0]; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 2062: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 2412: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Arithmetic Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#arithmetic-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$abs = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Returns the absolute value of a number. - * - * @param obj - * @param expr - * @return {Number|null|NaN} - */ -const $abs = (obj, expr, options) => { - const n = (0, core_1.computeValue)(obj, expr, null, options); - return (0, util_1.isNil)(n) ? null : Math.abs(n); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var firstN_exports = {}; +__export(firstN_exports, { + $firstN: () => $firstN +}); +module.exports = __toCommonJS(firstN_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +var import_firstN = __webpack_require__(6550); +const $firstN = (obj, expr, options) => { + if ((0, import_util.isArray)(obj)) return (0, import_firstN.$firstN)(obj, expr, options); + const { input, n } = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isNil)(input)) return null; + (0, import_util.assert)((0, import_util.isArray)(input), "Must resolve to an array/null or missing"); + return (0, import_firstN.$firstN)(input, { n, input: "$$this" }, options); }; -exports.$abs = $abs; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 7254: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 9067: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Arithmetic Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#arithmetic-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$add = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Computes the sum of an array of numbers. - * - * @param obj - * @param expr - * @returns {Object} - */ -const $add = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - let foundDate = false; - const result = args.reduce((acc, val) => { - if ((0, util_1.isDate)(val)) { - (0, util_1.assert)(!foundDate, "'$add' can only have one date value"); - foundDate = true; - val = val.getTime(); - } - // assume val is a number - acc += val; - return acc; - }, 0); - return foundDate ? new Date(result) : result; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var in_exports = {}; +__export(in_exports, { + $in: () => $in +}); +module.exports = __toCommonJS(in_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $in = (obj, expr, options) => { + const [item, arr] = (0, import_core.computeValue)(obj, expr, null, options); + (0, import_util.assert)((0, import_util.isArray)(arr), "$in second argument must be an array"); + return arr.some((v) => (0, import_util.isEqual)(v, item)); }; -exports.$add = $add; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 4489: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +/***/ 2846: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var array_exports = {}; +module.exports = __toCommonJS(array_exports); +__reExport(array_exports, __webpack_require__(3261), module.exports); +__reExport(array_exports, __webpack_require__(3285), module.exports); +__reExport(array_exports, __webpack_require__(8590), module.exports); +__reExport(array_exports, __webpack_require__(8106), module.exports); +__reExport(array_exports, __webpack_require__(6976), module.exports); +__reExport(array_exports, __webpack_require__(2412), module.exports); +__reExport(array_exports, __webpack_require__(9067), module.exports); +__reExport(array_exports, __webpack_require__(5910), module.exports); +__reExport(array_exports, __webpack_require__(3239), module.exports); +__reExport(array_exports, __webpack_require__(6788), module.exports); +__reExport(array_exports, __webpack_require__(2080), module.exports); +__reExport(array_exports, __webpack_require__(2836), module.exports); +__reExport(array_exports, __webpack_require__(8952), module.exports); +__reExport(array_exports, __webpack_require__(7110), module.exports); +__reExport(array_exports, __webpack_require__(5676), module.exports); +__reExport(array_exports, __webpack_require__(1603), module.exports); +__reExport(array_exports, __webpack_require__(2866), module.exports); +__reExport(array_exports, __webpack_require__(7607), module.exports); +__reExport(array_exports, __webpack_require__(2881), module.exports); +__reExport(array_exports, __webpack_require__(7292), module.exports); +__reExport(array_exports, __webpack_require__(1931), module.exports); +__reExport(array_exports, __webpack_require__(4657), module.exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); + + +/***/ }), + +/***/ 5910: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Arithmetic Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#arithmetic-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$ceil = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Returns the smallest integer greater than or equal to the specified number. - * - * @param obj - * @param expr - * @returns {number} - */ -const $ceil = (obj, expr, options) => { - const n = (0, core_1.computeValue)(obj, expr, null, options); - if ((0, util_1.isNil)(n)) - return null; - (0, util_1.assert)((0, util_1.isNumber)(n) || isNaN(n), "$ceil expression must resolve to a number."); - return Math.ceil(n); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var indexOfArray_exports = {}; +__export(indexOfArray_exports, { + $indexOfArray: () => $indexOfArray +}); +module.exports = __toCommonJS(indexOfArray_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $indexOfArray = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isNil)(args)) return null; + let arr = args[0]; + const searchValue = args[1]; + if ((0, import_util.isNil)(arr)) return null; + (0, import_util.assert)((0, import_util.isArray)(arr), "$indexOfArray expression must resolve to an array."); + const start = args[2] || 0; + let end = args[3]; + if ((0, import_util.isNil)(end)) end = arr.length; + if (start > end) return -1; + (0, import_util.assert)(start >= 0 && end >= 0, "$indexOfArray expression is invalid"); + if (start > 0 || end < arr.length) { + arr = arr.slice(start, end); + } + let index = -1; + arr.some((v, i) => { + const b = (0, import_util.isEqual)(v, searchValue); + if (b) index = i; + return b; + }); + return index + start; }; -exports.$ceil = $ceil; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 4203: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 3239: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Arithmetic Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#arithmetic-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$divide = void 0; -const core_1 = __webpack_require__(9587); -/** - * Takes two numbers and divides the first number by the second. - * - * @param obj - * @param expr - * @returns {number} - */ -const $divide = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - return args[0] / args[1]; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$divide = $divide; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var isArray_exports = {}; +__export(isArray_exports, { + $isArray: () => $isArray +}); +module.exports = __toCommonJS(isArray_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $isArray = (obj, expr, options) => (0, import_util.isArray)((0, import_core.computeValue)(obj, expr[0], null, options)); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8216: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 6788: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Arithmetic Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#arithmetic-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$exp = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Raises Euler’s number (i.e. e ) to the specified exponent and returns the result. - * - * @param obj - * @param expr - * @returns {number} - */ -const $exp = (obj, expr, options) => { - const n = (0, core_1.computeValue)(obj, expr, null, options); - if ((0, util_1.isNil)(n)) - return null; - (0, util_1.assert)((0, util_1.isNumber)(n) || isNaN(n), "$exp expression must resolve to a number."); - return Math.exp(n); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -exports.$exp = $exp; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var last_exports = {}; +__export(last_exports, { + $last: () => $last +}); +module.exports = __toCommonJS(last_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +var import_last = __webpack_require__(9666); +const $last = (obj, expr, options) => { + if ((0, import_util.isArray)(obj)) return (0, import_last.$last)(obj, expr, options); + const arr = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isNil)(arr)) return null; + (0, import_util.assert)( + (0, import_util.isArray)(arr) && arr.length > 0, + "$last must resolve to a non-empty array." + ); + return (0, import_util.flatten)(arr)[arr.length - 1]; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 7827: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 2080: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Arithmetic Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#arithmetic-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$floor = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Returns the largest integer less than or equal to the specified number. - * - * @param obj - * @param expr - * @returns {number} - */ -const $floor = (obj, expr, options) => { - const n = (0, core_1.computeValue)(obj, expr, null, options); - if ((0, util_1.isNil)(n)) - return null; - (0, util_1.assert)((0, util_1.isNumber)(n) || isNaN(n), "$floor expression must resolve to a number."); - return Math.floor(n); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$floor = $floor; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var lastN_exports = {}; +__export(lastN_exports, { + $lastN: () => $lastN +}); +module.exports = __toCommonJS(lastN_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +var import_lastN = __webpack_require__(3830); +const $lastN = (obj, expr, options) => { + if ((0, import_util.isArray)(obj)) return (0, import_lastN.$lastN)(obj, expr, options); + const { input, n } = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isNil)(input)) return null; + (0, import_util.assert)((0, import_util.isArray)(input), "Must resolve to an array/null or missing"); + return (0, import_lastN.$lastN)(input, { n, input: "$$this" }, options); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 1744: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; +/***/ 2836: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -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 __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(2062), exports); -__exportStar(__webpack_require__(7254), exports); -__exportStar(__webpack_require__(4489), exports); -__exportStar(__webpack_require__(4203), exports); -__exportStar(__webpack_require__(8216), exports); -__exportStar(__webpack_require__(7827), exports); -__exportStar(__webpack_require__(1424), exports); -__exportStar(__webpack_require__(368), exports); -__exportStar(__webpack_require__(7654), exports); -__exportStar(__webpack_require__(5971), exports); -__exportStar(__webpack_require__(4325), exports); -__exportStar(__webpack_require__(8519), exports); -__exportStar(__webpack_require__(2151), exports); -__exportStar(__webpack_require__(7625), exports); -__exportStar(__webpack_require__(7709), exports); -__exportStar(__webpack_require__(8736), exports); +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var map_exports = {}; +__export(map_exports, { + $map: () => $map +}); +module.exports = __toCommonJS(map_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $map = (obj, expr, options) => { + const input = (0, import_core.computeValue)(obj, expr.input, null, options); + if ((0, import_util.isNil)(input)) return null; + (0, import_util.assert)((0, import_util.isArray)(input), `$map 'input' expression must resolve to an array`); + const copts = import_core.ComputeOptions.init(options); + const k = expr.as || "this"; + return input.map((o) => { + return (0, import_core.computeValue)( + obj, + expr.in, + null, + copts.update(copts.root, { + variables: { [k]: o } + }) + ); + }); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 1424: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 8952: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Arithmetic Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#arithmetic-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$ln = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Calculates the natural logarithm ln (i.e loge) of a number and returns the result as a double. - * - * @param obj - * @param expr - * @returns {number} - */ -const $ln = (obj, expr, options) => { - const n = (0, core_1.computeValue)(obj, expr, null, options); - if ((0, util_1.isNil)(n)) - return null; - (0, util_1.assert)((0, util_1.isNumber)(n) || isNaN(n), "$ln expression must resolve to a number."); - return Math.log(n); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var maxN_exports = {}; +__export(maxN_exports, { + $maxN: () => $maxN +}); +module.exports = __toCommonJS(maxN_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +var import_maxN = __webpack_require__(6870); +const $maxN = (obj, expr, options) => { + if ((0, import_util.isArray)(obj)) return (0, import_maxN.$maxN)(obj, expr, options); + const { input, n } = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isNil)(input)) return null; + (0, import_util.assert)((0, import_util.isArray)(input), "Must resolve to an array/null or missing"); + return (0, import_maxN.$maxN)(input, { n, input: "$$this" }, options); }; -exports.$ln = $ln; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 368: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 7110: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Arithmetic Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#arithmetic-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$log = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Calculates the log of a number in the specified base and returns the result as a double. - * - * @param obj - * @param expr - * @returns {number} - */ -const $log = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - const msg = "$log expression must resolve to array(2) of numbers"; - (0, util_1.assert)((0, util_1.isArray)(args) && args.length === 2, msg); - if (args.some(util_1.isNil)) - return null; - (0, util_1.assert)(args.some(isNaN) || args.every(util_1.isNumber), msg); - return Math.log10(args[0]) / Math.log10(args[1]); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var minN_exports = {}; +__export(minN_exports, { + $minN: () => $minN +}); +module.exports = __toCommonJS(minN_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +var import_minN = __webpack_require__(2184); +const $minN = (obj, expr, options) => { + if ((0, import_util.isArray)(obj)) return (0, import_minN.$minN)(obj, expr, options); + const { input, n } = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isNil)(input)) return null; + (0, import_util.assert)((0, import_util.isArray)(input), "Must resolve to an array/null or missing"); + return (0, import_minN.$minN)(input, { n, input: "$$this" }, options); }; -exports.$log = $log; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 7654: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 5676: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Arithmetic Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#arithmetic-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$log10 = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Calculates the log base 10 of a number and returns the result as a double. - * - * @param obj - * @param expr - * @returns {number} - */ -const $log10 = (obj, expr, options) => { - const n = (0, core_1.computeValue)(obj, expr, null, options); - if ((0, util_1.isNil)(n)) - return null; - (0, util_1.assert)((0, util_1.isNumber)(n) || isNaN(n), "$log10 expression must resolve to a number."); - return Math.log10(n); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$log10 = $log10; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var nin_exports = {}; +__export(nin_exports, { + $nin: () => $nin +}); +module.exports = __toCommonJS(nin_exports); +var import_predicates = __webpack_require__(4330); +const $nin = (0, import_predicates.createExpressionOperator)(import_predicates.$nin); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5971: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 1603: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Arithmetic Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#arithmetic-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$mod = void 0; -const core_1 = __webpack_require__(9587); -/** - * Takes two numbers and calculates the modulo of the first number divided by the second. - * - * @param obj - * @param expr - * @returns {number} - */ -const $mod = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - return args[0] % args[1]; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var range_exports = {}; +__export(range_exports, { + $range: () => $range +}); +module.exports = __toCommonJS(range_exports); +var import_core = __webpack_require__(2760); +const $range = (obj, expr, options) => { + const arr = (0, import_core.computeValue)(obj, expr, null, options); + const start = arr[0]; + const end = arr[1]; + const step = arr[2] || 1; + const result = new Array(); + let counter = start; + while (counter < end && step > 0 || counter > end && step < 0) { + result.push(counter); + counter += step; + } + return result; }; -exports.$mod = $mod; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 4325: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 2866: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Arithmetic Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#arithmetic-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$multiply = void 0; -const core_1 = __webpack_require__(9587); -/** - * Computes the product of an array of numbers. - * - * @param obj - * @param expr - * @returns {Object} - */ -const $multiply = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - return args.reduce((acc, num) => acc * num, 1); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -exports.$multiply = $multiply; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var reduce_exports = {}; +__export(reduce_exports, { + $reduce: () => $reduce +}); +module.exports = __toCommonJS(reduce_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $reduce = (obj, expr, options) => { + const copts = import_core.ComputeOptions.init(options); + const input = (0, import_core.computeValue)(obj, expr.input, null, copts); + const initialValue = (0, import_core.computeValue)(obj, expr.initialValue, null, copts); + const inExpr = expr["in"]; + if ((0, import_util.isNil)(input)) return null; + (0, import_util.assert)((0, import_util.isArray)(input), "$reduce 'input' expression must resolve to an array"); + return input.reduce((acc, n) => { + return (0, import_core.computeValue)( + n, + inExpr, + null, + copts.update(copts.root, { + variables: { value: acc } + }) + ); + }, initialValue); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8519: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 7607: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Arithmetic Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#arithmetic-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$pow = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Raises a number to the specified exponent and returns the result. - * - * @param obj - * @param expr - * @returns {Object} - */ -const $pow = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - (0, util_1.assert)((0, util_1.isArray)(args) && args.length === 2 && args.every(util_1.isNumber), "$pow expression must resolve to array(2) of numbers"); - (0, util_1.assert)(!(args[0] === 0 && args[1] < 0), "$pow cannot raise 0 to a negative exponent"); - return Math.pow(args[0], args[1]); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -exports.$pow = $pow; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var reverseArray_exports = {}; +__export(reverseArray_exports, { + $reverseArray: () => $reverseArray +}); +module.exports = __toCommonJS(reverseArray_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $reverseArray = (obj, expr, options) => { + const arr = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isNil)(arr)) return null; + (0, import_util.assert)((0, import_util.isArray)(arr), "$reverseArray expression must resolve to an array"); + const result = arr.slice(0); + result.reverse(); + return result; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 2151: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 2881: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Arithmetic Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#arithmetic-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$round = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -const _internal_1 = __webpack_require__(6026); -/** - * Rounds a number to to a whole integer or to a specified decimal place. - * @param {*} obj - * @param {*} expr - */ -const $round = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - const num = args[0]; - const place = args[1]; - if ((0, util_1.isNil)(num) || isNaN(num) || Math.abs(num) === Infinity) - return num; - (0, util_1.assert)((0, util_1.isNumber)(num), "$round expression must resolve to a number."); - return (0, _internal_1.truncate)(num, place, true); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var size_exports = {}; +__export(size_exports, { + $size: () => $size +}); +module.exports = __toCommonJS(size_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $size = (obj, expr, options) => { + const value = (0, import_core.computeValue)(obj, expr, null, options); + return (0, import_util.isArray)(value) ? value.length : void 0; }; -exports.$round = $round; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 7625: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 7292: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Arithmetic Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#arithmetic-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$sqrt = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Calculates the square root of a positive number and returns the result as a double. - * - * @param obj - * @param expr - * @returns {number} - */ -const $sqrt = (obj, expr, options) => { - const n = (0, core_1.computeValue)(obj, expr, null, options); - if ((0, util_1.isNil)(n)) - return null; - (0, util_1.assert)(((0, util_1.isNumber)(n) && n > 0) || isNaN(n), "$sqrt expression must resolve to non-negative number."); - return Math.sqrt(n); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var slice_exports = {}; +__export(slice_exports, { + $slice: () => $slice +}); +module.exports = __toCommonJS(slice_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $slice = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + const arr = args[0]; + let skip = args[1]; + let limit = args[2]; + if ((0, import_util.isNil)(limit)) { + if (skip < 0) { + skip = Math.max(0, arr.length + skip); + limit = arr.length - skip + 1; + } else { + limit = skip; + skip = 0; + } + } else { + if (skip < 0) { + skip = Math.max(0, arr.length + skip); + } + (0, import_util.assert)( + limit > 0, + `Invalid argument for $slice operator. Limit must be a positive number` + ); + limit += skip; + } + return arr.slice(skip, limit); }; -exports.$sqrt = $sqrt; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 7709: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 1931: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Arithmetic Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#arithmetic-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$subtract = void 0; -const core_1 = __webpack_require__(9587); -/** - * Takes an array that contains two numbers or two dates and subtracts the second value from the first. - * - * @param obj - * @param expr - * @returns {number} - */ -const $subtract = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - return args[0] - args[1]; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var sortArray_exports = {}; +__export(sortArray_exports, { + $sortArray: () => $sortArray +}); +module.exports = __toCommonJS(sortArray_exports); +var import_aggregator = __webpack_require__(6878); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $sortArray = (obj, expr, options) => { + const { input, sortBy } = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isNil)(input)) return null; + (0, import_util.assert)((0, import_util.isArray)(input), "$sortArray expression must resolve to an array"); + if ((0, import_util.isObject)(sortBy)) { + return new import_aggregator.Aggregator([{ $sort: sortBy }]).run(input); + } + const result = [...input]; + result.sort(import_util.compare); + if (sortBy === -1) result.reverse(); + return result; }; -exports.$subtract = $subtract; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8736: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 4657: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Arithmetic Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#arithmetic-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$trunc = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -const _internal_1 = __webpack_require__(6026); -/** - * Truncates a number to a whole integer or to a specified decimal place. - * - * @param obj - * @param expr - * @returns {number} - */ -const $trunc = (obj, expr, options) => { - const arr = (0, core_1.computeValue)(obj, expr, null, options); - const num = arr[0]; - const places = arr[1]; - if ((0, util_1.isNil)(num) || isNaN(num) || Math.abs(num) === Infinity) - return num; - (0, util_1.assert)((0, util_1.isNumber)(num), "$trunc expression must resolve to a number."); - (0, util_1.assert)((0, util_1.isNil)(places) || ((0, util_1.isNumber)(places) && places > -20 && places < 100), "$trunc expression has invalid place"); - return (0, _internal_1.truncate)(num, places, false); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var zip_exports = {}; +__export(zip_exports, { + $zip: () => $zip +}); +module.exports = __toCommonJS(zip_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $zip = (obj, expr, options) => { + const inputs = (0, import_core.computeValue)(obj, expr.inputs, null, options); + const useLongestLength = expr.useLongestLength || false; + if ((0, import_util.isNil)(inputs)) return null; + (0, import_util.assert)((0, import_util.isArray)(inputs), "'inputs' expression must resolve to an array"); + (0, import_util.assert)((0, import_util.isBoolean)(useLongestLength), "'useLongestLength' must be a boolean"); + if ((0, import_util.isArray)(expr.defaults)) { + (0, import_util.assert)( + useLongestLength, + "'useLongestLength' must be set to true to use 'defaults'" + ); + } + let zipCount = 0; + for (const arr of inputs) { + if ((0, import_util.isNil)(arr)) return null; + (0, import_util.assert)( + (0, import_util.isArray)(arr), + "'inputs' expression values must resolve to an array or null" + ); + zipCount = useLongestLength ? Math.max(zipCount, arr.length) : Math.min(zipCount || arr.length, arr.length); + } + const result = []; + const defaults = expr.defaults || []; + for (let i = 0; i < zipCount; i++) { + const temp = inputs.map((val, index) => { + return (0, import_util.isNil)(val[i]) ? defaults[index] || null : val[i]; + }); + result.push(temp); + } + return result; }; -exports.$trunc = $trunc; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5614: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 1172: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Array Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#array-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$arrayElemAt = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Returns the element at the specified array index. - * - * @param {Object} obj - * @param {*} expr - * @return {*} - */ -const $arrayElemAt = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - (0, util_1.assert)(args instanceof Array && args.length === 2, "$arrayElemAt expression must resolve to array(2)"); - if (args.some(util_1.isNil)) - return null; - const index = args[1]; - const arr = args[0]; - if (index < 0 && Math.abs(index) <= arr.length) { - return arr[(index + arr.length) % arr.length]; - } - else if (index >= 0 && index < arr.length) { - return arr[index]; - } - return undefined; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$arrayElemAt = $arrayElemAt; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var internal_exports = {}; +__export(internal_exports, { + bitwise: () => bitwise +}); +module.exports = __toCommonJS(internal_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const bitwise = (op, compute) => (obj, expr, options) => { + (0, import_util.assert)((0, import_util.isArray)(expr), `${op}: expression must be an array.`); + const nums = (0, import_core.computeValue)(obj, expr, null, options); + if (nums.some(import_util.isNil)) return null; + (0, import_util.assert)( + nums.every(import_util.isNumber), + `${op}: expression must evalue to array of numbers.` + ); + return compute(nums); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 608: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 4718: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Array Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#array-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$arrayToObject = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Converts an array of key value pairs to a document. - */ -const $arrayToObject = (obj, expr, options) => { - const arr = (0, core_1.computeValue)(obj, expr, null, options); - (0, util_1.assert)((0, util_1.isArray)(arr), "$arrayToObject expression must resolve to an array"); - return arr.reduce((newObj, val) => { - // flatten - while ((0, util_1.isArray)(val) && val.length === 1) - val = val[0]; - if (val instanceof Array && val.length == 2) { - newObj[val[0]] = val[1]; - } - else { - const valObj = val; - (0, util_1.assert)((0, util_1.isObject)(valObj) && (0, util_1.has)(valObj, "k") && (0, util_1.has)(valObj, "v"), "$arrayToObject expression is invalid."); - newObj[valObj.k] = valObj.v; - } - return newObj; - }, {}); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$arrayToObject = $arrayToObject; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var bitAnd_exports = {}; +__export(bitAnd_exports, { + $bitAnd: () => $bitAnd +}); +module.exports = __toCommonJS(bitAnd_exports); +var import_internal = __webpack_require__(1172); +const $bitAnd = (0, import_internal.bitwise)( + "$bitAnd", + (nums) => nums.reduce((a, b) => a & b, -1) +); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5579: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 3766: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Array Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#array-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$concatArrays = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Concatenates arrays to return the concatenated array. - * - * @param {Object} obj - * @param {*} expr - * @return {*} - */ -const $concatArrays = (obj, expr, options) => { - const arr = (0, core_1.computeValue)(obj, expr, null, options); - (0, util_1.assert)((0, util_1.isArray)(arr), "$concatArrays must resolve to an array"); - if (arr.some(util_1.isNil)) - return null; - return arr.reduce((acc, item) => (0, util_1.into)(acc, item), []); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$concatArrays = $concatArrays; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var bitNot_exports = {}; +__export(bitNot_exports, { + $bitNot: () => $bitNot +}); +module.exports = __toCommonJS(bitNot_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $bitNot = (obj, expr, options) => { + const n = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isNil)(n)) return null; + if ((0, import_util.isNumber)(n)) return ~n; + throw new import_util.MingoError("$bitNot: expression must evaluate to a number."); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 2903: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 5578: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Array Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#array-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$filter = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Selects a subset of the array to return an array with only the elements that match the filter condition. - * - * @param {Object} obj The current document - * @param {*} expr The filter spec - * @return {*} - */ -const $filter = (obj, expr, options) => { - const input = (0, core_1.computeValue)(obj, expr.input, null, options); - (0, util_1.assert)((0, util_1.isArray)(input), "$filter 'input' expression must resolve to an array"); - const copts = core_1.ComputeOptions.init(options, obj); - const k = expr.as || "this"; - const local = { - variables: { [k]: null } - }; - return input.filter((o) => { - local.variables[k] = o; - const b = (0, core_1.computeValue)(obj, expr.cond, null, copts.update(copts.root, local)); - // allow empty strings only in strict MongoDB mode (default). - return (0, util_1.truthy)(b, options.useStrictMode); - }); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$filter = $filter; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var bitOr_exports = {}; +__export(bitOr_exports, { + $bitOr: () => $bitOr +}); +module.exports = __toCommonJS(bitOr_exports); +var import_internal = __webpack_require__(1172); +const $bitOr = (0, import_internal.bitwise)( + "$bitOr", + (nums) => nums.reduce((a, b) => a | b, 0) +); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 9975: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 5938: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Array Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#array-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$first = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -const accumulator_1 = __webpack_require__(3424); -/** - * Returns the first element in an array. - * - * @param {Object} obj - * @param {*} expr - * @return {*} - */ -const $first = (obj, expr, options) => { - const copts = core_1.ComputeOptions.init(options); - if (obj instanceof Array) - return (0, accumulator_1.$first)(obj, expr, copts.update()); - const arr = (0, core_1.computeValue)(obj, expr, null, options); - if ((0, util_1.isNil)(arr)) - return null; - (0, util_1.assert)((0, util_1.isArray)(arr), "Must resolve to an array/null or missing"); - return (0, accumulator_1.$first)(arr, "$$this", options); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -exports.$first = $first; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var bitXor_exports = {}; +__export(bitXor_exports, { + $bitXor: () => $bitXor +}); +module.exports = __toCommonJS(bitXor_exports); +var import_internal = __webpack_require__(1172); +const $bitXor = (0, import_internal.bitwise)( + "$bitXor", + (nums) => nums.reduce((a, b) => a ^ b, 0) +); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 3425: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +/***/ 5148: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var bitwise_exports = {}; +module.exports = __toCommonJS(bitwise_exports); +__reExport(bitwise_exports, __webpack_require__(4718), module.exports); +__reExport(bitwise_exports, __webpack_require__(3766), module.exports); +__reExport(bitwise_exports, __webpack_require__(5578), module.exports); +__reExport(bitwise_exports, __webpack_require__(5938), module.exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); -// https://www.mongodb.com/docs/manual/reference/operator/aggregation/firstN-array-element/#mongodb-expression-exp.-firstN -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$firstN = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -const firstN_1 = __webpack_require__(3445); -/** - * Returns a specified number of elements from the beginning of an array. - * - * @param {Object} obj - * @param {*} expr - * @return {*} - */ -const $firstN = (obj, expr, options) => { - // first try the accumulator if input is an array. - if (obj instanceof Array) - return (0, firstN_1.$firstN)(obj, expr, options); - const { input, n } = (0, core_1.computeValue)(obj, expr, null, options); - if ((0, util_1.isNil)(input)) - return null; - (0, util_1.assert)((0, util_1.isArray)(input), "Must resolve to an array/null or missing"); - return (0, firstN_1.$firstN)(input, { n, input: "$$this" }, options); + +/***/ }), + +/***/ 70: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var and_exports = {}; +__export(and_exports, { + $and: () => $and +}); +module.exports = __toCommonJS(and_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $and = (obj, expr, options) => { + const value = (0, import_core.computeValue)(obj, expr, null, options); + return (0, import_util.truthy)(value, options.useStrictMode) && value.every((v) => (0, import_util.truthy)(v, options.useStrictMode)); }; -exports.$firstN = $firstN; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 7485: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 1703: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Array Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#array-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$in = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Returns a boolean indicating whether a specified value is in an array. - * - * @param {Object} obj - * @param {Array} expr - */ -const $in = (obj, expr, options) => { - const [item, arr] = (0, core_1.computeValue)(obj, expr, null, options); - (0, util_1.assert)((0, util_1.isArray)(arr), "$in second argument must be an array"); - return arr.some(util_1.isEqual.bind(null, item)); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$in = $in; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var boolean_exports = {}; +module.exports = __toCommonJS(boolean_exports); +__reExport(boolean_exports, __webpack_require__(70), module.exports); +__reExport(boolean_exports, __webpack_require__(5950), module.exports); +__reExport(boolean_exports, __webpack_require__(770), module.exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 1613: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; +/***/ 5950: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -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 __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(5614), exports); -__exportStar(__webpack_require__(608), exports); -__exportStar(__webpack_require__(5579), exports); -__exportStar(__webpack_require__(2903), exports); -__exportStar(__webpack_require__(9975), exports); -__exportStar(__webpack_require__(3425), exports); -__exportStar(__webpack_require__(7485), exports); -__exportStar(__webpack_require__(2686), exports); -__exportStar(__webpack_require__(5499), exports); -__exportStar(__webpack_require__(1410), exports); -__exportStar(__webpack_require__(3927), exports); -__exportStar(__webpack_require__(1965), exports); -__exportStar(__webpack_require__(8245), exports); -__exportStar(__webpack_require__(3051), exports); -__exportStar(__webpack_require__(893), exports); -__exportStar(__webpack_require__(9633), exports); -__exportStar(__webpack_require__(2641), exports); -__exportStar(__webpack_require__(1951), exports); -__exportStar(__webpack_require__(5052), exports); -__exportStar(__webpack_require__(5000), exports); -__exportStar(__webpack_require__(5450), exports); -__exportStar(__webpack_require__(7393), exports); - - -/***/ }), - -/***/ 2686: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var not_exports = {}; +__export(not_exports, { + $not: () => $not +}); +module.exports = __toCommonJS(not_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $not = (obj, expr, options) => { + const booleanExpr = (0, import_util.ensureArray)(expr); + if (booleanExpr.length == 0) return false; + (0, import_util.assert)(booleanExpr.length == 1, "Expression $not takes exactly 1 argument"); + return !(0, import_core.computeValue)(obj, booleanExpr[0], null, options); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); -"use strict"; -// Array Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#array-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$indexOfArray = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Searches an array for an occurrence of a specified value and returns the array index of the first occurrence. - * If the substring is not found, returns -1. - * - * @param {Object} obj - * @param {*} expr - * @return {*} - */ -const $indexOfArray = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - if ((0, util_1.isNil)(args)) - return null; - let arr = args[0]; - const searchValue = args[1]; - if ((0, util_1.isNil)(arr)) - return null; - (0, util_1.assert)((0, util_1.isArray)(arr), "$indexOfArray expression must resolve to an array."); - const start = args[2] || 0; - let end = args[3]; - if ((0, util_1.isNil)(end)) - end = arr.length; - if (start > end) - return -1; - (0, util_1.assert)(start >= 0 && end >= 0, "$indexOfArray expression is invalid"); - if (start > 0 || end < arr.length) { - arr = arr.slice(start, end); - } - // Array.prototype.findIndex not supported in IE9 hence this workaround - let index = -1; - arr.some((v, i) => { - const b = (0, util_1.isEqual)(v, searchValue); - if (b) - index = i; - return b; - }); - return index + start; +/***/ }), + +/***/ 770: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$indexOfArray = $indexOfArray; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var or_exports = {}; +__export(or_exports, { + $or: () => $or +}); +module.exports = __toCommonJS(or_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $or = (obj, expr, options) => { + const value = (0, import_core.computeValue)(obj, expr, null, options); + const strict = options.useStrictMode; + return (0, import_util.truthy)(value, strict) && value.some((v) => (0, import_util.truthy)(v, strict)); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5499: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 6460: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Array Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#array-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$isArray = void 0; -const core_1 = __webpack_require__(9587); -/** - * Determines if the operand is an array. Returns a boolean. - * - * @param {Object} obj - * @param {*} expr - * @return {Boolean} - */ -const $isArray = (obj, expr, options) => { - return (0, core_1.computeValue)(obj, expr[0], null, options) instanceof Array; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var cmp_exports = {}; +__export(cmp_exports, { + $cmp: () => $cmp +}); +module.exports = __toCommonJS(cmp_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $cmp = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + (0, import_util.assert)( + (0, import_util.isArray)(args) && args.length == 2, + "$cmp: expression must resolve to array of size 2." + ); + return (0, import_util.compare)(args[0], args[1]); }; -exports.$isArray = $isArray; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 1410: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 1768: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Array Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#array-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$last = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -const accumulator_1 = __webpack_require__(3424); -/** - * Returns the last element in an array. - * - * @param {Object} obj - * @param {*} expr - * @return {*} - */ -const $last = (obj, expr, options) => { - const copts = core_1.ComputeOptions.init(options); - if (obj instanceof Array) - return (0, accumulator_1.$last)(obj, expr, copts.update()); - const arr = (0, core_1.computeValue)(obj, expr, null, options); - if ((0, util_1.isNil)(arr)) - return null; - (0, util_1.assert)((0, util_1.isArray)(arr), "Must resolve to an array/null or missing"); - return (0, accumulator_1.$last)(arr, "$$this", options); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -exports.$last = $last; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var eq_exports = {}; +__export(eq_exports, { + $eq: () => $eq +}); +module.exports = __toCommonJS(eq_exports); +var import_predicates = __webpack_require__(4330); +const $eq = (0, import_predicates.createExpressionOperator)(import_predicates.$eq); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 3927: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 3113: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// https://www.mongodb.com/docs/manual/reference/operator/aggregation/lastN-array-element/#mongodb-expression-exp.-lastN -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$lastN = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -const lastN_1 = __webpack_require__(9799); -/** - * Returns a specified number of elements from the end of an array. - * - * @param {Object} obj - * @param {*} expr - * @return {*} - */ -const $lastN = (obj, expr, options) => { - // first try the accumulator if input is an array. - if (obj instanceof Array) - return (0, lastN_1.$lastN)(obj, expr, options); - const { input, n } = (0, core_1.computeValue)(obj, expr, null, options); - if ((0, util_1.isNil)(input)) - return null; - (0, util_1.assert)((0, util_1.isArray)(input), "Must resolve to an array/null or missing"); - return (0, lastN_1.$lastN)(input, { n, input: "$$this" }, options); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$lastN = $lastN; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var gt_exports = {}; +__export(gt_exports, { + $gt: () => $gt +}); +module.exports = __toCommonJS(gt_exports); +var import_predicates = __webpack_require__(4330); +const $gt = (0, import_predicates.createExpressionOperator)(import_predicates.$gt); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 1965: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 9530: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Array Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#array-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$map = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Applies a sub-expression to each element of an array and returns the array of resulting values in order. - * - * @param obj - * @param expr - * @returns {Array|*} - */ -const $map = (obj, expr, options) => { - const input = (0, core_1.computeValue)(obj, expr.input, null, options); - (0, util_1.assert)((0, util_1.isArray)(input), `$map 'input' expression must resolve to an array`); - const copts = core_1.ComputeOptions.init(options); - const k = expr.as || "this"; - return input.map((o) => { - return (0, core_1.computeValue)(obj, expr.in, null, copts.update(copts.root, { - variables: { [k]: o } - })); - }); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -exports.$map = $map; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var gte_exports = {}; +__export(gte_exports, { + $gte: () => $gte +}); +module.exports = __toCommonJS(gte_exports); +var import_predicates = __webpack_require__(4330); +const $gte = (0, import_predicates.createExpressionOperator)(import_predicates.$gte); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8245: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 3336: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// https://www.mongodb.com/docs/manual/reference/operator/aggregation/maxN-array-element/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$maxN = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -const maxN_1 = __webpack_require__(8542); -/** - * Returns the n largest values in an array. - * - * @param {Object} obj - * @param {*} expr - * @return {*} - */ -const $maxN = (obj, expr, options) => { - // first try the accumulator if input is an array. - if (obj instanceof Array) - return (0, maxN_1.$maxN)(obj, expr, options); - const { input, n } = (0, core_1.computeValue)(obj, expr, null, options); - if ((0, util_1.isNil)(input)) - return null; - (0, util_1.assert)((0, util_1.isArray)(input), "Must resolve to an array/null or missing"); - return (0, maxN_1.$maxN)(input, { n, input: "$$this" }, options); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$maxN = $maxN; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var comparison_exports = {}; +module.exports = __toCommonJS(comparison_exports); +__reExport(comparison_exports, __webpack_require__(6460), module.exports); +__reExport(comparison_exports, __webpack_require__(1768), module.exports); +__reExport(comparison_exports, __webpack_require__(3113), module.exports); +__reExport(comparison_exports, __webpack_require__(9530), module.exports); +__reExport(comparison_exports, __webpack_require__(6646), module.exports); +__reExport(comparison_exports, __webpack_require__(7887), module.exports); +__reExport(comparison_exports, __webpack_require__(3515), module.exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 3051: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 6646: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// https://www.mongodb.com/docs/manual/reference/operator/aggregation/minN-array-element/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$minN = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -const minN_1 = __webpack_require__(3946); -/** - * Returns the n smallest values in an array. - * - * @param {Object} obj - * @param {*} expr - * @return {*} - */ -const $minN = (obj, expr, options) => { - // first try the accumulator if input is an array. - if (obj instanceof Array) - return (0, minN_1.$minN)(obj, expr, options); - const { input, n } = (0, core_1.computeValue)(obj, expr, null, options); - if ((0, util_1.isNil)(input)) - return null; - (0, util_1.assert)((0, util_1.isArray)(input), "Must resolve to an array/null or missing"); - return (0, minN_1.$minN)(input, { n, input: "$$this" }, options); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$minN = $minN; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var lt_exports = {}; +__export(lt_exports, { + $lt: () => $lt +}); +module.exports = __toCommonJS(lt_exports); +var import_predicates = __webpack_require__(4330); +const $lt = (0, import_predicates.createExpressionOperator)(import_predicates.$lt); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 893: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 7887: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Array Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#array-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$nin = void 0; -const _predicates_1 = __webpack_require__(4414); -/** - * Returns a boolean indicating whether a specified value is not an array. - * Note: This expression operator is missing from the documentation - * - * @param {Object} obj - * @param {Array} expr - */ -exports.$nin = (0, _predicates_1.createExpressionOperator)(_predicates_1.$nin); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var lte_exports = {}; +__export(lte_exports, { + $lte: () => $lte +}); +module.exports = __toCommonJS(lte_exports); +var import_predicates = __webpack_require__(4330); +const $lte = (0, import_predicates.createExpressionOperator)(import_predicates.$lte); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 9633: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 3515: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Array Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#array-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$range = void 0; -const core_1 = __webpack_require__(9587); -/** - * Returns an array whose elements are a generated sequence of numbers. - * - * @param {Object} obj - * @param {*} expr - * @return {*} - */ -const $range = (obj, expr, options) => { - const arr = (0, core_1.computeValue)(obj, expr, null, options); - const start = arr[0]; - const end = arr[1]; - const step = arr[2] || 1; - const result = new Array(); - let counter = start; - while ((counter < end && step > 0) || (counter > end && step < 0)) { - result.push(counter); - counter += step; - } - return result; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$range = $range; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var ne_exports = {}; +__export(ne_exports, { + $ne: () => $ne +}); +module.exports = __toCommonJS(ne_exports); +var import_predicates = __webpack_require__(4330); +const $ne = (0, import_predicates.createExpressionOperator)(import_predicates.$ne); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 2641: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 6343: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Array Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#array-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$reduce = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Applies an expression to each element in an array and combines them into a single value. - * - * @param {Object} obj - * @param {*} expr - */ -const $reduce = (obj, expr, options) => { - const copts = core_1.ComputeOptions.init(options); - const input = (0, core_1.computeValue)(obj, expr.input, null, copts); - const initialValue = (0, core_1.computeValue)(obj, expr.initialValue, null, copts); - const inExpr = expr["in"]; - if ((0, util_1.isNil)(input)) - return null; - (0, util_1.assert)((0, util_1.isArray)(input), "$reduce 'input' expression must resolve to an array"); - return input.reduce((acc, n) => { - return (0, core_1.computeValue)(n, inExpr, null, copts.update(copts.root, { - variables: { value: acc } - })); - }, initialValue); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -exports.$reduce = $reduce; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var cond_exports = {}; +__export(cond_exports, { + $cond: () => $cond +}); +module.exports = __toCommonJS(cond_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $cond = (obj, expr, options) => { + let ifExpr; + let thenExpr; + let elseExpr; + const errorMsg = "$cond: invalid arguments"; + if ((0, import_util.isArray)(expr)) { + (0, import_util.assert)(expr.length === 3, errorMsg); + ifExpr = expr[0]; + thenExpr = expr[1]; + elseExpr = expr[2]; + } else { + (0, import_util.assert)((0, import_util.isObject)(expr), errorMsg); + ifExpr = expr.if; + thenExpr = expr.then; + elseExpr = expr.else; + } + const condition = (0, import_util.truthy)( + (0, import_core.computeValue)(obj, ifExpr, null, options), + options.useStrictMode + ); + return (0, import_core.computeValue)(obj, condition ? thenExpr : elseExpr, null, options); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 1951: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 3653: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Array Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#array-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$reverseArray = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Returns an array with the elements in reverse order. - * - * @param {Object} obj - * @param {*} expr - * @return {*} - */ -const $reverseArray = (obj, expr, options) => { - const arr = (0, core_1.computeValue)(obj, expr, null, options); - if ((0, util_1.isNil)(arr)) - return null; - (0, util_1.assert)((0, util_1.isArray)(arr), "$reverseArray expression must resolve to an array"); - const result = arr.slice(0); - result.reverse(); - return result; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var ifNull_exports = {}; +__export(ifNull_exports, { + $ifNull: () => $ifNull +}); +module.exports = __toCommonJS(ifNull_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $ifNull = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + return args.find((arg) => !(0, import_util.isNil)(arg)) ?? args[args.length - 1]; }; -exports.$reverseArray = $reverseArray; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5052: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 5459: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Array Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#array-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$size = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Counts and returns the total the number of items in an array. - * - * @param obj - * @param expr - */ -const $size = (obj, expr, options) => { - const value = (0, core_1.computeValue)(obj, expr, null, options); - return (0, util_1.isArray)(value) ? value.length : undefined; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$size = $size; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var conditional_exports = {}; +module.exports = __toCommonJS(conditional_exports); +__reExport(conditional_exports, __webpack_require__(6343), module.exports); +__reExport(conditional_exports, __webpack_require__(3653), module.exports); +__reExport(conditional_exports, __webpack_require__(4739), module.exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5000: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 4739: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Array Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#array-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$slice = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Returns a subset of an array. - * - * @param {Object} obj - * @param {*} expr - * @return {*} - */ -const $slice = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - const arr = args[0]; - let skip = args[1]; - let limit = args[2]; - // MongoDB $slice works a bit differently from Array.slice - // Uses single argument for 'limit' and array argument [skip, limit] - if ((0, util_1.isNil)(limit)) { - if (skip < 0) { - skip = Math.max(0, arr.length + skip); - limit = arr.length - skip + 1; - } - else { - limit = skip; - skip = 0; - } - } - else { - if (skip < 0) { - skip = Math.max(0, arr.length + skip); - } - (0, util_1.assert)(limit > 0, `Invalid argument for $slice operator. Limit must be a positive number`); - limit += skip; - } - return arr.slice(skip, limit); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$slice = $slice; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var switch_exports = {}; +__export(switch_exports, { + $switch: () => $switch +}); +module.exports = __toCommonJS(switch_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $switch = (obj, expr, options) => { + let thenExpr = null; + expr.branches.some((b) => { + const condition = (0, import_util.truthy)( + (0, import_core.computeValue)(obj, b.case, null, options), + options.useStrictMode + ); + if (condition) thenExpr = b.then; + return condition; + }); + return (0, import_core.computeValue)( + obj, + thenExpr !== null ? thenExpr : expr.default, + null, + options + ); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5450: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 3388: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// https://www.mongodb.com/docs/manual/reference/operator/aggregation/sortArray/#mongodb-expression-exp.-sortArray -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$sortArray = void 0; -const aggregator_1 = __webpack_require__(7268); -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Sorts an array based on its elements. The sort order is user specified. - * - * @param obj The target object - * @param expr The expression argument - * @param options Options - * @returns - */ -const $sortArray = (obj, expr, options) => { - const { input, sortBy } = (0, core_1.computeValue)(obj, expr, null, options); - if ((0, util_1.isNil)(input)) - return null; - (0, util_1.assert)((0, util_1.isArray)(input), "$sortArray expression must resolve to an array"); - if ((0, util_1.isObject)(sortBy)) { - return new aggregator_1.Aggregator([{ $sort: sortBy }]).run(input); - } - const result = [...input]; - result.sort(util_1.compare); - if (sortBy === -1) - result.reverse(); - return result; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var function_exports = {}; +__export(function_exports, { + $function: () => $function +}); +module.exports = __toCommonJS(function_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $function = (obj, expr, options) => { + (0, import_util.assert)( + options.scriptEnabled, + "$function operator requires 'scriptEnabled' option to be true" + ); + const fn = (0, import_core.computeValue)(obj, expr, null, options); + return fn.body.apply(null, fn.args); }; -exports.$sortArray = $sortArray; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 7393: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 6518: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Array Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#array-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$zip = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Merge two lists together. - * - * Transposes an array of input arrays so that the first element of the output array would be an array containing, - * the first element of the first input array, the first element of the second input array, etc. - * - * @param {Obj} obj - * @param {*} expr - * @return {*} - */ -const $zip = (obj, expr, options) => { - const inputs = (0, core_1.computeValue)(obj, expr.inputs, null, options); - const useLongestLength = expr.useLongestLength || false; - (0, util_1.assert)((0, util_1.isArray)(inputs), "'inputs' expression must resolve to an array"); - (0, util_1.assert)((0, util_1.isBoolean)(useLongestLength), "'useLongestLength' must be a boolean"); - if ((0, util_1.isArray)(expr.defaults)) { - (0, util_1.assert)(useLongestLength, "'useLongestLength' must be set to true to use 'defaults'"); - } - let zipCount = 0; - for (let i = 0, len = inputs.length; i < len; i++) { - const arr = inputs[i]; - if ((0, util_1.isNil)(arr)) - return null; - (0, util_1.assert)((0, util_1.isArray)(arr), "'inputs' expression values must resolve to an array or null"); - zipCount = useLongestLength - ? Math.max(zipCount, arr.length) - : Math.min(zipCount || arr.length, arr.length); - } - const result = []; - const defaults = expr.defaults || []; - for (let i = 0; i < zipCount; i++) { - const temp = inputs.map((val, index) => { - return (0, util_1.isNil)(val[i]) ? defaults[index] || null : val[i]; - }); - result.push(temp); - } - return result; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$zip = $zip; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var custom_exports = {}; +module.exports = __toCommonJS(custom_exports); +__reExport(custom_exports, __webpack_require__(3388), module.exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 6635: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 1277: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Boolean Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#boolean-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$and = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Returns true only when all its expressions evaluate to true. Accepts any number of argument expressions. - * - * @param obj - * @param expr - * @returns {boolean} - */ -const $and = (obj, expr, options) => { - const value = (0, core_1.computeValue)(obj, expr, null, options); - return ((0, util_1.truthy)(value, options.useStrictMode) && - value.every(v => (0, util_1.truthy)(v, options.useStrictMode))); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var internal_exports = {}; +__export(internal_exports, { + DATE_FORMAT: () => DATE_FORMAT, + DATE_PART_INTERVAL: () => DATE_PART_INTERVAL, + DATE_SYM_TABLE: () => DATE_SYM_TABLE, + DAYS_OF_WEEK: () => DAYS_OF_WEEK, + DAYS_OF_WEEK_SET: () => DAYS_OF_WEEK_SET, + DAYS_PER_WEEK: () => DAYS_PER_WEEK, + LEAP_YEAR_REF_POINT: () => LEAP_YEAR_REF_POINT, + MILLIS_PER_DAY: () => MILLIS_PER_DAY, + MINUTES_PER_HOUR: () => MINUTES_PER_HOUR, + TIMEUNIT_IN_MILLIS: () => TIMEUNIT_IN_MILLIS, + adjustDate: () => adjustDate, + computeDate: () => computeDate, + dateAdd: () => dateAdd, + dateDiffDay: () => dateDiffDay, + dateDiffHour: () => dateDiffHour, + dateDiffMonth: () => dateDiffMonth, + dateDiffQuarter: () => dateDiffQuarter, + dateDiffWeek: () => dateDiffWeek, + dateDiffYear: () => dateDiffYear, + dayOfYear: () => dayOfYear, + daysBetweenYears: () => daysBetweenYears, + daysInMonth: () => daysInMonth, + daysInYear: () => daysInYear, + formatTimezone: () => formatTimezone, + isLeapYear: () => isLeapYear, + isoWeek: () => isoWeek, + isoWeekYear: () => isoWeekYear, + isoWeekday: () => isoWeekday, + padDigits: () => padDigits, + parseTimezone: () => parseTimezone +}); +module.exports = __toCommonJS(internal_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const LEAP_YEAR_REF_POINT = -1e9; +const DAYS_PER_WEEK = 7; +const isLeapYear = (y) => (y & 3) == 0 && (y % 100 != 0 || y % 400 == 0); +const DAYS_IN_YEAR = [ + 365, + 366 + /*leap*/ +]; +const daysInYear = (year) => DAYS_IN_YEAR[+isLeapYear(year)]; +const DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; +const daysInMonth = (d) => DAYS_IN_MONTH[d.getUTCMonth()] + Number( + d.getUTCMonth() === 1 && isLeapYear(d.getUTCFullYear()) +); +const YEAR_DAYS_OFFSET = [ + [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], + [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335] + /*leap*/ +]; +const dayOfYear = (d) => YEAR_DAYS_OFFSET[+isLeapYear(d.getUTCFullYear())][d.getUTCMonth()] + d.getUTCDate(); +const isoWeekday = (date, startOfWeek = "sun") => { + const dow = date.getUTCDay() || 7; + return (dow - ISO_WEEKDAY_MAP[startOfWeek] + DAYS_PER_WEEK) % DAYS_PER_WEEK; +}; +const p = (y) => (y + Math.floor(y / 4) - Math.floor(y / 100) + Math.floor(y / 400)) % 7; +const weeks = (y) => 52 + Number(p(y) == 4 || p(y - 1) == 3); +function isoWeek(d) { + const dow = d.getUTCDay() || 7; + const w = Math.floor((10 + dayOfYear(d) - dow) / 7); + if (w < 1) return weeks(d.getUTCFullYear() - 1); + if (w > weeks(d.getUTCFullYear())) return 1; + return w; +} +function isoWeekYear(d) { + return d.getUTCFullYear() - Number(d.getUTCMonth() === 0 && d.getUTCDate() == 1 && d.getUTCDay() < 1); +} +const MINUTES_PER_HOUR = 60; +const MILLIS_PER_DAY = 1e3 * 60 * 60 * 24; +const TIMEUNIT_IN_MILLIS = { + week: MILLIS_PER_DAY * DAYS_PER_WEEK, + day: MILLIS_PER_DAY, + hour: 1e3 * 60 * 60, + minute: 1e3 * 60, + second: 1e3, + millisecond: 1 +}; +const DAYS_OF_WEEK = [ + "monday", + "mon", + "tuesday", + "tue", + "wednesday", + "wed", + "thursday", + "thu", + "friday", + "fri", + "saturday", + "sat", + "sunday", + "sun" +]; +const DAYS_OF_WEEK_SET = new Set(DAYS_OF_WEEK); +const ISO_WEEKDAY_MAP = Object.freeze({ + mon: 1, + tue: 2, + wed: 3, + thu: 4, + fri: 5, + sat: 6, + sun: 7 +}); +const DATE_FORMAT = "%Y-%m-%dT%H:%M:%S.%LZ"; +const DATE_PART_INTERVAL = [ + ["year", 0, 9999], + ["month", 1, 12], + ["day", 1, 31], + ["hour", 0, 23], + ["minute", 0, 59], + ["second", 0, 59], + ["millisecond", 0, 999] +]; +const DATE_SYM_TABLE = Object.freeze({ + "%Y": { name: "year", padding: 4, re: /([0-9]{4})/ }, + "%G": { name: "year", padding: 4, re: /([0-9]{4})/ }, + "%m": { name: "month", padding: 2, re: /(0[1-9]|1[012])/ }, + "%d": { name: "day", padding: 2, re: /(0[1-9]|[12][0-9]|3[01])/ }, + "%H": { name: "hour", padding: 2, re: /([01][0-9]|2[0-3])/ }, + "%M": { name: "minute", padding: 2, re: /([0-5][0-9])/ }, + "%S": { name: "second", padding: 2, re: /([0-5][0-9]|60)/ }, + "%L": { name: "millisecond", padding: 3, re: /([0-9]{3})/ }, + "%u": { name: "weekday", padding: 1, re: /([1-7])/ }, + "%U": { name: "week", padding: 2, re: /([1-4][0-9]?|5[0-3]?)/ }, + "%V": { name: "isoWeek", padding: 2, re: /([1-4][0-9]?|5[0-3]?)/ }, + "%z": { + name: "timezone", + padding: 2, + re: /(([+-][01][0-9]|2[0-3]):?([0-5][0-9])?)/ + }, + "%Z": { name: "minuteOffset", padding: 3, re: /([+-][0-9]{3})/ } + // "%%": "%", +}); +const TIMEZONE_RE = /^[a-zA-Z_]+\/[a-zA-Z_]+$/; +function parseTimezone(tzstr) { + if ((0, import_util.isNil)(tzstr)) return 0; + if (TIMEZONE_RE.test(tzstr)) { + const date = /* @__PURE__ */ new Date(); + const utcDate = new Date(date.toLocaleString("en-US", { timeZone: "UTC" })); + const tzDate = new Date(date.toLocaleString("en-US", { timeZone: tzstr })); + return (tzDate.getTime() - utcDate.getTime()) / 6e4; + } + const m = DATE_SYM_TABLE["%z"].re.exec(tzstr); + if (!m) { + throw new import_util.MingoError(`Timezone '${tzstr}' is invalid or not supported`); + } + const hr = parseInt(m[2]) || 0; + const min = parseInt(m[3]) || 0; + return (Math.abs(hr * MINUTES_PER_HOUR) + min) * (hr < 0 ? -1 : 1); +} +function formatTimezone(minuteOffset) { + return (minuteOffset < 0 ? "-" : "+") + padDigits(Math.abs(Math.floor(minuteOffset / MINUTES_PER_HOUR)), 2) + padDigits(Math.abs(minuteOffset) % MINUTES_PER_HOUR, 2); +} +function adjustDate(d, minuteOffset) { + d.setUTCMinutes(d.getUTCMinutes() + minuteOffset); +} +function computeDate(obj, expr, options) { + if ((0, import_util.isDate)(obj)) return obj; + const d = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isDate)(d)) return new Date(d); + if ((0, import_util.isNumber)(d)) return new Date(d * 1e3); + if (d.date) { + const date = (0, import_util.isDate)(d.date) ? new Date(d.date) : new Date(d.date * 1e3); + if (d.timezone) { + adjustDate(date, parseTimezone(d.timezone)); + } + return date; + } + throw Error(`cannot convert ${JSON.stringify(expr)} to date`); +} +function padDigits(n, digits) { + return new Array(Math.max(digits - String(n).length + 1, 0)).join("0") + n.toString(); +} +const leapYearsSinceReferencePoint = (year) => { + const yearsSinceReferencePoint = year - LEAP_YEAR_REF_POINT; + return Math.trunc(yearsSinceReferencePoint / 4) - Math.trunc(yearsSinceReferencePoint / 100) + Math.trunc(yearsSinceReferencePoint / 400); +}; +function daysBetweenYears(startYear, endYear) { + return Math.trunc( + leapYearsSinceReferencePoint(endYear - 1) - leapYearsSinceReferencePoint(startYear - 1) + (endYear - startYear) * DAYS_IN_YEAR[0] + ); +} +const dateDiffYear = (start, end) => end.getUTCFullYear() - start.getUTCFullYear(); +const dateDiffMonth = (start, end) => end.getUTCMonth() - start.getUTCMonth() + dateDiffYear(start, end) * 12; +const dateDiffQuarter = (start, end) => { + const a = Math.trunc(start.getUTCMonth() / 3); + const b = Math.trunc(end.getUTCMonth() / 3); + return b - a + dateDiffYear(start, end) * 4; +}; +const dateDiffDay = (start, end) => dayOfYear(end) - dayOfYear(start) + daysBetweenYears(start.getUTCFullYear(), end.getUTCFullYear()); +const dateDiffWeek = (start, end, startOfWeek) => { + const wk = (startOfWeek || "sun").substring(0, 3); + return Math.trunc( + (dateDiffDay(start, end) + isoWeekday(start, wk) - isoWeekday(end, wk)) / DAYS_PER_WEEK + ); +}; +const dateDiffHour = (start, end) => end.getUTCHours() - start.getUTCHours() + dateDiffDay(start, end) * 24; +const addMonth = (d, amount) => { + const m = d.getUTCMonth() + amount; + const yearOffset = Math.floor(m / 12); + if (m < 0) { + const month = m % 12 + 12; + d.setUTCFullYear(d.getUTCFullYear() + yearOffset, month, d.getUTCDate()); + } else { + d.setUTCFullYear(d.getUTCFullYear() + yearOffset, m % 12, d.getUTCDate()); + } +}; +const dateAdd = (date, unit, amount, _timezone) => { + const d = new Date(date); + switch (unit) { + case "year": + d.setUTCFullYear(d.getUTCFullYear() + amount); + break; + case "quarter": + addMonth(d, 3 * amount); + break; + case "month": + addMonth(d, amount); + break; + default: + d.setTime(d.getTime() + TIMEUNIT_IN_MILLIS[unit] * amount); + } + return d; }; -exports.$and = $and; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 628: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; +/***/ 8410: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -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 __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(6635), exports); -__exportStar(__webpack_require__(2560), exports); -__exportStar(__webpack_require__(497), exports); +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var dateAdd_exports = {}; +__export(dateAdd_exports, { + $dateAdd: () => $dateAdd +}); +module.exports = __toCommonJS(dateAdd_exports); +var import_core = __webpack_require__(2760); +var import_internal = __webpack_require__(1277); +const $dateAdd = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + return (0, import_internal.dateAdd)(args.startDate, args.unit, args.amount, args.timezone); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 2560: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 9178: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Boolean Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#boolean-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$not = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Returns the boolean value that is the opposite of its argument expression. Accepts a single argument expression. - * - * @param obj RawObject from collection - * @param expr Right hand side expression of operator - * @returns {boolean} - */ -const $not = (obj, expr, options) => { - const booleanExpr = (0, util_1.ensureArray)(expr); - // array values are truthy so an emty array is false - if (booleanExpr.length == 0) - return false; - // use provided value non-array value - if (booleanExpr.length == 1) - return !(0, core_1.computeValue)(obj, booleanExpr[0], null, options); - // expects a single argument - throw "Expression $not takes exactly 1 argument"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var dateDiff_exports = {}; +__export(dateDiff_exports, { + $dateDiff: () => $dateDiff +}); +module.exports = __toCommonJS(dateDiff_exports); +var import_core = __webpack_require__(2760); +var import_internal = __webpack_require__(1277); +const $dateDiff = (obj, expr, options) => { + const { startDate, endDate, unit, timezone, startOfWeek } = (0, import_core.computeValue)( + obj, + expr, + null, + options + ); + const d1 = new Date(startDate); + const d2 = new Date(endDate); + const minuteOffset = (0, import_internal.parseTimezone)(timezone); + (0, import_internal.adjustDate)(d1, minuteOffset); + (0, import_internal.adjustDate)(d2, minuteOffset); + switch (unit) { + case "year": + return (0, import_internal.dateDiffYear)(d1, d2); + case "quarter": + return (0, import_internal.dateDiffQuarter)(d1, d2); + case "month": + return (0, import_internal.dateDiffMonth)(d1, d2); + case "week": + return (0, import_internal.dateDiffWeek)(d1, d2, startOfWeek); + case "day": + return (0, import_internal.dateDiffDay)(d1, d2); + case "hour": + return (0, import_internal.dateDiffHour)(d1, d2); + case "minute": + d1.setUTCSeconds(0); + d1.setUTCMilliseconds(0); + d2.setUTCSeconds(0); + d2.setUTCMilliseconds(0); + return Math.round( + (d2.getTime() - d1.getTime()) / import_internal.TIMEUNIT_IN_MILLIS[unit] + ); + default: + return Math.round( + (d2.getTime() - d1.getTime()) / import_internal.TIMEUNIT_IN_MILLIS[unit] + ); + } }; -exports.$not = $not; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 497: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 611: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Boolean Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#boolean-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$or = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Returns true when any of its expressions evaluates to true. Accepts any number of argument expressions. - * - * @param obj - * @param expr - * @returns {boolean} - */ -const $or = (obj, expr, options) => { - const value = (0, core_1.computeValue)(obj, expr, null, options); - const strict = options.useStrictMode; - return (0, util_1.truthy)(value, strict) && value.some(v => (0, util_1.truthy)(v, strict)); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$or = $or; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var dateFromParts_exports = {}; +__export(dateFromParts_exports, { + $dateFromParts: () => $dateFromParts +}); +module.exports = __toCommonJS(dateFromParts_exports); +var import_core = __webpack_require__(2760); +var import_internal = __webpack_require__(1277); +const DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; +const getDaysInMonth = (date) => { + return date.month == 2 && (0, import_internal.isLeapYear)(date.year) ? 29 : DAYS_IN_MONTH[date.month - 1]; +}; +const $dateFromParts = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + const minuteOffset = (0, import_internal.parseTimezone)(args.timezone); + for (let i = import_internal.DATE_PART_INTERVAL.length - 1, remainder = 0; i >= 0; i--) { + const datePartInterval = import_internal.DATE_PART_INTERVAL[i]; + const k = datePartInterval[0]; + const min = datePartInterval[1]; + const max = datePartInterval[2]; + let part = (args[k] || 0) + remainder; + remainder = 0; + const limit = max + 1; + if (k == "hour") part += Math.floor(minuteOffset / import_internal.MINUTES_PER_HOUR) * -1; + if (k == "minute") part += minuteOffset % import_internal.MINUTES_PER_HOUR * -1; + if (part < min) { + const delta = min - part; + remainder = -1 * Math.ceil(delta / limit); + part = limit - delta % limit; + } else if (part > max) { + part += min; + remainder = Math.trunc(part / limit); + part %= limit; + } + args[k] = part; + } + args.day = Math.min(args.day, getDaysInMonth(args)); + return new Date( + Date.UTC( + args.year, + args.month - 1, + args.day, + args.hour, + args.minute, + args.second, + args.millisecond + ) + ); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 9543: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 5268: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Comparison Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#comparison-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$cmp = void 0; -const core_1 = __webpack_require__(9587); -/** - * Compares two values and returns the result of the comparison as an integer. - * - * @param obj - * @param expr - * @returns {number} - */ -const $cmp = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - if (args[0] > args[1]) - return 1; - if (args[0] < args[1]) - return -1; - return 0; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var dateFromString_exports = {}; +__export(dateFromString_exports, { + $dateFromString: () => $dateFromString +}); +module.exports = __toCommonJS(dateFromString_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +var import_internal = __webpack_require__(1277); +const buildMap = (letters, sign) => { + const h = {}; + letters.split("").forEach((v, i) => h[v] = sign * (i + 1)); + return h; +}; +const TZ_LETTER_OFFSETS = { + ...buildMap("ABCDEFGHIKLM", 1), + ...buildMap("NOPQRSTUVWXY", -1), + Z: 0 +}; +const regexStrip = (s) => s.replace(/^\//, "").replace(/\/$/, ""); +const REGEX_SPECIAL_CHARS = ["^", ".", "-", "*", "?", "$"]; +const regexQuote = (s) => { + REGEX_SPECIAL_CHARS.forEach((c) => { + s = s.replace(c, `\\${c}`); + }); + return s; +}; +const $dateFromString = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + args.format = args.format || import_internal.DATE_FORMAT; + args.onNull = args.onNull || null; + let dateString = args.dateString; + if ((0, import_util.isNil)(dateString)) return args.onNull; + const separators = args.format.split(/%[YGmdHMSLuVzZ]/); + separators.reverse(); + const matches = args.format.match( + /(%%|%Y|%G|%m|%d|%H|%M|%S|%L|%u|%V|%z|%Z)/g + ); + const dateParts = {}; + let expectedPattern = ""; + for (let i = 0, len = matches.length; i < len; i++) { + const formatSpecifier = matches[i]; + const props = import_internal.DATE_SYM_TABLE[formatSpecifier]; + if ((0, import_util.isObject)(props)) { + const m2 = props.re.exec(dateString); + const delimiter = separators.pop() || ""; + if (m2 !== null) { + dateParts[props.name] = /^\d+$/.exec(m2[0]) ? parseInt(m2[0]) : m2[0]; + dateString = dateString.substr(0, m2.index) + dateString.substr(m2.index + m2[0].length); + expectedPattern += regexQuote(delimiter) + regexStrip(props.re.toString()); + } else { + dateParts[props.name] = null; + } + } + } + if ((0, import_util.isNil)(dateParts.year) || (0, import_util.isNil)(dateParts.month) || (0, import_util.isNil)(dateParts.day) || !new RegExp("^" + expectedPattern + "[A-Z]?$").exec(args.dateString)) { + return args.onError; + } + const m = args.dateString.match(/([A-Z])$/); + (0, import_util.assert)( + // only one of in-date timeone or timezone argument but not both. + !(m && args.timezone), + `$dateFromString: you cannot pass in a date/time string with time zone information ('${m && m[0]}') together with a timezone argument` + ); + const minuteOffset = m ? TZ_LETTER_OFFSETS[m[0]] * import_internal.MINUTES_PER_HOUR : (0, import_internal.parseTimezone)(args.timezone); + const d = new Date( + Date.UTC(dateParts.year, dateParts.month - 1, dateParts.day, 0, 0, 0) + ); + if (!(0, import_util.isNil)(dateParts.hour)) d.setUTCHours(dateParts.hour); + if (!(0, import_util.isNil)(dateParts.minute)) d.setUTCMinutes(dateParts.minute); + if (!(0, import_util.isNil)(dateParts.second)) d.setUTCSeconds(dateParts.second); + if (!(0, import_util.isNil)(dateParts.millisecond)) + d.setUTCMilliseconds(dateParts.millisecond); + (0, import_internal.adjustDate)(d, -minuteOffset); + return d; }; -exports.$cmp = $cmp; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5495: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 5817: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Comparison Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#comparison-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$eq = void 0; -const _predicates_1 = __webpack_require__(4414); -/** - * Matches values that are equal to a specified value. - */ -exports.$eq = (0, _predicates_1.createExpressionOperator)(_predicates_1.$eq); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var dateSubtract_exports = {}; +__export(dateSubtract_exports, { + $dateSubtract: () => $dateSubtract +}); +module.exports = __toCommonJS(dateSubtract_exports); +var import_core = __webpack_require__(2760); +var import_dateAdd = __webpack_require__(8410); +const $dateSubtract = (obj, expr, options) => { + const amount = (0, import_core.computeValue)(obj, expr?.amount, null, options); + return (0, import_dateAdd.$dateAdd)(obj, { ...expr, amount: -1 * amount }, options); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 2005: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 112: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Comparison Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#comparison-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$gt = void 0; -const _predicates_1 = __webpack_require__(4414); -/** - * Matches values that are greater than a specified value. - */ -exports.$gt = (0, _predicates_1.createExpressionOperator)(_predicates_1.$gt); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var dateToParts_exports = {}; +__export(dateToParts_exports, { + $dateToParts: () => $dateToParts +}); +module.exports = __toCommonJS(dateToParts_exports); +var import_core = __webpack_require__(2760); +var import_internal = __webpack_require__(1277); +const $dateToParts = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + const d = new Date(args.date); + const tz = (0, import_internal.parseTimezone)(args.timezone); + (0, import_internal.adjustDate)(d, tz); + const timePart = { + hour: d.getUTCHours(), + minute: d.getUTCMinutes(), + second: d.getUTCSeconds(), + millisecond: d.getUTCMilliseconds() + }; + if (args.iso8601 == true) { + return Object.assign(timePart, { + isoWeekYear: (0, import_internal.isoWeekYear)(d), + isoWeek: (0, import_internal.isoWeek)(d), + isoDayOfWeek: d.getUTCDay() || 7 + }); + } + return Object.assign(timePart, { + year: d.getUTCFullYear(), + month: d.getUTCMonth() + 1, + day: d.getUTCDate() + }); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 9070: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 7165: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Comparison Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#comparison-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$gte = void 0; -const _predicates_1 = __webpack_require__(4414); -/** - * Matches values that are greater than or equal to a specified value. - */ -exports.$gte = (0, _predicates_1.createExpressionOperator)(_predicates_1.$gte); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var dateToString_exports = {}; +__export(dateToString_exports, { + $dateToString: () => $dateToString +}); +module.exports = __toCommonJS(dateToString_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +var import_internal = __webpack_require__(1277); +var import_dayOfMonth = __webpack_require__(2470); +var import_hour = __webpack_require__(4067); +var import_isoDayOfWeek = __webpack_require__(1125); +var import_isoWeek = __webpack_require__(612); +var import_millisecond = __webpack_require__(7216); +var import_minute = __webpack_require__(949); +var import_month = __webpack_require__(7711); +var import_second = __webpack_require__(9549); +var import_week = __webpack_require__(2813); +var import_year = __webpack_require__(2880); +const DATE_FUNCTIONS = { + "%Y": import_year.$year, + "%G": import_year.$year, + "%m": import_month.$month, + "%d": import_dayOfMonth.$dayOfMonth, + "%H": import_hour.$hour, + "%M": import_minute.$minute, + "%S": import_second.$second, + "%L": import_millisecond.$millisecond, + "%u": import_isoDayOfWeek.$isoDayOfWeek, + "%U": import_week.$week, + "%V": import_isoWeek.$isoWeek +}; +const $dateToString = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isNil)(args.onNull)) args.onNull = null; + if ((0, import_util.isNil)(args.date)) return args.onNull; + const date = (0, import_internal.computeDate)(obj, args.date, options); + let format = args.format || import_internal.DATE_FORMAT; + const minuteOffset = (0, import_internal.parseTimezone)(args.timezone); + const matches = format.match(/(%%|%Y|%G|%m|%d|%H|%M|%S|%L|%u|%U|%V|%z|%Z)/g); + (0, import_internal.adjustDate)(date, minuteOffset); + for (let i = 0, len = matches.length; i < len; i++) { + const formatSpecifier = matches[i]; + const props = import_internal.DATE_SYM_TABLE[formatSpecifier]; + const operatorFn = DATE_FUNCTIONS[formatSpecifier]; + let value; + if ((0, import_util.isObject)(props)) { + if (props.name === "timezone") { + value = (0, import_internal.formatTimezone)(minuteOffset); + } else if (props.name === "minuteOffset") { + value = minuteOffset.toString(); + } else { + (0, import_util.assert)( + !!operatorFn, + `unsupported date format specifier '${formatSpecifier}'` + ); + value = (0, import_internal.padDigits)(operatorFn(obj, date, options), props.padding); + } + } + format = format.replace(formatSpecifier, value); + } + return format; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 4591: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; +/***/ 9791: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -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]; } }; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var dateTrunc_exports = {}; +__export(dateTrunc_exports, { + $dateTrunc: () => $dateTrunc +}); +module.exports = __toCommonJS(dateTrunc_exports); +var import_core = __webpack_require__(2760); +var import_types = __webpack_require__(486); +var import_util = __webpack_require__(7839); +var import_internal = __webpack_require__(1277); +const REF_DATE_MILLIS = 9466848e5; +const distanceToBinLowerBound = (value, binSize) => { + let remainder = value % binSize; + if (remainder < 0) { + remainder += binSize; + } + return remainder; +}; +const DATE_DIFF_FN = { + day: import_internal.dateDiffDay, + month: import_internal.dateDiffMonth, + quarter: import_internal.dateDiffQuarter, + year: import_internal.dateDiffYear +}; +const $dateTrunc = (obj, expr, options) => { + const { + date, + unit, + binSize: optBinSize, + timezone, + startOfWeek: optStartOfWeek + } = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isNil)(date) || (0, import_util.isNil)(unit)) return null; + const startOfWeek = (optStartOfWeek ?? "sun").toLowerCase().substring(0, 3); + (0, import_util.assert)( + (0, import_util.isDate)(date), + "$dateTrunc: 'date' must resolve to a valid Date object." + ); + (0, import_util.assert)(import_types.TIME_UNITS.includes(unit), "$dateTrunc: unit is invalid."); + (0, import_util.assert)( + unit != "week" || import_internal.DAYS_OF_WEEK_SET.has(startOfWeek), + `$dateTrunc: startOfWeek '${startOfWeek}' is not a valid.` + ); + (0, import_util.assert)( + (0, import_util.isNil)(optBinSize) || optBinSize > 0, + "$dateTrunc requires 'binSize' to be greater than 0, but got value 0." + ); + const binSize = optBinSize ?? 1; + switch (unit) { + case "millisecond": + case "second": + case "minute": + case "hour": { + const binSizeMillis = binSize * import_internal.TIMEUNIT_IN_MILLIS[unit]; + const shiftedDate = date.getTime() - REF_DATE_MILLIS; + return new Date( + date.getTime() - distanceToBinLowerBound(shiftedDate, binSizeMillis) + ); } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); + default: { + (0, import_util.assert)(binSize <= 1e11, "dateTrunc unsupported binSize value"); + const d = new Date(date); + const refPointDate = new Date(REF_DATE_MILLIS); + let distanceFromRefPoint = 0; + if (unit == "week") { + const refPointDayOfWeek = (0, import_internal.isoWeekday)(refPointDate, startOfWeek); + const daysToAdjustBy = (import_internal.DAYS_PER_WEEK - refPointDayOfWeek) % import_internal.DAYS_PER_WEEK; + refPointDate.setTime( + refPointDate.getTime() + daysToAdjustBy * import_internal.TIMEUNIT_IN_MILLIS.day + ); + distanceFromRefPoint = (0, import_internal.dateDiffWeek)(refPointDate, d, startOfWeek); + } else { + distanceFromRefPoint = DATE_DIFF_FN[unit](refPointDate, d); + } + const binLowerBoundFromRefPoint = distanceFromRefPoint - distanceToBinLowerBound(distanceFromRefPoint, binSize); + const newDate = (0, import_internal.dateAdd)( + refPointDate, + unit, + binLowerBoundFromRefPoint, + timezone + ); + const minuteOffset = (0, import_internal.parseTimezone)(timezone); + (0, import_internal.adjustDate)(newDate, -minuteOffset); + return newDate; + } + } }; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(9543), exports); -__exportStar(__webpack_require__(5495), exports); -__exportStar(__webpack_require__(2005), exports); -__exportStar(__webpack_require__(9070), exports); -__exportStar(__webpack_require__(1337), exports); -__exportStar(__webpack_require__(3701), exports); -__exportStar(__webpack_require__(4267), exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 1337: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - -// Comparison Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#comparison-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$lt = void 0; -const _predicates_1 = __webpack_require__(4414); -/** - * Matches values that are less than the value specified in the query. - */ -exports.$lt = (0, _predicates_1.createExpressionOperator)(_predicates_1.$lt); +/***/ 2470: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var dayOfMonth_exports = {}; +__export(dayOfMonth_exports, { + $dayOfMonth: () => $dayOfMonth +}); +module.exports = __toCommonJS(dayOfMonth_exports); +var import_internal = __webpack_require__(1277); +const $dayOfMonth = (obj, expr, options) => { + return (0, import_internal.computeDate)(obj, expr, options).getUTCDate(); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 3701: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 5998: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Comparison Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#comparison-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$lte = void 0; -const _predicates_1 = __webpack_require__(4414); -/** - * Matches values that are less than or equal to the value specified in the query. - */ -exports.$lte = (0, _predicates_1.createExpressionOperator)(_predicates_1.$lte); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var dayOfWeek_exports = {}; +__export(dayOfWeek_exports, { + $dayOfWeek: () => $dayOfWeek +}); +module.exports = __toCommonJS(dayOfWeek_exports); +var import_internal = __webpack_require__(1277); +const $dayOfWeek = (obj, expr, options) => { + return (0, import_internal.computeDate)(obj, expr, options).getUTCDay() + 1; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 4267: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 7107: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Comparison Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#comparison-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$ne = void 0; -const _predicates_1 = __webpack_require__(4414); -/** - * Matches all values that are not equal to the value specified in the query. - */ -exports.$ne = (0, _predicates_1.createExpressionOperator)(_predicates_1.$ne); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var dayOfYear_exports = {}; +__export(dayOfYear_exports, { + $dayOfYear: () => $dayOfYear +}); +module.exports = __toCommonJS(dayOfYear_exports); +var import_internal = __webpack_require__(1277); +const $dayOfYear = (obj, expr, options) => { + return (0, import_internal.dayOfYear)((0, import_internal.computeDate)(obj, expr, options)); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 3833: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 4067: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * Conditional Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#conditional-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$cond = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * A ternary operator that evaluates one expression, - * and depending on the result returns the value of one following expressions. - * - * @param obj - * @param expr - */ -const $cond = (obj, expr, options) => { - let ifExpr; - let thenExpr; - let elseExpr; - const errorMsg = "$cond: invalid arguments"; - if (expr instanceof Array) { - (0, util_1.assert)(expr.length === 3, errorMsg); - ifExpr = expr[0]; - thenExpr = expr[1]; - elseExpr = expr[2]; - } - else { - (0, util_1.assert)((0, util_1.isObject)(expr), errorMsg); - ifExpr = expr.if; - thenExpr = expr.then; - elseExpr = expr.else; - } - const condition = (0, util_1.truthy)((0, core_1.computeValue)(obj, ifExpr, null, options), options.useStrictMode); - return (0, core_1.computeValue)(obj, condition ? thenExpr : elseExpr, null, options); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var hour_exports = {}; +__export(hour_exports, { + $hour: () => $hour +}); +module.exports = __toCommonJS(hour_exports); +var import_internal = __webpack_require__(1277); +const $hour = (obj, expr, options) => { + return (0, import_internal.computeDate)(obj, expr, options).getUTCHours(); }; -exports.$cond = $cond; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 419: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +/***/ 3381: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var date_exports = {}; +module.exports = __toCommonJS(date_exports); +__reExport(date_exports, __webpack_require__(8410), module.exports); +__reExport(date_exports, __webpack_require__(9178), module.exports); +__reExport(date_exports, __webpack_require__(611), module.exports); +__reExport(date_exports, __webpack_require__(5268), module.exports); +__reExport(date_exports, __webpack_require__(5817), module.exports); +__reExport(date_exports, __webpack_require__(112), module.exports); +__reExport(date_exports, __webpack_require__(7165), module.exports); +__reExport(date_exports, __webpack_require__(9791), module.exports); +__reExport(date_exports, __webpack_require__(2470), module.exports); +__reExport(date_exports, __webpack_require__(5998), module.exports); +__reExport(date_exports, __webpack_require__(7107), module.exports); +__reExport(date_exports, __webpack_require__(4067), module.exports); +__reExport(date_exports, __webpack_require__(1125), module.exports); +__reExport(date_exports, __webpack_require__(612), module.exports); +__reExport(date_exports, __webpack_require__(5373), module.exports); +__reExport(date_exports, __webpack_require__(7216), module.exports); +__reExport(date_exports, __webpack_require__(949), module.exports); +__reExport(date_exports, __webpack_require__(7711), module.exports); +__reExport(date_exports, __webpack_require__(9549), module.exports); +__reExport(date_exports, __webpack_require__(2813), module.exports); +__reExport(date_exports, __webpack_require__(2880), module.exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); + + +/***/ }), + +/***/ 1125: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * Conditional Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#conditional-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$ifNull = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Evaluates an expression and returns the first non-null value. - * - * @param obj - * @param expr - * @returns {*} - */ -const $ifNull = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - return args.find(arg => !(0, util_1.isNil)(arg)); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var isoDayOfWeek_exports = {}; +__export(isoDayOfWeek_exports, { + $isoDayOfWeek: () => $isoDayOfWeek +}); +module.exports = __toCommonJS(isoDayOfWeek_exports); +var import_internal = __webpack_require__(1277); +const $isoDayOfWeek = (obj, expr, options) => { + return (0, import_internal.computeDate)(obj, expr, options).getUTCDay() || 7; }; -exports.$ifNull = $ifNull; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5112: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; +/***/ 612: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -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 __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(3833), exports); -__exportStar(__webpack_require__(419), exports); -__exportStar(__webpack_require__(9605), exports); +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var isoWeek_exports = {}; +__export(isoWeek_exports, { + $isoWeek: () => $isoWeek +}); +module.exports = __toCommonJS(isoWeek_exports); +var import_internal = __webpack_require__(1277); +const $isoWeek = (obj, expr, options) => { + return (0, import_internal.isoWeek)((0, import_internal.computeDate)(obj, expr, options)); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 9605: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 5373: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * Conditional Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#conditional-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$switch = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * An operator that evaluates a series of case expressions. When it finds an expression which - * evaluates to true, it returns the resulting expression for that case. If none of the cases - * evaluate to true, it returns the default expression. - * - * @param obj - * @param expr - */ -const $switch = (obj, expr, options) => { - let thenExpr = null; - // Array.prototype.find not supported in IE, hence the '.some()' proxy - expr.branches.some((b) => { - const condition = (0, util_1.truthy)((0, core_1.computeValue)(obj, b.case, null, options), options.useStrictMode); - if (condition) - thenExpr = b.then; - return condition; - }); - return (0, core_1.computeValue)(obj, thenExpr !== null ? thenExpr : expr.default, null, options); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$switch = $switch; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var isoWeekYear_exports = {}; +__export(isoWeekYear_exports, { + $isoWeekYear: () => $isoWeekYear +}); +module.exports = __toCommonJS(isoWeekYear_exports); +var import_internal = __webpack_require__(1277); +const $isoWeekYear = (obj, expr, options) => (0, import_internal.isoWeekYear)((0, import_internal.computeDate)(obj, expr, options)); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 1416: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 7216: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Custom Aggregation Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#custom-aggregation-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$function = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Defines a custom function. - * - * @param {*} obj The target object for this expression - * @param {*} expr The expression for the operator - * @param {Options} options Options - */ -const $function = (obj, expr, options) => { - (0, util_1.assert)(options.scriptEnabled, "$function operator requires 'scriptEnabled' option to be true"); - const fn = (0, core_1.computeValue)(obj, expr, null, options); - return fn.body.apply(null, fn.args); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$function = $function; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var millisecond_exports = {}; +__export(millisecond_exports, { + $millisecond: () => $millisecond +}); +module.exports = __toCommonJS(millisecond_exports); +var import_internal = __webpack_require__(1277); +const $millisecond = (obj, expr, options) => { + return (0, import_internal.computeDate)(obj, expr, options).getUTCMilliseconds(); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 4052: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; +/***/ 949: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -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 __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(1416), exports); +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var minute_exports = {}; +__export(minute_exports, { + $minute: () => $minute +}); +module.exports = __toCommonJS(minute_exports); +var import_internal = __webpack_require__(1277); +const $minute = (obj, expr, options) => { + return (0, import_internal.computeDate)(obj, expr, options).getUTCMinutes(); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 7974: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 7711: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.regexStrip = exports.regexQuote = exports.padDigits = exports.computeDate = exports.adjustDate = exports.formatTimezone = exports.parseTimezone = exports.DATE_SYM_TABLE = exports.DATE_PART_INTERVAL = exports.DATE_FORMAT = exports.DURATION_IN_MILLIS = exports.MILLIS_PER_DAY = exports.MINUTES_PER_HOUR = exports.isoWeekYear = exports.isoWeek = exports.getDayOfYear = exports.isLeapYear = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -const COMMON_YEAR_DAYS_OFFSET = [ - 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 -]; -const LEAP_YEAR_DAYS_OFFSET = [ - 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335 -]; -// https://en.wikipedia.org/wiki/ISO_week_date -const p = (y) => (y + Math.floor(y / 4) - Math.floor(y / 100) + Math.floor(y / 400)) % 7; -const weeks = (y) => 52 + Number(p(y) == 4 || p(y - 1) == 3); -const isLeapYear = (year) => (year & 3) == 0 && (year % 100 != 0 || year % 400 == 0); -exports.isLeapYear = isLeapYear; -const getDayOfYear = (d) => ((0, exports.isLeapYear)(d.getUTCFullYear()) - ? LEAP_YEAR_DAYS_OFFSET - : COMMON_YEAR_DAYS_OFFSET)[d.getUTCMonth()] + d.getUTCDate(); -exports.getDayOfYear = getDayOfYear; -function isoWeek(d) { - // algorithm based on https://en.wikipedia.org/wiki/ISO_week_date - const w = Math.floor((10 + (0, exports.getDayOfYear)(d) - (d.getUTCDay() || 7)) / 7); - if (w < 1) - return weeks(d.getUTCFullYear() - 1); - if (w > weeks(d.getUTCFullYear())) - return 1; - return w; -} -exports.isoWeek = isoWeek; -function isoWeekYear(d) { - return (d.getUTCFullYear() - - Number(d.getUTCMonth() == 0 && d.getUTCDate() == 1 && d.getUTCDay() < 1)); -} -exports.isoWeekYear = isoWeekYear; -exports.MINUTES_PER_HOUR = 60; -exports.MILLIS_PER_DAY = 1000 * 60 * 60 * 24; -exports.DURATION_IN_MILLIS = { - week: exports.MILLIS_PER_DAY * 7, - day: exports.MILLIS_PER_DAY, - hour: 1000 * 60 * 60, - minute: 1000 * 60, - second: 1000, - millisecond: 1 -}; -// default format if unspecified -exports.DATE_FORMAT = "%Y-%m-%dT%H:%M:%S.%LZ"; -// Inclusive interval of date parts -exports.DATE_PART_INTERVAL = [ - ["year", 0, 9999], - ["month", 1, 12], - ["day", 1, 31], - ["hour", 0, 23], - ["minute", 0, 59], - ["second", 0, 59], - ["millisecond", 0, 999] -]; -// used for formatting dates in $dateToString operator -exports.DATE_SYM_TABLE = { - "%Y": { name: "year", padding: 4, re: /([0-9]{4})/ }, - "%G": { name: "year", padding: 4, re: /([0-9]{4})/ }, - "%m": { name: "month", padding: 2, re: /(0[1-9]|1[012])/ }, - "%d": { name: "day", padding: 2, re: /(0[1-9]|[12][0-9]|3[01])/ }, - "%H": { name: "hour", padding: 2, re: /([01][0-9]|2[0-3])/ }, - "%M": { name: "minute", padding: 2, re: /([0-5][0-9])/ }, - "%S": { name: "second", padding: 2, re: /([0-5][0-9]|60)/ }, - "%L": { name: "millisecond", padding: 3, re: /([0-9]{3})/ }, - "%u": { name: "weekday", padding: 1, re: /([1-7])/ }, - "%U": { name: "week", padding: 2, re: /([1-4][0-9]?|5[0-3]?)/ }, - "%V": { name: "isoWeek", padding: 2, re: /([1-4][0-9]?|5[0-3]?)/ }, - "%z": { - name: "timezone", - padding: 2, - re: /(([+-][01][0-9]|2[0-3]):?([0-5][0-9])?)/ - }, - "%Z": { name: "minuteOffset", padding: 3, re: /([+-][0-9]{3})/ } - // "%%": "%", +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -/** - * Parse and return the timezone string as a number - * @param tzstr Timezone string matching '+/-hh[:][mm]' - */ -function parseTimezone(tzstr) { - if ((0, util_1.isNil)(tzstr)) - return 0; - const m = exports.DATE_SYM_TABLE["%z"].re.exec(tzstr); - if (!m) - throw Error(`invalid or location-based timezone '${tzstr}' not supported`); - const hr = parseInt(m[2]) || 0; - const min = parseInt(m[3]) || 0; - return (Math.abs(hr * exports.MINUTES_PER_HOUR) + min) * (hr < 0 ? -1 : 1); -} -exports.parseTimezone = parseTimezone; -/** - * Formats the timezone for output - * @param tz A timezone object - */ -function formatTimezone(minuteOffset) { - return ((minuteOffset < 0 ? "-" : "+") + - padDigits(Math.abs(Math.floor(minuteOffset / exports.MINUTES_PER_HOUR)), 2) + - padDigits(Math.abs(minuteOffset) % exports.MINUTES_PER_HOUR, 2)); -} -exports.formatTimezone = formatTimezone; -/** - * Adjust the date by the given timezone - * @param d Date object - * @param minuteOffset number - */ -function adjustDate(d, minuteOffset) { - d.setUTCMinutes(d.getUTCMinutes() + minuteOffset); -} -exports.adjustDate = adjustDate; -/** - * Computes a date expression - * @param obj The target object - * @param expr Any value that resolves to a valid date expression. Valid expressions include a number, Date, or Object{date: number|Date, timezone?: string} - */ -function computeDate(obj, expr, options) { - const d = (0, core_1.computeValue)(obj, expr, null, options); - if ((0, util_1.isDate)(d)) - return new Date(d); - // timestamp is in seconds - if ((0, util_1.isNumber)(d)) - return new Date(d * 1000); - if (d.date) { - const date = (0, util_1.isDate)(d.date) ? new Date(d.date) : new Date(d.date * 1000); - if (d.timezone) { - adjustDate(date, parseTimezone(d.timezone)); - } - return date; - } - throw Error(`cannot convert ${expr === null || expr === void 0 ? void 0 : expr.toString()} to date`); -} -exports.computeDate = computeDate; -function padDigits(n, digits) { - return (new Array(Math.max(digits - String(n).length + 1, 0)).join("0") + - n.toString()); -} -exports.padDigits = padDigits; -function regexQuote(s) { - "^.-*?$".split("").forEach((c) => { - s = s.replace(c, `\\${c}`); - }); - return s; -} -exports.regexQuote = regexQuote; -function regexStrip(s) { - return s.replace(/^\//, "").replace(/\/$/, ""); -} -exports.regexStrip = regexStrip; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var month_exports = {}; +__export(month_exports, { + $month: () => $month +}); +module.exports = __toCommonJS(month_exports); +var import_internal = __webpack_require__(1277); +const $month = (obj, expr, options) => { + return (0, import_internal.computeDate)(obj, expr, options).getUTCMonth() + 1; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 9784: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 9549: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Date Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#date-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$dateAdd = void 0; -const core_1 = __webpack_require__(9587); -const _internal_1 = __webpack_require__(7974); -/** - * Increments a Date object by a specified number of time units. - * @param obj - * @param expr - */ -const $dateAdd = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - const d = (0, _internal_1.computeDate)(obj, expr.startDate, options); - switch (args.unit) { - case "year": - d.setUTCFullYear(d.getUTCFullYear() + args.amount); - break; - case "quarter": - addMonth(d, 3 * args.amount); - break; - case "month": - addMonth(d, args.amount); - break; - default: - d.setTime(d.getTime() + _internal_1.DURATION_IN_MILLIS[args.unit] * args.amount); - } - if (args.timezone) { - const tz = (0, _internal_1.parseTimezone)(args.timezone); - (0, _internal_1.adjustDate)(d, tz); - } - return d; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -exports.$dateAdd = $dateAdd; -function addMonth(d, amount) { - // months start from 0 to 11. - const m = d.getUTCMonth() + amount; - const yearOffset = Math.floor(m / 12); - if (m < 0) { - const month = (m % 12) + 12; - d.setUTCFullYear(d.getUTCFullYear() + yearOffset, month, d.getUTCDate()); - } - else { - d.setUTCFullYear(d.getUTCFullYear() + yearOffset, m % 12, d.getUTCDate()); - } -} +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var second_exports = {}; +__export(second_exports, { + $second: () => $second +}); +module.exports = __toCommonJS(second_exports); +var import_internal = __webpack_require__(1277); +const $second = (obj, expr, options) => { + return (0, import_internal.computeDate)(obj, expr, options).getUTCSeconds(); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 6145: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 2813: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Date Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#date-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$dateDiff = void 0; -const core_1 = __webpack_require__(9587); -const _internal_1 = __webpack_require__(7974); -/** - * Returns the difference between two dates. - * @param obj - * @param expr - * @param options Options - */ -const $dateDiff = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - const d1 = (0, _internal_1.computeDate)(obj, expr.startDate, options); - const d2 = (0, _internal_1.computeDate)(obj, expr.endDate, options); - let diff; - switch (args.unit) { - case "year": - case "quarter": - case "month": - diff = diffYQM(d1, d2, args.unit); - break; - default: - diff = (d2.getTime() - d1.getTime()) / _internal_1.DURATION_IN_MILLIS[args.unit]; - } - return diff; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -exports.$dateDiff = $dateDiff; -const unitMonths = { - year: 12, - quarter: 3, - month: 1 +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -function diffYQM(d1, d2, unit) { - let months = (d2.getUTCFullYear() - d1.getUTCFullYear()) * 12; - months -= d1.getUTCMonth(); - months += d2.getUTCMonth(); - return Math.trunc(months / unitMonths[unit]); -} +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var week_exports = {}; +__export(week_exports, { + $week: () => $week +}); +module.exports = __toCommonJS(week_exports); +var import_internal = __webpack_require__(1277); +const $week = (obj, expr, options) => { + const d = (0, import_internal.computeDate)(obj, expr, options); + const result = (0, import_internal.isoWeek)(d); + if (d.getUTCDay() > 0 && d.getUTCDate() == 1 && d.getUTCMonth() == 0) + return 0; + if (d.getUTCDay() == 0) return result + 1; + return result; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 6723: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 2880: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Date Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#date-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$dateFromParts = void 0; -const core_1 = __webpack_require__(9587); -const _internal_1 = __webpack_require__(7974); -const DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; -const getDaysInMonth = (date) => { - return date.month == 2 && (0, _internal_1.isLeapYear)(date.year) - ? 29 - : DAYS_IN_MONTH[date.month - 1]; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -/** - * Constructs and returns a Date object given the date’s constituent properties. - * - * @param obj The document - * @param expr The date expression - * @param options Options - */ -const $dateFromParts = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - const minuteOffset = (0, _internal_1.parseTimezone)(args.timezone); - // assign default and adjust value ranges of the different parts - for (let i = _internal_1.DATE_PART_INTERVAL.length - 1, remainder = 0; i >= 0; i--) { - const datePartInterval = _internal_1.DATE_PART_INTERVAL[i]; - const k = datePartInterval[0]; - const min = datePartInterval[1]; - const max = datePartInterval[2]; - // add remainder from previous part. units should already be correct - let part = (args[k] || 0) + remainder; - // reset remainder now that it's been used. - remainder = 0; - // 1. compute the remainder for the next part - // 2. adjust the current part to a valid range - // 3. assign back to 'args' - const limit = max + 1; - // invert timezone to adjust the hours to UTC - if (k == "hour") - part += Math.floor(minuteOffset / _internal_1.MINUTES_PER_HOUR) * -1; - if (k == "minute") - part += (minuteOffset % _internal_1.MINUTES_PER_HOUR) * -1; - // smaller than lower bound - if (part < min) { - const delta = min - part; - remainder = -1 * Math.ceil(delta / limit); - part = limit - (delta % limit); - } - else if (part > max) { - // offset with the 'min' value to adjust non-zero date parts correctly - part += min; - remainder = Math.trunc(part / limit); - part %= limit; - } - // reassign - args[k] = part; - } - // adjust end of month to correctly handle overflows - args.day = Math.min(args.day, getDaysInMonth(args)); - return new Date(Date.UTC(args.year, args.month - 1, args.day, args.hour, args.minute, args.second, args.millisecond)); +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var year_exports = {}; +__export(year_exports, { + $year: () => $year +}); +module.exports = __toCommonJS(year_exports); +var import_internal = __webpack_require__(1277); +const $year = (obj, expr, options) => { + return (0, import_internal.computeDate)(obj, expr, options).getUTCFullYear(); }; -exports.$dateFromParts = $dateFromParts; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5342: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 5764: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Date Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#date-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$dateFromString = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -const _internal_1 = __webpack_require__(7974); -const buildMap = (letters, sign) => { - const h = {}; - letters.split("").forEach((v, i) => (h[v] = sign * (i + 1))); - return h; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -const TZ_LETTER_OFFSETS = Object.assign(Object.assign(Object.assign({}, buildMap("ABCDEFGHIKLM", 1)), buildMap("NOPQRSTUVWXY", -1)), { Z: 0 }); -/** - * Converts a date/time string to a date object. - * @param obj - * @param expr - */ -const $dateFromString = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - args.format = args.format || _internal_1.DATE_FORMAT; - args.onNull = args.onNull || null; - let dateString = args.dateString; - if ((0, util_1.isNil)(dateString)) - return args.onNull; - // collect all separators of the format string - const separators = args.format.split(/%[YGmdHMSLuVzZ]/); - separators.reverse(); - const matches = args.format.match(/(%%|%Y|%G|%m|%d|%H|%M|%S|%L|%u|%V|%z|%Z)/g); - const dateParts = {}; - // holds the valid regex of parts that matches input date string - let expectedPattern = ""; - for (let i = 0, len = matches.length; i < len; i++) { - const formatSpecifier = matches[i]; - const props = _internal_1.DATE_SYM_TABLE[formatSpecifier]; - if ((0, util_1.isObject)(props)) { - // get pattern and alias from table - const m = props.re.exec(dateString); - // get the next separtor - const delimiter = separators.pop() || ""; - if (m !== null) { - // store and cut out matched part - dateParts[props.name] = /^\d+$/.exec(m[0]) ? parseInt(m[0]) : m[0]; - dateString = - dateString.substr(0, m.index) + - dateString.substr(m.index + m[0].length); - // construct expected pattern - expectedPattern += - (0, _internal_1.regexQuote)(delimiter) + (0, _internal_1.regexStrip)(props.re.toString()); - } - else { - dateParts[props.name] = null; - } - } - } - // 1. validate all required date parts exists - // 2. validate original dateString against expected pattern. - if ((0, util_1.isNil)(dateParts.year) || - (0, util_1.isNil)(dateParts.month) || - (0, util_1.isNil)(dateParts.day) || - !new RegExp("^" + expectedPattern + "[A-Z]?$").exec(args.dateString)) { - return args.onError; - } - const m = args.dateString.match(/([A-Z])$/); - (0, util_1.assert)( - // only one of in-date timeone or timezone argument but not both. - !(m && args.timezone), `$dateFromString: you cannot pass in a date/time string with time zone information ('${m && m[0]}') together with a timezone argument`); - const minuteOffset = m - ? TZ_LETTER_OFFSETS[m[0]] * _internal_1.MINUTES_PER_HOUR - : (0, _internal_1.parseTimezone)(args.timezone); - // create the date. month is 0-based in Date - const d = new Date(Date.UTC(dateParts.year, dateParts.month - 1, dateParts.day, 0, 0, 0)); - if (!(0, util_1.isNil)(dateParts.hour)) - d.setUTCHours(dateParts.hour); - if (!(0, util_1.isNil)(dateParts.minute)) - d.setUTCMinutes(dateParts.minute); - if (!(0, util_1.isNil)(dateParts.second)) - d.setUTCSeconds(dateParts.second); - if (!(0, util_1.isNil)(dateParts.millisecond)) - d.setUTCMilliseconds(dateParts.millisecond); - // adjust to the correct represention for UTC - (0, _internal_1.adjustDate)(d, -minuteOffset); - return d; -}; -exports.$dateFromString = $dateFromString; - - -/***/ }), - -/***/ 9051: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var expression_exports = {}; +module.exports = __toCommonJS(expression_exports); +__reExport(expression_exports, __webpack_require__(4125), module.exports); +__reExport(expression_exports, __webpack_require__(2846), module.exports); +__reExport(expression_exports, __webpack_require__(5148), module.exports); +__reExport(expression_exports, __webpack_require__(1703), module.exports); +__reExport(expression_exports, __webpack_require__(3336), module.exports); +__reExport(expression_exports, __webpack_require__(5459), module.exports); +__reExport(expression_exports, __webpack_require__(6518), module.exports); +__reExport(expression_exports, __webpack_require__(3381), module.exports); +__reExport(expression_exports, __webpack_require__(5535), module.exports); +__reExport(expression_exports, __webpack_require__(6808), module.exports); +__reExport(expression_exports, __webpack_require__(6789), module.exports); +__reExport(expression_exports, __webpack_require__(3450), module.exports); +__reExport(expression_exports, __webpack_require__(5053), module.exports); +__reExport(expression_exports, __webpack_require__(5731), module.exports); +__reExport(expression_exports, __webpack_require__(7620), module.exports); +__reExport(expression_exports, __webpack_require__(7367), module.exports); +__reExport(expression_exports, __webpack_require__(1377), module.exports); +__reExport(expression_exports, __webpack_require__(2537), module.exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); + + +/***/ }), + +/***/ 5535: +/***/ ((module) => { -// Date Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#date-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$dateSubtract = void 0; -const core_1 = __webpack_require__(9587); -const dateAdd_1 = __webpack_require__(9784); -/** - * Decrements a Date object by a specified number of time units. - * @param obj - * @param expr - */ -const $dateSubtract = (obj, expr, options) => { - const amount = (0, core_1.computeValue)(obj, expr === null || expr === void 0 ? void 0 : expr.amount, null, options); - return (0, dateAdd_1.$dateAdd)(obj, Object.assign(Object.assign({}, expr), { amount: -1 * amount }), options); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$dateSubtract = $dateSubtract; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var literal_exports = {}; +__export(literal_exports, { + $literal: () => $literal +}); +module.exports = __toCommonJS(literal_exports); +const $literal = (_obj, expr, _options) => expr; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 281: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 6808: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Date Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#date-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$dateToParts = void 0; -const core_1 = __webpack_require__(9587); -const _internal_1 = __webpack_require__(7974); -/** - * Returns a document that contains the constituent parts of a given Date value as individual properties. - * The properties returned are year, month, day, hour, minute, second and millisecond. - * - * @param obj - * @param expr - * @param options - */ -const $dateToParts = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - const d = new Date(args.date); - const tz = (0, _internal_1.parseTimezone)(args.timezone); - (0, _internal_1.adjustDate)(d, tz); - const timePart = { - hour: d.getUTCHours(), - minute: d.getUTCMinutes(), - second: d.getUTCSeconds(), - millisecond: d.getUTCMilliseconds() - }; - if (args.iso8601 == true) { - return Object.assign(timePart, { - isoWeekYear: (0, _internal_1.isoWeekYear)(d), - isoWeek: (0, _internal_1.isoWeek)(d), - isoDayOfWeek: d.getUTCDay() || 7 - }); - } - return Object.assign(timePart, { - year: d.getUTCFullYear(), - month: d.getUTCMonth() + 1, - day: d.getUTCDate() - }); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$dateToParts = $dateToParts; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var median_exports = {}; +__export(median_exports, { + $median: () => $median +}); +module.exports = __toCommonJS(median_exports); +var import_core = __webpack_require__(2760); +var import_median = __webpack_require__(9524); +const $median = (obj, expr, options) => { + const input = (0, import_core.computeValue)(obj, expr.input, null, options); + return (0, import_median.$median)(input, { input: "$$CURRENT" }, options); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 1300: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 257: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Date Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#date-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$dateToString = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -const _internal_1 = __webpack_require__(7974); -const dayOfMonth_1 = __webpack_require__(5327); -const hour_1 = __webpack_require__(5882); -const isoDayOfWeek_1 = __webpack_require__(404); -const isoWeek_1 = __webpack_require__(9812); -const millisecond_1 = __webpack_require__(1338); -const minute_1 = __webpack_require__(5337); -const month_1 = __webpack_require__(6879); -const second_1 = __webpack_require__(743); -const week_1 = __webpack_require__(626); -const year_1 = __webpack_require__(8546); -// date functions for format specifiers -const DATE_FUNCTIONS = { - "%Y": year_1.$year, - "%G": year_1.$year, - "%m": month_1.$month, - "%d": dayOfMonth_1.$dayOfMonth, - "%H": hour_1.$hour, - "%M": minute_1.$minute, - "%S": second_1.$second, - "%L": millisecond_1.$millisecond, - "%u": isoDayOfWeek_1.$isoDayOfWeek, - "%U": week_1.$week, - "%V": isoWeek_1.$isoWeek +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -/** - * Returns the date as a formatted string. - * - * %d Day of Month (2 digits, zero padded) 01-31 - * %G Year in ISO 8601 format 0000-9999 - * %H Hour (2 digits, zero padded, 24-hour clock) 00-23 - * %L Millisecond (3 digits, zero padded) 000-999 - * %m Month (2 digits, zero padded) 01-12 - * %M Minute (2 digits, zero padded) 00-59 - * %S Second (2 digits, zero padded) 00-60 - * %u Day of week number in ISO 8601 format (1-Monday, 7-Sunday) 1-7 - * %V Week of Year in ISO 8601 format 1-53 - * %Y Year (4 digits, zero padded) 0000-9999 - * %z The timezone offset from UTC. +/-[hh][mm] - * %Z The minutes offset from UTC as a number. For example, if the timezone offset (+/-[hhmm]) was +0445, the minutes offset is +285. +/-mmm - * %% Percent Character as a Literal % - * - * @param obj current object - * @param expr operator expression - */ -const $dateToString = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - if ((0, util_1.isNil)(args.onNull)) - args.onNull = null; - if ((0, util_1.isNil)(args.date)) - return args.onNull; - const date = (0, _internal_1.computeDate)(obj, args.date, options); - let format = args.format || _internal_1.DATE_FORMAT; - const minuteOffset = (0, _internal_1.parseTimezone)(args.timezone); - const matches = format.match(/(%%|%Y|%G|%m|%d|%H|%M|%S|%L|%u|%U|%V|%z|%Z)/g); - // adjust the date to reflect timezone - (0, _internal_1.adjustDate)(date, minuteOffset); - for (let i = 0, len = matches.length; i < len; i++) { - const formatSpecifier = matches[i]; - const props = _internal_1.DATE_SYM_TABLE[formatSpecifier]; - const operatorFn = DATE_FUNCTIONS[formatSpecifier]; - let value; - if ((0, util_1.isObject)(props)) { - // reuse date - if (props.name === "timezone") { - value = (0, _internal_1.formatTimezone)(minuteOffset); - } - else if (props.name === "minuteOffset") { - value = minuteOffset.toString(); - } - else { - (0, util_1.assert)(!!operatorFn, `unsupported date format specifier '${formatSpecifier}'`); - value = (0, _internal_1.padDigits)(operatorFn(obj, date, options), props.padding); - } - } - // replace the match with resolved value - format = format.replace(formatSpecifier, value); - } - return format; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var getField_exports = {}; +__export(getField_exports, { + $getField: () => $getField +}); +module.exports = __toCommonJS(getField_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $getField = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + const [field, input] = (0, import_util.isObject)(args) ? [args.field, args.input || obj] : [args, obj]; + if ((0, import_util.isNil)(input)) return null; + (0, import_util.assert)( + (0, import_util.isObject)(input), + "$getField expression 'input' must evaluate to an object" + ); + (0, import_util.assert)( + (0, import_util.isString)(field), + "$getField expression 'field' must evaluate to a string" + ); + return input[field]; }; -exports.$dateToString = $dateToString; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5327: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 6789: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Date Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#date-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$dayOfMonth = void 0; -const _internal_1 = __webpack_require__(7974); -/** - * Returns the day of the month for a date as a number between 1 and 31. - * @param obj - * @param expr - */ -const $dayOfMonth = (obj, expr, options) => { - return (0, _internal_1.computeDate)(obj, expr, options).getUTCDate(); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$dayOfMonth = $dayOfMonth; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var misc_exports = {}; +module.exports = __toCommonJS(misc_exports); +__reExport(misc_exports, __webpack_require__(257), module.exports); +__reExport(misc_exports, __webpack_require__(438), module.exports); +__reExport(misc_exports, __webpack_require__(5969), module.exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 982: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 438: +/***/ ((module) => { -// Date Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#date-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$dayOfWeek = void 0; -const _internal_1 = __webpack_require__(7974); -/** - * Returns the day of the week for a date as a number between 1 (Sunday) and 7 (Saturday). - * @param obj - * @param expr - */ -const $dayOfWeek = (obj, expr, options) => { - return (0, _internal_1.computeDate)(obj, expr, options).getUTCDay() + 1; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -exports.$dayOfWeek = $dayOfWeek; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var rand_exports = {}; +__export(rand_exports, { + $rand: () => $rand +}); +module.exports = __toCommonJS(rand_exports); +const $rand = (_obj, _expr, _options) => Math.random(); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 623: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 5969: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Date Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#date-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$dayOfYear = void 0; -const _internal_1 = __webpack_require__(7974); -/** - * Returns the day of the year for a date as a number between 1 and 366 (leap year). - * @param obj - * @param expr - */ -const $dayOfYear = (obj, expr, options) => { - return (0, _internal_1.getDayOfYear)((0, _internal_1.computeDate)(obj, expr, options)); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$dayOfYear = $dayOfYear; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var sampleRate_exports = {}; +__export(sampleRate_exports, { + $sampleRate: () => $sampleRate +}); +module.exports = __toCommonJS(sampleRate_exports); +var import_core = __webpack_require__(2760); +const $sampleRate = (obj, expr, options) => Math.random() <= (0, import_core.computeValue)(obj, expr, null, options); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5882: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 3450: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Date Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#date-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$hour = void 0; -const _internal_1 = __webpack_require__(7974); -/** - * Returns the hour for a date as a number between 0 and 23. - * @param obj - * @param expr - */ -const $hour = (obj, expr, options) => { - return (0, _internal_1.computeDate)(obj, expr, options).getUTCHours(); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$hour = $hour; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var object_exports = {}; +module.exports = __toCommonJS(object_exports); +__reExport(object_exports, __webpack_require__(4420), module.exports); +__reExport(object_exports, __webpack_require__(5013), module.exports); +__reExport(object_exports, __webpack_require__(4392), module.exports); +__reExport(object_exports, __webpack_require__(5159), module.exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 9173: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; +/***/ 4420: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -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]; } }; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var mergeObjects_exports = {}; +__export(mergeObjects_exports, { + $mergeObjects: () => $mergeObjects +}); +module.exports = __toCommonJS(mergeObjects_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $mergeObjects = (obj, expr, options) => { + const docs = (0, import_core.computeValue)(obj, expr, null, options) ?? []; + const acc = {}; + for (const o of docs) { + if ((0, import_util.isNil)(o)) continue; + for (const k of Object.keys(o)) { + if (o[k] !== void 0) acc[k] = o[k]; } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); + } + return acc; }; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(9784), exports); -__exportStar(__webpack_require__(6145), exports); -__exportStar(__webpack_require__(6723), exports); -__exportStar(__webpack_require__(5342), exports); -__exportStar(__webpack_require__(9051), exports); -__exportStar(__webpack_require__(281), exports); -__exportStar(__webpack_require__(1300), exports); -__exportStar(__webpack_require__(5327), exports); -__exportStar(__webpack_require__(982), exports); -__exportStar(__webpack_require__(623), exports); -__exportStar(__webpack_require__(5882), exports); -__exportStar(__webpack_require__(404), exports); -__exportStar(__webpack_require__(9812), exports); -__exportStar(__webpack_require__(1123), exports); -__exportStar(__webpack_require__(1338), exports); -__exportStar(__webpack_require__(5337), exports); -__exportStar(__webpack_require__(6879), exports); -__exportStar(__webpack_require__(743), exports); -__exportStar(__webpack_require__(626), exports); -__exportStar(__webpack_require__(8546), exports); - - -/***/ }), - -/***/ 404: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +// Annotate the CommonJS export names for ESM import in node: +0 && (0); -"use strict"; -// Date Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#date-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$isoDayOfWeek = void 0; -const _internal_1 = __webpack_require__(7974); -/** - * Returns the weekday number in ISO 8601 format, ranging from 1 (Monday) to 7 (Sunday). - * @param obj - * @param expr - */ -const $isoDayOfWeek = (obj, expr, options) => { - return (0, _internal_1.computeDate)(obj, expr, options).getUTCDay() || 7; +/***/ }), + +/***/ 5013: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var objectToArray_exports = {}; +__export(objectToArray_exports, { + $objectToArray: () => $objectToArray +}); +module.exports = __toCommonJS(objectToArray_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $objectToArray = (obj, expr, options) => { + const val = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isNil)(val)) return null; + (0, import_util.assert)( + (0, import_util.isObject)(val), + `$objectToArray requires a document input, found: ${(0, import_util.typeOf)(val)}` + ); + const entries = Object.entries(val); + const result = new Array(entries.length); + let i = 0; + for (const [k, v] of entries) { + result[i++] = { k, v }; + } + return result; }; -exports.$isoDayOfWeek = $isoDayOfWeek; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 9812: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 4392: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Date Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#date-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$isoWeek = void 0; -const _internal_1 = __webpack_require__(7974); -/** - * Returns the week number in ISO 8601 format, ranging from 1 to 53. - * Week numbers start at 1 with the week (Monday through Sunday) that contains the year's first Thursday. - * @param obj - * @param expr - */ -const $isoWeek = (obj, expr, options) => { - return (0, _internal_1.isoWeek)((0, _internal_1.computeDate)(obj, expr, options)); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var setField_exports = {}; +__export(setField_exports, { + $setField: () => $setField +}); +module.exports = __toCommonJS(setField_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $setField = (obj, expr, options) => { + const { input, field, value } = (0, import_core.computeValue)( + obj, + expr, + null, + options + ); + if ((0, import_util.isNil)(input)) return null; + (0, import_util.assert)( + (0, import_util.isObject)(input), + "$setField expression 'input' must evaluate to an object" + ); + (0, import_util.assert)( + (0, import_util.isString)(field), + "$setField expression 'field' must evaluate to a string" + ); + if (expr.value == "$$REMOVE") { + delete obj[field]; + } else { + obj[field] = value; + } + return obj; }; -exports.$isoWeek = $isoWeek; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 1123: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 5159: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Date Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#date-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$isoWeekYear = void 0; -const _internal_1 = __webpack_require__(7974); -/** - * Returns the year number in ISO 8601 format. The year starts with the Monday of week 1 and ends with the Sunday of the last week. - * @param obj - * @param expr - */ -const $isoWeekYear = (obj, expr, options) => { - const d = (0, _internal_1.computeDate)(obj, expr, options); - return (d.getUTCFullYear() - - Number(d.getUTCMonth() == 0 && d.getUTCDate() == 1 && d.getUTCDay() < 1)); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var unsetField_exports = {}; +__export(unsetField_exports, { + $unsetField: () => $unsetField +}); +module.exports = __toCommonJS(unsetField_exports); +var import_setField = __webpack_require__(4392); +const $unsetField = (obj, expr, options) => { + return (0, import_setField.$setField)( + obj, + { + ...expr, + value: "$$REMOVE" + }, + options + ); }; -exports.$isoWeekYear = $isoWeekYear; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 1338: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 5053: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Date Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#date-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$millisecond = void 0; -const _internal_1 = __webpack_require__(7974); -/** - * Returns the milliseconds of a date as a number between 0 and 999. - * @param obj - * @param expr - */ -const $millisecond = (obj, expr, options) => { - return (0, _internal_1.computeDate)(obj, expr, options).getUTCMilliseconds(); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var percentile_exports = {}; +__export(percentile_exports, { + $percentile: () => $percentile +}); +module.exports = __toCommonJS(percentile_exports); +var import_core = __webpack_require__(2760); +var import_percentile = __webpack_require__(6393); +const $percentile = (obj, expr, options) => { + const input = (0, import_core.computeValue)(obj, expr.input, null, options); + return (0, import_percentile.$percentile)(input, { ...expr, input: "$$CURRENT" }, options); }; -exports.$millisecond = $millisecond; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5337: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 337: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Date Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#date-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$minute = void 0; -const _internal_1 = __webpack_require__(7974); -/** - * Returns the minute for a date as a number between 0 and 59. - * @param obj - * @param expr - */ -const $minute = (obj, expr, options) => { - return (0, _internal_1.computeDate)(obj, expr, options).getUTCMinutes(); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -exports.$minute = $minute; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var allElementsTrue_exports = {}; +__export(allElementsTrue_exports, { + $allElementsTrue: () => $allElementsTrue +}); +module.exports = __toCommonJS(allElementsTrue_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $allElementsTrue = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options)[0]; + return args.every((v) => (0, import_util.truthy)(v, options.useStrictMode)); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 6879: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 2961: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Date Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#date-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$month = void 0; -const _internal_1 = __webpack_require__(7974); -/** - * Returns the month for a date as a number between 1 (January) and 12 (December). - * @param obj - * @param expr - */ -const $month = (obj, expr, options) => { - return (0, _internal_1.computeDate)(obj, expr, options).getUTCMonth() + 1; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var anyElementTrue_exports = {}; +__export(anyElementTrue_exports, { + $anyElementTrue: () => $anyElementTrue +}); +module.exports = __toCommonJS(anyElementTrue_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $anyElementTrue = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options)[0]; + return args.some((v) => (0, import_util.truthy)(v, options.useStrictMode)); }; -exports.$month = $month; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 743: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 5731: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Date Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#date-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$second = void 0; -const _internal_1 = __webpack_require__(7974); -/** - * Returns the seconds for a date as a number between 0 and 60 (leap seconds). - * @param obj - * @param expr - */ -const $second = (obj, expr, options) => { - return (0, _internal_1.computeDate)(obj, expr, options).getUTCSeconds(); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$second = $second; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var set_exports = {}; +module.exports = __toCommonJS(set_exports); +__reExport(set_exports, __webpack_require__(337), module.exports); +__reExport(set_exports, __webpack_require__(2961), module.exports); +__reExport(set_exports, __webpack_require__(9432), module.exports); +__reExport(set_exports, __webpack_require__(1962), module.exports); +__reExport(set_exports, __webpack_require__(7750), module.exports); +__reExport(set_exports, __webpack_require__(8189), module.exports); +__reExport(set_exports, __webpack_require__(1476), module.exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 626: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 9432: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Date Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#date-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$week = void 0; -const _internal_1 = __webpack_require__(7974); -/** - * Returns the week of the year for a date as a number between 0 and 53. - * Weeks begin on Sundays, and week 1 begins with the first Sunday of the year. Days preceding the first Sunday of the year are in week 0 - * @param obj - * @param expr - */ -const $week = (obj, expr, options) => { - const d = (0, _internal_1.computeDate)(obj, expr, options); - const result = (0, _internal_1.isoWeek)(d); - // check for starting of year and adjust accordingly - if (d.getUTCDay() > 0 && d.getUTCDate() == 1 && d.getUTCMonth() == 0) - return 0; - // adjust for week start on Sunday - if (d.getUTCDay() == 0) - return result + 1; - // else - return result; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var setDifference_exports = {}; +__export(setDifference_exports, { + $setDifference: () => $setDifference +}); +module.exports = __toCommonJS(setDifference_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $setDifference = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isNil)(args)) return null; + (0, import_util.assert)((0, import_util.isArray)(args), "$setDifference must be an arrays."); + if (args.some(import_util.isNil)) return null; + (0, import_util.assert)(args.length == 2, `$setDifference takes exactly 2 arguments.`); + (0, import_util.assert)(args.every(import_util.isArray), "$setDifference operands must be arrays."); + const m = import_util.ValueMap.init(options.hashFunction); + args[0].forEach((v) => m.set(v, true)); + args[1].forEach((v) => m.delete(v)); + return Array.from(m.keys()); }; -exports.$week = $week; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8546: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 1962: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Date Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#date-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$year = void 0; -const _internal_1 = __webpack_require__(7974); -/** - * Returns the year for a date as a number (e.g. 2014). - * @param obj - * @param expr - */ -const $year = (obj, expr, options) => { - return (0, _internal_1.computeDate)(obj, expr, options).getUTCFullYear(); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$year = $year; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var setEquals_exports = {}; +__export(setEquals_exports, { + $setEquals: () => $setEquals +}); +module.exports = __toCommonJS(setEquals_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $setEquals = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + (0, import_util.assert)( + (0, import_util.isArray)(args) && args.every(import_util.isArray), + "$setEquals operands must be arrays." + ); + const map = import_util.ValueMap.init(); + args[0].every((v, i) => map.set(v, i)); + for (let i = 1; i < args.length; i++) { + const arr = args[i]; + const set = /* @__PURE__ */ new Set(); + for (let j = 0; j < arr.length; j++) { + const n = map.get(arr[j]) ?? -1; + if (n === -1) return false; + set.add(n); + } + if (set.size !== map.size) return false; + } + return true; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8985: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; +/***/ 7750: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -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 __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(1744), exports); -__exportStar(__webpack_require__(1613), exports); -__exportStar(__webpack_require__(628), exports); -__exportStar(__webpack_require__(4591), exports); -__exportStar(__webpack_require__(5112), exports); -__exportStar(__webpack_require__(4052), exports); -__exportStar(__webpack_require__(9173), exports); -__exportStar(__webpack_require__(5951), exports); -__exportStar(__webpack_require__(2385), exports); -__exportStar(__webpack_require__(6478), exports); -__exportStar(__webpack_require__(8234), exports); -__exportStar(__webpack_require__(9266), exports); -__exportStar(__webpack_require__(4441), exports); -__exportStar(__webpack_require__(1146), exports); -__exportStar(__webpack_require__(4354), exports); - - -/***/ }), - -/***/ 5951: -/***/ ((__unused_webpack_module, exports) => { +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var setIntersection_exports = {}; +__export(setIntersection_exports, { + $setIntersection: () => $setIntersection +}); +module.exports = __toCommonJS(setIntersection_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $setIntersection = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isNil)(args)) return null; + (0, import_util.assert)( + (0, import_util.isArray)(args) && args.every(import_util.isArray), + "$setIntersection operands must be arrays." + ); + return (0, import_util.intersection)(args, options?.hashFunction); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); -"use strict"; -// Literal Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#literal-expression-operator -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$literal = void 0; -/** - * Return a value without parsing. - * @param obj - * @param expr - * @param options - */ -const $literal = (_obj, expr, _options) => expr; -exports.$literal = $literal; +/***/ }), +/***/ 8189: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/***/ }), +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var setIsSubset_exports = {}; +__export(setIsSubset_exports, { + $setIsSubset: () => $setIsSubset +}); +module.exports = __toCommonJS(setIsSubset_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $setIsSubset = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + (0, import_util.assert)( + (0, import_util.isArray)(args) && args.every(import_util.isArray), + "$setIsSubset operands must be arrays." + ); + const first = args[0]; + const second = args[1]; + const map = import_util.ValueMap.init(); + const set = /* @__PURE__ */ new Set(); + first.every((v, i) => map.set(v, i)); + for (const v of second) { + set.add(map.get(v) ?? -1); + if (set.size > map.size) return true; + } + set.delete(-1); + return set.size == map.size; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); -/***/ 8848: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { -"use strict"; +/***/ }), -// Miscellaneous Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/rand/#mongodb-expression-exp.-rand -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$getField = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Adds, updates, or removes a specified field in a document. - * - * @param {*} obj The target object for this expression - * @param {*} expr The right-hand side of the operator - * @param {Options} options Options to use for operation - */ -const $getField = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - let input = obj; - let field = args; - if ((0, util_1.isObject)(args) && args.input && args.field) { - input = args.input; - field = args.field; - } - if ((0, util_1.isNil)(input)) - return null; - (0, util_1.assert)((0, util_1.isObject)(input), "$getField expression 'input' must evaluate to an object"); - (0, util_1.assert)((0, util_1.isString)(field), "$getField expression 'field' must evaluate to a string"); - return input[field]; +/***/ 1476: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var setUnion_exports = {}; +__export(setUnion_exports, { + $setUnion: () => $setUnion +}); +module.exports = __toCommonJS(setUnion_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $setUnion = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isNil)(args)) return null; + (0, import_util.assert)((0, import_util.isArray)(args), "$setUnion operands must be arrays."); + if (args.some(import_util.isNil)) return null; + return (0, import_util.unique)((0, import_util.flatten)(args), options?.hashFunction); }; -exports.$getField = $getField; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 2385: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; +/***/ 9756: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -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 __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(8848), exports); -__exportStar(__webpack_require__(2746), exports); -__exportStar(__webpack_require__(9468), exports); +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var internal_exports = {}; +__export(internal_exports, { + regexSearch: () => regexSearch, + trimString: () => trimString +}); +module.exports = __toCommonJS(internal_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const WHITESPACE_CHARS = [ + 0, + // '\0' Null character + 32, + // ' ', Space + 9, + // '\t' Horizontal tab + 10, + // '\n' Line feed/new line + 11, + // '\v' Vertical tab + 12, + // '\f' Form feed + 13, + // '\r' Carriage return + 160, + // Non-breaking space + 5760, + // Ogham space mark + 8192, + // En quad + 8193, + // Em quad + 8194, + // En space + 8195, + // Em space + 8196, + // Three-per-em space + 8197, + // Four-per-em space + 8198, + // Six-per-em space + 8199, + // Figure space + 8200, + // Punctuation space + 8201, + // Thin space + 8202 + // Hair space +]; +function trimString(obj, expr, options, trimOpts) { + const val = (0, import_core.computeValue)(obj, expr, null, options); + const s = val.input; + if ((0, import_util.isNil)(s)) return null; + const codepoints = (0, import_util.isNil)(val.chars) ? WHITESPACE_CHARS : val.chars.split("").map((c) => c.codePointAt(0)); + let i = 0; + let j = s.length - 1; + while (trimOpts.left && i <= j && codepoints.indexOf(s[i].codePointAt(0)) !== -1) + i++; + while (trimOpts.right && i <= j && codepoints.indexOf(s[j].codePointAt(0)) !== -1) + j--; + return s.substring(i, j + 1); +} +function regexSearch(obj, expr, options, reOpts) { + const val = (0, import_core.computeValue)(obj, expr, null, options); + if (!(0, import_util.isString)(val.input)) return []; + const regexOptions = val.options; + if (regexOptions) { + (0, import_util.assert)( + regexOptions.indexOf("x") === -1, + "extended capability option 'x' not supported" + ); + (0, import_util.assert)(regexOptions.indexOf("g") === -1, "global option 'g' not supported"); + } + let input = val.input; + const re = new RegExp(val.regex, regexOptions); + let m; + const matches = new Array(); + let offset = 0; + while (m = re.exec(input)) { + const result = { + match: m[0], + idx: m.index + offset, + captures: [] + }; + for (let i = 1; i < m.length; i++) result.captures.push(m[i] || null); + matches.push(result); + if (!reOpts.global) break; + offset = m.index + m[0].length; + input = input.substring(offset); + } + return matches; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 2746: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; +/***/ 3266: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Miscellaneous Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/rand/#mongodb-expression-exp.-rand -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$rand = void 0; -/** - * Returns a random float between 0 and 1. - * - * @param {*} _obj The target object for this expression - * @param {*} _expr The right-hand side of the operator - * @param {Options} _options Options to use for operation - */ -const $rand = (_obj, _expr, _options) => Math.random(); -exports.$rand = $rand; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var concat_exports = {}; +__export(concat_exports, { + $concat: () => $concat +}); +module.exports = __toCommonJS(concat_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $concat = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + (0, import_util.assert)( + args.every((v) => (0, import_util.isString)(v) || (0, import_util.isNil)(v)), + "$concat only supports strings." + ); + if (args.some(import_util.isNil)) return null; + return args.join(""); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 9468: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +/***/ 7620: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var string_exports = {}; +module.exports = __toCommonJS(string_exports); +__reExport(string_exports, __webpack_require__(3266), module.exports); +__reExport(string_exports, __webpack_require__(6586), module.exports); +__reExport(string_exports, __webpack_require__(9148), module.exports); +__reExport(string_exports, __webpack_require__(7724), module.exports); +__reExport(string_exports, __webpack_require__(7205), module.exports); +__reExport(string_exports, __webpack_require__(3798), module.exports); +__reExport(string_exports, __webpack_require__(1541), module.exports); +__reExport(string_exports, __webpack_require__(6942), module.exports); +__reExport(string_exports, __webpack_require__(6070), module.exports); +__reExport(string_exports, __webpack_require__(1612), module.exports); +__reExport(string_exports, __webpack_require__(9587), module.exports); +__reExport(string_exports, __webpack_require__(7993), module.exports); +__reExport(string_exports, __webpack_require__(415), module.exports); +__reExport(string_exports, __webpack_require__(9635), module.exports); +__reExport(string_exports, __webpack_require__(5332), module.exports); +__reExport(string_exports, __webpack_require__(356), module.exports); +__reExport(string_exports, __webpack_require__(2174), module.exports); +__reExport(string_exports, __webpack_require__(6459), module.exports); +__reExport(string_exports, __webpack_require__(5158), module.exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); + + +/***/ }), + +/***/ 6586: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Miscellaneous Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#miscellaneous-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$sampleRate = void 0; -const core_1 = __webpack_require__(9587); -/** - * Randomly select documents at a given rate. - * - * @param {*} obj The target object for this expression - * @param {*} expr The right-hand side of the operator - * @param {Options} options Options to use for operation - */ -const $sampleRate = (obj, expr, options) => Math.random() <= (0, core_1.computeValue)(obj, expr, null, options); -exports.$sampleRate = $sampleRate; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var indexOfBytes_exports = {}; +__export(indexOfBytes_exports, { + $indexOfBytes: () => $indexOfBytes +}); +module.exports = __toCommonJS(indexOfBytes_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $indexOfBytes = (obj, expr, options) => { + const arr = (0, import_core.computeValue)(obj, expr, null, options); + const errorMsg = "$indexOfBytes expression resolves to invalid an argument"; + if ((0, import_util.isNil)(arr[0])) return null; + (0, import_util.assert)((0, import_util.isString)(arr[0]) && (0, import_util.isString)(arr[1]), errorMsg); + const str = arr[0]; + const searchStr = arr[1]; + let start = arr[2]; + let end = arr[3]; + let valid = (0, import_util.isNil)(start) || (0, import_util.isNumber)(start) && start >= 0 && Math.round(start) === start; + valid = valid && ((0, import_util.isNil)(end) || (0, import_util.isNumber)(end) && end >= 0 && Math.round(end) === end); + (0, import_util.assert)(valid, errorMsg); + start = start || 0; + end = end || str.length; + if (start > end) return -1; + const index = str.substring(start, end).indexOf(searchStr); + return index > -1 ? index + start : index; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); + + +/***/ }), + +/***/ 9148: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var ltrim_exports = {}; +__export(ltrim_exports, { + $ltrim: () => $ltrim +}); +module.exports = __toCommonJS(ltrim_exports); +var import_internal = __webpack_require__(9756); +const $ltrim = (obj, expr, options) => { + return (0, import_internal.trimString)(obj, expr, options, { left: true, right: false }); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 6478: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; +/***/ 7724: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -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 __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(9531), exports); -__exportStar(__webpack_require__(4137), exports); -__exportStar(__webpack_require__(3514), exports); -__exportStar(__webpack_require__(5432), exports); +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var regexFind_exports = {}; +__export(regexFind_exports, { + $regexFind: () => $regexFind +}); +module.exports = __toCommonJS(regexFind_exports); +var import_internal = __webpack_require__(9756); +const $regexFind = (obj, expr, options) => { + const result = (0, import_internal.regexSearch)(obj, expr, options, { global: false }); + return result && result.length > 0 ? result[0] : null; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 9531: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 7205: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Object Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#object-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$mergeObjects = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Combines multiple documents into a single document. - * - * @param {*} obj The target object for this expression - * @param {*} expr The right-hand side of the operator - * @param {Options} options Options to use for operation - */ -const $mergeObjects = (obj, expr, options) => { - const docs = (0, core_1.computeValue)(obj, expr, null, options); - return docs instanceof Array - ? docs.reduce((memo, o) => (0, util_1.into)(memo, o), {}) - : {}; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -exports.$mergeObjects = $mergeObjects; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var regexFindAll_exports = {}; +__export(regexFindAll_exports, { + $regexFindAll: () => $regexFindAll +}); +module.exports = __toCommonJS(regexFindAll_exports); +var import_internal = __webpack_require__(9756); +const $regexFindAll = (obj, expr, options) => { + return (0, import_internal.regexSearch)(obj, expr, options, { global: true }); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 4137: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 3798: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Object Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#object-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$objectToArray = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Converts a document to an array of documents representing key-value pairs. - * - * @param {*} obj The target object for this expression - * @param {*} expr The right-hand side of the operator - * @param {Options} options Options to use for operation - */ -const $objectToArray = (obj, expr, options) => { - const val = (0, core_1.computeValue)(obj, expr, null, options); - (0, util_1.assert)((0, util_1.isObject)(val), "$objectToArray expression must resolve to an object"); - const entries = Object.entries(val); - const result = new Array(entries.length); - let i = 0; - for (const [k, v] of entries) { - result[i++] = { k, v }; - } - return result; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$objectToArray = $objectToArray; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var regexMatch_exports = {}; +__export(regexMatch_exports, { + $regexMatch: () => $regexMatch +}); +module.exports = __toCommonJS(regexMatch_exports); +var import_internal = __webpack_require__(9756); +const $regexMatch = (obj, expr, options) => { + return (0, import_internal.regexSearch)(obj, expr, options, { global: false }).length != 0; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 3514: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 1541: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Object Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#object-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$setField = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Adds, updates, or removes a specified field in a document. - * - * @param {*} obj The target object for this expression - * @param {*} expr The right-hand side of the operator - * @param {Options} options Options to use for operation - */ -const $setField = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - if ((0, util_1.isNil)(args.input)) - return null; - (0, util_1.assert)((0, util_1.isObject)(args.input), "$setField expression 'input' must evaluate to an object"); - (0, util_1.assert)((0, util_1.isString)(args.field), "$setField expression 'field' must evaluate to a string"); - if (expr.value == "$$REMOVE") { - delete obj[args.field]; - } - else { - obj[args.field] = args.value; - } - return obj; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$setField = $setField; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var replaceAll_exports = {}; +__export(replaceAll_exports, { + $replaceAll: () => $replaceAll +}); +module.exports = __toCommonJS(replaceAll_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $replaceAll = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + const arr = [args.input, args.find, args.replacement]; + if (arr.some(import_util.isNil)) return null; + (0, import_util.assert)( + arr.every(import_util.isString), + "$replaceAll expression fields must evaluate to string" + ); + return args.input.replace(new RegExp(args.find, "g"), args.replacement); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5432: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 6942: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Object Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#object-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$unsetField = void 0; -const setField_1 = __webpack_require__(3514); -/** - * Adds, updates, or removes a specified field in a document. - * - * @param {*} obj The target object for this expression - * @param {*} expr The right-hand side of the operator - * @param {Options} options Options to use for operation - */ -const $unsetField = (obj, expr, options) => { - return (0, setField_1.$setField)(obj, Object.assign(Object.assign({}, expr), { value: "$$REMOVE" }), options); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$unsetField = $unsetField; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var replaceOne_exports = {}; +__export(replaceOne_exports, { + $replaceOne: () => $replaceOne +}); +module.exports = __toCommonJS(replaceOne_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $replaceOne = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + const arr = [args.input, args.find, args.replacement]; + if (arr.some(import_util.isNil)) return null; + (0, import_util.assert)( + arr.every(import_util.isString), + "$replaceOne expression fields must evaluate to string" + ); + return args.input.replace(args.find, args.replacement); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 9462: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 6070: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * Set Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#set-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$allElementsTrue = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Returns true if all elements of a set evaluate to true, and false otherwise. - * @param obj - * @param expr - */ -const $allElementsTrue = (obj, expr, options) => { - // mongodb nests the array expression in another - const args = (0, core_1.computeValue)(obj, expr, null, options)[0]; - return args.every(v => (0, util_1.truthy)(v, options.useStrictMode)); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var rtrim_exports = {}; +__export(rtrim_exports, { + $rtrim: () => $rtrim +}); +module.exports = __toCommonJS(rtrim_exports); +var import_internal = __webpack_require__(9756); +const $rtrim = (obj, expr, options) => { + return (0, import_internal.trimString)(obj, expr, options, { left: false, right: true }); }; -exports.$allElementsTrue = $allElementsTrue; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5459: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 1612: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * Set Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#set-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$anyElementTrue = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Returns true if any elements of a set evaluate to true, and false otherwise. - * @param obj - * @param expr - */ -const $anyElementTrue = (obj, expr, options) => { - // mongodb nests the array expression in another - const args = (0, core_1.computeValue)(obj, expr, null, options)[0]; - return args.some(v => (0, util_1.truthy)(v, options.useStrictMode)); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var split_exports = {}; +__export(split_exports, { + $split: () => $split +}); +module.exports = __toCommonJS(split_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $split = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isNil)(args[0])) return null; + (0, import_util.assert)( + args.every(import_util.isString), + "$split expression must result to array(2) of strings" + ); + return args[0].split(args[1]); }; -exports.$anyElementTrue = $anyElementTrue; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8234: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; +/***/ 7993: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -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 __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(9462), exports); -__exportStar(__webpack_require__(5459), exports); -__exportStar(__webpack_require__(5403), exports); -__exportStar(__webpack_require__(6155), exports); -__exportStar(__webpack_require__(1860), exports); -__exportStar(__webpack_require__(5810), exports); -__exportStar(__webpack_require__(2409), exports); +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var strLenBytes_exports = {}; +__export(strLenBytes_exports, { + $strLenBytes: () => $strLenBytes +}); +module.exports = __toCommonJS(strLenBytes_exports); +var import_core = __webpack_require__(2760); +const $strLenBytes = (obj, expr, options) => { + return ~-encodeURI((0, import_core.computeValue)(obj, expr, null, options)).split( + /%..|./ + ).length; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5403: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 415: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * Set Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#set-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$setDifference = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Returns elements of a set that do not appear in a second set. - * @param obj - * @param expr - */ -const $setDifference = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - return args[0].filter(util_1.notInArray.bind(null, args[1])); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var strLenCP_exports = {}; +__export(strLenCP_exports, { + $strLenCP: () => $strLenCP +}); +module.exports = __toCommonJS(strLenCP_exports); +var import_core = __webpack_require__(2760); +const $strLenCP = (obj, expr, options) => { + return (0, import_core.computeValue)(obj, expr, null, options).length; }; -exports.$setDifference = $setDifference; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 6155: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 9587: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * Set Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#set-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$setEquals = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Returns true if two sets have the same elements. - * @param obj - * @param expr - */ -const $setEquals = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - const xs = (0, util_1.unique)(args[0], options === null || options === void 0 ? void 0 : options.hashFunction); - const ys = (0, util_1.unique)(args[1], options === null || options === void 0 ? void 0 : options.hashFunction); - return (xs.length === ys.length && - xs.length === (0, util_1.intersection)([xs, ys], options === null || options === void 0 ? void 0 : options.hashFunction).length); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var strcasecmp_exports = {}; +__export(strcasecmp_exports, { + $strcasecmp: () => $strcasecmp +}); +module.exports = __toCommonJS(strcasecmp_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $strcasecmp = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + let a = args[0]; + let b = args[1]; + if ((0, import_util.isEqual)(a, b) || args.every(import_util.isNil)) return 0; + (0, import_util.assert)( + args.every(import_util.isString), + "$strcasecmp must resolve to array(2) of strings" + ); + a = a.toUpperCase(); + b = b.toUpperCase(); + return a > b && 1 || a < b && -1 || 0; }; -exports.$setEquals = $setEquals; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 1860: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 9635: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * Set Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#set-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$setIntersection = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Returns the common elements of the input sets. - * @param obj - * @param expr - */ -const $setIntersection = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - (0, util_1.assert)((0, util_1.isArray)(args) && args.every(util_1.isArray), "$setIntersection: expresssion must resolve to array of arrays"); - return (0, util_1.intersection)(args, options === null || options === void 0 ? void 0 : options.hashFunction); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -exports.$setIntersection = $setIntersection; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var substr_exports = {}; +__export(substr_exports, { + $substr: () => $substr +}); +module.exports = __toCommonJS(substr_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $substr = (obj, expr, options) => { + const [s, start, count] = (0, import_core.computeValue)(obj, expr, null, options); + if (start < 0 || !(0, import_util.isString)(s)) return ""; + if (count < 0) return s.substring(start); + return s.substring(start, start + count); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5810: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 5332: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * Set Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#set-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$setIsSubset = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Returns true if all elements of a set appear in a second set. - * @param obj - * @param expr - */ -const $setIsSubset = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - return (0, util_1.intersection)(args, options === null || options === void 0 ? void 0 : options.hashFunction).length === args[0].length; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var substrBytes_exports = {}; +__export(substrBytes_exports, { + $substrBytes: () => $substrBytes +}); +module.exports = __toCommonJS(substrBytes_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const UTF8_MASK = [192, 224, 240]; +function toUtf8(n) { + if (n < 128) return [n]; + let count = n < 2048 && 1 || n < 65536 && 2 || 3; + const offset = UTF8_MASK[count - 1]; + const utf8 = [(n >> 6 * count) + offset]; + while (count > 0) utf8.push(128 | n >> 6 * --count & 63); + return utf8; +} +function utf8Encode(s) { + const buf = []; + for (let i = 0, len = s.length; i < len; i++) { + buf.push(toUtf8(s.codePointAt(i))); + } + return buf; +} +const $substrBytes = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + const s = args[0]; + const index = args[1]; + const count = args[2]; + (0, import_util.assert)( + (0, import_util.isString)(s) && (0, import_util.isNumber)(index) && index >= 0 && (0, import_util.isNumber)(count) && count >= 0, + "$substrBytes: invalid arguments" + ); + const buf = utf8Encode(s); + const validIndex = []; + let acc = 0; + for (let i = 0; i < buf.length; i++) { + validIndex.push(acc); + acc += buf[i].length; + } + const begin = validIndex.indexOf(index); + const end = validIndex.indexOf(index + count); + (0, import_util.assert)( + begin > -1 && end > -1, + "$substrBytes: invalid range, start or end index is a UTF-8 continuation byte." + ); + return s.substring(begin, end); }; -exports.$setIsSubset = $setIsSubset; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 2409: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 356: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * Set Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#set-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$setUnion = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Returns a set that holds all elements of the input sets. - * @param obj - * @param expr - */ -const $setUnion = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - (0, util_1.assert)((0, util_1.isArray)(args) && args.length == 2 && args.every(util_1.isArray), "$setUnion: arguments must be arrays"); - return (0, util_1.unique)(args[0].concat(args[1]), options === null || options === void 0 ? void 0 : options.hashFunction); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var substrCP_exports = {}; +__export(substrCP_exports, { + $substrCP: () => $substrCP +}); +module.exports = __toCommonJS(substrCP_exports); +var import_substr = __webpack_require__(9635); +const $substrCP = (obj, expr, options) => { + return (0, import_substr.$substr)(obj, expr, options); }; -exports.$setUnion = $setUnion; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 3421: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 2174: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.regexSearch = exports.trimString = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/* eslint-disable*/ -const WHITESPACE_CHARS = [ - 0x0000, - 0x0020, - 0x0009, - 0x000a, - 0x000b, - 0x000c, - 0x000d, - 0x00a0, - 0x1680, - 0x2000, - 0x2001, - 0x2002, - 0x2003, - 0x2004, - 0x2005, - 0x2006, - 0x2007, - 0x2008, - 0x2009, - 0x200a // Hair space -]; -/** - * Trims the resolved string - * - * @param obj - * @param expr - * @param options - */ -function trimString(obj, expr, options, trimOpts) { - const val = (0, core_1.computeValue)(obj, expr, null, options); - const s = val.input; - if ((0, util_1.isNil)(s)) - return null; - const codepoints = (0, util_1.isNil)(val.chars) - ? WHITESPACE_CHARS - : val.chars.split("").map((c) => c.codePointAt(0)); - let i = 0; - let j = s.length - 1; - while (trimOpts.left && - i <= j && - codepoints.indexOf(s[i].codePointAt(0)) !== -1) - i++; - while (trimOpts.right && - i <= j && - codepoints.indexOf(s[j].codePointAt(0)) !== -1) - j--; - return s.substring(i, j + 1); -} -exports.trimString = trimString; -/** - * Performs a regex search - * - * @param obj - * @param expr - * @param opts - */ -function regexSearch(obj, expr, options, reOpts) { - const val = (0, core_1.computeValue)(obj, expr, null, options); - if (!(0, util_1.isString)(val.input)) - return []; - const regexOptions = val.options; - if (regexOptions) { - (0, util_1.assert)(regexOptions.indexOf("x") === -1, "extended capability option 'x' not supported"); - (0, util_1.assert)(regexOptions.indexOf("g") === -1, "global option 'g' not supported"); - } - let input = val.input; - const re = new RegExp(val.regex, regexOptions); - let m; - const matches = new Array(); - let offset = 0; - while ((m = re.exec(input))) { - const result = { - match: m[0], - idx: m.index + offset, - captures: [] - }; - for (let i = 1; i < m.length; i++) - result.captures.push(m[i] || null); - matches.push(result); - if (!reOpts.global) - break; - offset = m.index + m[0].length; - input = input.substring(offset); - } - return matches; -} -exports.regexSearch = regexSearch; -/*eslint-enable*/ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var toLower_exports = {}; +__export(toLower_exports, { + $toLower: () => $toLower +}); +module.exports = __toCommonJS(toLower_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $toLower = (obj, expr, options) => { + const value = (0, import_core.computeValue)(obj, expr, null, options); + return (0, import_util.isEmpty)(value) ? "" : value.toLowerCase(); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8995: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 6459: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * String Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#string-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$concat = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Concatenates two strings. - * - * @param obj - * @param expr - * @returns {string|*} - */ -const $concat = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - // does not allow concatenation with nulls - if ([null, undefined].some(util_1.inArray.bind(null, args))) - return null; - return args.join(""); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var toUpper_exports = {}; +__export(toUpper_exports, { + $toUpper: () => $toUpper +}); +module.exports = __toCommonJS(toUpper_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $toUpper = (obj, expr, options) => { + const value = (0, import_core.computeValue)(obj, expr, null, options); + return (0, import_util.isEmpty)(value) ? "" : value.toUpperCase(); }; -exports.$concat = $concat; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 9266: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; +/***/ 5158: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -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 __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(8995), exports); -__exportStar(__webpack_require__(3375), exports); -__exportStar(__webpack_require__(1366), exports); -__exportStar(__webpack_require__(5649), exports); -__exportStar(__webpack_require__(7258), exports); -__exportStar(__webpack_require__(7433), exports); -__exportStar(__webpack_require__(4385), exports); -__exportStar(__webpack_require__(3869), exports); -__exportStar(__webpack_require__(3648), exports); -__exportStar(__webpack_require__(7066), exports); -__exportStar(__webpack_require__(3868), exports); -__exportStar(__webpack_require__(3837), exports); -__exportStar(__webpack_require__(5292), exports); -__exportStar(__webpack_require__(8378), exports); -__exportStar(__webpack_require__(7476), exports); -__exportStar(__webpack_require__(4098), exports); -__exportStar(__webpack_require__(7013), exports); -__exportStar(__webpack_require__(310), exports); -__exportStar(__webpack_require__(8745), exports); - - -/***/ }), - -/***/ 3375: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - -/** - * String Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#string-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$indexOfBytes = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Searches a string for an occurrence of a substring and returns the UTF-8 code point index of the first occurence. - * If the substring is not found, returns -1. - * - * @param {Object} obj - * @param {*} expr - * @return {*} - */ -const $indexOfBytes = (obj, expr, options) => { - const arr = (0, core_1.computeValue)(obj, expr, null, options); - const errorMsg = "$indexOfBytes expression resolves to invalid an argument"; - if ((0, util_1.isNil)(arr[0])) - return null; - (0, util_1.assert)((0, util_1.isString)(arr[0]) && (0, util_1.isString)(arr[1]), errorMsg); - const str = arr[0]; - const searchStr = arr[1]; - let start = arr[2]; - let end = arr[3]; - let valid = (0, util_1.isNil)(start) || - ((0, util_1.isNumber)(start) && start >= 0 && Math.round(start) === start); - valid = - valid && - ((0, util_1.isNil)(end) || ((0, util_1.isNumber)(end) && end >= 0 && Math.round(end) === end)); - (0, util_1.assert)(valid, errorMsg); - start = start || 0; - end = end || str.length; - if (start > end) - return -1; - const index = str.substring(start, end).indexOf(searchStr); - return index > -1 ? index + start : index; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var trim_exports = {}; +__export(trim_exports, { + $trim: () => $trim +}); +module.exports = __toCommonJS(trim_exports); +var import_internal = __webpack_require__(9756); +const $trim = (obj, expr, options) => { + return (0, import_internal.trimString)(obj, expr, options, { left: true, right: true }); }; -exports.$indexOfBytes = $indexOfBytes; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 1366: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 1291: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * String Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#string-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$ltrim = void 0; -const _internal_1 = __webpack_require__(3421); -/** - * Removes whitespace characters, including null, or the specified characters from the beginning of a string. - * - * @param obj - * @param expr - */ -const $ltrim = (obj, expr, options) => { - return (0, _internal_1.trimString)(obj, expr, options, { left: true, right: false }); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$ltrim = $ltrim; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var internal_exports = {}; +__export(internal_exports, { + createTrignometryOperator: () => createTrignometryOperator +}); +module.exports = __toCommonJS(internal_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const FIXED_POINTS = { + undefined: null, + null: null, + NaN: NaN, + Infinity: new Error(), + "-Infinity": new Error() +}; +function createTrignometryOperator(f, fixedPoints = FIXED_POINTS) { + const fp = Object.assign({}, FIXED_POINTS, fixedPoints); + const keySet = new Set(Object.keys(fp)); + return (obj, expr, options) => { + const n = (0, import_core.computeValue)(obj, expr, null, options); + if (keySet.has(`${n}`)) { + const res = fp[`${n}`]; + if (res instanceof Error) { + throw new import_util.MingoError( + `cannot apply $${f.name} to -inf, value must in (-inf,inf)` + ); + } + return res; + } + return f(n); + }; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5649: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +/***/ 1025: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var acos_exports = {}; +__export(acos_exports, { + $acos: () => $acos +}); +module.exports = __toCommonJS(acos_exports); +var import_internal = __webpack_require__(1291); +const $acos = (0, import_internal.createTrignometryOperator)(Math.acos, { + Infinity: Infinity, + 0: new Error() +}); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); -/** - * String Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#string-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$regexFind = void 0; -const _internal_1 = __webpack_require__(3421); -/** - * Applies a regular expression (regex) to a string and returns information on the first matched substring. - * - * @param obj - * @param expr - */ -const $regexFind = (obj, expr, options) => { - const result = (0, _internal_1.regexSearch)(obj, expr, options, { global: false }); - return result && result.length > 0 ? result[0] : null; + +/***/ }), + +/***/ 9637: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$regexFind = $regexFind; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var acosh_exports = {}; +__export(acosh_exports, { + $acosh: () => $acosh +}); +module.exports = __toCommonJS(acosh_exports); +var import_internal = __webpack_require__(1291); +const $acosh = (0, import_internal.createTrignometryOperator)(Math.acosh, { + Infinity: Infinity, + 0: new Error() +}); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 7258: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 8000: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * String Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#string-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$regexFindAll = void 0; -const _internal_1 = __webpack_require__(3421); -/** - * Applies a regular expression (regex) to a string and returns information on the all matched substrings. - * - * @param obj - * @param expr - */ -const $regexFindAll = (obj, expr, options) => { - return (0, _internal_1.regexSearch)(obj, expr, options, { global: true }); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$regexFindAll = $regexFindAll; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var asin_exports = {}; +__export(asin_exports, { + $asin: () => $asin +}); +module.exports = __toCommonJS(asin_exports); +var import_internal = __webpack_require__(1291); +const $asin = (0, import_internal.createTrignometryOperator)(Math.asin); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 7433: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 8634: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * String Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#string-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$regexMatch = void 0; -const _internal_1 = __webpack_require__(3421); -/** - * Applies a regular expression (regex) to a string and returns a boolean that indicates if a match is found or not. - * - * @param obj - * @param expr - */ -const $regexMatch = (obj, expr, options) => { - return (0, _internal_1.regexSearch)(obj, expr, options, { global: false }).length != 0; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$regexMatch = $regexMatch; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var asinh_exports = {}; +__export(asinh_exports, { + $asinh: () => $asinh +}); +module.exports = __toCommonJS(asinh_exports); +var import_internal = __webpack_require__(1291); +const $asinh = (0, import_internal.createTrignometryOperator)(Math.asinh, { + Infinity: Infinity, + "-Infinity": -Infinity +}); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 4385: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 5285: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * String Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#string-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$replaceAll = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Replaces all instances of a matched string in a given input. - * - * @param {Object} obj - * @param {Array} expr - */ -const $replaceAll = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - const arr = [args.input, args.find, args.replacement]; - if (arr.some(util_1.isNil)) - return null; - (0, util_1.assert)(arr.every(util_1.isString), "$replaceAll expression fields must evaluate to string"); - return args.input.replace(new RegExp(args.find, "g"), args.replacement); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$replaceAll = $replaceAll; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var atan_exports = {}; +__export(atan_exports, { + $atan: () => $atan +}); +module.exports = __toCommonJS(atan_exports); +var import_internal = __webpack_require__(1291); +const $atan = (0, import_internal.createTrignometryOperator)(Math.atan); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 3869: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 5991: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * String Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#string-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$replaceOne = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Replaces the first instance of a matched string in a given input. - * - * @param {Object} obj - * @param {Array} expr - */ -const $replaceOne = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - const arr = [args.input, args.find, args.replacement]; - if (arr.some(util_1.isNil)) - return null; - (0, util_1.assert)(arr.every(util_1.isString), "$replaceOne expression fields must evaluate to string"); - return args.input.replace(args.find, args.replacement); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var atan2_exports = {}; +__export(atan2_exports, { + $atan2: () => $atan2 +}); +module.exports = __toCommonJS(atan2_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $atan2 = (obj, expr, options) => { + const [y, x] = (0, import_core.computeValue)(obj, expr, null, options); + if (isNaN(y) || (0, import_util.isNil)(y)) return y; + if (isNaN(x) || (0, import_util.isNil)(x)) return x; + return Math.atan2(y, x); }; -exports.$replaceOne = $replaceOne; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 3648: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 9825: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * String Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#string-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$rtrim = void 0; -const _internal_1 = __webpack_require__(3421); -/** - * Removes whitespace characters, including null, or the specified characters from the end of a string. - * - * @param obj - * @param expr - */ -const $rtrim = (obj, expr, options) => { - return (0, _internal_1.trimString)(obj, expr, options, { left: false, right: true }); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$rtrim = $rtrim; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var atanh_exports = {}; +__export(atanh_exports, { + $atanh: () => $atanh +}); +module.exports = __toCommonJS(atanh_exports); +var import_internal = __webpack_require__(1291); +const $atanh = (0, import_internal.createTrignometryOperator)(Math.atanh, { + 1: Infinity, + "-1": -Infinity +}); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 7066: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 3676: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * String Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#string-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$split = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Splits a string into substrings based on a delimiter. - * If the delimiter is not found within the string, returns an array containing the original string. - * - * @param {Object} obj - * @param {Array} expr - * @return {Array} Returns an array of substrings. - */ -const $split = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - if ((0, util_1.isNil)(args[0])) - return null; - (0, util_1.assert)(args.every(util_1.isString), "$split expression must result to array(2) of strings"); - return args[0].split(args[1]); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -exports.$split = $split; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var cos_exports = {}; +__export(cos_exports, { + $cos: () => $cos +}); +module.exports = __toCommonJS(cos_exports); +var import_internal = __webpack_require__(1291); +const $cos = (0, import_internal.createTrignometryOperator)(Math.cos); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 3837: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 5310: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * String Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#string-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$strLenBytes = void 0; -const core_1 = __webpack_require__(9587); -/** - * Returns the number of UTF-8 encoded bytes in the specified string. - * - * @param {Object} obj - * @param {String} expr - * @return {Number} - */ -const $strLenBytes = (obj, expr, options) => { - return ~-encodeURI((0, core_1.computeValue)(obj, expr, null, options)).split(/%..|./).length; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$strLenBytes = $strLenBytes; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var cosh_exports = {}; +__export(cosh_exports, { + $cosh: () => $cosh +}); +module.exports = __toCommonJS(cosh_exports); +var import_internal = __webpack_require__(1291); +const $cosh = (0, import_internal.createTrignometryOperator)(Math.cosh, { + "-Infinity": Infinity, + Infinity: Infinity +}); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5292: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 757: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * String Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#string-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$strLenCP = void 0; -const core_1 = __webpack_require__(9587); -/** - * Returns the number of UTF-8 code points in the specified string. - * - * @param {Object} obj - * @param {String} expr - * @return {Number} - */ -const $strLenCP = (obj, expr, options) => { - return (0, core_1.computeValue)(obj, expr, null, options).length; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$strLenCP = $strLenCP; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var degreesToRadians_exports = {}; +__export(degreesToRadians_exports, { + $degreesToRadians: () => $degreesToRadians +}); +module.exports = __toCommonJS(degreesToRadians_exports); +var import_internal = __webpack_require__(1291); +const RADIANS_FACTOR = Math.PI / 180; +const $degreesToRadians = (0, import_internal.createTrignometryOperator)( + (n) => n * RADIANS_FACTOR, + { + Infinity: Infinity, + "-Infinity": Infinity + } +); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 3868: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +/***/ 7367: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var trignometry_exports = {}; +module.exports = __toCommonJS(trignometry_exports); +__reExport(trignometry_exports, __webpack_require__(1025), module.exports); +__reExport(trignometry_exports, __webpack_require__(9637), module.exports); +__reExport(trignometry_exports, __webpack_require__(8000), module.exports); +__reExport(trignometry_exports, __webpack_require__(8634), module.exports); +__reExport(trignometry_exports, __webpack_require__(5285), module.exports); +__reExport(trignometry_exports, __webpack_require__(5991), module.exports); +__reExport(trignometry_exports, __webpack_require__(9825), module.exports); +__reExport(trignometry_exports, __webpack_require__(3676), module.exports); +__reExport(trignometry_exports, __webpack_require__(5310), module.exports); +__reExport(trignometry_exports, __webpack_require__(757), module.exports); +__reExport(trignometry_exports, __webpack_require__(5183), module.exports); +__reExport(trignometry_exports, __webpack_require__(7969), module.exports); +__reExport(trignometry_exports, __webpack_require__(9589), module.exports); +__reExport(trignometry_exports, __webpack_require__(6404), module.exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); + + +/***/ }), + +/***/ 5183: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * String Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#string-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$strcasecmp = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Compares two strings and returns an integer that reflects the comparison. - * - * @param obj - * @param expr - * @returns {number} - */ -const $strcasecmp = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - let a = args[0]; - let b = args[1]; - if ((0, util_1.isEqual)(a, b) || args.every(util_1.isNil)) - return 0; - (0, util_1.assert)(args.every(util_1.isString), "$strcasecmp must resolve to array(2) of strings"); - a = a.toUpperCase(); - b = b.toUpperCase(); - return (a > b && 1) || (a < b && -1) || 0; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$strcasecmp = $strcasecmp; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var radiansToDegrees_exports = {}; +__export(radiansToDegrees_exports, { + $radiansToDegrees: () => $radiansToDegrees +}); +module.exports = __toCommonJS(radiansToDegrees_exports); +var import_internal = __webpack_require__(1291); +const DEGREES_FACTOR = 180 / Math.PI; +const $radiansToDegrees = (0, import_internal.createTrignometryOperator)( + (n) => n * DEGREES_FACTOR, + { + Infinity: Infinity, + "-Infinity": -Infinity + } +); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8378: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 7969: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * String Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#string-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$substr = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Returns a substring of a string, starting at a specified index position and including the specified number of characters. - * The index is zero-based. - * - * @param obj - * @param expr - * @returns {string} - */ -const $substr = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - const s = args[0]; - const index = args[1]; - const count = args[2]; - if ((0, util_1.isString)(s)) { - if (index < 0) { - return ""; - } - else if (count < 0) { - return s.substr(index); - } - else { - return s.substr(index, count); - } - } - return ""; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$substr = $substr; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var sin_exports = {}; +__export(sin_exports, { + $sin: () => $sin +}); +module.exports = __toCommonJS(sin_exports); +var import_internal = __webpack_require__(1291); +const $sin = (0, import_internal.createTrignometryOperator)(Math.sin); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 7476: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 9589: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * String Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#string-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$substrBytes = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -const UTF8_MASK = [0xc0, 0xe0, 0xf0]; -// encodes a unicode code point to a utf8 byte sequence -// https://encoding.spec.whatwg.org/#utf-8 -function toUtf8(n) { - if (n < 0x80) - return [n]; - let count = (n < 0x0800 && 1) || (n < 0x10000 && 2) || 3; - const offset = UTF8_MASK[count - 1]; - const utf8 = [(n >> (6 * count)) + offset]; - while (count > 0) - utf8.push(0x80 | ((n >> (6 * --count)) & 0x3f)); - return utf8; -} -function utf8Encode(s) { - const buf = []; - for (let i = 0, len = s.length; i < len; i++) { - buf.push(toUtf8(s.codePointAt(i))); - } - return buf; -} -/** - * Returns a substring of a string, starting at a specified index position and including the specified number of characters. - * The index is zero-based. - * - * @param obj - * @param expr - * @returns {string} - */ -const $substrBytes = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - const s = args[0]; - const index = args[1]; - const count = args[2]; - (0, util_1.assert)((0, util_1.isString)(s) && - (0, util_1.isNumber)(index) && - index >= 0 && - (0, util_1.isNumber)(count) && - count >= 0, "$substrBytes: invalid arguments"); - const buf = utf8Encode(s); - const validIndex = []; - let acc = 0; - for (let i = 0; i < buf.length; i++) { - validIndex.push(acc); - acc += buf[i].length; - } - const begin = validIndex.indexOf(index); - const end = validIndex.indexOf(index + count); - (0, util_1.assert)(begin > -1 && end > -1, "$substrBytes: invalid range, start or end index is a UTF-8 continuation byte."); - return s.substring(begin, end); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$substrBytes = $substrBytes; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var sinh_exports = {}; +__export(sinh_exports, { + $sinh: () => $sinh +}); +module.exports = __toCommonJS(sinh_exports); +var import_internal = __webpack_require__(1291); +const $sinh = (0, import_internal.createTrignometryOperator)(Math.sinh, { + "-Infinity": -Infinity, + Infinity: Infinity +}); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 4098: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 6404: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * String Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#string-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$substrCP = void 0; -const substr_1 = __webpack_require__(8378); -const $substrCP = (obj, expr, options) => { - return (0, substr_1.$substr)(obj, expr, options); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$substrCP = $substrCP; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var tan_exports = {}; +__export(tan_exports, { + $tan: () => $tan +}); +module.exports = __toCommonJS(tan_exports); +var import_internal = __webpack_require__(1291); +const $tan = (0, import_internal.createTrignometryOperator)(Math.tan); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 7013: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 5281: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * String Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#string-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$toLower = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Converts a string to lowercase. - * - * @param obj - * @param expr - * @returns {string} - */ -const $toLower = (obj, expr, options) => { - const value = (0, core_1.computeValue)(obj, expr, null, options); - return (0, util_1.isEmpty)(value) ? "" : value.toLowerCase(); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$toLower = $toLower; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var internal_exports = {}; +__export(internal_exports, { + MAX_INT: () => MAX_INT, + MAX_LONG: () => MAX_LONG, + MIN_INT: () => MIN_INT, + MIN_LONG: () => MIN_LONG, + TypeConvertError: () => TypeConvertError, + toInteger: () => toInteger +}); +module.exports = __toCommonJS(internal_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const MAX_INT = 2147483647; +const MIN_INT = -2147483648; +const MAX_LONG = Number.MAX_SAFE_INTEGER; +const MIN_LONG = Number.MIN_SAFE_INTEGER; +class TypeConvertError extends Error { + constructor(message) { + super(message); + } +} +function toInteger(obj, expr, options, min, max) { + const val = (0, import_core.computeValue)(obj, expr, null, options); + if (val === true) return 1; + if (val === false) return 0; + if ((0, import_util.isNil)(val)) return null; + if ((0, import_util.isDate)(val)) return val.getTime(); + const n = Number(val); + if ((0, import_util.isNumber)(n) && n >= min && n <= max) { + if (!(0, import_util.isString)(val) || n.toString().indexOf(".") === -1) { + return Math.trunc(n); + } + } + throw new TypeConvertError( + `cannot convert '${val}' to ${max == MAX_INT ? "int" : "long"}` + ); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 310: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +/***/ 6234: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var convert_exports = {}; +__export(convert_exports, { + $convert: () => $convert +}); +module.exports = __toCommonJS(convert_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +var import_internal = __webpack_require__(5281); +var import_toBool = __webpack_require__(448); +var import_toDate = __webpack_require__(2848); +var import_toDouble = __webpack_require__(7093); +var import_toInt = __webpack_require__(5375); +var import_toLong = __webpack_require__(8074); +var import_toString = __webpack_require__(4077); +const $convert = (obj, expr, options) => { + const args = (0, import_core.computeValue)(obj, expr, null, options); + args.onNull = args.onNull === void 0 ? null : args.onNull; + if ((0, import_util.isNil)(args.input)) return args.onNull; + try { + switch (args.to) { + case 2: + case "string": + return (0, import_toString.$toString)(obj, args.input, options); + case 8: + case "boolean": + case "bool": + return (0, import_toBool.$toBool)(obj, args.input, options); + case 9: + case "date": + return (0, import_toDate.$toDate)(obj, args.input, options); + case 1: + case 19: + case "double": + case "decimal": + case "number": + return (0, import_toDouble.$toDouble)(obj, args.input, options); + case 16: + case "int": + return (0, import_toInt.$toInt)(obj, args.input, options); + case 18: + case "long": + return (0, import_toLong.$toLong)(obj, args.input, options); + } + } catch { + } + if (args.onError !== void 0) return args.onError; + throw new import_internal.TypeConvertError(`could not convert to type ${args.to}.`); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); + + +/***/ }), + +/***/ 1377: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * String Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#string-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$toUpper = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Converts a string to uppercase. - * - * @param obj - * @param expr - * @returns {string} - */ -const $toUpper = (obj, expr, options) => { - const value = (0, core_1.computeValue)(obj, expr, null, options); - return (0, util_1.isEmpty)(value) ? "" : value.toUpperCase(); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$toUpper = $toUpper; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var type_exports = {}; +module.exports = __toCommonJS(type_exports); +__reExport(type_exports, __webpack_require__(6234), module.exports); +__reExport(type_exports, __webpack_require__(2024), module.exports); +__reExport(type_exports, __webpack_require__(448), module.exports); +__reExport(type_exports, __webpack_require__(2848), module.exports); +__reExport(type_exports, __webpack_require__(3289), module.exports); +__reExport(type_exports, __webpack_require__(7093), module.exports); +__reExport(type_exports, __webpack_require__(5375), module.exports); +__reExport(type_exports, __webpack_require__(8074), module.exports); +__reExport(type_exports, __webpack_require__(4077), module.exports); +__reExport(type_exports, __webpack_require__(1317), module.exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8745: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 2024: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * String Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#string-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$trim = void 0; -const _internal_1 = __webpack_require__(3421); -/** - * Removes whitespace characters, including null, or the specified characters from the beginning and end of a string. - * - * @param obj - * @param expr - */ -const $trim = (obj, expr, options) => { - return (0, _internal_1.trimString)(obj, expr, options, { left: true, right: true }); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var isNumber_exports = {}; +__export(isNumber_exports, { + $isNumber: () => $isNumber +}); +module.exports = __toCommonJS(isNumber_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $isNumber = (obj, expr, options) => { + const n = (0, import_core.computeValue)(obj, expr, null, options); + return (0, import_util.isNumber)(n); }; -exports.$trim = $trim; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 725: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 448: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Trignometry Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#trigonometry-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.createTrignometryOperator = void 0; -const core_1 = __webpack_require__(9587); -const FIXED_POINTS = { - undefined: null, - null: null, - NaN: NaN, - Infinity: new Error(), - "-Infinity": new Error() +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -/** - * Returns an operator for a given trignometric function - * - * @param f The trignometric function - */ -function createTrignometryOperator(f, fixedPoints = FIXED_POINTS) { - const fp = Object.assign({}, FIXED_POINTS, fixedPoints); - const keySet = new Set(Object.keys(fp)); - return (obj, expr, options) => { - const n = (0, core_1.computeValue)(obj, expr, null, options); - if (keySet.has(`${n}`)) { - const res = fp[`${n}`]; - if (res instanceof Error) { - throw new Error(`cannot apply $${f.name} to -inf, value must in (-inf,inf)`); - } - return res; - } - return f(n); - }; -} -exports.createTrignometryOperator = createTrignometryOperator; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var toBool_exports = {}; +__export(toBool_exports, { + $toBool: () => $toBool +}); +module.exports = __toCommonJS(toBool_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $toBool = (obj, expr, options) => { + const val = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isNil)(val)) return null; + if ((0, import_util.isString)(val)) return true; + return Boolean(val); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 4349: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 2848: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Trignometry Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#trigonometry-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$acos = void 0; -const _internal_1 = __webpack_require__(725); -/** Returns the inverse cosine (arc cosine) of a value in radians. */ -exports.$acos = (0, _internal_1.createTrignometryOperator)(Math.acos, { - Infinity: Infinity, - 0: new Error(), +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var toDate_exports = {}; +__export(toDate_exports, { + $toDate: () => $toDate }); +module.exports = __toCommonJS(toDate_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +var import_internal = __webpack_require__(5281); +const $toDate = (obj, expr, options) => { + const val = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isDate)(val)) return val; + if ((0, import_util.isNil)(val)) return null; + const d = new Date(val); + const n = d.getTime(); + if (!isNaN(n)) return d; + throw new import_internal.TypeConvertError(`cannot convert '${val}' to date`); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 1699: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 3289: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Trignometry Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#trigonometry-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$acosh = void 0; -const _internal_1 = __webpack_require__(725); -/** Returns the inverse hyperbolic cosine (hyperbolic arc cosine) of a value in radians. */ -exports.$acosh = (0, _internal_1.createTrignometryOperator)(Math.acosh, { - Infinity: Infinity, - 0: new Error(), +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var toDecimal_exports = {}; +__export(toDecimal_exports, { + $toDecimal: () => $toDecimal }); +module.exports = __toCommonJS(toDecimal_exports); +var import_toDouble = __webpack_require__(7093); +const $toDecimal = import_toDouble.$toDouble; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 160: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 7093: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Trignometry Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#trigonometry-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$asin = void 0; -const _internal_1 = __webpack_require__(725); -/** Returns the inverse sin (arc sine) of a value in radians. */ -exports.$asin = (0, _internal_1.createTrignometryOperator)(Math.asin); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var toDouble_exports = {}; +__export(toDouble_exports, { + $toDouble: () => $toDouble +}); +module.exports = __toCommonJS(toDouble_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +var import_internal = __webpack_require__(5281); +const $toDouble = (obj, expr, options) => { + const val = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isNil)(val)) return null; + if ((0, import_util.isDate)(val)) return val.getTime(); + if (val === true) return 1; + if (val === false) return 0; + const n = Number(val); + if ((0, import_util.isNumber)(n)) return n; + throw new import_internal.TypeConvertError(`cannot convert '${val}' to double/decimal`); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5805: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 5375: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Trignometry Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#trigonometry-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$asinh = void 0; -const _internal_1 = __webpack_require__(725); -/** Returns the inverse hyperbolic sine (hyperbolic arc sine) of a value in radians. */ -exports.$asinh = (0, _internal_1.createTrignometryOperator)(Math.asinh, { - Infinity: Infinity, - "-Infinity": -Infinity, +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var toInt_exports = {}; +__export(toInt_exports, { + $toInt: () => $toInt }); +module.exports = __toCommonJS(toInt_exports); +var import_internal = __webpack_require__(5281); +const $toInt = (obj, expr, options) => (0, import_internal.toInteger)(obj, expr, options, import_internal.MIN_INT, import_internal.MAX_INT); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8335: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 8074: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Trignometry Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#trigonometry-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$atan = void 0; -const _internal_1 = __webpack_require__(725); -/** Returns the inverse tangent (arc tangent) of a value in radians. */ -exports.$atan = (0, _internal_1.createTrignometryOperator)(Math.atan); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var toLong_exports = {}; +__export(toLong_exports, { + $toLong: () => $toLong +}); +module.exports = __toCommonJS(toLong_exports); +var import_internal = __webpack_require__(5281); +const $toLong = (obj, expr, options) => (0, import_internal.toInteger)(obj, expr, options, import_internal.MIN_LONG, import_internal.MAX_LONG); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5106: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 4077: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Trignometry Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#trigonometry-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$atan2 = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Returns the inverse tangent (arc tangent) of y / x in radians, where y and x are the first and second values passed to the expression respectively. */ -const $atan2 = (obj, expr, options) => { - const [y, x] = (0, core_1.computeValue)(obj, expr, null, options); - if (isNaN(y) || (0, util_1.isNil)(y)) - return y; - if (isNaN(x) || (0, util_1.isNil)(x)) - return x; - return Math.atan2(y, x); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var toString_exports = {}; +__export(toString_exports, { + $toString: () => $toString +}); +module.exports = __toCommonJS(toString_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +var import_dateToString = __webpack_require__(7165); +const $toString = (obj, expr, options) => { + const val = (0, import_core.computeValue)(obj, expr, null, options); + if ((0, import_util.isNil)(val)) return null; + if ((0, import_util.isDate)(val)) { + return (0, import_dateToString.$dateToString)( + obj, + { + date: expr, + format: "%Y-%m-%dT%H:%M:%S.%LZ" + }, + options + ); + } + return val.toString(); }; -exports.$atan2 = $atan2; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5133: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 1317: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Trignometry Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#trigonometry-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$atanh = void 0; -const _internal_1 = __webpack_require__(725); -/** Returns the inverse hyperbolic tangent (hyperbolic arc tangent) of a value in radians. */ -exports.$atanh = (0, _internal_1.createTrignometryOperator)(Math.atanh, { - 1: Infinity, - "-1": -Infinity, +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var type_exports = {}; +__export(type_exports, { + $type: () => $type }); +module.exports = __toCommonJS(type_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +var import_internal = __webpack_require__(5281); +const $type = (obj, expr, options) => { + const v = (0, import_core.computeValue)(obj, expr, null, options); + if (options.useStrictMode) { + if (v === void 0) return "missing"; + if (v === true || v === false) return "bool"; + if ((0, import_util.isNumber)(v)) { + if (v % 1 != 0) return "double"; + return v >= import_internal.MIN_INT && v <= import_internal.MAX_INT ? "int" : "long"; + } + if ((0, import_util.isRegExp)(v)) return "regex"; + } + return (0, import_util.typeOf)(v); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 4925: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 2537: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Trignometry Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#trigonometry-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$cos = void 0; -const _internal_1 = __webpack_require__(725); -/** Returns the cosine of a value that is measured in radians. */ -exports.$cos = (0, _internal_1.createTrignometryOperator)(Math.cos); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var variable_exports = {}; +module.exports = __toCommonJS(variable_exports); +__reExport(variable_exports, __webpack_require__(7544), module.exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 3138: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 7544: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Trignometry Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#trigonometry-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$cosh = void 0; -const _internal_1 = __webpack_require__(725); -/** Returns the hyperbolic cosine of a value that is measured in radians. */ -exports.$cosh = (0, _internal_1.createTrignometryOperator)(Math.cosh, { - "-Infinity": Infinity, - Infinity: Infinity, - // [Math.PI]: -1, +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var let_exports = {}; +__export(let_exports, { + $let: () => $let }); +module.exports = __toCommonJS(let_exports); +var import_core = __webpack_require__(2760); +const $let = (obj, expr, options) => { + const variables = {}; + for (const [key, val] of Object.entries(expr.vars)) { + variables[key] = (0, import_core.computeValue)(obj, val, null, options); + } + return (0, import_core.computeValue)( + obj, + expr.in, + null, + import_core.ComputeOptions.init(options, obj, { variables }) + ); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 2989: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 2088: +/***/ ((module) => { -// Trignometry Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#trigonometry-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$degreesToRadians = void 0; -const _internal_1 = __webpack_require__(725); -const RADIANS_FACTOR = Math.PI / 180; -/** Converts a value from degrees to radians. */ -exports.$degreesToRadians = (0, _internal_1.createTrignometryOperator)((n) => n * RADIANS_FACTOR, { - Infinity: Infinity, - "-Infinity": Infinity, +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var internal_exports = {}; +__export(internal_exports, { + isUnbounded: () => isUnbounded }); +module.exports = __toCommonJS(internal_exports); +const isUnbounded = (window) => { + const boundary = window?.documents || window?.range; + return !boundary || boundary[0] === "unbounded" && boundary[1] === "unbounded"; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 4441: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; +/***/ 5770: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -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]; } }; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var addFields_exports = {}; +__export(addFields_exports, { + $addFields: () => $addFields +}); +module.exports = __toCommonJS(addFields_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $addFields = (collection, expr, options) => { + const newFields = Object.keys(expr); + if (newFields.length === 0) return collection; + return collection.map((obj) => { + const newObj = { ...obj }; + for (const field of newFields) { + const newValue = (0, import_core.computeValue)(obj, expr[field], null, options); + if (newValue !== void 0) { + (0, import_util.setValue)(newObj, field, newValue); + } else { + (0, import_util.removeValue)(newObj, field); + } } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); + return newObj; + }); }; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(4349), exports); -__exportStar(__webpack_require__(1699), exports); -__exportStar(__webpack_require__(160), exports); -__exportStar(__webpack_require__(5805), exports); -__exportStar(__webpack_require__(8335), exports); -__exportStar(__webpack_require__(5106), exports); -__exportStar(__webpack_require__(5133), exports); -__exportStar(__webpack_require__(4925), exports); -__exportStar(__webpack_require__(3138), exports); -__exportStar(__webpack_require__(2989), exports); -__exportStar(__webpack_require__(6019), exports); -__exportStar(__webpack_require__(8534), exports); -__exportStar(__webpack_require__(4738), exports); -__exportStar(__webpack_require__(5295), exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 6019: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 308: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Trignometry Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#trigonometry-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$radiansToDegrees = void 0; -const _internal_1 = __webpack_require__(725); -const DEGREES_FACTOR = 180 / Math.PI; -/** Converts a value from radians to degrees. */ -exports.$radiansToDegrees = (0, _internal_1.createTrignometryOperator)((n) => n * DEGREES_FACTOR, { - Infinity: Infinity, - "-Infinity": -Infinity, +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var bucket_exports = {}; +__export(bucket_exports, { + $bucket: () => $bucket }); +module.exports = __toCommonJS(bucket_exports); +var import_core = __webpack_require__(2760); +var import_lazy = __webpack_require__(8625); +var import_util = __webpack_require__(7839); +const $bucket = (collection, expr, options) => { + const bounds = [...expr.boundaries]; + const defaultKey = expr.default; + const lower = bounds[0]; + const upper = bounds[bounds.length - 1]; + const outputExpr = expr.output || { count: { $sum: 1 } }; + (0, import_util.assert)(bounds.length > 1, "$bucket must specify at least two boundaries."); + const isValid = bounds.every( + (v, i) => i === 0 || (0, import_util.typeOf)(v) === (0, import_util.typeOf)(bounds[i - 1]) && (0, import_util.compare)(v, bounds[i - 1]) > 0 + ); + (0, import_util.assert)( + isValid, + `$bucket: bounds must be of same type and in ascending order` + ); + if (!(0, import_util.isNil)(defaultKey) && (0, import_util.typeOf)(defaultKey) === (0, import_util.typeOf)(lower)) { + (0, import_util.assert)( + (0, import_util.compare)(defaultKey, upper) >= 0 || (0, import_util.compare)(defaultKey, lower) < 0, + "$bucket 'default' expression must be out of boundaries range" + ); + } + const createBuckets = () => { + const buckets = /* @__PURE__ */ new Map(); + for (let i = 0; i < bounds.length - 1; i++) { + buckets.set(bounds[i], []); + } + if (!(0, import_util.isNil)(defaultKey)) buckets.set(defaultKey, []); + collection.each((obj) => { + const key = (0, import_core.computeValue)(obj, expr.groupBy, null, options); + if ((0, import_util.isNil)(key) || (0, import_util.compare)(key, lower) < 0 || (0, import_util.compare)(key, upper) >= 0) { + (0, import_util.assert)( + !(0, import_util.isNil)(defaultKey), + "$bucket require a default for out of range values" + ); + buckets.get(defaultKey).push(obj); + } else { + (0, import_util.assert)( + (0, import_util.compare)(key, lower) >= 0 && (0, import_util.compare)(key, upper) < 0, + "$bucket 'groupBy' expression must resolve to a value in range of boundaries" + ); + const index = (0, import_util.findInsertIndex)(bounds, key); + const boundKey = bounds[Math.max(0, index - 1)]; + buckets.get(boundKey).push(obj); + } + }); + bounds.pop(); + if (!(0, import_util.isNil)(defaultKey)) bounds.push(defaultKey); + (0, import_util.assert)( + buckets.size === bounds.length, + "bounds and groups must be of equal size." + ); + return (0, import_lazy.Lazy)(bounds).map((key) => { + return { + ...(0, import_core.computeValue)( + buckets.get(key), + outputExpr, + null, + options + ), + _id: key + }; + }); + }; + let iterator; + return (0, import_lazy.Lazy)(() => { + if (!iterator) iterator = createBuckets(); + return iterator.next(); + }); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8534: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - -// Trignometry Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#trigonometry-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$sin = void 0; -const _internal_1 = __webpack_require__(725); -/** Returns the sine of a value that is measured in radians. */ -exports.$sin = (0, _internal_1.createTrignometryOperator)(Math.sin); - - -/***/ }), - -/***/ 4738: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 7267: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Trignometry Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#trigonometry-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$sinh = void 0; -const _internal_1 = __webpack_require__(725); -/** Returns the hyperbolic sine of a value that is measured in radians. */ -exports.$sinh = (0, _internal_1.createTrignometryOperator)(Math.sinh, { - "-Infinity": -Infinity, - Infinity: Infinity, +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var bucketAuto_exports = {}; +__export(bucketAuto_exports, { + $bucketAuto: () => $bucketAuto +}); +module.exports = __toCommonJS(bucketAuto_exports); +var import_core = __webpack_require__(2760); +var import_lazy = __webpack_require__(8625); +var import_util = __webpack_require__(7839); +const $bucketAuto = (collection, expr, options) => { + const { + buckets: bucketCount, + groupBy: groupByExpr, + output: optOutputExpr, + // Available only if the all groupBy values are numeric and none of them are NaN. + granularity + } = expr; + const outputExpr = optOutputExpr ?? { count: { $sum: 1 } }; + (0, import_util.assert)( + bucketCount > 0, + `$bucketAuto: 'buckets' field must be greater than 0, but found: ${bucketCount}` + ); + if (granularity) { + (0, import_util.assert)( + /^POWERSOF2|1-2-5|E(6|12|24|48|96|192)|R(5|10|20|40|80)$/.test( + granularity + ), + `$bucketAuto: invalid granularity '${granularity}'.` + ); + } + const keyMap = /* @__PURE__ */ new Map(); + const setKey = !granularity ? (o, k) => keyMap.set(o, k) : (_, _2) => { + }; + const sorted = collection.map((o) => { + const k = (0, import_core.computeValue)(o, groupByExpr, null, options) ?? null; + (0, import_util.assert)( + !granularity || (0, import_util.isNumber)(k), + "$bucketAuto: groupBy values must be numeric when granularity is specified." + ); + setKey(o, k ?? null); + return [k ?? null, o]; + }).value(); + sorted.sort((x, y) => { + if ((0, import_util.isNil)(x[0])) return -1; + if ((0, import_util.isNil)(y[0])) return 1; + return (0, import_util.compare)(x[0], y[0]); + }); + let getNext; + if (!granularity) { + getNext = granularityDefault(sorted, bucketCount, keyMap); + } else if (granularity == "POWERSOF2") { + getNext = granularityPowerOfTwo( + sorted, + bucketCount + ); + } else { + getNext = granularityPreferredSeries( + sorted, + bucketCount, + granularity + ); + } + let terminate = false; + return (0, import_lazy.Lazy)(() => { + if (terminate) return { done: true }; + const { min, max, bucket, done } = getNext(); + terminate = done; + const outFields = (0, import_core.computeValue)( + bucket, + outputExpr, + null, + options + ); + for (const [k, v] of Object.entries(outFields)) { + if ((0, import_util.isArray)(v)) outFields[k] = v.filter((v2) => v2 !== void 0); + } + return { + done: false, + value: { + ...outFields, + _id: { min, max } + } + }; + }); +}; +function granularityDefault(sorted, bucketCount, keyMap) { + const size = sorted.length; + const approxBucketSize = Math.max(1, Math.round(sorted.length / bucketCount)); + let index = 0; + let nBuckets = 0; + return () => { + const isLastBucket = ++nBuckets == bucketCount; + const bucket = new Array(); + while (index < size && (isLastBucket || bucket.length < approxBucketSize || index > 0 && (0, import_util.isEqual)(sorted[index - 1][0], sorted[index][0]))) { + bucket.push(sorted[index++][1]); + } + const min = keyMap.get(bucket[0]); + let max; + if (index < size) { + max = sorted[index][0]; + } else { + max = keyMap.get(bucket[bucket.length - 1]); + } + (0, import_util.assert)( + (0, import_util.isNil)(max) || (0, import_util.isNil)(min) || min <= max, + `error: $bucketAuto boundary must be in order.` + ); + return { + min, + max, + bucket, + done: index >= size + }; + }; +} +function granularityPowerOfTwo(sorted, bucketCount) { + const size = sorted.length; + const approxBucketSize = Math.max(1, Math.round(sorted.length / bucketCount)); + const roundUp2 = (n) => n === 0 ? 0 : 2 ** (Math.floor(Math.log2(n)) + 1); + let index = 0; + let min = 0; + let max = 0; + return () => { + const bucket = new Array(); + const boundValue = roundUp2(max); + min = index > 0 ? max : 0; + while (bucket.length < approxBucketSize && index < size && (max === 0 || sorted[index][0] < boundValue)) { + bucket.push(sorted[index++][1]); + } + max = max == 0 ? roundUp2(sorted[index - 1][0]) : boundValue; + while (index < size && sorted[index][0] < max) { + bucket.push(sorted[index++][1]); + } + return { + min, + max, + bucket, + done: index >= size + }; + }; +} +const PREFERRED_NUMBERS = Object.freeze({ + // "Least rounded" Renard number series, taken from Wikipedia page on preferred + // numbers: https://en.wikipedia.org/wiki/Preferred_number#Renard_numbers + R5: [10, 16, 25, 40, 63], + R10: [100, 125, 160, 200, 250, 315, 400, 500, 630, 800], + R20: [ + 100, + 112, + 125, + 140, + 160, + 180, + 200, + 224, + 250, + 280, + 315, + 355, + 400, + 450, + 500, + 560, + 630, + 710, + 800, + 900 + ], + R40: [ + 100, + 106, + 112, + 118, + 125, + 132, + 140, + 150, + 160, + 170, + 180, + 190, + 200, + 212, + 224, + 236, + 250, + 265, + 280, + 300, + 315, + 355, + 375, + 400, + 425, + 450, + 475, + 500, + 530, + 560, + 600, + 630, + 670, + 710, + 750, + 800, + 850, + 900, + 950 + ], + R80: [ + 103, + 109, + 115, + 122, + 128, + 136, + 145, + 155, + 165, + 175, + 185, + 195, + 206, + 218, + 230, + 243, + 258, + 272, + 290, + 307, + 325, + 345, + 365, + 387, + 412, + 437, + 462, + 487, + 515, + 545, + 575, + 615, + 650, + 690, + 730, + 775, + 825, + 875, + 925, + 975 + ], + // https://en.wikipedia.org/wiki/Preferred_number#1-2-5_series + "1-2-5": [10, 20, 50], + // E series, taken from Wikipedia page on preferred numbers: + // https://en.wikipedia.org/wiki/Preferred_number#E_series + E6: [10, 15, 22, 33, 47, 68], + E12: [10, 12, 15, 18, 22, 27, 33, 39, 47, 56, 68, 82], + E24: [ + 10, + 11, + 12, + 13, + 15, + 16, + 18, + 20, + 22, + 24, + 27, + 30, + 33, + 36, + 39, + 43, + 47, + 51, + 56, + 62, + 68, + 75, + 82, + 91 + ], + E48: [ + 100, + 105, + 110, + 115, + 121, + 127, + 133, + 140, + 147, + 154, + 162, + 169, + 178, + 187, + 196, + 205, + 215, + 226, + 237, + 249, + 261, + 274, + 287, + 301, + 316, + 332, + 348, + 365, + 383, + 402, + 422, + 442, + 464, + 487, + 511, + 536, + 562, + 590, + 619, + 649, + 681, + 715, + 750, + 787, + 825, + 866, + 909, + 953 + ], + E96: [ + 100, + 102, + 105, + 107, + 110, + 113, + 115, + 118, + 121, + 124, + 127, + 130, + 133, + 137, + 140, + 143, + 147, + 150, + 154, + 158, + 162, + 165, + 169, + 174, + 178, + 182, + 187, + 191, + 196, + 200, + 205, + 210, + 215, + 221, + 226, + 232, + 237, + 243, + 249, + 255, + 261, + 267, + 274, + 280, + 287, + 294, + 301, + 309, + 316, + 324, + 332, + 340, + 348, + 357, + 365, + 374, + 383, + 392, + 402, + 412, + 422, + 432, + 442, + 453, + 464, + 475, + 487, + 499, + 511, + 523, + 536, + 549, + 562, + 576, + 590, + 604, + 619, + 634, + 649, + 665, + 681, + 698, + 715, + 732, + 750, + 768, + 787, + 806, + 825, + 845, + 866, + 887, + 909, + 931, + 953, + 976 + ], + E192: [ + 100, + 101, + 102, + 104, + 105, + 106, + 107, + 109, + 110, + 111, + 113, + 114, + 115, + 117, + 118, + 120, + 121, + 123, + 124, + 126, + 127, + 129, + 130, + 132, + 133, + 135, + 137, + 138, + 140, + 142, + 143, + 145, + 147, + 149, + 150, + 152, + 154, + 156, + 158, + 160, + 162, + 164, + 165, + 167, + 169, + 172, + 174, + 176, + 178, + 180, + 182, + 184, + 187, + 189, + 191, + 193, + 196, + 198, + 200, + 203, + 205, + 208, + 210, + 213, + 215, + 218, + 221, + 223, + 226, + 229, + 232, + 234, + 237, + 240, + 243, + 246, + 249, + 252, + 255, + 258, + 261, + 264, + 267, + 271, + 274, + 277, + 280, + 284, + 287, + 291, + 294, + 298, + 301, + 305, + 309, + 312, + 316, + 320, + 324, + 328, + 332, + 336, + 340, + 344, + 348, + 352, + 357, + 361, + 365, + 370, + 374, + 379, + 383, + 388, + 392, + 397, + 402, + 407, + 412, + 417, + 422, + 427, + 432, + 437, + 442, + 448, + 453, + 459, + 464, + 470, + 475, + 481, + 487, + 493, + 499, + 505, + 511, + 517, + 523, + 530, + 536, + 542, + 549, + 556, + 562, + 569, + 576, + 583, + 590, + 597, + 604, + 612, + 619, + 626, + 634, + 642, + 649, + 657, + 665, + 673, + 681, + 690, + 698, + 706, + 715, + 723, + 732, + 741, + 750, + 759, + 768, + 777, + 787, + 796, + 806, + 816, + 825, + 835, + 845, + 856, + 866, + 876, + 887, + 898, + 909, + 920, + 931, + 942, + 953, + 965, + 976, + 988 + ] }); +const roundUp = (n, granularity) => { + if (n == 0) return 0; + const series = PREFERRED_NUMBERS[granularity]; + const first = series[0]; + const last = series[series.length - 1]; + let multiplier = 1; + while (n >= last * multiplier) { + multiplier *= 10; + } + let previousMin = 0; + while (n < first * multiplier) { + previousMin = first * multiplier; + multiplier /= 10; + if (n >= last * multiplier) { + return previousMin; + } + } + (0, import_util.assert)( + n >= first * multiplier && n < last * multiplier, + "$bucketAuto: number out of range of series." + ); + const i = (0, import_util.findInsertIndex)(series, n, (a, b) => { + b *= multiplier; + if (a < b) return -1; + if (a > b) return 1; + return 0; + }); + const seriesNumber = series[i] * multiplier; + return n == seriesNumber ? series[i + 1] * multiplier : seriesNumber; +}; +function granularityPreferredSeries(sorted, bucketCount, granularity) { + const size = sorted.length; + const approxBucketSize = Math.max(1, Math.round(sorted.length / bucketCount)); + let index = 0; + let nBuckets = 0; + let min = 0; + let max = 0; + return () => { + const isLastBucket = ++nBuckets == bucketCount; + const bucket = new Array(); + min = index > 0 ? max : 0; + while (index < size && (isLastBucket || bucket.length < approxBucketSize)) { + bucket.push(sorted[index++][1]); + } + max = roundUp(sorted[index - 1][0], granularity); + const nItems = bucket.length; + while (index < size && (isLastBucket || sorted[index][0] < max)) { + bucket.push(sorted[index++][1]); + } + if (nItems != bucket.length) { + max = roundUp(sorted[index - 1][0], granularity); + } + (0, import_util.assert)(min < max, `$bucketAuto: ${min} < ${max}.`); + return { + min, + max, + bucket, + done: index >= size + }; + }; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5295: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 11: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Trignometry Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#trigonometry-expression-operators -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$tan = void 0; -const _internal_1 = __webpack_require__(725); -/** Returns the tangent of a value that is measured in radians. */ -exports.$tan = (0, _internal_1.createTrignometryOperator)(Math.tan); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var count_exports = {}; +__export(count_exports, { + $count: () => $count +}); +module.exports = __toCommonJS(count_exports); +var import_lazy = __webpack_require__(8625); +var import_util = __webpack_require__(7839); +const $count = (collection, expr, _options) => { + (0, import_util.assert)( + (0, import_util.isString)(expr) && !(0, import_util.isEmpty)(expr) && expr.indexOf(".") === -1 && expr.trim()[0] !== "$", + "Invalid expression value for $count" + ); + return (0, import_lazy.Lazy)([ + { + [expr]: collection.size() + } + ]); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 1288: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 3710: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.toInteger = exports.TypeConvertError = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -class TypeConvertError extends Error { - constructor(message) { - super(message); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var densify_exports = {}; +__export(densify_exports, { + $densify: () => $densify +}); +module.exports = __toCommonJS(densify_exports); +var import_core = __webpack_require__(2760); +var import_lazy = __webpack_require__(8625); +var import_types = __webpack_require__(486); +var import_util = __webpack_require__(7839); +var import_dateAdd = __webpack_require__(8410); +var import_sort = __webpack_require__(4290); +const EMPTY_OBJECT = Object.freeze({}); +const $densify = (collection, expr, options) => { + const { step, bounds, unit } = expr.range; + if (unit) { + (0, import_util.assert)(import_types.TIME_UNITS.includes(unit), ""); + (0, import_util.assert)( + Number.isInteger(step) && step > 0, + "The step parameter in a range statement must be a whole number when densifying a date range." + ); + } else { + (0, import_util.assert)( + (0, import_util.isNumber)(step) && step > 0, + "The step parameter in a range statement must be a strictly positive numeric value." + ); + } + if ((0, import_util.isArray)(bounds)) { + (0, import_util.assert)( + !!bounds && bounds.length === 2, + "A bounding array in a range statement must have exactly two elements." + ); + (0, import_util.assert)( + (bounds.every(import_util.isNumber) || bounds.every(import_util.isDate)) && bounds[0] < bounds[1], + "A bounding array must be an ascending array of either two dates or two numbers." + ); + (0, import_util.assert)( + unit && !bounds.some(import_util.isNumber), + "Numeric bounds may not have unit parameter." + ); + } + if (expr.partitionByFields) { + (0, import_util.assert)( + (0, import_util.isArray)(expr.partitionByFields), + "$densify: `partitionByFields` must be an array of strings" + ); + } + collection = (0, import_sort.$sort)(collection, { [expr.field]: 1 }, options); + const nilOptions = import_core.ComputeOptions.init(options, null); + const computeNextValue = (value) => { + return (0, import_util.isNumber)(value) ? value + step : (0, import_dateAdd.$dateAdd)( + EMPTY_OBJECT, + { startDate: value, unit, amount: step }, + nilOptions + ); + }; + const isValidUnit = !!unit && import_types.TIME_UNITS.includes(unit); + const getFieldValue = (o) => { + const v = (0, import_util.resolve)(o, expr.field); + if ((0, import_util.isNil)(v)) return v; + if ((0, import_util.isNumber)(v)) { + (0, import_util.assert)( + !isValidUnit, + "$densify: Encountered non-date value in collection when step has a date unit." + ); + } else if ((0, import_util.isDate)(v)) { + (0, import_util.assert)( + isValidUnit, + "$densify: Encountered date value in collection when step does not have a date unit." + ); + } else { + (0, import_util.assert)(false, "$densify: Densify field type must be numeric or a date"); } -} -exports.TypeConvertError = TypeConvertError; -function toInteger(obj, expr, options, max, min, typename) { - const val = (0, core_1.computeValue)(obj, expr, null, options); - if ((0, util_1.isNil)(val)) - return null; - if (val instanceof Date) - return val.getTime(); - if (val === true) - return 1; - if (val === false) - return 0; - const n = Number(val); - if ((0, util_1.isNumber)(n) && n >= min && n <= max) { - // weirdly a decimal in string format cannot be converted to int. - // so we must check input if not string or if it is, not in decimal format - if (!(0, util_1.isString)(val) || n.toString().indexOf(".") === -1) { - return Math.trunc(n); + return v; + }; + const peekItem = new Array(); + const nilFieldsIterator = (0, import_lazy.Lazy)(() => { + const item = collection.next(); + const fieldValue = getFieldValue(item.value); + if ((0, import_util.isNil)(fieldValue)) return item; + peekItem.push(item); + return { done: true }; + }); + const nextDensifyValueMap = import_util.ValueMap.init( + options.hashFunction + ); + const [lower, upper] = (0, import_util.isArray)(bounds) ? bounds : [bounds, bounds]; + let maxFieldValue = void 0; + const updateMaxFieldValue = (value) => { + maxFieldValue = maxFieldValue === void 0 || maxFieldValue < value ? value : maxFieldValue; + }; + const rootKey = []; + const densifyIterator = (0, import_lazy.Lazy)(() => { + const item = peekItem.length > 0 ? peekItem.pop() : collection.next(); + if (item.done) return item; + let partitionKey = rootKey; + if ((0, import_util.isArray)(expr.partitionByFields)) { + partitionKey = expr.partitionByFields.map( + (k) => (0, import_util.resolve)(item.value, k) + ); + (0, import_util.assert)( + partitionKey.every(import_util.isString), + "$densify: Partition fields must evaluate to string values." + ); + } + (0, import_util.assert)((0, import_util.isObject)(item.value), "$densify: collection must contain documents"); + const itemValue = getFieldValue(item.value); + if (!nextDensifyValueMap.has(partitionKey)) { + if (lower == "full") { + if (!nextDensifyValueMap.has(rootKey)) { + nextDensifyValueMap.set(rootKey, itemValue); } + nextDensifyValueMap.set(partitionKey, nextDensifyValueMap.get(rootKey)); + } else if (lower == "partition") { + nextDensifyValueMap.set(partitionKey, itemValue); + } else { + nextDensifyValueMap.set(partitionKey, lower); + } } - throw new TypeConvertError(`cannot convert '${val}' to ${typename}`); -} -exports.toInteger = toInteger; + const densifyValue = nextDensifyValueMap.get(partitionKey); + if ( + // current item field value is lower than current densify value. + itemValue <= densifyValue || // range value equals or exceeds upper bound + upper != "full" && upper != "partition" && densifyValue >= upper + ) { + if (densifyValue <= itemValue) { + nextDensifyValueMap.set(partitionKey, computeNextValue(densifyValue)); + } + updateMaxFieldValue(itemValue); + return item; + } + nextDensifyValueMap.set(partitionKey, computeNextValue(densifyValue)); + updateMaxFieldValue(densifyValue); + const denseObj = { [expr.field]: densifyValue }; + if (partitionKey) { + partitionKey.forEach((v, i) => { + denseObj[expr.partitionByFields[i]] = v; + }); + } + peekItem.push(item); + return { done: false, value: denseObj }; + }); + if (lower !== "full") return (0, import_lazy.concat)(nilFieldsIterator, densifyIterator); + let paritionIndex = -1; + let partitionKeysSet = void 0; + const fullBoundsIterator = (0, import_lazy.Lazy)(() => { + if (paritionIndex === -1) { + const fullDensifyValue = nextDensifyValueMap.get(rootKey); + nextDensifyValueMap.delete(rootKey); + partitionKeysSet = Array.from(nextDensifyValueMap.keys()); + if (partitionKeysSet.length === 0) { + partitionKeysSet.push(rootKey); + nextDensifyValueMap.set(rootKey, fullDensifyValue); + } + paritionIndex++; + } + do { + const partitionKey = partitionKeysSet[paritionIndex]; + const partitionMaxValue = nextDensifyValueMap.get(partitionKey); + if (partitionMaxValue < maxFieldValue) { + nextDensifyValueMap.set( + partitionKey, + computeNextValue(partitionMaxValue) + ); + const denseObj = { [expr.field]: partitionMaxValue }; + partitionKey.forEach((v, i) => { + denseObj[expr.partitionByFields[i]] = v; + }); + return { done: false, value: denseObj }; + } + paritionIndex++; + } while (paritionIndex < partitionKeysSet.length); + return { done: true }; + }); + return (0, import_lazy.concat)(nilFieldsIterator, densifyIterator, fullBoundsIterator); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 4910: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 2543: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * Type Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#type-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$convert = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -const _internal_1 = __webpack_require__(1288); -const toBool_1 = __webpack_require__(4586); -const toDate_1 = __webpack_require__(7309); -const toDouble_1 = __webpack_require__(1753); -const toInt_1 = __webpack_require__(3706); -const toLong_1 = __webpack_require__(6488); -const toString_1 = __webpack_require__(6617); -/** - * Converts a value to a specified type. - * - * @param obj - * @param expr - */ -const $convert = (obj, expr, options) => { - const args = (0, core_1.computeValue)(obj, expr, null, options); - args.onNull = args.onNull === undefined ? null : args.onNull; - if ((0, util_1.isNil)(args.input)) - return args.onNull; - try { - switch (args.to) { - case 2: - case "string": - return (0, toString_1.$toString)(obj, args.input, options); - case 8: - case "boolean": - case "bool": - return (0, toBool_1.$toBool)(obj, args.input, options); - case 9: - case "date": - return (0, toDate_1.$toDate)(obj, args.input, options); - case 1: - case 19: - case "double": - case "decimal": - case "number": - return (0, toDouble_1.$toDouble)(obj, args.input, options); - case 16: - case "int": - return (0, toInt_1.$toInt)(obj, args.input, options); - case 18: - case "long": - return (0, toLong_1.$toLong)(obj, args.input, options); - } - } - catch (e) { - /*nothing to do*/ - } - if (args.onError !== undefined) - return args.onError; - throw new _internal_1.TypeConvertError(`could not convert to type ${args.to}.`); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -exports.$convert = $convert; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var facet_exports = {}; +__export(facet_exports, { + $facet: () => $facet +}); +module.exports = __toCommonJS(facet_exports); +var import_aggregator = __webpack_require__(6878); +var import_core = __webpack_require__(2760); +const $facet = (collection, expr, options) => { + return collection.transform((array) => { + const o = {}; + for (const [k, pipeline] of Object.entries(expr)) { + o[k] = new import_aggregator.Aggregator(pipeline, { + ...options, + processingMode: import_core.ProcessingMode.CLONE_INPUT + }).run(array); + } + return [o]; + }); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 1146: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; +/***/ 2343: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -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]; } }; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var fill_exports = {}; +__export(fill_exports, { + $fill: () => $fill +}); +module.exports = __toCommonJS(fill_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +var import_ifNull = __webpack_require__(3653); +var import_linearFill = __webpack_require__(4276); +var import_locf = __webpack_require__(4140); +var import_addFields = __webpack_require__(5770); +var import_setWindowFields = __webpack_require__(3805); +const FILL_METHODS = { + locf: "$locf", + linear: "$linearFill" +}; +const $fill = (collection, expr, options) => { + (0, import_util.assert)(!expr.sortBy || (0, import_util.isObject)(expr.sortBy), "sortBy must be an object."); + (0, import_util.assert)( + !!expr.sortBy || Object.values(expr.output).every((m) => (0, import_util.has)(m, "value")), + "sortBy required if any output field specifies a 'method'." + ); + (0, import_util.assert)( + !(expr.partitionBy && expr.partitionByFields), + "specify either partitionBy or partitionByFields." + ); + (0, import_util.assert)( + !expr.partitionByFields || expr?.partitionByFields?.every((s) => s[0] !== "$"), + "fields in partitionByFields cannot begin with '$'." + ); + options = (0, import_core.initOptions)(options); + options.context.addExpressionOps({ $ifNull: import_ifNull.$ifNull }); + options.context.addWindowOps({ $locf: import_locf.$locf, $linearFill: import_linearFill.$linearFill }); + const partitionExpr = expr.partitionBy || expr?.partitionByFields?.map((s) => `$${s}`); + const valueExpr = {}; + const methodExpr = {}; + for (const [k, m] of Object.entries(expr.output)) { + if ((0, import_util.has)(m, "value")) { + valueExpr[k] = { $ifNull: [`$$CURRENT.${k}`, m["value"]] }; + } else { + const fillOp = FILL_METHODS[m["method"]]; + (0, import_util.assert)(!!fillOp, `invalid fill method '${m["method"]}'.`); + methodExpr[k] = { [fillOp]: "$" + k }; } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); + } + if (Object.keys(methodExpr).length > 0) { + collection = (0, import_setWindowFields.$setWindowFields)( + collection, + { + sortBy: expr.sortBy || {}, + partitionBy: partitionExpr, + output: methodExpr + }, + options + ); + } + if (Object.keys(valueExpr).length > 0) { + collection = (0, import_addFields.$addFields)(collection, valueExpr, options); + } + return collection; }; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(4910), exports); -__exportStar(__webpack_require__(3429), exports); -__exportStar(__webpack_require__(4586), exports); -__exportStar(__webpack_require__(7309), exports); -__exportStar(__webpack_require__(9239), exports); -__exportStar(__webpack_require__(1753), exports); -__exportStar(__webpack_require__(3706), exports); -__exportStar(__webpack_require__(6488), exports); -__exportStar(__webpack_require__(6617), exports); -__exportStar(__webpack_require__(4446), exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 3429: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 8194: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * Type Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#type-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$isNumber = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Checks if the specified expression resolves to a numeric value - * - * @param obj - * @param expr - */ -const $isNumber = (obj, expr, options) => { - const n = (0, core_1.computeValue)(obj, expr, null, options); - return (0, util_1.isNumber)(n); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var graphLookup_exports = {}; +__export(graphLookup_exports, { + $graphLookup: () => $graphLookup +}); +module.exports = __toCommonJS(graphLookup_exports); +var import_core = __webpack_require__(2760); +var import_lazy = __webpack_require__(8625); +var import_util = __webpack_require__(7839); +var import_lookup = __webpack_require__(3704); +const $graphLookup = (collection, expr, options) => { + const fromColl = (0, import_util.isString)(expr.from) ? options?.collectionResolver(expr.from) : expr.from; + const { + connectFromField, + connectToField, + as: asField, + maxDepth, + depthField, + restrictSearchWithMatch: matchExpr + } = expr; + const pipelineExpr = matchExpr ? { pipeline: [{ $match: matchExpr }] } : {}; + return collection.map((obj) => { + const matchObj = {}; + (0, import_util.setValue)( + matchObj, + connectFromField, + (0, import_core.computeValue)(obj, expr.startWith, null, options) + ); + let matches = [matchObj]; + let i = -1; + const map = import_util.ValueMap.init(options.hashFunction); + do { + i++; + matches = (0, import_util.flatten)( + (0, import_lookup.$lookup)( + (0, import_lazy.Lazy)(matches), + { + from: fromColl, + localField: connectFromField, + foreignField: connectToField, + as: asField, + ...pipelineExpr + }, + options + ).map((o) => o[asField]).value() + ); + const oldSize = map.size; + matches.forEach((k) => map.set(k, map.get(k) ?? i)); + if (oldSize == map.size) break; + } while ((0, import_util.isNil)(maxDepth) || i < maxDepth); + const result = new Array(map.size); + let n = 0; + map.forEach((v, k) => { + result[n++] = Object.assign(depthField ? { [depthField]: v } : {}, k); + }); + return { ...obj, [asField]: result }; + }); }; -exports.$isNumber = $isNumber; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 4586: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 9723: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * Type Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#type-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$toBool = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Converts a value to a boolean. - * - * @param obj - * @param expr - */ -const $toBool = (obj, expr, options) => { - const val = (0, core_1.computeValue)(obj, expr, null, options); - if ((0, util_1.isNil)(val)) - return null; - if ((0, util_1.isString)(val)) - return true; - return Boolean(val); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var group_exports = {}; +__export(group_exports, { + $group: () => $group +}); +module.exports = __toCommonJS(group_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const ID_KEY = "_id"; +const $group = (collection, expr, options) => { + (0, import_util.assert)((0, import_util.has)(expr, ID_KEY), "$group specification must include an '_id'"); + const idExpr = expr[ID_KEY]; + const copts = import_core.ComputeOptions.init(options); + const newFields = Object.keys(expr).filter((k) => k != ID_KEY); + return collection.transform((coll) => { + const partitions = (0, import_util.groupBy)( + coll, + (obj) => (0, import_core.computeValue)(obj, idExpr, null, options), + options.hashFunction + ); + let i = -1; + const partitionKeys = Array.from(partitions.keys()); + return () => { + if (++i === partitions.size) return { done: true }; + const groupId = partitionKeys[i]; + const obj = {}; + if (groupId !== void 0) { + obj[ID_KEY] = groupId; + } + for (const key of newFields) { + obj[key] = (0, import_core.computeValue)( + partitions.get(groupId), + expr[key], + null, + copts.update(null, { groupId }) + ); + } + return { value: obj, done: false }; + }; + }); }; -exports.$toBool = $toBool; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 7309: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +/***/ 6936: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var pipeline_exports = {}; +module.exports = __toCommonJS(pipeline_exports); +__reExport(pipeline_exports, __webpack_require__(5770), module.exports); +__reExport(pipeline_exports, __webpack_require__(308), module.exports); +__reExport(pipeline_exports, __webpack_require__(7267), module.exports); +__reExport(pipeline_exports, __webpack_require__(11), module.exports); +__reExport(pipeline_exports, __webpack_require__(3710), module.exports); +__reExport(pipeline_exports, __webpack_require__(2543), module.exports); +__reExport(pipeline_exports, __webpack_require__(2343), module.exports); +__reExport(pipeline_exports, __webpack_require__(8194), module.exports); +__reExport(pipeline_exports, __webpack_require__(9723), module.exports); +__reExport(pipeline_exports, __webpack_require__(4483), module.exports); +__reExport(pipeline_exports, __webpack_require__(3704), module.exports); +__reExport(pipeline_exports, __webpack_require__(593), module.exports); +__reExport(pipeline_exports, __webpack_require__(3508), module.exports); +__reExport(pipeline_exports, __webpack_require__(6276), module.exports); +__reExport(pipeline_exports, __webpack_require__(2401), module.exports); +__reExport(pipeline_exports, __webpack_require__(7191), module.exports); +__reExport(pipeline_exports, __webpack_require__(31), module.exports); +__reExport(pipeline_exports, __webpack_require__(824), module.exports); +__reExport(pipeline_exports, __webpack_require__(9060), module.exports); +__reExport(pipeline_exports, __webpack_require__(9640), module.exports); +__reExport(pipeline_exports, __webpack_require__(3805), module.exports); +__reExport(pipeline_exports, __webpack_require__(8861), module.exports); +__reExport(pipeline_exports, __webpack_require__(4290), module.exports); +__reExport(pipeline_exports, __webpack_require__(7708), module.exports); +__reExport(pipeline_exports, __webpack_require__(1347), module.exports); +__reExport(pipeline_exports, __webpack_require__(829), module.exports); +__reExport(pipeline_exports, __webpack_require__(3143), module.exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); + + +/***/ }), + +/***/ 4483: +/***/ ((module) => { -/** - * Type Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#type-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$toDate = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -const _internal_1 = __webpack_require__(1288); -/** - * Converts a value to a date. If the value cannot be converted to a date, $toDate errors. If the value is null or missing, $toDate returns null. - * - * @param obj - * @param expr - */ -const $toDate = (obj, expr, options) => { - const val = (0, core_1.computeValue)(obj, expr, null, options); - if (val instanceof Date) - return val; - if ((0, util_1.isNil)(val)) - return null; - const d = new Date(val); - const n = d.getTime(); - if (!isNaN(n)) - return d; - throw new _internal_1.TypeConvertError(`cannot convert '${val}' to date`); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$toDate = $toDate; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var limit_exports = {}; +__export(limit_exports, { + $limit: () => $limit +}); +module.exports = __toCommonJS(limit_exports); +const $limit = (collection, expr, _options) => collection.take(expr); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 9239: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 3704: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * Type Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#type-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$toDecimal = void 0; -const toDouble_1 = __webpack_require__(1753); -/** - * Converts a value to a decimal. If the value cannot be converted to a decimal, $toDecimal errors. - * If the value is null or missing, $toDecimal returns null. - * This is just an alias for `$toDouble` in this library. - */ -exports.$toDecimal = toDouble_1.$toDouble; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var lookup_exports = {}; +__export(lookup_exports, { + $lookup: () => $lookup +}); +module.exports = __toCommonJS(lookup_exports); +var import_aggregator = __webpack_require__(6878); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $lookup = (collection, expr, options) => { + const joinColl = (0, import_util.isString)(expr.from) ? options?.collectionResolver(expr.from) : expr.from; + const { let: letExpr, pipeline, foreignField, localField } = expr; + const subQueryPipeline = pipeline || []; + let lookupEq = (_) => [true, []]; + if (foreignField && localField) { + const map = import_util.ValueMap.init(options.hashFunction); + for (const doc of joinColl) { + (0, import_util.ensureArray)((0, import_util.resolve)(doc, foreignField) ?? null).forEach((v) => { + const xs = map.get(v); + const arr = xs ?? []; + arr.push(doc); + if (arr !== xs) map.set(v, arr); + }); + } + lookupEq = (o) => { + const local = (0, import_util.resolve)(o, localField) ?? null; + if ((0, import_util.isArray)(local)) { + if (subQueryPipeline.length) { + return [local.some((v) => map.has(v)), null]; + } + const result2 = Array.from( + new Set((0, import_util.flatten)(local.map((v) => map.get(v), options.hashFunction))) + ); + return [result2.length > 0, result2]; + } + const result = map.get(local) ?? null; + return [result !== null, result ?? []]; + }; + if (subQueryPipeline.length === 0) { + return collection.map((obj) => { + return { + ...obj, + [expr.as]: lookupEq(obj).pop() + }; + }); + } + } + const agg = new import_aggregator.Aggregator(subQueryPipeline, options); + return collection.map((obj) => { + const variables = (0, import_core.computeValue)(obj, letExpr, null, options); + const opts = Object.assign({}, options, { + variables: { ...options.variables, ...variables } + }); + const [ok, res] = lookupEq(obj); + return { + ...obj, + [expr.as]: ok ? agg.run(joinColl, opts) : res + }; + }); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 1753: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +/***/ 593: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var match_exports = {}; +__export(match_exports, { + $match: () => $match +}); +module.exports = __toCommonJS(match_exports); +var import_query = __webpack_require__(6535); +const $match = (collection, expr, options) => { + const q = new import_query.Query(expr, options); + return collection.filter((o) => q.test(o)); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); -/** - * Type Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#type-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$toDouble = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -const _internal_1 = __webpack_require__(1288); -/** - * Converts a value to a double. If the value cannot be converted to an double, $toDouble errors. If the value is null or missing, $toDouble returns null. - * - * @param obj - * @param expr - */ -const $toDouble = (obj, expr, options) => { - const val = (0, core_1.computeValue)(obj, expr, null, options); - if ((0, util_1.isNil)(val)) - return null; - if (val instanceof Date) - return val.getTime(); - if (val === true) - return 1; - if (val === false) - return 0; - const n = Number(val); - if ((0, util_1.isNumber)(n)) - return n; - throw new _internal_1.TypeConvertError(`cannot convert '${val}' to double/decimal`); + +/***/ }), + +/***/ 3508: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var merge_exports = {}; +__export(merge_exports, { + $merge: () => $merge +}); +module.exports = __toCommonJS(merge_exports); +var import_aggregator = __webpack_require__(6878); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +var import_expression = __webpack_require__(5764); +const $merge = (collection, expr, options) => { + const output = (0, import_util.isString)(expr.into) ? options?.collectionResolver(expr.into) : expr.into; + (0, import_util.assert)((0, import_util.isArray)(output), `$merge: option 'into' must resolve to an array`); + const onField = expr.on || options.idKey; + const getHash = (0, import_util.isString)(onField) ? (o) => (0, import_util.hashCode)((0, import_util.resolve)(o, onField), options.hashFunction) : (o) => (0, import_util.hashCode)(onField.map((s) => (0, import_util.resolve)(o, s), options.hashFunction)); + const map = import_util.ValueMap.init(); + for (let i = 0; i < output.length; i++) { + const obj = output[i]; + const k = getHash(obj); + (0, import_util.assert)( + !map.has(k), + "$merge: 'into' collection must have unique entries for the 'on' field." + ); + map.set(k, [obj, i]); + } + const copts = import_core.ComputeOptions.init(options); + return collection.map((o) => { + const k = getHash(o); + if (map.has(k)) { + const [target, i] = map.get(k); + const variables = (0, import_core.computeValue)( + target, + expr.let || { new: "$$ROOT" }, + null, + // 'root' is the item from the iteration. + copts.update(o) + ); + if ((0, import_util.isArray)(expr.whenMatched)) { + const aggregator = new import_aggregator.Aggregator(expr.whenMatched, { + ...options, + variables + }); + output[i] = aggregator.run([target])[0]; + } else { + switch (expr.whenMatched) { + case "replace": + output[i] = o; + break; + case "fail": + throw new import_util.MingoError( + "$merge: failed due to matching as specified by 'whenMatched' option." + ); + case "keepExisting": + break; + case "merge": + default: + output[i] = (0, import_expression.$mergeObjects)( + target, + [target, o], + // 'root' is the item from the iteration. + copts.update(o, { variables }) + ); + break; + } + } + } else { + switch (expr.whenNotMatched) { + case "discard": + break; + case "fail": + throw new import_util.MingoError( + "$merge: failed due to matching as specified by 'whenMatched' option." + ); + case "insert": + default: + output.push(o); + break; + } + } + return o; + }); }; -exports.$toDouble = $toDouble; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 3706: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 6276: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * Type Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#type-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$toInt = void 0; -const util_1 = __webpack_require__(7216); -const _internal_1 = __webpack_require__(1288); -/** - * Converts a value to an integer. If the value cannot be converted to an integer, $toInt errors. If the value is null or missing, $toInt returns null. - * @param obj - * @param expr - */ -const $toInt = (obj, expr, options) => { - return (0, _internal_1.toInteger)(obj, expr, options, util_1.MAX_INT, util_1.MIN_INT, "int"); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -exports.$toInt = $toInt; - - -/***/ }), - -/***/ 6488: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - -/** - * Type Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#type-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$toLong = void 0; -const util_1 = __webpack_require__(7216); -const _internal_1 = __webpack_require__(1288); -/** - * Converts a value to a long. If the value cannot be converted to a long, $toLong errors. If the value is null or missing, $toLong returns null. - * @param obj - * @param expr - */ -const $toLong = (obj, expr, options) => { - return (0, _internal_1.toInteger)(obj, expr, options, util_1.MAX_LONG, util_1.MIN_LONG, "long"); +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var out_exports = {}; +__export(out_exports, { + $out: () => $out +}); +module.exports = __toCommonJS(out_exports); +var import_util = __webpack_require__(7839); +const $out = (collection, expr, options) => { + const outputColl = (0, import_util.isString)(expr) ? options?.collectionResolver(expr) : expr; + (0, import_util.assert)((0, import_util.isArray)(outputColl), `expression must resolve to an array`); + return collection.map((o) => { + outputColl.push((0, import_util.cloneDeep)(o)); + return o; + }); }; -exports.$toLong = $toLong; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 6617: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 2401: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * Type Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#type-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$toString = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -const dateToString_1 = __webpack_require__(1300); -const $toString = (obj, expr, options) => { - const val = (0, core_1.computeValue)(obj, expr, null, options); - if ((0, util_1.isNil)(val)) - return null; - if (val instanceof Date) { - const dateExpr = { - date: expr, - format: "%Y-%m-%dT%H:%M:%S.%LZ" - }; - return (0, dateToString_1.$dateToString)(obj, dateExpr, options); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var project_exports = {}; +__export(project_exports, { + $project: () => $project +}); +module.exports = __toCommonJS(project_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const DESCRIPTORS = new Set(Array.from([0, 1, false, true])); +const $project = (collection, expr, options) => { + if ((0, import_util.isEmpty)(expr)) return collection; + const expressionKeys = Object.keys(expr); + validateExpression(expr, options); + const ID_KEY = options.idKey; + if (!expressionKeys.includes(ID_KEY)) { + expressionKeys.push(ID_KEY); + } + const copts = import_core.ComputeOptions.init(options); + return collection.map((obj) => processObject(obj, expr, copts.update(obj), expressionKeys)); +}; +function processObject(obj, expr, options, expressionKeys) { + let newObj = {}; + let foundSlice = false; + let foundExclusion = false; + const idOnlyExcluded = expr[options.idKey] === 0 && expressionKeys.length === 1; + const dropKeys = []; + if (idOnlyExcluded) { + dropKeys.push(options.idKey); + } + for (const key of expressionKeys) { + let value = void 0; + const subExpr = expr[key]; + if (key !== options.idKey && (subExpr === 0 || subExpr === false)) { + foundExclusion = true; + } + if (key === options.idKey && (0, import_util.isEmpty)(subExpr)) { + value = obj[key]; + } else if ((0, import_util.isString)(subExpr)) { + value = (0, import_core.computeValue)(obj, subExpr, key, options); + } else if (subExpr === 1 || subExpr === true) { + } else if ((0, import_util.isArray)(subExpr)) { + value = subExpr.map((v) => { + const r = (0, import_core.computeValue)(obj, v, null, options); + if ((0, import_util.isNil)(r)) return null; + return r; + }); + } else if ((0, import_util.isObject)(subExpr)) { + const subExprObj = subExpr; + const subExprKeys = Object.keys(subExpr); + const operator = subExprKeys.length == 1 ? subExprKeys[0] : ""; + const call = (0, import_core.getOperator)( + "projection", + operator, + options + ); + if (call) { + if (operator === "$slice") { + if ((0, import_util.ensureArray)(subExprObj[operator]).every(import_util.isNumber)) { + value = call(obj, subExprObj[operator], key, options); + foundSlice = true; + } else { + value = (0, import_core.computeValue)(obj, subExprObj, key, options); + } + } else { + value = call(obj, subExprObj[operator], key, options); + } + } else if ((0, import_util.isOperator)(operator)) { + value = (0, import_core.computeValue)(obj, subExprObj[operator], operator, options); + } else if ((0, import_util.has)(obj, key)) { + validateExpression(subExprObj, options); + let target = obj[key]; + if ((0, import_util.isArray)(target)) { + value = target.map( + (o) => processObject(o, subExprObj, options, subExprKeys) + ); + } else { + target = (0, import_util.isObject)(target) ? target : obj; + value = processObject( + target, + subExprObj, + options, + subExprKeys + ); + } + } else { + value = (0, import_core.computeValue)(obj, subExpr, null, options); + } + } else { + dropKeys.push(key); + continue; } - else { - return val.toString(); + const objPathGraph = (0, import_util.resolveGraph)(obj, key, { + preserveMissing: true + }); + if ((0, import_util.isObject)(objPathGraph)) { + (0, import_util.merge)(newObj, objPathGraph); } -}; -exports.$toString = $toString; + if (!DESCRIPTORS.has(subExpr)) { + if (value === void 0) { + (0, import_util.removeValue)(newObj, key, { descendArray: true }); + } else { + (0, import_util.setValue)(newObj, key, value); + } + } + } + (0, import_util.filterMissing)(newObj); + if (foundSlice || foundExclusion || idOnlyExcluded) { + newObj = (0, import_util.into)({}, obj, newObj); + if (dropKeys.length > 0) { + for (const k of dropKeys) { + (0, import_util.removeValue)(newObj, k, { descendArray: true }); + } + } + } + return newObj; +} +function validateExpression(expr, options) { + const check = [false, false]; + for (const [k, v] of Object.entries(expr)) { + if (k === options?.idKey) return; + if (v === 0 || v === false) { + check[0] = true; + } else if (v === 1 || v === true) { + check[1] = true; + } + (0, import_util.assert)( + !(check[0] && check[1]), + "Projection cannot have a mix of inclusion and exclusion." + ); + } +} +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 4446: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 7191: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * Type Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#type-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$type = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -const $type = (obj, expr, options) => { - const val = (0, core_1.computeValue)(obj, expr, null, options); - const typename = (0, util_1.getType)(val); - const nativeType = typename.toLowerCase(); - switch (nativeType) { - case "boolean": - return "bool"; - case "number": - if (val.toString().indexOf(".") >= 0) - return "double"; - return val >= util_1.MIN_INT && val <= util_1.MAX_INT ? "int" : "long"; - case "regexp": - return "regex"; - default: - return nativeType; - } +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var redact_exports = {}; +__export(redact_exports, { + $redact: () => $redact +}); +module.exports = __toCommonJS(redact_exports); +var import_core = __webpack_require__(2760); +const $redact = (collection, expr, options) => { + const copts = import_core.ComputeOptions.init(options); + return collection.map( + (obj) => (0, import_core.redact)(obj, expr, copts.update(obj)) + ); }; -exports.$type = $type; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 4354: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; +/***/ 31: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -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 __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(9442), exports); +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var replaceRoot_exports = {}; +__export(replaceRoot_exports, { + $replaceRoot: () => $replaceRoot +}); +module.exports = __toCommonJS(replaceRoot_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $replaceRoot = (collection, expr, options) => { + return collection.map((obj) => { + obj = (0, import_core.computeValue)(obj, expr.newRoot, null, options); + (0, import_util.assert)((0, import_util.isObject)(obj), "$replaceRoot expression must return an object"); + return obj; + }); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 9442: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 824: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * Variable Expression Operators: https://docs.mongodb.com/manual/reference/operator/aggregation/#variable-expression-operators - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$let = void 0; -const core_1 = __webpack_require__(9587); -/** - * Defines variables for use within the scope of a sub-expression and returns the result of the sub-expression. - * - * @param obj The target object for this expression - * @param expr The right-hand side of the operator - * @param options Options to use for this operattion - * @returns {*} - */ -const $let = (obj, expr, options) => { - // resolve vars - const variables = {}; - for (const [key, val] of Object.entries(expr.vars)) { - variables[key] = (0, core_1.computeValue)(obj, val, null, options); - } - return (0, core_1.computeValue)(obj, expr.in, null, core_1.ComputeOptions.init(options, obj, { variables })); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$let = $let; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var replaceWith_exports = {}; +__export(replaceWith_exports, { + $replaceWith: () => $replaceWith +}); +module.exports = __toCommonJS(replaceWith_exports); +var import_core = __webpack_require__(2760); +var import_util = __webpack_require__(7839); +const $replaceWith = (collection, expr, options) => { + return collection.map((obj) => { + obj = (0, import_core.computeValue)(obj, expr, null, options); + (0, import_util.assert)((0, import_util.isObject)(obj), "$replaceWith expression must return an object"); + return obj; + }); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 2899: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; +/***/ 9060: +/***/ ((module) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.isUnbounded = void 0; -/** Checks whether the specified window is unbounded. */ -const isUnbounded = (window) => { - const boundary = (window === null || window === void 0 ? void 0 : window.documents) || (window === null || window === void 0 ? void 0 : window.range); - return (!boundary || (boundary[0] === "unbounded" && boundary[1] === "unbounded")); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var sample_exports = {}; +__export(sample_exports, { + $sample: () => $sample +}); +module.exports = __toCommonJS(sample_exports); +const $sample = (collection, expr, _options) => { + return collection.transform((xs) => { + const len = xs.length; + let i = -1; + return () => { + if (++i === expr.size) return { done: true }; + const n = Math.floor(Math.random() * len); + return { value: xs[n], done: false }; + }; + }); }; -exports.isUnbounded = isUnbounded; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 1692: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 9640: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$addFields = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Adds new fields to documents. - * Outputs documents that contain all existing fields from the input documents and newly added fields. - * - * @param {Iterator} collection - * @param {Object} expr - * @param {Options} options - */ -const $addFields = (collection, expr, options) => { - const newFields = Object.keys(expr); - if (newFields.length === 0) - return collection; - return collection.map(((obj) => { - const newObj = Object.assign({}, obj); - for (const field of newFields) { - const newValue = (0, core_1.computeValue)(obj, expr[field], null, options); - if (newValue !== undefined) { - (0, util_1.setValue)(newObj, field, newValue); - } - else { - (0, util_1.removeValue)(newObj, field); - } - } - return newObj; - })); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$addFields = $addFields; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var set_exports = {}; +__export(set_exports, { + $set: () => $set +}); +module.exports = __toCommonJS(set_exports); +var import_addFields = __webpack_require__(5770); +const $set = import_addFields.$addFields; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 2985: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 3805: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$bucket = void 0; -const core_1 = __webpack_require__(9587); -const lazy_1 = __webpack_require__(9176); -const util_1 = __webpack_require__(7216); -/** - * Categorizes incoming documents into groups, called buckets, based on a specified expression and bucket boundaries. - * https://docs.mongodb.com/manual/reference/operator/aggregation/bucket/ - * - * @param {*} collection - * @param {*} expr - * @param {Options} opt Pipeline options - */ -const $bucket = (collection, expr, options) => { - const boundaries = [...expr.boundaries]; - const defaultKey = expr.default; - const lower = boundaries[0]; // inclusive - const upper = boundaries[boundaries.length - 1]; // exclusive - const outputExpr = expr.output || { count: { $sum: 1 } }; - (0, util_1.assert)(expr.boundaries.length > 2, "$bucket 'boundaries' expression must have at least 3 elements"); - const boundType = (0, util_1.getType)(lower); - for (let i = 0, len = boundaries.length - 1; i < len; i++) { - (0, util_1.assert)(boundType === (0, util_1.getType)(boundaries[i + 1]), "$bucket 'boundaries' must all be of the same type"); - (0, util_1.assert)((0, util_1.compare)(boundaries[i], boundaries[i + 1]) < 0, "$bucket 'boundaries' must be sorted in ascending order"); - } - !(0, util_1.isNil)(defaultKey) && - (0, util_1.getType)(expr.default) === (0, util_1.getType)(lower) && - (0, util_1.assert)((0, util_1.compare)(expr.default, upper) >= 0 || (0, util_1.compare)(expr.default, lower) < 0, "$bucket 'default' expression must be out of boundaries range"); - const grouped = {}; - for (const k of boundaries) { - grouped[k] = []; - } - // add default key if provided - if (!(0, util_1.isNil)(defaultKey)) - grouped[defaultKey] = []; - let iterator; - return (0, lazy_1.Lazy)(() => { - if (!iterator) { - collection.each(((obj) => { - const key = (0, core_1.computeValue)(obj, expr.groupBy, null, options); - if ((0, util_1.isNil)(key) || (0, util_1.compare)(key, lower) < 0 || (0, util_1.compare)(key, upper) >= 0) { - (0, util_1.assert)(!(0, util_1.isNil)(defaultKey), "$bucket require a default for out of range values"); - grouped[defaultKey].push(obj); - } - else { - (0, util_1.assert)((0, util_1.compare)(key, lower) >= 0 && (0, util_1.compare)(key, upper) < 0, "$bucket 'groupBy' expression must resolve to a value in range of boundaries"); - const index = findInsertIndex(boundaries, key); - const boundKey = boundaries[Math.max(0, index - 1)]; - grouped[boundKey].push(obj); - } - })); - // upper bound is exclusive so we remove it - boundaries.pop(); - if (!(0, util_1.isNil)(defaultKey)) - boundaries.push(defaultKey); - iterator = (0, lazy_1.Lazy)(boundaries).map(((key) => { - const acc = (0, core_1.computeValue)(grouped[key], outputExpr, null, options); - return (0, util_1.into)(acc, { _id: key }); - })); - } - return iterator.next(); - }); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -exports.$bucket = $bucket; -/** - * Find the insert index for the given key in a sorted array. - * - * @param {*} sorted The sorted array to search - * @param {*} item The search key - */ -function findInsertIndex(sorted, item) { - // uses binary search - let lo = 0; - let hi = sorted.length - 1; - while (lo <= hi) { - const mid = Math.round(lo + (hi - lo) / 2); - if ((0, util_1.compare)(item, sorted[mid]) < 0) { - hi = mid - 1; - } - else if ((0, util_1.compare)(item, sorted[mid]) > 0) { - lo = mid + 1; - } - else { - return mid; - } +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var setWindowFields_exports = {}; +__export(setWindowFields_exports, { + $setWindowFields: () => $setWindowFields +}); +module.exports = __toCommonJS(setWindowFields_exports); +var import_core = __webpack_require__(2760); +var import_lazy = __webpack_require__(8625); +var import_util = __webpack_require__(7839); +var import_function = __webpack_require__(3388); +var import_dateAdd = __webpack_require__(8410); +var import_internal = __webpack_require__(2088); +var import_addFields = __webpack_require__(5770); +var import_group = __webpack_require__(9723); +var import_sort = __webpack_require__(4290); +const SORT_REQUIRED_OPS = /* @__PURE__ */ new Set([ + "$denseRank", + "$documentNumber", + "$first", + "$last", + "$linearFill", + "$rank", + "$shift" +]); +const WINDOW_UNBOUNDED_OPS = /* @__PURE__ */ new Set([ + "$denseRank", + "$expMovingAvg", + "$linearFill", + "$locf", + "$rank", + "$shift" +]); +const $setWindowFields = (collection, expr, options) => { + options = (0, import_core.initOptions)(options); + options.context.addExpressionOps({ $function: import_function.$function }); + for (const outputExpr of Object.values(expr.output)) { + const keys = Object.keys(outputExpr); + const op = keys.find(import_util.isOperator); + (0, import_util.assert)( + !!(0, import_core.getOperator)("window", op, options) || !!(0, import_core.getOperator)("accumulator", op, options), + `'${op}' is not a valid window operator` + ); + (0, import_util.assert)( + keys.length > 0 && keys.length <= 2 && (keys.length == 1 || keys.includes("window")), + "'output' option should have a single window operator." + ); + if (outputExpr?.window) { + const { documents, range } = outputExpr.window; + (0, import_util.assert)( + !!documents && !range || !documents && !!range || !documents && !range, + "'window' option supports only one of 'documents' or 'range'." + ); } - return lo; -} - - -/***/ }), - -/***/ 8683: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$bucketAuto = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Categorizes incoming documents into a specific number of groups, called buckets, - * based on a specified expression. Bucket boundaries are automatically determined - * in an attempt to evenly distribute the documents into the specified number of buckets. - * https://docs.mongodb.com/manual/reference/operator/aggregation/bucketAuto/ - * - * @param {*} collection - * @param {*} expr - * @param {*} options - */ -const $bucketAuto = (collection, expr, options) => { - const outputExpr = expr.output || { count: { $sum: 1 } }; - const groupByExpr = expr.groupBy; - const bucketCount = expr.buckets; - (0, util_1.assert)(bucketCount > 0, `The $bucketAuto 'buckets' field must be greater than 0, but found: ${bucketCount}`); - const ID_KEY = "_id"; - return collection.transform((coll) => { - const approxBucketSize = Math.max(1, Math.round(coll.length / bucketCount)); - const computeValueOptimized = (0, util_1.memoize)(core_1.computeValue, options === null || options === void 0 ? void 0 : options.hashFunction); - const grouped = new Map(); - const remaining = []; - const sorted = (0, util_1.sortBy)(coll, o => { - const key = computeValueOptimized(o, groupByExpr, null, options); - if ((0, util_1.isNil)(key)) { - remaining.push(o); - } - else { - if (!grouped.has(key)) - grouped.set(key, []); - grouped.get(key).push(o); - } - return key; - }); - const result = []; - let index = 0; // counter for sorted collection - for (let i = 0, len = sorted.length; i < bucketCount && index < len; i++) { - const boundaries = {}; - const bucketItems = []; - for (let j = 0; j < approxBucketSize && index < len; j++) { - let key = computeValueOptimized(sorted[index], groupByExpr, null, options); - if ((0, util_1.isNil)(key)) - key = null; - // populate current bucket with all values for current key - (0, util_1.into)(bucketItems, (0, util_1.isNil)(key) ? remaining : grouped.get(key)); - // increase sort index by number of items added - index += (0, util_1.isNil)(key) ? remaining.length : grouped.get(key).length; - // set the min key boundary if not already present - if (!(0, util_1.has)(boundaries, "min")) - boundaries.min = key; - if (result.length > 0) { - const lastBucket = result[result.length - 1]; - lastBucket[ID_KEY].max = boundaries.min; - } - } - // if is last bucket add remaining items - if (i == bucketCount - 1) { - (0, util_1.into)(bucketItems, sorted.slice(index)); + } + if (expr.sortBy) { + collection = (0, import_sort.$sort)(collection, expr.sortBy, options); + } + collection = (0, import_group.$group)( + collection, + { + _id: expr.partitionBy, + items: { $push: "$$CURRENT" } + }, + options + ); + return collection.transform((partitions) => { + const iterators = []; + const outputConfig = []; + for (const [field, outputExpr] of Object.entries(expr.output)) { + const op = Object.keys(outputExpr).find(import_util.isOperator); + const config = { + operatorName: op, + func: { + left: (0, import_core.getOperator)("accumulator", op, options), + right: (0, import_core.getOperator)("window", op, options) + }, + args: outputExpr[op], + field, + window: outputExpr.window + }; + (0, import_util.assert)( + !!expr.sortBy || !(SORT_REQUIRED_OPS.has(op) || !config.window), + `${SORT_REQUIRED_OPS.has(op) ? `'${op}'` : "bounded window operation"} requires a sortBy.` + ); + (0, import_util.assert)( + !config.window || !WINDOW_UNBOUNDED_OPS.has(op), + `${op} does not accept a 'window' field.` + ); + outputConfig.push(config); + } + partitions.forEach((group) => { + const items = group.items; + let iterator = (0, import_lazy.Lazy)(items); + const windowResultMap = {}; + for (const config of outputConfig) { + const { func, args, field, window } = config; + const makeResultFunc = (getItemsFn) => { + let index = -1; + return (obj) => { + ++index; + if (func.left) { + return func.left(getItemsFn(obj, index), args, options); + } else if (func.right) { + return func.right( + obj, + getItemsFn(obj, index), + { + parentExpr: expr, + inputExpr: args, + documentNumber: index + 1, + field + }, + // must use raw options only since it operates over a collection. + options + ); } - const values = (0, core_1.computeValue)(bucketItems, outputExpr, null, options); - result.push((0, util_1.into)(values, { - _id: boundaries - })); + }; + }; + if (window) { + const { documents, range, unit } = window; + const boundary = documents || range; + if (!(0, import_internal.isUnbounded)(window)) { + const [begin, end] = boundary; + const toBeginIndex = (currentIndex) => { + if (begin == "current") return currentIndex; + if (begin == "unbounded") return 0; + return Math.max(begin + currentIndex, 0); + }; + const toEndIndex = (currentIndex) => { + if (end == "current") return currentIndex + 1; + if (end == "unbounded") return items.length; + return end + currentIndex + 1; + }; + const getItems = (current, index) => { + if (!!documents || boundary.every(import_util.isString)) { + return items.slice(toBeginIndex(index), toEndIndex(index)); + } + const sortKey = Object.keys(expr.sortBy)[0]; + let lower; + let upper; + if (unit) { + const getTime = (amount) => { + return (0, import_dateAdd.$dateAdd)( + current, + { + startDate: new Date(current[sortKey]), + unit, + amount + }, + options + ).getTime(); + }; + lower = (0, import_util.isNumber)(begin) ? getTime(begin) : -Infinity; + upper = (0, import_util.isNumber)(end) ? getTime(end) : Infinity; + } else { + const currentValue = current[sortKey]; + lower = (0, import_util.isNumber)(begin) ? currentValue + begin : -Infinity; + upper = (0, import_util.isNumber)(end) ? currentValue + end : Infinity; + } + let array = items; + if (begin == "current") array = items.slice(index); + if (end == "current") array = items.slice(0, index + 1); + return array.filter((o) => { + const n = +o[sortKey]; + return n >= lower && n <= upper; + }); + }; + windowResultMap[field] = makeResultFunc(getItems); + } } - if (result.length > 0) { - result[result.length - 1][ID_KEY].max = - computeValueOptimized(sorted[sorted.length - 1], groupByExpr, null, options); + if (!windowResultMap[field]) { + windowResultMap[field] = makeResultFunc((_) => items); } - return result; + iterator = (0, import_addFields.$addFields)( + iterator, + { + [field]: { + $function: { + body: (obj) => windowResultMap[field](obj), + args: ["$$CURRENT"] + } + } + }, + options + ); + } + iterators.push(iterator); }); + return (0, import_lazy.concat)(...iterators); + }); }; -exports.$bucketAuto = $bucketAuto; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8980: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$count = void 0; -const lazy_1 = __webpack_require__(9176); -const util_1 = __webpack_require__(7216); -/** - * Returns a document that contains a count of the number of documents input to the stage. - * - * @param {Array} collection - * @param {String} expr - * @param {Options} options - * @return {Object} - */ -const $count = (collection, expr, _) => { - (0, util_1.assert)((0, util_1.isString)(expr) && - expr.trim() !== "" && - expr.indexOf(".") === -1 && - expr.trim()[0] !== "$", "Invalid expression value for $count"); - return (0, lazy_1.Lazy)([ - { - [expr]: collection.size() - } - ]); +/***/ 8861: +/***/ ((module) => { + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$count = $count; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var skip_exports = {}; +__export(skip_exports, { + $skip: () => $skip +}); +module.exports = __toCommonJS(skip_exports); +const $skip = (collection, expr, _options) => { + return collection.drop(expr); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 10: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 4290: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$facet = void 0; -const aggregator_1 = __webpack_require__(7268); -const core_1 = __webpack_require__(9587); -/** - * Processes multiple aggregation pipelines within a single stage on the same set of input documents. - * Enables the creation of multi-faceted aggregations capable of characterizing data across multiple dimensions, or facets, in a single stage. - */ -const $facet = (collection, expr, options) => { - return collection.transform(((array) => { - const o = {}; - for (const [k, pipeline] of Object.entries(expr)) { - o[k] = new aggregator_1.Aggregator(pipeline, Object.assign(Object.assign({}, options), { processingMode: core_1.ProcessingMode.CLONE_INPUT })).run(array); - } - return [o]; - })); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var sort_exports = {}; +__export(sort_exports, { + $sort: () => $sort +}); +module.exports = __toCommonJS(sort_exports); +var import_util = __webpack_require__(7839); +const $sort = (collection, sortKeys, options) => { + if ((0, import_util.isEmpty)(sortKeys) || !(0, import_util.isObject)(sortKeys)) return collection; + let cmp = import_util.compare; + const collationSpec = options.collation; + if ((0, import_util.isObject)(collationSpec) && (0, import_util.isString)(collationSpec.locale)) { + cmp = collationComparator(collationSpec); + } + return collection.transform((coll) => { + const modifiers = Object.keys(sortKeys); + for (const key of modifiers.reverse()) { + const groups = (0, import_util.groupBy)( + coll, + (obj) => (0, import_util.resolve)(obj, key), + options.hashFunction + ); + const sortedKeys = Array.from(groups.keys()).sort(cmp); + if (sortKeys[key] === -1) sortedKeys.reverse(); + let i = 0; + for (const k of sortedKeys) for (const v of groups.get(k)) coll[i++] = v; + (0, import_util.assert)(i == coll.length, "bug: counter must match collection size."); + } + return coll; + }); }; -exports.$facet = $facet; +const COLLATION_STRENGTH = { + // Only strings that differ in base letters compare as unequal. Examples: a ≠ b, a = á, a = A. + 1: "base", + // Only strings that differ in base letters or accents and other diacritic marks compare as unequal. + // Examples: a ≠ b, a ≠ á, a = A. + 2: "accent", + // Strings that differ in base letters, accents and other diacritic marks, or case compare as unequal. + // Other differences may also be taken into consideration. Examples: a ≠ b, a ≠ á, a ≠ A + 3: "variant" + // case - Only strings that differ in base letters or case compare as unequal. Examples: a ≠ b, a = á, a ≠ A. +}; +function collationComparator(spec) { + const localeOpt = { + sensitivity: COLLATION_STRENGTH[spec.strength || 3], + caseFirst: spec.caseFirst === "off" ? "false" : spec.caseFirst || "false", + numeric: spec.numericOrdering || false, + ignorePunctuation: spec.alternate === "shifted" + }; + if ((spec.caseLevel || false) === true) { + if (localeOpt.sensitivity === "base") localeOpt.sensitivity = "case"; + if (localeOpt.sensitivity === "accent") localeOpt.sensitivity = "variant"; + } + const collator = new Intl.Collator(spec.locale, localeOpt); + return (a, b) => { + if (!(0, import_util.isString)(a) || !(0, import_util.isString)(b)) return (0, import_util.compare)(a, b); + const i = collator.compare(a, b); + if (i < 0) return -1; + if (i > 0) return 1; + return 0; + }; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 3090: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 7708: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$fill = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -const ifNull_1 = __webpack_require__(419); -const linearFill_1 = __webpack_require__(5120); -const locf_1 = __webpack_require__(8242); -const addFields_1 = __webpack_require__(1692); -const setWindowFields_1 = __webpack_require__(8515); -const FILL_METHODS = { - locf: "$locf", - linear: "$linearFill" +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -/** - * Populates null and missing field values within documents. - * - * @param {Iterator} collection - * @param {Object} expr - * @param {Options} options - */ -const $fill = (collection, expr, options) => { - var _a, _b; - (0, util_1.assert)(!expr.sortBy || (0, util_1.isObject)(expr.sortBy), "sortBy must be an object."); - (0, util_1.assert)(!!expr.sortBy || Object.values(expr.output).every(m => (0, util_1.has)(m, "value")), "sortBy required if any output field specifies a 'method'."); - (0, util_1.assert)(!(expr.partitionBy && expr.partitionByFields), "specify either partitionBy or partitionByFields."); - (0, util_1.assert)(!expr.partitionByFields || - ((_a = expr === null || expr === void 0 ? void 0 : expr.partitionByFields) === null || _a === void 0 ? void 0 : _a.every(s => s[0] !== "$")), "fields in partitionByFields cannot begin with '$'."); - options = (0, core_1.initOptions)(options); - options.context.addExpressionOps({ $ifNull: ifNull_1.$ifNull }); - options.context.addWindowOps({ $locf: locf_1.$locf, $linearFill: linearFill_1.$linearFill }); - const partitionExpr = expr.partitionBy || ((_b = expr === null || expr === void 0 ? void 0 : expr.partitionByFields) === null || _b === void 0 ? void 0 : _b.map(s => `$${s}`)); - // collect and remove all output fields using 'value' instead of 'method'. - // if there are any fields remaining, process collection using $setWindowFields. - // if the collected output fields is non-empty, use $addFields to add them to their respective partitions. - const valueExpr = {}; - const methodExpr = {}; - for (const [k, m] of Object.entries(expr.output)) { - if ((0, util_1.has)(m, "value")) { - // translate to expression for $addFields - valueExpr[k] = { $ifNull: [`$$CURRENT.${k}`, m["value"]] }; - } - else { - // translate to output expression for $setWindowFields. - const fillOp = FILL_METHODS[m["method"]]; - (0, util_1.assert)(!!fillOp, `invalid fill method '${m["method"]}'.`); - methodExpr[k] = { [fillOp]: "$" + k }; - } - } - // perform filling with $setWindowFields - if (Object.keys(methodExpr).length > 0) { - collection = (0, setWindowFields_1.$setWindowFields)(collection, { - sortBy: expr.sortBy || {}, - partitionBy: partitionExpr, - output: methodExpr - }, options); - } - // fill with values - if (Object.keys(valueExpr).length > 0) { - collection = (0, addFields_1.$addFields)(collection, valueExpr, options); - } - return collection; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var sortByCount_exports = {}; +__export(sortByCount_exports, { + $sortByCount: () => $sortByCount +}); +module.exports = __toCommonJS(sortByCount_exports); +var import_group = __webpack_require__(9723); +var import_sort = __webpack_require__(4290); +const $sortByCount = (collection, expr, options) => { + return (0, import_sort.$sort)( + (0, import_group.$group)(collection, { _id: expr, count: { $sum: 1 } }, options), + { count: -1 }, + options + ); }; -exports.$fill = $fill; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 2683: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 1347: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$group = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -// lookup key for grouping -const ID_KEY = "_id"; -/** - * Groups documents together for the purpose of calculating aggregate values based on a collection of documents. - * - * @param collection - * @param expr - * @param options - * @returns {Array} - */ -const $group = (collection, expr, options) => { - (0, util_1.assert)((0, util_1.has)(expr, ID_KEY), "a group specification must include an _id"); - const idExpr = expr[ID_KEY]; - const copts = core_1.ComputeOptions.init(options); - return collection.transform(((coll) => { - const partitions = (0, util_1.groupBy)(coll, obj => (0, core_1.computeValue)(obj, idExpr, null, options), options.hashFunction); - // remove the group key - expr = Object.assign({}, expr); - delete expr[ID_KEY]; - let i = -1; - const partitionKeys = Array.from(partitions.keys()); - const size = partitions.size; - return () => { - if (++i === size) - return { done: true }; - const groupId = partitionKeys[i]; - const obj = {}; - // exclude undefined key value - if (groupId !== undefined) { - obj[ID_KEY] = groupId; - } - // compute remaining keys in expression - for (const [key, val] of Object.entries(expr)) { - obj[key] = (0, core_1.computeValue)(partitions.get(groupId), val, key, copts.update(null, { groupId })); - } - return { value: obj, done: false }; - }; - })); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var unionWith_exports = {}; +__export(unionWith_exports, { + $unionWith: () => $unionWith +}); +module.exports = __toCommonJS(unionWith_exports); +var import_aggregator = __webpack_require__(6878); +var import_lazy = __webpack_require__(8625); +var import_util = __webpack_require__(7839); +const $unionWith = (collection, expr, options) => { + const array = (0, import_util.isString)(expr.coll) ? options.collectionResolver(expr.coll) : expr.coll; + const iterators = [collection]; + iterators.push( + expr.pipeline ? new import_aggregator.Aggregator(expr.pipeline, options).stream(array) : (0, import_lazy.Lazy)(array) + ); + return (0, import_lazy.concat)(...iterators); }; -exports.$group = $group; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 6582: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; +/***/ 829: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * Pipeline Aggregation Stages. https://docs.mongodb.com/manual/reference/operator/aggregation- - */ -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 __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(1692), exports); -__exportStar(__webpack_require__(2985), exports); -__exportStar(__webpack_require__(8683), exports); -__exportStar(__webpack_require__(8980), exports); -__exportStar(__webpack_require__(10), exports); -__exportStar(__webpack_require__(3090), exports); -__exportStar(__webpack_require__(2683), exports); -__exportStar(__webpack_require__(9749), exports); -__exportStar(__webpack_require__(954), exports); -__exportStar(__webpack_require__(9157), exports); -__exportStar(__webpack_require__(159), exports); -__exportStar(__webpack_require__(6212), exports); -__exportStar(__webpack_require__(7911), exports); -__exportStar(__webpack_require__(6402), exports); -__exportStar(__webpack_require__(6366), exports); -__exportStar(__webpack_require__(8755), exports); -__exportStar(__webpack_require__(8027), exports); -__exportStar(__webpack_require__(4707), exports); -__exportStar(__webpack_require__(8515), exports); -__exportStar(__webpack_require__(8377), exports); -__exportStar(__webpack_require__(5396), exports); -__exportStar(__webpack_require__(2311), exports); -__exportStar(__webpack_require__(1655), exports); -__exportStar(__webpack_require__(3871), exports); -__exportStar(__webpack_require__(9789), exports); - - -/***/ }), - -/***/ 9749: -/***/ ((__unused_webpack_module, exports) => { +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var unset_exports = {}; +__export(unset_exports, { + $unset: () => $unset +}); +module.exports = __toCommonJS(unset_exports); +var import_util = __webpack_require__(7839); +var import_project = __webpack_require__(2401); +const $unset = (collection, expr, options) => { + expr = (0, import_util.ensureArray)(expr); + const doc = {}; + for (const k of expr) doc[k] = 0; + return (0, import_project.$project)(collection, doc, options); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); -"use strict"; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$limit = void 0; -/** - * Restricts the number of documents in an aggregation pipeline. - * - * @param collection - * @param value - * @param options - * @returns {Object|*} - */ -const $limit = (collection, expr, options) => { - return collection.take(expr); +/***/ }), + +/***/ 3143: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var unwind_exports = {}; +__export(unwind_exports, { + $unwind: () => $unwind +}); +module.exports = __toCommonJS(unwind_exports); +var import_lazy = __webpack_require__(8625); +var import_util = __webpack_require__(7839); +const $unwind = (collection, expr, _options) => { + if ((0, import_util.isString)(expr)) expr = { path: expr }; + const path = expr.path; + const field = path.substring(1); + const includeArrayIndex = expr?.includeArrayIndex || false; + const preserveNullAndEmptyArrays = expr.preserveNullAndEmptyArrays || false; + const format = (o, i) => { + if (includeArrayIndex !== false) o[includeArrayIndex] = i; + return o; + }; + let value; + return (0, import_lazy.Lazy)(() => { + for (; ; ) { + if (value instanceof import_lazy.Iterator) { + const tmp = value.next(); + if (!tmp.done) return tmp; + } + const wrapper = collection.next(); + if (wrapper.done) return wrapper; + const obj = wrapper.value; + value = (0, import_util.resolve)(obj, field); + if ((0, import_util.isArray)(value)) { + if (value.length === 0 && preserveNullAndEmptyArrays === true) { + value = null; + (0, import_util.removeValue)(obj, field); + return { value: format(obj, null), done: false }; + } else { + value = (0, import_lazy.Lazy)(value).map((item, i) => { + const newObj = (0, import_util.resolveGraph)(obj, field, { + preserveKeys: true + }); + (0, import_util.setValue)(newObj, field, item); + return format(newObj, i); + }); + } + } else if (!(0, import_util.isEmpty)(value) || preserveNullAndEmptyArrays === true) { + return { value: format(obj, null), done: false }; + } + } + }); }; -exports.$limit = $limit; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 954: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 5975: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$lookup = void 0; -const util_1 = __webpack_require__(7216); -/** - * Performs a left outer join to another collection in the same database to filter in documents from the “joined” collection for processing. - * - * @param collection - * @param expr - * @param opt - */ -const $lookup = (collection, expr, options) => { - const joinColl = (0, util_1.isString)(expr.from) - ? options === null || options === void 0 ? void 0 : options.collectionResolver(expr.from) - : expr.from; - (0, util_1.assert)(joinColl instanceof Array, `'from' field must resolve to an array`); - const hash = {}; - for (const obj of joinColl) { - const k = (0, util_1.hashCode)((0, util_1.resolve)(obj, expr.foreignField), options === null || options === void 0 ? void 0 : options.hashFunction); - hash[k] = hash[k] || []; - hash[k].push(obj); - } - return collection.map((obj) => { - const k = (0, util_1.hashCode)((0, util_1.resolve)(obj, expr.localField), options === null || options === void 0 ? void 0 : options.hashFunction); - const newObj = (0, util_1.into)({}, obj); - newObj[expr.as] = hash[k] || []; - return newObj; - }); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var elemMatch_exports = {}; +__export(elemMatch_exports, { + $elemMatch: () => $elemMatch +}); +module.exports = __toCommonJS(elemMatch_exports); +var import_query = __webpack_require__(6535); +var import_util = __webpack_require__(7839); +const $elemMatch = (obj, expr, field, options) => { + const arr = (0, import_util.resolve)(obj, field); + const query = new import_query.Query(expr, options); + (0, import_util.assert)((0, import_util.isArray)(arr), "$elemMatch: argument must resolve to array"); + const result = []; + for (let i = 0; i < arr.length; i++) { + if (query.test(arr[i])) { + if (options.useStrictMode) return [arr[i]]; + result.push(arr[i]); + } + } + return result.length > 0 ? result : void 0; }; -exports.$lookup = $lookup; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 9157: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 4487: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$match = void 0; -const query_1 = __webpack_require__(809); -/** - * Filters the document stream, and only allows matching documents to pass into the next pipeline stage. - * $match uses standard MongoDB queries. - * - * @param collection - * @param expr - * @param options - * @returns {Array|*} - */ -const $match = (collection, expr, options) => { - const q = new query_1.Query(expr, options); - return collection.filter((o) => q.test(o)); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$match = $match; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var projection_exports = {}; +module.exports = __toCommonJS(projection_exports); +__reExport(projection_exports, __webpack_require__(5975), module.exports); +__reExport(projection_exports, __webpack_require__(2169), module.exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 159: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 2169: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$merge = void 0; -const aggregator_1 = __webpack_require__(7268); -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -const expression_1 = __webpack_require__(8985); -/** - * Writes the resulting documents of the aggregation pipeline to a collection. - * - * The stage can incorporate (insert new documents, merge documents, replace documents, - * keep existing documents, fail the operation, process documents with a custom update pipeline) - * the results into an output collection. To use the $merge stage, it must be the last stage in the pipeline. - * - * Note: Object are deep cloned for outputing regardless of the ProcessingMode. - * - * @param collection - * @param expr - * @param options - * @returns {*} - */ -const $merge = (collection, expr, options) => { - const output = (0, util_1.isString)(expr.into) - ? options === null || options === void 0 ? void 0 : options.collectionResolver(expr.into) - : expr.into; - (0, util_1.assert)(output instanceof Array, `$merge: option 'into' must resolve to an array`); - const onField = expr.on || options.idKey; - const getHash = (o) => { - const val = (0, util_1.isString)(onField) - ? (0, util_1.resolve)(o, onField) - : onField.map(s => (0, util_1.resolve)(o, s)); - return (0, util_1.hashCode)(val, options.hashFunction); - }; - const hash = {}; - // we assuming the lookup expressions are unique - for (let i = 0; i < output.length; i++) { - const obj = output[i]; - const k = getHash(obj); - (0, util_1.assert)(!hash[k], "$merge: 'into' collection must have unique entries for the 'on' field."); - hash[k] = [obj, i]; - } - const copts = core_1.ComputeOptions.init(options); - return collection.map((o) => { - const k = getHash(o); - if (hash[k]) { - const [target, i] = hash[k]; - // compute variables - const variables = (0, core_1.computeValue)(target, expr.let || { new: "$$ROOT" }, null, - // 'root' is the item from the iteration. - copts.update(o)); - if ((0, util_1.isArray)(expr.whenMatched)) { - const aggregator = new aggregator_1.Aggregator(expr.whenMatched, Object.assign(Object.assign({}, options), { variables })); - output[i] = aggregator.run([target])[0]; - } - else { - switch (expr.whenMatched) { - case "replace": - output[i] = o; - break; - case "fail": - throw new Error("$merge: failed due to matching as specified by 'whenMatched' option."); - case "keepExisting": - break; - case "merge": - default: - output[i] = (0, expression_1.$mergeObjects)(target, [target, o], - // 'root' is the item from the iteration. - copts.update(o, { variables })); - break; - } - } - } - else { - switch (expr.whenNotMatched) { - case "discard": - break; - case "fail": - throw new Error("$merge: failed due to matching as specified by 'whenMatched' option."); - case "insert": - default: - output.push(o); - break; - } - } - return o; // passthrough - }); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var slice_exports = {}; +__export(slice_exports, { + $slice: () => $slice +}); +module.exports = __toCommonJS(slice_exports); +var import_util = __webpack_require__(7839); +var import_slice = __webpack_require__(7292); +const $slice = (obj, expr, field, options) => { + const xs = (0, import_util.resolve)(obj, field); + const exprAsArray = expr; + if (!(0, import_util.isArray)(xs)) return xs; + return (0, import_slice.$slice)( + obj, + (0, import_util.isArray)(expr) ? [xs, ...exprAsArray] : [xs, expr], + options + ); }; -exports.$merge = $merge; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 6212: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 6007: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$out = void 0; -const util_1 = __webpack_require__(7216); -/** - * Takes the documents returned by the aggregation pipeline and writes them to a specified collection. - * - * Unlike the $out operator in MongoDB, this operator can appear in any position in the pipeline and is - * useful for collecting intermediate results of an aggregation operation. - * - * Note: Object are deep cloned for outputing regardless of the ProcessingMode. - * - * @param collection - * @param expr - * @param options - * @returns {*} - */ -const $out = (collection, expr, options) => { - const outputColl = (0, util_1.isString)(expr) - ? options === null || options === void 0 ? void 0 : options.collectionResolver(expr) - : expr; - (0, util_1.assert)(outputColl instanceof Array, `expression must resolve to an array`); - return collection.map((o) => { - outputColl.push((0, util_1.cloneDeep)(o)); - return o; // passthrough - }); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$out = $out; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var all_exports = {}; +__export(all_exports, { + $all: () => $all +}); +module.exports = __toCommonJS(all_exports); +var import_predicates = __webpack_require__(4330); +const $all = (0, import_predicates.createQueryOperator)(import_predicates.$all); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 7911: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 2604: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$project = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Reshapes a document stream. - * $project can rename, add, or remove fields as well as create computed values and sub-documents. - * - * @param collection - * @param expr - * @param opt - * @returns {Array} - */ -const $project = (collection, expr, options) => { - if ((0, util_1.isEmpty)(expr)) - return collection; - // result collection - let expressionKeys = Object.keys(expr); - let idOnlyExcluded = false; - // validate inclusion and exclusion - validateExpression(expr, options); - const ID_KEY = options.idKey; - if ((0, util_1.inArray)(expressionKeys, ID_KEY)) { - const id = expr[ID_KEY]; - if (id === 0 || id === false) { - expressionKeys = expressionKeys.filter(util_1.notInArray.bind(null, [ID_KEY])); - idOnlyExcluded = expressionKeys.length == 0; - } - } - else { - // if not specified the add the ID field - expressionKeys.push(ID_KEY); - } - const copts = core_1.ComputeOptions.init(options); - return collection.map(((obj) => processObject(obj, expr, copts.update(obj), expressionKeys, idOnlyExcluded))); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -exports.$project = $project; -/** - * Process the expression value for $project operators - * - * @param {Object} obj The object to use as options - * @param {Object} expr The experssion object of $project operator - * @param {Array} expressionKeys The key in the 'expr' object - * @param {Boolean} idOnlyExcluded Boolean value indicating whether only the ID key is excluded - */ -function processObject(obj, expr, options, expressionKeys, idOnlyExcluded) { - let newObj = {}; - let foundSlice = false; - let foundExclusion = false; - const dropKeys = []; - if (idOnlyExcluded) { - dropKeys.push(options.idKey); - } - for (const key of expressionKeys) { - // final computed value of the key - let value = undefined; - // expression to associate with key - const subExpr = expr[key]; - if (key !== options.idKey && (0, util_1.inArray)([0, false], subExpr)) { - foundExclusion = true; - } - if (key === options.idKey && (0, util_1.isEmpty)(subExpr)) { - // tiny optimization here to skip over id - value = obj[key]; - } - else if ((0, util_1.isString)(subExpr)) { - value = (0, core_1.computeValue)(obj, subExpr, key, options); - } - else if ((0, util_1.inArray)([1, true], subExpr)) { - // For direct projections, we use the resolved object value - } - else if (subExpr instanceof Array) { - value = subExpr.map(v => { - const r = (0, core_1.computeValue)(obj, v, null, options); - if ((0, util_1.isNil)(r)) - return null; - return r; - }); - } - else if ((0, util_1.isObject)(subExpr)) { - const subExprObj = subExpr; - const subExprKeys = Object.keys(subExpr); - const operator = subExprKeys.length == 1 ? subExprKeys[0] : ""; - // first try a projection operator - const call = (0, core_1.getOperator)(core_1.OperatorType.PROJECTION, operator, options); - if (call) { - // apply the projection operator on the operator expression for the key - if (operator === "$slice") { - // $slice is handled differently for aggregation and projection operations - if ((0, util_1.ensureArray)(subExprObj[operator]).every(util_1.isNumber)) { - // $slice for projection operation - value = call(obj, subExprObj[operator], key, options); - foundSlice = true; - } - else { - // $slice for aggregation operation - value = (0, core_1.computeValue)(obj, subExprObj, key, options); - } - } - else { - value = call(obj, subExprObj[operator], key, options); - } - } - else if ((0, util_1.isOperator)(operator)) { - // compute if operator key - value = (0, core_1.computeValue)(obj, subExprObj[operator], operator, options); - } - else if ((0, util_1.has)(obj, key)) { - // compute the value for the sub expression for the key - validateExpression(subExprObj, options); - let target = obj[key]; - if (target instanceof Array) { - value = target.map((o) => processObject(o, subExprObj, options, subExprKeys, false)); - } - else { - target = (0, util_1.isObject)(target) ? target : obj; - value = processObject(target, subExprObj, options, subExprKeys, false); - } - } - else { - // compute the value for the sub expression for the key - value = (0, core_1.computeValue)(obj, subExpr, null, options); - } - } - else { - dropKeys.push(key); - continue; - } - // get value with object graph - const objPathGraph = (0, util_1.resolveGraph)(obj, key, { - preserveMissing: true - }); - // add the value at the path - if (objPathGraph !== undefined) { - (0, util_1.merge)(newObj, objPathGraph, { - flatten: true - }); - } - // if computed add/or remove accordingly - if ((0, util_1.notInArray)([0, 1, false, true], subExpr)) { - if (value === undefined) { - (0, util_1.removeValue)(newObj, key, { descendArray: true }); - } - else { - (0, util_1.setValue)(newObj, key, value); - } - } - } - // filter out all missing values preserved to support correct merging - (0, util_1.filterMissing)(newObj); - // For the following cases we include all keys on the object that were not explicitly excluded. - // - // 1. projection included $slice operator - // 2. some fields were explicitly excluded - // 3. only the id field was excluded - if (foundSlice || foundExclusion || idOnlyExcluded) { - newObj = (0, util_1.into)({}, obj, newObj); - if (dropKeys.length > 0) { - for (const k of dropKeys) { - (0, util_1.removeValue)(newObj, k, { descendArray: true }); - } - } - } - return newObj; -} -/** - * Validate inclusion and exclusion values in expression - * - * @param {Object} expr The expression given for the projection - */ -function validateExpression(expr, options) { - const check = [false, false]; - for (const [k, v] of Object.entries(expr)) { - if (k === (options === null || options === void 0 ? void 0 : options.idKey)) - return; - if (v === 0 || v === false) { - check[0] = true; - } - else if (v === 1 || v === true) { - check[1] = true; - } - (0, util_1.assert)(!(check[0] && check[1]), "Projection cannot have a mix of inclusion and exclusion."); - } -} +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var elemMatch_exports = {}; +__export(elemMatch_exports, { + $elemMatch: () => $elemMatch +}); +module.exports = __toCommonJS(elemMatch_exports); +var import_predicates = __webpack_require__(4330); +const $elemMatch = (0, import_predicates.createQueryOperator)(import_predicates.$elemMatch); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 6402: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 4748: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$redact = void 0; -const core_1 = __webpack_require__(9587); -/** - * Restricts the contents of the documents based on information stored in the documents themselves. - * - * https://docs.mongodb.com/manual/reference/operator/aggregation/redact/ - */ -const $redact = (collection, expr, options) => { - const copts = core_1.ComputeOptions.init(options); - return collection.map(((obj) => (0, core_1.redact)(obj, expr, copts.update(obj)))); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$redact = $redact; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var array_exports = {}; +module.exports = __toCommonJS(array_exports); +__reExport(array_exports, __webpack_require__(6007), module.exports); +__reExport(array_exports, __webpack_require__(2604), module.exports); +__reExport(array_exports, __webpack_require__(6143), module.exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 6366: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 6143: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$replaceRoot = void 0; -const core_1 = __webpack_require__(9587); -const util_1 = __webpack_require__(7216); -/** - * Replaces a document with the specified embedded document or new one. - * The replacement document can be any valid expression that resolves to a document. - * - * https://docs.mongodb.com/manual/reference/operator/aggregation/replaceRoot/ - * - * @param {Iterator} collection - * @param {Object} expr - * @param {Object} options - * @return {*} - */ -const $replaceRoot = (collection, expr, options) => { - return collection.map(obj => { - obj = (0, core_1.computeValue)(obj, expr.newRoot, null, options); - (0, util_1.assert)((0, util_1.isObject)(obj), "$replaceRoot expression must return an object"); - return obj; - }); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$replaceRoot = $replaceRoot; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var size_exports = {}; +__export(size_exports, { + $size: () => $size +}); +module.exports = __toCommonJS(size_exports); +var import_predicates = __webpack_require__(4330); +const $size = (0, import_predicates.createQueryOperator)(import_predicates.$size); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8755: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 5450: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$replaceWith = void 0; -const replaceRoot_1 = __webpack_require__(6366); -/** - * Alias for $replaceRoot - */ -exports.$replaceWith = replaceRoot_1.$replaceRoot; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var internal_exports = {}; +__export(internal_exports, { + createBitwiseOperator: () => createBitwiseOperator +}); +module.exports = __toCommonJS(internal_exports); +var import_util = __webpack_require__(7839); +var import_predicates = __webpack_require__(4330); +const createBitwiseOperator = (predicate) => { + return (0, import_predicates.createQueryOperator)( + (value, mask, _options) => { + let b = 0; + if ((0, import_util.isArray)(mask)) { + for (const n of mask) b = b | 1 << n; + } else { + b = mask; + } + return predicate(value & b, b); + } + ); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8027: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; +/***/ 1996: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// $sample operator - https://docs.mongodb.com/manual/reference/operator/aggregation/sample/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$sample = void 0; -/** - * Randomly selects the specified number of documents from its input. The given iterator must have finite values - * - * @param {Iterator} collection - * @param {Object} expr - * @param {Options} _options - * @return {*} - */ -const $sample = (collection, expr, _options) => { - return collection.transform(((xs) => { - const len = xs.length; - let i = -1; - return () => { - if (++i === expr.size) - return { done: true }; - const n = Math.floor(Math.random() * len); - return { value: xs[n], done: false }; - }; - })); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -exports.$sample = $sample; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var bitsAllClear_exports = {}; +__export(bitsAllClear_exports, { + $bitsAllClear: () => $bitsAllClear +}); +module.exports = __toCommonJS(bitsAllClear_exports); +var import_internal = __webpack_require__(5450); +const $bitsAllClear = (0, import_internal.createBitwiseOperator)((result, _) => result == 0); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 4707: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 7537: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$set = void 0; -const addFields_1 = __webpack_require__(1692); -/** - * Alias for $addFields. - */ -exports.$set = addFields_1.$addFields; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var bitsAllSet_exports = {}; +__export(bitsAllSet_exports, { + $bitsAllSet: () => $bitsAllSet +}); +module.exports = __toCommonJS(bitsAllSet_exports); +var import_internal = __webpack_require__(5450); +const $bitsAllSet = (0, import_internal.createBitwiseOperator)( + (result, mask) => result == mask +); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8515: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 6864: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// $setWindowFields - https://docs.mongodb.com/manual/reference/operator/aggregation/setWindowFields/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$setWindowFields = void 0; -const core_1 = __webpack_require__(9587); -const lazy_1 = __webpack_require__(9176); -const util_1 = __webpack_require__(7216); -const expression_1 = __webpack_require__(8985); -const dateAdd_1 = __webpack_require__(9784); -const _internal_1 = __webpack_require__(2899); -const addFields_1 = __webpack_require__(1692); -const group_1 = __webpack_require__(2683); -const sort_1 = __webpack_require__(5396); -// Operators that require 'sortBy' option. -const SORT_REQUIRED_OPS = new Set([ - "$denseRank", - "$documentNumber", - "$first", - "$last", - "$linearFill", - "$rank", - "$shift" -]); -// Operators that require unbounded 'window' option. -const WINDOW_UNBOUNDED_OPS = new Set([ - "$denseRank", - "$expMovingAvg", - "$linearFill", - "$locf", - "$rank", - "$shift" -]); -/** - * Randomly selects the specified number of documents from its input. The given iterator must have finite values - * - * @param {Iterator} collection - * @param {Object} expr - * @param {Options} options - * @return {*} - */ -const $setWindowFields = (collection, expr, options) => { - options = (0, core_1.initOptions)(options); - options.context.addExpressionOps({ $function: expression_1.$function }); - // validate inputs early since this can be an expensive operation. - for (const outputExpr of Object.values(expr.output)) { - const keys = Object.keys(outputExpr); - const op = keys.find(util_1.isOperator); - (0, util_1.assert)(!!(0, core_1.getOperator)(core_1.OperatorType.WINDOW, op, options) || - !!(0, core_1.getOperator)(core_1.OperatorType.ACCUMULATOR, op, options), `'${op}' is not a valid window operator`); - (0, util_1.assert)(keys.length > 0 && - keys.length <= 2 && - (keys.length == 1 || keys.includes("window")), "'output' option should have a single window operator."); - if (outputExpr === null || outputExpr === void 0 ? void 0 : outputExpr.window) { - const { documents, range } = outputExpr.window; - (0, util_1.assert)((!!documents && !range) || - (!documents && !!range) || - (!documents && !range), "'window' option supports only one of 'documents' or 'range'."); - } - } - // we sort first if required - if (expr.sortBy) { - collection = (0, sort_1.$sort)(collection, expr.sortBy, options); - } - // then partition collection - collection = (0, group_1.$group)(collection, { - _id: expr.partitionBy, - items: { $push: "$$CURRENT" } - }, options); - // transform values - return collection.transform(((partitions) => { - // let iteratorIndex = 0; - const iterators = []; - const outputConfig = []; - for (const [field, outputExpr] of Object.entries(expr.output)) { - const op = Object.keys(outputExpr).find(util_1.isOperator); - const config = { - operatorName: op, - func: { - left: (0, core_1.getOperator)(core_1.OperatorType.ACCUMULATOR, op, options), - right: (0, core_1.getOperator)(core_1.OperatorType.WINDOW, op, options) - }, - args: outputExpr[op], - field: field, - window: outputExpr.window - }; - // sortBy option required for specific operators or bounded window. - (0, util_1.assert)(!!expr.sortBy || !(SORT_REQUIRED_OPS.has(op) || !config.window), `${SORT_REQUIRED_OPS.has(op) ? `'${op}'` : "bounded window operation"} requires a sortBy.`); - // window must be unbounded for specific operators. - (0, util_1.assert)(!config.window || !WINDOW_UNBOUNDED_OPS.has(op), `${op} does not accept a 'window' field.`); - outputConfig.push(config); - } - // each parition maintains its own closure to process the documents in the window. - partitions.forEach(((group) => { - // get the items to process - const items = group.items; - // create an iterator per group. - // we need the index of each document so we track it using a special field. - let iterator = (0, lazy_1.Lazy)(items); - // results map - const windowResultMap = {}; - for (const config of outputConfig) { - const { func, args, field, window } = config; - const makeResultFunc = (getItemsFn) => { - // closure for object index within the partition - let index = -1; - return (obj) => { - ++index; - // process accumulator function - if (func.left) { - return func.left(getItemsFn(obj, index), args, options); - } - else if (func.right) { - // OR process 'window' function - return func.right(obj, getItemsFn(obj, index), { - parentExpr: expr, - inputExpr: args, - documentNumber: index + 1, - field - }, - // must use raw options only since it operates over a collection. - options); - } - }; - }; - if (window) { - const { documents, range, unit } = window; - // TODO: fix the meaning of numeric values in range. - // See definition: https://www.mongodb.com/docs/manual/reference/operator/aggregation/setWindowFields/#std-label-setWindowFields-range - // - A number to add to the value of the sortBy field for the current document. - // - A document is in the window if the sortBy field value is inclusively within the lower and upper boundaries. - // TODO: Need to reconcile the two above statments from the doc to implement 'range' option correctly. - const boundary = documents || range; - if (!(0, _internal_1.isUnbounded)(window)) { - const [begin, end] = boundary; - const toBeginIndex = (currentIndex) => { - if (begin == "current") - return currentIndex; - if (begin == "unbounded") - return 0; - return Math.max(begin + currentIndex, 0); - }; - const toEndIndex = (currentIndex) => { - if (end == "current") - return currentIndex + 1; - if (end == "unbounded") - return items.length; - return end + currentIndex + 1; - }; - const getItems = (current, index) => { - // handle string boundaries or documents - if (!!documents || boundary.every(util_1.isString)) { - return items.slice(toBeginIndex(index), toEndIndex(index)); - } - // handle range with numeric boundary values - const sortKey = Object.keys(expr.sortBy)[0]; - let lower; - let upper; - if (unit) { - // we are dealing with datetimes - const getTime = (amount) => { - return (0, dateAdd_1.$dateAdd)(current, { - startDate: new Date(current[sortKey]), - unit, - amount - }, options).getTime(); - }; - lower = (0, util_1.isNumber)(begin) ? getTime(begin) : -Infinity; - upper = (0, util_1.isNumber)(end) ? getTime(end) : Infinity; - } - else { - const currentValue = current[sortKey]; - lower = (0, util_1.isNumber)(begin) ? currentValue + begin : -Infinity; - upper = (0, util_1.isNumber)(end) ? currentValue + end : Infinity; - } - let array = items; - if (begin == "current") - array = items.slice(index); - if (end == "current") - array = items.slice(0, index + 1); - // look within the boundary and filter down - return array.filter((o) => { - const value = o[sortKey]; - const n = +value; - return n >= lower && n <= upper; - }); - }; - windowResultMap[field] = makeResultFunc(getItems); - } - } - // default action is to utilize the entire set of items - if (!windowResultMap[field]) { - windowResultMap[field] = makeResultFunc(_ => items); - } - // invoke add fields to get the desired behaviour using a custom function. - iterator = (0, addFields_1.$addFields)(iterator, { - [field]: { - $function: { - body: (obj) => windowResultMap[field](obj), - args: ["$$CURRENT"] - } - } - }, options); - } - // add to iterator list - iterators.push(iterator); - })); - return (0, lazy_1.compose)(...iterators); - })); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$setWindowFields = $setWindowFields; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var bitsAnyClear_exports = {}; +__export(bitsAnyClear_exports, { + $bitsAnyClear: () => $bitsAnyClear +}); +module.exports = __toCommonJS(bitsAnyClear_exports); +var import_internal = __webpack_require__(5450); +const $bitsAnyClear = (0, import_internal.createBitwiseOperator)( + (result, mask) => result < mask +); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8377: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; +/***/ 4010: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$skip = void 0; -/** - * Skips over a specified number of documents from the pipeline and returns the rest. - * - * @param collection An iterator - * @param expr - * @param {Options} options - * @returns {*} - */ -const $skip = (collection, expr, options) => { - return collection.drop(expr); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$skip = $skip; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var bitsAnySet_exports = {}; +__export(bitsAnySet_exports, { + $bitsAnySet: () => $bitsAnySet +}); +module.exports = __toCommonJS(bitsAnySet_exports); +var import_internal = __webpack_require__(5450); +const $bitsAnySet = (0, import_internal.createBitwiseOperator)((result, _) => result > 0); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5396: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 8286: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$sort = void 0; -const util_1 = __webpack_require__(7216); -/** - * Takes all input documents and returns them in a stream of sorted documents. - * - * @param collection - * @param sortKeys - * @param {Object} options - * @returns {*} - */ -const $sort = (collection, sortKeys, options) => { - if ((0, util_1.isEmpty)(sortKeys) || !(0, util_1.isObject)(sortKeys)) - return collection; - let cmp = util_1.compare; - // check for collation spec on the options - const collationSpec = options.collation; - // use collation comparator if provided - if ((0, util_1.isObject)(collationSpec) && (0, util_1.isString)(collationSpec.locale)) { - cmp = collationComparator(collationSpec); - } - return collection.transform((coll) => { - const modifiers = Object.keys(sortKeys); - for (const key of modifiers.reverse()) { - const groups = (0, util_1.groupBy)(coll, (obj) => (0, util_1.resolve)(obj, key), options.hashFunction); - const sortedKeys = Array.from(groups.keys()).sort(cmp); - if (sortKeys[key] === -1) - sortedKeys.reverse(); - // reuse collection so the data is available for the next iteration of the sort modifiers. - coll = []; - sortedKeys.reduce((acc, key) => (0, util_1.into)(acc, groups.get(key)), coll); - } - return coll; - }); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -exports.$sort = $sort; -// MongoDB collation strength to JS localeCompare sensitivity mapping. -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare -const COLLATION_STRENGTH = { - // Only strings that differ in base letters compare as unequal. Examples: a ≠ b, a = á, a = A. - 1: "base", - // Only strings that differ in base letters or accents and other diacritic marks compare as unequal. - // Examples: a ≠ b, a ≠ á, a = A. - 2: "accent", - // Strings that differ in base letters, accents and other diacritic marks, or case compare as unequal. - // Other differences may also be taken into consideration. Examples: a ≠ b, a ≠ á, a ≠ A - 3: "variant" - // case - Only strings that differ in base letters or case compare as unequal. Examples: a ≠ b, a = á, a ≠ A. +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -/** - * Creates a comparator function for the given collation spec. See https://docs.mongodb.com/manual/reference/collation/ - * - * @param spec {Object} The MongoDB collation spec. - * { - * locale: string, - * caseLevel: boolean, - * caseFirst: string, - * strength: int, - * numericOrdering: boolean, - * alternate: string, - * maxVariable: string, // unsupported - * backwards: boolean // unsupported - * } - */ -function collationComparator(spec) { - const localeOpt = { - sensitivity: COLLATION_STRENGTH[spec.strength || 3], - caseFirst: spec.caseFirst === "off" ? "false" : spec.caseFirst || "false", - numeric: spec.numericOrdering || false, - ignorePunctuation: spec.alternate === "shifted" - }; - // when caseLevel is true for strength 1:base and 2:accent, bump sensitivity to the nearest that supports case comparison - if ((spec.caseLevel || false) === true) { - if (localeOpt.sensitivity === "base") - localeOpt.sensitivity = "case"; - if (localeOpt.sensitivity === "accent") - localeOpt.sensitivity = "variant"; - } - const collator = new Intl.Collator(spec.locale, localeOpt); - return (a, b) => { - // non strings - if (!(0, util_1.isString)(a) || !(0, util_1.isString)(b)) - return (0, util_1.compare)(a, b); - // only for strings - const i = collator.compare(a, b); - if (i < 0) - return -1; - if (i > 0) - return 1; - return 0; - }; -} +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var bitwise_exports = {}; +__export(bitwise_exports, { + $bitsAllClear: () => import_bitsAllClear.$bitsAllClear, + $bitsAllSet: () => import_bitsAllSet.$bitsAllSet, + $bitsAnyClear: () => import_bitsAnyClear.$bitsAnyClear, + $bitsAnySet: () => import_bitsAnySet.$bitsAnySet +}); +module.exports = __toCommonJS(bitwise_exports); +var import_bitsAllClear = __webpack_require__(1996); +var import_bitsAllSet = __webpack_require__(7537); +var import_bitsAnyClear = __webpack_require__(6864); +var import_bitsAnySet = __webpack_require__(4010); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 2311: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 7586: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$sortByCount = void 0; -const group_1 = __webpack_require__(2683); -const sort_1 = __webpack_require__(5396); -/** - * Groups incoming documents based on the value of a specified expression, - * then computes the count of documents in each distinct group. - * - * https://docs.mongodb.com/manual/reference/operator/aggregation/sortByCount/ - * - * @param {Array} collection - * @param {Object} expr - * @param {Object} options - * @return {*} - */ -const $sortByCount = (collection, expr, options) => { - const newExpr = { count: { $sum: 1 } }; - newExpr["_id"] = expr; - return (0, sort_1.$sort)((0, group_1.$group)(collection, newExpr, options), { count: -1 }, options); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -exports.$sortByCount = $sortByCount; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var eq_exports = {}; +__export(eq_exports, { + $eq: () => $eq +}); +module.exports = __toCommonJS(eq_exports); +var import_predicates = __webpack_require__(4330); +const $eq = (0, import_predicates.createQueryOperator)(import_predicates.$eq); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 1655: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 1855: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$unionWith = void 0; -const aggregator_1 = __webpack_require__(7268); -const lazy_1 = __webpack_require__(9176); -const util_1 = __webpack_require__(7216); -/** - * Performs a union of two collections. - * - * @param collection - * @param expr - * @param opt - */ -const $unionWith = (collection, expr, options) => { - const array = (0, util_1.isString)(expr.coll) - ? options.collectionResolver(expr.coll) - : expr.coll; - const iterators = [collection]; - iterators.push(expr.pipeline - ? new aggregator_1.Aggregator(expr.pipeline, options).stream(array) - : (0, lazy_1.Lazy)(array)); - return (0, lazy_1.compose)(...iterators); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$unionWith = $unionWith; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var gt_exports = {}; +__export(gt_exports, { + $gt: () => $gt +}); +module.exports = __toCommonJS(gt_exports); +var import_predicates = __webpack_require__(4330); +const $gt = (0, import_predicates.createQueryOperator)(import_predicates.$gt); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 3871: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 4268: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$unset = void 0; -const util_1 = __webpack_require__(7216); -const project_1 = __webpack_require__(7911); -/** - * Removes/excludes fields from documents. - * - * @param collection - * @param expr - * @param options - * @returns {Iterator} - */ -const $unset = (collection, expr, options) => { - expr = (0, util_1.ensureArray)(expr); - const doc = {}; - for (const k of expr) - doc[k] = 0; - return (0, project_1.$project)(collection, doc, options); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$unset = $unset; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var gte_exports = {}; +__export(gte_exports, { + $gte: () => $gte +}); +module.exports = __toCommonJS(gte_exports); +var import_predicates = __webpack_require__(4330); +const $gte = (0, import_predicates.createQueryOperator)(import_predicates.$gte); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 9789: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 4399: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$unwind = void 0; -const lazy_1 = __webpack_require__(9176); -const util_1 = __webpack_require__(7216); -/** - * Takes an array of documents and returns them as a stream of documents. - * - * @param collection - * @param expr - * @param options - * @returns {Array} - */ -const $unwind = (collection, expr, _options) => { - if ((0, util_1.isString)(expr)) - expr = { path: expr }; - const path = expr.path; - const field = path.substring(1); - const includeArrayIndex = (expr === null || expr === void 0 ? void 0 : expr.includeArrayIndex) || false; - const preserveNullAndEmptyArrays = expr.preserveNullAndEmptyArrays || false; - const format = (o, i) => { - if (includeArrayIndex !== false) - o[includeArrayIndex] = i; - return o; - }; - let value; - return (0, lazy_1.Lazy)(() => { - for (;;) { - // take from lazy sequence if available - if (value instanceof lazy_1.Iterator) { - const tmp = value.next(); - if (!tmp.done) - return tmp; - } - // fetch next object - const wrapper = collection.next(); - if (wrapper.done) - return wrapper; - // unwrap value - const obj = wrapper.value; - // get the value of the field to unwind - value = (0, util_1.resolve)(obj, field); - // throw error if value is not an array??? - if (value instanceof Array) { - if (value.length === 0 && preserveNullAndEmptyArrays === true) { - value = null; // reset unwind value - (0, util_1.removeValue)(obj, field); - return { value: format(obj, null), done: false }; - } - else { - // construct a lazy sequence for elements per value - value = (0, lazy_1.Lazy)(value).map(((item, i) => { - const newObj = (0, util_1.resolveGraph)(obj, field, { - preserveKeys: true - }); - (0, util_1.setValue)(newObj, field, item); - return format(newObj, i); - })); - } - } - else if (!(0, util_1.isEmpty)(value) || preserveNullAndEmptyArrays === true) { - return { value: format(obj, null), done: false }; - } - } - }); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -exports.$unwind = $unwind; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var in_exports = {}; +__export(in_exports, { + $in: () => $in +}); +module.exports = __toCommonJS(in_exports); +var import_predicates = __webpack_require__(4330); +const $in = (0, import_predicates.createQueryOperator)(import_predicates.$in); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 2781: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 3338: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// $elemMatch operator. https://docs.mongodb.com/manual/reference/operator/projection/elemMatch/#proj._S_elemMatch -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$elemMatch = void 0; -const query_1 = __webpack_require__(809); -const util_1 = __webpack_require__(7216); -/** - * Projects only the first element from an array that matches the specified $elemMatch condition. - * - * @param obj - * @param field - * @param expr - * @returns {*} - */ -const $elemMatch = (obj, expr, field, options) => { - const arr = (0, util_1.resolve)(obj, field); - const query = new query_1.Query(expr, options); - (0, util_1.assert)(arr instanceof Array, "$elemMatch: argument must resolve to array"); - const result = []; - for (let i = 0; i < arr.length; i++) { - if (query.test(arr[i])) { - // MongoDB projects only the first nested document when using this operator. - // For some use cases this can lead to complicated queries to selectively project nested documents. - // When strict mode is disabled, we return all matching nested documents. - if (options.useStrictMode) - return [arr[i]]; - result.push(arr[i]); - } - } - return result.length > 0 ? result : undefined; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$elemMatch = $elemMatch; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var comparison_exports = {}; +__export(comparison_exports, { + $eq: () => import_eq.$eq, + $gt: () => import_gt.$gt, + $gte: () => import_gte.$gte, + $in: () => import_in.$in, + $lt: () => import_lt.$lt, + $lte: () => import_lte.$lte, + $ne: () => import_ne.$ne, + $nin: () => import_nin.$nin +}); +module.exports = __toCommonJS(comparison_exports); +var import_eq = __webpack_require__(7586); +var import_gt = __webpack_require__(1855); +var import_gte = __webpack_require__(4268); +var import_in = __webpack_require__(4399); +var import_lt = __webpack_require__(7768); +var import_lte = __webpack_require__(3525); +var import_ne = __webpack_require__(4793); +var import_nin = __webpack_require__(819); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 3791: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; +/***/ 7768: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Projection Operators. https://docs.mongodb.com/manual/reference/operator/projection/ -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 __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(2781), exports); -__exportStar(__webpack_require__(8083), exports); +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var lt_exports = {}; +__export(lt_exports, { + $lt: () => $lt +}); +module.exports = __toCommonJS(lt_exports); +var import_predicates = __webpack_require__(4330); +const $lt = (0, import_predicates.createQueryOperator)(import_predicates.$lt); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8083: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 3525: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// $slice operator. https://docs.mongodb.com/manual/reference/operator/projection/slice/#proj._S_slice -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$slice = void 0; -const util_1 = __webpack_require__(7216); -const slice_1 = __webpack_require__(5000); -/** - * Limits the number of elements projected from an array. Supports skip and limit slices. - * - * @param obj - * @param field - * @param expr - */ -const $slice = (obj, expr, field, options) => { - const xs = (0, util_1.resolve)(obj, field); - const exprAsArray = expr; - if (!(0, util_1.isArray)(xs)) - return xs; - return (0, slice_1.$slice)(obj, expr instanceof Array ? [xs, ...exprAsArray] : [xs, expr], options); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -exports.$slice = $slice; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var lte_exports = {}; +__export(lte_exports, { + $lte: () => $lte +}); +module.exports = __toCommonJS(lte_exports); +var import_predicates = __webpack_require__(4330); +const $lte = (0, import_predicates.createQueryOperator)(import_predicates.$lte); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 1274: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 4793: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Query Array Operators: https://docs.mongodb.com/manual/reference/operator/query-array/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$all = void 0; -const _predicates_1 = __webpack_require__(4414); -/** - * Matches arrays that contain all elements specified in the query. - */ -exports.$all = (0, _predicates_1.createQueryOperator)(_predicates_1.$all); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var ne_exports = {}; +__export(ne_exports, { + $ne: () => $ne +}); +module.exports = __toCommonJS(ne_exports); +var import_predicates = __webpack_require__(4330); +const $ne = (0, import_predicates.createQueryOperator)(import_predicates.$ne); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 6242: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 819: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Query Array Operators: https://docs.mongodb.com/manual/reference/operator/query-array/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$elemMatch = void 0; -const _predicates_1 = __webpack_require__(4414); -/** - * Selects documents if element in the array field matches all the specified $elemMatch conditions. - */ -exports.$elemMatch = (0, _predicates_1.createQueryOperator)(_predicates_1.$elemMatch); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var nin_exports = {}; +__export(nin_exports, { + $nin: () => $nin +}); +module.exports = __toCommonJS(nin_exports); +var import_predicates = __webpack_require__(4330); +const $nin = (0, import_predicates.createQueryOperator)(import_predicates.$nin); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 7562: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; +/***/ 1917: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -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 __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(1274), exports); -__exportStar(__webpack_require__(6242), exports); -__exportStar(__webpack_require__(6534), exports); +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var exists_exports = {}; +__export(exists_exports, { + $exists: () => $exists +}); +module.exports = __toCommonJS(exists_exports); +var import_predicates = __webpack_require__(4330); +const $exists = (0, import_predicates.createQueryOperator)(import_predicates.$exists); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 6534: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 2206: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Query Array Operators: https://docs.mongodb.com/manual/reference/operator/query-array/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$size = void 0; -const _predicates_1 = __webpack_require__(4414); -/** - * Selects documents if the array field is a specified size. - */ -exports.$size = (0, _predicates_1.createQueryOperator)(_predicates_1.$size); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var element_exports = {}; +module.exports = __toCommonJS(element_exports); +__reExport(element_exports, __webpack_require__(1917), module.exports); +__reExport(element_exports, __webpack_require__(3989), module.exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 2579: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 3989: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.createBitwiseOperator = void 0; -const _predicates_1 = __webpack_require__(4414); -const createBitwiseOperator = (predicate) => { - return (0, _predicates_1.createQueryOperator)((value, mask, options) => { - let b = 0; - if (mask instanceof Array) { - for (const n of mask) - b = b | (1 << n); - } - else { - b = mask; - } - return predicate(value & b, b); - }); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.createBitwiseOperator = createBitwiseOperator; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var type_exports = {}; +__export(type_exports, { + $type: () => $type +}); +module.exports = __toCommonJS(type_exports); +var import_predicates = __webpack_require__(4330); +const $type = (0, import_predicates.createQueryOperator)(import_predicates.$type); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8706: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 9170: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Query Bitwise Operators: https://docs.mongodb.com/manual/reference/operator/query-bitwise/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$bitsAllClear = void 0; -const _internal_1 = __webpack_require__(2579); -/** - * Matches numeric or binary values in which a set of bit positions all have a value of 0. - */ -exports.$bitsAllClear = (0, _internal_1.createBitwiseOperator)((result, _) => result == 0); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var expr_exports = {}; +__export(expr_exports, { + $expr: () => $expr +}); +module.exports = __toCommonJS(expr_exports); +var import_core = __webpack_require__(2760); +function $expr(_, rhs, options) { + return (obj) => (0, import_core.computeValue)(obj, rhs, null, options); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 7089: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 5437: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Query Bitwise Operators: https://docs.mongodb.com/manual/reference/operator/query-bitwise/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$bitsAllSet = void 0; -const _internal_1 = __webpack_require__(2579); -/** - * Matches numeric or binary values in which a set of bit positions all have a value of 1. - */ -exports.$bitsAllSet = (0, _internal_1.createBitwiseOperator)((result, mask) => result == mask); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var evaluation_exports = {}; +module.exports = __toCommonJS(evaluation_exports); +__reExport(evaluation_exports, __webpack_require__(9170), module.exports); +__reExport(evaluation_exports, __webpack_require__(3008), module.exports); +__reExport(evaluation_exports, __webpack_require__(1661), module.exports); +__reExport(evaluation_exports, __webpack_require__(3130), module.exports); +__reExport(evaluation_exports, __webpack_require__(3617), module.exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8390: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 3008: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Query Bitwise Operators: https://docs.mongodb.com/manual/reference/operator/query-bitwise/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$bitsAnyClear = void 0; -const _internal_1 = __webpack_require__(2579); -/** - * Matches numeric or binary values in which any bit from a set of bit positions has a value of 0. - */ -exports.$bitsAnyClear = (0, _internal_1.createBitwiseOperator)((result, mask) => result < mask); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var jsonSchema_exports = {}; +__export(jsonSchema_exports, { + $jsonSchema: () => $jsonSchema +}); +module.exports = __toCommonJS(jsonSchema_exports); +var import_util = __webpack_require__(7839); +function $jsonSchema(_, schema, options) { + if (!options?.jsonSchemaValidator) { + throw new import_util.MingoError( + "Missing option 'jsonSchemaValidator'. Configure to use '$jsonSchema' operator." + ); + } + const validate = options?.jsonSchemaValidator(schema); + return (obj) => validate(obj); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 6308: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 1661: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Query Bitwise Operators: https://docs.mongodb.com/manual/reference/operator/query-bitwise/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$bitsAnySet = void 0; -const _internal_1 = __webpack_require__(2579); -/** - * Matches numeric or binary values in which any bit from a set of bit positions has a value of 1. - */ -exports.$bitsAnySet = (0, _internal_1.createBitwiseOperator)((result, _) => result > 0); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var mod_exports = {}; +__export(mod_exports, { + $mod: () => $mod +}); +module.exports = __toCommonJS(mod_exports); +var import_predicates = __webpack_require__(4330); +const $mod = (0, import_predicates.createQueryOperator)(import_predicates.$mod); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 4167: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 3130: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$bitsAnySet = exports.$bitsAnyClear = exports.$bitsAllSet = exports.$bitsAllClear = void 0; -var bitsAllClear_1 = __webpack_require__(8706); -Object.defineProperty(exports, "$bitsAllClear", ({ enumerable: true, get: function () { return bitsAllClear_1.$bitsAllClear; } })); -var bitsAllSet_1 = __webpack_require__(7089); -Object.defineProperty(exports, "$bitsAllSet", ({ enumerable: true, get: function () { return bitsAllSet_1.$bitsAllSet; } })); -var bitsAnyClear_1 = __webpack_require__(8390); -Object.defineProperty(exports, "$bitsAnyClear", ({ enumerable: true, get: function () { return bitsAnyClear_1.$bitsAnyClear; } })); -var bitsAnySet_1 = __webpack_require__(6308); -Object.defineProperty(exports, "$bitsAnySet", ({ enumerable: true, get: function () { return bitsAnySet_1.$bitsAnySet; } })); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var regex_exports = {}; +__export(regex_exports, { + $regex: () => $regex +}); +module.exports = __toCommonJS(regex_exports); +var import_predicates = __webpack_require__(4330); +const $regex = (0, import_predicates.createQueryOperator)(import_predicates.$regex); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 102: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 3617: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Query Comparison Operators: https://docs.mongodb.com/manual/reference/operator/query-comparison/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$eq = void 0; -const _predicates_1 = __webpack_require__(4414); -/** - * Matches values that are equal to a specified value. - */ -exports.$eq = (0, _predicates_1.createQueryOperator)(_predicates_1.$eq); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var where_exports = {}; +__export(where_exports, { + $where: () => $where +}); +module.exports = __toCommonJS(where_exports); +var import_util = __webpack_require__(7839); +function $where(_, rhs, options) { + (0, import_util.assert)( + options.scriptEnabled, + "$where operator requires 'scriptEnabled' option to be true" + ); + const f = rhs; + (0, import_util.assert)((0, import_util.isFunction)(f), "$where only accepts a Function object"); + return (obj) => (0, import_util.truthy)(f.call(obj), options?.useStrictMode); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 3916: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 8510: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Query Comparison Operators: https://docs.mongodb.com/manual/reference/operator/query-comparison/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$gt = void 0; -const _predicates_1 = __webpack_require__(4414); -/** - * Matches values that are greater than a specified value. - */ -exports.$gt = (0, _predicates_1.createQueryOperator)(_predicates_1.$gt); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var query_exports = {}; +module.exports = __toCommonJS(query_exports); +__reExport(query_exports, __webpack_require__(4748), module.exports); +__reExport(query_exports, __webpack_require__(8286), module.exports); +__reExport(query_exports, __webpack_require__(3338), module.exports); +__reExport(query_exports, __webpack_require__(2206), module.exports); +__reExport(query_exports, __webpack_require__(5437), module.exports); +__reExport(query_exports, __webpack_require__(7218), module.exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 4017: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 2096: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Query Comparison Operators: https://docs.mongodb.com/manual/reference/operator/query-comparison/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$gte = void 0; -const _predicates_1 = __webpack_require__(4414); -/** - * Matches values that are greater than or equal to a specified value. - */ -exports.$gte = (0, _predicates_1.createQueryOperator)(_predicates_1.$gte); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var and_exports = {}; +__export(and_exports, { + $and: () => $and +}); +module.exports = __toCommonJS(and_exports); +var import_query = __webpack_require__(6535); +var import_util = __webpack_require__(7839); +const $and = (_, rhs, options) => { + (0, import_util.assert)( + (0, import_util.isArray)(rhs), + "Invalid expression: $and expects value to be an Array." + ); + const queries = rhs.map((expr) => new import_query.Query(expr, options)); + return (obj) => queries.every((q) => q.test(obj)); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 220: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 7218: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Query Comparison Operators: https://docs.mongodb.com/manual/reference/operator/query-comparison/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$in = void 0; -const _predicates_1 = __webpack_require__(4414); -/** - * Matches any of the values that exist in an array specified in the query. - */ -exports.$in = (0, _predicates_1.createQueryOperator)(_predicates_1.$in); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var logical_exports = {}; +module.exports = __toCommonJS(logical_exports); +__reExport(logical_exports, __webpack_require__(2096), module.exports); +__reExport(logical_exports, __webpack_require__(737), module.exports); +__reExport(logical_exports, __webpack_require__(1083), module.exports); +__reExport(logical_exports, __webpack_require__(7805), module.exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5630: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$nin = exports.$ne = exports.$lte = exports.$lt = exports.$in = exports.$gte = exports.$gt = exports.$eq = void 0; -var eq_1 = __webpack_require__(102); -Object.defineProperty(exports, "$eq", ({ enumerable: true, get: function () { return eq_1.$eq; } })); -var gt_1 = __webpack_require__(3916); -Object.defineProperty(exports, "$gt", ({ enumerable: true, get: function () { return gt_1.$gt; } })); -var gte_1 = __webpack_require__(4017); -Object.defineProperty(exports, "$gte", ({ enumerable: true, get: function () { return gte_1.$gte; } })); -var in_1 = __webpack_require__(220); -Object.defineProperty(exports, "$in", ({ enumerable: true, get: function () { return in_1.$in; } })); -var lt_1 = __webpack_require__(6391); -Object.defineProperty(exports, "$lt", ({ enumerable: true, get: function () { return lt_1.$lt; } })); -var lte_1 = __webpack_require__(2126); -Object.defineProperty(exports, "$lte", ({ enumerable: true, get: function () { return lte_1.$lte; } })); -var ne_1 = __webpack_require__(8481); -Object.defineProperty(exports, "$ne", ({ enumerable: true, get: function () { return ne_1.$ne; } })); -var nin_1 = __webpack_require__(8336); -Object.defineProperty(exports, "$nin", ({ enumerable: true, get: function () { return nin_1.$nin; } })); - - -/***/ }), - -/***/ 6391: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 737: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Query Comparison Operators: https://docs.mongodb.com/manual/reference/operator/query-comparison/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$lt = void 0; -const _predicates_1 = __webpack_require__(4414); -/** - * Matches values that are less than the value specified in the query. - */ -exports.$lt = (0, _predicates_1.createQueryOperator)(_predicates_1.$lt); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var nor_exports = {}; +__export(nor_exports, { + $nor: () => $nor +}); +module.exports = __toCommonJS(nor_exports); +var import_util = __webpack_require__(7839); +var import_or = __webpack_require__(7805); +const $nor = (_, rhs, options) => { + (0, import_util.assert)( + (0, import_util.isArray)(rhs), + "Invalid expression. $nor expects value to be an array." + ); + const f = (0, import_or.$or)("$or", rhs, options); + return (obj) => !f(obj); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 2126: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 1083: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Query Comparison Operators: https://docs.mongodb.com/manual/reference/operator/query-comparison/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$lte = void 0; -const _predicates_1 = __webpack_require__(4414); -/** - * Matches values that are less than or equal to the value specified in the query. - */ -exports.$lte = (0, _predicates_1.createQueryOperator)(_predicates_1.$lte); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var not_exports = {}; +__export(not_exports, { + $not: () => $not +}); +module.exports = __toCommonJS(not_exports); +var import_query = __webpack_require__(6535); +var import_util = __webpack_require__(7839); +const $not = (selector, rhs, options) => { + const criteria = {}; + criteria[selector] = (0, import_util.normalize)(rhs); + const query = new import_query.Query(criteria, options); + return (obj) => !query.test(obj); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8481: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 7805: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Query Comparison Operators: https://docs.mongodb.com/manual/reference/operator/query-comparison/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$ne = void 0; -const _predicates_1 = __webpack_require__(4414); -/** - * Matches all values that are not equal to the value specified in the query. - */ -exports.$ne = (0, _predicates_1.createQueryOperator)(_predicates_1.$ne); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var or_exports = {}; +__export(or_exports, { + $or: () => $or +}); +module.exports = __toCommonJS(or_exports); +var import_query = __webpack_require__(6535); +var import_util = __webpack_require__(7839); +const $or = (_, rhs, options) => { + (0, import_util.assert)((0, import_util.isArray)(rhs), "Invalid expression. $or expects value to be an Array"); + const queries = rhs.map((expr) => new import_query.Query(expr, options)); + return (obj) => queries.some((q) => q.test(obj)); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8336: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 3695: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Query Comparison Operators: https://docs.mongodb.com/manual/reference/operator/query-comparison/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$nin = void 0; -const _predicates_1 = __webpack_require__(4414); -/** - * Matches values that do not exist in an array specified to the query. - */ -exports.$nin = (0, _predicates_1.createQueryOperator)(_predicates_1.$nin); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var internal_exports = {}; +__export(internal_exports, { + applyUpdate: () => applyUpdate, + clone: () => clone, + tokenizePath: () => tokenizePath, + walkExpression: () => walkExpression +}); +module.exports = __toCommonJS(internal_exports); +var import_query = __webpack_require__(6535); +var import_util = __webpack_require__(7839); +const clone = (mode, val) => { + switch (mode) { + case "deep": + return (0, import_util.cloneDeep)(val); + case "copy": { + if ((0, import_util.isDate)(val)) return new Date(val); + if ((0, import_util.isArray)(val)) return [...val]; + if ((0, import_util.isObject)(val)) return { ...val }; + if ((0, import_util.isRegExp)(val)) return new RegExp(val); + return val; + } + default: + return val; + } +}; +const FILTER_IDENT_RE = /^[a-z]+[a-zA-Z0-9]*$/; +function tokenizePath(selector) { + if (!selector.includes(".$")) { + return [{ parent: selector, selector }, []]; + } + const begin = selector.indexOf(".$"); + const end = selector.indexOf("]"); + const parent = selector.substring(0, begin); + const child = selector.substring(begin + 3, end); + (0, import_util.assert)( + child === "" || FILTER_IDENT_RE.test(child), + "The filter must begin with a lowercase letter and contain only alphanumeric characters." + ); + const rest = selector.substring(end + 2); + const [next, elems] = rest ? tokenizePath(rest) : []; + return [ + { selector, parent, child: child || "$", next }, + [child, ...elems || []].filter(Boolean) + ]; +} +const applyUpdate = (o, n, q, f, opts) => { + const { parent, child: c, next } = n; + if (!c) { + let b = false; + const g = (u, k) => b = Boolean(f(u, k)) || b; + (0, import_util.walk)(o, parent, g, opts); + return b; + } + const t = (0, import_util.resolve)(o, parent); + if (!(0, import_util.isArray)(t)) return false; + return t.map((e, i) => { + if (q[c] && !q[c].test({ [c]: e })) return false; + return next ? applyUpdate(e, next, q, f, opts) : f(t, i); + }).some(Boolean); +}; +function walkExpression(expr, arrayFilter, options, callback) { + const res = []; + for (const [selector, val] of Object.entries(expr)) { + const [node, vars] = tokenizePath(selector); + if (!vars.length) { + if (callback(val, node, {})) res.push(node.parent); + } else { + const conditions = {}; + arrayFilter.forEach((o) => { + Object.keys(o).forEach((k) => { + vars.forEach((w) => { + if (k === w || k.startsWith(w + ".")) { + conditions[w] = conditions[w] || {}; + Object.assign(conditions[w], { [k]: o[k] }); + } + }); + }); + }); + const queries = {}; + for (const [k, condition] of Object.entries(conditions)) { + queries[k] = new import_query.Query(condition, options.queryOptions); + } + if (callback(val, node, queries)) res.push(node.parent); + } + } + return res; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 7448: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 7985: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Query Element Operators: https://docs.mongodb.com/manual/reference/operator/query-element/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$exists = void 0; -const _predicates_1 = __webpack_require__(4414); -/** - * Matches documents that have the specified field. - */ -exports.$exists = (0, _predicates_1.createQueryOperator)(_predicates_1.$exists); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var addToSet_exports = {}; +__export(addToSet_exports, { + $addToSet: () => $addToSet +}); +module.exports = __toCommonJS(addToSet_exports); +var import_util = __webpack_require__(7839); +var import_internal = __webpack_require__(3695); +const $addToSet = (obj, expr, arrayFilters = [], options = {}) => { + return (0, import_internal.walkExpression)(expr, arrayFilters, options, (val, node, queries) => { + const args = { $each: [val] }; + if ((0, import_util.isObject)(val) && (0, import_util.has)(val, "$each")) { + Object.assign(args, val); + } + return (0, import_internal.applyUpdate)( + obj, + node, + queries, + (o, k) => { + const prev = o[k] ||= []; + const common = (0, import_util.intersection)([prev, args.$each]); + if (common.length === args.$each.length) return false; + o[k] = (0, import_internal.clone)(options.cloneMode, (0, import_util.unique)(prev.concat(args.$each))); + return true; + }, + { buildGraph: true } + ); + }); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 3318: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; +/***/ 2592: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -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 __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(7448), exports); -__exportStar(__webpack_require__(8437), exports); +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var bit_exports = {}; +__export(bit_exports, { + $bit: () => $bit +}); +module.exports = __toCommonJS(bit_exports); +var import_util = __webpack_require__(7839); +var import_internal = __webpack_require__(3695); +const BIT_OPS = /* @__PURE__ */ new Set(["and", "or", "xor"]); +const $bit = (obj, expr, arrayFilters = [], options = {}) => { + return (0, import_internal.walkExpression)(expr, arrayFilters, options, (val, node, queries) => { + const op = Object.keys(val); + (0, import_util.assert)( + op.length === 1 && BIT_OPS.has(op[0]), + `Invalid bit operator '${op[0]}'. Must be one of 'and', 'or', or 'xor'.` + ); + return (0, import_internal.applyUpdate)( + obj, + node, + queries, + (o, k) => { + let n = o[k]; + const v = val[op[0]]; + if (n !== void 0 && !((0, import_util.isNumber)(n) && (0, import_util.isNumber)(v))) return false; + n = n || 0; + switch (op[0]) { + case "and": + o[k] = n & v; + break; + case "or": + o[k] = n | v; + break; + case "xor": + o[k] = n ^ v; + break; + } + return o[k] !== n; + }, + { buildGraph: true } + ); + }); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8437: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 7346: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Query Element Operators: https://docs.mongodb.com/manual/reference/operator/query-element/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$type = void 0; -const _predicates_1 = __webpack_require__(4414); -/** - * Selects documents if a field is of the specified type. - */ -exports.$type = (0, _predicates_1.createQueryOperator)(_predicates_1.$type); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var currentDate_exports = {}; +__export(currentDate_exports, { + $currentDate: () => $currentDate +}); +module.exports = __toCommonJS(currentDate_exports); +var import_internal = __webpack_require__(3695); +const $currentDate = (obj, expr, arrayFilters = [], options = {}) => { + const now = Date.now(); + return (0, import_internal.walkExpression)(expr, arrayFilters, options, (_, node, queries) => { + return (0, import_internal.applyUpdate)( + obj, + node, + queries, + (o, k) => { + o[k] = now; + return true; + }, + { buildGraph: true } + ); + }); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5468: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 8891: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Query Evaluation Operators: https://docs.mongodb.com/manual/reference/operator/query-evaluation/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$expr = void 0; -const core_1 = __webpack_require__(9587); -/** - * Allows the use of aggregation expressions within the query language. - * - * @param selector - * @param rhs - * @returns {Function} - */ -function $expr(_, rhs, options) { - return obj => (0, core_1.computeValue)(obj, rhs, null, options); -} -exports.$expr = $expr; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var inc_exports = {}; +__export(inc_exports, { + $inc: () => $inc +}); +module.exports = __toCommonJS(inc_exports); +var import_util = __webpack_require__(7839); +var import_internal = __webpack_require__(3695); +const $inc = (obj, expr, arrayFilters = [], options = {}) => { + return (0, import_internal.walkExpression)(expr, arrayFilters, options, (val, node, queries) => { + if (!node.child) { + const n = (0, import_util.resolve)(obj, node.parent); + (0, import_util.assert)( + n === void 0 || (0, import_util.isNumber)(n), + `cannot apply $inc to a value of non-numeric type` + ); + } + return (0, import_internal.applyUpdate)( + obj, + node, + queries, + (o, k) => { + o[k] = (o[k] ||= 0) + val; + return true; + }, + { buildGraph: true } + ); + }); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 6738: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { +/***/ 2835: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var update_exports = {}; +module.exports = __toCommonJS(update_exports); +__reExport(update_exports, __webpack_require__(7985), module.exports); +__reExport(update_exports, __webpack_require__(2592), module.exports); +__reExport(update_exports, __webpack_require__(7346), module.exports); +__reExport(update_exports, __webpack_require__(8891), module.exports); +__reExport(update_exports, __webpack_require__(1929), module.exports); +__reExport(update_exports, __webpack_require__(2619), module.exports); +__reExport(update_exports, __webpack_require__(9017), module.exports); +__reExport(update_exports, __webpack_require__(628), module.exports); +__reExport(update_exports, __webpack_require__(4868), module.exports); +__reExport(update_exports, __webpack_require__(6381), module.exports); +__reExport(update_exports, __webpack_require__(9891), module.exports); +__reExport(update_exports, __webpack_require__(1461), module.exports); +__reExport(update_exports, __webpack_require__(8356), module.exports); +__reExport(update_exports, __webpack_require__(8402), module.exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (0); + + +/***/ }), + +/***/ 1929: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -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 __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(5468), exports); -__exportStar(__webpack_require__(1777), exports); -__exportStar(__webpack_require__(2841), exports); -__exportStar(__webpack_require__(5787), exports); -__exportStar(__webpack_require__(3953), exports); +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var max_exports = {}; +__export(max_exports, { + $max: () => $max +}); +module.exports = __toCommonJS(max_exports); +var import_util = __webpack_require__(7839); +var import_internal = __webpack_require__(3695); +const $max = (obj, expr, arrayFilters = [], options = {}) => { + return (0, import_internal.walkExpression)(expr, arrayFilters, options, (val, node, queries) => { + return (0, import_internal.applyUpdate)( + obj, + node, + queries, + (o, k) => { + if (o[k] !== void 0 && (0, import_util.compare)(o[k], val) > -1) return false; + o[k] = val; + return true; + }, + { buildGraph: true } + ); + }); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 1777: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; +/***/ 2619: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Query Evaluation Operators: https://docs.mongodb.com/manual/reference/operator/query-evaluation/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$jsonSchema = void 0; -/** - * Validate documents against the given JSON Schema. - * - * @param selector - * @param schema - * @returns {Function} - */ -function $jsonSchema(_, schema, options) { - if (!(options === null || options === void 0 ? void 0 : options.jsonSchemaValidator)) { - throw new Error("Missing option 'jsonSchemaValidator'. Configure to use '$jsonSchema' operator."); - } - const validate = options === null || options === void 0 ? void 0 : options.jsonSchemaValidator(schema); - return (obj) => validate(obj); -} -exports.$jsonSchema = $jsonSchema; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var min_exports = {}; +__export(min_exports, { + $min: () => $min +}); +module.exports = __toCommonJS(min_exports); +var import_util = __webpack_require__(7839); +var import_internal = __webpack_require__(3695); +const $min = (obj, expr, arrayFilters = [], options = {}) => { + return (0, import_internal.walkExpression)(expr, arrayFilters, options, (val, node, queries) => { + return (0, import_internal.applyUpdate)( + obj, + node, + queries, + (o, k) => { + if (o[k] !== void 0 && (0, import_util.compare)(o[k], val) < 1) return false; + o[k] = val; + return true; + }, + { buildGraph: true } + ); + }); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 2841: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 9017: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Query Evaluation Operators: https://docs.mongodb.com/manual/reference/operator/query-evaluation/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$mod = void 0; -const _predicates_1 = __webpack_require__(4414); -/** - * Performs a modulo operation on the value of a field and selects documents with a specified result. - */ -exports.$mod = (0, _predicates_1.createQueryOperator)(_predicates_1.$mod); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var mul_exports = {}; +__export(mul_exports, { + $mul: () => $mul +}); +module.exports = __toCommonJS(mul_exports); +var import_internal = __webpack_require__(3695); +const $mul = (obj, expr, arrayFilters = [], options = {}) => { + return (0, import_internal.walkExpression)(expr, arrayFilters, options, (val, node, queries) => { + return (0, import_internal.applyUpdate)( + obj, + node, + queries, + (o, k) => { + const prev = o[k]; + o[k] = o[k] === void 0 ? 0 : o[k] * val; + return o[k] !== prev; + }, + { buildGraph: true } + ); + }); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5787: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 628: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Query Evaluation Operators: https://docs.mongodb.com/manual/reference/operator/query-evaluation/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$regex = void 0; -const _predicates_1 = __webpack_require__(4414); -/** - * Selects documents where values match a specified regular expression. - */ -exports.$regex = (0, _predicates_1.createQueryOperator)(_predicates_1.$regex); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var pop_exports = {}; +__export(pop_exports, { + $pop: () => $pop +}); +module.exports = __toCommonJS(pop_exports); +var import_util = __webpack_require__(7839); +var import_internal = __webpack_require__(3695); +const $pop = (obj, expr, arrayFilters = [], options = {}) => { + return (0, import_internal.walkExpression)(expr, arrayFilters, options, (val, node, queries) => { + return (0, import_internal.applyUpdate)(obj, node, queries, (o, k) => { + const arr = o[k]; + (0, import_util.assert)( + (0, import_util.isArray)(arr), + `path '${node.selector}' contains an element of non-array type.` + ); + if (!arr.length) return false; + if (val === -1) { + arr.splice(0, 1); + } else { + arr.pop(); + } + return true; + }); + }); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 3953: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 4868: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Query Evaluation Operators: https://docs.mongodb.com/manual/reference/operator/query-evaluation/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$where = void 0; -const util_1 = __webpack_require__(7216); -/* eslint-disable */ -/** - * Matches documents that satisfy a JavaScript expression. - * - * @param selector - * @param rhs - * @returns {Function} - */ -function $where(_, rhs, options) { - (0, util_1.assert)(options.scriptEnabled, "$where operator requires 'scriptEnabled' option to be true"); - const f = rhs; - (0, util_1.assert)((0, util_1.isFunction)(f), "$where only accepts a Function object"); - return (obj) => (0, util_1.truthy)(f.call(obj), options === null || options === void 0 ? void 0 : options.useStrictMode); -} -exports.$where = $where; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var pull_exports = {}; +__export(pull_exports, { + $pull: () => $pull +}); +module.exports = __toCommonJS(pull_exports); +var import_query = __webpack_require__(6535); +var import_util = __webpack_require__(7839); +var import_internal = __webpack_require__(3695); +const $pull = (obj, expr, arrayFilters = [], options = {}) => { + return (0, import_internal.walkExpression)(expr, arrayFilters, options, (val, node, queries) => { + const wrap = !(0, import_util.isObject)(val) || Object.keys(val).some(import_util.isOperator); + const query = new import_query.Query( + wrap ? { k: val } : val, + options.queryOptions + ); + const pred = wrap ? (v) => query.test({ k: v }) : (v) => query.test(v); + return (0, import_internal.applyUpdate)(obj, node, queries, (o, k) => { + const prev = o[k]; + const curr = new Array(); + const found = prev.map((v) => { + const b = pred(v); + if (!b) curr.push(v); + return b; + }).some(Boolean); + if (!found) return false; + o[k] = curr; + return true; + }); + }); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5444: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; +/***/ 6381: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -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 __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(7562), exports); -__exportStar(__webpack_require__(4167), exports); -__exportStar(__webpack_require__(5630), exports); -__exportStar(__webpack_require__(3318), exports); -__exportStar(__webpack_require__(6738), exports); -__exportStar(__webpack_require__(1504), exports); +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var pullAll_exports = {}; +__export(pullAll_exports, { + $pullAll: () => $pullAll +}); +module.exports = __toCommonJS(pullAll_exports); +var import_pull = __webpack_require__(4868); +const $pullAll = (obj, expr, arrayFilters = [], options = {}) => { + const pullExpr = {}; + Object.entries(expr).forEach(([k, v]) => { + pullExpr[k] = { $in: v }; + }); + return (0, import_pull.$pull)(obj, pullExpr, arrayFilters, options); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 476: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 9891: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Query Logical Operators: https://docs.mongodb.com/manual/reference/operator/query-logical/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$and = void 0; -const query_1 = __webpack_require__(809); -const util_1 = __webpack_require__(7216); -/** - * Joins query clauses with a logical AND returns all documents that match the conditions of both clauses. - * - * @param selector - * @param rhs - * @returns {Function} - */ -const $and = (_, rhs, options) => { - (0, util_1.assert)((0, util_1.isArray)(rhs), "Invalid expression: $and expects value to be an Array."); - const queries = rhs.map(expr => new query_1.Query(expr, options)); - return (obj) => queries.every(q => q.test(obj)); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var push_exports = {}; +__export(push_exports, { + $push: () => $push +}); +module.exports = __toCommonJS(push_exports); +var import_util = __webpack_require__(7839); +var import_internal = __webpack_require__(3695); +const OPERATOR_MODIFIERS = Object.freeze([ + "$each", + "$slice", + "$sort", + "$position" +]); +const $push = (obj, expr, arrayFilters = [], options = {}) => { + return (0, import_internal.walkExpression)(expr, arrayFilters, options, (val, node, queries) => { + const args = { + $each: [val] + }; + if ((0, import_util.isObject)(val) && OPERATOR_MODIFIERS.some((m) => (0, import_util.has)(val, m))) { + Object.assign(args, val); + } + return (0, import_internal.applyUpdate)( + obj, + node, + queries, + (o, k) => { + const arr = o[k] ||= []; + const prev = arr.slice(0, args.$slice || arr.length); + const oldsize = arr.length; + const pos = (0, import_util.isNumber)(args.$position) ? args.$position : arr.length; + arr.splice(pos, 0, ...(0, import_internal.clone)(options.cloneMode, args.$each)); + if (args.$sort) { + const sortKey = (0, import_util.isObject)(args.$sort) ? Object.keys(args.$sort || {}).pop() : ""; + const order = !sortKey ? args.$sort : args.$sort[sortKey]; + const f = !sortKey ? (a) => a : (a) => (0, import_util.resolve)(a, sortKey); + arr.sort((a, b) => order * (0, import_util.compare)(f(a), f(b))); + } + if ((0, import_util.isNumber)(args.$slice)) { + if (args.$slice < 0) arr.splice(0, arr.length + args.$slice); + else arr.splice(args.$slice); + } + return oldsize != arr.length || !(0, import_util.isEqual)(prev, arr); + }, + { descendArray: true, buildGraph: true } + ); + }); }; -exports.$and = $and; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 1504: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; +/***/ 1461: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -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 __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(476), exports); -__exportStar(__webpack_require__(43), exports); -__exportStar(__webpack_require__(8663), exports); -__exportStar(__webpack_require__(7653), exports); +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var rename_exports = {}; +__export(rename_exports, { + $rename: () => $rename +}); +module.exports = __toCommonJS(rename_exports); +var import_util = __webpack_require__(7839); +var import_internal = __webpack_require__(3695); +var import_set = __webpack_require__(8356); +const $rename = (obj, expr, arrayFilters = [], options = {}) => { + const res = []; + const changed = (0, import_internal.walkExpression)(expr, arrayFilters, options, (val, node, queries) => { + return (0, import_internal.applyUpdate)(obj, node, queries, (o, k) => { + if (!(0, import_util.has)(o, k)) return false; + res.push(...(0, import_set.$set)(obj, { [val]: o[k] }, arrayFilters, options)); + delete o[k]; + return true; + }); + }); + return Array.from(new Set(changed.concat(res))); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 43: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 8356: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Query Logical Operators: https://docs.mongodb.com/manual/reference/operator/query-logical/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$nor = void 0; -const util_1 = __webpack_require__(7216); -const or_1 = __webpack_require__(7653); -/** - * Joins query clauses with a logical NOR returns all documents that fail to match both clauses. - * - * @param selector - * @param rhs - * @returns {Function} - */ -const $nor = (_, rhs, options) => { - (0, util_1.assert)((0, util_1.isArray)(rhs), "Invalid expression. $nor expects value to be an array."); - const f = (0, or_1.$or)("$or", rhs, options); - return (obj) => !f(obj); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var set_exports = {}; +__export(set_exports, { + $set: () => $set +}); +module.exports = __toCommonJS(set_exports); +var import_util = __webpack_require__(7839); +var import_internal = __webpack_require__(3695); +const $set = (obj, expr, arrayFilters = [], options = {}) => { + return (0, import_internal.walkExpression)(expr, arrayFilters, options, (val, node, queries) => { + return (0, import_internal.applyUpdate)( + obj, + node, + queries, + (o, k) => { + if ((0, import_util.isEqual)(o[k], val)) return false; + o[k] = (0, import_internal.clone)(options.cloneMode, val); + return true; + }, + { buildGraph: true } + ); + }); }; -exports.$nor = $nor; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8663: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 8402: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Query Logical Operators: https://docs.mongodb.com/manual/reference/operator/query-logical/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$not = void 0; -const query_1 = __webpack_require__(809); -const util_1 = __webpack_require__(7216); -/** - * Inverts the effect of a query expression and returns documents that do not match the query expression. - * - * @param selector - * @param rhs - * @returns {Function} - */ -const $not = (selector, rhs, options) => { - const criteria = {}; - criteria[selector] = (0, util_1.normalize)(rhs); - const query = new query_1.Query(criteria, options); - return (obj) => !query.test(obj); +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; -exports.$not = $not; - - -/***/ }), - -/***/ 7653: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - -// Query Logical Operators: https://docs.mongodb.com/manual/reference/operator/query-logical/ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$or = void 0; -const query_1 = __webpack_require__(809); -const util_1 = __webpack_require__(7216); -/** - * Joins query clauses with a logical OR returns all documents that match the conditions of either clause. - * - * @param selector - * @param rhs - * @returns {Function} - */ -const $or = (_, rhs, options) => { - (0, util_1.assert)((0, util_1.isArray)(rhs), "Invalid expression. $or expects value to be an Array"); - const queries = rhs.map(expr => new query_1.Query(expr, options)); - return (obj) => queries.some(q => q.test(obj)); +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; }; -exports.$or = $or; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var unset_exports = {}; +__export(unset_exports, { + $unset: () => $unset +}); +module.exports = __toCommonJS(unset_exports); +var import_util = __webpack_require__(7839); +var import_internal = __webpack_require__(3695); +const $unset = (obj, expr, arrayFilters = [], options = {}) => { + return (0, import_internal.walkExpression)(expr, arrayFilters, options, (_, node, queries) => { + return (0, import_internal.applyUpdate)(obj, node, queries, (o, k) => { + if (!(0, import_util.has)(o, k)) return false; + if ((0, import_util.isArray)(o)) { + o[k] = null; + } else { + delete o[k]; + } + return true; + }); + }); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 3480: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 5914: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.rank = exports.withMemo = exports.MILLIS_PER_UNIT = void 0; -const util_1 = __webpack_require__(7216); -const accumulator_1 = __webpack_require__(3424); -const _internal_1 = __webpack_require__(7974); -const _internal_2 = __webpack_require__(2899); -// millis map to diffirent time units -exports.MILLIS_PER_UNIT = { - week: _internal_1.MILLIS_PER_DAY * 7, - day: _internal_1.MILLIS_PER_DAY, - hour: _internal_1.MILLIS_PER_DAY / 24, - minute: 60000, - second: 1000, - millisecond: 1 -}; -// internal cache to store precomputed series once to avoid O(N^2) calls to over the collection -const memo = new WeakMap(); -/** - * Caches all computed values in a window sequence for reuse. - * This is only useful for operations with unbounded documents. - */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var internal_exports = {}; +__export(internal_exports, { + MILLIS_PER_UNIT: () => MILLIS_PER_UNIT, + rank: () => rank, + withMemo: () => withMemo +}); +module.exports = __toCommonJS(internal_exports); +var import_util = __webpack_require__(7839); +var import_accumulator = __webpack_require__(1248); +var import_internal = __webpack_require__(1277); +var import_internal2 = __webpack_require__(2088); +const MILLIS_PER_UNIT = { + week: import_internal.MILLIS_PER_DAY * 7, + day: import_internal.MILLIS_PER_DAY, + hour: import_internal.MILLIS_PER_DAY / 24, + minute: 6e4, + second: 1e3, + millisecond: 1 +}; +const memo = /* @__PURE__ */ new WeakMap(); function withMemo(collection, expr, cacheFn, fn) { - // no caching done for bounded inputs - if (!(0, _internal_2.isUnbounded)(expr.parentExpr.output[expr.field].window)) { - return fn(cacheFn()); - } - // first time using collection - if (!memo.has(collection)) { - memo.set(collection, { [expr.field]: cacheFn() }); - } - const data = memo.get(collection); - // subsequent computations over the same collection. - if (data[expr.field] === undefined) { - data[expr.field] = cacheFn(); - } - let failed = false; - try { - return fn(data[expr.field]); - } - catch (e) { - failed = true; - } - finally { - // cleanup on failure or last element in collection. - if (failed || expr.documentNumber === collection.length) { - delete data[expr.field]; - if (Object.keys(data).length === 0) - memo.delete(collection); - } + if (!(0, import_internal2.isUnbounded)(expr.parentExpr.output[expr.field].window)) { + return fn(cacheFn()); + } + if (!memo.has(collection)) { + memo.set(collection, { [expr.field]: cacheFn() }); + } + const data = memo.get(collection); + if (data[expr.field] === void 0) { + data[expr.field] = cacheFn(); + } + let failed = false; + try { + return fn(data[expr.field]); + } catch { + failed = true; + } finally { + if (failed || expr.documentNumber === collection.length) { + delete data[expr.field]; + if (Object.keys(data).length === 0) memo.delete(collection); } + } } -exports.withMemo = withMemo; -/** Returns the position of a document in the $setWindowFields stage partition. */ function rank(_, collection, expr, options, dense) { - return withMemo(collection, expr, () => { - const sortKey = "$" + Object.keys(expr.parentExpr.sortBy)[0]; - const values = (0, accumulator_1.$push)(collection, sortKey, options); - const groups = (0, util_1.groupBy)(values, ((_, n) => values[n]), options.hashFunction); - return { values, groups }; - }, input => { - const { values, groups: partitions } = input; - // same number of paritions as length means all sort keys are unique - if (partitions.size == collection.length) { - return expr.documentNumber; - } - const current = values[expr.documentNumber - 1]; - let i = 0; - let offset = 0; - // partition keys are already dense so just return the value on match - for (const key of partitions.keys()) { - if ((0, util_1.isEqual)(current, key)) { - return dense ? i + 1 : offset + 1; - } - i++; - offset += partitions.get(key).length; + return withMemo( + collection, + expr, + () => { + const sortKey = "$" + Object.keys(expr.parentExpr.sortBy)[0]; + const values = (0, import_accumulator.$push)(collection, sortKey, options); + const groups = (0, import_util.groupBy)( + values, + (_2, n) => values[n], + options.hashFunction + ); + return { values, groups }; + }, + (input) => { + const { values, groups: partitions } = input; + if (partitions.size == collection.length) { + return expr.documentNumber; + } + const current = values[expr.documentNumber - 1]; + let i = 0; + let offset = 0; + for (const key of partitions.keys()) { + if ((0, import_util.isEqual)(current, key)) { + return dense ? i + 1 : offset + 1; } - // should be unreachable - throw new Error("rank: invalid return value. please submit a bug report."); - }); + i++; + offset += partitions.get(key).length; + } + throw new import_util.MingoError( + "rank: invalid return value. please submit a bug report." + ); + } + ); } -exports.rank = rank; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 5120: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 4276: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$linearFill = void 0; -const util_1 = __webpack_require__(7216); -const accumulator_1 = __webpack_require__(3424); -const _internal_1 = __webpack_require__(3480); -/** - * Given two points (x1, y1) and (x2, y2) and a value 'x' that lies between those two points, - * solve for 'y' with: y = y1 + (x - x1) * ((y2 - y1)/(x2 - x1)). - * @see https://en.wikipedia.org/wiki/Linear_interpolation - */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var linearFill_exports = {}; +__export(linearFill_exports, { + $linearFill: () => $linearFill +}); +module.exports = __toCommonJS(linearFill_exports); +var import_util = __webpack_require__(7839); +var import_accumulator = __webpack_require__(1248); +var import_internal = __webpack_require__(5914); const interpolate = (x1, y1, x2, y2, x) => y1 + (x - x1) * ((y2 - y1) / (x2 - x1)); -/** - * Fills null and missing fields in a window using linear interpolation based on surrounding field values. - */ -function $linearFill(_, collection, expr, options) { - return (0, _internal_1.withMemo)(collection, expr, (() => { - const sortKey = "$" + Object.keys(expr.parentExpr.sortBy)[0]; - const points = (0, accumulator_1.$push)(collection, [sortKey, expr.inputExpr], options).filter((([x, _]) => (0, util_1.isNumber)(+x))); - if (points.length !== collection.length) - return null; - let lindex = -1; - let rindex = 0; - while (rindex < points.length) { - // use sliding window over missing values and fill as we go. - // determine nearest left value index - while (lindex + 1 < points.length && (0, util_1.isNumber)(points[lindex + 1][1])) { - lindex++; - rindex = lindex; - } - // determine nearest right value index. - while (rindex + 1 < points.length && !(0, util_1.isNumber)(points[rindex + 1][1])) { - rindex++; - } - // we reached the end of our array. nothing more to do. - if (rindex + 1 >= points.length) - break; - // otherwise, we found a number so move rindex pointer to it. - rindex++; - // now fill everything between lindex and rindex by their proportions to the difference. - while (lindex + 1 < rindex) { - points[lindex + 1][1] = interpolate(points[lindex][0], points[lindex][1], points[rindex][0], points[rindex][1], points[lindex + 1][0]); - lindex++; - } - // move lindex to right - lindex = rindex; +const $linearFill = (_, collection, expr, options) => { + return (0, import_internal.withMemo)( + collection, + expr, + () => { + const sortKey = "$" + Object.keys(expr.parentExpr.sortBy)[0]; + const points = (0, import_accumulator.$push)( + collection, + [sortKey, expr.inputExpr], + options + ).filter(([x, _2]) => (0, import_util.isNumber)(+x)); + if (points.length !== collection.length) return null; + let lindex = -1; + let rindex = 0; + while (rindex < points.length) { + while (lindex + 1 < points.length && (0, import_util.isNumber)(points[lindex + 1][1])) { + lindex++; + rindex = lindex; } - return points.map(([_, y]) => y); - }), (values) => values[expr.documentNumber - 1]); -} -exports.$linearFill = $linearFill; + while (rindex + 1 < points.length && !(0, import_util.isNumber)(points[rindex + 1][1])) { + rindex++; + } + if (rindex + 1 >= points.length) break; + rindex++; + while (lindex + 1 < rindex) { + points[lindex + 1][1] = interpolate( + points[lindex][0], + points[lindex][1], + points[rindex][0], + points[rindex][1], + points[lindex + 1][0] + ); + lindex++; + } + lindex = rindex; + } + return points.map(([_2, y]) => y); + }, + (values) => values[expr.documentNumber - 1] + ); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 8242: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 4140: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.$locf = void 0; -const util_1 = __webpack_require__(7216); -const push_1 = __webpack_require__(7835); -const _internal_1 = __webpack_require__(3480); -/** - * Last observation carried forward. Sets values for null and missing fields in a window to the last non-null value for the field. - */ -function $locf(_, collection, expr, options) { - return (0, _internal_1.withMemo)(collection, expr, () => { - const values = (0, push_1.$push)(collection, expr.inputExpr, options); - for (let i = 1; i < values.length; i++) { - if ((0, util_1.isNil)(values[i])) - values[i] = values[i - 1]; - } - return values; - }, (series) => series[expr.documentNumber - 1]); -} -exports.$locf = $locf; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var locf_exports = {}; +__export(locf_exports, { + $locf: () => $locf +}); +module.exports = __toCommonJS(locf_exports); +var import_util = __webpack_require__(7839); +var import_push = __webpack_require__(4518); +var import_internal = __webpack_require__(5914); +const $locf = (_, collection, expr, options) => { + return (0, import_internal.withMemo)( + collection, + expr, + () => { + const values = (0, import_push.$push)(collection, expr.inputExpr, options); + for (let i = 1; i < values.length; i++) { + if ((0, import_util.isNil)(values[i])) values[i] = values[i - 1]; + } + return values; + }, + (series) => series[expr.documentNumber - 1] + ); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 809: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ 6535: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.Query = void 0; -const core_1 = __webpack_require__(9587); -const cursor_1 = __webpack_require__(3645); -const util_1 = __webpack_require__(7216); -/** - * An object used to filter input documents - * - * @param {Object} condition The condition for constructing predicates - * @param {Options} options Options for use by operators - * @constructor - */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var query_exports = {}; +__export(query_exports, { + Query: () => Query +}); +module.exports = __toCommonJS(query_exports); +var import_core = __webpack_require__(2760); +var import_cursor = __webpack_require__(4529); +var import_util = __webpack_require__(7839); +const TOP_LEVEL_OPS = new Set( + Array.from(["$and", "$or", "$nor", "$expr", "$jsonSchema"]) +); class Query { - constructor(condition, options) { - this.condition = condition; - this.options = (0, core_1.initOptions)(options); - this.compiled = []; - this.compile(); - } - compile() { - (0, util_1.assert)((0, util_1.isObject)(this.condition), "query criteria must be an object"); - const whereOperator = {}; - for (const [field, expr] of Object.entries(this.condition)) { - if ("$where" === field) { - Object.assign(whereOperator, { field: field, expr: expr }); - } - else if ((0, util_1.inArray)(["$and", "$or", "$nor", "$expr", "$jsonSchema"], field)) { - this.processOperator(field, field, expr); - } - else { - // normalize expression - (0, util_1.assert)(!(0, util_1.isOperator)(field), `unknown top level operator: ${field}`); - for (const [operator, val] of Object.entries((0, util_1.normalize)(expr))) { - this.processOperator(field, operator, val); - } - } - if (whereOperator.field) { - this.processOperator(whereOperator.field, whereOperator.field, whereOperator.expr); - } - } - } - processOperator(field, operator, value) { - const call = (0, core_1.getOperator)(core_1.OperatorType.QUERY, operator, this.options); - if (!call) { - throw new Error(`unknown operator ${operator}`); - } - const fn = call(field, value, this.options); - this.compiled.push(fn); - } - /** - * Checks if the object passes the query criteria. Returns true if so, false otherwise. - * - * @param obj The object to test - * @returns {boolean} True or false - */ - test(obj) { - for (let i = 0, len = this.compiled.length; i < len; i++) { - if (!this.compiled[i](obj)) { - return false; - } + #compiled; + #options; + #condition; + constructor(condition, options) { + this.#condition = condition; + this.#options = (0, import_core.initOptions)(options); + this.#compiled = []; + this.compile(); + } + compile() { + (0, import_util.assert)( + (0, import_util.isObject)(this.#condition), + `query criteria must be an object: ${JSON.stringify(this.#condition)}` + ); + const whereOperator = {}; + for (const [field, expr] of Object.entries(this.#condition)) { + if ("$where" === field) { + Object.assign(whereOperator, { field, expr }); + } else if (TOP_LEVEL_OPS.has(field)) { + this.processOperator(field, field, expr); + } else { + (0, import_util.assert)(!(0, import_util.isOperator)(field), `unknown top level operator: ${field}`); + for (const [operator, val] of Object.entries( + (0, import_util.normalize)(expr) + )) { + this.processOperator(field, operator, val); } - return true; + } + if (whereOperator.field) { + this.processOperator( + whereOperator.field, + whereOperator.field, + whereOperator.expr + ); + } } - /** - * Returns a cursor to select matching documents from the input source. - * - * @param source A source providing a sequence of documents - * @param projection An optional projection criteria - * @returns {Cursor} A Cursor for iterating over the results - */ - find(collection, projection) { - return new cursor_1.Cursor(collection, ((x) => this.test(x)), projection || {}, this.options); + } + processOperator(field, operator, value) { + const call = (0, import_core.getOperator)("query", operator, this.#options); + if (!call) { + throw new import_util.MingoError(`unknown query operator ${operator}`); } - /** - * Remove matched documents from the collection returning the remainder - * - * @param collection An array of documents - * @returns {Array} A new array with matching elements removed - */ - remove(collection) { - return collection.reduce((acc, obj) => { - if (!this.test(obj)) - acc.push(obj); - return acc; - }, []); + const fn = call(field, value, this.#options); + this.#compiled.push(fn); + } + /** + * Checks if the object passes the query criteria. Returns true if so, false otherwise. + * + * @param obj The object to test + * @returns {boolean} True or false + */ + test(obj) { + for (let i = 0, len = this.#compiled.length; i < len; i++) { + if (!this.#compiled[i](obj)) { + return false; + } } + return true; + } + /** + * Returns a cursor to select matching documents from the input source. + * + * @param source A source providing a sequence of documents + * @param projection An optional projection criteria + * @returns {Cursor} A Cursor for iterating over the results + */ + find(collection, projection) { + return new import_cursor.Cursor( + collection, + (x) => this.test(x), + projection || {}, + this.#options + ); + } + /** + * Remove matched documents from the collection returning the remainder + * + * @param collection An array of documents + * @returns {Array} A new array with matching elements removed + */ + remove(collection) { + return collection.reduce((acc, obj) => { + if (!this.test(obj)) acc.push(obj); + return acc; + }, []); + } } -exports.Query = Query; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 7216: -/***/ ((__unused_webpack_module, exports) => { +/***/ 486: +/***/ ((module) => { -"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var types_exports = {}; +__export(types_exports, { + TIME_UNITS: () => TIME_UNITS +}); +module.exports = __toCommonJS(types_exports); +const TIME_UNITS = [ + "year", + "quarter", + "month", + "week", + "day", + "hour", + "minute", + "second", + "millisecond" +]; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); -/** - * Utility constants and functions - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.normalize = exports.isOperator = exports.removeValue = exports.setValue = exports.walk = exports.filterMissing = exports.resolveGraph = exports.resolve = exports.memoize = exports.into = exports.groupBy = exports.sortBy = exports.hashCode = exports.stringify = exports.unique = exports.isEqual = exports.flatten = exports.intersection = exports.merge = exports.has = exports.ensureArray = exports.isMissing = exports.isEmpty = exports.truthy = exports.notInArray = exports.inArray = exports.isNil = exports.isFunction = exports.isRegExp = exports.isDate = exports.isObjectLike = exports.isObject = exports.isArray = exports.isNotNaN = exports.isNumber = exports.isString = exports.isBoolean = exports.getType = exports.cloneDeep = exports.assert = exports.compare = exports.MIN_LONG = exports.MAX_LONG = exports.MIN_INT = exports.MAX_INT = void 0; -exports.MAX_INT = 2147483647; -exports.MIN_INT = -2147483648; -exports.MAX_LONG = Number.MAX_SAFE_INTEGER; -exports.MIN_LONG = Number.MIN_SAFE_INTEGER; -// special value to identify missing items. treated differently from undefined + +/***/ }), + +/***/ 3550: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var updater_exports = {}; +__export(updater_exports, { + createUpdater: () => createUpdater, + update: () => update, + updateObject: () => updateObject +}); +module.exports = __toCommonJS(updater_exports); +var import_core = __webpack_require__(2760); +var booleanOperators = __toESM(__webpack_require__(1703)); +var comparisonOperators = __toESM(__webpack_require__(3336)); +var queryOperators = __toESM(__webpack_require__(8510)); +var UPDATE_OPERATORS = __toESM(__webpack_require__(2835)); +var import_query = __webpack_require__(6535); +var import_util = __webpack_require__(7839); +function createUpdater(defaultOptions) { + defaultOptions = defaultOptions || {}; + defaultOptions = { + ...defaultOptions, + queryOptions: (0, import_core.initOptions)(defaultOptions.queryOptions) + }; + defaultOptions.queryOptions.context.addQueryOps(queryOperators).addExpressionOps(booleanOperators).addExpressionOps(comparisonOperators); + return (obj, expr, arrayFilters = [], condition = {}, options = {}) => { + const opts = Object.assign({ cloneMode: "copy" }, defaultOptions, options); + Object.assign(opts, { + queryOptions: (0, import_core.initOptions)( + Object.assign({ useStrictMode: false }, opts?.queryOptions) + ) + }); + const entry = Object.entries(expr); + (0, import_util.assert)( + entry.length === 1, + "Update expression must contain only one operator." + ); + const [op, args] = entry[0]; + (0, import_util.assert)( + (0, import_util.has)(UPDATE_OPERATORS, op), + `Update operator '${op}' is not supported.` + ); + const mutate = UPDATE_OPERATORS[op]; + if (Object.keys(condition).length) { + const q = condition instanceof import_query.Query ? condition : new import_query.Query(condition, opts.queryOptions); + if (!q.test(obj)) return []; + } + return mutate(obj, args, arrayFilters, opts); + }; +} +const update = createUpdater(); +const updateObject = update; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); + + +/***/ }), + +/***/ 7839: +/***/ ((module) => { + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var util_exports = {}; +__export(util_exports, { + MingoError: () => MingoError, + ValueMap: () => ValueMap, + assert: () => assert, + cloneDeep: () => cloneDeep, + compare: () => compare, + ensureArray: () => ensureArray, + filterMissing: () => filterMissing, + findInsertIndex: () => findInsertIndex, + flatten: () => flatten, + groupBy: () => groupBy, + has: () => has, + hashCode: () => hashCode, + intersection: () => intersection, + into: () => into, + isArray: () => isArray, + isBoolean: () => isBoolean, + isDate: () => isDate, + isEmpty: () => isEmpty, + isEqual: () => isEqual, + isFunction: () => isFunction, + isNil: () => isNil, + isNotNaN: () => isNotNaN, + isNumber: () => isNumber, + isObject: () => isObject, + isObjectLike: () => isObjectLike, + isOperator: () => isOperator, + isRegExp: () => isRegExp, + isString: () => isString, + isSymbol: () => isSymbol, + merge: () => merge, + normalize: () => normalize, + removeValue: () => removeValue, + resolve: () => resolve, + resolveGraph: () => resolveGraph, + setValue: () => setValue, + stringify: () => stringify, + truthy: () => truthy, + typeOf: () => typeOf, + unique: () => unique, + walk: () => walk +}); +module.exports = __toCommonJS(util_exports); +class MingoError extends Error { +} const MISSING = Symbol("missing"); -const OBJECT_PROTOTYPE = Object.getPrototypeOf({}); -const OBJECT_TAG = "[object Object]"; -const OBJECT_TYPE_RE = /^\[object ([a-zA-Z0-9]+)\]$/; -/** - * Uses the simple hash method as described in Effective Java. - * @see https://stackoverflow.com/a/113600/1370481 - * @param value The value to hash - * @returns {number} - */ +const CYCLE_FOUND_ERROR = Object.freeze( + new Error("mingo: cycle detected while processing object/array") +); const DEFAULT_HASH_FUNCTION = (value) => { - const s = stringify(value); - let hash = 0; - let i = s.length; - while (i) - hash = ((hash << 5) - hash) ^ s.charCodeAt(--i); - return hash >>> 0; -}; -// no array, object, or function types -const JS_SIMPLE_TYPES = new Set([ - "null", - "undefined", - "boolean", - "number", - "string", - "date", - "regexp" -]); -/** MongoDB sort comparison order. https://www.mongodb.com/docs/manual/reference/bson-type-comparison-order */ -const SORT_ORDER_BY_TYPE = { - null: 0, - undefined: 0, - number: 1, - string: 2, - object: 3, - array: 4, - boolean: 5, - date: 6, - regexp: 7, - function: 8 + const s = stringify(value); + let hash = 0; + let i = s.length; + while (i) hash = (hash << 5) - hash ^ s.charCodeAt(--i); + return hash >>> 0; +}; +const objectProto = Object.prototype; +const arrayProto = Array.prototype; +const getPrototypeOf = Object.getPrototypeOf; +const isPrimitive = (v) => typeof v !== "object" && typeof v !== "function" || v === null; +const isScalar = (v) => isPrimitive(v) || isDate(v) || isRegExp(v); +const SORT_ORDER = { + undefined: 1, + null: 2, + number: 3, + string: 4, + symbol: 5, + object: 6, + array: 7, + arraybuffer: 8, + boolean: 9, + date: 10, + regexp: 11, + function: 12 }; -/** - * Compare function which adheres to MongoDB comparison order. - * - * @param a The first value - * @param b The second value - * @returns {Number} - */ const compare = (a, b) => { - if (a === MISSING) - a = undefined; - if (b === MISSING) - b = undefined; - const [u, v] = [a, b].map(n => SORT_ORDER_BY_TYPE[(0, exports.getType)(n).toLowerCase()]); - if (u !== v) - return u - v; - // number | string | date - if (u === 1 || u === 2 || u === 6) { - if (a < b) - return -1; - if (a > b) - return 1; - return 0; - } - // check for equivalence equality - if (isEqual(a, b)) - return 0; - if (a < b) - return -1; - if (a > b) - return 1; - // if we get here we are comparing a type that does not make sense. - return 0; + if (a === MISSING) a = void 0; + if (b === MISSING) b = void 0; + const [u, v] = [a, b].map((n) => SORT_ORDER[typeOf(n)]); + if (u !== v) return u - v; + if (isEqual(a, b)) return 0; + if (a < b) return -1; + if (a > b) return 1; + return 0; }; -exports.compare = compare; +class ValueMap extends Map { + // The hash function + #hashFn = DEFAULT_HASH_FUNCTION; + // maps the hashcode to key set + #keyMap = /* @__PURE__ */ new Map(); + // returns a tuple of [, ]. Expects an object key. + #unpack = (key) => { + const hash = this.#hashFn(key); + return [(this.#keyMap.get(hash) || []).find((k) => isEqual(k, key)), hash]; + }; + constructor() { + super(); + } + /** + * Returns a new {@link ValueMap} object. + * @param fn An optional custom hash function + */ + static init(fn) { + const m = new ValueMap(); + if (fn) m.#hashFn = fn; + return m; + } + clear() { + super.clear(); + this.#keyMap.clear(); + } + /** + * @returns true if an element in the Map existed and has been removed, or false if the element does not exist. + */ + delete(key) { + if (isPrimitive(key)) return super.delete(key); + const [masterKey, hash] = this.#unpack(key); + if (!super.delete(masterKey)) return false; + this.#keyMap.set( + hash, + this.#keyMap.get(hash).filter((k) => !isEqual(k, masterKey)) + ); + return true; + } + /** + * Returns a specified element from the Map object. If the value that is associated to the provided key is an object, then you will get a reference to that object and any change made to that object will effectively modify it inside the Map. + * @returns Returns the element associated with the specified key. If no element is associated with the specified key, undefined is returned. + */ + get(key) { + if (isPrimitive(key)) return super.get(key); + const [masterKey, _] = this.#unpack(key); + return super.get(masterKey); + } + /** + * @returns boolean indicating whether an element with the specified key exists or not. + */ + has(key) { + if (isPrimitive(key)) return super.has(key); + const [masterKey, _] = this.#unpack(key); + return super.has(masterKey); + } + /** + * Adds a new element with a specified key and value to the Map. If an element with the same key already exists, the element will be updated. + */ + set(key, value) { + if (isPrimitive(key)) return super.set(key, value); + const [masterKey, hash] = this.#unpack(key); + if (super.has(masterKey)) { + super.set(masterKey, value); + } else { + super.set(key, value); + const keys = this.#keyMap.get(hash) || []; + keys.push(key); + this.#keyMap.set(hash, keys); + } + return this; + } + /** + * @returns the number of elements in the Map. + */ + get size() { + return super.size; + } +} function assert(condition, message) { - if (!condition) - throw new Error(message); + if (!condition) throw new MingoError(message); } -exports.assert = assert; -/** - * Deep clone an object. Value types and immutable objects are returned as is. - */ -const cloneDeep = (obj) => { - const m = new Map(); - const add = (v) => { - if (m.has(v)) - throw new Error("cycle detected during clone operation."); - m.set(v, true); - }; - const clone = (val) => { - if (val instanceof Date) - return new Date(val); - if ((0, exports.isArray)(val)) { - add(val); - const res = new Array(val.length); - const len = val.length; - for (let i = 0; i < len; i++) - res[i] = clone(val[i]); - return res; - } - if ((0, exports.isObject)(val)) { - add(val); - const res = {}; - for (const k in val) - res[k] = clone(val[k]); - return res; - } - return val; - }; - return clone(obj); -}; -exports.cloneDeep = cloneDeep; -/** - * Returns the name of type as specified in the tag returned by a call to Object.prototype.toString - * @param v A value - */ -const getType = (v) => OBJECT_TYPE_RE.exec(Object.prototype.toString.call(v))[1]; -exports.getType = getType; +const typeOf = (v) => { + const s = objectProto.toString.call(v); + const t = s.substring(8, s.length - 1).toLowerCase(); + if (t !== "object") return t; + const ctor = v.constructor; + return ctor == null || ctor === Object ? t : ctor.name; +}; const isBoolean = (v) => typeof v === "boolean"; -exports.isBoolean = isBoolean; const isString = (v) => typeof v === "string"; -exports.isString = isString; +const isSymbol = (v) => typeof v === "symbol"; const isNumber = (v) => !isNaN(v) && typeof v === "number"; -exports.isNumber = isNumber; const isNotNaN = (v) => !(isNaN(v) && typeof v === "number"); -exports.isNotNaN = isNotNaN; -exports.isArray = Array.isArray; +const isArray = Array.isArray; const isObject = (v) => { - if (!v) - return false; - const proto = Object.getPrototypeOf(v); - return ((proto === OBJECT_PROTOTYPE || proto === null) && - OBJECT_TAG === Object.prototype.toString.call(v)); + if (!v) return false; + const p = Object.getPrototypeOf(v); + return (p === Object.prototype || p === null) && typeOf(v) === "object"; }; -exports.isObject = isObject; -// objects, arrays, functions, date, custom object -const isObjectLike = (v) => v === Object(v); -exports.isObjectLike = isObjectLike; +const isObjectLike = (v) => !isPrimitive(v); const isDate = (v) => v instanceof Date; -exports.isDate = isDate; const isRegExp = (v) => v instanceof RegExp; -exports.isRegExp = isRegExp; const isFunction = (v) => typeof v === "function"; -exports.isFunction = isFunction; -const isNil = (v) => v === null || v === undefined; -exports.isNil = isNil; -const inArray = (arr, item) => arr.includes(item); -exports.inArray = inArray; -const notInArray = (arr, item) => !(0, exports.inArray)(arr, item); -exports.notInArray = notInArray; -const truthy = (arg, strict = true) => !!arg || (strict && arg === ""); -exports.truthy = truthy; -const isEmpty = (x) => (0, exports.isNil)(x) || - ((0, exports.isString)(x) && !x) || - (x instanceof Array && x.length === 0) || - ((0, exports.isObject)(x) && Object.keys(x).length === 0); -exports.isEmpty = isEmpty; +const isNil = (v) => v === null || v === void 0; +const truthy = (arg, strict = true) => !!arg || strict && arg === ""; +const isEmpty = (x) => isNil(x) || isString(x) && !x || isArray(x) && x.length === 0 || isObject(x) && Object.keys(x).length === 0; +const ensureArray = (x) => isArray(x) ? x : [x]; +const has = (obj, prop) => !!obj && objectProto.hasOwnProperty.call(obj, prop); +const isTypedArray = (v) => typeof ArrayBuffer !== "undefined" && ArrayBuffer.isView(v); +const cloneDeep = (v, refs) => { + if (isNil(v) || isBoolean(v) || isNumber(v) || isString(v)) return v; + if (isDate(v)) return new Date(v); + if (isRegExp(v)) return new RegExp(v); + if (isTypedArray(v)) { + const ctor = v.constructor; + return new ctor(v); + } + if (!(refs instanceof Set)) refs = /* @__PURE__ */ new Set(); + if (refs.has(v)) throw CYCLE_FOUND_ERROR; + refs.add(v); + try { + if (isArray(v)) { + const arr = new Array(v.length); + for (let i = 0; i < v.length; i++) arr[i] = cloneDeep(v[i], refs); + return arr; + } + if (isObject(v)) { + const obj = {}; + for (const k of Object.keys(v)) obj[k] = cloneDeep(v[k], refs); + return obj; + } + } finally { + refs.delete(v); + } + return v; +}; const isMissing = (v) => v === MISSING; -exports.isMissing = isMissing; -/** ensure a value is an array or wrapped within one. */ -const ensureArray = (x) => x instanceof Array ? x : [x]; -exports.ensureArray = ensureArray; -const has = (obj, prop) => !!obj && Object.prototype.hasOwnProperty.call(obj, prop); -exports.has = has; -const mergeable = (left, right) => ((0, exports.isObject)(left) && (0, exports.isObject)(right)) || ((0, exports.isArray)(left) && (0, exports.isArray)(right)); -/** - * Deep merge objects or arrays. - * When the inputs have unmergeable types, the right hand value is returned. - * If inputs are arrays and options.flatten is set, elements in the same position are merged together. Remaining elements are appended to the target object. - * If options.flatten is false, the right hand value is just appended to the left-hand value. - * @param target {Object|Array} the target to merge into - * @param obj {Object|Array} the source object - */ -function merge(target, obj, options) { - // default options - options = options || { flatten: false }; - // take care of missing inputs - if ((0, exports.isMissing)(target) || (0, exports.isNil)(target)) - return obj; - if ((0, exports.isMissing)(obj) || (0, exports.isNil)(obj)) - return target; - // fail only on initial input. - if (!mergeable(target, obj)) { - if (options.skipValidation) - return obj || target; - throw Error("mismatched types. must both be array or object"); - } - // skip validation after initial input. - options.skipValidation = true; - if ((0, exports.isArray)(target)) { - const result = target; - const input = obj; - if (options.flatten) { - let i = 0; - let j = 0; - while (i < result.length && j < input.length) { - result[i] = merge(result[i++], input[j++], options); - } - while (j < input.length) { - result.push(obj[j++]); - } - } - else { - into(result, input); - } - } - else { - for (const k in obj) { - target[k] = merge(target[k], obj[k], options); - } - } - return target; -} -exports.merge = merge; -function buildHashIndex(arr, hashFunction = DEFAULT_HASH_FUNCTION) { - const map = new Map(); - arr.forEach((o, i) => { - const h = hashCode(o, hashFunction); - if (map.has(h)) { - if (!map.get(h).some(j => isEqual(arr[j], o))) { - map.get(h).push(i); - } - } - else { - map.set(h, [i]); - } - }); - return map; +function merge(target, input) { + if (isMissing(target) || isNil(target)) return input; + if (isMissing(input) || isNil(input)) return target; + if (isPrimitive(target) || isPrimitive(input)) return input; + if (isArray(target) && isArray(input)) { + assert( + target.length === input.length, + "arrays must be of equal length to merge." + ); + } + for (const k in input) { + target[k] = merge(target[k], input[k]); + } + return target; } -/** - * Returns the intersection of multiple arrays. - * - * @param {Array} input An array of arrays from which to find intersection. - * @param {Function} hashFunction Custom function to hash values, default the hashCode method - * @return {Array} Array of intersecting values. - */ function intersection(input, hashFunction = DEFAULT_HASH_FUNCTION) { - // if any array is empty, there is no intersection - if (input.some(arr => arr.length == 0)) - return []; - if (input.length === 1) - return Array.from(input); - // sort input arrays by to get smallest array - // const sorted = sortBy(input, (a: RawArray) => a.length) as RawArray[]; - const sortedIndex = sortBy(input.map((a, i) => [i, a.length]), (a) => a[1]); - // get the smallest - const smallest = input[sortedIndex[0][0]]; - // get hash index of smallest array - const map = buildHashIndex(smallest, hashFunction); - // hashIndex for remaining arrays. - const rmap = new Map(); - // final intersection results and index of first occurrence. - const results = new Array(); - map.forEach((v, k) => { - const lhs = v.map(j => smallest[j]); - const res = lhs.map(_ => 0); - // used to track first occurence of value in order of the original input array. - const stable = lhs.map(_ => [sortedIndex[0][0], 0]); - let found = false; - for (let i = 1; i < input.length; i++) { - const [currIndex, _] = sortedIndex[i]; - const arr = input[currIndex]; - if (!rmap.has(i)) - rmap.set(i, buildHashIndex(arr)); - // we found a match. let's confirm. - if (rmap.get(i).has(k)) { - const rhs = rmap - .get(i) - .get(k) - .map(j => arr[j]); - // confirm the intersection with an equivalence check. - found = lhs - .map((s, n) => rhs.some((t, m) => { - // we expect only one to match here since these are just collisions. - const p = res[n]; - if (isEqual(s, t)) { - res[n]++; - // track position of value ordering for stability. - if (currIndex < stable[n][0]) { - stable[n] = [currIndex, rmap.get(i).get(k)[m]]; - } - } - return p < res[n]; - })) - .some(Boolean); - } - // found nothing, so exclude value. this was just a hash collision. - if (!found) - return; - } - // extract value into result if we found an intersection. - // we find an intersection if the frequency counter matches the count of the remaining arrays. - if (found) { - into(results, res - .map((n, i) => { - return n === input.length - 1 ? [lhs[i], stable[i]] : MISSING; - }) - .filter(n => n !== MISSING)); - } + const vmaps = [ValueMap.init(hashFunction), ValueMap.init(hashFunction)]; + if (input.length === 0) return []; + if (input.some((arr) => arr.length === 0)) return []; + if (input.length === 1) return [...input]; + input[input.length - 1].forEach((v) => vmaps[0].set(v, true)); + for (let i = input.length - 2; i > -1; i--) { + input[i].forEach((v) => { + if (vmaps[0].has(v)) vmaps[1].set(v, true); }); - return results - .sort((a, b) => { - const [_i, [u, m]] = a; - const [_j, [v, n]] = b; - const r = (0, exports.compare)(u, v); - if (r !== 0) - return r; - return (0, exports.compare)(m, n); - }) - .map(v => v[0]); -} -exports.intersection = intersection; -/** - * Flatten the array - * - * @param {Array} xs The array to flatten - * @param {Number} depth The number of nested lists to iterate - */ -function flatten(xs, depth = 0) { - const arr = new Array(); - function flatten2(ys, n) { - for (let i = 0, len = ys.length; i < len; i++) { - if ((0, exports.isArray)(ys[i]) && (n > 0 || n < 0)) { - flatten2(ys[i], Math.max(-1, n - 1)); - } - else { - arr.push(ys[i]); - } - } + if (vmaps[1].size === 0) return []; + vmaps.reverse(); + vmaps[1].clear(); + } + return Array.from(vmaps[0].keys()); +} +function flatten(xs, depth = 1) { + const arr = new Array(); + function flatten2(ys, n) { + for (let i = 0, len = ys.length; i < len; i++) { + if (isArray(ys[i]) && (n > 0 || n < 0)) { + flatten2(ys[i], Math.max(-1, n - 1)); + } else { + arr.push(ys[i]); + } } - flatten2(xs, depth); - return arr; + } + flatten2(xs, depth); + return arr; } -exports.flatten = flatten; -/** - * Determine whether two values are the same or strictly equivalent - * - * @param {*} a The first value - * @param {*} b The second value - * @return {Boolean} Result of comparison - */ function isEqual(a, b) { - const lhs = [a]; - const rhs = [b]; - while (lhs.length > 0) { - a = lhs.pop(); - b = rhs.pop(); - // strictly equal must be equal. - if (a === b) - continue; - // unequal types and functions cannot be equal. - const nativeType = (0, exports.getType)(a).toLowerCase(); - if (nativeType !== (0, exports.getType)(b).toLowerCase() || nativeType === "function") { - return false; - } - // leverage toString for Date and RegExp types - if (nativeType === "array") { - const xs = a; - const ys = b; - if (xs.length !== ys.length) - return false; - if (xs.length === ys.length && xs.length === 0) - continue; - into(lhs, xs); - into(rhs, ys); - } - else if (nativeType === "object") { - // deep compare objects - const aKeys = Object.keys(a); - const bKeys = Object.keys(b); - // check length of keys early - if (aKeys.length !== bKeys.length) - return false; - // compare keys - for (let i = 0, len = aKeys.length; i < len; i++) { - const k = aKeys[i]; - // not found - if (!(0, exports.has)(b, k)) - return false; - // key found - lhs.push(a[k]); - rhs.push(b[k]); - } - } - else { - // compare encoded values - if (stringify(a) !== stringify(b)) - return false; - } - } - return lhs.length === 0; + if (a === b || Object.is(a, b)) return true; + const ctor = !!a && a.constructor || a; + if (a === null || b === null || a === void 0 || b === void 0 || ctor !== b.constructor || ctor === Function) { + return false; + } + if (ctor === Array || ctor === Object) { + const aKeys = Object.keys(a); + const bKeys = Object.keys(b); + if (aKeys.length !== bKeys.length) return false; + if ((/* @__PURE__ */ new Set([...aKeys, ...bKeys])).size != aKeys.length) return false; + for (const k of aKeys) if (!isEqual(a[k], b[k])) return false; + return true; + } + const proto = getPrototypeOf(a); + const cmp = isTypedArray(a) || proto !== objectProto && proto !== arrayProto && has(proto, "toString"); + return cmp && a.toString() === b.toString(); } -exports.isEqual = isEqual; -/** - * Return a new unique version of the collection - * @param {Array} input The input collection - * @return {Array} - */ function unique(input, hashFunction = DEFAULT_HASH_FUNCTION) { - const result = input.map(_ => MISSING); - buildHashIndex(input, hashFunction).forEach((v, _) => { - v.forEach(i => (result[i] = input[i])); - }); - return result.filter(v => v !== MISSING); -} -exports.unique = unique; -/** - * Encode value to string using a simple non-colliding stable scheme. - * - * @param value - * @returns {*} - */ -function stringify(value) { - const type = (0, exports.getType)(value).toLowerCase(); - switch (type) { - case "boolean": - case "number": - case "regexp": - return value.toString(); - case "string": - return JSON.stringify(value); - case "date": - return value.toISOString(); - case "null": - case "undefined": - return type; - case "array": - return "[" + value.map(stringify).join(",") + "]"; - default: - break; + const m = ValueMap.init(hashFunction); + input.forEach((v) => m.set(v, true)); + return Array.from(m.keys()); +} +const stringify = (v, refs) => { + if (v === null) return "null"; + if (v === void 0) return "undefined"; + if (isString(v) || isNumber(v) || isBoolean(v)) return JSON.stringify(v); + if (isDate(v)) return v.toISOString(); + if (isRegExp(v) || isSymbol(v) || isFunction(v)) + return v.toString(); + if (isTypedArray(v)) + return typeOf(v) + "[" + v.toString() + "]"; + if (!(refs instanceof Set)) refs = /* @__PURE__ */ new Set(); + if (refs.has(v)) throw CYCLE_FOUND_ERROR; + try { + refs.add(v); + if (isArray(v)) return "[" + v.map((s) => stringify(s, refs)).join(",") + "]"; + if (isObject(v)) { + const keys = Object.keys(v).sort(); + return "{" + keys.map((k) => `${k}:${stringify(v[k], refs)}`).join() + "}"; } - // default case - const prefix = type === "object" ? "" : `${(0, exports.getType)(value)}`; - const objKeys = Object.keys(value); - objKeys.sort(); - return (`${prefix}{` + - objKeys - .map(k => `${stringify(k)}:${stringify(value[k])}`) - .join(",") + - "}"); -} -exports.stringify = stringify; -/** - * Generate hash code - * This selected function is the result of benchmarking various hash functions. - * This version performs well and can hash 10^6 documents in ~3s with on average 100 collisions. - * - * @param value - * @returns {number|null} - */ -function hashCode(value, hashFunction) { - hashFunction = hashFunction || DEFAULT_HASH_FUNCTION; - if ((0, exports.isNil)(value)) - return null; - return hashFunction(value).toString(); -} -exports.hashCode = hashCode; -/** - * Returns a (stably) sorted copy of list, ranked in ascending order by the results of running each value through iteratee - * - * This implementation treats null/undefined sort keys as less than every other type - * - * @param {Array} collection - * @param {Function} keyFn The sort key function used to resolve sort keys - * @param {Function} comparator The comparator function to use for comparing keys. Defaults to standard comparison via `compare(...)` - * @return {Array} Returns a new sorted array by the given key and comparator function - */ -function sortBy(collection, keyFn, comparator = exports.compare) { - if ((0, exports.isEmpty)(collection)) - return collection; - const sorted = new Array(); - const result = new Array(); - for (let i = 0; i < collection.length; i++) { - const obj = collection[i]; - const key = keyFn(obj, i); - if ((0, exports.isNil)(key)) { - result.push(obj); - } - else { - sorted.push([key, obj]); - } + const proto = Object.getPrototypeOf(v); + if (proto !== objectProto && proto !== arrayProto && has(proto, "toString")) { + return typeOf(v) + "(" + JSON.stringify(v.toString()) + ")"; } - // use native array sorting but enforce stableness - sorted.sort((a, b) => comparator(a[0], b[0])); - return into(result, sorted.map((o) => o[1])); + throw new Error( + "mingo: cannot stringify custom type without explicit toString() method." + ); + } finally { + refs.delete(v); + } +}; +function hashCode(value, hashFunction) { + if (isNil(value)) return null; + hashFunction = hashFunction || DEFAULT_HASH_FUNCTION; + return hashFunction(value); } -exports.sortBy = sortBy; -/** - * Groups the collection into sets by the returned key - * - * @param collection - * @param keyFn {Function} to compute the group key of an item in the collection - * @returns {GroupByOutput} - */ function groupBy(collection, keyFn, hashFunction = DEFAULT_HASH_FUNCTION) { - if (collection.length < 1) - return new Map(); - // map of hash to collided values - const lookup = new Map(); - // map of raw key values to objects. - const result = new Map(); - for (let i = 0; i < collection.length; i++) { - const obj = collection[i]; - const key = keyFn(obj, i); - const hash = hashCode(key, hashFunction); - if (hash === null) { - if (result.has(null)) { - result.get(null).push(obj); - } - else { - result.set(null, [obj]); - } - } - else { - // find if we can match a hash for which the value is equivalent. - // this is used to deal with collisions. - const existingKey = lookup.has(hash) - ? lookup.get(hash).find(k => isEqual(k, key)) - : null; - // collision detected or first time seeing key - if ((0, exports.isNil)(existingKey)) { - // collision detected or first entry so we create a new group. - result.set(key, [obj]); - // upload the lookup with the collided key - if (lookup.has(hash)) { - lookup.get(hash).push(key); - } - else { - lookup.set(hash, [key]); - } - } - else { - // key exists - result.get(existingKey).push(obj); - } + if (collection.length < 1) return /* @__PURE__ */ new Map(); + const lookup = /* @__PURE__ */ new Map(); + const result = /* @__PURE__ */ new Map(); + for (let i = 0; i < collection.length; i++) { + const obj = collection[i]; + const key = keyFn(obj, i); + const hash = hashCode(key, hashFunction); + if (hash === null) { + if (result.has(null)) { + result.get(null).push(obj); + } else { + result.set(null, [obj]); + } + } else { + const existingKey = lookup.has(hash) ? lookup.get(hash).find((k) => isEqual(k, key)) : null; + if (isNil(existingKey)) { + result.set(key, [obj]); + if (lookup.has(hash)) { + lookup.get(hash).push(key); + } else { + lookup.set(hash, [key]); } + } else { + result.get(existingKey).push(obj); + } } - return result; + } + return result; } -exports.groupBy = groupBy; -// max elements to push. -// See argument limit https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply -const MAX_ARRAY_PUSH = 50000; -/** - * Merge elements into the dest - * - * @param {*} target The target object - * @param {*} rest The array of elements to merge into dest - */ +const MAX_ARRAY_PUSH = 5e4; function into(target, ...rest) { - if (target instanceof Array) { - return rest.reduce(((acc, arr) => { - // push arrary in batches to handle large inputs - let i = Math.ceil(arr.length / MAX_ARRAY_PUSH); - let begin = 0; - while (i-- > 0) { - Array.prototype.push.apply(acc, arr.slice(begin, begin + MAX_ARRAY_PUSH)); - begin += MAX_ARRAY_PUSH; - } - return acc; - }), target); - } - else { - // merge objects. same behaviour as Object.assign - return rest.filter(exports.isObjectLike).reduce((acc, item) => { - Object.assign(acc, item); - return acc; - }, target); + if (isArray(target)) { + for (const arr of rest) { + let i = Math.ceil(arr.length / MAX_ARRAY_PUSH); + let begin = 0; + while (i-- > 0) { + Array.prototype.push.apply( + target, + arr.slice(begin, begin + MAX_ARRAY_PUSH) + ); + begin += MAX_ARRAY_PUSH; + } } + return target; + } else { + return rest.filter(isObjectLike).reduce((acc, item) => { + Object.assign(acc, item); + return acc; + }, target); + } } -exports.into = into; -/** - * This is a generic memoization function - * - * This implementation uses a cache independent of the function being memoized - * to allow old values to be garbage collected when the memoized function goes out of scope. - * - * @param {*} fn The function object to memoize - */ -function memoize(fn, hashFunction = DEFAULT_HASH_FUNCTION) { - return ((memo) => { - return (...args) => { - const key = hashCode(args, hashFunction) || ""; - if (!(0, exports.has)(memo, key)) { - memo[key] = fn.apply(this, args); - } - return memo[key]; - }; - })({ - /* storage */ - }); -} -exports.memoize = memoize; -// mingo internal -/** - * Retrieve the value of a given key on an object - * @param obj - * @param key - * @returns {*} - * @private - */ function getValue(obj, key) { - return (0, exports.isObjectLike)(obj) ? obj[key] : undefined; + return isArray(obj) || isObject(obj) ? obj[key] : void 0; } -/** - * Unwrap a single element array to specified depth - * @param {Array} arr - * @param {Number} depth - */ function unwrap(arr, depth) { - if (depth < 1) - return arr; - while (depth-- && arr.length === 1) - arr = arr[0]; - return arr; + if (depth < 1) return arr; + while (depth-- && arr.length === 1) arr = arr[0]; + return arr; } -/** - * Resolve the value of the field (dot separated) on the given object - * @param obj {Object} the object context - * @param selector {String} dot separated path to field - * @returns {*} - */ function resolve(obj, selector, options) { - let depth = 0; - function resolve2(o, path) { - let value = o; - for (let i = 0; i < path.length; i++) { - const field = path[i]; - const isText = /^\d+$/.exec(field) === null; - // using instanceof to aid typescript compiler - if (isText && value instanceof Array) { - // On the first iteration, we check if we received a stop flag. - // If so, we stop to prevent iterating over a nested array value - // on consecutive object keys in the selector. - if (i === 0 && depth > 0) - break; - depth += 1; - // only look at the rest of the path - const subpath = path.slice(i); - value = value.reduce((acc, item) => { - const v = resolve2(item, subpath); - if (v !== undefined) - acc.push(v); - return acc; - }, []); - break; - } - else { - value = getValue(value, field); - } - if (value === undefined) - break; - } - return value; + let depth = 0; + function resolve2(o, path) { + let value = o; + for (let i = 0; i < path.length; i++) { + const field = path[i]; + const isText = /^\d+$/.exec(field) === null; + if (isText && isArray(value)) { + if (i === 0 && depth > 0) break; + depth += 1; + const subpath = path.slice(i); + value = value.reduce((acc, item) => { + const v = resolve2(item, subpath); + if (v !== void 0) acc.push(v); + return acc; + }, []); + break; + } else { + value = getValue(value, field); + } + if (value === void 0) break; } - const result = JS_SIMPLE_TYPES.has((0, exports.getType)(obj).toLowerCase()) - ? obj - : resolve2(obj, selector.split(".")); - return result instanceof Array && (options === null || options === void 0 ? void 0 : options.unwrapArray) - ? unwrap(result, depth) - : result; + return value; + } + const res = isScalar(obj) ? obj : resolve2(obj, selector.split(".")); + return isArray(res) && options?.unwrapArray ? unwrap(res, depth) : res; } -exports.resolve = resolve; -/** - * Returns the full object to the resolved value given by the selector. - * This function excludes empty values as they aren't practically useful. - * - * @param obj {Object} the object context - * @param selector {String} dot separated path to field - */ function resolveGraph(obj, selector, options) { - const names = selector.split("."); - const key = names[0]; - // get the next part of the selector - const next = names.slice(1).join("."); - const isIndex = /^\d+$/.exec(key) !== null; - const hasNext = names.length > 1; - let result; - let value; - if (obj instanceof Array) { - if (isIndex) { - result = getValue(obj, Number(key)); - if (hasNext) { - result = resolveGraph(result, next, options); - } - result = [result]; - } - else { - result = []; - for (const item of obj) { - value = resolveGraph(item, selector, options); - if (options === null || options === void 0 ? void 0 : options.preserveMissing) { - if (value === undefined) { - value = MISSING; - } - result.push(value); - } - else if (value !== undefined) { - result.push(value); - } - } - } - } - else { - value = getValue(obj, key); - if (hasNext) { - value = resolveGraph(value, next, options); + const sep = selector.indexOf("."); + const key = sep == -1 ? selector : selector.substring(0, sep); + const next = selector.substring(sep + 1); + const hasNext = sep != -1; + if (isArray(obj)) { + const isIndex = /^\d+$/.test(key); + const arr = isIndex && options?.preserveIndex ? [...obj] : []; + if (isIndex) { + const index = parseInt(key); + let value2 = getValue(obj, index); + if (hasNext) { + value2 = resolveGraph(value2, next, options); + } + if (options?.preserveIndex) { + arr[index] = value2; + } else { + arr.push(value2); + } + } else { + for (const item of obj) { + const value2 = resolveGraph(item, selector, options); + if (options?.preserveMissing) { + arr.push(value2 == void 0 ? MISSING : value2); + } else if (value2 != void 0 || options?.preserveIndex) { + arr.push(value2); } - if (value === undefined) - return undefined; - result = (options === null || options === void 0 ? void 0 : options.preserveKeys) ? Object.assign({}, obj) : {}; - result[key] = value; + } } - return result; + return arr; + } + const res = options?.preserveKeys ? { ...obj } : {}; + let value = getValue(obj, key); + if (hasNext) { + value = resolveGraph(value, next, options); + } + if (value === void 0) return void 0; + res[key] = value; + return res; } -exports.resolveGraph = resolveGraph; -/** - * Filter out all MISSING values from the object in-place - * - * @param obj The object to filter - */ function filterMissing(obj) { - if (obj instanceof Array) { - for (let i = obj.length - 1; i >= 0; i--) { - if (obj[i] === MISSING) { - obj.splice(i, 1); - } - else { - filterMissing(obj[i]); - } - } + if (isArray(obj)) { + for (let i = obj.length - 1; i >= 0; i--) { + if (obj[i] === MISSING) { + obj.splice(i, 1); + } else { + filterMissing(obj[i]); + } } - else if ((0, exports.isObject)(obj)) { - for (const k in obj) { - if ((0, exports.has)(obj, k)) { - filterMissing(obj[k]); - } - } + } else if (isObject(obj)) { + for (const k in obj) { + if (has(obj, k)) { + filterMissing(obj[k]); + } } + } } -exports.filterMissing = filterMissing; const NUMBER_RE = /^\d+$/; -/** - * Walk the object graph and execute the given transform function - * - * @param {Object|Array} obj The object to traverse. - * @param {String} selector The selector to navigate. - * @param {Callback} fn Callback to execute for value at the end the traversal. - * @param {WalkOptions} Options to use for the function. - * @return {*} - */ function walk(obj, selector, fn, options) { - const names = selector.split("."); - const key = names[0]; - const next = names.slice(1).join("."); - if (names.length === 1) { - if ((0, exports.isObject)(obj) || ((0, exports.isArray)(obj) && NUMBER_RE.test(key))) { - fn(obj, key); - } + const names = selector.split("."); + const key = names[0]; + const next = names.slice(1).join("."); + if (names.length === 1) { + if (isObject(obj) || isArray(obj) && NUMBER_RE.test(key)) { + fn(obj, key); } - else { - // force the rest of the graph while traversing - if ((options === null || options === void 0 ? void 0 : options.buildGraph) && (0, exports.isNil)(obj[key])) { - obj[key] = {}; - } - // get the next item - const item = obj[key]; - // nothing more to do - if (!item) - return; - // we peek to see if next key is an array index. - const isNextArrayIndex = !!(names.length > 1 && NUMBER_RE.test(names[1])); - // if we have an array value but the next key is not an index and the 'descendArray' option is set, - // we walk each item in the array separately. This allows for handling traversing keys for objects - // nested within an array. - // - // Eg: Given { array: [ {k:1}, {k:2}, {k:3} ] } - // - individual objecs can be traversed with "array.k" - // - a specific object can be traversed with "array.1" - if (item instanceof Array && (options === null || options === void 0 ? void 0 : options.descendArray) && !isNextArrayIndex) { - item.forEach(((e) => walk(e, next, fn, options))); - } - else { - walk(item, next, fn, options); - } + } else { + if (options?.buildGraph && isNil(obj[key])) { + obj[key] = {}; + } + const item = obj[key]; + if (!item) return; + const isNextArrayIndex = !!(names.length > 1 && NUMBER_RE.test(names[1])); + if (isArray(item) && options?.descendArray && !isNextArrayIndex) { + item.forEach((e) => walk(e, next, fn, options)); + } else { + walk(item, next, fn, options); } + } } -exports.walk = walk; -/** - * Set the value of the given object field - * - * @param obj {Object|Array} the object context - * @param selector {String} path to field - * @param value {*} the value to set - */ function setValue(obj, selector, value) { - walk(obj, selector, ((item, key) => { - item[key] = value; - }), { buildGraph: true }); + walk( + obj, + selector, + (item, key) => { + item[key] = isFunction(value) ? value(item[key]) : value; + }, + { buildGraph: true } + ); } -exports.setValue = setValue; -/** - * Removes an element from the container. - * If the selector resolves to an array and the leaf is a non-numeric key, - * the remove operation will be performed on objects of the array. - * - * @param obj {ArrayOrObject} object or array - * @param selector {String} dot separated path to element to remove - */ function removeValue(obj, selector, options) { - walk(obj, selector, ((item, key) => { - if (item instanceof Array) { - if (/^\d+$/.test(key)) { - item.splice(parseInt(key), 1); + walk( + obj, + selector, + (item, key) => { + if (isArray(item)) { + if (/^\d+$/.test(key)) { + item.splice(parseInt(key), 1); + } else if (options && options.descendArray) { + for (const elem of item) { + if (isObject(elem)) { + delete elem[key]; } - else if (options && options.descendArray) { - for (const elem of item) { - if ((0, exports.isObject)(elem)) { - delete elem[key]; - } - } - } - } - else if ((0, exports.isObject)(item)) { - delete item[key]; + } } - }), options); + } else if (isObject(item)) { + delete item[key]; + } + }, + options + ); } -exports.removeValue = removeValue; const OPERATOR_NAME_PATTERN = /^\$[a-zA-Z0-9_]+$/; -/** - * Check whether the given name passes for an operator. We assume AnyVal field name starting with '$' is an operator. - * This is cheap and safe to do since keys beginning with '$' should be reserved for internal use. - * @param {String} name - */ function isOperator(name) { - return OPERATOR_NAME_PATTERN.test(name); + return OPERATOR_NAME_PATTERN.test(name); } -exports.isOperator = isOperator; -/** - * Simplify expression for easy evaluation with query operators map - * @param expr - * @returns {*} - */ function normalize(expr) { - // normalized primitives - if (JS_SIMPLE_TYPES.has((0, exports.getType)(expr).toLowerCase())) { - return (0, exports.isRegExp)(expr) ? { $regex: expr } : { $eq: expr }; - } - // normalize object expression. using ObjectLike handles custom types - if ((0, exports.isObjectLike)(expr)) { - const exprObj = expr; - // no valid query operator found, so we do simple comparison - if (!Object.keys(exprObj).some(isOperator)) { - return { $eq: expr }; - } - // ensure valid regex - if ((0, exports.has)(expr, "$regex")) { - return { - $regex: new RegExp(exprObj["$regex"], exprObj["$options"]) - }; - } + if (isScalar(expr)) { + return isRegExp(expr) ? { $regex: expr } : { $eq: expr }; + } + if (isObjectLike(expr)) { + if (!Object.keys(expr).some(isOperator)) return { $eq: expr }; + if (has(expr, "$regex")) { + const newExpr = { ...expr }; + newExpr["$regex"] = new RegExp( + expr["$regex"], + expr["$options"] + ); + delete newExpr["$options"]; + return newExpr; + } + } + return expr; +} +function findInsertIndex(sorted, item, comparator = compare) { + let lo = 0; + let hi = sorted.length - 1; + while (lo <= hi) { + const mid = Math.round(lo + (hi - lo) / 2); + if (comparator(item, sorted[mid]) < 0) { + hi = mid - 1; + } else if (comparator(item, sorted[mid]) > 0) { + lo = mid + 1; + } else { + return mid; } - return expr; + } + return lo; } -exports.normalize = normalize; +// Annotate the CommonJS export names for ESM import in node: +0 && (0); /***/ }), -/***/ 3689: +/***/ 7444: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -31533,7 +36016,7 @@ const punycode = { * @memberOf punycode * @type String */ - 'version': '2.1.0', + 'version': '2.3.1', /** * An object of methods to convert from JavaScript's internal character * representation (UCS-2) to Unicode code points, and back. @@ -31557,60 +36040,38 @@ const punycode = { /***/ }), -/***/ 9413: -/***/ ((module) => { - -module.exports=/[\0-\x1F\x7F-\x9F]/ - -/***/ }), - -/***/ 2326: -/***/ ((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]/ - -/***/ }), - -/***/ 3189: -/***/ ((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]/ - -/***/ }), - -/***/ 5045: -/***/ ((module) => { +/***/ 3492: +/***/ ((__unused_webpack_module, exports) => { -module.exports=/[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/ +"use strict"; -/***/ }), -/***/ 4205: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +var regex$5 = /[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; -"use strict"; +var regex$4 = /[\0-\x1F\x7F-\x9F]/; +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]/; -exports.Any = __webpack_require__(9369); -exports.Cc = __webpack_require__(9413); -exports.Cf = __webpack_require__(2326); -exports.P = __webpack_require__(3189); -exports.Z = __webpack_require__(5045); +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]/; +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]/; -/***/ 9369: -/***/ ((module) => { +exports.Any = regex$5; +exports.Cc = regex$4; +exports.Cf = regex$3; +exports.P = regex$2; +exports.S = regex$1; +exports.Z = regex; -module.exports=/[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/ /***/ }), -/***/ 1201: +/***/ 2008: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -const State = __webpack_require__(5213); +const State = __webpack_require__(9421); /** * @namespace History @@ -31732,10 +36193,10 @@ module.exports = History; /***/ }), -/***/ 9456: +/***/ 3199: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -const md = __webpack_require__(9980)({ +const md = __webpack_require__(383)({ html: true, // Enable HTML tags in source xhtmlOut: true, // Use '/' to close single tags (
). breaks: true // Convert \n into
@@ -31796,7 +36257,7 @@ module.exports = Markdown; /***/ }), -/***/ 1067: +/***/ 3204: /***/ ((module) => { /** @@ -31834,10 +36295,10 @@ module.exports = Passage; /***/ }), -/***/ 1675: +/***/ 9990: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -const $ = __webpack_require__(9755); +const $ = __webpack_require__(4692); class Screen { /** @@ -31864,13 +36325,13 @@ module.exports = Screen; /***/ }), -/***/ 5827: +/***/ 5465: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -const ejs = __webpack_require__(7083); -const History = __webpack_require__(1201); -const Screen = __webpack_require__(1675); -const Utilities = __webpack_require__(5543); +const ejs = __webpack_require__(4155); +const History = __webpack_require__(2008); +const Screen = __webpack_require__(9990); +const Utilities = __webpack_require__(5072); /** * @external Story @@ -31934,11 +36395,11 @@ module.exports = Script; /***/ }), -/***/ 2879: +/***/ 7936: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -const $ = __webpack_require__(9755); -const State = __webpack_require__(5213); +const $ = __webpack_require__(4692); +const State = __webpack_require__(9421); class Sidebar { constructor () { @@ -32048,10 +36509,10 @@ module.exports = Sidebar; /***/ }), -/***/ 5213: +/***/ 9421: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -const EventEmitter = __webpack_require__(7187); +const EventEmitter = __webpack_require__(7007); const handler = { get: (target, property) => { @@ -32118,11 +36579,11 @@ module.exports = State; /***/ }), -/***/ 6505: +/***/ 3325: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -const History = __webpack_require__(1201); -const State = __webpack_require__(5213); +const History = __webpack_require__(2008); +const State = __webpack_require__(9421); class Storage { /** @@ -32215,9 +36676,8 @@ class Storage { window.localStorage.setItem('testKey', 'test'); window.localStorage.removeItem('testKey'); result = true; - } catch (e) { - // If an error was thrown, we do nothing. - // The method will return false if it did not work. + } catch(error) { + console.info('Info: localStorage is not available. Error:', error); } // Return result @@ -32249,23 +36709,23 @@ module.exports = Storage; /***/ }), -/***/ 3213: +/***/ 2577: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { /** * @external Element * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Element|Element} */ -const $ = __webpack_require__(9755); -const Passage = __webpack_require__(1067); -const Markdown = __webpack_require__(9456); -const State = __webpack_require__(5213); -const History = __webpack_require__(1201); -const Storylets = __webpack_require__(2444); -const Script = __webpack_require__(5827); -const Sidebar = __webpack_require__(2879); -const Screen = __webpack_require__(1675); -const Storage = __webpack_require__(6505); +const $ = __webpack_require__(4692); +const Passage = __webpack_require__(3204); +const Markdown = __webpack_require__(3199); +const State = __webpack_require__(9421); +const History = __webpack_require__(2008); +const Storylets = __webpack_require__(9715); +const Script = __webpack_require__(5465); +const Sidebar = __webpack_require__(7936); +const Screen = __webpack_require__(9990); +const Storage = __webpack_require__(3325); /** * An object representing the entire story. After the document has completed @@ -32739,11 +37199,11 @@ module.exports = Story; /***/ }), -/***/ 2444: +/***/ 9715: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -const { Query } = __webpack_require__(6090); -const State = __webpack_require__(5213); +const { Query } = __webpack_require__(8543); +const State = __webpack_require__(9421); /** * An object containing none, one, or multiple passages based @@ -32774,7 +37234,8 @@ class Storylets { try { // Try to parse string into object passageRequirements = JSON.parse(captured); - } catch (e) { + } catch (error) { + console.info('INFO: Failed to parse passage requirements. Error:', error); // Ignore the error } @@ -32930,10 +37391,10 @@ module.exports = Storylets; /***/ }), -/***/ 5543: +/***/ 5072: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -const $ = __webpack_require__(9755); +const $ = __webpack_require__(4692); class Utilities { /** @@ -33034,33 +37495,25 @@ module.exports = Utilities; /***/ }), -/***/ 7790: +/***/ 7280: /***/ (() => { /* (ignored) */ /***/ }), -/***/ 5272: +/***/ 7024: /***/ (() => { /* (ignored) */ /***/ }), -/***/ 3558: -/***/ ((module) => { - -"use strict"; -module.exports = {"i8":"3.1.9"}; - -/***/ }), - -/***/ 9323: +/***/ 3840: /***/ ((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":"‌"}'); +module.exports = {"rE":"3.1.10"}; /***/ }) @@ -33121,7 +37574,7 @@ module.exports = JSON.parse('{"Aacute":"Á","aacute":"á","Abreve":"Ă","abreve" /******/ /************************************************************************/ var __webpack_exports__ = {}; -// This entry need to be wrapped in an IIFE because it need to be in strict mode. +// This entry needs to be wrapped in an IIFE because it needs to be in strict mode. (() => { "use strict"; // Require normalize.css. @@ -33129,12 +37582,12 @@ var __webpack_exports__ = {}; // Require local CSS. // Require jQuery. -const $ = __webpack_require__(9755); +const $ = __webpack_require__(4692); // Setup global jQuery. window.$ = $; window.jQuery = $; // Require Story. -const Story = __webpack_require__(3213); +const Story = __webpack_require__(2577); // Create new Story instance. window.Story = new Story(); // Create global store shortcut. diff --git a/build/format.css b/build/format.css index 88a73dcd..a0ce6ee5 100644 --- a/build/format.css +++ b/build/format.css @@ -1 +1 @@ -/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{-webkit-text-size-adjust:100%;line-height:1.15}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}body{color:#222;font:1.5em Helvetica Neue,Helvetica,Arial,sans-serif;margin-right:1em}tw-icon{cursor:pointer;font-size:2em}tw-story{box-sizing:border-box;display:flex;flex-direction:row;font-size:1.5em;line-height:1.5em;margin-top:1em;min-height:100%;width:100%}tw-passage{display:block;width:90%}a,tw-link{color:#222;cursor:pointer;text-decoration-color:#ccc}a,a:hover,tw-icon:hover,tw-link,tw-link:hover{text-decoration:underline}tw-sidebar{margin-left:1em;width:10%}a:hover{color:#cc8929}a:active,a:hover{text-decoration-color:#cc8929}a:active{color:#ffb040}tw-storydata{display:none}tw-screenlock{align-items:center;background-color:#fff;display:flex;height:100%;justify-content:center;left:0;position:fixed;top:0;width:100%;z-index:100000}.loading{-webkit-animation:spin 2s linear infinite;animation:spin 2s linear infinite;border:16px solid #f3f3f3;border-radius:50%;border-top-color:#3498db;height:250px;width:250px}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(1turn)}}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}} \ No newline at end of file +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}body{color:#222;font:1.5em Helvetica Neue,Helvetica,Arial,sans-serif;margin-right:1em}tw-icon{cursor:pointer;font-size:2em}tw-story{box-sizing:border-box;display:flex;flex-direction:row;font-size:1.5em;line-height:1.5em;margin-top:1em;min-height:100%;width:100%}tw-passage{display:block;width:90%}a,tw-link{color:#222;cursor:pointer;text-decoration-color:#ccc}a,a:hover,tw-icon:hover,tw-link,tw-link:hover{text-decoration:underline}tw-sidebar{margin-left:1em;width:10%}a:hover{color:#cc8929}a:active,a:hover{text-decoration-color:#cc8929}a:active{color:#ffb040}tw-storydata{display:none}tw-screenlock{align-items:center;background-color:#fff;display:flex;height:100%;justify-content:center;left:0;position:fixed;top:0;width:100%;z-index:100000}.loading{-webkit-animation:spin 2s linear infinite;animation:spin 2s linear infinite;border:16px solid #f3f3f3;border-radius:50%;border-top-color:#3498db;height:250px;width:250px}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(1turn)}}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}} \ No newline at end of file diff --git a/dist/format.js b/dist/format.js index 1a57ace7..c6a283b9 100644 --- a/dist/format.js +++ b/dist/format.js @@ -1 +1 @@ -window.storyFormat({"name":"Snowman","version":"3.0.0","description":"An advanced story format for authors more experienced with HTML, CSS, and JavaScript. See its
documentation.","proofing":false,"license":"MIT","setup":"","source":"\n\n\t\n\t\t\n\t\t\n\t\t{{STORY_NAME}}\n\t\t\n\t\n\t\n\t\t{{STORY_DATA}}\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\n"}); \ No newline at end of file +window.storyFormat({"name":"Snowman","version":"3.0.0","description":"An advanced story format for authors more experienced with HTML, CSS, and JavaScript. See its documentation.","proofing":false,"license":"MIT","setup":"","source":"\n\n\t\n\t\t\n\t\t\n\t\t{{STORY_NAME}}\n\t\t\n\t\n\t\n\t\t{{STORY_DATA}}\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\n"}); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 3e65221a..73c0c67b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,32 +12,32 @@ "ejs": "^3.1.10", "jquery": "^3.7.1", "markdown-it": "^14.1.0", - "mingo": "^6.4.15", + "mingo": "^6.5.1", "normalize.css": "^8.0.1", "underscore": "^1.13.7" }, "devDependencies": { - "@eslint/js": "^9.9.1", + "@eslint/js": "^9.17.0", "@types/expect-puppeteer": "^5.0.6", "@types/jest-environment-puppeteer": "^5.0.6", "@types/puppeteer": "^7.0.4", "css-loader": "^7.1.2", "css-minimizer-webpack-plugin": "^7.0.0", - "eslint": "^9.9.1", - "eslint-plugin-jest": "^28.8.2", - "eslint-plugin-jsdoc": "^50.2.2", - "extwee": "^2.2.3", - "globals": "^15.9.0", + "eslint": "^9.17.0", + "eslint-plugin-jest": "^28.9.0", + "eslint-plugin-jsdoc": "^50.6.1", + "extwee": "^2.2.4", + "globals": "^15.13.0", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", - "jest-puppeteer": "^10.1.0", - "mini-css-extract-plugin": "^2.9.1", + "jest-puppeteer": "^10.1.4", + "mini-css-extract-plugin": "^2.9.2", "open": "^10.1.0", "open-cli": "^8.0.0", - "puppeteer": "^23.2.1", + "puppeteer": "^23.10.4", "shelljs": "^0.8.5", "style-loader": "^4.0.0", - "webpack": "^5.94.0", + "webpack": "^5.97.1", "webpack-cli": "^5.1.4" } }, @@ -728,9 +728,9 @@ } }, "node_modules/@es-joy/jsdoccomment": { - "version": "0.48.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.48.0.tgz", - "integrity": "sha512-G6QUWIcC+KvSwXNsJyDTHvqUdNoAVJPPgkc3+Uk4WBKqZvoXhlvazOgm9aL0HwihJLQf0l+tOE2UFzXBqCqgDw==", + "version": "0.49.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.49.0.tgz", + "integrity": "sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==", "dev": true, "license": "MIT", "dependencies": { @@ -758,9 +758,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "license": "MIT", "engines": { @@ -768,13 +768,13 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", - "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz", + "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.4", + "@eslint/object-schema": "^2.1.5", "debug": "^4.3.1", "minimatch": "^3.1.2" }, @@ -782,10 +782,23 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@eslint/core": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.1.tgz", + "integrity": "sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", - "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", "dev": true, "license": "MIT", "dependencies": { @@ -820,9 +833,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.9.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.1.tgz", - "integrity": "sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==", + "version": "9.17.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.17.0.tgz", + "integrity": "sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==", "dev": true, "license": "MIT", "engines": { @@ -830,11 +843,24 @@ } }, "node_modules/@eslint/object-schema": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", - "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz", + "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.4.tgz", + "integrity": "sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==", "dev": true, "license": "Apache-2.0", + "dependencies": { + "levn": "^0.4.1" + }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } @@ -856,6 +882,44 @@ "@hapi/hoek": "^9.0.0" } }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -870,9 +934,9 @@ } }, "node_modules/@humanwhocodes/retry": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", - "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1584,16 +1648,16 @@ } }, "node_modules/@puppeteer/browsers": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.3.1.tgz", - "integrity": "sha512-uK7o3hHkK+naEobMSJ+2ySYyXtQkBxIH8Gn4MK9ciePjNV+Pf+PgY/W7iPzn2MTjl3stcYB5AlcTmPYw7AXDwA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.6.1.tgz", + "integrity": "sha512-aBSREisdsGH890S2rQqK82qmQYU3uFpSH8wcZWHgHzl3LfzsxAKbLNiAG9mO8v1Y0UICBeClICxPJvyr0rcuxg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "debug": "^4.3.6", + "debug": "^4.4.0", "extract-zip": "^2.0.1", "progress": "^2.0.3", - "proxy-agent": "^6.4.0", + "proxy-agent": "^6.5.0", "semver": "^7.6.3", "tar-fs": "^3.0.6", "unbzip2-stream": "^1.4.3", @@ -1727,11 +1791,34 @@ "@babel/types": "^7.20.7" } }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" }, "node_modules/@types/expect-puppeteer": { "version": "5.0.6", @@ -1827,10 +1914,11 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { "version": "20.4.8", @@ -2015,148 +2103,163 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", - "dev": true + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "dev": true, + "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" } }, @@ -2208,13 +2311,15 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/abab": { "version": "2.0.6", @@ -2223,9 +2328,9 @@ "dev": true }, "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, "license": "MIT", "bin": { @@ -2245,15 +2350,6 @@ "acorn-walk": "^8.0.2" } }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -2451,9 +2547,9 @@ "dev": true }, "node_modules/axios": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", - "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", "dev": true, "license": "MIT", "dependencies": { @@ -2463,9 +2559,9 @@ } }, "node_modules/b4a": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", - "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==", + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", "dev": true, "license": "Apache-2.0" }, @@ -2591,17 +2687,17 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/bare-events": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz", - "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz", + "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==", "dev": true, "license": "Apache-2.0", "optional": true }, "node_modules/bare-fs": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.3.tgz", - "integrity": "sha512-7RYKL+vZVCyAsMLi5SPu7QGauGGT8avnP/HO571ndEuV4MYdGXvLhtW67FuLPeEI8EiIY7zbbRR9x7x7HU0kgw==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.5.tgz", + "integrity": "sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -2612,9 +2708,9 @@ } }, "node_modules/bare-os": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.2.tgz", - "integrity": "sha512-HZoJwzC+rZ9lqEemTMiO0luOePoGYNBgsLLgegKR/cljiJvcDNhDZQkzC+NC5Oh0aHbdBNSOHpghwMuB5tqhjg==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.4.tgz", + "integrity": "sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==", "dev": true, "license": "Apache-2.0", "optional": true @@ -2631,14 +2727,14 @@ } }, "node_modules/bare-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.2.0.tgz", - "integrity": "sha512-+o9MG5bPRRBlkVSpfFlMag3n7wMaIZb4YZasU2+/96f+3HTQ4F9DKQeu3K/Sjz1W0umu6xvVq1ON0ipWdMlr3A==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.1.tgz", + "integrity": "sha512-eVZbtKM+4uehzrsj49KtCy3Pbg7kO1pJ3SKZ1SFrIH/0pnj9scuGGgUlNDf/7qS8WKtGdiJY5Kyhs/ivYPTB/g==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "streamx": "^2.18.0" + "streamx": "^2.21.0" } }, "node_modules/base64-js": { @@ -2700,9 +2796,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.3.tgz", + "integrity": "sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==", "dev": true, "funding": [ { @@ -2720,10 +2816,10 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" @@ -2829,9 +2925,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001655", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz", - "integrity": "sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==", + "version": "1.0.30001689", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001689.tgz", + "integrity": "sha512-CmeR2VBycfa+5/jOfnp/NpWPGd06nf1XYiefUvhXFfZE4GkRc9jv+eGPS4nT558WS/8lYCzV8SlANCIPvbWP1g==", "dev": true, "funding": [ { @@ -2883,9 +2979,9 @@ } }, "node_modules/chromium-bidi": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.6.4.tgz", - "integrity": "sha512-8zoq6ogmhQQkAKZVKO2ObFTl4uOkqoX1PlKQX3hZQ5E9cbUotcAb7h4pTNVAGGv8Z36PF3CtdOriEp/Rz82JqQ==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.8.0.tgz", + "integrity": "sha512-uJydbGdTw0DEUjhoogGveneJVWX/9YuqkWePzMmkBYwtdAqo5d3J/ovNKFr+/2hWXYmYCr6it8mSSTIj6SS6Ug==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3109,10 +3205,11 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -3475,13 +3572,13 @@ } }, "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -3601,9 +3698,9 @@ } }, "node_modules/devtools-protocol": { - "version": "0.0.1330662", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1330662.tgz", - "integrity": "sha512-pzh6YQ8zZfz3iKlCvgzVCu22NdpZ8hNmwU6WnQjNVquh0A9iVosPtNLWDwaWVGyrntQlltPFztTMK5Cg6lfCuw==", + "version": "0.0.1367902", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1367902.tgz", + "integrity": "sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg==", "dev": true, "license": "BSD-3-Clause" }, @@ -3702,9 +3799,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz", - "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==", + "version": "1.5.73", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.73.tgz", + "integrity": "sha512-8wGNxG9tAG5KhGd3eeA0o6ixhiNdgr0DcHWm85XPCphwZgD1lIEoi6t3VERayWao7SF7AAZTw6oARGJeVjH8Kg==", "dev": true, "license": "ISC" }, @@ -3842,28 +3939,32 @@ } }, "node_modules/eslint": { - "version": "9.9.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.9.1.tgz", - "integrity": "sha512-dHvhrbfr4xFQ9/dq+jcVneZMyRYLjggWjk6RVsIiHsP8Rz6yZ8LvZ//iU4TrZF+SXWG+JkNF2OyiZRvzgRDqMg==", + "version": "9.17.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.17.0.tgz", + "integrity": "sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.11.0", - "@eslint/config-array": "^0.18.0", - "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "9.9.1", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.9.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.17.0", + "@eslint/plugin-kit": "^0.2.3", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.3.0", - "@nodelib/fs.walk": "^1.2.8", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.0.2", - "eslint-visitor-keys": "^4.0.0", - "espree": "^10.1.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -3873,15 +3974,11 @@ "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" @@ -3902,9 +3999,9 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "28.8.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.8.2.tgz", - "integrity": "sha512-mC3OyklHmS5i7wYU1rGId9EnxRI8TVlnFG56AE+8U9iRy6zwaNygZR+DsdZuCL0gRG0wVeyzq+uWcPt6yJrrMA==", + "version": "28.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.9.0.tgz", + "integrity": "sha512-rLu1s1Wf96TgUUxSw6loVIkNtUjq1Re7A9QdCCHSohnvXEBAjuL420h0T/fMmkQlNsQP2GhQzEUpYHPfxBkvYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3928,13 +4025,13 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "50.2.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.2.2.tgz", - "integrity": "sha512-i0ZMWA199DG7sjxlzXn5AeYZxpRfMJjDPUl7lL9eJJX8TPRoIaxJU4ys/joP5faM5AXE1eqW/dslCj3uj4Nqpg==", + "version": "50.6.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.6.1.tgz", + "integrity": "sha512-UWyaYi6iURdSfdVVqvfOs2vdCVz0J40O/z/HTsv2sFjdjmdlUI/qlKLOTmwbPQ2tAfQnE5F9vqx+B+poF71DBQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "@es-joy/jsdoccomment": "~0.48.0", + "@es-joy/jsdoccomment": "~0.49.0", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", "debug": "^4.3.6", @@ -3964,9 +4061,9 @@ } }, "node_modules/eslint-scope": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", - "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -3993,9 +4090,9 @@ } }, "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", - "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -4006,15 +4103,15 @@ } }, "node_modules/espree": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", - "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.12.0", + "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.0.0" + "eslint-visitor-keys": "^4.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4024,9 +4121,9 @@ } }, "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", - "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -4163,10 +4260,11 @@ } }, "node_modules/expect-puppeteer": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/expect-puppeteer/-/expect-puppeteer-10.1.0.tgz", - "integrity": "sha512-d+RS+LWxlEq4RxWb2ifkXYg6/IS3VaZogAye0o2TZaf2qCFT8LN5yVLKfcYI54RQDBn/wMDRFySP+QMMFq+ZIg==", + "version": "10.1.4", + "resolved": "https://registry.npmjs.org/expect-puppeteer/-/expect-puppeteer-10.1.4.tgz", + "integrity": "sha512-zNVzk/+TkPS/CuTlGSK7SjXuUpQiakXtUJhbTRrcPHop4jCWydPx9RlvHhQELzZYgXlLhIP+hvBzUNiN8WNAow==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" } @@ -4209,19 +4307,19 @@ } }, "node_modules/extwee": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/extwee/-/extwee-2.2.3.tgz", - "integrity": "sha512-3knf1U6cWDn5jk4tCy2F5vZZZ9CFZX8p9ILeDs8Hc4q1pdpFawgRlKe3sw7o28xAU1ALFexCqbU1yUr4AommVQ==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/extwee/-/extwee-2.2.4.tgz", + "integrity": "sha512-V4pTpgd+i4WcqbweZNZ71an7igxMPYW2LORxI1IfPS9bedAnokH0QWN3PnPVmEtlKX+SHkx4qUc0EtKfty1nnQ==", "dev": true, "license": "MIT", "dependencies": { - "commander": "^12.0.0", + "commander": "^12.1.0", "graphemer": "^1.4.0", "html-entities": "^2.5.2", "node-html-parser": "^6.1.13", "pickleparser": "^0.2.1", - "semver": "^7.6.0", - "uuid": "^9.0.1" + "semver": "^7.6.2", + "uuid": "^10.0.0" }, "bin": { "extwee": "src/extwee.js" @@ -4478,9 +4576,9 @@ "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "dev": true, "funding": [ { @@ -4522,21 +4620,6 @@ "node": ">=0.10.0" } }, - "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -4615,16 +4698,15 @@ } }, "node_modules/get-uri": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", - "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz", + "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==", "dev": true, "license": "MIT", "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.2", - "debug": "^4.3.4", - "fs-extra": "^11.2.0" + "debug": "^4.3.4" }, "engines": { "node": ">= 14" @@ -4712,9 +4794,9 @@ } }, "node_modules/globals": { - "version": "15.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz", - "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==", + "version": "15.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.13.0.tgz", + "integrity": "sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g==", "dev": true, "license": "MIT", "engines": { @@ -4896,10 +4978,11 @@ ] }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -5100,15 +5183,6 @@ "node": ">=0.12.0" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -5507,18 +5581,19 @@ } }, "node_modules/jest-dev-server": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/jest-dev-server/-/jest-dev-server-10.1.0.tgz", - "integrity": "sha512-zB5phqImkP1w6ANhRPrpr4oW84SDRRAhQhCEJ+NGGET4yapNf0Fu8ymS7inNPNQ8zQYgm8IfqyUGgEforPt8pg==", + "version": "10.1.4", + "resolved": "https://registry.npmjs.org/jest-dev-server/-/jest-dev-server-10.1.4.tgz", + "integrity": "sha512-bGQ6sedNGtT6AFHhCVqGTXMPz7UyJi/ZrhNBgyqsP0XU9N8acCEIfqZEA22rOaZ+NdEVsaltk6tL7UT6aXfI7w==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.2", "cwd": "^0.10.0", "find-process": "^1.4.7", "prompts": "^2.4.2", - "spawnd": "^10.1.0", + "spawnd": "^10.1.4", "tree-kill": "^1.2.2", - "wait-on": "^7.2.0" + "wait-on": "^8.0.1" }, "engines": { "node": ">=16" @@ -5796,15 +5871,16 @@ "dev": true }, "node_modules/jest-environment-puppeteer": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/jest-environment-puppeteer/-/jest-environment-puppeteer-10.1.0.tgz", - "integrity": "sha512-bP1L64wGPQJMVKcH3XIw1X0R+s8VQ5yYqi/5aRFlqwXerUoop+FFlKBeGWfCxpGwo1ICpVymhP0bfV1S0yzfWA==", + "version": "10.1.4", + "resolved": "https://registry.npmjs.org/jest-environment-puppeteer/-/jest-environment-puppeteer-10.1.4.tgz", + "integrity": "sha512-cx2jzf1qZb6/vdmLbRccF0k/zSsoWlrXi8bg10GzrODxiwsRomVDszTfoOCRsQ+C1sbJ+ubI1PlryIvvYjITrA==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.2", "cosmiconfig": "^8.3.6", "deepmerge": "^4.3.1", - "jest-dev-server": "^10.1.0", + "jest-dev-server": "^10.1.4", "jest-environment-node": "^29.7.0" }, "engines": { @@ -6049,13 +6125,14 @@ } }, "node_modules/jest-puppeteer": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/jest-puppeteer/-/jest-puppeteer-10.1.0.tgz", - "integrity": "sha512-jQY3GfOq5eTi4YEHFqueQtRmOvEmkfqDJPpoU9Y16Gyo73b9xtSd3tlQz9o4pEfDQdmOeTt0FjQSVn2Ydl50ig==", + "version": "10.1.4", + "resolved": "https://registry.npmjs.org/jest-puppeteer/-/jest-puppeteer-10.1.4.tgz", + "integrity": "sha512-I9bADDn9EzpaL9QgzEtyJhd29PBv45rZJFPROUC2KWZHUs+5OGjzBOZKBzmqECdGv2GV/JL+NMdjqRJde2A36Q==", "dev": true, + "license": "MIT", "dependencies": { - "expect-puppeteer": "^10.1.0", - "jest-environment-puppeteer": "^10.1.0" + "expect-puppeteer": "^10.1.4", + "jest-environment-puppeteer": "^10.1.4" }, "engines": { "node": ">=16" @@ -6644,19 +6721,6 @@ "node": ">=6" } }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -6920,15 +6984,15 @@ } }, "node_modules/mingo": { - "version": "6.4.15", - "resolved": "https://registry.npmjs.org/mingo/-/mingo-6.4.15.tgz", - "integrity": "sha512-fKUCGr7fUxrb7YBK6whm5O5VouXfKAVtxnb+6g3Xuwsj9Jt9u8hhMOgiUoKO4kp3DmuiN0qgpYX2H/nP3zD1Hw==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/mingo/-/mingo-6.5.1.tgz", + "integrity": "sha512-txCqo2abwgA+oG5QyzPdvv/lYdN8rptMbvVqN87Ao73vA8r2xG0XT3Rj4R5o+YeQ4hImq4PsLzqsRQ/qVyXBPw==", "license": "MIT" }, "node_modules/mini-css-extract-plugin": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.1.tgz", - "integrity": "sha512-+Vyi+GCCOHnrJ2VPS+6aPoXN2k2jgUzDRhTFLjjTBn23qyXJXkjUWQgTL+mXpF5/A8ixLdCc6kWsoeOjKGejKQ==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", + "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", "dev": true, "license": "MIT", "dependencies": { @@ -6975,10 +7039,11 @@ "license": "MIT" }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" }, "node_modules/nanoid": { "version": "3.3.7", @@ -7038,9 +7103,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "dev": true, "license": "MIT" }, @@ -7220,34 +7285,31 @@ } }, "node_modules/pac-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz", - "integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.1.0.tgz", + "integrity": "sha512-Z5FnLVVZSnX7WjBg0mhDtydeRZ1xMcATZThjySQUHqr+0ksP8kqaw23fNKkaaN/Z8gwLUs/W7xdl0I75eP2Xyw==", "dev": true, "license": "MIT", "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.5", + "https-proxy-agent": "^7.0.6", "pac-resolver": "^7.0.1", - "socks-proxy-agent": "^8.0.4" + "socks-proxy-agent": "^8.0.5" }, "engines": { "node": ">= 14" } }, "node_modules/pac-proxy-agent/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", "dev": true, "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, "engines": { "node": ">= 14" } @@ -7267,13 +7329,13 @@ } }, "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { @@ -7435,9 +7497,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true, "license": "ISC" }, @@ -8131,34 +8193,31 @@ } }, "node_modules/proxy-agent": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", - "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "^4.3.4", "http-proxy-agent": "^7.0.1", - "https-proxy-agent": "^7.0.3", + "https-proxy-agent": "^7.0.6", "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.1", + "pac-proxy-agent": "^7.1.0", "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.2" + "socks-proxy-agent": "^8.0.5" }, "engines": { "node": ">= 14" } }, "node_modules/proxy-agent/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", "dev": true, "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, "engines": { "node": ">= 14" } @@ -8178,13 +8237,13 @@ } }, "node_modules/proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { @@ -8205,7 +8264,8 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/psl": { "version": "1.9.0", @@ -8214,9 +8274,9 @@ "dev": true }, "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", "dev": true, "license": "MIT", "dependencies": { @@ -8242,18 +8302,18 @@ } }, "node_modules/puppeteer": { - "version": "23.2.1", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-23.2.1.tgz", - "integrity": "sha512-IvJOBP2APjcIR2k0xKYYpAs/hAa39e6sn7y+qMlSWJDRraEc4JLfgCKlkXopzD5jrSc1iTANHWw7Rrj/w7bgpw==", + "version": "23.10.4", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-23.10.4.tgz", + "integrity": "sha512-i0sYIAIjdO9MoRfFqbkoWFnQYZVmNp8msbztTgG46KbOdoYAv4f56MFzdFwtC0lyZHtkP+yl0H7tP0dNg3RQYA==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "2.3.1", - "chromium-bidi": "0.6.4", + "@puppeteer/browsers": "2.6.1", + "chromium-bidi": "0.8.0", "cosmiconfig": "^9.0.0", - "devtools-protocol": "0.0.1330662", - "puppeteer-core": "23.2.1", + "devtools-protocol": "0.0.1367902", + "puppeteer-core": "23.10.4", "typed-query-selector": "^2.12.0" }, "bin": { @@ -8264,16 +8324,16 @@ } }, "node_modules/puppeteer-core": { - "version": "23.2.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.2.1.tgz", - "integrity": "sha512-AIFWfQ4Sq+En+OgqIUy8VJmD8yJHMDyt+qEmEVKW07zu5DKDNqysO7fzBZp0W85ShJTUlUf+RleKl4XLwFpUPA==", + "version": "23.10.4", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.10.4.tgz", + "integrity": "sha512-pQAY7+IFAndWDkDodsQGguW1/ifV5OMlGXJDspwtK49Asb7poJZ/V5rXJxVSpq57bWrJasjQBZ1X27z1oWVq4Q==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "2.3.1", - "chromium-bidi": "0.6.4", - "debug": "^4.3.6", - "devtools-protocol": "0.0.1330662", + "@puppeteer/browsers": "2.6.1", + "chromium-bidi": "0.8.0", + "debug": "^4.4.0", + "devtools-protocol": "0.0.1367902", "typed-query-selector": "^2.12.0", "ws": "^8.18.0" }, @@ -8781,13 +8841,13 @@ } }, "node_modules/socks-proxy-agent": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", - "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.1.1", + "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" }, @@ -8796,14 +8856,11 @@ } }, "node_modules/socks-proxy-agent/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", "dev": true, "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, "engines": { "node": ">= 14" } @@ -8838,10 +8895,11 @@ } }, "node_modules/spawnd": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/spawnd/-/spawnd-10.1.0.tgz", - "integrity": "sha512-QeRBuEIUVPHQ908BoyeiLw+MyB78vztbzH+C+Gfd4OfFTLE1PBPqhyN8smkct4esF+uyDr+TZ9mCwZPcQ1krhA==", + "version": "10.1.4", + "resolved": "https://registry.npmjs.org/spawnd/-/spawnd-10.1.4.tgz", + "integrity": "sha512-drqHc0mKJmtMsiGMOCwzlc5eZ0RPtRvT7tQAluW2A0qUc0G7TQ8KLcn3E6K5qzkLkH2UkS3nYQiVGULvvsD9dw==", "dev": true, + "license": "MIT", "dependencies": { "signal-exit": "^4.1.0", "tree-kill": "^1.2.2" @@ -8903,9 +8961,9 @@ } }, "node_modules/streamx": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.20.0.tgz", - "integrity": "sha512-ZGd1LhDeGFucr1CUCTBOS58ZhEendd0ttpGT3usTvosS4ntIwKN9LJFp+OeCSprsCPL14BXVRZlHGRY1V9PVzQ==", + "version": "2.21.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.21.1.tgz", + "integrity": "sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw==", "dev": true, "license": "MIT", "dependencies": { @@ -9345,21 +9403,15 @@ } }, "node_modules/text-decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.1.tgz", - "integrity": "sha512-8zll7REEv4GDD3x4/0pW+ppIxSNs7H1J10IKFZsuOMscumCdM2a+toDGLPA3T+1+fLBql4zbt5z83GEQGGV5VA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", "dev": true, "license": "Apache-2.0", "dependencies": { "b4a": "^1.6.4" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -9557,20 +9609,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "dev": true, "funding": [ { @@ -9588,8 +9630,8 @@ ], "license": "MIT", "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" }, "bin": { "update-browserslist-db": "cli.js" @@ -9631,9 +9673,9 @@ "dev": true }, "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", "dev": true, "funding": [ "https://github.com/sponsors/broofa", @@ -9677,14 +9719,14 @@ } }, "node_modules/wait-on": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.2.0.tgz", - "integrity": "sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.1.tgz", + "integrity": "sha512-1wWQOyR2LVVtaqrcIL2+OM+x7bkpmzVROa0Nf6FryXkS+er5Sa1kzFGjzZRqLnHa3n1rACFLeTwUqE1ETL9Mig==", "dev": true, "license": "MIT", "dependencies": { - "axios": "^1.6.1", - "joi": "^17.11.0", + "axios": "^1.7.7", + "joi": "^17.13.3", "lodash": "^4.17.21", "minimist": "^1.2.8", "rxjs": "^7.8.1" @@ -9728,18 +9770,19 @@ } }, "node_modules/webpack": { - "version": "5.94.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", - "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.7.1", - "acorn-import-attributes": "^1.9.5", - "browserslist": "^4.21.10", + "version": "5.97.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz", + "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", diff --git a/package.json b/package.json index 2276cfc5..5cd5f6d8 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "license": "MIT", "repository": "https://github.com/videlais/snowman/", "scripts": { - "test": "jest --coverage", + "test": "jest test/jsdom/* --coverage", "lint": "eslint src/*.js test/*.js --fix", "build": "webpack", "package": "npm run build && node build-format.js", @@ -21,32 +21,32 @@ "ejs": "^3.1.10", "jquery": "^3.7.1", "markdown-it": "^14.1.0", - "mingo": "^6.4.15", + "mingo": "^6.5.1", "normalize.css": "^8.0.1", "underscore": "^1.13.7" }, "devDependencies": { - "@eslint/js": "^9.9.1", + "@eslint/js": "^9.17.0", "@types/expect-puppeteer": "^5.0.6", "@types/jest-environment-puppeteer": "^5.0.6", "@types/puppeteer": "^7.0.4", "css-loader": "^7.1.2", "css-minimizer-webpack-plugin": "^7.0.0", - "eslint": "^9.9.1", - "eslint-plugin-jest": "^28.8.2", - "eslint-plugin-jsdoc": "^50.2.2", - "extwee": "^2.2.3", - "globals": "^15.9.0", + "eslint": "^9.17.0", + "eslint-plugin-jest": "^28.9.0", + "eslint-plugin-jsdoc": "^50.6.1", + "extwee": "^2.2.4", + "globals": "^15.13.0", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", - "jest-puppeteer": "^10.1.0", - "mini-css-extract-plugin": "^2.9.1", + "jest-puppeteer": "^10.1.4", + "mini-css-extract-plugin": "^2.9.2", "open": "^10.1.0", "open-cli": "^8.0.0", - "puppeteer": "^23.2.1", + "puppeteer": "^23.10.4", "shelljs": "^0.8.5", "style-loader": "^4.0.0", - "webpack": "^5.94.0", + "webpack": "^5.97.1", "webpack-cli": "^5.1.4" } } diff --git a/src/Storage.js b/src/Storage.js index c90ad42b..a7b3eb22 100644 --- a/src/Storage.js +++ b/src/Storage.js @@ -92,9 +92,8 @@ class Storage { window.localStorage.setItem('testKey', 'test'); window.localStorage.removeItem('testKey'); result = true; - } finally { - // If an error was thrown, we do nothing. - // The method will return false if it did not work. + } catch(error) { + console.info('Info: localStorage is not available. Error:', error); } // Return result diff --git a/src/Storylets.js b/src/Storylets.js index e348697f..cc18c2ec 100644 --- a/src/Storylets.js +++ b/src/Storylets.js @@ -30,7 +30,8 @@ class Storylets { try { // Try to parse string into object passageRequirements = JSON.parse(captured); - } finally { + } catch (error) { + console.info('INFO: Failed to parse passage requirements. Error:', error); // Ignore the error } diff --git a/test/setup.js b/test/setup.js index 536e360a..9a3dd2c8 100644 --- a/test/setup.js +++ b/test/setup.js @@ -1,3 +1,3 @@ -const { jest } = require('@jest/globals'); +//const { jest } = require('@jest/globals'); -global.jest = jest; \ No newline at end of file +//global.jest = jest; \ No newline at end of file