feat: auto-import schema files

This commit is contained in:
arashsheyda
2023-05-31 14:03:11 +03:00
parent cf48c2b6df
commit 205435e546
3 changed files with 33 additions and 4 deletions

View File

@ -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

View File

@ -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<ModuleOptions>({
meta: {
name: 'nuxt-mongoose',
@ -18,20 +28,25 @@ export default defineNuxtModule<ModuleOptions>({
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<ModuleOptions>({
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'))

View File

@ -4,4 +4,5 @@ export interface ModuleOptions {
uri: string
devtools: boolean
options?: ConnectOptions
modelsDir?: string
}