nuxt-atomizer
Version:
Module that adds ACSS atomic CSS framework (aka Atomizer) support to a Nuxt.js app. Generates atomic classes from code.
52 lines • 1.55 kB
JavaScript
import pathLib from "node:path";
import { addServerHandler, createResolver, defineNuxtModule } from "@nuxt/kit";
import { mergeConfigs } from "atomizer/src/lib/utils";
import { vite as atomizer } from "atomizer-plugins";
import { createJiti } from "jiti";
const FILENAME = "acss.css";
const resolver = createResolver(import.meta.url);
export default defineNuxtModule({
meta: {
compatibility: {
nuxt: ">=3.0.0"
},
configKey: "atomizer",
name: "nuxt-atomizer"
},
setup: async (options, nuxt) => {
const jitiInstance = createJiti(process.cwd());
const fileConfig = await jitiInstance.import("./atomizer.config", {
default: true
}).catch(error => {
if (error.message.startsWith(`Cannot find module './atomizer.config'`)) {
return {};
} else {
throw error;
}
});
console.log(fileConfig);
options = mergeConfigs([fileConfig, options]);
const cssPath = pathLib.join(nuxt.options.buildDir, FILENAME);
if (!nuxt.options.app.head.link) {
nuxt.options.app.head.link = [];
}
nuxt.options.app.head.link.push({
href: `/${FILENAME}`,
rel: "stylesheet"
});
nuxt.options.runtimeConfig.atomizer = {
cssPath
};
addServerHandler({
handler: resolver.resolve("./server-handler.get"),
route: `/${FILENAME}`
});
if (nuxt.options.vite.plugins === void 0) {
nuxt.options.vite.plugins = [];
}
nuxt.options.vite.plugins.push(atomizer({
config: options,
outfile: cssPath
}));
}
});