mongoose-type-gen

0.0.2 • Public • Published

Mongoose Type Gen

A Cli tool for generating typescript definitions for mongoose schemas

Supported features

  • Virtuals
  • Instance methods
  • Static methods
  • Timestamps
  • Nested Fields
  • Embedded Schemas
  • Required fields
  • Custom data types
  • Typings for method arguments and return types
  • Refs

Usage

# Locally in your project. 
npm install -D mongoose-type-gen
 
# Or globally with TypeScript. 
npm install -g mongoose-type-gen

And generate .d.ts files with the cli command:

$: mongoose-type-gen ./src/models/*.ts

Sample

import {Schema} from "mongoose";
 
const family = new Schema({
    familyName: String
})
 
const User = new Schema({
    name: String,
    lastname: {
        type: String,
    },
    rank: Number,
    books: [
        {
            type: String,
            default: ['My Book']
        }
    ],
    authId: Schema.Types.ObjectId,
    info: {
        email: String,
        github: {
            type: String,
            required: true
        },
        npm: {
            url: String,
        }
    },
    matrix3D: [[[String]]],
    family: family
}, {
    timestamps: true
})
 
User.virtual('fullName').get(function (this: any) {
    return this.name + this.lastname
})
 
User.virtual('fullNameTyped', { type: [String] }).get(function (this: any) {
    return this.name + this.lastname
})
 
;(User.method as any)('writeBook', () => {console.log('writing book')}, {s: true})
 
User.static('findUserByBook', function (this: any, book: any) {
    return this.find({ book })
})
 
export {
    User
}

The schema above will be transformed into

import { Schema, Model, Document } from 'mongoose' 
 
interface UserInfoNpm {
    url?: string;
}
 
interface UserInfo {
    email?: string;
    github: string;
    npm: UserInfoNpm;
}
 
interface UserFamily {
    familyName?: string;
    id?: any;
}
 
export interface User {
    name?: string;
    lastname?: string;
    rank?: number;
    books?: string[];
    authId?: Schema.Types.ObjectId;
    info: UserInfo;
    matrix3D?: string[][][];
    family: UserFamily;
    updatedAt?: Date;
    createdAt?: Date;
    fullName?: any;
    fullNameTyped?: string[];
    initializeTimestamps: Function;
    writeBook: Function;
}
 
export type UserDocument = User & Document
export interface UserModel extends Model<UserDocument> {
    findUserByBook: Function;
}
 
 
export type UserSchema = Schema

Readme

Keywords

none

Package Sidebar

Install

npm i mongoose-type-gen

Weekly Downloads

2

Version

0.0.2

License

MIT

Unpacked Size

21.2 kB

Total Files

11

Last publish

Collaborators

  • sasanfarrokh