From ddc733dc53228b5c11b5348d1ac8803299218949 Mon Sep 17 00:00:00 2001 From: riceharvest Date: Mon, 23 Mar 2026 19:07:11 +0100 Subject: [PATCH 1/2] feat(critters): enhance font preloading to generate type-specific preloads\n\n- Adds explicit type attribute using format when provided\n- Infers MIME type from file extension when format missing (woff2, woff, ttf, otf, eot, svg)\n- Ensures multiple font formats each get appropriate type for better browser handling\n\nCloses #26 --- packages/critters/src/runtime.js | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/critters/src/runtime.js b/packages/critters/src/runtime.js index fe84e0e1..17e7b3c8 100644 --- a/packages/critters/src/runtime.js +++ b/packages/critters/src/runtime.js @@ -848,8 +848,25 @@ export default class Critters { const preload = document.createElement('link'); preload.setAttribute('rel', 'preload'); preload.setAttribute('as', 'font'); + // Determine font type: use explicit format if provided, otherwise infer from file extension + let type; if (format) { - preload.setAttribute('type', `font/${format}`); + type = `font/${format}`; + } else { + // Infer MIME type from file extension + const ext = fontUrl.split('.').pop().toLowerCase(); + const mimeMap = { + 'woff2': 'font/woff2', + 'woff': 'font/woff', + 'ttf': 'font/ttf', + 'otf': 'font/otf', + 'eot': 'application/vnd.ms-fontobject', + 'svg': 'image/svg+xml' + }; + type = mimeMap[ext]; + } + if (type) { + preload.setAttribute('type', type); } preload.setAttribute('crossorigin', 'anonymous'); preload.setAttribute('href', fontUrl); From bd6a4bc0d049447ff9d8313e3c4de193b3d45a1e Mon Sep 17 00:00:00 2001 From: riceharvest Date: Mon, 23 Mar 2026 19:07:18 +0100 Subject: [PATCH 2/2] refactor(critters): remove unnecessary DOM properties not required for css-select\n\nRemoves id, className, getAttributeNode from ElementExtensions; contentType, createTextNode from DocumentExtensions. These are not used by the package and are unnecessary for css-select integration.\n\nCloses #26 --- packages/critters/src/dom.js | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/packages/critters/src/dom.js b/packages/critters/src/dom.js index 36def520..36c74cde 100644 --- a/packages/critters/src/dom.js +++ b/packages/critters/src/dom.js @@ -106,9 +106,9 @@ const ElementExtensions = { } }, - id: reflectedProperty('id'), - className: reflectedProperty('class'), + + insertBefore(child, referenceNode) { if (!referenceNode) return this.appendChild(child); @@ -160,10 +160,7 @@ const ElementExtensions = { return this.attribs != null && this.attribs[name] != null; }, - getAttributeNode(name) { - const value = this.getAttribute(name); - if (value != null) return { specified: true, value }; - }, + exists(sel) { return cachedQuerySelector(sel, this); @@ -192,11 +189,7 @@ const DocumentExtensions = { } }, - contentType: { - get() { - return 'text/html'; - } - }, + nodeName: { get() { @@ -229,10 +222,7 @@ const DocumentExtensions = { return new Element(name); }, - createTextNode(text) { - // there is no dedicated createTextNode equivalent exposed in htmlparser2's DOM - return new Text(text); - }, + exists(sel) { return cachedQuerySelector(sel, this);