UNPKG

@wabarc/cairn

Version:

Node package and CLI tool for saving web page as single HTML file

56 lines 2.54 kB
"use strict"; /* * Copyright 2023 Wayback Archiver. All rights reserved. * Use of this source code is governed by the MIT * license that can be found in the LICENSE file. */ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.css = void 0; const utils_1 = require("./utils"); class CSS { process(style, baseURL) { return __awaiter(this, void 0, void 0, function* () { if (style === undefined || typeof style !== 'string') { return ''; } const convert = (url, baseURL) => __awaiter(this, void 0, void 0, function* () { const assetURL = (0, utils_1.createAbsoluteURL)(url, baseURL); const data = yield (0, utils_1.convertToData)(assetURL); return data || ''; }); const regexp = /(?<=url\().*?(?=\))/gm; const matches = style.matchAll(regexp); const rules = new Map(); for (const m of matches) { if (m !== null && m.length > 0) { let resourceURL = m[0]; if (resourceURL.startsWith('data:')) { continue; } resourceURL = resourceURL.replace(/['|"]/g, '').replace(/['|"]/g, ''); const data = yield convert(resourceURL, baseURL); rules.set(resourceURL, Buffer.from(data).toString()); } } for (const [url, data] of rules) { if (data.length > 0) { const regex = url.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&'); style = style.replace(new RegExp(regex, 'g'), data); } } return style; }); } } const css = new CSS(); exports.css = css; //# sourceMappingURL=css.js.map