Security News
Fluent Assertions Faces Backlash After Abandoning Open Source Licensing
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
typemongoose
Advanced tools
Typescript wrapper for mongoose library
npm install --save typemongoose
It makes use of decorators. Check the example below
import * as mongoose from "mongoose";
import { BaseModel, Decorators, ModelRepo } from "typemongoose";
const {
Hook,
Hooks,
HookTypes,
Member,
Method,
Model
} = Decorators;
@Model<User>()
export abstract class User extends BaseModel {
@Member({ type: String })
public name: string;
@Member({ type: Date })
public dob: Date;
@Member({ type: Boolean })
public isMale: boolean;
@Member({ type: Date })
public created_at: Date;
@Member({ type: Date })
public updated_at: Date;
@Method()
public getName(): string {
return this.name;
}
@Method()
public async updateName(name): Promise<string> {
this.name = name;
await this.save();
return name;
}
@Hook(HookTypes.pre, Hooks.save)
private async beforeSave() {
if (!this.created_at) {
this.created_at = new Date();
}
this.updated_at = new Date();
}
}
class RUser extends ModelRepo<User> {
protected getModelName() {
return "User";
}
public async getAllObjects(): Promise<User[]> {
return this.query.find({});
}
}
const UserRepo = new RUser();
User
) should be abstract. The reason is, mongoose itself creates a object, extending the class we provideconst user = UserRepo.create({...}); // save will get automatically
or
const user = new UserRepo.query({...});
user.save();
HookTypes.pre
or HookTypes.post
and hooks can be Hooks.init
, Hooks.remove
, Hooks.save
, Hooks.update
and Hooks.validate
BasicRepo
as explained belowimport { BasicRepo } from "typemongoose";
class Book extends ... {...};
const BookRepo = new BasicRepo(Book);
Here you have two type of objects
User
It is the base object you will get when query. You can define methods to it assigning decorator.UserRepo
It is the Repository for the User
object. You can define static methods here. You can query everything we use on mongoose object from UserRepo.query
. Check following exampleconst all = await UserRepo.query.find({});
const user = await UserRepo.query.findOne({...});
When you have reference members, you can define them as below
@Model<Book>()
export abstract class Book extends BaseModel {
@Member({ type: String })
public name: string;
@Member({ type: mongoose.Schema.Types.ObjectId, ref: "User" })
public user: string|User;
}
class RBook extends ModelRepo<Book> {
protected getModelName() {
return "Book";
}
}
const BookRepo = new RBook();
And you can use it as
const book = BookRepo.findOne({}).populate("user");
const user: User = book.user;
user.getName();
Or
const book = BookRepo.findOne({});
const user: String = book.user.toString(); // it will be id now
FAQs
Typescript ORM for mongoose
We found that typemongoose demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
Research
Security News
Socket researchers uncover the risks of a malicious Python package targeting Discord developers.
Security News
The UK is proposing a bold ban on ransomware payments by public entities to disrupt cybercrime, protect critical services, and lead global cybersecurity efforts.