Expose a frozen baseSelector for each type.

each document should have a type property
This commit is contained in:
Timothy Farrell 2017-11-21 16:49:46 -06:00
parent 3206345999
commit 234a814112

View File

@ -19,7 +19,7 @@ export const PouchDB = core
export class TypeSpec {
constructor(props) {
this._populateId(props);
Object.assign(this, props);
Object.assign(this, props, { type: this._prefix });
}
static getSequence(doc) {
@ -88,6 +88,9 @@ export function PouchORM(PouchDB) {
PouchDB.registerType = (name, cls, db) => {
const prefix = name.toLowerCase();
const _db = db || PouchDB(prefix);
const _baseSelector = Object.freeze({
_id: { $gt: `${prefix}_0`, $lt: `${prefix}_\ufff0` }
});
if (!cls.hasOwnProperty('validate')) {
warn(`${cls.name} has no validation.`);
@ -104,7 +107,7 @@ export function PouchORM(PouchDB) {
const selector = Object.assign(
isSelector && idOrSelector._deleted ? { _deleted: true } : { _deleted: { exists: false } },
isSelector ? idOrSelector : { _id: { $gt: `${prefix}_0`, $lt: `${prefix}_\ufff0` } }
isSelector ? idOrSelector : _baseSelector
);
if (live) {
return LiveArray(_db, idOrSelector, instantiate);
@ -141,7 +144,8 @@ export function PouchORM(PouchDB) {
_name: { value: name },
_prefix: { value: prefix },
_db: { value: _db },
_cls: { value: cls }
_cls: { value: cls },
_baseSelector: { value: _baseSelector }
});
Object.defineProperties(cls, {
@ -149,7 +153,8 @@ export function PouchORM(PouchDB) {
find: { value: find },
delete: { value: _delete },
db: { value: _db },
name: { value: name }
name: { value: name },
selector: { value: _baseSelector }
});
return cls;