baked-recipe-admin
Version:
Baked is an opinionated framework for .NET in backend and Nuxt in frontend. This is a recipe package that brings together all the components one needs for an Admin UI.
80 lines (77 loc) • 3.3 kB
JavaScript
import { defineNuxtModule, createResolver, addComponentsDir, addImportsDir, addPlugin, installModule } from '@nuxt/kit';
const module = defineNuxtModule({
meta: {
name: "baked-recipe-admin",
configKey: "baked"
},
defaults: {},
// this setup runs after `defineNuxtConfig` so it should set default values
// carefully.
async setup(_options, _nuxt) {
if (process.env.npm_lifecycle_script?.includes("nuxt-module-build")) {
return;
}
const resolver = createResolver(import.meta.url);
const entryProjectResolver = createResolver(_nuxt.options.rootDir);
const appJsonPath = entryProjectResolver.resolve(`./.baked/app.json`);
const app = (await import(appJsonPath, { with: { type: 'json' } })).default;
_nuxt.options.runtimeConfig.public.error = app?.error;
_nuxt.options.runtimeConfig.public.primevue = _options.primevue;
_nuxt.options.runtimeConfig.public.components = _options.components;
_nuxt.options.runtimeConfig.public.composables = _options.composables;
_nuxt.options.css.push("primeicons/primeicons.css");
_nuxt.options.css.push(resolver.resolve("./runtime/assets/theme/datatable.css"));
_nuxt.options.css.push(resolver.resolve("./runtime/assets/theme/menu.css"));
_nuxt.options.css.push(resolver.resolve("./runtime/assets/overrides.css"));
_nuxt.options.devtools.enabled = false;
_nuxt.options.experimental.payloadExtraction = false;
_nuxt.options.features.inlineStyles = false;
_nuxt.options.ssr = false;
addComponentsDir({ path: resolver.resolve("./runtime/components") });
addImportsDir(resolver.resolve("./runtime/composables"));
for (const plugin of app?.plugins ?? []) {
_nuxt.options.runtimeConfig.public[plugin.name] = plugin;
addPlugin(resolver.resolve(`./runtime/plugins/${plugin.name}`));
}
addPlugin(resolver.resolve("./runtime/plugins/mutex"));
addPlugin(resolver.resolve("./runtime/plugins/toast"));
addPlugin(resolver.resolve("./runtime/plugins/trailingSlash"));
addPlugin(resolver.resolve("./runtime/plugins/baked"));
addPlugin(resolver.resolve("./runtime/plugins/primeVue"));
addPlugin(resolver.resolve("./runtime/plugins/fetch"), {});
await installModule("@nuxtjs/i18n", {
vueI18n: entryProjectResolver.resolve("./i18n.config.ts"),
langDir: entryProjectResolver.resolve("./"),
strategy: "no_prefix",
locales: app?.i18n?.supportedLanguages?.map((i) => {
const files = [
entryProjectResolver.resolve(`./.baked/locale.${i.code}.json`),
entryProjectResolver.resolve(`./locales/locale.${i.code}.json`)
];
return {
code: i.code,
name: i.name,
files
};
}),
defaultLocale: app?.i18n?.defaultLanguage?.code,
detectBrowserLanguage: {
useCookie: true,
cookieKey: "i18n_cookie"
}
});
await installModule("@nuxtjs/tailwindcss", {
exposeConfig: true,
cssPath: resolver.resolve("./runtime/assets/tailwind.css"),
config: {
content: {
files: [
resolver.resolve("./runtime/components/**/*.{vue,mjs,ts}"),
resolver.resolve("./runtime/*.{mjs,js,ts}")
]
}
}
});
}
});
export { module as default };