refactor: removed redis + new scheduler engine

This commit is contained in:
Nick 2019-02-13 17:20:46 -05:00
parent e90873e13d
commit cd3f88bad0
51 changed files with 274 additions and 735 deletions

View File

@ -28,19 +28,18 @@ docker-dev-up: ## Run dockerized dev environment
docker-compose -f ./dev/docker-${DEVDB}/docker-compose.yml -p wiki --project-directory . exec wiki yarn dev docker-compose -f ./dev/docker-${DEVDB}/docker-compose.yml -p wiki --project-directory . exec wiki yarn dev
docker-dev-down: ## Shutdown dockerized dev environment docker-dev-down: ## Shutdown dockerized dev environment
docker-compose -f ./dev/docker-${DEVDB}/docker-compose.yml -p wiki --project-directory . down docker-compose -f ./dev/docker-${DEVDB}/docker-compose.yml -p wiki --project-directory . down --remove-orphans
docker-dev-rebuild: ## Rebuild dockerized dev image docker-dev-rebuild: ## Rebuild dockerized dev image
rm -rf ./node_modules rm -rf ./node_modules
docker-compose -f ./dev/docker-${DEVDB}/docker-compose.yml -p wiki --project-directory . build --no-cache --force-rm docker-compose -f ./dev/docker-${DEVDB}/docker-compose.yml -p wiki --project-directory . build --no-cache --force-rm
docker-dev-clean: ## Clean DB, redis and data folders docker-dev-clean: ## Clean DB and data folders
rm -rf ./data rm -rf ./data
[[ "${DEVDB}" == "postgres" ]] && docker-compose -f ./dev/docker-postgres/docker-compose.yml -p wiki --project-directory . exec db psql --dbname=wiki --username=wikijs --command='DROP SCHEMA IF EXISTS public CASCADE; CREATE SCHEMA public' || true [[ "${DEVDB}" == "postgres" ]] && docker-compose -f ./dev/docker-postgres/docker-compose.yml -p wiki --project-directory . exec db psql --dbname=wiki --username=wikijs --command='DROP SCHEMA IF EXISTS public CASCADE; CREATE SCHEMA public' || true
[[ "${DEVDB}" == "mysql" || "${DEVDB}" == "mariadb" ]] && docker-compose -f ./dev/docker-${DEVDB}/docker-compose.yml -p wiki --project-directory . exec db mysql -uroot -p'wikijsrocks' -e 'DROP SCHEMA IF EXISTS wiki; CREATE SCHEMA wiki;' || true [[ "${DEVDB}" == "mysql" || "${DEVDB}" == "mariadb" ]] && docker-compose -f ./dev/docker-${DEVDB}/docker-compose.yml -p wiki --project-directory . exec db mysql -uroot -p'wikijsrocks' -e 'DROP SCHEMA IF EXISTS wiki; CREATE SCHEMA wiki;' || true
[[ "${DEVDB}" == "mssql" ]] && docker-compose -f ./dev/docker-mssql/docker-compose.yml -p wiki --project-directory . exec db /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'W1kiJSR0cks!' -Q 'DROP DATABASE IF EXISTS wiki; CREATE DATABASE wiki;' || true [[ "${DEVDB}" == "mssql" ]] && docker-compose -f ./dev/docker-mssql/docker-compose.yml -p wiki --project-directory . exec db /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'W1kiJSR0cks!' -Q 'DROP DATABASE IF EXISTS wiki; CREATE DATABASE wiki;' || true
[[ "${DEVDB}" == "sqlite" ]] && docker-compose -f ./dev/docker-sqlite/docker-compose.yml -p wiki --project-directory . exec wiki rm -rf /wiki/db.sqlite || true [[ "${DEVDB}" == "sqlite" ]] && docker-compose -f ./dev/docker-sqlite/docker-compose.yml -p wiki --project-directory . exec wiki rm -rf /wiki/db.sqlite || true
docker-compose -f ./dev/docker-${DEVDB}/docker-compose.yml -p wiki --project-directory . exec redis redis-cli flushall
docker-dev-bash: ## Rebuild dockerized dev image docker-dev-bash: ## Rebuild dockerized dev image
docker-compose -f ./dev/docker-${DEVDB}/docker-compose.yml -p wiki --project-directory . exec wiki bash docker-compose -f ./dev/docker-${DEVDB}/docker-compose.yml -p wiki --project-directory . exec wiki bash

View File

@ -15,10 +15,6 @@ query {
ramTotal ramTotal
workingDirectory workingDirectory
nodeVersion nodeVersion
redisVersion
redisUsedRAM
redisTotalRAM
redisHost
} }
} }
} }

View File

@ -31,22 +31,19 @@ db:
# SQLite only: # SQLite only:
storage: path/to/database.sqlite storage: path/to/database.sqlite
# ---------------------------------------------------------------------
# Redis
# ---------------------------------------------------------------------
# Redis 3.2 or later required
redis:
host: localhost
port: 6379
db: 0
password: null
####################################################################### #######################################################################
# ADVANCED OPTIONS # # ADVANCED OPTIONS #
####################################################################### #######################################################################
# Do not change unless you know what you are doing! # Do not change unless you know what you are doing!
# ---------------------------------------------------------------------
# Use X-Forwarded-For header
# ---------------------------------------------------------------------
# Enable only if Wiki.js is behind a reverse-proxy (nginx, apache, etc)
# or a cloud proxying services like Cloudflare.
trustProxy: false
# --------------------------------------------------------------------- # ---------------------------------------------------------------------
# SSL/TLS Settings # SSL/TLS Settings
# --------------------------------------------------------------------- # ---------------------------------------------------------------------

View File

@ -13,4 +13,5 @@ redis:
port: $(REDIS_PORT) port: $(REDIS_PORT)
db: $(REDIS_DB) db: $(REDIS_DB)
password: $(REDIS_PASS) password: $(REDIS_PASS)
trustProxy: $(TRUST_PROXY)
logLevel: info logLevel: info

View File

@ -7,8 +7,4 @@ db:
user: wikijs user: wikijs
pass: wikijsrocks pass: wikijsrocks
db: wiki db: wiki
redis:
host: redis
port: 6379
db: 0
logLevel: info logLevel: info

View File

@ -3,16 +3,6 @@
version: "3" version: "3"
services: services:
redis:
image: redis:4-alpine
ports:
- "16379:6379"
logging:
driver: "none"
networks:
- wikinet
db: db:
image: mariadb:10.3 image: mariadb:10.3
environment: environment:
@ -44,7 +34,6 @@ services:
dockerfile: dev/docker-mariadb/Dockerfile dockerfile: dev/docker-mariadb/Dockerfile
depends_on: depends_on:
- db - db
- redis
networks: networks:
- wikinet - wikinet
ports: ports:

View File

@ -1,7 +1,6 @@
#!/bin/sh #!/bin/sh
echo "Waiting for redis and mariadb to start up..." echo "Waiting for mariadb to start up..."
bash ./dev/docker-common/wait.sh redis:6379
bash ./dev/docker-common/wait.sh db:3306 bash ./dev/docker-common/wait.sh db:3306
echo "=== READY ===" echo "=== READY ==="
tail -f /dev/null tail -f /dev/null

View File

@ -7,8 +7,4 @@ db:
user: SA user: SA
pass: W1kiJSR0cks! pass: W1kiJSR0cks!
db: wiki db: wiki
redis:
host: redis
port: 6379
db: 0
logLevel: info logLevel: info

View File

@ -3,16 +3,6 @@
version: "3" version: "3"
services: services:
redis:
image: redis:4-alpine
ports:
- "16379:6379"
logging:
driver: "none"
networks:
- wikinet
db: db:
image: mcr.microsoft.com/mssql/server:2017-latest image: mcr.microsoft.com/mssql/server:2017-latest
environment: environment:
@ -34,7 +24,6 @@ services:
dockerfile: dev/docker-mssql/Dockerfile dockerfile: dev/docker-mssql/Dockerfile
depends_on: depends_on:
- db - db
- redis
networks: networks:
- wikinet - wikinet
ports: ports:

View File

@ -1,7 +1,6 @@
#!/bin/sh #!/bin/sh
echo "Waiting for redis and mssql to start up..." echo "Waiting for mssql to start up..."
bash ./dev/docker-common/wait.sh redis:6379
bash ./dev/docker-common/wait.sh db:1433 bash ./dev/docker-common/wait.sh db:1433
echo "=== READY ===" echo "=== READY ==="
tail -f /dev/null tail -f /dev/null

View File

@ -7,8 +7,4 @@ db:
user: wikijs user: wikijs
pass: wikijsrocks pass: wikijsrocks
db: wiki db: wiki
redis:
host: redis
port: 6379
db: 0
logLevel: info logLevel: info

View File

@ -3,16 +3,6 @@
version: "3" version: "3"
services: services:
redis:
image: redis:4-alpine
ports:
- "16379:6379"
logging:
driver: "none"
networks:
- wikinet
db: db:
image: mysql:5.7 image: mysql:5.7
environment: environment:
@ -44,7 +34,6 @@ services:
dockerfile: dev/docker-mysql/Dockerfile dockerfile: dev/docker-mysql/Dockerfile
depends_on: depends_on:
- db - db
- redis
networks: networks:
- wikinet - wikinet
ports: ports:

View File

@ -1,7 +1,6 @@
#!/bin/sh #!/bin/sh
echo "Waiting for redis and mysql to start up..." echo "Waiting for mysql to start up..."
bash ./dev/docker-common/wait.sh redis:6379
bash ./dev/docker-common/wait.sh db:3306 bash ./dev/docker-common/wait.sh db:3306
echo "=== READY ===" echo "=== READY ==="
tail -f /dev/null tail -f /dev/null

View File

@ -7,8 +7,4 @@ db:
user: wikijs user: wikijs
pass: wikijsrocks pass: wikijsrocks
db: wiki db: wiki
redis:
host: redis
port: 6379
db: 0
logLevel: info logLevel: info

View File

@ -3,16 +3,6 @@
version: "3" version: "3"
services: services:
redis:
image: redis:4-alpine
ports:
- "16379:6379"
logging:
driver: "none"
networks:
- wikinet
db: db:
image: postgres:9-alpine image: postgres:9-alpine
environment: environment:
@ -43,7 +33,6 @@ services:
dockerfile: dev/docker-postgres/Dockerfile dockerfile: dev/docker-postgres/Dockerfile
depends_on: depends_on:
- db - db
- redis
networks: networks:
- wikinet - wikinet
ports: ports:

View File

@ -1,7 +1,6 @@
#!/bin/sh #!/bin/sh
echo "Waiting for redis and postgres to start up..." echo "Waiting for postgres to start up..."
bash ./dev/docker-common/wait.sh redis:6379
bash ./dev/docker-common/wait.sh db:5432 bash ./dev/docker-common/wait.sh db:5432
echo "=== READY ===" echo "=== READY ==="
tail -f /dev/null tail -f /dev/null

View File

@ -3,8 +3,4 @@ bindIP: 0.0.0.0
db: db:
type: sqlite type: sqlite
storage: /wiki/db.sqlite storage: /wiki/db.sqlite
redis:
host: redis
port: 6379
db: 0
logLevel: info logLevel: info

View File

@ -3,22 +3,10 @@
version: "3" version: "3"
services: services:
redis:
image: redis:4-alpine
ports:
- "16379:6379"
logging:
driver: "none"
networks:
- wikinet
wiki: wiki:
build: build:
context: . context: .
dockerfile: dev/docker-sqlite/Dockerfile dockerfile: dev/docker-sqlite/Dockerfile
depends_on:
- redis
networks: networks:
- wikinet - wikinet
ports: ports:
@ -26,7 +14,6 @@ services:
volumes: volumes:
- .:/wiki - .:/wiki
- /wiki/node_modules - /wiki/node_modules
command: ["sh", "./dev/docker-sqlite/init.sh"]
networks: networks:
wikinet: wikinet:

View File

@ -1,6 +0,0 @@
#!/bin/sh
echo "Waiting for redis to start up..."
bash ./dev/docker-common/wait.sh redis:6379
echo "=== READY ==="
tail -f /dev/null

View File

@ -1,13 +1,5 @@
version: "3" version: "3"
services: services:
redis:
image: redis:4-alpine
logging:
driver: "none"
networks:
- wikinet
db: db:
image: postgres:9-alpine image: postgres:9-alpine
environment: environment:

View File

@ -1,35 +0,0 @@
const { Client } = require('pg')
const fs = require('fs')
const path = require('path')
const yaml = require('js-yaml')
let config = {}
try {
conf = yaml.safeLoad(
cfgHelper.parseConfigValue(
fs.readFileSync(path.join(process.cwd(), 'dev/docker/config.yml'), 'utf8')
)
)
} catch (err) {
console.error(err.message)
process.exit(1)
}
const client = new Client({
user: config.db.username,
host: config.db.host,
database: config.db.database,
password: config.db.password,
port: config.db.port,
})
async function main () {
await client.connect()
await client.query('DROP SCHEMA public CASCADE;')
await client.query('CREATE SCHEMA public;')
await client.end()
console.info('Success.')
}
main()

View File

@ -48,14 +48,11 @@
"bcryptjs-then": "1.0.1", "bcryptjs-then": "1.0.1",
"bluebird": "3.5.3", "bluebird": "3.5.3",
"body-parser": "1.18.3", "body-parser": "1.18.3",
"bull": "3.6.0",
"chalk": "2.4.2", "chalk": "2.4.2",
"cheerio": "1.0.0-rc.2", "cheerio": "1.0.0-rc.2",
"child-process-promise": "2.2.1",
"chokidar": "2.0.4", "chokidar": "2.0.4",
"clean-css": "4.2.1", "clean-css": "4.2.1",
"compression": "1.7.3", "compression": "1.7.3",
"connect-redis": "3.4.0",
"cookie-parser": "1.4.3", "cookie-parser": "1.4.3",
"cors": "2.8.5", "cors": "2.8.5",
"custom-error-instance": "2.1.1", "custom-error-instance": "2.1.1",
@ -63,14 +60,10 @@
"diff": "4.0.1", "diff": "4.0.1",
"diff2html": "2.7.0", "diff2html": "2.7.0",
"dotize": "^0.3.0", "dotize": "^0.3.0",
"execa": "1.0.0",
"express": "4.16.4", "express": "4.16.4",
"express-brute": "1.0.1", "express-brute": "1.0.1",
"express-brute-redis": "0.0.1",
"express-session": "1.15.6",
"file-type": "10.7.1", "file-type": "10.7.1",
"filesize": "4.0.0", "filesize": "4.0.0",
"follow-redirects": "1.6.1",
"fs-extra": "7.0.1", "fs-extra": "7.0.1",
"getos": "3.1.1", "getos": "3.1.1",
"graphql": "14.1.1", "graphql": "14.1.1",
@ -83,7 +76,6 @@
"i18next-localstorage-cache": "1.1.1", "i18next-localstorage-cache": "1.1.1",
"i18next-node-fs-backend": "2.1.1", "i18next-node-fs-backend": "2.1.1",
"image-size": "0.7.1", "image-size": "0.7.1",
"ioredis": "4.6.2",
"js-base64": "2.5.1", "js-base64": "2.5.1",
"js-binary": "1.2.0", "js-binary": "1.2.0",
"js-yaml": "3.12.1", "js-yaml": "3.12.1",
@ -117,7 +109,6 @@
"node-2fa": "1.1.2", "node-2fa": "1.1.2",
"node-cache": "4.2.0", "node-cache": "4.2.0",
"nodemailer": "5.1.1", "nodemailer": "5.1.1",
"oauth2orize": "1.11.0",
"objection": "1.5.3", "objection": "1.5.3",
"ora": "3.0.0", "ora": "3.0.0",
"passport": "0.4.0", "passport": "0.4.0",
@ -146,7 +137,6 @@
"pug": "2.0.3", "pug": "2.0.3",
"qr-image": "3.2.0", "qr-image": "3.2.0",
"raven": "2.6.4", "raven": "2.6.4",
"read-chunk": "3.0.0",
"remove-markdown": "0.3.0", "remove-markdown": "0.3.0",
"request": "2.88.0", "request": "2.88.0",
"request-promise": "4.2.2", "request-promise": "4.2.2",

View File

@ -15,11 +15,6 @@ defaults:
pass: wikijsrocks pass: wikijsrocks
db: wiki db: wiki
storage: ./db.sqlite storage: ./db.sqlite
redis:
host: localhost
port: 6379
db: 0
password: null
ssl: ssl:
enabled: false enabled: false
bindIP: 0.0.0.0 bindIP: 0.0.0.0
@ -53,30 +48,15 @@ localeNamespaces:
- auth - auth
- common - common
jobs: jobs:
fetchGraphLocale:
onInit: false
cron: false
concurrency: 0
purgeUploads: purgeUploads:
onInit: true onInit: true
cron: '*/15 * * * *' schedule: PT15M
concurrency: 0
renderPage:
onInit: false
cron: false
concurrency: 1
syncGraphLocales: syncGraphLocales:
onInit: true onInit: true
cron: '0 0 * * *' schedule: P1D
concurrency: 0
syncGraphUpdates: syncGraphUpdates:
onInit: true onInit: true
cron: '0 0 * * *' schedule: P1D
concurrency: 0
syncStorage:
onInit: false
cron: false
concurrency: 1
groups: groups:
defaultPermissions: defaultPermissions:
- 'manage:pages' - 'manage:pages'

7
server/core/cache.js Normal file
View File

@ -0,0 +1,7 @@
const NodeCache = require('node-cache')
module.exports = {
init() {
return new NodeCache()
}
}

84
server/core/job.js Normal file
View File

@ -0,0 +1,84 @@
const moment = require('moment')
const childProcess = require('child_process')
module.exports = class Job {
constructor({
name,
immediate = false,
schedule = 'P1D',
repeat = false,
worker = false
}) {
this.finished = Promise.resolve()
this.name = name
this.immediate = immediate
this.schedule = moment.duration(schedule)
this.repeat = repeat
this.worker = worker
}
/**
* Start Job
*
* @param {Object} data Job Data
*/
start(data) {
if (this.immediate) {
this.invoke(data)
} else {
this.queue(data)
}
}
/**
* Queue the next job run according to the wait duration
*
* @param {Object} data Job Data
*/
queue(data) {
this.timeout = setTimeout(this.invoke.bind(this), this.schedule.asMilliseconds(), data)
}
/**
* Run the actual job
*
* @param {Object} data Job Data
*/
async invoke(data) {
try {
if (this.worker) {
const proc = childProcess.fork(`server/core/worker.js`, [
`--job=${this.name}`,
`--data=${data}`
], {
cwd: WIKI.ROOTPATH
})
this.finished = new Promise((resolve, reject) => {
proc.on('exit', (code, signal) => {
if (code === 0) {
resolve()
} else {
reject(signal)
}
proc.kill()
})
})
} else {
this.finished = require(`../jobs/${this.name}`)(data)
}
await this.finished
} catch (err) {
WIKI.logger.warn(err)
}
if (this.repeat) {
this.queue(data)
}
}
/**
* Stop any future job invocation from occuring
*/
stop() {
clearTimeout(this.timeout)
}
}

View File

@ -10,10 +10,10 @@ module.exports = {
WIKI.logger.info('=======================================') WIKI.logger.info('=======================================')
WIKI.models = require('./db').init() WIKI.models = require('./db').init()
WIKI.redis = require('./redis').init()
WIKI.queue = require('./queue').init()
await this.preBootMaster() await WIKI.models.onReady
await WIKI.configSvc.loadFromDb()
this.bootMaster() this.bootMaster()
}, },
/** /**
@ -21,11 +21,10 @@ module.exports = {
*/ */
async preBootMaster() { async preBootMaster() {
try { try {
await WIKI.models.onReady await this.initTelemetry()
await WIKI.configSvc.loadFromDb() WIKI.cache = require('./cache').init()
await WIKI.queue.clean() WIKI.scheduler = require('./scheduler').init()
WIKI.events = new EventEmitter() WIKI.events = new EventEmitter()
WIKI.redisSub = require('./redis').subscribe()
} catch (err) { } catch (err) {
WIKI.logger.error(err) WIKI.logger.error(err)
process.exit(1) process.exit(1)
@ -40,7 +39,7 @@ module.exports = {
WIKI.logger.info('Starting setup wizard...') WIKI.logger.info('Starting setup wizard...')
require('../setup')() require('../setup')()
} else { } else {
await this.initTelemetry() await this.preBootMaster()
await require('../master')() await require('../master')()
this.postBootMaster() this.postBootMaster()
} }
@ -62,7 +61,7 @@ module.exports = {
await WIKI.auth.activateStrategies() await WIKI.auth.activateStrategies()
await WIKI.models.storage.initTargets() await WIKI.models.storage.initTargets()
await WIKI.queue.start() WIKI.scheduler.start()
}, },
/** /**
* Init Telemetry * Init Telemetry

View File

@ -27,15 +27,6 @@ module.exports = {
// Load current language + namespaces // Load current language + namespaces
this.refreshNamespaces(true) this.refreshNamespaces(true)
// Listen for localization events
WIKI.events.on('localization', (action) => {
switch (action) {
case 'reload':
this.refreshNamespaces()
break
}
})
return this return this
}, },
/** /**

View File

@ -1,63 +0,0 @@
const path = require('path')
const Bull = require('bull')
const Promise = require('bluebird')
const _ = require('lodash')
/* global WIKI */
module.exports = {
job: {},
init() {
_.forOwn(WIKI.data.jobs, (queueParams, queueName) => {
this.job[queueName] = new Bull(queueName, {
prefix: `queue`,
redis: WIKI.config.redis
})
if (queueParams.concurrency > 0) {
this.job[queueName].process(queueParams.concurrency, path.join(WIKI.SERVERPATH, `jobs/${_.kebabCase(queueName)}.js`))
} else {
this.job[queueName].process(path.join(WIKI.SERVERPATH, `jobs/${_.kebabCase(queueName)}.js`))
}
})
return this
},
start() {
_.forOwn(WIKI.data.jobs, (queueParams, queueName) => {
if (queueParams.onInit) {
this.job[queueName].add({}, {
removeOnComplete: true
})
}
if (queueParams.cron) {
this.job[queueName].add({}, {
repeat: { cron: queueParams.cron },
removeOnComplete: true
})
}
})
},
async quit() {
for (const queueName in this.job) {
await this.job[queueName].close()
}
},
async clean() {
return Promise.each(_.keys(WIKI.data.jobs), queueName => {
return new Promise((resolve, reject) => {
let keyStream = WIKI.redis.scanStream({
match: `queue:${queueName}:*`
})
keyStream.on('data', resultKeys => {
if (resultKeys.length > 0) {
WIKI.redis.del(resultKeys)
}
})
keyStream.on('end', resolve)
})
}).then(() => {
WIKI.logger.info('Purging old queue jobs: [ OK ]')
}).return(true).catch(err => {
WIKI.logger.error(err)
})
}
}

View File

@ -1,36 +0,0 @@
const Redis = require('ioredis')
const { isPlainObject } = require('lodash')
/* global WIKI */
module.exports = {
init() {
if (isPlainObject(WIKI.config.redis)) {
let red = new Redis(WIKI.config.redis)
red.on('ready', () => {
WIKI.logger.info('Redis connection: [ OK ]')
})
red.on('error', () => {
WIKI.logger.error('Failed to connect to Redis instance!')
process.exit(1)
})
return red
} else {
WIKI.logger.error('Invalid Redis configuration!')
process.exit(1)
}
},
subscribe() {
let red = this.init()
red.on('message', (channel, msg) => {
WIKI.events.emit(channel, msg)
})
red.subscribe('localization', 'updates', (err, count) => {
if (err) {
WIKI.logger.error(err)
process.exit(1)
}
})
return red
}
}

34
server/core/scheduler.js Normal file
View File

@ -0,0 +1,34 @@
const Job = require('./job')
const _ = require('lodash')
/* global WIKI */
module.exports = {
jobs: [],
init() {
return this
},
start() {
_.forOwn(WIKI.data.jobs, (queueParams, queueName) => {
this.registerJob({
name: _.kebabCase(queueName),
immediate: queueParams.onInit,
schedule: queueParams.schedule,
repeat: true
})
})
},
registerJob(opts, data) {
const job = new Job(opts)
job.start(data)
if (job.repeat) {
this.jobs.push(job)
}
return job
},
stop() {
this.jobs.forEach(job => {
job.stop()
})
}
}

View File

@ -15,15 +15,6 @@ module.exports = {
minimumNodeRequired: '10.12.0' minimumNodeRequired: '10.12.0'
}, },
init() { init() {
// Listen for updates events
WIKI.events.on('updates', (infoRaw) => {
try {
this.updates = JSON.parse(infoRaw)
} catch (err) {
WIKI.logger.warn('Failed to parse updates info.')
}
})
// Clear content cache // Clear content cache
fs.emptyDir(path.join(WIKI.ROOTPATH, 'data/cache')) fs.emptyDir(path.join(WIKI.ROOTPATH, 'data/cache'))

View File

@ -10,9 +10,10 @@ let WIKI = {
global.WIKI = WIKI global.WIKI = WIKI
WIKI.configSvc.init() WIKI.configSvc.init()
// ----------------------------------------
// Init Logger
// ----------------------------------------
WIKI.logger = require('./logger').init('JOB') WIKI.logger = require('./logger').init('JOB')
const args = require('yargs').argv
;(async () => {
await require(`../jobs/${args.job}`)(args.data)
process.exit(0)
})()

View File

@ -11,7 +11,7 @@ module.exports = {
*/ */
async getMigrations() { async getMigrations() {
const absoluteDir = path.join(WIKI.SERVERPATH, 'db/migrations') const absoluteDir = path.join(WIKI.SERVERPATH, 'db/migrations')
const migrationFiles = await fs.readdirAsync(absoluteDir) const migrationFiles = await fs.readdir(absoluteDir)
return migrationFiles.sort(semver.compare).map(m => ({ return migrationFiles.sort(semver.compare).map(m => ({
file: m, file: m,
directory: absoluteDir directory: absoluteDir

View File

@ -12,9 +12,9 @@ module.exports = {
}, },
LocalizationQuery: { LocalizationQuery: {
async locales(obj, args, context, info) { async locales(obj, args, context, info) {
let remoteLocales = await WIKI.redis.get('locales') let remoteLocales = await WIKI.cache.get('locales')
let localLocales = await WIKI.models.locales.query().select('code', 'isRTL', 'name', 'nativeName', 'createdAt', 'updatedAt') let localLocales = await WIKI.models.locales.query().select('code', 'isRTL', 'name', 'nativeName', 'createdAt', 'updatedAt')
remoteLocales = (remoteLocales) ? JSON.parse(remoteLocales) : localLocales remoteLocales = (remoteLocales) ? remoteLocales : localLocales
return _.map(remoteLocales, rl => { return _.map(remoteLocales, rl => {
let isInstalled = _.some(localLocales, ['code', rl.code]) let isInstalled = _.some(localLocales, ['code', rl.code])
return { return {
@ -39,12 +39,11 @@ module.exports = {
LocalizationMutation: { LocalizationMutation: {
async downloadLocale(obj, args, context) { async downloadLocale(obj, args, context) {
try { try {
const job = await WIKI.queue.job.fetchGraphLocale.add({ const job = await WIKI.scheduler.registerJob({
locale: args.locale name: 'fetch-graph-locale',
}, { immediate: true
timeout: 30000 }, args.locale)
}) await job.finished
await job.finished()
return { return {
responseResult: graphHelper.generateSuccess('Locale downloaded successfully') responseResult: graphHelper.generateSuccess('Locale downloaded successfully')
} }

View File

@ -98,18 +98,6 @@ module.exports = {
nodeVersion() { nodeVersion() {
return process.version.substr(1) return process.version.substr(1)
}, },
redisVersion() {
return WIKI.redis.serverInfo.redis_version
},
redisUsedRAM() {
return WIKI.redis.serverInfo.used_memory_human
},
redisTotalRAM() {
return _.get(WIKI.redis.serverInfo, 'total_system_memory_human', 'N/A')
},
redisHost() {
return WIKI.redis.options.host
},
async groupsTotal() { async groupsTotal() {
const total = await WIKI.models.groups.query().count('* as total').first().pluck('total') const total = await WIKI.models.groups.query().count('* as total').first().pluck('total')
return _.toSafeInteger(total) return _.toSafeInteger(total)

View File

@ -38,10 +38,6 @@ type SystemInfo {
pagesTotal: Int @auth(requires: ["manage:system", "manage:navigation", "manage:pages", "delete:pages"]) pagesTotal: Int @auth(requires: ["manage:system", "manage:navigation", "manage:pages", "delete:pages"])
platform: String @auth(requires: ["manage:system"]) platform: String @auth(requires: ["manage:system"])
ramTotal: String @auth(requires: ["manage:system"]) ramTotal: String @auth(requires: ["manage:system"])
redisHost: String @auth(requires: ["manage:system"])
redisTotalRAM: String @auth(requires: ["manage:system"])
redisUsedRAM: String @auth(requires: ["manage:system"])
redisVersion: String @auth(requires: ["manage:system"])
usersTotal: Int @auth(requires: ["manage:system", "manage:navigation", "manage:groups", "write:groups", "manage:users", "write:users"]) usersTotal: Int @auth(requires: ["manage:system", "manage:navigation", "manage:groups", "write:groups", "manage:users", "write:users"])
workingDirectory: String @auth(requires: ["manage:system"]) workingDirectory: String @auth(requires: ["manage:system"])
} }

View File

@ -1,17 +1,12 @@
require('../core/worker')
const _ = require('lodash') const _ = require('lodash')
const { createApolloFetch } = require('apollo-fetch') const { createApolloFetch } = require('apollo-fetch')
/* global WIKI */ /* global WIKI */
WIKI.redis = require('../core/redis').init() module.exports = async (localeCode) => {
WIKI.models = require('../core/db').init() WIKI.logger.info(`Fetching locale ${localeCode} from Graph endpoint...`)
module.exports = async (job) => {
WIKI.logger.info(`Fetching locale ${job.data.locale} from Graph endpoint...`)
try { try {
await WIKI.configSvc.loadFromDb()
const apollo = createApolloFetch({ const apollo = createApolloFetch({
uri: WIKI.config.graphEndpoint uri: WIKI.config.graphEndpoint
}) })
@ -26,7 +21,7 @@ module.exports = async (job) => {
} }
}`, }`,
variables: { variables: {
code: job.data.locale code: localeCode
} }
}) })
const strings = _.get(respStrings, 'data.localization.strings', []) const strings = _.get(respStrings, 'data.localization.strings', [])
@ -36,12 +31,12 @@ module.exports = async (job) => {
_.set(lcObj, row.key.replace(':', '.'), row.value) _.set(lcObj, row.key.replace(':', '.'), row.value)
}) })
const locales = await WIKI.redis.get('locales') const locales = await WIKI.cache.get('locales')
if (locales) { if (locales) {
const currentLocale = _.find(JSON.parse(locales), ['code', job.data.locale]) || {} const currentLocale = _.find(locales, ['code', localeCode]) || {}
await WIKI.models.locales.query().delete().where('code', job.data.locale) await WIKI.models.locales.query().delete().where('code', localeCode)
await WIKI.models.locales.query().insert({ await WIKI.models.locales.query().insert({
code: job.data.locale, code: localeCode,
strings: lcObj, strings: lcObj,
isRTL: currentLocale.isRTL, isRTL: currentLocale.isRTL,
name: currentLocale.name, name: currentLocale.name,
@ -51,11 +46,11 @@ module.exports = async (job) => {
throw new Error('Failed to fetch cached locales list! Restart server to resolve this issue.') throw new Error('Failed to fetch cached locales list! Restart server to resolve this issue.')
} }
await WIKI.redis.publish('localization', 'reload') await WIKI.lang.refreshNamespaces()
WIKI.logger.info(`Fetching locale ${job.data.locale} from Graph endpoint: [ COMPLETED ]`) WIKI.logger.info(`Fetching locale ${localeCode} from Graph endpoint: [ COMPLETED ]`)
} catch (err) { } catch (err) {
WIKI.logger.error(`Fetching locale ${job.data.locale} from Graph endpoint: [ FAILED ]`) WIKI.logger.error(`Fetching locale ${localeCode} from Graph endpoint: [ FAILED ]`)
WIKI.logger.error(err.message) WIKI.logger.error(err.message)
} }
} }

View File

@ -1,26 +1,24 @@
require('../core/worker')
/* global WIKI */ /* global WIKI */
const Promise = require('bluebird') const Promise = require('bluebird')
const fs = Promise.promisifyAll(require('fs-extra')) const fs = require('fs-extra')
const moment = require('moment') const moment = require('moment')
const path = require('path') const path = require('path')
module.exports = async (job) => { module.exports = async () => {
WIKI.logger.info('Purging orphaned upload files...') WIKI.logger.info('Purging orphaned upload files...')
try { try {
const uplTempPath = path.resolve(process.cwd(), WIKI.config.paths.data, 'uploads') const uplTempPath = path.resolve(process.cwd(), WIKI.config.paths.data, 'uploads')
const ls = await fs.readdirAsync(uplTempPath) const ls = await fs.readdir(uplTempPath)
const fifteenAgo = moment().subtract(15, 'minutes') const fifteenAgo = moment().subtract(15, 'minutes')
await Promise.map(ls, (f) => { await Promise.map(ls, (f) => {
return fs.statAsync(path.join(uplTempPath, f)).then((s) => { return { filename: f, stat: s } }) return fs.stat(path.join(uplTempPath, f)).then((s) => { return { filename: f, stat: s } })
}).filter((s) => { return s.stat.isFile() }).then((arrFiles) => { }).filter((s) => { return s.stat.isFile() }).then((arrFiles) => {
return Promise.map(arrFiles, (f) => { return Promise.map(arrFiles, (f) => {
if (moment(f.stat.ctime).isBefore(fifteenAgo, 'minute')) { if (moment(f.stat.ctime).isBefore(fifteenAgo, 'minute')) {
return fs.unlinkAsync(path.join(uplTempPath, f.filename)) return fs.unlink(path.join(uplTempPath, f.filename))
} }
}) })
}) })

View File

@ -1,23 +1,29 @@
require('../core/worker')
const _ = require('lodash') const _ = require('lodash')
const cheerio = require('cheerio') const cheerio = require('cheerio')
/* global WIKI */ /* global WIKI */
WIKI.models = require('../core/db').init() module.exports = async (pageId) => {
WIKI.logger.info(`Rendering page ID ${pageId}...`)
module.exports = async (job) => {
WIKI.logger.info(`Rendering page ${job.data.page.path}...`)
try { try {
let output = job.data.page.content WIKI.models = require('../core/db').init()
for (let core of job.data.pipeline) {
const page = await WIKI.models.pages.getPageFromDb(pageId)
if (!page) {
throw new Error('Invalid Page Id')
}
await WIKI.models.renderers.fetchDefinitions()
const pipeline = await WIKI.models.renderers.getRenderingPipeline(page.contentType)
let output = page.content
for (let core of pipeline) {
const renderer = require(`../modules/rendering/${_.kebabCase(core.key)}/renderer.js`) const renderer = require(`../modules/rendering/${_.kebabCase(core.key)}/renderer.js`)
output = await renderer.render.call({ output = await renderer.render.call({
config: core.config, config: core.config,
children: core.children, children: core.children,
page: job.data.page, page: page,
input: output input: output
}) })
} }
@ -61,18 +67,20 @@ module.exports = async (job) => {
render: output, render: output,
toc: JSON.stringify(toc.root) toc: JSON.stringify(toc.root)
}) })
.where('id', job.data.page.id) .where('id', pageId)
// Save to cache // Save to cache
await WIKI.models.pages.savePageToCache({ await WIKI.models.pages.savePageToCache({
...job.data.page, ...page,
render: output, render: output,
toc: JSON.stringify(toc.root) toc: JSON.stringify(toc.root)
}) })
WIKI.logger.info(`Rendering page ${job.data.page.path}: [ COMPLETED ]`) await WIKI.models.knex.destroy()
WIKI.logger.info(`Rendering page ID ${pageId}: [ COMPLETED ]`)
} catch (err) { } catch (err) {
WIKI.logger.error(`Rendering page ${job.data.page.path}: [ FAILED ]`) WIKI.logger.error(`Rendering page ID ${pageId}: [ FAILED ]`)
WIKI.logger.error(err.message) WIKI.logger.error(err.message)
} }
} }

View File

@ -1,17 +1,12 @@
require('../core/worker')
const _ = require('lodash') const _ = require('lodash')
const { createApolloFetch } = require('apollo-fetch') const { createApolloFetch } = require('apollo-fetch')
/* global WIKI */ /* global WIKI */
WIKI.redis = require('../core/redis').init() module.exports = async () => {
WIKI.models = require('../core/db').init()
module.exports = async (job) => {
WIKI.logger.info('Syncing locales with Graph endpoint...') WIKI.logger.info('Syncing locales with Graph endpoint...')
try { try {
await WIKI.configSvc.loadFromDb()
const apollo = createApolloFetch({ const apollo = createApolloFetch({
uri: WIKI.config.graphEndpoint uri: WIKI.config.graphEndpoint
}) })
@ -33,7 +28,7 @@ module.exports = async (job) => {
}` }`
}) })
const locales = _.sortBy(_.get(respList, 'data.localization.locales', []), 'name').map(lc => ({...lc, isInstalled: (lc.code === 'en')})) const locales = _.sortBy(_.get(respList, 'data.localization.locales', []), 'name').map(lc => ({...lc, isInstalled: (lc.code === 'en')}))
WIKI.redis.set('locales', JSON.stringify(locales)) WIKI.cache.set('locales', locales)
const currentLocale = _.find(locales, ['code', WIKI.config.lang.code]) const currentLocale = _.find(locales, ['code', WIKI.config.lang.code])
// -> Download locale strings // -> Download locale strings
@ -68,7 +63,7 @@ module.exports = async (job) => {
}).where('code', WIKI.config.lang.code) }).where('code', WIKI.config.lang.code)
} }
await WIKI.redis.publish('localization', 'reload') await WIKI.lang.refreshNamespaces()
WIKI.logger.info('Syncing locales with Graph endpoint: [ COMPLETED ]') WIKI.logger.info('Syncing locales with Graph endpoint: [ COMPLETED ]')
} catch (err) { } catch (err) {

View File

@ -1,17 +1,12 @@
require('../core/worker')
const _ = require('lodash') const _ = require('lodash')
const { createApolloFetch } = require('apollo-fetch') const { createApolloFetch } = require('apollo-fetch')
/* global WIKI */ /* global WIKI */
WIKI.redis = require('../core/redis').init() module.exports = async () => {
WIKI.models = require('../core/db').init()
module.exports = async (job) => {
WIKI.logger.info(`Fetching latest updates from Graph endpoint...`) WIKI.logger.info(`Fetching latest updates from Graph endpoint...`)
try { try {
await WIKI.configSvc.loadFromDb()
const apollo = createApolloFetch({ const apollo = createApolloFetch({
uri: WIKI.config.graphEndpoint uri: WIKI.config.graphEndpoint
}) })
@ -33,9 +28,10 @@ module.exports = async (job) => {
version: WIKI.version version: WIKI.version
} }
}) })
const info = _.get(resp, 'data.releases.checkForUpdates', {}) const info = _.get(resp, 'data.releases.checkForUpdates', false)
if (info) {
await WIKI.redis.publish('updates', JSON.stringify(info)) WIKI.system.updates = info
}
WIKI.logger.info(`Fetching latest updates from Graph endpoint: [ COMPLETED ]`) WIKI.logger.info(`Fetching latest updates from Graph endpoint: [ COMPLETED ]`)
} catch (err) { } catch (err) {

View File

@ -46,7 +46,9 @@ module.exports = async () => {
app.use(mw.security) app.use(mw.security)
app.use(cors(WIKI.config.cors)) app.use(cors(WIKI.config.cors))
app.options('*', cors(WIKI.config.cors)) app.options('*', cors(WIKI.config.cors))
if (WIKI.config.trustProxy) {
app.enable('trust proxy') app.enable('trust proxy')
}
// ---------------------------------------- // ----------------------------------------
// Public Assets // Public Assets

View File

@ -23,15 +23,15 @@ module.exports = class Navigation extends Model {
static async getTree({ cache = false } = {}) { static async getTree({ cache = false } = {}) {
if (cache) { if (cache) {
const navTreeCached = await WIKI.redis.get('nav:sidebar') const navTreeCached = await WIKI.cache.get('nav:sidebar')
if (navTreeCached) { if (navTreeCached) {
return JSON.parse(navTreeCached) return navTreeCached
} }
} }
const navTree = await WIKI.models.navigation.query().findOne('key', 'site') const navTree = await WIKI.models.navigation.query().findOne('key', 'site')
if (navTree) { if (navTree) {
if (cache) { if (cache) {
await WIKI.redis.set('nav:sidebar', JSON.stringify(navTree.config), 'EX', 300) await WIKI.cache.set('nav:sidebar', navTree.config, 300)
} }
return navTree.config return navTree.config
} else { } else {

View File

@ -217,15 +217,12 @@ module.exports = class Page extends Model {
} }
static async renderPage(page) { static async renderPage(page) {
const pipeline = await WIKI.models.renderers.getRenderingPipeline(page.contentType) const renderJob = await WIKI.scheduler.registerJob({
const renderJob = await WIKI.queue.job.renderPage.add({ name: 'render-page',
page, immediate: true,
pipeline worker: true
}, { }, page.id)
removeOnComplete: true, return renderJob.finished
removeOnFail: true
})
return renderJob.finished()
} }
static async getPage(opts) { static async getPage(opts) {
@ -240,6 +237,7 @@ module.exports = class Page extends Model {
} }
static async getPageFromDb(opts) { static async getPageFromDb(opts) {
const queryModeID = _.isNumber(opts)
return WIKI.models.pages.query() return WIKI.models.pages.query()
.column([ .column([
'pages.*', 'pages.*',
@ -252,11 +250,14 @@ module.exports = class Page extends Model {
]) ])
.joinRelation('author') .joinRelation('author')
.joinRelation('creator') .joinRelation('creator')
.where({ .where(queryModeID ? {
'pages.id': opts
} : {
'pages.path': opts.path, 'pages.path': opts.path,
'pages.localeCode': opts.locale 'pages.localeCode': opts.locale
}) })
.andWhere(builder => { .andWhere(builder => {
if (queryModeID) return
builder.where({ builder.where({
'pages.isPublished': true 'pages.isPublished': true
}).orWhere({ }).orWhere({
@ -265,6 +266,7 @@ module.exports = class Page extends Model {
}) })
}) })
.andWhere(builder => { .andWhere(builder => {
if (queryModeID) return
if (opts.isPrivate) { if (opts.isPrivate) {
builder.where({ 'pages.isPrivate': true, 'pages.privateNS': opts.privateNS }) builder.where({ 'pages.isPrivate': true, 'pages.privateNS': opts.privateNS })
} else { } else {

View File

@ -35,12 +35,7 @@ module.exports = class Renderer extends Model {
return WIKI.models.renderers.query() return WIKI.models.renderers.query()
} }
static async refreshRenderersFromDisk() { static async fetchDefinitions() {
let trx
try {
const dbRenderers = await WIKI.models.renderers.query()
// -> Fetch definitions from disk
const rendererDirs = await fs.readdir(path.join(WIKI.SERVERPATH, 'modules/rendering')) const rendererDirs = await fs.readdir(path.join(WIKI.SERVERPATH, 'modules/rendering'))
let diskRenderers = [] let diskRenderers = []
for (let dir of rendererDirs) { for (let dir of rendererDirs) {
@ -51,6 +46,15 @@ module.exports = class Renderer extends Model {
...renderer, ...renderer,
props: commonHelper.parseModuleProps(renderer.props) props: commonHelper.parseModuleProps(renderer.props)
})) }))
}
static async refreshRenderersFromDisk() {
let trx
try {
const dbRenderers = await WIKI.models.renderers.query()
// -> Fetch definitions from disk
await WIKI.models.renderers.fetchDefinitions()
// -> Insert new Renderers // -> Insert new Renderers
let newRenderers = [] let newRenderers = []

View File

@ -107,6 +107,11 @@ module.exports = class Storage extends Model {
target.fn.config = target.config target.fn.config = target.config
target.fn.mode = target.mode target.fn.mode = target.mode
await target.fn.init() await target.fn.init()
// if (target.schedule) {
// WIKI.scheduler.registerJob({
// name:
// }, target.fn.sync)
// }
} }
} catch (err) { } catch (err) {
WIKI.logger.warn(err) WIKI.logger.warn(err)

View File

@ -294,7 +294,7 @@ module.exports = class User extends Model {
static async loginTFA(opts, context) { static async loginTFA(opts, context) {
if (opts.securityCode.length === 6 && opts.loginToken.length === 64) { if (opts.securityCode.length === 6 && opts.loginToken.length === 64) {
let result = await WIKI.redis.get(`tfa:${opts.loginToken}`) let result = null // await WIKI.redis.get(`tfa:${opts.loginToken}`)
if (result) { if (result) {
let userId = _.toSafeInteger(result) let userId = _.toSafeInteger(result)
if (userId && userId > 0) { if (userId && userId > 0) {

View File

@ -8,6 +8,7 @@ isAvailable: true
supportedModes: supportedModes:
- push - push
defaultMode: push defaultMode: push
schedule: false
props: props:
path: path:
type: String type: String

View File

@ -10,6 +10,7 @@ supportedModes:
- push - push
- pull - pull
defaultMode: sync defaultMode: sync
schedule: PT5M
props: props:
authType: authType:
type: String type: String

View File

@ -117,13 +117,12 @@ const init = {
} }
}, },
async reload() { async reload() {
console.warn(chalk.yellow('--- Stopping scheduled jobs...'))
if (global.WIKI.scheduler) {
global.WIKI.scheduler.stop()
}
console.warn(chalk.yellow('--- Closing DB connections...')) console.warn(chalk.yellow('--- Closing DB connections...'))
await global.WIKI.models.knex.destroy() await global.WIKI.models.knex.destroy()
console.warn(chalk.yellow('--- Closing Redis connections...'))
await global.WIKI.redis.quit()
await global.WIKI.redisSub.quit()
console.warn(chalk.yellow('--- Closing Queue connections...'))
await global.WIKI.queue.quit()
console.warn(chalk.yellow('--- Closing Server connections...')) console.warn(chalk.yellow('--- Closing Server connections...'))
global.WIKI.server.destroy(() => { global.WIKI.server.destroy(() => {
console.warn(chalk.yellow('--- Purging node modules cache...')) console.warn(chalk.yellow('--- Purging node modules cache...'))

333
yarn.lock
View File

@ -2347,11 +2347,6 @@ binary-extensions@^1.0.0:
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14"
integrity sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg== integrity sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==
bisection@:
version "0.0.3"
resolved "https://registry.yarnpkg.com/bisection/-/bisection-0.0.3.tgz#9891d506d86ec7d50910c5157bb592dbb03f33db"
integrity sha1-mJHVBthux9UJEMUVe7WS27A/M9s=
bl@^2.0.1: bl@^2.0.1:
version "2.2.0" version "2.2.0"
resolved "https://registry.yarnpkg.com/bl/-/bl-2.2.0.tgz#e1a574cdf528e4053019bb800b041c0ac88da493" resolved "https://registry.yarnpkg.com/bl/-/bl-2.2.0.tgz#e1a574cdf528e4053019bb800b041c0ac88da493"
@ -2572,21 +2567,6 @@ builtin-status-codes@^3.0.0:
resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
bull@3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/bull/-/bull-3.6.0.tgz#9d137a4470d9f5a0df54801ca4390656e5054a42"
integrity sha512-705Vf3weiRr8D49/+lsPSxV/1NejhjfmVviv9qG2srIYPr7IS2euLwHa+2GNfaVDA2tmx8xyJFW9bPw3fPfHPg==
dependencies:
cron-parser "^2.7.3"
debuglog "^1.0.0"
ioredis "^4.5.1"
lodash "^4.17.11"
p-timeout "^2.0.1"
promise.prototype.finally "^3.1.0"
semver "^5.6.0"
util.promisify "^1.0.0"
uuid "^3.2.1"
bunyan@^1.8.3: bunyan@^1.8.3:
version "1.8.12" version "1.8.12"
resolved "https://registry.yarnpkg.com/bunyan/-/bunyan-1.8.12.tgz#f150f0f6748abdd72aeae84f04403be2ef113797" resolved "https://registry.yarnpkg.com/bunyan/-/bunyan-1.8.12.tgz#f150f0f6748abdd72aeae84f04403be2ef113797"
@ -2900,15 +2880,6 @@ cheerio@1.0.0-rc.2:
lodash "^4.15.0" lodash "^4.15.0"
parse5 "^3.0.1" parse5 "^3.0.1"
child-process-promise@2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/child-process-promise/-/child-process-promise-2.2.1.tgz#4730a11ef610fad450b8f223c79d31d7bdad8074"
integrity sha1-RzChHvYQ+tRQuPIjx50x172tgHQ=
dependencies:
cross-spawn "^4.0.2"
node-version "^1.0.0"
promise-polyfill "^6.0.1"
chokidar@2.0.4, chokidar@^2.0.2, chokidar@^2.0.3, chokidar@^2.0.4: chokidar@2.0.4, chokidar@^2.0.2, chokidar@^2.0.3, chokidar@^2.0.4:
version "2.0.4" version "2.0.4"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26"
@ -3082,11 +3053,6 @@ clone@^1.0.2:
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
cluster-key-slot@^1.0.6:
version "1.0.12"
resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.0.12.tgz#d5deff2a520717bc98313979b687309b2d368e29"
integrity sha512-21O0kGmvED5OJ7ZTdqQ5lQQ+sjuez33R+d35jZKLwqUb5mqcPHUsxOSzj61+LHVtxGZd1kShbQM3MjB/gBJkVg==
co@^4.6.0: co@^4.6.0:
version "4.6.0" version "4.6.0"
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
@ -3317,14 +3283,6 @@ concat-stream@^1.5.0, concat-stream@^1.5.2:
readable-stream "^2.2.2" readable-stream "^2.2.2"
typedarray "^0.0.6" typedarray "^0.0.6"
connect-redis@3.4.0:
version "3.4.0"
resolved "https://registry.yarnpkg.com/connect-redis/-/connect-redis-3.4.0.tgz#4040dd3755bddbf93478fb84937a74052c31b965"
integrity sha512-YKPSO9tLwzUr8jzhsGMdSJUxevWrDt0ggXRcTMb+mtnJ/vWGlWV7RC4VUMgqvZv3uTGDFye8Bf7d6No0oSVkOQ==
dependencies:
debug "^4.0.1"
redis "^2.8.0"
console-browserify@^1.1.0: console-browserify@^1.1.0:
version "1.1.0" version "1.1.0"
resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
@ -3499,11 +3457,6 @@ cosmiconfig@^5.0.0:
js-yaml "^3.9.0" js-yaml "^3.9.0"
parse-json "^4.0.0" parse-json "^4.0.0"
crc@3.4.4:
version "3.4.4"
resolved "https://registry.yarnpkg.com/crc/-/crc-3.4.4.tgz#9da1e980e3bd44fc5c93bf5ab3da3378d85e466b"
integrity sha1-naHpgOO9RPxck79as9ozeNheRms=
create-ecdh@^4.0.0: create-ecdh@^4.0.0:
version "4.0.3" version "4.0.3"
resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
@ -3535,14 +3488,6 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
safe-buffer "^5.0.1" safe-buffer "^5.0.1"
sha.js "^2.4.8" sha.js "^2.4.8"
cron-parser@^2.7.3:
version "2.7.3"
resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.7.3.tgz#12603f89f5375af353a9357be2543d3172eac651"
integrity sha512-t9Kc7HWBWPndBzvbdQ1YG9rpPRB37Tb/tTviziUOh1qs3TARGh3b1p+tnkOHNe1K5iI3oheBPgLqwotMM7+lpg==
dependencies:
is-nan "^1.2.1"
moment-timezone "^0.5.23"
cron@^1.3: cron@^1.3:
version "1.6.0" version "1.6.0"
resolved "https://registry.yarnpkg.com/cron/-/cron-1.6.0.tgz#15f92c1b5a930c5cdfcd53fe940064fa8ca2e72d" resolved "https://registry.yarnpkg.com/cron/-/cron-1.6.0.tgz#15f92c1b5a930c5cdfcd53fe940064fa8ca2e72d"
@ -3574,14 +3519,6 @@ cross-spawn@^3.0.0:
lru-cache "^4.0.1" lru-cache "^4.0.1"
which "^1.2.9" which "^1.2.9"
cross-spawn@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41"
integrity sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=
dependencies:
lru-cache "^4.0.1"
which "^1.2.9"
cross-spawn@^5.0.1: cross-spawn@^5.0.1:
version "5.1.0" version "5.1.0"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
@ -3968,7 +3905,7 @@ debug@*, debug@4, debug@^4.0.1, debug@^4.1.0:
dependencies: dependencies:
ms "^2.1.1" ms "^2.1.1"
debug@2.6.9, debug@2.x.x, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.3, debug@^2.6.8, debug@^2.6.9: debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.3, debug@^2.6.8, debug@^2.6.9:
version "2.6.9" version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
@ -3996,11 +3933,6 @@ debug@^3.0, debug@^3.1, debug@^3.1.0, debug@^3.2.6:
dependencies: dependencies:
ms "^2.1.1" ms "^2.1.1"
debuglog@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=
decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0:
version "1.2.0" version "1.2.0"
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
@ -4055,7 +3987,7 @@ defaults@^1.0.3:
dependencies: dependencies:
clone "^1.0.2" clone "^1.0.2"
define-properties@^1.1.1, define-properties@^1.1.2, define-properties@^1.1.3: define-properties@^1.1.2, define-properties@^1.1.3:
version "1.1.3" version "1.1.3"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
@ -4113,11 +4045,6 @@ denque@1.3.0:
resolved "https://registry.yarnpkg.com/denque/-/denque-1.3.0.tgz#681092ef44a630246d3f6edb2a199230eae8e76b" resolved "https://registry.yarnpkg.com/denque/-/denque-1.3.0.tgz#681092ef44a630246d3f6edb2a199230eae8e76b"
integrity sha512-4SRaSj+PqmrS1soW5/Avd7eJIM2JJIqLLmwhRqIGleZM/8KwZq80njbSS2Iqas+6oARkSkLDHEk4mm78q3JlIg== integrity sha512-4SRaSj+PqmrS1soW5/Avd7eJIM2JJIqLLmwhRqIGleZM/8KwZq80njbSS2Iqas+6oARkSkLDHEk4mm78q3JlIg==
denque@^1.1.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/denque/-/denque-1.4.0.tgz#79e2f0490195502107f24d9553f374837dabc916"
integrity sha512-gh513ac7aiKrAgjiIBWZG0EASyDF9p4JMWwKA8YU5s9figrL5SRNEMT6FDynsegakuhWd1wVqTvqvqAoDxw7wQ==
depd@^1.1.2, depd@~1.1.1, depd@~1.1.2: depd@^1.1.2, depd@~1.1.1, depd@~1.1.2:
version "1.1.2" version "1.1.2"
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
@ -4334,11 +4261,6 @@ dotize@^0.3.0:
resolved "https://registry.yarnpkg.com/dotize/-/dotize-0.3.0.tgz#b7a5c46835f6bd4087731354308f0d160dbceeac" resolved "https://registry.yarnpkg.com/dotize/-/dotize-0.3.0.tgz#b7a5c46835f6bd4087731354308f0d160dbceeac"
integrity sha512-/7m7WPeImgaYj/rWhp/ifA0ZuikC7ablgHiO3Ten5IfJmYX4a1NgjFatv0Srya4psxm25nFzDOKDvmKFOhkr1A== integrity sha512-/7m7WPeImgaYj/rWhp/ifA0ZuikC7ablgHiO3Ten5IfJmYX4a1NgjFatv0Srya4psxm25nFzDOKDvmKFOhkr1A==
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"
integrity sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=
dtrace-provider@~0.8: dtrace-provider@~0.8:
version "0.8.7" version "0.8.7"
resolved "https://registry.yarnpkg.com/dtrace-provider/-/dtrace-provider-0.8.7.tgz#dc939b4d3e0620cfe0c1cd803d0d2d7ed04ffd04" resolved "https://registry.yarnpkg.com/dtrace-provider/-/dtrace-provider-0.8.7.tgz#dc939b4d3e0620cfe0c1cd803d0d2d7ed04ffd04"
@ -4497,7 +4419,7 @@ error-stack-parser@^2.0.2:
dependencies: dependencies:
stackframe "^1.0.4" stackframe "^1.0.4"
es-abstract@^1.12.0, es-abstract@^1.5.1, es-abstract@^1.9.0: es-abstract@^1.12.0, es-abstract@^1.5.1:
version "1.13.0" version "1.13.0"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9"
integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==
@ -4825,19 +4747,6 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
md5.js "^1.3.4" md5.js "^1.3.4"
safe-buffer "^5.1.1" safe-buffer "^5.1.1"
execa@1.0.0, execa@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
dependencies:
cross-spawn "^6.0.0"
get-stream "^4.0.0"
is-stream "^1.1.0"
npm-run-path "^2.0.0"
p-finally "^1.0.0"
signal-exit "^3.0.0"
strip-eof "^1.0.0"
execa@^0.7.0: execa@^0.7.0:
version "0.7.0" version "0.7.0"
resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
@ -4851,6 +4760,19 @@ execa@^0.7.0:
signal-exit "^3.0.0" signal-exit "^3.0.0"
strip-eof "^1.0.0" strip-eof "^1.0.0"
execa@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
dependencies:
cross-spawn "^6.0.0"
get-stream "^4.0.0"
is-stream "^1.1.0"
npm-run-path "^2.0.0"
p-finally "^1.0.0"
signal-exit "^3.0.0"
strip-eof "^1.0.0"
expand-brackets@^2.1.4: expand-brackets@^2.1.4:
version "2.1.4" version "2.1.4"
resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
@ -4871,15 +4793,6 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2:
dependencies: dependencies:
homedir-polyfill "^1.0.1" homedir-polyfill "^1.0.1"
express-brute-redis@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/express-brute-redis/-/express-brute-redis-0.0.1.tgz#0f4c833a5c3c2505c0c5c9ba55108e224a247ef8"
integrity sha1-D0yDOlw8JQXAxcm6VRCOIkokfvg=
dependencies:
express-brute "~0.4.2"
redis "~0.10.0"
underscore "~1.5.1"
express-brute@1.0.1: express-brute@1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/express-brute/-/express-brute-1.0.1.tgz#9f36d107fe34e40a682593e39bffcc53102b5335" resolved "https://registry.yarnpkg.com/express-brute/-/express-brute-1.0.1.tgz#9f36d107fe34e40a682593e39bffcc53102b5335"
@ -4888,29 +4801,6 @@ express-brute@1.0.1:
long-timeout "~0.1.1" long-timeout "~0.1.1"
underscore "~1.8.3" underscore "~1.8.3"
express-brute@~0.4.2:
version "0.4.2"
resolved "https://registry.yarnpkg.com/express-brute/-/express-brute-0.4.2.tgz#3bc34fb01252b8f47e737bf72dd01ff4df1d9c07"
integrity sha1-O8NPsBJSuPR+c3v3LdAf9N8dnAc=
dependencies:
memcached "~0.2.4"
underscore "~1.5.1"
express-session@1.15.6:
version "1.15.6"
resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.15.6.tgz#47b4160c88f42ab70fe8a508e31cbff76757ab0a"
integrity sha512-r0nrHTCYtAMrFwZ0kBzZEXa1vtPVrw0dKvGSrKP4dahwBQ1BJpF2/y1Pp4sCD/0kvxV4zZeclyvfmw0B4RMJQA==
dependencies:
cookie "0.3.1"
cookie-signature "1.0.6"
crc "3.4.4"
debug "2.6.9"
depd "~1.1.1"
on-headers "~1.0.1"
parseurl "~1.3.2"
uid-safe "~2.1.5"
utils-merge "1.0.1"
express@4.16.4, express@^4.0.0, express@^4.16.3: express@4.16.4, express@^4.0.0, express@^4.16.3:
version "4.16.4" version "4.16.4"
resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e" resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e"
@ -5220,11 +5110,6 @@ flatten@^1.0.2:
resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
integrity sha1-2uRqnXj74lKSJYzB54CkHZXAN4I= integrity sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=
flexbuffer@0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/flexbuffer/-/flexbuffer-0.0.6.tgz#039fdf23f8823e440c38f3277e6fef1174215b30"
integrity sha1-A5/fI/iCPkQMOPMnfm/vEXQhWzA=
flush-write-stream@^1.0.0: flush-write-stream@^1.0.0:
version "1.0.3" version "1.0.3"
resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd"
@ -5233,7 +5118,7 @@ flush-write-stream@^1.0.0:
inherits "^2.0.1" inherits "^2.0.1"
readable-stream "^2.0.4" readable-stream "^2.0.4"
follow-redirects@1.6.1, follow-redirects@^1.2.3, follow-redirects@^1.3.0: follow-redirects@^1.2.3, follow-redirects@^1.3.0:
version "1.6.1" version "1.6.1"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.6.1.tgz#514973c44b5757368bad8bddfe52f81f015c94cb" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.6.1.tgz#514973c44b5757368bad8bddfe52f81f015c94cb"
integrity sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ== integrity sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ==
@ -5876,14 +5761,6 @@ hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.3:
inherits "^2.0.3" inherits "^2.0.3"
minimalistic-assert "^1.0.1" minimalistic-assert "^1.0.1"
hashring@0.0.x:
version "0.0.8"
resolved "https://registry.yarnpkg.com/hashring/-/hashring-0.0.8.tgz#203ab13c364119f10106526d2eaf7bd42b484c31"
integrity sha1-IDqxPDZBGfEBBlJtLq971CtITDE=
dependencies:
bisection ""
simple-lru-cache "0.0.x"
he@1.2.x, he@^1.1.0: he@1.2.x, he@^1.1.0:
version "1.2.0" version "1.2.0"
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
@ -6320,22 +6197,6 @@ invert-kv@^2.0.0:
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02"
integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==
ioredis@4.6.2, ioredis@^4.5.1:
version "4.6.2"
resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.6.2.tgz#840847117fe0190a9309085847311a07183fc385"
integrity sha512-zlc/LeoeriHTXm5z3rakPcfRcUV9x+xr0E+7/L7KH0D5z7sI5ngEQWR2RUxnwFcxUcCkvrXMztRIdBP3DhqMAQ==
dependencies:
cluster-key-slot "^1.0.6"
debug "^3.1.0"
denque "^1.1.0"
flexbuffer "0.0.6"
lodash.defaults "^4.2.0"
lodash.flatten "^4.4.0"
redis-commands "1.4.0"
redis-errors "^1.2.0"
redis-parser "^3.0.0"
standard-as-callback "^1.0.0"
ip-regex@^3.0.0: ip-regex@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-3.0.0.tgz#0a934694b4066558c46294244a23cc33116bf732" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-3.0.0.tgz#0a934694b4066558c46294244a23cc33116bf732"
@ -6548,13 +6409,6 @@ is-invalid-path@^0.1.0:
dependencies: dependencies:
is-glob "^2.0.0" is-glob "^2.0.0"
is-nan@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.2.1.tgz#9faf65b6fb6db24b7f5c0628475ea71f988401e2"
integrity sha1-n69ltvttskt/XAYoR16nH5iEAeI=
dependencies:
define-properties "^1.1.1"
is-number@^3.0.0: is-number@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
@ -6734,13 +6588,6 @@ iterall@^1.1.0, iterall@^1.1.3, iterall@^1.2.1, iterall@^1.2.2:
resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7" resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7"
integrity sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA== integrity sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==
jackpot@>=0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/jackpot/-/jackpot-0.0.6.tgz#3cff064285cbf66f4eab2593c90bce816a821849"
integrity sha1-PP8GQoXL9m9OqyWTyQvOgWqCGEk=
dependencies:
retry "0.6.0"
js-base64@2.5.1, js-base64@^2.1.8: js-base64@2.5.1, js-base64@^2.1.8:
version "2.5.1" version "2.5.1"
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121"
@ -7339,7 +7186,7 @@ lodash.defaults@^3.1.2:
lodash.assign "^3.0.0" lodash.assign "^3.0.0"
lodash.restparam "^3.0.0" lodash.restparam "^3.0.0"
lodash.defaults@^4.0.0, lodash.defaults@^4.2.0: lodash.defaults@^4.0.0:
version "4.2.0" version "4.2.0"
resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=
@ -7354,11 +7201,6 @@ lodash.findkey@^4.6.0:
resolved "https://registry.yarnpkg.com/lodash.findkey/-/lodash.findkey-4.6.0.tgz#83058e903b51cbb759d09ccf546dea3ea39c4718" resolved "https://registry.yarnpkg.com/lodash.findkey/-/lodash.findkey-4.6.0.tgz#83058e903b51cbb759d09ccf546dea3ea39c4718"
integrity sha1-gwWOkDtRy7dZ0JzPVG3qPqOcRxg= integrity sha1-gwWOkDtRy7dZ0JzPVG3qPqOcRxg=
lodash.flatten@^4.4.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=
lodash.foreach@^4.5.0: lodash.foreach@^4.5.0:
version "4.5.0" version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53"
@ -7777,14 +7619,6 @@ mem@^4.0.0:
mimic-fn "^1.0.0" mimic-fn "^1.0.0"
p-is-promise "^2.0.0" p-is-promise "^2.0.0"
memcached@~0.2.4:
version "0.2.8"
resolved "https://registry.yarnpkg.com/memcached/-/memcached-0.2.8.tgz#ffbf9498cbc30779625b77e77770bd50dc525212"
integrity sha1-/7+UmMvDB3liW3fnd3C9UNxSUhI=
dependencies:
hashring "0.0.x"
jackpot ">=0.0.6"
memory-fs@^0.4.0, memory-fs@~0.4.1: memory-fs@^0.4.0, memory-fs@~0.4.1:
version "0.4.1" version "0.4.1"
resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
@ -7996,7 +7830,7 @@ mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdi
dependencies: dependencies:
minimist "0.0.8" minimist "0.0.8"
moment-timezone@0.5.23, moment-timezone@^0.5.23, moment-timezone@^0.5.x: moment-timezone@0.5.23, moment-timezone@^0.5.x:
version "0.5.23" version "0.5.23"
resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.23.tgz#7cbb00db2c14c71b19303cb47b0fb0a6d8651463" resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.23.tgz#7cbb00db2c14c71b19303cb47b0fb0a6d8651463"
integrity sha512-WHFH85DkCfiNMDX5D3X7hpNH3/PUhjTGcD0U1SgfBGZxJ3qUmJh5FdvaFjcClxOvB3rzdfj4oRffbI38jEnC1w== integrity sha512-WHFH85DkCfiNMDX5D3X7hpNH3/PUhjTGcD0U1SgfBGZxJ3qUmJh5FdvaFjcClxOvB3rzdfj4oRffbI38jEnC1w==
@ -8355,11 +8189,6 @@ node-uuid@1.4.1:
resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.1.tgz#39aef510e5889a3dca9c895b506c73aae1bac048" resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.1.tgz#39aef510e5889a3dca9c895b506c73aae1bac048"
integrity sha1-Oa71EOWImj3KnIlbUGxzquG6wEg= integrity sha1-Oa71EOWImj3KnIlbUGxzquG6wEg=
node-version@^1.0.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/node-version/-/node-version-1.2.0.tgz#34fde3ffa8e1149bd323983479dda620e1b5060d"
integrity sha512-ma6oU4Sk0qOoKEAymVoTvk8EdXEobdS7m/mAGhDJ8Rouugho48crHBORAmy5BoOcv8wraPM6xumapQp5hl4iIQ==
nodemailer@5.1.1: nodemailer@5.1.1:
version "5.1.1" version "5.1.1"
resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-5.1.1.tgz#0c48d1ecab02e86d9ff6c620ee75ed944b763505" resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-5.1.1.tgz#0c48d1ecab02e86d9ff6c620ee75ed944b763505"
@ -8494,15 +8323,6 @@ oauth-sign@~0.9.0:
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
oauth2orize@1.11.0:
version "1.11.0"
resolved "https://registry.yarnpkg.com/oauth2orize/-/oauth2orize-1.11.0.tgz#793cef251d45ebdeac32ae40a8b6814faab1d483"
integrity sha1-eTzvJR1F696sMq5AqLaBT6qx1IM=
dependencies:
debug "2.x.x"
uid2 "0.0.x"
utils-merge "1.x.x"
oauth@0.9.x: oauth@0.9.x:
version "0.9.15" version "0.9.15"
resolved "https://registry.yarnpkg.com/oauth/-/oauth-0.9.15.tgz#bd1fefaf686c96b75475aed5196412ff60cfb9c1" resolved "https://registry.yarnpkg.com/oauth/-/oauth-0.9.15.tgz#bd1fefaf686c96b75475aed5196412ff60cfb9c1"
@ -8787,13 +8607,6 @@ p-locate@^3.0.0:
dependencies: dependencies:
p-limit "^2.0.0" p-limit "^2.0.0"
p-timeout@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038"
integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==
dependencies:
p-finally "^1.0.0"
p-try@^1.0.0: p-try@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
@ -9329,11 +9142,6 @@ pify@^3.0.0:
resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
pify@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
pinkie-promise@^2.0.0: pinkie-promise@^2.0.0:
version "2.0.1" version "2.0.1"
resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
@ -10447,25 +10255,11 @@ promise-inflight@^1.0.1:
resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
promise-polyfill@^6.0.1:
version "6.1.0"
resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-6.1.0.tgz#dfa96943ea9c121fca4de9b5868cb39d3472e057"
integrity sha1-36lpQ+qcEh/KTem1hoyznTRy4Fc=
promise-polyfill@^8.1.0: promise-polyfill@^8.1.0:
version "8.1.0" version "8.1.0"
resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.1.0.tgz#30059da54d1358ce905ac581f287e184aedf995d" resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.1.0.tgz#30059da54d1358ce905ac581f287e184aedf995d"
integrity sha512-OzSf6gcCUQ01byV4BgwyUCswlaQQ6gzXc23aLQWhicvfX9kfsUiUhgt3CCQej8jDnl8/PhGF31JdHX2/MzF3WA== integrity sha512-OzSf6gcCUQ01byV4BgwyUCswlaQQ6gzXc23aLQWhicvfX9kfsUiUhgt3CCQej8jDnl8/PhGF31JdHX2/MzF3WA==
promise.prototype.finally@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.0.tgz#66f161b1643636e50e7cf201dc1b84a857f3864e"
integrity sha512-7p/K2f6dI+dM8yjRQEGrTQs5hTQixUAdOGpMEA3+pVxpX5oHKRSKAXyLw9Q9HUWDTdwtoo39dSHGQtN90HcEwQ==
dependencies:
define-properties "^1.1.2"
es-abstract "^1.9.0"
function-bind "^1.1.1"
promise@^7.0.1, promise@^7.1.1: promise@^7.0.1, promise@^7.1.1:
version "7.3.1" version "7.3.1"
resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
@ -10775,11 +10569,6 @@ querystring@0.2.0, querystring@^0.2.0:
resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
random-bytes@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b"
integrity sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=
randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
version "2.0.6" version "2.0.6"
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80"
@ -10908,14 +10697,6 @@ read-cache@^1.0.0:
dependencies: dependencies:
pify "^2.3.0" pify "^2.3.0"
read-chunk@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-3.0.0.tgz#086cd198406104355626afacd2d21084afc367ec"
integrity sha512-8lBUVPjj9TC5bKLBacB+rpexM03+LWiYbv6ma3BeWmUYXGxqA1WNNgIZHq/iIsCrbFMzPhFbkOqdsyOFRnuoXg==
dependencies:
pify "^4.0.0"
with-open-file "^0.1.3"
read-pkg-up@^1.0.1: read-pkg-up@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
@ -11052,42 +10833,6 @@ redent@^1.0.0:
indent-string "^2.1.0" indent-string "^2.1.0"
strip-indent "^1.0.1" strip-indent "^1.0.1"
redis-commands@1.4.0, redis-commands@^1.2.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.4.0.tgz#52f9cf99153efcce56a8f86af986bd04e988602f"
integrity sha512-cu8EF+MtkwI4DLIT0x9P8qNTLFhQD4jLfxLR0cCNkeGzs87FN6879JOJwNQR/1zD7aSYNbU0hgsV9zGY71Itvw==
redis-errors@^1.0.0, redis-errors@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad"
integrity sha1-62LSrbFeTq9GEMBK/hUpOEJQq60=
redis-parser@^2.6.0:
version "2.6.0"
resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-2.6.0.tgz#52ed09dacac108f1a631c07e9b69941e7a19504b"
integrity sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=
redis-parser@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4"
integrity sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ=
dependencies:
redis-errors "^1.0.0"
redis@^2.8.0:
version "2.8.0"
resolved "https://registry.yarnpkg.com/redis/-/redis-2.8.0.tgz#202288e3f58c49f6079d97af7a10e1303ae14b02"
integrity sha512-M1OkonEQwtRmZv4tEWF2VgpG0JWJ8Fv1PhlgT5+B+uNq2cA3Rt1Yt/ryoR+vQNOQcIEgdCdfH0jr3bDpihAw1A==
dependencies:
double-ended-queue "^2.1.0-0"
redis-commands "^1.2.0"
redis-parser "^2.6.0"
redis@~0.10.0:
version "0.10.3"
resolved "https://registry.yarnpkg.com/redis/-/redis-0.10.3.tgz#8927fe2110ee39617bcf3fd37b89d8e123911bb6"
integrity sha1-iSf+IRDuOWF7zz/Te4nY4SORG7Y=
reduce-css-calc@^1.2.7: reduce-css-calc@^1.2.7:
version "1.3.0" version "1.3.0"
resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716"
@ -11445,11 +11190,6 @@ retry@0.12.0:
resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=
retry@0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/retry/-/retry-0.6.0.tgz#1c010713279a6fd1e8def28af0c3ff1871caa537"
integrity sha1-HAEHEyeab9Ho3vKK8MP/GHHKpTc=
rework-visit@^1.0.0: rework-visit@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/rework-visit/-/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a" resolved "https://registry.yarnpkg.com/rework-visit/-/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a"
@ -11671,7 +11411,7 @@ select@^1.1.2:
resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d"
integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=
"semver@2 || 3 || 4 || 5", semver@5.6.0, semver@^5.0.1, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: "semver@2 || 3 || 4 || 5", semver@5.6.0, semver@^5.0.1, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.5.1:
version "5.6.0" version "5.6.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
@ -11841,11 +11581,6 @@ simple-git@1.107.0:
dependencies: dependencies:
debug "^4.0.1" debug "^4.0.1"
simple-lru-cache@0.0.x:
version "0.0.2"
resolved "https://registry.yarnpkg.com/simple-lru-cache/-/simple-lru-cache-0.0.2.tgz#d59cc3a193c1a5d0320f84ee732f6e4713e511dd"
integrity sha1-1ZzDoZPBpdAyD4Tucy9uRxPlEd0=
simple-progress-webpack-plugin@1.1.2: simple-progress-webpack-plugin@1.1.2:
version "1.1.2" version "1.1.2"
resolved "https://registry.yarnpkg.com/simple-progress-webpack-plugin/-/simple-progress-webpack-plugin-1.1.2.tgz#eb366f6abd2e1f68cb8512762bbfcf3bce057d4b" resolved "https://registry.yarnpkg.com/simple-progress-webpack-plugin/-/simple-progress-webpack-plugin-1.1.2.tgz#eb366f6abd2e1f68cb8512762bbfcf3bce057d4b"
@ -12122,11 +11857,6 @@ stackframe@^1.0.4:
resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.0.4.tgz#357b24a992f9427cba6b545d96a14ed2cbca187b" resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.0.4.tgz#357b24a992f9427cba6b545d96a14ed2cbca187b"
integrity sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw== integrity sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==
standard-as-callback@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-1.0.1.tgz#2e9e1e9d278d7d77580253faaec42269015e3c1d"
integrity sha512-izxEITSyc7S+5oOiF/URiYaNkemPUxIndCNv66jJ548Y1TVxhBvioNMSPrZIQdaZDlhnguOdUzHA/7hJ3xFhuQ==
static-extend@^0.1.1: static-extend@^0.1.1:
version "0.1.2" version "0.1.2"
resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
@ -12761,13 +12491,6 @@ uglify-to-browserify@~1.0.0:
resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc= integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc=
uid-safe@~2.1.5:
version "2.1.5"
resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.5.tgz#2b3d5c7240e8fc2e58f8aa269e5ee49c0857bd3a"
integrity sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==
dependencies:
random-bytes "~1.0.0"
uid2@0.0.3, uid2@0.0.x: uid2@0.0.3, uid2@0.0.x:
version "0.0.3" version "0.0.3"
resolved "https://registry.yarnpkg.com/uid2/-/uid2-0.0.3.tgz#483126e11774df2f71b8b639dcd799c376162b82" resolved "https://registry.yarnpkg.com/uid2/-/uid2-0.0.3.tgz#483126e11774df2f71b8b639dcd799c376162b82"
@ -12798,11 +12521,6 @@ underscore@1.6.0:
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961"
integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==
underscore@~1.5.1:
version "1.5.2"
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.5.2.tgz#1335c5e4f5e6d33bbb4b006ba8c86a00f556de08"
integrity sha1-EzXF5PXm0zu7SwBrqMhqAPVW3gg=
unicode-canonical-property-names-ecmascript@^1.0.4: unicode-canonical-property-names-ecmascript@^1.0.4:
version "1.0.4" version "1.0.4"
resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
@ -12984,7 +12702,7 @@ utils-merge@1.0.1, utils-merge@1.x.x:
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
uuid@3.3.2, uuid@^3.0.1, uuid@^3.1.0, uuid@^3.2.1, uuid@^3.3.2: uuid@3.3.2, uuid@^3.0.1, uuid@^3.1.0, uuid@^3.3.2:
version "3.3.2" version "3.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==
@ -13570,15 +13288,6 @@ winston@3.2.1:
triple-beam "^1.3.0" triple-beam "^1.3.0"
winston-transport "^4.3.0" winston-transport "^4.3.0"
with-open-file@^0.1.3:
version "0.1.5"
resolved "https://registry.yarnpkg.com/with-open-file/-/with-open-file-0.1.5.tgz#877239a04e56ec92ebb1f698809d03b93e07aabc"
integrity sha512-zY51cJCXG6qBilVuMceKNwU3rzjB/Ygt96BuSQ4+tXo3ewlxvj9ET99lpUHNzWfkYmsyfqKZEB9NJORmGZ1Ltw==
dependencies:
p-finally "^1.0.0"
p-try "^2.0.0"
pify "^3.0.0"
with@^5.0.0: with@^5.0.0:
version "5.1.1" version "5.1.1"
resolved "https://registry.yarnpkg.com/with/-/with-5.1.1.tgz#fa4daa92daf32c4ea94ed453c81f04686b575dfe" resolved "https://registry.yarnpkg.com/with/-/with-5.1.1.tgz#fa4daa92daf32c4ea94ed453c81f04686b575dfe"