├── .eslintrc ├── .gitignore ├── README.md ├── bin ├── cdbdump ├── cdbload └── cdbmorph ├── lib ├── couchdbdump.js ├── couchdbload.js ├── couchdbmorph.js └── utils.js ├── package-lock.json └── package.json /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "node": true 4 | }, 5 | "rules":{ 6 | "no-trailing-spaces": 0, 7 | "quotes": 0, 8 | "no-use-before-define": 0, 9 | "strict": 0, 10 | "consistent-return": 0, 11 | "camelcase": 0, 12 | "no-underscore-dangle": 0 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | devdocs/ 3 | 4 | # osx noise 5 | .DS_Store 6 | profile 7 | 8 | # xcode noise 9 | build/* 10 | *.mode1 11 | *.mode1v3 12 | *.mode2v3 13 | *.perspective 14 | *.perspectivev3 15 | *.pbxuser 16 | *.xcworkspace 17 | xcuserdata 18 | 19 | # svn & cvs 20 | .svn 21 | CVS 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | couchdb-dump 2 | ======== 3 | 4 | THIS PACKAGE IS NO LONGER MAINTAINED. DO NOT USE. 5 | 6 | SEE INSTEAD ... http://stedolan.github.io/jq/ 7 | 8 | It is possible to simulate most of the functionality of couchdb-dump using curl to fetch the contents of your db, 9 | and piping the output through jq. 10 | -------------------------------------------------------------------------------- /bin/cdbdump: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var path = require('path'); 4 | var fs = require('fs'); 5 | var lib = path.join(path.dirname(fs.realpathSync(__filename)), '../lib'); 6 | 7 | require(lib + '/couchdbdump.js').couchdbdump(); 8 | -------------------------------------------------------------------------------- /bin/cdbload: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var path = require('path'); 4 | var fs = require('fs'); 5 | var lib = path.join(path.dirname(fs.realpathSync(__filename)), '../lib'); 6 | 7 | require(lib + '/couchdbload.js').couchdbload(); 8 | -------------------------------------------------------------------------------- /bin/cdbmorph: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var path = require('path'); 4 | var fs = require('fs'); 5 | var lib = path.join(path.dirname(fs.realpathSync(__filename)), '../lib'); 6 | 7 | require(lib + '/couchdbmorph.js').couchdbmorph(); 8 | -------------------------------------------------------------------------------- /lib/couchdbdump.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const queue = require('async/queue'); 3 | const requestPromise = require('request-promise'); 4 | const async = require('async'); 5 | const mkdirp = require('mkdirp'); 6 | 7 | const pkg = require('../package.json'); 8 | const util = require('./utils'); 9 | 10 | exports.couchdbdump = function() { 11 | const conf = util.buildConf(); 12 | 13 | if(conf.version) { 14 | console.log('v' + pkg.version); 15 | return; 16 | } 17 | 18 | if(conf.help || !conf.couchdb.host || !conf.couchdb.port || (!conf.database && !conf.allDatabases)) { 19 | console.error("usage: cdbdump [-u username] [-p password] [-h host] [-P port] [-r protocol] [-s json-stringify-space] [-k dont-strip-revs] [-D design doc] [-v view] [-d database|-a all-databases] [--concurency] [-o output-directory]"); 20 | return; 21 | } 22 | 23 | let output = process.stdout; 24 | if(conf.output) { 25 | mkdirp.sync(conf.output); 26 | } 27 | 28 | if(conf.allDatabases) { 29 | const q = async.queue(function(task, cb) { 30 | dump(task.conf, task.db, task.output, 0, () => { 31 | output.close(); 32 | cb(); 33 | }); 34 | }, conf.concurrency); 35 | 36 | requestPromise(conf.couchdb.url + '_all_dbs') 37 | .then(function(data) { 38 | dbs = JSON.parse(data); 39 | dbs.map((db) => { 40 | if(conf.output) { 41 | mkdirp.sync(conf.output); 42 | output = fs.createWriteStream(conf.output + '/' + db + '.json'); 43 | } 44 | q.push({db: db, conf: conf, output: output}); 45 | }); 46 | }) 47 | .catch(function(err) { 48 | console.error(err); 49 | }); 50 | return; 51 | } 52 | 53 | if(conf.output) { 54 | output = fs.createWriteStream(conf.output + '/' + conf.database + '.json'); 55 | } 56 | 57 | dump(conf, conf.database, output); 58 | }; 59 | 60 | function dump(options, database, output, offset = 0, cb = () => {}) { 61 | let request = { 62 | qs: { 63 | include_docs: "true", 64 | attachments: "true", 65 | limit: options.numberPerPage, 66 | skip: offset 67 | }, 68 | headers: { 69 | "Accept": "application/json" 70 | } 71 | } 72 | request.url = options.couchdb.url + database; 73 | if(options.designDoc && options.views) { 74 | request.url += '/_design/' + options.designDoc + '/_view/' + options.views; 75 | } else { 76 | request.url += '/_all_docs'; 77 | } 78 | 79 | if(offset == 0) { 80 | output.write('{"docs": [ '); 81 | } 82 | 83 | requestPromise 84 | .get(request) 85 | .then(function(data) { 86 | console.error('then') 87 | const docs = JSON.parse(data); 88 | if(docs.rows.length > 0) { 89 | let dataArray = []; 90 | docs.rows.map((row) => { 91 | dataArray.push(JSON.stringify(row)); 92 | }); 93 | output.write(dataArray.join(',')); 94 | dataArray = []; 95 | 96 | if(docs.rows.length == options.numberPerPage) { 97 | return dump(options, database, output, (offset+options.numberPerPage), cb) 98 | } 99 | } 100 | output.write(']}\n'); 101 | cb(); 102 | }) 103 | .catch(function(err) { 104 | console.error(err); 105 | }); 106 | } 107 | 108 | -------------------------------------------------------------------------------- /lib/couchdbload.js: -------------------------------------------------------------------------------- 1 | var parseargs = require('minimist'); 2 | var couchreq = require('request'); 3 | var pkg = require('../package.json'); 4 | 5 | exports.couchdbload = function(){ 6 | var args = parseargs(process.argv.slice(2), { 7 | default: { 8 | "P": "5984", 9 | "h": "localhost", 10 | "r": "http" 11 | } 12 | }); 13 | if(args.version){ 14 | console.log('v' + pkg.version); 15 | return; 16 | } 17 | if(args.help || !args.h || !args.P || !args.d){ 18 | console.log("usage: cdbload [-u username] [-p password] [-h host] [-P port] [-r protocol] [-v verbose] -d database"); 19 | return; 20 | } 21 | 22 | var auth = ""; 23 | if(args.u){ 24 | auth = args.u + ":"; 25 | } 26 | if(args.p){ 27 | auth = auth + args.p; 28 | } 29 | if(auth){ 30 | auth = auth + "@"; 31 | } 32 | 33 | process.stdin.pipe(couchreq({ 34 | method: "POST", 35 | url: args.r + "://" + auth + args.h + ":" + args.P + "/" + args.d + "/_bulk_docs", 36 | headers: { 37 | "Accept": "application/json", 38 | "Content-type": "application/json" 39 | } 40 | }, function(err, res, body){ 41 | if(err){ 42 | return console.log(err); 43 | } 44 | console.log("CouchDB response code: " + res.statusCode); 45 | console.log("CouchDB response message: " + res.statusMessage); 46 | if(args.v){ 47 | console.log(JSON.stringify(body, null, 2)); 48 | } 49 | })); 50 | 51 | }; 52 | -------------------------------------------------------------------------------- /lib/couchdbmorph.js: -------------------------------------------------------------------------------- 1 | var parseargs = require('minimist'); 2 | var couchreq = require('request'); 3 | var through2 = require('through2'); 4 | var Parser = require('jsonparse'); 5 | var path = require('path'); 6 | var pkg = require('../package.json'); 7 | 8 | exports.couchdbmorph = function(){ 9 | var args = parseargs(process.argv.slice(2), { 10 | default: { 11 | "s": 0, 12 | } 13 | }); 14 | if(args.version){ 15 | console.log('v' + pkg.version); 16 | return; 17 | } 18 | if(args.help || !args.f){ 19 | console.error("usage: cdbmorph [-s json-stringify-space] -f path-to-morphfunction.js"); 20 | return; 21 | } 22 | 23 | var morphfunction = require(path.resolve(process.cwd(), args.f)); 24 | var skip = true; 25 | var p = new Parser(); 26 | 27 | var ts = through2.obj(function (chunk, enc, callback){ 28 | p.write(chunk); 29 | callback(); 30 | }) 31 | .on('data', function (data) { 32 | morphts.write(JSON.stringify(data)); 33 | }) 34 | .on('end', function () { 35 | morphts.end(); 36 | }); 37 | 38 | var morphts = through2(function (chunk, enc, callback){ 39 | var doc = JSON.parse(chunk); 40 | morphfunction(doc, function(err, morphed){ 41 | if(!morphed){ 42 | return callback(); 43 | } 44 | if(!skip){ 45 | morphts.push(','); 46 | } else { 47 | skip = false; 48 | } 49 | if(err){ 50 | console.error(err); 51 | morphts.push(JSON.stringify(chunk, null, args.s)); 52 | return callback(); 53 | } 54 | morphts.push(JSON.stringify(morphed, null, args.s)); 55 | callback(); 56 | }); 57 | }, function(callback){ 58 | this.push(']}\n'); 59 | callback(); 60 | }); 61 | 62 | p.onValue = function (value) { 63 | if(this.stack.length === 2){ 64 | ts.push(value); 65 | } 66 | }; 67 | 68 | process.stdout.write('{"docs": [ '); 69 | process.stdin.pipe(ts); 70 | morphts.pipe(process.stdout); 71 | }; 72 | -------------------------------------------------------------------------------- /lib/utils.js: -------------------------------------------------------------------------------- 1 | const parseargs = require('minimist'); 2 | 3 | exports.buildConf = function() { 4 | let conf = { 5 | couchdb: {}, 6 | output: null, 7 | allDatabases: false, 8 | createDatabase: false, 9 | database: "", 10 | version: false, 11 | jsonStringifySpace: false, 12 | stripRevs: true, 13 | designDoc: false, 14 | views: false, 15 | help: false, 16 | numberPerPage: 500, 17 | concurrency: 1, 18 | verbose: false, 19 | } 20 | 21 | const args = parseargs(process.argv.slice(2)); 22 | conf.couchdb = buildCouchDBConfig(args); 23 | 24 | if(args.version) { 25 | conf.version = true; 26 | return conf; 27 | } 28 | 29 | if(args.help) { 30 | conf.help = true; 31 | return conf; 32 | } 33 | 34 | if(args.verbose) { 35 | conf.verbose = true; 36 | } 37 | 38 | if(args.concurrency) { 39 | conf.concurrency = args.concurrency; 40 | } 41 | 42 | if(args.numberPerPage) { 43 | conf.numberPerPage = args.numberPerPage; 44 | } 45 | 46 | if(args.k) { 47 | conf.stripRevs = false; 48 | } 49 | 50 | if(args.D) { 51 | conf.designDoc = args.D; 52 | } 53 | 54 | if(args.v) { 55 | conf.views = args.v; 56 | } 57 | 58 | if(args.a) { 59 | conf.allDatabases = true; 60 | } 61 | 62 | if(args.d) { 63 | conf.database = args.d; 64 | } 65 | 66 | if(args["create-database"]) { 67 | conf.createDatabase = true; 68 | } 69 | 70 | if(args.o) { 71 | conf.output = args.o; 72 | } 73 | 74 | return conf; 75 | } 76 | 77 | function buildCouchDBConfig(args) { 78 | let conf = { 79 | url: "", 80 | port: 5984, 81 | host: "localhost", 82 | protocol: "http", 83 | auth: false 84 | }; 85 | 86 | if(args.h) { 87 | conf.host = args.h; 88 | } 89 | 90 | if(args.P) { 91 | conf.port = args.P; 92 | } 93 | 94 | if(args.r) { 95 | conf.protocol = args.r; 96 | } 97 | 98 | conf.auth = buildAuth(args.u, args.p); 99 | conf.url = buildCouchDBURL(conf); 100 | 101 | return conf; 102 | } 103 | 104 | function buildAuth(user, pass) { 105 | let auth = ""; 106 | if(user) { 107 | auth = user + ":"; 108 | } 109 | 110 | if(pass) { 111 | auth += pass; 112 | } 113 | 114 | if(auth === "") { 115 | return false; 116 | } 117 | 118 | return auth; 119 | } 120 | 121 | function buildCouchDBURL(conf) { 122 | let couchDBUrl = conf.protocol + '://'; 123 | 124 | if(conf.auth) { 125 | couchDBUrl += conf.auth + "@"; 126 | } 127 | 128 | couchDBUrl += conf.host + ':' + conf.port + '/'; 129 | 130 | return couchDBUrl; 131 | } 132 | 133 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "couchdb-dump", 3 | "version": "2.2.1", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "ajv": { 8 | "version": "5.5.2", 9 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", 10 | "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", 11 | "requires": { 12 | "co": "4.6.0", 13 | "fast-deep-equal": "1.0.0", 14 | "fast-json-stable-stringify": "2.0.0", 15 | "json-schema-traverse": "0.3.1" 16 | } 17 | }, 18 | "asn1": { 19 | "version": "0.2.3", 20 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", 21 | "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" 22 | }, 23 | "assert-plus": { 24 | "version": "1.0.0", 25 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 26 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 27 | }, 28 | "async": { 29 | "version": "2.6.0", 30 | "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", 31 | "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", 32 | "requires": { 33 | "lodash": "4.17.4" 34 | } 35 | }, 36 | "asynckit": { 37 | "version": "0.4.0", 38 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 39 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 40 | }, 41 | "aws-sign2": { 42 | "version": "0.7.0", 43 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 44 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 45 | }, 46 | "aws4": { 47 | "version": "1.6.0", 48 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", 49 | "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" 50 | }, 51 | "bcrypt-pbkdf": { 52 | "version": "1.0.1", 53 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", 54 | "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", 55 | "optional": true, 56 | "requires": { 57 | "tweetnacl": "0.14.5" 58 | } 59 | }, 60 | "bluebird": { 61 | "version": "3.5.1", 62 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", 63 | "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" 64 | }, 65 | "boom": { 66 | "version": "4.3.1", 67 | "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", 68 | "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", 69 | "requires": { 70 | "hoek": "4.2.0" 71 | } 72 | }, 73 | "caseless": { 74 | "version": "0.12.0", 75 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 76 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 77 | }, 78 | "co": { 79 | "version": "4.6.0", 80 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 81 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" 82 | }, 83 | "combined-stream": { 84 | "version": "1.0.5", 85 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", 86 | "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", 87 | "requires": { 88 | "delayed-stream": "1.0.0" 89 | } 90 | }, 91 | "core-util-is": { 92 | "version": "1.0.2", 93 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 94 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 95 | }, 96 | "cryptiles": { 97 | "version": "3.1.2", 98 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", 99 | "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", 100 | "requires": { 101 | "boom": "5.2.0" 102 | }, 103 | "dependencies": { 104 | "boom": { 105 | "version": "5.2.0", 106 | "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 107 | "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", 108 | "requires": { 109 | "hoek": "4.2.0" 110 | } 111 | } 112 | } 113 | }, 114 | "dashdash": { 115 | "version": "1.14.1", 116 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 117 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 118 | "requires": { 119 | "assert-plus": "1.0.0" 120 | } 121 | }, 122 | "delayed-stream": { 123 | "version": "1.0.0", 124 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 125 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 126 | }, 127 | "ecc-jsbn": { 128 | "version": "0.1.1", 129 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", 130 | "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", 131 | "optional": true, 132 | "requires": { 133 | "jsbn": "0.1.1" 134 | } 135 | }, 136 | "extend": { 137 | "version": "3.0.1", 138 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", 139 | "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" 140 | }, 141 | "extsprintf": { 142 | "version": "1.3.0", 143 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 144 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 145 | }, 146 | "fast-deep-equal": { 147 | "version": "1.0.0", 148 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", 149 | "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" 150 | }, 151 | "fast-json-stable-stringify": { 152 | "version": "2.0.0", 153 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 154 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" 155 | }, 156 | "forever-agent": { 157 | "version": "0.6.1", 158 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 159 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 160 | }, 161 | "form-data": { 162 | "version": "2.3.1", 163 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", 164 | "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", 165 | "requires": { 166 | "asynckit": "0.4.0", 167 | "combined-stream": "1.0.5", 168 | "mime-types": "2.1.17" 169 | } 170 | }, 171 | "getpass": { 172 | "version": "0.1.7", 173 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 174 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 175 | "requires": { 176 | "assert-plus": "1.0.0" 177 | } 178 | }, 179 | "har-schema": { 180 | "version": "2.0.0", 181 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 182 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 183 | }, 184 | "har-validator": { 185 | "version": "5.0.3", 186 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", 187 | "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", 188 | "requires": { 189 | "ajv": "5.5.2", 190 | "har-schema": "2.0.0" 191 | } 192 | }, 193 | "hawk": { 194 | "version": "6.0.2", 195 | "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", 196 | "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", 197 | "requires": { 198 | "boom": "4.3.1", 199 | "cryptiles": "3.1.2", 200 | "hoek": "4.2.0", 201 | "sntp": "2.1.0" 202 | } 203 | }, 204 | "hoek": { 205 | "version": "4.2.0", 206 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 207 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 208 | }, 209 | "http-signature": { 210 | "version": "1.2.0", 211 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 212 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 213 | "requires": { 214 | "assert-plus": "1.0.0", 215 | "jsprim": "1.4.1", 216 | "sshpk": "1.13.1" 217 | } 218 | }, 219 | "inherits": { 220 | "version": "2.0.3", 221 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 222 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 223 | }, 224 | "is-typedarray": { 225 | "version": "1.0.0", 226 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 227 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 228 | }, 229 | "isarray": { 230 | "version": "1.0.0", 231 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 232 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 233 | }, 234 | "isstream": { 235 | "version": "0.1.2", 236 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 237 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 238 | }, 239 | "jsbn": { 240 | "version": "0.1.1", 241 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 242 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 243 | "optional": true 244 | }, 245 | "json-schema": { 246 | "version": "0.2.3", 247 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 248 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 249 | }, 250 | "json-schema-traverse": { 251 | "version": "0.3.1", 252 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", 253 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" 254 | }, 255 | "json-stringify-safe": { 256 | "version": "5.0.1", 257 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 258 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 259 | }, 260 | "jsonparse": { 261 | "version": "1.3.1", 262 | "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", 263 | "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" 264 | }, 265 | "jsprim": { 266 | "version": "1.4.1", 267 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 268 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 269 | "requires": { 270 | "assert-plus": "1.0.0", 271 | "extsprintf": "1.3.0", 272 | "json-schema": "0.2.3", 273 | "verror": "1.10.0" 274 | } 275 | }, 276 | "lodash": { 277 | "version": "4.17.4", 278 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 279 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" 280 | }, 281 | "mime-db": { 282 | "version": "1.30.0", 283 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", 284 | "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" 285 | }, 286 | "mime-types": { 287 | "version": "2.1.17", 288 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", 289 | "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", 290 | "requires": { 291 | "mime-db": "1.30.0" 292 | } 293 | }, 294 | "minimist": { 295 | "version": "1.2.0", 296 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 297 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" 298 | }, 299 | "mkdirp": { 300 | "version": "0.5.1", 301 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 302 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 303 | "requires": { 304 | "minimist": "0.0.8" 305 | }, 306 | "dependencies": { 307 | "minimist": { 308 | "version": "0.0.8", 309 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 310 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 311 | } 312 | } 313 | }, 314 | "oauth-sign": { 315 | "version": "0.8.2", 316 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", 317 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" 318 | }, 319 | "performance-now": { 320 | "version": "2.1.0", 321 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 322 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 323 | }, 324 | "process-nextick-args": { 325 | "version": "1.0.7", 326 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 327 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" 328 | }, 329 | "punycode": { 330 | "version": "1.4.1", 331 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 332 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 333 | }, 334 | "qs": { 335 | "version": "6.5.1", 336 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", 337 | "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" 338 | }, 339 | "readable-stream": { 340 | "version": "2.3.3", 341 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", 342 | "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", 343 | "requires": { 344 | "core-util-is": "1.0.2", 345 | "inherits": "2.0.3", 346 | "isarray": "1.0.0", 347 | "process-nextick-args": "1.0.7", 348 | "safe-buffer": "5.1.1", 349 | "string_decoder": "1.0.3", 350 | "util-deprecate": "1.0.2" 351 | } 352 | }, 353 | "request": { 354 | "version": "2.83.0", 355 | "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", 356 | "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", 357 | "requires": { 358 | "aws-sign2": "0.7.0", 359 | "aws4": "1.6.0", 360 | "caseless": "0.12.0", 361 | "combined-stream": "1.0.5", 362 | "extend": "3.0.1", 363 | "forever-agent": "0.6.1", 364 | "form-data": "2.3.1", 365 | "har-validator": "5.0.3", 366 | "hawk": "6.0.2", 367 | "http-signature": "1.2.0", 368 | "is-typedarray": "1.0.0", 369 | "isstream": "0.1.2", 370 | "json-stringify-safe": "5.0.1", 371 | "mime-types": "2.1.17", 372 | "oauth-sign": "0.8.2", 373 | "performance-now": "2.1.0", 374 | "qs": "6.5.1", 375 | "safe-buffer": "5.1.1", 376 | "stringstream": "0.0.5", 377 | "tough-cookie": "2.3.3", 378 | "tunnel-agent": "0.6.0", 379 | "uuid": "3.2.1" 380 | } 381 | }, 382 | "request-promise": { 383 | "version": "4.2.2", 384 | "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.2.tgz", 385 | "integrity": "sha1-0epG1lSm7k+O5qT+oQGMIpEZBLQ=", 386 | "requires": { 387 | "bluebird": "3.5.1", 388 | "request-promise-core": "1.1.1", 389 | "stealthy-require": "1.1.1", 390 | "tough-cookie": "2.3.3" 391 | } 392 | }, 393 | "request-promise-core": { 394 | "version": "1.1.1", 395 | "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", 396 | "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", 397 | "requires": { 398 | "lodash": "4.17.4" 399 | } 400 | }, 401 | "request-promise-native": { 402 | "version": "1.0.5", 403 | "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", 404 | "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", 405 | "requires": { 406 | "request-promise-core": "1.1.1", 407 | "stealthy-require": "1.1.1", 408 | "tough-cookie": "2.3.3" 409 | } 410 | }, 411 | "safe-buffer": { 412 | "version": "5.1.1", 413 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 414 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" 415 | }, 416 | "sntp": { 417 | "version": "2.1.0", 418 | "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", 419 | "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", 420 | "requires": { 421 | "hoek": "4.2.0" 422 | } 423 | }, 424 | "sshpk": { 425 | "version": "1.13.1", 426 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", 427 | "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", 428 | "requires": { 429 | "asn1": "0.2.3", 430 | "assert-plus": "1.0.0", 431 | "bcrypt-pbkdf": "1.0.1", 432 | "dashdash": "1.14.1", 433 | "ecc-jsbn": "0.1.1", 434 | "getpass": "0.1.7", 435 | "jsbn": "0.1.1", 436 | "tweetnacl": "0.14.5" 437 | } 438 | }, 439 | "stealthy-require": { 440 | "version": "1.1.1", 441 | "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", 442 | "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" 443 | }, 444 | "string_decoder": { 445 | "version": "1.0.3", 446 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 447 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", 448 | "requires": { 449 | "safe-buffer": "5.1.1" 450 | } 451 | }, 452 | "stringstream": { 453 | "version": "0.0.5", 454 | "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", 455 | "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" 456 | }, 457 | "through2": { 458 | "version": "2.0.3", 459 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", 460 | "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", 461 | "requires": { 462 | "readable-stream": "2.3.3", 463 | "xtend": "4.0.1" 464 | } 465 | }, 466 | "tough-cookie": { 467 | "version": "2.3.3", 468 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", 469 | "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", 470 | "requires": { 471 | "punycode": "1.4.1" 472 | } 473 | }, 474 | "tunnel-agent": { 475 | "version": "0.6.0", 476 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 477 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 478 | "requires": { 479 | "safe-buffer": "5.1.1" 480 | } 481 | }, 482 | "tweetnacl": { 483 | "version": "0.14.5", 484 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 485 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 486 | "optional": true 487 | }, 488 | "util-deprecate": { 489 | "version": "1.0.2", 490 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 491 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 492 | }, 493 | "uuid": { 494 | "version": "3.2.1", 495 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", 496 | "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" 497 | }, 498 | "verror": { 499 | "version": "1.10.0", 500 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 501 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 502 | "requires": { 503 | "assert-plus": "1.0.0", 504 | "core-util-is": "1.0.2", 505 | "extsprintf": "1.3.0" 506 | } 507 | }, 508 | "xtend": { 509 | "version": "4.0.1", 510 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 511 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" 512 | } 513 | } 514 | } 515 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "couchdb-dump", 3 | "version": "2.2.1", 4 | "description": "Tools to dump, modify, and load documents in CouchDB from the command line. (Same basic concept as mysqldump, but much more and for CouchDB)", 5 | "author": "Raffi Minassian (https://twitter.com/RaffiMinassian)", 6 | "license": "Apache-2.0", 7 | "engines": { 8 | "node": ">=4.2.2" 9 | }, 10 | "bin": { 11 | "cdbdump": "./bin/cdbdump", 12 | "cdbload": "./bin/cdbload", 13 | "cdbmorph": "./bin/cdbmorph" 14 | }, 15 | "repository": { 16 | "type": "git", 17 | "url": "https://github.com/raffi-minassian/couchdb-dump.git" 18 | }, 19 | "main": "./lib/couchdbdump.js", 20 | "scripts": { 21 | "test": "echo 'Error: no test specified' && exit 1" 22 | }, 23 | "keywords": [ 24 | "couchdb", 25 | "backup", 26 | "database", 27 | "dump", 28 | "mysqldump" 29 | ], 30 | "dependencies": { 31 | "async": "^2.6.0", 32 | "jsonparse": "1.x.x", 33 | "minimist": "1.x.x", 34 | "mkdirp": "^0.5.1", 35 | "request": "2.x.x", 36 | "request-promise": "^4.2.2", 37 | "request-promise-native": "^1.0.5", 38 | "through2": "2.x.x" 39 | } 40 | } 41 | --------------------------------------------------------------------------------