UNPKG

@seatbelt/orm-waterline

Version:

Seatbelt Orm Plugin Waterline

54 lines (46 loc) 1.26 kB
import { Log } from '@seatbelt/core'; const Waterline = require('waterline'); const database = new Waterline(); const modelRegister: any = {}; let db: any; export declare type IModelConstructor = new () => { name: string; }; export interface IPluginConfig { adapters: any; connections: any; } const log = new Log('waterline'); export function DModel(requiredParams: any): any { return function(OriginalClassConstructor: IModelConstructor) { class NewModel extends OriginalClassConstructor { constructor() { super(); const collection = Waterline.Collection.extend(requiredParams); database.loadCollection(collection); } } return NewModel; }; } export function DModels(): any { return function(OriginalClass: any, propertyName: string) { OriginalClass[propertyName] = modelRegister; }; } export function waterlinePlugin(config: IPluginConfig): any { return { routes: (routes: any[]) => { database.initialize(config, (err: Error, DB: any) => { if (err) { log.error('<error>', err); } db = DB.collections; log.system('db initialized'); routes.forEach(route => { route.models = db; }); }); } }; }