(#6106) - deprecate .type() in favor of ._remote
diff --git a/packages/node_modules/pouchdb-abstract-mapreduce/src/index.js b/packages/node_modules/pouchdb-abstract-mapreduce/src/index.js index a38504b..630c15e 100644 --- a/packages/node_modules/pouchdb-abstract-mapreduce/src/index.js +++ b/packages/node_modules/pouchdb-abstract-mapreduce/src/index.js
@@ -1,7 +1,8 @@ import { flatten, guardedConsole, - nextTick + nextTick, + isRemote } from 'pouchdb-utils'; import { @@ -811,14 +812,13 @@ } function queryPromised(db, fun, opts) { - if (db.type() === 'http') { - return httpQuery(db, fun, opts); - } - /* istanbul ignore next */ if (typeof db._query === 'function') { return customQuery(db, fun, opts); } + if (isRemote(db)) { + return httpQuery(db, fun, opts); + } if (typeof fun !== 'string') { // temp_view @@ -905,13 +905,13 @@ var abstractViewCleanup = callbackify(function () { var db = this; - if (db.type() === 'http') { - return httpViewCleanup(db); - } /* istanbul ignore next */ if (typeof db._viewCleanup === 'function') { return customViewCleanup(db); } + if (isRemote(db)) { + return httpViewCleanup(db); + } return localViewCleanup(db); });
diff --git a/packages/node_modules/pouchdb-adapter-http/src/index.js b/packages/node_modules/pouchdb-adapter-http/src/index.js index 8411fec..0473dc3 100644 --- a/packages/node_modules/pouchdb-adapter-http/src/index.js +++ b/packages/node_modules/pouchdb-adapter-http/src/index.js
@@ -243,6 +243,8 @@ callback(null, api); }); + api._remote = true; + /* istanbul ignore next */ api.type = function () { return 'http'; };
diff --git a/packages/node_modules/pouchdb-adapter-idb/src/index.js b/packages/node_modules/pouchdb-adapter-idb/src/index.js index aca0226..edbfdd2 100644 --- a/packages/node_modules/pouchdb-adapter-idb/src/index.js +++ b/packages/node_modules/pouchdb-adapter-idb/src/index.js
@@ -289,6 +289,7 @@ } + api._remote = false; api.type = function () { return 'idb'; };
diff --git a/packages/node_modules/pouchdb-adapter-indexeddb/src/index.js b/packages/node_modules/pouchdb-adapter-indexeddb/src/index.js index d8d8e47..e0b6eea 100644 --- a/packages/node_modules/pouchdb-adapter-indexeddb/src/index.js +++ b/packages/node_modules/pouchdb-adapter-indexeddb/src/index.js
@@ -42,6 +42,7 @@ }; }; + api._remote = false; api.type = function () { return ADAPTER_NAME; }; api._id = $(function (idb, cb) {
diff --git a/packages/node_modules/pouchdb-adapter-leveldb-core/src/index.js b/packages/node_modules/pouchdb-adapter-leveldb-core/src/index.js index b7abdad..b46d969 100644 --- a/packages/node_modules/pouchdb-adapter-leveldb-core/src/index.js +++ b/packages/node_modules/pouchdb-adapter-leveldb-core/src/index.js
@@ -235,6 +235,8 @@ return callback(null, db._docCount); // use cached value } + api._remote = false; + /* istanbul ignore next */ api.type = function () { return 'leveldb'; };
diff --git a/packages/node_modules/pouchdb-adapter-websql-core/src/index.js b/packages/node_modules/pouchdb-adapter-websql-core/src/index.js index c0e3e1b..0db4c69 100644 --- a/packages/node_modules/pouchdb-adapter-websql-core/src/index.js +++ b/packages/node_modules/pouchdb-adapter-websql-core/src/index.js
@@ -552,6 +552,7 @@ }); } + api._remote = false; api.type = function () { return 'websql'; };
diff --git a/packages/node_modules/pouchdb-checkpointer/src/index.js b/packages/node_modules/pouchdb-checkpointer/src/index.js index d4d2670..411acd4 100644 --- a/packages/node_modules/pouchdb-checkpointer/src/index.js +++ b/packages/node_modules/pouchdb-checkpointer/src/index.js
@@ -16,7 +16,7 @@ function updateCheckpoint(db, id, checkpoint, session, returnValue) { return db.get(id).catch(function (err) { if (err.status === 404) { - if (db.type() === 'http') { + if (db.adapter === 'http' || db.adapter === 'https') { explainError( 404, 'PouchDB is just checking if a remote checkpoint exists.' );
diff --git a/packages/node_modules/pouchdb-core/src/adapter.js b/packages/node_modules/pouchdb-core/src/adapter.js index 671ca53..22048dc 100644 --- a/packages/node_modules/pouchdb-core/src/adapter.js +++ b/packages/node_modules/pouchdb-core/src/adapter.js
@@ -1,5 +1,6 @@ import { - guardedConsole + guardedConsole, + isRemote } from 'pouchdb-utils'; import { EventEmitter } from 'events'; import inherits from 'inherits'; @@ -729,7 +730,7 @@ )); return; } - if (this.type() !== 'http') { + if (!isRemote(this)) { return allDocsKeysQuery(this, opts, callback); } } @@ -759,8 +760,8 @@ } // 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(); + info.auto_compaction = !!(self.auto_compaction && !isRemote(self)); + info.adapter = self.adapter; callback(null, info); }); }); @@ -824,7 +825,7 @@ } var adapter = this; - if (!opts.new_edits && adapter.type() !== 'http') { + if (!opts.new_edits && !isRemote(adapter)) { // ensure revisions of the same doc are sorted, so that // the local adapter processes them correctly (#2935) req.docs.sort(compareByIdThenRev); @@ -850,7 +851,7 @@ }); } // add ids for error/conflict responses (not required for CouchDB) - if (adapter.type() !== 'http') { + if (!isRemote(adapter)) { for (var i = 0, l = res.length; i < l; i++) { res[i].id = res[i].id || ids[i]; } @@ -902,7 +903,7 @@ }); } - if (self.type() === 'http') { + if (isRemote(self)) { // no need to check for dependent DBs if it's a remote DB return destroyDb(); }
diff --git a/packages/node_modules/pouchdb-core/src/changes.js b/packages/node_modules/pouchdb-core/src/changes.js index 3f131f4..3004e3f 100644 --- a/packages/node_modules/pouchdb-core/src/changes.js +++ b/packages/node_modules/pouchdb-core/src/changes.js
@@ -5,7 +5,8 @@ once, parseDdocFunctionName, normalizeDdocFunctionName, - guardedConsole + guardedConsole, + isRemote } from 'pouchdb-utils'; import { isDeleted, @@ -197,7 +198,7 @@ opts.filter = normalizeDdocFunctionName(opts.filter); } - if (this.db.type() !== 'http' && !opts.doc_ids) { + if (!isRemote(this.db) && !opts.doc_ids) { return this.filterChanges(opts); } }
diff --git a/packages/node_modules/pouchdb-find/src/index.js b/packages/node_modules/pouchdb-find/src/index.js index 0bedd51..b9cb28a 100644 --- a/packages/node_modules/pouchdb-find/src/index.js +++ b/packages/node_modules/pouchdb-find/src/index.js
@@ -1,4 +1,4 @@ -import { toPromise } from 'pouchdb-utils'; +import { toPromise, isRemote } from 'pouchdb-utils'; import * as http from './adapters/http/index'; import * as local from './adapters/local/index'; @@ -9,7 +9,7 @@ return callback(new Error('you must provide an index to create')); } - var createIndex = this.type() === 'http' ? + var createIndex = isRemote(this) ? http.createIndex : local.createIndex; createIndex(this, requestDef, callback); }); @@ -25,13 +25,13 @@ return callback(new Error('you must provide search parameters to find()')); } - var find = this.type() === 'http' ? http.find : local.find; + var find = isRemote(this) ? http.find : local.find; find(this, requestDef, callback); }); plugin.getIndexes = toPromise(function (callback) { - var getIndexes = this.type() === 'http' ? http.getIndexes : local.getIndexes; + var getIndexes = isRemote(this) ? http.getIndexes : local.getIndexes; getIndexes(this, callback); }); @@ -41,7 +41,7 @@ return callback(new Error('you must provide an index to delete')); } - var deleteIndex = this.type() === 'http' ? + var deleteIndex = isRemote(this) ? http.deleteIndex : local.deleteIndex; deleteIndex(this, indexDef, callback); });
diff --git a/packages/node_modules/pouchdb-replication/src/getDocs.js b/packages/node_modules/pouchdb-replication/src/getDocs.js index 45ea391..7794ffb 100644 --- a/packages/node_modules/pouchdb-replication/src/getDocs.js +++ b/packages/node_modules/pouchdb-replication/src/getDocs.js
@@ -1,4 +1,4 @@ -import { clone, flatten } from 'pouchdb-utils'; +import { clone, flatten, isRemote } from 'pouchdb-utils'; function isGenOne(rev) { return /^1-/.test(rev); @@ -18,7 +18,7 @@ } function getDocAttachmentsFromTargetOrSource(target, src, doc) { - var doCheckForLocalAttachments = src.type() === 'http' && target.type() !== 'http'; + var doCheckForLocalAttachments = isRemote(src) && !isRemote(target); var filenames = Object.keys(doc._attachments); if (!doCheckForLocalAttachments) {
diff --git a/packages/node_modules/pouchdb-utils/src/index.js b/packages/node_modules/pouchdb-utils/src/index.js index db3dc37..cdb3ab8 100644 --- a/packages/node_modules/pouchdb-utils/src/index.js +++ b/packages/node_modules/pouchdb-utils/src/index.js
@@ -13,6 +13,7 @@ import invalidIdError from './invalidIdError'; import isChromeApp from './env/isChromeApp'; import isCordova from './isCordova'; +import isRemote from './isRemote'; import listenerCount from './listenerCount'; import nextTick from './nextTick'; import normalizeDdocFunctionName from './normalizeDdocFunctionName'; @@ -40,6 +41,7 @@ invalidIdError, isChromeApp, isCordova, + isRemote, listenerCount, nextTick, normalizeDdocFunctionName,
diff --git a/packages/node_modules/pouchdb-utils/src/isRemote.js b/packages/node_modules/pouchdb-utils/src/isRemote.js new file mode 100644 index 0000000..96365ff --- /dev/null +++ b/packages/node_modules/pouchdb-utils/src/isRemote.js
@@ -0,0 +1,28 @@ +// Checks if a PouchDB object is "remote" or not. This is +// designed to opt-in to certain optimizations, such as +// avoiding checks for "dependentDbs" and other things that +// we know only apply to local databases. In general, "remote" +// should be true for the http adapter, and for third-party +// adapters with similar expensive boundaries to cross for +// every API call, such as socket-pouch and worker-pouch. +// Previously, this was handled via db.type() === 'http' +// which is now deprecated. + +import guardedConsole from './guardedConsole'; + +function isRemote(db) { + if (typeof db._remote === 'boolean') { + return db._remote; + } + /* istanbul ignore next */ + if (typeof db.type === 'function') { + guardedConsole('warn', + 'db.type() is deprecated and will be removed in ' + + 'a future version of PouchDB'); + return db.type() === 'http'; + } + /* istanbul ignore next */ + return false; +} + +export default isRemote; \ No newline at end of file
diff --git a/tests/integration/test.basics.js b/tests/integration/test.basics.js index f052c6f..a9764ae 100644 --- a/tests/integration/test.basics.js +++ b/tests/integration/test.basics.js
@@ -804,14 +804,14 @@ var db = new PouchDB(dbs.name, { auto_compaction: true}); return db.info().then(function (info) { // http doesn't support auto compaction - info.auto_compaction.should.equal(db.type() !== 'http'); + info.auto_compaction.should.equal(adapter !== 'http'); }); }); it('db.info should give adapter name (#3567)', function () { var db = new PouchDB(dbs.name); return db.info().then(function (info) { - info.adapter.should.equal(db.type()); + info.adapter.should.equal(db.adapter); }); }); @@ -989,16 +989,6 @@ }); }); - it('db.type() returns a type', function () { - var db = new PouchDB(dbs.name); - db.type().should.be.a('string'); - }); - - it('#4788 db.type() is synchronous', function () { - new PouchDB(dbs.name).type.should.be.a('function'); - new PouchDB(dbs.name).type.should.be.a('function'); - }); - it('replace PouchDB.destroy() (express-pouchdb#203)', function (done) { var old = PouchDB.destroy; PouchDB.destroy = function (name, callback) {