Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
rootIsMissing(doc)) {
newDoc = createError(REV_CONFLICT);
// Update the existing document
} else if (oldDocs.hasOwnProperty(doc.id)) {
newDoc = update(txn, doc, oldDocs[doc.id]);
// The update can be rejected if it is an update to an existing
// revision, if so skip it
if (newDoc == false) {
return;
}
// New document
} else {
// Ensure new documents are also stemmed
var merged = merge([], doc.rev_tree[0], docsRevsLimit(doc));
doc.rev_tree = merged.tree;
doc.stemmedRevs = merged.stemmedRevs;
newDoc = doc;
newDoc.isNewDoc = true;
newDoc.wasDeleted = doc.revs[doc.rev].deleted ? 1 : 0;
}
if (newDoc.error) {
results[i] = newDoc;
} else {
oldDocs[newDoc.id] = newDoc;
lastWriteIndex = i;
write(txn, newDoc, i);
}
});
}
// Ignore updates to existing revisions
if ((doc.rev in oldDoc.revs) && !opts.new_edits) {
return false;
}
var isRoot = /^1-/.test(doc.rev);
// Reattach first writes after a deletion to last deleted tree
if (oldDoc.deleted && !doc.deleted && opts.new_edits && isRoot) {
var tmp = doc.revs[doc.rev].data;
tmp._rev = oldDoc.rev;
tmp._id = oldDoc.id;
doc = convertDocFormat(parseDoc(tmp, opts.new_edits, dbOpts));
}
var merged = merge(oldDoc.rev_tree, doc.rev_tree[0], docsRevsLimit(doc));
doc.stemmedRevs = merged.stemmedRevs;
doc.rev_tree = merged.tree;
// Merge the old and new rev data
var revs = oldDoc.revs;
revs[doc.rev] = doc.revs[doc.rev];
doc.revs = revs;
doc.attachments = oldDoc.attachments;
var inConflict = opts.new_edits && (((oldDoc.deleted && doc.deleted) ||
(!oldDoc.deleted && merged.conflicts !== 'new_leaf') ||
(oldDoc.deleted && !doc.deleted && merged.conflicts === 'new_branch') ||
(oldDoc.rev === doc.rev)));
if (inConflict) {
const getUpdate = () => {
// Ignore updates to existing revisions
if (newDoc.rev in oldDoc.rev_map) return {}
const merged = merge(oldDoc.rev_tree, newDoc.rev_tree[0], revsLimit)
newDoc.rev_tree = merged.tree
const inConflict =
newEdits &&
((oldDoc.deleted && newDoc.deleted) ||
(!oldDoc.deleted && merged.conflicts !== 'new_leaf') ||
(oldDoc.deleted &&
!newDoc.deleted &&
merged.conflicts === 'new_branch'))
if (inConflict) {
return { error: createError(REV_CONFLICT) }
}
if (oldDoc.deleted && !newDoc.deleted) newMeta.doc_count++
else if (!oldDoc.deleted && newDoc.deleted) newMeta.doc_count--
function nextDoc() {
var value = docs[numDone];
var currentDoc = value[0];
var resultsIdx = value[1];
if (fetchedDocs.has(id)) {
updateDoc(revLimit, fetchedDocs.get(id), currentDoc, results,
resultsIdx, docWritten, writeDoc, newEdits);
} else {
// Ensure stemming applies to new writes as well
var merged = merge([], currentDoc.metadata.rev_tree[0], revLimit);
currentDoc.metadata.rev_tree = merged.tree;
currentDoc.stemmedRevs = merged.stemmedRevs || [];
insertDoc(currentDoc, resultsIdx, docWritten);
}
}
nextDoc();
const getInsert = () => {
const merged = merge([], newDoc.rev_tree[0], revsLimit)
newDoc.rev_tree = merged.tree
newDoc.seq = ++newMeta.update_seq
newDoc.rev_map = {}
newDoc.rev_map[newDoc.rev] = newDoc.seq
newDoc.winningRev = computeWinningRev(newDoc)
if (!newDoc.deleted) newMeta.doc_count++
const data = newDoc.data
delete newDoc.data
data._id = newDoc.id
data._rev = newDoc.rev
return {
doc: [forDocument(newDoc.id), newDoc],
data: [forSequence(newDoc.seq), data],
result: {