Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| eb7ad636dc | |||
| ffb1eb43c7 | |||
| f504c6b79a | |||
| 6b4d1ed0ae | |||
| 3ef0d69ded | |||
| edcf10eea1 | |||
| 89d50bd977 | |||
| 30407511a4 | |||
| 0abeb6b265 | |||
| d746f451dd | |||
| 5a7936aac4 | |||
| 64a4fa5383 | |||
| bf7f9db63d | |||
| 71837428dd | |||
| 12d62d873b | |||
| 61cc32381b | |||
| 42b3b8375a | |||
| bdab2c5395 | |||
| d6b8e91f06 | |||
| 8bb7665af5 | |||
| 644ccc237d | |||
| 84a2c821e9 | |||
| 386c7dac05 |
2
.nuxtrc
Normal file
2
.nuxtrc
Normal file
@ -0,0 +1,2 @@
|
||||
# enable TypeScript bundler module resolution - https://www.typescriptlang.org/docs/handbook/modules/reference.html#bundler
|
||||
experimental.typescriptBundlerResolution=true
|
||||
105
CHANGELOG.md
105
CHANGELOG.md
@ -1,6 +1,111 @@
|
||||
# Changelog
|
||||
|
||||
|
||||
## v1.0.6
|
||||
|
||||
[compare changes](https://github.com/arashsheyda/nuxt-mongoose/compare/v1.0.4...v1.1.0)
|
||||
|
||||
### 🚀 Enhancements
|
||||
|
||||
- Add discriminator helper ([#47](https://github.com/arashsheyda/nuxt-mongoose/pull/47))
|
||||
|
||||
### 🩹 Fixes
|
||||
|
||||
- Replace consola with logger ([5a7936a](https://github.com/arashsheyda/nuxt-mongoose/commit/5a7936a))
|
||||
- Continue module setup process Without MONGODB_URI ([#54](https://github.com/arashsheyda/nuxt-mongoose/pull/54))
|
||||
|
||||
### 📖 Documentation
|
||||
|
||||
- Update examples ([0abeb6b](https://github.com/arashsheyda/nuxt-mongoose/commit/0abeb6b))
|
||||
- Fix examples list ([3040751](https://github.com/arashsheyda/nuxt-mongoose/commit/3040751))
|
||||
- Use new `nuxi module add` command in installation ([#53](https://github.com/arashsheyda/nuxt-mongoose/pull/53))
|
||||
|
||||
### 🏡 Chore
|
||||
|
||||
- **release:** V1.0.4 ([64a4fa5](https://github.com/arashsheyda/nuxt-mongoose/commit/64a4fa5))
|
||||
- **release:** V1.0.5 ([d746f45](https://github.com/arashsheyda/nuxt-mongoose/commit/d746f45))
|
||||
- Update readme with documentation redirection ([89d50bd](https://github.com/arashsheyda/nuxt-mongoose/commit/89d50bd))
|
||||
- Move docs ([f504c6b](https://github.com/arashsheyda/nuxt-mongoose/commit/f504c6b))
|
||||
- Update readme ([ffb1eb4](https://github.com/arashsheyda/nuxt-mongoose/commit/ffb1eb4))
|
||||
|
||||
### ❤️ Contributors
|
||||
|
||||
- Arash ([@arashsheyda](http://github.com/arashsheyda))
|
||||
- Justin Bellero <jpbellero@gmail.com>
|
||||
- Roryc ([@Coiggahou2002](http://github.com/Coiggahou2002))
|
||||
- Daniel Roe ([@danielroe](http://github.com/danielroe))
|
||||
|
||||
## v1.0.5
|
||||
|
||||
[compare changes](https://github.com/arashsheyda/nuxt-mongoose/compare/v1.0.4...v1.0.5)
|
||||
|
||||
### 🩹 Fixes
|
||||
|
||||
- Replace consola with logger ([5a7936a](https://github.com/arashsheyda/nuxt-mongoose/commit/5a7936a))
|
||||
|
||||
### 🏡 Chore
|
||||
|
||||
- **release:** V1.0.4 ([64a4fa5](https://github.com/arashsheyda/nuxt-mongoose/commit/64a4fa5))
|
||||
|
||||
### ❤️ Contributors
|
||||
|
||||
- Arash <arashi.sheyda@gmail.com>
|
||||
|
||||
## v1.0.4
|
||||
|
||||
[compare changes](https://github.com/arashsheyda/nuxt-mongoose/compare/v1.0.3...v1.0.5)
|
||||
|
||||
### 💅 Refactors
|
||||
|
||||
- Split services into individual files ([d6b8e91](https://github.com/arashsheyda/nuxt-mongoose/commit/d6b8e91))
|
||||
|
||||
### 📖 Documentation
|
||||
|
||||
- Update dependencies ([12d62d8](https://github.com/arashsheyda/nuxt-mongoose/commit/12d62d8))
|
||||
- Update dependencies ([7183742](https://github.com/arashsheyda/nuxt-mongoose/commit/7183742))
|
||||
|
||||
### 🏡 Chore
|
||||
|
||||
- Test bundler module resolution ([#36](https://github.com/arashsheyda/nuxt-mongoose/pull/36))
|
||||
- Update dependencies ([#38](https://github.com/arashsheyda/nuxt-mongoose/pull/38))
|
||||
- Update dependencies ([bdab2c5](https://github.com/arashsheyda/nuxt-mongoose/commit/bdab2c5))
|
||||
- Update playground ([42b3b83](https://github.com/arashsheyda/nuxt-mongoose/commit/42b3b83))
|
||||
- Update cover ([61cc323](https://github.com/arashsheyda/nuxt-mongoose/commit/61cc323))
|
||||
- Update cover ([bf7f9db](https://github.com/arashsheyda/nuxt-mongoose/commit/bf7f9db))
|
||||
|
||||
### ❤️ Contributors
|
||||
|
||||
- Arash
|
||||
- Amir H. Moayeri
|
||||
- Daniel Roe <daniel@roe.dev>
|
||||
|
||||
## v1.0.3
|
||||
|
||||
[compare changes](https://github.com/arashsheyda/nuxt-mongoose/compare/v1.0.2...v1.0.3)
|
||||
|
||||
### 🩹 Fixes
|
||||
|
||||
- Add schema type ([4bc0742](https://github.com/arashsheyda/nuxt-mongoose/commit/4bc0742))
|
||||
|
||||
### 💅 Refactors
|
||||
|
||||
- Update to DevTools v1 ([1bec7a7](https://github.com/arashsheyda/nuxt-mongoose/commit/1bec7a7))
|
||||
|
||||
### 📖 Documentation
|
||||
|
||||
- Update ui ([9296ae7](https://github.com/arashsheyda/nuxt-mongoose/commit/9296ae7))
|
||||
- Fix playground path ([ea7c7b0](https://github.com/arashsheyda/nuxt-mongoose/commit/ea7c7b0))
|
||||
- Fix install workflow ([4c5a034](https://github.com/arashsheyda/nuxt-mongoose/commit/4c5a034))
|
||||
- Update link ([0b575fa](https://github.com/arashsheyda/nuxt-mongoose/commit/0b575fa))
|
||||
|
||||
### 🏡 Chore
|
||||
|
||||
- Remove comment ([549b2f3](https://github.com/arashsheyda/nuxt-mongoose/commit/549b2f3))
|
||||
|
||||
### ❤️ Contributors
|
||||
|
||||
- Arash
|
||||
|
||||
## v1.0.2
|
||||
|
||||
[compare changes](https://github.com/arashsheyda/nuxt-mongoose/compare/v1.0.1...v1.0.2)
|
||||
|
||||
61
README.md
61
README.md
@ -1,4 +1,4 @@
|
||||

|
||||

|
||||
|
||||
<div align="center">
|
||||
<h1>Nuxt Mongoose</h1>
|
||||
@ -10,7 +10,7 @@
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
pnpm add nuxt-mongoose
|
||||
npx nuxi@latest module add nuxt-mongoose
|
||||
```
|
||||
|
||||
## Usage
|
||||
@ -29,62 +29,7 @@ export default defineNuxtConfig({
|
||||
|
||||
### Configuration
|
||||
|
||||
You can configure the module by adding a `mongoose` section to your `nuxt.config` file.
|
||||
|
||||
```ts
|
||||
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
|
||||
|
||||
### defineMongooseConnection
|
||||
|
||||
This function creates a new Mongoose connection. Example usage:
|
||||
|
||||
```ts
|
||||
import { defineMongooseConnection } from '#nuxt/mongoose'
|
||||
|
||||
export const connection = defineMongooseConnection('mongodb://127.0.0.1/nuxt-mongoose')
|
||||
```
|
||||
|
||||
### defineMongooseModel
|
||||
|
||||
This function creates a new Mongoose model with schema. Example usage:
|
||||
|
||||
```ts
|
||||
import { defineMongooseModel } from '#nuxt/mongoose'
|
||||
|
||||
export const User = defineMongooseModel('User', {
|
||||
name: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
**or you could use it like:**
|
||||
|
||||
```ts
|
||||
export const User = defineMongooseModel({
|
||||
name: 'User',
|
||||
schema: {
|
||||
name: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
})
|
||||
```
|
||||
For detailed [configuration](https://docs.arashsheyda.me/nuxt-mongoose/getting-started/configuration) and usage instructions, please refer to our [documentation](https://docs.arashsheyda.me/nuxt-mongoose).
|
||||
|
||||
## License
|
||||
|
||||
|
||||
12
docs/.gitignore
vendored
12
docs/.gitignore
vendored
@ -1,12 +0,0 @@
|
||||
node_modules
|
||||
*.iml
|
||||
.idea
|
||||
*.log*
|
||||
.nuxt
|
||||
.vscode
|
||||
.DS_Store
|
||||
coverage
|
||||
dist
|
||||
sw.*
|
||||
.env
|
||||
.output
|
||||
@ -1,2 +0,0 @@
|
||||
shamefully-hoist=true
|
||||
strict-peer-dependencies=false
|
||||
1
docs/README.md
Normal file
1
docs/README.md
Normal file
@ -0,0 +1 @@
|
||||
# the docs has been moved to [arashsheyda/docs](https://github.com/arashsheyda/docs/tree/main/content/1.nuxt-mongoose)
|
||||
@ -1,36 +0,0 @@
|
||||
export default defineAppConfig({
|
||||
docus: {
|
||||
title: 'Nuxt Mongoose',
|
||||
description: 'A Nuxt module for simplifying the use of Mongoose in your project.',
|
||||
image: '/cover.jpg',
|
||||
socials: {
|
||||
twitter: 'arash_sheyda',
|
||||
github: 'arashsheyda/nuxt-mongoose',
|
||||
},
|
||||
github: {
|
||||
dir: 'docs/content',
|
||||
branch: 'main',
|
||||
repo: 'nuxt-mongoose',
|
||||
owner: 'arashsheyda',
|
||||
edit: true,
|
||||
},
|
||||
aside: {
|
||||
level: 1,
|
||||
collapsed: false,
|
||||
exclude: [],
|
||||
},
|
||||
header: {
|
||||
logo: true,
|
||||
showLinkIcon: true,
|
||||
exclude: [],
|
||||
},
|
||||
footer: {
|
||||
iconLinks: [
|
||||
{
|
||||
href: 'https://nuxt.com',
|
||||
icon: 'simple-icons:nuxtdotjs',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
})
|
||||
@ -1,295 +0,0 @@
|
||||
<template>
|
||||
<svg
|
||||
width="403"
|
||||
height="226"
|
||||
viewBox="0 0 403 226"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<g clip-path="url(#clip0_1180_138)">
|
||||
<g opacity="0.54">
|
||||
<path
|
||||
d="M0 12C0 5.37259 5.37258 0 12 0H391C397.627 0 403 5.37258 403 12V214C403 220.627 397.627 226 391 226H12C5.37259 226 0 220.627 0 214V12Z"
|
||||
fill="url(#paint0_linear_1180_138)"
|
||||
fill-opacity="0.3"
|
||||
/>
|
||||
<path
|
||||
d="M12 0.5H391C397.351 0.5 402.5 5.64873 402.5 12V214C402.5 220.351 397.351 225.5 391 225.5H12C5.64873 225.5 0.5 220.351 0.5 214V12C0.5 5.64873 5.64873 0.5 12 0.5Z"
|
||||
stroke="url(#paint1_linear_1180_138)"
|
||||
stroke-opacity="0.4"
|
||||
/>
|
||||
</g>
|
||||
<path
|
||||
opacity="0.54"
|
||||
d="M49.7811 28H57.5876C57.8356 28 58.0792 27.9354 58.2939 27.8125C58.5086 27.6896 58.6869 27.5128 58.8108 27.3C58.9347 27.0871 58.9999 26.8457 58.9998 26.5999C58.9997 26.3542 58.9343 26.1128 58.8102 25.9001L53.5676 16.9001C53.4437 16.6873 53.2654 16.5105 53.0507 16.3877C52.836 16.2648 52.5925 16.2001 52.3446 16.2001C52.0967 16.2001 51.8532 16.2648 51.6385 16.3877C51.4238 16.5105 51.2455 16.6873 51.1216 16.9001L49.7811 19.2028L47.1602 14.6998C47.0361 14.487 46.8578 14.3104 46.6431 14.1875C46.4283 14.0647 46.1847 14 45.9368 14C45.6889 14 45.4453 14.0647 45.2305 14.1875C45.0158 14.3104 44.8375 14.487 44.7134 14.6998L38.1896 25.9001C38.0655 26.1128 38.0001 26.3542 38 26.5999C37.9999 26.8457 38.0651 27.0871 38.189 27.3C38.3129 27.5128 38.4912 27.6896 38.7059 27.8125C38.9207 27.9354 39.1643 28 39.4122 28H44.3125C46.254 28 47.6859 27.1547 48.6711 25.5057L51.063 21.4001L52.3442 19.2028L56.1893 25.8028H51.063L49.7811 28ZM44.2326 25.8005L40.8128 25.7998L45.9391 17.0004L48.4969 21.4001L46.7843 24.3407C46.13 25.4107 45.3867 25.8005 44.2326 25.8005Z"
|
||||
fill="white"
|
||||
fill-opacity="0.1"
|
||||
/>
|
||||
<line
|
||||
opacity="0.54"
|
||||
x1="43.5"
|
||||
y1="75.5"
|
||||
x2="84.5"
|
||||
y2="75.5"
|
||||
stroke="white"
|
||||
stroke-opacity="0.1"
|
||||
stroke-width="5"
|
||||
stroke-linecap="round"
|
||||
/>
|
||||
<line
|
||||
opacity="0.54"
|
||||
x1="43.5"
|
||||
y1="147.5"
|
||||
x2="63.5"
|
||||
y2="147.5"
|
||||
stroke="white"
|
||||
stroke-opacity="0.1"
|
||||
stroke-width="5"
|
||||
stroke-linecap="round"
|
||||
/>
|
||||
<line
|
||||
opacity="0.54"
|
||||
x1="172.5"
|
||||
y1="147.5"
|
||||
x2="192.899"
|
||||
y2="147.5"
|
||||
stroke="white"
|
||||
stroke-opacity="0.1"
|
||||
stroke-width="5"
|
||||
stroke-linecap="round"
|
||||
/>
|
||||
<line
|
||||
opacity="0.54"
|
||||
x1="301.5"
|
||||
y1="147.5"
|
||||
x2="321.5"
|
||||
y2="147.5"
|
||||
stroke="white"
|
||||
stroke-opacity="0.1"
|
||||
stroke-width="5"
|
||||
stroke-linecap="round"
|
||||
/>
|
||||
<line
|
||||
opacity="0.54"
|
||||
x1="143.5"
|
||||
y1="20.5"
|
||||
x2="167.5"
|
||||
y2="20.5"
|
||||
stroke="white"
|
||||
stroke-opacity="0.1"
|
||||
stroke-width="5"
|
||||
stroke-linecap="round"
|
||||
/>
|
||||
<line
|
||||
opacity="0.54"
|
||||
x1="184.5"
|
||||
y1="20.5"
|
||||
x2="208.5"
|
||||
y2="20.5"
|
||||
stroke="white"
|
||||
stroke-opacity="0.1"
|
||||
stroke-width="5"
|
||||
stroke-linecap="round"
|
||||
/>
|
||||
<line
|
||||
opacity="0.54"
|
||||
x1="225.5"
|
||||
y1="20.5"
|
||||
x2="249.5"
|
||||
y2="20.5"
|
||||
stroke="white"
|
||||
stroke-opacity="0.1"
|
||||
stroke-width="5"
|
||||
stroke-linecap="round"
|
||||
/>
|
||||
<line
|
||||
opacity="0.54"
|
||||
x1="43.5"
|
||||
y1="93.5"
|
||||
x2="178.5"
|
||||
y2="93.5"
|
||||
stroke="white"
|
||||
stroke-opacity="0.1"
|
||||
stroke-width="5"
|
||||
stroke-linecap="round"
|
||||
/>
|
||||
<line
|
||||
opacity="0.54"
|
||||
x1="43.5"
|
||||
y1="162.5"
|
||||
x2="115.544"
|
||||
y2="162.5"
|
||||
stroke="white"
|
||||
stroke-opacity="0.1"
|
||||
stroke-width="5"
|
||||
stroke-linecap="round"
|
||||
/>
|
||||
<line
|
||||
opacity="0.54"
|
||||
x1="172.5"
|
||||
y1="162.5"
|
||||
x2="244.5"
|
||||
y2="162.5"
|
||||
stroke="white"
|
||||
stroke-opacity="0.1"
|
||||
stroke-width="5"
|
||||
stroke-linecap="round"
|
||||
/>
|
||||
<line
|
||||
opacity="0.54"
|
||||
x1="301.5"
|
||||
y1="162.5"
|
||||
x2="373.5"
|
||||
y2="162.5"
|
||||
stroke="white"
|
||||
stroke-opacity="0.1"
|
||||
stroke-width="5"
|
||||
stroke-linecap="round"
|
||||
/>
|
||||
<line
|
||||
opacity="0.54"
|
||||
x1="43.5"
|
||||
y1="111.5"
|
||||
x2="178.5"
|
||||
y2="111.5"
|
||||
stroke="white"
|
||||
stroke-opacity="0.1"
|
||||
stroke-width="5"
|
||||
stroke-linecap="round"
|
||||
/>
|
||||
<line
|
||||
opacity="0.54"
|
||||
x1="43.5"
|
||||
y1="177.5"
|
||||
x2="115.5"
|
||||
y2="177.5"
|
||||
stroke="white"
|
||||
stroke-opacity="0.1"
|
||||
stroke-width="5"
|
||||
stroke-linecap="round"
|
||||
/>
|
||||
<line
|
||||
opacity="0.54"
|
||||
x1="172.5"
|
||||
y1="177.5"
|
||||
x2="244.5"
|
||||
y2="177.5"
|
||||
stroke="white"
|
||||
stroke-opacity="0.1"
|
||||
stroke-width="5"
|
||||
stroke-linecap="round"
|
||||
/>
|
||||
<line
|
||||
opacity="0.54"
|
||||
x1="301.5"
|
||||
y1="177.5"
|
||||
x2="373.5"
|
||||
y2="177.5"
|
||||
stroke="white"
|
||||
stroke-opacity="0.1"
|
||||
stroke-width="5"
|
||||
stroke-linecap="round"
|
||||
/>
|
||||
<rect
|
||||
opacity="0.54"
|
||||
x="335.465"
|
||||
y="17.619"
|
||||
width="41.1089"
|
||||
height="11.7454"
|
||||
rx="2.93635"
|
||||
fill="white"
|
||||
fill-opacity="0.1"
|
||||
/>
|
||||
<rect
|
||||
opacity="0.54"
|
||||
x="212"
|
||||
y="70"
|
||||
width="164"
|
||||
height="44"
|
||||
rx="5"
|
||||
fill="url(#paint2_linear_1180_138)"
|
||||
fill-opacity="0.1"
|
||||
/>
|
||||
<!-- Mongo Logo -->
|
||||
<g transform="translate(170, 80) scale(2)">
|
||||
<rect width="32" height="32" rx="7.5" style="fill:#023430" />
|
||||
<path d="M21.4,13.4C20.1,7.6,17.3,6.1,16.6,5a10.1,10.1,0,0,1-.7-1.5,1.6,1.6,0,0,1-.6,1.2,14.1,14.1,0,0,0-4.9,10.5c-.3,6.1,4.5,9.9,5.1,10.3a1.4,1.4,0,0,0,1.4-.2,12.1,12.1,0,0,0,4.5-11.9" style="fill:#10aa50" />
|
||||
<path d="M16.1,22.2a17.8,17.8,0,0,1-.5,3.3s.2,1.5.3,3h.5a30.6,30.6,0,0,1,.5-3.2C16.3,25,16.1,23.6,16.1,22.2Z" style="fill:#b8c4c2" />
|
||||
<path d="M16.9,25.3c-.6-.3-.8-1.7-.8-3.1s.2-4.3.1-6.5,0-10.7-.3-12.1L16.6,5c.7,1.1,3.5,2.6,4.8,8.4A12,12,0,0,1,16.9,25.3Z" style="fill:#12924f" />
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<filter
|
||||
id="filter0_d_1180_138"
|
||||
x="162.895"
|
||||
y="74.8947"
|
||||
width="76.2105"
|
||||
height="76.2105"
|
||||
filterUnits="userSpaceOnUse"
|
||||
color-interpolation-filters="sRGB"
|
||||
>
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix" />
|
||||
<feColorMatrix
|
||||
in="SourceAlpha"
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
||||
result="hardAlpha"
|
||||
/>
|
||||
<feOffset dy="4" />
|
||||
<feGaussianBlur stdDeviation="2" />
|
||||
<feComposite in2="hardAlpha" operator="out" />
|
||||
<feColorMatrix
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.44 0"
|
||||
/>
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in2="BackgroundImageFix"
|
||||
result="effect1_dropShadow_1180_138"
|
||||
/>
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in="SourceGraphic"
|
||||
in2="effect1_dropShadow_1180_138"
|
||||
result="shape"
|
||||
/>
|
||||
</filter>
|
||||
<linearGradient
|
||||
id="paint0_linear_1180_138"
|
||||
x1="201.5"
|
||||
y1="0"
|
||||
x2="201.5"
|
||||
y2="102.822"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
>
|
||||
<stop stop-color="white" />
|
||||
<stop offset="1" stop-color="white" stop-opacity="0" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="paint1_linear_1180_138"
|
||||
x1="201.5"
|
||||
y1="-1.34109e-07"
|
||||
x2="201.527"
|
||||
y2="153.598"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
>
|
||||
<stop stop-color="white" />
|
||||
<stop offset="1" stop-color="white" stop-opacity="0" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="paint2_linear_1180_138"
|
||||
x1="294"
|
||||
y1="70"
|
||||
x2="294"
|
||||
y2="114"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
>
|
||||
<stop stop-color="white" />
|
||||
<stop offset="1" stop-color="white" stop-opacity="0" />
|
||||
</linearGradient>
|
||||
<clipPath id="clip0_1180_138">
|
||||
<rect width="403" height="226" fill="white" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
</template>
|
||||
@ -1,18 +0,0 @@
|
||||
<template>
|
||||
<svg id="NuxtMongooseLogo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 235.5 33.2">
|
||||
<rect width="32" height="32" rx="7.5" style="fill:#023430" />
|
||||
<path d="M21.4,13.4C20.1,7.6,17.3,6.1,16.6,5a10.1,10.1,0,0,1-.7-1.5,1.6,1.6,0,0,1-.6,1.2,14.1,14.1,0,0,0-4.9,10.5c-.3,6.1,4.5,9.9,5.1,10.3a1.4,1.4,0,0,0,1.4-.2,12.1,12.1,0,0,0,4.5-11.9" style="fill:#10aa50" />
|
||||
<path d="M16.1,22.2a17.8,17.8,0,0,1-.5,3.3s.2,1.5.3,3h.5a30.6,30.6,0,0,1,.5-3.2C16.3,25,16.1,23.6,16.1,22.2Z" style="fill:#b8c4c2" />
|
||||
<path d="M16.9,25.3c-.6-.3-.8-1.7-.8-3.1s.2-4.3.1-6.5,0-10.7-.3-12.1L16.6,5c.7,1.1,3.5,2.6,4.8,8.4A12,12,0,0,1,16.9,25.3Z" style="fill:#12924f" />
|
||||
<text transform="translate(32.8 25.6)" style="font-size:25.818214416503906px;font-family:var(--font-sans);font-weight:700">
|
||||
<tspan fill="currentColor" x="4" y="0">Nuxt</tspan>
|
||||
<tspan x="67.8" y="0" style="fill:#10aa50">Mongoose</tspan>
|
||||
</text>
|
||||
</svg>
|
||||
</template>
|
||||
|
||||
<style>
|
||||
.NuxtMongooseLogo {
|
||||
font-family: serif;
|
||||
}
|
||||
</style>
|
||||
@ -1,78 +0,0 @@
|
||||
---
|
||||
title: Home
|
||||
navigation: false
|
||||
layout: page
|
||||
main:
|
||||
fluid: false
|
||||
---
|
||||
|
||||
:ellipsis{right=0px width=75% blur=150px}
|
||||
|
||||
::block-hero
|
||||
---
|
||||
cta:
|
||||
- Get started
|
||||
- /docs/getting-started/setup
|
||||
secondary:
|
||||
- Open on GitHub →
|
||||
- https://github.com/arashsheyda/nuxt-mongoose
|
||||
---
|
||||
|
||||
#title
|
||||
Nuxt [Mongoose]{style="color: var(--color-primary-500)"}
|
||||
|
||||
#description
|
||||
A Nuxt module for simplifying the use of [Mongoose](https://mongoosejs.com/) in your project.
|
||||
|
||||
#support
|
||||
:illustration
|
||||
::
|
||||
|
||||
::card-grid
|
||||
#title
|
||||
<h1 class="center">Elevate Your <br/> <span class=highlight> Developer Experience</span></h1>
|
||||
|
||||
#root
|
||||
:ellipsis{left=15rem width=40rem top=10rem blur=140px}
|
||||
|
||||
#default
|
||||
::card{icon=tabler:code}
|
||||
#title
|
||||
Nuxt DevTools Support
|
||||
#description
|
||||
Dive into your database with confidence. Benefit from Nuxt Devtools support, allowing you to inspect and debug your DB operations seamlessly.
|
||||
::
|
||||
|
||||
::card{icon=tabler:cloud-bolt}
|
||||
#title
|
||||
Auto Connection
|
||||
#description
|
||||
Forget about manual connection hassles. This module seamlessly handles the connection to your Mongoose database, making setup a breeze.
|
||||
::
|
||||
|
||||
::card{icon=tabler:plug}
|
||||
#title
|
||||
Extendable & hackable
|
||||
#description
|
||||
This module grants you access to the full spectrum of Mongoose functionalities. Leverage the power of Mongoose in your project.
|
||||
::
|
||||
|
||||
::
|
||||
|
||||
<style>
|
||||
.highlight {
|
||||
color: var(--color-primary-500);
|
||||
}
|
||||
|
||||
.center {
|
||||
text-align: center;
|
||||
}
|
||||
.card svg {
|
||||
height: 3rem!important;
|
||||
width: 3rem!important;
|
||||
}
|
||||
.support {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
</style>
|
||||
@ -1,56 +0,0 @@
|
||||
# Setup
|
||||
|
||||
A Nuxt module for simplifying the use of Mongoose in your project.
|
||||
|
||||
## Installation
|
||||
|
||||
1. Install `nuxt-mongoose` to your dependencies.
|
||||
|
||||
::code-group
|
||||
|
||||
```bash [pnpm]
|
||||
pnpm add nuxt-mongoose -D
|
||||
```
|
||||
|
||||
```bash [npm]
|
||||
npm install nuxt-mongoose -D
|
||||
```
|
||||
|
||||
```bash [yarn]
|
||||
yarn add nuxt-mongoose -D
|
||||
```
|
||||
|
||||
::
|
||||
|
||||
2. Add `nuxt-mongoose` to the `modules` section of your `nuxt.config` file.
|
||||
|
||||
```ts [nuxt.config]
|
||||
export default defineNuxtConfig({
|
||||
modules: [
|
||||
'nuxt-mongoose',
|
||||
],
|
||||
})
|
||||
```
|
||||
|
||||
::alert{ type=success }
|
||||
That's it! You can now use Mongoose in your Nuxt app ✨
|
||||
::
|
||||
|
||||
|
||||
## Options
|
||||
|
||||
You can configure the module by adding a `mongoose` section to your `nuxt.config` file.
|
||||
read more about [Mongoose options](/docs/getting-started/configuration).
|
||||
|
||||
```ts [nuxt.config]
|
||||
export default defineNuxtConfig({
|
||||
mongoose: {
|
||||
// Options
|
||||
},
|
||||
})
|
||||
```
|
||||
If you want to configure only the `uri` just add `MONGODB_URI` in your `.env` file.
|
||||
|
||||
```env
|
||||
MONGODB_URI=YOUR_MONGO_URI
|
||||
```
|
||||
@ -1,21 +0,0 @@
|
||||
# Configuration
|
||||
|
||||
Configure Nuxt Mongoose with the `mongoose` property.
|
||||
|
||||
```ts [nuxt.config]
|
||||
export default defineNuxtConfig({
|
||||
mongoose: {
|
||||
uri: 'process.env.MONGODB_URI',
|
||||
options: {},
|
||||
modelsDir: 'models',
|
||||
devtools: true,
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
| **Key** | **Type** | **Default** | **Description** |
|
||||
| ---------------------------- | ---------- | ----------------------- | ---------------------------------------------------------------------------------------------------- |
|
||||
| `uri` | `string` | process.env.MONGODB_URI | Connection Uri String |
|
||||
| `options` | `ConnectOptions` | { } | Connection Options |
|
||||
| `modelsDir` | `string` | models | The models(schema) directory located in `server` for auto-import |
|
||||
| `devtools` | `boolean` | true | Enable Mongoose module in [`Nuxt Devtools`](https://github.com/nuxt/devtools) |
|
||||
@ -1,2 +0,0 @@
|
||||
icon: tabler:brand-mongodb
|
||||
navigation.redirect: /getting-started/setup
|
||||
@ -1,74 +0,0 @@
|
||||
# Utils
|
||||
|
||||
Discover all available utils.
|
||||
|
||||
## `defineMongooseModel`
|
||||
|
||||
This function creates a new Mongoose model with schema. Example usage:
|
||||
|
||||
::code-group
|
||||
|
||||
```ts [named parameters]
|
||||
export const User = defineMongooseModel({
|
||||
name: 'User',
|
||||
schema: {
|
||||
email: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
unique: true,
|
||||
},
|
||||
},
|
||||
options: {
|
||||
|
||||
},
|
||||
hooks(schema) {
|
||||
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
```ts [positional parameters]
|
||||
import { defineMongooseModel } from '#nuxt/mongoose'
|
||||
|
||||
export const User = defineMongooseModel('User', {
|
||||
email: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
unique: true,
|
||||
},
|
||||
}, {
|
||||
|
||||
}, (schema) => {
|
||||
|
||||
})
|
||||
```
|
||||
|
||||
::
|
||||
|
||||
|
||||
| **Key** | **Type** | **Require** | **Description** |
|
||||
| ---------------------------- | ----------- | ----------- | ----- |
|
||||
| `name` | `string` | true | Name of Model |
|
||||
| `schema` | [`SchemaDefinition`](https://mongoosejs.com/docs/schematypes.html) | true | Schema Definition of Model |
|
||||
| `options` | [`SchemaOptions`](https://mongoosejs.com/docs/guide.html#options) | false | Schema Options for Model |
|
||||
| `hooks` | [`(schema: Schema<T>) => void`](https://mongoosejs.com/docs/middleware.html) | false | Schema Hooks Function to customize Model |
|
||||
|
||||
|
||||
::alert
|
||||
you can access the default connection with importing it from mongoose:
|
||||
::
|
||||
```
|
||||
import { connection } from 'mongoose'
|
||||
```
|
||||
|
||||
## `defineMongooseConnection`
|
||||
This function creates a new Mongoose connection.
|
||||
- `nuxt-mongoose` provides a default connection for you, it auto-register a plugin in nitro, so you don't need to use this function unless you want to create a new connection. more info [here](https://github.com/arashsheyda/nuxt-mongoose/blob/main/src/runtime/server/plugins/mongoose.db.ts).
|
||||
|
||||
Example usage:
|
||||
|
||||
```ts
|
||||
import { defineMongooseConnection } from '#nuxt/mongoose'
|
||||
|
||||
export const connection = defineMongooseConnection('mongodb://127.0.0.1/nuxt-mongoose')
|
||||
```
|
||||
@ -1,8 +0,0 @@
|
||||
# Devtools (beta)
|
||||
|
||||
`nuxt-mongoose` comes with a [Nuxt Devtools](https://github.com/nuxt/devtools) module that allows you to manage your collections and generate api-endpoints & schemas...
|
||||
|
||||
Here is a demo video:
|
||||
|
||||
:video-player{src="https://www.youtube.com/watch?v=hK0npSfr_Vs"}
|
||||
|
||||
@ -1,5 +0,0 @@
|
||||
# Examples
|
||||
|
||||
Here are a few examples:
|
||||
|
||||
- Nuxt Mongoose Minimal: [:icon{name="tabler:brand-github"} Github](https://github.com/arashsheyda/nuxt-mongoose-minimal) [:icon{name="tabler:world"} Website](https://nuxt-mongoose-minimal.vercel.app/)
|
||||
@ -1,2 +0,0 @@
|
||||
title: API
|
||||
icon: tabler:book
|
||||
@ -1 +0,0 @@
|
||||
icon: tabler:file-description
|
||||
@ -1,5 +0,0 @@
|
||||
# Playground
|
||||
|
||||
:ellipsis{right=0px width=75% blur=150px}
|
||||
|
||||
:sandbox{src="https://stackblitz.com/github/arashsheyda/nuxt-mongoose-minimal"}
|
||||
@ -1 +0,0 @@
|
||||
icon: tabler:play-volleyball
|
||||
@ -1,3 +0,0 @@
|
||||
title: Releases
|
||||
icon: tabler:clipboard-text
|
||||
navigation.redirect: https://github.com/arashsheyda/nuxt-mongoose/releases
|
||||
@ -1,19 +0,0 @@
|
||||
export default defineNuxtConfig({
|
||||
extends: '@nuxt-themes/docus',
|
||||
|
||||
app: {
|
||||
head: {
|
||||
link: [
|
||||
{
|
||||
rel: 'icon',
|
||||
type: 'image/x-icon',
|
||||
href: '/mongoose-icon.svg',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
|
||||
modules: [
|
||||
'@nuxthq/studio',
|
||||
],
|
||||
})
|
||||
@ -1,17 +0,0 @@
|
||||
{
|
||||
"name": "docus-starter",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "nuxi dev",
|
||||
"build": "nuxi build",
|
||||
"generate": "nuxi generate",
|
||||
"preview": "nuxi preview",
|
||||
"lint": "eslint ."
|
||||
},
|
||||
"devDependencies": {
|
||||
"@nuxt-themes/docus": "^1.15.0",
|
||||
"@nuxthq/studio": "^1.0.2",
|
||||
"nuxt": "^3.8.0"
|
||||
}
|
||||
}
|
||||
8878
docs/pnpm-lock.yaml
generated
8878
docs/pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
Before Width: | Height: | Size: 46 KiB |
@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 256 256"><g fill="none"><rect width="256" height="256" fill="#023430" rx="60"/><path fill="#10AA50" d="M171.173 107.591c-10.537-46.481-32.497-58.855-38.099-67.602A99.398 99.398 0 0 1 126.949 28c-.296 4.13-.84 6.73-4.35 9.862c-7.047 6.283-36.977 30.673-39.496 83.486c-2.347 49.242 36.2 79.605 41.292 82.744c3.916 1.927 8.685.041 11.012-1.728c18.581-12.752 43.969-46.75 35.786-94.773"/><path fill="#B8C4C2" d="M128.545 177.871c-.97 12.188-1.665 19.27-4.129 26.235c0 0 1.617 11.603 2.753 23.894h4.019a223.446 223.446 0 0 1 4.384-25.732c-5.203-2.56-6.827-13.702-7.027-24.397Z"/><path fill="#12924F" d="M135.565 202.275c-5.258-2.429-6.779-13.806-7.013-24.404a499.824 499.824 0 0 0 1.136-52.545c-.276-9.194.13-85.158-2.265-96.28a92.425 92.425 0 0 0 5.651 10.936c5.602 8.754 27.569 21.128 38.099 67.609c8.203 47.941-17.047 81.849-35.608 94.684Z"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 926 B |
@ -1 +0,0 @@
|
||||
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 235.5 33.2"><rect width="32" height="32" rx="7.5" style="fill:#023430"/><path d="M21.4,13.4C20.1,7.6,17.3,6.1,16.6,5a10.1,10.1,0,0,1-.7-1.5,1.6,1.6,0,0,1-.6,1.2,14.1,14.1,0,0,0-4.9,10.5c-.3,6.1,4.5,9.9,5.1,10.3a1.4,1.4,0,0,0,1.4-.2,12.1,12.1,0,0,0,4.5-11.9" style="fill:#10aa50"/><path d="M16.1,22.2a17.8,17.8,0,0,1-.5,3.3s.2,1.5.3,3h.5a30.6,30.6,0,0,1,.5-3.2C16.3,25,16.1,23.6,16.1,22.2Z" style="fill:#b8c4c2"/><path d="M16.9,25.3c-.6-.3-.8-1.7-.8-3.1s.2-4.3.1-6.5,0-10.7-.3-12.1L16.6,5c.7,1.1,3.5,2.6,4.8,8.4A12,12,0,0,1,16.9,25.3Z" style="fill:#12924f"/><text transform="translate(32.8 25.6)" style="font-size:25.818214416503906px;font-family:OpenSans-Bold, Open Sans;font-weight:700">Nuxt <tspan x="70.8" y="0" style="fill:#10aa50">Mongoose</tspan></text></svg>
|
||||
|
Before Width: | Height: | Size: 851 B |
@ -1,8 +0,0 @@
|
||||
{
|
||||
"extends": [
|
||||
"@nuxtjs"
|
||||
],
|
||||
"lockFileMaintenance": {
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
@ -1,18 +0,0 @@
|
||||
import { defineTheme } from 'pinceau'
|
||||
|
||||
export default defineTheme({
|
||||
color: {
|
||||
primary: {
|
||||
50: '#e8f5e9',
|
||||
100: '#c8e6c9',
|
||||
200: '#a5d6a7',
|
||||
300: '#81c784',
|
||||
400: '#66bb6a',
|
||||
500: '#10a74f',
|
||||
600: '#10a74f',
|
||||
700: '#388e3c',
|
||||
800: '#2e7d32',
|
||||
900: '#1b5e20',
|
||||
},
|
||||
},
|
||||
})
|
||||
@ -1,3 +0,0 @@
|
||||
{
|
||||
"extends": "./.nuxt/tsconfig.json"
|
||||
}
|
||||
36
package.json
36
package.json
@ -1,13 +1,13 @@
|
||||
{
|
||||
"name": "nuxt-mongoose",
|
||||
"type": "module",
|
||||
"version": "1.0.2",
|
||||
"version": "1.0.6",
|
||||
"private": false,
|
||||
"packageManager": "pnpm@8.7.4",
|
||||
"description": "Nuxt 3 module for MongoDB with Mongoose",
|
||||
"license": "MIT",
|
||||
"funding": "https://github.com/sponsors/arashsheyda",
|
||||
"homepage": "https://nuxt-mongoose.nuxt.space",
|
||||
"homepage": "https://docs.arashsheyda.me/nuxt-mongoose",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/arashsheyda/nuxt-mongoose"
|
||||
@ -49,26 +49,26 @@
|
||||
"lint": "eslint . --fix"
|
||||
},
|
||||
"dependencies": {
|
||||
"@nuxt/devtools-kit": "1.0.0",
|
||||
"@nuxt/devtools-ui-kit": "1.0.0",
|
||||
"@nuxt/kit": "^3.8.0",
|
||||
"@vueuse/core": "^10.5.0",
|
||||
"defu": "^6.1.3",
|
||||
"fs-extra": "^11.1.1",
|
||||
"mongoose": "^7.6.3",
|
||||
"@nuxt/devtools-kit": "1.0.8",
|
||||
"@nuxt/devtools-ui-kit": "1.0.8",
|
||||
"@nuxt/kit": "^3.9.3",
|
||||
"@vueuse/core": "^10.7.2",
|
||||
"defu": "^6.1.4",
|
||||
"fs-extra": "^11.2.0",
|
||||
"mongoose": "^8.1.0",
|
||||
"ofetch": "^1.3.3",
|
||||
"pathe": "^1.1.1",
|
||||
"pathe": "^1.1.2",
|
||||
"pluralize": "^8.0.0",
|
||||
"sirv": "^2.0.3"
|
||||
"sirv": "^2.0.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@antfu/eslint-config": "1.0.0-beta.29",
|
||||
"@nuxt/module-builder": "^0.5.2",
|
||||
"@types/fs-extra": "^11.0.3",
|
||||
"@types/pluralize": "^0.0.32",
|
||||
"@antfu/eslint-config": "2.6.3",
|
||||
"@nuxt/module-builder": "^0.5.5",
|
||||
"@types/fs-extra": "^11.0.4",
|
||||
"@types/pluralize": "^0.0.33",
|
||||
"changelogen": "^0.5.5",
|
||||
"eslint": "8.52.0",
|
||||
"nuxt": "^3.8.0",
|
||||
"sass": "^1.69.5"
|
||||
"eslint": "8.56.0",
|
||||
"nuxt": "^3.9.3",
|
||||
"sass": "^1.69.7"
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,8 +1,14 @@
|
||||
<script setup>
|
||||
<script setup lang="ts">
|
||||
const { data } = await useFetch('/api/users')
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
Nuxt module playground!
|
||||
<br>
|
||||
<pre
|
||||
v-html="JSON.stringify(data, null, 2)"
|
||||
style="background: #131313;color: #4EA65A;padding: 20px;border-radius: 7px;text-shadow: 0px 0px 10px #00ff22;"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
5316
pnpm-lock.yaml
generated
5316
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@ -70,7 +70,6 @@ export default defineNuxtModule<ModuleOptions>({
|
||||
|
||||
if (!options.uri) {
|
||||
logger.warn('Missing MongoDB URI. You can set it in your `nuxt.config` or in your `.env` as `MONGODB_URI`')
|
||||
return
|
||||
}
|
||||
|
||||
const { resolve } = createResolver(import.meta.url)
|
||||
|
||||
21
src/runtime/server/services/connection.ts
Normal file
21
src/runtime/server/services/connection.ts
Normal file
@ -0,0 +1,21 @@
|
||||
import type { ConnectOptions } from 'mongoose'
|
||||
import { consola } from 'consola'
|
||||
import { colors } from 'consola/utils'
|
||||
import mongoose from 'mongoose'
|
||||
|
||||
// @ts-ignore
|
||||
import { useRuntimeConfig } from '#imports'
|
||||
|
||||
export async function defineMongooseConnection({ uri, options }: { uri?: string; options?: ConnectOptions } = {}): Promise<void> {
|
||||
const config = useRuntimeConfig().mongoose
|
||||
const mongooseUri = uri || config.uri
|
||||
const mongooseOptions = options || config.options
|
||||
|
||||
try {
|
||||
await mongoose.connect(mongooseUri, { ...mongooseOptions })
|
||||
consola.success('Connected to MongoDB')
|
||||
}
|
||||
catch (err) {
|
||||
consola.error(colors.red(`Error connecting to MongoDB: ${err}`))
|
||||
}
|
||||
}
|
||||
33
src/runtime/server/services/discriminator.ts
Normal file
33
src/runtime/server/services/discriminator.ts
Normal file
@ -0,0 +1,33 @@
|
||||
import type { Model, SchemaDefinition, SchemaOptions } from 'mongoose'
|
||||
import mongoose from 'mongoose'
|
||||
|
||||
export function defineMongooseDiscriminatorModel<T>(
|
||||
nameOrOptions: string | {
|
||||
name: string;
|
||||
baseModel: Model<T>;
|
||||
schema: SchemaDefinition<T>;
|
||||
options?: SchemaOptions;
|
||||
hooks?: (schema: mongoose.Schema<T>) => void;
|
||||
},
|
||||
baseModel?: Model<T>,
|
||||
schema?: SchemaDefinition<T>,
|
||||
options?: SchemaOptions,
|
||||
hooks?: (schema: mongoose.Schema<T>) => void,
|
||||
): Model<T> {
|
||||
let name: string
|
||||
if (typeof nameOrOptions === 'string') { name = nameOrOptions }
|
||||
else {
|
||||
name = nameOrOptions.name
|
||||
baseModel = nameOrOptions.baseModel
|
||||
schema = nameOrOptions.schema
|
||||
options = nameOrOptions.options
|
||||
hooks = nameOrOptions.hooks
|
||||
}
|
||||
|
||||
const newSchema = new mongoose.Schema<T>(schema, options as any)
|
||||
|
||||
if (hooks)
|
||||
hooks(newSchema)
|
||||
|
||||
return baseModel!.discriminator<T>(name, newSchema)
|
||||
}
|
||||
@ -1,49 +1,3 @@
|
||||
import { logger } from '@nuxt/kit'
|
||||
import mongoose from 'mongoose'
|
||||
import type { ConnectOptions, Model, SchemaDefinition, SchemaOptions } from 'mongoose'
|
||||
|
||||
import { useRuntimeConfig } from '#imports'
|
||||
|
||||
export async function defineMongooseConnection({ uri, options }: { uri?: string; options?: ConnectOptions } = {}): Promise<void> {
|
||||
const config = useRuntimeConfig().mongoose
|
||||
const mongooseUri = uri || config.uri
|
||||
const mongooseOptions = options || config.options
|
||||
|
||||
try {
|
||||
await mongoose.connect(mongooseUri, { ...mongooseOptions })
|
||||
logger.success('Connected to `MongoDB`')
|
||||
}
|
||||
catch (err) {
|
||||
logger.error('Error connecting to `MongoDB`', err)
|
||||
}
|
||||
}
|
||||
|
||||
export function defineMongooseModel<T>(
|
||||
nameOrOptions: string | {
|
||||
name: string
|
||||
schema: SchemaDefinition<T>
|
||||
options?: SchemaOptions
|
||||
hooks?: (schema: mongoose.Schema<T>) => void
|
||||
},
|
||||
schema?: SchemaDefinition<T>,
|
||||
options?: SchemaOptions,
|
||||
hooks?: (schema: mongoose.Schema<T>) => void,
|
||||
): Model<T> {
|
||||
let name: string
|
||||
if (typeof nameOrOptions === 'string') {
|
||||
name = nameOrOptions
|
||||
}
|
||||
else {
|
||||
name = nameOrOptions.name
|
||||
schema = nameOrOptions.schema
|
||||
options = nameOrOptions.options
|
||||
hooks = nameOrOptions.hooks
|
||||
}
|
||||
|
||||
const newSchema = new mongoose.Schema<T>(schema, options as any)
|
||||
|
||||
if (hooks)
|
||||
hooks(newSchema)
|
||||
|
||||
return mongoose.model<T>(name, newSchema)
|
||||
}
|
||||
export { defineMongooseConnection } from './connection'
|
||||
export { defineMongooseModel } from './model'
|
||||
export { defineMongooseDiscriminatorModel } from './discriminator'
|
||||
|
||||
32
src/runtime/server/services/model.ts
Normal file
32
src/runtime/server/services/model.ts
Normal file
@ -0,0 +1,32 @@
|
||||
import type { Model, SchemaDefinition, SchemaOptions } from 'mongoose'
|
||||
import mongoose from 'mongoose'
|
||||
|
||||
export function defineMongooseModel<T>(
|
||||
nameOrOptions: string | {
|
||||
name: string
|
||||
schema: SchemaDefinition<T>
|
||||
options?: SchemaOptions
|
||||
hooks?: (schema: mongoose.Schema<T>) => void
|
||||
},
|
||||
schema?: SchemaDefinition<T>,
|
||||
options?: SchemaOptions,
|
||||
hooks?: (schema: mongoose.Schema<T>) => void,
|
||||
): Model<T> {
|
||||
let name: string
|
||||
if (typeof nameOrOptions === 'string') {
|
||||
name = nameOrOptions
|
||||
}
|
||||
else {
|
||||
name = nameOrOptions.name
|
||||
schema = nameOrOptions.schema
|
||||
options = nameOrOptions.options
|
||||
hooks = nameOrOptions.hooks
|
||||
}
|
||||
|
||||
const newSchema = new mongoose.Schema<T>(schema, options as any)
|
||||
|
||||
if (hooks)
|
||||
hooks(newSchema)
|
||||
|
||||
return mongoose.model<T>(name, newSchema)
|
||||
}
|
||||
Reference in New Issue
Block a user