@vueless/nuxt
Version:
Nuxt Styleless UI Component Library, powered by Tailwind CSS.
59 lines (56 loc) • 2.01 kB
JavaScript
import { defineNuxtModule, createResolver, hasNuxtModule, addPlugin, addComponent, addImportsDir } from '@nuxt/kit';
import { dirname, relative } from 'pathe';
import { TailwindCSS, Vueless } from 'vueless/plugin-vite';
import { autoImportUserConfigs, cacheMergedConfigs } from 'vueless/utils/node/helper.js';
import { VUELESS_LIBRARY, NUXT_MODULE_ENV, COMPONENTS } from 'vueless/constants.js';
const module = defineNuxtModule({
meta: {
name: "@vueless/nuxt",
configKey: "vueless",
compatibility: {
nuxt: ">=3.13.0"
}
},
defaults: {
include: [],
basePath: "",
debug: false,
postcss: false
},
async setup(_options, _nuxt) {
if (_nuxt.options._prepare) return;
const { resolve, resolvePath } = createResolver(import.meta.url);
const { include, debug, postcss, basePath } = _options;
const vuelessPath = await resolvePath(VUELESS_LIBRARY);
const vuelessDir = dirname(vuelessPath);
_nuxt.hook("vite:extendConfig", async (config) => {
config.plugins = config.plugins || [];
config.plugins.push(
TailwindCSS({ postcss }),
Vueless({ env: NUXT_MODULE_ENV, basePath, debug, include })
);
});
await autoImportUserConfigs(basePath);
await cacheMergedConfigs({ vuelessSrcDir: relative(process.cwd(), vuelessDir), basePath });
if (hasNuxtModule("@nuxtjs/i18n")) {
_nuxt.hook("i18n:registerModule", (register) => {
register({
langDir: resolve(`${vuelessDir}/locales`),
locales: [
{ code: "en", name: "English", file: "en.json" }
]
});
});
}
addPlugin(resolve("./runtime/plugin"));
for (const [componentName, componentDir] of Object.entries(COMPONENTS)) {
addComponent({
name: componentName,
filePath: `${vuelessDir}/${componentDir}/${componentName}.vue`
});
}
addImportsDir(`${vuelessDir}/composables`);
addImportsDir(`${vuelessDir}/utils`);
}
});
export { module as default };