blob: 27c35632b07bf11fa812899baee85018f67f77c9 [file] [log] [blame]
'use strict';
import { createError, MISSING_DOC } from 'pouchdb-errors';
import { DOC_STORE, openTransactionSafely } from './util';
import { latest as getLatest } from 'pouchdb-merge';
export default function (db, id, opts, callback) {
var openTxn = openTransactionSafely(db, [DOC_STORE], 'readonly');
if (openTxn.error) {
return callback(openTxn.error);
}
openTxn.txn.objectStore(DOC_STORE).get(id).onsuccess = function (e) {
var doc = e.target.result;
var rev;
if (!opts.rev) {
rev = (doc && doc.rev);
} else {
rev = opts.latest ? getLatest(opts.rev, doc.metadata) : opts.rev;
}
if (!doc || (doc.deleted && !opts.rev) || !(rev in doc.revs)) {
callback(createError(MISSING_DOC, 'missing'));
return;
}
var result = doc.revs[rev].data;
result._id = doc.id;
result._rev = rev;
// WARNING: expecting possible old format
callback(null, {
doc: result,
metadata: doc,
ctx: openTxn
});
};
}