@jsenv/plugin-transpilation
Version:
42 lines (38 loc) • 1.07 kB
JavaScript
import { urlToFileSystemPath } from "@jsenv/urls";
export const applyCssTranspilation = async ({
input,
inputUrl,
runtimeCompat,
}) => {
// https://lightningcss.dev/docs.html
const { transform } = await import("lightningcss");
const targets = runtimeCompatToTargets(runtimeCompat);
const { code, map } = transform({
filename: urlToFileSystemPath(inputUrl),
code: Buffer.from(input),
targets,
minify: false,
drafts: {
nesting: true,
customMedia: true,
},
});
return { content: String(code), sourcemap: map };
};
const runtimeCompatToTargets = (runtimeCompat) => {
const targets = {};
["chrome", "firefox", "ie", "opera", "safari"].forEach((runtimeName) => {
const version = runtimeCompat[runtimeName];
if (version) {
targets[runtimeName] = versionToBits(version);
}
});
return targets;
};
const versionToBits = (version) => {
const [major, minor = 0, patch = 0] = version
.split("-")[0]
.split(".")
.map((v) => parseInt(v, 10));
return (major << 16) | (minor << 8) | patch;
};