UNPKG

take-shot

Version:
58 lines 2.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.embedResources = exports.shouldEmbed = exports.embed = exports.parseURLs = void 0; const util_1 = require("./util"); const mimes_1 = require("./mimes"); const dataurl_1 = require("./dataurl"); const URL_REGEX = /url\((['"]?)([^'"]+?)\1\)/g; function toRegex(url) { // eslint-disable-next-line no-useless-escape const escaped = url.replace(/([.*+?^${}()|\[\]\/\\])/g, '\\$1'); return new RegExp(`(url\\(['"]?)(${escaped})(['"]?\\))`, 'g'); } function parseURLs(cssText) { const urls = []; cssText.replace(URL_REGEX, (raw, _quotation, url) => { urls.push(url); return raw; }); return urls.filter((url) => !(0, dataurl_1.isDataUrl)(url)); } exports.parseURLs = parseURLs; async function embed(cssText, resourceURL, baseURL, getContentFromUrl) { try { const resolvedURL = baseURL ? (0, util_1.resolveUrl)(resourceURL, baseURL) : resourceURL; const contentType = (0, mimes_1.getMimeType)(resourceURL); let dataURL; if (getContentFromUrl) { const content = await getContentFromUrl(resolvedURL); dataURL = (0, dataurl_1.makeDataUrl)(content, contentType); } else { dataURL = await (0, dataurl_1.resourceToDataURL)(resolvedURL, contentType); } return cssText.replace(toRegex(resourceURL), `$1${dataURL}$3`); } catch (error) { // pass } return cssText; } exports.embed = embed; function filterPreferredFontFormat(str) { return str; } function shouldEmbed(url) { return url.search(URL_REGEX) !== -1; } exports.shouldEmbed = shouldEmbed; async function embedResources(cssText, baseUrl) { if (!shouldEmbed(cssText)) { return cssText; } const filteredCSSText = filterPreferredFontFormat(cssText); const urls = parseURLs(filteredCSSText); return urls.reduce((deferred, url) => deferred.then((css) => embed(css, url, baseUrl)), Promise.resolve(filteredCSSText)); } exports.embedResources = embedResources; //# sourceMappingURL=embed-resources.js.map