chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||
// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃
|
||||
// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃
|
||||
// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃
|
||||
// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃
|
||||
// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
|
||||
// ┃ Copyright (c) 2017, the Perspective Authors. ┃
|
||||
// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃
|
||||
// ┃ This file is part of the Perspective library, distributed under the terms ┃
|
||||
// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
|
||||
// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
|
||||
|
||||
import { execSync } from "child_process";
|
||||
import * as fs from "node:fs";
|
||||
import * as path from "node:path";
|
||||
import { bundle as bundleCss, composeVisitors } from "lightningcss";
|
||||
|
||||
import { createRequire } from "node:module";
|
||||
|
||||
const INHERIT = {
|
||||
stdio: "inherit",
|
||||
stderr: "inherit",
|
||||
};
|
||||
|
||||
export function get_host() {
|
||||
return /host\: (.+?)$/gm.exec(execSync(`rustc -vV`).toString())[1];
|
||||
}
|
||||
|
||||
export const resolveNPM = (url) => ({
|
||||
read(filePath) {
|
||||
if (filePath.startsWith("http")) {
|
||||
return `@import url("${filePath}");`;
|
||||
}
|
||||
|
||||
return fs.readFileSync(filePath, "utf8");
|
||||
},
|
||||
resolve(specifier, from) {
|
||||
if (specifier.startsWith("http")) {
|
||||
return { external: specifier };
|
||||
}
|
||||
|
||||
const _require = createRequire(url);
|
||||
|
||||
if (specifier.startsWith(".") || specifier.startsWith("/")) {
|
||||
return path.resolve(path.dirname(from), specifier);
|
||||
}
|
||||
|
||||
return _require.resolve(specifier);
|
||||
},
|
||||
});
|
||||
|
||||
// Inline url() asset references as data URIs.
|
||||
export function inlineUrlVisitor(fromFile) {
|
||||
const dir = path.dirname(fromFile);
|
||||
return composeVisitors([
|
||||
{
|
||||
Url(url) {
|
||||
const ext = path.extname(url.url).toLowerCase();
|
||||
if (![".svg", ".png", ".gif"].includes(ext)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const resolved = path.resolve(dir, url.url);
|
||||
if (!fs.existsSync(resolved)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const content = fs.readFileSync(resolved);
|
||||
const mime =
|
||||
ext === ".svg"
|
||||
? "image/svg+xml"
|
||||
: ext === ".png"
|
||||
? "image/png"
|
||||
: "image/gif";
|
||||
|
||||
const new_content = content
|
||||
.toString("base64")
|
||||
.split("\n")
|
||||
.map((x) => x.trim())
|
||||
.join("");
|
||||
return {
|
||||
url: `data:${mime};base64,${new_content}`,
|
||||
loc: url.loc,
|
||||
};
|
||||
},
|
||||
},
|
||||
]);
|
||||
}
|
||||
Reference in New Issue
Block a user