You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by gl...@apache.org on 2018/07/18 13:58:35 UTC

[couchdb-nano] 05/08: added central getCallback function to remove code duplication

This is an automated email from the ASF dual-hosted git repository.

glynnbird pushed a commit to branch issue98
in repository https://gitbox.apache.org/repos/asf/couchdb-nano.git

commit 11c616831ebe75bbff3342e9fc167f493845fb0a
Author: Glynn Bird <gl...@gmail.com>
AuthorDate: Wed Jul 18 14:43:35 2018 +0100

    added central getCallback function to remove code duplication
---
 lib/nano.js | 242 ++++++++++++++++++++++--------------------------------------
 1 file changed, 87 insertions(+), 155 deletions(-)

diff --git a/lib/nano.js b/lib/nano.js
index 4e41a5f..1bf2d17 100644
--- a/lib/nano.js
+++ b/lib/nano.js
@@ -23,6 +23,17 @@ const logger = require('./logger');
 
 let nano;
 
+function getCallback (opts, callback) {
+  if (typeof opts === 'function') {
+    callback = opts;
+    opts = {};
+  }
+  return {
+    opts,
+    callback
+  };
+}
+
 module.exports = exports = nano = function dbScope(cfg) {
   let serverScope = {};
 
@@ -297,14 +308,11 @@ module.exports = exports = nano = function dbScope(cfg) {
   }
 
   // http://docs.couchdb.org/en/latest/api/server/common.html#get--_db_updates
-  function updates(qs, callback) {
-    if (typeof qs === 'function') {
-      callback = qs;
-      qs = {};
-    }
+  function updates(qs0, callback0) {
+    const {opts, callback} = getCallback(qs0, callback0);
     return relax({
       db: '_db_updates',
-      qs: qs
+      qs: opts
     }, callback);
   }
 
@@ -352,35 +360,23 @@ module.exports = exports = nano = function dbScope(cfg) {
   }
 
   // http://docs.couchdb.org/en/latest/api/database/changes.html#get--db-_changes
-  function changesDb(dbName, qs, callback) {
-    if (typeof qs === 'function') {
-      callback = qs;
-      qs = {};
-    }
-    return relax({db: dbName, path: '_changes', qs: qs}, callback);
+  function changesDb(dbName, qs0, callback0) {
+    const {opts, callback} = getCallback(qs0, callback0);
+    return relax({db: dbName, path: '_changes', qs: opts}, callback);
   }
 
-  function changesDbAsStream(dbName, qs, callback) {
-    if (typeof qs === 'function') {
-      callback = qs;
-      qs = {};
-    }
-    return relax({db: dbName, path: '_changes', stream: true, qs: qs}, callback);
+  function changesDbAsStream(dbName, qs0, callback0) {
+    const {opts, callback} = getCallback(qs0, callback0);
+    return relax({db: dbName, path: '_changes', stream: true, qs: opts}, callback);
   }
 
-  function followDb(dbName, qs, callback) {
-    if (typeof qs === 'function') {
-      callback = qs;
-      qs = {};
-    }
-
-    qs = qs || {};
-    qs.db = urlResolveFix(cfg.url, encodeURIComponent(dbName));
-
+  function followDb(dbName, qs0, callback0) {
+    const {opts, callback} = getCallback(qs0, callback0);
+    opts.db = urlResolveFix(cfg.url, encodeURIComponent(dbName));
     if (typeof callback === 'function') {
-      return followAgent(qs, callback);
+      return followAgent(opts, callback);
     } else {
-      return new followAgent.Feed(qs);
+      return new followAgent.Feed(opts);
     }
   }
 
@@ -393,11 +389,9 @@ module.exports = exports = nano = function dbScope(cfg) {
   }
 
   // http://docs.couchdb.org/en/latest/api/server/common.html#post--_replicate
-  function replicateDb(source, target, opts, callback) {
-    if (typeof opts === 'function') {
-      callback = opts;
-      opts = {};
-    }
+  function replicateDb(source, target, opts0, callback0) {
+    const {opts, callback} = getCallback(opts0, callback0);
+
     // _replicate
     opts.source = _serializeAsUrl(source);
     opts.target = _serializeAsUrl(target);
@@ -411,16 +405,13 @@ module.exports = exports = nano = function dbScope(cfg) {
       callback = count;
       count = 1;
     }
-
     return relax({ method: 'GET', path: '_uuids', qs: {count: count}}, callback);
   }
 
   // http://guide.couchdb.org/draft/replication.html
-  function enableReplication(source, target, opts, callback) {
-    if (typeof opts === 'function') {
-      callback = opts;
-      opts = {};
-    }
+  function enableReplication(source, target, opts0, callback0) {
+    const {opts, callback} = getCallback(opts0, callback0);
+
     // _replicator
     opts.source = _serializeAsUrl(source);
     opts.target = _serializeAsUrl(target);
@@ -429,20 +420,14 @@ module.exports = exports = nano = function dbScope(cfg) {
   }
 
   // http://guide.couchdb.org/draft/replication.html
-  function queryReplication(id, opts, callback) {
-    if (typeof opts === 'function') {
-      callback = opts;
-      opts = {};
-    }
+  function queryReplication(id, opts0, callback0) {
+    const {opts, callback} = getCallback(opts0, callback0);
     return relax({db: '_replicator', method: 'GET', path: id}, callback);
   }
 
   // http://guide.couchdb.org/draft/replication.html
-  function disableReplication(id, rev, opts, callback) {
-    if (typeof opts === 'function') {
-      callback = opts;
-      opts = {};
-    }
+  function disableReplication(id, rev, opts0, callback0) {
+    const {opts, callback} = getCallback(opts0, callback0);
     return relax({db: '_replicator', method: 'DELETE', path: id, qs: {rev: rev}}, callback);
   }
 
@@ -452,28 +437,25 @@ module.exports = exports = nano = function dbScope(cfg) {
 
     // http://docs.couchdb.org/en/latest/api/document/common.html#put--db-docid
     // http://docs.couchdb.org/en/latest/api/database/common.html#post--db
-    function insertDoc(doc, qs, callback) {
-      const opts = {db: dbName, body: doc, method: 'POST'};
+    function insertDoc(doc, qs0, callback0) {
+      const req = {db: dbName, body: doc, method: 'POST'};
 
-      if (typeof qs === 'function') {
-        callback = qs;
-        qs = {};
-      }
+      let {opts, callback} = getCallback(qs0, callback0);
 
-      if (typeof qs === 'string') {
-        qs = {docName: qs};
+      if (typeof opts === 'string') {
+        opts = {docName: opts};
       }
 
-      if (qs) {
-        if (qs.docName) {
-          opts.doc = qs.docName;
-          opts.method = 'PUT';
-          delete qs.docName;
+      if (opts) {
+        if (opts.docName) {
+          req.doc = opts.docName;
+          req.method = 'PUT';
+          delete opts.docName;
         }
-        opts.qs = qs;
+        req.qs = opts;
       }
 
-      return relax(opts, callback);
+      return relax(req, callback);
     }
 
     // http://docs.couchdb.org/en/latest/api/document/common.html#delete--db-docid
@@ -498,18 +480,15 @@ module.exports = exports = nano = function dbScope(cfg) {
     }
 
     // http://docs.couchdb.org/en/latest/api/document/common.html#get--db-docid
-    function getDoc(docName, qs, callback) {
-      if (typeof qs === 'function') {
-        callback = qs;
-        qs = {};
-      }
+    function getDoc(docName, qs0, callback0) {
+      const {opts, callback} = getCallback(qs0, callback0);
 
       if(!docName) {
         if(callback)
           callback("Invalid doc id", null);
       }
       else {
-        return relax({db: dbName, doc: docName, qs: qs}, callback);
+        return relax({db: dbName, doc: docName, qs: opts}, callback);
       }
     }
 
@@ -537,11 +516,8 @@ module.exports = exports = nano = function dbScope(cfg) {
     }
 
     // http://docs.couchdb.org/en/latest/api/document/common.html#copy--db-docid
-    function copyDoc(docSrc, docDest, opts, callback) {
-      if (typeof opts === 'function') {
-        callback = opts;
-        opts = {};
-      }
+    function copyDoc(docSrc, docDest, opts0, callback0) {
+      const {opts, callback} = getCallback(opts0, callback0);
 
       const qs = {
         db: dbName,
@@ -567,70 +543,51 @@ module.exports = exports = nano = function dbScope(cfg) {
     }
 
     // http://docs.couchdb.org/en/latest/api/database/bulk-api.html#get--db-_all_docs
-    function listDoc(qs, callback) {
-      if (typeof qs === 'function') {
-        callback = qs;
-        qs = {};
-      }
-
-      return relax({db: dbName, path: '_all_docs', qs: qs}, callback);
+    function listDoc(qs0, callback0) {
+      const {opts, callback} = getCallback(qs0, callback0);
+      return relax({db: dbName, path: '_all_docs', qs: opts}, callback);
     }
 
     // http://docs.couchdb.org/en/latest/api/database/bulk-api.html#get--db-_all_docs
-    function listDocAsStream(qs, callback) {
-      if (typeof qs === 'function') {
-        callback = qs;
-        qs = {};
-      }
-
-      return relax({db: dbName, path: '_all_docs', qs: qs, stream: true}, callback);
+    function listDocAsStream(qs0, callback0) {
+      const {opts, callback} = getCallback(qs0, callback0);
+      return relax({db: dbName, path: '_all_docs', qs: opts, stream: true}, callback);
     }
 
     // http://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_all_docs
-    function fetchDocs(docNames, qs, callback) {
-      if (typeof qs === 'function') {
-        callback = qs;
-        qs = {};
-      }
-
-      qs = qs || {};
-      qs['include_docs'] = true;
+    function fetchDocs(docNames, qs0, callback0) {
+      const {opts, callback} = getCallback(qs0, callback0);
+      opts['include_docs'] = true;
 
       return relax({
         db: dbName,
         path: '_all_docs',
         method: 'POST',
-        qs: qs,
+        qs: opts,
         body: docNames
       }, callback);
     }
 
-    function fetchRevs(docNames, qs, callback) {
-      if (typeof qs === 'function') {
-        callback = qs;
-        qs = {};
-      }
+    function fetchRevs(docNames, qs0, callback0) {
+      const {opts, callback} = getCallback(qs0, callback0);
       return relax({
         db: dbName,
         path: '_all_docs',
         method: 'POST',
-        qs: qs,
+        qs: opts,
         body: docNames
       }, callback);
     }
 
-    function view(ddoc, viewName, meta, qs, callback) {
-      if (typeof qs === 'function') {
-        callback = qs;
-        qs = {};
-      }
+    function view(ddoc, viewName, meta, qs0, callback0) {
+      const {opts, callback} = getCallback(qs0, callback0);
 
       if (typeof meta.stream !== 'boolean') {
         meta.stream = false;
       }
 
       // prevent mutation of the client qs object by using a clone
-      const qs1 = Object.assign({}, qs);
+      const qs1 = Object.assign({}, opts);
 
       const viewPath = '_design/' + ddoc + '/_' + meta.type + '/'  + viewName;
 
@@ -733,18 +690,14 @@ module.exports = exports = nano = function dbScope(cfg) {
     }
 
     // http://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_bulksDoc
-    function bulksDoc(docs, qs, callback) {
-      if (typeof qs === 'function') {
-        callback = qs;
-        qs = {};
-      }
-
+    function bulksDoc(docs, qs0, callback0) {
+      const {opts, callback} = getCallback(qs0, callback0);
       return relax({
         db: dbName,
         path: '_bulk_docs',
         body: docs,
         method: 'POST',
-        qs: qs
+        qs: opts
       }, callback);
     }
 
@@ -788,88 +741,67 @@ module.exports = exports = nano = function dbScope(cfg) {
       }, callback);
     }
 
-    function getMultipart(docName, qs, callback) {
-      if (typeof qs === 'function') {
-        callback = qs;
-        qs = {};
-      }
-      qs = qs || {};
-
-      qs.attachments = true;
+    function getMultipart(docName, qs0, callback0) {
+      const {opts, callback} = getCallback(qs0, callback0);
+      opts.attachments = true;
 
       return relax({
         db: dbName,
         doc: docName,
         encoding: null,
         accept: 'multipart/related',
-        qs: qs
+        qs: opts
       }, callback);
     }
 
-    function insertAtt(docName, attName, att, contentType, qs, callback) {
-      if (typeof qs === 'function') {
-        callback = qs;
-        qs = {};
-      }
-
+    function insertAtt(docName, attName, att, contentType, qs0, callback0) {
+      const {opts, callback} = getCallback(qs0, callback0);
       return relax({
         db: dbName,
         att: attName,
         method: 'PUT',
         contentType: contentType,
         doc: docName,
-        qs: qs,
+        qs: opts,
         body: att,
         dontStringify: true
       }, callback);
     }
 
-    function insertAttAsStream(docName, attName, att, contentType, qs, callback) {
-      if (typeof qs === 'function') {
-        callback = qs;
-        qs = {};
-      }
-
+    function insertAttAsStream(docName, attName, att, contentType, qs0, callback0) {
+      const {opts, callback} = getCallback(qs0, callback0);
       return relax({
         db: dbName,
         att: attName,
         method: 'PUT',
         contentType: contentType,
         doc: docName,
-        qs: qs,
+        qs: opts,
         body: att,
         stream: true,
         dontStringify: true
       }, callback);
     }
 
-    function getAtt(docName, attName, qs, callback) {
-      if (typeof qs === 'function') {
-        callback = qs;
-        qs = {};
-      }
-
+    function getAtt(docName, attName, qs0, callback0) {
+      const {opts, callback} = getCallback(qs0, callback0);
       return relax({
         db: dbName,
         att: attName,
         doc: docName,
-        qs: qs,
+        qs: opts,
         encoding: null,
         dontParse: true
       }, callback);
     }
 
-    function getAttAsStream(docName, attName, qs, callback) {
-      if (typeof qs === 'function') {
-        callback = qs;
-        qs = {};
-      }
-
+    function getAttAsStream(docName, attName, qs0, callback0) {
+      const {opts, callback} = getCallback(qs0, callback0);
       return relax({
         db: dbName,
         att: attName,
         doc: docName,
-        qs: qs,
+        qs: opts,
         stream: true,
         encoding: null,
         dontParse: true