UNPKG

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
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 })); } });