Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
}
}
// const descending = opts.descending
const lastSeq = opts.since || 0
const limit = 'limit' in opts && opts.limit >= 0 ? opts.limit : -1
const filterDocIds = opts.doc_ids && new Set(opts.doc_ids)
const returnDocs =
'return_docs' in opts
? opts.return_docs
: 'returnDocs' in opts
? opts.returnDocs
: true
const includeAttachments = 'attachments' in opts ? opts.attachments : false
const binaryAttachments = 'binary' in opts ? opts.binary : false
const filter = filterChange(opts)
const complete = opts.complete
const onChange = opts.onChange
const processChange = opts.processChange
db.storage.getKeys((error, keys) => {
if (error) return complete(error)
const filterSeqs = getSequenceKeys(keys).filter(seq => {
if (lastSeq) return seq > lastSeq
return true
})
if (filterSeqs.length === 0)
return complete(null, { last_seq: lastSeq, results: [] })
var results = [];
var lastSeq = opts.since || 0;
var called = 0;
var streamOpts = {
reverse: descending
};
var limit;
if ('limit' in opts && opts.limit > 0) {
limit = opts.limit;
}
if (!streamOpts.reverse) {
streamOpts.start = formatSeq(opts.since || 0);
}
var docIds = opts.doc_ids && new pouchdbCollections.Set(opts.doc_ids);
var filter = pouchdbUtils.filterChange(opts);
var docIdsToMetadata = new pouchdbCollections.Map();
var returnDocs;
if ('return_docs' in opts) {
returnDocs = opts.return_docs;
} else if ('returnDocs' in opts) {
// TODO: Remove 'returnDocs' in favor of 'return_docs' in a future release
returnDocs = opts.returnDocs;
} else {
returnDocs = true;
}
function complete() {
opts.done = true;
if (returnDocs && opts.limit) {
/* istanbul ignore if */
var results = [];
var lastSeq = opts.since || 0;
var called = 0;
var streamOpts = {
reverse: descending
};
var limit;
if ('limit' in opts && opts.limit > 0) {
limit = opts.limit;
}
if (!streamOpts.reverse) {
streamOpts.start = formatSeq(opts.since || 0);
}
var docIds = opts.doc_ids && new Set(opts.doc_ids);
var filter = filterChange(opts);
var docIdsToMetadata = new Map();
function complete() {
opts.done = true;
if (opts.return_docs && opts.limit) {
/* istanbul ignore if */
if (opts.limit < results.length) {
results.length = opts.limit;
}
}
changeStream.unpipe(throughStream);
changeStream.destroy();
if (!opts.continuous && !opts.cancelled) {
if (opts.include_docs && opts.attachments && opts.return_docs) {
fetchAttachments(results, stores, opts).then(function () {
opts.complete(null, {results: results, last_seq: lastSeq});
};
}
var docIds = opts.doc_ids && new Set(opts.doc_ids);
opts.since = opts.since || 0;
var lastSeq = opts.since;
var limit = 'limit' in opts ? opts.limit : -1;
if (limit === 0) {
limit = 1; // per CouchDB _changes spec
}
var results = [];
var numResults = 0;
var filter = filterChange(opts);
var docIdsToMetadata = new Map();
var txn;
var bySeqStore;
var docStore;
var docIdRevIndex;
function onBatch(batchKeys, batchValues, cursor) {
if (!cursor || !batchKeys.length) { // done
return;
}
var winningDocs = new Array(batchKeys.length);
var metadatas = new Array(batchKeys.length);
function processMetadataAndWinningDoc(metadata, winningDoc) {
function onChange(change, pending, lastSeq) {
/* istanbul ignore if */
if (returnValue.cancelled) {
return completeReplication();
}
// Attach 'pending' property if server supports it (CouchDB 2.0+)
/* istanbul ignore if */
if (typeof pending === 'number') {
pendingBatch.pending = pending;
}
var filter = filterChange(opts)(change);
if (!filter) {
return;
}
pendingBatch.seq = change.seq || lastSeq;
pendingBatch.changes.push(change);
nextTick(function () {
processPendingBatch(batches.length === 0 && changesOpts.live);
});
}
var joiner = DOC_STORE + '.id=' + BY_SEQ_STORE + '.doc_id' +
' AND ' + DOC_STORE + '.winningseq=' + BY_SEQ_STORE + '.seq';
var criteria = ['maxSeq > ?'];
var sqlArgs = [opts.since];
if (opts.doc_ids) {
criteria.push(DOC_STORE + '.id IN ' + qMarks(opts.doc_ids.length));
sqlArgs = sqlArgs.concat(opts.doc_ids);
}
var orderBy = 'maxSeq ' + (descending ? 'DESC' : 'ASC');
var sql = select(selectStmt, from, joiner, criteria, orderBy);
var filter = filterChange(opts);
if (!opts.view && !opts.filter) {
// we can just limit in the query
sql += ' LIMIT ' + limit;
}
var lastSeq = opts.since || 0;
db.readTransaction(function (tx) {
tx.executeSql(sql, sqlArgs, function (tx, result) {
function reportChange(change) {
return function () {
opts.onChange(change);
};
}
for (var i = 0, l = result.rows.length; i < l; i++) {
var item = result.rows.item(i);
var metadata = safeJsonParse(item.metadata);
var results = []
var lastSeq = opts.since || 0
var called = 0
var streamOpts = {
reverse: descending
}
var limit
if ('limit' in opts && opts.limit > 0) {
limit = opts.limit
}
if (!streamOpts.reverse) {
streamOpts.start = formatSeq(opts.since || 0)
}
var docIds = opts.doc_ids && new Set(opts.doc_ids)
var filter = filterChange(opts)
var docIdsToMetadata = new Map()
var returnDocs
if ('return_docs' in opts) {
returnDocs = opts.return_docs
} else if ('returnDocs' in opts) {
// TODO: Remove 'returnDocs' in favor of 'return_docs' in a future release
returnDocs = opts.returnDocs
} else {
returnDocs = true
}
function complete () {
opts.done = true
if (returnDocs && opts.limit) {
/* istanbul ignore if */
idbChanges.notify(dbOpts.name);
return {
cancel: function () {
idbChanges.removeListener(dbOpts.name, id);
}
};
}
var limit = 'limit' in opts ? opts.limit : -1;
if (limit === 0) {
limit = 1;
}
var store = txn.txn.objectStore(DOC_STORE).index('seq');
var filter = filterChange(opts);
var received = 0;
var lastSeq = opts.since || 0;
var results = [];
var processing = [];
function onReqSuccess(e) {
if (!e.target.result) { return; }
var cursor = e.target.result;
var doc = cursor.value;
// Overwrite doc.data, which may have been rewritten (see rewrite.js) with
// the clean version for that rev
doc.data = doc.revs[doc.rev].data;
doc.data._id = doc.id;
doc.data._rev = doc.rev;
var results = [];
var lastSeq = opts.since || 0;
var called = 0;
var streamOpts = {
reverse: descending
};
var limit;
if ('limit' in opts && opts.limit > 0) {
limit = opts.limit;
}
if (!streamOpts.reverse) {
streamOpts.start = formatSeq(opts.since || 0);
}
var docIds = opts.doc_ids && new pouchdbCollections.Set(opts.doc_ids);
var filter = pouchdbUtils.filterChange(opts);
var docIdsToMetadata = new pouchdbCollections.Map();
var returnDocs;
if ('return_docs' in opts) {
returnDocs = opts.return_docs;
} else if ('returnDocs' in opts) {
// TODO: Remove 'returnDocs' in favor of 'return_docs' in a future release
returnDocs = opts.returnDocs;
} else {
returnDocs = true;
}
function complete() {
opts.done = true;
if (returnDocs && opts.limit) {
/* istanbul ignore if */
res.results = res.results.filter(function (c) {
leftToFetch--;
var ret = filterChange(opts)(c);
if (ret) {
if (opts.include_docs && opts.attachments && opts.binary) {
readAttachmentsAsBlobOrBuffer(c);
}
if (opts.return_docs) {
results.results.push(c);
}
opts.onChange(c, pending, lastSeq);
}
return ret;
});
} else if (err) {