UNPKG

caniemail

Version:

HTML and CSS Feature Support for Email Clients from caniemail.com

66 lines 2.43 kB
import css from '@adobe/css-tools'; import * as htmlparser from 'htmlparser2'; export function fromTitleEntries(entries) { return Object.fromEntries(entries.filter((entry) => entry !== void 0).map((entry) => [entry.title, entry.value])); } export const getTitleMatches = (pairs, targetValue, comparer) => Object.entries(pairs) .filter(([, value]) => (comparer ? comparer(value, targetValue) : targetValue.includes(value))) .map(([title]) => title); const getStyleNodes = (node) => { if (node.type === htmlparser.ElementType.Style) return [node]; const results = []; if ('childNodes' in node) { for (const child of node.childNodes) { results.push(...getStyleNodes(child)); } } return results; }; export const groupIssues = (issues) => { const groupedIssues = new Map(); for (const [client, clientIssues] of issues.entries()) { for (const issue of clientIssues) { if (!issue.position) continue; const key = `${issue.position.start.line}:${issue.position.start.column}:${issue.title}`; if (!groupedIssues.has(key)) { groupedIssues.set(key, { issue, clients: [client] }); } else { groupedIssues.get(key).clients.push(client); } } } return Array.from(groupedIssues.values()); }; export const parseCss = (cssContent) => css.parse(cssContent, { silent: true }); export const parseHtml = (html) => { const document = htmlparser.parseDocument(html, { withStartIndices: true, withEndIndices: true }); const styleNodes = []; for (const childNode of document.childNodes) { styleNodes.push(...getStyleNodes(childNode)); } const stylesheets = []; for (const styleNode of styleNodes) { const styleTextNode = styleNode.childNodes[0]; if (styleTextNode !== void 0) { stylesheets.push(parseCss(styleTextNode.data)); } } return { document, stylesheets }; }; export const sortIssues = (groupedIssues) => { return [...groupedIssues].sort((a, b) => { const aPos = a.issue.position.start; const bPos = b.issue.position.start; return aPos.line === bPos.line ? aPos.column - bPos.column : aPos.line - bPos.line; }); }; //# sourceMappingURL=helpers.js.map