Procházet zdrojové kódy

refactor: updated loggers + admin UI improvements + setup fixes

NGPixel před 7 roky
rodič
revize
8e09c6fce1

+ 0 - 2
client/app.js

@@ -1,7 +1,5 @@
 'use strict'
 
-/* global siteConfig */
-
 import CONSTANTS from './constants'
 
 import Vue from 'vue'

+ 27 - 7
client/components/admin-auth.vue

@@ -4,13 +4,13 @@
       .pa-3.pt-4
         .headline.primary--text Authentication
         .subheading.grey--text Configure the authentication settings of your wiki
-      v-tabs(color='grey lighten-4', grow, slider-color='primary', show-arrows)
+      v-tabs(color='grey lighten-4', fixed-tabs, slider-color='primary', show-arrows)
         v-tab(key='settings'): v-icon settings
-        v-tab(v-for='provider in providers', :key='provider.key') {{ provider.title }}
+        v-tab(v-for='provider in activeProviders', :key='provider.key') {{ provider.title }}
 
         v-tab-item(key='settings', :transition='false', :reverse-transition='false')
           v-card.pa-3
-            .body-2.pb-2 Select which authentication providers are enabled:
+            .body-2.pb-2 Select which authentication providers to enable:
             v-form
               v-checkbox(
                 v-for='(provider, n) in providers',
@@ -32,11 +32,24 @@
               v-btn(icon, @click='refresh')
                 v-icon.grey--text refresh
 
-        v-tab-item(v-for='(provider, n) in providers', :key='provider.key', :transition='false', :reverse-transition='false')
+        v-tab-item(v-for='(provider, n) in activeProviders', :key='provider.key', :transition='false', :reverse-transition='false')
           v-card.pa-3
-            .body-1(v-if='!provider.props || provider.props.length < 1') This provider has no configuration options you can modify.
-            v-form(v-else)
-              v-text-field(v-for='prop in provider.props', :key='prop', :label='prop', prepend-icon='mode_edit')
+            v-form
+              v-subheader Provider Configuration
+              .body-1(v-if='!provider.props || provider.props.length < 1') This provider has no configuration options you can modify.
+              v-text-field(v-else, v-for='prop in provider.props', :key='prop', :label='prop', prepend-icon='mode_edit')
+              v-divider
+              v-subheader Registration
+              v-switch.ml-3(
+                v-model='auths',
+                label='Allow self-registration',
+                :value='true',
+                color='primary',
+                hint='Allow any user successfully authorized by the provider to access the wiki.',
+                persistent-hint
+              )
+              v-text-field(label='Limit to specific email domains', prepend-icon='mail_outline')
+              v-text-field(label='Assign to group', prepend-icon='people')
               v-divider
               v-btn(color='primary')
                 v-icon(left) chevron_right
@@ -52,6 +65,8 @@
 </template>
 
 <script>
+import _ from 'lodash'
+
 /* global CONSTANTS */
 
 export default {
@@ -62,6 +77,11 @@ export default {
       refreshCompleted: false
     }
   },
+  computed: {
+    activeProviders() {
+      return _.filter(this.providers, 'isEnabled')
+    }
+  },
   apollo: {
     providers: {
       query: CONSTANTS.GRAPH.AUTHENTICATION.QUERY_PROVIDERS,

+ 32 - 11
client/components/admin-general.vue

@@ -7,27 +7,48 @@
         v-form.pt-3
           v-layout(row wrap)
             v-flex(lg6 xs12)
-              v-card
-                v-toolbar(color='blue', dark, dense, flat)
-                  v-toolbar-title
-                    .subheading Site Info
-                  v-btn(fab, absolute, right, bottom, small, light): v-icon save
-                v-card-text
-                  v-text-field(label='Site Title', required, :counter='50', v-model='siteTitle')
-                  v-text-field(label='Site Description', :counter='255')
-                  v-text-field(label='Site Keywords', :counter='255')
-                  v-select(label='Meta Robots', chips, tags, :items='metaRobots', v-model='metaRobotsSelection')
+              v-form
+                v-card
+                  v-toolbar(color='primary', dark, dense, flat)
+                    v-toolbar-title
+                      .subheading Site Info
+                  v-subheader General
+                  .px-3
+                    v-text-field(label='Site Title', required, :counter='50', v-model='siteTitle', prepend-icon='public')
+                    v-divider
+                  v-subheader SEO
+                  .px-3
+                    v-text-field(label='Site Description', :counter='255', prepend-icon='public')
+                    v-text-field(label='Site Keywords', :counter='255', prepend-icon='public')
+                    v-select(label='Meta Robots', chips, tags, :items='metaRobots', v-model='metaRobotsSelection', prepend-icon='public')
+                  v-divider
+                  .px-3.pb-3
+                    v-btn(color='primary') Save
             v-flex(lg6 xs12)
               v-card
-                v-toolbar(color='blue', dark, dense, flat)
+                v-toolbar(color='primary', dark, dense, flat)
                   v-toolbar-title
                     .subheading Site Branding
                 v-card-text ---
+              v-card.mt-3
+                v-toolbar(color='primary', dark, dense, flat)
+                  v-toolbar-title
+                    .subheading Maintenance Mode
+                v-card-text
+                  .body-1 Maintenance mode restrict access to the site to administrators only, regarless of current permissions.
+                  v-btn.mt-3(color='orange darken-2', dark)
+                    icon-home-alert.mr-2(fillColor='#FFFFFF')
+                    | Turn On Maintenance Mode
 
 </template>
 
 <script>
+import IconHomeAlert from 'mdi/home-alert'
+
 export default {
+  components: {
+    IconHomeAlert
+  },
   data() {
     return {
       siteTitle: 'Wiki.js',

+ 11 - 9
client/components/admin-locale.vue

@@ -8,10 +8,9 @@
           v-layout(row wrap)
             v-flex(lg6 xs12)
               v-card
-                v-toolbar(color='blue', dark, dense, flat)
+                v-toolbar(color='primary', dark, dense, flat)
                   v-toolbar-title
-                    .subheading Locale
-                  v-btn(fab, absolute, right, bottom, small, light): v-icon save
+                    .subheading Locale Settings
                 v-card-text
                   v-select(:items='locales', prepend-icon='public', v-model='selectedLocale', label='Site Locale', persistent-hint, hint='All UI text elements will be displayed in selected language.')
                     template(slot='item', slot-scope='data')
@@ -21,16 +20,19 @@
                         v-list-tile-title(v-html='data.item.text')
                         v-list-tile-sub-title(v-html='data.item.original')
                   v-divider
-                  v-switch(v-model='rtlEnabled', label='RTL Text Display', color='primary', persistent-hint, hint='For Right-to-Left languages, e.g. Arabic')
+                  v-switch(v-model='rtlEnabled', label='RTL Display Mode', color='primary', persistent-hint, hint='For Right-to-Left languages, e.g. Arabic')
+                v-divider
+                .px-3.pb-3
+                  v-btn(color='primary') Save
             v-flex(lg6 xs12)
               v-card
-                v-toolbar(color='blue', dark, dense, flat)
+                v-toolbar(color='teal', dark, dense, flat)
                   v-toolbar-title
                     .subheading Download Locale
                 v-list
                   v-list-tile(@click='')
                     v-list-tile-avatar
-                      v-avatar.blue.white--text(tile, size='40') ZH
+                      v-avatar.teal.white--text(tile, size='40') ZH
                     v-list-tile-content
                       v-list-tile-title Chinese
                       v-list-tile-sub-title 中文
@@ -39,7 +41,7 @@
                         v-icon.grey--text cloud_download
                   v-list-tile(@click='')
                     v-list-tile-avatar
-                      v-avatar.blue.white--text(tile, size='40') EN
+                      v-avatar.teal.white--text(tile, size='40') EN
                     v-list-tile-content
                       v-list-tile-title English
                       v-list-tile-sub-title English
@@ -47,7 +49,7 @@
                       v-icon.green--text check
                   v-list-tile(@click='')
                     v-list-tile-avatar
-                      v-avatar.blue.white--text(tile, size='40') FR
+                      v-avatar.teal.white--text(tile, size='40') FR
                     v-list-tile-content
                       v-list-tile-title French
                       v-list-tile-sub-title Français
@@ -55,7 +57,7 @@
                       v-icon.green--text check
                   v-list-tile(@click='')
                     v-list-tile-avatar
-                      v-avatar.blue.white--text(tile, size='40') RU
+                      v-avatar.teal.white--text(tile, size='40') RU
                     v-list-tile-content
                       v-list-tile-title Russian
                       v-list-tile-sub-title Русский

+ 93 - 0
client/components/admin-logging.vue

@@ -0,0 +1,93 @@
+<template lang='pug'>
+  v-card(flat)
+    v-card(color='grey lighten-5')
+      .pa-3.pt-4
+        .headline.primary--text Logging
+        .subheading.grey--text Configure the system logger(s)
+      v-tabs(color='grey lighten-4', fixed-tabs, slider-color='primary', show-arrows)
+        v-tab(key='settings'): v-icon settings
+        v-tab(v-for='svc in activeServices', :key='svc.key') {{ svc.title }}
+
+        v-tab-item(key='settings', :transition='false', :reverse-transition='false')
+          v-card.pa-3
+            .body-2.pb-2 Select which logging service to enable:
+            v-form
+              v-checkbox(
+                v-for='(svc, n) in services',
+                v-model='selectedServices',
+                :key='svc.key',
+                :label='svc.title',
+                :value='svc.key',
+                color='primary',
+                :disabled='svc.key === `console`'
+                hide-details
+              )
+              v-divider
+              v-btn(color='primary')
+                v-icon(left) chevron_right
+                | Set Services
+              v-btn(color='black', dark)
+                v-icon(left) keyboard
+                | View Console
+              v-btn(color='black', dark)
+                v-icon(left) layers_clear
+                | Purge Logs
+              v-btn(icon, @click='refresh')
+                v-icon.grey--text refresh
+
+        v-tab-item(v-for='(svc, n) in activeServices', :key='svc.key', :transition='false', :reverse-transition='false')
+          v-card.pa-3
+            v-form
+              v-subheader Service Configuration
+              .body-1(v-if='!svc.props || svc.props.length < 1') This logging service has no configuration options you can modify.
+              v-text-field(v-else, v-for='prop in svc.props', :key='prop', :label='prop', prepend-icon='mode_edit')
+              v-divider
+              v-btn(color='primary')
+                v-icon(left) chevron_right
+                | Save Configuration
+
+    v-snackbar(
+      color='success'
+      top
+      v-model='refreshCompleted'
+    )
+      v-icon.mr-3(dark) cached
+      | List of logging services has been refreshed.
+</template>
+
+<script>
+import _ from 'lodash'
+
+/* global CONSTANTS */
+
+export default {
+  data() {
+    return {
+      services: [],
+      selectedServices: ['console'],
+      refreshCompleted: false
+    }
+  },
+  computed: {
+    activeServices() {
+      return _.filter(this.services, 'isEnabled')
+    }
+  },
+  apollo: {
+    services: {
+      query: CONSTANTS.GRAPH.AUTHENTICATION.QUERY_PROVIDERS,
+      update: (data) => data.authentication.providers
+    }
+  },
+  methods: {
+    async refresh() {
+      await this.$apollo.queries.services.refetch()
+      this.refreshCompleted = true
+    }
+  }
+}
+</script>
+
+<style lang='scss'>
+
+</style>

+ 1 - 1
client/components/admin-search.vue

@@ -4,7 +4,7 @@
       .pa-3.pt-4
         .headline.primary--text Search Engine
         .subheading.grey--text Configure the search capabilities of your wiki
-      v-tabs(color='grey lighten-4', grow, slider-color='primary', show-arrows)
+      v-tabs(color='grey lighten-4', fixed-tabs, slider-color='primary', show-arrows)
         v-tab(key='settings'): v-icon settings
         v-tab(key='db') Database
         v-tab(key='algolia') Algolia

+ 11 - 3
client/components/admin-storage.vue

@@ -4,7 +4,7 @@
       .pa-3.pt-4
         .headline.primary--text Storage
         .subheading.grey--text Set backup and sync targets for your content
-      v-tabs(color='grey lighten-4', grow, slider-color='primary', show-arrows)
+      v-tabs(color='grey lighten-4', fixed-tabs, slider-color='primary', show-arrows)
         v-tab(key='settings'): v-icon settings
         v-tab(key='local') Local FS
         v-tab(key='git') Git
@@ -19,7 +19,15 @@
         v-tab-item(key='settings')
           v-card.pa-3
             v-form
-              v-checkbox(v-for='(target, n) in targets', v-model='auths', :key='n', :label='target.text', :value='target.value', color='primary')
+              v-checkbox(
+                v-for='(target, n) in targets',
+                v-model='auths',
+                :key='n',
+                :label='target.text',
+                :value='target.value',
+                color='primary',
+                hide-details
+              )
               v-divider
               v-btn(color='primary')
                 v-icon(left) chevron_right
@@ -32,7 +40,7 @@ export default {
   data() {
     return {
       targets: [
-        { text: 'Local FS', value: 'local' },
+        { text: 'Local Filesystem', value: 'local' },
         { text: 'Git', value: 'auth0' },
         { text: 'Amazon S3', value: 'algolia' },
         { text: 'Azure Blob Storage', value: 'elasticsearch' },

+ 7 - 5
client/components/admin-theme.vue

@@ -8,10 +8,9 @@
           v-layout(row wrap)
             v-flex(lg6 xs12)
               v-card
-                v-toolbar(color='blue', dark, dense, flat)
+                v-toolbar(color='primary', dark, dense, flat)
                   v-toolbar-title
                     .subheading Theme
-                  v-btn(fab, absolute, right, bottom, small, light): v-icon save
                 v-card-text
                   v-select(:items='themes', prepend-icon='palette', v-model='selectedTheme', label='Site Theme', persistent-hint, hint='Themes affect how content pages are displayed. Other site sections (such as the editor or admin area) are not affected.')
                     template(slot='item', slot-scope='data')
@@ -22,12 +21,15 @@
                         v-list-tile-sub-title(v-html='data.item.author')
                   v-divider
                   v-switch(v-model='darkMode', label='Dark Mode', color='primary', persistent-hint, hint='Not recommended for accessibility')
+                v-divider
+                .px-3.pb-3
+                  v-btn(color='primary') Save
             v-flex(lg6 xs12)
               v-card
-                v-toolbar(color='blue', dark, dense, flat)
+                v-toolbar(color='primary', dark, dense, flat)
                   v-toolbar-title
-                    .subheading Theme Options
-                v-list
+                    .subheading ---
+                v-card-text ---
 </template>
 
 <script>

+ 1 - 0
client/components/admin.vue

@@ -85,6 +85,7 @@ const router = new VueRouter({
     { path: '/theme', component: () => import(/* webpackChunkName: "admin" */ './admin-theme.vue') },
     { path: '/users', component: () => import(/* webpackChunkName: "admin" */ './admin-users.vue') },
     { path: '/auth', component: () => import(/* webpackChunkName: "admin" */ './admin-auth.vue') },
+    { path: '/logging', component: () => import(/* webpackChunkName: "admin" */ './admin-logging.vue') },
     { path: '/search', component: () => import(/* webpackChunkName: "admin" */ './admin-search.vue') },
     { path: '/storage', component: () => import(/* webpackChunkName: "admin" */ './admin-storage.vue') },
     { path: '/api', component: () => import(/* webpackChunkName: "admin" */ './admin-api.vue') },

+ 65 - 7
client/components/nav-header.vue

@@ -1,13 +1,38 @@
 <template lang='pug'>
   v-toolbar(color='black', dark, app, clipped-left, fixed, flat)
     v-toolbar-side-icon(@click.native='')
+      v-icon view_module
     v-toolbar-title
       span.subheading Wiki.js
     v-spacer
+    transition(name='navHeaderSearch')
+      v-text-field(
+        ref='searchField',
+        v-if='searchIsShown',
+        v-model='search',
+        clearable,
+        color='blue',
+        label='Search...',
+        single-line,
+        hide-details,
+        append-icon='search',
+        :append-icon-cb='searchEnter',
+        :loading='searchIsLoading',
+        @keyup.enter='searchEnter',
+        @keyup.esc='searchToggle'
+      )
+        v-progress-linear(
+          indeterminate,
+          slot='progress',
+          height='2',
+          color='blue'
+        )
+    v-spacer
     v-progress-circular.mr-3(indeterminate, color='blue', v-show='$apollo.loading')
-    v-btn(icon)
-      v-icon(color='grey') search
-    v-btn(icon, @click.native='darkTheme = !darkTheme')
+    transition(name='navHeaderSearch')
+      v-btn(icon, @click='searchToggle', v-if='!searchIsShown')
+        v-icon(color='grey') search
+    v-btn(icon, href='/a')
       v-icon(color='grey') settings
     v-menu(offset-y, min-width='300')
       v-btn(icon, slot='activator')
@@ -20,7 +45,10 @@
             v-list-tile-title John Doe
             v-list-tile-sub-title john.doe@example.com
         v-divider.my-0
-        v-list-tile(@click='')
+        v-list-tile(href='/p')
+          v-list-tile-action: v-icon(color='red') person
+          v-list-tile-title Profile
+        v-list-tile(href='/logout')
           v-list-tile-action: v-icon(color='red') exit_to_app
           v-list-tile-title Logout
 </template>
@@ -28,11 +56,41 @@
 <script>
 export default {
   data() {
-    return {}
+    return {
+      searchIsLoading: false,
+      searchIsShown: false,
+      search: ''
+    }
+  },
+  methods: {
+    searchToggle() {
+      this.searchIsLoading = false
+      this.searchIsShown = !this.searchIsShown
+      if (this.searchIsShown) {
+        this.$nextTick(() => {
+          this.$refs.searchField.focus()
+        })
+      }
+    },
+    searchEnter() {
+      this.searchIsLoading = true
+    }
   }
 }
 </script>
 
-<style>
-
+<style lang='scss'>
+.navHeaderSearch {
+  &-enter-active, &-leave-active {
+    transition: opacity .25s ease, transform .25s ease;
+    opacity: 1;
+  }
+  &-enter-active {
+    transition-delay: .25s;
+  }
+  &-enter, &-leave-to {
+    opacity: 0;
+    transform: translateY(-25px);
+  }
+}
 </style>

+ 1 - 1
client/components/setup.vue

@@ -40,7 +40,7 @@
 
           v-stepper-content(step='1')
             v-card.text-xs-center.pa-3(flat)
-              img(src='svg/logo-wikijs.svg', alt='Wiki.js Logo', style='width: 300px;')
+              img(src='/svg/logo-wikijs.svg', alt='Wiki.js Logo', style='width: 300px;')
             v-container
               .body-2.py-2 This installation wizard will guide you through the steps needed to get your wiki up and running in no time!
               .body-1

+ 10 - 10
package.json

@@ -128,12 +128,12 @@
     "request-promise": "4.2.2",
     "scim-query-filter-parser": "1.1.0",
     "semver": "5.5.0",
-    "sequelize": "4.35.2",
+    "sequelize": "4.36.0",
     "serve-favicon": "2.4.5",
     "uuid": "3.2.1",
     "validator": "9.4.1",
     "validator-as-promised": "1.0.2",
-    "winston": "2.4.0",
+    "winston": "3.0.0-rc2",
     "yargs": "11.0.0"
   },
   "devDependencies": {
@@ -157,8 +157,8 @@
     "brace": "0.11.1",
     "cache-loader": "1.2.2",
     "clean-webpack-plugin": "0.1.19",
-    "colors": "1.1.2",
-    "copy-webpack-plugin": "4.5.0",
+    "colors": "1.2.0",
+    "copy-webpack-plugin": "4.5.1",
     "css-loader": "0.28.10",
     "cssnano": "4.0.0-rc.2",
     "duplicate-package-checker-webpack-plugin": "2.1.0",
@@ -192,15 +192,15 @@
     "sass-loader": "6.0.7",
     "sass-resources-loader": "1.3.3",
     "simple-progress-webpack-plugin": "1.1.2",
-    "style-loader": "0.20.2",
+    "style-loader": "0.20.3",
     "stylus": "0.54.5",
     "stylus-loader": "3.0.2",
     "twemoji-awesome": "1.0.6",
-    "uglifyjs-webpack-plugin": "1.2.2",
+    "uglifyjs-webpack-plugin": "1.2.3",
     "vee-validate": "2.0.5",
     "velocity-animate": "1.5.1",
-    "vue": "2.5.13",
-    "vue-apollo": "3.0.0-beta.4",
+    "vue": "2.5.15",
+    "vue-apollo": "3.0.0-beta.5",
     "vue-clipboards": "1.2.2",
     "vue-codemirror": "4.0.3",
     "vue-hot-reload-api": "2.3.0",
@@ -208,8 +208,8 @@
     "vue-material-design-icons": "1.2.1",
     "vue-router": "3.0.1",
     "vue-simple-breakpoints": "1.0.3",
-    "vue-template-compiler": "2.5.13",
-    "vuetify": "1.0.5",
+    "vue-template-compiler": "2.5.15",
+    "vuetify": "1.0.6",
     "vuex": "3.0.1",
     "vuex-persistedstate": "2.4.2",
     "webpack": "3.11.0",

+ 0 - 1
server/app/data.yml

@@ -53,7 +53,6 @@ defaults:
 configNamespaces:
   - auth
   - features
-  - git
   - logging
   - site
   - theme

+ 2 - 3
server/core/auth.js

@@ -33,12 +33,11 @@ module.exports = {
     // Load authentication strategies
 
     const modules = _.values(autoload(path.join(WIKI.SERVERPATH, 'modules/authentication')))
-    console.info(WIKI.config.auth)
     _.forEach(modules, (strategy) => {
-      const strategyConfig = _.get(WIKI.config.auth.strategies, strategy.key, {})
+      const strategyConfig = _.get(WIKI.config.auth.strategies, strategy.key, { isEnabled: false })
       strategyConfig.callbackURL = `${WIKI.config.site.host}${WIKI.config.site.path}login/${strategy.key}/callback`
+      strategy.config = strategyConfig
       if (strategyConfig.isEnabled) {
-        console.info(strategy.title)
         try {
           strategy.init(passport, strategyConfig)
         } catch (err) {

+ 8 - 20
server/core/logger.js

@@ -1,37 +1,25 @@
 const _ = require('lodash')
 const cluster = require('cluster')
-const fs = require('fs-extra')
-const path = require('path')
+const winston = require('winston')
 
 /* global WIKI */
 
 module.exports = {
   loggers: {},
   init() {
-    let winston = require('winston')
-
-    let logger = new (winston.Logger)({
+    let logger = winston.createLogger({
       level: WIKI.config.logLevel,
-      transports: []
-    })
-
-    logger.filters.push((level, msg) => {
-      let processName = (cluster.isMaster) ? 'MASTER' : `WORKER-${cluster.worker.id}`
-      return '[' + processName + '] ' + msg
+      format: winston.format.combine(
+        winston.format.colorize(),
+        winston.format.label({ label: (cluster.isMaster) ? 'MASTER' : `WORKER-${cluster.worker.id}` }),
+        winston.format.timestamp(),
+        winston.format.printf(info => `${info.timestamp} [${info.label}] ${info.level}: ${info.message}`)
+      )
     })
 
     _.forOwn(_.omitBy(WIKI.config.logging.loggers, s => s.enabled === false), (loggerConfig, loggerKey) => {
       let loggerModule = require(`../modules/logging/${loggerKey}`)
       loggerModule.init(logger, loggerConfig)
-      fs.readFile(path.join(WIKI.ROOTPATH, `assets/svg/auth-icon-${loggerKey}.svg`), 'utf8').then(iconData => {
-        logger.icon = iconData
-      }).catch(err => {
-        if (err.code === 'ENOENT') {
-          logger.icon = '[missing icon]'
-        } else {
-          logger.error(err)
-        }
-      })
       this.loggers[logger.key] = loggerModule
     })
 

+ 1 - 1
server/graph/resolvers/authentication.js

@@ -17,7 +17,7 @@ module.exports = {
   AuthenticationQuery: {
     providers(obj, args, context, info) {
       let prv = _.map(WIKI.auth.strategies, str => ({
-        isEnabled: true,
+        isEnabled: str.config.isEnabled,
         key: str.key,
         props: str.props,
         title: str.title,

+ 2 - 2
server/modules/logging/bugsnag.js

@@ -24,9 +24,9 @@ module.exports = {
       callback(null, true)
     }
 
-    logger.add(BugsnagLogger, {
+    logger.add(new BugsnagLogger({
       level: 'warn',
       key: conf.key
-    })
+    }))
   }
 }

+ 2 - 2
server/modules/logging/console.js

@@ -11,12 +11,12 @@ module.exports = {
   title: 'Console',
   props: [],
   init (logger, conf) {
-    logger.add(winston.transports.Console, {
+    logger.add(new winston.transports.Console({
       level: WIKI.config.logLevel,
       prettyPrint: true,
       colorize: true,
       silent: false,
       timestamp: true
-    })
+    }))
   }
 }

+ 2 - 2
server/modules/logging/loggly.js

@@ -10,12 +10,12 @@ module.exports = {
   props: ['token', 'subdomain'],
   init (logger, conf) {
     require('winston-loggly-bulk')
-    logger.add(winston.transports.Loggly, {
+    logger.add(new winston.transports.Loggly({
       token: conf.token,
       subdomain: conf.subdomain,
       tags: ['wiki-js'],
       level: 'warn',
       json: true
-    })
+    }))
   }
 }

+ 2 - 2
server/modules/logging/papertrail.js

@@ -10,11 +10,11 @@ module.exports = {
   props: ['host', 'port'],
   init (logger, conf) {
     require('winston-papertrail').Papertrail // eslint-disable-line no-unused-expressions
-    logger.add(winston.transports.Papertrail, {
+    logger.add(new winston.transports.Papertrail({
       host: conf.host,
       port: conf.port,
       level: 'warn',
       program: 'wiki.js'
-    })
+    }))
   }
 }

+ 2 - 2
server/modules/logging/rollbar.js

@@ -24,9 +24,9 @@ module.exports = {
       callback(null, true)
     }
 
-    logger.add(RollbarLogger, {
+    logger.add(new RollbarLogger({
       level: 'warn',
       key: conf.key
-    })
+    }))
   }
 }

+ 2 - 2
server/modules/logging/sentry.js

@@ -24,9 +24,9 @@ module.exports = {
       callback(null, true)
     }
 
-    logger.add(SentryLogger, {
+    logger.add(new SentryLogger({
       level: 'warn',
       key: conf.key
-    })
+    }))
   }
 }

+ 1 - 2
server/setup.js

@@ -276,7 +276,6 @@ module.exports = () => {
       // Populate config namespaces
       WIKI.config.auth = WIKI.config.auth || {}
       WIKI.config.features = WIKI.config.features || {}
-      WIKI.config.git = WIKI.config.git || {}
       WIKI.config.logging = WIKI.config.logging || {}
       WIKI.config.site = WIKI.config.site || {}
       WIKI.config.theme = WIKI.config.theme || {}
@@ -290,7 +289,7 @@ module.exports = () => {
 
       // Auth namespace
       _.set(WIKI.config.auth, 'public', req.body.public === 'true')
-      _.set(WIKI.config.auth, 'strategies.local.enabled', true)
+      _.set(WIKI.config.auth, 'strategies.local.isEnabled', true)
       _.set(WIKI.config.auth, 'strategies.local.allowSelfRegister', req.body.selfRegister === 'true')
 
       // Logging namespace

+ 6 - 5
server/views/main/welcome.pug

@@ -3,8 +3,9 @@ extends ../master.pug
 block body
   body
     #app.is-fullscreen
-      .onboarding
-        img(src='/svg/logo-wikijs.svg', alt='Wiki.js')
-        h1= t('welcome.title')
-        h2= t('welcome.subtitle')
-        a.button.is-blue(href='/e/home')= t('welcome.createhome')
+      v-app
+        .onboarding
+          img(src='/svg/logo-wikijs.svg', alt='Wiki.js')
+          h1= t('welcome.title')
+          h2= t('welcome.subtitle')
+          v-btn(color='primary', href='/e/home')= t('welcome.createhome')

+ 2 - 2
server/worker.js

@@ -4,7 +4,7 @@ const Promise = require('bluebird')
 
 module.exports = Promise.join(
   WIKI.db.onReady,
-  WIKI.configSvc.loadFromDb(['features', 'git', 'logging', 'site', 'uploads'])
+  WIKI.configSvc.loadFromDb(['features', 'logging', 'site', 'uploads'])
 ).then(() => {
   const path = require('path')
 
@@ -25,7 +25,7 @@ module.exports = Promise.join(
   const i18nBackend = require('i18next-node-fs-backend')
   WIKI.lang.use(i18nBackend).init({
     load: 'languageOnly',
-    ns: ['common', 'admin', 'auth', 'errors', 'git'],
+    ns: ['common', 'admin', 'auth', 'errors'],
     defaultNS: 'common',
     saveMissing: false,
     preload: [WIKI.config.lang],

+ 143 - 76
yarn.lock

@@ -641,7 +641,7 @@ async@1.5, async@^1.4.0, async@^1.5:
   version "1.5.2"
   resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
 
-async@^2.1.2, async@^2.4.1:
+async@^2.1.2, async@^2.4.1, async@^2.6.0:
   version "2.6.0"
   resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4"
   dependencies:
@@ -653,10 +653,6 @@ async@^2.1.4, async@^2.5:
   dependencies:
     lodash "^4.14.0"
 
-async@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz#f8fc04ca3a13784ade9e1641af98578cfbd647a9"
-
 asynckit@^0.4.0:
   version "0.4.0"
   resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
@@ -1892,23 +1888,23 @@ bytes@3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
 
-cacache@^10.0.1:
-  version "10.0.2"
-  resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.2.tgz#105a93a162bbedf3a25da42e1939ed99ffb145f8"
+cacache@^10.0.4:
+  version "10.0.4"
+  resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460"
   dependencies:
-    bluebird "^3.5.0"
+    bluebird "^3.5.1"
     chownr "^1.0.1"
     glob "^7.1.2"
     graceful-fs "^4.1.11"
     lru-cache "^4.1.1"
-    mississippi "^1.3.0"
+    mississippi "^2.0.0"
     mkdirp "^0.5.1"
     move-concurrently "^1.0.1"
     promise-inflight "^1.0.1"
-    rimraf "^2.6.1"
-    ssri "^5.0.0"
+    rimraf "^2.6.2"
+    ssri "^5.2.4"
     unique-filename "^1.1.0"
-    y18n "^3.2.1"
+    y18n "^4.0.0"
 
 cache-base@^1.0.1:
   version "1.0.1"
@@ -2287,6 +2283,10 @@ collection-visit@^1.0.0:
     map-visit "^1.0.0"
     object-visit "^1.0.0"
 
+color-convert@^0.5.0:
+  version "0.5.3"
+  resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-0.5.3.tgz#bdb6c69ce660fadffe0b0007cc447e1b9f7282bd"
+
 color-convert@^1.0.0, color-convert@^1.9.0:
   version "1.9.0"
   resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a"
@@ -2316,6 +2316,13 @@ color-string@^1.4.0:
     color-name "^1.0.0"
     simple-swizzle "^0.2.2"
 
+color@0.8.x:
+  version "0.8.0"
+  resolved "https://registry.yarnpkg.com/color/-/color-0.8.0.tgz#890c07c3fd4e649537638911cf691e5458b6fca5"
+  dependencies:
+    color-convert "^0.5.0"
+    color-string "^0.3.0"
+
 color@^0.11.0:
   version "0.11.4"
   resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764"
@@ -2339,14 +2346,25 @@ colormin@^1.0.5:
     css-color-names "0.0.4"
     has "^1.0.1"
 
-colors@1.0.x:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
+colornames@0.0.2:
+  version "0.0.2"
+  resolved "https://registry.yarnpkg.com/colornames/-/colornames-0.0.2.tgz#d811fd6c84f59029499a8ac4436202935b92be31"
 
-colors@1.1.2, colors@~1.1.2:
+colors@1.2.0, colors@^1.1.2:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/colors/-/colors-1.2.0.tgz#24ec7283fcc91557801b22521e4619fedc7ca306"
+
+colors@~1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
 
+colorspace@1.0.x:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.0.1.tgz#c99c796ed31128b9876a52e1ee5ee03a4a719749"
+  dependencies:
+    color "0.8.x"
+    text-hex "0.0.x"
+
 combined-stream@^1.0.5, combined-stream@~1.0.5:
   version "1.0.5"
   resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
@@ -2507,11 +2525,11 @@ copy-descriptor@^0.1.0:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
 
-copy-webpack-plugin@4.5.0:
-  version "4.5.0"
-  resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.5.0.tgz#9cb012163317666ea47479d2a8c57daca3557da5"
+copy-webpack-plugin@4.5.1:
+  version "4.5.1"
+  resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.5.1.tgz#fc4f68f4add837cc5e13d111b20715793225d29c"
   dependencies:
-    cacache "^10.0.1"
+    cacache "^10.0.4"
     find-cache-dir "^1.0.0"
     globby "^7.1.1"
     is-glob "^4.0.0"
@@ -2864,10 +2882,6 @@ currently-unhandled@^0.4.1:
   dependencies:
     array-find-index "^1.0.1"
 
-cycle@1.0.x:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2"
-
 cyclist@~0.2.2:
   version "0.2.2"
   resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640"
@@ -3044,6 +3058,14 @@ detect-newline@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"
 
+diagnostics@^1.0.1:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/diagnostics/-/diagnostics-1.1.0.tgz#e1090900b49523e8527be20f081275205f2ae36a"
+  dependencies:
+    colorspace "1.0.x"
+    enabled "1.0.x"
+    kuler "0.0.x"
+
 dicer@0.2.5:
   version "0.2.5"
   resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f"
@@ -3254,6 +3276,12 @@ emojis-list@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
 
+enabled@1.0.x:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/enabled/-/enabled-1.0.2.tgz#965f6513d2c2d1c5f4652b64a2e3396467fc2f93"
+  dependencies:
+    env-variable "0.0.x"
+
 encodeurl@~1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20"
@@ -3283,6 +3311,10 @@ entities@^1.1.1, entities@~1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
 
+env-variable@0.0.x:
+  version "0.0.4"
+  resolved "https://registry.yarnpkg.com/env-variable/-/env-variable-0.0.4.tgz#0d6280cf507d84242befe35a512b5ae4be77c54e"
+
 errno@^0.1.3, errno@^0.1.4:
   version "0.1.6"
   resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.6.tgz#c386ce8a6283f14fc09563b71560908c9bf53026"
@@ -3800,10 +3832,6 @@ extsprintf@^1.2.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
 
-eyes@0.1.x:
-  version "0.1.8"
-  resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0"
-
 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"
@@ -3830,6 +3858,10 @@ fclone@1.0.11, fclone@^1:
   version "1.0.11"
   resolved "https://registry.yarnpkg.com/fclone/-/fclone-1.0.11.tgz#10e85da38bfea7fc599341c296ee1d77266ee640"
 
+fecha@^2.3.2:
+  version "2.3.3"
+  resolved "https://registry.yarnpkg.com/fecha/-/fecha-2.3.3.tgz#948e74157df1a32fd1b12c3a3c3cdcb6ec9d96cd"
+
 figures@2.0.x, figures@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
@@ -5749,6 +5781,12 @@ klaw@2.1.1:
   dependencies:
     graceful-fs "^4.1.9"
 
+kuler@0.0.x:
+  version "0.0.0"
+  resolved "https://registry.yarnpkg.com/kuler/-/kuler-0.0.0.tgz#b66bb46b934e550f59d818848e0abba4f7f5553c"
+  dependencies:
+    colornames "0.0.2"
+
 last-call-webpack-plugin@^2.1.2:
   version "2.1.2"
   resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-2.1.2.tgz#ad80c6e310998294d2ed2180a68e9589e4768c44"
@@ -6072,6 +6110,13 @@ log-update@2.3.x:
     cli-cursor "^2.0.0"
     wrap-ansi "^3.0.1"
 
+logform@^1.2.1:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/logform/-/logform-1.2.2.tgz#7be8847684de07185029ed09c65b11d06191ef93"
+  dependencies:
+    colors "^1.1.2"
+    fecha "^2.3.2"
+
 loglevelnext@^1.0.1:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-1.0.3.tgz#0f69277e73bbbf2cd61b94d82313216bf87ac66e"
@@ -6417,9 +6462,9 @@ minimist@~0.0.1:
   version "0.0.10"
   resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
 
-mississippi@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-1.3.0.tgz#d201583eb12327e3c5c1642a404a9cacf94e34f5"
+mississippi@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f"
   dependencies:
     concat-stream "^1.5.0"
     duplexify "^3.4.2"
@@ -6427,7 +6472,7 @@ mississippi@^1.3.0:
     flush-write-stream "^1.0.0"
     from2 "^2.1.0"
     parallel-transform "^1.1.0"
-    pump "^1.0.0"
+    pump "^2.0.1"
     pumpify "^1.3.3"
     stream-each "^1.1.0"
     through2 "^2.0.0"
@@ -6895,6 +6940,10 @@ once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0:
   dependencies:
     wrappy "1"
 
+one-time@0.0.4:
+  version "0.0.4"
+  resolved "https://registry.yarnpkg.com/one-time/-/one-time-0.0.4.tgz#f8cdf77884826fe4dff93e3a9cc37b1e4480742e"
+
 onetime@^2.0.0:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
@@ -8263,16 +8312,16 @@ pug@2.0.1:
     pug-runtime "^2.0.4"
     pug-strip-comments "^1.0.3"
 
-pump@^1.0.0:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954"
+pump@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.0.tgz#7946da1c8d622b098e2ceb2d3476582470829c9d"
   dependencies:
     end-of-stream "^1.1.0"
     once "^1.3.1"
 
-pump@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.0.tgz#7946da1c8d622b098e2ceb2d3476582470829c9d"
+pump@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
   dependencies:
     end-of-stream "^1.1.0"
     once "^1.3.1"
@@ -8828,7 +8877,7 @@ rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1:
   dependencies:
     glob "^7.0.5"
 
-rimraf@^2.5.4:
+rimraf@^2.5.4, rimraf@^2.6.2:
   version "2.6.2"
   resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
   dependencies:
@@ -8940,7 +8989,7 @@ schema-utils@^0.4.0, schema-utils@^0.4.5:
     ajv "^6.1.0"
     ajv-keywords "^3.1.0"
 
-schema-utils@^0.4.2, schema-utils@^0.4.3:
+schema-utils@^0.4.2:
   version "0.4.3"
   resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.3.tgz#e2a594d3395834d5e15da22b48be13517859458e"
   dependencies:
@@ -8996,9 +9045,9 @@ send@0.16.1:
     range-parser "~1.2.0"
     statuses "~1.3.1"
 
-sequelize@4.35.2:
-  version "4.35.2"
-  resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-4.35.2.tgz#936db62c0bb63368bdb33ae58e76282aae5ec360"
+sequelize@4.36.0:
+  version "4.36.0"
+  resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-4.36.0.tgz#769af2b1f0d4498efe7f229040d9524448dba4a8"
   dependencies:
     bluebird "^3.5.0"
     cls-bluebird "^2.1.0"
@@ -9327,11 +9376,11 @@ sshpk@^1.7.0:
     jsbn "~0.1.0"
     tweetnacl "~0.14.0"
 
-ssri@^5.0.0:
-  version "5.1.0"
-  resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.1.0.tgz#2cbf1df36b74d0fc91fcf89640a4b3e1d10b1899"
+ssri@^5.2.4:
+  version "5.2.4"
+  resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.2.4.tgz#9985e14041e65fc397af96542be35724ac11da52"
   dependencies:
-    safe-buffer "^5.1.0"
+    safe-buffer "^5.1.1"
 
 stack-trace@0.0.9:
   version "0.0.9"
@@ -9478,12 +9527,12 @@ strip-json-comments@^2.0.1, strip-json-comments@~2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
 
-style-loader@0.20.2:
-  version "0.20.2"
-  resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.20.2.tgz#851b373c187890331776e9cde359eea9c95ecd00"
+style-loader@0.20.3:
+  version "0.20.3"
+  resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.20.3.tgz#ebef06b89dec491bcb1fdb3452e913a6fd1c10c4"
   dependencies:
     loader-utils "^1.1.0"
-    schema-utils "^0.4.3"
+    schema-utils "^0.4.5"
 
 stylehacks@^4.0.0-rc.2:
   version "4.0.0-rc.2"
@@ -9630,6 +9679,10 @@ test-exclude@^4.1.1:
     read-pkg-up "^1.0.1"
     require-main-filename "^1.0.1"
 
+text-hex@0.0.x:
+  version "0.0.0"
+  resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-0.0.0.tgz#578fbc85a6a92636e42dd17b41d0218cce9eb2b3"
+
 text-table@~0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
@@ -9752,6 +9805,10 @@ trim-right@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
 
+triple-beam@^1.0.1:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.1.0.tgz#2ac387c8c4bd04bd26c61df891a6079f8592fe10"
+
 "true-case-path@^1.0.2":
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.2.tgz#7ec91130924766c7f573be3020c34f8fdfd00d62"
@@ -9837,13 +9894,13 @@ uglify-to-browserify@~1.0.0:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
 
-uglifyjs-webpack-plugin@1.2.2:
-  version "1.2.2"
-  resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.2.tgz#e7516d4367afdb715c3847841eb46f94c45ca2b9"
+uglifyjs-webpack-plugin@1.2.3:
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.3.tgz#bf23197b37a8fc953fecfbcbab66e506f9a0ae72"
   dependencies:
-    cacache "^10.0.1"
+    cacache "^10.0.4"
     find-cache-dir "^1.0.0"
-    schema-utils "^0.4.2"
+    schema-utils "^0.4.5"
     serialize-javascript "^1.4.0"
     source-map "^0.6.1"
     uglify-es "^3.3.4"
@@ -10105,9 +10162,9 @@ void-elements@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec"
 
-vue-apollo@3.0.0-beta.4:
-  version "3.0.0-beta.4"
-  resolved "https://registry.yarnpkg.com/vue-apollo/-/vue-apollo-3.0.0-beta.4.tgz#2313f720875160befc22375c13a74c0bc2e87030"
+vue-apollo@3.0.0-beta.5:
+  version "3.0.0-beta.5"
+  resolved "https://registry.yarnpkg.com/vue-apollo/-/vue-apollo-3.0.0-beta.5.tgz#d0aabd19683e50cd1ab2d24e2827e8fb579ff78e"
   dependencies:
     lodash.debounce "^4.0.8"
     lodash.omit "^4.5.0"
@@ -10184,9 +10241,9 @@ vue-style-loader@^4.0.1:
     hash-sum "^1.0.2"
     loader-utils "^1.0.2"
 
-vue-template-compiler@2.5.13:
-  version "2.5.13"
-  resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.5.13.tgz#12a2aa0ecd6158ac5e5f14d294b0993f399c3d38"
+vue-template-compiler@2.5.15:
+  version "2.5.15"
+  resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.5.15.tgz#cc004097e37167be8b85ea22ab2840d8e8cca1c0"
   dependencies:
     de-indent "^1.0.2"
     he "^1.1.0"
@@ -10195,13 +10252,13 @@ vue-template-es2015-compiler@^1.6.0:
   version "1.6.0"
   resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz#dc42697133302ce3017524356a6c61b7b69b4a18"
 
-vue@2.5.13:
-  version "2.5.13"
-  resolved "https://registry.yarnpkg.com/vue/-/vue-2.5.13.tgz#95bd31e20efcf7a7f39239c9aa6787ce8cf578e1"
+vue@2.5.15:
+  version "2.5.15"
+  resolved "https://registry.yarnpkg.com/vue/-/vue-2.5.15.tgz#fdb67861dde967cd8d1b53116380f2f269b45202"
 
-vuetify@1.0.5:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/vuetify/-/vuetify-1.0.5.tgz#10e83123a78c82e3d9c2efe6734b7f55ba678dd4"
+vuetify@1.0.6:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/vuetify/-/vuetify-1.0.6.tgz#da1b7d32d391294688116529af981fef776bc38a"
 
 vuex-persistedstate@2.4.2:
   version "2.4.2"
@@ -10416,16 +10473,22 @@ window-size@0.1.0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
 
-winston@2.4.0:
-  version "2.4.0"
-  resolved "https://registry.yarnpkg.com/winston/-/winston-2.4.0.tgz#808050b93d52661ed9fb6c26b3f0c826708b0aee"
+winston-transport@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-3.0.1.tgz#8008b15eef5660c4fb3fa094d58ccbd08528c58d"
+
+winston@3.0.0-rc2:
+  version "3.0.0-rc2"
+  resolved "https://registry.yarnpkg.com/winston/-/winston-3.0.0-rc2.tgz#c30d043b20822c5f6da4797242108b1c5860a3a2"
   dependencies:
-    async "~1.0.0"
-    colors "1.0.x"
-    cycle "1.0.x"
-    eyes "0.1.x"
+    async "^2.6.0"
+    diagnostics "^1.0.1"
     isstream "0.1.x"
+    logform "^1.2.1"
+    one-time "0.0.4"
     stack-trace "0.0.x"
+    triple-beam "^1.0.1"
+    winston-transport "^3.0.1"
 
 with@^5.0.0:
   version "5.1.1"
@@ -10530,6 +10593,10 @@ y18n@^3.2.1:
   version "3.2.1"
   resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
 
+y18n@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
+
 yallist@^2.1.2:
   version "2.1.2"
   resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"