Browse Source

feat: Kernel module

NGPixel 7 years ago
parent
commit
c26fae2ede
13 changed files with 264 additions and 560 deletions
  1. 5 8
      package.json
  2. 4 35
      server/index.js
  3. 0 90
      server/init.js
  4. 2 16
      server/master.js
  5. 10 1
      server/models/user.js
  6. 3 2
      server/modules/config.js
  7. 6 6
      server/modules/db.js
  8. 91 0
      server/modules/kernel.js
  9. 1 1
      server/modules/queue.js
  10. 0 2
      server/worker.js
  11. 0 21
      tools/fuse_tasks.js
  12. 64 14
      wiki.js
  13. 78 364
      yarn.lock

+ 5 - 8
package.json

@@ -42,7 +42,7 @@
     "bcryptjs-then": "1.0.1",
     "bluebird": "3.5.1",
     "body-parser": "1.18.2",
-    "bull": "3.2.0",
+    "bull": "3.3.0",
     "bunyan": "1.8.12",
     "cheerio": "1.0.0-rc.2",
     "child-process-promise": "2.2.1",
@@ -66,7 +66,7 @@
     "graphql": "0.10.5",
     "graphql-tools": "2.2.1",
     "highlight.js": "9.12.0",
-    "i18next": "9.0.1",
+    "i18next": "9.1.0",
     "i18next-express-middleware": "1.0.7",
     "i18next-localstorage-cache": "1.1.1",
     "i18next-node-fs-backend": "1.0.0",
@@ -76,7 +76,6 @@
     "js-yaml": "3.10.0",
     "jsonwebtoken": "8.0.1",
     "klaw": "2.1.0",
-    "levelup": "1.3.9",
     "lodash": "4.17.4",
     "markdown-it": "8.4.0",
     "markdown-it-abbr": "1.0.4",
@@ -89,7 +88,6 @@
     "markdown-it-mathjax": "2.0.0",
     "markdown-it-task-lists": "2.0.1",
     "mathjax-node": "1.2.1",
-    "memdown": "1.4.1",
     "mime-types": "2.1.17",
     "moment": "2.18.1",
     "moment-timezone": "0.5.13",
@@ -106,21 +104,19 @@
     "passport-local": "1.0.0",
     "passport-slack": "0.0.7",
     "passport-windowslive": "1.0.2",
-    "pg": "7.3.0",
+    "pg": "6.4.2",
     "pg-hstore": "2.3.2",
     "pg-promise": "6.10.3",
     "pm2": "2.7.1",
     "pug": "2.0.0-rc.4",
+    "qr-image": "3.2.0",
     "read-chunk": "2.1.0",
     "remove-markdown": "0.2.2",
     "request": "2.83.0",
-    "search-index-adder": "0.3.9",
-    "search-index-searcher": "0.2.10",
     "semver": "5.4.1",
     "sequelize": "4.13.5",
     "serve-favicon": "2.4.5",
     "simplemde": "1.11.2",
-    "stopword": "0.1.8",
     "stream-to-promise": "2.2.0",
     "tar": "4.0.1",
     "through2": "2.0.3",
@@ -135,6 +131,7 @@
     "apollo-client": "^1.9.3",
     "autoprefixer": "7.1.5",
     "babel-cli": "6.26.0",
+    "babel-core": "6.26.0",
     "babel-jest": "21.2.0",
     "babel-preset-env": "1.6.0",
     "babel-preset-es2015": "6.24.1",

+ 4 - 35
server/index.js

@@ -1,5 +1,3 @@
-'use strict'
-
 // ===========================================
 // Wiki.js
 // Licensed under AGPLv3
@@ -13,7 +11,8 @@ let wiki = {
   IS_MASTER: cluster.isMaster,
   ROOTPATH: process.cwd(),
   SERVERPATH: path.join(process.cwd(), 'server'),
-  configSvc: require('./modules/config')
+  configSvc: require('./modules/config'),
+  kernel: require('./modules/kernel')
 }
 global.wiki = wiki
 
@@ -38,37 +37,7 @@ wiki.logger = require('./modules/logger').init()
 wiki.db = require('./modules/db').init()
 
 // ----------------------------------------
-// Start Cluster
+// Start Kernel
 // ----------------------------------------
 
-const numCPUs = require('os').cpus().length
-let numWorkers = (wiki.config.workers > 0) ? wiki.config.workers : numCPUs
-if (numWorkers > numCPUs) {
-  numWorkers = numCPUs
-}
-
-if (cluster.isMaster) {
-  wiki.logger.info('=======================================')
-  wiki.logger.info('= Wiki.js =============================')
-  wiki.logger.info('=======================================')
-
-  require('./master').then(() => {
-    // -> Create background workers
-    for (let i = 0; i < numWorkers; i++) {
-      cluster.fork()
-    }
-
-    // -> Queue post-init tasks
-
-    wiki.queue.uplClearTemp.add({}, {
-      repeat: { cron: '*/15 * * * *' }
-    })
-  })
-
-  cluster.on('exit', (worker, code, signal) => {
-    wiki.logger.info(`Background Worker #${worker.id} was terminated.`)
-  })
-} else {
-  wiki.logger.info(`Background Worker #${cluster.worker.id} is initializing...`)
-  require('./worker')
-}
+wiki.kernel.init()

+ 0 - 90
server/init.js

@@ -1,90 +0,0 @@
-'use strict'
-
-const Promise = require('bluebird')
-const fs = Promise.promisifyAll(require('fs-extra'))
-const pm2 = Promise.promisifyAll(require('pm2'))
-const ora = require('ora')
-const path = require('path')
-
-const ROOTPATH = process.cwd()
-
-module.exports = {
-  /**
-   * Detect the most appropriate start mode
-   */
-  startDetect: function () {
-    if (process.env.WIKI_JS_HEROKU) {
-      return this.startInHerokuMode()
-    } else {
-      return this.startInBackgroundMode()
-    }
-  },
-  /**
-   * Start in background mode
-   */
-  startInBackgroundMode: function () {
-    let spinner = ora('Initializing...').start()
-    return fs.emptyDirAsync(path.join(ROOTPATH, './logs')).then(() => {
-      return pm2.connectAsync().then(() => {
-        return pm2.startAsync({
-          name: 'wiki',
-          script: 'server',
-          cwd: ROOTPATH,
-          output: path.join(ROOTPATH, './logs/wiki-output.log'),
-          error: path.join(ROOTPATH, './logs/wiki-error.log'),
-          minUptime: 5000,
-          maxRestarts: 5
-        }).then(() => {
-          spinner.succeed('Wiki.js has started successfully.')
-        }).finally(() => {
-          pm2.disconnect()
-        })
-      })
-    }).catch(err => {
-      spinner.fail(err)
-      process.exit(1)
-    })
-  },
-  /**
-   * Start in Heroku mode
-   */
-  startInHerokuMode: function () {
-    console.warn('Incorrect command on Heroku, use instead: node server')
-    process.exit(1)
-  },
-  /**
-   * Stop Wiki.js process(es)
-   */
-  stop () {
-    let spinner = ora('Shutting down Wiki.js...').start()
-    return pm2.connectAsync().then(() => {
-      return pm2.stopAsync('wiki').then(() => {
-        spinner.succeed('Wiki.js has stopped successfully.')
-      }).finally(() => {
-        pm2.disconnect()
-      })
-    }).catch(err => {
-      spinner.fail(err)
-      process.exit(1)
-    })
-  },
-  /**
-   * Restart Wiki.js process(es)
-   */
-  restart: function () {
-    let self = this
-    return self.stop().delay(1000).then(() => {
-      self.startDetect()
-    })
-  },
-  /**
-   * Start the web-based configuration wizard
-   *
-   * @param {Number} port Port to bind the HTTP server on
-   */
-  configure (port) {
-    port = port || 3000
-    let spinner = ora('Initializing interactive setup...').start()
-    require('./configure')(port, spinner)
-  }
-}

+ 2 - 16
server/master.js

@@ -1,17 +1,6 @@
-'use strict'
-
 /* global wiki */
 
-const Promise = require('bluebird')
-
-wiki.redis = require('./modules/redis').init()
-wiki.queue = require('./modules/queue').init()
-
-module.exports = Promise.join(
-  wiki.db.onReady,
-  wiki.configSvc.loadFromDb(),
-  wiki.queue.clean()
-).then(() => {
+module.exports = () => {
   // ----------------------------------------
   // Load global modules
   // ----------------------------------------
@@ -194,7 +183,4 @@ module.exports = Promise.join(
   })
 
   return true
-}).catch(err => {
-  wiki.logger.error(err)
-  process.exit(1)
-})
+}

+ 10 - 1
server/models/user.js

@@ -19,7 +19,7 @@ module.exports = (sequelize, DataTypes) => {
       }
     },
     provider: {
-      type: DataTypes.ENUM(wiki.data.authProviders),
+      type: DataTypes.STRING,
       allowNull: false
     },
     providerId: {
@@ -37,6 +37,15 @@ module.exports = (sequelize, DataTypes) => {
     role: {
       type: DataTypes.ENUM('admin', 'user', 'guest'),
       allowNull: false
+    },
+    tfaIsActive: {
+      type: DataTypes.BOOLEAN,
+      allowNull: false,
+      defaultValue: false
+    },
+    tfaSecret: {
+      type: DataTypes.STRING,
+      allowNull: true
     }
   }, {
     timestamps: true,

+ 3 - 2
server/modules/config.js

@@ -75,13 +75,14 @@ module.exports = {
         }
       }
     }).then(results => {
-      if (_.isArray(results) && results.length > 0) {
+      if (_.isArray(results) && results.length === subsets.length) {
         results.forEach(result => {
           wiki.config[result.key] = result.config
         })
         return true
       } else {
-        return Promise.reject(new Error('Invalid DB Configuration result set'))
+        wiki.logger.warn('DB Configuration is empty or incomplete.')
+        return false
       }
     })
   }

+ 6 - 6
server/modules/db.js

@@ -75,7 +75,7 @@ module.exports = {
         min: 0,
         idle: 10000
       },
-      logging: false,
+      logging: log => { wiki.logger.log('verbose', log) },
       operatorsAliases
     })
 
@@ -92,10 +92,10 @@ module.exports = {
 
     fs
       .readdirSync(dbModelsPath)
-      .filter(function (file) {
+      .filter(file => {
         return (file.indexOf('.') !== 0 && file.indexOf('_') !== 0)
       })
-      .forEach(function (file) {
+      .forEach(file => {
         let modelName = _.upperFirst(_.camelCase(_.split(file, '.')[0]))
         self[modelName] = self.inst.import(path.join(dbModelsPath, file))
       })
@@ -110,8 +110,8 @@ module.exports = {
       // -> Sync DB Schemas
       syncSchemas() {
         return self.inst.sync({
-          force: false,
-          logging: false
+          force: true,
+          logging: log => { wiki.logger.log('verbose', log) }
         })
       },
       // -> Set Connection App Name
@@ -129,7 +129,7 @@ module.exports = {
 
     // Perform init tasks
 
-    self.onReady = Promise.each(initTasksQueue, t => t())
+    self.onReady = Promise.each(initTasksQueue, t => t()).return(true)
 
     return self
   }

+ 91 - 0
server/modules/kernel.js

@@ -0,0 +1,91 @@
+const cluster = require('cluster')
+const Promise = require('bluebird')
+const _ = require('lodash')
+
+/* global wiki */
+
+module.exports = {
+  numWorkers: 1,
+  workers: [],
+  init() {
+    if (cluster.isMaster) {
+      wiki.logger.info('=======================================')
+      wiki.logger.info('= Wiki.js =============================')
+      wiki.logger.info('=======================================')
+
+      wiki.redis = require('./redis').init()
+      wiki.queue = require('./queue').init()
+
+      this.setWorkerLimit()
+      this.bootMaster()
+    } else {
+      this.bootWorker()
+    }
+  },
+  /**
+   * Pre-Master Boot Sequence
+   */
+  preBootMaster() {
+    return Promise.mapSeries([
+      () => { return wiki.db.onReady },
+      () => { return wiki.configSvc.loadFromDb() },
+      () => { return wiki.queue.clean() }
+    ], fn => { return fn() })
+  },
+  /**
+   * Boot Master Process
+   */
+  bootMaster() {
+    this.preBootMaster().then(sequenceResults => {
+      if (_.every(sequenceResults, rs => rs === true)) {
+        this.postBootMaster()
+      } else {
+        wiki.logger.info('Starting configuration manager...')
+        require('../configure')()
+      }
+      return true
+    }).catch(err => {
+      wiki.logger.error(err)
+      process.exit(1)
+    })
+  },
+  /**
+   * Post-Master Boot Sequence
+   */
+  postBootMaster() {
+    require('../master')().then(() => {
+      _.times(this.numWorker, this.spawnWorker)
+
+      wiki.queue.uplClearTemp.add({}, {
+        repeat: { cron: '*/15 * * * *' }
+      })
+    })
+
+    cluster.on('exit', (worker, code, signal) => {
+      wiki.logger.info(`Background Worker #${worker.id} was terminated.`)
+    })
+  },
+  /**
+   * Boot Worker Process
+   */
+  bootWorker() {
+    wiki.logger.info(`Background Worker #${cluster.worker.id} is initializing...`)
+    require('../worker')
+  },
+  /**
+   * Spawn new Worker process
+   */
+  spawnWorker() {
+    this.workers.push(cluster.fork())
+  },
+  /**
+   * Set Worker count based on config + system capabilities
+   */
+  setWorkerLimit() {
+    const numCPUs = require('os').cpus().length
+    this.numWorkers = (wiki.config.workers > 0) ? wiki.config.workers : numCPUs
+    if (this.numWorkers > numCPUs) {
+      this.numWorkers = numCPUs
+    }
+  }
+}

+ 1 - 1
server/modules/queue.js

@@ -30,7 +30,7 @@ module.exports = {
       })
     }).then(() => {
       wiki.logger.info('Purging old queue jobs: OK')
-    }).catch(err => {
+    }).return(true).catch(err => {
       wiki.logger.error(err)
     })
   }

+ 0 - 2
server/worker.js

@@ -1,5 +1,3 @@
-'use strict'
-
 /* global wiki */
 
 const Promise = require('bluebird')

+ 0 - 21
tools/fuse_tasks.js

@@ -65,27 +65,6 @@ module.exports = Promise.mapSeries([
       }
     })
   },
-  /**
-   * i18n
-   */
-  () => {
-    console.info(colors.white('  └── ') + colors.green('Copying i18n client files...'))
-    return fs.ensureDirAsync('./assets/js/i18n').then(() => {
-      return fs.readJsonAsync('./server/locales/en/browser.json').then(enContent => {
-        return fs.readdirAsync('./server/locales').then(langs => {
-          return Promise.map(langs, lang => {
-            console.info(colors.white('      ' + lang + '.json'))
-            let outputPath = path.join('./assets/js/i18n', lang + '.json')
-            return fs.readJsonAsync(path.join('./server/locales', lang + 'browser.json'), 'utf8').then((content) => {
-              return fs.outputJsonAsync(outputPath, _.defaultsDeep(content, enContent))
-            }).catch(err => { // eslint-disable-line handle-callback-err
-              return fs.outputJsonAsync(outputPath, enContent)
-            })
-          })
-        })
-      })
-    })
-  },
   /**
    * Delete Fusebox cache
    */

+ 64 - 14
wiki.js

@@ -1,13 +1,72 @@
 #!/usr/bin/env node
-'use strict'
 
 // ===========================================
 // Wiki.js
-// 1.0.1
+// 2.0
 // Licensed under AGPLv3
 // ===========================================
 
-const init = require('./server/init')
+const Promise = require('bluebird')
+const fs = Promise.promisifyAll(require('fs-extra'))
+const pm2 = Promise.promisifyAll(require('pm2'))
+const ora = require('ora')
+const path = require('path')
+
+const ROOTPATH = process.cwd()
+
+const init = {
+  /**
+   * Start in background mode
+   */
+  start () {
+    let spinner = ora('Initializing...').start()
+    return fs.emptyDirAsync(path.join(ROOTPATH, './logs')).then(() => {
+      return pm2.connectAsync().then(() => {
+        return pm2.startAsync({
+          name: 'wiki',
+          script: 'server',
+          cwd: ROOTPATH,
+          output: path.join(ROOTPATH, './logs/wiki-output.log'),
+          error: path.join(ROOTPATH, './logs/wiki-error.log'),
+          minUptime: 5000,
+          maxRestarts: 5
+        }).then(() => {
+          spinner.succeed('Wiki.js has started successfully.')
+        }).finally(() => {
+          pm2.disconnect()
+        })
+      })
+    }).catch(err => {
+      spinner.fail(err)
+      process.exit(1)
+    })
+  },
+  /**
+   * Stop Wiki.js process(es)
+   */
+  stop () {
+    let spinner = ora('Shutting down Wiki.js...').start()
+    return pm2.connectAsync().then(() => {
+      return pm2.stopAsync('wiki').then(() => {
+        spinner.succeed('Wiki.js has stopped successfully.')
+      }).finally(() => {
+        pm2.disconnect()
+      })
+    }).catch(err => {
+      spinner.fail(err)
+      process.exit(1)
+    })
+  },
+  /**
+   * Restart Wiki.js process(es)
+   */
+  restart: function () {
+    let self = this
+    return self.stop().delay(1000).then(() => {
+      self.startDetect()
+    })
+  }
+}
 
 require('yargs') // eslint-disable-line no-unused-expressions
   .usage('Usage: node $0 <cmd> [args]')
@@ -16,7 +75,7 @@ require('yargs') // eslint-disable-line no-unused-expressions
     alias: ['boot', 'init'],
     desc: 'Start Wiki.js process',
     handler: argv => {
-      init.startDetect()
+      init.start()
     }
   })
   .command({
@@ -35,18 +94,9 @@ require('yargs') // eslint-disable-line no-unused-expressions
       init.restart()
     }
   })
-  .command({
-    command: 'configure [port]',
-    alias: ['config', 'conf', 'cfg', 'setup'],
-    desc: 'Configure Wiki.js using the web-based setup wizard',
-    builder: (yargs) => yargs.default('port', 3000),
-    handler: argv => {
-      init.configure(argv.port)
-    }
-  })
   .recommendCommands()
   .demandCommand(1, 'You must provide one of the accepted commands above.')
   .help()
   .version()
-  .epilogue('Read the docs at https://wiki.requarks.io')
+  .epilogue('Read the docs at https://docs.requarks.io/wiki')
   .argv

+ 78 - 364
yarn.lock

@@ -126,13 +126,6 @@
     "@types/express-serve-static-core" "*"
     "@types/mime" "*"
 
-JSONStream@^1.2.1:
-  version "1.3.1"
-  resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.1.tgz#707f761e01dae9e16f1bcf93703b78c70966579a"
-  dependencies:
-    jsonparse "^1.2.0"
-    through ">=2.2.7 <3"
-
 abab@^1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d"
@@ -141,24 +134,6 @@ abbrev@1:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f"
 
-abstract-leveldown@~2.4.0:
-  version "2.4.1"
-  resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.4.1.tgz#b3bfedb884eb693a12775f0c55e9f0a420ccee64"
-  dependencies:
-    xtend "~4.0.0"
-
-abstract-leveldown@~2.6.1:
-  version "2.6.1"
-  resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.6.1.tgz#f9014a5669b746418e145168dea49a044ae15900"
-  dependencies:
-    xtend "~4.0.0"
-
-abstract-leveldown@~2.7.1:
-  version "2.7.1"
-  resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.7.1.tgz#d14d344e93561199b9969238f01a56eafd9b58af"
-  dependencies:
-    xtend "~4.0.0"
-
 accepts@~1.2.12:
   version "1.2.13"
   resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.2.13.tgz#e5f1f3928c6d95fd96558c36ec3d9d0de4a6ecea"
@@ -538,7 +513,7 @@ async@1.5, async@^1.4.0, async@^1.5:
   version "1.5.2"
   resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
 
-async@^2.1.4, async@^2.3.0, async@^2.5:
+async@^2.1.4, async@^2.5:
   version "2.5.0"
   resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d"
   dependencies:
@@ -623,6 +598,30 @@ babel-code-frame@^6.26.0:
     esutils "^2.0.2"
     js-tokens "^3.0.2"
 
+babel-core@6.26.0, babel-core@^6.26.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8"
+  dependencies:
+    babel-code-frame "^6.26.0"
+    babel-generator "^6.26.0"
+    babel-helpers "^6.24.1"
+    babel-messages "^6.23.0"
+    babel-register "^6.26.0"
+    babel-runtime "^6.26.0"
+    babel-template "^6.26.0"
+    babel-traverse "^6.26.0"
+    babel-types "^6.26.0"
+    babylon "^6.18.0"
+    convert-source-map "^1.5.0"
+    debug "^2.6.8"
+    json5 "^0.5.1"
+    lodash "^4.17.4"
+    minimatch "^3.0.4"
+    path-is-absolute "^1.0.1"
+    private "^0.1.7"
+    slash "^1.0.0"
+    source-map "^0.5.6"
+
 babel-core@^6.0.0, babel-core@^6.24.1:
   version "6.25.0"
   resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.25.0.tgz#7dd42b0463c742e9d5296deb3ec67a9322dad729"
@@ -647,30 +646,6 @@ babel-core@^6.0.0, babel-core@^6.24.1:
     slash "^1.0.0"
     source-map "^0.5.0"
 
-babel-core@^6.26.0:
-  version "6.26.0"
-  resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8"
-  dependencies:
-    babel-code-frame "^6.26.0"
-    babel-generator "^6.26.0"
-    babel-helpers "^6.24.1"
-    babel-messages "^6.23.0"
-    babel-register "^6.26.0"
-    babel-runtime "^6.26.0"
-    babel-template "^6.26.0"
-    babel-traverse "^6.26.0"
-    babel-types "^6.26.0"
-    babylon "^6.18.0"
-    convert-source-map "^1.5.0"
-    debug "^2.6.8"
-    json5 "^0.5.1"
-    lodash "^4.17.4"
-    minimatch "^3.0.4"
-    path-is-absolute "^1.0.1"
-    private "^0.1.7"
-    slash "^1.0.0"
-    source-map "^0.5.6"
-
 babel-generator@^6.18.0, babel-generator@^6.25.0:
   version "6.25.0"
   resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.25.0.tgz#33a1af70d5f2890aeb465a4a7793c1df6a9ea9fc"
@@ -1402,20 +1377,10 @@ binary-extensions@^1.0.0:
   version "1.8.0"
   resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774"
 
-bindings@~1.2.1:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11"
-
 bisection@:
   version "0.0.3"
   resolved "https://registry.yarnpkg.com/bisection/-/bisection-0.0.3.tgz#9891d506d86ec7d50910c5157bb592dbb03f33db"
 
-bl@^1.0.0:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.1.tgz#cac328f7bee45730d404b692203fcb590e172d5e"
-  dependencies:
-    readable-stream "^2.0.5"
-
 blessed@^0.1.81:
   version "0.1.81"
   resolved "https://registry.yarnpkg.com/blessed/-/blessed-0.1.81.tgz#f962d687ec2c369570ae71af843256e6d0ca1129"
@@ -1558,9 +1523,9 @@ builtin-modules@^1.0.0, builtin-modules@^1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
 
-bull@3.2.0:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/bull/-/bull-3.2.0.tgz#4fd186c4dba46ceb1743108042abe4013a3dd036"
+bull@3.3.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/bull/-/bull-3.3.0.tgz#79fc48f0ab6c63cc10fc053adfec4ddcbbc5dd44"
   dependencies:
     bluebird "^3.5.0"
     cron-parser "^2.4.1"
@@ -1579,7 +1544,7 @@ bunyan@1.8.12:
     mv "~2"
     safe-json-stringify "~1"
 
-bunyan@^1.8.1, bunyan@^1.8.10, bunyan@^1.8.3:
+bunyan@^1.8.3:
   version "1.8.10"
   resolved "https://registry.yarnpkg.com/bunyan/-/bunyan-1.8.10.tgz#201fedd26c7080b632f416072f53a90b9a52981c"
   optionalDependencies:
@@ -2228,12 +2193,6 @@ default-require-extensions@^1.0.0:
   dependencies:
     strip-bom "^2.0.0"
 
-deferred-leveldown@~1.2.1:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-1.2.1.tgz#5d25c3310f5fe909946f6240dc9f90dd109a71ef"
-  dependencies:
-    abstract-leveldown "~2.4.0"
-
 define-properties@^1.1.1:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94"
@@ -2314,14 +2273,6 @@ diff@^3.3.1:
   version "3.3.1"
   resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75"
 
-docproc@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/docproc/-/docproc-1.0.1.tgz#12f572e0f0eec1fa0985094e7042308f09a8e8d5"
-  dependencies:
-    pumpify "^1.3.5"
-    term-frequency "^0.0.15"
-    term-vector "^0.1.2"
-
 doctrine@1.5.0:
   version "1.5.0"
   resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
@@ -2417,15 +2368,6 @@ duplexer@~0.1.1:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
 
-duplexify@^3.1.2:
-  version "3.5.0"
-  resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.0.tgz#1aa773002e1578457e9d9d4a50b0ccaaebcbd604"
-  dependencies:
-    end-of-stream "1.0.0"
-    inherits "^2.0.1"
-    readable-stream "^2.0.0"
-    stream-shift "^1.0.0"
-
 eachr@^3.2.0:
   version "3.2.0"
   resolved "https://registry.yarnpkg.com/eachr/-/eachr-3.2.0.tgz#2c35e43ea086516f7997cf80b7aa64d55a4a4484"
@@ -2474,18 +2416,6 @@ encoding@^0.1.11:
   dependencies:
     iconv-lite "~0.4.13"
 
-end-of-stream@1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.0.0.tgz#d4596e702734a93e40e9af864319eabd99ff2f0e"
-  dependencies:
-    once "~1.3.0"
-
-end-of-stream@^1.0.0, end-of-stream@^1.1.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.0.tgz#7a90d833efda6cfa6eac0f4949dbb0fad3a63206"
-  dependencies:
-    once "^1.4.0"
-
 end-of-stream@~1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.1.0.tgz#e9353258baa9108965efc41cb0ef8ade2f3cfb07"
@@ -2496,7 +2426,7 @@ entities@^1.1.1, entities@~1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
 
-errno@^0.1.4, errno@~0.1.1:
+errno@^0.1.4:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
   dependencies:
@@ -2768,10 +2698,6 @@ expand-range@^1.8.1:
   dependencies:
     fill-range "^2.1.0"
 
-expand-template@^1.0.2:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-1.0.3.tgz#6c303323177a62b1b22c070279f7861287b69b1a"
-
 expect@^21.2.1:
   version "21.2.1"
   resolved "https://registry.yarnpkg.com/expect/-/expect-21.2.1.tgz#003ac2ac7005c3c29e73b38a272d4afadd6d1d7b"
@@ -2963,10 +2889,6 @@ fast-deep-equal@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff"
 
-fast-future@~1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/fast-future/-/fast-future-1.0.2.tgz#8435a9aaa02d79248d17d704e76259301d99280a"
-
 fast-levenshtein@~2.0.4:
   version "2.0.6"
   resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
@@ -3315,6 +3237,10 @@ gaze@^1.0.0:
   dependencies:
     globule "^1.0.0"
 
+generic-pool@2.4.3:
+  version "2.4.3"
+  resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-2.4.3.tgz#780c36f69dfad05a5a045dd37be7adca11a4f6ff"
+
 generic-pool@^3.1.8:
   version "3.1.8"
   resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.1.8.tgz#09844b6545bc9177ec218bd35d4ad894c65be271"
@@ -3356,10 +3282,6 @@ git-wrapper2-promise@0.2.9:
   dependencies:
     child-process-promise "^1.1.0"
 
-github-from-package@0.0.0:
-  version "0.0.0"
-  resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce"
-
 "gkt@https://tgz.pm2.io/gkt-1.0.0.tgz":
   version "1.0.0"
   resolved "https://tgz.pm2.io/gkt-1.0.0.tgz#405502b007f319c3f47175c4474527300f2ab5ad"
@@ -3724,9 +3646,9 @@ i18next-xhr-backend@1.4.3:
   version "1.4.3"
   resolved "https://registry.yarnpkg.com/i18next-xhr-backend/-/i18next-xhr-backend-1.4.3.tgz#d72f70536a3bf6a3892261dde352bc77d708886a"
 
-i18next@9.0.1:
-  version "9.0.1"
-  resolved "https://registry.yarnpkg.com/i18next/-/i18next-9.0.1.tgz#8b8a55d017c1e256df9700ded277d47c53cd833b"
+i18next@9.1.0:
+  version "9.1.0"
+  resolved "https://registry.yarnpkg.com/i18next/-/i18next-9.1.0.tgz#408005fe262a990c8d93946a6de0c77bba11667b"
 
 iconv-lite@0.4.13:
   version "0.4.13"
@@ -3760,10 +3682,6 @@ image-size@0.6.1:
   version "0.6.1"
   resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.6.1.tgz#98122a562d59dcc097ef1b2c8191866eb8f5d663"
 
-immediate@^3.2.3:
-  version "3.2.3"
-  resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c"
-
 import-lazy@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
@@ -3850,10 +3768,6 @@ interpret@^1.0.0:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90"
 
-intersect-arrays-to-stream@^0.0.3:
-  version "0.0.3"
-  resolved "https://registry.yarnpkg.com/intersect-arrays-to-stream/-/intersect-arrays-to-stream-0.0.3.tgz#fc0318953e872f12a12f3d33d04f4e7630e59f3b"
-
 invariant@^2.2.0, invariant@^2.2.2:
   version "2.2.2"
   resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
@@ -4594,10 +4508,6 @@ jsonify@~0.0.0:
   version "0.0.0"
   resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
 
-jsonparse@^1.2.0:
-  version "1.3.1"
-  resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
-
 jsonwebtoken@8.0.1:
   version "8.0.1"
   resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.0.1.tgz#50daef8d0a8c7de2cd06bc1013b75b04ccf3f0cf"
@@ -4726,63 +4636,6 @@ lego-api@^1.0.7:
   dependencies:
     chain-able "^3.0.0"
 
-level-codec@~6.1.0:
-  version "6.1.0"
-  resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-6.1.0.tgz#f5df0a99582f76dac43855151ab6f4e4d0d60045"
-
-level-codec@~7.0.0:
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-7.0.0.tgz#c755b68d0d44ffa0b1cba044b8f81a55a14ad39b"
-
-level-errors@^1.0.3, level-errors@~1.0.3:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.0.4.tgz#3585e623974c737a93755492a43c0267cda4425f"
-  dependencies:
-    errno "~0.1.1"
-
-level-iterator-stream@~1.3.0:
-  version "1.3.1"
-  resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz#e43b78b1a8143e6fa97a4f485eb8ea530352f2ed"
-  dependencies:
-    inherits "^2.0.1"
-    level-errors "^1.0.3"
-    readable-stream "^1.0.33"
-    xtend "^4.0.0"
-
-leveldown@^1.6.0, leveldown@^1.7.1:
-  version "1.7.2"
-  resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-1.7.2.tgz#5e3467bb27ee246a4a7b8dbd8fb2b16206a6eb8b"
-  dependencies:
-    abstract-leveldown "~2.6.1"
-    bindings "~1.2.1"
-    fast-future "~1.0.2"
-    nan "~2.6.1"
-    prebuild-install "^2.1.0"
-
-levelup@1.3.9:
-  version "1.3.9"
-  resolved "https://registry.yarnpkg.com/levelup/-/levelup-1.3.9.tgz#2dbcae845b2bb2b6bea84df334c475533bbd82ab"
-  dependencies:
-    deferred-leveldown "~1.2.1"
-    level-codec "~7.0.0"
-    level-errors "~1.0.3"
-    level-iterator-stream "~1.3.0"
-    prr "~1.0.1"
-    semver "~5.4.1"
-    xtend "~4.0.0"
-
-levelup@^1.3.8:
-  version "1.3.8"
-  resolved "https://registry.yarnpkg.com/levelup/-/levelup-1.3.8.tgz#fb442c488efbea1043f7eb9929a792a74fbd1da6"
-  dependencies:
-    deferred-leveldown "~1.2.1"
-    level-codec "~6.1.0"
-    level-errors "~1.0.3"
-    level-iterator-stream "~1.3.0"
-    prr "~1.0.1"
-    semver "~5.1.0"
-    xtend "~4.0.0"
-
 leven@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
@@ -4932,10 +4785,6 @@ lodash.includes@^4.3.0:
   version "4.3.0"
   resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f"
 
-lodash.intersection@^4.4.0:
-  version "4.4.0"
-  resolved "https://registry.yarnpkg.com/lodash.intersection/-/lodash.intersection-4.4.0.tgz#0a11ba631d0e95c23c7f2f4cbb9a692ed178e705"
-
 lodash.isarguments@^3.0.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
@@ -4952,7 +4801,7 @@ lodash.isempty@^4.4.0:
   version "4.4.0"
   resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e"
 
-lodash.isequal@^4.0.0, lodash.isequal@^4.1.3:
+lodash.isequal@^4.0.0:
   version "4.5.0"
   resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
 
@@ -5028,22 +4877,6 @@ lodash.shuffle@^4.2.0:
   version "4.2.0"
   resolved "https://registry.yarnpkg.com/lodash.shuffle/-/lodash.shuffle-4.2.0.tgz#145b5053cf875f6f5c2a33f48b6e9948c6ec7b4b"
 
-lodash.sortedindexof@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/lodash.sortedindexof/-/lodash.sortedindexof-4.1.0.tgz#7b661d2f86f55668770802d56baa8f02d6620f3c"
-
-lodash.spread@^4.2.1:
-  version "4.2.1"
-  resolved "https://registry.yarnpkg.com/lodash.spread/-/lodash.spread-4.2.1.tgz#07bf5569e83b40534f7361d954a9fab02da5d4fc"
-
-lodash.union@^4.6.0:
-  version "4.6.0"
-  resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88"
-
-lodash.uniq@^4.5.0:
-  version "4.5.0"
-  resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
-
 lodash.values@^4.3.0:
   version "4.3.0"
   resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-4.3.0.tgz#a3a6c2b0ebecc5c2cba1c17e6e620fe81b53d347"
@@ -5094,10 +4927,6 @@ lru-cache@^4.0.0, lru-cache@^4.0.1, lru-cache@^4.0.2:
     pseudomap "^1.0.2"
     yallist "^2.1.2"
 
-ltgt@~2.2.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.0.tgz#b65ba5fcb349a29924c8e333f7c6a5562f2e4842"
-
 make-dir@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.0.0.tgz#97a011751e91dd87cfadef58832ebb04936de978"
@@ -5208,17 +5037,6 @@ memcached@~0.2.4:
     hashring "0.0.x"
     jackpot ">=0.0.6"
 
-memdown@1.4.1:
-  version "1.4.1"
-  resolved "https://registry.yarnpkg.com/memdown/-/memdown-1.4.1.tgz#b4e4e192174664ffbae41361aa500f3119efe215"
-  dependencies:
-    abstract-leveldown "~2.7.1"
-    functional-red-black-tree "^1.0.1"
-    immediate "^3.2.3"
-    inherits "~2.0.1"
-    ltgt "~2.2.0"
-    safe-buffer "~5.1.1"
-
 meow@^3.7.0:
   version "3.7.0"
   resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
@@ -5397,7 +5215,7 @@ mv@~2:
     ncp "~2.0.0"
     rimraf "~2.4.0"
 
-nan@^2.3.0, nan@^2.3.2, nan@^2.3.3, nan@~2.6.1:
+nan@^2.3.0, nan@^2.3.2, nan@^2.3.3:
   version "2.6.2"
   resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45"
 
@@ -5428,10 +5246,6 @@ negotiator@0.6.1:
   version "0.6.1"
   resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
 
-ngraminator@0.0.1:
-  version "0.0.1"
-  resolved "https://registry.yarnpkg.com/ngraminator/-/ngraminator-0.0.1.tgz#29cfd699df6970f42de9b2f0bdc7f4b60fad6f8e"
-
 node-2fa@1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/node-2fa/-/node-2fa-1.1.2.tgz#5bc5691474afe35ae6b3b76459b98b7c20c7158c"
@@ -5439,10 +5253,6 @@ node-2fa@1.1.2:
     notp "^2.0.3"
     thirty-two "0.0.2"
 
-node-abi@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.1.0.tgz#50ad834affcf17440e12bfc5f9ba0946f572d10c"
-
 node-fetch@1.6.3:
   version "1.6.3"
   resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04"
@@ -5541,10 +5351,6 @@ nodemon@1.12.1:
     undefsafe "0.0.3"
     update-notifier "^2.2.0"
 
-noop-logger@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2"
-
 nopt@1.0.10, nopt@~1.0.10:
   version "1.0.10"
   resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee"
@@ -5593,7 +5399,7 @@ npm-run-path@^2.0.0:
   dependencies:
     path-key "^2.0.0"
 
-"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.1, npmlog@^4.0.2:
+"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2:
   version "4.1.2"
   resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
   dependencies:
@@ -5635,6 +5441,10 @@ oauth@0.9.x:
   version "0.9.15"
   resolved "https://registry.yarnpkg.com/oauth/-/oauth-0.9.15.tgz#bd1fefaf686c96b75475aed5196412ff60cfb9c1"
 
+object-assign@4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"
+
 object-assign@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2"
@@ -5668,7 +5478,7 @@ on-headers@~1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7"
 
-once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0:
+once@^1.3.0, once@^1.3.3, once@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
   dependencies:
@@ -5735,7 +5545,7 @@ ora@1.3.0:
     cli-spinners "^1.0.0"
     log-symbols "^1.0.2"
 
-os-homedir@^1.0.0, os-homedir@^1.0.1:
+os-homedir@^1.0.0:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
 
@@ -6042,6 +5852,13 @@ pg-minify@~0.5.3:
   version "0.5.3"
   resolved "https://registry.yarnpkg.com/pg-minify/-/pg-minify-0.5.3.tgz#aa09befa3cbe29fab6461bf819100e0471215011"
 
+pg-pool@1.*:
+  version "1.8.0"
+  resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-1.8.0.tgz#f7ec73824c37a03f076f51bfdf70e340147c4f37"
+  dependencies:
+    generic-pool "2.4.3"
+    object-assign "4.1.0"
+
 pg-pool@~2.0.3:
   version "2.0.3"
   resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-2.0.3.tgz#c022032c8949f312a4f91fb6409ce04076be3257"
@@ -6055,7 +5872,7 @@ pg-promise@6.10.3:
     pg-minify "~0.5.3"
     spex "~2.0.0"
 
-pg-types@~1.12.1:
+pg-types@1.*, pg-types@~1.12.1:
   version "1.12.1"
   resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-1.12.1.tgz#d64087e3903b58ffaad279e7595c52208a14c3d2"
   dependencies:
@@ -6064,7 +5881,20 @@ pg-types@~1.12.1:
     postgres-date "~1.0.0"
     postgres-interval "^1.1.0"
 
-pg@7.3.0, pg@~7.3.0:
+pg@6.4.2:
+  version "6.4.2"
+  resolved "https://registry.yarnpkg.com/pg/-/pg-6.4.2.tgz#c364011060eac7a507a2ae063eb857ece910e27f"
+  dependencies:
+    buffer-writer "1.0.1"
+    js-string-escape "1.0.1"
+    packet-reader "0.3.1"
+    pg-connection-string "0.1.3"
+    pg-pool "1.*"
+    pg-types "1.*"
+    pgpass "1.*"
+    semver "4.3.2"
+
+pg@~7.3.0:
   version "7.3.0"
   resolved "https://registry.yarnpkg.com/pg/-/pg-7.3.0.tgz#275e27466e54a645f6b4a16f6acadf6b849ad83b"
   dependencies:
@@ -6077,7 +5907,7 @@ pg@7.3.0, pg@~7.3.0:
     pgpass "1.x"
     semver "4.3.2"
 
-pgpass@1.x:
+pgpass@1.*, pgpass@1.x:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.2.tgz#2a7bb41b6065b67907e91da1b07c1847c877b306"
   dependencies:
@@ -6246,25 +6076,6 @@ postgres-interval@^1.1.0:
   dependencies:
     xtend "^4.0.0"
 
-prebuild-install@^2.1.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.2.0.tgz#55934756a32bac8747390ca44ff663cee8b99b69"
-  dependencies:
-    expand-template "^1.0.2"
-    github-from-package "0.0.0"
-    minimist "^1.2.0"
-    mkdirp "^0.5.1"
-    node-abi "^2.0.0"
-    noop-logger "^0.1.1"
-    npmlog "^4.0.1"
-    os-homedir "^1.0.1"
-    pump "^1.0.1"
-    rc "^1.1.6"
-    simple-get "^1.4.2"
-    tar-fs "^1.13.0"
-    tunnel-agent "^0.6.0"
-    xtend "4.0.1"
-
 precond@0.2:
   version "0.2.3"
   resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac"
@@ -6360,10 +6171,6 @@ prr@~0.0.0:
   version "0.0.0"
   resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
 
-prr@~1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
-
 ps-tree@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.1.0.tgz#b421b24140d6203f1ed3c76996b4427b08e8c014"
@@ -6493,21 +6300,6 @@ pug@2.0.0-rc.4:
     pug-runtime "^2.0.3"
     pug-strip-comments "^1.0.2"
 
-pump@^1.0.0, pump@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.2.tgz#3b3ee6512f94f0e575538c17995f9f16990a5d51"
-  dependencies:
-    end-of-stream "^1.1.0"
-    once "^1.3.1"
-
-pumpify@^1.3.5:
-  version "1.3.5"
-  resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.3.5.tgz#1b671c619940abcaeac0ad0e3a3c164be760993b"
-  dependencies:
-    duplexify "^3.1.2"
-    inherits "^2.0.1"
-    pump "^1.0.0"
-
 punycode@^1.4.1:
   version "1.4.1"
   resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
@@ -6516,6 +6308,10 @@ q@^1.1.2:
   version "1.5.0"
   resolved "https://registry.yarnpkg.com/q/-/q-1.5.0.tgz#dd01bac9d06d30e6f219aecb8253ee9ebdc308f1"
 
+qr-image@3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/qr-image/-/qr-image-3.2.0.tgz#9fa8295beae50c4a149cf9f909a1db464a8672e8"
+
 qs@4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/qs/-/qs-4.0.0.tgz#c31d9b74ec27df75e543a86c78728ed8d4623607"
@@ -6620,7 +6416,7 @@ read@^1.0.4:
   dependencies:
     mute-stream "~0.0.4"
 
-readable-stream@1.1.x, readable-stream@^1.0.33:
+readable-stream@1.1.x:
   version "1.1.14"
   resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
   dependencies:
@@ -6629,7 +6425,7 @@ readable-stream@1.1.x, readable-stream@^1.0.33:
     isarray "0.0.1"
     string_decoder "~0.10.x"
 
-readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2:
+readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2:
   version "2.3.3"
   resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
   dependencies:
@@ -6972,36 +6768,6 @@ scss-tokenizer@^0.2.3:
     js-base64 "^2.1.8"
     source-map "^0.4.2"
 
-search-index-adder@0.3.9:
-  version "0.3.9"
-  resolved "https://registry.yarnpkg.com/search-index-adder/-/search-index-adder-0.3.9.tgz#a94b5fc5b27f1827c43eab599c760dcc4c29599d"
-  dependencies:
-    JSONStream "^1.2.1"
-    async "^2.3.0"
-    bunyan "^1.8.10"
-    docproc "^1.0.0"
-    levelup "^1.3.8"
-    pumpify "^1.3.5"
-  optionalDependencies:
-    leveldown "^1.7.1"
-
-search-index-searcher@0.2.10:
-  version "0.2.10"
-  resolved "https://registry.yarnpkg.com/search-index-searcher/-/search-index-searcher-0.2.10.tgz#3b52b8bb643065883997dfce57c6c792ec551cb0"
-  dependencies:
-    bunyan "^1.8.1"
-    intersect-arrays-to-stream "^0.0.3"
-    levelup "^1.3.8"
-    lodash.difference "^4.5.0"
-    lodash.intersection "^4.4.0"
-    lodash.sortedindexof "^4.1.0"
-    lodash.spread "^4.2.1"
-    lodash.union "^4.6.0"
-    lodash.uniq "^4.5.0"
-    ngraminator "0.0.1"
-  optionalDependencies:
-    leveldown "^1.6.0"
-
 select@^1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d"
@@ -7020,14 +6786,10 @@ semver@4.3.2:
   version "4.3.2"
   resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.2.tgz#c7a07158a80bedd052355b770d82d6640f803be7"
 
-semver@5.4.1, semver@^5.4.1, semver@~5.4.1:
+semver@5.4.1, semver@^5.4.1:
   version "5.4.1"
   resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
 
-semver@~5.1.0:
-  version "5.1.1"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-5.1.1.tgz#a3292a373e6f3e0798da0b20641b9a9c5bc47e19"
-
 send@0.13.1:
   version "0.13.1"
   resolved "https://registry.yarnpkg.com/send/-/send-0.13.1.tgz#a30d5f4c82c8a9bae9ad00a1d9b1bdbe6f199ed7"
@@ -7214,14 +6976,6 @@ simple-breakpoints@^1.1.1:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/simple-breakpoints/-/simple-breakpoints-1.1.2.tgz#2a690bb989228bc1f80acf802785f61f53ed6b92"
 
-simple-get@^1.4.2:
-  version "1.4.3"
-  resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-1.4.3.tgz#e9755eda407e96da40c5e5158c9ea37b33becbeb"
-  dependencies:
-    once "^1.3.1"
-    unzip-response "^1.0.0"
-    xtend "^4.0.0"
-
 simple-lru-cache@0.0.x:
   version "0.0.2"
   resolved "https://registry.yarnpkg.com/simple-lru-cache/-/simple-lru-cache-0.0.2.tgz#d59cc3a193c1a5d0320f84ee732f6e4713e511dd"
@@ -7356,20 +7110,12 @@ stdout-stream@^1.4.0:
   dependencies:
     readable-stream "^2.0.1"
 
-stopword@0.1.8:
-  version "0.1.8"
-  resolved "https://registry.yarnpkg.com/stopword/-/stopword-0.1.8.tgz#b583506b0218cb2966c77cc41cb92ffda8396eb9"
-
 stream-combiner@~0.0.4:
   version "0.0.4"
   resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14"
   dependencies:
     duplexer "~0.1.1"
 
-stream-shift@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
-
 stream-to-array@~2.3.0:
   version "2.3.0"
   resolved "https://registry.yarnpkg.com/stream-to-array/-/stream-to-array-2.3.0.tgz#bbf6b39f5f43ec30bc71babcb37557acecf34353"
@@ -7525,15 +7271,6 @@ table@^4.0.1:
     slice-ansi "0.0.4"
     string-width "^2.0.0"
 
-tar-fs@^1.13.0:
-  version "1.15.3"
-  resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.15.3.tgz#eccf935e941493d8151028e636e51ce4c3ca7f20"
-  dependencies:
-    chownr "^1.0.1"
-    mkdirp "^0.5.1"
-    pump "^1.0.0"
-    tar-stream "^1.1.2"
-
 tar-pack@^3.4.0:
   version "3.4.0"
   resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984"
@@ -7547,15 +7284,6 @@ tar-pack@^3.4.0:
     tar "^2.2.1"
     uid-number "^0.0.6"
 
-tar-stream@^1.1.2:
-  version "1.5.4"
-  resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.5.4.tgz#36549cf04ed1aee9b2a30c0143252238daf94016"
-  dependencies:
-    bl "^1.0.0"
-    end-of-stream "^1.0.0"
-    readable-stream "^2.0.0"
-    xtend "^4.0.0"
-
 tar@4.0.1:
   version "4.0.1"
   resolved "https://registry.yarnpkg.com/tar/-/tar-4.0.1.tgz#3f5b2e5289db30c2abe4c960f43d0d9fff96aaf0"
@@ -7574,22 +7302,12 @@ tar@^2.0.0, tar@^2.2.1:
     fstream "^1.0.2"
     inherits "2"
 
-term-frequency@^0.0.15:
-  version "0.0.15"
-  resolved "https://registry.yarnpkg.com/term-frequency/-/term-frequency-0.0.15.tgz#ff4aeaff2ac31ee1096b5c685852816a5da676e7"
-
 term-size@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69"
   dependencies:
     execa "^0.7.0"
 
-term-vector@^0.1.2:
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/term-vector/-/term-vector-0.1.2.tgz#774e7e44aef2274b3b1d8a2441981f99d0f7e0aa"
-  dependencies:
-    lodash.isequal "^4.1.3"
-
 terraformer-wkt-parser@^1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/terraformer-wkt-parser/-/terraformer-wkt-parser-1.1.2.tgz#336a0c8fc82094a5aff83288f69aedecd369bf0c"
@@ -7638,7 +7356,7 @@ through2@2.0.3:
     readable-stream "^2.1.5"
     xtend "~4.0.1"
 
-through@2, "through@>=2.2.7 <3", through@^2.3.6, through@~2.3, through@~2.3.1:
+through@2, through@^2.3.6, through@~2.3, through@~2.3.1:
   version "2.3.8"
   resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
 
@@ -7839,10 +7557,6 @@ unpipe@1.0.0, unpipe@~1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
 
-unzip-response@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe"
-
 unzip-response@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97"
@@ -8268,7 +7982,7 @@ xmlbuilder@^4.1.0:
   dependencies:
     lodash "^4.0.0"
 
-xtend@4.0.1, xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1:
+xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1:
   version "4.0.1"
   resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"