blow-data
Version:
Data access layer for Blow.
70 lines (69 loc) • 2.29 kB
JavaScript
'use strict';
const rxjs_1 = require('rxjs');
const blow_collection_1 = require('blow-collection');
const blow_query_1 = require('blow-query');
const Adapter_1 = require('./Adapter');
function copyObject(obj) {
return Object.assign({}, obj);
}
class MemoryAdapter extends Adapter_1.Adapter {
_connect() {
this._db = new Map();
return rxjs_1.Observable.of(this);
}
_collection(metadata) {
const collectionName = metadata.pluralName;
const idKey = metadata.idProperty.name;
if (!this._db.has(collectionName)) {
this._db.set(collectionName, new blow_collection_1.Collection({ idKey: idKey }));
}
return this._db.get(collectionName);
}
_prepareQuery(query) {
if (query) {
if (query instanceof blow_query_1.Query) {
query = query.toJSON();
}
}
return query;
}
count(metadata, where) {
return this._collection(metadata).count(where);
}
create(metadata, data) {
return this._collection(metadata).create(MemoryAdapter.toDB(data)).map(copyObject);
}
destroy(metadata, where) {
return this._collection(metadata).destroy(where);
}
destroyById(metadata, id) {
return this._collection(metadata).destroyById(id);
}
exists(metadata, id) {
return this._collection(metadata).exists(id);
}
find(metadata, query) {
query = this._prepareQuery(query);
return this._collection(metadata).find(query).map(copyObject);
}
findOne(metadata, query) {
query = this._prepareQuery(query);
return this._collection(metadata).findOne(query).map(copyObject);
}
findById(metadata, id) {
return this._collection(metadata).findById(id).map(copyObject);
}
findOrCreate(metadata, where, data) {
return this._collection(metadata).findOrCreate(where, data).map(copyObject);
}
update(metadata, where, data) {
return this._collection(metadata).update(where, data);
}
updateOrCreate(metadata, data) {
return this._collection(metadata).updateOrCreate(data).map(copyObject);
}
static toDB(data) {
return Object.assign({}, data);
}
}
exports.MemoryAdapter = MemoryAdapter;