UNPKG

pagespeed-quest

Version:

A framework for efficient web front-end speed improvement

55 lines 5.24 kB
import IconvLite from 'iconv-lite'; import Prettier from 'prettier'; const PrettierDefaultOptions = { printWidth: 120 }; export function ensureUtf8String(buffer, charset) { if (charset.match(/utf-?8/i) || charset.match(/ascii/i)) return buffer.toString('utf8'); const converted = IconvLite.decode(buffer, charset); return converted; } function isHtml(mimeType) { if (!mimeType) return false; return mimeType === 'text/html'; } function isCss(mimeType) { if (!mimeType) return false; return mimeType === 'text/css'; } function isJs(mimeType) { if (!mimeType) return false; return (mimeType === 'text/javascript' || mimeType === 'application/javascript' || mimeType === 'application/x-javascript'); } export function isText(mimeType) { return isHtml(mimeType) || isCss(mimeType) || isJs(mimeType); } export async function convertEditableText(content, contentTypeMime, contentTypeCharset) { const charset = contentTypeCharset || 'utf-8'; if (isHtml(contentTypeMime)) { const utf8 = ensureUtf8String(content, charset); const withoutCharsetMeta = utf8.replace(/<meta charset="[^"]*">/, ''); const withoutScriptCharsetAttr = withoutCharsetMeta.replace(/<script(?:.*)>/gi, (scriptTag) => { return scriptTag.replace(/\s*charset\s*=\s*(?:"[^"]*"|'[^']*'|[^ ]+)/i, ''); }); // TODO: consider charset attribute in link[rel=stylesheet] const html = await Prettier.format(withoutScriptCharsetAttr, { ...PrettierDefaultOptions, parser: 'html' }); return html; } else if (isCss(contentTypeMime)) { const utf8 = ensureUtf8String(content, charset); const withoutCharsetDirective = utf8.replace(/@charset "[^"]*";/, ''); const css = await Prettier.format(withoutCharsetDirective, { ...PrettierDefaultOptions, parser: 'css' }); return css; } else if (isJs(contentTypeMime)) { const utf8 = ensureUtf8String(content, charset); const js = await Prettier.format(utf8, { ...PrettierDefaultOptions, parser: 'babel' }); return js; } else { throw new Error(`${contentTypeMime} is not supported text content type`); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0dGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9mb3JtYXR0aW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQTtBQUNsQyxPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUE7QUFFL0IsTUFBTSxzQkFBc0IsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQTtBQUVsRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsTUFBYyxFQUFFLE9BQWU7SUFDOUQsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQUUsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3ZGLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ25ELE9BQU8sU0FBUyxDQUFBO0FBQ2xCLENBQUM7QUFFRCxTQUFTLE1BQU0sQ0FBQyxRQUFnQjtJQUM5QixJQUFJLENBQUMsUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFBO0lBQzNCLE9BQU8sUUFBUSxLQUFLLFdBQVcsQ0FBQTtBQUNqQyxDQUFDO0FBRUQsU0FBUyxLQUFLLENBQUMsUUFBZ0I7SUFDN0IsSUFBSSxDQUFDLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQTtJQUMzQixPQUFPLFFBQVEsS0FBSyxVQUFVLENBQUE7QUFDaEMsQ0FBQztBQUVELFNBQVMsSUFBSSxDQUFDLFFBQWdCO0lBQzVCLElBQUksQ0FBQyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFDM0IsT0FBTyxDQUNMLFFBQVEsS0FBSyxpQkFBaUIsSUFBSSxRQUFRLEtBQUssd0JBQXdCLElBQUksUUFBUSxLQUFLLDBCQUEwQixDQUNuSCxDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxNQUFNLENBQUMsUUFBZ0I7SUFDckMsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtBQUM5RCxDQUFDO0FBT0QsTUFBTSxDQUFDLEtBQUssVUFBVSxtQkFBbUIsQ0FDdkMsT0FBZSxFQUNmLGVBQXVCLEVBQ3ZCLGtCQUEyQjtJQUUzQixNQUFNLE9BQU8sR0FBRyxrQkFBa0IsSUFBSSxPQUFPLENBQUE7SUFDN0MsSUFBSSxNQUFNLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztRQUM1QixNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDL0MsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ3JFLE1BQU0sd0JBQXdCLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDNUYsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDLDZDQUE2QyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQzdFLENBQUMsQ0FBQyxDQUFBO1FBQ0YsMkRBQTJEO1FBQzNELE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLEdBQUcsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDM0csT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO1NBQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDL0MsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ3JFLE1BQU0sR0FBRyxHQUFHLE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLEdBQUcsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7UUFDeEcsT0FBTyxHQUFHLENBQUE7SUFDWixDQUFDO1NBQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztRQUNqQyxNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDL0MsTUFBTSxFQUFFLEdBQUcsTUFBTSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFDdEYsT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxlQUFlLHFDQUFxQyxDQUFDLENBQUE7SUFDMUUsQ0FBQztBQUNILENBQUMifQ==