(#6162) - make polyfills extractable

Fixes #6162
diff --git a/.eslintrc.json b/.eslintrc.json
index bc09bbb..aeb1516 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -14,13 +14,14 @@
   },
 
   "globals": {
+    "Map": true,
+    "Set": true,
     "chrome": true,
     "Promise": true,
     "Uint8Array": true,
     "ArrayBuffer": true,
     "FileReaderSync": true,
     "sqlitePlugin": true,
-
     "emit": true,
     "PouchDB": true,
     "should": true,
diff --git a/bin/build-module.js b/bin/build-module.js
index d268a83..42e8dfa 100755
--- a/bin/build-module.js
+++ b/bin/build-module.js
@@ -10,8 +10,7 @@
 'use strict';
 
 var rollup = require('rollup').rollup;
-var nodeResolve = require('rollup-plugin-node-resolve');
-var replace = require('rollup-plugin-replace');
+var rollupPlugins = require('./rollupPlugins');
 
 var path = require('path');
 var lie = require('lie');
@@ -65,19 +64,11 @@
       return rollup({
         entry: path.resolve(filepath, './src/index.js'),
         external: depsToSkip,
-        plugins: [
-          nodeResolve({
-            skip: depsToSkip,
-            jsnext: true,
-            browser: isBrowser || forceBrowser
-          }),
-          replace({
-            // we have switches for coverage; don't ship this to consumers
-            'process.env.COVERAGE': JSON.stringify(!!process.env.COVERAGE),
-            // test for fetch vs xhr
-            'process.env.FETCH': JSON.stringify(!!process.env.FETCH)
-          })
-        ]
+        plugins: rollupPlugins({
+          skip: depsToSkip,
+          jsnext: true,
+          browser: isBrowser || forceBrowser
+        })
       }).then(function (bundle) {
         var formats = ['cjs'];
         if (bundledPkgs.indexOf(pkg.name) !== -1) {
diff --git a/bin/build-pouchdb.js b/bin/build-pouchdb.js
index 0a1c104..7076ed1 100644
--- a/bin/build-pouchdb.js
+++ b/bin/build-pouchdb.js
@@ -17,8 +17,7 @@
 var browserify = require('browserify');
 var browserifyIncremental = require('browserify-incremental');
 var rollup = require('rollup');
-var nodeResolve = require('rollup-plugin-node-resolve');
-var replace = require('rollup-plugin-replace');
+var rollupPlugins = require('./rollupPlugins');
 var derequire = require('derequire');
 var fs = require('fs');
 var writeFileAsync = denodeify(fs.writeFile);
@@ -149,20 +148,12 @@
   return rollup.rollup({
     entry: addPath(entry),
     external: external,
-    plugins: [
-      nodeResolve({
-        skip: external,
-        jsnext: true,
-        browser: browser,
-        main: false  // don't use "main"s that are CJS
-      }),
-      replace({
-        // we have switches for coverage; don't ship this to consumers
-        'process.env.COVERAGE': JSON.stringify(!!process.env.COVERAGE),
-        // test for fetch vs xhr
-        'process.env.FETCH': JSON.stringify(!!process.env.FETCH)
-      })
-    ]
+    plugins: rollupPlugins({
+      skip: external,
+      jsnext: true,
+      browser: browser,
+      main: false  // don't use "main"s that are CJS
+    })
   }).then(function (bundle) {
     return Promise.all(Object.keys(formatsToFiles).map(function (format) {
       var fileOut = formatsToFiles[format];
diff --git a/bin/rollupPlugins.js b/bin/rollupPlugins.js
new file mode 100644
index 0000000..dbd2b66
--- /dev/null
+++ b/bin/rollupPlugins.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var nodeResolve = require('rollup-plugin-node-resolve');
+var replace = require('rollup-plugin-replace');
+var inject = require('rollup-plugin-inject');
+
+function rollupPlugins(nodeResolveConfig) {
+  return [
+    nodeResolve(nodeResolveConfig),
+    replace({
+      // we have switches for coverage; don't ship this to consumers
+      'process.env.COVERAGE': JSON.stringify(!!process.env.COVERAGE),
+      // test for fetch vs xhr
+      'process.env.FETCH': JSON.stringify(!!process.env.FETCH)
+    }),
+    inject({
+      exclude: [
+        '**/pouchdb-utils/src/assign.js',
+        '**/pouchdb-promise/src/index.js',
+        '**/pouchdb-collections/src/**'
+      ],
+      Map: ['pouchdb-collections', 'Map'],
+      Set: ['pouchdb-collections', 'Set'],
+      'Object.assign': ['pouchdb-utils', 'assign'],
+      Promise: 'pouchdb-promise'
+    })
+  ];
+}
+
+module.exports = rollupPlugins;
\ No newline at end of file
diff --git a/package.json b/package.json
index 02a7ff7..950850b 100644
--- a/package.json
+++ b/package.json
@@ -97,6 +97,7 @@
     "replace": "0.3.0",
     "rimraf": "2.5.4",
     "rollup": "0.41.4",
+    "rollup-plugin-inject": "2.0.0",
     "rollup-plugin-node-resolve": "2.0.0",
     "rollup-plugin-replace": "1.1.1",
     "sauce-connect-launcher": "1.2.0",
diff --git a/packages/node_modules/pouchdb-abstract-mapreduce/src/index.js b/packages/node_modules/pouchdb-abstract-mapreduce/src/index.js
index 0e4351a..8b3fd3c 100644
--- a/packages/node_modules/pouchdb-abstract-mapreduce/src/index.js
+++ b/packages/node_modules/pouchdb-abstract-mapreduce/src/index.js
@@ -28,8 +28,6 @@
   NotFoundError,
   BuiltInError
 } from 'pouchdb-mapreduce-utils';
-import { Map, Set } from 'pouchdb-collections';
-import Promise from 'pouchdb-promise';
 
 var persistentQueues = {};
 var tempViewQueue = new TaskQueue();
diff --git a/packages/node_modules/pouchdb-abstract-mapreduce/src/taskqueue.js b/packages/node_modules/pouchdb-abstract-mapreduce/src/taskqueue.js
index ce4027e..46306f9 100644
--- a/packages/node_modules/pouchdb-abstract-mapreduce/src/taskqueue.js
+++ b/packages/node_modules/pouchdb-abstract-mapreduce/src/taskqueue.js
@@ -3,7 +3,6 @@
  * callbacks will eventually fire (once).
  */
 
-import Promise from 'pouchdb-promise';
 
 function TaskQueue() {
   this.promise = new Promise(function (fulfill) {fulfill(); });
diff --git a/packages/node_modules/pouchdb-adapter-fruitdown/src/index.js b/packages/node_modules/pouchdb-adapter-fruitdown/src/index.js
index ef88f57..1089fd8 100644
--- a/packages/node_modules/pouchdb-adapter-fruitdown/src/index.js
+++ b/packages/node_modules/pouchdb-adapter-fruitdown/src/index.js
@@ -1,10 +1,10 @@
 import CoreLevelPouch from 'pouchdb-adapter-leveldb-core';
-import { assign } from 'pouchdb-utils';
+
 
 import fruitdown from 'fruitdown';
 
 function FruitDownPouch(opts, callback) {
-  var _opts = assign({
+  var _opts = Object.assign({
     db: fruitdown
   }, opts);
 
diff --git a/packages/node_modules/pouchdb-adapter-http/src/index.js b/packages/node_modules/pouchdb-adapter-http/src/index.js
index 4a86ce0..c504dc6 100644
--- a/packages/node_modules/pouchdb-adapter-http/src/index.js
+++ b/packages/node_modules/pouchdb-adapter-http/src/index.js
@@ -3,8 +3,7 @@
 
 var supportsBulkGetMap = {};
 
-import { assign, nextTick } from 'pouchdb-utils';
-import Promise from 'pouchdb-promise';
+import { nextTick } from 'pouchdb-utils';
 import ajaxCore from 'pouchdb-ajax';
 import getArguments from 'argsarray';
 
@@ -168,9 +167,9 @@
 
   function ajax(userOpts, options, callback) {
     var reqAjax = userOpts.ajax || {};
-    var reqOpts = assign(clone(ajaxOpts), reqAjax, options);
+    var reqOpts = Object.assign(clone(ajaxOpts), reqAjax, options);
     var defaultHeaders = clone(ajaxOpts.headers || {});
-    reqOpts.headers = assign(defaultHeaders, reqAjax.headers,
+    reqOpts.headers = Object.assign(defaultHeaders, reqAjax.headers,
       options.headers || {});
     log(reqOpts.method + ' ' + reqOpts.url);
     return api._ajax(reqOpts, callback);
diff --git a/packages/node_modules/pouchdb-adapter-http/src/promise-pool.js b/packages/node_modules/pouchdb-adapter-http/src/promise-pool.js
index f9984a7..bbc3a58 100644
--- a/packages/node_modules/pouchdb-adapter-http/src/promise-pool.js
+++ b/packages/node_modules/pouchdb-adapter-http/src/promise-pool.js
@@ -1,7 +1,6 @@
 // dead simple promise pool, inspired by https://github.com/timdp/es6-promise-pool
 // but much smaller in code size. limits the number of concurrent promises that are executed
 
-import Promise from 'pouchdb-promise';
 
 function pool(promiseFactories, limit) {
   return new Promise(function (resolve, reject) {
diff --git a/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js b/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js
index 7e46ae2..a1d49c7 100644
--- a/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js
+++ b/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js
@@ -1,5 +1,4 @@
 import { blob as createBlob } from 'pouchdb-binary-utils';
-import Promise from 'pouchdb-promise';
 import { DETECT_BLOB_SUPPORT_STORE } from './constants';
 
 //
diff --git a/packages/node_modules/pouchdb-adapter-idb/src/bulkDocs.js b/packages/node_modules/pouchdb-adapter-idb/src/bulkDocs.js
index 372846f..3e0bf3a 100644
--- a/packages/node_modules/pouchdb-adapter-idb/src/bulkDocs.js
+++ b/packages/node_modules/pouchdb-adapter-idb/src/bulkDocs.js
@@ -1,4 +1,3 @@
-import { Map } from 'pouchdb-collections';
 import { createError, MISSING_STUB } from 'pouchdb-errors';
 import {
   preprocessAttachments,
diff --git a/packages/node_modules/pouchdb-adapter-idb/src/changes.js b/packages/node_modules/pouchdb-adapter-idb/src/changes.js
index d095863..d7ae95c 100644
--- a/packages/node_modules/pouchdb-adapter-idb/src/changes.js
+++ b/packages/node_modules/pouchdb-adapter-idb/src/changes.js
@@ -5,10 +5,6 @@
   uuid
 } from 'pouchdb-utils';
 import {
-  Map,
-  Set
-} from 'pouchdb-collections';
-import {
   ATTACH_STORE,
   BY_SEQ_STORE,
   DOC_STORE
diff --git a/packages/node_modules/pouchdb-adapter-idb/src/index.js b/packages/node_modules/pouchdb-adapter-idb/src/index.js
index e162f74..a989569 100644
--- a/packages/node_modules/pouchdb-adapter-idb/src/index.js
+++ b/packages/node_modules/pouchdb-adapter-idb/src/index.js
@@ -13,7 +13,6 @@
   latest as getLatest
 } from 'pouchdb-merge';
 
-import { Map } from 'pouchdb-collections';
 import idbBulkDocs from './bulkDocs';
 import idbAllDocs from './allDocs';
 import checkBlobSupport from './blobSupport';
diff --git a/packages/node_modules/pouchdb-adapter-idb/src/utils.js b/packages/node_modules/pouchdb-adapter-idb/src/utils.js
index 0745468..dd718f9 100644
--- a/packages/node_modules/pouchdb-adapter-idb/src/utils.js
+++ b/packages/node_modules/pouchdb-adapter-idb/src/utils.js
@@ -1,5 +1,4 @@
-import { assign } from 'pouchdb-utils';
-import Promise from 'pouchdb-promise';
+
 import { createError, IDB_ERROR } from 'pouchdb-errors';
 import {
   pick
@@ -142,7 +141,7 @@
         var type = attObj.content_type;
         return new Promise(function (resolve) {
           readBlobData(body, type, asBlob, function (data) {
-            row.doc._attachments[att] = assign(
+            row.doc._attachments[att] = Object.assign(
               pick(attObj, ['digest', 'content_type']),
               {data: data}
             );
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 1a0fe62..b5e8979 100644
--- a/packages/node_modules/pouchdb-adapter-leveldb-core/src/index.js
+++ b/packages/node_modules/pouchdb-adapter-leveldb-core/src/index.js
@@ -2,9 +2,7 @@
 import sublevel from 'sublevel-pouchdb';
 import { obj as through } from 'through2';
 import getArguments from 'argsarray';
-import { Map, Set } from 'pouchdb-collections';
 import Deque from 'double-ended-queue';
-import Promise from 'pouchdb-promise';
 import bufferFrom from 'buffer-from'; // ponyfill for Node <6
 import {
   clone,
diff --git a/packages/node_modules/pouchdb-adapter-leveldb-core/src/transaction.js b/packages/node_modules/pouchdb-adapter-leveldb-core/src/transaction.js
index 9d37e18..48b36d2 100644
--- a/packages/node_modules/pouchdb-adapter-leveldb-core/src/transaction.js
+++ b/packages/node_modules/pouchdb-adapter-leveldb-core/src/transaction.js
@@ -3,7 +3,6 @@
 // things in-memory and then does a big batch() operation
 // when you're done
 
-import { Map, Set } from 'pouchdb-collections';
 import { nextTick } from 'pouchdb-utils';
 
 function getCacheFor(transaction, store) {
diff --git a/packages/node_modules/pouchdb-adapter-leveldb/src/index.js b/packages/node_modules/pouchdb-adapter-leveldb/src/index.js
index ef56ec0..78c3ad6 100644
--- a/packages/node_modules/pouchdb-adapter-leveldb/src/index.js
+++ b/packages/node_modules/pouchdb-adapter-leveldb/src/index.js
@@ -1,5 +1,5 @@
 import CoreLevelPouch from 'pouchdb-adapter-leveldb-core';
-import { assign } from 'pouchdb-utils';
+
 import requireLeveldown from './requireLeveldown';
 import migrate from './migrate';
 
@@ -19,7 +19,7 @@
     }
   }
 
-  var _opts = assign({
+  var _opts = Object.assign({
     db: leveldown,
     migrate: migrate
   }, opts);
diff --git a/packages/node_modules/pouchdb-adapter-localstorage/src/index.js b/packages/node_modules/pouchdb-adapter-localstorage/src/index.js
index 6b837d1..04c5c11 100644
--- a/packages/node_modules/pouchdb-adapter-localstorage/src/index.js
+++ b/packages/node_modules/pouchdb-adapter-localstorage/src/index.js
@@ -1,10 +1,10 @@
 import CoreLevelPouch from 'pouchdb-adapter-leveldb-core';
-import { assign } from 'pouchdb-utils';
+
 
 import localstoragedown from 'localstorage-down';
 
 function LocalStoragePouch(opts, callback) {
-  var _opts = assign({
+  var _opts = Object.assign({
     db: localstoragedown
   }, opts);
 
diff --git a/packages/node_modules/pouchdb-adapter-memory/src/index.js b/packages/node_modules/pouchdb-adapter-memory/src/index.js
index 6b0966f..145aba9 100644
--- a/packages/node_modules/pouchdb-adapter-memory/src/index.js
+++ b/packages/node_modules/pouchdb-adapter-memory/src/index.js
@@ -1,10 +1,10 @@
 import CoreLevelPouch from 'pouchdb-adapter-leveldb-core';
-import { assign } from 'pouchdb-utils';
+
 
 import memdown from 'memdown';
 
 function MemDownPouch(opts, callback) {
-  var _opts = assign({
+  var _opts = Object.assign({
     db: memdown
   }, opts);
 
diff --git a/packages/node_modules/pouchdb-adapter-node-websql/src/index.js b/packages/node_modules/pouchdb-adapter-node-websql/src/index.js
index 0e742d4..b4e76d1 100644
--- a/packages/node_modules/pouchdb-adapter-node-websql/src/index.js
+++ b/packages/node_modules/pouchdb-adapter-node-websql/src/index.js
@@ -1,9 +1,9 @@
 import WebSqlPouchCore from 'pouchdb-adapter-websql-core';
-import { assign } from 'pouchdb-utils';
+
 import websql from 'websql';
 
 function NodeWebSqlPouch(opts, callback) {
-  var _opts = assign({
+  var _opts = Object.assign({
     websql: websql // pass node-websql in as our "openDatabase" function
   }, opts);
 
diff --git a/packages/node_modules/pouchdb-adapter-utils/src/processDocs.js b/packages/node_modules/pouchdb-adapter-utils/src/processDocs.js
index 36d688a..2fc661c 100644
--- a/packages/node_modules/pouchdb-adapter-utils/src/processDocs.js
+++ b/packages/node_modules/pouchdb-adapter-utils/src/processDocs.js
@@ -6,7 +6,6 @@
   merge,
   winningRev as calculateWinningRev
 } from 'pouchdb-merge';
-import { Map } from 'pouchdb-collections';
 
 function rootIsMissing(docInfo) {
   return docInfo.metadata.rev_tree[0].ids[1].status === 'missing';
diff --git a/packages/node_modules/pouchdb-adapter-websql-core/src/bulkDocs.js b/packages/node_modules/pouchdb-adapter-websql-core/src/bulkDocs.js
index 3039d39..bcf27b5 100644
--- a/packages/node_modules/pouchdb-adapter-websql-core/src/bulkDocs.js
+++ b/packages/node_modules/pouchdb-adapter-websql-core/src/bulkDocs.js
@@ -1,4 +1,3 @@
-import { Map } from 'pouchdb-collections';
 import {
   preprocessAttachments,
   isLocalId,
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 29015f6..a558874 100644
--- a/packages/node_modules/pouchdb-adapter-websql-core/src/index.js
+++ b/packages/node_modules/pouchdb-adapter-websql-core/src/index.js
@@ -1,4 +1,4 @@
-import { assign } from 'pouchdb-utils';
+
 import {
   clone,
   pick,
@@ -77,7 +77,7 @@
     var attObj = doc._attachments[att];
     var attOpts = {binary: opts.binary, ctx: txn};
     api._getAttachment(doc._id, att, attObj, attOpts, function (_, data) {
-      doc._attachments[att] = assign(
+      doc._attachments[att] = Object.assign(
         pick(attObj, ['digest', 'content_type']),
         { data: data }
       );
@@ -134,7 +134,7 @@
 
   // extend the options here, because sqlite plugin has a ton of options
   // and they are constantly changing, so it's more prudent to allow anything
-  var websqlOpts = assign({}, opts, {
+  var websqlOpts = Object.assign({}, opts, {
     version: POUCH_VERSION,
     description: opts.name,
     size: size
@@ -608,7 +608,7 @@
     var tx = opts.ctx;
     if (!tx) {
       return db.readTransaction(function (txn) {
-        api._get(id, assign({ctx: txn}, opts), callback);
+        api._get(id, Object.assign({ctx: txn}, opts), callback);
       });
     }
 
diff --git a/packages/node_modules/pouchdb-adapter-websql-core/src/openDatabase.js b/packages/node_modules/pouchdb-adapter-websql-core/src/openDatabase.js
index 6f5b98a..2bfbff8 100644
--- a/packages/node_modules/pouchdb-adapter-websql-core/src/openDatabase.js
+++ b/packages/node_modules/pouchdb-adapter-websql-core/src/openDatabase.js
@@ -1,6 +1,5 @@
 'use strict';
 
-import { Map } from 'pouchdb-collections';
 
 var cachedDatabases = new Map();
 
diff --git a/packages/node_modules/pouchdb-adapter-websql-core/src/utils.js b/packages/node_modules/pouchdb-adapter-websql-core/src/utils.js
index a74ff9c..48b278c 100644
--- a/packages/node_modules/pouchdb-adapter-websql-core/src/utils.js
+++ b/packages/node_modules/pouchdb-adapter-websql-core/src/utils.js
@@ -1,4 +1,3 @@
-import { Set } from 'pouchdb-collections';
 import { createError, WSQ_ERROR } from 'pouchdb-errors';
 import { guardedConsole } from 'pouchdb-utils';
 
diff --git a/packages/node_modules/pouchdb-adapter-websql/src/index.js b/packages/node_modules/pouchdb-adapter-websql/src/index.js
index ff73732..a7e111c 100644
--- a/packages/node_modules/pouchdb-adapter-websql/src/index.js
+++ b/packages/node_modules/pouchdb-adapter-websql/src/index.js
@@ -1,5 +1,5 @@
 import WebSqlPouchCore from 'pouchdb-adapter-websql-core';
-import { assign } from 'pouchdb-utils';
+
 import valid from './valid';
 
 function openDB(name, version, description, size) {
@@ -8,7 +8,7 @@
 }
 
 function WebSQLPouch(opts, callback) {
-  var _opts = assign({
+  var _opts = Object.assign({
     websql: openDB
   }, opts);
 
diff --git a/packages/node_modules/pouchdb-ajax/src/ajaxCore.js b/packages/node_modules/pouchdb-ajax/src/ajaxCore.js
index 03e4449..6d83505 100644
--- a/packages/node_modules/pouchdb-ajax/src/ajaxCore.js
+++ b/packages/node_modules/pouchdb-ajax/src/ajaxCore.js
@@ -1,5 +1,5 @@
 import request from './request';
-import { assign } from 'pouchdb-utils';
+
 import { generateErrorFromResponse } from 'pouchdb-errors';
 import { clone } from 'pouchdb-utils';
 import applyTypeToBuffer from './applyTypeToBuffer';
@@ -18,7 +18,7 @@
     cache: false
   };
 
-  options = assign(defaultOptions, options);
+  options = Object.assign(defaultOptions, options);
 
   function onSuccess(obj, resp, cb) {
     if (!options.binary && options.json && typeof obj === 'string') {
diff --git a/packages/node_modules/pouchdb-ajax/src/request-browser.js b/packages/node_modules/pouchdb-ajax/src/request-browser.js
index d4c38d4..6bc5d38 100644
--- a/packages/node_modules/pouchdb-ajax/src/request-browser.js
+++ b/packages/node_modules/pouchdb-ajax/src/request-browser.js
@@ -1,7 +1,6 @@
 /* global fetch */
 /* global Headers */
 import {blob as createBlob, readAsArrayBuffer } from 'pouchdb-binary-utils';
-import Promise from 'pouchdb-promise';
 
 function wrappedFetch() {
   var wrappedPromise = {};
diff --git a/packages/node_modules/pouchdb-checkpointer/src/index.js b/packages/node_modules/pouchdb-checkpointer/src/index.js
index 996cae9..d4d2670 100644
--- a/packages/node_modules/pouchdb-checkpointer/src/index.js
+++ b/packages/node_modules/pouchdb-checkpointer/src/index.js
@@ -1,4 +1,3 @@
-import Promise from 'pouchdb-promise';
 import { explainError } from 'pouchdb-utils';
 import { collate } from 'pouchdb-collate';
 
diff --git a/packages/node_modules/pouchdb-core/src/adapter.js b/packages/node_modules/pouchdb-core/src/adapter.js
index f425e08..e98774d 100644
--- a/packages/node_modules/pouchdb-core/src/adapter.js
+++ b/packages/node_modules/pouchdb-core/src/adapter.js
@@ -1,9 +1,6 @@
 import {
-    assign,
     guardedConsole
 } from 'pouchdb-utils';
-import Promise from 'pouchdb-promise';
-import { Map } from 'pouchdb-collections';
 import { EventEmitter } from 'events';
 import inherits from 'inherits';
 import Changes from './changes';
@@ -126,7 +123,7 @@
     offset: opts.skip
   };
   return Promise.all(keys.map(function (key) {
-    var subOpts = assign({key: key, deleted: 'ok'}, opts);
+    var subOpts = Object.assign({key: key, deleted: 'ok'}, opts);
     ['limit', 'skip', 'keys'].forEach(function (optKey) {
       delete subOpts[optKey];
     });
diff --git a/packages/node_modules/pouchdb-core/src/changes.js b/packages/node_modules/pouchdb-core/src/changes.js
index 9245f0c..ecb5c29 100644
--- a/packages/node_modules/pouchdb-core/src/changes.js
+++ b/packages/node_modules/pouchdb-core/src/changes.js
@@ -1,4 +1,3 @@
-import Promise from 'pouchdb-promise';
 import getArguments from 'argsarray';
 import {
   clone,
diff --git a/packages/node_modules/pouchdb-core/src/setup.js b/packages/node_modules/pouchdb-core/src/setup.js
index e8c1569..2a901a6 100644
--- a/packages/node_modules/pouchdb-core/src/setup.js
+++ b/packages/node_modules/pouchdb-core/src/setup.js
@@ -1,8 +1,7 @@
-import { assign } from 'pouchdb-utils';
+
 
 import PouchDB from './constructor';
 import inherits from 'inherits';
-import { Map } from 'pouchdb-collections';
 import { EventEmitter as EE } from 'events';
 
 PouchDB.adapters = {};
@@ -69,7 +68,7 @@
       delete opts.name;
     }
 
-    opts = assign({}, PouchAlt.__defaults, opts);
+    opts = Object.assign({}, PouchAlt.__defaults, opts);
     PouchDB.call(this, name, opts);
   }
 
@@ -84,7 +83,7 @@
 
   // make default options transitive
   // https://github.com/pouchdb/pouchdb/issues/5922
-  PouchAlt.__defaults = assign({}, this.__defaults, defaultOpts);
+  PouchAlt.__defaults = Object.assign({}, this.__defaults, defaultOpts);
 
   return PouchAlt;
 };
diff --git a/packages/node_modules/pouchdb-for-coverage/src/utils.js b/packages/node_modules/pouchdb-for-coverage/src/utils.js
index b093700..942809a 100644
--- a/packages/node_modules/pouchdb-for-coverage/src/utils.js
+++ b/packages/node_modules/pouchdb-for-coverage/src/utils.js
@@ -16,8 +16,7 @@
   once,
   upsert,
   toPromise,
-  defaultBackOff,
-  assign
+  defaultBackOff
 } from 'pouchdb-utils';
 
 import {
@@ -40,7 +39,6 @@
   promisedCallback
 } from 'pouchdb-mapreduce-utils';
 
-import Promise from 'pouchdb-promise';
 
 import {
   createError,
@@ -72,7 +70,7 @@
   toPromise: toPromise,
   checkpointer: checkpointer,
   defaultBackOff: defaultBackOff,
-  assign: assign,
+  assign: Object.assign,
   mapReduceUtils: {
     uniq: uniq,
     sequentialize: sequentialize,
diff --git a/packages/node_modules/pouchdb-generate-replication-id/src/index.js b/packages/node_modules/pouchdb-generate-replication-id/src/index.js
index 37a3464..e587fb7 100644
--- a/packages/node_modules/pouchdb-generate-replication-id/src/index.js
+++ b/packages/node_modules/pouchdb-generate-replication-id/src/index.js
@@ -1,4 +1,3 @@
-import Promise from 'pouchdb-promise';
 import { binaryMd5 } from 'pouchdb-md5';
 import { collate } from 'pouchdb-collate';
 
diff --git a/packages/node_modules/pouchdb-mapreduce-utils/src/index.js b/packages/node_modules/pouchdb-mapreduce-utils/src/index.js
index a4c13f8..9eb4efc 100644
--- a/packages/node_modules/pouchdb-mapreduce-utils/src/index.js
+++ b/packages/node_modules/pouchdb-mapreduce-utils/src/index.js
@@ -1,6 +1,5 @@
 import argsarray from 'argsarray';
 import { nextTick } from 'pouchdb-utils';
-import { Set } from 'pouchdb-collections';
 import {
   QueryParseError,
   NotFoundError,
diff --git a/packages/node_modules/pouchdb-replication/src/getDocs.js b/packages/node_modules/pouchdb-replication/src/getDocs.js
index 0022186..5a8374d 100644
--- a/packages/node_modules/pouchdb-replication/src/getDocs.js
+++ b/packages/node_modules/pouchdb-replication/src/getDocs.js
@@ -1,5 +1,4 @@
 import { clone, flatten } from 'pouchdb-utils';
-import Promise from 'pouchdb-promise';
 
 function isGenOne(rev) {
   return /^1-/.test(rev);
diff --git a/packages/node_modules/pouchdb-replication/src/replicate.js b/packages/node_modules/pouchdb-replication/src/replicate.js
index 58fa2d3..0cfeea2 100644
--- a/packages/node_modules/pouchdb-replication/src/replicate.js
+++ b/packages/node_modules/pouchdb-replication/src/replicate.js
@@ -1,6 +1,5 @@
 import { clone, filterChange, uuid } from 'pouchdb-utils';
 import getDocs from './getDocs';
-import Promise from 'pouchdb-promise';
 import Checkpointer from 'pouchdb-checkpointer';
 import backOff from './backoff';
 import generateReplicationId from 'pouchdb-generate-replication-id';
diff --git a/packages/node_modules/pouchdb-replication/src/replication.js b/packages/node_modules/pouchdb-replication/src/replication.js
index af366f1..a1a6bfe 100644
--- a/packages/node_modules/pouchdb-replication/src/replication.js
+++ b/packages/node_modules/pouchdb-replication/src/replication.js
@@ -1,5 +1,4 @@
 import { EventEmitter as EE } from 'events';
-import Promise from 'pouchdb-promise';
 import inherits from 'inherits';
 
 // We create a basic promise so the caller can cancel the replication possibly
diff --git a/packages/node_modules/pouchdb-replication/src/sync.js b/packages/node_modules/pouchdb-replication/src/sync.js
index a4e6f80..055db34 100644
--- a/packages/node_modules/pouchdb-replication/src/sync.js
+++ b/packages/node_modules/pouchdb-replication/src/sync.js
@@ -1,5 +1,4 @@
-import { assign } from 'pouchdb-utils';
-import Promise from 'pouchdb-promise';
+
 import {
   replicate,
   toPouch
@@ -30,8 +29,8 @@
   var self = this;
   this.canceled = false;
 
-  var optsPush = opts.push ? assign({}, opts, opts.push) : opts;
-  var optsPull = opts.pull ? assign({}, opts, opts.pull) : opts;
+  var optsPush = opts.push ? Object.assign({}, opts, opts.push) : opts;
+  var optsPull = opts.pull ? Object.assign({}, opts, opts.pull) : opts;
 
   this.push = replicate(src, target, optsPush);
   this.pull = replicate(target, src, optsPull);
diff --git a/packages/node_modules/pouchdb-utils/src/adapterFun.js b/packages/node_modules/pouchdb-utils/src/adapterFun.js
index 03fb867..75c1a2c 100644
--- a/packages/node_modules/pouchdb-utils/src/adapterFun.js
+++ b/packages/node_modules/pouchdb-utils/src/adapterFun.js
@@ -1,4 +1,3 @@
-import Promise from 'pouchdb-promise';
 import toPromise from './toPromise';
 import getArguments from 'argsarray';
 import debug from 'debug';
diff --git a/packages/node_modules/pouchdb-utils/src/bulkGetShim.js b/packages/node_modules/pouchdb-utils/src/bulkGetShim.js
index 193ec3d..3f97cd0 100644
--- a/packages/node_modules/pouchdb-utils/src/bulkGetShim.js
+++ b/packages/node_modules/pouchdb-utils/src/bulkGetShim.js
@@ -1,5 +1,4 @@
 import pick from './pick';
-import { Map } from 'pouchdb-collections';
 
 // Most browsers throttle concurrent requests at 6, so it's silly
 // to shim _bulk_get by trying to launch potentially hundreds of requests
diff --git a/packages/node_modules/pouchdb-utils/src/toPromise.js b/packages/node_modules/pouchdb-utils/src/toPromise.js
index 65e6304..2646da1 100644
--- a/packages/node_modules/pouchdb-utils/src/toPromise.js
+++ b/packages/node_modules/pouchdb-utils/src/toPromise.js
@@ -1,4 +1,3 @@
-import Promise from 'pouchdb-promise';
 import getArguments from 'argsarray';
 import clone from './clone';
 import once from './once';
diff --git a/packages/node_modules/pouchdb-utils/src/upsert.js b/packages/node_modules/pouchdb-utils/src/upsert.js
index c9f5f40..b17c15f 100644
--- a/packages/node_modules/pouchdb-utils/src/upsert.js
+++ b/packages/node_modules/pouchdb-utils/src/upsert.js
@@ -1,4 +1,3 @@
-import Promise from 'pouchdb-promise';
 
 // this is essentially the "update sugar" function from daleharvey/pouchdb#1388
 // the diffFun tells us what delta to apply to the doc.  it either returns