Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
stores.docStore.get(id, function (err, metadata) {
if (err || !metadata) {
return callback(createError(MISSING_DOC, 'missing'));
}
var rev;
if (!opts.rev) {
rev = getWinningRev(metadata);
var deleted = getIsDeleted(metadata, rev);
if (deleted) {
return callback(createError(MISSING_DOC, "deleted"));
}
} else {
rev = opts.latest ? getLatest(opts.rev, metadata) : opts.rev;
}
var seq = metadata.rev_map[rev];
stores.bySeqStore.get(formatSeq(seq), function (err, doc) {
if (!doc) {
return callback(createError(MISSING_DOC));
}
/* istanbul ignore if */
if ('_id' in doc && doc._id !== metadata.id) {
// this failing implies something very wrong
return callback(new Error('wrong doc returned'));
}
doc._id = metadata.id;
if ('_rev' in doc) {
/* istanbul ignore if */
// doc (possibly with _deleted=true) or missing error
if (!metadata) {
err = createError(MISSING_DOC, 'missing');
return finish();
}
var rev;
if (!opts.rev) {
rev = metadata.winningRev;
var deleted = isDeleted(metadata);
if (deleted) {
err = createError(MISSING_DOC, "deleted");
return finish();
}
} else {
rev = opts.latest ? getLatest(opts.rev, metadata) : opts.rev;
}
var objectStore = txn.objectStore(BY_SEQ_STORE);
var key = metadata.id + '::' + rev;
objectStore.index('_doc_id_rev').get(key).onsuccess = function (e) {
doc = e.target.result;
if (doc) {
doc = decodeDoc(doc);
}
if (!doc) {
err = createError(MISSING_DOC, 'missing');
return finish();
}
finish();
};
txn.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) : 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
// TODO: why are we passing the transaction in the context?
// It's not clear we ever thread these txns usefully
callback(null, {
doc: result,
tx.executeSql(sql, sqlArgs, function (a, results) {
if (!results.rows.length) {
var err = createError(MISSING_DOC, 'missing');
return finish(err);
}
var item = results.rows.item(0);
var metadata = safeJsonParse(item.metadata);
callback(getLatest(rev, metadata));
});
}