tickle/modules/utils/querySelectorAll.mjs
2023-05-09 04:00:53 +02:00

41 lines
1.1 KiB
JavaScript

//@ts-check
/**
* A small utility to query elements and get back an array
* @template {keyof HTMLElementTagNameMap} K
* @type {{
* (selector: K): HTMLElementTagNameMap[K][]
* (parent: ParentNode, selector: K): HTMLElementTagNameMap[K][]
* }}
*/
// @ts-ignore
export const querySelectorAll = (parent, selector) =>
// @ts-ignore
typeof selector === "undefined"
? // @ts-ignore
querySelectorDoc(/** @type {keyof HTMLElementTagNameMap} */ (parent))
: querySelectorParent(parent, selector);
/**
* A small utility to query elements in the document and get back an array
* @template {keyof HTMLElementTagNameMap} K
* @param {K} selector
* @returns {HTMLElementTagNameMap[K][]}
*/
export const querySelectorDoc = (selector) => [
...document.querySelectorAll(selector),
];
/**
* A small utility to query elements in a parent and get back an array
* @template {keyof HTMLElementTagNameMap} K
* @param {ParentNode} parent
* @param {K} selector
* @returns {HTMLElementTagNameMap[K][]}
*/
export const querySelectorParent = (parent, selector) => [
...parent.querySelectorAll(selector),
];
export default querySelectorAll;