├── .gitignore ├── .jshintrc ├── .npmignore ├── .prettierrc ├── .travis.yml ├── README.md ├── bin └── excel-couchdb-import ├── example ├── README.md └── movies.xlsx ├── lib └── parse.js ├── package-lock.json ├── package.json ├── test ├── fixtures │ ├── parse-input.xlsx │ ├── parse-output.json │ ├── types-input.xlsx │ └── types-output.json └── test.parse.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | npm-debug.log 3 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "browser": true, 3 | "jquery": true, 4 | "node": true, 5 | "esversion": 6, 6 | 7 | // Prohibit use of == and != in favor of === and !==. 8 | "eqeqeq": true, 9 | 10 | // Suppress warnings about == null comparisons. 11 | "eqnull": true, 12 | 13 | // Enforce tab width of 2 spaces. 14 | "indent": 2, 15 | 16 | // Prohibit use of a variable before it is defined. 17 | "latedef": "func", 18 | 19 | // Require capitalized names for constructor functions. 20 | "newcap": true, 21 | 22 | // Enforce use of single quotation marks for strings. 23 | "quotmark": "single", 24 | 25 | // Prohibit trailing whitespace. 26 | "trailing": true, 27 | 28 | // Prohibit use of explicitly undeclared variables. 29 | "undef": true, 30 | 31 | // Warn when variables are defined but never used. 32 | "unused": true, 33 | 34 | // Enforce placing 'use strict' at the top function scope 35 | "strict": false 36 | } 37 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MikeBild/excel-couchdb-import/193fa0b724f85067defc183893dd3cc647bd842a/.npmignore -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "parser": "flow" 4 | } 5 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "6.10.0" 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # excel-couchdb-import 2 | 3 | > Import Excel Sheets to CouchDB 4 | 5 | `excel-couchdb-import` imports Excel files (*.xls, *.xslx) into CouchDB/PouchDB documents, and transforms the sheets into JSON. 6 | 7 | ## Usage 8 | 9 | > Document update conflicts are possible and will be ignored. 10 | 11 | ```bash 12 | excel-couchdb-import path/to/file.xls \ 13 | --target http://user:password@couchdbhost.com/targetdb 14 | ``` 15 | 16 | ## Reimport 17 | 18 | > Fetches revisions and update local documents by id. 19 | 20 | ```bash 21 | excel-couchdb-import path/to/file.xls \ 22 | --target http://user:password@couchdbhost.com/targetdb \ 23 | --reimport 24 | ``` 25 | 26 | ## Example 27 | 28 | * [movies.xlsx](example/README.md) 29 | * [movies-with-ids.xlsx](example/README.md) 30 | 31 | ## Issue Reporting 32 | 33 | If you have found a bug or if you have a feature request, please report them at this repository issues section. Please do not report security vulnerabilities on the public [GitHub issue tracker](https://github.com/mikebild/excel-couchdb-import/issues). 34 | 35 | ## License 36 | 37 | This project is licensed under the MIT license. See the [LICENSE](LICENSE) file for more info. 38 | 39 | ## Thanks 40 | 41 | You like this **excel-couchdb-import** and you want to see what coming next? Follow me on Twitter [`@mikebild`](https://twitter.com/mikebild). 42 | 43 | Enjoy! -------------------------------------------------------------------------------- /bin/excel-couchdb-import: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | const nano = require("nano"); 3 | const url = require("url"); 4 | const log = require("verbalize"); 5 | const parse = require("../lib/parse"); 6 | const argv = require("minimist")(process.argv.slice(2)); 7 | const args = { 8 | path: argv._[0], 9 | targetDbUrlWithCredentials: argv.target, 10 | reimport: argv.reimport, 11 | log: log 12 | }; 13 | log.runner = "couchdb-excel-import"; 14 | 15 | if ( 16 | !( 17 | args.targetDbUrlWithCredentials && 18 | url.parse(args.targetDbUrlWithCredentials) 19 | ) 20 | ) { 21 | args.log.error('Parameter "target" is missing or has the wrong URL format.'); 22 | process.exit(1); 23 | } 24 | 25 | if (!args.path) { 26 | args.log.error("Path to Excel file is missing."); 27 | process.exit(1); 28 | } 29 | 30 | createDatabaseIfMissing(args) 31 | .then(() => { 32 | parse(args) 33 | .then(data => { 34 | return data.sheets.reduce((state, sheet) => { 35 | return state.concat( 36 | sheet.rows.map(x => { 37 | return Object.assign({}, x, { $doc_type: sheet.name }); 38 | }) 39 | ); 40 | }, []); 41 | }) 42 | .then( 43 | data => 44 | args.reimport 45 | ? rewriteDocs(args, { docs: data }) 46 | : writeDocs(args, { docs: data }) 47 | ) 48 | .then(data => { 49 | // TODO: check conflicts and report to user 50 | args.log.info( 51 | `${data.length} docs ${args.reimport ? "reimported" : "imported"}.` 52 | ); 53 | process.exit(0); 54 | }); 55 | }) 56 | .catch(error => { 57 | args.log.error(error.message); 58 | process.exit(1); 59 | }); 60 | 61 | function getCouchDbApi(targetDbUrlWithCredentials) { 62 | const urlParts = url.parse(targetDbUrlWithCredentials); 63 | const couchDbUrl = targetDbUrlWithCredentials.replace(urlParts.pathname, ""); 64 | try { 65 | return nano(couchDbUrl).db; 66 | } catch (error) { 67 | args.log.error(error.message); 68 | process.exit(1); 69 | } 70 | } 71 | 72 | function getCouchDbDatabaseApi(targetDbUrlWithCredentials) { 73 | try { 74 | return nano(targetDbUrlWithCredentials); 75 | } catch (error) { 76 | args.log.error(error.message); 77 | process.exit(1); 78 | } 79 | } 80 | 81 | function createDatabaseIfMissing(args) { 82 | const dbName = url.parse(args.targetDbUrlWithCredentials).pathname.substr(1); 83 | const database = getCouchDbApi(args.targetDbUrlWithCredentials); 84 | if (!database) 85 | return Promise.reject( 86 | new Error(`Connection to ${args.targetDbUrlWithCredentials} failed.`) 87 | ); 88 | 89 | return new Promise((resolve, reject) => { 90 | database.get(dbName, error => { 91 | if (error) { 92 | if (error.statusCode === 404) { 93 | args.log.info(`creating ${dbName} database ...`); 94 | database.create(dbName, error => { 95 | if (error) 96 | return reject( 97 | new Error(`Could not create ${args.targetDbUrl} database.`) 98 | ); 99 | resolve(); 100 | }); 101 | } else { 102 | return reject(new Error("Could not connect to target database.")); 103 | } 104 | } else { 105 | resolve(); 106 | } 107 | }); 108 | }); 109 | } 110 | 111 | function rewriteDocs(args, docs) { 112 | const database = getCouchDbDatabaseApi(args.targetDbUrlWithCredentials); 113 | return new Promise((resolve, reject) => { 114 | database.list({ include_docs: false }, (error, result) => { 115 | if (error) return reject(error); 116 | 117 | const existingRevs = result.rows.map(x => ({ 118 | _id: x.id, 119 | _rev: x.value.rev 120 | })); 121 | const newDocs = docs.docs; 122 | const merge = existingRevs.concat(newDocs).reduce((acc, x) => { 123 | acc[x._id] = Object.assign(acc[x._id] || {}, x); 124 | return acc; 125 | }, {}); 126 | const merged = Object.keys(merge).map(x => merge[x]); 127 | 128 | database.bulk({ docs: merged }, (error, result) => { 129 | if (error) return reject(error); 130 | resolve(result); 131 | }); 132 | }); 133 | }); 134 | } 135 | 136 | function writeDocs(args, docs) { 137 | const database = getCouchDbDatabaseApi(args.targetDbUrlWithCredentials); 138 | 139 | return new Promise((resolve, reject) => { 140 | database.bulk(docs, (error, result) => { 141 | if (error) return reject(error); 142 | resolve(result); 143 | }); 144 | }); 145 | } 146 | -------------------------------------------------------------------------------- /example/README.md: -------------------------------------------------------------------------------- 1 | # Example import 2 | 3 | * `movies.xlsx` imports 2 sheets (Film, Genre) into 1 CouchDB/PouchDB database 4 | * Alternative `movies-with-ids.xlsx` imports 2 sheets (Film, Genre) into 1 CouchDB/PouchDB database 5 | * Creates relations film.genresIds to genre.\_id between Film- and Genre-Documents (;; as separator) 6 | * Creates an additional $doc_type field (Film, Genre) in every document 7 | -------------------------------------------------------------------------------- /example/movies.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MikeBild/excel-couchdb-import/193fa0b724f85067defc183893dd3cc647bd842a/example/movies.xlsx -------------------------------------------------------------------------------- /lib/parse.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const basename = require('path').basename; 3 | const XLSX = require('xlsx'); 4 | 5 | module.exports = state => { 6 | const file = XLSX.readFile(state.path, { cellDates: true }); 7 | const sheetNames = file.SheetNames; 8 | 9 | const doc = {}; 10 | doc.fileName = basename(state.path); 11 | doc.createdAt = file.Props.CreatedDate.toJSON(); 12 | doc.updatedAt = file.Props.ModifiedDate.toJSON(); 13 | doc.importedAt = new Date().toJSON(); 14 | doc.size = fs.statSync(state.path).size; 15 | 16 | doc.sheets = sheetNames.map(sheetName => { 17 | const sheet = file.Sheets[sheetName]; 18 | const data = XLSX.utils.sheet_to_json(sheet, { 19 | raw: true, 20 | cellText: false 21 | }); // jshint ignore:line 22 | const headers = data.length ? Object.keys(data) : []; 23 | return { 24 | name: sheetName, 25 | headers: headers, 26 | rows: data.map(x => { 27 | Object.keys(x) 28 | .map(y => [y, !x[y].split ? x : x[y].split(';;').filter(x => !!x)]) 29 | .forEach(values => { 30 | if (values[1].length > 1) x[values[0]] = values[1]; 31 | }); 32 | return Object.assign({}, x, { $doc_type: sheetName }); 33 | }) 34 | }; 35 | }); 36 | 37 | return Promise.resolve(doc); 38 | }; 39 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "excel-couchdb-import", 3 | "version": "3.1.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "adler-32": { 8 | "version": "1.0.0", 9 | "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.0.0.tgz", 10 | "integrity": "sha1-KHKKcXVvYpZm3RZTzYB5Op3xhlE=", 11 | "requires": { 12 | "concat-stream": "1.6.2", 13 | "exit-on-epipe": "1.0.1", 14 | "printj": "1.1.2" 15 | }, 16 | "dependencies": { 17 | "exit-on-epipe": { 18 | "version": "1.0.1", 19 | "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", 20 | "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" 21 | } 22 | } 23 | }, 24 | "ajv": { 25 | "version": "5.5.2", 26 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", 27 | "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", 28 | "requires": { 29 | "co": "4.6.0", 30 | "fast-deep-equal": "1.1.0", 31 | "fast-json-stable-stringify": "2.0.0", 32 | "json-schema-traverse": "0.3.1" 33 | } 34 | }, 35 | "ansi-styles": { 36 | "version": "1.0.0", 37 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", 38 | "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=" 39 | }, 40 | "asn1": { 41 | "version": "0.2.3", 42 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", 43 | "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" 44 | }, 45 | "assert-plus": { 46 | "version": "1.0.0", 47 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 48 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 49 | }, 50 | "assertion-error": { 51 | "version": "1.0.0", 52 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.0.tgz", 53 | "integrity": "sha1-x/hUOP3UZrx8oWq5DIFRN5el0js=", 54 | "dev": true 55 | }, 56 | "asynckit": { 57 | "version": "0.4.0", 58 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 59 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 60 | }, 61 | "aws-sign2": { 62 | "version": "0.7.0", 63 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 64 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 65 | }, 66 | "aws4": { 67 | "version": "1.7.0", 68 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", 69 | "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" 70 | }, 71 | "balanced-match": { 72 | "version": "1.0.0", 73 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 74 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 75 | "dev": true 76 | }, 77 | "bcrypt-pbkdf": { 78 | "version": "1.0.1", 79 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", 80 | "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", 81 | "optional": true, 82 | "requires": { 83 | "tweetnacl": "0.14.5" 84 | } 85 | }, 86 | "brace-expansion": { 87 | "version": "1.1.11", 88 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 89 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 90 | "dev": true, 91 | "requires": { 92 | "balanced-match": "1.0.0", 93 | "concat-map": "0.0.1" 94 | } 95 | }, 96 | "browser-request": { 97 | "version": "0.3.3", 98 | "resolved": "https://registry.npmjs.org/browser-request/-/browser-request-0.3.3.tgz", 99 | "integrity": "sha1-ns5bWsqJopkyJC4Yv5M975h2zBc=" 100 | }, 101 | "buffer-from": { 102 | "version": "1.0.0", 103 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", 104 | "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==" 105 | }, 106 | "caseless": { 107 | "version": "0.12.0", 108 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 109 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 110 | }, 111 | "cfb": { 112 | "version": "0.11.1", 113 | "resolved": "https://registry.npmjs.org/cfb/-/cfb-0.11.1.tgz", 114 | "integrity": "sha1-qW248nKmw/uZ27sj70EiP0i+Hqc=", 115 | "requires": { 116 | "commander": "2.15.1" 117 | }, 118 | "dependencies": { 119 | "commander": { 120 | "version": "2.15.1", 121 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", 122 | "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" 123 | } 124 | } 125 | }, 126 | "chai": { 127 | "version": "1.10.0", 128 | "resolved": "https://registry.npmjs.org/chai/-/chai-1.10.0.tgz", 129 | "integrity": "sha1-5AMcyHZURhp1lD5aNatG6vOcHrk=", 130 | "dev": true, 131 | "requires": { 132 | "assertion-error": "1.0.0", 133 | "deep-eql": "0.1.3" 134 | } 135 | }, 136 | "chalk": { 137 | "version": "0.4.0", 138 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", 139 | "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", 140 | "requires": { 141 | "ansi-styles": "1.0.0", 142 | "has-color": "0.1.7", 143 | "strip-ansi": "0.1.1" 144 | } 145 | }, 146 | "cli": { 147 | "version": "1.0.1", 148 | "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", 149 | "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", 150 | "dev": true, 151 | "requires": { 152 | "exit": "0.1.2", 153 | "glob": "7.1.2" 154 | } 155 | }, 156 | "cloudant-follow": { 157 | "version": "0.17.0", 158 | "resolved": "https://registry.npmjs.org/cloudant-follow/-/cloudant-follow-0.17.0.tgz", 159 | "integrity": "sha512-JQ1xvKAHh8rsnSVBjATLCjz/vQw1sWBGadxr2H69yFMwD7hShUGDwwEefdypaxroUJ/w6t1cSwilp/hRUxEW8w==", 160 | "requires": { 161 | "browser-request": "0.3.3", 162 | "debug": "3.1.0", 163 | "request": "2.87.0" 164 | }, 165 | "dependencies": { 166 | "debug": { 167 | "version": "3.1.0", 168 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 169 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 170 | "requires": { 171 | "ms": "2.0.0" 172 | } 173 | } 174 | } 175 | }, 176 | "co": { 177 | "version": "4.6.0", 178 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 179 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" 180 | }, 181 | "codepage": { 182 | "version": "1.8.1", 183 | "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.8.1.tgz", 184 | "integrity": "sha1-8aAJ1SYdwnVGKLrLb7vw5uKr/6o=", 185 | "requires": { 186 | "commander": "2.15.1", 187 | "concat-stream": "1.6.2", 188 | "exit-on-epipe": "1.0.1", 189 | "voc": "1.1.0" 190 | }, 191 | "dependencies": { 192 | "commander": { 193 | "version": "2.15.1", 194 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", 195 | "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" 196 | }, 197 | "exit-on-epipe": { 198 | "version": "1.0.1", 199 | "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", 200 | "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" 201 | } 202 | } 203 | }, 204 | "colors": { 205 | "version": "0.6.2", 206 | "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", 207 | "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=" 208 | }, 209 | "combined-stream": { 210 | "version": "1.0.6", 211 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", 212 | "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", 213 | "requires": { 214 | "delayed-stream": "1.0.0" 215 | } 216 | }, 217 | "commander": { 218 | "version": "2.9.0", 219 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", 220 | "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", 221 | "requires": { 222 | "graceful-readlink": "1.0.1" 223 | } 224 | }, 225 | "concat-map": { 226 | "version": "0.0.1", 227 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 228 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 229 | "dev": true 230 | }, 231 | "concat-stream": { 232 | "version": "1.6.2", 233 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 234 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 235 | "requires": { 236 | "buffer-from": "1.0.0", 237 | "inherits": "2.0.3", 238 | "readable-stream": "2.3.6", 239 | "typedarray": "0.0.6" 240 | } 241 | }, 242 | "console-browserify": { 243 | "version": "1.1.0", 244 | "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", 245 | "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", 246 | "dev": true, 247 | "requires": { 248 | "date-now": "0.1.4" 249 | } 250 | }, 251 | "core-util-is": { 252 | "version": "1.0.2", 253 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 254 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 255 | }, 256 | "crc-32": { 257 | "version": "1.0.2", 258 | "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.0.2.tgz", 259 | "integrity": "sha1-CVB5hO6bzOO9G4hh8N6KsQroGH0=", 260 | "requires": { 261 | "exit-on-epipe": "1.0.1", 262 | "printj": "1.1.2" 263 | }, 264 | "dependencies": { 265 | "exit-on-epipe": { 266 | "version": "1.0.1", 267 | "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", 268 | "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" 269 | } 270 | } 271 | }, 272 | "dashdash": { 273 | "version": "1.14.1", 274 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 275 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 276 | "requires": { 277 | "assert-plus": "1.0.0" 278 | } 279 | }, 280 | "date-now": { 281 | "version": "0.1.4", 282 | "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", 283 | "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", 284 | "dev": true 285 | }, 286 | "debug": { 287 | "version": "2.6.9", 288 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 289 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 290 | "requires": { 291 | "ms": "2.0.0" 292 | } 293 | }, 294 | "deep-eql": { 295 | "version": "0.1.3", 296 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", 297 | "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", 298 | "dev": true, 299 | "requires": { 300 | "type-detect": "0.1.1" 301 | } 302 | }, 303 | "delayed-stream": { 304 | "version": "1.0.0", 305 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 306 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 307 | }, 308 | "diff": { 309 | "version": "1.4.0", 310 | "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", 311 | "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", 312 | "dev": true 313 | }, 314 | "dom-serializer": { 315 | "version": "0.1.0", 316 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", 317 | "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", 318 | "dev": true, 319 | "requires": { 320 | "domelementtype": "1.1.3", 321 | "entities": "1.1.1" 322 | }, 323 | "dependencies": { 324 | "domelementtype": { 325 | "version": "1.1.3", 326 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", 327 | "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", 328 | "dev": true 329 | }, 330 | "entities": { 331 | "version": "1.1.1", 332 | "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", 333 | "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", 334 | "dev": true 335 | } 336 | } 337 | }, 338 | "domelementtype": { 339 | "version": "1.3.0", 340 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", 341 | "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", 342 | "dev": true 343 | }, 344 | "domhandler": { 345 | "version": "2.3.0", 346 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", 347 | "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", 348 | "dev": true, 349 | "requires": { 350 | "domelementtype": "1.3.0" 351 | } 352 | }, 353 | "domutils": { 354 | "version": "1.5.1", 355 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", 356 | "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", 357 | "dev": true, 358 | "requires": { 359 | "dom-serializer": "0.1.0", 360 | "domelementtype": "1.3.0" 361 | } 362 | }, 363 | "ecc-jsbn": { 364 | "version": "0.1.1", 365 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", 366 | "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", 367 | "optional": true, 368 | "requires": { 369 | "jsbn": "0.1.1" 370 | } 371 | }, 372 | "entities": { 373 | "version": "1.0.0", 374 | "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", 375 | "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", 376 | "dev": true 377 | }, 378 | "errs": { 379 | "version": "0.3.2", 380 | "resolved": "https://registry.npmjs.org/errs/-/errs-0.3.2.tgz", 381 | "integrity": "sha1-eYCZstvTfKK8dJ5TinwTB9C1BJk=" 382 | }, 383 | "escape-string-regexp": { 384 | "version": "1.0.2", 385 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz", 386 | "integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=", 387 | "dev": true 388 | }, 389 | "exit": { 390 | "version": "0.1.2", 391 | "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", 392 | "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", 393 | "dev": true 394 | }, 395 | "exit-on-epipe": { 396 | "version": "1.0.1", 397 | "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", 398 | "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" 399 | }, 400 | "expect.js": { 401 | "version": "0.3.1", 402 | "resolved": "https://registry.npmjs.org/expect.js/-/expect.js-0.3.1.tgz", 403 | "integrity": "sha1-sKWaDS7/VDdUTr8M6qYBWEHQm1s=", 404 | "dev": true 405 | }, 406 | "extend": { 407 | "version": "3.0.1", 408 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", 409 | "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" 410 | }, 411 | "extsprintf": { 412 | "version": "1.3.0", 413 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 414 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 415 | }, 416 | "fast-deep-equal": { 417 | "version": "1.1.0", 418 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", 419 | "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" 420 | }, 421 | "fast-json-stable-stringify": { 422 | "version": "2.0.0", 423 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 424 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" 425 | }, 426 | "forever-agent": { 427 | "version": "0.6.1", 428 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 429 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 430 | }, 431 | "form-data": { 432 | "version": "2.3.2", 433 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", 434 | "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", 435 | "requires": { 436 | "asynckit": "0.4.0", 437 | "combined-stream": "1.0.6", 438 | "mime-types": "2.1.18" 439 | } 440 | }, 441 | "frac": { 442 | "version": "1.0.6", 443 | "resolved": "https://registry.npmjs.org/frac/-/frac-1.0.6.tgz", 444 | "integrity": "sha1-mg38I5VoUqizIGI7688b6eoEgik=", 445 | "requires": { 446 | "voc": "1.1.0" 447 | } 448 | }, 449 | "fs.realpath": { 450 | "version": "1.0.0", 451 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 452 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 453 | "dev": true 454 | }, 455 | "getpass": { 456 | "version": "0.1.7", 457 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 458 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 459 | "requires": { 460 | "assert-plus": "1.0.0" 461 | } 462 | }, 463 | "glob": { 464 | "version": "7.1.2", 465 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 466 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 467 | "dev": true, 468 | "requires": { 469 | "fs.realpath": "1.0.0", 470 | "inflight": "1.0.6", 471 | "inherits": "2.0.3", 472 | "minimatch": "3.0.4", 473 | "once": "1.4.0", 474 | "path-is-absolute": "1.0.1" 475 | } 476 | }, 477 | "graceful-readlink": { 478 | "version": "1.0.1", 479 | "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", 480 | "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" 481 | }, 482 | "growl": { 483 | "version": "1.9.2", 484 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", 485 | "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", 486 | "dev": true 487 | }, 488 | "har-schema": { 489 | "version": "2.0.0", 490 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 491 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 492 | }, 493 | "har-validator": { 494 | "version": "5.0.3", 495 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", 496 | "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", 497 | "requires": { 498 | "ajv": "5.5.2", 499 | "har-schema": "2.0.0" 500 | } 501 | }, 502 | "has-color": { 503 | "version": "0.1.7", 504 | "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", 505 | "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=" 506 | }, 507 | "htmlparser2": { 508 | "version": "3.8.3", 509 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", 510 | "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", 511 | "dev": true, 512 | "requires": { 513 | "domelementtype": "1.3.0", 514 | "domhandler": "2.3.0", 515 | "domutils": "1.5.1", 516 | "entities": "1.0.0", 517 | "readable-stream": "1.1.14" 518 | }, 519 | "dependencies": { 520 | "isarray": { 521 | "version": "0.0.1", 522 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 523 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", 524 | "dev": true 525 | }, 526 | "readable-stream": { 527 | "version": "1.1.14", 528 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", 529 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", 530 | "dev": true, 531 | "requires": { 532 | "core-util-is": "1.0.2", 533 | "inherits": "2.0.3", 534 | "isarray": "0.0.1", 535 | "string_decoder": "0.10.31" 536 | } 537 | }, 538 | "string_decoder": { 539 | "version": "0.10.31", 540 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 541 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", 542 | "dev": true 543 | } 544 | } 545 | }, 546 | "http-signature": { 547 | "version": "1.2.0", 548 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 549 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 550 | "requires": { 551 | "assert-plus": "1.0.0", 552 | "jsprim": "1.4.1", 553 | "sshpk": "1.14.1" 554 | } 555 | }, 556 | "inflight": { 557 | "version": "1.0.6", 558 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 559 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 560 | "dev": true, 561 | "requires": { 562 | "once": "1.4.0", 563 | "wrappy": "1.0.2" 564 | } 565 | }, 566 | "inherits": { 567 | "version": "2.0.3", 568 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 569 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 570 | }, 571 | "is-typedarray": { 572 | "version": "1.0.0", 573 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 574 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 575 | }, 576 | "isarray": { 577 | "version": "1.0.0", 578 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 579 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 580 | }, 581 | "isstream": { 582 | "version": "0.1.2", 583 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 584 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 585 | }, 586 | "jade": { 587 | "version": "0.26.3", 588 | "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", 589 | "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=", 590 | "dev": true, 591 | "requires": { 592 | "commander": "0.6.1", 593 | "mkdirp": "0.3.0" 594 | }, 595 | "dependencies": { 596 | "commander": { 597 | "version": "0.6.1", 598 | "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", 599 | "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=", 600 | "dev": true 601 | }, 602 | "mkdirp": { 603 | "version": "0.3.0", 604 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", 605 | "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", 606 | "dev": true 607 | } 608 | } 609 | }, 610 | "jsbn": { 611 | "version": "0.1.1", 612 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 613 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 614 | "optional": true 615 | }, 616 | "jshint": { 617 | "version": "2.9.5", 618 | "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.5.tgz", 619 | "integrity": "sha1-HnJSkVzmgbQIJ+4UJIxG006apiw=", 620 | "dev": true, 621 | "requires": { 622 | "cli": "1.0.1", 623 | "console-browserify": "1.1.0", 624 | "exit": "0.1.2", 625 | "htmlparser2": "3.8.3", 626 | "lodash": "3.7.0", 627 | "minimatch": "3.0.4", 628 | "shelljs": "0.3.0", 629 | "strip-json-comments": "1.0.4" 630 | } 631 | }, 632 | "json-schema": { 633 | "version": "0.2.3", 634 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 635 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 636 | }, 637 | "json-schema-traverse": { 638 | "version": "0.3.1", 639 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", 640 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" 641 | }, 642 | "json-stringify-safe": { 643 | "version": "5.0.1", 644 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 645 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 646 | }, 647 | "jsprim": { 648 | "version": "1.4.1", 649 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 650 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 651 | "requires": { 652 | "assert-plus": "1.0.0", 653 | "extsprintf": "1.3.0", 654 | "json-schema": "0.2.3", 655 | "verror": "1.10.0" 656 | } 657 | }, 658 | "lodash": { 659 | "version": "3.7.0", 660 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz", 661 | "integrity": "sha1-Nni9irmVBXwHreg27S7wh9qBHUU=", 662 | "dev": true 663 | }, 664 | "lodash.isempty": { 665 | "version": "4.4.0", 666 | "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", 667 | "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=" 668 | }, 669 | "lru-cache": { 670 | "version": "2.7.3", 671 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", 672 | "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", 673 | "dev": true 674 | }, 675 | "mime-db": { 676 | "version": "1.33.0", 677 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", 678 | "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" 679 | }, 680 | "mime-types": { 681 | "version": "2.1.18", 682 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", 683 | "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", 684 | "requires": { 685 | "mime-db": "1.33.0" 686 | } 687 | }, 688 | "minimatch": { 689 | "version": "3.0.4", 690 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 691 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 692 | "dev": true, 693 | "requires": { 694 | "brace-expansion": "1.1.11" 695 | } 696 | }, 697 | "minimist": { 698 | "version": "1.2.0", 699 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 700 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" 701 | }, 702 | "mkdirp": { 703 | "version": "0.5.1", 704 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 705 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 706 | "dev": true, 707 | "requires": { 708 | "minimist": "0.0.8" 709 | }, 710 | "dependencies": { 711 | "minimist": { 712 | "version": "0.0.8", 713 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 714 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 715 | "dev": true 716 | } 717 | } 718 | }, 719 | "mocha": { 720 | "version": "2.5.3", 721 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.5.3.tgz", 722 | "integrity": "sha1-FhvlvetJZ3HrmzV0UFC2IrWu/Fg=", 723 | "dev": true, 724 | "requires": { 725 | "commander": "2.3.0", 726 | "debug": "2.2.0", 727 | "diff": "1.4.0", 728 | "escape-string-regexp": "1.0.2", 729 | "glob": "3.2.11", 730 | "growl": "1.9.2", 731 | "jade": "0.26.3", 732 | "mkdirp": "0.5.1", 733 | "supports-color": "1.2.0", 734 | "to-iso-string": "0.0.2" 735 | }, 736 | "dependencies": { 737 | "commander": { 738 | "version": "2.3.0", 739 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz", 740 | "integrity": "sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=", 741 | "dev": true 742 | }, 743 | "debug": { 744 | "version": "2.2.0", 745 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", 746 | "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", 747 | "dev": true, 748 | "requires": { 749 | "ms": "0.7.1" 750 | } 751 | }, 752 | "glob": { 753 | "version": "3.2.11", 754 | "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", 755 | "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", 756 | "dev": true, 757 | "requires": { 758 | "inherits": "2.0.3", 759 | "minimatch": "0.3.0" 760 | } 761 | }, 762 | "minimatch": { 763 | "version": "0.3.0", 764 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", 765 | "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", 766 | "dev": true, 767 | "requires": { 768 | "lru-cache": "2.7.3", 769 | "sigmund": "1.0.1" 770 | } 771 | }, 772 | "ms": { 773 | "version": "0.7.1", 774 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", 775 | "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", 776 | "dev": true 777 | } 778 | } 779 | }, 780 | "ms": { 781 | "version": "2.0.0", 782 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 783 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 784 | }, 785 | "nano": { 786 | "version": "6.4.4", 787 | "resolved": "https://registry.npmjs.org/nano/-/nano-6.4.4.tgz", 788 | "integrity": "sha512-7sldMrZI1ZH8QE29PnzohxLfR67WNVzMKLa7EMl3x9Hr+0G+YpOUCq50qZ9G66APrjcb0Of2BTOZLNBCutZGag==", 789 | "requires": { 790 | "cloudant-follow": "0.17.0", 791 | "debug": "2.6.9", 792 | "errs": "0.3.2", 793 | "lodash.isempty": "4.4.0", 794 | "request": "2.87.0" 795 | } 796 | }, 797 | "oauth-sign": { 798 | "version": "0.8.2", 799 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", 800 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" 801 | }, 802 | "once": { 803 | "version": "1.4.0", 804 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 805 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 806 | "dev": true, 807 | "requires": { 808 | "wrappy": "1.0.2" 809 | } 810 | }, 811 | "path-is-absolute": { 812 | "version": "1.0.1", 813 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 814 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 815 | "dev": true 816 | }, 817 | "performance-now": { 818 | "version": "2.1.0", 819 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 820 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 821 | }, 822 | "printj": { 823 | "version": "1.1.2", 824 | "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", 825 | "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==" 826 | }, 827 | "process-nextick-args": { 828 | "version": "2.0.0", 829 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", 830 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" 831 | }, 832 | "punycode": { 833 | "version": "1.4.1", 834 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 835 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 836 | }, 837 | "qs": { 838 | "version": "6.5.2", 839 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 840 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 841 | }, 842 | "readable-stream": { 843 | "version": "2.3.6", 844 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 845 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 846 | "requires": { 847 | "core-util-is": "1.0.2", 848 | "inherits": "2.0.3", 849 | "isarray": "1.0.0", 850 | "process-nextick-args": "2.0.0", 851 | "safe-buffer": "5.1.2", 852 | "string_decoder": "1.1.1", 853 | "util-deprecate": "1.0.2" 854 | } 855 | }, 856 | "request": { 857 | "version": "2.87.0", 858 | "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", 859 | "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", 860 | "requires": { 861 | "aws-sign2": "0.7.0", 862 | "aws4": "1.7.0", 863 | "caseless": "0.12.0", 864 | "combined-stream": "1.0.6", 865 | "extend": "3.0.1", 866 | "forever-agent": "0.6.1", 867 | "form-data": "2.3.2", 868 | "har-validator": "5.0.3", 869 | "http-signature": "1.2.0", 870 | "is-typedarray": "1.0.0", 871 | "isstream": "0.1.2", 872 | "json-stringify-safe": "5.0.1", 873 | "mime-types": "2.1.18", 874 | "oauth-sign": "0.8.2", 875 | "performance-now": "2.1.0", 876 | "qs": "6.5.2", 877 | "safe-buffer": "5.1.2", 878 | "tough-cookie": "2.3.4", 879 | "tunnel-agent": "0.6.0", 880 | "uuid": "3.2.1" 881 | } 882 | }, 883 | "safe-buffer": { 884 | "version": "5.1.2", 885 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 886 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 887 | }, 888 | "shelljs": { 889 | "version": "0.3.0", 890 | "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", 891 | "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", 892 | "dev": true 893 | }, 894 | "sigmund": { 895 | "version": "1.0.1", 896 | "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", 897 | "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", 898 | "dev": true 899 | }, 900 | "ssf": { 901 | "version": "0.9.4", 902 | "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.9.4.tgz", 903 | "integrity": "sha1-jlepjBnbvx7dU/D4yef9UksPbJw=", 904 | "requires": { 905 | "colors": "0.6.2", 906 | "frac": "1.0.6", 907 | "voc": "1.1.0" 908 | } 909 | }, 910 | "sshpk": { 911 | "version": "1.14.1", 912 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", 913 | "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", 914 | "requires": { 915 | "asn1": "0.2.3", 916 | "assert-plus": "1.0.0", 917 | "bcrypt-pbkdf": "1.0.1", 918 | "dashdash": "1.14.1", 919 | "ecc-jsbn": "0.1.1", 920 | "getpass": "0.1.7", 921 | "jsbn": "0.1.1", 922 | "tweetnacl": "0.14.5" 923 | } 924 | }, 925 | "string_decoder": { 926 | "version": "1.1.1", 927 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 928 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 929 | "requires": { 930 | "safe-buffer": "5.1.2" 931 | } 932 | }, 933 | "strip-ansi": { 934 | "version": "0.1.1", 935 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", 936 | "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=" 937 | }, 938 | "strip-json-comments": { 939 | "version": "1.0.4", 940 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", 941 | "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", 942 | "dev": true 943 | }, 944 | "supports-color": { 945 | "version": "1.2.0", 946 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz", 947 | "integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=", 948 | "dev": true 949 | }, 950 | "to-iso-string": { 951 | "version": "0.0.2", 952 | "resolved": "https://registry.npmjs.org/to-iso-string/-/to-iso-string-0.0.2.tgz", 953 | "integrity": "sha1-TcGeZk38y+Jb2NtQiwDG2hWCVdE=", 954 | "dev": true 955 | }, 956 | "tough-cookie": { 957 | "version": "2.3.4", 958 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", 959 | "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", 960 | "requires": { 961 | "punycode": "1.4.1" 962 | } 963 | }, 964 | "tunnel-agent": { 965 | "version": "0.6.0", 966 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 967 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 968 | "requires": { 969 | "safe-buffer": "5.1.2" 970 | } 971 | }, 972 | "tweetnacl": { 973 | "version": "0.14.5", 974 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 975 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 976 | "optional": true 977 | }, 978 | "type-detect": { 979 | "version": "0.1.1", 980 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", 981 | "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", 982 | "dev": true 983 | }, 984 | "typedarray": { 985 | "version": "0.0.6", 986 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 987 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" 988 | }, 989 | "util-deprecate": { 990 | "version": "1.0.2", 991 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 992 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 993 | }, 994 | "uuid": { 995 | "version": "3.2.1", 996 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", 997 | "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" 998 | }, 999 | "verbalize": { 1000 | "version": "0.1.2", 1001 | "resolved": "https://registry.npmjs.org/verbalize/-/verbalize-0.1.2.tgz", 1002 | "integrity": "sha1-Fl/aRkAzFUj46ZCx1+FDletyAgc=", 1003 | "requires": { 1004 | "chalk": "0.4.0" 1005 | } 1006 | }, 1007 | "verror": { 1008 | "version": "1.10.0", 1009 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 1010 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 1011 | "requires": { 1012 | "assert-plus": "1.0.0", 1013 | "core-util-is": "1.0.2", 1014 | "extsprintf": "1.3.0" 1015 | } 1016 | }, 1017 | "voc": { 1018 | "version": "1.1.0", 1019 | "resolved": "https://registry.npmjs.org/voc/-/voc-1.1.0.tgz", 1020 | "integrity": "sha512-fthgd8OJLqq8vPcLjElTk6Rcl2e3v5ekcXauImaqEnQqd5yUWKg1+ZOBgS2KTWuVKcuvZMQq4TDptiT1uYddUA==" 1021 | }, 1022 | "wrappy": { 1023 | "version": "1.0.2", 1024 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1025 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1026 | "dev": true 1027 | }, 1028 | "xlsx": { 1029 | "version": "0.9.13", 1030 | "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.9.13.tgz", 1031 | "integrity": "sha1-WGHRHhCh+ZtvK0keLRGad3fQZuc=", 1032 | "requires": { 1033 | "adler-32": "1.0.0", 1034 | "cfb": "0.11.1", 1035 | "codepage": "1.8.1", 1036 | "commander": "2.9.0", 1037 | "crc-32": "1.0.2", 1038 | "exit-on-epipe": "1.0.1", 1039 | "ssf": "0.9.4" 1040 | } 1041 | } 1042 | } 1043 | } 1044 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "excel-couchdb-import", 3 | "version": "4.0.0", 4 | "description": "Import Excel sheets to CouchDB", 5 | "bin": "bin/excel-couchdb-import", 6 | "scripts": { 7 | "jshint": "jshint -c .jshintrc lib/ bin/ test/", 8 | "test": "npm run jshint && npm run test-node", 9 | "test-node": "mocha" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "git@github.com:MikeBild/excel-couchdb-import.git" 14 | }, 15 | "keywords": ["couchdb", "excel", "import"], 16 | "author": "Mike Bild", 17 | "license": "MIT", 18 | "bugs": { 19 | "url": "https://github.com/MikeBild/excel-couchdb-import/issues" 20 | }, 21 | "homepage": "https://github.com/MikeBild/excel-couchdb-import", 22 | "devDependencies": { 23 | "chai": "^4.1.2", 24 | "expect.js": "^0.3.1", 25 | "jshint": "^2.5.11", 26 | "mocha": "^5.2.0" 27 | }, 28 | "dependencies": { 29 | "minimist": "^1.1.0", 30 | "nano": "^6.0.2", 31 | "verbalize": "^0.2.0", 32 | "xlsx": "^0.12.13" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /test/fixtures/parse-input.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MikeBild/excel-couchdb-import/193fa0b724f85067defc183893dd3cc647bd842a/test/fixtures/parse-input.xlsx -------------------------------------------------------------------------------- /test/fixtures/parse-output.json: -------------------------------------------------------------------------------- 1 | { 2 | "fileName": "parse-input.xlsx", 3 | "createdAt": "2014-10-15T09:27:43.000Z", 4 | "updatedAt": "2016-12-19T20:31:04.000Z", 5 | "size": 10663, 6 | "sheets": [ 7 | { 8 | "name": "with_header", 9 | "headers": ["0", "1", "2", "3", "4", "5", "6"], 10 | "rows": [ 11 | { 12 | "text 1": "bla bla, bla 1", 13 | "date 2": "2014-04-30T22:00:00.000Z", 14 | "datetime 3": "2014-04-30T23:10:00.000Z", 15 | "integer 4": -5, 16 | "float 5": -5, 17 | "options 6": "option 1", 18 | "array 8": ["a", "b", "c"], 19 | "$doc_type": "with_header" 20 | }, 21 | { 22 | "text 1": "bla bla ,bla 2", 23 | "date 2": "2014-05-01T22:00:00.000Z", 24 | "datetime 3": "2014-05-02T00:49:59.999Z", 25 | "integer 4": 6, 26 | "float 5": 6, 27 | "options 6": "option 2", 28 | "array 8": "a;;", 29 | "$doc_type": "with_header" 30 | }, 31 | { 32 | "text 1": "bla bla, bla 3", 33 | "date 2": "2014-05-02T22:00:00.000Z", 34 | "datetime 3": "2014-05-03T01:49:59.999Z", 35 | "integer 4": "A", 36 | "float 5": "A", 37 | "options 6": "not option", 38 | "array 8": ["a", "b"], 39 | "$doc_type": "with_header" 40 | }, 41 | { 42 | "text 1": "bla bla, bla 4", 43 | "date 2": "2014-05-03T22:00:00.000Z", 44 | "datetime 3": "2014-05-04T02:50:00.000Z", 45 | "integer 4": 23.65, 46 | "float 5": 23.65, 47 | "options 6": "AAA", 48 | "array 8": ";;a", 49 | "$doc_type": "with_header" 50 | }, 51 | { 52 | "text 1": "bla, bla bla 5", 53 | "date 2": "2014-05-04T22:00:00.000Z", 54 | "datetime 3": "2014-05-05T03:49:59.999Z", 55 | "integer 4": 0, 56 | "float 5": 0, 57 | "options 6": "aaa", 58 | "array 8": ";;;;", 59 | "$doc_type": "with_header" 60 | }, 61 | { 62 | "text 1": "bla bla bla, 6", 63 | "date 2": "2014-05-05T22:00:00.000Z", 64 | "datetime 3": "2014-05-06T04:49:59.999Z", 65 | "options 6": "2014-05-02T22:00:00.000Z", 66 | "$doc_type": "with_header" 67 | }, 68 | { 69 | "text 1": "bla bla, bla 7", 70 | "date 2": "2014-05-06T22:00:00.000Z", 71 | "datetime 3": "2014-05-07T05:50:00.000Z", 72 | "integer 4": "B", 73 | "float 5": "B", 74 | "options 6": "other", 75 | "$doc_type": "with_header" 76 | } 77 | ] 78 | }, 79 | { 80 | "name": "without_header", 81 | "headers": [], 82 | "rows": [] 83 | }, 84 | { 85 | "name": "empty", 86 | "headers": [], 87 | "rows": [] 88 | } 89 | ] 90 | } 91 | -------------------------------------------------------------------------------- /test/fixtures/types-input.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MikeBild/excel-couchdb-import/193fa0b724f85067defc183893dd3cc647bd842a/test/fixtures/types-input.xlsx -------------------------------------------------------------------------------- /test/fixtures/types-output.json: -------------------------------------------------------------------------------- 1 | { 2 | "fileName": "types-input.xlsx", 3 | "createdAt": "2017-01-05T12:04:24.000Z", 4 | "updatedAt": "2017-04-23T15:40:07.000Z", 5 | "size": 9674, 6 | "sheets": [ 7 | { 8 | "name": "Datum", 9 | "headers": ["0", "1"], 10 | "rows": [ 11 | { 12 | "Datum": "1963-04-24T13:21:00.000Z", 13 | "Numbers": 47000, 14 | "Text": "Text aus\r\nmehreren Zeilen", 15 | "Bool": false, 16 | "$doc_type": "Datum" 17 | }, 18 | { 19 | "Datum": "1967-06-06T10:31:00.000Z", 20 | "Numbers": 24629.52152777778, 21 | "Text": "Text", 22 | "Bool": true, 23 | "$doc_type": "Datum" 24 | } 25 | ] 26 | } 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /test/test.parse.js: -------------------------------------------------------------------------------- 1 | /* global describe, it */ 2 | 'use strict'; 3 | 4 | const expect = require('chai').expect; 5 | const parse = require('../lib/parse'); 6 | 7 | describe('parse', () => { 8 | it('parses *.xlsx to JSON', () => { 9 | const fixturesPath = __dirname + '/fixtures'; 10 | const output = require(fixturesPath + '/parse-output.json'); 11 | 12 | return parse({ path: fixturesPath + '/parse-input.xlsx' }).then(docs => { 13 | delete docs.importedAt; 14 | delete output.importedAt; 15 | expect(JSON.stringify(docs, null, 2)).to.equal( 16 | JSON.stringify(output, null, 2) 17 | ); 18 | }); 19 | }); 20 | 21 | it('detects and exports booleans and datetimes', () => { 22 | const fixturesPath = __dirname + '/fixtures'; 23 | const output = require(fixturesPath + '/types-output.json'); 24 | 25 | return parse({ path: fixturesPath + '/types-input.xlsx' }).then(docs => { 26 | delete docs.importedAt; 27 | delete output.importedAt; 28 | expect(JSON.stringify(docs, null, 2)).to.equal( 29 | JSON.stringify(output, null, 2) 30 | ); 31 | }); 32 | }); 33 | }); 34 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | adler-32@~1.2.0: 6 | version "1.2.0" 7 | resolved "https://registry.yarnpkg.com/adler-32/-/adler-32-1.2.0.tgz#6a3e6bf0a63900ba15652808cb15c6813d1a5f25" 8 | dependencies: 9 | exit-on-epipe "~1.0.1" 10 | printj "~1.1.0" 11 | 12 | ajv@^5.1.0: 13 | version "5.5.2" 14 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" 15 | dependencies: 16 | co "^4.6.0" 17 | fast-deep-equal "^1.0.0" 18 | fast-json-stable-stringify "^2.0.0" 19 | json-schema-traverse "^0.3.0" 20 | 21 | ansi-bold@^0.1.1: 22 | version "0.1.1" 23 | resolved "https://registry.yarnpkg.com/ansi-bold/-/ansi-bold-0.1.1.tgz#3e63950af5acc2ae2e670e6f67deb115d1a5f505" 24 | dependencies: 25 | ansi-wrap "0.1.0" 26 | 27 | ansi-underline@^0.1.1: 28 | version "0.1.1" 29 | resolved "https://registry.yarnpkg.com/ansi-underline/-/ansi-underline-0.1.1.tgz#dfc920f4c97b5977ea162df8ffb988308aaa71a4" 30 | dependencies: 31 | ansi-wrap "0.1.0" 32 | 33 | ansi-wrap@0.1.0: 34 | version "0.1.0" 35 | resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" 36 | 37 | arr-flatten@^1.0.1: 38 | version "1.1.0" 39 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" 40 | 41 | arr-union@^3.1.0: 42 | version "3.1.0" 43 | resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" 44 | 45 | asn1@~0.2.3: 46 | version "0.2.3" 47 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" 48 | 49 | assert-plus@1.0.0, assert-plus@^1.0.0: 50 | version "1.0.0" 51 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 52 | 53 | assertion-error@^1.0.1: 54 | version "1.1.0" 55 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" 56 | 57 | asynckit@^0.4.0: 58 | version "0.4.0" 59 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 60 | 61 | aws-sign2@~0.7.0: 62 | version "0.7.0" 63 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 64 | 65 | aws4@^1.6.0: 66 | version "1.7.0" 67 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289" 68 | 69 | balanced-match@^1.0.0: 70 | version "1.0.0" 71 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 72 | 73 | base-is-enabled@^0.1.0: 74 | version "0.1.0" 75 | resolved "https://registry.yarnpkg.com/base-is-enabled/-/base-is-enabled-0.1.0.tgz#efe4326e151811de2dd3477ad0c612a1c5b210a7" 76 | dependencies: 77 | extend-shallow "^2.0.1" 78 | is-enabled "^0.1.0" 79 | lazy-cache "^1.0.3" 80 | 81 | bcrypt-pbkdf@^1.0.0: 82 | version "1.0.1" 83 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" 84 | dependencies: 85 | tweetnacl "^0.14.3" 86 | 87 | brace-expansion@^1.1.7: 88 | version "1.1.11" 89 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 90 | dependencies: 91 | balanced-match "^1.0.0" 92 | concat-map "0.0.1" 93 | 94 | browser-request@~0.3.0: 95 | version "0.3.3" 96 | resolved "https://registry.yarnpkg.com/browser-request/-/browser-request-0.3.3.tgz#9ece5b5aca89a29932242e18bf933def9876cc17" 97 | 98 | browser-stdout@1.3.1: 99 | version "1.3.1" 100 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 101 | 102 | caseless@~0.12.0: 103 | version "0.12.0" 104 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 105 | 106 | cfb@~1.0.7: 107 | version "1.0.7" 108 | resolved "https://registry.yarnpkg.com/cfb/-/cfb-1.0.7.tgz#ccb615eb1bb0a039e7829ab0b2ad4ea564fbaa78" 109 | dependencies: 110 | commander "^2.14.1" 111 | printj "~1.1.2" 112 | 113 | chai@^4.1.2: 114 | version "4.1.2" 115 | resolved "https://registry.yarnpkg.com/chai/-/chai-4.1.2.tgz#0f64584ba642f0f2ace2806279f4f06ca23ad73c" 116 | dependencies: 117 | assertion-error "^1.0.1" 118 | check-error "^1.0.1" 119 | deep-eql "^3.0.0" 120 | get-func-name "^2.0.0" 121 | pathval "^1.0.0" 122 | type-detect "^4.0.0" 123 | 124 | check-error@^1.0.1: 125 | version "1.0.2" 126 | resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" 127 | 128 | cli@~1.0.0: 129 | version "1.0.1" 130 | resolved "https://registry.yarnpkg.com/cli/-/cli-1.0.1.tgz#22817534f24bfa4950c34d532d48ecbc621b8c14" 131 | dependencies: 132 | exit "0.1.2" 133 | glob "^7.1.1" 134 | 135 | cloudant-follow@~0.17.0: 136 | version "0.17.0" 137 | resolved "https://registry.yarnpkg.com/cloudant-follow/-/cloudant-follow-0.17.0.tgz#842513a74e72c440e61dc2b6fd96eedbd9cef38a" 138 | dependencies: 139 | browser-request "~0.3.0" 140 | debug "^3.0.0" 141 | request "^2.83.0" 142 | 143 | co@^4.6.0: 144 | version "4.6.0" 145 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 146 | 147 | codepage@~1.13.0: 148 | version "1.13.0" 149 | resolved "https://registry.yarnpkg.com/codepage/-/codepage-1.13.0.tgz#5a9a6583028e6243828c869f145740d7ed7b62c3" 150 | dependencies: 151 | commander "~2.14.1" 152 | exit-on-epipe "~1.0.1" 153 | 154 | combined-stream@1.0.6, combined-stream@~1.0.5: 155 | version "1.0.6" 156 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" 157 | dependencies: 158 | delayed-stream "~1.0.0" 159 | 160 | commander@2.15.1, commander@^2.14.1, commander@~2.15.1: 161 | version "2.15.1" 162 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" 163 | 164 | commander@~2.14.1: 165 | version "2.14.1" 166 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" 167 | 168 | component-emitter@^1.2.0: 169 | version "1.2.1" 170 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" 171 | 172 | concat-map@0.0.1: 173 | version "0.0.1" 174 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 175 | 176 | console-browserify@1.1.x: 177 | version "1.1.0" 178 | resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" 179 | dependencies: 180 | date-now "^0.1.4" 181 | 182 | core-util-is@1.0.2, core-util-is@~1.0.0: 183 | version "1.0.2" 184 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 185 | 186 | crc-32@~1.2.0: 187 | version "1.2.0" 188 | resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208" 189 | dependencies: 190 | exit-on-epipe "~1.0.1" 191 | printj "~1.1.0" 192 | 193 | dashdash@^1.12.0: 194 | version "1.14.1" 195 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 196 | dependencies: 197 | assert-plus "^1.0.0" 198 | 199 | date-now@^0.1.4: 200 | version "0.1.4" 201 | resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" 202 | 203 | debug@3.1.0, debug@^3.0.0: 204 | version "3.1.0" 205 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" 206 | dependencies: 207 | ms "2.0.0" 208 | 209 | debug@^2.2.0: 210 | version "2.6.9" 211 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 212 | dependencies: 213 | ms "2.0.0" 214 | 215 | deep-eql@^3.0.0: 216 | version "3.0.1" 217 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" 218 | dependencies: 219 | type-detect "^4.0.0" 220 | 221 | define-property@^0.2.5: 222 | version "0.2.5" 223 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" 224 | dependencies: 225 | is-descriptor "^0.1.0" 226 | 227 | delayed-stream@~1.0.0: 228 | version "1.0.0" 229 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 230 | 231 | diff@3.5.0: 232 | version "3.5.0" 233 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" 234 | 235 | dom-serializer@0: 236 | version "0.1.0" 237 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" 238 | dependencies: 239 | domelementtype "~1.1.1" 240 | entities "~1.1.1" 241 | 242 | domelementtype@1: 243 | version "1.3.0" 244 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" 245 | 246 | domelementtype@~1.1.1: 247 | version "1.1.3" 248 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" 249 | 250 | domhandler@2.3: 251 | version "2.3.0" 252 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" 253 | dependencies: 254 | domelementtype "1" 255 | 256 | domutils@1.5: 257 | version "1.5.1" 258 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" 259 | dependencies: 260 | dom-serializer "0" 261 | domelementtype "1" 262 | 263 | ecc-jsbn@~0.1.1: 264 | version "0.1.1" 265 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" 266 | dependencies: 267 | jsbn "~0.1.0" 268 | 269 | entities@1.0: 270 | version "1.0.0" 271 | resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26" 272 | 273 | entities@~1.1.1: 274 | version "1.1.1" 275 | resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" 276 | 277 | errs@^0.3.2: 278 | version "0.3.2" 279 | resolved "https://registry.yarnpkg.com/errs/-/errs-0.3.2.tgz#798099b2dbd37ca2bc749e538a7c1307d0b50499" 280 | 281 | escape-string-regexp@1.0.5: 282 | version "1.0.5" 283 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 284 | 285 | exit-on-epipe@~1.0.1: 286 | version "1.0.1" 287 | resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" 288 | 289 | exit@0.1.2, exit@0.1.x: 290 | version "0.1.2" 291 | resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" 292 | 293 | expect.js@^0.3.1: 294 | version "0.3.1" 295 | resolved "https://registry.yarnpkg.com/expect.js/-/expect.js-0.3.1.tgz#b0a59a0d2eff5437544ebf0ceaa6015841d09b5b" 296 | 297 | extend-shallow@^2.0.1: 298 | version "2.0.1" 299 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" 300 | dependencies: 301 | is-extendable "^0.1.0" 302 | 303 | extend@~3.0.1: 304 | version "3.0.1" 305 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" 306 | 307 | extsprintf@1.3.0: 308 | version "1.3.0" 309 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 310 | 311 | extsprintf@^1.2.0: 312 | version "1.4.0" 313 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" 314 | 315 | "falsey@^0.3.0": 316 | version "0.3.2" 317 | resolved "https://registry.yarnpkg.com/falsey/-/falsey-0.3.2.tgz#b21c90c5c34660fc192bf909575db95b6880d597" 318 | dependencies: 319 | kind-of "^5.0.2" 320 | 321 | fast-deep-equal@^1.0.0: 322 | version "1.1.0" 323 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" 324 | 325 | fast-json-stable-stringify@^2.0.0: 326 | version "2.0.0" 327 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 328 | 329 | forever-agent@~0.6.1: 330 | version "0.6.1" 331 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 332 | 333 | form-data@~2.3.1: 334 | version "2.3.2" 335 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" 336 | dependencies: 337 | asynckit "^0.4.0" 338 | combined-stream "1.0.6" 339 | mime-types "^2.1.12" 340 | 341 | frac@~1.1.2: 342 | version "1.1.2" 343 | resolved "https://registry.yarnpkg.com/frac/-/frac-1.1.2.tgz#3d74f7f6478c88a1b5020306d747dc6313c74d0b" 344 | 345 | fs.realpath@^1.0.0: 346 | version "1.0.0" 347 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 348 | 349 | get-func-name@^2.0.0: 350 | version "2.0.0" 351 | resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" 352 | 353 | get-value@^2.0.3, get-value@^2.0.6: 354 | version "2.0.6" 355 | resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" 356 | 357 | getpass@^0.1.1: 358 | version "0.1.7" 359 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 360 | dependencies: 361 | assert-plus "^1.0.0" 362 | 363 | glob@7.1.2, glob@^7.1.1: 364 | version "7.1.2" 365 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 366 | dependencies: 367 | fs.realpath "^1.0.0" 368 | inflight "^1.0.4" 369 | inherits "2" 370 | minimatch "^3.0.4" 371 | once "^1.3.0" 372 | path-is-absolute "^1.0.0" 373 | 374 | growl@1.10.5: 375 | version "1.10.5" 376 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 377 | 378 | har-schema@^2.0.0: 379 | version "2.0.0" 380 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 381 | 382 | har-validator@~5.0.3: 383 | version "5.0.3" 384 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" 385 | dependencies: 386 | ajv "^5.1.0" 387 | har-schema "^2.0.0" 388 | 389 | has-flag@^3.0.0: 390 | version "3.0.0" 391 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 392 | 393 | he@1.1.1: 394 | version "1.1.1" 395 | resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" 396 | 397 | htmlparser2@3.8.x: 398 | version "3.8.3" 399 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068" 400 | dependencies: 401 | domelementtype "1" 402 | domhandler "2.3" 403 | domutils "1.5" 404 | entities "1.0" 405 | readable-stream "1.1" 406 | 407 | http-signature@~1.2.0: 408 | version "1.2.0" 409 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 410 | dependencies: 411 | assert-plus "^1.0.0" 412 | jsprim "^1.2.2" 413 | sshpk "^1.7.0" 414 | 415 | inflight@^1.0.4: 416 | version "1.0.6" 417 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 418 | dependencies: 419 | once "^1.3.0" 420 | wrappy "1" 421 | 422 | inherits@2, inherits@~2.0.1: 423 | version "2.0.3" 424 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 425 | 426 | is-accessor-descriptor@^0.1.6: 427 | version "0.1.6" 428 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" 429 | dependencies: 430 | kind-of "^3.0.2" 431 | 432 | is-arguments@^1.0.2: 433 | version "1.0.2" 434 | resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.2.tgz#07e30ad79531844179b642d2d8399435182c8727" 435 | 436 | is-buffer@^1.1.5: 437 | version "1.1.6" 438 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 439 | 440 | is-data-descriptor@^0.1.4: 441 | version "0.1.4" 442 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" 443 | dependencies: 444 | kind-of "^3.0.2" 445 | 446 | is-descriptor@^0.1.0: 447 | version "0.1.6" 448 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" 449 | dependencies: 450 | is-accessor-descriptor "^0.1.6" 451 | is-data-descriptor "^0.1.4" 452 | kind-of "^5.0.0" 453 | 454 | is-enabled@^0.1.0: 455 | version "0.1.0" 456 | resolved "https://registry.yarnpkg.com/is-enabled/-/is-enabled-0.1.0.tgz#cc15e89fb9cbbd94e3ae3f9c72efb328d3831654" 457 | dependencies: 458 | extend-shallow "^2.0.1" 459 | "falsey" "^0.3.0" 460 | lazy-cache "^1.0.3" 461 | 462 | is-extendable@^0.1.0, is-extendable@^0.1.1: 463 | version "0.1.1" 464 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 465 | 466 | is-plain-object@^2.0.1: 467 | version "2.0.4" 468 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 469 | dependencies: 470 | isobject "^3.0.1" 471 | 472 | is-typedarray@~1.0.0: 473 | version "1.0.0" 474 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 475 | 476 | isarray@0.0.1: 477 | version "0.0.1" 478 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 479 | 480 | isarray@1.0.0: 481 | version "1.0.0" 482 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 483 | 484 | isobject@^2.0.0: 485 | version "2.1.0" 486 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 487 | dependencies: 488 | isarray "1.0.0" 489 | 490 | isobject@^3.0.1: 491 | version "3.0.1" 492 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 493 | 494 | isstream@~0.1.2: 495 | version "0.1.2" 496 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 497 | 498 | jsbn@~0.1.0: 499 | version "0.1.1" 500 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 501 | 502 | jshint@^2.5.11: 503 | version "2.9.5" 504 | resolved "https://registry.yarnpkg.com/jshint/-/jshint-2.9.5.tgz#1e7252915ce681b40827ee14248c46d34e9aa62c" 505 | dependencies: 506 | cli "~1.0.0" 507 | console-browserify "1.1.x" 508 | exit "0.1.x" 509 | htmlparser2 "3.8.x" 510 | lodash "3.7.x" 511 | minimatch "~3.0.2" 512 | shelljs "0.3.x" 513 | strip-json-comments "1.0.x" 514 | 515 | json-schema-traverse@^0.3.0: 516 | version "0.3.1" 517 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" 518 | 519 | json-schema@0.2.3: 520 | version "0.2.3" 521 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 522 | 523 | json-stringify-safe@~5.0.1: 524 | version "5.0.1" 525 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 526 | 527 | jsprim@^1.2.2: 528 | version "1.4.1" 529 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 530 | dependencies: 531 | assert-plus "1.0.0" 532 | extsprintf "1.3.0" 533 | json-schema "0.2.3" 534 | verror "1.10.0" 535 | 536 | kind-of@^3.0.2: 537 | version "3.2.2" 538 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 539 | dependencies: 540 | is-buffer "^1.1.5" 541 | 542 | kind-of@^5.0.0, kind-of@^5.0.2: 543 | version "5.1.0" 544 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" 545 | 546 | lazy-cache@^1.0.3: 547 | version "1.0.4" 548 | resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" 549 | 550 | lodash.isempty@^4.4.0: 551 | version "4.4.0" 552 | resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e" 553 | 554 | lodash@3.7.x: 555 | version "3.7.0" 556 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.7.0.tgz#3678bd8ab995057c07ade836ed2ef087da811d45" 557 | 558 | log-events@^0.3.0: 559 | version "0.3.0" 560 | resolved "https://registry.yarnpkg.com/log-events/-/log-events-0.3.0.tgz#288d641379b819b07dc1814bb8c8245730816b34" 561 | dependencies: 562 | component-emitter "^1.2.0" 563 | define-property "^0.2.5" 564 | extend-shallow "^2.0.1" 565 | "falsey" "^0.3.0" 566 | get-value "^2.0.3" 567 | lazy-cache "^1.0.3" 568 | set-value "^0.3.3" 569 | union-value "^0.2.3" 570 | use "^1.1.2" 571 | 572 | mime-db@~1.33.0: 573 | version "1.33.0" 574 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" 575 | 576 | mime-types@^2.1.12, mime-types@~2.1.17: 577 | version "2.1.18" 578 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" 579 | dependencies: 580 | mime-db "~1.33.0" 581 | 582 | minimatch@3.0.4, minimatch@^3.0.4, minimatch@~3.0.2: 583 | version "3.0.4" 584 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 585 | dependencies: 586 | brace-expansion "^1.1.7" 587 | 588 | minimist@0.0.8: 589 | version "0.0.8" 590 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 591 | 592 | minimist@^1.1.0: 593 | version "1.2.0" 594 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 595 | 596 | mkdirp@0.5.1: 597 | version "0.5.1" 598 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 599 | dependencies: 600 | minimist "0.0.8" 601 | 602 | mocha@^5.2.0: 603 | version "5.2.0" 604 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6" 605 | dependencies: 606 | browser-stdout "1.3.1" 607 | commander "2.15.1" 608 | debug "3.1.0" 609 | diff "3.5.0" 610 | escape-string-regexp "1.0.5" 611 | glob "7.1.2" 612 | growl "1.10.5" 613 | he "1.1.1" 614 | minimatch "3.0.4" 615 | mkdirp "0.5.1" 616 | supports-color "5.4.0" 617 | 618 | ms@2.0.0: 619 | version "2.0.0" 620 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 621 | 622 | nano@^6.0.2: 623 | version "6.4.4" 624 | resolved "https://registry.yarnpkg.com/nano/-/nano-6.4.4.tgz#4902a095e5186cfb23612c78826ea755b76fadf0" 625 | dependencies: 626 | cloudant-follow "~0.17.0" 627 | debug "^2.2.0" 628 | errs "^0.3.2" 629 | lodash.isempty "^4.4.0" 630 | request "^2.85.0" 631 | 632 | oauth-sign@~0.8.2: 633 | version "0.8.2" 634 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" 635 | 636 | once@^1.3.0: 637 | version "1.4.0" 638 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 639 | dependencies: 640 | wrappy "1" 641 | 642 | path-is-absolute@^1.0.0: 643 | version "1.0.1" 644 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 645 | 646 | pathval@^1.0.0: 647 | version "1.1.0" 648 | resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" 649 | 650 | performance-now@^2.1.0: 651 | version "2.1.0" 652 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 653 | 654 | printj@~1.1.0, printj@~1.1.2: 655 | version "1.1.2" 656 | resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" 657 | 658 | punycode@^1.4.1: 659 | version "1.4.1" 660 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 661 | 662 | qs@~6.5.1: 663 | version "6.5.2" 664 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 665 | 666 | readable-stream@1.1: 667 | version "1.1.13" 668 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e" 669 | dependencies: 670 | core-util-is "~1.0.0" 671 | inherits "~2.0.1" 672 | isarray "0.0.1" 673 | string_decoder "~0.10.x" 674 | 675 | request@^2.83.0, request@^2.85.0: 676 | version "2.87.0" 677 | resolved "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e" 678 | dependencies: 679 | aws-sign2 "~0.7.0" 680 | aws4 "^1.6.0" 681 | caseless "~0.12.0" 682 | combined-stream "~1.0.5" 683 | extend "~3.0.1" 684 | forever-agent "~0.6.1" 685 | form-data "~2.3.1" 686 | har-validator "~5.0.3" 687 | http-signature "~1.2.0" 688 | is-typedarray "~1.0.0" 689 | isstream "~0.1.2" 690 | json-stringify-safe "~5.0.1" 691 | mime-types "~2.1.17" 692 | oauth-sign "~0.8.2" 693 | performance-now "^2.1.0" 694 | qs "~6.5.1" 695 | safe-buffer "^5.1.1" 696 | tough-cookie "~2.3.3" 697 | tunnel-agent "^0.6.0" 698 | uuid "^3.1.0" 699 | 700 | safe-buffer@^5.0.1, safe-buffer@^5.1.1: 701 | version "5.1.2" 702 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 703 | 704 | set-value@^0.3.3: 705 | version "0.3.3" 706 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.3.3.tgz#b81223681638a1088fd88a435b8a9d32dae8d9ba" 707 | dependencies: 708 | extend-shallow "^2.0.1" 709 | isobject "^2.0.0" 710 | to-object-path "^0.2.0" 711 | 712 | set-value@^0.4.3: 713 | version "0.4.3" 714 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" 715 | dependencies: 716 | extend-shallow "^2.0.1" 717 | is-extendable "^0.1.1" 718 | is-plain-object "^2.0.1" 719 | to-object-path "^0.3.0" 720 | 721 | shelljs@0.3.x: 722 | version "0.3.0" 723 | resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.3.0.tgz#3596e6307a781544f591f37da618360f31db57b1" 724 | 725 | ssf@~0.10.2: 726 | version "0.10.2" 727 | resolved "https://registry.yarnpkg.com/ssf/-/ssf-0.10.2.tgz#65b2b4fcdfd967bc8e8383a41349009893115976" 728 | dependencies: 729 | frac "~1.1.2" 730 | 731 | sshpk@^1.7.0: 732 | version "1.14.1" 733 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.1.tgz#130f5975eddad963f1d56f92b9ac6c51fa9f83eb" 734 | dependencies: 735 | asn1 "~0.2.3" 736 | assert-plus "^1.0.0" 737 | dashdash "^1.12.0" 738 | getpass "^0.1.1" 739 | optionalDependencies: 740 | bcrypt-pbkdf "^1.0.0" 741 | ecc-jsbn "~0.1.1" 742 | jsbn "~0.1.0" 743 | tweetnacl "~0.14.0" 744 | 745 | string_decoder@~0.10.x: 746 | version "0.10.31" 747 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 748 | 749 | strip-color@^0.1.0: 750 | version "0.1.0" 751 | resolved "https://registry.yarnpkg.com/strip-color/-/strip-color-0.1.0.tgz#106f65d3d3e6a2d9401cac0eb0ce8b8a702b4f7b" 752 | 753 | strip-json-comments@1.0.x: 754 | version "1.0.4" 755 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" 756 | 757 | supports-color@5.4.0: 758 | version "5.4.0" 759 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" 760 | dependencies: 761 | has-flag "^3.0.0" 762 | 763 | to-object-path@^0.2.0: 764 | version "0.2.0" 765 | resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.2.0.tgz#1634e1b52a88ba00e3949619fc0081dc9a3b07ca" 766 | dependencies: 767 | arr-flatten "^1.0.1" 768 | is-arguments "^1.0.2" 769 | 770 | to-object-path@^0.3.0: 771 | version "0.3.0" 772 | resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" 773 | dependencies: 774 | kind-of "^3.0.2" 775 | 776 | tough-cookie@~2.3.3: 777 | version "2.3.4" 778 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" 779 | dependencies: 780 | punycode "^1.4.1" 781 | 782 | tunnel-agent@^0.6.0: 783 | version "0.6.0" 784 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 785 | dependencies: 786 | safe-buffer "^5.0.1" 787 | 788 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 789 | version "0.14.5" 790 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 791 | 792 | type-detect@^4.0.0: 793 | version "4.0.8" 794 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 795 | 796 | union-value@^0.2.3: 797 | version "0.2.4" 798 | resolved "https://registry.yarnpkg.com/union-value/-/union-value-0.2.4.tgz#7375152786679057e7b37aa676e83468fc0274f0" 799 | dependencies: 800 | arr-union "^3.1.0" 801 | get-value "^2.0.6" 802 | is-extendable "^0.1.1" 803 | set-value "^0.4.3" 804 | 805 | use@^1.1.2: 806 | version "1.1.2" 807 | resolved "https://registry.yarnpkg.com/use/-/use-1.1.2.tgz#6e3832feb8689573494ac6a7acb5fefb377b2cd1" 808 | dependencies: 809 | define-property "^0.2.5" 810 | isobject "^2.0.0" 811 | 812 | uuid@^3.1.0: 813 | version "3.2.1" 814 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" 815 | 816 | verbalize@^0.2.0: 817 | version "0.2.0" 818 | resolved "https://registry.yarnpkg.com/verbalize/-/verbalize-0.2.0.tgz#b3339fbd44441bb08b1c961d39dbd5fe7e76e295" 819 | dependencies: 820 | ansi-bold "^0.1.1" 821 | ansi-underline "^0.1.1" 822 | base-is-enabled "^0.1.0" 823 | define-property "^0.2.5" 824 | extend-shallow "^2.0.1" 825 | "falsey" "^0.3.0" 826 | get-value "^2.0.3" 827 | lazy-cache "^1.0.3" 828 | log-events "^0.3.0" 829 | set-value "^0.3.3" 830 | strip-color "^0.1.0" 831 | use "^1.1.2" 832 | 833 | verror@1.10.0: 834 | version "1.10.0" 835 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 836 | dependencies: 837 | assert-plus "^1.0.0" 838 | core-util-is "1.0.2" 839 | extsprintf "^1.2.0" 840 | 841 | wrappy@1: 842 | version "1.0.2" 843 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 844 | 845 | xlsx@^0.12.13: 846 | version "0.12.13" 847 | resolved "https://registry.yarnpkg.com/xlsx/-/xlsx-0.12.13.tgz#f6bec7cf8d916cf625685116170cc3b224228658" 848 | dependencies: 849 | adler-32 "~1.2.0" 850 | cfb "~1.0.7" 851 | codepage "~1.13.0" 852 | commander "~2.15.1" 853 | crc-32 "~1.2.0" 854 | exit-on-epipe "~1.0.1" 855 | ssf "~0.10.2" 856 | --------------------------------------------------------------------------------