update dependencies; remove newrelic to compatible with node v11.x

This commit is contained in:
DIYgod 2018-11-19 02:32:13 +08:00
parent b00b5c81e6
commit 2008e4dbae
No known key found for this signature in database
GPG Key ID: EC0B76A252D3EF67
17 changed files with 292 additions and 335 deletions

View File

@ -48,7 +48,6 @@
"no-useless-rename": 1,
"rest-spread-spacing": 1,
"no-trailing-spaces": 1,
"quotes": [1, "single"],
"no-control-regex": 0,
"prettier/prettier": 0,
"no-await-in-loop": 1

1
.gitignore vendored
View File

@ -11,6 +11,5 @@ config/app.json
config/config.js
yarn-error.log
tmp
newrelic_agent.log
*.swp
*.iml

View File

@ -1,7 +1,6 @@
language: node_js
node_js:
- "lts/*"
node_js: stable
install:
- yarn

View File

@ -5,9 +5,6 @@
"website": "https://docs.rsshub.app/",
"logo": "https://i.imgur.com/NZpRScX.png",
"keywords": ["RSS"],
"engines": {
"node": "10.x"
},
"env": {
"PORT": {
"value": "80",

View File

@ -52,5 +52,4 @@ module.exports = {
pass: process.env.HTTP_BASIC_AUTH_PASS || 'passw0rd',
},
puppeteerWSEndpoint: process.env.PUPPETEER_WS_ENDPOINT,
newrelicLicenseKey: process.env.NEWRELIC_LICENSE_KEY,
};

View File

@ -1,7 +1,4 @@
const config = require('./config');
if (config.newrelicLicenseKey) {
require('newrelic');
}
const Koa = require('koa');
const fs = require('fs');
const logger = require('./utils/logger');

View File

@ -1,24 +0,0 @@
const config = require('./config');
exports.config = {
app_name: ['RSSHub'],
license_key: config.newrelicLicenseKey,
logging: {
level: 'info',
},
allow_all_headers: true,
attributes: {
exclude: [
'request.headers.cookie',
'request.headers.authorization',
'request.headers.proxyAuthorization',
'request.headers.setCookie*',
'request.headers.x*',
'response.headers.cookie',
'response.headers.authorization',
'response.headers.proxyAuthorization',
'response.headers.setCookie*',
'response.headers.x*',
],
},
};

View File

@ -29,18 +29,18 @@
},
"homepage": "https://github.com/DIYgod/RSSHub#readme",
"devDependencies": {
"eslint": "5.8.0",
"eslint-config-prettier": "^3.1.0",
"eslint": "5.9.0",
"eslint-config-prettier": "^3.3.0",
"eslint-plugin-prettier": "^3.0.0",
"lint-staged": "^8.0.2",
"nodemon": "^1.18.4",
"prettier": "^1.14.2",
"lint-staged": "^8.0.5",
"nodemon": "^1.18.6",
"prettier": "^1.15.2",
"prettier-check": "^2.0.0",
"vuepress": "0.14.4",
"vuepress": "0.14.5",
"yorkie": "^2.0.0"
},
"dependencies": {
"art-template": "4.13.1",
"art-template": "4.13.2",
"axios": "0.18.0",
"axios-retry": "3.1.1",
"cheerio": "1.0.0-rc.2",
@ -49,28 +49,27 @@
"dayjs": "^1.7.7",
"form-data": "^2.3.2",
"git-rev-sync": "1.12.0",
"googleapis": "34.0.0",
"googleapis": "35.0.0",
"he": "^1.1.1",
"iconv-lite": "0.4.24",
"imgur": "^0.3.1",
"json-bigint": "0.3.0",
"koa": "2.6.1",
"koa": "2.6.2",
"koa-basic-auth": "^3.0.0",
"koa-favicon": "2.0.1",
"koa-mount": "^4.0.0",
"koa-router": "7.4.0",
"lru-cache": "4.1.3",
"luxon": "^1.4.3",
"luxon": "^1.7.1",
"markdown-it": "^8.4.2",
"newrelic": "^4.9.0",
"path-to-regexp": "2.4.0",
"pidusage": "^2.0.17",
"plist": "^3.0.1",
"puppeteer": "^1.9.0",
"puppeteer": "^1.10.0",
"raven": "^2.6.4",
"readall": "1.1.0",
"redis": "2.8.0",
"rss-parser": "3.5.2",
"rss-parser": "3.5.3",
"sharp": "^0.21.0",
"twit": "2.2.11",
"winston": "3.1.0"

View File

@ -15,28 +15,30 @@ module.exports = async (ctx) => {
.get();
const out = await Promise.all(
list.filter((e) => e.startsWith('/episode')).map(async (itemUrl) => {
itemUrl = url.resolve(host, itemUrl);
const cache = await ctx.cache.get(itemUrl);
if (cache) {
return Promise.resolve(JSON.parse(cache));
}
list
.filter((e) => e.startsWith('/episode'))
.map(async (itemUrl) => {
itemUrl = url.resolve(host, itemUrl);
const cache = await ctx.cache.get(itemUrl);
if (cache) {
return Promise.resolve(JSON.parse(cache));
}
const response = await axios.get(itemUrl);
const $ = cheerio.load(response.data);
const response = await axios.get(itemUrl);
const $ = cheerio.load(response.data);
const single = {
title: $('article header h1')
.text()
.trim(),
link: itemUrl,
author: '99% Invisible',
description: $('article .transcript-content').html(),
pubDate: new Date($('article header .entry-meta time').text()),
};
ctx.cache.set(itemUrl, JSON.stringify(single), 24 * 60 * 60);
return Promise.resolve(single);
})
const single = {
title: $('article header h1')
.text()
.trim(),
link: itemUrl,
author: '99% Invisible',
description: $('article .transcript-content').html(),
pubDate: new Date($('article header .entry-meta time').text()),
};
ctx.cache.set(itemUrl, JSON.stringify(single), 24 * 60 * 60);
return Promise.resolve(single);
})
);
ctx.state.data = {

View File

@ -24,11 +24,13 @@ module.exports = async (ctx) => {
ctx.state.data = {
title: `${user}/${repo} Issues`,
link: host,
item: data.filter((item) => item.pull_request === undefined).map((item) => ({
title: item.title,
description: md.render(item.body) || 'No description',
pubDate: new Date(item.created_at),
link: `${host}/${item.number}`,
})),
item: data
.filter((item) => item.pull_request === undefined)
.map((item) => ({
title: item.title,
description: md.render(item.body) || 'No description',
pubDate: new Date(item.created_at),
link: `${host}/${item.number}`,
})),
};
};

View File

@ -12,20 +12,19 @@ module.exports = async (ctx) => {
const list = $('.list-news li')
.slice(0, 10)
.map(
(i, e) =>
$(e).children().length > 0
? {
link: $(e)
.find('a')
.attr('href'),
date: $(e)
.find('span')
.text()
.replace('[', '')
.replace(']', ''),
}
: null
.map((i, e) =>
$(e).children().length > 0
? {
link: $(e)
.find('a')
.attr('href'),
date: $(e)
.find('span')
.text()
.replace('[', '')
.replace(']', ''),
}
: null
)
.get();

View File

@ -18,34 +18,36 @@ module.exports = async (ctx) => {
.get();
const out = await Promise.all(
list.filter((e) => e.startsWith('../info')).map(async (itemUrl) => {
itemUrl = url.resolve(host, itemUrl.slice('3'));
const cache = await ctx.cache.get(itemUrl);
if (cache) {
return Promise.resolve(JSON.parse(cache));
}
list
.filter((e) => e.startsWith('../info'))
.map(async (itemUrl) => {
itemUrl = url.resolve(host, itemUrl.slice('3'));
const cache = await ctx.cache.get(itemUrl);
if (cache) {
return Promise.resolve(JSON.parse(cache));
}
const response = await axios.get(itemUrl);
const $ = cheerio.load(response.data);
const response = await axios.get(itemUrl);
const $ = cheerio.load(response.data);
const rawDate = $('#show_info')
.text()
.split(/\s{4}/);
let date = rawDate[0].split('')[1];
date = date.slice(0, 4) + '-' + date.slice(5, 7) + '-' + date.slice(8, 10) + ' ' + date.slice(12);
const single = {
title: $('#show_title')
const rawDate = $('#show_info')
.text()
.trim(),
link: itemUrl,
author: '山东大学材料科学与工程学院',
description: $('#show_content').html(),
pubDate: new Date(date),
};
ctx.cache.set(itemUrl, JSON.stringify(single), 24 * 60 * 60);
return Promise.resolve(single);
})
.split(/\s{4}/);
let date = rawDate[0].split('')[1];
date = date.slice(0, 4) + '-' + date.slice(5, 7) + '-' + date.slice(8, 10) + ' ' + date.slice(12);
const single = {
title: $('#show_title')
.text()
.trim(),
link: itemUrl,
author: '山东大学材料科学与工程学院',
description: $('#show_content').html(),
pubDate: new Date(date),
};
ctx.cache.set(itemUrl, JSON.stringify(single), 24 * 60 * 60);
return Promise.resolve(single);
})
);
ctx.state.data = {

View File

@ -18,33 +18,35 @@ module.exports = async (ctx) => {
.get();
const out = await Promise.all(
list.filter((e) => e.startsWith('../info')).map(async (itemUrl) => {
itemUrl = url.resolve(host, itemUrl.slice('3'));
const cache = await ctx.cache.get(itemUrl);
if (cache) {
return Promise.resolve(JSON.parse(cache));
}
list
.filter((e) => e.startsWith('../info'))
.map(async (itemUrl) => {
itemUrl = url.resolve(host, itemUrl.slice('3'));
const cache = await ctx.cache.get(itemUrl);
if (cache) {
return Promise.resolve(JSON.parse(cache));
}
const response = await axios.get(itemUrl);
const $ = cheerio.load(response.data);
const response = await axios.get(itemUrl);
const $ = cheerio.load(response.data);
const rawDate = $('#show_info')
.text()
.split(/\s{4}/);
const date = rawDate[0].split('')[1];
const single = {
title: $('#show_title')
const rawDate = $('#show_info')
.text()
.trim(),
link: itemUrl,
author: '山东大学能源与动力工程学院',
description: $('#show_content').html(),
pubDate: new Date(date),
};
ctx.cache.set(itemUrl, JSON.stringify(single), 24 * 60 * 60);
return Promise.resolve(single);
})
.split(/\s{4}/);
const date = rawDate[0].split('')[1];
const single = {
title: $('#show_title')
.text()
.trim(),
link: itemUrl,
author: '山东大学能源与动力工程学院',
description: $('#show_content').html(),
pubDate: new Date(date),
};
ctx.cache.set(itemUrl, JSON.stringify(single), 24 * 60 * 60);
return Promise.resolve(single);
})
);
ctx.state.data = {

View File

@ -15,30 +15,32 @@ module.exports = async (ctx) => {
.get();
const out = await Promise.all(
list.filter((itemUrl) => itemUrl.startsWith('http')).map(async (itemUrl) => {
const cache = await ctx.cache.get(itemUrl);
if (cache) {
return Promise.resolve(JSON.parse(cache));
}
list
.filter((itemUrl) => itemUrl.startsWith('http'))
.map(async (itemUrl) => {
const cache = await ctx.cache.get(itemUrl);
if (cache) {
return Promise.resolve(JSON.parse(cache));
}
const response = await axios.get(itemUrl);
const $ = cheerio.load(response.data);
const response = await axios.get(itemUrl);
const $ = cheerio.load(response.data);
const titleGroup = $('#newsTitle')
.children()
.text()
.split('\n');
const titleGroup = $('#newsTitle')
.children()
.text()
.split('\n');
const single = {
title: titleGroup[0],
link: itemUrl,
author: '山东大学研究生院',
description: $('.newscontent_1').html(),
pubDate: new Date(titleGroup[2].slice(8)),
};
ctx.cache.set(itemUrl, JSON.stringify(single), 24 * 60 * 60);
return Promise.resolve(single);
})
const single = {
title: titleGroup[0],
link: itemUrl,
author: '山东大学研究生院',
description: $('.newscontent_1').html(),
pubDate: new Date(titleGroup[2].slice(8)),
};
ctx.cache.set(itemUrl, JSON.stringify(single), 24 * 60 * 60);
return Promise.resolve(single);
})
);
ctx.state.data = {

View File

@ -18,37 +18,39 @@ module.exports = async (ctx) => {
.get();
const out = await Promise.all(
list.filter((e) => e.startsWith('../info') || e.startsWith('http://www.rd.sdu.edu.cn/')).map(async (itemUrl) => {
const isFromMech = itemUrl.startsWith('../info');
if (isFromMech) {
itemUrl = url.resolve(host, itemUrl.slice('3'));
}
const cache = await ctx.cache.get(itemUrl);
if (cache) {
return Promise.resolve(JSON.parse(cache));
}
list
.filter((e) => e.startsWith('../info') || e.startsWith('http://www.rd.sdu.edu.cn/'))
.map(async (itemUrl) => {
const isFromMech = itemUrl.startsWith('../info');
if (isFromMech) {
itemUrl = url.resolve(host, itemUrl.slice('3'));
}
const cache = await ctx.cache.get(itemUrl);
if (cache) {
return Promise.resolve(JSON.parse(cache));
}
const response = await axios.get(itemUrl);
const $ = cheerio.load(response.data);
const response = await axios.get(itemUrl);
const $ = cheerio.load(response.data);
const rawDate = $('#show_info')
.text()
.split(/\s{4}/);
let date = rawDate[0].split('')[1];
date = date.slice(0, 4) + '-' + date.slice(5, 7) + '-' + date.slice(8, 10) + ' ' + date.slice(11);
const single = {
title: $('#show_title')
const rawDate = $('#show_info')
.text()
.trim(),
link: itemUrl,
author: '山东大学机械工程学院',
description: $('#show_content').html(),
pubDate: new Date(date),
};
ctx.cache.set(itemUrl, JSON.stringify(single), 24 * 60 * 60);
return Promise.resolve(single);
})
.split(/\s{4}/);
let date = rawDate[0].split('')[1];
date = date.slice(0, 4) + '-' + date.slice(5, 7) + '-' + date.slice(8, 10) + ' ' + date.slice(11);
const single = {
title: $('#show_title')
.text()
.trim(),
link: itemUrl,
author: '山东大学机械工程学院',
description: $('#show_content').html(),
pubDate: new Date(date),
};
ctx.cache.set(itemUrl, JSON.stringify(single), 24 * 60 * 60);
return Promise.resolve(single);
})
);
ctx.state.data = {

View File

@ -27,15 +27,17 @@ module.exports = async (ctx) => {
title: `${name}的微博`,
link: `http://weibo.com/${uid}/`,
description: `${name}的微博`,
item: response.data.data.cards.filter((item) => item.mblog && !item.mblog.isTop).map((item) => {
const description = weiboUtils.format(item.mblog);
const title = description.replace(/<img.*?>/g, '[图片]').replace(/<.*?>/g, '');
return {
title,
description: description,
pubDate: date(item.mblog.created_at, 8),
link: `https://weibo.com/${uid}/${item.mblog.bid}`,
};
}),
item: response.data.data.cards
.filter((item) => item.mblog && !item.mblog.isTop)
.map((item) => {
const description = weiboUtils.format(item.mblog);
const title = description.replace(/<img.*?>/g, '[图片]').replace(/<.*?>/g, '');
return {
title,
description: description,
pubDate: date(item.mblog.created_at, 8),
link: `https://weibo.com/${uid}/${item.mblog.bid}`,
};
}),
};
};

257
yarn.lock
View File

@ -739,6 +739,20 @@
lodash "^4.17.5"
to-fast-properties "^2.0.0"
"@iamstarkov/listr-update-renderer@0.4.1":
version "0.4.1"
resolved "https://registry.yarnpkg.com/@iamstarkov/listr-update-renderer/-/listr-update-renderer-0.4.1.tgz#d7c48092a2dcf90fd672b6c8b458649cb350c77e"
integrity sha512-IJyxQWsYDEkf8C8QthBn5N8tIUR9V9je6j3sMIpAkonaadjbvxmRC6RAhpa3RKxndhNnU2M6iNbtJwd7usQYIA==
dependencies:
chalk "^1.1.3"
cli-truncate "^0.2.1"
elegant-spinner "^1.0.1"
figures "^1.7.0"
indent-string "^3.0.0"
log-symbols "^1.0.2"
log-update "^2.3.0"
strip-ansi "^3.0.1"
"@mrmlnc/readdir-enhanced@^2.2.1":
version "2.2.1"
resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"
@ -747,28 +761,6 @@
call-me-maybe "^1.0.1"
glob-to-regexp "^0.3.0"
"@newrelic/koa@^1.0.0":
version "1.0.6"
resolved "https://registry.yarnpkg.com/@newrelic/koa/-/koa-1.0.6.tgz#3f34a59472a29e0997bf62f78e01a938bcc099e7"
integrity sha512-V7TR4fMeSjmM6XyT2YDebQ/wQzmVDq+g7Mn3fQItvGWOR+y3kzPoQS7w0hCU6+imPsr3N+GC6Xcj+4EWTHxT3w==
dependencies:
methods "^1.1.2"
"@newrelic/native-metrics@^3.0.0":
version "3.1.2"
resolved "https://registry.yarnpkg.com/@newrelic/native-metrics/-/native-metrics-3.1.2.tgz#eff858f178af5b9f8cbb676eb549d8bbc0ef7a6a"
integrity sha512-JjUmPrp2LEEkhVtelICme5p7sHHpfpu2Wjk5/L1D3Zvt01v4mCsrL2XaIMBmHgg3T2ZbqMiqWZCn2LtGZ6nklA==
dependencies:
nan "^2.10.0"
semver "^5.5.1"
"@newrelic/superagent@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@newrelic/superagent/-/superagent-1.0.0.tgz#d51265a9a677312d91f83ff1f99f5a5d51abf557"
integrity sha512-TK5JytA7qk2ZejklCBKCZ8iRe9/8oPtW5xRK5d9pNnXeFZlXXlQ+Pf48q7sdI7vSL9k3EGU1xWI+kQVkIGgI8A==
dependencies:
methods "^1.1.2"
"@nodelib/fs.stat@^1.0.1":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.2.tgz#54c5a964462be3d4d78af631363c18d6fa91ac26"
@ -804,11 +796,6 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.1.tgz#da61b64a2930a80fa708e57c45cd5441eb379d5b"
integrity sha512-i1sl+WCX2OCHeUi9oi7PiCNUtYFrpWhpcx878vpeq/tlZTKzcFdHePlyFHVbWqeuKN0SRPl/9ZFDSTsfv9h7VQ==
"@tyriar/fibonacci-heap@^2.0.7":
version "2.0.8"
resolved "https://registry.yarnpkg.com/@tyriar/fibonacci-heap/-/fibonacci-heap-2.0.8.tgz#819fdff85fb559790539ff8a347c246777b4011c"
integrity sha512-yujW2S09dkH3uBUiTR5GtMni7LgQS2bSm1ezjugyUzuzM7JUkNvNRMwUL7/bee8gv812zhw1Yw/aIzL47UbTVQ==
"@vue/babel-preset-app@3.0.0-beta.11":
version "3.0.0-beta.11"
resolved "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-3.0.0-beta.11.tgz#c8b889aa73464050f9cd3f9dc621951d85c24508"
@ -1138,11 +1125,6 @@ ansi-colors@^3.0.0:
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.1.tgz#9638047e4213f3428a11944a7d4b31cba0a3ff95"
integrity sha512-Xt+zb6nqgvV9SWAVp0EG3lRsHcbq5DDgqjPPz6pwgtj6RKz65zGXMNa82oJfOSBA/to6GmRP7Dr+6o+kbApTzQ==
ansi-escapes@^1.0.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
integrity sha1-06ioOzGapneTZisT52HHkRQiMG4=
ansi-escapes@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30"
@ -1272,10 +1254,10 @@ arrify@^1.0.0, arrify@^1.0.1:
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
art-template@4.13.1:
version "4.13.1"
resolved "https://registry.yarnpkg.com/art-template/-/art-template-4.13.1.tgz#b96249ea0bc2297a3dc88a69ed85f896a75ea86b"
integrity sha512-EfUHvgtsgboF5MJuCrT8pWJezDefdh8o5LMq/IWsZaZebGJ9KG6pNgZgIX0gtbclVURWGG1PEtZ8iRRXzTvXTg==
art-template@4.13.2:
version "4.13.2"
resolved "https://registry.yarnpkg.com/art-template/-/art-template-4.13.2.tgz#4c4cbd44de08aad031660240871f45c7d737cfc1"
integrity sha512-04ws5k+ndA5DghfheY4c8F1304XJKeTcaXqZCLpxFkNMSkaR3ChW1pX2i9d3sEEOZuLy7de8lFriRaik1jEeOQ==
dependencies:
acorn "^5.0.3"
escodegen "^1.8.1"
@ -1334,7 +1316,7 @@ async@^1.5.2:
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=
async@^2.1.4, async@^2.6.0:
async@^2.6.0:
version "2.6.1"
resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610"
integrity sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==
@ -3124,10 +3106,10 @@ escodegen@^1.8.1:
optionalDependencies:
source-map "~0.6.1"
eslint-config-prettier@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-3.1.0.tgz#2c26d2cdcfa3a05f0642cd7e6e4ef3316cdabfa2"
integrity sha512-QYGfmzuc4q4J6XIhlp8vRKdI/fI0tQfQPy1dME3UOLprE+v4ssH/3W9LM2Q7h5qBcy5m0ehCrBDU2YF8q6OY8w==
eslint-config-prettier@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-3.3.0.tgz#41afc8d3b852e757f06274ed6c44ca16f939a57d"
integrity sha512-Bc3bh5bAcKNvs3HOpSi6EfGA2IIp7EzWcg2tS4vP7stnXu/J1opihHDM7jI9JCIckyIDTgZLSWn7J3HY0j2JfA==
dependencies:
get-stdin "^6.0.0"
@ -3156,10 +3138,10 @@ eslint-visitor-keys@^1.0.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==
eslint@5.8.0:
version "5.8.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.8.0.tgz#91fbf24f6e0471e8fdf681a4d9dd1b2c9f28309b"
integrity sha512-Zok6Bru3y2JprqTNm14mgQ15YQu/SMDkWdnmHfFg770DIUlmMFd/gqqzCHekxzjHZJxXv3tmTpH0C1icaYJsRQ==
eslint@5.9.0:
version "5.9.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.9.0.tgz#b234b6d15ef84b5849c6de2af43195a2d59d408e"
integrity sha512-g4KWpPdqN0nth+goDNICNXGfJF7nNnepthp46CAlJoJtC5K/cLu3NgCM3AHu1CkJ5Hzt9V0Y0PBAO6Ay/gGb+w==
dependencies:
"@babel/code-frame" "^7.0.0"
ajv "^6.5.3"
@ -3964,25 +3946,25 @@ google-p12-pem@^1.0.0:
node-forge "^0.7.4"
pify "^3.0.0"
googleapis-common@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/googleapis-common/-/googleapis-common-0.3.0.tgz#97ba111f7420367e636a30a2b87be4a7f220c7e9"
integrity sha512-OqQ2iskzjPHLoM+AXk7e/TmEsdgxyAk8PVbMg0S8v2wPhgMu2wTawEL7zH9QG236u/RqQ1Ak120oSWsamPnWGg==
googleapis-common@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/googleapis-common/-/googleapis-common-0.4.0.tgz#3b3c2c26f731dcf72101239e70dfa3d677e079e6"
integrity sha512-G8U5eUhmCzvZa80BtfcL2ECPiIJxmJYsPPIY3/9iODrIvDkY75wtxnEobG7HDUprtn/3Es6mP6KevqNZ5u6t4g==
dependencies:
axios "^0.18.0"
google-auth-library "^2.0.0"
pify "^3.0.0"
pify "^4.0.0"
qs "^6.5.2"
url-template "^2.0.8"
uuid "^3.2.1"
googleapis@34.0.0:
version "34.0.0"
resolved "https://registry.yarnpkg.com/googleapis/-/googleapis-34.0.0.tgz#15323c2334edeff3bae500faeec7e15ea6fb0047"
integrity sha512-nGfTSrlQF77HDNOHDy0ii3ET1h8Yap6QXxkfMZsre+7hBg91g4RsgrA50BgrOXpbNlQCBOGXWhUsa267kVeA/Q==
googleapis@35.0.0:
version "35.0.0"
resolved "https://registry.yarnpkg.com/googleapis/-/googleapis-35.0.0.tgz#958503baa2d32b2702aed7308f8b6abd15a9b5c1"
integrity sha512-HseVyK5CVwFM+x+uHqkbKxDRuaMVkYyfAM7Buz3X44/BglHWtzOrtffRVoQORLQHVf4kzhJcjmUvVTwfOG6klA==
dependencies:
google-auth-library "^2.0.0"
googleapis-common "^0.3.0"
googleapis-common "^0.4.0"
got@^6.7.1:
version "6.7.1"
@ -4897,7 +4879,7 @@ json-stable-stringify-without-jsonify@^1.0.1:
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
json-stringify-safe@^5.0.0, json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
@ -5083,7 +5065,37 @@ koa-webpack@^4.0.0:
webpack-hot-client "^3.0.0"
webpack-log "^1.1.1"
koa@2.6.1, koa@^2.4.1:
koa@2.6.2:
version "2.6.2"
resolved "https://registry.yarnpkg.com/koa/-/koa-2.6.2.tgz#57ba4d049b0a99cae0d594e6144e2931949a7ce1"
integrity sha512-KdnBFhTgh9ysMMoYe4J4fLvaKjT7mF3nRYV8MjxLzx6qywFNeptqi4xevyUltg1fZl2CFJ+HeLXuCGx07Yvl/A==
dependencies:
accepts "^1.3.5"
cache-content-type "^1.0.0"
content-disposition "~0.5.2"
content-type "^1.0.4"
cookies "~0.7.1"
debug "~3.1.0"
delegates "^1.0.0"
depd "^1.1.2"
destroy "^1.0.4"
error-inject "^1.0.0"
escape-html "^1.0.3"
fresh "~0.5.2"
http-assert "^1.3.0"
http-errors "^1.6.3"
is-generator-function "^1.0.7"
koa-compose "^4.1.0"
koa-convert "^1.2.0"
koa-is-json "^1.0.0"
on-finished "^2.3.0"
only "~0.0.2"
parseurl "^1.3.2"
statuses "^1.5.0"
type-is "^1.6.16"
vary "^1.1.2"
koa@^2.4.1:
version "2.6.1"
resolved "https://registry.yarnpkg.com/koa/-/koa-2.6.1.tgz#88cabb18cd297e0577a37e40f400c4b6f1699fef"
integrity sha512-n9R5Eex4y0drUeqFTeCIeXyz8wjr2AxBo2Cq8LvmiXbJl4yDA5KIrecMPkhnmgACZnPXMRyCLbJoyLmpM9aFAw==
@ -5155,11 +5167,12 @@ linkify-it@^2.0.0:
dependencies:
uc.micro "^1.0.1"
lint-staged@^8.0.2:
version "8.0.3"
resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.0.3.tgz#977a43d66914e2242d3c3c0b41bc10737622c61a"
integrity sha512-G1Ija5l6mF/BRkHSs3oK1Adz/e17HP3iT9hFAf8IC+UJWDLe4Xc5FxYXgEWN1NOA6vbnekEhWC4FjqzJ2Ba2lA==
lint-staged@^8.0.5:
version "8.0.5"
resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.0.5.tgz#8eeca1a213eaded09c4e217da455b6f432046034"
integrity sha512-QI2D6lw2teArlr2fmrrCIqHxef7mK2lKjz9e+aZSzFlk5rsy10rg97p3wA9H/vIFR3Fvn34fAgUktD/k896S2A==
dependencies:
"@iamstarkov/listr-update-renderer" "0.4.1"
chalk "^2.3.1"
commander "^2.14.1"
cosmiconfig "^5.0.2"
@ -5173,7 +5186,6 @@ lint-staged@^8.0.2:
is-windows "^1.0.2"
jest-validate "^23.5.0"
listr "^0.14.2"
listr-update-renderer "https://github.com/okonet/listr-update-renderer/tarball/upgrade-log-update"
lodash "^4.17.5"
log-symbols "^2.2.0"
micromatch "^3.1.8"
@ -5182,7 +5194,7 @@ lint-staged@^8.0.2:
path-is-inside "^1.0.2"
pify "^3.0.0"
please-upgrade-node "^3.0.2"
staged-git-files "1.1.1"
staged-git-files "1.1.2"
string-argv "^0.0.2"
stringify-object "^3.2.2"
@ -5192,22 +5204,9 @@ listr-silent-renderer@^1.1.1:
integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=
listr-update-renderer@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz#344d980da2ca2e8b145ba305908f32ae3f4cc8a7"
integrity sha1-NE2YDaLKLosUW6MFkI8yrj9MyKc=
dependencies:
chalk "^1.1.3"
cli-truncate "^0.2.1"
elegant-spinner "^1.0.1"
figures "^1.7.0"
indent-string "^3.0.0"
log-symbols "^1.0.2"
log-update "^1.0.2"
strip-ansi "^3.0.1"
"listr-update-renderer@https://github.com/okonet/listr-update-renderer/tarball/upgrade-log-update":
version "0.4.0"
resolved "https://github.com/okonet/listr-update-renderer/tarball/upgrade-log-update#06073fa93166277607a7814f4e1f83960081414c"
integrity sha1-NE2YDaLKLosUW6MFkI8yrj9MyKc=
dependencies:
chalk "^1.1.3"
cli-truncate "^0.2.1"
@ -5364,14 +5363,6 @@ log-symbols@^2.1.0, log-symbols@^2.2.0:
dependencies:
chalk "^2.0.1"
log-update@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1"
integrity sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=
dependencies:
ansi-escapes "^1.0.0"
cli-cursor "^1.0.2"
log-update@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708"
@ -5433,10 +5424,10 @@ lru-cache@4.1.3, lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.2, lru-cache
pseudomap "^1.0.2"
yallist "^2.1.2"
luxon@^1.4.3:
version "1.4.5"
resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.4.5.tgz#88f6d4901f61bcff26cfbb66b54f464c9f759b82"
integrity sha512-l2zRBzQt47/OLD//V5odz5JFIvReS+7dmt0KtP6R+jMymki1XuU+hA8loyUvwLj6714HD79cokPtOF2TO8nl5w==
luxon@^1.7.1:
version "1.7.1"
resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.7.1.tgz#721e86f12c47526014a53c9f92f74f2da6dc9a4c"
integrity sha512-0fTd5a3UUVATblRdhD9ZXdhCdXp+ktqGERRu8q9seeMFfED0otQFeqrZwDw/2AoMH/cHjmswVJC8IUPeNBIPTA==
make-dir@^1.0.0:
version "1.3.0"
@ -5590,7 +5581,7 @@ merge2@^1.2.1:
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5"
integrity sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==
methods@^1.0.1, methods@^1.1.2:
methods@^1.0.1:
version "1.1.2"
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
@ -5680,13 +5671,13 @@ min-document@^2.19.0:
dependencies:
dom-walk "^0.1.0"
mini-css-extract-plugin@^0.4.1:
version "0.4.4"
resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.4.tgz#c10410a004951bd3cedac1da69053940fccb625d"
integrity sha512-o+Jm+ocb0asEngdM6FsZWtZsRzA8koFUudIDwYUfl94M3PejPHG7Vopw5hN9V8WsMkSFpm3tZP3Fesz89EyrfQ==
mini-css-extract-plugin@0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.1.tgz#d2bcf77bb2596b8e4bd9257e43d3f9164c2e86cb"
integrity sha512-XWuB3G61Rtasq/gLe7cp5cuozehE6hN+E4sxCamRR/WDiHTg+f7ZIAS024r8UJQffY+e2gGELXQZgQoFDfNDCg==
dependencies:
"@webpack-contrib/schema-utils" "^1.0.0-beta.0"
loader-utils "^1.1.0"
schema-utils "^1.0.0"
webpack-sources "^1.1.0"
minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
@ -5811,7 +5802,7 @@ mz@^2.6.0, mz@^2.7.0:
object-assign "^4.0.1"
thenify-all "^1.0.0"
nan@^2.10.0, nan@^2.11.1, nan@^2.9.2:
nan@^2.11.1, nan@^2.9.2:
version "2.11.1"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.1.tgz#90e22bccb8ca57ea4cd37cc83d3819b52eea6766"
integrity sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==
@ -5891,23 +5882,6 @@ neo-async@^2.5.0:
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835"
integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==
newrelic@^4.9.0:
version "4.9.0"
resolved "https://registry.yarnpkg.com/newrelic/-/newrelic-4.9.0.tgz#8d7e0426115e0b2cd078de2dafb95952e17879c3"
integrity sha512-02lsCULkqPpZmWdj7XIxoXICgGp/f/KMsPYwrmRT2c/iTvZJvtTCcAYYYyqF708WUe+qVohjI3n7dmUGM+VrHw==
dependencies:
"@newrelic/koa" "^1.0.0"
"@newrelic/superagent" "^1.0.0"
"@tyriar/fibonacci-heap" "^2.0.7"
async "^2.1.4"
concat-stream "^1.5.0"
https-proxy-agent "^2.2.1"
json-stringify-safe "^5.0.0"
readable-stream "^2.1.4"
semver "^5.3.0"
optionalDependencies:
"@newrelic/native-metrics" "^3.0.0"
next-tick@1:
version "1.0.0"
resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
@ -5982,10 +5956,10 @@ node-pre-gyp@^0.10.0:
semver "^5.3.0"
tar "^4"
nodemon@^1.18.4:
version "1.18.5"
resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.18.5.tgz#3d3924df23d06806952e8b6d3de052f2a3351807"
integrity sha512-8806dC8dfBlbxQmqNOSEeay/qlbddKvFzxIGNxnPtxUlTtH77xsrC66RnA3M47HCSgMgE5bj+U586o50RowXBg==
nodemon@^1.18.6:
version "1.18.6"
resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.18.6.tgz#89b1136634d6c0afc7de24cc932a760e999e2c76"
integrity sha512-4pHQNYEZun+IkIC2jCaXEhkZnfA7rQe73i8RkdRyDJls/K+WxR7IpI5uNUsAvQ0zWvYcCDNGD+XVtw2ZG86/uQ==
dependencies:
chokidar "^2.0.4"
debug "^3.1.0"
@ -6478,6 +6452,11 @@ pify@^3.0.0:
resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
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:
version "2.0.1"
resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
@ -6894,10 +6873,10 @@ prettier@1.13.7:
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.13.7.tgz#850f3b8af784a49a6ea2d2eaa7ed1428a34b7281"
integrity sha512-KIU72UmYPGk4MujZGYMFwinB7lOf2LsDNGSOC8ufevsrPLISrZbNJlWstRi3m0AMuszbH+EFSQ/r6w56RSPK6w==
prettier@^1.14.2:
version "1.14.3"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.14.3.tgz#90238dd4c0684b7edce5f83b0fb7328e48bd0895"
integrity sha512-qZDVnCrnpsRJJq5nSsiHCE3BYMED2OtsI+cmzIzF1QIfqm5ALf8tEJcO27zV1gKNKRPdhjO0dNWnrzssDQ1tFg==
prettier@^1.15.2:
version "1.15.2"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.15.2.tgz#d31abe22afa4351efa14c7f8b94b58bb7452205e"
integrity sha512-YgPLFFA0CdKL4Eg2IHtUSjzj/BWgszDHiNQAe0VAIBse34148whfdzLagRL+QiKS+YfK5ftB6X4v/MBw8yCoug==
pretty-bytes@^4.0.2:
version "4.0.2"
@ -7056,10 +7035,10 @@ punycode@^1.2.4, punycode@^1.4.1:
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
puppeteer@^1.9.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-1.9.0.tgz#56dba79e7ea4faac807877bee3b23d63291fc59e"
integrity sha512-GH4PmhJf9wBRAPvtJkEJLAvdNNOofZortmBZSj8cGWYni98GUFqsf66blOEfJbo5B8l0KG5HR2d/W2MejnUrzg==
puppeteer@^1.10.0:
version "1.10.0"
resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-1.10.0.tgz#e3005f1251c2feae0e10c0f7a35afbcd56589ceb"
integrity sha512-3i28X/ucX8t3eL4TZA60FLMOQNKqudFSOGDHr0cT7T4dE027CrcS885aAqjdxNybhMPliM5yImNsKJ6SQrPzhw==
dependencies:
debug "^3.1.0"
extract-zip "^1.6.6"
@ -7170,7 +7149,7 @@ read-pkg@^3.0.0:
normalize-package-data "^2.3.2"
path-type "^3.0.0"
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6:
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6:
version "2.3.6"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
@ -7537,10 +7516,10 @@ ripemd160@^2.0.0, ripemd160@^2.0.1:
hash-base "^3.0.0"
inherits "^2.0.1"
rss-parser@3.5.2:
version "3.5.2"
resolved "https://registry.yarnpkg.com/rss-parser/-/rss-parser-3.5.2.tgz#fca07638d3fda43cefdb31f6f7aae5c5856a3175"
integrity sha512-tpD+psqq1v6yqH0aLZtmnK0yp5PmewYrHlAonrUIEepEJSqUq553raC3sY6Tw/3DxsnZg8fsa/nSU5VwBZYsyg==
rss-parser@3.5.3:
version "3.5.3"
resolved "https://registry.yarnpkg.com/rss-parser/-/rss-parser-3.5.3.tgz#4b125c44371eafbd1150479188c0f33bf02e6e92"
integrity sha512-oByqqKTuB6tCg/4UTPXUpJmG4Wr+H72qsBcSnBZM9nH1NhjV8lXzx8uKibN9Sq+mZwwZQyOitjoQvZ/ePsttKA==
dependencies:
entities "^1.1.1"
xml2js "^0.4.19"
@ -7936,10 +7915,10 @@ stack-trace@0.0.10, stack-trace@0.0.x:
resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=
staged-git-files@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.1.tgz#37c2218ef0d6d26178b1310719309a16a59f8f7b"
integrity sha512-H89UNKr1rQJvI1c/PIR3kiAMBV23yvR7LItZiV74HWZwzt7f3YHuujJ9nJZlt58WlFox7XQsOahexwk7nTe69A==
staged-git-files@1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.2.tgz#4326d33886dc9ecfa29a6193bf511ba90a46454b"
integrity sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA==
static-extend@^0.1.1:
version "0.1.2"
@ -8799,10 +8778,10 @@ vuepress-html-webpack-plugin@^3.2.0:
toposort "^1.0.0"
util.promisify "1.0.0"
vuepress@0.14.4:
version "0.14.4"
resolved "https://registry.yarnpkg.com/vuepress/-/vuepress-0.14.4.tgz#fea77daa840b11429564bdddde3653bbbec4affb"
integrity sha512-AUZ+6wL1uXapX+I7h4EeXQ2Gcxaars7Ys5K8EUVuCgyDB0v36eoQWnoAVpNpMXL7kPCkVSq8DUtJQtOtHluSXQ==
vuepress@0.14.5:
version "0.14.5"
resolved "https://registry.yarnpkg.com/vuepress/-/vuepress-0.14.5.tgz#06e78a3af1a24d612d7a17bbba811e962d0acda1"
integrity sha512-3HwrEiOvgQ5sezjqU7Dh91xTBwlWFs4DJSqxWF4zf6HeVojmVtPlf7iLT1O4oQtFtSxJ8l0OyYZmgGPSeAMeFA==
dependencies:
"@babel/core" "7.0.0-beta.47"
"@vue/babel-preset-app" "3.0.0-beta.11"
@ -8836,7 +8815,7 @@ vuepress@0.14.4:
markdown-it-container "^2.0.0"
markdown-it-emoji "^1.4.0"
markdown-it-table-of-contents "^0.4.0"
mini-css-extract-plugin "^0.4.1"
mini-css-extract-plugin "0.4.1"
nprogress "^0.2.0"
optimize-css-assets-webpack-plugin "^4.0.0"
portfinder "^1.0.13"