summaryrefslogtreecommitdiff
path: root/includes/external/addressbook/node_modules/cheerio/lib/api/traversing.js
diff options
context:
space:
mode:
authorRaindropsSys <contact@minteck.org>2023-04-06 22:18:28 +0200
committerRaindropsSys <contact@minteck.org>2023-04-06 22:18:28 +0200
commit83354b2b88218090988dd6e526b0a2505b57e0f1 (patch)
treee3c73c38a122a78bb7e66fbb99056407edd9d4b9 /includes/external/addressbook/node_modules/cheerio/lib/api/traversing.js
parent47b8f2299a483024c4a6a8876af825a010954caa (diff)
downloadpluralconnect-83354b2b88218090988dd6e526b0a2505b57e0f1.tar.gz
pluralconnect-83354b2b88218090988dd6e526b0a2505b57e0f1.tar.bz2
pluralconnect-83354b2b88218090988dd6e526b0a2505b57e0f1.zip
Updated 5 files and added 1110 files (automated)
Diffstat (limited to 'includes/external/addressbook/node_modules/cheerio/lib/api/traversing.js')
-rw-r--r--includes/external/addressbook/node_modules/cheerio/lib/api/traversing.js907
1 files changed, 907 insertions, 0 deletions
diff --git a/includes/external/addressbook/node_modules/cheerio/lib/api/traversing.js b/includes/external/addressbook/node_modules/cheerio/lib/api/traversing.js
new file mode 100644
index 0000000..1a43a58
--- /dev/null
+++ b/includes/external/addressbook/node_modules/cheerio/lib/api/traversing.js
@@ -0,0 +1,907 @@
+"use strict";
+/**
+ * Methods for traversing the DOM structure.
+ *
+ * @module cheerio/traversing
+ */
+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 __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
+ if (ar || !(i in from)) {
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
+ ar[i] = from[i];
+ }
+ }
+ return to.concat(ar || Array.prototype.slice.call(from));
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.addBack = exports.add = exports.end = exports.slice = exports.index = exports.toArray = exports.get = exports.eq = exports.last = exports.first = exports.has = exports.not = exports.is = exports.filterArray = exports.filter = exports.map = exports.each = exports.contents = exports.children = exports.siblings = exports.prevUntil = exports.prevAll = exports.prev = exports.nextUntil = exports.nextAll = exports.next = exports.closest = exports.parentsUntil = exports.parents = exports.parent = exports.find = void 0;
+var domhandler_1 = require("domhandler");
+var select = __importStar(require("cheerio-select"));
+var utils_js_1 = require("../utils.js");
+var static_js_1 = require("../static.js");
+var domutils_1 = require("domutils");
+var reSiblingSelector = /^\s*[~+]/;
+/**
+ * Get the descendants of each element in the current set of matched elements,
+ * filtered by a selector, jQuery object, or element.
+ *
+ * @category Traversing
+ * @example
+ *
+ * ```js
+ * $('#fruits').find('li').length;
+ * //=> 3
+ * $('#fruits').find($('.apple')).length;
+ * //=> 1
+ * ```
+ *
+ * @param selectorOrHaystack - Element to look for.
+ * @returns The found elements.
+ * @see {@link https://api.jquery.com/find/}
+ */
+function find(selectorOrHaystack) {
+ var _a;
+ if (!selectorOrHaystack) {
+ return this._make([]);
+ }
+ var context = this.toArray();
+ if (typeof selectorOrHaystack !== 'string') {
+ var haystack = (0, utils_js_1.isCheerio)(selectorOrHaystack)
+ ? selectorOrHaystack.toArray()
+ : [selectorOrHaystack];
+ return this._make(haystack.filter(function (elem) { return context.some(function (node) { return (0, static_js_1.contains)(node, elem); }); }));
+ }
+ var elems = reSiblingSelector.test(selectorOrHaystack)
+ ? context
+ : this.children().toArray();
+ var options = {
+ context: context,
+ root: (_a = this._root) === null || _a === void 0 ? void 0 : _a[0],
+ // Pass options that are recognized by `cheerio-select`
+ xmlMode: this.options.xmlMode,
+ lowerCaseTags: this.options.lowerCaseTags,
+ lowerCaseAttributeNames: this.options.lowerCaseAttributeNames,
+ pseudos: this.options.pseudos,
+ quirksMode: this.options.quirksMode,
+ };
+ return this._make(select.select(selectorOrHaystack, elems, options));
+}
+exports.find = find;
+/**
+ * Creates a matcher, using a particular mapping function. Matchers provide a
+ * function that finds elements using a generating function, supporting filtering.
+ *
+ * @private
+ * @param matchMap - Mapping function.
+ * @returns - Function for wrapping generating functions.
+ */
+function _getMatcher(matchMap) {
+ return function (fn) {
+ var postFns = [];
+ for (var _i = 1; _i < arguments.length; _i++) {
+ postFns[_i - 1] = arguments[_i];
+ }
+ return function (selector) {
+ var _a;
+ var matched = matchMap(fn, this);
+ if (selector) {
+ matched = filterArray(matched, selector, this.options.xmlMode, (_a = this._root) === null || _a === void 0 ? void 0 : _a[0]);
+ }
+ return this._make(
+ // Post processing is only necessary if there is more than one element.
+ this.length > 1 && matched.length > 1
+ ? postFns.reduce(function (elems, fn) { return fn(elems); }, matched)
+ : matched);
+ };
+ };
+}
+/** Matcher that adds multiple elements for each entry in the input. */
+var _matcher = _getMatcher(function (fn, elems) {
+ var _a;
+ var ret = [];
+ for (var i = 0; i < elems.length; i++) {
+ var value = fn(elems[i]);
+ ret.push(value);
+ }
+ return (_a = new Array()).concat.apply(_a, ret);
+});
+/** Matcher that adds at most one element for each entry in the input. */
+var _singleMatcher = _getMatcher(function (fn, elems) {
+ var ret = [];
+ for (var i = 0; i < elems.length; i++) {
+ var value = fn(elems[i]);
+ if (value !== null) {
+ ret.push(value);
+ }
+ }
+ return ret;
+});
+/**
+ * Matcher that supports traversing until a condition is met.
+ *
+ * @returns A function usable for `*Until` methods.
+ */
+function _matchUntil(nextElem) {
+ var postFns = [];
+ for (var _i = 1; _i < arguments.length; _i++) {
+ postFns[_i - 1] = arguments[_i];
+ }
+ // We use a variable here that is used from within the matcher.
+ var matches = null;
+ var innerMatcher = _getMatcher(function (nextElem, elems) {
+ var matched = [];
+ (0, utils_js_1.domEach)(elems, function (elem) {
+ for (var next_1; (next_1 = nextElem(elem)); elem = next_1) {
+ // FIXME: `matched` might contain duplicates here and the index is too large.
+ if (matches === null || matches === void 0 ? void 0 : matches(next_1, matched.length))
+ break;
+ matched.push(next_1);
+ }
+ });
+ return matched;
+ }).apply(void 0, __spreadArray([nextElem], postFns, false));
+ return function (selector, filterSelector) {
+ var _this = this;
+ // Override `matches` variable with the new target.
+ matches =
+ typeof selector === 'string'
+ ? function (elem) { return select.is(elem, selector, _this.options); }
+ : selector
+ ? getFilterFn(selector)
+ : null;
+ var ret = innerMatcher.call(this, filterSelector);
+ // Set `matches` to `null`, so we don't waste memory.
+ matches = null;
+ return ret;
+ };
+}
+function _removeDuplicates(elems) {
+ return Array.from(new Set(elems));
+}
+/**
+ * Get the parent of each element in the current set of matched elements,
+ * optionally filtered by a selector.
+ *
+ * @category Traversing
+ * @example
+ *
+ * ```js
+ * $('.pear').parent().attr('id');
+ * //=> fruits
+ * ```
+ *
+ * @param selector - If specified filter for parent.
+ * @returns The parents.
+ * @see {@link https://api.jquery.com/parent/}
+ */
+exports.parent = _singleMatcher(function (_a) {
+ var parent = _a.parent;
+ return (parent && !(0, domhandler_1.isDocument)(parent) ? parent : null);
+}, _removeDuplicates);
+/**
+ * Get a set of parents filtered by `selector` of each element in the current
+ * set of match elements.
+ *
+ * @category Traversing
+ * @example
+ *
+ * ```js
+ * $('.orange').parents().length;
+ * //=> 2
+ * $('.orange').parents('#fruits').length;
+ * //=> 1
+ * ```
+ *
+ * @param selector - If specified filter for parents.
+ * @returns The parents.
+ * @see {@link https://api.jquery.com/parents/}
+ */
+exports.parents = _matcher(function (elem) {
+ var matched = [];
+ while (elem.parent && !(0, domhandler_1.isDocument)(elem.parent)) {
+ matched.push(elem.parent);
+ elem = elem.parent;
+ }
+ return matched;
+}, domutils_1.uniqueSort, function (elems) { return elems.reverse(); });
+/**
+ * Get the ancestors of each element in the current set of matched elements, up
+ * to but not including the element matched by the selector, DOM node, or cheerio object.
+ *
+ * @category Traversing
+ * @example
+ *
+ * ```js
+ * $('.orange').parentsUntil('#food').length;
+ * //=> 1
+ * ```
+ *
+ * @param selector - Selector for element to stop at.
+ * @param filterSelector - Optional filter for parents.
+ * @returns The parents.
+ * @see {@link https://api.jquery.com/parentsUntil/}
+ */
+exports.parentsUntil = _matchUntil(function (_a) {
+ var parent = _a.parent;
+ return (parent && !(0, domhandler_1.isDocument)(parent) ? parent : null);
+}, domutils_1.uniqueSort, function (elems) { return elems.reverse(); });
+/**
+ * For each element in the set, get the first element that matches the selector
+ * by testing the element itself and traversing up through its ancestors in the DOM tree.
+ *
+ * @category Traversing
+ * @example
+ *
+ * ```js
+ * $('.orange').closest();
+ * //=> []
+ *
+ * $('.orange').closest('.apple');
+ * // => []
+ *
+ * $('.orange').closest('li');
+ * //=> [<li class="orange">Orange</li>]
+ *
+ * $('.orange').closest('#fruits');
+ * //=> [<ul id="fruits"> ... </ul>]
+ * ```
+ *
+ * @param selector - Selector for the element to find.
+ * @returns The closest nodes.
+ * @see {@link https://api.jquery.com/closest/}
+ */
+function closest(selector) {
+ var _a;
+ var set = [];
+ if (!selector) {
+ return this._make(set);
+ }
+ var selectOpts = {
+ xmlMode: this.options.xmlMode,
+ root: (_a = this._root) === null || _a === void 0 ? void 0 : _a[0],
+ };
+ var selectFn = typeof selector === 'string'
+ ? function (elem) { return select.is(elem, selector, selectOpts); }
+ : getFilterFn(selector);
+ (0, utils_js_1.domEach)(this, function (elem) {
+ while (elem && (0, utils_js_1.isTag)(elem)) {
+ if (selectFn(elem, 0)) {
+ // Do not add duplicate elements to the set
+ if (!set.includes(elem)) {
+ set.push(elem);
+ }
+ break;
+ }
+ elem = elem.parent;
+ }
+ });
+ return this._make(set);
+}
+exports.closest = closest;
+/**
+ * Gets the next sibling of the first selected element, optionally filtered by a selector.
+ *
+ * @category Traversing
+ * @example
+ *
+ * ```js
+ * $('.apple').next().hasClass('orange');
+ * //=> true
+ * ```
+ *
+ * @param selector - If specified filter for sibling.
+ * @returns The next nodes.
+ * @see {@link https://api.jquery.com/next/}
+ */
+exports.next = _singleMatcher(function (elem) { return (0, domutils_1.nextElementSibling)(elem); });
+/**
+ * Gets all the following siblings of the first selected element, optionally
+ * filtered by a selector.
+ *
+ * @category Traversing
+ * @example
+ *
+ * ```js
+ * $('.apple').nextAll();
+ * //=> [<li class="orange">Orange</li>, <li class="pear">Pear</li>]
+ * $('.apple').nextAll('.orange');
+ * //=> [<li class="orange">Orange</li>]
+ * ```
+ *
+ * @param selector - If specified filter for siblings.
+ * @returns The next nodes.
+ * @see {@link https://api.jquery.com/nextAll/}
+ */
+exports.nextAll = _matcher(function (elem) {
+ var matched = [];
+ while (elem.next) {
+ elem = elem.next;
+ if ((0, utils_js_1.isTag)(elem))
+ matched.push(elem);
+ }
+ return matched;
+}, _removeDuplicates);
+/**
+ * Gets all the following siblings up to but not including the element matched
+ * by the selector, optionally filtered by another selector.
+ *
+ * @category Traversing
+ * @example
+ *
+ * ```js
+ * $('.apple').nextUntil('.pear');
+ * //=> [<li class="orange">Orange</li>]
+ * ```
+ *
+ * @param selector - Selector for element to stop at.
+ * @param filterSelector - If specified filter for siblings.
+ * @returns The next nodes.
+ * @see {@link https://api.jquery.com/nextUntil/}
+ */
+exports.nextUntil = _matchUntil(function (el) { return (0, domutils_1.nextElementSibling)(el); }, _removeDuplicates);
+/**
+ * Gets the previous sibling of the first selected element optionally filtered
+ * by a selector.
+ *
+ * @category Traversing
+ * @example
+ *
+ * ```js
+ * $('.orange').prev().hasClass('apple');
+ * //=> true
+ * ```
+ *
+ * @param selector - If specified filter for siblings.
+ * @returns The previous nodes.
+ * @see {@link https://api.jquery.com/prev/}
+ */
+exports.prev = _singleMatcher(function (elem) { return (0, domutils_1.prevElementSibling)(elem); });
+/**
+ * Gets all the preceding siblings of the first selected element, optionally
+ * filtered by a selector.
+ *
+ * @category Traversing
+ * @example
+ *
+ * ```js
+ * $('.pear').prevAll();
+ * //=> [<li class="orange">Orange</li>, <li class="apple">Apple</li>]
+ *
+ * $('.pear').prevAll('.orange');
+ * //=> [<li class="orange">Orange</li>]
+ * ```
+ *
+ * @param selector - If specified filter for siblings.
+ * @returns The previous nodes.
+ * @see {@link https://api.jquery.com/prevAll/}
+ */
+exports.prevAll = _matcher(function (elem) {
+ var matched = [];
+ while (elem.prev) {
+ elem = elem.prev;
+ if ((0, utils_js_1.isTag)(elem))
+ matched.push(elem);
+ }
+ return matched;
+}, _removeDuplicates);
+/**
+ * Gets all the preceding siblings up to but not including the element matched
+ * by the selector, optionally filtered by another selector.
+ *
+ * @category Traversing
+ * @example
+ *
+ * ```js
+ * $('.pear').prevUntil('.apple');
+ * //=> [<li class="orange">Orange</li>]
+ * ```
+ *
+ * @param selector - Selector for element to stop at.
+ * @param filterSelector - If specified filter for siblings.
+ * @returns The previous nodes.
+ * @see {@link https://api.jquery.com/prevUntil/}
+ */
+exports.prevUntil = _matchUntil(function (el) { return (0, domutils_1.prevElementSibling)(el); }, _removeDuplicates);
+/**
+ * Get the siblings of each element (excluding the element) in the set of
+ * matched elements, optionally filtered by a selector.
+ *
+ * @category Traversing
+ * @example
+ *
+ * ```js
+ * $('.pear').siblings().length;
+ * //=> 2
+ *
+ * $('.pear').siblings('.orange').length;
+ * //=> 1
+ * ```
+ *
+ * @param selector - If specified filter for siblings.
+ * @returns The siblings.
+ * @see {@link https://api.jquery.com/siblings/}
+ */
+exports.siblings = _matcher(function (elem) {
+ return (0, domutils_1.getSiblings)(elem).filter(function (el) { return (0, utils_js_1.isTag)(el) && el !== elem; });
+}, domutils_1.uniqueSort);
+/**
+ * Gets the element children of each element in the set of matched elements.
+ *
+ * @category Traversing
+ * @example
+ *
+ * ```js
+ * $('#fruits').children().length;
+ * //=> 3
+ *
+ * $('#fruits').children('.pear').text();
+ * //=> Pear
+ * ```
+ *
+ * @param selector - If specified filter for children.
+ * @returns The children.
+ * @see {@link https://api.jquery.com/children/}
+ */
+exports.children = _matcher(function (elem) { return (0, domutils_1.getChildren)(elem).filter(utils_js_1.isTag); }, _removeDuplicates);
+/**
+ * Gets the children of each element in the set of matched elements, including
+ * text and comment nodes.
+ *
+ * @category Traversing
+ * @example
+ *
+ * ```js
+ * $('#fruits').contents().length;
+ * //=> 3
+ * ```
+ *
+ * @returns The children.
+ * @see {@link https://api.jquery.com/contents/}
+ */
+function contents() {
+ var elems = this.toArray().reduce(function (newElems, elem) {
+ return (0, domhandler_1.hasChildren)(elem) ? newElems.concat(elem.children) : newElems;
+ }, []);
+ return this._make(elems);
+}
+exports.contents = contents;
+/**
+ * Iterates over a cheerio object, executing a function for each matched
+ * element. When the callback is fired, the function is fired in the context of
+ * the DOM element, so `this` refers to the current element, which is equivalent
+ * to the function parameter `element`. To break out of the `each` loop early,
+ * return with `false`.
+ *
+ * @category Traversing
+ * @example
+ *
+ * ```js
+ * const fruits = [];
+ *
+ * $('li').each(function (i, elem) {
+ * fruits[i] = $(this).text();
+ * });
+ *
+ * fruits.join(', ');
+ * //=> Apple, Orange, Pear
+ * ```
+ *
+ * @param fn - Function to execute.
+ * @returns The instance itself, useful for chaining.
+ * @see {@link https://api.jquery.com/each/}
+ */
+function each(fn) {
+ var i = 0;
+ var len = this.length;
+ while (i < len && fn.call(this[i], i, this[i]) !== false)
+ ++i;
+ return this;
+}
+exports.each = each;
+/**
+ * Pass each element in the current matched set through a function, producing a
+ * new Cheerio object containing the return values. The function can return an
+ * individual data item or an array of data items to be inserted into the
+ * resulting set. If an array is returned, the elements inside the array are
+ * inserted into the set. If the function returns null or undefined, no element
+ * will be inserted.
+ *
+ * @category Traversing
+ * @example
+ *
+ * ```js
+ * $('li')
+ * .map(function (i, el) {
+ * // this === el
+ * return $(this).text();
+ * })
+ * .toArray()
+ * .join(' ');
+ * //=> "apple orange pear"
+ * ```
+ *
+ * @param fn - Function to execute.
+ * @returns The mapped elements, wrapped in a Cheerio collection.
+ * @see {@link https://api.jquery.com/map/}
+ */
+function map(fn) {
+ var elems = [];
+ for (var i = 0; i < this.length; i++) {
+ var el = this[i];
+ var val = fn.call(el, i, el);
+ if (val != null) {
+ elems = elems.concat(val);
+ }
+ }
+ return this._make(elems);
+}
+exports.map = map;
+/**
+ * Creates a function to test if a filter is matched.
+ *
+ * @param match - A filter.
+ * @returns A function that determines if a filter has been matched.
+ */
+function getFilterFn(match) {
+ if (typeof match === 'function') {
+ return function (el, i) { return match.call(el, i, el); };
+ }
+ if ((0, utils_js_1.isCheerio)(match)) {
+ return function (el) { return Array.prototype.includes.call(match, el); };
+ }
+ return function (el) {
+ return match === el;
+ };
+}
+function filter(match) {
+ var _a;
+ return this._make(filterArray(this.toArray(), match, this.options.xmlMode, (_a = this._root) === null || _a === void 0 ? void 0 : _a[0]));
+}
+exports.filter = filter;
+function filterArray(nodes, match, xmlMode, root) {
+ return typeof match === 'string'
+ ? select.filter(match, nodes, { xmlMode: xmlMode, root: root })
+ : nodes.filter(getFilterFn(match));
+}
+exports.filterArray = filterArray;
+/**
+ * Checks the current list of elements and returns `true` if _any_ of the
+ * elements match the selector. If using an element or Cheerio selection,
+ * returns `true` if _any_ of the elements match. If using a predicate function,
+ * the function is executed in the context of the selected element, so `this`
+ * refers to the current element.
+ *
+ * @category Attributes
+ * @param selector - Selector for the selection.
+ * @returns Whether or not the selector matches an element of the instance.
+ * @see {@link https://api.jquery.com/is/}
+ */
+function is(selector) {
+ var nodes = this.toArray();
+ return typeof selector === 'string'
+ ? select.some(nodes.filter(utils_js_1.isTag), selector, this.options)
+ : selector
+ ? nodes.some(getFilterFn(selector))
+ : false;
+}
+exports.is = is;
+/**
+ * Remove elements from the set of matched elements. Given a Cheerio object that
+ * represents a set of DOM elements, the `.not()` method constructs a new
+ * Cheerio object from a subset of the matching elements. The supplied selector
+ * is tested against each element; the elements that don't match the selector
+ * will be included in the result.
+ *
+ * The `.not()` method can take a function as its argument in the same way that
+ * `.filter()` does. Elements for which the function returns `true` are excluded
+ * from the filtered set; all other elements are included.
+ *
+ * @category Traversing
+ * @example <caption>Selector</caption>
+ *
+ * ```js
+ * $('li').not('.apple').length;
+ * //=> 2
+ * ```
+ *
+ * @example <caption>Function</caption>
+ *
+ * ```js
+ * $('li').not(function (i, el) {
+ * // this === el
+ * return $(this).attr('class') === 'orange';
+ * }).length; //=> 2
+ * ```
+ *
+ * @param match - Value to look for, following the rules above.
+ * @param container - Optional node to filter instead.
+ * @returns The filtered collection.
+ * @see {@link https://api.jquery.com/not/}
+ */
+function not(match) {
+ var nodes = this.toArray();
+ if (typeof match === 'string') {
+ var matches_1 = new Set(select.filter(match, nodes, this.options));
+ nodes = nodes.filter(function (el) { return !matches_1.has(el); });
+ }
+ else {
+ var filterFn_1 = getFilterFn(match);
+ nodes = nodes.filter(function (el, i) { return !filterFn_1(el, i); });
+ }
+ return this._make(nodes);
+}
+exports.not = not;
+/**
+ * Filters the set of matched elements to only those which have the given DOM
+ * element as a descendant or which have a descendant that matches the given
+ * selector. Equivalent to `.filter(':has(selector)')`.
+ *
+ * @category Traversing
+ * @example <caption>Selector</caption>
+ *
+ * ```js
+ * $('ul').has('.pear').attr('id');
+ * //=> fruits
+ * ```
+ *
+ * @example <caption>Element</caption>
+ *
+ * ```js
+ * $('ul').has($('.pear')[0]).attr('id');
+ * //=> fruits
+ * ```
+ *
+ * @param selectorOrHaystack - Element to look for.
+ * @returns The filtered collection.
+ * @see {@link https://api.jquery.com/has/}
+ */
+function has(selectorOrHaystack) {
+ var _this = this;
+ return this.filter(typeof selectorOrHaystack === 'string'
+ ? // Using the `:has` selector here short-circuits searches.
+ ":has(".concat(selectorOrHaystack, ")")
+ : function (_, el) { return _this._make(el).find(selectorOrHaystack).length > 0; });
+}
+exports.has = has;
+/**
+ * Will select the first element of a cheerio object.
+ *
+ * @category Traversing
+ * @example
+ *
+ * ```js
+ * $('#fruits').children().first().text();
+ * //=> Apple
+ * ```
+ *
+ * @returns The first element.
+ * @see {@link https://api.jquery.com/first/}
+ */
+function first() {
+ return this.length > 1 ? this._make(this[0]) : this;
+}
+exports.first = first;
+/**
+ * Will select the last element of a cheerio object.
+ *
+ * @category Traversing
+ * @example
+ *
+ * ```js
+ * $('#fruits').children().last().text();
+ * //=> Pear
+ * ```
+ *
+ * @returns The last element.
+ * @see {@link https://api.jquery.com/last/}
+ */
+function last() {
+ return this.length > 0 ? this._make(this[this.length - 1]) : this;
+}
+exports.last = last;
+/**
+ * Reduce the set of matched elements to the one at the specified index. Use
+ * `.eq(-i)` to count backwards from the last selected element.
+ *
+ * @category Traversing
+ * @example
+ *
+ * ```js
+ * $('li').eq(0).text();
+ * //=> Apple
+ *
+ * $('li').eq(-1).text();
+ * //=> Pear
+ * ```
+ *
+ * @param i - Index of the element to select.
+ * @returns The element at the `i`th position.
+ * @see {@link https://api.jquery.com/eq/}
+ */
+function eq(i) {
+ var _a;
+ i = +i;
+ // Use the first identity optimization if possible
+ if (i === 0 && this.length <= 1)
+ return this;
+ if (i < 0)
+ i = this.length + i;
+ return this._make((_a = this[i]) !== null && _a !== void 0 ? _a : []);
+}
+exports.eq = eq;
+function get(i) {
+ if (i == null) {
+ return this.toArray();
+ }
+ return this[i < 0 ? this.length + i : i];
+}
+exports.get = get;
+/**
+ * Retrieve all the DOM elements contained in the jQuery set as an array.
+ *
+ * @example
+ *
+ * ```js
+ * $('li').toArray();
+ * //=> [ {...}, {...}, {...} ]
+ * ```
+ *
+ * @returns The contained items.
+ */
+function toArray() {
+ return Array.prototype.slice.call(this);
+}
+exports.toArray = toArray;
+/**
+ * Search for a given element from among the matched elements.
+ *
+ * @category Traversing
+ * @example
+ *
+ * ```js
+ * $('.pear').index();
+ * //=> 2 $('.orange').index('li');
+ * //=> 1
+ * $('.apple').index($('#fruit, li'));
+ * //=> 1
+ * ```
+ *
+ * @param selectorOrNeedle - Element to look for.
+ * @returns The index of the element.
+ * @see {@link https://api.jquery.com/index/}
+ */
+function index(selectorOrNeedle) {
+ var $haystack;
+ var needle;
+ if (selectorOrNeedle == null) {
+ $haystack = this.parent().children();
+ needle = this[0];
+ }
+ else if (typeof selectorOrNeedle === 'string') {
+ $haystack = this._make(selectorOrNeedle);
+ needle = this[0];
+ }
+ else {
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
+ $haystack = this;
+ needle = (0, utils_js_1.isCheerio)(selectorOrNeedle)
+ ? selectorOrNeedle[0]
+ : selectorOrNeedle;
+ }
+ return Array.prototype.indexOf.call($haystack, needle);
+}
+exports.index = index;
+/**
+ * Gets the elements matching the specified range (0-based position).
+ *
+ * @category Traversing
+ * @example
+ *
+ * ```js
+ * $('li').slice(1).eq(0).text();
+ * //=> 'Orange'
+ *
+ * $('li').slice(1, 2).length;
+ * //=> 1
+ * ```
+ *
+ * @param start - A position at which the elements begin to be selected. If
+ * negative, it indicates an offset from the end of the set.
+ * @param end - A position at which the elements stop being selected. If
+ * negative, it indicates an offset from the end of the set. If omitted, the
+ * range continues until the end of the set.
+ * @returns The elements matching the specified range.
+ * @see {@link https://api.jquery.com/slice/}
+ */
+function slice(start, end) {
+ return this._make(Array.prototype.slice.call(this, start, end));
+}
+exports.slice = slice;
+/**
+ * End the most recent filtering operation in the current chain and return the
+ * set of matched elements to its previous state.
+ *
+ * @category Traversing
+ * @example
+ *
+ * ```js
+ * $('li').eq(0).end().length;
+ * //=> 3
+ * ```
+ *
+ * @returns The previous state of the set of matched elements.
+ * @see {@link https://api.jquery.com/end/}
+ */
+function end() {
+ var _a;
+ return (_a = this.prevObject) !== null && _a !== void 0 ? _a : this._make([]);
+}
+exports.end = end;
+/**
+ * Add elements to the set of matched elements.
+ *
+ * @category Traversing
+ * @example
+ *
+ * ```js
+ * $('.apple').add('.orange').length;
+ * //=> 2
+ * ```
+ *
+ * @param other - Elements to add.
+ * @param context - Optionally the context of the new selection.
+ * @returns The combined set.
+ * @see {@link https://api.jquery.com/add/}
+ */
+function add(other, context) {
+ var selection = this._make(other, context);
+ var contents = (0, domutils_1.uniqueSort)(__spreadArray(__spreadArray([], this.get(), true), selection.get(), true));
+ return this._make(contents);
+}
+exports.add = add;
+/**
+ * Add the previous set of elements on the stack to the current set, optionally
+ * filtered by a selector.
+ *
+ * @category Traversing
+ * @example
+ *
+ * ```js
+ * $('li').eq(0).addBack('.orange').length;
+ * //=> 2
+ * ```
+ *
+ * @param selector - Selector for the elements to add.
+ * @returns The combined set.
+ * @see {@link https://api.jquery.com/addBack/}
+ */
+function addBack(selector) {
+ return this.prevObject
+ ? this.add(selector ? this.prevObject.filter(selector) : this.prevObject)
+ : this;
+}
+exports.addBack = addBack;
+//# sourceMappingURL=traversing.js.map \ No newline at end of file