├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── lib ├── helpers.js └── index.js ├── package-lock.json ├── package.json └── test └── index.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | *.log 3 | *.db 4 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | 3 | language: node_js 4 | 5 | node_js: 6 | - "4.5" 7 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2017 Dali Zheng (http://daliwa.li) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Fortune NeDB Adapter 2 | 3 | [![Build Status](https://img.shields.io/travis/fortunejs/fortune-nedb/master.svg?style=flat-square)](https://travis-ci.org/fortunejs/fortune-nedb) 4 | [![npm Version](https://img.shields.io/npm/v/fortune-nedb.svg?style=flat-square)](https://www.npmjs.com/package/fortune-nedb) 5 | [![License](https://img.shields.io/npm/l/fortune-nedb.svg?style=flat-square)](https://raw.githubusercontent.com/fortunejs/fortune-nedb/master/LICENSE) 6 | 7 | This is a [NeDB](https://github.com/louischatriot/nedb) adapter for [Fortune](http://fortunejs.com). 8 | 9 | 10 | ## Usage 11 | 12 | Install the `fortune-nedb` package from `npm`: 13 | 14 | ``` 15 | $ npm install fortune-nedb 16 | ``` 17 | 18 | Then use it with Fortune: 19 | 20 | ```js 21 | const fortune = require('fortune') 22 | const nedbAdapter = require('fortune-nedb') 23 | 24 | const store = fortune({ ... }, { 25 | adapter: [ nedbAdapter, {/* options */} ] 26 | }) 27 | ``` 28 | 29 | 30 | ## Options 31 | 32 | All of the options are enumerated [here](https://github.com/louischatriot/nedb). Here are additional adapter-specific options: 33 | 34 | - `dbPath`: Path to a directory where the database is persisted to disk. Optional. 35 | 36 | Note that the `filename` option has no effect, since Fortune.js determines filenames based on type name. 37 | 38 | In addition to the constructor options, there is also the `query` function in the `find` method, which accepts the query object as an argument, and may either mutate or return the query object. This allows for arbitrary queries. 39 | 40 | 41 | ## License 42 | 43 | This software is licensed under the [MIT License](//github.com/fortunejs/fortune-nedb/blob/master/LICENSE). 44 | -------------------------------------------------------------------------------- /lib/helpers.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | const uid = require('nedb/lib/customUtils').uid 4 | 5 | 6 | const bufferEncoding = 'base64' 7 | const idKey = '_id' 8 | 9 | 10 | module.exports = { idKey, inputRecord, outputRecord, mapValues, castValue } 11 | 12 | 13 | // Cast and assign values per field. 14 | function inputRecord (type, record) { 15 | const recordTypes = this.recordTypes 16 | const primaryKey = this.keys.primary 17 | const typeKey = this.keys.type 18 | const isArrayKey = this.keys.isArray 19 | const clone = {} 20 | const fields = recordTypes[type] 21 | 22 | // ID business. 23 | const id = record[primaryKey] 24 | clone[idKey] = id ? id : generateId() 25 | 26 | for (const field in record) { 27 | if (field === primaryKey) continue 28 | clone[field] = record[field] 29 | } 30 | 31 | for (const field of Object.getOwnPropertyNames(fields)) { 32 | const fieldType = fields[field][typeKey] 33 | const fieldIsArray = fields[field][isArrayKey] 34 | 35 | if (!(field in record)) { 36 | clone[field] = fieldIsArray ? [] : null 37 | continue 38 | } 39 | 40 | // NeDB lacks native support for buffer types. 41 | if (fieldType && 42 | (fieldType === Buffer || fieldType.prototype.constructor === Buffer) && 43 | record[field]) { 44 | clone[field] = fieldIsArray ? 45 | record[field].map(toString) : toString(record[field]) 46 | continue 47 | } 48 | } 49 | 50 | return clone 51 | } 52 | 53 | 54 | function outputRecord (type, record) { 55 | const recordTypes = this.recordTypes 56 | const primaryKey = this.keys.primary 57 | const typeKey = this.keys.type 58 | const isArrayKey = this.keys.isArray 59 | const denormalizedInverseKey = this.keys.denormalizedInverse 60 | const clone = {} 61 | const fields = recordTypes[type] 62 | 63 | // ID business. 64 | clone[primaryKey] = record[idKey] 65 | 66 | for (const field in record) { 67 | if (!(field in fields)) continue 68 | 69 | const value = record[field] 70 | const fieldType = fields[field][typeKey] 71 | 72 | // NeDB lacks native support for buffer types. 73 | if (fieldType && 74 | (fieldType === Buffer || fieldType.prototype.constructor === Buffer) && 75 | record[field]) { 76 | clone[field] = fields[field][isArrayKey] ? 77 | value.map(toBuffer) : toBuffer(value) 78 | continue 79 | } 80 | 81 | // Do not enumerate denormalized fields. 82 | if (fields[field][denormalizedInverseKey]) { 83 | Object.defineProperty(clone, field, { 84 | configurable: true, writable: true, value 85 | }) 86 | continue 87 | } 88 | 89 | clone[field] = value 90 | } 91 | 92 | return clone 93 | } 94 | 95 | 96 | // Buffer to string casting, and vice versa. 97 | function toString (buffer) { 98 | return buffer.toString(bufferEncoding) 99 | } 100 | function toBuffer (string) { 101 | return new Buffer(string, bufferEncoding) 102 | } 103 | 104 | 105 | /** 106 | * Immutable mapping on an object. 107 | * 108 | * @param {Object} object 109 | * @param {Function} map should return the first argument, which is the value 110 | * @return {Object} 111 | */ 112 | function mapValues (object, map) { 113 | return Object.keys(object).reduce((clone, key) => 114 | Object.assign(clone, { [key]: map(object[key], key) }), {}) 115 | } 116 | 117 | 118 | /** 119 | * Cast non-native types. 120 | * 121 | * @param {*} value 122 | * @return {*} 123 | */ 124 | function castValue (value) { 125 | if (Buffer.isBuffer(value)) 126 | return value.toString(bufferEncoding) 127 | 128 | return value 129 | } 130 | 131 | 132 | /** 133 | * Defer to using the uid function provided by NEDB. 134 | * 135 | * @return {String} 136 | */ 137 | function generateId () { 138 | return uid(16) 139 | } 140 | -------------------------------------------------------------------------------- /lib/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | const path = require('path') 4 | const Store = require('nedb') 5 | const helpers = require('./helpers') 6 | const inputRecord = helpers.inputRecord 7 | const outputRecord = helpers.outputRecord 8 | const mapValues = helpers.mapValues 9 | const castValue = helpers.castValue 10 | const idKey = helpers.idKey 11 | 12 | 13 | // By default, try to auto-compact the database every minute. 14 | const defaultCompactionInterval = 60 * 1000 15 | 16 | 17 | /** 18 | * NeDB adapter. 19 | */ 20 | module.exports = Adapter => class NedbAdapter extends Adapter { 21 | 22 | connect () { 23 | const Promise = this.Promise 24 | const recordTypes = this.recordTypes 25 | const options = this.options 26 | const compactionInterval = options.compactionInterval 27 | const dbPath = options.dbPath 28 | 29 | delete options.filename 30 | 31 | try { 32 | this.db = mapValues(recordTypes, (fields, type) => { 33 | const db = new Store(Object.assign({}, options, dbPath ? { 34 | filename: path.join(dbPath, `${type}.db`) 35 | } : null)) 36 | db.persistence.setAutocompactionInterval( 37 | compactionInterval ? compactionInterval : defaultCompactionInterval) 38 | return db 39 | }) 40 | } 41 | catch (error) { 42 | return Promise.reject(error) 43 | } 44 | 45 | return Promise.all(Object.keys(this.db).map(type => 46 | new Promise((resolve, reject) => 47 | this.db[type].loadDatabase(error => error ? reject(error) : resolve()) 48 | ))) 49 | .then(() => null) 50 | } 51 | 52 | 53 | disconnect () { 54 | const Promise = this.Promise 55 | 56 | return Promise.all( 57 | Object.keys(this.db).map(key => new Promise(resolve => { 58 | const db = this.db[key] 59 | 60 | // This auto compaction interval prevents the process from exiting. 61 | db.persistence.stopAutocompaction() 62 | 63 | // Internal hook to NeDB's executor which will run after all other 64 | // operations are done. 65 | db.executor.push({ fn: resolve, arguments: [] }) 66 | })) 67 | ).then(() => null) 68 | } 69 | 70 | 71 | find (type, ids, options) { 72 | // Handle no-op. 73 | if (ids && !ids.length) return super.find() 74 | if (!options) options = {} 75 | 76 | const Promise = this.Promise 77 | const recordTypes = this.recordTypes 78 | const isArrayKey = this.keys.isArray 79 | let query = { $and: [] } 80 | 81 | if ('match' in options) 82 | query.$and.push(mapValues(options.match, value => 83 | Array.isArray(value) ? { $in: value.map(castValue) } : 84 | castValue(value))) 85 | 86 | if ('exists' in options) 87 | query.$and.push(mapValues(options.exists, (value, key) => { 88 | if (!(key in recordTypes[type])) return void 0 89 | 90 | if (recordTypes[type][key][isArrayKey]) 91 | return value ? { $ne: [] } : [] 92 | 93 | return value ? { $ne: null } : null 94 | })) 95 | 96 | if ('range' in options) { 97 | const range = {} 98 | 99 | query.$and.push(range) 100 | Object.keys(options.range).forEach(key => { 101 | if (!(key in recordTypes[type])) return 102 | 103 | const value = options.range[key] 104 | 105 | if (recordTypes[type][key][isArrayKey]) { 106 | if (value[0] != null) 107 | range[`${key}.${value[0] - 1}`] = { $exists: true } 108 | if (value[1] != null) 109 | range[`${key}.${value[1]}`] = { $exists: false } 110 | return 111 | } 112 | 113 | range[key] = { $ne: null } 114 | if (value[0] != null) range[key].$gte = castValue(value[0]) 115 | if (value[1] != null) range[key].$lte = castValue(value[1]) 116 | }) 117 | } 118 | 119 | if (!query.$and.length) delete query.$and 120 | 121 | if ('query' in options) { 122 | const result = options.query(query) 123 | if (result != null) query = result 124 | } 125 | 126 | if (ids && ids.length) 127 | query[idKey] = { $in: ids } 128 | 129 | // Parallelize the find method with count method. 130 | return Promise.all([ 131 | new Promise((resolve, reject) => { 132 | let fields 133 | 134 | if ('fields' in options) 135 | fields = mapValues(options.fields, value => value ? 1 : 0) 136 | 137 | const dbCollection = this.db[type] 138 | const find = dbCollection.find.call(dbCollection, query, fields) 139 | 140 | if ('sort' in options) 141 | find.sort(mapValues(options.sort, value => value ? 1 : -1)) 142 | 143 | if ('offset' in options) 144 | find.skip(options.offset) 145 | 146 | if ('limit' in options) 147 | find.limit(options.limit) 148 | 149 | find.exec((error, records) => error ? reject(error) : 150 | resolve(records.map(outputRecord.bind(this, type))) 151 | ) 152 | }), 153 | new Promise((resolve, reject) => 154 | this.db[type].count(query, (error, count) => error ? 155 | reject(error) : resolve(count))) 156 | ]) 157 | 158 | .then(results => { 159 | // Set the count on the records array. 160 | results[0].count = results[1] 161 | return results[0] 162 | }) 163 | } 164 | 165 | 166 | create (type, records) { 167 | const Promise = this.Promise 168 | const ConflictError = this.errors.ConflictError 169 | 170 | return new Promise((resolve, reject) => 171 | this.db[type].insert( 172 | records.map(inputRecord.bind(this, type)), 173 | (error, result) => error ? 174 | reject(error.errorType === 'uniqueViolated' ? 175 | new ConflictError('Duplicate key.') : error) : 176 | resolve(result.map(outputRecord.bind(this, type))) 177 | )) 178 | } 179 | 180 | 181 | update (type, updates) { 182 | const Promise = this.Promise 183 | const primaryKey = this.keys.primary 184 | 185 | return Promise.all(updates.map(update => 186 | new Promise((resolve, reject) => { 187 | const modifiers = {} 188 | 189 | if ('replace' in update && Object.keys(update.replace).length) 190 | modifiers.$set = update.replace 191 | 192 | if ('push' in update) 193 | modifiers.$push = mapValues(update.push, value => 194 | Array.isArray(value) ? { $each: value } : value) 195 | 196 | if ('pull' in update) 197 | modifiers.$pull = mapValues(update.pull, value => 198 | Array.isArray(value) ? { $in: value } : value) 199 | 200 | // Custom update operators have precedence. 201 | Object.assign(modifiers, update.operate) 202 | 203 | // Short circuit no-op. 204 | if (!Object.keys(modifiers).length) { 205 | resolve(0) 206 | return 207 | } 208 | 209 | this.db[type].update({ [idKey]: update[primaryKey] }, 210 | modifiers, {}, (error, number) => error ? 211 | reject(error) : resolve(number)) 212 | }) 213 | )) 214 | .then(numbers => numbers.reduce((accumulator, number) => 215 | accumulator + number, 0)) 216 | } 217 | 218 | 219 | delete (type, ids) { 220 | if (ids && !ids.length) return super.delete() 221 | 222 | const Promise = this.Promise 223 | 224 | return new Promise((resolve, reject) => 225 | this.db[type].remove(ids && ids.length ? 226 | { [idKey]: { $in: ids } } : {}, { multi: true }, 227 | (error, number) => error ? reject(error) : resolve(number))) 228 | } 229 | 230 | } 231 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fortune-nedb", 3 | "version": "1.1.7", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@tap-format/dot": { 8 | "version": "https://registry.npmjs.org/@tap-format/dot/-/dot-0.2.0.tgz", 9 | "integrity": "sha1-+PuXXLX8queD+bcqzHlGm3GJoGE=", 10 | "dev": true, 11 | "requires": { 12 | "@tap-format/exit": "https://registry.npmjs.org/@tap-format/exit/-/exit-0.2.0.tgz", 13 | "@tap-format/failures": "https://registry.npmjs.org/@tap-format/failures/-/failures-0.2.0.tgz", 14 | "@tap-format/parser": "https://registry.npmjs.org/@tap-format/parser/-/parser-0.2.0.tgz", 15 | "@tap-format/results": "https://registry.npmjs.org/@tap-format/results/-/results-0.2.0.tgz", 16 | "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 17 | "figures": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", 18 | "rx": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz" 19 | } 20 | }, 21 | "@tap-format/exit": { 22 | "version": "https://registry.npmjs.org/@tap-format/exit/-/exit-0.2.0.tgz", 23 | "integrity": "sha1-tYc2vFXTCALAEsWt/KUbRwQDEM0=", 24 | "dev": true, 25 | "requires": { 26 | "ramda": "https://registry.npmjs.org/ramda/-/ramda-0.18.0.tgz", 27 | "rx": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz" 28 | } 29 | }, 30 | "@tap-format/failures": { 31 | "version": "https://registry.npmjs.org/@tap-format/failures/-/failures-0.2.0.tgz", 32 | "integrity": "sha1-u29e3DvDxXxiiFvHwhTMer38Kgc=", 33 | "dev": true, 34 | "requires": { 35 | "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 36 | "diff": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz", 37 | "figures": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", 38 | "ramda": "https://registry.npmjs.org/ramda/-/ramda-0.18.0.tgz", 39 | "rx": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz" 40 | } 41 | }, 42 | "@tap-format/parser": { 43 | "version": "https://registry.npmjs.org/@tap-format/parser/-/parser-0.2.0.tgz", 44 | "integrity": "sha1-vcHZXmlHgRV1kyg7s8P+wTKjEV0=", 45 | "dev": true, 46 | "requires": { 47 | "duplexer": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", 48 | "js-yaml": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", 49 | "ramda": "https://registry.npmjs.org/ramda/-/ramda-0.18.0.tgz", 50 | "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", 51 | "rx": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", 52 | "rx-node": "https://registry.npmjs.org/rx-node/-/rx-node-1.0.2.tgz", 53 | "split": "https://registry.npmjs.org/split/-/split-1.0.0.tgz" 54 | }, 55 | "dependencies": { 56 | "isarray": { 57 | "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 58 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 59 | "dev": true 60 | }, 61 | "readable-stream": { 62 | "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", 63 | "integrity": "sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA=", 64 | "dev": true, 65 | "requires": { 66 | "buffer-shims": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", 67 | "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 68 | "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 69 | "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 70 | "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 71 | "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 72 | "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" 73 | } 74 | } 75 | } 76 | }, 77 | "@tap-format/results": { 78 | "version": "https://registry.npmjs.org/@tap-format/results/-/results-0.2.0.tgz", 79 | "integrity": "sha1-GS1krEHxRvonItscCiLtgEePVP0=", 80 | "dev": true, 81 | "requires": { 82 | "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 83 | "hirestime": "https://registry.npmjs.org/hirestime/-/hirestime-1.0.7.tgz", 84 | "pretty-ms": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-2.1.0.tgz", 85 | "rx": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz" 86 | } 87 | }, 88 | "acorn": { 89 | "version": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", 90 | "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ=" 91 | }, 92 | "acorn-jsx": { 93 | "version": "3.0.1", 94 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", 95 | "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", 96 | "dev": true, 97 | "requires": { 98 | "acorn": "3.3.0" 99 | }, 100 | "dependencies": { 101 | "acorn": { 102 | "version": "3.3.0", 103 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", 104 | "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", 105 | "dev": true 106 | } 107 | } 108 | }, 109 | "ajv": { 110 | "version": "4.11.8", 111 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", 112 | "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", 113 | "dev": true, 114 | "requires": { 115 | "co": "4.6.0", 116 | "json-stable-stringify": "1.0.1" 117 | } 118 | }, 119 | "ajv-keywords": { 120 | "version": "1.5.1", 121 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", 122 | "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", 123 | "dev": true 124 | }, 125 | "amdefine": { 126 | "version": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.0.tgz", 127 | "integrity": "sha1-/RdHRwDLXMnCtwnwvp0jzjwZjDM=" 128 | }, 129 | "ansi-escapes": { 130 | "version": "1.4.0", 131 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", 132 | "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", 133 | "dev": true 134 | }, 135 | "ansi-regex": { 136 | "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz", 137 | "integrity": "sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=", 138 | "dev": true 139 | }, 140 | "ansi-styles": { 141 | "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 142 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 143 | "dev": true 144 | }, 145 | "argparse": { 146 | "version": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", 147 | "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", 148 | "dev": true, 149 | "requires": { 150 | "sprintf-js": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" 151 | } 152 | }, 153 | "array-union": { 154 | "version": "1.0.2", 155 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", 156 | "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", 157 | "dev": true, 158 | "requires": { 159 | "array-uniq": "1.0.3" 160 | } 161 | }, 162 | "array-uniq": { 163 | "version": "1.0.3", 164 | "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", 165 | "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", 166 | "dev": true 167 | }, 168 | "arrify": { 169 | "version": "1.0.1", 170 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", 171 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", 172 | "dev": true 173 | }, 174 | "ast-types": { 175 | "version": "https://registry.npmjs.org/ast-types/-/ast-types-0.8.15.tgz", 176 | "integrity": "sha1-ju8IJ/BN/w7IhXupJavj/qYZTlI=" 177 | }, 178 | "async": { 179 | "version": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", 180 | "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" 181 | }, 182 | "babel-code-frame": { 183 | "version": "6.26.0", 184 | "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", 185 | "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", 186 | "dev": true, 187 | "requires": { 188 | "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 189 | "esutils": "2.0.2", 190 | "js-tokens": "3.0.2" 191 | } 192 | }, 193 | "balanced-match": { 194 | "version": "1.0.0", 195 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 196 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 197 | "dev": true 198 | }, 199 | "base62": { 200 | "version": "https://registry.npmjs.org/base62/-/base62-0.1.1.tgz", 201 | "integrity": "sha1-e0F0wvlESXU7EcJlHAg9qEGnsIQ=" 202 | }, 203 | "binary-search-tree": { 204 | "version": "https://registry.npmjs.org/binary-search-tree/-/binary-search-tree-0.2.5.tgz", 205 | "integrity": "sha1-fbs7IQ/coIJFDa0jNMMErzm9x4Q=", 206 | "requires": { 207 | "underscore": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz" 208 | } 209 | }, 210 | "brace-expansion": { 211 | "version": "1.1.8", 212 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 213 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 214 | "dev": true, 215 | "requires": { 216 | "balanced-match": "1.0.0", 217 | "concat-map": "0.0.1" 218 | } 219 | }, 220 | "buffer-shims": { 221 | "version": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", 222 | "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", 223 | "dev": true 224 | }, 225 | "caller-path": { 226 | "version": "0.1.0", 227 | "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", 228 | "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", 229 | "dev": true, 230 | "requires": { 231 | "callsites": "0.2.0" 232 | } 233 | }, 234 | "callsites": { 235 | "version": "0.2.0", 236 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", 237 | "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", 238 | "dev": true 239 | }, 240 | "chalk": { 241 | "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 242 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 243 | "dev": true, 244 | "requires": { 245 | "ansi-styles": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 246 | "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 247 | "has-ansi": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 248 | "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 249 | "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" 250 | } 251 | }, 252 | "circular-json": { 253 | "version": "0.3.3", 254 | "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", 255 | "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", 256 | "dev": true 257 | }, 258 | "cli-cursor": { 259 | "version": "1.0.2", 260 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", 261 | "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", 262 | "dev": true, 263 | "requires": { 264 | "restore-cursor": "1.0.1" 265 | } 266 | }, 267 | "cli-width": { 268 | "version": "2.2.0", 269 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", 270 | "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", 271 | "dev": true 272 | }, 273 | "co": { 274 | "version": "4.6.0", 275 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 276 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", 277 | "dev": true 278 | }, 279 | "code-point-at": { 280 | "version": "1.1.0", 281 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 282 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", 283 | "dev": true 284 | }, 285 | "concat-map": { 286 | "version": "0.0.1", 287 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 288 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 289 | "dev": true 290 | }, 291 | "concat-stream": { 292 | "version": "1.6.0", 293 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", 294 | "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", 295 | "dev": true, 296 | "requires": { 297 | "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 298 | "readable-stream": "2.3.3", 299 | "typedarray": "0.0.6" 300 | }, 301 | "dependencies": { 302 | "isarray": { 303 | "version": "1.0.0", 304 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 305 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 306 | "dev": true 307 | }, 308 | "readable-stream": { 309 | "version": "2.3.3", 310 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", 311 | "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", 312 | "dev": true, 313 | "requires": { 314 | "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 315 | "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 316 | "isarray": "1.0.0", 317 | "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 318 | "safe-buffer": "5.1.1", 319 | "string_decoder": "1.0.3", 320 | "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" 321 | } 322 | }, 323 | "string_decoder": { 324 | "version": "1.0.3", 325 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 326 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", 327 | "dev": true, 328 | "requires": { 329 | "safe-buffer": "5.1.1" 330 | } 331 | } 332 | } 333 | }, 334 | "core-util-is": { 335 | "version": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 336 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 337 | }, 338 | "d": { 339 | "version": "1.0.0", 340 | "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", 341 | "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", 342 | "dev": true, 343 | "requires": { 344 | "es5-ext": "0.10.30" 345 | } 346 | }, 347 | "debug": { 348 | "version": "2.6.8", 349 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", 350 | "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", 351 | "dev": true, 352 | "requires": { 353 | "ms": "2.0.0" 354 | } 355 | }, 356 | "deep-is": { 357 | "version": "0.1.3", 358 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 359 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 360 | "dev": true 361 | }, 362 | "del": { 363 | "version": "2.2.2", 364 | "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", 365 | "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", 366 | "dev": true, 367 | "requires": { 368 | "globby": "5.0.0", 369 | "is-path-cwd": "1.0.0", 370 | "is-path-in-cwd": "1.0.0", 371 | "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", 372 | "pify": "2.3.0", 373 | "pinkie-promise": "2.0.1", 374 | "rimraf": "2.6.2" 375 | } 376 | }, 377 | "diff": { 378 | "version": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz", 379 | "integrity": "sha1-YOr9DSjukG5Oj/ClLBIpUhAzv5k=", 380 | "dev": true 381 | }, 382 | "doctrine": { 383 | "version": "2.0.0", 384 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", 385 | "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", 386 | "dev": true, 387 | "requires": { 388 | "esutils": "2.0.2", 389 | "isarray": "1.0.0" 390 | }, 391 | "dependencies": { 392 | "isarray": { 393 | "version": "1.0.0", 394 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 395 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 396 | "dev": true 397 | } 398 | } 399 | }, 400 | "duplexer": { 401 | "version": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", 402 | "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", 403 | "dev": true 404 | }, 405 | "error-class": { 406 | "version": "2.0.1", 407 | "resolved": "https://registry.npmjs.org/error-class/-/error-class-2.0.1.tgz", 408 | "integrity": "sha1-ZZpsXPOMlp2iobGwmodyWucTguc=", 409 | "dev": true 410 | }, 411 | "es3ify": { 412 | "version": "https://registry.npmjs.org/es3ify/-/es3ify-0.1.4.tgz", 413 | "integrity": "sha1-rZ+l3xrjTz8x4SEbWBiy1RB439E=", 414 | "requires": { 415 | "esprima-fb": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz", 416 | "jstransform": "https://registry.npmjs.org/jstransform/-/jstransform-3.0.0.tgz", 417 | "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" 418 | } 419 | }, 420 | "es5-ext": { 421 | "version": "0.10.30", 422 | "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz", 423 | "integrity": "sha1-cUGhaDZpfbq/qq7uQUlc4p9SyTk=", 424 | "dev": true, 425 | "requires": { 426 | "es6-iterator": "2.0.1", 427 | "es6-symbol": "3.1.1" 428 | } 429 | }, 430 | "es6-iterator": { 431 | "version": "2.0.1", 432 | "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", 433 | "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=", 434 | "dev": true, 435 | "requires": { 436 | "d": "1.0.0", 437 | "es5-ext": "0.10.30", 438 | "es6-symbol": "3.1.1" 439 | } 440 | }, 441 | "es6-map": { 442 | "version": "0.1.5", 443 | "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", 444 | "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", 445 | "dev": true, 446 | "requires": { 447 | "d": "1.0.0", 448 | "es5-ext": "0.10.30", 449 | "es6-iterator": "2.0.1", 450 | "es6-set": "0.1.5", 451 | "es6-symbol": "3.1.1", 452 | "event-emitter": "0.3.5" 453 | } 454 | }, 455 | "es6-set": { 456 | "version": "0.1.5", 457 | "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", 458 | "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", 459 | "dev": true, 460 | "requires": { 461 | "d": "1.0.0", 462 | "es5-ext": "0.10.30", 463 | "es6-iterator": "2.0.1", 464 | "es6-symbol": "3.1.1", 465 | "event-emitter": "0.3.5" 466 | } 467 | }, 468 | "es6-symbol": { 469 | "version": "3.1.1", 470 | "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", 471 | "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", 472 | "dev": true, 473 | "requires": { 474 | "d": "1.0.0", 475 | "es5-ext": "0.10.30" 476 | } 477 | }, 478 | "es6-weak-map": { 479 | "version": "2.0.2", 480 | "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", 481 | "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", 482 | "dev": true, 483 | "requires": { 484 | "d": "1.0.0", 485 | "es5-ext": "0.10.30", 486 | "es6-iterator": "2.0.1", 487 | "es6-symbol": "3.1.1" 488 | } 489 | }, 490 | "escape-string-regexp": { 491 | "version": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 492 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 493 | "dev": true 494 | }, 495 | "escope": { 496 | "version": "3.6.0", 497 | "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", 498 | "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", 499 | "dev": true, 500 | "requires": { 501 | "es6-map": "0.1.5", 502 | "es6-weak-map": "2.0.2", 503 | "esrecurse": "4.2.0", 504 | "estraverse": "4.2.0" 505 | } 506 | }, 507 | "eslint": { 508 | "version": "3.19.0", 509 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", 510 | "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", 511 | "dev": true, 512 | "requires": { 513 | "babel-code-frame": "6.26.0", 514 | "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 515 | "concat-stream": "1.6.0", 516 | "debug": "2.6.8", 517 | "doctrine": "2.0.0", 518 | "escope": "3.6.0", 519 | "espree": "3.5.0", 520 | "esquery": "1.0.0", 521 | "estraverse": "4.2.0", 522 | "esutils": "2.0.2", 523 | "file-entry-cache": "2.0.0", 524 | "glob": "7.1.2", 525 | "globals": "9.18.0", 526 | "ignore": "3.3.5", 527 | "imurmurhash": "0.1.4", 528 | "inquirer": "0.12.0", 529 | "is-my-json-valid": "2.16.1", 530 | "is-resolvable": "1.0.0", 531 | "js-yaml": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", 532 | "json-stable-stringify": "1.0.1", 533 | "levn": "0.3.0", 534 | "lodash": "4.17.4", 535 | "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 536 | "natural-compare": "1.4.0", 537 | "optionator": "0.8.2", 538 | "path-is-inside": "1.0.2", 539 | "pluralize": "1.2.1", 540 | "progress": "1.1.8", 541 | "require-uncached": "1.0.3", 542 | "shelljs": "0.7.8", 543 | "strip-bom": "3.0.0", 544 | "strip-json-comments": "2.0.1", 545 | "table": "3.8.3", 546 | "text-table": "0.2.0", 547 | "user-home": "2.0.0" 548 | } 549 | }, 550 | "eslint-config-boss": { 551 | "version": "1.0.6", 552 | "resolved": "https://registry.npmjs.org/eslint-config-boss/-/eslint-config-boss-1.0.6.tgz", 553 | "integrity": "sha512-Wty0JFe8x+ltLGyjvJ6I7me1I7F6EZliK/Pt5hxwkKYO/Dr2SpXQFLApAUDaWeyw2RPBIq8qh/Zd9Lz7tgdwmg==", 554 | "dev": true 555 | }, 556 | "esmangle-evaluator": { 557 | "version": "https://registry.npmjs.org/esmangle-evaluator/-/esmangle-evaluator-1.0.1.tgz", 558 | "integrity": "sha1-Yg2GbvSGGzMR91dm1SqFcrs8YzY=" 559 | }, 560 | "espree": { 561 | "version": "3.5.0", 562 | "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.0.tgz", 563 | "integrity": "sha1-mDWGJb3QVYYeon4oZ+pyn69GPY0=", 564 | "dev": true, 565 | "requires": { 566 | "acorn": "5.1.2", 567 | "acorn-jsx": "3.0.1" 568 | }, 569 | "dependencies": { 570 | "acorn": { 571 | "version": "5.1.2", 572 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.2.tgz", 573 | "integrity": "sha512-o96FZLJBPY1lvTuJylGA9Bk3t/GKPPJG8H0ydQQl01crzwJgspa4AEIq/pVTXigmK0PHVQhiAtn8WMBLL9D2WA==", 574 | "dev": true 575 | } 576 | } 577 | }, 578 | "esprima-fb": { 579 | "version": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz", 580 | "integrity": "sha1-t303q8046gt3Qmu4vCkizmtCZBE=" 581 | }, 582 | "esquery": { 583 | "version": "1.0.0", 584 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", 585 | "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", 586 | "dev": true, 587 | "requires": { 588 | "estraverse": "4.2.0" 589 | } 590 | }, 591 | "esrecurse": { 592 | "version": "4.2.0", 593 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", 594 | "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", 595 | "dev": true, 596 | "requires": { 597 | "estraverse": "4.2.0", 598 | "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz" 599 | } 600 | }, 601 | "estraverse": { 602 | "version": "4.2.0", 603 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", 604 | "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", 605 | "dev": true 606 | }, 607 | "esutils": { 608 | "version": "2.0.2", 609 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 610 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", 611 | "dev": true 612 | }, 613 | "event-emitter": { 614 | "version": "0.3.5", 615 | "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", 616 | "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", 617 | "dev": true, 618 | "requires": { 619 | "d": "1.0.0", 620 | "es5-ext": "0.10.30" 621 | } 622 | }, 623 | "event-lite": { 624 | "version": "0.1.1", 625 | "resolved": "https://registry.npmjs.org/event-lite/-/event-lite-0.1.1.tgz", 626 | "integrity": "sha1-R88IqNN9C2lM23s7F7UfqsZXYIY=", 627 | "dev": true 628 | }, 629 | "exit-hook": { 630 | "version": "1.1.1", 631 | "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", 632 | "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", 633 | "dev": true 634 | }, 635 | "falafel": { 636 | "version": "https://registry.npmjs.org/falafel/-/falafel-1.2.0.tgz", 637 | "integrity": "sha1-wY0k71CRF0pJfzGM0ksCaiXN2rQ=", 638 | "requires": { 639 | "acorn": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", 640 | "foreach": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", 641 | "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 642 | "object-keys": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz" 643 | } 644 | }, 645 | "fast-levenshtein": { 646 | "version": "2.0.6", 647 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 648 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 649 | "dev": true 650 | }, 651 | "figures": { 652 | "version": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", 653 | "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", 654 | "dev": true, 655 | "requires": { 656 | "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 657 | "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz" 658 | } 659 | }, 660 | "file-entry-cache": { 661 | "version": "2.0.0", 662 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", 663 | "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", 664 | "dev": true, 665 | "requires": { 666 | "flat-cache": "1.2.2", 667 | "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz" 668 | } 669 | }, 670 | "flat-cache": { 671 | "version": "1.2.2", 672 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz", 673 | "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=", 674 | "dev": true, 675 | "requires": { 676 | "circular-json": "0.3.3", 677 | "del": "2.2.2", 678 | "graceful-fs": "4.1.11", 679 | "write": "0.2.1" 680 | } 681 | }, 682 | "foreach": { 683 | "version": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", 684 | "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" 685 | }, 686 | "fortune": { 687 | "version": "5.3.1", 688 | "resolved": "https://registry.npmjs.org/fortune/-/fortune-5.3.1.tgz", 689 | "integrity": "sha1-QlYRzwbOAj8WTh8PSlVWolUmJCY=", 690 | "dev": true, 691 | "requires": { 692 | "error-class": "2.0.1", 693 | "event-lite": "0.1.1" 694 | } 695 | }, 696 | "fs.realpath": { 697 | "version": "1.0.0", 698 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 699 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 700 | "dev": true 701 | }, 702 | "generate-function": { 703 | "version": "2.0.0", 704 | "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", 705 | "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", 706 | "dev": true 707 | }, 708 | "generate-object-property": { 709 | "version": "1.2.0", 710 | "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", 711 | "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", 712 | "dev": true, 713 | "requires": { 714 | "is-property": "1.0.2" 715 | } 716 | }, 717 | "glob": { 718 | "version": "7.1.2", 719 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 720 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 721 | "dev": true, 722 | "requires": { 723 | "fs.realpath": "1.0.0", 724 | "inflight": "1.0.6", 725 | "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 726 | "minimatch": "3.0.4", 727 | "once": "1.4.0", 728 | "path-is-absolute": "1.0.1" 729 | } 730 | }, 731 | "globals": { 732 | "version": "9.18.0", 733 | "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", 734 | "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", 735 | "dev": true 736 | }, 737 | "globby": { 738 | "version": "5.0.0", 739 | "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", 740 | "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", 741 | "dev": true, 742 | "requires": { 743 | "array-union": "1.0.2", 744 | "arrify": "1.0.1", 745 | "glob": "7.1.2", 746 | "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", 747 | "pify": "2.3.0", 748 | "pinkie-promise": "2.0.1" 749 | } 750 | }, 751 | "graceful-fs": { 752 | "version": "4.1.11", 753 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 754 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 755 | "dev": true 756 | }, 757 | "has-ansi": { 758 | "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 759 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 760 | "dev": true, 761 | "requires": { 762 | "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz" 763 | } 764 | }, 765 | "hirestime": { 766 | "version": "https://registry.npmjs.org/hirestime/-/hirestime-1.0.7.tgz", 767 | "integrity": "sha1-LVJx6oQ1bOw/JdqMVqlAL4/ApwA=", 768 | "dev": true 769 | }, 770 | "ignore": { 771 | "version": "3.3.5", 772 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.5.tgz", 773 | "integrity": "sha512-JLH93mL8amZQhh/p6mfQgVBH3M6epNq3DfsXsTSuSrInVjwyYlFE1nv2AgfRCC8PoOhM0jwQ5v8s9LgbK7yGDw==", 774 | "dev": true 775 | }, 776 | "immediate": { 777 | "version": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", 778 | "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" 779 | }, 780 | "imurmurhash": { 781 | "version": "0.1.4", 782 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 783 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 784 | "dev": true 785 | }, 786 | "inflight": { 787 | "version": "1.0.6", 788 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 789 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 790 | "dev": true, 791 | "requires": { 792 | "once": "1.4.0", 793 | "wrappy": "1.0.2" 794 | } 795 | }, 796 | "inherits": { 797 | "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 798 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 799 | }, 800 | "inline-process-browser": { 801 | "version": "https://registry.npmjs.org/inline-process-browser/-/inline-process-browser-1.0.0.tgz", 802 | "integrity": "sha1-RqYbFT3TybFiSxoAYm7bT39BTyI=", 803 | "requires": { 804 | "falafel": "https://registry.npmjs.org/falafel/-/falafel-1.2.0.tgz", 805 | "through2": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz" 806 | } 807 | }, 808 | "inquirer": { 809 | "version": "0.12.0", 810 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", 811 | "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", 812 | "dev": true, 813 | "requires": { 814 | "ansi-escapes": "1.4.0", 815 | "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz", 816 | "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 817 | "cli-cursor": "1.0.2", 818 | "cli-width": "2.2.0", 819 | "figures": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", 820 | "lodash": "4.17.4", 821 | "readline2": "1.0.1", 822 | "run-async": "0.1.0", 823 | "rx-lite": "3.1.2", 824 | "string-width": "1.0.2", 825 | "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 826 | "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" 827 | } 828 | }, 829 | "interpret": { 830 | "version": "1.0.3", 831 | "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz", 832 | "integrity": "sha1-y8NcYu7uc/Gat7EKgBURQBr8D5A=", 833 | "dev": true 834 | }, 835 | "is-finite": { 836 | "version": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", 837 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", 838 | "dev": true, 839 | "requires": { 840 | "number-is-nan": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" 841 | } 842 | }, 843 | "is-fullwidth-code-point": { 844 | "version": "1.0.0", 845 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 846 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 847 | "dev": true, 848 | "requires": { 849 | "number-is-nan": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" 850 | } 851 | }, 852 | "is-my-json-valid": { 853 | "version": "2.16.1", 854 | "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz", 855 | "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==", 856 | "dev": true, 857 | "requires": { 858 | "generate-function": "2.0.0", 859 | "generate-object-property": "1.2.0", 860 | "jsonpointer": "4.0.1", 861 | "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" 862 | } 863 | }, 864 | "is-path-cwd": { 865 | "version": "1.0.0", 866 | "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", 867 | "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", 868 | "dev": true 869 | }, 870 | "is-path-in-cwd": { 871 | "version": "1.0.0", 872 | "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", 873 | "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", 874 | "dev": true, 875 | "requires": { 876 | "is-path-inside": "1.0.0" 877 | } 878 | }, 879 | "is-path-inside": { 880 | "version": "1.0.0", 881 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", 882 | "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", 883 | "dev": true, 884 | "requires": { 885 | "path-is-inside": "1.0.2" 886 | } 887 | }, 888 | "is-property": { 889 | "version": "1.0.2", 890 | "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", 891 | "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", 892 | "dev": true 893 | }, 894 | "is-resolvable": { 895 | "version": "1.0.0", 896 | "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", 897 | "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", 898 | "dev": true, 899 | "requires": { 900 | "tryit": "1.0.3" 901 | } 902 | }, 903 | "isarray": { 904 | "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 905 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" 906 | }, 907 | "js-tokens": { 908 | "version": "3.0.2", 909 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", 910 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", 911 | "dev": true 912 | }, 913 | "js-yaml": { 914 | "version": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", 915 | "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=", 916 | "dev": true, 917 | "requires": { 918 | "argparse": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", 919 | "esprima": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz" 920 | }, 921 | "dependencies": { 922 | "esprima": { 923 | "version": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", 924 | "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", 925 | "dev": true 926 | } 927 | } 928 | }, 929 | "json-stable-stringify": { 930 | "version": "1.0.1", 931 | "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", 932 | "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", 933 | "dev": true, 934 | "requires": { 935 | "jsonify": "0.0.0" 936 | } 937 | }, 938 | "jsonify": { 939 | "version": "0.0.0", 940 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", 941 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", 942 | "dev": true 943 | }, 944 | "jsonpointer": { 945 | "version": "4.0.1", 946 | "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", 947 | "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", 948 | "dev": true 949 | }, 950 | "jstransform": { 951 | "version": "https://registry.npmjs.org/jstransform/-/jstransform-3.0.0.tgz", 952 | "integrity": "sha1-olkats7o2XvzvoMNv6IxO4fNZAs=", 953 | "requires": { 954 | "base62": "https://registry.npmjs.org/base62/-/base62-0.1.1.tgz", 955 | "esprima-fb": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz", 956 | "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.1.31.tgz" 957 | } 958 | }, 959 | "levn": { 960 | "version": "0.3.0", 961 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 962 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 963 | "dev": true, 964 | "requires": { 965 | "prelude-ls": "1.1.2", 966 | "type-check": "0.3.2" 967 | } 968 | }, 969 | "lie": { 970 | "version": "https://registry.npmjs.org/lie/-/lie-3.0.2.tgz", 971 | "integrity": "sha1-/9oh17uibzd8rYZdNkmy/Izjn+o=", 972 | "requires": { 973 | "es3ify": "https://registry.npmjs.org/es3ify/-/es3ify-0.1.4.tgz", 974 | "immediate": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", 975 | "inline-process-browser": "https://registry.npmjs.org/inline-process-browser/-/inline-process-browser-1.0.0.tgz", 976 | "unreachable-branch-transform": "https://registry.npmjs.org/unreachable-branch-transform/-/unreachable-branch-transform-0.3.0.tgz" 977 | } 978 | }, 979 | "localforage": { 980 | "version": "https://registry.npmjs.org/localforage/-/localforage-1.4.3.tgz", 981 | "integrity": "sha1-ohJUPDnHx2Qk7dEr9HTEiarKSUw=", 982 | "requires": { 983 | "lie": "https://registry.npmjs.org/lie/-/lie-3.0.2.tgz" 984 | } 985 | }, 986 | "lodash": { 987 | "version": "4.17.4", 988 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 989 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", 990 | "dev": true 991 | }, 992 | "minimatch": { 993 | "version": "3.0.4", 994 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 995 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 996 | "dev": true, 997 | "requires": { 998 | "brace-expansion": "1.1.8" 999 | } 1000 | }, 1001 | "minimist": { 1002 | "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 1003 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 1004 | }, 1005 | "mkdirp": { 1006 | "version": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1007 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 1008 | "requires": { 1009 | "minimist": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" 1010 | } 1011 | }, 1012 | "ms": { 1013 | "version": "2.0.0", 1014 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1015 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 1016 | "dev": true 1017 | }, 1018 | "mute-stream": { 1019 | "version": "0.0.5", 1020 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", 1021 | "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", 1022 | "dev": true 1023 | }, 1024 | "natural-compare": { 1025 | "version": "1.4.0", 1026 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1027 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 1028 | "dev": true 1029 | }, 1030 | "nedb": { 1031 | "version": "https://registry.npmjs.org/nedb/-/nedb-1.8.0.tgz", 1032 | "integrity": "sha1-DjUCzYLABNU1WkPJ5VV3vXvZHYg=", 1033 | "requires": { 1034 | "async": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", 1035 | "binary-search-tree": "https://registry.npmjs.org/binary-search-tree/-/binary-search-tree-0.2.5.tgz", 1036 | "localforage": "https://registry.npmjs.org/localforage/-/localforage-1.4.3.tgz", 1037 | "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1038 | "underscore": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz" 1039 | } 1040 | }, 1041 | "number-is-nan": { 1042 | "version": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 1043 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", 1044 | "dev": true 1045 | }, 1046 | "object-assign": { 1047 | "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", 1048 | "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", 1049 | "dev": true 1050 | }, 1051 | "object-keys": { 1052 | "version": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", 1053 | "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=" 1054 | }, 1055 | "once": { 1056 | "version": "1.4.0", 1057 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1058 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1059 | "dev": true, 1060 | "requires": { 1061 | "wrappy": "1.0.2" 1062 | } 1063 | }, 1064 | "onetime": { 1065 | "version": "1.1.0", 1066 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", 1067 | "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", 1068 | "dev": true 1069 | }, 1070 | "optionator": { 1071 | "version": "0.8.2", 1072 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", 1073 | "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", 1074 | "dev": true, 1075 | "requires": { 1076 | "deep-is": "0.1.3", 1077 | "fast-levenshtein": "2.0.6", 1078 | "levn": "0.3.0", 1079 | "prelude-ls": "1.1.2", 1080 | "type-check": "0.3.2", 1081 | "wordwrap": "1.0.0" 1082 | } 1083 | }, 1084 | "os-homedir": { 1085 | "version": "1.0.2", 1086 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 1087 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", 1088 | "dev": true 1089 | }, 1090 | "parse-ms": { 1091 | "version": "https://registry.npmjs.org/parse-ms/-/parse-ms-1.0.1.tgz", 1092 | "integrity": "sha1-VjRtR0nXjyNDDKDHE4UK75GqNh0=", 1093 | "dev": true 1094 | }, 1095 | "path-is-absolute": { 1096 | "version": "1.0.1", 1097 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1098 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1099 | "dev": true 1100 | }, 1101 | "path-is-inside": { 1102 | "version": "1.0.2", 1103 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", 1104 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", 1105 | "dev": true 1106 | }, 1107 | "path-parse": { 1108 | "version": "1.0.5", 1109 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", 1110 | "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", 1111 | "dev": true 1112 | }, 1113 | "pify": { 1114 | "version": "2.3.0", 1115 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1116 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 1117 | "dev": true 1118 | }, 1119 | "pinkie": { 1120 | "version": "2.0.4", 1121 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 1122 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", 1123 | "dev": true 1124 | }, 1125 | "pinkie-promise": { 1126 | "version": "2.0.1", 1127 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 1128 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", 1129 | "dev": true, 1130 | "requires": { 1131 | "pinkie": "2.0.4" 1132 | } 1133 | }, 1134 | "plur": { 1135 | "version": "https://registry.npmjs.org/plur/-/plur-1.0.0.tgz", 1136 | "integrity": "sha1-24XGgU9eXlo7Se/CjWBP7GKXUVY=", 1137 | "dev": true 1138 | }, 1139 | "pluralize": { 1140 | "version": "1.2.1", 1141 | "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", 1142 | "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", 1143 | "dev": true 1144 | }, 1145 | "prelude-ls": { 1146 | "version": "1.1.2", 1147 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 1148 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 1149 | "dev": true 1150 | }, 1151 | "pretty-ms": { 1152 | "version": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-2.1.0.tgz", 1153 | "integrity": "sha1-QlfCVt8/sLRR1q/6qwIYhBJpgdw=", 1154 | "dev": true, 1155 | "requires": { 1156 | "is-finite": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", 1157 | "parse-ms": "https://registry.npmjs.org/parse-ms/-/parse-ms-1.0.1.tgz", 1158 | "plur": "https://registry.npmjs.org/plur/-/plur-1.0.0.tgz" 1159 | } 1160 | }, 1161 | "private": { 1162 | "version": "https://registry.npmjs.org/private/-/private-0.1.6.tgz", 1163 | "integrity": "sha1-VcapdtD5uvuZJIUTUP5HubX7t8E=" 1164 | }, 1165 | "process-nextick-args": { 1166 | "version": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 1167 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", 1168 | "dev": true 1169 | }, 1170 | "progress": { 1171 | "version": "1.1.8", 1172 | "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", 1173 | "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", 1174 | "dev": true 1175 | }, 1176 | "ramda": { 1177 | "version": "https://registry.npmjs.org/ramda/-/ramda-0.18.0.tgz", 1178 | "integrity": "sha1-xuPF1LmrH3kGcn/e6wORUqhdTbM=", 1179 | "dev": true 1180 | }, 1181 | "readable-stream": { 1182 | "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 1183 | "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", 1184 | "requires": { 1185 | "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 1186 | "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1187 | "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 1188 | "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" 1189 | } 1190 | }, 1191 | "readline2": { 1192 | "version": "1.0.1", 1193 | "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", 1194 | "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", 1195 | "dev": true, 1196 | "requires": { 1197 | "code-point-at": "1.1.0", 1198 | "is-fullwidth-code-point": "1.0.0", 1199 | "mute-stream": "0.0.5" 1200 | } 1201 | }, 1202 | "recast": { 1203 | "version": "https://registry.npmjs.org/recast/-/recast-0.10.43.tgz", 1204 | "integrity": "sha1-uV1Q9tYHYaX2JS4V2AZ4FoSRzn8=", 1205 | "requires": { 1206 | "ast-types": "https://registry.npmjs.org/ast-types/-/ast-types-0.8.15.tgz", 1207 | "esprima-fb": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", 1208 | "private": "https://registry.npmjs.org/private/-/private-0.1.6.tgz", 1209 | "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" 1210 | }, 1211 | "dependencies": { 1212 | "esprima-fb": { 1213 | "version": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", 1214 | "integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk=" 1215 | }, 1216 | "source-map": { 1217 | "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", 1218 | "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" 1219 | } 1220 | } 1221 | }, 1222 | "rechoir": { 1223 | "version": "0.6.2", 1224 | "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", 1225 | "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", 1226 | "dev": true, 1227 | "requires": { 1228 | "resolve": "1.4.0" 1229 | } 1230 | }, 1231 | "require-uncached": { 1232 | "version": "1.0.3", 1233 | "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", 1234 | "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", 1235 | "dev": true, 1236 | "requires": { 1237 | "caller-path": "0.1.0", 1238 | "resolve-from": "1.0.1" 1239 | } 1240 | }, 1241 | "resolve": { 1242 | "version": "1.4.0", 1243 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz", 1244 | "integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==", 1245 | "dev": true, 1246 | "requires": { 1247 | "path-parse": "1.0.5" 1248 | } 1249 | }, 1250 | "resolve-from": { 1251 | "version": "1.0.1", 1252 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", 1253 | "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", 1254 | "dev": true 1255 | }, 1256 | "restore-cursor": { 1257 | "version": "1.0.1", 1258 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", 1259 | "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", 1260 | "dev": true, 1261 | "requires": { 1262 | "exit-hook": "1.1.1", 1263 | "onetime": "1.1.0" 1264 | } 1265 | }, 1266 | "rimraf": { 1267 | "version": "2.6.2", 1268 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", 1269 | "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", 1270 | "dev": true, 1271 | "requires": { 1272 | "glob": "7.1.2" 1273 | } 1274 | }, 1275 | "run-async": { 1276 | "version": "0.1.0", 1277 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", 1278 | "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", 1279 | "dev": true, 1280 | "requires": { 1281 | "once": "1.4.0" 1282 | } 1283 | }, 1284 | "rx": { 1285 | "version": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", 1286 | "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", 1287 | "dev": true 1288 | }, 1289 | "rx-lite": { 1290 | "version": "3.1.2", 1291 | "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", 1292 | "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", 1293 | "dev": true 1294 | }, 1295 | "rx-node": { 1296 | "version": "https://registry.npmjs.org/rx-node/-/rx-node-1.0.2.tgz", 1297 | "integrity": "sha1-FRJAclp56Fc2CrBsxiZ5mWXglN4=", 1298 | "dev": true, 1299 | "requires": { 1300 | "rx": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz" 1301 | } 1302 | }, 1303 | "safe-buffer": { 1304 | "version": "5.1.1", 1305 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 1306 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", 1307 | "dev": true 1308 | }, 1309 | "shelljs": { 1310 | "version": "0.7.8", 1311 | "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", 1312 | "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", 1313 | "dev": true, 1314 | "requires": { 1315 | "glob": "7.1.2", 1316 | "interpret": "1.0.3", 1317 | "rechoir": "0.6.2" 1318 | } 1319 | }, 1320 | "slice-ansi": { 1321 | "version": "0.0.4", 1322 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", 1323 | "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", 1324 | "dev": true 1325 | }, 1326 | "source-map": { 1327 | "version": "https://registry.npmjs.org/source-map/-/source-map-0.1.31.tgz", 1328 | "integrity": "sha1-n3BNDWnZ4TioG63267T94z0VHGE=", 1329 | "requires": { 1330 | "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.0.tgz" 1331 | } 1332 | }, 1333 | "split": { 1334 | "version": "https://registry.npmjs.org/split/-/split-1.0.0.tgz", 1335 | "integrity": "sha1-xDlc5oOrzSVLwo/h2rtuXCfc/64=", 1336 | "dev": true, 1337 | "requires": { 1338 | "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" 1339 | } 1340 | }, 1341 | "sprintf-js": { 1342 | "version": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1343 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 1344 | "dev": true 1345 | }, 1346 | "string_decoder": { 1347 | "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 1348 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" 1349 | }, 1350 | "string-width": { 1351 | "version": "1.0.2", 1352 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 1353 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 1354 | "dev": true, 1355 | "requires": { 1356 | "code-point-at": "1.1.0", 1357 | "is-fullwidth-code-point": "1.0.0", 1358 | "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" 1359 | } 1360 | }, 1361 | "strip-ansi": { 1362 | "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1363 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 1364 | "dev": true, 1365 | "requires": { 1366 | "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz" 1367 | } 1368 | }, 1369 | "strip-bom": { 1370 | "version": "3.0.0", 1371 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", 1372 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", 1373 | "dev": true 1374 | }, 1375 | "strip-json-comments": { 1376 | "version": "2.0.1", 1377 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1378 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 1379 | "dev": true 1380 | }, 1381 | "supports-color": { 1382 | "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 1383 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 1384 | "dev": true 1385 | }, 1386 | "table": { 1387 | "version": "3.8.3", 1388 | "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", 1389 | "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", 1390 | "dev": true, 1391 | "requires": { 1392 | "ajv": "4.11.8", 1393 | "ajv-keywords": "1.5.1", 1394 | "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 1395 | "lodash": "4.17.4", 1396 | "slice-ansi": "0.0.4", 1397 | "string-width": "2.1.1" 1398 | }, 1399 | "dependencies": { 1400 | "ansi-regex": { 1401 | "version": "3.0.0", 1402 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 1403 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 1404 | "dev": true 1405 | }, 1406 | "is-fullwidth-code-point": { 1407 | "version": "2.0.0", 1408 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1409 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 1410 | "dev": true 1411 | }, 1412 | "string-width": { 1413 | "version": "2.1.1", 1414 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 1415 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 1416 | "dev": true, 1417 | "requires": { 1418 | "is-fullwidth-code-point": "2.0.0", 1419 | "strip-ansi": "4.0.0" 1420 | } 1421 | }, 1422 | "strip-ansi": { 1423 | "version": "4.0.0", 1424 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 1425 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 1426 | "dev": true, 1427 | "requires": { 1428 | "ansi-regex": "3.0.0" 1429 | } 1430 | } 1431 | } 1432 | }, 1433 | "tapdance": { 1434 | "version": "5.0.4", 1435 | "resolved": "https://registry.npmjs.org/tapdance/-/tapdance-5.0.4.tgz", 1436 | "integrity": "sha1-Kr8h0cTYEXcDZ7wpktOypoAnXvo=", 1437 | "dev": true 1438 | }, 1439 | "text-table": { 1440 | "version": "0.2.0", 1441 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1442 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 1443 | "dev": true 1444 | }, 1445 | "through": { 1446 | "version": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 1447 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" 1448 | }, 1449 | "through2": { 1450 | "version": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", 1451 | "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", 1452 | "requires": { 1453 | "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 1454 | "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" 1455 | } 1456 | }, 1457 | "tryit": { 1458 | "version": "1.0.3", 1459 | "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", 1460 | "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", 1461 | "dev": true 1462 | }, 1463 | "type-check": { 1464 | "version": "0.3.2", 1465 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 1466 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 1467 | "dev": true, 1468 | "requires": { 1469 | "prelude-ls": "1.1.2" 1470 | } 1471 | }, 1472 | "typedarray": { 1473 | "version": "0.0.6", 1474 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 1475 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 1476 | "dev": true 1477 | }, 1478 | "underscore": { 1479 | "version": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", 1480 | "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=" 1481 | }, 1482 | "unreachable-branch-transform": { 1483 | "version": "https://registry.npmjs.org/unreachable-branch-transform/-/unreachable-branch-transform-0.3.0.tgz", 1484 | "integrity": "sha1-2ZzExudG0mSSiEW2EdtUsPNHTKo=", 1485 | "requires": { 1486 | "esmangle-evaluator": "https://registry.npmjs.org/esmangle-evaluator/-/esmangle-evaluator-1.0.1.tgz", 1487 | "recast": "https://registry.npmjs.org/recast/-/recast-0.10.43.tgz", 1488 | "through2": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz" 1489 | } 1490 | }, 1491 | "user-home": { 1492 | "version": "2.0.0", 1493 | "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", 1494 | "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", 1495 | "dev": true, 1496 | "requires": { 1497 | "os-homedir": "1.0.2" 1498 | } 1499 | }, 1500 | "util-deprecate": { 1501 | "version": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1502 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 1503 | "dev": true 1504 | }, 1505 | "wordwrap": { 1506 | "version": "1.0.0", 1507 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", 1508 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", 1509 | "dev": true 1510 | }, 1511 | "wrappy": { 1512 | "version": "1.0.2", 1513 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1514 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1515 | "dev": true 1516 | }, 1517 | "write": { 1518 | "version": "0.2.1", 1519 | "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", 1520 | "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", 1521 | "dev": true, 1522 | "requires": { 1523 | "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz" 1524 | } 1525 | }, 1526 | "xtend": { 1527 | "version": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 1528 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" 1529 | } 1530 | } 1531 | } 1532 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fortune-nedb", 3 | "description": "NeDB adapter for Fortune.", 4 | "version": "1.1.7", 5 | "license": "MIT", 6 | "repository": { 7 | "type": "git", 8 | "url": "https://github.com/fortunejs/fortune-nedb" 9 | }, 10 | "scripts": { 11 | "lint": "eslint .", 12 | "test": "npm run lint && node test | tf-dot" 13 | }, 14 | "main": "./lib/index.js", 15 | "dependencies": { 16 | "nedb": "^1.8.0" 17 | }, 18 | "devDependencies": { 19 | "@tap-format/dot": "^0.2.0", 20 | "eslint": "^3.19.0", 21 | "eslint-config-boss": "^1.0.6", 22 | "fortune": "^5.3.1", 23 | "mkdirp": "^0.5.1", 24 | "rimraf": "^2.6.2", 25 | "tapdance": "^5.0.4" 26 | }, 27 | "files": [ 28 | "lib/", 29 | "LICENSE" 30 | ], 31 | "eslintConfig": { 32 | "extends": "boss", 33 | "rules": { 34 | "strict": 0 35 | } 36 | }, 37 | "engines": { 38 | "node": ">=4.5" 39 | }, 40 | "keywords": [ 41 | "fortune", 42 | "nedb", 43 | "adapter" 44 | ] 45 | } 46 | -------------------------------------------------------------------------------- /test/index.js: -------------------------------------------------------------------------------- 1 | const testAdapter = require('fortune/test/adapter') 2 | const adapter = require('../lib') 3 | 4 | testAdapter(adapter, { 5 | dbPath: __dirname 6 | }) 7 | --------------------------------------------------------------------------------