/** * @typedef {import('hast').Element} Element * @typedef {import('hast').Parents} Parents */ /** * @callback OmitHandle * Check if a tag can be omitted. * @param {Element} element * Element to check. * @param {number | undefined} index * Index of element in parent. * @param {Parents | undefined} parent * Parent of element. * @returns {boolean} * Whether to omit a tag. * */ const own = {}.hasOwnProperty /** * Factory to check if a given node can have a tag omitted. * * @param {Record} handlers * Omission handlers, where each key is a tag name, and each value is the * corresponding handler. * @returns {OmitHandle} * Whether to omit a tag of an element. */ export function omission(handlers) { return omit /** * Check if a given node can have a tag omitted. * * @type {OmitHandle} */ function omit(node, index, parent) { return ( own.call(handlers, node.tagName) && handlers[node.tagName](node, index, parent) ) } }