diff --git a/.eslintrc b/.eslintrc
index 329beaf50d..be9258aa69 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -1,7 +1,7 @@
{
"extends": "eslint:recommended",
"parserOptions": {
- "ecmaVersion": 6,
+ "ecmaVersion": 2017,
"sourceType": "module"
},
"env": {
diff --git a/config.js b/config.js
new file mode 100644
index 0000000000..5a65cc3771
--- /dev/null
+++ b/config.js
@@ -0,0 +1,5 @@
+module.exports = {
+ port: 1200,
+ cacheExpire: 5 * 60,
+ ua: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',
+};
\ No newline at end of file
diff --git a/index.js b/index.js
index d288321a8b..cbf3cf8c8d 100644
--- a/index.js
+++ b/index.js
@@ -1,45 +1,37 @@
-const express = require('express');
+const Koa = require('koa');
+const cache = require('koa-redis-cache');
+
const logger = require('./utils/logger');
+const config = require('./config');
+
+const onerror = require('./middleware/onerror');
+const header = require('./middleware/header.js');
+
+const router = require('./router');
+
+process.on('uncaughtException', (e) => {
+ logger.error('uncaughtException: ' + e);
+});
logger.info('🍻 RSSHub start! Cheers!');
-const app = express();
+const app = new Koa();
-app.all('*', require('./routes/all'));
+// global error handing
+app.use(onerror);
-// bilibili
-app.get('/bilibili/user/video/:uid', require('./routes/bilibili/video'));
-app.get('/bilibili/user/fav/:uid', require('./routes/bilibili/fav'));
-app.get('/bilibili/user/coin/:uid', require('./routes/bilibili/coin'));
-app.get('/bilibili/user/dynamic/:uid', require('./routes/bilibili/dynamic'));
-app.get('/bilibili/partion/:tid', require('./routes/bilibili/partion'));
-app.get('/bilibili/bangumi/:seasonid', require('./routes/bilibili/bangumi'));
+// set header
+app.use(header);
-// 微博
-app.get('/weibo/user/:uid', require('./routes/weibo/user'));
+// cache
+app.use(cache({
+ expire: config.cacheExpire,
+ onerror: (e) => {
+ logger.error('cache error', e);
+ }
+}));
-// 网易云音乐
-app.get('/ncm/playlist/:id', require('./routes/ncm/playlist'));
-app.get('/ncm/user/playlist/:uid', require('./routes/ncm/userplaylist'));
-app.get('/ncm/artist/:id', require('./routes/ncm/artist'));
+// router
+app.use(router.routes()).use(router.allowedMethods());
-// 掘金
-app.get('/juejin/category/:category', require('./routes/juejin/category'));
-
-// 自如
-app.get('/ziroom/room/:city/:iswhole/:room/:keyword', require('./routes/ziroom/room'));
-
-// 快递
-app.get('/express/:company/:number', require('./routes/express/express'));
-
-// 简书
-app.get('/jianshu/home', require('./routes/jianshu/home'));
-app.get('/jianshu/trending/weekly', require('./routes/jianshu/weekly'));
-app.get('/jianshu/trending/monthly', require('./routes/jianshu/monthly'));
-app.get('/jianshu/collection/:id', require('./routes/jianshu/collection'));
-app.get('/jianshu/user/:id', require('./routes/jianshu/user'));
-
-// 知乎
-app.get('/zhihu/collection/:id', require('./routes/zhihu/collection'));
-
-app.listen(1200);
\ No newline at end of file
+app.listen(config.port);
\ No newline at end of file
diff --git a/middleware/header.js b/middleware/header.js
new file mode 100644
index 0000000000..689a13ae51
--- /dev/null
+++ b/middleware/header.js
@@ -0,0 +1,14 @@
+const logger = require('../utils/logger');
+
+module.exports = async (ctx, next) => {
+ logger.info(`${ctx.url}, user IP: ${ctx.ip}`);
+
+ const headers = {
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Headers': 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild',
+ 'Access-Control-Allow-Methods': 'PUT, POST, GET, DELETE, OPTIONS',
+ 'Content-Type': 'application/xml; charset=utf-8',
+ };
+ ctx.set(headers);
+ await next();
+};
\ No newline at end of file
diff --git a/middleware/onerror.js b/middleware/onerror.js
new file mode 100644
index 0000000000..d59284c8ac
--- /dev/null
+++ b/middleware/onerror.js
@@ -0,0 +1,11 @@
+const logger = require('../utils/logger');
+
+module.exports = async (ctx, next) => {
+ try {
+ await next();
+ } catch (err) {
+ logger.error('Promise error: ' + err);
+ ctx.body = 'RSSHub 发生了一些意外: ' + err;
+ ctx.status = 500;
+ }
+};
\ No newline at end of file
diff --git a/package.json b/package.json
index 844321fba7..5094b9f632 100644
--- a/package.json
+++ b/package.json
@@ -19,11 +19,12 @@
"devDependencies": {},
"dependencies": {
"art-template": "4.12.2",
+ "axios": "0.18.0",
"cheerio": "1.0.0-rc.2",
"eslint": "4.19.1",
- "express": "^4.16.3",
- "redis": "2.8.0",
- "request": "^2.85.0",
+ "koa": "2.5.0",
+ "koa-redis-cache": "3.0.0",
+ "koa-router": "7.4.0",
"winston": "3.0.0-rc3"
}
}
diff --git a/router.js b/router.js
new file mode 100644
index 0000000000..5df40fb0b9
--- /dev/null
+++ b/router.js
@@ -0,0 +1,39 @@
+const Router = require('koa-router');
+const router = new Router();
+
+// // bilibili
+router.get('/bilibili/user/video/:uid', require('./routes/bilibili/video'));
+router.get('/bilibili/user/fav/:uid', require('./routes/bilibili/fav'));
+router.get('/bilibili/user/coin/:uid', require('./routes/bilibili/coin'));
+router.get('/bilibili/user/dynamic/:uid', require('./routes/bilibili/dynamic'));
+router.get('/bilibili/partion/:tid', require('./routes/bilibili/partion'));
+router.get('/bilibili/bangumi/:seasonid', require('./routes/bilibili/bangumi'));
+
+// // 微博
+router.get('/weibo/user/:uid', require('./routes/weibo/user'));
+
+// // 网易云音乐
+router.get('/ncm/playlist/:id', require('./routes/ncm/playlist'));
+router.get('/ncm/user/playlist/:uid', require('./routes/ncm/userplaylist'));
+router.get('/ncm/artist/:id', require('./routes/ncm/artist'));
+
+// // 掘金
+router.get('/juejin/category/:category', require('./routes/juejin/category'));
+
+// // 自如
+router.get('/ziroom/room/:city/:iswhole/:room/:keyword', require('./routes/ziroom/room'));
+
+// // 快递
+router.get('/express/:company/:number', require('./routes/express/express'));
+
+// // 简书
+router.get('/jianshu/home', require('./routes/jianshu/home'));
+router.get('/jianshu/trending/weekly', require('./routes/jianshu/weekly'));
+router.get('/jianshu/trending/monthly', require('./routes/jianshu/monthly'));
+router.get('/jianshu/collection/:id', require('./routes/jianshu/collection'));
+router.get('/jianshu/user/:id', require('./routes/jianshu/user'));
+
+// // 知乎
+router.get('/zhihu/collection/:id', require('./routes/zhihu/collection'));
+
+module.exports = router;
\ No newline at end of file
diff --git a/routes/all.js b/routes/all.js
deleted file mode 100644
index af627a960f..0000000000
--- a/routes/all.js
+++ /dev/null
@@ -1,13 +0,0 @@
-module.exports = function (req, res, next) {
- res.header('Access-Control-Allow-Origin', '*');
- res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
- res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
- res.header('Content-Type', 'application/xml; charset=utf-8');
-
- if (req.method === 'OPTIONS') {
- res.send(200);
- }
- else {
- next();
- }
-};
\ No newline at end of file
diff --git a/routes/base.js b/routes/base.js
deleted file mode 100644
index 0b08e491de..0000000000
--- a/routes/base.js
+++ /dev/null
@@ -1,25 +0,0 @@
-const logger = require('../utils/logger');
-const redis = require('../utils/redis');
-const mix = require('../utils/mix');
-
-module.exports = (options) => {
- logger.info(`${options.req.url}, user IP: ${mix.getIp(options.req)}`);
-
- redis.get(options.req.url, (reply) => {
- if (reply) {
- options.res.send(reply);
- }
- else {
- try {
- options.getHTML((html) => {
- redis.set(options.req.url, html);
- options.res.send(html);
- });
- }
- catch (e) {
- redis.set(options.req.url, '');
- options.res.send('');
- }
- }
- });
-};
\ No newline at end of file
diff --git a/routes/bilibili/bangumi.js b/routes/bilibili/bangumi.js
index c1e5d37a98..6ca1b69636 100644
--- a/routes/bilibili/bangumi.js
+++ b/routes/bilibili/bangumi.js
@@ -1,46 +1,34 @@
-const request = require('request');
+const axios = require('axios');
const art = require('art-template');
const path = require('path');
-const base = require('../base');
-const mix = require('../../utils/mix');
+const config = require('../../config');
-module.exports = (req, res) => {
- const seasonid = req.params.seasonid;
+module.exports = async (ctx, next) => {
+ const seasonid = ctx.params.seasonid;
- base({
- req: req,
- res: res,
- getHTML: (callback) => {
- request.get({
- url: `https://bangumi.bilibili.com/jsonp/seasoninfo/${seasonid}.ver?callback=seasonListCallback&jsonp=jsonp&_=${+new Date()}`,
- headers: {
- 'User-Agent': mix.ua,
- 'Referer': `https://bangumi.bilibili.com/anime/${seasonid}/`
- }
- }, (err, httpResponse, body) => {
- let data;
- try {
- data = JSON.parse(body.match(/^seasonListCallback\((.*)\);$/)[1]);
- }
- catch (e) {
- data = {};
- }
- const result = data.result || {};
-
- const html = art(path.resolve(__dirname, '../../views/rss.art'), {
- title: result.title,
- link: `https://bangumi.bilibili.com/anime/${seasonid}/`,
- description: result.evaluate,
- lastBuildDate: new Date().toUTCString(),
- item: result.episodes && result.episodes.map((item) => ({
- title: `第${item.index}话 ${item.index_title}`,
- description: `更新时间:${item.update_time}
`,
- pubDate: new Date(item.update_time).toUTCString(),
- link: item.webplay_url
- })),
- });
- callback(html);
- });
+ const response = await axios({
+ method: 'get',
+ url: `https://bangumi.bilibili.com/jsonp/seasoninfo/${seasonid}.ver?callback=seasonListCallback&jsonp=jsonp&_=${+new Date()}`,
+ headers: {
+ 'User-Agent': config.ua,
+ 'Referer': `https://bangumi.bilibili.com/anime/${seasonid}/`
}
});
+
+ const data = JSON.parse(response.data.match(/^seasonListCallback\((.*)\);$/)[1]).result || {};
+
+ ctx.body = art(path.resolve(__dirname, '../../views/rss.art'), {
+ title: data.title,
+ link: `https://bangumi.bilibili.com/anime/${seasonid}/`,
+ description: data.evaluate,
+ lastBuildDate: new Date().toUTCString(),
+ item: data.episodes && data.episodes.map((item) => ({
+ title: `第${item.index}话 ${item.index_title}`,
+ description: `更新时间:${item.update_time}
`,
+ pubDate: new Date(item.update_time).toUTCString(),
+ link: item.webplay_url
+ })),
+ });
+
+ next();
};
\ No newline at end of file
diff --git a/routes/bilibili/coin.js b/routes/bilibili/coin.js
index ff35293b68..28be444989 100644
--- a/routes/bilibili/coin.js
+++ b/routes/bilibili/coin.js
@@ -1,57 +1,47 @@
-const request = require('request');
+const axios = require('axios');
+const qs = require('querystring');
const art = require('art-template');
const path = require('path');
-const base = require('../base');
-const mix = require('../../utils/mix');
+const config = require('../../config');
-module.exports = (req, res) => {
- const uid = req.params.uid;
+module.exports = async (ctx, next) => {
+ const uid = ctx.params.uid;
- base({
- req: req,
- res: res,
- getHTML: (callback) => {
- request.post({
- url: 'https://space.bilibili.com/ajax/member/GetInfo',
- headers: {
- 'User-Agent': mix.ua,
- 'Referer': `https://space.bilibili.com/${uid}/`,
- 'Origin': 'https://space.bilibili.com'
- },
- form: {
- mid: uid
- }
- }, function (err, httpResponse, body) {
- const name = JSON.parse(body).data.name;
- request.get({
- url: `https://space.bilibili.com/ajax/member/getCoinVideos?mid=${uid}`,
- headers: {
- 'User-Agent': mix.ua,
- 'Referer': `https://space.bilibili.com/${uid}/`
- }
- }, function (err, httpResponse, body) {
- let data;
- try {
- data = JSON.parse(body);
- }
- catch (e) {
- data = {};
- }
+ const nameResponse = await axios({
+ method: 'post',
+ url: 'https://space.bilibili.com/ajax/member/GetInfo',
+ headers: {
+ 'User-Agent': config.ua,
+ 'Referer': `https://space.bilibili.com/${uid}/`,
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ },
+ data: qs.stringify({
+ mid: uid
+ }),
+ });
+ const name = nameResponse.data.data.name;
- const html = art(path.resolve(__dirname, '../../views/rss.art'), {
- title: `${name} 的 bilibili 投币视频`,
- link: `https://space.bilibili.com/${uid}`,
- description: `${name} 的 bilibili 投币视频`,
- lastBuildDate: new Date().toUTCString(),
- item: data.data && data.data.list && data.data.list.map((item) => ({
- title: item.title,
- description: `${item.title}
`,
- link: `https://www.bilibili.com/video/av${item.stat.aid}`
- })),
- });
- callback(html);
- });
- });
+ const response = await axios({
+ method: 'get',
+ url: `https://space.bilibili.com/ajax/member/getCoinVideos?mid=${uid}`,
+ headers: {
+ 'User-Agent': config.ua,
+ 'Referer': `https://space.bilibili.com/${uid}/`
}
});
+ const data = response.data;
+
+ ctx.body = art(path.resolve(__dirname, '../../views/rss.art'), {
+ title: `${name} 的 bilibili 投币视频`,
+ link: `https://space.bilibili.com/${uid}`,
+ description: `${name} 的 bilibili 投币视频`,
+ lastBuildDate: new Date().toUTCString(),
+ item: data.data && data.data.list && data.data.list.map((item) => ({
+ title: item.title,
+ description: `${item.title}
`,
+ link: `https://www.bilibili.com/video/av${item.stat.aid}`
+ })),
+ });
+
+ next();
};
\ No newline at end of file
diff --git a/routes/bilibili/dynamic.js b/routes/bilibili/dynamic.js
index ea580d4b9f..1f4a24bac4 100644
--- a/routes/bilibili/dynamic.js
+++ b/routes/bilibili/dynamic.js
@@ -1,74 +1,61 @@
-const request = require('request');
+const axios = require('axios');
const art = require('art-template');
const path = require('path');
-const base = require('../base');
-const mix = require('../../utils/mix');
+const config = require('../../config');
-module.exports = (req, res) => {
- const uid = req.params.uid;
+module.exports = async (ctx, next) => {
+ const uid = ctx.params.uid;
- base({
- req: req,
- res: res,
- getHTML: (callback) => {
- request.get({
- url: `https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/space_history?host_uid=${uid}`,
- headers: {
- 'User-Agent': mix.ua,
- 'Referer': `https://space.bilibili.com/${uid}/`
- }
- }, (err, httpResponse, body) => {
- let data;
- try {
- data = JSON.parse(body);
- }
- catch (e) {
- data = {};
- }
- const result = data.data && data.data.cards || {};
-
- const html = art(path.resolve(__dirname, '../../views/rss.art'), {
- title: `${result[0].desc.user_profile.info.uname} 的 bilibili 动态`,
- link: `https://space.bilibili.com/${uid}/#/dynamic`,
- description: `${result[0].desc.user_profile.info.uname} 的 bilibili 动态`,
- lastBuildDate: new Date().toUTCString(),
- item: result.map((item) => {
- const parsed = JSON.parse(item.card);
- const data = parsed.item || parsed;
-
- // img
- let imgHTML = '';
- if (data.pictures) {
- for (let i = 0; i < data.pictures.length; i++) {
- imgHTML += `
`;
- }
- }
- if (data.pic) {
- imgHTML += `
`;
- }
-
- // link
- let link = '';
- if (data.dynamic_id) {
- link = `https://t.bilibili.com/${data.dynamic_id}`;
- }
- else if (data.aid) {
- link = `https://www.bilibili.com/video/av${data.aid}`;
- }
- else if (data.id) {
- link = `https://h.bilibili.com/${data.id}`;
- }
-
- return {
- title: data.title || data.description || data.content,
- description: `${data.desc || data.description || data.content}${imgHTML}`,
- pubDate: new Date((data.pubdate || data.upload_time || data.timestamp) * 1000).toUTCString(),
- link: link
- };
- }),
- });
- callback(html);
- });
+ const response = await axios({
+ method: 'get',
+ url: `https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/space_history?host_uid=${uid}`,
+ headers: {
+ 'User-Agent': config.ua,
+ 'Referer': `https://space.bilibili.com/${uid}/`
}
});
+ const data = response.data.data.cards;
+
+ ctx.body = art(path.resolve(__dirname, '../../views/rss.art'), {
+ title: `${data[0].desc.user_profile.info.uname} 的 bilibili 动态`,
+ link: `https://space.bilibili.com/${uid}/#/dynamic`,
+ description: `${data[0].desc.user_profile.info.uname} 的 bilibili 动态`,
+ lastBuildDate: new Date().toUTCString(),
+ item: data.map((item) => {
+ const parsed = JSON.parse(item.card);
+ const data = parsed.item || parsed;
+
+ // img
+ let imgHTML = '';
+ if (data.pictures) {
+ for (let i = 0; i < data.pictures.length; i++) {
+ imgHTML += `
`;
+ }
+ }
+ if (data.pic) {
+ imgHTML += `
`;
+ }
+
+ // link
+ let link = '';
+ if (data.dynamic_id) {
+ link = `https://t.bilibili.com/${data.dynamic_id}`;
+ }
+ else if (data.aid) {
+ link = `https://www.bilibili.com/video/av${data.aid}`;
+ }
+ else if (data.id) {
+ link = `https://h.bilibili.com/${data.id}`;
+ }
+
+ return {
+ title: data.title || data.description || data.content,
+ description: `${data.desc || data.description || data.content}${imgHTML}`,
+ pubDate: new Date((data.pubdate || data.upload_time || data.timestamp) * 1000).toUTCString(),
+ link: link
+ };
+ }),
+ });
+
+ next();
};
\ No newline at end of file
diff --git a/routes/bilibili/fav.js b/routes/bilibili/fav.js
index f22850327e..2fe50dade9 100644
--- a/routes/bilibili/fav.js
+++ b/routes/bilibili/fav.js
@@ -1,58 +1,48 @@
-const request = require('request');
+const axios = require('axios');
+const qs = require('querystring');
const art = require('art-template');
const path = require('path');
-const base = require('../base');
-const mix = require('../../utils/mix');
+const config = require('../../config');
-module.exports = (req, res) => {
- const uid = req.params.uid;
+module.exports = async (ctx, next) => {
+ const uid = ctx.params.uid;
- base({
- req: req,
- res: res,
- getHTML: (callback) => {
- request.post({
- url: 'https://space.bilibili.com/ajax/member/GetInfo',
- headers: {
- 'User-Agent': mix.ua,
- 'Referer': `https://space.bilibili.com/${uid}/`,
- 'Origin': 'https://space.bilibili.com'
- },
- form: {
- mid: uid
- }
- }, function (err, httpResponse, body) {
- const name = JSON.parse(body).data.name;
- request.get({
- url: `https://api.bilibili.com/x/v2/fav/video?vmid=${uid}&ps=30&tid=0&keyword=&pn=1&order=fav_time`,
- headers: {
- 'User-Agent': mix.ua,
- 'Referer': `https://space.bilibili.com/${uid}/#/favlist`
- }
- }, function (err, httpResponse, body) {
- let data;
- try {
- data = JSON.parse(body);
- }
- catch (e) {
- data = {};
- }
+ const nameResponse = await axios({
+ method: 'post',
+ url: 'https://space.bilibili.com/ajax/member/GetInfo',
+ headers: {
+ 'User-Agent': config.ua,
+ 'Referer': `https://space.bilibili.com/${uid}/`,
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ },
+ data: qs.stringify({
+ mid: uid
+ }),
+ });
+ const name = nameResponse.data.data.name;
- const html = art(path.resolve(__dirname, '../../views/rss.art'), {
- title: `${name} 的 bilibili 收藏夹`,
- link: `https://space.bilibili.com/${uid}/#/favlist`,
- description: `${name} 的 bilibili 收藏夹`,
- lastBuildDate: new Date().toUTCString(),
- item: data.data && data.data.archives && data.data.archives.map((item) => ({
- title: item.title,
- description: `${item.desc}
`,
- pubDate: new Date(item.fav_at * 1000).toUTCString(),
- link: `https://www.bilibili.com/video/av${item.aid}`
- })),
- });
- callback(html);
- });
- });
+ const response = await axios({
+ method: 'get',
+ url: `https://api.bilibili.com/x/v2/fav/video?vmid=${uid}&ps=30&tid=0&keyword=&pn=1&order=fav_time`,
+ headers: {
+ 'User-Agent': config.ua,
+ 'Referer': `https://space.bilibili.com/${uid}/#/favlist`
}
});
+ const data = response.data;
+
+ ctx.body = art(path.resolve(__dirname, '../../views/rss.art'), {
+ title: `${name} 的 bilibili 收藏夹`,
+ link: `https://space.bilibili.com/${uid}/#/favlist`,
+ description: `${name} 的 bilibili 收藏夹`,
+ lastBuildDate: new Date().toUTCString(),
+ item: data.data && data.data.archives && data.data.archives.map((item) => ({
+ title: item.title,
+ description: `${item.desc}
`,
+ pubDate: new Date(item.fav_at * 1000).toUTCString(),
+ link: `https://www.bilibili.com/video/av${item.aid}`
+ })),
+ });
+
+ next();
};
\ No newline at end of file
diff --git a/routes/bilibili/partion.js b/routes/bilibili/partion.js
index 59d5e4feef..76b88fde3b 100644
--- a/routes/bilibili/partion.js
+++ b/routes/bilibili/partion.js
@@ -1,51 +1,38 @@
-const request = require('request');
+const axios = require('axios');
const art = require('art-template');
const path = require('path');
-const base = require('../base');
-const mix = require('../../utils/mix');
+const config = require('../../config');
-module.exports = (req, res) => {
- const tid = req.params.tid;
+module.exports = async (ctx, next) => {
+ const tid = ctx.params.tid;
- base({
- req: req,
- res: res,
- getHTML: (callback) => {
- request.get({
- url: `https://api.bilibili.com/x/web-interface/newlist?ps=15&rid=${tid}&_=${+new Date()}`,
- headers: {
- 'User-Agent': mix.ua,
- 'Referer': 'https://www.bilibili.com/'
- }
- }, (err, httpResponse, body) => {
- let data;
- try {
- data = JSON.parse(body);
- }
- catch (e) {
- data = {};
- }
-
- const list = data.data && data.data.archives;
- let name = '未知';
- if (list && list[0] && list[0].tname) {
- name = list[0].tname;
- }
-
- const html = art(path.resolve(__dirname, '../../views/rss.art'), {
- title: `bilibili ${name}分区`,
- link: 'https://www.bilibili.com',
- description: `bilibili ${name}分区`,
- lastBuildDate: new Date().toUTCString(),
- item: list && list.map((item) => ({
- title: `${item.title} - ${item.owner.name}`,
- description: `${item.desc}
`,
- pubDate: new Date(item.pubdate * 1000).toUTCString(),
- link: `https://www.bilibili.com/video/av${item.aid}`
- })),
- });
- callback(html);
- });
+ const response = await axios({
+ method: 'get',
+ url: `https://api.bilibili.com/x/web-interface/newlist?ps=15&rid=${tid}&_=${+new Date()}`,
+ headers: {
+ 'User-Agent': config.ua,
+ 'Referer': 'https://www.bilibili.com/'
}
});
+
+ const list = response.data.data.archives;
+ let name = '未知';
+ if (list && list[0] && list[0].tname) {
+ name = list[0].tname;
+ }
+
+ ctx.body = art(path.resolve(__dirname, '../../views/rss.art'), {
+ title: `bilibili ${name}分区`,
+ link: 'https://www.bilibili.com',
+ description: `bilibili ${name}分区`,
+ lastBuildDate: new Date().toUTCString(),
+ item: list && list.map((item) => ({
+ title: `${item.title} - ${item.owner.name}`,
+ description: `${item.desc}
`,
+ pubDate: new Date(item.pubdate * 1000).toUTCString(),
+ link: `https://www.bilibili.com/video/av${item.aid}`
+ })),
+ });
+
+ next();
};
\ No newline at end of file
diff --git a/routes/bilibili/video.js b/routes/bilibili/video.js
index 2b82a2a039..761e69ffa9 100644
--- a/routes/bilibili/video.js
+++ b/routes/bilibili/video.js
@@ -1,58 +1,48 @@
-const request = require('request');
+const axios = require('axios');
+const qs = require('querystring');
const art = require('art-template');
const path = require('path');
-const base = require('../base');
-const mix = require('../../utils/mix');
+const config = require('../../config');
-module.exports = (req, res) => {
- const uid = req.params.uid;
+module.exports = async (ctx, next) => {
+ const uid = ctx.params.uid;
- base({
- req: req,
- res: res,
- getHTML: (callback) => {
- request.post({
- url: 'https://space.bilibili.com/ajax/member/GetInfo',
- headers: {
- 'User-Agent': mix.ua,
- 'Referer': `https://space.bilibili.com/${uid}/`,
- 'Origin': 'https://space.bilibili.com'
- },
- form: {
- mid: uid
- }
- }, function (err, httpResponse, body) {
- const name = JSON.parse(body).data.name;
- request.get({
- url: `https://space.bilibili.com/ajax/member/getSubmitVideos?mid=${uid}`,
- headers: {
- 'User-Agent': mix.ua,
- 'Referer': `https://space.bilibili.com/${uid}/`,
- }
- }, function (err, httpResponse, body) {
- let data;
- try {
- data = JSON.parse(body);
- }
- catch (e) {
- data = {};
- }
+ const nameResponse = await axios({
+ method: 'post',
+ url: 'https://space.bilibili.com/ajax/member/GetInfo',
+ headers: {
+ 'User-Agent': config.ua,
+ 'Referer': `https://space.bilibili.com/${uid}/`,
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ },
+ data: qs.stringify({
+ mid: uid
+ }),
+ });
+ const name = nameResponse.data.data.name;
- const html = art(path.resolve(__dirname, '../../views/rss.art'), {
- title: `${name} 的 bilibili 空间`,
- link: `https://space.bilibili.com/${uid}`,
- description: `${name} 的 bilibili 空间`,
- lastBuildDate: new Date().toUTCString(),
- item: data.data && data.data.vlist && data.data.vlist.map((item) => ({
- title: item.title,
- description: `${item.description}
`,
- pubDate: new Date(item.created * 1000).toUTCString(),
- link: `https://www.bilibili.com/video/av${item.aid}`
- })),
- });
- callback(html);
- });
- });
+ const response = await axios({
+ method: 'get',
+ url: `https://space.bilibili.com/ajax/member/getSubmitVideos?mid=${uid}`,
+ headers: {
+ 'User-Agent': config.ua,
+ 'Referer': `https://space.bilibili.com/${uid}/`
}
});
+ const data = response.data;
+
+ ctx.body = art(path.resolve(__dirname, '../../views/rss.art'), {
+ title: `${name} 的 bilibili 空间`,
+ link: `https://space.bilibili.com/${uid}`,
+ description: `${name} 的 bilibili 空间`,
+ lastBuildDate: new Date().toUTCString(),
+ item: data.data && data.data.vlist && data.data.vlist.map((item) => ({
+ title: item.title,
+ description: `${item.description}
`,
+ pubDate: new Date(item.created * 1000).toUTCString(),
+ link: `https://www.bilibili.com/video/av${item.aid}`
+ })),
+ });
+
+ next();
};
\ No newline at end of file
diff --git a/routes/express/express.js b/routes/express/express.js
index 6739208fa4..a3f2b2b041 100644
--- a/routes/express/express.js
+++ b/routes/express/express.js
@@ -1,47 +1,35 @@
-const request = require('request');
+const axios = require('axios');
const art = require('art-template');
const path = require('path');
-const base = require('../base');
-const mix = require('../../utils/mix');
+const config = require('../../config');
-module.exports = (req, res) => {
- const company = req.params.company;
- const number = req.params.number;
+module.exports = async (ctx, next) => {
+ const company = ctx.params.company;
+ const number = ctx.params.number;
- base({
- req: req,
- res: res,
- getHTML: (callback) => {
- request.get({
- url: `https://www.kuaidi100.com/query?type=${company}&postid=${number}`,
- headers: {
- 'User-Agent': mix.ua,
- 'Referer': 'https://www.kuaidi100.com'
- }
- }, (err, httpResponse, body) => {
- let data;
- try {
- data = JSON.parse(body);
- }
- catch (e) {
- data = {};
- }
- const result = data.data || [];
-
- const html = art(path.resolve(__dirname, '../../views/rss.art'), {
- title: `快递 ${company}-${number}`,
- link: 'https://www.kuaidi100.com',
- description: `快递 ${company}-${number}`,
- lastBuildDate: new Date().toUTCString(),
- item: result && result.map((item) => ({
- title: item.context,
- description: item.context,
- pubDate: new Date(item.time || item.ftime).toUTCString(),
- link: item.context
- })),
- });
- callback(html);
- });
+ const response = await axios({
+ method: 'get',
+ url: `https://www.kuaidi100.com/query?type=${company}&postid=${number}`,
+ headers: {
+ 'User-Agent': config.ua,
+ 'Referer': 'https://www.kuaidi100.com'
}
});
+
+ const data = response.data.data;
+
+ ctx.body = art(path.resolve(__dirname, '../../views/rss.art'), {
+ title: `快递 ${company}-${number}`,
+ link: 'https://www.kuaidi100.com',
+ description: `快递 ${company}-${number}`,
+ lastBuildDate: new Date().toUTCString(),
+ item: data.map((item) => ({
+ title: item.context,
+ description: item.context,
+ pubDate: new Date(item.time || item.ftime).toUTCString(),
+ link: item.context
+ })),
+ });
+
+ next();
};
\ No newline at end of file
diff --git a/routes/jianshu/collection.js b/routes/jianshu/collection.js
index c76f5e6960..1afee4f8b7 100644
--- a/routes/jianshu/collection.js
+++ b/routes/jianshu/collection.js
@@ -1,44 +1,41 @@
-const request = require('request');
+const axios = require('axios');
const art = require('art-template');
const path = require('path');
const cheerio = require('cheerio');
-const base = require('../base');
-const mix = require('../../utils/mix');
+const config = require('../../config');
-module.exports = (req, res) => {
- const id = req.params.id;
+module.exports = async (ctx, next) => {
+ const id = ctx.params.id;
- base({
- req: req,
- res: res,
- getHTML: (callback) => {
- request.get({
- url: `https://www.jianshu.com/c/${id}`,
- headers: {
- 'User-Agent': mix.ua,
- 'Referer': `https://www.jianshu.com/c/${id}`
- }
- }, (err, httpResponse, body) => {
- const $ = cheerio.load(body);
- const list = $('.note-list li');
-
- const html = art(path.resolve(__dirname, '../../views/rss.art'), {
- title: $('title').text(),
- link: `https://www.jianshu.com/c/${id}`,
- description: $('meta[name="description"]').attr('content') || $('title').text(),
- lastBuildDate: new Date().toUTCString(),
- item: list && list.map((index, item) => {
- item = $(item);
- return {
- title: item.find('.title').text(),
- description: `作者:${item.find('.nickname').text()}
描述:${item.find('.abstract').text()}
`,
- pubDate: new Date(item.find('.time').data('shared-at')).toUTCString(),
- link: `https://www.jianshu.com${item.find('.title').attr('href')}`
- };
- }).get(),
- });
- callback(html);
- });
+ const response = await axios({
+ method: 'get',
+ url: `https://www.jianshu.com/c/${id}`,
+ headers: {
+ 'User-Agent': config.ua,
+ 'Referer': `https://www.jianshu.com/c/${id}`
}
});
+
+ const data = response.data;
+
+ const $ = cheerio.load(data);
+ const list = $('.note-list li');
+
+ ctx.body = art(path.resolve(__dirname, '../../views/rss.art'), {
+ title: $('title').text(),
+ link: `https://www.jianshu.com/c/${id}`,
+ description: $('meta[name="description"]').attr('content') || $('title').text(),
+ lastBuildDate: new Date().toUTCString(),
+ item: list && list.map((index, item) => {
+ item = $(item);
+ return {
+ title: item.find('.title').text(),
+ description: `作者:${item.find('.nickname').text()}
描述:${item.find('.abstract').text()}
`,
+ pubDate: new Date(item.find('.time').data('shared-at')).toUTCString(),
+ link: `https://www.jianshu.com${item.find('.title').attr('href')}`
+ };
+ }).get(),
+ });
+
+ next();
};
\ No newline at end of file
diff --git a/routes/jianshu/home.js b/routes/jianshu/home.js
index 550989e11d..4b49045c19 100644
--- a/routes/jianshu/home.js
+++ b/routes/jianshu/home.js
@@ -1,42 +1,39 @@
-const request = require('request');
+const axios = require('axios');
const art = require('art-template');
const path = require('path');
const cheerio = require('cheerio');
-const base = require('../base');
-const mix = require('../../utils/mix');
+const config = require('../../config');
-module.exports = (req, res) => {
- base({
- req: req,
- res: res,
- getHTML: (callback) => {
- request.get({
- url: 'https://www.jianshu.com',
- headers: {
- 'User-Agent': mix.ua,
- 'Referer': 'https://www.jianshu.com'
- }
- }, (err, httpResponse, body) => {
- const $ = cheerio.load(body);
- const list = $('.note-list li');
-
- const html = art(path.resolve(__dirname, '../../views/rss.art'), {
- title: '简书首页',
- link: 'https://www.jianshu.com',
- description: $('meta[name="description"]').attr('content'),
- lastBuildDate: new Date().toUTCString(),
- item: list && list.map((index, item) => {
- item = $(item);
- return {
- title: item.find('.title').text(),
- description: `作者:${item.find('.nickname').text()}
描述:${item.find('.abstract').text()}
`,
- pubDate: new Date(item.find('.time').data('shared-at')).toUTCString(),
- link: `https://www.jianshu.com${item.find('.title').attr('href')}`
- };
- }).get(),
- });
- callback(html);
- });
+module.exports = async (ctx, next) => {
+ const response = await axios({
+ method: 'get',
+ url: 'https://www.jianshu.com',
+ headers: {
+ 'User-Agent': config.ua,
+ 'Referer': 'https://www.jianshu.com'
}
});
+
+ const data = response.data;
+
+ const $ = cheerio.load(data);
+ const list = $('.note-list li');
+
+ ctx.body = art(path.resolve(__dirname, '../../views/rss.art'), {
+ title: '简书首页',
+ link: 'https://www.jianshu.com',
+ description: $('meta[name="description"]').attr('content'),
+ lastBuildDate: new Date().toUTCString(),
+ item: list && list.map((index, item) => {
+ item = $(item);
+ return {
+ title: item.find('.title').text(),
+ description: `作者:${item.find('.nickname').text()}
描述:${item.find('.abstract').text()}
`,
+ pubDate: new Date(item.find('.time').data('shared-at')).toUTCString(),
+ link: `https://www.jianshu.com${item.find('.title').attr('href')}`
+ };
+ }).get(),
+ });
+
+ next();
};
\ No newline at end of file
diff --git a/routes/jianshu/monthly.js b/routes/jianshu/monthly.js
index f7e0abfa6a..986bd48294 100644
--- a/routes/jianshu/monthly.js
+++ b/routes/jianshu/monthly.js
@@ -1,42 +1,39 @@
-const request = require('request');
+const axios = require('axios');
const art = require('art-template');
const path = require('path');
const cheerio = require('cheerio');
-const base = require('../base');
-const mix = require('../../utils/mix');
+const config = require('../../config');
-module.exports = (req, res) => {
- base({
- req: req,
- res: res,
- getHTML: (callback) => {
- request.get({
- url: 'https://www.jianshu.com/trending/monthly',
- headers: {
- 'User-Agent': mix.ua,
- 'Referer': 'https://www.jianshu.com/trending/monthly'
- }
- }, (err, httpResponse, body) => {
- const $ = cheerio.load(body);
- const list = $('.note-list li');
-
- const html = art(path.resolve(__dirname, '../../views/rss.art'), {
- title: '简书 30 日热门',
- link: 'https://www.jianshu.com/trending/monthly',
- description: '简书 30 日热门',
- lastBuildDate: new Date().toUTCString(),
- item: list && list.map((index, item) => {
- item = $(item);
- return {
- title: item.find('.title').text(),
- description: `作者:${item.find('.nickname').text()}
描述:${item.find('.abstract').text()}
`,
- pubDate: new Date(item.find('.time').data('shared-at')).toUTCString(),
- link: `https://www.jianshu.com${item.find('.title').attr('href')}`
- };
- }).get(),
- });
- callback(html);
- });
+module.exports = async (ctx, next) => {
+ const response = await axios({
+ method: 'get',
+ url: 'https://www.jianshu.com/trending/monthly',
+ headers: {
+ 'User-Agent': config.ua,
+ 'Referer': 'https://www.jianshu.com/trending/monthly'
}
});
+
+ const data = response.data;
+
+ const $ = cheerio.load(data);
+ const list = $('.note-list li');
+
+ ctx.body = art(path.resolve(__dirname, '../../views/rss.art'), {
+ title: '简书 30 日热门',
+ link: 'https://www.jianshu.com/trending/monthly',
+ description: '简书 30 日热门',
+ lastBuildDate: new Date().toUTCString(),
+ item: list && list.map((index, item) => {
+ item = $(item);
+ return {
+ title: item.find('.title').text(),
+ description: `作者:${item.find('.nickname').text()}
描述:${item.find('.abstract').text()}
`,
+ pubDate: new Date(item.find('.time').data('shared-at')).toUTCString(),
+ link: `https://www.jianshu.com${item.find('.title').attr('href')}`
+ };
+ }).get(),
+ });
+
+ next();
};
\ No newline at end of file
diff --git a/routes/jianshu/user.js b/routes/jianshu/user.js
index 19ad730bfd..6ad77062e7 100644
--- a/routes/jianshu/user.js
+++ b/routes/jianshu/user.js
@@ -1,44 +1,41 @@
-const request = require('request');
+const axios = require('axios');
const art = require('art-template');
const path = require('path');
const cheerio = require('cheerio');
-const base = require('../base');
-const mix = require('../../utils/mix');
+const config = require('../../config');
-module.exports = (req, res) => {
- const id = req.params.id;
+module.exports = async (ctx, next) => {
+ const id = ctx.params.id;
- base({
- req: req,
- res: res,
- getHTML: (callback) => {
- request.get({
- url: `https://www.jianshu.com/u/${id}`,
- headers: {
- 'User-Agent': mix.ua,
- 'Referer': `https://www.jianshu.com/u/${id}`
- }
- }, (err, httpResponse, body) => {
- const $ = cheerio.load(body);
- const list = $('.note-list li');
-
- const html = art(path.resolve(__dirname, '../../views/rss.art'), {
- title: $('title').text(),
- link: `https://www.jianshu.com/u/${id}`,
- description: $('meta[name="description"]').attr('content') || $('title').text(),
- lastBuildDate: new Date().toUTCString(),
- item: list && list.map((index, item) => {
- item = $(item);
- return {
- title: item.find('.title').text(),
- description: `作者:${item.find('.nickname').text()}
描述:${item.find('.abstract').text()}
`,
- pubDate: new Date(item.find('.time').data('shared-at')).toUTCString(),
- link: `https://www.jianshu.com${item.find('.title').attr('href')}`
- };
- }).get(),
- });
- callback(html);
- });
+ const response = await axios({
+ method: 'get',
+ url: `https://www.jianshu.com/u/${id}`,
+ headers: {
+ 'User-Agent': config.ua,
+ 'Referer': `https://www.jianshu.com/u/${id}`
}
});
+
+ const data = response.data;
+
+ const $ = cheerio.load(data);
+ const list = $('.note-list li');
+
+ ctx.body = art(path.resolve(__dirname, '../../views/rss.art'), {
+ title: $('title').text(),
+ link: `https://www.jianshu.com/u/${id}`,
+ description: $('meta[name="description"]').attr('content') || $('title').text(),
+ lastBuildDate: new Date().toUTCString(),
+ item: list && list.map((index, item) => {
+ item = $(item);
+ return {
+ title: item.find('.title').text(),
+ description: `作者:${item.find('.nickname').text()}
描述:${item.find('.abstract').text()}
`,
+ pubDate: new Date(item.find('.time').data('shared-at')).toUTCString(),
+ link: `https://www.jianshu.com${item.find('.title').attr('href')}`
+ };
+ }).get(),
+ });
+
+ next();
};
\ No newline at end of file
diff --git a/routes/jianshu/weekly.js b/routes/jianshu/weekly.js
index 49bc1c87f9..ad26c9f5fd 100644
--- a/routes/jianshu/weekly.js
+++ b/routes/jianshu/weekly.js
@@ -1,42 +1,39 @@
-const request = require('request');
+const axios = require('axios');
const art = require('art-template');
const path = require('path');
const cheerio = require('cheerio');
-const base = require('../base');
-const mix = require('../../utils/mix');
+const config = require('../../config');
-module.exports = (req, res) => {
- base({
- req: req,
- res: res,
- getHTML: (callback) => {
- request.get({
- url: 'https://www.jianshu.com/trending/weekly',
- headers: {
- 'User-Agent': mix.ua,
- 'Referer': 'https://www.jianshu.com/trending/weekly'
- }
- }, (err, httpResponse, body) => {
- const $ = cheerio.load(body);
- const list = $('.note-list li');
-
- const html = art(path.resolve(__dirname, '../../views/rss.art'), {
- title: '简书 7 日热门',
- link: 'https://www.jianshu.com/trending/weekly',
- description: '简书 7 日热门',
- lastBuildDate: new Date().toUTCString(),
- item: list && list.map((index, item) => {
- item = $(item);
- return {
- title: item.find('.title').text(),
- description: `作者:${item.find('.nickname').text()}
描述:${item.find('.abstract').text()}
`,
- pubDate: new Date(item.find('.time').data('shared-at')).toUTCString(),
- link: `https://www.jianshu.com${item.find('.title').attr('href')}`
- };
- }).get(),
- });
- callback(html);
- });
+module.exports = async (ctx, next) => {
+ const response = await axios({
+ method: 'get',
+ url: 'https://www.jianshu.com/trending/weekly',
+ headers: {
+ 'User-Agent': config.ua,
+ 'Referer': 'https://www.jianshu.com/trending/weekly'
}
});
+
+ const data = response.data;
+
+ const $ = cheerio.load(data);
+ const list = $('.note-list li');
+
+ ctx.body = art(path.resolve(__dirname, '../../views/rss.art'), {
+ title: '简书 7 日热门',
+ link: 'https://www.jianshu.com/trending/weekly',
+ description: '简书 7 日热门',
+ lastBuildDate: new Date().toUTCString(),
+ item: list && list.map((index, item) => {
+ item = $(item);
+ return {
+ title: item.find('.title').text(),
+ description: `作者:${item.find('.nickname').text()}
描述:${item.find('.abstract').text()}
`,
+ pubDate: new Date(item.find('.time').data('shared-at')).toUTCString(),
+ link: `https://www.jianshu.com${item.find('.title').attr('href')}`
+ };
+ }).get(),
+ });
+
+ next();
};
\ No newline at end of file
diff --git a/routes/juejin/category.js b/routes/juejin/category.js
index 471d6807c8..a494630658 100644
--- a/routes/juejin/category.js
+++ b/routes/juejin/category.js
@@ -1,70 +1,50 @@
-const request = require('request');
+const axios = require('axios');
const art = require('art-template');
const path = require('path');
-const base = require('../base');
-const mix = require('../../utils/mix');
+const config = require('../../config');
-module.exports = (req, res) => {
- const category = req.params.category;
+module.exports = async (ctx, next) => {
+ const category = ctx.params.category;
- base({
- req: req,
- res: res,
- getHTML: (callback) => {
- request.get({
- url: 'https://gold-tag-ms.juejin.im/v1/categories',
- headers: {
- 'User-Agent': mix.ua,
- 'Referer': `https://juejin.im/welcome/${category}`,
- 'X-Juejin-Client': '',
- 'X-Juejin-Src': 'web',
- 'X-Juejin-Token': '',
- 'X-Juejin-Uid': ''
- }
- }, function (err, httpResponse, body) {
- let data;
- try {
- data = JSON.parse(body);
- }
- catch (e) {
- data = {};
- }
- const cat = data.d && data.d.categoryList && data.d.categoryList.filter((item) => item.title === category)[0];
- if (cat && cat.id) {
- request.get({
- url: `https://timeline-merger-ms.juejin.im/v1/get_entry_by_timeline?src=web&limit=20&category=${cat.id}`,
- headers: {
- 'User-Agent': mix.ua,
- 'Referer': `https://juejin.im/welcome/${category}`,
- }
- }, function (err, httpResponse, body) {
- let data;
- try {
- data = JSON.parse(body);
- }
- catch (e) {
- data = {};
- }
-
- const html = art(path.resolve(__dirname, '../../views/rss.art'), {
- title: `掘金${cat.name}`,
- link: `https://juejin.im/welcome/${category}`,
- description: `掘金${cat.name}`,
- lastBuildDate: new Date().toUTCString(),
- item: data.d && data.d.entrylist && data.d.entrylist.map((item) => ({
- title: item.title,
- description: `${(item.content || item.summaryInfo || '无描述').replace(/[\x00-\x08\x0b-\x0c\x0e-\x1f\x7f]/g, '')}`,
- pubDate: new Date(item.createdAt).toUTCString(),
- link: item.originalUrl
- })),
- });
- callback(html);
- });
- }
- else {
- callback('');
- }
- });
+ const idResponse = await axios({
+ method: 'get',
+ url: 'https://gold-tag-ms.juejin.im/v1/categories',
+ headers: {
+ 'User-Agent': config.ua,
+ 'Referer': `https://juejin.im/welcome/${category}`,
+ 'X-Juejin-Client': '',
+ 'X-Juejin-Src': 'web',
+ 'X-Juejin-Token': '',
+ 'X-Juejin-Uid': ''
}
});
+
+ const cat = idResponse.data.d.categoryList.filter((item) => item.title === category)[0];
+ const id = cat.id;
+
+ const response = await axios({
+ method: 'get',
+ url: `https://timeline-merger-ms.juejin.im/v1/get_entry_by_timeline?src=web&limit=20&category=${id}`,
+ headers: {
+ 'User-Agent': config.ua,
+ 'Referer': `https://juejin.im/welcome/${category}`,
+ }
+ });
+
+ const data = response.data;
+
+ ctx.body = art(path.resolve(__dirname, '../../views/rss.art'), {
+ title: `掘金${cat.name}`,
+ link: `https://juejin.im/welcome/${category}`,
+ description: `掘金${cat.name}`,
+ lastBuildDate: new Date().toUTCString(),
+ item: data.d && data.d.entrylist && data.d.entrylist.map((item) => ({
+ title: item.title,
+ description: `${(item.content || item.summaryInfo || '无描述').replace(/[\x00-\x08\x0b-\x0c\x0e-\x1f\x7f]/g, '')}`,
+ pubDate: new Date(item.createdAt).toUTCString(),
+ link: item.originalUrl
+ })),
+ });
+
+ next();
};
\ No newline at end of file
diff --git a/routes/ncm/artist.js b/routes/ncm/artist.js
index 352e6d00df..f72d972af4 100644
--- a/routes/ncm/artist.js
+++ b/routes/ncm/artist.js
@@ -1,48 +1,36 @@
-const request = require('request');
+const axios = require('axios');
const art = require('art-template');
const path = require('path');
-const base = require('../base');
-const mix = require('../../utils/mix');
+const config = require('../../config');
-module.exports = (req, res) => {
- const id = req.params.id;
+module.exports = async (ctx, next) => {
+ const id = ctx.params.id;
- base({
- req: req,
- res: res,
- getHTML: (callback) => {
- request.get({
- url: 'https://music.163.com/api/artist/albums/' + id,
- headers: {
- 'User-Agent': mix.ua,
- 'Referer': 'https://music.163.com/'
- }
- }, (err, httpResponse, body) => {
- let data;
- try {
- data = JSON.parse(body);
- }
- catch (e) {
- data = {};
- }
- const result = data;
-
- const html = art(path.resolve(__dirname, '../../views/rss.art'), {
- title: result.artist.name,
- link: `https://music.163.com/#/artist/album?id=${id}`,
- description: `网易云音乐歌手专辑 - ${result.artist.name}`,
- lastBuildDate: new Date().toUTCString(),
- item: result.hotAlbums && result.hotAlbums.map((item) => {
- const singer = item.artists.length === 1 ? item.artists[0].name : item.artists.reduce((prev, cur) => (prev.name || prev) + '/' + cur.name);
- return {
- title: `${item.name} - ${singer}`,
- description: `歌手:${singer}
专辑:${item.name}
日期:${new Date(item.publishTime).toLocaleDateString()}
`,
- link: `https://music.163.com/#/album?id=${item.id}`
- };
- }),
- });
- callback(html);
- });
+ const response = await axios({
+ method: 'get',
+ url: `https://music.163.com/api/artist/albums/${id}`,
+ headers: {
+ 'User-Agent': config.ua,
+ 'Referer': 'https://music.163.com/'
}
});
-};
+
+ const data = response.data;
+
+ ctx.body = art(path.resolve(__dirname, '../../views/rss.art'), {
+ title: data.artist.name,
+ link: `https://music.163.com/#/artist/album?id=${id}`,
+ description: `网易云音乐歌手专辑 - ${data.artist.name}`,
+ lastBuildDate: new Date().toUTCString(),
+ item: data.hotAlbums.map((item) => {
+ const singer = item.artists.length === 1 ? item.artists[0].name : item.artists.reduce((prev, cur) => (prev.name || prev) + '/' + cur.name);
+ return {
+ title: `${item.name} - ${singer}`,
+ description: `歌手:${singer}
专辑:${item.name}
日期:${new Date(item.publishTime).toLocaleDateString()}
`,
+ link: `https://music.163.com/#/album?id=${item.id}`
+ };
+ }),
+ });
+
+ next();
+};
\ No newline at end of file
diff --git a/routes/ncm/playlist.js b/routes/ncm/playlist.js
index 5094c027db..4b0e445a4c 100644
--- a/routes/ncm/playlist.js
+++ b/routes/ncm/playlist.js
@@ -1,51 +1,41 @@
-const request = require('request');
+const axios = require('axios');
+const qs = require('querystring');
const art = require('art-template');
const path = require('path');
-const base = require('../base');
-const mix = require('../../utils/mix');
+const config = require('../../config');
-module.exports = (req, res) => {
- const id = req.params.id;
+module.exports = async (ctx, next) => {
+ const id = ctx.params.id;
- base({
- req: req,
- res: res,
- getHTML: (callback) => {
- request.post({
- url: 'https://music.163.com/api/v3/playlist/detail',
- headers: {
- 'User-Agent': mix.ua,
- 'Referer': 'https://music.163.com/'
- },
- form: {
- id: id
- }
- }, (err, httpResponse, body) => {
- let data;
- try {
- data = JSON.parse(body);
- }
- catch (e) {
- data = {};
- }
- const result = data.playlist || {};
-
- const html = art(path.resolve(__dirname, '../../views/rss.art'), {
- title: result.name,
- link: `https://music.163.com/#/playlist?id=${id}`,
- description: `网易云音乐歌单 - ${result.name}`,
- lastBuildDate: new Date().toUTCString(),
- item: result.tracks && result.tracks.map((item) => {
- const singer = item.ar.length === 1 ? item.ar[0].name : item.ar.reduce((prev, cur) => (prev.name || prev) + '/' + cur.name);
- return {
- title: `${item.name} - ${singer}`,
- description: `歌手:${singer}
专辑:${item.al.name}
日期:${new Date(item.publishTime).toLocaleDateString()}
`,
- link: `https://music.163.com/#/song?id=${item.id}`
- };
- }),
- });
- callback(html);
- });
- }
+ const response = await axios({
+ method: 'post',
+ url: 'https://music.163.com/api/v3/playlist/detail',
+ headers: {
+ 'User-Agent': config.ua,
+ 'Referer': 'https://music.163.com/',
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ },
+ data: qs.stringify({
+ id: id
+ }),
});
+
+ const data = response.data.playlist;
+
+ ctx.body = art(path.resolve(__dirname, '../../views/rss.art'), {
+ title: data.name,
+ link: `https://music.163.com/#/playlist?id=${id}`,
+ description: `网易云音乐歌单 - ${data.name}`,
+ lastBuildDate: new Date().toUTCString(),
+ item: data.tracks && data.tracks.map((item) => {
+ const singer = item.ar.length === 1 ? item.ar[0].name : item.ar.reduce((prev, cur) => (prev.name || prev) + '/' + cur.name);
+ return {
+ title: `${item.name} - ${singer}`,
+ description: `歌手:${singer}
专辑:${item.al.name}
日期:${new Date(item.publishTime).toLocaleDateString()}
`,
+ link: `https://music.163.com/#/song?id=${item.id}`
+ };
+ }),
+ });
+
+ next();
};
\ No newline at end of file
diff --git a/routes/ncm/userplaylist.js b/routes/ncm/userplaylist.js
index d1b2fe7013..de1dd3cbbc 100644
--- a/routes/ncm/userplaylist.js
+++ b/routes/ncm/userplaylist.js
@@ -1,66 +1,45 @@
-const request = require('request');
+const axios = require('axios');
+const qs = require('querystring');
const art = require('art-template');
const path = require('path');
-const base = require('../base');
-const mix = require('../../utils/mix');
+const config = require('../../config');
-module.exports = (req, res) => {
- const uid = req.params.uid;
+module.exports = async (ctx, next) => {
+ const uid = ctx.params.uid;
- base({
- req: req,
- res: res,
- getHTML: (callback) => {
- request.post(
- {
- url: 'http://music.163.com/api/user/playlist',
- headers: {
- 'User-Agent': mix.ua,
- Referer: 'https://music.163.com/'
- },
- form: {
- uid: uid,
- limit: 1000,
- offset: 0
- }
- },
- (err, httpResponse, body) => {
- let data;
- try {
- data = JSON.parse(body);
- } catch (e) {
- data = {};
- }
- const playlist = data.playlist || [{ creator: {} }];
-
- const creator = playlist[0].creator;
-
- const { nickname, signature } = creator;
-
- const html = art(
- path.resolve(__dirname, '../../views/rss.art'),
- {
- title: `${nickname} 的所有歌单`,
- link: `http://music.163.com/user/home?id=${uid}`,
- description: signature,
- lastBuildDate: new Date().toUTCString(),
- item:
- playlist[0].id &&
- playlist.map((pl) => ({
- title: pl.name,
- description: pl.description,
- pubDate: new Date(
- pl.createTime
- ).toUTCString(),
- link: `http://music.163.com/playlist?id=${
- pl.id
- }`
- }))
- }
- );
- callback(html);
- }
- );
- }
+ const response = await axios({
+ method: 'post',
+ url: 'http://music.163.com/api/user/playlist',
+ headers: {
+ 'User-Agent': config.ua,
+ 'Referer': 'https://music.163.com/',
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ },
+ data: qs.stringify({
+ uid: uid,
+ limit: 1000,
+ offset: 0
+ }),
});
-};
+
+ const playlist = response.data.playlist || [{ creator: {} }];
+
+ const creator = playlist[0].creator;
+
+ const { nickname, signature } = creator;
+
+ ctx.body = art(path.resolve(__dirname, '../../views/rss.art'), {
+ title: `${nickname} 的所有歌单`,
+ link: `http://music.163.com/user/home?id=${uid}`,
+ description: signature,
+ lastBuildDate: new Date().toUTCString(),
+ item: playlist.map((pl) => ({
+ title: pl.name,
+ description: pl.description,
+ pubDate: new Date(pl.createTime).toUTCString(),
+ link: `http://music.163.com/playlist?id=${pl.id}`
+ }))
+ });
+
+ next();
+};
\ No newline at end of file
diff --git a/routes/weibo/user.js b/routes/weibo/user.js
index 25f4036c17..966b77edd4 100644
--- a/routes/weibo/user.js
+++ b/routes/weibo/user.js
@@ -1,103 +1,83 @@
-const request = require('request');
+const axios = require('axios');
const art = require('art-template');
const path = require('path');
-const base = require('../base');
-const mix = require('../../utils/mix');
+const config = require('../../config');
-module.exports = (req, res) => {
- const uid = req.params.uid;
+// 格式化每条微博的HTML
+function format (status) {
+ // 长文章的处理
+ let temp = status.longText ? status.longText.longTextContent.replace(/\n/g, '
') : status.text;
+ // 表情图标转换为文字
+ temp = temp.replace(/
<\/span>/g, '$1');
+ // 去掉外部链接的图标
+ temp = temp.replace(/
<\/span><\/i>/g, '');
+ // 去掉多余无意义的标签
+ temp = temp.replace(//g, '');
+ // 最后插入两个空行,让转发的微博排版更加美观一些
+ temp += '
';
- base({
- req: req,
- res: res,
- getHTML: (callback) => {
- request.get({
- url: `https://m.weibo.cn/api/container/getIndex?type=uid&value=${uid}`,
- headers: {
- 'User-Agent': mix.ua,
- 'Referer': 'https://m.weibo.cn/'
- },
- }, function (err, httpResponse, body) {
- let data;
- try {
- data = JSON.parse(body).data;
- }
- catch (e) {
- data = {};
- }
- const name = data.userInfo && data.userInfo.screen_name;
- const containerid = data.tabsInfo && data.tabsInfo.tabs && data.tabsInfo.tabs[1] && data.tabsInfo.tabs[1].containerid || '';
+ // 处理外部链接
+ temp = temp.replace(/https:\/\/weibo\.cn\/sinaurl\/.*?&u=(http.*?")/g, function (match, p1) {
+ return decodeURIComponent(p1);
+ });
- request.get({
- url: `https://m.weibo.cn/api/container/getIndex?type=uid&value=${uid}&containerid=${containerid}`,
- headers: {
- 'User-Agent': mix.ua,
- 'Referer': `https://m.weibo.cn/u/${uid}`
- },
- }, function (err, httpResponse, body) {
- let data;
- try {
- data = JSON.parse(body);
- }
- catch (e) {
- data = {};
- }
+ // 处理转发的微博
+ if (status.retweeted_status) {
+ // 当转发的微博被删除时user为null
+ if (status.retweeted_status.user) {
+ temp += `转发 @${status.retweeted_status.user.screen_name}: `;
+ }
+ // 插入转发的微博
+ temp += format(status.retweeted_status);
+ }
- // 格式化每条微博的HTML
- function format (status) {
- // 长文章的处理
- let temp = status.longText ? status.longText.longTextContent.replace(/\n/g, '
') : status.text;
- // 表情图标转换为文字
- temp = temp.replace(/
<\/span>/g, '$1');
- // 去掉外部链接的图标
- temp = temp.replace(/
<\/span><\/i>/g, '');
- // 去掉多余无意义的标签
- temp = temp.replace(//g, '');
- // 最后插入两个空行,让转发的微博排版更加美观一些
- temp += '
';
+ // 添加微博配图
+ if (status.pics) {
+ status.pics.forEach(function (item) {
+ temp += '
';
+ });
+ }
+ return temp;
+}
- // 处理外部链接
- temp = temp.replace(/https:\/\/weibo\.cn\/sinaurl\/.*?&u=(http.*?")/g, function (match, p1) {
- return decodeURIComponent(p1);
- });
+module.exports = async (ctx, next) => {
+ const uid = ctx.params.uid;
- // 处理转发的微博
- if (status.retweeted_status) {
- // 当转发的微博被删除时user为null
- if (status.retweeted_status.user) {
- temp += `转发 @${status.retweeted_status.user.screen_name}: `;
- }
- // 插入转发的微博
- temp += format(status.retweeted_status);
- }
-
- // 添加微博配图
- if (status.pics) {
- status.pics.forEach(function (item) {
- temp += '
';
- });
- }
- return temp;
- }
-
- const html = art(path.resolve(__dirname, '../../views/rss.art'), {
- title: `${name}的微博`,
- link: `http://weibo.com/${uid}/`,
- description: `${name}的微博`,
- lastBuildDate: new Date().toUTCString(),
- item: data.data.cards.filter((item) => item.mblog && !item.mblog.isTop).map((item) => {
- const title = item.mblog.text.replace(/<.*?>/g, '');
- return {
- title: title.length > 24 ? title.slice(0, 24) + '...' : title,
- description: format(item.mblog),
- pubDate: new Date(item.mblog.created_at.length === 5 ? `${new Date().getFullYear()}-${item.mblog.created_at}` : item.mblog.created_at).toUTCString(),
- link: `https://weibo.com/${uid}/${item.mblog.bid}`
- };
- }),
- });
- callback(html);
- });
- });
+ const containerResponse = await axios({
+ method: 'get',
+ url: `https://m.weibo.cn/api/container/getIndex?type=uid&value=${uid}`,
+ headers: {
+ 'User-Agent': config.ua,
+ 'Referer': 'https://m.weibo.cn/'
}
});
+ const name = containerResponse.data.data.userInfo.screen_name;
+ const containerid = containerResponse.data.data.tabsInfo.tabs[1].containerid;
+
+ const response = await axios({
+ method: 'get',
+ url: `https://m.weibo.cn/api/container/getIndex?type=uid&value=${uid}&containerid=${containerid}`,
+ headers: {
+ 'User-Agent': config.ua,
+ 'Referer': `https://m.weibo.cn/u/${uid}`
+ }
+ });
+
+ ctx.body = art(path.resolve(__dirname, '../../views/rss.art'), {
+ title: `${name}的微博`,
+ link: `http://weibo.com/${uid}/`,
+ description: `${name}的微博`,
+ lastBuildDate: new Date().toUTCString(),
+ item: response.data.data.cards.filter((item) => item.mblog && !item.mblog.isTop).map((item) => {
+ const title = item.mblog.text.replace(/<.*?>/g, '');
+ return {
+ title: title.length > 24 ? title.slice(0, 24) + '...' : title,
+ description: format(item.mblog),
+ pubDate: new Date(item.mblog.created_at.length === 5 ? `${new Date().getFullYear()}-${item.mblog.created_at}` : item.mblog.created_at).toUTCString(),
+ link: `https://weibo.com/${uid}/${item.mblog.bid}`
+ };
+ }),
+ });
+
+ next();
};
\ No newline at end of file
diff --git a/routes/zhihu/collection.js b/routes/zhihu/collection.js
index 09c39b95ef..d232daefa9 100644
--- a/routes/zhihu/collection.js
+++ b/routes/zhihu/collection.js
@@ -1,42 +1,39 @@
-const request = require('request');
+const axios = require('axios');
const art = require('art-template');
const path = require('path');
const cheerio = require('cheerio');
-const base = require('../base');
-const mix = require('../../utils/mix');
+const config = require('../../config');
-module.exports = (req, res) => {
- const id = req.params.id;
+module.exports = async (ctx, next) => {
+ const id = ctx.params.id;
- base({
- req: req,
- res: res,
- getHTML: (callback) => {
- request.get({
- url: `https://www.zhihu.com/collection/${id}`,
- headers: {
- 'User-Agent': mix.ua,
- 'Referer': `https://www.zhihu.com/collection/${id}`
- }
- }, (err, httpResponse, body) => {
- const $ = cheerio.load(body);
- const list = $('div.zm-item');
- const html = art(path.resolve(__dirname, '../../views/rss.art'), {
- title: $('title').text(),
- link: `https://www.zhihu.com/collection/${id}`,
- description: `${$('#zh-fav-head-description').text()}`,
- lastBuildDate: new Date().toUTCString(),
- item: list && list.map((index, item) => {
- item = $(item);
- return {
- title: item.find('.zm-item-title a').text(),
- description: `内容:${item.find('textarea').text()}`,
- link: `https://www.zhihu.com${item.find('.zm-item-title a').attr('href')}`
- };
- }).get(),
- });
- callback(html);
- });
+ const response = await axios({
+ method: 'get',
+ url: `https://www.zhihu.com/collection/${id}`,
+ headers: {
+ 'User-Agent': config.ua,
+ 'Referer': `https://www.zhihu.com/collection/${id}`
}
});
+
+ const data = response.data;
+ const $ = cheerio.load(data);
+ const list = $('div.zm-item');
+
+ ctx.body = art(path.resolve(__dirname, '../../views/rss.art'), {
+ title: $('title').text(),
+ link: `https://www.zhihu.com/collection/${id}`,
+ description: `${$('#zh-fav-head-description').text()}`,
+ lastBuildDate: new Date().toUTCString(),
+ item: list && list.map((index, item) => {
+ item = $(item);
+ return {
+ title: item.find('.zm-item-title a').text(),
+ description: `内容:${item.find('textarea').text()}`,
+ link: `https://www.zhihu.com${item.find('.zm-item-title a').attr('href')}`
+ };
+ }).get(),
+ });
+
+ next();
};
\ No newline at end of file
diff --git a/routes/ziroom/room.js b/routes/ziroom/room.js
index eb46b6850b..b15b91626d 100644
--- a/routes/ziroom/room.js
+++ b/routes/ziroom/room.js
@@ -1,57 +1,46 @@
-const request = require('request');
+const axios = require('axios');
+const qs = require('querystring');
const art = require('art-template');
const path = require('path');
-const base = require('../base');
-const mix = require('../../utils/mix');
+const config = require('../../config');
-module.exports = (req, res) => {
- const city = req.params.city || 'sh';
- const keyword = req.params.keyword || '';
- const iswhole = req.params.iswhole || 0;
- const room = req.params.room || 1;
+module.exports = async (ctx, next) => {
+ const city = ctx.params.city || 'sh';
+ const keyword = ctx.params.keyword || '';
+ const iswhole = ctx.params.iswhole || 0;
+ const room = ctx.params.room || 1;
const domain = `${city === 'bj' ? '' : city + '.'}m.ziroom.com`;
- base({
- req: req,
- res: res,
- getHTML: (callback) => {
- request.post({
- url: `http://${domain}/list/ajax-get-data`,
- headers: {
- 'User-Agent': mix.ua,
- 'Referer': `http://${domain}/${city.toUpperCase()}/search.html`
- },
- form: {
- 'recent_money': 0,
- 'sort': 0,
- 'is_whole': iswhole,
- 'room': room,
- 'key_word': keyword,
- 'step': 0
- }
- }, (err, httpResponse, body) => {
- let data;
- try {
- data = JSON.parse(body);
- }
- catch (e) {
- data = {};
- }
- const result = data.data || [];
-
- const html = art(path.resolve(__dirname, '../../views/rss.art'), {
- title: `自如的${keyword}${iswhole ? '整租' : '合租'}${room}室房源`,
- link: `http://${domain}`,
- description: `自如的${keyword}${iswhole ? '整租' : '合租'}${room}室房源`,
- lastBuildDate: new Date().toUTCString(),
- item: result && result.map((item) => ({
- title: item.title,
- description: `${item.room_name}
`,
- link: `http://${domain}/${city.toUpperCase()}/room/${item.id}.html`
- })),
- });
- callback(html);
- });
- }
+ const response = await axios({
+ method: 'post',
+ url: `http://${domain}/list/ajax-get-data`,
+ headers: {
+ 'User-Agent': config.ua,
+ 'Referer': `http://${domain}/${city.toUpperCase()}/search.html`
+ },
+ data: qs.stringify({
+ 'recent_money': 0,
+ 'sort': 0,
+ 'is_whole': iswhole,
+ 'room': room,
+ 'key_word': keyword,
+ 'step': 0
+ }),
});
+
+ const data = response.data.data;
+
+ ctx.body = art(path.resolve(__dirname, '../../views/rss.art'), {
+ title: `自如的${keyword}${iswhole ? '整租' : '合租'}${room}室房源`,
+ link: `http://${domain}`,
+ description: `自如的${keyword}${iswhole ? '整租' : '合租'}${room}室房源`,
+ lastBuildDate: new Date().toUTCString(),
+ item: data.map((item) => ({
+ title: item.title,
+ description: `${item.room_name}
`,
+ link: `http://${domain}/${city.toUpperCase()}/room/${item.id}.html`
+ })),
+ });
+
+ next();
};
\ No newline at end of file
diff --git a/utils/mix.js b/utils/mix.js
deleted file mode 100644
index 5b3daa21b9..0000000000
--- a/utils/mix.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = {
- getIp: (req) => req.headers['x-forwarded-for'] ||
- req.connection.remoteAddress ||
- req.socket.remoteAddress ||
- req.connection.socket.remoteAddress,
- ua: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',
-};
\ No newline at end of file
diff --git a/utils/redis.js b/utils/redis.js
deleted file mode 100644
index 2e28ced442..0000000000
--- a/utils/redis.js
+++ /dev/null
@@ -1,29 +0,0 @@
-const logger = require('./logger');
-const redis = require('redis');
-let client;
-if (process.env.REDIS_PORT_6379_TCP_ADDR && process.env.REDIS_PORT_6379_TCP_PORT) {
- client = redis.createClient({
- host: process.env.REDIS_PORT_6379_TCP_ADDR,
- port: process.env.REDIS_PORT_6379_TCP_PORT
- });
-}
-else {
- client = redis.createClient();
-}
-
-client.on('error', (err) => {
- logger.error('Redis Error ' + err);
-});
-
-module.exports = {
- set: (key, value, time = 5 * 60) => {
- client.set(key, value, 'EX', time);
- logger.info('Redis Set: ' + key);
- },
- get: (key, callback) => {
- client.get(key, (err, reply) => {
- callback(reply);
- });
- },
- client: client
-};
\ No newline at end of file
diff --git a/views/rss.art b/views/rss.art
index e3e37d813d..400cbb2b28 100644
--- a/views/rss.art
+++ b/views/rss.art
@@ -3,7 +3,7 @@
{{ link }}
-
+
RSSHub
i@html.love
zh-cn
diff --git a/yarn.lock b/yarn.lock
index d36657f119..0775192713 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -6,7 +6,7 @@
version "9.6.4"
resolved "https://registry.npmjs.org/@types/node/-/node-9.6.4.tgz#0ef7b4cfc3499881c81e0ea1ce61a23f6f4f5b42"
-accepts@~1.3.5:
+accepts@^1.2.2:
version "1.3.5"
resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2"
dependencies:
@@ -31,15 +31,6 @@ ajv-keywords@^2.1.0:
version "2.1.1"
resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
-ajv@^5.1.0:
- version "5.2.3"
- resolved "http://registry.npm.taobao.org/ajv/download/ajv-5.2.3.tgz#c06f598778c44c6b161abafe3466b81ad1814ed2"
- dependencies:
- co "^4.6.0"
- fast-deep-equal "^1.0.0"
- json-schema-traverse "^0.3.0"
- json-stable-stringify "^1.0.1"
-
ajv@^5.2.3, ajv@^5.3.0:
version "5.5.2"
resolved "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
@@ -71,16 +62,16 @@ ansi-styles@^3.2.1:
dependencies:
color-convert "^1.9.0"
+any-promise@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
+
argparse@^1.0.7:
version "1.0.10"
resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
dependencies:
sprintf-js "~1.0.2"
-array-flatten@1.1.1:
- version "1.1.1"
- resolved "http://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
-
array-union@^1.0.1:
version "1.0.2"
resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
@@ -109,31 +100,18 @@ art-template@4.12.2:
merge-source-map "^1.0.3"
source-map "^0.5.6"
-asn1@~0.2.3:
- version "0.2.3"
- resolved "http://registry.npm.taobao.org/asn1/download/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
-
-assert-plus@1.0.0, assert-plus@^1.0.0:
- version "1.0.0"
- resolved "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
-
async@^2.6.0:
version "2.6.0"
resolved "https://registry.npmjs.org/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4"
dependencies:
lodash "^4.14.0"
-asynckit@^0.4.0:
- version "0.4.0"
- resolved "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
-
-aws-sign2@~0.7.0:
- version "0.7.0"
- resolved "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
-
-aws4@^1.6.0:
- version "1.6.0"
- resolved "http://registry.npm.taobao.org/aws4/download/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
+axios@0.18.0:
+ version "0.18.0"
+ resolved "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz#32d53e4851efdc0a11993b6cd000789d70c05102"
+ dependencies:
+ follow-redirects "^1.3.0"
+ is-buffer "^1.1.5"
babel-code-frame@^6.22.0:
version "6.26.0"
@@ -147,43 +125,10 @@ balanced-match@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
-bcrypt-pbkdf@^1.0.0:
- version "1.0.1"
- resolved "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
- dependencies:
- tweetnacl "^0.14.3"
-
-body-parser@1.18.2:
- version "1.18.2"
- resolved "http://registry.npm.taobao.org/body-parser/download/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454"
- dependencies:
- bytes "3.0.0"
- content-type "~1.0.4"
- debug "2.6.9"
- depd "~1.1.1"
- http-errors "~1.6.2"
- iconv-lite "0.4.19"
- on-finished "~2.3.0"
- qs "6.5.1"
- raw-body "2.3.2"
- type-is "~1.6.15"
-
boolbase@~1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
-boom@4.x.x:
- version "4.3.1"
- resolved "http://registry.npm.taobao.org/boom/download/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31"
- dependencies:
- hoek "4.x.x"
-
-boom@5.x.x:
- version "5.2.0"
- resolved "http://registry.npm.taobao.org/boom/download/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02"
- dependencies:
- hoek "4.x.x"
-
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
@@ -195,10 +140,6 @@ buffer-from@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531"
-bytes@3.0.0:
- version "3.0.0"
- resolved "http://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
-
caller-path@^0.1.0:
version "0.1.0"
resolved "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
@@ -216,10 +157,6 @@ camel-case@3.0.x:
no-case "^2.2.0"
upper-case "^1.1.1"
-caseless@~0.12.0:
- version "0.12.0"
- resolved "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
-
chalk@^1.1.3:
version "1.1.3"
resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
@@ -273,6 +210,12 @@ cli-width@^2.0.0:
version "2.2.0"
resolved "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
+co-redis@2:
+ version "2.1.1"
+ resolved "https://registry.npmjs.org/co-redis/-/co-redis-2.1.1.tgz#8bc3717977c9ee5bfb6b28f39ae01bcf724d2dde"
+ dependencies:
+ es6-promisify "^4.1.0"
+
co@^4.6.0:
version "4.6.0"
resolved "http://registry.npm.taobao.org/co/download/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
@@ -319,12 +262,6 @@ colorspace@1.0.x:
color "0.8.x"
text-hex "0.0.x"
-combined-stream@^1.0.5, combined-stream@~1.0.5:
- version "1.0.5"
- resolved "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
- dependencies:
- delayed-stream "~1.0.0"
-
commander@2.15.x, commander@~2.15.0:
version "2.15.1"
resolved "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f"
@@ -342,23 +279,22 @@ concat-stream@^1.6.0:
readable-stream "^2.2.2"
typedarray "^0.0.6"
-content-disposition@0.5.2:
+content-disposition@~0.5.0:
version "0.5.2"
resolved "http://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
-content-type@~1.0.4:
+content-type@^1.0.0:
version "1.0.4"
resolved "http://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
-cookie-signature@1.0.6:
- version "1.0.6"
- resolved "http://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
+cookies@~0.7.0:
+ version "0.7.1"
+ resolved "https://registry.npmjs.org/cookies/-/cookies-0.7.1.tgz#7c8a615f5481c61ab9f16c833731bcb8f663b99b"
+ dependencies:
+ depd "~1.1.1"
+ keygrip "~1.0.2"
-cookie@0.3.1:
- version "0.3.1"
- resolved "http://registry.npm.taobao.org/cookie/download/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
-
-core-util-is@1.0.2, core-util-is@~1.0.0:
+core-util-is@~1.0.0:
version "1.0.2"
resolved "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
@@ -370,12 +306,6 @@ cross-spawn@^5.1.0:
shebang-command "^1.2.0"
which "^1.2.9"
-cryptiles@3.x.x:
- version "3.1.2"
- resolved "http://registry.npm.taobao.org/cryptiles/download/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe"
- dependencies:
- boom "5.x.x"
-
css-select@~1.2.0:
version "1.2.0"
resolved "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
@@ -389,24 +319,20 @@ css-what@2.1:
version "2.1.0"
resolved "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd"
-dashdash@^1.12.0:
- version "1.14.1"
- resolved "http://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
- dependencies:
- assert-plus "^1.0.0"
-
-debug@2.6.9:
- version "2.6.9"
- resolved "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
- dependencies:
- ms "2.0.0"
-
-debug@^3.1.0:
+debug@*, debug@^3.1.0:
version "3.1.0"
resolved "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
dependencies:
ms "2.0.0"
+debug@0.7.4:
+ version "0.7.4"
+ resolved "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39"
+
+deep-equal@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
+
deep-is@~0.1.3:
version "0.1.3"
resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
@@ -423,19 +349,19 @@ del@^2.0.2:
pinkie-promise "^2.0.0"
rimraf "^2.2.8"
-delayed-stream@~1.0.0:
+delegates@^1.0.0:
version "1.0.0"
- resolved "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
-depd@1.1.1, depd@~1.1.1:
- version "1.1.1"
- resolved "http://registry.npm.taobao.org/depd/download/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359"
-
-depd@~1.1.2:
+depd@^1.1.0, depd@~1.1.2:
version "1.1.2"
resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
-destroy@~1.0.4:
+depd@~1.1.1:
+ version "1.1.1"
+ resolved "http://registry.npm.taobao.org/depd/download/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359"
+
+destroy@^1.0.3:
version "1.0.4"
resolved "http://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
@@ -496,12 +422,6 @@ double-ended-queue@^2.1.0-0:
version "2.1.0-0"
resolved "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c"
-ecc-jsbn@~0.1.1:
- version "0.1.1"
- resolved "http://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
- dependencies:
- jsbn "~0.1.0"
-
ee-first@1.1.1:
version "1.1.1"
resolved "http://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
@@ -512,10 +432,6 @@ enabled@1.0.x:
dependencies:
env-variable "0.0.x"
-encodeurl@~1.0.2:
- version "1.0.2"
- resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
-
entities@^1.1.1, entities@~1.1.1:
version "1.1.1"
resolved "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
@@ -524,7 +440,21 @@ env-variable@0.0.x:
version "0.0.4"
resolved "https://registry.npmjs.org/env-variable/-/env-variable-0.0.4.tgz#0d6280cf507d84242befe35a512b5ae4be77c54e"
-escape-html@~1.0.3:
+error-inject@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/error-inject/-/error-inject-1.0.0.tgz#e2b3d91b54aed672f309d950d154850fa11d4f37"
+
+es6-promise@^3.2.1:
+ version "3.3.1"
+ resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613"
+
+es6-promisify@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npmjs.org/es6-promisify/-/es6-promisify-4.1.0.tgz#dbcc1a3e93fdb8e9e709744182b7d2080c03fdb3"
+ dependencies:
+ es6-promise "^3.2.1"
+
+escape-html@~1.0.1:
version "1.0.3"
resolved "http://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
@@ -632,49 +562,6 @@ esutils@^2.0.2:
version "2.0.2"
resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
-etag@~1.8.1:
- version "1.8.1"
- resolved "http://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
-
-express@^4.16.3:
- version "4.16.3"
- resolved "https://registry.npmjs.org/express/-/express-4.16.3.tgz#6af8a502350db3246ecc4becf6b5a34d22f7ed53"
- dependencies:
- accepts "~1.3.5"
- array-flatten "1.1.1"
- body-parser "1.18.2"
- content-disposition "0.5.2"
- content-type "~1.0.4"
- cookie "0.3.1"
- cookie-signature "1.0.6"
- debug "2.6.9"
- depd "~1.1.2"
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- etag "~1.8.1"
- finalhandler "1.1.1"
- fresh "0.5.2"
- merge-descriptors "1.0.1"
- methods "~1.1.2"
- on-finished "~2.3.0"
- parseurl "~1.3.2"
- path-to-regexp "0.1.7"
- proxy-addr "~2.0.3"
- qs "6.5.1"
- range-parser "~1.2.0"
- safe-buffer "5.1.1"
- send "0.16.2"
- serve-static "1.13.2"
- setprototypeof "1.1.0"
- statuses "~1.4.0"
- type-is "~1.6.16"
- utils-merge "1.0.1"
- vary "~1.1.2"
-
-extend@~3.0.1:
- version "3.0.1"
- resolved "http://registry.npm.taobao.org/extend/download/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
-
external-editor@^2.0.4:
version "2.2.0"
resolved "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5"
@@ -683,10 +570,6 @@ external-editor@^2.0.4:
iconv-lite "^0.4.17"
tmp "^0.0.33"
-extsprintf@1.3.0, extsprintf@^1.2.0:
- version "1.3.0"
- resolved "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
-
fast-deep-equal@^1.0.0:
version "1.0.0"
resolved "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff"
@@ -716,18 +599,6 @@ file-entry-cache@^2.0.0:
flat-cache "^1.2.1"
object-assign "^4.0.1"
-finalhandler@1.1.1:
- version "1.1.1"
- resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105"
- dependencies:
- debug "2.6.9"
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- on-finished "~2.3.0"
- parseurl "~1.3.2"
- statuses "~1.4.0"
- unpipe "~1.0.0"
-
flat-cache@^1.2.1:
version "1.3.0"
resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481"
@@ -737,23 +608,13 @@ flat-cache@^1.2.1:
graceful-fs "^4.1.2"
write "^0.2.1"
-forever-agent@~0.6.1:
- version "0.6.1"
- resolved "http://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
-
-form-data@~2.3.1:
- version "2.3.1"
- resolved "http://registry.npm.taobao.org/form-data/download/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf"
+follow-redirects@^1.3.0:
+ version "1.4.1"
+ resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.4.1.tgz#d8120f4518190f55aac65bb6fc7b85fcd666d6aa"
dependencies:
- asynckit "^0.4.0"
- combined-stream "^1.0.5"
- mime-types "^2.1.12"
+ debug "^3.1.0"
-forwarded@~0.1.2:
- version "0.1.2"
- resolved "http://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
-
-fresh@0.5.2:
+fresh@^0.5.2:
version "0.5.2"
resolved "http://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
@@ -765,12 +626,6 @@ functional-red-black-tree@^1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
-getpass@^0.1.1:
- version "0.1.7"
- resolved "http://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
- dependencies:
- assert-plus "^1.0.0"
-
glob@^7.0.3, glob@^7.0.5, glob@^7.1.2:
version "7.1.2"
resolved "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
@@ -801,17 +656,6 @@ graceful-fs@^4.1.2:
version "4.1.11"
resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
-har-schema@^2.0.0:
- version "2.0.0"
- resolved "http://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
-
-har-validator@~5.0.3:
- version "5.0.3"
- resolved "http://registry.npm.taobao.org/har-validator/download/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd"
- dependencies:
- ajv "^5.1.0"
- har-schema "^2.0.0"
-
has-ansi@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
@@ -822,23 +666,10 @@ has-flag@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
-hawk@~6.0.2:
- version "6.0.2"
- resolved "http://registry.npm.taobao.org/hawk/download/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038"
- dependencies:
- boom "4.x.x"
- cryptiles "3.x.x"
- hoek "4.x.x"
- sntp "2.x.x"
-
he@1.1.x:
version "1.1.1"
resolved "https://registry.npmjs.org/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
-hoek@4.x.x:
- version "4.2.0"
- resolved "http://registry.npm.taobao.org/hoek/download/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d"
-
html-minifier@^3.4.3:
version "3.5.13"
resolved "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.13.tgz#6bca6d533a7f18a476dc6aeb3d113071ab5c165e"
@@ -862,24 +693,23 @@ htmlparser2@^3.9.1:
inherits "^2.0.1"
readable-stream "^2.0.2"
-http-errors@1.6.2, http-errors@~1.6.2:
- version "1.6.2"
- resolved "http://registry.npm.taobao.org/http-errors/download/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736"
+http-assert@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.npmjs.org/http-assert/-/http-assert-1.3.0.tgz#a31a5cf88c873ecbb5796907d4d6f132e8c01e4a"
dependencies:
- depd "1.1.1"
+ deep-equal "~1.0.1"
+ http-errors "~1.6.1"
+
+http-errors@^1.2.8, http-errors@^1.3.1, http-errors@~1.6.1:
+ version "1.6.3"
+ resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
+ dependencies:
+ depd "~1.1.2"
inherits "2.0.3"
- setprototypeof "1.0.3"
- statuses ">= 1.3.1 < 2"
+ setprototypeof "1.1.0"
+ statuses ">= 1.4.0 < 2"
-http-signature@~1.2.0:
- version "1.2.0"
- resolved "http://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
- dependencies:
- assert-plus "^1.0.0"
- jsprim "^1.2.2"
- sshpk "^1.7.0"
-
-iconv-lite@0.4.19, iconv-lite@^0.4.17:
+iconv-lite@^0.4.17:
version "0.4.19"
resolved "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
@@ -921,14 +751,18 @@ inquirer@^3.0.6:
strip-ansi "^4.0.0"
through "^2.3.6"
-ipaddr.js@1.6.0:
- version "1.6.0"
- resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b"
+is-buffer@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
is-fullwidth-code-point@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+is-generator-function@^1.0.3:
+ version "1.0.7"
+ resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.7.tgz#d2132e529bb0000a7f80794d4bdf5cd5e5813522"
+
is-keyword-js@^1.0.3:
version "1.0.3"
resolved "https://registry.npmjs.org/is-keyword-js/-/is-keyword-js-1.0.3.tgz#ac30dcf35b671f4b27b17f5cb57235126021132d"
@@ -957,9 +791,9 @@ is-resolvable@^1.0.0:
version "1.1.0"
resolved "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
-is-typedarray@~1.0.0:
- version "1.0.0"
- resolved "http://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
isarray@~1.0.0:
version "1.0.0"
@@ -969,7 +803,7 @@ isexe@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
-isstream@0.1.x, isstream@~0.1.2:
+isstream@0.1.x:
version "0.1.2"
resolved "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
@@ -984,44 +818,87 @@ js-yaml@^3.9.1:
argparse "^1.0.7"
esprima "^4.0.0"
-jsbn@~0.1.0:
- version "0.1.1"
- resolved "http://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
-
json-schema-traverse@^0.3.0:
version "0.3.1"
resolved "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
-json-schema@0.2.3:
- version "0.2.3"
- resolved "http://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
-
json-stable-stringify-without-jsonify@^1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
-json-stable-stringify@^1.0.1:
- version "1.0.1"
- resolved "http://registry.npm.taobao.org/json-stable-stringify/download/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
+keygrip@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/keygrip/-/keygrip-1.0.2.tgz#ad3297c557069dea8bcfe7a4fa491b75c5ddeb91"
+
+koa-compose@^3.0.0:
+ version "3.2.1"
+ resolved "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz#a85ccb40b7d986d8e5a345b3a1ace8eabcf54de7"
dependencies:
- jsonify "~0.0.0"
+ any-promise "^1.1.0"
-json-stringify-safe@~5.0.1:
- version "5.0.1"
- resolved "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+koa-compose@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/koa-compose/-/koa-compose-4.0.0.tgz#2800a513d9c361ef0d63852b038e4f6f2d5a773c"
-jsonify@~0.0.0:
- version "0.0.0"
- resolved "http://registry.npm.taobao.org/jsonify/download/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
-
-jsprim@^1.2.2:
- version "1.4.1"
- resolved "http://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+koa-convert@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz#da40875df49de0539098d1700b50820cebcd21d0"
dependencies:
- assert-plus "1.0.0"
- extsprintf "1.3.0"
- json-schema "0.2.3"
- verror "1.10.0"
+ co "^4.6.0"
+ koa-compose "^3.0.0"
+
+koa-is-json@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz#273c07edcdcb8df6a2c1ab7d59ee76491451ec14"
+
+koa-redis-cache@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/koa-redis-cache/-/koa-redis-cache-3.0.0.tgz#e4c33ebc9d9c08fd50a669bca4573fabb4b2c584"
+ dependencies:
+ co-redis "2"
+ path-to-regexp "1"
+ readall "1"
+ redis "2"
+
+koa-router@7.4.0:
+ version "7.4.0"
+ resolved "https://registry.npmjs.org/koa-router/-/koa-router-7.4.0.tgz#aee1f7adc02d5cb31d7d67465c9eacc825e8c5e0"
+ dependencies:
+ debug "^3.1.0"
+ http-errors "^1.3.1"
+ koa-compose "^3.0.0"
+ methods "^1.0.1"
+ path-to-regexp "^1.1.1"
+ urijs "^1.19.0"
+
+koa@2.5.0:
+ version "2.5.0"
+ resolved "https://registry.npmjs.org/koa/-/koa-2.5.0.tgz#b0fbe1e195e43b27588a04fd0be0ddaeca2c154c"
+ dependencies:
+ accepts "^1.2.2"
+ content-disposition "~0.5.0"
+ content-type "^1.0.0"
+ cookies "~0.7.0"
+ debug "*"
+ delegates "^1.0.0"
+ depd "^1.1.0"
+ destroy "^1.0.3"
+ error-inject "~1.0.0"
+ escape-html "~1.0.1"
+ fresh "^0.5.2"
+ http-assert "^1.1.0"
+ http-errors "^1.2.8"
+ is-generator-function "^1.0.3"
+ koa-compose "^4.0.0"
+ koa-convert "^1.2.0"
+ koa-is-json "^1.0.0"
+ mime-types "^2.0.7"
+ on-finished "^2.1.0"
+ only "0.0.2"
+ parseurl "^1.3.0"
+ statuses "^1.2.0"
+ type-is "^1.5.5"
+ vary "^1.0.0"
kuler@0.0.x:
version "0.0.0"
@@ -1062,44 +939,26 @@ media-typer@0.3.0:
version "0.3.0"
resolved "http://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
-merge-descriptors@1.0.1:
- version "1.0.1"
- resolved "http://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
-
merge-source-map@^1.0.3:
version "1.1.0"
resolved "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646"
dependencies:
source-map "^0.6.1"
-methods@~1.1.2:
+methods@^1.0.1:
version "1.1.2"
resolved "http://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
-mime-db@~1.30.0:
- version "1.30.0"
- resolved "http://registry.npm.taobao.org/mime-db/download/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01"
-
mime-db@~1.33.0:
version "1.33.0"
resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db"
-mime-types@^2.1.12, mime-types@~2.1.15, mime-types@~2.1.17:
- version "2.1.17"
- resolved "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a"
- dependencies:
- mime-db "~1.30.0"
-
-mime-types@~2.1.18:
+mime-types@^2.0.7, mime-types@~2.1.18:
version "2.1.18"
resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8"
dependencies:
mime-db "~1.33.0"
-mime@1.4.1:
- version "1.4.1"
- resolved "http://registry.npm.taobao.org/mime/download/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
-
mimic-fn@^1.0.0:
version "1.2.0"
resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
@@ -1148,15 +1007,11 @@ nth-check@~1.0.1:
dependencies:
boolbase "~1.0.0"
-oauth-sign@~0.8.2:
- version "0.8.2"
- resolved "http://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
-
object-assign@^4.0.1:
version "4.1.1"
resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
-on-finished@~2.3.0:
+on-finished@^2.1.0:
version "2.3.0"
resolved "http://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
dependencies:
@@ -1178,6 +1033,10 @@ onetime@^2.0.0:
dependencies:
mimic-fn "^1.0.0"
+only@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.npmjs.org/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4"
+
optionator@^0.8.1, optionator@^0.8.2:
version "0.8.2"
resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
@@ -1205,7 +1064,7 @@ parse5@^3.0.1:
dependencies:
"@types/node" "*"
-parseurl@~1.3.2:
+parseurl@^1.3.0:
version "1.3.2"
resolved "http://registry.npm.taobao.org/parseurl/download/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
@@ -1217,13 +1076,11 @@ path-is-inside@^1.0.1, path-is-inside@^1.0.2:
version "1.0.2"
resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
-path-to-regexp@0.1.7:
- version "0.1.7"
- resolved "http://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
-
-performance-now@^2.1.0:
- version "2.1.0"
- resolved "http://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+path-to-regexp@1, path-to-regexp@^1.1.1:
+ version "1.7.0"
+ resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d"
+ dependencies:
+ isarray "0.0.1"
pify@^2.0.0:
version "2.3.0"
@@ -1255,38 +1112,10 @@ progress@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f"
-proxy-addr@~2.0.3:
- version "2.0.3"
- resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341"
- dependencies:
- forwarded "~0.1.2"
- ipaddr.js "1.6.0"
-
pseudomap@^1.0.2:
version "1.0.2"
resolved "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
-punycode@^1.4.1:
- version "1.4.1"
- resolved "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
-
-qs@6.5.1, qs@~6.5.1:
- version "6.5.1"
- resolved "http://registry.npm.taobao.org/qs/download/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8"
-
-range-parser@~1.2.0:
- version "1.2.0"
- resolved "http://registry.npm.taobao.org/range-parser/download/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
-
-raw-body@2.3.2:
- version "2.3.2"
- resolved "http://registry.npm.taobao.org/raw-body/download/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89"
- dependencies:
- bytes "3.0.0"
- http-errors "1.6.2"
- iconv-lite "0.4.19"
- unpipe "1.0.0"
-
readable-stream@^2.0.2, readable-stream@^2.2.2:
version "2.3.6"
resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
@@ -1299,6 +1128,12 @@ readable-stream@^2.0.2, readable-stream@^2.2.2:
string_decoder "~1.1.1"
util-deprecate "~1.0.1"
+readall@1:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/readall/-/readall-1.0.0.tgz#8b4bfc412e687dbfbb00e0a6ede7e3a0f001b7c7"
+ dependencies:
+ debug "0.7.4"
+
redis-commands@^1.2.0:
version "1.3.5"
resolved "https://registry.npmjs.org/redis-commands/-/redis-commands-1.3.5.tgz#4495889414f1e886261180b1442e7295602d83a2"
@@ -1307,7 +1142,7 @@ redis-parser@^2.6.0:
version "2.6.0"
resolved "https://registry.npmjs.org/redis-parser/-/redis-parser-2.6.0.tgz#52ed09dacac108f1a631c07e9b69941e7a19504b"
-redis@2.8.0:
+redis@2:
version "2.8.0"
resolved "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz#202288e3f58c49f6079d97af7a10e1303ae14b02"
dependencies:
@@ -1323,33 +1158,6 @@ relateurl@0.2.x:
version "0.2.7"
resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
-request@^2.85.0:
- version "2.85.0"
- resolved "https://registry.npmjs.org/request/-/request-2.85.0.tgz#5a03615a47c61420b3eb99b7dba204f83603e1fa"
- dependencies:
- aws-sign2 "~0.7.0"
- aws4 "^1.6.0"
- caseless "~0.12.0"
- combined-stream "~1.0.5"
- extend "~3.0.1"
- forever-agent "~0.6.1"
- form-data "~2.3.1"
- har-validator "~5.0.3"
- hawk "~6.0.2"
- http-signature "~1.2.0"
- is-typedarray "~1.0.0"
- isstream "~0.1.2"
- json-stringify-safe "~5.0.1"
- mime-types "~2.1.17"
- oauth-sign "~0.8.2"
- performance-now "^2.1.0"
- qs "~6.5.1"
- safe-buffer "^5.1.1"
- stringstream "~0.0.5"
- tough-cookie "~2.3.3"
- tunnel-agent "^0.6.0"
- uuid "^3.1.0"
-
require-uncached@^1.0.3:
version "1.0.3"
resolved "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
@@ -1390,7 +1198,7 @@ rx-lite@*, rx-lite@^4.0.8:
version "4.0.8"
resolved "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
-safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.1"
resolved "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
@@ -1398,37 +1206,6 @@ semver@^5.3.0:
version "5.5.0"
resolved "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
-send@0.16.2:
- version "0.16.2"
- resolved "https://registry.npmjs.org/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1"
- dependencies:
- debug "2.6.9"
- depd "~1.1.2"
- destroy "~1.0.4"
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- etag "~1.8.1"
- fresh "0.5.2"
- http-errors "~1.6.2"
- mime "1.4.1"
- ms "2.0.0"
- on-finished "~2.3.0"
- range-parser "~1.2.0"
- statuses "~1.4.0"
-
-serve-static@1.13.2:
- version "1.13.2"
- resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1"
- dependencies:
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- parseurl "~1.3.2"
- send "0.16.2"
-
-setprototypeof@1.0.3:
- version "1.0.3"
- resolved "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04"
-
setprototypeof@1.1.0:
version "1.1.0"
resolved "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
@@ -1453,12 +1230,6 @@ slice-ansi@1.0.0:
dependencies:
is-fullwidth-code-point "^2.0.0"
-sntp@2.x.x:
- version "2.0.2"
- resolved "http://registry.npm.taobao.org/sntp/download/sntp-2.0.2.tgz#5064110f0af85f7cfdb7d6b67a40028ce52b4b2b"
- dependencies:
- hoek "4.x.x"
-
source-map@0.5.x, source-map@^0.5.6:
version "0.5.7"
resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
@@ -1471,31 +1242,13 @@ sprintf-js@~1.0.2:
version "1.0.3"
resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
-sshpk@^1.7.0:
- version "1.13.1"
- resolved "http://registry.npm.taobao.org/sshpk/download/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3"
- dependencies:
- asn1 "~0.2.3"
- assert-plus "^1.0.0"
- dashdash "^1.12.0"
- getpass "^0.1.1"
- optionalDependencies:
- bcrypt-pbkdf "^1.0.0"
- ecc-jsbn "~0.1.1"
- jsbn "~0.1.0"
- tweetnacl "~0.14.0"
-
stack-trace@0.0.x:
version "0.0.10"
resolved "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
-"statuses@>= 1.3.1 < 2":
- version "1.3.1"
- resolved "http://registry.npm.taobao.org/statuses/download/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
-
-statuses@~1.4.0:
- version "1.4.0"
- resolved "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087"
+"statuses@>= 1.4.0 < 2", statuses@^1.2.0:
+ version "1.5.0"
+ resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
string-width@^2.1.0, string-width@^2.1.1:
version "2.1.1"
@@ -1510,10 +1263,6 @@ string_decoder@~1.1.1:
dependencies:
safe-buffer "~5.1.0"
-stringstream@~0.0.5:
- version "0.0.5"
- resolved "http://registry.npm.taobao.org/stringstream/download/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
-
strip-ansi@^3.0.0:
version "3.0.1"
resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
@@ -1569,40 +1318,17 @@ tmp@^0.0.33:
dependencies:
os-tmpdir "~1.0.2"
-tough-cookie@~2.3.3:
- version "2.3.3"
- resolved "http://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561"
- dependencies:
- punycode "^1.4.1"
-
triple-beam@^1.0.1:
version "1.1.0"
resolved "https://registry.npmjs.org/triple-beam/-/triple-beam-1.1.0.tgz#2ac387c8c4bd04bd26c61df891a6079f8592fe10"
-tunnel-agent@^0.6.0:
- version "0.6.0"
- resolved "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
- dependencies:
- safe-buffer "^5.0.1"
-
-tweetnacl@^0.14.3, tweetnacl@~0.14.0:
- version "0.14.5"
- resolved "http://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
-
type-check@~0.3.2:
version "0.3.2"
resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
dependencies:
prelude-ls "~1.1.2"
-type-is@~1.6.15:
- version "1.6.15"
- resolved "http://registry.npm.taobao.org/type-is/download/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410"
- dependencies:
- media-typer "0.3.0"
- mime-types "~2.1.15"
-
-type-is@~1.6.16:
+type-is@^1.5.5:
version "1.6.16"
resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194"
dependencies:
@@ -1620,38 +1346,22 @@ uglify-js@3.3.x:
commander "~2.15.0"
source-map "~0.6.1"
-unpipe@1.0.0, unpipe@~1.0.0:
- version "1.0.0"
- resolved "http://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
-
upper-case@^1.1.1:
version "1.1.3"
resolved "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
+urijs@^1.19.0:
+ version "1.19.1"
+ resolved "https://registry.npmjs.org/urijs/-/urijs-1.19.1.tgz#5b0ff530c0cbde8386f6342235ba5ca6e995d25a"
+
util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
-utils-merge@1.0.1:
- version "1.0.1"
- resolved "http://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
-
-uuid@^3.1.0:
- version "3.1.0"
- resolved "http://registry.npm.taobao.org/uuid/download/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04"
-
-vary@~1.1.2:
+vary@^1.0.0:
version "1.1.2"
resolved "http://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
-verror@1.10.0:
- version "1.10.0"
- resolved "http://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
- dependencies:
- assert-plus "^1.0.0"
- core-util-is "1.0.2"
- extsprintf "^1.2.0"
-
which@^1.2.9:
version "1.3.0"
resolved "https://registry.npmjs.org/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"