diff --git a/README.md b/README.md index 3f37538..ae0fcd2 100644 --- a/README.md +++ b/README.md @@ -36,10 +36,13 @@ export default defineNuxtConfig({ mongoose: { uri: 'process.env.MONGODB_URI', options: {}, + modelsDir: 'models', }, }) ``` +by default, `nuxt-mongoose` will auto-import your schemas from the `models` directory from `server` directory. You can change this behavior by setting the `modelsDir` option. + * for more information about the options, please refer to the [Mongoose documentation](https://mongoosejs.com/docs/connections.html#options). * ## API diff --git a/src/module.ts b/src/module.ts index 96e1375..54fd2a0 100644 --- a/src/module.ts +++ b/src/module.ts @@ -1,6 +1,14 @@ -import { addImportsDir, addServerPlugin, addTemplate, createResolver, defineNuxtModule, logger } from '@nuxt/kit' +import { + addImportsDir, + addServerPlugin, + addTemplate, + createResolver, + defineNuxtModule, + logger, +} from '@nuxt/kit' import { pathExists } from 'fs-extra' import { tinyws } from 'tinyws' +import { join } from 'pathe' import { defu } from 'defu' import sirv from 'sirv' @@ -9,6 +17,8 @@ import type { ModuleOptions } from './types' import { setupRPC } from './server-rpc' +export type { ModuleOptions } + export default defineNuxtModule({ meta: { name: 'nuxt-mongoose', @@ -18,20 +28,25 @@ export default defineNuxtModule({ uri: process.env.MONGODB_URI as string, devtools: true, options: {}, + modelsDir: 'models', }, setup(options, nuxt) { const { resolve } = createResolver(import.meta.url) + const runtimeConfig = nuxt.options.runtimeConfig addImportsDir(resolve('./runtime/composables')) - if (!options.uri) - console.warn('Missing `MONGODB_URI` in `.env`') + if (!options.uri) { + logger.warn('Missing `MONGODB_URI` in `.env`') + return + } // Runtime Config - nuxt.options.runtimeConfig.mongoose = defu(nuxt.options.runtimeConfig.mongoose || {}, { + runtimeConfig.mongoose = defu(runtimeConfig.mongoose || {}, { uri: options.uri, options: options.options, devtools: options.devtools, + modelsDir: options.modelsDir, }) // Setup devtools UI @@ -91,6 +106,16 @@ export default defineNuxtModule({ options.references.push({ path: resolve(nuxt.options.buildDir, 'types/nuxt-mongoose.d.ts') }) }) + // Nitro auto imports + nuxt.hook('nitro:config', (_nitroConfig) => { + if (_nitroConfig.imports) { + _nitroConfig.imports.dirs = _nitroConfig.imports.dirs || [] + _nitroConfig.imports.dirs?.push( + join(nuxt.options.serverDir, runtimeConfig.mongoose.modelsDir), + ) + } + }) + // Add server-plugin for database connection addServerPlugin(resolve('./runtime/server/plugins/mongoose.db')) diff --git a/src/types/module-options.ts b/src/types/module-options.ts index 71996d3..2d73936 100644 --- a/src/types/module-options.ts +++ b/src/types/module-options.ts @@ -4,4 +4,5 @@ export interface ModuleOptions { uri: string devtools: boolean options?: ConnectOptions + modelsDir?: string }