@girin/framework
Version:
Core modules for Girin: GraphQL server framework
87 lines • 3.13 kB
JavaScript
;
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