import { existsSync, readdirSync } from 'node:fs' import { resolve } from 'node:path' const modulesDir = resolve(__dirname, 'modules') const moduleDirs = existsSync(modulesDir) ? readdirSync(modulesDir, { withFileTypes: true }) .filter((d) => d.isDirectory()) .map((d) => d.name) : [] const moduleLayers = moduleDirs.map((name) => `./modules/${name}`) const moduleComposableDirs = moduleDirs .map((name) => `modules/${name}/composables`) .filter((path) => existsSync(resolve(__dirname, path))) const moduleStoreDirs = moduleDirs .map((name) => `modules/${name}/stores`) .filter((path) => existsSync(resolve(__dirname, path))) export default defineNuxtConfig({ compatibilityDate: '2025-07-15', devtools: { enabled: false }, ssr: false, srcDir: '.', css: ['~/assets/css/app.css', '~/assets/css/dark.css'], app: { baseURL: process.env.NODE_ENV === 'production' ? (process.env.NUXT_PUBLIC_APP_BASE || '/') : '/', }, extends: ['@malio/layer-ui', ...moduleLayers], modules: [ '@nuxtjs/tailwindcss', '@pinia/nuxt', 'nuxt-toast', '@nuxtjs/i18n', '@nuxt/icon', ], dir: { layouts: 'app/layouts', middleware: 'app/middleware', }, imports: { dirs: [ 'shared/composables', 'shared/stores', 'shared/utils', 'composables', 'stores', 'utils', ...moduleComposableDirs, ...moduleStoreDirs, ], }, pinia: { storesDirs: ['shared/stores/**', 'stores/**', 'modules/*/stores/**'], }, runtimeConfig: { public: { apiBase: process.env.NUXT_PUBLIC_API_BASE, }, }, devServer: { port: 3002, }, components: [ { path: '~/components', pathPrefix: false }, ], vite: { server: { allowedHosts: true, proxy: { '/api': { target: 'http://nginx', changeOrigin: true, }, }, }, optimizeDeps: { include: ['markdown-it-task-lists'], }, }, toast: { settings: { timeout: 2000, closeOnClick: true, progressBar: false } }, i18n: { strategy: 'no_prefix', defaultLocale: 'fr', langDir: 'locales', locales: [ {code: 'fr', file: 'fr.json', name: 'Français'} ], }, typescript: { strict: true }, build: { transpile: ['@vuepic/vue-datepicker'] }, })