@liquid-js/lit-ntml
Version:
Inspired by lit-html but for Node.js
1 lines • 1.71 kB
JavaScript
;var __importDefault=function(a){return a&&a.__esModule?a:{default:a}};Object.defineProperty(exports,"__esModule",{value:!0});const html_minifier_1=__importDefault(require("html-minifier")),parse5_1=__importDefault(require("parse5")),pretty_1=__importDefault(require("pretty"));async function parseThisHtml(a){return parse5_1.default.serialize(parse5_1.default.parse(`<!doctype html>${a}`))}exports.parseThisHtml=parseThisHtml;async function parseFragmentHtml(a){return parse5_1.default.serialize(parse5_1.default.parseFragment(a))}exports.parseFragmentHtml=parseFragmentHtml;async function minifyHtml(a,b,c,e){const f=c?e?await parseFragmentHtml(a):await parseThisHtml(a):a;return"boolean"==typeof b&&b?html_minifier_1.default.minify(f,{minifyCSS:!0,minifyJS:!0,collapseWhitespace:!0,removeComments:!0}):pretty_1.default(f,{ocd:!0})}exports.minifyHtml=minifyHtml;function ntml({cacheStore:a,cacheName:b,cacheExpiry:c=31104000,minify:d=!1,parseHtml:e=!0,parseHtmlFragment:f=!1}={}){return async(g,...h)=>{try{const i=!!(null!=a&&a.has&&a.get&&a.set&&a.delete),j="string"==typeof b&&0<b.length;if(j!=i)throw new Error(`Param opts[cacheStore] MUST be defined when opts[cacheName] is defined`);if(i&&j&&a.has(b)){const c=a.get(b);if(c.useUntil>=+new Date)return c.data;a.delete(b)}const k=h.map(async(a)=>a instanceof Function?a():a),l=await Promise.all(k),m=l.length,n=g.reduce((a,b,c)=>`${a}${b}${c>=m?"":l[c]}`,"").trim(),o=await minifyHtml(n,d,"boolean"==typeof e&&e,"boolean"==typeof f&&f);if(i&&j){const d=+new Date+c;if(Number.isNaN(+d))throw new TypeError("Param opts[cacheExpiry] is not a number");a.set(b,{useUntil:d,data:o})}return o}catch(a){throw a}}}exports.ntml=ntml,exports.default=ntml;