Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
function finishBatch() {
if (currentBatch.error) {
throw new Error('There was a problem getting docs.');
}
result.last_seq = last_seq = currentBatch.seq;
var outResult = clone(result);
if (changedDocs.length) {
outResult.docs = changedDocs;
// Attach 'pending' property if server supports it (CouchDB 2.0+)
/* istanbul ignore if */
if (typeof currentBatch.pending === 'number') {
outResult.pending = currentBatch.pending;
delete currentBatch.pending;
}
returnValue.emit('change', outResult);
}
writingCheckpoint = true;
return checkpointer.writeCheckpoint(currentBatch.seq,
session).then(function () {
writingCheckpoint = false;
/* istanbul ignore if */
if (returnValue.cancelled) {
AbstractPouchDB.prototype.changes = function (opts, callback) {
if (typeof opts === 'function') {
callback = opts;
opts = {};
}
return new Changes(this, opts, callback);
};
AbstractPouchDB.prototype.close = adapterFun('close', function (callback) {
this._closed = true;
this.emit('closed');
return this._close(callback);
});
AbstractPouchDB.prototype.info = adapterFun('info', function (callback) {
var self = this;
this._info(function (err, info) {
if (err) {
return callback(err);
}
// assume we know better than the adapter, unless it informs us
info.db_name = info.db_name || self.name;
info.auto_compaction = !!(self.auto_compaction && self.type() !== 'http');
info.adapter = self.type();
callback(null, info);
});
});
AbstractPouchDB.prototype.id = adapterFun('id', function (callback) {
return this._id(callback);
});
var self = this;
var usePrefix = 'use_prefix' in self ? self.use_prefix : true;
function destroyDb() {
// call destroy method of the particular adaptor
self._destroy(opts, function (err, resp) {
if (err) {
return callback(err);
}
self._destroyed = true;
self.emit('destroyed');
callback(null, resp || { 'ok': true });
});
}
if (isRemote(self)) {
// no need to check for dependent DBs if it's a remote DB
return destroyDb();
}
self.get('_local/_pouch_dependentDbs', function (err, localDoc) {
if (err) {
/* istanbul ignore if */
if (err.status !== 404) {
return callback(err);
} else { // no dependencies
return destroyDb();
}
}
var dependentDbs = localDoc.dependentDbs;
var PouchDB = self.constructor;
var deletedMap = Object.keys(dependentDbs).map(function (name) {
doc.views[viewName] = {
map: {
fields: mergeObjects(requestDef.index.fields)
},
reduce: '_count',
options: {
def: originalIndexDef
}
};
return doc;
}
db.constructor.emit('debug', ['find', 'creating index', ddocId]);
return upsert(db, ddocId, updateDdoc).then(function () {
if (hasInvalidLanguage) {
throw new Error('invalid language for ddoc with id "' +
ddocId +
'" (should be "query")');
}
}).then(function () {
// kick off a build
// TODO: abstract-pouchdb-mapreduce should support auto-updating
// TODO: should also use update_after, but pouchdb/pouchdb#3415 blocks me
var signature = ddocName + '/' + viewName;
return abstractMapper(db).query.call(db, signature, {
limit: 0,
reduce: false
}).then(function () {
return {
id: ddocId,
// Mobile/9B206 Safari/7534.48.3
// Firefox for iOS UA:
// Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4
// (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4
// indexedDB is null on some UIWebViews and undefined in others
// see: https://bugs.webkit.org/show_bug.cgi?id=137034
if (typeof indexedDB === 'undefined' || indexedDB === null ||
!/iP(hone|od|ad)/.test(navigator.userAgent)) {
// definitely not WKWebView, avoid creating an unnecessary database
return true;
}
// Cache the result in LocalStorage. Reason we do this is because if we
// call openDatabase() too many times, Safari craps out in SauceLabs and
// starts throwing DOM Exception 14s.
var hasLS = hasLocalStorage();
// Include user agent in the hash, so that if Safari is upgraded, we don't
// continually think it's broken.
var localStorageKey = '_pouch__websqldb_valid_' + navigator.userAgent;
if (hasLS && localStorage[localStorageKey]) {
return localStorage[localStorageKey] === '1';
}
var openedTestDB = canOpenTestDB();
if (hasLS) {
localStorage[localStorageKey] = openedTestDB ? '1' : '0';
}
return openedTestDB;
}
function getHost(name, opts) {
// encode db name if opts.prefix is a url (#5574)
if (hasUrlPrefix(opts)) {
var dbName = opts.name.substr(opts.prefix.length);
// Ensure prefix has a trailing slash
var prefix = opts.prefix.replace(/\/?$/, '/');
name = prefix + encodeURIComponent(dbName);
}
var uri = parseUri(name);
if (uri.user || uri.password) {
uri.auth = {username: uri.user, password: uri.password};
}
// Split the path part of the URI into parts using '/' as the delimiter
// after removing any leading '/' and any trailing '/'
var parts = uri.path.replace(/(^\/|\/$)/g, '').split('/');
uri.db = parts.pop();
// Prevent double encoding of URI component
if (uri.db.indexOf('%') === -1) {
uri.db = encodeURIComponent(uri.db);
}
uri.path = parts.join('/');
function LevelPouch(opts, callback) {
opts = clone(opts);
var api = this;
var instanceId;
var stores = {};
var revLimit = opts.revs_limit;
var db;
var name = opts.name;
// TODO: this is undocumented and unused probably
/* istanbul ignore else */
if (typeof opts.createIfMissing === 'undefined') {
opts.createIfMissing = true;
}
var leveldown = opts.db;
var dbStore;
var leveldownName = functionName(leveldown);
function getDocs(src, target, diffs, state) {
diffs = clone(diffs); // we do not need to modify this
var resultDocs = [],
ok = true;
function getAllDocs() {
var bulkGetOpts = createBulkGetOpts(diffs);
if (!bulkGetOpts.docs.length) { // optimization: skip empty requests
return;
}
return src.bulkGet(bulkGetOpts).then(function (bulkGetResponse) {
/* istanbul ignore if */
if (state.cancelled) {
throw new Error('cancelled');
api._allDocs = readLock(function (opts, callback) {
opts = clone(opts);
countDocs(function (err, docCount) {
/* istanbul ignore if */
if (err) {
return callback(err);
}
var readstreamOpts = {};
var skip = opts.skip || 0;
if (opts.startkey) {
readstreamOpts.gte = opts.startkey;
}
if (opts.endkey) {
readstreamOpts.lte = opts.endkey;
}
if (opts.key) {
readstreamOpts.gte = readstreamOpts.lte = opts.key;
}
api._allDocs = readLock(function (opts, callback) {
opts = pouchdbUtils.clone(opts);
countDocs(function (err, docCount) {
/* istanbul ignore if */
if (err) {
return callback(err);
}
var readstreamOpts = {};
var skip = opts.skip || 0;
if (opts.startkey) {
readstreamOpts.gte = opts.startkey;
}
if (opts.endkey) {
readstreamOpts.lte = opts.endkey;
}
if (opts.key) {
readstreamOpts.gte = readstreamOpts.lte = opts.key;
}