astro-ghostcms/.pnpm-store/v3/files/1c/88e89ce7d0c5aa51ef6eac8cc51...

71 lines
2.1 KiB
Plaintext

import { resolve, join } from 'node:path';
import { fileURLToPath } from 'node:url';
import VitePlugin from '@unocss/vite';
import { normalizePath } from 'vite';
const RESOLVED_ID_RE = /[\/\\]__uno(?:(_.*?))?\.css$/;
const UNO_INJECT_ID = "uno-astro";
function AstroVitePlugin(options) {
const { injects } = options;
let root;
return {
name: "unocss:astro",
enforce: "pre",
configResolved(config) {
root = config.root;
},
async resolveId(id, importer) {
if (RESOLVED_ID_RE.test(id)) {
return this.resolve(normalizePath(join(root, id)), importer, { skipSelf: true });
}
if (id === UNO_INJECT_ID)
return id;
},
load(id) {
if (id.endsWith(UNO_INJECT_ID))
return injects.join("\n");
}
};
}
function UnoCSSAstroIntegration(options = {}, defaults) {
const {
injectEntry = true,
injectReset = false,
injectExtra = []
} = options;
return {
name: "unocss",
hooks: {
"astro:config:setup": async ({ config, updateConfig, injectScript }) => {
var _a;
const source = resolve(fileURLToPath(config.srcDir), "components/**/*").replace(/\\/g, "/");
options.content || (options.content = {});
(_a = options.content).filesystem || (_a.filesystem = []);
options.content.filesystem.push(source);
const injects = [];
if (injectReset) {
const resetPath = typeof injectReset === "string" ? injectReset : "@unocss/reset/tailwind.css";
injects.push(`import ${JSON.stringify(resetPath)}`);
}
if (injectEntry) {
injects.push(typeof injectEntry === "string" ? injectEntry : 'import "uno.css"');
}
if (injectExtra.length > 0)
injects.push(...injectExtra);
updateConfig({
vite: {
plugins: [AstroVitePlugin({
injects
}), ...VitePlugin(options, defaults)]
}
});
if (injects?.length)
injectScript("page-ssr", `import ${JSON.stringify(UNO_INJECT_ID)}`);
}
}
};
}
export { UnoCSSAstroIntegration as default };