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.
115 lines (112 loc) • 4.14 kB
JavaScript
import { createResolver, defineNuxtModule, addComponentsDir, addImportsDir, addPlugin } from '@nuxt/kit';
import { pathToFileURL } from 'url';
const resolver = createResolver(import.meta.url);
const module = defineNuxtModule({
meta: {
name: "baked-recipe-admin",
configKey: "baked"
},
defaults: {},
moduleDependencies: {
"@nuxtjs/i18n": {
version: "10.1.0",
defaults: {
strategy: "no_prefix",
detectBrowserLanguage: {
useCookie: true,
cookieKey: "i18n_cookie"
}
}
},
"@nuxtjs/tailwindcss": {
version: "6.14.0",
defaults: {
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}")
]
}
}
}
}
},
onInstall() {
},
onUpgrade() {
},
// 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 entryProjectResolver = createResolver(_nuxt.options.rootDir);
const appJsonPath = pathToFileURL(entryProjectResolver.resolve(`./.baked/app.json`));
const app = (await import(appJsonPath.href, { with: { type: 'json' } })).default;
_options.composables.useBreakpoints ||= {};
_options.composables.useBreakpoints.screens ||= {
"2xs": "340px",
"xs": "480px",
"sm": "640px",
"md": "768px",
"lg": "1024px",
"xl": "1280px",
"2xl": "1536px",
"3xl": "1920px"
};
_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/theme/paginator.css"));
_nuxt.options.css.push(resolver.resolve("./runtime/assets/theme/popover.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"), {});
_nuxt.options.i18n = {
vueI18n: entryProjectResolver.resolve("./i18n.config.ts"),
langDir: entryProjectResolver.resolve("./"),
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
};
_nuxt.options.tailwindcss = {
config: {
theme: {
screens: _options.composables.useBreakpoints.screens
}
}
};
}
});
export { module as default };