UNPKG

@girin/framework

Version:

Core modules for Girin: GraphQL server framework

87 lines 3.13 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const nedb_1 = __importDefault(require("nedb")); const FrameworkDatastore_1 = require("../core/FrameworkDatastore"); class NeDBFrameworkDatastore extends FrameworkDatastore_1.FrameworkDatastore { constructor() { super(); this.storage = new Map(); } save(obj) { const collection = this.getCollection(obj.constructor); if (!(obj instanceof NeDBModel)) { throw new FrameworkDatastore_1.TypeNotSupportedError(); } return new Promise((resolve, reject) => { if (!obj.id) { collection.insert(obj.$source, (err, doc) => { if (err) { reject(err); } else { obj.$source = doc; resolve(obj); } }); } else { collection.update({ _id: obj.id }, { $set: obj.$source }, {}, (err, count) => { if (err) { reject(err); } else { resolve(obj); } }); } }); } find(cls, predicate) { const collection = this.getCollection(cls); return new Promise((resolve, reject) => collection.findOne(predicate, (err, doc) => err ? reject(err) : resolve(doc ? new cls(doc) : null))); } get(cls, id) { const collection = this.getCollection(cls); return new Promise((resolve, reject) => collection.findOne({ _id: id }, (err, doc) => err ? reject(err) : resolve(doc ? new cls(doc) : null))); } delete(cls, id) { const collection = this.getCollection(cls); return new Promise((resolve, reject) => { collection.remove({ _id: id }, (err, n) => err ? reject(err) : resolve(!n)); }); } getCollection(cls) { let collection = this.storage.get(cls); if (!collection) { collection = new nedb_1.default({ inMemoryOnly: true }); this.storage.set(cls, collection); } return collection; } } exports.NeDBFrameworkDatastore = NeDBFrameworkDatastore; class NeDBModel { constructor($source = {}) { this.$source = $source; } get id() { return this.$source._id; } set id(value) { this.$source._id = value; } } exports.NeDBModel = NeDBModel; function nedbField(alias) { return function (prototype, propertyKey) { const fieldName = alias || propertyKey; const get = function getField() { return this.$source[fieldName]; }; const set = function setField(value) { this.$source[fieldName] = value; }; Object.defineProperty(prototype, propertyKey, { get, set }); }; } exports.nedbField = nedbField; //# sourceMappingURL=NeDBFrameworkDatastore.js.map