- TypeScript-safe schemas
- JSON Schema MongoDB validation
- 🎉 Lightweight library
- 🚀 Blazing fast
papr
is a lightweight library built around the MongoDB NodeJS driver, written in TypeScript.
papr
uses MongoDB's JSON Schema validation feature to enable validation of document writes at runtime (requires MongoDB 3.6+).
papr
has a familiar API - if you have used the raw mongodb
methods to query and change documents before, then you already know how to use papr
.
//user.module.ts
import {Field, Model} from 'papr-nest';
@Model()
export default class User {
@Field()
age: number
@Field({required: true})
firstName: string
@Field({required: true})
lastName: string
}
// app.model.ts
import { PaprModule } from 'papr-nest';
import User from './user/user.model';
@Module({
imports: [
PaprModule.forRoot({
connectionString: process.env.MONGO_URI,
models: [User],
// you can also use a glob:
models: 'src/**/*.model.ts',
}),
UserModule,
],
})
export class ApplicationModule {}
//user.module.ts
import { PaprModule } from 'papr-nest';
import { UserService } from './user.service';
import User from './user.model';
@Module({
imports: [PaprModule.forFeature(User)],
providers: [UserService],
})
export class UserModule {}
// user.service.ts
import { getPaprRepositoryToken, PaprRepository } from 'papr-nest';
import User from './user.model';
@Injectable()
export class UserService {
constructor(
@Inject(getPaprRepositoryToken(User))
private readonly userRepository: PaprRepository<User>,
) {}
async findAll(): Promise<User[]> {
return await this.userRepository.find({});
}
async create(): Promise<User> {
const newUser = await this.userRepository.insertOne({
age: 18,
firstName: 'Elliot',
lastName: 'Alderson'
});
return newUser;
}
}