@wabarc/cairn
Version:
Node package and CLI tool for saving web page as single HTML file
56 lines • 2.54 kB
JavaScript
;
/*
* 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