UNPKG

pagespeed-quest

Version:

A framework for efficient web front-end speed improvement

55 lines 5.18 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0dGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9mb3JtYXR0aW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQTtBQUNsQyxPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUE7QUFFL0IsTUFBTSxzQkFBc0IsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQTtBQUVsRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsTUFBYyxFQUFFLE9BQWU7SUFDOUQsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQUUsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3ZGLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ25ELE9BQU8sU0FBUyxDQUFBO0FBQ2xCLENBQUM7QUFFRCxTQUFTLE1BQU0sQ0FBQyxRQUFnQjtJQUM5QixJQUFJLENBQUMsUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFBO0lBQzNCLE9BQU8sUUFBUSxLQUFLLFdBQVcsQ0FBQTtBQUNqQyxDQUFDO0FBRUQsU0FBUyxLQUFLLENBQUMsUUFBZ0I7SUFDN0IsSUFBSSxDQUFDLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQTtJQUMzQixPQUFPLFFBQVEsS0FBSyxVQUFVLENBQUE7QUFDaEMsQ0FBQztBQUVELFNBQVMsSUFBSSxDQUFDLFFBQWdCO0lBQzVCLElBQUksQ0FBQyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFDM0IsT0FBTyxDQUNMLFFBQVEsS0FBSyxpQkFBaUIsSUFBSSxRQUFRLEtBQUssd0JBQXdCLElBQUksUUFBUSxLQUFLLDBCQUEwQixDQUNuSCxDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxNQUFNLENBQUMsUUFBZ0I7SUFDckMsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtBQUM5RCxDQUFDO0FBT0QsTUFBTSxDQUFDLEtBQUssVUFBVSxtQkFBbUIsQ0FDdkMsT0FBZSxFQUNmLGVBQXVCLEVBQ3ZCLGtCQUEyQjtJQUUzQixNQUFNLE9BQU8sR0FBRyxrQkFBa0IsSUFBSSxPQUFPLENBQUE7SUFDN0MsSUFBSSxNQUFNLENBQUMsZUFBZSxDQUFDLEVBQUU7UUFDM0IsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQy9DLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUNyRSxNQUFNLHdCQUF3QixHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQzVGLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyw2Q0FBNkMsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUM3RSxDQUFDLENBQUMsQ0FBQTtRQUNGLDJEQUEyRDtRQUMzRCxNQUFNLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxHQUFHLHNCQUFzQixFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO1FBQzNHLE9BQU8sSUFBSSxDQUFBO0tBQ1o7U0FBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBRTtRQUNqQyxNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDL0MsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ3JFLE1BQU0sR0FBRyxHQUFHLE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLEdBQUcsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7UUFDeEcsT0FBTyxHQUFHLENBQUE7S0FDWDtTQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFO1FBQ2hDLE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUMvQyxNQUFNLEVBQUUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUN0RixPQUFPLEVBQUUsQ0FBQTtLQUNWO1NBQU07UUFDTCxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsZUFBZSxxQ0FBcUMsQ0FBQyxDQUFBO0tBQ3pFO0FBQ0gsQ0FBQyJ9