# class-to-mongoose-schema

> Enables inheritance of Mongoose Schema via JavaScript Classes

Latest version **2.0.1** (published 2017-09-25) · MIT license · 0 weekly downloads

## Install

```sh
npm install class-to-mongoose-schema
pnpm add class-to-mongoose-schema
yarn add class-to-mongoose-schema
bun add class-to-mongoose-schema
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.0.1 |
| Published | 2017-09-25 |
| First published | 2017-05-02 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 3 |
| Author | Eric Yang |
| Maintainers | eeyang92 |
| Keywords | mongoose, class, schema, orm |

## Links

- npm: https://www.npmjs.com/package/class-to-mongoose-schema
- Repository: https://github.com/eeyang92/class-to-mongoose-schema
- Homepage: https://github.com/eeyang92/class-to-mongoose-schema#readme
- Issues: https://github.com/eeyang92/class-to-mongoose-schema/issues
- npm.io page: https://npm.io/package/class-to-mongoose-schema

## Alternatives

- [mobx-react](https://npm.io/package/mobx-react.md) — 2.8M weekly downloads
- [rc-tree](https://npm.io/package/rc-tree.md) — 2.6M weekly downloads
- [@react-oauth/google](https://npm.io/package/@react-oauth/google.md) — 1.3M weekly downloads
- [@wagmi/connectors](https://npm.io/package/@wagmi/connectors.md) — 877.0K weekly downloads
- [vee-validate](https://npm.io/package/vee-validate.md) — 836.4K weekly downloads

## Recent versions

- 2.0.1 (latest) — 2017-09-25
- 2.0.0 — 2017-09-25
- 1.2.5 — 2017-06-20
- 1.2.3 — 2017-06-20
- 1.2.2 — 2017-05-04
- 1.2.1 — 2017-05-04
- 1.2.0 — 2017-05-04
- 1.1.3 — 2017-05-04
- 1.1.2 — 2017-05-02
- 1.1.1 — 2017-05-02
- 1.1.0 — 2017-05-02
- 1.0.3 — 2017-05-02
- 1.0.2 — 2017-05-02

## README

## Installation

```sh
npm install --save class-to-mongoose-schema
```

or

```sh
yarn add class-to-mongoose-schema
```

## Purpose of this Package

To enable inheritance of Mongoose Schema via JavaScript Classes.

Note: Only methods, variables and static methods are converted to the schema, static variables are ignored as there is no equivalent in Mongoose.

As of 2.x, `mongoose` has become a peer dependency

## Example

Via Properties:

```javascript
// Person.js
import mongoose, { Schema } from 'mongoose'
import classToSchema from 'class-to-mongoose-schema'

export class Person {
	firstName = String
	lastName = String

	static getAll() { // Example static method
		return mongoose.model('Person').find()
	}
}

const personSchema = classToSchema(new Person())

export { personSchema }

export default mongoose.model(Person.name, personSchema) // Person.name === 'Person'
```

```javascript
// User.js
import mongoose, { Schema } from 'mongoose'
import classToSchema from 'class-to-mongoose-schema'

import { Person } from 'Person'

export class User extends Person {
	username = String
	password = String

	secure(args) { // Example method
		// ...
	}

	static getAll() { // Example static method
		return mongoose.model('User').find()
	}
}

const userSchema = classToSchema(new User())

export { userSchema }

export default mongoose.model(User.name, userSchema) // User.name === 'User'
```

Via Constructor (pass in arguments on object instantiation):

```javascript
// Person.js
import mongoose, { Schema } from 'mongoose'
import classToSchema from 'class-to-mongoose-schema'

export class Person {
	constructor(args) {
		this.firstName = String
		this.lastName = String
	}

	static getAll() { // Example static method
		return mongoose.model('Person').find()
	}
}

const personSchema = classToSchema(new Person(args))

export { personSchema }

export default mongoose.model(Person.name, personSchema) // Person.name === 'Person'
```

```javascript
// User.js
import mongoose, { Schema } from 'mongoose'
import classToSchema from 'class-to-mongoose-schema'

import { Person } from 'Person'

export class User extends Person {
	constructor(args) {
		super(args)

		this.username = String
		this.password = String
	}

	secure(args) { // Example method
		// ...
	}

	static getAll() { // Example static method
		return mongoose.model('User').find()
	}
}

const userSchema = classToSchema(new User(args))

export { userSchema }

export default mongoose.model(User.name, userSchema) // User.name === 'User'
```

---
_Source: https://npm.io/package/class-to-mongoose-schema · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
