diff --git a/client/components/setup.vue b/client/components/setup.vue index 1833055c..42ba0f91 100644 --- a/client/components/setup.vue +++ b/client/components/setup.vue @@ -220,10 +220,11 @@ ) v-flex(xs6) v-text-field( + ref='adminPasswordConfirm', v-model='conf.adminPasswordConfirm', label='Confirm Password', hint='Verify your password again.', - v-validate='{ required: true, confirmed: `$adminPassword` }', + v-validate='{ required: true, min: 8 }', data-vv-name='adminPasswordConfirm', data-vv-as='Confirm Password', data-vv-scope='admin', @@ -308,10 +309,6 @@ export default { wikiVersion: { type: String, required: true - }, - langs: { - type: Array, - required: true } }, data() { @@ -394,7 +391,7 @@ export default { async proceedToUpgrade () { if (this.state < 5) { const validationSuccess = await this.$validator.validateAll('admin') - if (!validationSuccess) { + if (!validationSuccess || this.conf.adminPassword !== this.conf.adminPasswordConfirm) { this.state = 4 return } diff --git a/config.sample.yml b/config.sample.yml index 30a7b4fc..3c3ef217 100644 --- a/config.sample.yml +++ b/config.sample.yml @@ -23,12 +23,13 @@ paths: # --------------------------------------------------------------------- # Supported Database Engines: # - postgres = PostgreSQL 9.5 or later -# - mysql = MySQL 5.7.8 or later +# - mysql = MySQL 8.0 / MariaDB 10.2.7 or later +# - mssql = MS SQL Server 2012 or later # - sqlite = SQLite 3.9 or later db: type: postgres - # PostgreSQL and MySQL only: + # PostgreSQL / MySQL / MariaDB / MS SQL Server only: host: localhost port: 5432 user: wikijs diff --git a/package.json b/package.json index 772c9cc6..63be3669 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,6 @@ "restart": "node wiki restart", "dev": "node wiki dev", "build": "webpack --profile --config dev/webpack/webpack.prod.js", - "build:locales": "node dev/tasks/localization", "watch": "webpack --config dev/webpack/webpack.dev.js", "test": "eslint --format codeframe --ext .js,.vue . && pug-lint server/views && jest" }, @@ -43,9 +42,9 @@ "axios": "0.18.0", "bcryptjs-then": "1.0.1", "bluebird": "3.5.1", - "body-parser": "1.18.2", + "body-parser": "1.18.3", "bugsnag": "2.3.1", - "bull": "3.4.1", + "bull": "3.4.2", "cheerio": "1.0.0-rc.2", "child-process-promise": "2.2.1", "chokidar": "2.0.3", @@ -61,15 +60,15 @@ "express-brute": "1.0.1", "express-brute-redis": "0.0.1", "express-session": "1.15.6", - "file-type": "7.7.1", + "file-type": "8.0.0", "filesize.js": "1.0.2", - "follow-redirects": "1.4.1", + "follow-redirects": "1.5.0", "fs-extra": "6.0.1", "getos": "3.1.0", "graphql": "0.13.2", "graphql-list-fields": "2.0.2", "graphql-tools": "3.0.1", - "i18next": "11.3.1", + "i18next": "11.3.2", "i18next-express-middleware": "1.1.1", "i18next-localstorage-cache": "1.1.1", "i18next-node-fs-backend": "1.0.0", @@ -78,6 +77,7 @@ "js-yaml": "3.11.0", "jsonwebtoken": "8.2.1", "klaw": "2.1.1", + "knex": "0.14.6", "lodash": "4.17.10", "markdown-it": "8.4.1", "markdown-it-abbr": "1.0.4", @@ -96,12 +96,14 @@ "mathjax-node": "2.1.0", "mime-types": "2.1.18", "moment": "2.22.1", - "moment-timezone": "0.5.16", - "mongodb": "3.0.7", + "moment-timezone": "0.5.17", + "mongodb": "3.1.0-beta4", + "mssql": "4.1.0", "multer": "1.3.0", "mysql2": "1.5.3", "node-2fa": "1.1.2", "oauth2orize": "1.11.0", + "objection": "1.1.8", "ora": "2.1.0", "passport": "0.4.0", "passport-auth0": "0.6.1", @@ -117,20 +119,18 @@ "passport-slack": "0.0.7", "passport-twitch": "1.0.3", "passport-windowslive": "1.0.2", - "pg": "6.4.2", + "pg": "7.4.3", "pg-hstore": "2.3.2", - "pg-promise": "7.5.3", - "pm2": "2.10.3", + "pm2": "2.10.4", "pug": "2.0.3", "qr-image": "3.2.0", - "raven": "2.6.1", + "raven": "2.6.2", "read-chunk": "2.1.0", "remove-markdown": "0.2.2", - "request": "2.85.0", + "request": "2.86.0", "request-promise": "4.2.2", "scim-query-filter-parser": "1.1.0", "semver": "5.5.0", - "sequelize": "4.37.7", "serve-favicon": "2.5.0", "sqlite3": "4.0.0", "uuid": "3.2.1", @@ -145,7 +145,7 @@ "apollo-client-preset": "1.0.8", "apollo-fetch": "0.7.0", "apollo-link-batch-http": "1.2.2", - "autoprefixer": "8.4.1", + "autoprefixer": "8.5.0", "babel-cli": "6.26.0", "babel-core": "6.26.3", "babel-eslint": "8.2.3", @@ -169,7 +169,7 @@ "eslint": "4.19.1", "eslint-config-requarks": "1.0.7", "eslint-config-standard": "11.0.0", - "eslint-plugin-import": "2.11.0", + "eslint-plugin-import": "2.12.0", "eslint-plugin-node": "6.0.1", "eslint-plugin-promise": "3.7.0", "eslint-plugin-standard": "3.1.0", @@ -183,8 +183,8 @@ "html-webpack-pug-plugin": "0.3.0", "i18next-xhr-backend": "1.5.1", "ignore-loader": "0.1.2", - "jest": "22.4.3", - "jest-junit": "3.7.0", + "jest": "22.4.4", + "jest-junit": "4.0.0", "js-cookie": "2.2.0", "lodash-webpack-plugin": "0.11.5", "mini-css-extract-plugin": "0.4.0", @@ -196,7 +196,7 @@ "postcss-flexibility": "2.0.0", "postcss-import": "11.1.0", "postcss-loader": "2.1.5", - "postcss-selector-parser": "4.0.0", + "postcss-selector-parser": "5.0.0-rc.3", "pug-lint": "2.5.0", "pug-loader": "2.4.0", "pug-plain-loader": "1.0.0", @@ -218,23 +218,23 @@ "vue-clipboards": "1.2.4", "vue-codemirror": "4.0.5", "vue-hot-reload-api": "2.3.0", - "vue-loader": "15.0.10", + "vue-loader": "15.1.0", "vue-material-design-icons": "1.4.0", - "vue-moment": "3.2.0", + "vue-moment": "4.0.0-0", "vue-router": "3.0.1", "vue-simple-breakpoints": "1.0.3", "vue-template-compiler": "2.5.16", - "vuetify": "1.0.17", + "vuetify": "1.0.18", "vuex": "3.0.1", - "vuex-persistedstate": "2.5.2", - "webpack": "4.8.2", - "webpack-bundle-analyzer": "2.11.2", + "vuex-persistedstate": "2.5.4", + "webpack": "4.8.3", + "webpack-bundle-analyzer": "2.12.0", "webpack-cli": "2.1.3", "webpack-dev-middleware": "3.1.3", - "webpack-hot-middleware": "2.22.1", + "webpack-hot-middleware": "2.22.2", "webpack-merge": "4.1.2", "whatwg-fetch": "2.0.4", - "write-file-webpack-plugin": "4.2.0" + "write-file-webpack-plugin": "4.3.2" }, "browserslist": [ "> 1%", diff --git a/server/core/auth.js b/server/core/auth.js index 73d065ed..deb1f5c7 100644 --- a/server/core/auth.js +++ b/server/core/auth.js @@ -18,7 +18,7 @@ module.exports = { }) passport.deserializeUser(function (id, done) { - WIKI.db.User.findById(id).then((user) => { + WIKI.db.users.query().findById(id).then((user) => { if (user) { done(null, user) } else { @@ -58,57 +58,6 @@ module.exports = { WIKI.logger.info(`Authentication Provider ${strategy.title}: [ OK ]`) }) - // Create Guest account for first-time - - WIKI.db.User.findOne({ - where: { - provider: 'local', - email: 'guest@example.com' - } - }).then((c) => { - if (c < 1) { - return WIKI.db.User.create({ - provider: 'local', - email: 'guest@example.com', - name: 'Guest', - password: '', - role: 'guest' - }).then(() => { - WIKI.logger.info('[AUTH] Guest account created successfully!') - return true - }).catch((err) => { - WIKI.logger.error('[AUTH] An error occured while creating guest account:') - WIKI.logger.error(err) - return err - }) - } - }) - - // .then(() => { - // if (process.env.WIKI_JS_HEROKU) { - // return WIKI.db.User.findOne({ provider: 'local', email: process.env.WIKI_ADMIN_EMAIL }).then((c) => { - // if (c < 1) { - // // Create root admin account (HEROKU ONLY) - - // return WIKI.db.User.create({ - // provider: 'local', - // email: process.env.WIKI_ADMIN_EMAIL, - // name: 'Administrator', - // password: '$2a$04$MAHRw785Xe/Jd5kcKzr3D.VRZDeomFZu2lius4gGpZZ9cJw7B7Mna', // admin123 (default) - // role: 'admin' - // }).then(() => { - // WIKI.logger.info('[AUTH] Root admin account created successfully!') - // return true - // }).catch((err) => { - // WIKI.logger.error('[AUTH] An error occured while creating root admin account:') - // WIKI.logger.error(err) - // return err - // }) - // } else { return true } - // }) - // } else { return true } - // }) - return this } } diff --git a/server/core/config.js b/server/core/config.js index 377dd3b1..52d9586e 100644 --- a/server/core/config.js +++ b/server/core/config.js @@ -59,17 +59,10 @@ module.exports = { subsets = WIKI.data.configNamespaces } - let results = await WIKI.db.Setting.findAll({ - attributes: ['key', 'config'], - where: { - key: { - $in: subsets - } - } - }) + let results = await WIKI.db.settings.query().select(['key', 'value']).whereIn('key', subsets) if (_.isArray(results) && results.length === subsets.length) { results.forEach(result => { - WIKI.config[result.key] = result.config + WIKI.config[result.key] = result.value }) return true } else { @@ -88,14 +81,18 @@ module.exports = { subsets = WIKI.data.configNamespaces } + let trx = await WIKI.db.Objection.transaction.start(WIKI.db.knex) + try { for (let set of subsets) { - await WIKI.db.Setting.upsert({ - key: set, - config: _.get(WIKI.config, set, {}) - }) + console.info(set) + await WIKI.db.settings.query(trx).patch({ + value: _.get(WIKI.config, set, {}) + }).where('key', set) } + await trx.commit() } catch (err) { + await trx.rollback(err) WIKI.logger.error(`Failed to save configuration to DB: ${err.message}`) return false } diff --git a/server/core/db.js b/server/core/db.js index 9200285b..05657a75 100644 --- a/server/core/db.js +++ b/server/core/db.js @@ -1,55 +1,18 @@ const _ = require('lodash') -const fs = require('fs') +const autoload = require('auto-load') const path = require('path') const Promise = require('bluebird') -const Sequelize = require('sequelize') +const Knex = require('knex') +const Objection = require('objection') /* global WIKI */ -const operatorsAliases = { - $eq: Sequelize.Op.eq, - $ne: Sequelize.Op.ne, - $gte: Sequelize.Op.gte, - $gt: Sequelize.Op.gt, - $lte: Sequelize.Op.lte, - $lt: Sequelize.Op.lt, - $not: Sequelize.Op.not, - $in: Sequelize.Op.in, - $notIn: Sequelize.Op.notIn, - $is: Sequelize.Op.is, - $like: Sequelize.Op.like, - $notLike: Sequelize.Op.notLike, - $iLike: Sequelize.Op.iLike, - $notILike: Sequelize.Op.notILike, - $regexp: Sequelize.Op.regexp, - $notRegexp: Sequelize.Op.notRegexp, - $iRegexp: Sequelize.Op.iRegexp, - $notIRegexp: Sequelize.Op.notIRegexp, - $between: Sequelize.Op.between, - $notBetween: Sequelize.Op.notBetween, - $overlap: Sequelize.Op.overlap, - $contains: Sequelize.Op.contains, - $contained: Sequelize.Op.contained, - $adjacent: Sequelize.Op.adjacent, - $strictLeft: Sequelize.Op.strictLeft, - $strictRight: Sequelize.Op.strictRight, - $noExtendRight: Sequelize.Op.noExtendRight, - $noExtendLeft: Sequelize.Op.noExtendLeft, - $and: Sequelize.Op.and, - $or: Sequelize.Op.or, - $any: Sequelize.Op.any, - $all: Sequelize.Op.all, - $values: Sequelize.Op.values, - $col: Sequelize.Op.col -} - /** * PostgreSQL DB module */ module.exports = { - Sequelize, - Op: Sequelize.Op, - + Objection, + knex: null, /** * Initialize DB * @@ -57,65 +20,63 @@ module.exports = { */ init() { let self = this - let dbModelsPath = path.join(WIKI.SERVERPATH, 'models') - // Define Sequelize instance - - this.inst = new this.Sequelize(WIKI.config.db.db, WIKI.config.db.user, WIKI.config.db.pass, { + let dbClient = null + const dbConfig = (!_.isEmpty(process.env.WIKI_DB_CONNSTR)) ? process.env.WIKI_DB_CONNSTR : { host: WIKI.config.db.host, + user: WIKI.config.db.user, + password: WIKI.config.db.pass, + database: WIKI.config.db.db, port: WIKI.config.db.port, - dialect: WIKI.config.db.type, - storage: WIKI.config.db.storage, - pool: { - max: 10, - min: 0, - idle: 10000 - }, - logging: log => { WIKI.logger.log('debug', log) }, - operatorsAliases + filename: WIKI.config.db.storage + } + + switch (WIKI.config.db.type) { + case 'postgres': + dbClient = 'pg' + break + case 'mysql': + dbClient = 'mysql2' + break + case 'mssql': + dbClient = 'mssql' + break + case 'sqlite': + dbClient = 'sqlite3' + break + default: + WIKI.logger.error('Invalid DB Type') + process.exit(1) + } + + this.knex = Knex({ + client: dbClient, + useNullAsDefault: true, + connection: dbConfig, + debug: WIKI.IS_DEBUG }) - // Attempt to connect and authenticate to DB - - this.inst.authenticate().then(() => { - WIKI.logger.info(`Database (${WIKI.config.db.type}) connection: [ OK ]`) - }).catch(err => { - WIKI.logger.error(`Failed to connect to ${WIKI.config.db.type} instance.`) - WIKI.logger.error(err) - process.exit(1) - }) + Objection.Model.knex(this.knex) // Load DB Models - fs - .readdirSync(dbModelsPath) - .filter(file => { - return (file.indexOf('.') !== 0 && file.indexOf('_') !== 0) - }) - .forEach(file => { - let modelName = _.upperFirst(_.camelCase(_.split(file, '.')[0])) - self[modelName] = self.inst.import(path.join(dbModelsPath, file)) - }) - - // Associate DB Models - - require(path.join(dbModelsPath, '_relations.js'))(self) + const models = autoload(path.join(WIKI.SERVERPATH, 'db/models')) // Set init tasks let initTasks = { - // -> Sync DB Schemas - syncSchemas() { - return self.inst.sync({ - force: false, - logging: log => { WIKI.logger.log('debug', log) } + // -> Migrate DB Schemas + async syncSchemas() { + return self.knex.migrate.latest({ + directory: path.join(WIKI.SERVERPATH, 'db/migrations'), + tableName: 'migrations' }) }, // -> Set Connection App Name - setAppName() { + async setAppName() { switch (WIKI.config.db.type) { case 'postgres': - return self.inst.query(`set application_name = 'WIKI.js'`, { raw: true }) + return self.knex.raw(`set application_name = 'Wiki.js'`) } } } @@ -131,6 +92,9 @@ module.exports = { this.onReady = Promise.each(initTasksQueue, t => t()).return(true) - return this + return { + ...this, + ...models + } } } diff --git a/server/core/localization.js b/server/core/localization.js index dd735b68..8d2310b6 100644 --- a/server/core/localization.js +++ b/server/core/localization.js @@ -52,11 +52,7 @@ module.exports = { } }, async loadLocale(locale, opts = { silent: false }) { - const res = await WIKI.db.Locale.findOne({ - where: { - code: locale - } - }) + const res = await WIKI.db.locales.query().findOne('code', locale) if (res) { if (_.isPlainObject(res.strings)) { _.forOwn(res.strings, (data, ns) => { diff --git a/server/db/migrations/2.0.0.js b/server/db/migrations/2.0.0.js new file mode 100644 index 00000000..bebb6ede --- /dev/null +++ b/server/db/migrations/2.0.0.js @@ -0,0 +1,75 @@ +exports.up = knex => { + return knex.schema + // ------------------------------------- + // GROUPS + // ------------------------------------- + .createTable('groups', table => { + table.increments('id').primary() + + table.string('name').notNullable() + table.string('createdAt').notNullable() + table.string('updatedAt').notNullable() + }) + // ------------------------------------- + // LOCALES + // ------------------------------------- + .createTable('locales', table => { + table.increments('id').primary() + + table.string('code', 2).notNullable().unique() + table.json('strings') + table.boolean('isRTL').notNullable().defaultTo(false) + table.string('name').notNullable() + table.string('nativeName').notNullable() + table.string('createdAt').notNullable() + table.string('updatedAt').notNullable() + }) + // ------------------------------------- + // SETTINGS + // ------------------------------------- + .createTable('settings', table => { + table.increments('id').primary() + + table.string('key').notNullable().unique() + table.json('value') + table.string('createdAt').notNullable() + table.string('updatedAt').notNullable() + }) + // ------------------------------------- + // USERS + // ------------------------------------- + .createTable('users', table => { + table.increments('id').primary() + + table.string('email').notNullable() + table.string('name').notNullable() + table.string('provider').notNullable().defaultTo('local') + table.string('providerId') + table.string('password') + table.boolean('tfaIsActive').notNullable().defaultTo(false) + table.string('tfaSecret') + table.enum('role', ['admin', 'guest', 'user']).notNullable().defaultTo('guest') + table.string('createdAt').notNullable() + table.string('updatedAt').notNullable() + + table.unique(['provider', 'email']) + }) + // ------------------------------------- + // USER GROUPS + // ------------------------------------- + .createTable('userGroups', table => { + table.increments('id').primary() + + table.integer('userId').unsigned().references('id').inTable('users') + table.integer('groupId').unsigned().references('id').inTable('groups') + }) +} + +exports.down = knex => { + return knex.schema + .dropTableIfExists('userGroups') + .dropTableIfExists('groups') + .dropTableIfExists('locales') + .dropTableIfExists('settings') + .dropTableIfExists('users') +} diff --git a/server/db/models/groups.js b/server/db/models/groups.js new file mode 100644 index 00000000..f3d50018 --- /dev/null +++ b/server/db/models/groups.js @@ -0,0 +1,48 @@ +const Model = require('objection').Model + +/** + * Settings model + */ +module.exports = class Group extends Model { + static get tableName() { return 'groups' } + + static get jsonSchema () { + return { + type: 'object', + required: ['name'], + + properties: { + id: {type: 'integer'}, + name: {type: 'string'}, + createdAt: {type: 'string'}, + updatedAt: {type: 'string'} + } + } + } + + static get relationMappings() { + const User = require('./users') + return { + users: { + relation: Model.ManyToManyRelation, + modelClass: User, + join: { + from: 'groups.id', + through: { + from: 'userGroups.groupId', + to: 'userGroups.userId' + }, + to: 'users.id' + } + } + } + } + + $beforeUpdate() { + this.updatedAt = new Date().toISOString() + } + $beforeInsert() { + this.createdAt = new Date().toISOString() + this.updatedAt = new Date().toISOString() + } +} diff --git a/server/db/models/locales.js b/server/db/models/locales.js new file mode 100644 index 00000000..607dd098 --- /dev/null +++ b/server/db/models/locales.js @@ -0,0 +1,34 @@ +const Model = require('objection').Model + +/** + * Locales model + */ +module.exports = class User extends Model { + static get tableName() { return 'locales' } + + static get jsonSchema () { + return { + type: 'object', + required: ['code', 'name'], + + properties: { + id: {type: 'integer'}, + code: {type: 'string'}, + strings: {type: 'object'}, + isRTL: {type: 'boolean', default: false}, + name: {type: 'string'}, + nativeName: {type: 'string'}, + createdAt: {type: 'string'}, + updatedAt: {type: 'string'} + } + } + } + + $beforeUpdate() { + this.updatedAt = new Date().toISOString() + } + $beforeInsert() { + this.createdAt = new Date().toISOString() + this.updatedAt = new Date().toISOString() + } +} diff --git a/server/db/models/settings.js b/server/db/models/settings.js new file mode 100644 index 00000000..bedfe807 --- /dev/null +++ b/server/db/models/settings.js @@ -0,0 +1,31 @@ +const Model = require('objection').Model + +/** + * Settings model + */ +module.exports = class User extends Model { + static get tableName() { return 'settings' } + + static get jsonSchema () { + return { + type: 'object', + required: ['key', 'value'], + + properties: { + id: {type: 'integer'}, + key: {type: 'string'}, + value: {type: 'object'}, + createdAt: {type: 'string'}, + updatedAt: {type: 'string'} + } + } + } + + $beforeUpdate() { + this.updatedAt = new Date().toISOString() + } + $beforeInsert() { + this.createdAt = new Date().toISOString() + this.updatedAt = new Date().toISOString() + } +} diff --git a/server/db/models/users.js b/server/db/models/users.js new file mode 100644 index 00000000..863086e8 --- /dev/null +++ b/server/db/models/users.js @@ -0,0 +1,235 @@ +/* global WIKI */ + +const bcrypt = require('bcryptjs-then') +const _ = require('lodash') +const tfa = require('node-2fa') +const securityHelper = require('../../helpers/security') +const Model = require('objection').Model + +const bcryptRegexp = /^\$2[ayb]\$[0-9]{2}\$[A-Za-z0-9./]{53}$/ + +/** + * Users model + */ +module.exports = class User extends Model { + static get tableName() { return 'users' } + + static get jsonSchema () { + return { + type: 'object', + required: ['email', 'name', 'provider'], + + properties: { + id: {type: 'integer'}, + email: {type: 'string', format: 'email'}, + name: {type: 'string', minLength: 1, maxLength: 255}, + provider: {type: 'string', minLength: 1, maxLength: 255}, + providerId: {type: 'number'}, + password: {type: 'string'}, + role: {type: 'string', enum: ['admin', 'guest', 'user']}, + tfaIsActive: {type: 'boolean', default: false}, + tfaSecret: {type: 'string'}, + createdAt: {type: 'string'}, + updatedAt: {type: 'string'} + } + } + } + + static get relationMappings() { + const Group = require('./groups') + return { + groups: { + relation: Model.ManyToManyRelation, + modelClass: Group, + join: { + from: 'users.id', + through: { + from: 'userGroups.userId', + to: 'userGroups.groupId' + }, + to: 'groups.id' + } + } + } + } + + async $beforeUpdate(opt, context) { + await super.$beforeUpdate(opt, context) + + this.updatedAt = new Date().toISOString() + + if (!(opt.patch && this.password === undefined)) { + await this.generateHash() + } + } + async $beforeInsert(context) { + await super.$beforeInsert(context) + + this.createdAt = new Date().toISOString() + this.updatedAt = new Date().toISOString() + + await this.generateHash() + } + + async generateHash() { + if (this.password) { + if (bcryptRegexp.test(this.password)) { return } + this.password = await bcrypt.hash(this.password, 12) + } + } + + async verifyPassword(pwd) { + if (await bcrypt.compare(this.password, pwd) === true) { + return true + } else { + throw new WIKI.Error.AuthLoginFailed() + } + } + + async enableTFA() { + let tfaInfo = tfa.generateSecret({ + name: WIKI.config.site.title + }) + return this.$query.patch({ + tfaIsActive: true, + tfaSecret: tfaInfo.secret + }) + } + + async disableTFA() { + return this.$query.patch({ + tfaIsActive: false, + tfaSecret: '' + }) + } + + async verifyTFA(code) { + let result = tfa.verifyToken(this.tfaSecret, code) + return (result && _.has(result, 'delta') && result.delta === 0) + } + + static async processProfile(profile) { + let primaryEmail = '' + if (_.isArray(profile.emails)) { + let e = _.find(profile.emails, ['primary', true]) + primaryEmail = (e) ? e.value : _.first(profile.emails).value + } else if (_.isString(profile.email) && profile.email.length > 5) { + primaryEmail = profile.email + } else if (_.isString(profile.mail) && profile.mail.length > 5) { + primaryEmail = profile.mail + } else if (profile.user && profile.user.email && profile.user.email.length > 5) { + primaryEmail = profile.user.email + } else { + return Promise.reject(new Error(WIKI.lang.t('auth:errors.invaliduseremail'))) + } + + profile.provider = _.lowerCase(profile.provider) + primaryEmail = _.toLower(primaryEmail) + + let user = await WIKI.db.users.query().findOne({ + email: primaryEmail, + provider: profile.provider + }) + if (user) { + user.$query().patchAdnFetch({ + email: primaryEmail, + provider: profile.provider, + providerId: profile.id, + name: profile.displayName || _.split(primaryEmail, '@')[0] + }) + } else { + user = await WIKI.db.users.query().insertAndFetch({ + email: primaryEmail, + provider: profile.provider, + providerId: profile.id, + name: profile.displayName || _.split(primaryEmail, '@')[0] + }) + } + + // Handle unregistered accounts + // if (!user && profile.provider !== 'local' && (WIKI.config.auth.defaultReadAccess || profile.provider === 'ldap' || profile.provider === 'azure')) { + // let nUsr = { + // email: primaryEmail, + // provider: profile.provider, + // providerId: profile.id, + // password: '', + // name: profile.displayName || profile.name || profile.cn, + // rights: [{ + // role: 'read', + // path: '/', + // exact: false, + // deny: false + // }] + // } + // return WIKI.db.users.query().insert(nUsr) + // } + + return user + } + + static async login (opts, context) { + if (_.has(WIKI.config.auth.strategies, opts.provider)) { + _.set(context.req, 'body.email', opts.username) + _.set(context.req, 'body.password', opts.password) + + // Authenticate + return new Promise((resolve, reject) => { + WIKI.auth.passport.authenticate(opts.provider, async (err, user, info) => { + if (err) { return reject(err) } + if (!user) { return reject(new WIKI.Error.AuthLoginFailed()) } + + // Is 2FA required? + if (user.tfaIsActive) { + try { + let loginToken = await securityHelper.generateToken(32) + await WIKI.redis.set(`tfa:${loginToken}`, user.id, 'EX', 600) + return resolve({ + tfaRequired: true, + tfaLoginToken: loginToken + }) + } catch (err) { + WIKI.logger.warn(err) + return reject(new WIKI.Error.AuthGenericError()) + } + } else { + // No 2FA, log in user + return context.req.logIn(user, err => { + if (err) { return reject(err) } + resolve({ + tfaRequired: false + }) + }) + } + })(context.req, context.res, () => {}) + }) + } else { + throw new WIKI.Error.AuthProviderInvalid() + } + } + + static async loginTFA(opts, context) { + if (opts.securityCode.length === 6 && opts.loginToken.length === 64) { + let result = await WIKI.redis.get(`tfa:${opts.loginToken}`) + if (result) { + let userId = _.toSafeInteger(result) + if (userId && userId > 0) { + let user = await WIKI.db.users.query().findById(userId) + if (user && user.verifyTFA(opts.securityCode)) { + return Promise.fromCallback(clb => { + context.req.logIn(user, clb) + }).return({ + succeeded: true, + message: 'Login Successful' + }).catch(err => { + WIKI.logger.warn(err) + throw new WIKI.Error.AuthGenericError() + }) + } else { + throw new WIKI.Error.AuthTFAFailed() + } + } + } + } + throw new WIKI.Error.AuthTFAInvalid() + } +} diff --git a/server/db/seeds/settings.js b/server/db/seeds/settings.js new file mode 100644 index 00000000..d8c30727 --- /dev/null +++ b/server/db/seeds/settings.js @@ -0,0 +1,11 @@ +exports.seed = (knex, Promise) => { + return knex('settings') + .insert([ + { key: 'auth', value: {} }, + { key: 'features', value: {} }, + { key: 'logging', value: {} }, + { key: 'site', value: {} }, + { key: 'theme', value: {} }, + { key: 'uploads', value: {} } + ]) +} diff --git a/server/graph/resolvers/authentication.js b/server/graph/resolvers/authentication.js index 018f8e0d..f639e281 100644 --- a/server/graph/resolvers/authentication.js +++ b/server/graph/resolvers/authentication.js @@ -32,7 +32,7 @@ module.exports = { AuthenticationMutation: { async login(obj, args, context) { try { - let authResult = await WIKI.db.User.login(args, context) + let authResult = await WIKI.db.users.login(args, context) return { ...authResult, responseResult: graphHelper.generateSuccess('Login success') @@ -43,7 +43,7 @@ module.exports = { }, async loginTFA(obj, args, context) { try { - let authResult = await WIKI.db.User.loginTFA(args, context) + let authResult = await WIKI.db.users.loginTFA(args, context) return { ...authResult, responseResult: graphHelper.generateSuccess('TFA success') diff --git a/server/graph/resolvers/group.js b/server/graph/resolvers/group.js index 027693c0..17e05ec9 100644 --- a/server/graph/resolvers/group.js +++ b/server/graph/resolvers/group.js @@ -13,43 +13,32 @@ module.exports = { }, GroupQuery: { async list(obj, args, context, info) { - return WIKI.db.Group.findAll({ - attributes: { - include: [[WIKI.db.inst.fn('COUNT', WIKI.db.inst.col('users.id')), 'userCount']] - }, - include: [{ - model: WIKI.db.User, - attributes: [], - through: { - attributes: [] - } - }], - raw: true, - // TODO: Figure out how to exclude these extra fields... - group: ['group.id', 'users->userGroups.createdAt', 'users->userGroups.updatedAt', 'users->userGroups.version', 'users->userGroups.userId', 'users->userGroups.groupId'] - }) + return WIKI.db.groups.query().select( + 'groups.*', + WIKI.db.groups.relatedQuery('users').count().as('userCount') + ) }, async single(obj, args, context, info) { - return WIKI.db.Group.findById(args.id) + return WIKI.db.groups.query().findById(args.id) } }, GroupMutation: { async assignUser(obj, args) { - const grp = await WIKI.db.Group.findById(args.groupId) + const grp = await WIKI.db.groups.query().findById(args.groupId) if (!grp) { throw new gql.GraphQLError('Invalid Group ID') } - const usr = await WIKI.db.User.findById(args.userId) + const usr = await WIKI.db.users.query().findById(args.userId) if (!usr) { throw new gql.GraphQLError('Invalid User ID') } - await grp.addUser(usr) + await grp.$relatedQuery('users').relate(usr.id) return { responseResult: graphHelper.generateSuccess('User has been assigned to group.') } }, async create(obj, args) { - const group = await WIKI.db.Group.create({ + const group = await WIKI.db.groups.query().insertAndFetch({ name: args.name }) return { @@ -58,36 +47,27 @@ module.exports = { } }, async delete(obj, args) { - await WIKI.db.Group.destroy({ - where: { - id: args.id - }, - limit: 1 - }) + await WIKI.db.groups.query().deleteById(args.id) return { responseResult: graphHelper.generateSuccess('Group has been deleted.') } }, async unassignUser(obj, args) { - const grp = await WIKI.db.Group.findById(args.groupId) + const grp = await WIKI.db.groups.query().findById(args.groupId) if (!grp) { throw new gql.GraphQLError('Invalid Group ID') } - const usr = await WIKI.db.User.findById(args.userId) + const usr = await WIKI.db.users.query().findById(args.userId) if (!usr) { throw new gql.GraphQLError('Invalid User ID') } - await grp.removeUser(usr) + await grp.$relatedQuery('users').unrelate().where('userId', usr.id) return { responseResult: graphHelper.generateSuccess('User has been unassigned from group.') } }, async update(obj, args) { - await WIKI.db.Group.update({ - name: args.name - }, { - where: { id: args.id } - }) + await WIKI.db.groups.query().patch({ name: args.name }).where('id', args.id) return { responseResult: graphHelper.generateSuccess('Group has been updated.') } @@ -95,7 +75,7 @@ module.exports = { }, Group: { users(grp) { - return grp.getUsers() + return grp.$relatedQuery('users') } } } diff --git a/server/graph/resolvers/localization.js b/server/graph/resolvers/localization.js index 2204bedf..d0ed3310 100644 --- a/server/graph/resolvers/localization.js +++ b/server/graph/resolvers/localization.js @@ -13,12 +13,7 @@ module.exports = { LocalizationQuery: { async locales(obj, args, context, info) { let remoteLocales = await WIKI.redis.get('locales') - let localLocales = await WIKI.db.Locale.findAll({ - attributes: { - exclude: ['strings'] - }, - raw: true - }) + let localLocales = await WIKI.db.locales.query().select('id', 'code', 'isRTL', 'name', 'nativeName', 'createdAt', 'updatedAt') remoteLocales = (remoteLocales) ? JSON.parse(remoteLocales) : localLocales return _.map(remoteLocales, rl => { let isInstalled = _.some(localLocales, ['code', rl.code]) diff --git a/server/graph/resolvers/system.js b/server/graph/resolvers/system.js index 90c385bf..5f6f46d4 100644 --- a/server/graph/resolvers/system.js +++ b/server/graph/resolvers/system.js @@ -10,7 +10,8 @@ const path = require('path') const dbTypes = { mysql: 'MySQL / MariaDB', postgres: 'PostgreSQL', - sqlite: 'SQLite' + sqlite: 'SQLite', + mssql: 'MS SQL Server' } module.exports = { @@ -28,12 +29,14 @@ module.exports = { osLabel = `${os.type()} - ${osInfo.dist} (${osInfo.codename || os.platform()}) ${osInfo.release || os.release()} ${os.arch()}` } + console.info(WIKI.db.knex.client) + return { configFile: path.join(process.cwd(), 'config.yml'), currentVersion: WIKI.version, dbType: _.get(dbTypes, WIKI.config.db.type, 'Unknown DB'), - dbVersion: WIKI.db.inst.options.databaseVersion, - dbHost: WIKI.db.inst.options.host, + dbVersion: _.get(WIKI.db, 'knex.client.version', 'Unknown version'), + dbHost: WIKI.config.db.host, latestVersion: WIKI.version, // TODO latestVersionReleaseDate: new Date(), // TODO operatingSystem: osLabel, diff --git a/server/graph/resolvers/user.js b/server/graph/resolvers/user.js index b7cdbd32..9765a4c3 100644 --- a/server/graph/resolvers/user.js +++ b/server/graph/resolvers/user.js @@ -10,52 +10,35 @@ module.exports = { }, UserQuery: { async list(obj, args, context, info) { - return WIKI.db.User.findAll({ - attributes: { - exclude: ['password', 'tfaSecret'] - }, - raw: true - }) + return WIKI.db.users.query() + .select('id', 'email', 'name', 'provider', 'role', 'createdAt', 'updatedAt') }, async search(obj, args, context, info) { - return WIKI.db.User.findAll({ - where: { - $or: [ - { email: { $like: `%${args.query}%` } }, - { name: { $like: `%${args.query}%` } } - ] - }, - limit: 10, - attributes: ['id', 'email', 'name', 'provider', 'role', 'createdAt', 'updatedAt'], - raw: true - }) + return WIKI.db.users.query() + .where('email', 'like', `%${args.query}%`) + .orWhere('name', 'like', `%${args.query}%`) + .limit(10) + .select('id', 'email', 'name', 'provider', 'role', 'createdAt', 'updatedAt') }, async single(obj, args, context, info) { - return WIKI.db.User.findById(args.id) + return WIKI.db.users.query().findById(args.id) } }, UserMutation: { create(obj, args) { - return WIKI.db.User.create(args) + return WIKI.db.users.query().insertAndFetch(args) }, delete(obj, args) { - return WIKI.db.User.destroy({ - where: { - id: args.id - }, - limit: 1 - }) + return WIKI.db.users.query().deleteById(args.id) }, update(obj, args) { - return WIKI.db.User.update({ + return WIKI.db.users.query().patch({ email: args.email, name: args.name, provider: args.provider, providerId: args.providerId, role: args.role - }, { - where: { id: args.id } - }) + }).where('id', args.id) }, resetPassword(obj, args) { return false diff --git a/server/jobs/fetch-graph-locale.js b/server/jobs/fetch-graph-locale.js index 897575ad..fe09e088 100644 --- a/server/jobs/fetch-graph-locale.js +++ b/server/jobs/fetch-graph-locale.js @@ -38,7 +38,8 @@ module.exports = async (job) => { const locales = await WIKI.redis.get('locales') if (locales) { const currentLocale = _.find(JSON.parse(locales), ['code', job.data.locale]) || {} - await WIKI.db.Locale.upsert({ + await WIKI.db.locales.query().delete().where('code', job.data.locale) + await WIKI.db.locales.query().insert({ code: job.data.locale, strings: lcObj, isRTL: currentLocale.isRTL, diff --git a/server/jobs/sync-graph-locales.js b/server/jobs/sync-graph-locales.js index e8116e50..4417ad38 100644 --- a/server/jobs/sync-graph-locales.js +++ b/server/jobs/sync-graph-locales.js @@ -60,13 +60,13 @@ module.exports = async (job) => { _.set(lcObj, row.key.replace(':', '.'), row.value) }) - await WIKI.db.Locale.upsert({ + await WIKI.db.locales.query().update({ code: WIKI.config.site.lang, strings: lcObj, isRTL: currentLocale.isRTL, name: currentLocale.name, nativeName: currentLocale.nativeName - }) + }).where('code', WIKI.config.site.lang) } WIKI.logger.info('Syncing locales with Graph endpoint: [ COMPLETED ]') diff --git a/server/models/user.js b/server/models/user.js deleted file mode 100644 index 3b2013d7..00000000 --- a/server/models/user.js +++ /dev/null @@ -1,210 +0,0 @@ -/* global WIKI */ - -const Promise = require('bluebird') -const bcrypt = require('bcryptjs-then') -const _ = require('lodash') -const tfa = require('node-2fa') -const securityHelper = require('../helpers/security') - -/** - * Users schema - */ -module.exports = (sequelize, DataTypes) => { - let userSchema = sequelize.define('user', { - email: { - type: DataTypes.STRING, - allowNull: false, - validate: { - isEmail: true - } - }, - provider: { - type: DataTypes.STRING, - allowNull: false - }, - providerId: { - type: DataTypes.STRING, - allowNull: true - }, - password: { - type: DataTypes.STRING, - allowNull: true - }, - name: { - type: DataTypes.STRING, - allowNull: true - }, - 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, - version: true, - indexes: [ - { - unique: true, - fields: ['provider', 'email'] - } - ] - }) - - userSchema.prototype.validatePassword = async function (rawPwd) { - if (await bcrypt.compare(rawPwd, this.password) === true) { - return true - } else { - throw new WIKI.Error.AuthLoginFailed() - } - } - - userSchema.prototype.enableTFA = async function () { - let tfaInfo = tfa.generateSecret({ - name: WIKI.config.site.title - }) - this.tfaIsActive = true - this.tfaSecret = tfaInfo.secret - return this.save() - } - - userSchema.prototype.disableTFA = async function () { - this.tfaIsActive = false - this.tfaSecret = '' - return this.save() - } - - userSchema.prototype.verifyTFA = function (code) { - let result = tfa.verifyToken(this.tfaSecret, code) - return (result && _.has(result, 'delta') && result.delta === 0) - } - - userSchema.login = async (opts, context) => { - if (_.has(WIKI.config.auth.strategies, opts.provider)) { - _.set(context.req, 'body.email', opts.username) - _.set(context.req, 'body.password', opts.password) - - // Authenticate - return new Promise((resolve, reject) => { - WIKI.auth.passport.authenticate(opts.provider, async (err, user, info) => { - if (err) { return reject(err) } - if (!user) { return reject(new WIKI.Error.AuthLoginFailed()) } - - // Is 2FA required? - if (user.tfaIsActive) { - try { - let loginToken = await securityHelper.generateToken(32) - await WIKI.redis.set(`tfa:${loginToken}`, user.id, 'EX', 600) - return resolve({ - tfaRequired: true, - tfaLoginToken: loginToken - }) - } catch (err) { - WIKI.logger.warn(err) - return reject(new WIKI.Error.AuthGenericError()) - } - } else { - // No 2FA, log in user - return context.req.logIn(user, err => { - if (err) { return reject(err) } - resolve({ - tfaRequired: false - }) - }) - } - })(context.req, context.res, () => {}) - }) - } else { - throw new WIKI.Error.AuthProviderInvalid() - } - } - - userSchema.loginTFA = async (opts, context) => { - if (opts.securityCode.length === 6 && opts.loginToken.length === 64) { - let result = await WIKI.redis.get(`tfa:${opts.loginToken}`) - if (result) { - let userId = _.toSafeInteger(result) - if (userId && userId > 0) { - let user = await WIKI.db.User.findById(userId) - if (user && user.verifyTFA(opts.securityCode)) { - return Promise.fromCallback(clb => { - context.req.logIn(user, clb) - }).return({ - succeeded: true, - message: 'Login Successful' - }).catch(err => { - WIKI.logger.warn(err) - throw new WIKI.Error.AuthGenericError() - }) - } else { - throw new WIKI.Error.AuthTFAFailed() - } - } - } - } - throw new WIKI.Error.AuthTFAInvalid() - } - - userSchema.processProfile = (profile) => { - let primaryEmail = '' - if (_.isArray(profile.emails)) { - let e = _.find(profile.emails, ['primary', true]) - primaryEmail = (e) ? e.value : _.first(profile.emails).value - } else if (_.isString(profile.email) && profile.email.length > 5) { - primaryEmail = profile.email - } else if (_.isString(profile.mail) && profile.mail.length > 5) { - primaryEmail = profile.mail - } else if (profile.user && profile.user.email && profile.user.email.length > 5) { - primaryEmail = profile.user.email - } else { - return Promise.reject(new Error(WIKI.lang.t('auth:errors.invaliduseremail'))) - } - - profile.provider = _.lowerCase(profile.provider) - primaryEmail = _.toLower(primaryEmail) - - return WIKI.db.User.findOneAndUpdate({ - email: primaryEmail, - provider: profile.provider - }, { - email: primaryEmail, - provider: profile.provider, - providerId: profile.id, - name: profile.displayName || _.split(primaryEmail, '@')[0] - }, { - new: true - }).then((user) => { - // Handle unregistered accounts - if (!user && profile.provider !== 'local' && (WIKI.config.auth.defaultReadAccess || profile.provider === 'ldap' || profile.provider === 'azure')) { - let nUsr = { - email: primaryEmail, - provider: profile.provider, - providerId: profile.id, - password: '', - name: profile.displayName || profile.name || profile.cn, - rights: [{ - role: 'read', - path: '/', - exact: false, - deny: false - }] - } - return WIKI.db.User.create(nUsr) - } - return user || Promise.reject(new Error(WIKI.lang.t('auth:errors:notyetauthorized'))) - }) - } - - userSchema.hashPassword = (rawPwd) => { - return bcrypt.hash(rawPwd) - } - - return userSchema -} diff --git a/server/models/_relations.js b/server/models_old/_relations.js similarity index 100% rename from server/models/_relations.js rename to server/models_old/_relations.js diff --git a/server/models/comment.js b/server/models_old/comment.js similarity index 100% rename from server/models/comment.js rename to server/models_old/comment.js diff --git a/server/models/document.js b/server/models_old/document.js similarity index 100% rename from server/models/document.js rename to server/models_old/document.js diff --git a/server/models/file.js b/server/models_old/file.js similarity index 100% rename from server/models/file.js rename to server/models_old/file.js diff --git a/server/models/folder.js b/server/models_old/folder.js similarity index 100% rename from server/models/folder.js rename to server/models_old/folder.js diff --git a/server/models/group.js b/server/models_old/group.js similarity index 100% rename from server/models/group.js rename to server/models_old/group.js diff --git a/server/models/locale.js b/server/models_old/locale.js similarity index 100% rename from server/models/locale.js rename to server/models_old/locale.js diff --git a/server/models/right.js b/server/models_old/right.js similarity index 100% rename from server/models/right.js rename to server/models_old/right.js diff --git a/server/models/setting.js b/server/models_old/setting.js similarity index 100% rename from server/models/setting.js rename to server/models_old/setting.js diff --git a/server/models/tag.js b/server/models_old/tag.js similarity index 100% rename from server/models/tag.js rename to server/models_old/tag.js diff --git a/server/modules/authentication/auth0.js b/server/modules/authentication/auth0.js index 453c0dab..58ec34ff 100644 --- a/server/modules/authentication/auth0.js +++ b/server/modules/authentication/auth0.js @@ -19,7 +19,7 @@ module.exports = { clientSecret: conf.clientSecret, callbackURL: conf.callbackURL }, function (accessToken, refreshToken, profile, cb) { - WIKI.db.User.processProfile(profile).then((user) => { + WIKI.db.users.processProfile(profile).then((user) => { return cb(null, user) || true }).catch((err) => { return cb(err, null) || true diff --git a/server/modules/authentication/azure.js b/server/modules/authentication/azure.js index ad191a3c..6dae3b62 100644 --- a/server/modules/authentication/azure.js +++ b/server/modules/authentication/azure.js @@ -24,7 +24,7 @@ module.exports = { let waadProfile = jwt.decode(params.id_token) waadProfile.id = waadProfile.oid waadProfile.provider = 'azure' - WIKI.db.User.processProfile(waadProfile).then((user) => { + WIKI.db.users.processProfile(waadProfile).then((user) => { return cb(null, user) || true }).catch((err) => { return cb(err, null) || true diff --git a/server/modules/authentication/discord.js b/server/modules/authentication/discord.js index 2e22b1b7..1a5e2f5f 100644 --- a/server/modules/authentication/discord.js +++ b/server/modules/authentication/discord.js @@ -19,7 +19,7 @@ module.exports = { callbackURL: conf.callbackURL, scope: 'identify email' }, function (accessToken, refreshToken, profile, cb) { - WIKI.db.User.processProfile(profile).then((user) => { + WIKI.db.users.processProfile(profile).then((user) => { return cb(null, user) || true }).catch((err) => { return cb(err, null) || true diff --git a/server/modules/authentication/dropbox.js b/server/modules/authentication/dropbox.js index b20050a3..750a82e0 100644 --- a/server/modules/authentication/dropbox.js +++ b/server/modules/authentication/dropbox.js @@ -19,7 +19,7 @@ module.exports = { clientSecret: conf.clientSecret, callbackURL: conf.callbackURL }, (accessToken, refreshToken, profile, cb) => { - WIKI.db.User.processProfile(profile).then((user) => { + WIKI.db.users.processProfile(profile).then((user) => { return cb(null, user) || true }).catch((err) => { return cb(err, null) || true diff --git a/server/modules/authentication/facebook.js b/server/modules/authentication/facebook.js index 374e7dd8..54aa7628 100644 --- a/server/modules/authentication/facebook.js +++ b/server/modules/authentication/facebook.js @@ -19,7 +19,7 @@ module.exports = { callbackURL: conf.callbackURL, profileFields: ['id', 'displayName', 'email'] }, function (accessToken, refreshToken, profile, cb) { - WIKI.db.User.processProfile(profile).then((user) => { + WIKI.db.users.processProfile(profile).then((user) => { return cb(null, user) || true }).catch((err) => { return cb(err, null) || true diff --git a/server/modules/authentication/github.js b/server/modules/authentication/github.js index aaf92e7c..da618805 100644 --- a/server/modules/authentication/github.js +++ b/server/modules/authentication/github.js @@ -19,7 +19,7 @@ module.exports = { callbackURL: conf.callbackURL, scope: ['user:email'] }, (accessToken, refreshToken, profile, cb) => { - WIKI.db.User.processProfile(profile).then((user) => { + WIKI.db.users.processProfile(profile).then((user) => { return cb(null, user) || true }).catch((err) => { return cb(err, null) || true diff --git a/server/modules/authentication/google.js b/server/modules/authentication/google.js index 0298058f..2553995b 100644 --- a/server/modules/authentication/google.js +++ b/server/modules/authentication/google.js @@ -18,7 +18,7 @@ module.exports = { clientSecret: conf.clientSecret, callbackURL: conf.callbackURL }, (accessToken, refreshToken, profile, cb) => { - WIKI.db.User.processProfile(profile).then((user) => { + WIKI.db.users.processProfile(profile).then((user) => { return cb(null, user) || true }).catch((err) => { return cb(err, null) || true diff --git a/server/modules/authentication/ldap.js b/server/modules/authentication/ldap.js index 1991b019..c924baad 100644 --- a/server/modules/authentication/ldap.js +++ b/server/modules/authentication/ldap.js @@ -33,7 +33,7 @@ module.exports = { }, (profile, cb) => { profile.provider = 'ldap' profile.id = profile.dn - WIKI.db.User.processProfile(profile).then((user) => { + WIKI.db.users.processProfile(profile).then((user) => { return cb(null, user) || true }).catch((err) => { return cb(err, null) || true diff --git a/server/modules/authentication/local.js b/server/modules/authentication/local.js index db96f8d8..2b67ea2d 100644 --- a/server/modules/authentication/local.js +++ b/server/modules/authentication/local.js @@ -17,14 +17,12 @@ module.exports = { usernameField: 'email', passwordField: 'password' }, (uEmail, uPassword, done) => { - WIKI.db.User.findOne({ - where: { - email: uEmail, - provider: 'local' - } + WIKI.db.users.query().findOne({ + email: uEmail, + provider: 'local' }).then((user) => { if (user) { - return user.validatePassword(uPassword).then(() => { + return user.verifyPassword(uPassword).then(() => { return done(null, user) || true }).catch((err) => { return done(err, null) diff --git a/server/modules/authentication/microsoft.js b/server/modules/authentication/microsoft.js index 989373c3..cfe23760 100644 --- a/server/modules/authentication/microsoft.js +++ b/server/modules/authentication/microsoft.js @@ -18,7 +18,7 @@ module.exports = { clientSecret: conf.clientSecret, callbackURL: conf.callbackURL }, function (accessToken, refreshToken, profile, cb) { - WIKI.db.User.processProfile(profile).then((user) => { + WIKI.db.users.processProfile(profile).then((user) => { return cb(null, user) || true }).catch((err) => { return cb(err, null) || true diff --git a/server/modules/authentication/oauth2.js b/server/modules/authentication/oauth2.js index 6f930efe..e8ad97ff 100644 --- a/server/modules/authentication/oauth2.js +++ b/server/modules/authentication/oauth2.js @@ -20,7 +20,7 @@ module.exports = { clientSecret: conf.clientSecret, callbackURL: conf.callbackURL }, (accessToken, refreshToken, profile, cb) => { - WIKI.db.User.processProfile(profile).then((user) => { + WIKI.db.users.processProfile(profile).then((user) => { return cb(null, user) || true }).catch((err) => { return cb(err, null) || true diff --git a/server/modules/authentication/slack.js b/server/modules/authentication/slack.js index aa0a7e61..76291352 100644 --- a/server/modules/authentication/slack.js +++ b/server/modules/authentication/slack.js @@ -18,7 +18,7 @@ module.exports = { clientSecret: conf.clientSecret, callbackURL: conf.callbackURL }, (accessToken, refreshToken, profile, cb) => { - WIKI.db.User.processProfile(profile).then((user) => { + WIKI.db.users.processProfile(profile).then((user) => { return cb(null, user) || true }).catch((err) => { return cb(err, null) || true diff --git a/server/modules/authentication/twitch.js b/server/modules/authentication/twitch.js index 10266ac6..952b318b 100644 --- a/server/modules/authentication/twitch.js +++ b/server/modules/authentication/twitch.js @@ -19,7 +19,7 @@ module.exports = { callbackURL: conf.callbackURL, scope: 'user_read' }, function (accessToken, refreshToken, profile, cb) { - WIKI.db.User.processProfile(profile).then((user) => { + WIKI.db.users.processProfile(profile).then((user) => { return cb(null, user) || true }).catch((err) => { return cb(err, null) || true diff --git a/server/setup.js b/server/setup.js index c06df4e8..07ea151a 100644 --- a/server/setup.js +++ b/server/setup.js @@ -5,7 +5,7 @@ const path = require('path') module.exports = () => { WIKI.config.site = { path: '', - title: 'WIKI.js' + title: 'Wiki.js' } WIKI.system = require('./core/system') @@ -298,22 +298,46 @@ module.exports = () => { // Save config to DB WIKI.logger.info('Persisting config to DB...') - await WIKI.configSvc.saveToDb() + await WIKI.db.settings.query().insert([ + { key: 'auth', value: WIKI.config.auth }, + { key: 'features', value: WIKI.config.features }, + { key: 'logging', value: WIKI.config.logging }, + { key: 'site', value: WIKI.config.site }, + { key: 'theme', value: WIKI.config.theme }, + { key: 'uploads', value: WIKI.config.uploads } + ]) // Create root administrator WIKI.logger.info('Creating root administrator...') - await WIKI.db.User.upsert({ + await WIKI.db.users.query().insert({ email: req.body.adminEmail, provider: 'local', - password: await WIKI.db.User.hashPassword(req.body.adminPassword), + password: req.body.adminPassword, name: 'Administrator', role: 'admin', tfaIsActive: false }) + // Create Guest account + WIKI.logger.info('Creating root administrator...') + const guestUsr = await WIKI.db.users.query().findOne({ + provider: 'local', + email: 'guest@example.com' + }) + if (!guestUsr) { + await WIKI.db.users.query().insert({ + provider: 'local', + email: 'guest@example.com', + name: 'Guest', + password: '', + role: 'guest', + tfaIsActive: false + }) + } + // Create default locale WIKI.logger.info('Installing default locale...') - await WIKI.db.Locale.upsert({ + await WIKI.db.locales.query().insert({ code: 'en', strings: require('./locales/default.json'), isRTL: false, @@ -330,7 +354,7 @@ module.exports = () => { WIKI.logger.info('Stopping Setup...') WIKI.server.destroy(() => { - WIKI.logger.info('Setup stopped. Starting WIKI.js...') + WIKI.logger.info('Setup stopped. Starting Wiki.js...') _.delay(() => { WIKI.kernel.bootMaster() }, 1000) diff --git a/yarn.lock b/yarn.lock index 8264e31c..631cee00 100644 --- a/yarn.lock +++ b/yarn.lock @@ -152,10 +152,6 @@ "@types/express-serve-static-core" "*" "@types/serve-static" "*" -"@types/geojson@^1.0.0": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-1.0.2.tgz#b02d10ab028e2928ac592a051aaa4981a1941d03" - "@types/graphql@0.11.7": version "0.11.7" resolved "https://registry.yarnpkg.com/@types/graphql/-/graphql-0.11.7.tgz#da39a2f7c74e793e32e2bb7b3b68da1691532dd5" @@ -182,7 +178,7 @@ version "8.0.14" resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.14.tgz#4a19dc6bb61d16c01cbadc7b30ac23518fff176b" -"@types/node@^6.0.46", "@types/node@^6.0.48": +"@types/node@^6.0.46": version "6.0.84" resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.84.tgz#193ffe5a9f42864d425ffd9739d95b753c6a1eab" @@ -268,116 +264,120 @@ source-map "^0.5.6" vue-template-es2015-compiler "^1.6.0" -"@webassemblyjs/ast@1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.4.2.tgz#ab715aa1fec9dd23c025204dba39690c119418ea" +"@webassemblyjs/ast@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.4.3.tgz#3b3f6fced944d8660273347533e6d4d315b5934a" dependencies: - "@webassemblyjs/helper-wasm-bytecode" "1.4.2" - "@webassemblyjs/wast-parser" "1.4.2" + "@webassemblyjs/helper-wasm-bytecode" "1.4.3" + "@webassemblyjs/wast-parser" "1.4.3" debug "^3.1.0" - webassemblyjs "1.4.2" + webassemblyjs "1.4.3" -"@webassemblyjs/floating-point-hex-parser@1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.4.2.tgz#9296fb64caa37bf98c8064aa329680e3e2bfacc7" +"@webassemblyjs/floating-point-hex-parser@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.4.3.tgz#f5aee4c376a717c74264d7bacada981e7e44faad" -"@webassemblyjs/helper-buffer@1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.4.2.tgz#3cacecd5a6bfcb67932ed8219f81f92d8b2dafbb" - -"@webassemblyjs/helper-code-frame@1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.4.2.tgz#20526637c3849f12b08f8661248477eef9642329" +"@webassemblyjs/helper-buffer@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.4.3.tgz#0434b55958519bf503697d3824857b1dea80b729" dependencies: - "@webassemblyjs/wast-printer" "1.4.2" + debug "^3.1.0" -"@webassemblyjs/helper-fsm@1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.4.2.tgz#e41050282994b5be077b95b65b66ecd5a92c5e88" - -"@webassemblyjs/helper-wasm-bytecode@1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.4.2.tgz#b48c289c7921056aa12d71e78a17070ffe90c49c" - -"@webassemblyjs/helper-wasm-section@1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.4.2.tgz#520e02c0cc3e5e9b5f44f58abc04ba5eda6e5476" +"@webassemblyjs/helper-code-frame@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.4.3.tgz#f1349ca3e01a8e29ee2098c770773ef97af43641" dependencies: - "@webassemblyjs/ast" "1.4.2" - "@webassemblyjs/helper-buffer" "1.4.2" - "@webassemblyjs/helper-wasm-bytecode" "1.4.2" - "@webassemblyjs/wasm-gen" "1.4.2" + "@webassemblyjs/wast-printer" "1.4.3" -"@webassemblyjs/leb128@1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.4.2.tgz#d13f368abdcefc54428f55a265a993de610f8893" +"@webassemblyjs/helper-fsm@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.4.3.tgz#65a921db48fb43e868f17b27497870bdcae22b79" + +"@webassemblyjs/helper-wasm-bytecode@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.4.3.tgz#0e5b4b5418e33f8a26e940b7809862828c3721a5" + +"@webassemblyjs/helper-wasm-section@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.4.3.tgz#9ceedd53a3f152c3412e072887ade668d0b1acbf" + dependencies: + "@webassemblyjs/ast" "1.4.3" + "@webassemblyjs/helper-buffer" "1.4.3" + "@webassemblyjs/helper-wasm-bytecode" "1.4.3" + "@webassemblyjs/wasm-gen" "1.4.3" + debug "^3.1.0" + +"@webassemblyjs/leb128@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.4.3.tgz#5a5e5949dbb5adfe3ae95664d0439927ac557fb8" dependencies: leb "^0.3.0" -"@webassemblyjs/validation@1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/validation/-/validation-1.4.2.tgz#55cf5b219e25900c85773fc35beb9d12ae0ede53" +"@webassemblyjs/validation@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/validation/-/validation-1.4.3.tgz#9e66c9b3079d7bbcf2070c1bf52a54af2a09aac9" dependencies: - "@webassemblyjs/ast" "1.4.2" + "@webassemblyjs/ast" "1.4.3" -"@webassemblyjs/wasm-edit@1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.4.2.tgz#bde9a581065f63f257ed511d7d9cf04f8cd04524" +"@webassemblyjs/wasm-edit@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.4.3.tgz#87febd565e0ffb5ae25f6495bb3958d17aa0a779" dependencies: - "@webassemblyjs/ast" "1.4.2" - "@webassemblyjs/helper-buffer" "1.4.2" - "@webassemblyjs/helper-wasm-bytecode" "1.4.2" - "@webassemblyjs/helper-wasm-section" "1.4.2" - "@webassemblyjs/wasm-gen" "1.4.2" - "@webassemblyjs/wasm-opt" "1.4.2" - "@webassemblyjs/wasm-parser" "1.4.2" - "@webassemblyjs/wast-printer" "1.4.2" + "@webassemblyjs/ast" "1.4.3" + "@webassemblyjs/helper-buffer" "1.4.3" + "@webassemblyjs/helper-wasm-bytecode" "1.4.3" + "@webassemblyjs/helper-wasm-section" "1.4.3" + "@webassemblyjs/wasm-gen" "1.4.3" + "@webassemblyjs/wasm-opt" "1.4.3" + "@webassemblyjs/wasm-parser" "1.4.3" + "@webassemblyjs/wast-printer" "1.4.3" debug "^3.1.0" -"@webassemblyjs/wasm-gen@1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.4.2.tgz#0899297f9426073736df799287845a73c597cf90" +"@webassemblyjs/wasm-gen@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.4.3.tgz#8553164d0154a6be8f74d653d7ab355f73240aa4" dependencies: - "@webassemblyjs/ast" "1.4.2" - "@webassemblyjs/helper-wasm-bytecode" "1.4.2" - "@webassemblyjs/leb128" "1.4.2" + "@webassemblyjs/ast" "1.4.3" + "@webassemblyjs/helper-wasm-bytecode" "1.4.3" + "@webassemblyjs/leb128" "1.4.3" -"@webassemblyjs/wasm-opt@1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.4.2.tgz#c44ad48e109aec197e3bf69875c54537d76ba2e9" +"@webassemblyjs/wasm-opt@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.4.3.tgz#26c7a23bfb136aa405b1d3410e63408ec60894b8" dependencies: - "@webassemblyjs/ast" "1.4.2" - "@webassemblyjs/helper-buffer" "1.4.2" - "@webassemblyjs/wasm-gen" "1.4.2" - "@webassemblyjs/wasm-parser" "1.4.2" + "@webassemblyjs/ast" "1.4.3" + "@webassemblyjs/helper-buffer" "1.4.3" + "@webassemblyjs/wasm-gen" "1.4.3" + "@webassemblyjs/wasm-parser" "1.4.3" + debug "^3.1.0" -"@webassemblyjs/wasm-parser@1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.4.2.tgz#3bf7e10cfe336db0ecdea0a5d7ed8a63b7a7754a" +"@webassemblyjs/wasm-parser@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.4.3.tgz#7ddd3e408f8542647ed612019cfb780830993698" dependencies: - "@webassemblyjs/ast" "1.4.2" - "@webassemblyjs/helper-wasm-bytecode" "1.4.2" - "@webassemblyjs/leb128" "1.4.2" - "@webassemblyjs/wasm-parser" "1.4.2" - webassemblyjs "1.4.2" + "@webassemblyjs/ast" "1.4.3" + "@webassemblyjs/helper-wasm-bytecode" "1.4.3" + "@webassemblyjs/leb128" "1.4.3" + "@webassemblyjs/wasm-parser" "1.4.3" + webassemblyjs "1.4.3" -"@webassemblyjs/wast-parser@1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.4.2.tgz#6499c38cf8895a81394f7e40d4681a85aaa84498" +"@webassemblyjs/wast-parser@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.4.3.tgz#3250402e2c5ed53dbe2233c9de1fe1f9f0d51745" dependencies: - "@webassemblyjs/ast" "1.4.2" - "@webassemblyjs/floating-point-hex-parser" "1.4.2" - "@webassemblyjs/helper-code-frame" "1.4.2" - "@webassemblyjs/helper-fsm" "1.4.2" + "@webassemblyjs/ast" "1.4.3" + "@webassemblyjs/floating-point-hex-parser" "1.4.3" + "@webassemblyjs/helper-code-frame" "1.4.3" + "@webassemblyjs/helper-fsm" "1.4.3" long "^3.2.0" - webassemblyjs "1.4.2" + webassemblyjs "1.4.3" -"@webassemblyjs/wast-printer@1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.4.2.tgz#ee70a828f0d9730b55b9a5c3ed694094ba68ba57" +"@webassemblyjs/wast-printer@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.4.3.tgz#3d59aa8d0252d6814a3ef4e6d2a34c9ded3904e0" dependencies: - "@webassemblyjs/ast" "1.4.2" - "@webassemblyjs/wast-parser" "1.4.2" + "@webassemblyjs/ast" "1.4.3" + "@webassemblyjs/wast-parser" "1.4.3" long "^3.2.0" abab@^1.0.3: @@ -504,6 +504,15 @@ ajv@^6.1.0: fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" +ajv@^6.1.1: + version "6.5.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.0.tgz#4c8affdf80887d8f132c9c52ab8a2dc4d0b7b24c" + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + uri-js "^4.2.1" + align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" @@ -802,6 +811,10 @@ array-differ@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" +array-each@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" + array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" @@ -814,6 +827,10 @@ array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" +array-slice@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" + array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -943,12 +960,12 @@ auto-load@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/auto-load/-/auto-load-3.0.0.tgz#f3c91d15120a32c89524b420d7283584c72088aa" -autoprefixer@8.4.1: - version "8.4.1" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-8.4.1.tgz#c6b30001ea4b3daa6b611e50071f62dd24beb564" +autoprefixer@8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-8.5.0.tgz#89a39b1316fbe7bc2b4997a0c7dad0149d99511c" dependencies: - browserslist "^3.2.6" - caniuse-lite "^1.0.30000832" + browserslist "^3.2.7" + caniuse-lite "^1.0.30000839" normalize-range "^0.1.2" num2fraction "^1.2.2" postcss "^6.0.22" @@ -1104,7 +1121,7 @@ babel-core@^6.26.0: slash "^1.0.0" source-map "^0.5.6" -babel-eslint@8.2.3: +babel-eslint@8.2.3, babel-eslint@^8.2.3: version "8.2.3" resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.3.tgz#1a2e6681cc9bc4473c32899e59915e19cd6733cf" dependencies: @@ -1273,12 +1290,12 @@ babel-jest@23.0.0-alpha.0: babel-plugin-istanbul "^4.1.5" babel-preset-jest "^23.0.0-alpha.0" -babel-jest@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.4.3.tgz#4b7a0b6041691bbd422ab49b3b73654a49a6627a" +babel-jest@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.4.4.tgz#977259240420e227444ebe49e226a61e49ea659d" dependencies: babel-plugin-istanbul "^4.1.5" - babel-preset-jest "^22.4.3" + babel-preset-jest "^22.4.4" babel-literal-to-ast@^0.1.2: version "0.1.2" @@ -1325,9 +1342,9 @@ babel-plugin-istanbul@^4.1.5: istanbul-lib-instrument "^1.7.5" test-exclude "^4.1.1" -babel-plugin-jest-hoist@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.3.tgz#7d8bcccadc2667f96a0dcc6afe1891875ee6c14a" +babel-plugin-jest-hoist@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.4.tgz#b9851906eab34c7bf6f8c895a2b08bea1a844c0b" babel-plugin-jest-hoist@^23.0.0-alpha.0: version "23.0.0-alpha.0" @@ -1748,11 +1765,11 @@ babel-preset-es2015@6.24.1, babel-preset-es2015@^6.9.0: babel-plugin-transform-es2015-unicode-regex "^6.24.1" babel-plugin-transform-regenerator "^6.24.1" -babel-preset-jest@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.4.3.tgz#e92eef9813b7026ab4ca675799f37419b5a44156" +babel-preset-jest@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.4.4.tgz#ec9fbd8bcd7dfd24b8b5320e0e688013235b7c39" dependencies: - babel-plugin-jest-hoist "^22.4.3" + babel-plugin-jest-hoist "^22.4.4" babel-plugin-syntax-object-rest-spread "^6.13.0" babel-preset-jest@^23.0.0-alpha.0: @@ -1988,6 +2005,10 @@ bfj-node4@^5.2.0: check-types "^7.3.0" tryer "^1.0.0" +big-number@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/big-number/-/big-number-0.3.1.tgz#ac73020c0a59bb79eb17c2ce2db77f77d974e013" + big.js@^3.1.3: version "3.2.0" resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" @@ -2010,6 +2031,13 @@ bl@^1.0.0: dependencies: readable-stream "^2.0.5" +bl@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + blessed@^0.1.81: version "0.1.81" resolved "https://registry.yarnpkg.com/blessed/-/blessed-0.1.81.tgz#f962d687ec2c369570ae71af843256e6d0ca1129" @@ -2024,7 +2052,7 @@ bluebird@3.5.1, bluebird@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" -bluebird@^3.1.1, bluebird@^3.3.4, bluebird@^3.4.1, bluebird@^3.4.6, bluebird@^3.5.0: +bluebird@^3.1.1, bluebird@^3.3.4, bluebird@^3.4.1, bluebird@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" @@ -2047,6 +2075,21 @@ body-parser@1.18.2: raw-body "2.3.2" type-is "~1.6.15" +body-parser@1.18.3: + version "1.18.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" + dependencies: + bytes "3.0.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "~1.6.3" + iconv-lite "0.4.23" + on-finished "~2.3.0" + qs "6.5.2" + raw-body "2.3.3" + type-is "~1.6.16" + boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" @@ -2205,7 +2248,7 @@ browserslist@^2.0.0, browserslist@^2.11.3: caniuse-lite "^1.0.30000792" electron-to-chromium "^1.3.30" -browserslist@^3.2.6: +browserslist@^3.2.6, browserslist@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.7.tgz#aa488634d320b55e88bab0256184dbbcca1e6de9" dependencies: @@ -2277,12 +2320,12 @@ builtins@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" -bull@3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/bull/-/bull-3.4.1.tgz#5b475bf853a43331aa032478c54a42e0ab7440fd" +bull@3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/bull/-/bull-3.4.2.tgz#563e033d09f9cc0865d24e635deab9224e370cab" dependencies: bluebird "^3.5.0" - cron-parser "^2.4.1" + cron-parser "^2.5.0" debuglog "^1.0.0" ioredis "^3.1.4" lodash "^4.17.4" @@ -2440,7 +2483,7 @@ caniuse-lite@^1.0.30000805: version "1.0.30000815" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000815.tgz#3a4258e6850362185adb11b0d754a48402d35bf6" -caniuse-lite@^1.0.30000832, caniuse-lite@^1.0.30000835: +caniuse-lite@^1.0.30000835, caniuse-lite@^1.0.30000839: version "1.0.30000839" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000839.tgz#41fcc036cf1cb77a0e0be041210f77f1ced44a7b" @@ -2483,7 +2526,7 @@ chain-function@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.0.tgz#0d4ab37e7e18ead0bdc47b920764118ce58733dc" -chalk@2.3.x, chalk@^2.3.2: +chalk@2.3.2, chalk@2.3.x, chalk@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65" dependencies: @@ -2533,7 +2576,7 @@ chalk@^2.3.1: escape-string-regexp "^1.0.5" supports-color "^5.2.0" -chalk@^2.4.1: +chalk@^2.4.0, chalk@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" dependencies: @@ -2813,13 +2856,6 @@ cloneable-readable@^1.0.0: process-nextick-args "^2.0.0" readable-stream "^2.3.5" -cls-bluebird@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cls-bluebird/-/cls-bluebird-2.1.0.tgz#37ef1e080a8ffb55c2f4164f536f1919e7968aee" - dependencies: - is-bluebird "^1.0.2" - shimmer "^1.1.0" - cluster-key-slot@^1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.0.8.tgz#7654556085a65330932a2e8b5976f8e2d0b3e414" @@ -2990,6 +3026,10 @@ commander@^2.13.0: version "2.14.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" +commander@^2.15.1: + version "2.15.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" + commander@~2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" @@ -3245,9 +3285,9 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" -cron-parser@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.4.1.tgz#022befce1af293e4d3144ff04c2cbd2edb491271" +cron-parser@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.5.0.tgz#ec1385a3aa8c63624256789ce2ecfa338384676a" dependencies: is-nan "^1.2.1" moment-timezone "^0.5.0" @@ -3587,7 +3627,7 @@ de-indent@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" -debug@*, debug@^3, debug@^3.0, debug@^3.1.0: +debug@*, debug@3.1.0, debug@^3, debug@^3.0, debug@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: @@ -3775,11 +3815,7 @@ depd@1.1.1, depd@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" -depd@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" - -depd@~1.1.2: +depd@^1.1.2, depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" @@ -3806,6 +3842,10 @@ detect-conflict@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/detect-conflict/-/detect-conflict-1.0.1.tgz#088657a66a961c05019db7c4230883b1c6b4176e" +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + detect-indent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" @@ -3967,10 +4007,6 @@ dotize@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/dotize/-/dotize-0.2.0.tgz#69e52f4a2b13344c56ff23c703c3074a2d6e57c7" -dottie@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dottie/-/dottie-2.0.0.tgz#da191981c8b8d713ca0115d5898cf397c2f0ddd0" - double-ended-queue@^2.1.0-0: version "2.1.0-0" resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" @@ -4224,9 +4260,9 @@ eslint-module-utils@^2.2.0: debug "^2.6.8" pkg-dir "^1.0.0" -eslint-plugin-import@2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.11.0.tgz#15aeea37a67499d848e8e981806d4627b5503816" +eslint-plugin-import@2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.12.0.tgz#dad31781292d6664b25317fd049d2e2b2f02205d" dependencies: contains-path "^0.1.0" debug "^2.6.8" @@ -4486,7 +4522,7 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -expect@^22.4.3: +expect@^22.4.0: version "22.4.3" resolved "https://registry.yarnpkg.com/expect/-/expect-22.4.3.tgz#d5a29d0a0e1fb2153557caef2674d4547e914674" dependencies: @@ -4671,6 +4707,10 @@ 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-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + fast-glob@^2.0.2: version "2.2.0" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.0.tgz#e9d032a69b86bef46fc03d935408f02fb211d9fc" @@ -4752,9 +4792,9 @@ file-loader@1.1.11: loader-utils "^1.0.2" schema-utils "^0.4.5" -file-type@7.7.1: - version "7.7.1" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-7.7.1.tgz#91c2f5edb8ce70688b9b68a90d931bbb6cb21f65" +file-type@8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-8.0.0.tgz#6e4bccc741187f4113334a4e4a4ef84d54d7cc1e" file-type@^3.8.0: version "3.9.0" @@ -4795,14 +4835,14 @@ filesize.js@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/filesize.js/-/filesize.js-1.0.2.tgz#934c013395a71804875cf11e6f1ffe211c3f2192" -filesize@^3.2.1: - version "3.5.11" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.11.tgz#1919326749433bb3cf77368bd158caabcc19e9ee" - filesize@^3.5.11: version "3.6.0" resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.0.tgz#22d079615624bb6fd3c04026120628a41b3f4efa" +filesize@^3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" + fill-range@^2.1.0: version "2.2.3" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" @@ -4875,12 +4915,35 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" +findup-sync@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" + dependencies: + detect-file "^1.0.0" + is-glob "^3.1.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + +fined@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fined/-/fined-1.1.0.tgz#b37dc844b76a2f5e7081e884f7c0ae344f153476" + dependencies: + expand-tilde "^2.0.2" + is-plain-object "^2.0.3" + object.defaults "^1.1.0" + object.pick "^1.2.0" + parse-filepath "^1.0.1" + first-chunk-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz#1bdecdb8e083c0664b91945581577a43a9f31d70" dependencies: readable-stream "^2.0.2" +flagged-respawn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.0.tgz#4e79ae9b2eb38bf86b3bb56bf3e0a56aa5fcabd7" + flat-cache@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" @@ -4909,7 +4972,13 @@ flush-write-stream@^1.0.0: inherits "^2.0.1" readable-stream "^2.0.4" -follow-redirects@1.4.1, follow-redirects@^1.3.0: +follow-redirects@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.0.tgz#234f49cf770b7f35b40e790f636ceba0c3a0ab77" + dependencies: + debug "^3.1.0" + +follow-redirects@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.4.1.tgz#d8120f4518190f55aac65bb6fc7b85fcd666d6aa" dependencies: @@ -5087,11 +5156,7 @@ generate-object-property@^1.1.0: dependencies: is-property "^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.4.0: +generic-pool@^3.1.7: version "3.4.2" resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.4.2.tgz#92ff7196520d670839a67308092a12aadf2f6a59" @@ -5840,6 +5905,15 @@ http-errors@1.6.2, http-errors@~1.6.2: setprototypeof "1.0.3" statuses ">= 1.3.1 < 2" +http-errors@1.6.3, http-errors@~1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + http-signature@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" @@ -5881,9 +5955,9 @@ i18next-xhr-backend@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/i18next-xhr-backend/-/i18next-xhr-backend-1.5.1.tgz#50282610780c6a696d880dfa7f4ac1d01e8c3ad5" -i18next@11.3.1: - version "11.3.1" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-11.3.1.tgz#567f0e78350a30de32d2cee8667ce91b3d00d504" +i18next@11.3.2: + version "11.3.2" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-11.3.2.tgz#4a1a7bb14383ba6aed4abca139b03681fc96e023" iconv-lite@0.4.13: version "0.4.13" @@ -5893,6 +5967,12 @@ iconv-lite@0.4.19, iconv-lite@^0.4.18, iconv-lite@~0.4.13: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" +iconv-lite@0.4.23, iconv-lite@^0.4.11: + version "0.4.23" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" + dependencies: + safer-buffer ">= 2.1.2 < 3" + iconv-lite@^0.4.17, iconv-lite@^0.4.4: version "0.4.18" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.18.tgz#23d8656b16aae6742ac29732ea8f0336a4789cf2" @@ -5976,10 +6056,6 @@ indexof@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" -inflection@1.12.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.12.0.tgz#a200935656d6f5f6bc4dc7502e1aecb703228416" - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -6082,7 +6158,7 @@ interpret@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90" -interpret@^1.0.4: +interpret@^1.0.4, interpret@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" @@ -6177,6 +6253,13 @@ is-absolute-url@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" +is-absolute@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" + dependencies: + is-relative "^1.0.0" + is-windows "^1.0.1" + is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -6203,10 +6286,6 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" -is-bluebird@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-bluebird/-/is-bluebird-1.0.2.tgz#096439060f4aa411abee19143a84d6a55346d6e2" - is-buffer@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" @@ -6477,6 +6556,12 @@ is-regex@^1.0.3, is-regex@^1.0.4: dependencies: has "^1.0.1" +is-relative@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" + dependencies: + is-unc-path "^1.0.0" + is-resolvable@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" @@ -6511,6 +6596,12 @@ is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" +is-unc-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" + dependencies: + unc-path-regex "^0.1.2" + is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" @@ -6690,15 +6781,15 @@ javascript-stringify@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-1.6.0.tgz#142d111f3a6e3dae8f4a9afd77d45855b5a9cce3" -jest-changed-files@^22.4.3: +jest-changed-files@^22.2.0: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.4.3.tgz#8882181e022c38bd46a2e4d18d44d19d90a90fb2" dependencies: throat "^4.0.0" -jest-cli@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.4.3.tgz#bf16c4a5fb7edc3fa5b9bb7819e34139e88a72c7" +jest-cli@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.4.4.tgz#68cd2a2aae983adb1e6638248ca21082fd6d9e90" dependencies: ansi-escapes "^3.0.0" chalk "^2.0.1" @@ -6711,20 +6802,20 @@ jest-cli@^22.4.3: istanbul-lib-coverage "^1.1.1" istanbul-lib-instrument "^1.8.0" istanbul-lib-source-maps "^1.2.1" - jest-changed-files "^22.4.3" - jest-config "^22.4.3" - jest-environment-jsdom "^22.4.3" - jest-get-type "^22.4.3" - jest-haste-map "^22.4.3" - jest-message-util "^22.4.3" - jest-regex-util "^22.4.3" - jest-resolve-dependencies "^22.4.3" - jest-runner "^22.4.3" - jest-runtime "^22.4.3" - jest-snapshot "^22.4.3" - jest-util "^22.4.3" - jest-validate "^22.4.3" - jest-worker "^22.4.3" + jest-changed-files "^22.2.0" + jest-config "^22.4.4" + jest-environment-jsdom "^22.4.1" + jest-get-type "^22.1.0" + jest-haste-map "^22.4.2" + jest-message-util "^22.4.0" + jest-regex-util "^22.1.0" + jest-resolve-dependencies "^22.1.0" + jest-runner "^22.4.4" + jest-runtime "^22.4.4" + jest-snapshot "^22.4.0" + jest-util "^22.4.1" + jest-validate "^22.4.4" + jest-worker "^22.2.2" micromatch "^2.3.11" node-notifier "^5.2.1" realpath-native "^1.0.0" @@ -6735,23 +6826,23 @@ jest-cli@^22.4.3: which "^1.2.12" yargs "^10.0.3" -jest-config@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.3.tgz#0e9d57db267839ea31309119b41dc2fa31b76403" +jest-config@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.4.tgz#72a521188720597169cd8b4ff86934ef5752d86a" dependencies: chalk "^2.0.1" glob "^7.1.1" - jest-environment-jsdom "^22.4.3" - jest-environment-node "^22.4.3" - jest-get-type "^22.4.3" - jest-jasmine2 "^22.4.3" - jest-regex-util "^22.4.3" - jest-resolve "^22.4.3" - jest-util "^22.4.3" - jest-validate "^22.4.3" - pretty-format "^22.4.3" + jest-environment-jsdom "^22.4.1" + jest-environment-node "^22.4.1" + jest-get-type "^22.1.0" + jest-jasmine2 "^22.4.4" + jest-regex-util "^22.1.0" + jest-resolve "^22.4.2" + jest-util "^22.4.1" + jest-validate "^22.4.4" + pretty-format "^22.4.0" -jest-diff@^22.4.3: +jest-diff@^22.4.0, jest-diff@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.4.3.tgz#e18cc3feff0aeef159d02310f2686d4065378030" dependencies: @@ -6760,13 +6851,13 @@ jest-diff@^22.4.3: jest-get-type "^22.4.3" pretty-format "^22.4.3" -jest-docblock@^22.4.3: +jest-docblock@^22.4.0, jest-docblock@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.4.3.tgz#50886f132b42b280c903c592373bb6e93bb68b19" dependencies: detect-newline "^2.1.0" -jest-environment-jsdom@^22.4.3: +jest-environment-jsdom@^22.4.1: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz#d67daa4155e33516aecdd35afd82d4abf0fa8a1e" dependencies: @@ -6774,18 +6865,18 @@ jest-environment-jsdom@^22.4.3: jest-util "^22.4.3" jsdom "^11.5.1" -jest-environment-node@^22.4.3: +jest-environment-node@^22.4.1: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.4.3.tgz#54c4eaa374c83dd52a9da8759be14ebe1d0b9129" dependencies: jest-mock "^22.4.3" jest-util "^22.4.3" -jest-get-type@^22.4.3: +jest-get-type@^22.1.0, jest-get-type@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" -jest-haste-map@^22.4.3: +jest-haste-map@^22.4.2: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.4.3.tgz#25842fa2ba350200767ac27f658d58b9d5c2e20b" dependencies: @@ -6797,37 +6888,37 @@ jest-haste-map@^22.4.3: micromatch "^2.3.11" sane "^2.0.0" -jest-jasmine2@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.4.3.tgz#4daf64cd14c793da9db34a7c7b8dcfe52a745965" +jest-jasmine2@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.4.4.tgz#c55f92c961a141f693f869f5f081a79a10d24e23" dependencies: chalk "^2.0.1" co "^4.6.0" - expect "^22.4.3" + expect "^22.4.0" graceful-fs "^4.1.11" is-generator-fn "^1.0.0" - jest-diff "^22.4.3" - jest-matcher-utils "^22.4.3" - jest-message-util "^22.4.3" - jest-snapshot "^22.4.3" - jest-util "^22.4.3" + jest-diff "^22.4.0" + jest-matcher-utils "^22.4.0" + jest-message-util "^22.4.0" + jest-snapshot "^22.4.0" + jest-util "^22.4.1" source-map-support "^0.5.0" -jest-junit@3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-3.7.0.tgz#34abaed677439eb96557815d18b5ba01364fd897" +jest-junit@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-4.0.0.tgz#6af04d43940d7e81dc7d37ec1b80c97551d91e80" dependencies: mkdirp "^0.5.1" strip-ansi "^4.0.0" xml "^1.0.1" -jest-leak-detector@^22.4.3: +jest-leak-detector@^22.4.0: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.4.3.tgz#2b7b263103afae8c52b6b91241a2de40117e5b35" dependencies: pretty-format "^22.4.3" -jest-matcher-utils@^22.4.3: +jest-matcher-utils@^22.4.0, jest-matcher-utils@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz#4632fe428ebc73ebc194d3c7b65d37b161f710ff" dependencies: @@ -6835,7 +6926,7 @@ jest-matcher-utils@^22.4.3: jest-get-type "^22.4.3" pretty-format "^22.4.3" -jest-message-util@^22.4.3: +jest-message-util@^22.4.0, jest-message-util@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.4.3.tgz#cf3d38aafe4befddbfc455e57d65d5239e399eb7" dependencies: @@ -6849,56 +6940,56 @@ jest-mock@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.4.3.tgz#f63ba2f07a1511772cdc7979733397df770aabc7" -jest-regex-util@^22.4.3: +jest-regex-util@^22.1.0, jest-regex-util@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.4.3.tgz#a826eb191cdf22502198c5401a1fc04de9cef5af" -jest-resolve-dependencies@^22.4.3: +jest-resolve-dependencies@^22.1.0: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.4.3.tgz#e2256a5a846732dc3969cb72f3c9ad7725a8195e" dependencies: jest-regex-util "^22.4.3" -jest-resolve@^22.4.3: +jest-resolve@^22.4.2: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.4.3.tgz#0ce9d438c8438229aa9b916968ec6b05c1abb4ea" dependencies: browser-resolve "^1.11.2" chalk "^2.0.1" -jest-runner@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.4.3.tgz#298ddd6a22b992c64401b4667702b325e50610c3" +jest-runner@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.4.4.tgz#dfca7b7553e0fa617e7b1291aeb7ce83e540a907" dependencies: exit "^0.1.2" - jest-config "^22.4.3" - jest-docblock "^22.4.3" - jest-haste-map "^22.4.3" - jest-jasmine2 "^22.4.3" - jest-leak-detector "^22.4.3" - jest-message-util "^22.4.3" - jest-runtime "^22.4.3" - jest-util "^22.4.3" - jest-worker "^22.4.3" + jest-config "^22.4.4" + jest-docblock "^22.4.0" + jest-haste-map "^22.4.2" + jest-jasmine2 "^22.4.4" + jest-leak-detector "^22.4.0" + jest-message-util "^22.4.0" + jest-runtime "^22.4.4" + jest-util "^22.4.1" + jest-worker "^22.2.2" throat "^4.0.0" -jest-runtime@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.4.3.tgz#b69926c34b851b920f666c93e86ba2912087e3d0" +jest-runtime@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.4.4.tgz#9ba7792fc75582a5be0f79af6f8fe8adea314048" dependencies: babel-core "^6.0.0" - babel-jest "^22.4.3" + babel-jest "^22.4.4" babel-plugin-istanbul "^4.1.5" chalk "^2.0.1" convert-source-map "^1.4.0" exit "^0.1.2" graceful-fs "^4.1.11" - jest-config "^22.4.3" - jest-haste-map "^22.4.3" - jest-regex-util "^22.4.3" - jest-resolve "^22.4.3" - jest-util "^22.4.3" - jest-validate "^22.4.3" + jest-config "^22.4.4" + jest-haste-map "^22.4.2" + jest-regex-util "^22.1.0" + jest-resolve "^22.4.2" + jest-util "^22.4.1" + jest-validate "^22.4.4" json-stable-stringify "^1.0.1" micromatch "^2.3.11" realpath-native "^1.0.0" @@ -6911,7 +7002,7 @@ jest-serializer@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-22.4.3.tgz#a679b81a7f111e4766235f4f0c46d230ee0f7436" -jest-snapshot@^22.4.3: +jest-snapshot@^22.4.0: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.4.3.tgz#b5c9b42846ffb9faccb76b841315ba67887362d2" dependencies: @@ -6922,7 +7013,7 @@ jest-snapshot@^22.4.3: natural-compare "^1.4.0" pretty-format "^22.4.3" -jest-util@^22.4.3: +jest-util@^22.4.1, jest-util@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.4.3.tgz#c70fec8eec487c37b10b0809dc064a7ecf6aafac" dependencies: @@ -6934,28 +7025,28 @@ jest-util@^22.4.3: mkdirp "^0.5.1" source-map "^0.6.0" -jest-validate@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.4.3.tgz#0780954a5a7daaeec8d3c10834b9280865976b30" +jest-validate@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.4.4.tgz#1dd0b616ef46c995de61810d85f57119dbbcec4d" dependencies: chalk "^2.0.1" - jest-config "^22.4.3" - jest-get-type "^22.4.3" + jest-config "^22.4.4" + jest-get-type "^22.1.0" leven "^2.1.0" - pretty-format "^22.4.3" + pretty-format "^22.4.0" -jest-worker@^22.4.3: +jest-worker@^22.2.2, jest-worker@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.4.3.tgz#5c421417cba1c0abf64bf56bd5fb7968d79dd40b" dependencies: merge-stream "^1.0.1" -jest@22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest/-/jest-22.4.3.tgz#2261f4b117dc46d9a4a1a673d2150958dee92f16" +jest@22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/jest/-/jest-22.4.4.tgz#ffb36c9654b339a13e10b3d4b338eb3e9d49f6eb" dependencies: import-local "^1.0.0" - jest-cli "^22.4.3" + jest-cli "^22.4.4" joi@^12.0.0: version "12.0.0" @@ -6977,10 +7068,6 @@ js-cookie@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.0.tgz#1b2c279a6eece380a12168b92485265b35b1effb" -js-string-escape@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" - js-stringify@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/js-stringify/-/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db" @@ -7293,6 +7380,29 @@ klaw@2.1.1: dependencies: graceful-fs "^4.1.9" +knex@0.14.6: + version "0.14.6" + resolved "https://registry.yarnpkg.com/knex/-/knex-0.14.6.tgz#ad57c4ef8fa1b51ebc8c37c2c9b483f6fb34e41e" + dependencies: + babel-runtime "^6.26.0" + bluebird "^3.5.1" + chalk "2.3.2" + commander "^2.15.1" + debug "3.1.0" + inherits "~2.0.3" + interpret "^1.1.0" + liftoff "2.5.0" + lodash "^4.17.5" + minimist "1.2.0" + mkdirp "^0.5.1" + pg-connection-string "2.0.0" + readable-stream "2.3.6" + safe-buffer "^5.1.1" + tarn "^1.1.4" + tildify "1.2.0" + uuid "^3.2.1" + v8flags "^3.0.2" + kuler@0.0.x: version "0.0.0" resolved "https://registry.yarnpkg.com/kuler/-/kuler-0.0.0.tgz#b66bb46b934e550f59d818848e0abba4f7f5553c" @@ -7377,6 +7487,19 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +liftoff@2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.5.0.tgz#2009291bb31cea861bbf10a7c15a28caf75c31ec" + dependencies: + extend "^3.0.0" + findup-sync "^2.0.0" + fined "^1.0.1" + flagged-respawn "^1.0.0" + is-plain-object "^2.0.4" + object.map "^1.0.0" + rechoir "^0.6.2" + resolve "^1.1.7" + linkify-it@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.0.3.tgz#d94a4648f9b1c179d64fa97291268bdb6ce9434f" @@ -7686,7 +7809,7 @@ lodash@4.17.10, lodash@^4.17.10: version "4.17.10" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" -lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.1, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.1, lodash@~4.17.4: +lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@~4.17.4: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -7803,17 +7926,19 @@ make-dir@^1.1.0: dependencies: pify "^3.0.0" +make-iterator@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" + dependencies: + kind-of "^6.0.2" + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" dependencies: tmpl "1.0.x" -manakin@~0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/manakin/-/manakin-0.5.1.tgz#c4a7116f6b00df3d5f1a37ad3ca515d22065a658" - -map-cache@^0.2.2: +map-cache@^0.2.0, map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -8037,6 +8162,24 @@ micromatch@^2.1.5, micromatch@^2.3.11, micromatch@^2.3.7: parse-glob "^3.0.4" regex-cache "^0.4.2" +micromatch@^3.0.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + micromatch@^3.1.4: version "3.1.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.5.tgz#d05e168c206472dfbca985bfef4f57797b4cd4ba" @@ -8161,14 +8304,14 @@ minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" +minimist@1.2.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, "minimist@~ 1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + minimist@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.1.0.tgz#99df657a52574c21c9057497df742790b2b4c0de" -minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, "minimist@~ 1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" @@ -8225,9 +8368,9 @@ mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdi dependencies: minimist "0.0.8" -moment-timezone@0.5.16: - version "0.5.16" - resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.16.tgz#661717d5f55b4d2c2e002262d726c83785192a5a" +moment-timezone@0.5.17: + version "0.5.17" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.17.tgz#3c8fef32051d84c3af174d91dc52977dcb0ad7e5" dependencies: moment ">= 2.9.0" @@ -8237,13 +8380,7 @@ moment-timezone@^0.5.0, moment-timezone@^0.5.x: dependencies: moment ">= 2.9.0" -moment-timezone@^0.5.14: - version "0.5.14" - resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.14.tgz#4eb38ff9538b80108ba467a458f3ed4268ccfcb1" - dependencies: - moment ">= 2.9.0" - -moment@2.22.1: +moment@2.22.1, moment@^2.22.1: version "2.22.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.1.tgz#529a2e9bf973f259c9643d237fda84de3a26e8ad" @@ -8255,26 +8392,24 @@ moment@^2.11.1: version "2.21.0" resolved "https://registry.yarnpkg.com/moment/-/moment-2.21.0.tgz#2a114b51d2a6ec9e6d83cf803f838a878d8a023a" -moment@^2.11.2, moment@^2.20.0: - version "2.20.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.20.1.tgz#d6eb1a46cbcc14a2b2f9434112c1ff8907f313fd" - moment@^2.19: version "2.20.0" resolved "https://registry.yarnpkg.com/moment/-/moment-2.20.0.tgz#53396358994dd3a551e966a66af715ecb6c30ad0" -mongodb-core@3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/mongodb-core/-/mongodb-core-3.0.7.tgz#a9941f14883a75768d554cef5fd67756a9cc0f25" +mongodb-core@3.1.0-beta4: + version "3.1.0-beta4" + resolved "https://registry.yarnpkg.com/mongodb-core/-/mongodb-core-3.1.0-beta4.tgz#44813da6ee0a61d26f0d523207cfba8ca32e59fc" dependencies: bson "~1.0.4" require_optional "^1.0.1" + optionalDependencies: + saslprep "^1.0.0" -mongodb@3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.0.7.tgz#cfcbaee992d78dabca67177f8f9db9cf13ac3a44" +mongodb@3.1.0-beta4: + version "3.1.0-beta4" + resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.1.0-beta4.tgz#922cb05c37d04a51ea783569743ef2a893585bfe" dependencies: - mongodb-core "3.0.7" + mongodb-core "3.1.0-beta4" move-concurrently@^1.0.1: version "1.0.1" @@ -8295,6 +8430,14 @@ ms@2.1.1, ms@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" +mssql@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/mssql/-/mssql-4.1.0.tgz#5a70e24d751c28bcb9f23acf709c1bdaccc8eae6" + dependencies: + debug "^2.6.3" + generic-pool "^3.1.7" + tedious "^2.0.0" + multer@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/multer/-/multer-1.3.0.tgz#092b2670f6846fa4914965efc8cf94c20fec6cd2" @@ -8734,10 +8877,6 @@ 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" @@ -8764,6 +8903,15 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" +object.defaults@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" + dependencies: + array-each "^1.0.1" + array-slice "^1.0.0" + for-own "^1.0.0" + isobject "^3.0.0" + object.getownpropertydescriptors@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" @@ -8771,6 +8919,13 @@ object.getownpropertydescriptors@^2.0.3: define-properties "^1.1.2" es-abstract "^1.5.1" +object.map@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37" + dependencies: + for-own "^1.0.0" + make-iterator "^1.0.0" + object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -8778,12 +8933,20 @@ object.omit@^2.0.0: for-own "^0.1.4" is-extendable "^0.1.1" -object.pick@^1.3.0: +object.pick@^1.2.0, object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" dependencies: isobject "^3.0.1" +objection@1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/objection/-/objection-1.1.8.tgz#2a4c57c0e228430a8845623be931bb90d96fde38" + dependencies: + ajv "^6.1.1" + bluebird "^3.5.1" + lodash "^4.17.4" + offline-plugin@5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/offline-plugin/-/offline-plugin-5.0.3.tgz#61488c5c5842d8576aa677384b5bbd3e60949289" @@ -9031,6 +9194,14 @@ parse-asn1@^5.0.0: evp_bytestokey "^1.0.0" pbkdf2 "^3.0.3" +parse-filepath@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" + dependencies: + is-absolute "^1.0.0" + map-cache "^0.2.0" + path-root "^0.1.1" + parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" @@ -9245,6 +9416,16 @@ path-parse@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" +path-root-regex@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" + +path-root@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" + dependencies: + path-root-regex "^0.1.0" + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -9299,50 +9480,20 @@ pg-connection-string@0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-0.1.3.tgz#da1847b20940e42ee1492beaf65d49d91b245df7" +pg-connection-string@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.0.0.tgz#3eefe5997e06d94821e4d502e42b6a1c73f8df82" + pg-hstore@2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/pg-hstore/-/pg-hstore-2.3.2.tgz#f7ef053e7b9b892ae986af2f7cbe86432dfcf24f" dependencies: underscore "^1.7.0" -pg-int8@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" - -pg-minify@~0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/pg-minify/-/pg-minify-0.5.4.tgz#89d5261cacfd44dd7927fa052222a404e9b2a3c9" - -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" -pg-promise@7.5.3: - version "7.5.3" - resolved "https://registry.yarnpkg.com/pg-promise/-/pg-promise-7.5.3.tgz#919d9a48e1551f6a928e89fe7f54415f5b7d0414" - dependencies: - manakin "~0.5.1" - pg "~7.4.1" - pg-minify "~0.5.4" - spex "~2.0.2" - -pg-types@1.*: - version "1.13.0" - resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-1.13.0.tgz#75f490b8a8abf75f1386ef5ec4455ecf6b345c63" - dependencies: - pg-int8 "1.0.1" - postgres-array "~1.0.0" - postgres-bytea "~1.0.0" - postgres-date "~1.0.0" - postgres-interval "^1.1.0" - pg-types@~1.12.1: version "1.12.1" resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-1.12.1.tgz#d64087e3903b58ffaad279e7595c52208a14c3d2" @@ -9352,25 +9503,11 @@ pg-types@~1.12.1: postgres-date "~1.0.0" postgres-interval "^1.1.0" -pg@6.4.2: - version "6.4.2" - resolved "https://registry.yarnpkg.com/pg/-/pg-6.4.2.tgz#c364011060eac7a507a2ae063eb857ece910e27f" +pg@7.4.3: + version "7.4.3" + resolved "https://registry.yarnpkg.com/pg/-/pg-7.4.3.tgz#f7b6f93f5340ecc2596afbb94a13e3d6b609834b" 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.4.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/pg/-/pg-7.4.1.tgz#f3411c8ddf9f692322fe05e7017a1888e47f78f1" - 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 "~2.0.3" @@ -9378,7 +9515,7 @@ pg@~7.4.1: pgpass "1.x" semver "4.3.2" -pgpass@1.*, pgpass@1.x: +pgpass@1.x: version "1.0.2" resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.2.tgz#2a7bb41b6065b67907e91da1b07c1847c877b306" dependencies: @@ -9469,9 +9606,9 @@ pm2-multimeter@^0.1.2: dependencies: charm "~0.1.1" -pm2@2.10.3: - version "2.10.3" - resolved "https://registry.yarnpkg.com/pm2/-/pm2-2.10.3.tgz#0f33834a09a0610db65a3a0e10a281c123567732" +pm2@2.10.4: + version "2.10.4" + resolved "https://registry.yarnpkg.com/pm2/-/pm2-2.10.4.tgz#dd292fd26aed882f6e9f7b9652191387d2debe6a" dependencies: async "^2.5" blessed "^0.1.81" @@ -10183,10 +10320,11 @@ postcss-selector-not@^3.0.1: balanced-match "^0.4.2" postcss "^6.0.1" -postcss-selector-parser@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-4.0.0.tgz#50c6570f40579036d8e63f23e6c0626fe5743527" +postcss-selector-parser@5.0.0-rc.3: + version "5.0.0-rc.3" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0-rc.3.tgz#c4525dcc8eb90166c53dcbf0cb9317ceff5a15b5" dependencies: + babel-eslint "^8.2.3" cssesc "^1.0.1" indexes-of "^1.0.1" uniq "^1.0.1" @@ -10359,7 +10497,7 @@ pretty-error@^2.0.2: renderkid "^2.0.1" utila "~0.4" -pretty-format@^22.4.3: +pretty-format@^22.4.0, pretty-format@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.4.3.tgz#f873d780839a9c02e9664c8a082e9ee79eaac16f" dependencies: @@ -10645,6 +10783,10 @@ qs@6.5.1, qs@~6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" +qs@6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + qs@~6.3.0: version "6.3.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" @@ -10708,9 +10850,9 @@ range-parser@^1.0.3, range-parser@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" -raven@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/raven/-/raven-2.6.1.tgz#9b1945c02b93ef84e92e0dd2843095c1294530b3" +raven@2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/raven/-/raven-2.6.2.tgz#c92f30890e2dfcd15258d184e43e39326e58032e" dependencies: cookie "0.3.1" md5 "^2.2.1" @@ -10727,6 +10869,15 @@ raw-body@2.3.2: iconv-lite "0.4.19" unpipe "1.0.0" +raw-body@2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" + dependencies: + bytes "3.0.0" + http-errors "1.6.3" + iconv-lite "0.4.23" + unpipe "1.0.0" + raw-loader@0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" @@ -10922,6 +11073,18 @@ readable-stream@2.3.5, readable-stream@^2.0.5, readable-stream@^2.3.5: string_decoder "~1.0.3" util-deprecate "~1.0.1" +readable-stream@2.3.6, readable-stream@^2.2.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + readdirp@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" @@ -11079,6 +11242,13 @@ regex-not@^1.0.0: dependencies: extend-shallow "^2.0.1" +regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + regexpp@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.0.1.tgz#d857c3a741dce075c2848dcb019a0a975b190d43" @@ -11203,9 +11373,9 @@ request@2, request@^2.81.0: tunnel-agent "^0.6.0" uuid "^3.0.0" -request@2.85.0: - version "2.85.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.85.0.tgz#5a03615a47c61420b3eb99b7dba204f83603e1fa" +request@2.86.0: + version "2.86.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.86.0.tgz#2b9497f449b0a32654c081a5cf426bbfb5bf5b69" dependencies: aws-sign2 "~0.7.0" aws4 "^1.6.0" @@ -11225,7 +11395,6 @@ request@2.85.0: performance-now "^2.1.0" qs "~6.5.1" safe-buffer "^5.1.1" - stringstream "~0.0.5" tough-cookie "~2.3.3" tunnel-agent "^0.6.0" uuid "^3.1.0" @@ -11322,7 +11491,7 @@ resolve-cwd@^2.0.0: dependencies: resolve-from "^3.0.0" -resolve-dir@^1.0.0: +resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" dependencies: @@ -11387,12 +11556,9 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" -retry-as-promised@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/retry-as-promised/-/retry-as-promised-2.3.2.tgz#cd974ee4fd9b5fe03cbf31871ee48221c07737b7" - dependencies: - bluebird "^3.4.6" - debug "^2.6.9" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" retry@0.6.0: version "0.6.0" @@ -11485,6 +11651,16 @@ safe-json-stringify@~1: version "1.0.4" resolved "https://registry.yarnpkg.com/safe-json-stringify/-/safe-json-stringify-1.0.4.tgz#81a098f447e4bbc3ff3312a243521bc060ef5911" +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + sane@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/sane/-/sane-2.0.0.tgz#99cb79f21f4a53a69d4d0cd957c2db04024b8eb2" @@ -11499,6 +11675,10 @@ sane@^2.0.0: optionalDependencies: fsevents "^1.1.1" +saslprep@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.0.tgz#2c4968a0bfbf249530cd597bc62870ccd4b41a24" + sass-graph@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" @@ -11636,28 +11816,6 @@ seq-queue@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/seq-queue/-/seq-queue-0.0.5.tgz#d56812e1c017a6e4e7c3e3a37a1da6d78dd3c93e" -sequelize@4.37.7: - version "4.37.7" - resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-4.37.7.tgz#a66bfb486f438c0584c1ccc8107388311ba34780" - dependencies: - bluebird "^3.5.0" - cls-bluebird "^2.1.0" - debug "^3.1.0" - depd "^1.1.0" - dottie "^2.0.0" - generic-pool "^3.4.0" - inflection "1.12.0" - lodash "^4.17.1" - moment "^2.20.0" - moment-timezone "^0.5.14" - retry-as-promised "^2.3.2" - semver "^5.5.0" - terraformer-wkt-parser "^1.1.2" - toposort-class "^1.0.1" - uuid "^3.2.1" - validator "^9.4.1" - wkx "^0.4.1" - serialize-javascript@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.4.0.tgz#7c958514db6ac2443a8abc062dc9f7886a7f6005" @@ -11954,10 +12112,6 @@ spdx-license-ids@^1.0.2: version "1.2.2" resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" -spex@~2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/spex/-/spex-2.0.2.tgz#e8c8d633a4c67af642dded701ec2350c9de964a0" - split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -11978,6 +12132,10 @@ sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" +sprintf@0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/sprintf/-/sprintf-0.1.5.tgz#8f83e39a9317c1a502cb7db8050e51c679f6edcf" + sqlite3@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-4.0.0.tgz#cc0e093ab51873f50d9dfc4126fcbef15d486570" @@ -12028,6 +12186,10 @@ static-extend@^0.1.1: version "1.3.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + statuses@~1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" @@ -12136,6 +12298,12 @@ string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + dependencies: + safe-buffer "~5.1.0" + stringstream@~0.0.4, stringstream@~0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -12366,6 +12534,22 @@ tar@^4: safe-buffer "^5.1.1" yallist "^3.0.2" +tarn@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/tarn/-/tarn-1.1.4.tgz#aeeb85964b1afa0bbf381359c1167df237c27b6a" + +tedious@^2.0.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tedious/-/tedious-2.3.1.tgz#56e5008ab32a6245b5040e7d6fbb09d4fc0df664" + dependencies: + babel-runtime "^6.26.0" + big-number "0.3.1" + bl "^1.2.0" + depd "^1.1.2" + iconv-lite "^0.4.11" + readable-stream "^2.2.6" + sprintf "0.1.5" + temp@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" @@ -12373,18 +12557,6 @@ temp@^0.8.1: os-tmpdir "^1.0.0" rimraf "~2.2.6" -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" - dependencies: - terraformer "~1.0.5" - -terraformer@~1.0.5: - version "1.0.8" - resolved "https://registry.yarnpkg.com/terraformer/-/terraformer-1.0.8.tgz#51e0ad89746fcf2161dc6f65aa70e42377c8b593" - dependencies: - "@types/geojson" "^1.0.0" - test-exclude@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26" @@ -12426,6 +12598,12 @@ through@2, through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" +tildify@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/tildify/-/tildify-1.2.0.tgz#dcec03f55dca9b7aa3e5b04f21817eb56e63588a" + dependencies: + os-homedir "^1.0.0" + timed-out@4.0.1, timed-out@^4.0.0, timed-out@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" @@ -12493,6 +12671,15 @@ to-regex@^3.0.1: extend-shallow "^2.0.1" regex-not "^1.0.0" +to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + token-stream@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/token-stream/-/token-stream-0.0.1.tgz#ceeefc717a76c4316f126d0b9dbaa55d7e7df01a" @@ -12503,10 +12690,6 @@ topo@2.x.x: dependencies: hoek "4.x.x" -toposort-class@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toposort-class/-/toposort-class-1.0.1.tgz#7ffd1f78c8be28c3ba45cd4e1a3f5ee193bd9988" - toposort@^1.0.0: version "1.0.6" resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.6.tgz#c31748e55d210effc00fdcdc7d6e68d7d7bb9cec" @@ -12688,6 +12871,10 @@ unbzip2-stream@^1.0.9: buffer "^3.0.1" through "^2.3.6" +unc-path-regex@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + underscore@^1.7.0, underscore@~1.8.3: version "1.8.3" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" @@ -12778,6 +12965,12 @@ upper-case@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" +uri-js@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.1.tgz#4595a80a51f356164e22970df64c7abd6ade9850" + dependencies: + punycode "^2.1.0" + urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" @@ -12876,6 +13069,12 @@ v8flags@^2.1.1: dependencies: user-home "^1.1.1" +v8flags@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.1.0.tgz#246a34a8158c0e1390dcb758e1140e5d004e230b" + dependencies: + homedir-polyfill "^1.0.1" + validate-npm-package-license@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" @@ -12905,10 +13104,6 @@ validator@^5.5.0: version "5.7.0" resolved "https://registry.yarnpkg.com/validator/-/validator-5.7.0.tgz#7a87a58146b695ac486071141c0c49d67da05e5c" -validator@^9.4.1: - version "9.4.1" - resolved "https://registry.yarnpkg.com/validator/-/validator-9.4.1.tgz#abf466d398b561cd243050112c6ff1de6cc12663" - vary@^1: version "1.1.1" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37" @@ -13041,9 +13236,9 @@ vue-hot-reload-api@2.3.0, vue-hot-reload-api@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.0.tgz#97976142405d13d8efae154749e88c4e358cf926" -vue-loader@15.0.10: - version "15.0.10" - resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.0.10.tgz#cbbb43d63492c24bfb1963fb7997d5349ef42e72" +vue-loader@15.1.0: + version "15.1.0" + resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.1.0.tgz#82a2a5c310951aba17ad5d8680fe016c77d37e80" dependencies: "@vue/component-compiler-utils" "^1.2.1" hash-sum "^1.0.2" @@ -13055,9 +13250,9 @@ vue-material-design-icons@1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/vue-material-design-icons/-/vue-material-design-icons-1.4.0.tgz#617451233af8095dfcdb90f7bfe6743a79ed2fbf" -vue-moment@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/vue-moment/-/vue-moment-3.2.0.tgz#28cd2b313831ae83953f646ac4785a2cc724e412" +vue-moment@4.0.0-0: + version "4.0.0-0" + resolved "https://registry.yarnpkg.com/vue-moment/-/vue-moment-4.0.0-0.tgz#a862e77d5fc9b9fe5375cd01ccc68f4362835f49" dependencies: moment "^2.11.1" @@ -13093,13 +13288,13 @@ vue@2.5.16: version "2.5.16" resolved "https://registry.yarnpkg.com/vue/-/vue-2.5.16.tgz#07edb75e8412aaeed871ebafa99f4672584a0085" -vuetify@1.0.17: - version "1.0.17" - resolved "https://registry.yarnpkg.com/vuetify/-/vuetify-1.0.17.tgz#646991024b327514b5fc50fb5c34e15451ad14b6" +vuetify@1.0.18: + version "1.0.18" + resolved "https://registry.yarnpkg.com/vuetify/-/vuetify-1.0.18.tgz#56289ba7c6e5eee3d4ee4dacd5e7dded4aee4c08" -vuex-persistedstate@2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/vuex-persistedstate/-/vuex-persistedstate-2.5.2.tgz#751752f03bdf6d7fc855106f0666f2ce13b415b5" +vuex-persistedstate@2.5.4: + version "2.5.4" + resolved "https://registry.yarnpkg.com/vuex-persistedstate/-/vuex-persistedstate-2.5.4.tgz#a19710ad7f9a08cea4e65fc585924d9fdac7384a" dependencies: deepmerge "^2.1.0" shvl "^1.3.0" @@ -13160,14 +13355,14 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" -webassemblyjs@1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/webassemblyjs/-/webassemblyjs-1.4.2.tgz#3b07b506917c97153d83441d8a88ffa2d25cc07d" +webassemblyjs@1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webassemblyjs/-/webassemblyjs-1.4.3.tgz#0591893efb8fbde74498251cbe4b2d83df9239cb" dependencies: - "@webassemblyjs/ast" "1.4.2" - "@webassemblyjs/validation" "1.4.2" - "@webassemblyjs/wasm-parser" "1.4.2" - "@webassemblyjs/wast-parser" "1.4.2" + "@webassemblyjs/ast" "1.4.3" + "@webassemblyjs/validation" "1.4.3" + "@webassemblyjs/wasm-parser" "1.4.3" + "@webassemblyjs/wast-parser" "1.4.3" long "^3.2.0" webidl-conversions@^4.0.1, webidl-conversions@^4.0.2: @@ -13180,9 +13375,9 @@ webpack-addons@^1.1.5: dependencies: jscodeshift "^0.4.0" -webpack-bundle-analyzer@2.11.2: - version "2.11.2" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.11.2.tgz#5ae05bfccffb16683977237bf319323653e44f9f" +webpack-bundle-analyzer@2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.12.0.tgz#abb8ed9053123dabeb03a0463db52706f54730c7" dependencies: acorn "^5.3.0" bfj-node4 "^5.2.0" @@ -13240,9 +13435,9 @@ webpack-dev-middleware@3.1.3: url-join "^4.0.0" webpack-log "^1.0.1" -webpack-hot-middleware@2.22.1: - version "2.22.1" - resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.22.1.tgz#2ff865bfebc8e9937bd1619f0f48d6ab601bfea0" +webpack-hot-middleware@2.22.2: + version "2.22.2" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.22.2.tgz#623b77ce591fcd4e1fb99f18167781443e50afac" dependencies: ansi-html "0.0.7" html-entities "^1.2.0" @@ -13271,13 +13466,13 @@ webpack-sources@^1.0.1, webpack-sources@^1.1.0: source-list-map "^2.0.0" source-map "~0.6.1" -webpack@4.8.2: - version "4.8.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.8.2.tgz#41aa00fd32a8f253a2f12a2da11c8ad4d52fde1c" +webpack@4.8.3: + version "4.8.3" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.8.3.tgz#957c8e80000f9e5cc03d775e78b472d8954f4eeb" dependencies: - "@webassemblyjs/ast" "1.4.2" - "@webassemblyjs/wasm-edit" "1.4.2" - "@webassemblyjs/wasm-parser" "1.4.2" + "@webassemblyjs/ast" "1.4.3" + "@webassemblyjs/wasm-edit" "1.4.3" + "@webassemblyjs/wasm-parser" "1.4.3" acorn "^5.0.0" acorn-dynamic-import "^3.0.0" ajv "^6.1.0" @@ -13400,12 +13595,6 @@ with@^5.0.0: acorn "^3.1.0" acorn-globals "^3.0.0" -wkx@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/wkx/-/wkx-0.4.1.tgz#2fc171b5e9cb55c6256fef4bde1f21be413befee" - dependencies: - "@types/node" "^6.0.48" - wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" @@ -13463,16 +13652,16 @@ write-file-stdout@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/write-file-stdout/-/write-file-stdout-0.0.2.tgz#c252d7c7c5b1b402897630e3453c7bfe690d9ca1" -write-file-webpack-plugin@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/write-file-webpack-plugin/-/write-file-webpack-plugin-4.2.0.tgz#7bd18547eaa0ea0b23992fb1e0322e5431d339ef" +write-file-webpack-plugin@4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/write-file-webpack-plugin/-/write-file-webpack-plugin-4.3.2.tgz#7b07b3be009be1da668edf46cfb8a357b404b912" dependencies: - chalk "^1.1.1" - debug "^2.6.8" - filesize "^3.2.1" - lodash "^4.5.1" + chalk "^2.4.0" + debug "^3.1.0" + filesize "^3.6.1" + lodash "^4.17.5" mkdirp "^0.5.1" - moment "^2.11.2" + moment "^2.22.1" write@^0.2.1: version "0.2.1"