diff --git a/frontend/layouts/auth.vue b/frontend/app/layouts/auth.vue similarity index 100% rename from frontend/layouts/auth.vue rename to frontend/app/layouts/auth.vue diff --git a/frontend/layouts/default.vue b/frontend/app/layouts/default.vue similarity index 100% rename from frontend/layouts/default.vue rename to frontend/app/layouts/default.vue diff --git a/frontend/middleware/admin.ts b/frontend/app/middleware/admin.ts similarity index 100% rename from frontend/middleware/admin.ts rename to frontend/app/middleware/admin.ts diff --git a/frontend/middleware/auth.global.ts b/frontend/app/middleware/auth.global.ts similarity index 100% rename from frontend/middleware/auth.global.ts rename to frontend/app/middleware/auth.global.ts diff --git a/frontend/middleware/employee.ts b/frontend/app/middleware/employee.ts similarity index 100% rename from frontend/middleware/employee.ts rename to frontend/app/middleware/employee.ts diff --git a/frontend/modules/.gitkeep b/frontend/modules/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/frontend/nuxt.config.ts b/frontend/nuxt.config.ts index 1f8c5b9..2819db7 100644 --- a/frontend/nuxt.config.ts +++ b/frontend/nuxt.config.ts @@ -1,14 +1,32 @@ +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}, + 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'], + extends: ['@malio/layer-ui', ...moduleLayers], modules: [ '@nuxtjs/tailwindcss', '@pinia/nuxt', @@ -16,16 +34,35 @@ export default defineNuxtConfig({ '@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 - } + apiBase: process.env.NUXT_PUBLIC_API_BASE, + }, }, devServer: { port: 3002, }, components: [ - {path: '~/components', pathPrefix: false}, + { path: '~/components', pathPrefix: false }, ], vite: { server: { @@ -56,10 +93,6 @@ export default defineNuxtConfig({ {code: 'fr', file: 'fr.json', name: 'Français'} ], }, - typescript: { - strict: true - }, - build: { - transpile: ['@vuepic/vue-datepicker'] - } + typescript: { strict: true }, + build: { transpile: ['@vuepic/vue-datepicker'] }, })