[\s\S]*?
[\s\S]*?
]*>([^<]+?)<\/a>[\s\S]*?]*>([^<]+?)<\/a>/g;
+ let result,
+ playlists = [];
+ while ((result = pattern.exec(response.body)) != null) {
+ playlists.push({
+ creator: {
+ userId: result[4].slice('/user/home?id='.length),
+ nickname: result[5],
+ },
+ coverImgUrl: result[1].slice(0, -'?param=50y50'.length),
+ name: result[3],
+ id: result[2].slice('/playlist?id='.length),
+ });
+ }
+ response.body = { code: 200, playlists: playlists };
+ return response;
+ } catch (err) {
+ response.status = 500;
+ response.body = { code: 500, msg: err.stack };
+ return Promise.reject(response);
+ }
+ });
+};
diff --git a/netease_api/module/resource_like.js b/netease_api/module/resource_like.js
new file mode 100644
index 0000000..3d289ba
--- /dev/null
+++ b/netease_api/module/resource_like.js
@@ -0,0 +1,29 @@
+// 点赞与取消点赞资源
+
+module.exports = (query, request) => {
+ query.cookie.os = 'pc';
+ query.t = query.t == 1 ? 'like' : 'unlike';
+ query.type = {
+ 1: 'R_MV_5_', // MV
+ 4: 'A_DJ_1_', // 电台
+ 5: 'R_VI_62_', // 视频
+ 6: 'A_EV_2_',
+ }[query.type];
+ const data = {
+ threadId: query.type + query.id,
+ };
+ if (query.type === 'A_EV_2_') {
+ data.threadId = query.threadId;
+ }
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/resource/${query.t}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/scrobble.js b/netease_api/module/scrobble.js
new file mode 100644
index 0000000..5b6d3e7
--- /dev/null
+++ b/netease_api/module/scrobble.js
@@ -0,0 +1,27 @@
+// 听歌打卡
+
+module.exports = (query, request) => {
+ const data = {
+ logs: JSON.stringify([
+ {
+ action: 'play',
+ json: {
+ download: 0,
+ end: 'playend',
+ id: query.id,
+ sourceId: query.sourceid,
+ time: query.time,
+ type: 'song',
+ wifi: 0,
+ },
+ },
+ ]),
+ };
+
+ return request('POST', `https://music.163.com/weapi/feedback/weblog`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+};
diff --git a/netease_api/module/search.js b/netease_api/module/search.js
new file mode 100644
index 0000000..471d781
--- /dev/null
+++ b/netease_api/module/search.js
@@ -0,0 +1,16 @@
+// 搜索
+
+module.exports = (query, request) => {
+ const data = {
+ s: query.keywords,
+ type: query.type || 1, // 1: 单曲, 10: 专辑, 100: 歌手, 1000: 歌单, 1002: 用户, 1004: MV, 1006: 歌词, 1009: 电台, 1014: 视频
+ limit: query.limit || 30,
+ offset: query.offset || 0,
+ };
+ return request('POST', `https://music.163.com/weapi/search/get`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+};
diff --git a/netease_api/module/search_default.js b/netease_api/module/search_default.js
new file mode 100644
index 0000000..c231d18
--- /dev/null
+++ b/netease_api/module/search_default.js
@@ -0,0 +1,16 @@
+// 默认搜索关键词
+
+module.exports = (query, request) => {
+ return request(
+ 'POST',
+ `https://interface3.music.163.com/eapi/search/defaultkeyword/get`,
+ {},
+ {
+ crypto: 'eapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ url: '/api/search/defaultkeyword/get',
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/search_hot.js b/netease_api/module/search_hot.js
new file mode 100644
index 0000000..dd6b6d4
--- /dev/null
+++ b/netease_api/module/search_hot.js
@@ -0,0 +1,14 @@
+// 热门搜索
+
+module.exports = (query, request) => {
+ const data = {
+ type: 1111,
+ };
+ return request('POST', `https://music.163.com/weapi/search/hot`, data, {
+ crypto: 'weapi',
+ ua: 'mobile',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+};
diff --git a/netease_api/module/search_hot_detail.js b/netease_api/module/search_hot_detail.js
new file mode 100644
index 0000000..3e869da
--- /dev/null
+++ b/netease_api/module/search_hot_detail.js
@@ -0,0 +1,15 @@
+// 热搜列表
+module.exports = (query, request) => {
+ const data = {};
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/hotsearchlist/get`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/search_multimatch.js b/netease_api/module/search_multimatch.js
new file mode 100644
index 0000000..6777178
--- /dev/null
+++ b/netease_api/module/search_multimatch.js
@@ -0,0 +1,19 @@
+// 多类型搜索
+
+module.exports = (query, request) => {
+ const data = {
+ type: query.type || 1,
+ s: query.keywords || '',
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/search/suggest/multimatch`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/search_suggest.js b/netease_api/module/search_suggest.js
new file mode 100644
index 0000000..6e6b9cc
--- /dev/null
+++ b/netease_api/module/search_suggest.js
@@ -0,0 +1,19 @@
+// 搜索建议
+
+module.exports = (query, request) => {
+ const data = {
+ s: query.keywords || '',
+ };
+ let type = query.type == 'mobile' ? 'keyword' : 'web';
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/search/suggest/` + type,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/send_playlist.js b/netease_api/module/send_playlist.js
new file mode 100644
index 0000000..15e9238
--- /dev/null
+++ b/netease_api/module/send_playlist.js
@@ -0,0 +1,17 @@
+// 私信歌单
+
+module.exports = (query, request) => {
+ query.cookie.os = 'pc';
+ const data = {
+ id: query.playlist,
+ type: 'playlist',
+ msg: query.msg,
+ userIds: '[' + query.user_ids + ']',
+ };
+ return request('POST', `https://music.163.com/weapi/msg/private/send`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+};
diff --git a/netease_api/module/send_text.js b/netease_api/module/send_text.js
new file mode 100644
index 0000000..72285d6
--- /dev/null
+++ b/netease_api/module/send_text.js
@@ -0,0 +1,16 @@
+// 私信
+
+module.exports = (query, request) => {
+ query.cookie.os = 'pc';
+ const data = {
+ type: 'text',
+ msg: query.msg,
+ userIds: '[' + query.user_ids + ']',
+ };
+ return request('POST', `https://music.163.com/weapi/msg/private/send`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+};
diff --git a/netease_api/module/setting.js b/netease_api/module/setting.js
new file mode 100644
index 0000000..d26ced6
--- /dev/null
+++ b/netease_api/module/setting.js
@@ -0,0 +1,11 @@
+// 设置
+
+module.exports = (query, request) => {
+ const data = {};
+ return request('POST', `https://music.163.com/api/user/setting`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+};
diff --git a/netease_api/module/share_resource.js b/netease_api/module/share_resource.js
new file mode 100644
index 0000000..cd8a3d0
--- /dev/null
+++ b/netease_api/module/share_resource.js
@@ -0,0 +1,20 @@
+// 分享歌曲到动态
+
+module.exports = (query, request) => {
+ const data = {
+ type: query.type || 'song', // song,playlist,mv,djprogram,djradio
+ msg: query.msg || '',
+ id: query.id || '',
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/share/friends/resource`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/simi_artist.js b/netease_api/module/simi_artist.js
new file mode 100644
index 0000000..3c079a8
--- /dev/null
+++ b/netease_api/module/simi_artist.js
@@ -0,0 +1,18 @@
+// 相似歌手
+
+module.exports = (query, request) => {
+ const data = {
+ artistid: query.id,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/discovery/simiArtist`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/simi_mv.js b/netease_api/module/simi_mv.js
new file mode 100644
index 0000000..bdf76a5
--- /dev/null
+++ b/netease_api/module/simi_mv.js
@@ -0,0 +1,13 @@
+// 相似MV
+
+module.exports = (query, request) => {
+ const data = {
+ mvid: query.mvid,
+ };
+ return request('POST', `https://music.163.com/weapi/discovery/simiMV`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+};
diff --git a/netease_api/module/simi_playlist.js b/netease_api/module/simi_playlist.js
new file mode 100644
index 0000000..dbb6bce
--- /dev/null
+++ b/netease_api/module/simi_playlist.js
@@ -0,0 +1,20 @@
+// 相似歌单
+
+module.exports = (query, request) => {
+ const data = {
+ songid: query.id,
+ limit: query.limit || 50,
+ offset: query.offset || 0,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/discovery/simiPlaylist`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/simi_song.js b/netease_api/module/simi_song.js
new file mode 100644
index 0000000..9cc1c4a
--- /dev/null
+++ b/netease_api/module/simi_song.js
@@ -0,0 +1,20 @@
+// 相似歌曲
+
+module.exports = (query, request) => {
+ const data = {
+ songid: query.id,
+ limit: query.limit || 50,
+ offset: query.offset || 0,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/v1/discovery/simiSong`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/simi_user.js b/netease_api/module/simi_user.js
new file mode 100644
index 0000000..607277b
--- /dev/null
+++ b/netease_api/module/simi_user.js
@@ -0,0 +1,20 @@
+// 相似用户
+
+module.exports = (query, request) => {
+ const data = {
+ songid: query.id,
+ limit: query.limit || 50,
+ offset: query.offset || 0,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/discovery/simiUser`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/song_detail.js b/netease_api/module/song_detail.js
new file mode 100644
index 0000000..92c72ef
--- /dev/null
+++ b/netease_api/module/song_detail.js
@@ -0,0 +1,15 @@
+// 歌曲详情
+
+module.exports = (query, request) => {
+ query.ids = query.ids.split(/\s*,\s*/);
+ const data = {
+ c: '[' + query.ids.map((id) => '{"id":' + id + '}').join(',') + ']',
+ ids: '[' + query.ids.join(',') + ']',
+ };
+ return request('POST', `https://music.163.com/weapi/v3/song/detail`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+};
diff --git a/netease_api/module/song_order_update.js b/netease_api/module/song_order_update.js
new file mode 100644
index 0000000..3fb6c8a
--- /dev/null
+++ b/netease_api/module/song_order_update.js
@@ -0,0 +1,22 @@
+// 更新歌曲顺序
+
+module.exports = (query, request) => {
+ const data = {
+ pid: query.pid,
+ trackIds: query.ids,
+ op: 'update',
+ };
+
+ return request(
+ 'POST',
+ `http://interface.music.163.com/api/playlist/manipulate/tracks`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ url: '/api/playlist/desc/update',
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/song_url.js b/netease_api/module/song_url.js
new file mode 100644
index 0000000..e2a55ae
--- /dev/null
+++ b/netease_api/module/song_url.js
@@ -0,0 +1,25 @@
+// 歌曲链接
+
+const crypto = require('crypto');
+
+module.exports = (query, request) => {
+ if (!('MUSIC_U' in query.cookie))
+ query.cookie._ntes_nuid = crypto.randomBytes(16).toString('hex');
+ query.cookie.os = 'pc';
+ const data = {
+ ids: '[' + query.id + ']',
+ br: parseInt(query.br || 999000),
+ };
+ return request(
+ 'POST',
+ `https://interface3.music.163.com/eapi/song/enhance/player/url`,
+ data,
+ {
+ crypto: 'eapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ url: '/api/song/enhance/player/url',
+ },
+ );
+};
diff --git a/netease_api/module/top_album.js b/netease_api/module/top_album.js
new file mode 100644
index 0000000..2812f72
--- /dev/null
+++ b/netease_api/module/top_album.js
@@ -0,0 +1,27 @@
+// 新碟上架
+
+module.exports = (query, request) => {
+ const date = new Date();
+
+ const data = {
+ area: query.area || 'ALL', // //ALL:全部,ZH:华语,EA:欧美,KR:韩国,JP:日本
+ limit: query.limit || 50,
+ offset: query.offset || 0,
+ type: query.type || 'new',
+ year: query.year || date.getFullYear(),
+ month: query.month || date.getMonth() + 1,
+ total: false,
+ rcmd: true,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/discovery/new/albums/area`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/top_artists.js b/netease_api/module/top_artists.js
new file mode 100644
index 0000000..bd3dbad
--- /dev/null
+++ b/netease_api/module/top_artists.js
@@ -0,0 +1,15 @@
+// 热门歌手
+
+module.exports = (query, request) => {
+ const data = {
+ limit: query.limit || 50,
+ offset: query.offset || 0,
+ total: true,
+ };
+ return request('POST', `https://music.163.com/weapi/artist/top`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+};
diff --git a/netease_api/module/top_list.js b/netease_api/module/top_list.js
new file mode 100644
index 0000000..5ab262b
--- /dev/null
+++ b/netease_api/module/top_list.js
@@ -0,0 +1,30 @@
+// 排行榜
+module.exports = (query, request) => {
+ query.cookie.os = 'pc';
+ if (query.idx) {
+ return Promise.resolve({
+ status: 500,
+ body: {
+ code: 500,
+ msg: '不支持此方式调用,只支持id调用',
+ },
+ });
+ }
+
+ const data = {
+ id: query.id,
+ n: '500',
+ s: '0',
+ };
+ return request(
+ 'POST',
+ `https://interface3.music.163.com/api/playlist/v4/detail`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/top_mv.js b/netease_api/module/top_mv.js
new file mode 100644
index 0000000..4c77888
--- /dev/null
+++ b/netease_api/module/top_mv.js
@@ -0,0 +1,16 @@
+// MV排行榜
+
+module.exports = (query, request) => {
+ const data = {
+ area: query.area || '',
+ limit: query.limit || 30,
+ offset: query.offset || 0,
+ total: true,
+ };
+ return request('POST', `https://music.163.com/weapi/mv/toplist`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+};
diff --git a/netease_api/module/top_playlist.js b/netease_api/module/top_playlist.js
new file mode 100644
index 0000000..7a2e5e0
--- /dev/null
+++ b/netease_api/module/top_playlist.js
@@ -0,0 +1,17 @@
+// 分类歌单
+
+module.exports = (query, request) => {
+ const data = {
+ cat: query.cat || '全部', // 全部,华语,欧美,日语,韩语,粤语,小语种,流行,摇滚,民谣,电子,舞曲,说唱,轻音乐,爵士,乡村,R&B/Soul,古典,民族,英伦,金属,朋克,蓝调,雷鬼,世界音乐,拉丁,另类/独立,New Age,古风,后摇,Bossa Nova,清晨,夜晚,学习,工作,午休,下午茶,地铁,驾车,运动,旅行,散步,酒吧,怀旧,清新,浪漫,性感,伤感,治愈,放松,孤独,感动,兴奋,快乐,安静,思念,影视原声,ACG,儿童,校园,游戏,70后,80后,90后,网络歌曲,KTV,经典,翻唱,吉他,钢琴,器乐,榜单,00后
+ order: query.order || 'hot', // hot,new
+ limit: query.limit || 50,
+ offset: query.offset || 0,
+ total: true,
+ };
+ return request('POST', `https://music.163.com/weapi/playlist/list`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+};
diff --git a/netease_api/module/top_playlist_highquality.js b/netease_api/module/top_playlist_highquality.js
new file mode 100644
index 0000000..8eb5b88
--- /dev/null
+++ b/netease_api/module/top_playlist_highquality.js
@@ -0,0 +1,21 @@
+// 精品歌单
+
+module.exports = (query, request) => {
+ const data = {
+ cat: query.cat || '全部', // 全部,华语,欧美,韩语,日语,粤语,小语种,运动,ACG,影视原声,流行,摇滚,后摇,古风,民谣,轻音乐,电子,器乐,说唱,古典,爵士
+ limit: query.limit || 50,
+ lasttime: query.before || 0, // 歌单updateTime
+ total: true,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/playlist/highquality/list`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/top_song.js b/netease_api/module/top_song.js
new file mode 100644
index 0000000..a6d7d54
--- /dev/null
+++ b/netease_api/module/top_song.js
@@ -0,0 +1,21 @@
+// 新歌速递
+
+module.exports = (query, request) => {
+ const data = {
+ areaId: query.type || 0, // 全部:0 华语:7 欧美:96 日本:8 韩国:16
+ // limit: query.limit || 100,
+ // offset: query.offset || 0,
+ total: true,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/v1/discovery/new/songs`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/toplist.js b/netease_api/module/toplist.js
new file mode 100644
index 0000000..9239ba4
--- /dev/null
+++ b/netease_api/module/toplist.js
@@ -0,0 +1,15 @@
+// 所有榜单介绍
+
+module.exports = (query, request) => {
+ return request(
+ 'POST',
+ `https://music.163.com/api/toplist`,
+ {},
+ {
+ crypto: 'linuxapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/toplist_artist.js b/netease_api/module/toplist_artist.js
new file mode 100644
index 0000000..3a71147
--- /dev/null
+++ b/netease_api/module/toplist_artist.js
@@ -0,0 +1,16 @@
+// 歌手榜
+
+module.exports = (query, request) => {
+ const data = {
+ type: query.type || 1,
+ limit: 100,
+ offset: 0,
+ total: true,
+ };
+ return request('POST', `https://music.163.com/weapi/toplist/artist`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+};
diff --git a/netease_api/module/toplist_detail.js b/netease_api/module/toplist_detail.js
new file mode 100644
index 0000000..e3e442f
--- /dev/null
+++ b/netease_api/module/toplist_detail.js
@@ -0,0 +1,15 @@
+// 所有榜单内容摘要
+
+module.exports = (query, request) => {
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/toplist/detail`,
+ {},
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/user_account.js b/netease_api/module/user_account.js
new file mode 100644
index 0000000..f1bf505
--- /dev/null
+++ b/netease_api/module/user_account.js
@@ -0,0 +1,9 @@
+module.exports = (query, request) => {
+ const data = {};
+ return request('POST', `https://music.163.com/api/nuser/account/get`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+};
diff --git a/netease_api/module/user_audio.js b/netease_api/module/user_audio.js
new file mode 100644
index 0000000..43aa231
--- /dev/null
+++ b/netease_api/module/user_audio.js
@@ -0,0 +1,18 @@
+// 用户创建的电台
+
+module.exports = (query, request) => {
+ const data = {
+ userId: query.uid,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/djradio/get/byuser`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/user_binding.js b/netease_api/module/user_binding.js
new file mode 100644
index 0000000..787984f
--- /dev/null
+++ b/netease_api/module/user_binding.js
@@ -0,0 +1,14 @@
+module.exports = (query, request) => {
+ const data = {};
+ return request(
+ 'POST',
+ `https://music.163.com/api/v1/user/bindings/${query.uid}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/user_cloud.js b/netease_api/module/user_cloud.js
new file mode 100644
index 0000000..0f0aa8e
--- /dev/null
+++ b/netease_api/module/user_cloud.js
@@ -0,0 +1,14 @@
+// 云盘数据
+
+module.exports = (query, request) => {
+ const data = {
+ limit: query.limit || 30,
+ offset: query.offset || 0,
+ };
+ return request('POST', `https://music.163.com/weapi/v1/cloud/get`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+};
diff --git a/netease_api/module/user_cloud_del.js b/netease_api/module/user_cloud_del.js
new file mode 100644
index 0000000..ab42bfe
--- /dev/null
+++ b/netease_api/module/user_cloud_del.js
@@ -0,0 +1,13 @@
+// 云盘歌曲删除
+
+module.exports = (query, request) => {
+ const data = {
+ songIds: [query.id],
+ };
+ return request('POST', `https://music.163.com/weapi/cloud/del`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+};
diff --git a/netease_api/module/user_cloud_detail.js b/netease_api/module/user_cloud_detail.js
new file mode 100644
index 0000000..c41ff80
--- /dev/null
+++ b/netease_api/module/user_cloud_detail.js
@@ -0,0 +1,19 @@
+// 云盘数据详情
+
+module.exports = (query, request) => {
+ const id = query.id.replace(/\s/g, '').split(',');
+ const data = {
+ songIds: id,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/v1/cloud/get/byids`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/user_detail.js b/netease_api/module/user_detail.js
new file mode 100644
index 0000000..be14276
--- /dev/null
+++ b/netease_api/module/user_detail.js
@@ -0,0 +1,15 @@
+// 用户详情
+
+module.exports = (query, request) => {
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/v1/user/detail/${query.uid}`,
+ {},
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/user_dj.js b/netease_api/module/user_dj.js
new file mode 100644
index 0000000..78f9c2a
--- /dev/null
+++ b/netease_api/module/user_dj.js
@@ -0,0 +1,19 @@
+// 用户电台节目
+
+module.exports = (query, request) => {
+ const data = {
+ limit: query.limit || 30,
+ offset: query.offset || 0,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/dj/program/${query.uid}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/user_event.js b/netease_api/module/user_event.js
new file mode 100644
index 0000000..35a287c
--- /dev/null
+++ b/netease_api/module/user_event.js
@@ -0,0 +1,21 @@
+// 用户动态
+
+module.exports = (query, request) => {
+ const data = {
+ getcounts: true,
+ time: query.lasttime || -1,
+ limit: query.limit || 30,
+ total: false,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/event/get/${query.uid}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/user_followeds.js b/netease_api/module/user_followeds.js
new file mode 100644
index 0000000..14dc835
--- /dev/null
+++ b/netease_api/module/user_followeds.js
@@ -0,0 +1,21 @@
+// 关注TA的人(粉丝)
+
+module.exports = (query, request) => {
+ const data = {
+ userId: query.uid,
+ time: query.lasttime || -1,
+ limit: query.limit || 30,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/eapi/user/getfolloweds/${query.uid}`,
+ data,
+ {
+ crypto: 'eapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ url: '/api/user/getfolloweds',
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/user_follows.js b/netease_api/module/user_follows.js
new file mode 100644
index 0000000..3e12a21
--- /dev/null
+++ b/netease_api/module/user_follows.js
@@ -0,0 +1,20 @@
+// TA关注的人(关注)
+
+module.exports = (query, request) => {
+ const data = {
+ offset: query.offset || 0,
+ limit: query.limit || 30,
+ order: true,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/user/getfollows/${query.uid}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/user_level.js b/netease_api/module/user_level.js
new file mode 100644
index 0000000..9eb9694
--- /dev/null
+++ b/netease_api/module/user_level.js
@@ -0,0 +1,11 @@
+// 类别热门电台
+
+module.exports = (query, request) => {
+ const data = {};
+ return request('POST', `https://music.163.com/weapi/user/level`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+};
diff --git a/netease_api/module/user_playlist.js b/netease_api/module/user_playlist.js
new file mode 100644
index 0000000..cdef629
--- /dev/null
+++ b/netease_api/module/user_playlist.js
@@ -0,0 +1,16 @@
+// 用户歌单
+
+module.exports = (query, request) => {
+ const data = {
+ uid: query.uid,
+ limit: query.limit || 30,
+ offset: query.offset || 0,
+ includeVideo: true,
+ };
+ return request('POST', `https://music.163.com/api/user/playlist`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+};
diff --git a/netease_api/module/user_record.js b/netease_api/module/user_record.js
new file mode 100644
index 0000000..a882701
--- /dev/null
+++ b/netease_api/module/user_record.js
@@ -0,0 +1,14 @@
+// 听歌排行
+
+module.exports = (query, request) => {
+ const data = {
+ uid: query.uid,
+ type: query.type || 0, // 1: 最近一周, 0: 所有时间
+ };
+ return request('POST', `https://music.163.com/weapi/v1/play/record`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+};
diff --git a/netease_api/module/user_replacephone.js b/netease_api/module/user_replacephone.js
new file mode 100644
index 0000000..ee8d459
--- /dev/null
+++ b/netease_api/module/user_replacephone.js
@@ -0,0 +1,19 @@
+module.exports = (query, request) => {
+ const data = {
+ phone: query.phone,
+ captcha: query.captcha,
+ oldcaptcha: query.oldcaptcha,
+ countrycode: query.countrycode || '86',
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/user/replaceCellphone`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/user_subcount.js b/netease_api/module/user_subcount.js
new file mode 100644
index 0000000..414ce01
--- /dev/null
+++ b/netease_api/module/user_subcount.js
@@ -0,0 +1,15 @@
+// 收藏计数
+
+module.exports = (query, request) => {
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/subcount`,
+ {},
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/user_update.js b/netease_api/module/user_update.js
new file mode 100644
index 0000000..d84281c
--- /dev/null
+++ b/netease_api/module/user_update.js
@@ -0,0 +1,24 @@
+// 编辑用户信息
+
+module.exports = (query, request) => {
+ const data = {
+ avatarImgId: '0',
+ birthday: query.birthday,
+ city: query.city,
+ gender: query.gender,
+ nickname: query.nickname,
+ province: query.province,
+ signature: query.signature,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/user/profile/update`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/video_category_list.js b/netease_api/module/video_category_list.js
new file mode 100644
index 0000000..40305fb
--- /dev/null
+++ b/netease_api/module/video_category_list.js
@@ -0,0 +1,20 @@
+// 视频分类列表
+
+module.exports = (query, request) => {
+ const data = {
+ offset: query.offset || 0,
+ total: 'true',
+ limit: query.limit || 99,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/cloudvideo/category/list`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/video_detail.js b/netease_api/module/video_detail.js
new file mode 100644
index 0000000..f668743
--- /dev/null
+++ b/netease_api/module/video_detail.js
@@ -0,0 +1,18 @@
+// 视频详情
+
+module.exports = (query, request) => {
+ const data = {
+ id: query.id,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/cloudvideo/v1/video/detail`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/video_detail_info.js b/netease_api/module/video_detail_info.js
new file mode 100644
index 0000000..c8ebd4b
--- /dev/null
+++ b/netease_api/module/video_detail_info.js
@@ -0,0 +1,19 @@
+// 视频点赞转发评论数数据
+
+module.exports = (query, request) => {
+ const data = {
+ threadid: `R_VI_62_${query.vid}`,
+ composeliked: true,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/comment/commentthread/info`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/video_group.js b/netease_api/module/video_group.js
new file mode 100644
index 0000000..77ae3f6
--- /dev/null
+++ b/netease_api/module/video_group.js
@@ -0,0 +1,21 @@
+// 视频标签/分类下的视频
+
+module.exports = (query, request) => {
+ const data = {
+ groupId: query.id,
+ offset: query.offset || 0,
+ need_preview_url: 'true',
+ total: true,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/videotimeline/videogroup/otherclient/get`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/video_group_list.js b/netease_api/module/video_group_list.js
new file mode 100644
index 0000000..babe3ab
--- /dev/null
+++ b/netease_api/module/video_group_list.js
@@ -0,0 +1,16 @@
+// 视频标签列表
+
+module.exports = (query, request) => {
+ const data = {};
+ return request(
+ 'POST',
+ `https://music.163.com/api/cloudvideo/group/list`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/video_sub.js b/netease_api/module/video_sub.js
new file mode 100644
index 0000000..1e46591
--- /dev/null
+++ b/netease_api/module/video_sub.js
@@ -0,0 +1,19 @@
+// 收藏与取消收藏视频
+
+module.exports = (query, request) => {
+ query.t = query.t == 1 ? 'sub' : 'unsub';
+ const data = {
+ id: query.id,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/cloudvideo/video/${query.t}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/video_timeline_all.js b/netease_api/module/video_timeline_all.js
new file mode 100644
index 0000000..9c107a6
--- /dev/null
+++ b/netease_api/module/video_timeline_all.js
@@ -0,0 +1,22 @@
+// 全部视频列表
+
+module.exports = (query, request) => {
+ const data = {
+ groupId: 0,
+ offset: query.offset || 0,
+ need_preview_url: 'true',
+ total: true,
+ };
+ // /api/videotimeline/otherclient/get
+ return request(
+ 'POST',
+ `https://music.163.com/api/videotimeline/otherclient/get`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/video_timeline_recommend.js b/netease_api/module/video_timeline_recommend.js
new file mode 100644
index 0000000..a249089
--- /dev/null
+++ b/netease_api/module/video_timeline_recommend.js
@@ -0,0 +1,17 @@
+// 推荐视频
+
+module.exports = (query, request) => {
+ const data = {
+ offset: query.offset || 0,
+ filterLives: '[]',
+ withProgramInfo: 'true',
+ needUrl: '1',
+ resolution: '480',
+ };
+ return request('POST', `https://music.163.com/api/videotimeline/get`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+};
diff --git a/netease_api/module/video_url.js b/netease_api/module/video_url.js
new file mode 100644
index 0000000..8d2673c
--- /dev/null
+++ b/netease_api/module/video_url.js
@@ -0,0 +1,19 @@
+// 视频链接
+
+module.exports = (query, request) => {
+ const data = {
+ ids: '["' + query.id + '"]',
+ resolution: query.res || 1080,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/cloudvideo/playurl`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/weblog.js b/netease_api/module/weblog.js
new file mode 100644
index 0000000..2b8d0be
--- /dev/null
+++ b/netease_api/module/weblog.js
@@ -0,0 +1,15 @@
+// 操作记录
+
+module.exports = (query, request) => {
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/feedback/weblog`,
+ query.data || {},
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/yunbei.js b/netease_api/module/yunbei.js
new file mode 100644
index 0000000..367fe3e
--- /dev/null
+++ b/netease_api/module/yunbei.js
@@ -0,0 +1,10 @@
+module.exports = (query, request) => {
+ const data = {};
+ // /api/point/today/get
+ return request('POST', `https://music.163.com/api/point/signed/get`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+};
diff --git a/netease_api/module/yunbei_expense.js b/netease_api/module/yunbei_expense.js
new file mode 100644
index 0000000..29ab8d0
--- /dev/null
+++ b/netease_api/module/yunbei_expense.js
@@ -0,0 +1,17 @@
+module.exports = (query, request) => {
+ const data = {
+ limit: query.limit || 10,
+ offset: query.offset || 0,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/store/api/point/expense`,
+ data,
+ {
+ crypto: 'api',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/yunbei_info.js b/netease_api/module/yunbei_info.js
new file mode 100644
index 0000000..7aa122a
--- /dev/null
+++ b/netease_api/module/yunbei_info.js
@@ -0,0 +1,9 @@
+module.exports = (query, request) => {
+ const data = {};
+ return request('POST', `https://music.163.com/api/v1/user/info`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+};
diff --git a/netease_api/module/yunbei_receipt.js b/netease_api/module/yunbei_receipt.js
new file mode 100644
index 0000000..7b662ce
--- /dev/null
+++ b/netease_api/module/yunbei_receipt.js
@@ -0,0 +1,17 @@
+module.exports = (query, request) => {
+ const data = {
+ limit: query.limit || 10,
+ offset: query.offset || 0,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/store/api/point/receipt`,
+ data,
+ {
+ crypto: 'api',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/yunbei_sign.js b/netease_api/module/yunbei_sign.js
new file mode 100644
index 0000000..0f1c913
--- /dev/null
+++ b/netease_api/module/yunbei_sign.js
@@ -0,0 +1,11 @@
+module.exports = (query, request) => {
+ const data = {
+ type: '0',
+ };
+ return request('POST', `https://music.163.com/api/point/dailyTask`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+};
diff --git a/netease_api/module/yunbei_task_finish.js b/netease_api/module/yunbei_task_finish.js
new file mode 100644
index 0000000..258c495
--- /dev/null
+++ b/netease_api/module/yunbei_task_finish.js
@@ -0,0 +1,17 @@
+module.exports = (query, request) => {
+ const data = {
+ userTaskId: query.userTaskId,
+ depositCode: query.depositCode || '0',
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/usertool/task/point/receive`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/yunbei_tasks.js b/netease_api/module/yunbei_tasks.js
new file mode 100644
index 0000000..7515e00
--- /dev/null
+++ b/netease_api/module/yunbei_tasks.js
@@ -0,0 +1,14 @@
+module.exports = (query, request) => {
+ const data = {};
+ return request(
+ 'POST',
+ `https://music.163.com/api/usertool/task/list/all`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/yunbei_tasks_todo.js b/netease_api/module/yunbei_tasks_todo.js
new file mode 100644
index 0000000..924dced
--- /dev/null
+++ b/netease_api/module/yunbei_tasks_todo.js
@@ -0,0 +1,14 @@
+module.exports = (query, request) => {
+ const data = {};
+ return request(
+ 'POST',
+ `https://music.163.com/api/usertool/task/todo/query`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+};
diff --git a/netease_api/module/yunbei_today.js b/netease_api/module/yunbei_today.js
new file mode 100644
index 0000000..4f707f8
--- /dev/null
+++ b/netease_api/module/yunbei_today.js
@@ -0,0 +1,9 @@
+module.exports = (query, request) => {
+ const data = {};
+ return request('POST', `https://music.163.com/api/point/today/get`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+};
diff --git a/netease_api/package-lock.json b/netease_api/package-lock.json
new file mode 100644
index 0000000..de5e769
--- /dev/null
+++ b/netease_api/package-lock.json
@@ -0,0 +1,4096 @@
+{
+ "name": "NeteaseCloudMusicApi",
+ "version": "3.45.2",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.10.4.tgz?cache=0&sync_timestamp=1593522948158&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.10.4.tgz",
+ "integrity": "sha1-Fo2ho26Q2miujUnA8bSMfGJJITo=",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.10.4"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npm.taobao.org/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.10.4.tgz?cache=0&sync_timestamp=1593521083613&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-validator-identifier%2Fdownload%2F%40babel%2Fhelper-validator-identifier-7.10.4.tgz",
+ "integrity": "sha1-p4x6clHgH2FlEtMbEK3PUq2l4NI=",
+ "dev": true
+ },
+ "@babel/highlight": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.10.4.tgz?cache=0&sync_timestamp=1593521095576&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.10.4.tgz",
+ "integrity": "sha1-fRvf1ldTU4+r5sOFls23bZrGAUM=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1591687076871&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz",
+ "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
+ }
+ },
+ "@eslint/eslintrc": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.0.tgz",
+ "integrity": "sha512-+cIGPCBdLCzqxdtwppswP+zTsH9BOIGzAeKfBIbtb4gW/giMlfMwP0HUSFfhzh20f9u8uZ8hOp62+4GPquTbwQ==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.4",
+ "debug": "^4.1.1",
+ "espree": "^7.3.0",
+ "globals": "^12.1.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^3.13.1",
+ "lodash": "^4.17.19",
+ "minimatch": "^3.0.4",
+ "strip-json-comments": "^3.1.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz",
+ "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
+ }
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npm.taobao.org/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.3.tgz",
+ "integrity": "sha1-Olgr21OATGum0UZXnEblITDPSjs=",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "2.0.3",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.3.tgz",
+ "integrity": "sha1-NNxfTKu8cg9OYPdadH5+zWwXW9M=",
+ "dev": true
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npm.taobao.org/@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.4.tgz",
+ "integrity": "sha1-ARuSAqcKY2bkNspcBlhEUoqwSXY=",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.3",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@tootallnate/once": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npm.taobao.org/@tootallnate/once/download/@tootallnate/once-1.1.2.tgz",
+ "integrity": "sha1-zLkURTYBeaBOf+av94wA/8Hur4I="
+ },
+ "@types/json-schema": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.6.tgz?cache=0&sync_timestamp=1598910403749&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fjson-schema%2Fdownload%2F%40types%2Fjson-schema-7.0.6.tgz",
+ "integrity": "sha1-9MfsQ+gbMZqYFRFQMXCfJph4kfA=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "14.11.10",
+ "resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-14.11.10.tgz",
+ "integrity": "sha1-jBAquhO/UlPzUUav+/iyYnUGm+8=",
+ "dev": true
+ },
+ "@types/parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/@types/parse-json/download/@types/parse-json-4.0.0.tgz?cache=0&sync_timestamp=1596839394119&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fparse-json%2Fdownload%2F%40types%2Fparse-json-4.0.0.tgz",
+ "integrity": "sha1-L4u0QUNNFjs1+4/9zNcTiSf/uMA=",
+ "dev": true
+ },
+ "@typescript-eslint/eslint-plugin": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npm.taobao.org/@typescript-eslint/eslint-plugin/download/@typescript-eslint/eslint-plugin-4.4.1.tgz?cache=0&sync_timestamp=1603565073344&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Feslint-plugin%2Fdownload%2F%40typescript-eslint%2Feslint-plugin-4.4.1.tgz",
+ "integrity": "sha1-uKzqA3O9KjiKxH30RlLwC/izaPU=",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/experimental-utils": "4.4.1",
+ "@typescript-eslint/scope-manager": "4.4.1",
+ "debug": "^4.1.1",
+ "functional-red-black-tree": "^1.0.1",
+ "regexpp": "^3.0.0",
+ "semver": "^7.3.2",
+ "tsutils": "^3.17.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz",
+ "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
+ "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
+ "dev": true
+ }
+ }
+ },
+ "@typescript-eslint/experimental-utils": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npm.taobao.org/@typescript-eslint/experimental-utils/download/@typescript-eslint/experimental-utils-4.4.1.tgz?cache=0&sync_timestamp=1603563239927&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fexperimental-utils%2Fdownload%2F%40typescript-eslint%2Fexperimental-utils-4.4.1.tgz",
+ "integrity": "sha1-QGE7l1f6AXDePgBDJU27B3yvrAw=",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.3",
+ "@typescript-eslint/scope-manager": "4.4.1",
+ "@typescript-eslint/types": "4.4.1",
+ "@typescript-eslint/typescript-estree": "4.4.1",
+ "eslint-scope": "^5.0.0",
+ "eslint-utils": "^2.0.0"
+ }
+ },
+ "@typescript-eslint/parser": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npm.taobao.org/@typescript-eslint/parser/download/@typescript-eslint/parser-4.4.1.tgz?cache=0&sync_timestamp=1603563241160&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fparser%2Fdownload%2F%40typescript-eslint%2Fparser-4.4.1.tgz",
+ "integrity": "sha1-Jf3pwIBhHzA/LzPO2xRdLFmRW4A=",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/scope-manager": "4.4.1",
+ "@typescript-eslint/types": "4.4.1",
+ "@typescript-eslint/typescript-estree": "4.4.1",
+ "debug": "^4.1.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz",
+ "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
+ "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
+ "dev": true
+ }
+ }
+ },
+ "@typescript-eslint/scope-manager": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npm.taobao.org/@typescript-eslint/scope-manager/download/@typescript-eslint/scope-manager-4.4.1.tgz",
+ "integrity": "sha1-0ZRH5g2yzpxCWJjWL6A7LM6Oo/k=",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "4.4.1",
+ "@typescript-eslint/visitor-keys": "4.4.1"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npm.taobao.org/@typescript-eslint/types/download/@typescript-eslint/types-4.4.1.tgz",
+ "integrity": "sha1-xQezXPUjvHugCq5fde6bgQzau8E=",
+ "dev": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npm.taobao.org/@typescript-eslint/typescript-estree/download/@typescript-eslint/typescript-estree-4.4.1.tgz?cache=0&sync_timestamp=1603563238913&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypescript-estree%2Fdownload%2F%40typescript-eslint%2Ftypescript-estree-4.4.1.tgz",
+ "integrity": "sha1-WY9t5IgQbCWH1HyiRixg9uJ5fLg=",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "4.4.1",
+ "@typescript-eslint/visitor-keys": "4.4.1",
+ "debug": "^4.1.1",
+ "globby": "^11.0.1",
+ "is-glob": "^4.0.1",
+ "lodash": "^4.17.15",
+ "semver": "^7.3.2",
+ "tsutils": "^3.17.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz",
+ "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
+ "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
+ "dev": true
+ }
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npm.taobao.org/@typescript-eslint/visitor-keys/download/@typescript-eslint/visitor-keys-4.4.1.tgz",
+ "integrity": "sha1-F2ncep4tfSz9Mxi3ftgkkYeu1cM=",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "4.4.1",
+ "eslint-visitor-keys": "^2.0.0"
+ }
+ },
+ "@ungap/promise-all-settled": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npm.taobao.org/@ungap/promise-all-settled/download/@ungap/promise-all-settled-1.1.2.tgz",
+ "integrity": "sha1-qlgEJxHW4ydd033Fl+XTHowpCkQ=",
+ "dev": true
+ },
+ "accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz",
+ "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=",
+ "requires": {
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
+ }
+ },
+ "acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true
+ },
+ "acorn-es7-plugin": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npm.taobao.org/acorn-es7-plugin/download/acorn-es7-plugin-1.1.7.tgz",
+ "integrity": "sha1-8u4fMiipDurRJF+asZIusucdM2s=",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
+ "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
+ "dev": true
+ },
+ "agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npm.taobao.org/agent-base/download/agent-base-6.0.2.tgz?cache=0&sync_timestamp=1603480100923&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fagent-base%2Fdownload%2Fagent-base-6.0.2.tgz",
+ "integrity": "sha1-Sf/1hXfP7j83F2/qtMIuAPhtf3c=",
+ "requires": {
+ "debug": "4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz",
+ "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
+ "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk="
+ }
+ }
+ },
+ "aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npm.taobao.org/aggregate-error/download/aggregate-error-3.1.0.tgz?cache=0&sync_timestamp=1598049717562&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faggregate-error%2Fdownload%2Faggregate-error-3.1.0.tgz",
+ "integrity": "sha1-kmcP9Q9TWb23o+DUDQ7DDFc3aHo=",
+ "dev": true,
+ "requires": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ }
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1603561547443&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.6.tgz",
+ "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+ "dev": true
+ },
+ "ansi-colors": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-4.1.1.tgz",
+ "integrity": "sha1-y7muJWv3UK8eqzRPIpqif+lLo0g=",
+ "dev": true
+ },
+ "ansi-escapes": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-4.3.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-escapes%2Fdownload%2Fansi-escapes-4.3.1.tgz",
+ "integrity": "sha1-pcR8xDGB8fOP/XB2g3cA05VSKmE=",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.11.0"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.11.0.tgz?cache=0&sync_timestamp=1602623859603&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.11.0.tgz",
+ "integrity": "sha1-l6vwhyMQ/tiKXEZrJWgVdhReM/E=",
+ "dev": true
+ }
+ }
+ },
+ "ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz",
+ "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz?cache=0&sync_timestamp=1601839122515&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-3.2.1.tgz",
+ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "anymatch": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.1.tgz",
+ "integrity": "sha1-xV7PAhheJGklk5kxDBc84xIzsUI=",
+ "dev": true,
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz?cache=0&sync_timestamp=1598649734444&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fargparse%2Fdownload%2Fargparse-1.0.10.tgz",
+ "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "array-filter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/array-filter/download/array-filter-1.0.0.tgz",
+ "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=",
+ "dev": true
+ },
+ "array-find": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/array-find/download/array-find-1.0.0.tgz",
+ "integrity": "sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg=",
+ "dev": true
+ },
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz?cache=0&sync_timestamp=1574313384951&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
+ },
+ "array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/array-union/download/array-union-2.1.0.tgz",
+ "integrity": "sha1-t5hCCtvrHego2ErNii4j0+/oXo0=",
+ "dev": true
+ },
+ "ast-types": {
+ "version": "0.13.4",
+ "resolved": "https://registry.npm.taobao.org/ast-types/download/ast-types-0.13.4.tgz?cache=0&sync_timestamp=1599935985242&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fast-types%2Fdownload%2Fast-types-0.13.4.tgz",
+ "integrity": "sha1-7g13s0MmOWXsw/ti2hbnIisrZ4I=",
+ "requires": {
+ "tslib": "^2.0.1"
+ }
+ },
+ "astral-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/astral-regex/download/astral-regex-1.0.0.tgz",
+ "integrity": "sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k=",
+ "dev": true
+ },
+ "axios": {
+ "version": "0.20.0",
+ "resolved": "https://registry.npm.taobao.org/axios/download/axios-0.20.0.tgz",
+ "integrity": "sha1-BXujDwSIRpSZOozQf6OUz/EcUL0=",
+ "requires": {
+ "follow-redirects": "^1.10.0"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "binary-extensions": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-2.1.0.tgz",
+ "integrity": "sha1-MPpAyef+B9vIlWeM0ocCTeokHdk=",
+ "dev": true
+ },
+ "body-parser": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npm.taobao.org/body-parser/download/body-parser-1.19.0.tgz",
+ "integrity": "sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io=",
+ "requires": {
+ "bytes": "3.1.0",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "on-finished": "~2.3.0",
+ "qs": "6.7.0",
+ "raw-body": "2.4.0",
+ "type-is": "~1.6.17"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz?cache=0&sync_timestamp=1601898189928&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrace-expansion%2Fdownload%2Fbrace-expansion-1.1.11.tgz",
+ "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz",
+ "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "browser-stdout": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npm.taobao.org/browser-stdout/download/browser-stdout-1.3.1.tgz",
+ "integrity": "sha1-uqVZ7hTO1zRSIputcyZGfGH6vWA=",
+ "dev": true
+ },
+ "busboy": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npm.taobao.org/busboy/download/busboy-0.3.1.tgz",
+ "integrity": "sha1-FwiZJ0xb84quJ9XGK3EmjNWF/Rs=",
+ "requires": {
+ "dicer": "0.3.0"
+ }
+ },
+ "bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.1.0.tgz",
+ "integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY="
+ },
+ "call-matcher": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npm.taobao.org/call-matcher/download/call-matcher-1.1.0.tgz",
+ "integrity": "sha1-I7LBvHqDlMi+KGCdd929V4ZoBDI=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.0.0",
+ "deep-equal": "^1.0.0",
+ "espurify": "^1.6.0",
+ "estraverse": "^4.0.0"
+ }
+ },
+ "call-signature": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npm.taobao.org/call-signature/download/call-signature-0.0.2.tgz",
+ "integrity": "sha1-qEq8glpV70yysCi9dOIFpluaSZY=",
+ "dev": true
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npm.taobao.org/callsites/download/callsites-3.1.0.tgz",
+ "integrity": "sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1602350083472&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz",
+ "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-4.1.0.tgz?cache=0&sync_timestamp=1591687076871&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-4.1.0.tgz",
+ "integrity": "sha1-ThSHCmGNni7dl92DRf2dncMVZGo=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1601839122515&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz",
+ "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+ "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+ "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz",
+ "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1598611709087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+ "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "chokidar": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-3.4.3.tgz?cache=0&sync_timestamp=1602585381749&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-3.4.3.tgz",
+ "integrity": "sha1-wd84IxRI5FykrFiObHlXO6alfVs=",
+ "dev": true,
+ "requires": {
+ "anymatch": "~3.1.1",
+ "braces": "~3.0.2",
+ "fsevents": "~2.1.2",
+ "glob-parent": "~5.1.0",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.5.0"
+ }
+ },
+ "ci-info": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/ci-info/download/ci-info-2.0.0.tgz",
+ "integrity": "sha1-Z6npZL4xpR4V5QENWObxKDQAL0Y=",
+ "dev": true
+ },
+ "clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npm.taobao.org/clean-stack/download/clean-stack-2.2.0.tgz?cache=0&sync_timestamp=1592035524745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclean-stack%2Fdownload%2Fclean-stack-2.2.0.tgz",
+ "integrity": "sha1-7oRy27Ep5yezHooQpCfe6d/kAIs=",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-3.1.0.tgz",
+ "integrity": "sha1-JkMFp65JDR0Dvwybp8kl0XU68wc=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^3.1.0"
+ }
+ },
+ "cli-truncate": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/cli-truncate/download/cli-truncate-2.1.0.tgz",
+ "integrity": "sha1-w54ovwXtzeW+O5iZKiLe7Vork8c=",
+ "dev": true,
+ "requires": {
+ "slice-ansi": "^3.0.0",
+ "string-width": "^4.2.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1601839122515&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz",
+ "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/astral-regex/download/astral-regex-2.0.0.tgz",
+ "integrity": "sha1-SDFDxWeu7UeFdZwIZXhtx319LjE=",
+ "dev": true
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+ "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+ "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz?cache=0&sync_timestamp=1603212180491&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-8.0.0.tgz",
+ "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-3.0.0.tgz",
+ "integrity": "sha1-Md3BCTCht+C2ewjJbC9Jt3p4l4c=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ }
+ },
+ "string-width": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz",
+ "integrity": "sha1-lSGCxGzHssMT0VluYjmSvRY7crU=",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ }
+ }
+ }
+ },
+ "cliui": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz?cache=0&sync_timestamp=1602861367442&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-5.0.0.tgz",
+ "integrity": "sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=",
+ "dev": true,
+ "requires": {
+ "string-width": "^3.1.0",
+ "strip-ansi": "^5.2.0",
+ "wrap-ansi": "^5.1.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz",
+ "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz",
+ "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz",
+ "integrity": "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.0.0"
+ }
+ }
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz",
+ "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "commander": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npm.taobao.org/commander/download/commander-6.2.0.tgz?cache=0&sync_timestamp=1603599636161&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-6.2.0.tgz",
+ "integrity": "sha1-uZC/uKwDCu3G0RvATRSI/+9W23U=",
+ "dev": true
+ },
+ "compare-versions": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npm.taobao.org/compare-versions/download/compare-versions-3.6.0.tgz",
+ "integrity": "sha1-GlaJkTaF5ah2N7jT/8p1UU7EHWI=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "content-disposition": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.3.tgz",
+ "integrity": "sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70=",
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz",
+ "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js="
+ },
+ "convert-source-map": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz?cache=0&sync_timestamp=1573003637425&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconvert-source-map%2Fdownload%2Fconvert-source-map-1.7.0.tgz",
+ "integrity": "sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "cookie": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npm.taobao.org/cookie/download/cookie-0.4.0.tgz?cache=0&sync_timestamp=1587525865178&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcookie%2Fdownload%2Fcookie-0.4.0.tgz",
+ "integrity": "sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo="
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
+ },
+ "core-js": {
+ "version": "2.6.11",
+ "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-2.6.11.tgz?cache=0&sync_timestamp=1586450269267&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-2.6.11.tgz",
+ "integrity": "sha1-OIMUafmSK97Y7iHJ3EaYXgOZMIw=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ },
+ "cosmiconfig": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-6.0.0.tgz?cache=0&sync_timestamp=1596310819353&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-6.0.0.tgz",
+ "integrity": "sha1-2k/uhTxS9rHmk19BwaL8UL1KmYI=",
+ "dev": true,
+ "requires": {
+ "@types/parse-json": "^4.0.0",
+ "import-fresh": "^3.1.0",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0",
+ "yaml": "^1.7.2"
+ }
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.3.tgz",
+ "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "d": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/d/download/d-1.0.1.tgz",
+ "integrity": "sha1-hpgJU3LVjb7jRv/Qxwk/mfj561o=",
+ "dev": true,
+ "requires": {
+ "es5-ext": "^0.10.50",
+ "type": "^1.0.1"
+ }
+ },
+ "data-uri-to-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npm.taobao.org/data-uri-to-buffer/download/data-uri-to-buffer-3.0.1.tgz?cache=0&sync_timestamp=1590800007667&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdata-uri-to-buffer%2Fdownload%2Fdata-uri-to-buffer-3.0.1.tgz",
+ "integrity": "sha1-WUuJc5OMW8LDMEZTV4U0GrxPNjY="
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
+ "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "dedent": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npm.taobao.org/dedent/download/dedent-0.7.0.tgz",
+ "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
+ "dev": true
+ },
+ "deep-equal": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npm.taobao.org/deep-equal/download/deep-equal-1.1.1.tgz",
+ "integrity": "sha1-tcmMlCzv+vfLBR4k4UNKJaLmB2o=",
+ "dev": true,
+ "requires": {
+ "is-arguments": "^1.0.4",
+ "is-date-object": "^1.0.1",
+ "is-regex": "^1.0.4",
+ "object-is": "^1.0.1",
+ "object-keys": "^1.1.1",
+ "regexp.prototype.flags": "^1.2.0"
+ }
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz",
+ "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=",
+ "dev": true,
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "degenerator": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npm.taobao.org/degenerator/download/degenerator-2.2.0.tgz",
+ "integrity": "sha1-SemMEfoCk8Wybt+7UvFXKa/NslQ=",
+ "requires": {
+ "ast-types": "^0.13.2",
+ "escodegen": "^1.8.1",
+ "esprima": "^4.0.0"
+ }
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+ },
+ "dicer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npm.taobao.org/dicer/download/dicer-0.3.0.tgz",
+ "integrity": "sha1-6s2Ys7+/kuirXC/bcaqsRLsGuHI=",
+ "requires": {
+ "streamsearch": "0.1.2"
+ }
+ },
+ "diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npm.taobao.org/diff/download/diff-4.0.2.tgz?cache=0&sync_timestamp=1578890967183&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdiff%2Fdownload%2Fdiff-4.0.2.tgz",
+ "integrity": "sha1-YPOuy4nV+uUgwRqhnvwruYKq3n0=",
+ "dev": true
+ },
+ "diff-match-patch": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npm.taobao.org/diff-match-patch/download/diff-match-patch-1.0.5.tgz",
+ "integrity": "sha1-q7WE1fEM0Rlt/FWqA3AVkq4/ezc=",
+ "dev": true
+ },
+ "dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npm.taobao.org/dir-glob/download/dir-glob-3.0.1.tgz",
+ "integrity": "sha1-Vtv3PZkqSpO6FYT0U0Bj/S5BcX8=",
+ "dev": true,
+ "requires": {
+ "path-type": "^4.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/doctrine/download/doctrine-3.0.0.tgz",
+ "integrity": "sha1-rd6+rXKmV023g2OdyHoSF3OXOWE=",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "dom-serializer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npm.taobao.org/dom-serializer/download/dom-serializer-1.1.0.tgz",
+ "integrity": "sha1-X3yCjxv8RIh9wqMVq1xFaR1US1g=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "domhandler": "^3.0.0",
+ "entities": "^2.0.0"
+ }
+ },
+ "domelementtype": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-2.0.2.tgz?cache=0&sync_timestamp=1600028495728&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomelementtype%2Fdownload%2Fdomelementtype-2.0.2.tgz",
+ "integrity": "sha1-87blSSAeRvWItZRj3XcYcTH+aXE=",
+ "dev": true
+ },
+ "domhandler": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npm.taobao.org/domhandler/download/domhandler-3.3.0.tgz",
+ "integrity": "sha1-bbfqRuRhfrFc+HXfaLK4UkzgA3o=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.0.1"
+ }
+ },
+ "domutils": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npm.taobao.org/domutils/download/domutils-2.4.2.tgz",
+ "integrity": "sha1-fuW+JhlE4a1IfZqgYWcgAQEjkis=",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "^1.0.1",
+ "domelementtype": "^2.0.1",
+ "domhandler": "^3.3.0"
+ }
+ },
+ "eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npm.taobao.org/eastasianwidth/download/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha1-aWzi7Aqg5uqTo5f/zySqeEDIJ8s=",
+ "dev": true
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+ },
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz?cache=0&sync_timestamp=1603212180491&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-7.0.3.tgz",
+ "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=",
+ "dev": true
+ },
+ "empower": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npm.taobao.org/empower/download/empower-1.3.1.tgz",
+ "integrity": "sha1-dol5y7s21x2PXtqrZj3qy52rkWw=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.0.0",
+ "empower-core": "^1.2.0"
+ }
+ },
+ "empower-assert": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npm.taobao.org/empower-assert/download/empower-assert-1.1.0.tgz",
+ "integrity": "sha1-jTJ/vmmoivkN2pjRv8mCnSok/WI=",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.2.0"
+ }
+ },
+ "empower-core": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/empower-core/download/empower-core-1.2.0.tgz",
+ "integrity": "sha1-zj+ySE1Rh/opwj+6g0Swsv31YBw=",
+ "dev": true,
+ "requires": {
+ "call-signature": "0.0.2",
+ "core-js": "^2.0.0"
+ }
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
+ },
+ "end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz",
+ "integrity": "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "enquirer": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npm.taobao.org/enquirer/download/enquirer-2.3.6.tgz?cache=0&sync_timestamp=1593693291943&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fenquirer%2Fdownload%2Fenquirer-2.3.6.tgz",
+ "integrity": "sha1-Kn/l3WNKHkElqXXsmU/1RW3Dc00=",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "^4.1.1"
+ }
+ },
+ "entities": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/entities/download/entities-2.1.0.tgz?cache=0&sync_timestamp=1602897029273&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fentities%2Fdownload%2Fentities-2.1.0.tgz",
+ "integrity": "sha1-mS0xKc999ocLlsV4WMJJoSD4uLU=",
+ "dev": true
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz",
+ "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.18.0-next.1",
+ "resolved": "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.18.0-next.1.tgz?cache=0&sync_timestamp=1601502719982&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fes-abstract%2Fdownload%2Fes-abstract-1.18.0-next.1.tgz",
+ "integrity": "sha1-bjoKS9pxflAjqzuOkL7DYQjSLGg=",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.2.2",
+ "is-negative-zero": "^2.0.0",
+ "is-regex": "^1.1.1",
+ "object-inspect": "^1.8.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.1",
+ "string.prototype.trimend": "^1.0.1",
+ "string.prototype.trimstart": "^1.0.1"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo=",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "es5-ext": {
+ "version": "0.10.53",
+ "resolved": "https://registry.npm.taobao.org/es5-ext/download/es5-ext-0.10.53.tgz",
+ "integrity": "sha1-k8WjrP2+8nUiCtcmRK0C7hg2jeE=",
+ "dev": true,
+ "requires": {
+ "es6-iterator": "~2.0.3",
+ "es6-symbol": "~3.1.3",
+ "next-tick": "~1.0.0"
+ }
+ },
+ "es6-iterator": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npm.taobao.org/es6-iterator/download/es6-iterator-2.0.3.tgz",
+ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "es6-map": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npm.taobao.org/es6-map/download/es6-map-0.1.5.tgz",
+ "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "~0.10.14",
+ "es6-iterator": "~2.0.1",
+ "es6-set": "~0.1.5",
+ "es6-symbol": "~3.1.1",
+ "event-emitter": "~0.3.5"
+ }
+ },
+ "es6-set": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npm.taobao.org/es6-set/download/es6-set-0.1.5.tgz",
+ "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "~0.10.14",
+ "es6-iterator": "~2.0.1",
+ "es6-symbol": "3.1.1",
+ "event-emitter": "~0.3.5"
+ },
+ "dependencies": {
+ "es6-symbol": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npm.taobao.org/es6-symbol/download/es6-symbol-3.1.1.tgz",
+ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "~0.10.14"
+ }
+ }
+ }
+ },
+ "es6-symbol": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npm.taobao.org/es6-symbol/download/es6-symbol-3.1.3.tgz",
+ "integrity": "sha1-utXTwbzawoJp9MszHkMceKxwXRg=",
+ "dev": true,
+ "requires": {
+ "d": "^1.0.1",
+ "ext": "^1.1.2"
+ }
+ },
+ "es6-weak-map": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npm.taobao.org/es6-weak-map/download/es6-weak-map-2.0.3.tgz",
+ "integrity": "sha1-ttofFswswNm+Q+a9v8Xn383zHVM=",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.46",
+ "es6-iterator": "^2.0.3",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "escallmatch": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npm.taobao.org/escallmatch/download/escallmatch-1.5.0.tgz",
+ "integrity": "sha1-UAmdhugJGwkt+N37w/mm+wWgJNA=",
+ "dev": true,
+ "requires": {
+ "call-matcher": "^1.0.0",
+ "esprima": "^2.0.0"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npm.taobao.org/esprima/download/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
+ "dev": true
+ }
+ }
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.14.3",
+ "resolved": "https://registry.npm.taobao.org/escodegen/download/escodegen-1.14.3.tgz?cache=0&sync_timestamp=1596669832613&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescodegen%2Fdownload%2Fescodegen-1.14.3.tgz",
+ "integrity": "sha1-TnuB+6YVgdyXWC7XjKt/Do1j9QM=",
+ "requires": {
+ "esprima": "^4.0.1",
+ "estraverse": "^4.2.0",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1",
+ "source-map": "~0.6.1"
+ }
+ },
+ "escope": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npm.taobao.org/escope/download/escope-3.6.0.tgz",
+ "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=",
+ "dev": true,
+ "requires": {
+ "es6-map": "^0.1.3",
+ "es6-weak-map": "^2.0.1",
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint": {
+ "version": "7.12.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.12.0.tgz",
+ "integrity": "sha512-n5pEU27DRxCSlOhJ2rO57GDLcNsxO0LPpAbpFdh7xmcDmjmlGUfoyrsB3I7yYdQXO5N3gkSTiDrPSPNFiiirXA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@eslint/eslintrc": "^0.2.0",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.0.1",
+ "doctrine": "^3.0.0",
+ "enquirer": "^2.3.5",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^2.1.0",
+ "eslint-visitor-keys": "^2.0.0",
+ "espree": "^7.3.0",
+ "esquery": "^1.2.0",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^5.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^5.0.0",
+ "globals": "^12.1.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "js-yaml": "^3.13.1",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash": "^4.17.19",
+ "minimatch": "^3.0.4",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "progress": "^2.0.0",
+ "regexpp": "^3.1.0",
+ "semver": "^7.2.1",
+ "strip-ansi": "^6.0.0",
+ "strip-json-comments": "^3.1.0",
+ "table": "^5.2.3",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz",
+ "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz?cache=0&sync_timestamp=1590809289115&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-4.0.6.tgz",
+ "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npm.taobao.org/levn/download/levn-0.4.1.tgz",
+ "integrity": "sha1-rkViwAdHO5MqYgDUAyaN0v/8at4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
+ "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
+ "dev": true
+ },
+ "optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npm.taobao.org/optionator/download/optionator-0.9.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Foptionator%2Fdownload%2Foptionator-0.9.1.tgz",
+ "integrity": "sha1-TyNqY3Pa4FZqbUPhMmZ09QwpFJk=",
+ "dev": true,
+ "requires": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ }
+ },
+ "prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.2.1.tgz",
+ "integrity": "sha1-3rxkidem5rDnYRiIzsiAM30xY5Y=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npm.taobao.org/type-check/download/type-check-0.4.0.tgz",
+ "integrity": "sha1-B7ggO/pwVsBlcFDjzNLDdzC6uPE=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1"
+ }
+ }
+ }
+ },
+ "eslint-config-prettier": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npm.taobao.org/eslint-config-prettier/download/eslint-config-prettier-6.13.0.tgz?cache=0&sync_timestamp=1603294035236&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-config-prettier%2Fdownload%2Feslint-config-prettier-6.13.0.tgz",
+ "integrity": "sha1-IH2IeWtWJOW7gVu738WJHOuev/o=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^6.0.0"
+ }
+ },
+ "eslint-plugin-html": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npm.taobao.org/eslint-plugin-html/download/eslint-plugin-html-6.0.3.tgz?cache=0&sync_timestamp=1599391535931&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-html%2Fdownload%2Feslint-plugin-html-6.0.3.tgz",
+ "integrity": "sha1-jZ0sGH0aSO142E9F4pgg8QJCXlE=",
+ "dev": true,
+ "requires": {
+ "htmlparser2": "^4.1.0"
+ }
+ },
+ "eslint-plugin-prettier": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npm.taobao.org/eslint-plugin-prettier/download/eslint-plugin-prettier-3.1.4.tgz",
+ "integrity": "sha1-Foq0MVTi6lfbmSos0JfIKBcfdcI=",
+ "dev": true,
+ "requires": {
+ "prettier-linter-helpers": "^1.0.0"
+ }
+ },
+ "eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.1.1.tgz?cache=0&sync_timestamp=1599933651660&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-5.1.1.tgz",
+ "integrity": "sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw=",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-2.1.0.tgz?cache=0&sync_timestamp=1592222145079&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-utils%2Fdownload%2Feslint-utils-2.1.0.tgz",
+ "integrity": "sha1-0t5eA0JOcH3BDHQGjd7a5wh0Gyc=",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz?cache=0&sync_timestamp=1597435068105&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=",
+ "dev": true
+ }
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-2.0.0.tgz?cache=0&sync_timestamp=1597435068105&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-2.0.0.tgz",
+ "integrity": "sha1-If3I+82ceVzAMh8FY3AglXUVEag=",
+ "dev": true
+ },
+ "espower": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npm.taobao.org/espower/download/espower-2.1.2.tgz",
+ "integrity": "sha1-gk+IeI+f7fTPD5KPXhG7kHzpuRg=",
+ "dev": true,
+ "requires": {
+ "array-find": "^1.0.0",
+ "escallmatch": "^1.5.0",
+ "escodegen": "^1.7.0",
+ "escope": "^3.3.0",
+ "espower-location-detector": "^1.0.0",
+ "espurify": "^1.3.0",
+ "estraverse": "^4.1.0",
+ "source-map": "^0.5.0",
+ "type-name": "^2.0.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz?cache=0&sync_timestamp=1571657176668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "espower-loader": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npm.taobao.org/espower-loader/download/espower-loader-1.2.2.tgz",
+ "integrity": "sha1-7bRsPFmga6yOpzppXIblxaC8gto=",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "^1.1.0",
+ "espower-source": "^2.0.0",
+ "minimatch": "^3.0.0",
+ "source-map-support": "^0.4.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "espower-location-detector": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/espower-location-detector/download/espower-location-detector-1.0.0.tgz",
+ "integrity": "sha1-oXt+zFnTDheeK+9z+0E3cEyzMbU=",
+ "dev": true,
+ "requires": {
+ "is-url": "^1.2.1",
+ "path-is-absolute": "^1.0.0",
+ "source-map": "^0.5.0",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz?cache=0&sync_timestamp=1571657176668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "espower-source": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npm.taobao.org/espower-source/download/espower-source-2.3.0.tgz",
+ "integrity": "sha1-Q+k7LBivUAGL2xvqehJx9KHBJfQ=",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.0.0",
+ "acorn-es7-plugin": "^1.0.10",
+ "convert-source-map": "^1.1.1",
+ "empower-assert": "^1.0.0",
+ "escodegen": "^1.10.0",
+ "espower": "^2.1.1",
+ "estraverse": "^4.0.0",
+ "merge-estraverse-visitors": "^1.0.0",
+ "multi-stage-sourcemap": "^0.2.1",
+ "path-is-absolute": "^1.0.0",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.7.4",
+ "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-5.7.4.tgz",
+ "integrity": "sha1-Po2KmUfQWZoXltECJddDL0pKz14=",
+ "dev": true
+ }
+ }
+ },
+ "espree": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz",
+ "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==",
+ "dev": true,
+ "requires": {
+ "acorn": "^7.4.0",
+ "acorn-jsx": "^5.2.0",
+ "eslint-visitor-keys": "^1.3.0"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true
+ }
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz",
+ "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE="
+ },
+ "espurify": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npm.taobao.org/espurify/download/espurify-1.8.1.tgz",
+ "integrity": "sha1-V0bGwatC0wLeEL0dW/fw6MBRUFY=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.0.0"
+ }
+ },
+ "esquery": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npm.taobao.org/esquery/download/esquery-1.3.1.tgz?cache=0&sync_timestamp=1587061286348&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesquery%2Fdownload%2Fesquery-1.3.1.tgz",
+ "integrity": "sha1-t4tYKKqOIU4p+3TE1bdS4cAz2lc=",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.1.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz?cache=0&sync_timestamp=1596642998635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-5.2.0.tgz",
+ "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=",
+ "dev": true
+ }
+ }
+ },
+ "esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.3.0.tgz?cache=0&sync_timestamp=1598898255610&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesrecurse%2Fdownload%2Fesrecurse-4.3.0.tgz",
+ "integrity": "sha1-eteWTWeauyi+5yzsY3WLHF0smSE=",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.2.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz?cache=0&sync_timestamp=1596642998635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-5.2.0.tgz",
+ "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=",
+ "dev": true
+ }
+ }
+ },
+ "estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz?cache=0&sync_timestamp=1596642998635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-4.3.0.tgz",
+ "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0="
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz",
+ "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q="
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
+ },
+ "event-emitter": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npm.taobao.org/event-emitter/download/event-emitter-0.3.5.tgz",
+ "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "~0.10.14"
+ }
+ },
+ "execa": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npm.taobao.org/execa/download/execa-4.0.3.tgz?cache=0&sync_timestamp=1594145085955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-4.0.3.tgz",
+ "integrity": "sha1-CjTau61tZhAL1vLFdshmlAPzF/I=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.0",
+ "get-stream": "^5.0.0",
+ "human-signals": "^1.1.1",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.0",
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2",
+ "strip-final-newline": "^2.0.0"
+ }
+ },
+ "express": {
+ "version": "4.17.1",
+ "resolved": "https://registry.npm.taobao.org/express/download/express-4.17.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexpress%2Fdownload%2Fexpress-4.17.1.tgz",
+ "integrity": "sha1-RJH8OGBc9R+GKdOcK10Cb5ikwTQ=",
+ "requires": {
+ "accepts": "~1.3.7",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.19.0",
+ "content-disposition": "0.5.3",
+ "content-type": "~1.0.4",
+ "cookie": "0.4.0",
+ "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.2",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.5",
+ "qs": "6.7.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.1.2",
+ "send": "0.17.1",
+ "serve-static": "1.14.1",
+ "setprototypeof": "1.1.1",
+ "statuses": "~1.5.0",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ }
+ },
+ "express-fileupload": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/express-fileupload/download/express-fileupload-1.2.0.tgz",
+ "integrity": "sha1-NWxN/WRb5xq5+y9ObYTusA0keXk=",
+ "requires": {
+ "busboy": "^0.3.1"
+ }
+ },
+ "ext": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npm.taobao.org/ext/download/ext-1.4.0.tgz",
+ "integrity": "sha1-ia56BxWPedNVF4gpBDJAd+Q3kkQ=",
+ "dev": true,
+ "requires": {
+ "type": "^2.0.0"
+ },
+ "dependencies": {
+ "type": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/type/download/type-2.1.0.tgz?cache=0&sync_timestamp=1598016585110&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype%2Fdownload%2Ftype-2.1.0.tgz",
+ "integrity": "sha1-m9wixkjPjPht0j0yM2pBz7ZHXj8=",
+ "dev": true
+ }
+ }
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz?cache=0&sync_timestamp=1591599697571&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-deep-equal%2Fdownload%2Ffast-deep-equal-3.1.3.tgz",
+ "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=",
+ "dev": true
+ },
+ "fast-diff": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/fast-diff/download/fast-diff-1.2.0.tgz",
+ "integrity": "sha1-c+4RmC2Gyq95WYKNUZz+kn+sXwM=",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npm.taobao.org/fast-glob/download/fast-glob-3.2.4.tgz?cache=0&sync_timestamp=1592291968616&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-glob%2Fdownload%2Ffast-glob-3.2.4.tgz",
+ "integrity": "sha1-0grvv5lXk4Pn88xmUpFYybmFVNM=",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.0",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.2",
+ "picomatch": "^2.2.1"
+ }
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz?cache=0&sync_timestamp=1576340291001&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-json-stable-stringify%2Fdownload%2Ffast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
+ },
+ "fastq": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npm.taobao.org/fastq/download/fastq-1.8.0.tgz?cache=0&sync_timestamp=1589280329638&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffastq%2Fdownload%2Ffastq-1.8.0.tgz",
+ "integrity": "sha1-VQ4fn1m7xl/hhctqm02VNXEH9IE=",
+ "dev": true,
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "figures": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npm.taobao.org/figures/download/figures-3.2.0.tgz?cache=0&sync_timestamp=1581865349068&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffigures%2Fdownload%2Ffigures-3.2.0.tgz",
+ "integrity": "sha1-YlwYvSk8YE3EqN2y/r8MiDQXRq8=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-5.0.1.tgz",
+ "integrity": "sha1-yg9u+m3T1WEzP7FFFQZcL6/fQ5w=",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^2.0.1"
+ }
+ },
+ "file-uri-to-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-2.0.0.tgz",
+ "integrity": "sha1-e0Fa66In1XWFHgpbDGQNdlZAP7o="
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz",
+ "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.2.tgz",
+ "integrity": "sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=",
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "statuses": "~1.5.0",
+ "unpipe": "~1.0.0"
+ }
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-4.1.0.tgz?cache=0&sync_timestamp=1597169842138&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-4.1.0.tgz",
+ "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "find-versions": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npm.taobao.org/find-versions/download/find-versions-3.2.0.tgz",
+ "integrity": "sha1-ECl/mAMKeGgpaBaQVF72We0dJU4=",
+ "dev": true,
+ "requires": {
+ "semver-regex": "^2.0.0"
+ }
+ },
+ "flat": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npm.taobao.org/flat/download/flat-5.0.2.tgz?cache=0&sync_timestamp=1602723468701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fflat%2Fdownload%2Fflat-5.0.2.tgz",
+ "integrity": "sha1-jKb+MyBp/6nTJMMnGYxZglnOskE=",
+ "dev": true
+ },
+ "flat-cache": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/flat-cache/download/flat-cache-2.0.1.tgz",
+ "integrity": "sha1-XSltbwS9pEpGMKMBQTvbwuwIXsA=",
+ "dev": true,
+ "requires": {
+ "flatted": "^2.0.0",
+ "rimraf": "2.6.3",
+ "write": "1.0.3"
+ }
+ },
+ "flatted": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npm.taobao.org/flatted/download/flatted-2.0.2.tgz",
+ "integrity": "sha1-RXWyHivO50NKqb5mL0t7X5wrUTg=",
+ "dev": true
+ },
+ "follow-redirects": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.13.0.tgz?cache=0&sync_timestamp=1597057976909&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.13.0.tgz",
+ "integrity": "sha1-tC6Nk6Kn7qXtiGM2dtZZe8jjhNs="
+ },
+ "forwarded": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz",
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
+ },
+ "fs-extra": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npm.taobao.org/fs-extra/download/fs-extra-8.1.0.tgz",
+ "integrity": "sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=",
+ "requires": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-2.1.3.tgz?cache=0&sync_timestamp=1588787369955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-2.1.3.tgz",
+ "integrity": "sha1-+3OHA66NL5/pAMM4Nt3r7ouX8j4=",
+ "dev": true,
+ "optional": true
+ },
+ "ftp": {
+ "version": "0.3.10",
+ "resolved": "https://registry.npm.taobao.org/ftp/download/ftp-0.3.10.tgz",
+ "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=",
+ "requires": {
+ "readable-stream": "1.1.x",
+ "xregexp": "2.0.0"
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz",
+ "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=",
+ "dev": true
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz",
+ "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=",
+ "dev": true
+ },
+ "get-own-enumerable-property-symbols": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npm.taobao.org/get-own-enumerable-property-symbols/download/get-own-enumerable-property-symbols-3.0.2.tgz?cache=0&sync_timestamp=1575993334275&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-own-enumerable-property-symbols%2Fdownload%2Fget-own-enumerable-property-symbols-3.0.2.tgz",
+ "integrity": "sha1-tf3nfyLL4185C04ImSLFC85u9mQ=",
+ "dev": true
+ },
+ "get-stdin": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npm.taobao.org/get-stdin/download/get-stdin-6.0.0.tgz",
+ "integrity": "sha1-ngm/cSs2CrkiXoEgSPcf3pyJZXs=",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-5.2.0.tgz?cache=0&sync_timestamp=1597056502934&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-5.2.0.tgz",
+ "integrity": "sha1-SWaheV7lrOZecGxLe+txJX1uItM=",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "get-uri": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npm.taobao.org/get-uri/download/get-uri-3.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-uri%2Fdownload%2Fget-uri-3.0.2.tgz",
+ "integrity": "sha1-8O8TVvqrxw4flAT6O2ayupv8clw=",
+ "requires": {
+ "@tootallnate/once": "1",
+ "data-uri-to-buffer": "3",
+ "debug": "4",
+ "file-uri-to-path": "2",
+ "fs-extra": "^8.1.0",
+ "ftp": "^0.3.10"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz",
+ "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
+ "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk="
+ }
+ }
+ },
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz?cache=0&sync_timestamp=1573078121947&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob%2Fdownload%2Fglob-7.1.6.tgz",
+ "integrity": "sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY=",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.1.tgz",
+ "integrity": "sha1-tsHvQXxOVmPqSY8cRa+saRa7wik=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "globals": {
+ "version": "12.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
+ "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.8.1"
+ }
+ },
+ "globby": {
+ "version": "11.0.1",
+ "resolved": "https://registry.npm.taobao.org/globby/download/globby-11.0.1.tgz?cache=0&sync_timestamp=1591083783605&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-11.0.1.tgz",
+ "integrity": "sha1-mivxB6Bo8//qvEmtcCx57ejP01c=",
+ "dev": true,
+ "requires": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.1.1",
+ "ignore": "^5.1.4",
+ "merge2": "^1.3.0",
+ "slash": "^3.0.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.4.tgz",
+ "integrity": "sha1-Ila94U02MpWMRl68ltxGfKB6Kfs="
+ },
+ "growl": {
+ "version": "1.10.5",
+ "resolved": "https://registry.npm.taobao.org/growl/download/growl-1.10.5.tgz",
+ "integrity": "sha1-8nNdwig2dPpnR4sQGBBZNVw2nl4=",
+ "dev": true
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz",
+ "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.1.tgz",
+ "integrity": "sha1-n1IUdYpEGWxAbZvXbOv4HsLdMeg=",
+ "dev": true
+ },
+ "he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz",
+ "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=",
+ "dev": true
+ },
+ "htmlparser2": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npm.taobao.org/htmlparser2/download/htmlparser2-4.1.0.tgz?cache=0&sync_timestamp=1601761730691&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtmlparser2%2Fdownload%2Fhtmlparser2-4.1.0.tgz",
+ "integrity": "sha1-mk7xYfLkYl6/ffvmwKL1LRilnng=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "domhandler": "^3.0.0",
+ "domutils": "^2.0.0",
+ "entities": "^2.0.0"
+ }
+ },
+ "http-errors": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.2.tgz?cache=0&sync_timestamp=1593407858306&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.7.2.tgz",
+ "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=",
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ }
+ },
+ "http-proxy-agent": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npm.taobao.org/http-proxy-agent/download/http-proxy-agent-4.0.1.tgz",
+ "integrity": "sha1-ioyO9/WTLM+VPClsqCkblap0qjo=",
+ "requires": {
+ "@tootallnate/once": "1",
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz",
+ "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
+ "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk="
+ }
+ }
+ },
+ "https-proxy-agent": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npm.taobao.org/https-proxy-agent/download/https-proxy-agent-5.0.0.tgz?cache=0&sync_timestamp=1581106803611&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttps-proxy-agent%2Fdownload%2Fhttps-proxy-agent-5.0.0.tgz",
+ "integrity": "sha1-4qkFQqu2inYuCghQ9sntrf2FBrI=",
+ "requires": {
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz",
+ "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
+ "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk="
+ }
+ }
+ },
+ "human-signals": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npm.taobao.org/human-signals/download/human-signals-1.1.1.tgz?cache=0&sync_timestamp=1584198662293&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhuman-signals%2Fdownload%2Fhuman-signals-1.1.1.tgz",
+ "integrity": "sha1-xbHNFPUK6uCatsWf5jujOV/k36M=",
+ "dev": true
+ },
+ "husky": {
+ "version": "4.2.5",
+ "resolved": "https://registry.npm.taobao.org/husky/download/husky-4.2.5.tgz?cache=0&sync_timestamp=1602813564105&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhusky%2Fdownload%2Fhusky-4.2.5.tgz",
+ "integrity": "sha1-K092Imc6cVefkB2Yhe1Eg5S1+jY=",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.0.0",
+ "ci-info": "^2.0.0",
+ "compare-versions": "^3.6.0",
+ "cosmiconfig": "^6.0.0",
+ "find-versions": "^3.2.0",
+ "opencollective-postinstall": "^2.0.2",
+ "pkg-dir": "^4.2.0",
+ "please-upgrade-node": "^3.2.0",
+ "slash": "^3.0.0",
+ "which-pm-runs": "^1.0.0"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&sync_timestamp=1594184264130&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz",
+ "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ignore": {
+ "version": "5.1.8",
+ "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-5.1.8.tgz?cache=0&sync_timestamp=1590809289115&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-5.1.8.tgz",
+ "integrity": "sha1-8VCotQo0KJsz4i9YiavU2AFvDlc=",
+ "dev": true
+ },
+ "import-fresh": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.2.1.tgz",
+ "integrity": "sha1-Yz/2GFBueTr1rJG/SLcmd+FcvmY=",
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/indent-string/download/indent-string-4.0.0.tgz",
+ "integrity": "sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE=",
+ "dev": true
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npm.taobao.org/indexof/download/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "intelli-espower-loader": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/intelli-espower-loader/download/intelli-espower-loader-1.0.1.tgz",
+ "integrity": "sha1-LHsDFGvB1GvyENCgOXxckatMorA=",
+ "dev": true,
+ "requires": {
+ "espower-loader": "^1.0.0"
+ }
+ },
+ "ip": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz",
+ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo="
+ },
+ "ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM="
+ },
+ "is-arguments": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npm.taobao.org/is-arguments/download/is-arguments-1.0.4.tgz",
+ "integrity": "sha1-P6+WbHy6D/Q3+zH2JQCC/PBEjPM=",
+ "dev": true
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-2.1.0.tgz",
+ "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-callable": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npm.taobao.org/is-callable/download/is-callable-1.2.2.tgz?cache=0&sync_timestamp=1600719276620&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-callable%2Fdownload%2Fis-callable-1.2.2.tgz",
+ "integrity": "sha1-x8ZxXNItTdtI0+GZcCI6zquwgNk=",
+ "dev": true
+ },
+ "is-date-object": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.2.tgz?cache=0&sync_timestamp=1576729165697&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-date-object%2Fdownload%2Fis-date-object-1.0.2.tgz",
+ "integrity": "sha1-vac28s2P0G0yhE53Q7+nSUw7/X4=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz",
+ "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-negative-zero": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/is-negative-zero/download/is-negative-zero-2.0.0.tgz",
+ "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=",
+ "dev": true
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz",
+ "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=",
+ "dev": true
+ },
+ "is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/is-obj/download/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+ "dev": true
+ },
+ "is-plain-obj": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-2.1.0.tgz?cache=0&sync_timestamp=1602541451286&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-obj%2Fdownload%2Fis-plain-obj-2.1.0.tgz",
+ "integrity": "sha1-ReQuN/zPH0Dajl927iFRWEDAkoc=",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npm.taobao.org/is-regex/download/is-regex-1.1.1.tgz?cache=0&sync_timestamp=1596555762356&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-regex%2Fdownload%2Fis-regex-1.1.1.tgz",
+ "integrity": "sha1-xvmKrMVG9s7FRooHt7FTq1ZKV7k=",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "is-regexp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/is-regexp/download/is-regexp-1.0.0.tgz",
+ "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/is-stream/download/is-stream-2.0.0.tgz",
+ "integrity": "sha1-venDJoDW+uBBKdasnZIc54FfeOM=",
+ "dev": true
+ },
+ "is-symbol": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.3.tgz",
+ "integrity": "sha1-OOEBS55jKb4N6dJKQU/XRB7GGTc=",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "is-url": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npm.taobao.org/is-url/download/is-url-1.2.4.tgz",
+ "integrity": "sha1-BKTfRtKMTP89c9Af8Gq+sxihqlI=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1586796260005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz",
+ "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.14.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.14.0.tgz",
+ "integrity": "sha1-p6NBcPJqIbsWJCTYray0ETpp5II=",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npm.taobao.org/json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz?cache=0&sync_timestamp=1599064788298&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-parse-even-better-errors%2Fdownload%2Fjson-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz?cache=0&sync_timestamp=1599333856086&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema-traverse%2Fdownload%2Fjson-schema-traverse-0.4.1.tgz",
+ "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "lines-and-columns": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npm.taobao.org/lines-and-columns/download/lines-and-columns-1.1.6.tgz",
+ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
+ "dev": true
+ },
+ "lint-staged": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npm.taobao.org/lint-staged/download/lint-staged-10.4.0.tgz?cache=0&sync_timestamp=1602914408937&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flint-staged%2Fdownload%2Flint-staged-10.4.0.tgz",
+ "integrity": "sha1-0YYo9zcyjgu7+H0YP0Agkw6amE4=",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.0",
+ "cli-truncate": "^2.1.0",
+ "commander": "^6.0.0",
+ "cosmiconfig": "^7.0.0",
+ "debug": "^4.1.1",
+ "dedent": "^0.7.0",
+ "enquirer": "^2.3.6",
+ "execa": "^4.0.3",
+ "listr2": "^2.6.0",
+ "log-symbols": "^4.0.0",
+ "micromatch": "^4.0.2",
+ "normalize-path": "^3.0.0",
+ "please-upgrade-node": "^3.2.0",
+ "string-argv": "0.3.1",
+ "stringify-object": "^3.3.0"
+ },
+ "dependencies": {
+ "cosmiconfig": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-7.0.0.tgz?cache=0&sync_timestamp=1596310819353&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-7.0.0.tgz",
+ "integrity": "sha1-75tE13OVnK5j3ezRIt4jhTtg+NM=",
+ "dev": true,
+ "requires": {
+ "@types/parse-json": "^4.0.0",
+ "import-fresh": "^3.2.1",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0",
+ "yaml": "^1.10.0"
+ }
+ },
+ "debug": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz",
+ "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
+ "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
+ "dev": true
+ }
+ }
+ },
+ "listr2": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npm.taobao.org/listr2/download/listr2-2.6.2.tgz",
+ "integrity": "sha1-SRLrAeHi3XLsN/OJWla/JiLW82o=",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.0",
+ "cli-truncate": "^2.1.0",
+ "figures": "^3.2.0",
+ "indent-string": "^4.0.0",
+ "log-update": "^4.0.0",
+ "p-map": "^4.0.0",
+ "rxjs": "^6.6.2",
+ "through": "^2.3.8"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz",
+ "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.20",
+ "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.20.tgz?cache=0&sync_timestamp=1597335994883&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.20.tgz",
+ "integrity": "sha1-tEqbYpe8tpjxxRo1RaKzs2jVnFI=",
+ "dev": true
+ },
+ "log-symbols": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/log-symbols/download/log-symbols-4.0.0.tgz?cache=0&sync_timestamp=1587898912367&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flog-symbols%2Fdownload%2Flog-symbols-4.0.0.tgz",
+ "integrity": "sha1-abPMRtIPRI7M23XqH6cz2eghySA=",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.0.0"
+ }
+ },
+ "log-update": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/log-update/download/log-update-4.0.0.tgz?cache=0&sync_timestamp=1582186170811&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flog-update%2Fdownload%2Flog-update-4.0.0.tgz",
+ "integrity": "sha1-WJ7NNSRx8qHAxXAodUOmTf0g4KE=",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^4.3.0",
+ "cli-cursor": "^3.1.0",
+ "slice-ansi": "^4.0.0",
+ "wrap-ansi": "^6.2.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1601839122515&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz",
+ "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/astral-regex/download/astral-regex-2.0.0.tgz",
+ "integrity": "sha1-SDFDxWeu7UeFdZwIZXhtx319LjE=",
+ "dev": true
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+ "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+ "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-4.0.0.tgz",
+ "integrity": "sha1-UA6N0P1VsFgVCGJVsxla3ypF/ms=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ }
+ }
+ }
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
+ },
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
+ },
+ "merge-estraverse-visitors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/merge-estraverse-visitors/download/merge-estraverse-visitors-1.0.0.tgz",
+ "integrity": "sha1-65aDOLXe1c7tgs7AMH3sui2OqZQ=",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.0.0"
+ }
+ },
+ "merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/merge-stream/download/merge-stream-2.0.0.tgz",
+ "integrity": "sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A=",
+ "dev": true
+ },
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npm.taobao.org/merge2/download/merge2-1.4.1.tgz?cache=0&sync_timestamp=1591170027156&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmerge2%2Fdownload%2Fmerge2-1.4.1.tgz",
+ "integrity": "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=",
+ "dev": true
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+ },
+ "micromatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.2.tgz",
+ "integrity": "sha1-T8sJmb+fvC/L3SEvbWKbmlbDklk=",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.1",
+ "picomatch": "^2.0.5"
+ }
+ },
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz?cache=0&sync_timestamp=1590596706367&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-1.6.0.tgz",
+ "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE="
+ },
+ "mime-db": {
+ "version": "1.44.0",
+ "resolved": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.44.0.tgz?cache=0&sync_timestamp=1600831210195&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.44.0.tgz",
+ "integrity": "sha1-+hHF6wrKEzS0Izy01S8QxaYnL5I="
+ },
+ "mime-types": {
+ "version": "2.1.27",
+ "resolved": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.27.tgz",
+ "integrity": "sha1-R5SfmOJ56lMRn1ci4PNOUpvsAJ8=",
+ "requires": {
+ "mime-db": "1.44.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz?cache=0&sync_timestamp=1596095644798&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-2.1.0.tgz",
+ "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz",
+ "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimist%2Fdownload%2Fminimist-1.2.5.tgz",
+ "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz?cache=0&sync_timestamp=1587535418745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz",
+ "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "mocha": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npm.taobao.org/mocha/download/mocha-8.2.0.tgz?cache=0&sync_timestamp=1602881142408&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmocha%2Fdownload%2Fmocha-8.2.0.tgz",
+ "integrity": "sha1-+Kp5EQtLWmWAxl1N2Ag8QlKCYk4=",
+ "dev": true,
+ "requires": {
+ "@ungap/promise-all-settled": "1.1.2",
+ "ansi-colors": "4.1.1",
+ "browser-stdout": "1.3.1",
+ "chokidar": "3.4.3",
+ "debug": "4.2.0",
+ "diff": "4.0.2",
+ "escape-string-regexp": "4.0.0",
+ "find-up": "5.0.0",
+ "glob": "7.1.6",
+ "growl": "1.10.5",
+ "he": "1.2.0",
+ "js-yaml": "3.14.0",
+ "log-symbols": "4.0.0",
+ "minimatch": "3.0.4",
+ "ms": "2.1.2",
+ "nanoid": "3.1.12",
+ "serialize-javascript": "5.0.1",
+ "strip-json-comments": "3.1.1",
+ "supports-color": "7.2.0",
+ "which": "2.0.2",
+ "wide-align": "1.1.3",
+ "workerpool": "6.0.2",
+ "yargs": "13.3.2",
+ "yargs-parser": "13.1.2",
+ "yargs-unparser": "2.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz",
+ "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ=",
+ "dev": true
+ },
+ "find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-5.0.0.tgz?cache=0&sync_timestamp=1597169842138&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-5.0.0.tgz",
+ "integrity": "sha1-TJKBnstwg1YeT0okCoa+UZj1Nvw=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz",
+ "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+ "dev": true
+ },
+ "locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-6.0.0.tgz",
+ "integrity": "sha1-VTIeswn+u8WcSAHZMackUqaB0oY=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
+ "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
+ "dev": true
+ },
+ "p-limit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-3.0.2.tgz?cache=0&sync_timestamp=1594559734248&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-3.0.2.tgz",
+ "integrity": "sha1-FmTgEK88rcaBuq/T4qQ3vnsPtf4=",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-5.0.0.tgz",
+ "integrity": "sha1-g8gxXGeFAF470CGDlBHJ4RDm2DQ=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^3.0.2"
+ }
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1598611709087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+ "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "multi-stage-sourcemap": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npm.taobao.org/multi-stage-sourcemap/download/multi-stage-sourcemap-0.2.1.tgz",
+ "integrity": "sha1-sJ/IWG6qF/gdV1xK0C4Pej9rEQU=",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.1.34"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.1.43",
+ "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.1.43.tgz?cache=0&sync_timestamp=1571657176668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.1.43.tgz",
+ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+ "dev": true,
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ }
+ }
+ },
+ "nanoid": {
+ "version": "3.1.12",
+ "resolved": "https://registry.npm.taobao.org/nanoid/download/nanoid-3.1.12.tgz?cache=0&sync_timestamp=1603419433040&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnanoid%2Fdownload%2Fnanoid-3.1.12.tgz",
+ "integrity": "sha1-b3c2xi6NOUIWAeSgx3YjqX6mllQ=",
+ "dev": true
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "negotiator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz",
+ "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs="
+ },
+ "netmask": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npm.taobao.org/netmask/download/netmask-1.0.6.tgz",
+ "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU="
+ },
+ "next-tick": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/next-tick/download/next-tick-1.0.0.tgz",
+ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
+ "dev": true
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz",
+ "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=",
+ "dev": true
+ },
+ "npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-4.0.1.tgz",
+ "integrity": "sha1-t+zR5e1T2o43pV4cImnguX7XSOo=",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.0.0"
+ }
+ },
+ "object-inspect": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npm.taobao.org/object-inspect/download/object-inspect-1.8.0.tgz?cache=0&sync_timestamp=1592545231350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-inspect%2Fdownload%2Fobject-inspect-1.8.0.tgz",
+ "integrity": "sha1-34B+Xs9TpgnMa/6T6sPMe+WzqdA=",
+ "dev": true
+ },
+ "object-is": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npm.taobao.org/object-is/download/object-is-1.1.3.tgz?cache=0&sync_timestamp=1601502788762&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-is%2Fdownload%2Fobject-is-1.1.3.tgz",
+ "integrity": "sha1-LjueZVYBN0Ve471irsTZCi6hzIE=",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.18.0-next.1"
+ }
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz",
+ "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4=",
+ "dev": true
+ },
+ "object.assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npm.taobao.org/object.assign/download/object.assign-4.1.1.tgz?cache=0&sync_timestamp=1599844927493&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.assign%2Fdownload%2Fobject.assign-4.1.1.tgz",
+ "integrity": "sha1-MDhnpmbN1Bk27N7fsfjz4ypHjN0=",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.18.0-next.0",
+ "has-symbols": "^1.0.1",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-5.1.2.tgz?cache=0&sync_timestamp=1597005345612&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fonetime%2Fdownload%2Fonetime-5.1.2.tgz",
+ "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "opencollective-postinstall": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npm.taobao.org/opencollective-postinstall/download/opencollective-postinstall-2.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fopencollective-postinstall%2Fdownload%2Fopencollective-postinstall-2.0.3.tgz",
+ "integrity": "sha1-eg//l49tv6TQBiOPusmO1BmMMlk=",
+ "dev": true
+ },
+ "optionator": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npm.taobao.org/optionator/download/optionator-0.8.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Foptionator%2Fdownload%2Foptionator-0.8.3.tgz",
+ "integrity": "sha1-hPodA2/p08fiHZmIS2ARZ+yPtJU=",
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.6",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "word-wrap": "~1.2.3"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-2.3.0.tgz?cache=0&sync_timestamp=1594559734248&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-2.3.0.tgz",
+ "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz",
+ "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/p-map/download/p-map-4.0.0.tgz",
+ "integrity": "sha1-uy+Vpe2i7BaOySdOBqdHw+KQTSs=",
+ "dev": true,
+ "requires": {
+ "aggregate-error": "^3.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz",
+ "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=",
+ "dev": true
+ },
+ "pac-proxy-agent": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npm.taobao.org/pac-proxy-agent/download/pac-proxy-agent-4.1.0.tgz",
+ "integrity": "sha1-Zog+6rrckV/F6VRXMkyw8Kx43vs=",
+ "requires": {
+ "@tootallnate/once": "1",
+ "agent-base": "6",
+ "debug": "4",
+ "get-uri": "3",
+ "http-proxy-agent": "^4.0.1",
+ "https-proxy-agent": "5",
+ "pac-resolver": "^4.1.0",
+ "raw-body": "^2.2.0",
+ "socks-proxy-agent": "5"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz",
+ "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
+ "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk="
+ }
+ }
+ },
+ "pac-resolver": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npm.taobao.org/pac-resolver/download/pac-resolver-4.1.0.tgz?cache=0&sync_timestamp=1581134452130&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpac-resolver%2Fdownload%2Fpac-resolver-4.1.0.tgz",
+ "integrity": "sha1-SxLn0JayVaO4TlP2gx8y6cfl/pU=",
+ "requires": {
+ "degenerator": "^2.2.0",
+ "ip": "^1.1.5",
+ "netmask": "^1.0.6"
+ }
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/parent-module/download/parent-module-1.0.1.tgz",
+ "integrity": "sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=",
+ "dev": true,
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-5.1.0.tgz?cache=0&sync_timestamp=1598129182781&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-5.1.0.tgz",
+ "integrity": "sha1-+WCIzfJKj6qa6poAny2dlCyZlkY=",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz",
+ "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ="
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz",
+ "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz",
+ "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
+ },
+ "path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-4.0.0.tgz",
+ "integrity": "sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs=",
+ "dev": true
+ },
+ "picomatch": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.2.tgz?cache=0&sync_timestamp=1584790434095&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpicomatch%2Fdownload%2Fpicomatch-2.2.2.tgz",
+ "integrity": "sha1-IfMz6ba46v8CRo9RRupAbTRfTa0=",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-4.2.0.tgz?cache=0&sync_timestamp=1602859045787&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpkg-dir%2Fdownload%2Fpkg-dir-4.2.0.tgz",
+ "integrity": "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.0.0"
+ }
+ },
+ "please-upgrade-node": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npm.taobao.org/please-upgrade-node/download/please-upgrade-node-3.2.0.tgz",
+ "integrity": "sha1-rt3T+ZTJM+StmLmdmlVu+g4v6UI=",
+ "dev": true,
+ "requires": {
+ "semver-compare": "^1.0.0"
+ }
+ },
+ "power-assert": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npm.taobao.org/power-assert/download/power-assert-1.6.1.tgz",
+ "integrity": "sha1-soy8Aq6Aiv0UMdDNUJOjmsWlsf4=",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "empower": "^1.3.1",
+ "power-assert-formatter": "^1.4.1",
+ "universal-deep-strict-equal": "^1.2.1",
+ "xtend": "^4.0.0"
+ }
+ },
+ "power-assert-context-formatter": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/power-assert-context-formatter/download/power-assert-context-formatter-1.2.0.tgz",
+ "integrity": "sha1-j75yaSKI7FpyA83yFci4OKYGHSo=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.0.0",
+ "power-assert-context-traversal": "^1.2.0"
+ }
+ },
+ "power-assert-context-reducer-ast": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/power-assert-context-reducer-ast/download/power-assert-context-reducer-ast-1.2.0.tgz",
+ "integrity": "sha1-x8ocnjmm+3F/esX+nnbhkr9SXfM=",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.0.0",
+ "acorn-es7-plugin": "^1.0.12",
+ "core-js": "^2.0.0",
+ "espurify": "^1.6.0",
+ "estraverse": "^4.2.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.7.4",
+ "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-5.7.4.tgz",
+ "integrity": "sha1-Po2KmUfQWZoXltECJddDL0pKz14=",
+ "dev": true
+ }
+ }
+ },
+ "power-assert-context-traversal": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/power-assert-context-traversal/download/power-assert-context-traversal-1.2.0.tgz",
+ "integrity": "sha1-9ucUVLr2QN5cHJwnA0n1yasLLpQ=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.0.0",
+ "estraverse": "^4.1.0"
+ }
+ },
+ "power-assert-formatter": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npm.taobao.org/power-assert-formatter/download/power-assert-formatter-1.4.1.tgz",
+ "integrity": "sha1-XcEl7VCj37HdomwZNH879Y7CiEo=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.0.0",
+ "power-assert-context-formatter": "^1.0.7",
+ "power-assert-context-reducer-ast": "^1.0.7",
+ "power-assert-renderer-assertion": "^1.0.7",
+ "power-assert-renderer-comparison": "^1.0.7",
+ "power-assert-renderer-diagram": "^1.0.7",
+ "power-assert-renderer-file": "^1.0.7"
+ }
+ },
+ "power-assert-renderer-assertion": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/power-assert-renderer-assertion/download/power-assert-renderer-assertion-1.2.0.tgz",
+ "integrity": "sha1-Pbb/zaEGs3vB4GQyrQ10imgrFHo=",
+ "dev": true,
+ "requires": {
+ "power-assert-renderer-base": "^1.1.1",
+ "power-assert-util-string-width": "^1.2.0"
+ }
+ },
+ "power-assert-renderer-base": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npm.taobao.org/power-assert-renderer-base/download/power-assert-renderer-base-1.1.1.tgz",
+ "integrity": "sha1-lqZQxv0F7hvB9mtUrWFELIs/Y+s=",
+ "dev": true
+ },
+ "power-assert-renderer-comparison": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/power-assert-renderer-comparison/download/power-assert-renderer-comparison-1.2.0.tgz",
+ "integrity": "sha1-5PiBEyJaab6KpYbq0FrvmUYsBJU=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.0.0",
+ "diff-match-patch": "^1.0.0",
+ "power-assert-renderer-base": "^1.1.1",
+ "stringifier": "^1.3.0",
+ "type-name": "^2.0.1"
+ }
+ },
+ "power-assert-renderer-diagram": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/power-assert-renderer-diagram/download/power-assert-renderer-diagram-1.2.0.tgz",
+ "integrity": "sha1-N/ZuhULlZ3xbWObXKwHA2aMOIhk=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.0.0",
+ "power-assert-renderer-base": "^1.1.1",
+ "power-assert-util-string-width": "^1.2.0",
+ "stringifier": "^1.3.0"
+ }
+ },
+ "power-assert-renderer-file": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/power-assert-renderer-file/download/power-assert-renderer-file-1.2.0.tgz",
+ "integrity": "sha1-P0vr2eFFXXXPKsVB57tRWofUzks=",
+ "dev": true,
+ "requires": {
+ "power-assert-renderer-base": "^1.1.1"
+ }
+ },
+ "power-assert-util-string-width": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/power-assert-util-string-width/download/power-assert-util-string-width-1.2.0.tgz",
+ "integrity": "sha1-bgbV41gbuHbF03fFMQn/+pW9kaA=",
+ "dev": true,
+ "requires": {
+ "eastasianwidth": "^0.2.0"
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
+ },
+ "prettier": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npm.taobao.org/prettier/download/prettier-2.1.2.tgz?cache=0&sync_timestamp=1600215482255&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-2.1.2.tgz",
+ "integrity": "sha1-MFBwDa4uTItnxMP2Zs24r0BeHOU=",
+ "dev": true
+ },
+ "prettier-linter-helpers": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/prettier-linter-helpers/download/prettier-linter-helpers-1.0.0.tgz",
+ "integrity": "sha1-0j1B/hN1ZG3i0BBNNFSjAIgCz3s=",
+ "dev": true,
+ "requires": {
+ "fast-diff": "^1.1.2"
+ }
+ },
+ "progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz",
+ "integrity": "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=",
+ "dev": true
+ },
+ "proxy-addr": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.6.tgz",
+ "integrity": "sha1-/cIzZQVEfT8vLGOO0nLK9hS7sr8=",
+ "requires": {
+ "forwarded": "~0.1.2",
+ "ipaddr.js": "1.9.1"
+ }
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz",
+ "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz",
+ "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz",
+ "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw="
+ },
+ "randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/randombytes/download/randombytes-2.1.0.tgz",
+ "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.1.tgz",
+ "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE="
+ },
+ "raw-body": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npm.taobao.org/raw-body/download/raw-body-2.4.0.tgz",
+ "integrity": "sha1-oc5vucm8NWylLoklarWQWeE9AzI=",
+ "requires": {
+ "bytes": "3.1.0",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-1.1.14.tgz?cache=0&sync_timestamp=1581624324274&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "readdirp": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-3.5.0.tgz?cache=0&sync_timestamp=1602584331621&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freaddirp%2Fdownload%2Freaddirp-3.5.0.tgz",
+ "integrity": "sha1-m6dMAZsV02UnjS6Ru4xI17TULJ4=",
+ "dev": true,
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "regexp.prototype.flags": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npm.taobao.org/regexp.prototype.flags/download/regexp.prototype.flags-1.3.0.tgz?cache=0&sync_timestamp=1576388141321&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexp.prototype.flags%2Fdownload%2Fregexp.prototype.flags-1.3.0.tgz",
+ "integrity": "sha1-erqJs8E6ZFCdq888qNn7ub31y3U=",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.17.7",
+ "resolved": "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.17.7.tgz?cache=0&sync_timestamp=1601502719982&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fes-abstract%2Fdownload%2Fes-abstract-1.17.7.tgz",
+ "integrity": "sha1-pN5hsvZpifx0IWdsHLl4dXOs5Uw=",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.2.2",
+ "is-regex": "^1.1.1",
+ "object-inspect": "^1.8.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.1",
+ "string.prototype.trimend": "^1.0.1",
+ "string.prototype.trimstart": "^1.0.1"
+ }
+ }
+ }
+ },
+ "regexpp": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npm.taobao.org/regexpp/download/regexpp-3.1.0.tgz",
+ "integrity": "sha1-IG0K0KVkjP+9uK5GQ489xRyfeOI=",
+ "dev": true
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz",
+ "integrity": "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=",
+ "dev": true
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz",
+ "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-3.1.0.tgz",
+ "integrity": "sha1-OfZ8VLOnpYzqUjbZXPADQjljH34=",
+ "dev": true,
+ "requires": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npm.taobao.org/reusify/download/reusify-1.0.4.tgz",
+ "integrity": "sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY=",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.6.3.tgz",
+ "integrity": "sha1-stEE/g2Psnz54KHNqCYt04M8bKs=",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "run-parallel": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npm.taobao.org/run-parallel/download/run-parallel-1.1.9.tgz",
+ "integrity": "sha1-yd06fPn0ssS2JE4XOm7YZuYd1nk=",
+ "dev": true
+ },
+ "rxjs": {
+ "version": "6.6.3",
+ "resolved": "https://registry.npm.taobao.org/rxjs/download/rxjs-6.6.3.tgz?cache=0&sync_timestamp=1602770834162&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frxjs%2Fdownload%2Frxjs-6.6.3.tgz",
+ "integrity": "sha1-jKhGNcTaqQDA05Z6buesYCce5VI=",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.9.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-1.14.1.tgz",
+ "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=",
+ "dev": true
+ }
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz",
+ "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0="
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz",
+ "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo="
+ },
+ "semver": {
+ "version": "7.3.2",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.3.2.tgz",
+ "integrity": "sha1-YElisFK4HtB4aq6EOJ/7pw/9OTg=",
+ "dev": true
+ },
+ "semver-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/semver-compare/download/semver-compare-1.0.0.tgz",
+ "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
+ "dev": true
+ },
+ "semver-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/semver-regex/download/semver-regex-2.0.0.tgz",
+ "integrity": "sha1-qTwsWERTmncCMzeRB7OMe0rJ0zg=",
+ "dev": true
+ },
+ "send": {
+ "version": "0.17.1",
+ "resolved": "https://registry.npm.taobao.org/send/download/send-0.17.1.tgz",
+ "integrity": "sha1-wdiwWfeQD3Rm3Uk4vcROEd2zdsg=",
+ "requires": {
+ "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.7.2",
+ "mime": "1.6.0",
+ "ms": "2.1.1",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.1",
+ "statuses": "~1.5.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz",
+ "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo="
+ }
+ }
+ },
+ "serialize-javascript": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-5.0.1.tgz?cache=0&sync_timestamp=1599740650381&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fserialize-javascript%2Fdownload%2Fserialize-javascript-5.0.1.tgz",
+ "integrity": "sha1-eIbshIBJpGJGepfT2Rjrsqr5NPQ=",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "serve-static": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npm.taobao.org/serve-static/download/serve-static-1.14.1.tgz",
+ "integrity": "sha1-Zm5jbcTwEPfvKZcKiKZ0MgiYsvk=",
+ "requires": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.17.1"
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
+ "setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.1.tgz",
+ "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM="
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-2.0.0.tgz",
+ "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-3.0.0.tgz",
+ "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz",
+ "integrity": "sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw=",
+ "dev": true
+ },
+ "slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/slash/download/slash-3.0.0.tgz",
+ "integrity": "sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-2.1.0.tgz",
+ "integrity": "sha1-ys12k0YaY3pXiNkqfdT7oGjoFjY=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "astral-regex": "^1.0.0",
+ "is-fullwidth-code-point": "^2.0.0"
+ }
+ },
+ "smart-buffer": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npm.taobao.org/smart-buffer/download/smart-buffer-4.1.0.tgz",
+ "integrity": "sha1-kWBcJdkWUvRmHqacz0XxszHKIbo="
+ },
+ "socks": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npm.taobao.org/socks/download/socks-2.4.4.tgz?cache=0&sync_timestamp=1599605506578&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocks%2Fdownload%2Fsocks-2.4.4.tgz",
+ "integrity": "sha1-8aM4LngUrijJe7gqOLwawkshzKI=",
+ "requires": {
+ "ip": "^1.1.5",
+ "smart-buffer": "^4.1.0"
+ }
+ },
+ "socks-proxy-agent": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npm.taobao.org/socks-proxy-agent/download/socks-proxy-agent-5.0.0.tgz?cache=0&sync_timestamp=1580845554635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocks-proxy-agent%2Fdownload%2Fsocks-proxy-agent-5.0.0.tgz",
+ "integrity": "sha1-fA82Tnsc9KekN+cSU77XLpAEvmA=",
+ "requires": {
+ "agent-base": "6",
+ "debug": "4",
+ "socks": "^2.3.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz",
+ "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
+ "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk="
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1571657176668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz",
+ "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+ "optional": true
+ },
+ "source-map-support": {
+ "version": "0.4.18",
+ "resolved": "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.4.18.tgz?cache=0&sync_timestamp=1587719289626&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-support%2Fdownload%2Fsource-map-support-0.4.18.tgz",
+ "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.5.6"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz?cache=0&sync_timestamp=1571657176668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz?cache=0&sync_timestamp=1587327902535&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatuses%2Fdownload%2Fstatuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
+ },
+ "streamsearch": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npm.taobao.org/streamsearch/download/streamsearch-0.1.2.tgz",
+ "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo="
+ },
+ "string-argv": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npm.taobao.org/string-argv/download/string-argv-0.3.1.tgz",
+ "integrity": "sha1-leL77AQnrhkYSTX4FtdKqkxcGdo=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz",
+ "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz",
+ "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz",
+ "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/string.prototype.trimend/download/string.prototype.trimend-1.0.2.tgz?cache=0&sync_timestamp=1603219618123&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimend%2Fdownload%2Fstring.prototype.trimend-1.0.2.tgz",
+ "integrity": "sha1-bd2ah5a8cUtImjriIkaiCPN7+kY=",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.18.0-next.1"
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/string.prototype.trimstart/download/string.prototype.trimstart-1.0.2.tgz?cache=0&sync_timestamp=1603219618047&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimstart%2Fdownload%2Fstring.prototype.trimstart-1.0.2.tgz",
+ "integrity": "sha1-ItRdqBAVMJzQzdeXh+iRn8XGE+c=",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.18.0-next.1"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+ },
+ "stringifier": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npm.taobao.org/stringifier/download/stringifier-1.4.0.tgz",
+ "integrity": "sha1-1wRYFWf0UmJl0A7Y7LNUoCw/7Cg=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.0.0",
+ "traverse": "^0.6.6",
+ "type-name": "^2.0.1"
+ }
+ },
+ "stringify-object": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npm.taobao.org/stringify-object/download/stringify-object-3.3.0.tgz",
+ "integrity": "sha1-cDBlrvyhkwDTzoivT1s5VtdVZik=",
+ "dev": true,
+ "requires": {
+ "get-own-enumerable-property-symbols": "^3.0.0",
+ "is-obj": "^1.0.1",
+ "is-regexp": "^1.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.0.tgz",
+ "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ },
+ "strip-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/strip-comments/download/strip-comments-2.0.1.tgz",
+ "integrity": "sha1-StEcP7ysF3pnpArCJMoznKHBups="
+ },
+ "strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/strip-final-newline/download/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0=",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-3.1.1.tgz?cache=0&sync_timestamp=1594567532500&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-3.1.1.tgz",
+ "integrity": "sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1598611709087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz",
+ "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "table": {
+ "version": "5.4.6",
+ "resolved": "https://registry.npm.taobao.org/table/download/table-5.4.6.tgz",
+ "integrity": "sha1-EpLRlQDOP4YFOwXw6Ofko7shB54=",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.10.2",
+ "lodash": "^4.17.14",
+ "slice-ansi": "^2.1.0",
+ "string-width": "^3.0.0"
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npm.taobao.org/through/download/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz",
+ "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "toidentifier": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/toidentifier/download/toidentifier-1.0.0.tgz",
+ "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM="
+ },
+ "traverse": {
+ "version": "0.6.6",
+ "resolved": "https://registry.npm.taobao.org/traverse/download/traverse-0.6.6.tgz",
+ "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=",
+ "dev": true
+ },
+ "tslib": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-2.0.3.tgz",
+ "integrity": "sha1-jgdBrEX8DCJuWKF7/D5kubxsphw="
+ },
+ "tsutils": {
+ "version": "3.17.1",
+ "resolved": "https://registry.npm.taobao.org/tsutils/download/tsutils-3.17.1.tgz",
+ "integrity": "sha1-7XGZF/EcoN7lhicrKsSeAVot11k=",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.8.1"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-1.14.1.tgz",
+ "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=",
+ "dev": true
+ }
+ }
+ },
+ "tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npm.taobao.org/tunnel/download/tunnel-0.0.6.tgz",
+ "integrity": "sha1-cvExSzSlsZLbASMk3yzFh8pH+Sw="
+ },
+ "type": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/type/download/type-1.2.0.tgz?cache=0&sync_timestamp=1598016585110&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype%2Fdownload%2Ftype-1.2.0.tgz",
+ "integrity": "sha1-hI3XaY2vo+VKbEeedZxLw/GIR6A=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ },
+ "type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "dev": true
+ },
+ "type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npm.taobao.org/type-is/download/type-is-1.6.18.tgz",
+ "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=",
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ }
+ },
+ "type-name": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npm.taobao.org/type-name/download/type-name-2.0.2.tgz",
+ "integrity": "sha1-7+fUEj2KxSr/9/QMfk3sUmYAj7Q=",
+ "dev": true
+ },
+ "typescript": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npm.taobao.org/typescript/download/typescript-4.0.3.tgz?cache=0&sync_timestamp=1603608626888&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftypescript%2Fdownload%2Ftypescript-4.0.3.tgz",
+ "integrity": "sha1-FTu9Ro7wdyXB35x36LRT+NNqu6U=",
+ "dev": true
+ },
+ "universal-deep-strict-equal": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npm.taobao.org/universal-deep-strict-equal/download/universal-deep-strict-equal-1.2.2.tgz",
+ "integrity": "sha1-DaSsL3PP95JMgfpN4BjKViyisKc=",
+ "dev": true,
+ "requires": {
+ "array-filter": "^1.0.0",
+ "indexof": "0.0.1",
+ "object-keys": "^1.0.0"
+ }
+ },
+ "universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz?cache=0&sync_timestamp=1603179967633&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funiversalify%2Fdownload%2Funiversalify-0.1.2.tgz",
+ "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY="
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+ },
+ "uri-js": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.0.tgz?cache=0&sync_timestamp=1598814377097&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.4.0.tgz",
+ "integrity": "sha1-qnFCYd55PoqCNHp7zJznTobyhgI=",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
+ },
+ "v8-compile-cache": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.1.1.tgz",
+ "integrity": "sha1-VLw83UMxe8qR413K8wWxpyN950U=",
+ "dev": true
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz?cache=0&sync_timestamp=1574116720213&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-2.0.2.tgz",
+ "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "dev": true
+ },
+ "which-pm-runs": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/which-pm-runs/download/which-pm-runs-1.0.0.tgz",
+ "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=",
+ "dev": true
+ },
+ "wide-align": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npm.taobao.org/wide-align/download/wide-align-1.1.3.tgz",
+ "integrity": "sha1-rgdOa9wMFKQx6ATmJFScYzsABFc=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.2 || 2"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz",
+ "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz",
+ "integrity": "sha1-YQY29rH3A4kb00dxzLF/uTtHB5w="
+ },
+ "workerpool": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npm.taobao.org/workerpool/download/workerpool-6.0.2.tgz",
+ "integrity": "sha1-4kG0PY0DPxvrUseFEGlFYDnR1Dg=",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha1-6Tk7oHEC5skaOyIUePAlfNKFblM=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1601839122515&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz",
+ "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+ "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+ "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz?cache=0&sync_timestamp=1603212180491&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-8.0.0.tgz",
+ "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz",
+ "integrity": "sha1-lSGCxGzHssMT0VluYjmSvRY7crU=",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "write": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npm.taobao.org/write/download/write-1.0.3.tgz",
+ "integrity": "sha1-CADhRSO5I6OH5BUSPIZWFqrg9cM=",
+ "dev": true,
+ "requires": {
+ "mkdirp": "^0.5.1"
+ }
+ },
+ "xregexp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/xregexp/download/xregexp-2.0.0.tgz?cache=0&sync_timestamp=1581429204252&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxregexp%2Fdownload%2Fxregexp-2.0.0.tgz",
+ "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM="
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz",
+ "integrity": "sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q=",
+ "dev": true
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-4.0.0.tgz",
+ "integrity": "sha1-le+U+F7MgdAHwmThkKEg8KPIVms=",
+ "dev": true
+ },
+ "yaml": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npm.taobao.org/yaml/download/yaml-1.10.0.tgz",
+ "integrity": "sha1-O1k63ZRIdgd9TWg/7gEIG9n/8x4=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "13.3.2",
+ "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-13.3.2.tgz?cache=0&sync_timestamp=1602805561021&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-13.3.2.tgz",
+ "integrity": "sha1-rX/+/sGqWVZayRX4Lcyzipwxot0=",
+ "dev": true,
+ "requires": {
+ "cliui": "^5.0.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^3.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.1.2"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz?cache=0&sync_timestamp=1597169842138&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-3.0.0.tgz",
+ "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz",
+ "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz",
+ "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "13.1.2",
+ "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-13.1.2.tgz?cache=0&sync_timestamp=1602861397132&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-13.1.2.tgz",
+ "integrity": "sha1-Ew8JcC667vJlDVTObj5XBvek+zg=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ },
+ "yargs-unparser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/yargs-unparser/download/yargs-unparser-2.0.0.tgz",
+ "integrity": "sha1-8TH5ImkRrl2a04xDL+gJNmwjJes=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^6.0.0",
+ "decamelize": "^4.0.0",
+ "flat": "^5.0.2",
+ "is-plain-obj": "^2.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-6.1.0.tgz?cache=0&sync_timestamp=1602350083472&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-6.1.0.tgz",
+ "integrity": "sha1-J9wXYXNyX7Ct+KSLZH9NeHGUTXg=",
+ "dev": true
+ },
+ "decamelize": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/decamelize/download/decamelize-4.0.0.tgz",
+ "integrity": "sha1-qkcte/Zg6xXzSU79UxyrfypwmDc=",
+ "dev": true
+ }
+ }
+ }
+ }
+}
diff --git a/netease_api/package.json b/netease_api/package.json
new file mode 100644
index 0000000..7dba2ab
--- /dev/null
+++ b/netease_api/package.json
@@ -0,0 +1,54 @@
+{
+ "name": "NeteaseCloudMusicApi",
+ "version": "3.45.2",
+ "description": "网易云音乐 NodeJS 版 API",
+ "scripts": {
+ "start": "node app.js",
+ "test": "mocha -r intelli-espower-loader -t 20000 app.test.js --exit",
+ "lint": "eslint **/*.{js,ts}",
+ "lint-fix": "eslint --fix **/*.{js,ts}"
+ },
+ "keywords": [
+ "网易云音乐",
+ "网易云",
+ "音乐",
+ "网易云音乐nodejs"
+ ],
+ "main": "main.js",
+ "types": "./interface.d.ts",
+ "engines": {
+ "node": ">=12"
+ },
+ "author": "binaryify",
+ "license": "MIT",
+ "files": [
+ "module",
+ "util",
+ "plugins",
+ "main.d.ts",
+ "interface.d.ts",
+ "module_types"
+ ],
+ "dependencies": {
+ "axios": "^0.20.0",
+ "express": "^4.17.1",
+ "express-fileupload": "^1.1.9",
+ "pac-proxy-agent": "^4.0.0",
+ "strip-comments": "^2.0.1",
+ "tunnel": "^0.0.6"
+ },
+ "devDependencies": {
+ "@types/node": "14.11.10",
+ "@typescript-eslint/eslint-plugin": "4.4.1",
+ "@typescript-eslint/parser": "4.4.1",
+ "eslint": "7.12.0",
+ "eslint-config-prettier": "6.13.0",
+ "eslint-plugin-html": "6.0.3",
+ "eslint-plugin-prettier": "3.1.4",
+ "intelli-espower-loader": "1.0.1",
+ "mocha": "8.2.0",
+ "power-assert": "1.6.1",
+ "prettier": "2.1.2",
+ "typescript": "4.0.3"
+ }
+}
diff --git a/netease_api/plugins/upload.js b/netease_api/plugins/upload.js
new file mode 100644
index 0000000..f572759
--- /dev/null
+++ b/netease_api/plugins/upload.js
@@ -0,0 +1,48 @@
+const axios = require('axios');
+module.exports = async (query, request) => {
+ const data = {
+ bucket: 'yyimgs',
+ ext: 'jpg',
+ filename: query.imgFile.name,
+ local: false,
+ nos_product: 0,
+ return_body: `{"code":200,"size":"$(ObjectSize)"}`,
+ type: 'other',
+ };
+ // 获取key和token
+ const res = await request(
+ 'POST',
+ `https://music.163.com/weapi/nos/token/alloc`,
+ data,
+ { crypto: 'weapi', cookie: query.cookie, proxy: query.proxy },
+ );
+ // 上传图片
+ const res2 = await axios({
+ method: 'post',
+ url: `https://nosup-hz1.127.net/yyimgs/${res.body.result.objectKey}?offset=0&complete=true&version=1.0`,
+ headers: {
+ 'x-nos-token': res.body.result.token,
+ 'Content-Type': 'image/jpeg',
+ },
+ data: query.imgFile.data,
+ });
+ // 获取裁剪后图片的id
+ const imgSize = query.imgSize || 300;
+ const imgX = query.imgX || 0;
+ const imgY = query.imgY || 0;
+ const res3 = await request(
+ 'POST',
+ `https://music.163.com/upload/img/op?id=${res.body.result.docId}&op=${imgX}y${imgY}y${imgSize}y${imgSize}`,
+ {},
+ { crypto: 'weapi', cookie: query.cookie, proxy: query.proxy },
+ );
+
+ return {
+ // ...res.body.result,
+ // ...res2.data,
+ // ...res3.body,
+ url_pre: 'https://p1.music.126.net/' + res.body.result.objectKey,
+ url: res3.body.url,
+ imgId: res3.body.id,
+ };
+};
diff --git a/netease_api/public/avatar_update.html b/netease_api/public/avatar_update.html
new file mode 100644
index 0000000..41dd8e9
--- /dev/null
+++ b/netease_api/public/avatar_update.html
@@ -0,0 +1,82 @@
+
+
+
+
+
+ 更新头像
+
+
+
+
+
+
+
+
+
diff --git a/netease_api/public/index.html b/netease_api/public/index.html
new file mode 100644
index 0000000..21c33b6
--- /dev/null
+++ b/netease_api/public/index.html
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+ 网易云音乐 API
+
+
+
+ 网易云音乐 API
+ 当你看到这个页面时,这个服务已经成功跑起来了~
+ 查看文档
+
例子:
+
+
+
+
diff --git a/netease_api/public/playlist_cover_update.html b/netease_api/public/playlist_cover_update.html
new file mode 100644
index 0000000..d09be2c
--- /dev/null
+++ b/netease_api/public/playlist_cover_update.html
@@ -0,0 +1,91 @@
+
+
+
+
+
+
歌单封面上传
+
+
+
+
+
+
+
+
+
diff --git a/netease_api/public/test.html b/netease_api/public/test.html
new file mode 100644
index 0000000..64da33f
--- /dev/null
+++ b/netease_api/public/test.html
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
test
+
+
+
+
请在控制台看结果
+
+
+
+
+
diff --git a/netease_api/renovate.json b/netease_api/renovate.json
new file mode 100644
index 0000000..4f39080
--- /dev/null
+++ b/netease_api/renovate.json
@@ -0,0 +1,3 @@
+{
+ "extends": ["config:base"]
+}
diff --git a/netease_api/routes/index.js b/netease_api/routes/index.js
new file mode 100644
index 0000000..2ce4e88
--- /dev/null
+++ b/netease_api/routes/index.js
@@ -0,0 +1,8810 @@
+const { cookieToJson } = require('../util/index');
+const request = require('../util/request');
+module.exports = {
+ '/yunbei/today': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const yunbei_today = (query, request) => {
+ const data = {};
+ return request(
+ 'POST',
+ `https://music.163.com/api/point/today/get`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ yunbei_today(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/yunbei/tasks/todo': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const yunbei_tasks_todo = (query, request) => {
+ const data = {};
+ return request(
+ 'POST',
+ `https://music.163.com/api/usertool/task/todo/query`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ yunbei_tasks_todo(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/yunbei/tasks': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const yunbei_tasks = (query, request) => {
+ const data = {};
+ return request(
+ 'POST',
+ `https://music.163.com/api/usertool/task/list/all`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ yunbei_tasks(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/yunbei/task/finish': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const yunbei_task_finish = (query, request) => {
+ const data = {
+ userTaskId: query.userTaskId,
+ depositCode: query.depositCode || '0',
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/usertool/task/point/receive`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ yunbei_task_finish(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/yunbei/sign': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const yunbei_sign = (query, request) => {
+ const data = { type: '0' };
+ return request(
+ 'POST',
+ `https://music.163.com/api/point/dailyTask`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ yunbei_sign(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/yunbei/receipt': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const yunbei_receipt = (query, request) => {
+ const data = { limit: query.limit || 10, offset: query.offset || 0 };
+ return request(
+ 'POST',
+ `https://music.163.com/store/api/point/receipt`,
+ data,
+ {
+ crypto: 'api',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ yunbei_receipt(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/yunbei/info': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const yunbei_info = (query, request) => {
+ const data = {};
+ return request('POST', `https://music.163.com/api/v1/user/info`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+ };
+ yunbei_info(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/yunbei/expense': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const yunbei_expense = (query, request) => {
+ const data = { limit: query.limit || 10, offset: query.offset || 0 };
+ return request(
+ 'POST',
+ `https://music.163.com/store/api/point/expense`,
+ data,
+ {
+ crypto: 'api',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ yunbei_expense(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/yunbei': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const yunbei = (query, request) => {
+ const data = {};
+ return request(
+ 'POST',
+ `https://music.163.com/api/point/signed/get`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ yunbei(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/weblog': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const weblog = (query, request) => {
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/feedback/weblog`,
+ query.data || {},
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ weblog(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/video/url': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const video_url = (query, request) => {
+ const data = {
+ ids: '["' + query.id + '"]',
+ resolution: query.res || 1080,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/cloudvideo/playurl`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ video_url(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/video/timeline/recommend': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const video_timeline_recommend = (query, request) => {
+ const data = {
+ offset: query.offset || 0,
+ filterLives: '[]',
+ withProgramInfo: 'true',
+ needUrl: '1',
+ resolution: '480',
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/videotimeline/get`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ video_timeline_recommend(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/video/timeline/all': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const video_timeline_all = (query, request) => {
+ const data = {
+ groupId: 0,
+ offset: query.offset || 0,
+ need_preview_url: 'true',
+ total: true,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/videotimeline/otherclient/get`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ video_timeline_all(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/video/sub': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const video_sub = (query, request) => {
+ query.t = query.t == 1 ? 'sub' : 'unsub';
+ const data = { id: query.id };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/cloudvideo/video/${query.t}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ video_sub(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/video/group/list': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const video_group_list = (query, request) => {
+ const data = {};
+ return request(
+ 'POST',
+ `https://music.163.com/api/cloudvideo/group/list`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ video_group_list(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/video/group': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const video_group = (query, request) => {
+ const data = {
+ groupId: query.id,
+ offset: query.offset || 0,
+ need_preview_url: 'true',
+ total: true,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/videotimeline/videogroup/otherclient/get`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ video_group(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/video/detail/info': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const video_detail_info = (query, request) => {
+ const data = { threadid: `R_VI_62_${query.vid}`, composeliked: true };
+ return request(
+ 'POST',
+ `https://music.163.com/api/comment/commentthread/info`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ video_detail_info(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/video/detail': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const video_detail = (query, request) => {
+ const data = { id: query.id };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/cloudvideo/v1/video/detail`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ video_detail(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/video/category/list': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const video_category_list = (query, request) => {
+ const data = {
+ offset: query.offset || 0,
+ total: 'true',
+ limit: query.limit || 99,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/cloudvideo/category/list`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ video_category_list(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/user/update': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const user_update = (query, request) => {
+ const data = {
+ avatarImgId: '0',
+ birthday: query.birthday,
+ city: query.city,
+ gender: query.gender,
+ nickname: query.nickname,
+ province: query.province,
+ signature: query.signature,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/user/profile/update`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ user_update(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/user/subcount': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const user_subcount = (query, request) => {
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/subcount`,
+ {},
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ user_subcount(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/user/replacephone': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const user_replacephone = (query, request) => {
+ const data = {
+ phone: query.phone,
+ captcha: query.captcha,
+ oldcaptcha: query.oldcaptcha,
+ countrycode: query.countrycode || '86',
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/user/replaceCellphone`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ user_replacephone(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/user/record': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const user_record = (query, request) => {
+ const data = { uid: query.uid, type: query.type || 0 };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/v1/play/record`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ user_record(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/user/playlist': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const user_playlist = (query, request) => {
+ const data = {
+ uid: query.uid,
+ limit: query.limit || 30,
+ offset: query.offset || 0,
+ includeVideo: true,
+ };
+ return request('POST', `https://music.163.com/api/user/playlist`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+ };
+ user_playlist(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/user/level': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const user_level = (query, request) => {
+ const data = {};
+ return request('POST', `https://music.163.com/weapi/user/level`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+ };
+ user_level(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/user/follows': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const user_follows = (query, request) => {
+ const data = {
+ offset: query.offset || 0,
+ limit: query.limit || 30,
+ order: true,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/user/getfollows/${query.uid}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ user_follows(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/user/followeds': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const user_followeds = (query, request) => {
+ const data = {
+ userId: query.uid,
+ time: query.lasttime || -1,
+ limit: query.limit || 30,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/eapi/user/getfolloweds/${query.uid}`,
+ data,
+ {
+ crypto: 'eapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ url: '/api/user/getfolloweds',
+ realIP: query.realIP,
+ },
+ );
+ };
+ user_followeds(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/user/event': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const user_event = (query, request) => {
+ const data = {
+ getcounts: true,
+ time: query.lasttime || -1,
+ limit: query.limit || 30,
+ total: false,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/event/get/${query.uid}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ user_event(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/user/dj': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const user_dj = (query, request) => {
+ const data = { limit: query.limit || 30, offset: query.offset || 0 };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/dj/program/${query.uid}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ user_dj(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/user/detail': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const user_detail = (query, request) => {
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/v1/user/detail/${query.uid}`,
+ {},
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ user_detail(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/user/cloud/detail': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const user_cloud_detail = (query, request) => {
+ const id = query.id.replace(/\s/g, '').split(',');
+ const data = { songIds: id };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/v1/cloud/get/byids`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ user_cloud_detail(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/user/cloud/del': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const user_cloud_del = (query, request) => {
+ const data = { songIds: [query.id] };
+ return request('POST', `https://music.163.com/weapi/cloud/del`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+ };
+ user_cloud_del(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/user/cloud': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const user_cloud = (query, request) => {
+ const data = { limit: query.limit || 30, offset: query.offset || 0 };
+ return request('POST', `https://music.163.com/weapi/v1/cloud/get`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+ };
+ user_cloud(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/user/binding': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const user_binding = (query, request) => {
+ const data = {};
+ return request(
+ 'POST',
+ `https://music.163.com/api/v1/user/bindings/${query.uid}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ user_binding(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/user/audio': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const user_audio = (query, request) => {
+ const data = { userId: query.uid };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/djradio/get/byuser`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ user_audio(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/user/account': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const user_account = (query, request) => {
+ const data = {};
+ return request(
+ 'POST',
+ `https://music.163.com/api/nuser/account/get`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ user_account(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/toplist/detail': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const toplist_detail = (query, request) => {
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/toplist/detail`,
+ {},
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ toplist_detail(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/toplist/artist': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const toplist_artist = (query, request) => {
+ const data = {
+ type: query.type || 1,
+ limit: 100,
+ offset: 0,
+ total: true,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/toplist/artist`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ toplist_artist(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/toplist': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const toplist = (query, request) => {
+ return request(
+ 'POST',
+ `https://music.163.com/api/toplist`,
+ {},
+ {
+ crypto: 'linuxapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ toplist(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/top/song': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const top_song = (query, request) => {
+ const data = { areaId: query.type || 0, total: true };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/v1/discovery/new/songs`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ top_song(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/top/playlist/highquality': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const top_playlist_highquality = (query, request) => {
+ const data = {
+ cat: query.cat || '全部',
+ limit: query.limit || 50,
+ lasttime: query.before || 0,
+ total: true,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/playlist/highquality/list`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ top_playlist_highquality(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/top/playlist': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const top_playlist = (query, request) => {
+ const data = {
+ cat: query.cat || '全部',
+ order: query.order || 'hot',
+ limit: query.limit || 50,
+ offset: query.offset || 0,
+ total: true,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/playlist/list`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ top_playlist(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/top/mv': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const top_mv = (query, request) => {
+ const data = {
+ area: query.area || '',
+ limit: query.limit || 30,
+ offset: query.offset || 0,
+ total: true,
+ };
+ return request('POST', `https://music.163.com/weapi/mv/toplist`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+ };
+ top_mv(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/top/list': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const top_list = (query, request) => {
+ query.cookie.os = 'pc';
+ if (query.idx) {
+ return Promise.resolve({
+ status: 500,
+ body: { code: 500, msg: '不支持此方式调用,只支持id调用' },
+ });
+ }
+ const data = { id: query.id, n: '500', s: '0' };
+ return request(
+ 'POST',
+ `https://interface3.music.163.com/api/playlist/v4/detail`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ top_list(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/top/artists': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const top_artists = (query, request) => {
+ const data = {
+ limit: query.limit || 50,
+ offset: query.offset || 0,
+ total: true,
+ };
+ return request('POST', `https://music.163.com/weapi/artist/top`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+ };
+ top_artists(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/top/album': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const top_album = (query, request) => {
+ const date = new Date();
+ const data = {
+ area: query.area || 'ALL',
+ limit: query.limit || 50,
+ offset: query.offset || 0,
+ type: query.type || 'new',
+ year: query.year || date.getFullYear(),
+ month: query.month || date.getMonth() + 1,
+ total: false,
+ rcmd: true,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/discovery/new/albums/area`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ top_album(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/song/url': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const song_url = (query, request) => {
+ if (!('MUSIC_U' in query.cookie))
+ query.cookie._ntes_nuid = crypto.randomBytes(16).toString('hex');
+ query.cookie.os = 'pc';
+ const data = {
+ ids: '[' + query.id + ']',
+ br: parseInt(query.br || 999000),
+ };
+ return request(
+ 'POST',
+ `https://interface3.music.163.com/eapi/song/enhance/player/url`,
+ data,
+ {
+ crypto: 'eapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ url: '/api/song/enhance/player/url',
+ },
+ );
+ };
+ song_url(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/song/order/update': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const song_order_update = (query, request) => {
+ const data = { pid: query.pid, trackIds: query.ids, op: 'update' };
+ return request(
+ 'POST',
+ `http://interface.music.163.com/api/playlist/manipulate/tracks`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ url: '/api/playlist/desc/update',
+ realIP: query.realIP,
+ },
+ );
+ };
+ song_order_update(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/song/detail': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const song_detail = (query, request) => {
+ query.ids = query.ids.split(/\s*,\s*/);
+ const data = {
+ c: '[' + query.ids.map((id) => '{"id":' + id + '}').join(',') + ']',
+ ids: '[' + query.ids.join(',') + ']',
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/v3/song/detail`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ song_detail(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/simi/user': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const simi_user = (query, request) => {
+ const data = {
+ songid: query.id,
+ limit: query.limit || 50,
+ offset: query.offset || 0,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/discovery/simiUser`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ simi_user(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/simi/song': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const simi_song = (query, request) => {
+ const data = {
+ songid: query.id,
+ limit: query.limit || 50,
+ offset: query.offset || 0,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/v1/discovery/simiSong`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ simi_song(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/simi/playlist': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const simi_playlist = (query, request) => {
+ const data = {
+ songid: query.id,
+ limit: query.limit || 50,
+ offset: query.offset || 0,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/discovery/simiPlaylist`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ simi_playlist(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/simi/mv': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const simi_mv = (query, request) => {
+ const data = { mvid: query.mvid };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/discovery/simiMV`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ simi_mv(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/simi/artist': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const simi_artist = (query, request) => {
+ const data = { artistid: query.id };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/discovery/simiArtist`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ simi_artist(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/share/resource': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const share_resource = (query, request) => {
+ const data = {
+ type: query.type || 'song',
+ msg: query.msg || '',
+ id: query.id || '',
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/share/friends/resource`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ share_resource(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/setting': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const setting = (query, request) => {
+ const data = {};
+ return request('POST', `https://music.163.com/api/user/setting`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+ };
+ setting(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/send/text': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const send_text = (query, request) => {
+ query.cookie.os = 'pc';
+ const data = {
+ type: 'text',
+ msg: query.msg,
+ userIds: '[' + query.user_ids + ']',
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/msg/private/send`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ send_text(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/send/playlist': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const send_playlist = (query, request) => {
+ query.cookie.os = 'pc';
+ const data = {
+ id: query.playlist,
+ type: 'playlist',
+ msg: query.msg,
+ userIds: '[' + query.user_ids + ']',
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/msg/private/send`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ send_playlist(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/search/suggest': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const search_suggest = (query, request) => {
+ const data = { s: query.keywords || '' };
+ let type = query.type == 'mobile' ? 'keyword' : 'web';
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/search/suggest/` + type,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ search_suggest(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/search/multimatch': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const search_multimatch = (query, request) => {
+ const data = { type: query.type || 1, s: query.keywords || '' };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/search/suggest/multimatch`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ search_multimatch(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/search/hot/detail': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const search_hot_detail = (query, request) => {
+ const data = {};
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/hotsearchlist/get`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ search_hot_detail(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/search/hot': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const search_hot = (query, request) => {
+ const data = { type: 1111 };
+ return request('POST', `https://music.163.com/weapi/search/hot`, data, {
+ crypto: 'weapi',
+ ua: 'mobile',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+ };
+ search_hot(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/search/default': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const search_default = (query, request) => {
+ return request(
+ 'POST',
+ `https://interface3.music.163.com/eapi/search/defaultkeyword/get`,
+ {},
+ {
+ crypto: 'eapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ url: '/api/search/defaultkeyword/get',
+ realIP: query.realIP,
+ },
+ );
+ };
+ search_default(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/search': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const search = (query, request) => {
+ const data = {
+ s: query.keywords,
+ type: query.type || 1,
+ limit: query.limit || 30,
+ offset: query.offset || 0,
+ };
+ return request('POST', `https://music.163.com/weapi/search/get`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+ };
+ search(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/scrobble': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const scrobble = (query, request) => {
+ const data = {
+ logs: JSON.stringify([
+ {
+ action: 'play',
+ json: {
+ download: 0,
+ end: 'playend',
+ id: query.id,
+ sourceId: query.sourceid,
+ time: query.time,
+ type: 'song',
+ wifi: 0,
+ },
+ },
+ ]),
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/feedback/weblog`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ scrobble(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/resource/like': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const resource_like = (query, request) => {
+ query.cookie.os = 'pc';
+ query.t = query.t == 1 ? 'like' : 'unlike';
+ query.type = { 1: 'R_MV_5_', 4: 'A_DJ_1_', 5: 'R_VI_62_', 6: 'A_EV_2_' }[
+ query.type
+ ];
+ const data = { threadId: query.type + query.id };
+ if (query.type === 'A_EV_2_') {
+ data.threadId = query.threadId;
+ }
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/resource/${query.t}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ resource_like(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/related/allvideo': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const related_allvideo = (query, request) => {
+ const data = { id: query.id, type: /^\\d+$/.test(query.id) ? 0 : 1 };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/cloudvideo/v1/allvideo/rcmd`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ related_allvideo(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/register/cellphone': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const register_cellphone = (query, request) => {
+ query.cookie.os = 'pc';
+ const data = {
+ captcha: query.captcha,
+ phone: query.phone,
+ password: crypto.createHash('md5').update(query.password).digest('hex'),
+ nickname: query.nickname,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/register/cellphone`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ register_cellphone(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/recommend/songs': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const recommend_songs = (query, request) => {
+ query.cookie.os = 'ios';
+ const data = {};
+ return request(
+ 'POST',
+ `https://music.163.com/api/v3/discovery/recommend/songs`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ recommend_songs(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/recommend/resource': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const recommend_resource = (query, request) => {
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/v1/discovery/recommend/resource`,
+ {},
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ recommend_resource(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/rebind': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const rebind = (query, request) => {
+ const data = {
+ captcha: query.captcha,
+ phone: query.phone,
+ oldcaptcha: query.oldcaptcha,
+ ctcode: query.ctcode || '86',
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/user/replaceCellphone`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ rebind(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/program/recommend': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const program_recommend = (query, request) => {
+ const data = {
+ cateId: query.type,
+ limit: query.limit || 10,
+ offset: query.offset || 0,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/program/recommend/v1`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ program_recommend(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/playmode/intelligence/list': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const playmode_intelligence_list = (query, request) => {
+ const data = {
+ songId: query.id,
+ type: 'fromPlayOne',
+ playlistId: query.pid,
+ startMusicId: query.sid || query.id,
+ count: query.count || 1,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/playmode/intelligence/list`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ playmode_intelligence_list(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/playlist/video/recent': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const playlist_video_recent = (query, request) => {
+ const data = {};
+ return request(
+ 'POST',
+ `https://music.163.com/api/playlist/video/recent`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ playlist_video_recent(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/playlist/update': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const playlist_update = (query, request) => {
+ query.cookie.os = 'pc';
+ query.desc = query.desc || '';
+ query.tags = query.tags || '';
+ const data = {
+ '/api/playlist/desc/update': `{\"id\":${query.id},\"desc\":\"${query.desc}\"}`,
+ '/api/playlist/tags/update': `{\"id\":${query.id},\"tags\":\"${query.tags}\"}`,
+ '/api/playlist/update/name': `{\"id\":${query.id},\"name\":\"${query.name}\"}`,
+ };
+ return request('POST', `https://music.163.com/weapi/batch`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+ };
+ playlist_update(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/playlist/tracks': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const playlist_tracks = async (query, request) => {
+ query.cookie.os = 'pc';
+ const tracks = query.tracks.split(',');
+ const data = {
+ op: query.op,
+ pid: query.pid,
+ trackIds: JSON.stringify(tracks),
+ imme: 'true',
+ };
+ try {
+ const res = await request(
+ 'POST',
+ `https://music.163.com/api/playlist/manipulate/tracks`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ return { status: 200, body: { ...res } };
+ } catch (error) {
+ if (error.body.code === 512) {
+ return request(
+ 'POST',
+ `https://music.163.com/api/playlist/manipulate/tracks`,
+ {
+ op: query.op,
+ pid: query.pid,
+ trackIds: JSON.stringify([...tracks, ...tracks]),
+ imme: 'true',
+ },
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ }
+ }
+ };
+ playlist_tracks(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/playlist/track/delete': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const playlist_track_delete = async (query, request) => {
+ query.cookie.os = 'pc';
+ query.ids = query.ids || '';
+ const data = {
+ id: query.id,
+ tracks: JSON.stringify(
+ query.ids.split(',').map((item) => {
+ return { type: 3, id: item };
+ }),
+ ),
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/playlist/track/delete`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ playlist_track_delete(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/playlist/track/add': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const playlist_track_add = async (query, request) => {
+ query.cookie.os = 'pc';
+ query.ids = query.ids || '';
+ const data = {
+ id: query.pid,
+ tracks: JSON.stringify(
+ query.ids.split(',').map((item) => {
+ return { type: 3, id: item };
+ }),
+ ),
+ };
+ console.log(data);
+ return request(
+ 'POST',
+ `https://music.163.com/api/playlist/track/add`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ playlist_track_add(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/playlist/tags/update': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const playlist_tags_update = (query, request) => {
+ const data = { id: query.id, tags: query.tags };
+ return request(
+ 'POST',
+ `https://interface3.music.163.com/eapi/playlist/tags/update`,
+ data,
+ {
+ crypto: 'eapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ url: '/api/playlist/tags/update',
+ realIP: query.realIP,
+ },
+ );
+ };
+ playlist_tags_update(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/playlist/subscribers': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const playlist_subscribers = (query, request) => {
+ const data = {
+ id: query.id,
+ limit: query.limit || 20,
+ offset: query.offset || 0,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/playlist/subscribers`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ playlist_subscribers(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/playlist/subscribe': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const playlist_subscribe = (query, request) => {
+ query.t = query.t == 1 ? 'subscribe' : 'unsubscribe';
+ const data = { id: query.id };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/playlist/${query.t}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ playlist_subscribe(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/playlist/order/update': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const playlist_order_update = (query, request) => {
+ query.cookie.os = 'pc';
+ const data = { ids: query.ids };
+ return request(
+ 'POST',
+ `https://music.163.com/api/playlist/order/update`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ playlist_order_update(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/playlist/name/update': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const playlist_name_update = (query, request) => {
+ const data = { id: query.id, name: query.name };
+ return request(
+ 'POST',
+ `https://interface3.music.163.com/eapi/playlist/update/name`,
+ data,
+ {
+ crypto: 'eapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ url: '/api/playlist/update/name',
+ realIP: query.realIP,
+ },
+ );
+ };
+ playlist_name_update(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/playlist/mylike': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const playlist_mylike = (query, request) => {
+ const data = { time: query.time || '-1', limit: query.limit || '12' };
+ return request(
+ 'POST',
+ `https://music.163.com/api/mlog/playlist/mylike/bytime/get`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ playlist_mylike(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/playlist/hot': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const playlist_hot = (query, request) => {
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/playlist/hottags`,
+ {},
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ playlist_hot(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/playlist/highquality/tags': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const playlist_highquality_tags = (query, request) => {
+ const data = {};
+ return request(
+ 'POST',
+ `https://music.163.com/api/playlist/highquality/tags`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ playlist_highquality_tags(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/playlist/detail': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const playlist_detail = (query, request) => {
+ const data = { id: query.id, n: 100000, s: query.s || 8 };
+ return request(
+ 'POST',
+ `https://music.163.com/api/v6/playlist/detail`,
+ data,
+ {
+ crypto: 'linuxapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ playlist_detail(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/playlist/desc/update': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const playlist_desc_update = (query, request) => {
+ const data = { id: query.id, desc: query.desc };
+ return request(
+ 'POST',
+ `https://interface3.music.163.com/eapi/playlist/desc/update`,
+ data,
+ {
+ crypto: 'eapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ url: '/api/playlist/desc/update',
+ realIP: query.realIP,
+ },
+ );
+ };
+ playlist_desc_update(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/playlist/delete': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const playlist_delete = (query, request) => {
+ query.cookie.os = 'pc';
+ const data = { ids: '[' + query.id + ']' };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/playlist/remove`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ playlist_delete(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/playlist/create': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const playlist_create = (query, request) => {
+ query.cookie.os = 'pc';
+ const data = {
+ name: query.name,
+ privacy: query.privacy,
+ type: query.type || 'NORMAL',
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/playlist/create`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ playlist_create(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/playlist/cover/update': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const playlist_cover_update = async (query, request) => {
+ const uploadInfo = await uploadPlugin(query, request);
+ const res = await request(
+ 'POST',
+ `https://music.163.com/weapi/playlist/cover/update`,
+ { id: query.id, coverImgId: uploadInfo.imgId },
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ return {
+ status: 200,
+ body: { code: 200, data: { ...uploadInfo, ...res.body } },
+ };
+ };
+ playlist_cover_update(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/playlist/catlist': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const playlist_catlist = (query, request) => {
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/playlist/catalogue`,
+ {},
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ playlist_catlist(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/personalized/privatecontent/list': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const personalized_privatecontent_list = (query, request) => {
+ const data = {
+ offset: query.offset || 0,
+ total: 'true',
+ limit: query.limit || 60,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/v2/privatecontent/list`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ personalized_privatecontent_list(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/personalized/privatecontent': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const personalized_privatecontent = (query, request) => {
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/personalized/privatecontent`,
+ {},
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ personalized_privatecontent(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/personalized/newsong': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const personalized_newsong = (query, request) => {
+ const data = {
+ type: 'recommend',
+ limit: query.limit || 10,
+ areaId: query.areaId || 0,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/personalized/newsong`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ personalized_newsong(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/personalized/mv': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const personalized_mv = (query, request) => {
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/personalized/mv`,
+ {},
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ personalized_mv(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/personalized/djprogram': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const personalized_djprogram = (query, request) => {
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/personalized/djprogram`,
+ {},
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ personalized_djprogram(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/personalized': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const personalized = (query, request) => {
+ const data = { limit: query.limit || 30, total: true, n: 1000 };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/personalized/playlist`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ personalized(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/personal_fm': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const personal_fm = (query, request) => {
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/v1/radio/get`,
+ {},
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ personal_fm(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/mv/url': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const mv_url = (query, request) => {
+ const data = { id: query.id, r: query.r || 1080 };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/song/enhance/play/mv/url`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ mv_url(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/mv/sublist': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const mv_sublist = (query, request) => {
+ const data = {
+ limit: query.limit || 25,
+ offset: query.offset || 0,
+ total: true,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/cloudvideo/allvideo/sublist`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ mv_sublist(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/mv/sub': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const mv_sub = (query, request) => {
+ query.t = query.t == 1 ? 'sub' : 'unsub';
+ const data = { mvId: query.mvid, mvIds: '["' + query.mvid + '"]' };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/mv/${query.t}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ mv_sub(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/mv/first': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const mv_first = (query, request) => {
+ const data = {
+ area: query.area || '',
+ limit: query.limit || 30,
+ total: true,
+ };
+ return request(
+ 'POST',
+ `https://interface.music.163.com/weapi/mv/first`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ mv_first(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/mv/exclusive/rcmd': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const mv_exclusive_rcmd = (query, request) => {
+ const data = { offset: query.offset || 0, limit: query.limit || 30 };
+ return request(
+ 'POST',
+ `https://interface.music.163.com/api/mv/exclusive/rcmd`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ mv_exclusive_rcmd(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/mv/detail/info': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const mv_detail_info = (query, request) => {
+ const data = { threadid: `R_MV_5_${query.mvid}`, composeliked: true };
+ return request(
+ 'POST',
+ `https://music.163.com/api/comment/commentthread/info`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ mv_detail_info(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/mv/detail': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const mv_detail = (query, request) => {
+ const data = { id: query.mvid };
+ return request('POST', `https://music.163.com/api/v1/mv/detail`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+ };
+ mv_detail(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/mv/all': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const mv_all = (query, request) => {
+ const data = {
+ tags: JSON.stringify({
+ 地区: query.area || '全部',
+ 类型: query.type || '全部',
+ 排序: query.order || '上升最快',
+ }),
+ offset: query.offset || 0,
+ total: 'true',
+ limit: query.limit || 30,
+ };
+ return request(
+ 'POST',
+ `https://interface.music.163.com/api/mv/all`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ mv_all(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/msg/private/history': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const msg_private_history = (query, request) => {
+ const data = {
+ userId: query.uid,
+ limit: query.limit || 30,
+ time: query.before || 0,
+ total: 'true',
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/msg/private/history`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ msg_private_history(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/msg/private': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const msg_private = (query, request) => {
+ const data = {
+ offset: query.offset || 0,
+ limit: query.limit || 30,
+ total: 'true',
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/msg/private/users`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ msg_private(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/msg/notices': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const msg_notices = (query, request) => {
+ const data = { limit: query.limit || 30, time: query.lasttime || -1 };
+ return request('POST', `https://music.163.com/api/msg/notices`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+ };
+ msg_notices(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/msg/forwards': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const msg_forwards = (query, request) => {
+ const data = {
+ offset: query.offset || 0,
+ limit: query.limit || 30,
+ total: 'true',
+ };
+ return request('POST', `https://music.163.com/api/forwards/get`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+ };
+ msg_forwards(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/msg/comments': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const msg_comments = (query, request) => {
+ const data = {
+ beforeTime: query.before || '-1',
+ limit: query.limit || 30,
+ total: 'true',
+ uid: query.uid,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/v1/user/comments/${query.uid}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ msg_comments(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/lyric': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const lyric = (query, request) => {
+ query.cookie.os = 'pc';
+ const data = { id: query.id, lv: -1, kv: -1, tv: -1 };
+ return request('POST', `https://music.163.com/api/song/lyric`, data, {
+ crypto: 'linuxapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+ };
+ lyric(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/logout': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const logout = (query, request) => {
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/logout`,
+ {},
+ {
+ crypto: 'weapi',
+ ua: 'pc',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ logout(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/login/status': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const login_status = (query, request) => {
+ return request(
+ 'GET',
+ `https://music.163.com`,
+ {},
+ { cookie: query.cookie, proxy: query.proxy, realIP: query.realIP },
+ ).then((response) => {
+ try {
+ let profile = eval(
+ `(${/GUser\\s*=\\s*([^;]+);/.exec(response.body)[1]})`,
+ );
+ let bindings = eval(
+ `(${/GBinds\\s*=\\s*([^;]+);/.exec(response.body)[1]})`,
+ );
+ response.body = { code: 200, profile: profile, bindings: bindings };
+ return response;
+ } catch (err) {
+ response.status = 301;
+ response.body = { code: 301 };
+ return Promise.reject(response);
+ }
+ });
+ };
+ login_status(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/login/refresh': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const login_refresh = (query, request) => {
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/login/token/refresh`,
+ {},
+ {
+ crypto: 'weapi',
+ ua: 'pc',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ login_refresh(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/login/cellphone': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const login_cellphone = async (query, request) => {
+ query.cookie.os = 'pc';
+ const data = {
+ phone: query.phone,
+ countrycode: query.countrycode || '86',
+ password:
+ query.md5_password ||
+ crypto.createHash('md5').update(query.password).digest('hex'),
+ rememberLogin: 'true',
+ };
+ let result = await request(
+ 'POST',
+ `https://music.163.com/weapi/login/cellphone`,
+ data,
+ {
+ crypto: 'weapi',
+ ua: 'pc',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ if (result.body.code === 200) {
+ result = {
+ status: 200,
+ body: { ...result.body, cookie: result.cookie.join(';') },
+ cookie: result.cookie,
+ };
+ }
+ return result;
+ };
+ login_cellphone(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/login': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const login = async (query, request) => {
+ query.cookie.os = 'pc';
+ const data = {
+ username: query.email,
+ password:
+ query.md5_password ||
+ crypto.createHash('md5').update(query.password).digest('hex'),
+ rememberLogin: 'true',
+ };
+ let result = await request(
+ 'POST',
+ `https://music.163.com/weapi/login`,
+ data,
+ {
+ crypto: 'weapi',
+ ua: 'pc',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ if (result.body.code === 502) {
+ return {
+ status: 200,
+ body: { msg: '账号或密码错误', code: 502, message: '账号或密码错误' },
+ };
+ }
+ if (result.body.code === 200) {
+ result = {
+ status: 200,
+ body: { ...result.body, cookie: result.cookie.join(';') },
+ cookie: result.cookie,
+ };
+ }
+ return result;
+ };
+ login(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/likelist': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const likelist = (query, request) => {
+ const data = { uid: query.uid };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/song/like/get`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ likelist(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/like': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const like = (query, request) => {
+ query.like = query.like == 'false' ? false : true;
+ const data = { trackId: query.id, like: query.like };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/radio/like?alg=${
+ query.alg || 'itembased'
+ }&trackId=${query.id}&time=${query.time || 25}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ like(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/hot/topic': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const hot_topic = (query, request) => {
+ const data = { limit: query.limit || 20, offset: query.offset || 0 };
+ return request('POST', `https://music.163.com/weapi/act/hot`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+ };
+ hot_topic(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/homepage/dragon/ball': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const homepage_dragon_ball = (query, request) => {
+ const data = {};
+ return request(
+ 'POST',
+ `https://music.163.com/eapi/homepage/dragon/ball/static`,
+ data,
+ {
+ crypto: 'eapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ url: '/api/homepage/dragon/ball/static',
+ realIP: query.realIP,
+ },
+ );
+ };
+ homepage_dragon_ball(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/homepage/block/page': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const homepage_block_page = (query, request) => {
+ const data = { refresh: query.refresh || true };
+ return request(
+ 'POST',
+ `https://music.163.com/api/homepage/block/page`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ homepage_block_page(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/history/recommend/songs/detail': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const history_recommend_songs_detail = (query, request) => {
+ query.cookie.os = 'ios';
+ const data = { date: query.date || '' };
+ return request(
+ 'POST',
+ `https://music.163.com/api/discovery/recommend/songs/history/detail`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ history_recommend_songs_detail(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/history/recommend/songs': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const history_recommend_songs = (query, request) => {
+ query.cookie.os = 'ios';
+ const data = {};
+ return request(
+ 'POST',
+ `https://music.163.com/api/discovery/recommend/songs/history/recent`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ history_recommend_songs(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/follow': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const follow = (query, request) => {
+ query.cookie.os = 'pc';
+ query.t = query.t == 1 ? 'follow' : 'delfollow';
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/user/${query.t}/${query.id}`,
+ {},
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ follow(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/fm_trash': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const fm_trash = (query, request) => {
+ const data = { songId: query.id };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/radio/trash/add?alg=RT&songId=${
+ query.id
+ }&time=${query.time || 25}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ fm_trash(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/event/forward': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const event_forward = (query, request) => {
+ query.cookie.os = 'pc';
+ const data = {
+ forwards: query.forwards,
+ id: query.evId,
+ eventUserId: query.uid,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/event/forward`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ event_forward(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/event/del': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const event_del = (query, request) => {
+ const data = { id: query.evId };
+ return request('POST', `https://music.163.com/eapi/event/delete`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+ };
+ event_del(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/event': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const event = (query, request) => {
+ const data = {
+ pagesize: query.pagesize || 20,
+ lasttime: query.lasttime || -1,
+ };
+ return request('POST', `https://music.163.com/weapi/v1/event/get`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+ };
+ event(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/dj/toplist/popular': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const dj_toplist_popular = (query, request) => {
+ const data = { limit: query.limit || 100 };
+ return request(
+ 'POST',
+ `https://music.163.com/api/dj/toplist/popular`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ dj_toplist_popular(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/dj/toplist/pay': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const dj_toplist_pay = (query, request) => {
+ const data = { limit: query.limit || 100 };
+ return request(
+ 'POST',
+ `https://music.163.com/api/djradio/toplist/pay`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ dj_toplist_pay(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/dj/toplist/newcomer': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const dj_toplist_newcomer = (query, request) => {
+ const data = { limit: query.limit || 100, offset: query.offset || 0 };
+ return request(
+ 'POST',
+ `https://music.163.com/api/dj/toplist/newcomer`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ dj_toplist_newcomer(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/dj/toplist/hours': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const dj_toplist_hours = (query, request) => {
+ const data = { limit: query.limit || 100 };
+ return request(
+ 'POST',
+ `https://music.163.com/api/dj/toplist/hours`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ dj_toplist_hours(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/dj/toplist': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const dj_toplist = (query, request) => {
+ const data = {
+ limit: query.limit || 100,
+ offset: query.offset || 0,
+ type: typeMap[query.type || 'new'] || '0',
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/djradio/toplist`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ dj_toplist(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/dj/today/perfered': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const dj_today_perfered = (query, request) => {
+ const data = { page: query.page || 0 };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/djradio/home/today/perfered`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ dj_today_perfered(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/dj/subscriber': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const dj_subscriber = (query, request) => {
+ const data = {
+ time: query.time || '-1',
+ id: query.id,
+ limit: query.limit || '20',
+ total: 'true',
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/djradio/subscriber`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ dj_subscriber(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/dj/sublist': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const dj_sublist = (query, request) => {
+ const data = {
+ limit: query.limit || 30,
+ offset: query.offset || 0,
+ total: true,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/djradio/get/subed`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ dj_sublist(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/dj/sub': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const dj_sub = (query, request) => {
+ query.t = query.t == 1 ? 'sub' : 'unsub';
+ const data = { id: query.rid };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/djradio/${query.t}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ dj_sub(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/dj/recommend/type': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const dj_recommend_type = (query, request) => {
+ const data = { cateId: query.type };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/djradio/recommend`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ dj_recommend_type(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/dj/recommend': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const dj_recommend = (query, request) => {
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/djradio/recommend/v1`,
+ {},
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ dj_recommend(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/dj/radio/hot': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const dj_radio_hot = (query, request) => {
+ const data = {
+ cateId: query.cateId,
+ limit: query.limit || 30,
+ offset: query.offset || 0,
+ };
+ return request('POST', `https://music.163.com/api/djradio/hot`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+ };
+ dj_radio_hot(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/dj/program/toplist/hours': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const dj_program_toplist_hours = (query, request) => {
+ const data = { limit: query.limit || 100 };
+ return request(
+ 'POST',
+ `https://music.163.com/api/djprogram/toplist/hours`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ dj_program_toplist_hours(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/dj/program/toplist': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const dj_program_toplist = (query, request) => {
+ const data = { limit: query.limit || 100, offset: query.offset || 0 };
+ return request(
+ 'POST',
+ `https://music.163.com/api/program/toplist/v1`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ dj_program_toplist(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/dj/program/detail': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const dj_program_detail = (query, request) => {
+ const data = { id: query.id };
+ return request(
+ 'POST',
+ `https://music.163.com/api/dj/program/detail`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ dj_program_detail(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/dj/program': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const dj_program = (query, request) => {
+ const data = {
+ radioId: query.rid,
+ limit: query.limit || 30,
+ offset: query.offset || 0,
+ asc: toBoolean(query.asc),
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/dj/program/byradio`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ dj_program(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/dj/personalize/recommend': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const dj_personalize_recommend = (query, request) => {
+ return request(
+ 'POST',
+ `https://music.163.com/api/djradio/personalize/rcmd`,
+ { limit: query.limit || 6 },
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ dj_personalize_recommend(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/dj/paygift': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const dj_paygift = (query, request) => {
+ const data = { limit: query.limit || 30, offset: query.offset || 0 };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/djradio/home/paygift/list?_nmclfl=1`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ dj_paygift(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/dj/hot': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const dj_hot = (query, request) => {
+ const data = { limit: query.limit || 30, offset: query.offset || 0 };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/djradio/hot/v1`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ dj_hot(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/dj/detail': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const dj_detail = (query, request) => {
+ const data = { id: query.rid };
+ return request('POST', `https://music.163.com/api/djradio/v2/get`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+ };
+ dj_detail(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/dj/catelist': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const dj_catelist = (query, request) => {
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/djradio/category/get`,
+ {},
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ dj_catelist(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/dj/category/recommend': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const dj_category_recommend = (query, request) => {
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/djradio/home/category/recommend`,
+ {},
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ dj_category_recommend(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/dj/category/excludehot': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const dj_category_excludehot = (query, request) => {
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/djradio/category/excludehot`,
+ {},
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ dj_category_excludehot(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/dj/banner': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const dj_banner = (query, request) => {
+ const data = {};
+ query.cookie.os = 'pc';
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/djradio/banner/get`,
+ {},
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ dj_banner(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/digitalAlbum/purchased': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const digitalAlbum_purchased = (query, request) => {
+ const data = {
+ limit: query.limit || 30,
+ offset: query.offset || 0,
+ total: true,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/digitalAlbum/purchased`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ digitalAlbum_purchased(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/digitalAlbum/ordering': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const digitalAlbum_ordering = (query, request) => {
+ const data = {
+ business: 'Album',
+ paymentMethod: query.payment,
+ digitalResources: JSON.stringify([
+ { business: 'Album', resourceID: query.id, quantity: query.quantity },
+ ]),
+ from: 'web',
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/ordering/web/digital`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ digitalAlbum_ordering(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/daily_signin': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const daily_signin = (query, request) => {
+ const data = { type: query.type || 0 };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/point/dailyTask`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ daily_signin(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/countries/code/list': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const countries_code_list = (query, request) => {
+ const data = {};
+ return request(
+ 'POST',
+ `https://interface3.music.163.com/eapi/lbs/countries/v1`,
+ data,
+ {
+ crypto: 'eapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ url: '/api/lbs/countries/v1',
+ realIP: query.realIP,
+ },
+ );
+ };
+ countries_code_list(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/comment/video': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const comment_video = (query, request) => {
+ query.cookie.os = 'pc';
+ const data = {
+ rid: query.id,
+ limit: query.limit || 20,
+ offset: query.offset || 0,
+ beforeTime: query.before || 0,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/v1/resource/comments/R_VI_62_${query.id}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ comment_video(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/comment/playlist': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const comment_playlist = (query, request) => {
+ query.cookie.os = 'pc';
+ const data = {
+ rid: query.id,
+ limit: query.limit || 20,
+ offset: query.offset || 0,
+ beforeTime: query.before || 0,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/v1/resource/comments/A_PL_0_${query.id}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ comment_playlist(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/comment/new': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const comment_new = (query, request) => {
+ query.cookie.os = 'pc';
+ query.type = {
+ 0: 'R_SO_4_',
+ 1: 'R_MV_5_',
+ 2: 'A_PL_0_',
+ 3: 'R_AL_3_',
+ 4: 'A_DJ_1_',
+ 5: 'R_VI_62_',
+ 6: 'A_EV_2_',
+ }[query.type];
+ const threadId = query.type + query.id;
+ const pageSize = query.pageSize || 20;
+ const pageNo = query.pageNo || 1;
+ const data = {
+ threadId: threadId,
+ pageNo,
+ showInner: query.showInner || true,
+ pageSize,
+ cursor:
+ +query.sortType === 3 ? query.cursor || '0' : (pageNo - 1) * pageSize,
+ sortType: query.sortType || 1,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/v2/resource/comments`,
+ data,
+ {
+ crypto: 'eapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ url: '/api/v2/resource/comments',
+ },
+ );
+ };
+ comment_new(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/comment/mv': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const comment_mv = (query, request) => {
+ query.cookie.os = 'pc';
+ const data = {
+ rid: query.id,
+ limit: query.limit || 20,
+ offset: query.offset || 0,
+ beforeTime: query.before || 0,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/v1/resource/comments/R_MV_5_${query.id}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ comment_mv(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/comment/music': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const comment_music = (query, request) => {
+ query.cookie.os = 'pc';
+ const data = {
+ rid: query.id,
+ limit: query.limit || 20,
+ offset: query.offset || 0,
+ beforeTime: query.before || 0,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/v1/resource/comments/R_SO_4_${query.id}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ comment_music(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/comment/like': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const comment_like = (query, request) => {
+ query.cookie.os = 'pc';
+ query.t = query.t == 1 ? 'like' : 'unlike';
+ query.type = {
+ 0: 'R_SO_4_',
+ 1: 'R_MV_5_',
+ 2: 'A_PL_0_',
+ 3: 'R_AL_3_',
+ 4: 'A_DJ_1_',
+ 5: 'R_VI_62_',
+ 6: 'A_EV_2_',
+ }[query.type];
+ const data = { threadId: query.type + query.id, commentId: query.cid };
+ if (query.type == 'A_EV_2_') {
+ data.threadId = query.threadId;
+ }
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/v1/comment/${query.t}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ comment_like(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/comment/hotwall/list': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const comment_hotwall_list = (query, request) => {
+ const data = {};
+ return request(
+ 'POST',
+ `https://music.163.com/api/comment/hotwall/list/get`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ comment_hotwall_list(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/comment/hot': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const comment_hot = (query, request) => {
+ query.cookie.os = 'pc';
+ query.type = {
+ 0: 'R_SO_4_',
+ 1: 'R_MV_5_',
+ 2: 'A_PL_0_',
+ 3: 'R_AL_3_',
+ 4: 'A_DJ_1_',
+ 5: 'R_VI_62_',
+ }[query.type];
+ const data = {
+ rid: query.id,
+ limit: query.limit || 20,
+ offset: query.offset || 0,
+ beforeTime: query.before || 0,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/v1/resource/hotcomments/${query.type}${query.id}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ comment_hot(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/comment/floor': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const comment_floor = (query, request) => {
+ query.type = {
+ 0: 'R_SO_4_',
+ 1: 'R_MV_5_',
+ 2: 'A_PL_0_',
+ 3: 'R_AL_3_',
+ 4: 'A_DJ_1_',
+ 5: 'R_VI_62_',
+ }[query.type];
+ const data = {
+ parentCommentId: query.parentCommentId,
+ threadId: query.type + query.id,
+ time: query.time || -1,
+ limit: query.limit || 20,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/resource/comment/floor/get`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ comment_floor(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/comment/event': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const comment_event = (query, request) => {
+ const data = {
+ limit: query.limit || 20,
+ offset: query.offset || 0,
+ beforeTime: query.before || 0,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/v1/resource/comments/${query.threadId}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ comment_event(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/comment/dj': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const comment_dj = (query, request) => {
+ query.cookie.os = 'pc';
+ const data = {
+ rid: query.id,
+ limit: query.limit || 20,
+ offset: query.offset || 0,
+ beforeTime: query.before || 0,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/v1/resource/comments/A_DJ_1_${query.id}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ comment_dj(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/comment/album': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const comment_album = (query, request) => {
+ query.cookie.os = 'pc';
+ const data = {
+ rid: query.id,
+ limit: query.limit || 20,
+ offset: query.offset || 0,
+ beforeTime: query.before || 0,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/v1/resource/comments/R_AL_3_${query.id}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ comment_album(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/comment': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const comment = (query, request) => {
+ query.cookie.os = 'pc';
+ query.t = { 1: 'add', 0: 'delete', 2: 'reply' }[query.t];
+ query.type = {
+ 0: 'R_SO_4_',
+ 1: 'R_MV_5_',
+ 2: 'A_PL_0_',
+ 3: 'R_AL_3_',
+ 4: 'A_DJ_1_',
+ 5: 'R_VI_62_',
+ 6: 'A_EV_2_',
+ }[query.type];
+ const data = { threadId: query.type + query.id };
+ if (query.type == 'A_EV_2_') {
+ data.threadId = query.threadId;
+ }
+ if (query.t == 'add') data.content = query.content;
+ else if (query.t == 'delete') data.commentId = query.commentId;
+ else if (query.t == 'reply') {
+ data.commentId = query.commentId;
+ data.content = query.content;
+ }
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/resource/comments/${query.t}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ comment(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/cloudsearch': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const cloudsearch = (query, request) => {
+ const data = {
+ s: query.keywords,
+ type: query.type || 1,
+ limit: query.limit || 30,
+ offset: query.offset || 0,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/cloudsearch/get/web`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ cloudsearch(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/check/music': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const check_music = (query, request) => {
+ const data = {
+ ids: '[' + parseInt(query.id) + ']',
+ br: parseInt(query.br || 999000),
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/song/enhance/player/url`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ ).then((response) => {
+ let playable = false;
+ if (response.body.code == 200) {
+ if (response.body.data[0].code == 200) {
+ playable = true;
+ }
+ }
+ if (playable) {
+ response.body = { success: true, message: 'ok' };
+ return response;
+ } else {
+ response.status = 404;
+ response.body = { success: false, message: '亲爱的,暂无版权' };
+ return Promise.reject(response);
+ }
+ });
+ };
+ check_music(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/cellphone/existence/check': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const cellphone_existence_check = (query, request) => {
+ const data = { cellphone: query.phone, countrycode: query.countrycode };
+ return request(
+ 'POST',
+ `https://music.163.com/eapi/cellphone/existence/check`,
+ data,
+ {
+ crypto: 'eapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ url: '/api/cellphone/existence/check',
+ realIP: query.realIP,
+ },
+ );
+ };
+ cellphone_existence_check(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/captcha/verify': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const captcha_verify = (query, request) => {
+ const data = {
+ ctcode: query.ctcode || '86',
+ cellphone: query.phone,
+ captcha: query.captcha,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/sms/captcha/verify`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ captcha_verify(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/captcha/sent': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const captcha_sent = (query, request) => {
+ const data = { ctcode: query.ctcode || '86', cellphone: query.phone };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/sms/captcha/sent`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ captcha_sent(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/calendar': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const calendar = (query, request) => {
+ const data = {
+ startTime: query.startTime || Date.now(),
+ endTime: query.endTime || Date.now(),
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/mcalendar/detail`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ calendar(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/banner': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const banner = (query, request) => {
+ const type =
+ { 0: 'pc', 1: 'android', 2: 'iphone', 3: 'ipad' }[query.type || 0] ||
+ 'pc';
+ return request(
+ 'POST',
+ `https://music.163.com/api/v2/banner/get`,
+ { clientType: type },
+ { crypto: 'linuxapi', proxy: query.proxy, realIP: query.realIP },
+ );
+ };
+ banner(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/avatar/upload': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const avatar_upload = async (query, request) => {
+ const uploadInfo = await uploadPlugin(query, request);
+ const res = await request(
+ 'POST',
+ `https://music.163.com/weapi/user/avatar/upload/v1`,
+ { imgid: uploadInfo.imgId },
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ return {
+ status: 200,
+ body: { code: 200, data: { ...uploadInfo, ...res.body } },
+ };
+ };
+ avatar_upload(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/audio/match': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const audio_match = (query, request) => {
+ query.cookie.os = 'pc';
+ const data = {
+ algorithmCode: 'shazam_v2',
+ times: 1,
+ sessionId: 'C999431ACDC84EDBB984763654E6F8D7',
+ duration: 3.3066249999999995,
+ from: 'recognize-song',
+ rawdata: realData,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/music/audio/match`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ audio_match(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/artists': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const artists = (query, request) => {
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/v1/artist/${query.id}`,
+ {},
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ artists(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/artist/top/song': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const artist_top_song = (query, request) => {
+ const data = { id: query.id };
+ return request(
+ 'POST',
+ `https://music.163.com/api/artist/top/song`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ artist_top_song(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/artist/sublist': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const artist_sublist = (query, request) => {
+ const data = {
+ limit: query.limit || 25,
+ offset: query.offset || 0,
+ total: true,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/artist/sublist`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ artist_sublist(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/artist/sub': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const artist_sub = (query, request) => {
+ query.t = query.t == 1 ? 'sub' : 'unsub';
+ const data = { artistId: query.id, artistIds: '[' + query.id + ']' };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/artist/${query.t}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ artist_sub(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/artist/songs': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const artist_songs = (query, request) => {
+ query.cookie.os = 'pc';
+ const data = {
+ id: query.id,
+ private_cloud: 'true',
+ work_type: 1,
+ order: query.order || 'hot',
+ offset: query.offset || 0,
+ limit: query.limit || 100,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/api/v1/artist/songs`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ artist_songs(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/artist/mv': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const artist_mv = (query, request) => {
+ const data = {
+ artistId: query.id,
+ limit: query.limit,
+ offset: query.offset,
+ total: true,
+ };
+ return request('POST', `https://music.163.com/weapi/artist/mvs`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+ };
+ artist_mv(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/artist/list': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const artist_list = (query, request) => {
+ const data = {
+ initial: isNaN(query.initial)
+ ? (query.initial || '').toUpperCase().charCodeAt() || undefined
+ : query.initial,
+ offset: query.offset || 0,
+ limit: query.limit || 30,
+ total: true,
+ type: query.type || '1',
+ area: query.area,
+ };
+ return request('POST', `https://music.163.com/api/v1/artist/list`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+ };
+ artist_list(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/artist/desc': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const artist_desc = (query, request) => {
+ const data = { id: query.id };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/artist/introduction`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ artist_desc(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/artist/album': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const artist_album = (query, request) => {
+ const data = {
+ limit: query.limit || 30,
+ offset: query.offset || 0,
+ total: true,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/artist/albums/${query.id}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ artist_album(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/album/sublist': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const album_sublist = (query, request) => {
+ const data = {
+ limit: query.limit || 25,
+ offset: query.offset || 0,
+ total: true,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/album/sublist`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ album_sublist(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/album/sub': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const album_sub = (query, request) => {
+ query.t = query.t == 1 ? 'sub' : 'unsub';
+ const data = { id: query.id };
+ return request(
+ 'POST',
+ `https://music.163.com/api/album/${query.t}`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ album_sub(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/album/songsaleboard': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const album_songsaleboard = (query, request) => {
+ let data = { albumType: query.albumType || 0 };
+ const type = query.type || 'daily';
+ if (type === 'year') {
+ data = { ...data, year: query.year };
+ }
+ return request(
+ 'POST',
+ `https://music.163.com/api/feealbum/songsaleboard/${type}/type`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ album_songsaleboard(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/album/newest': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const album_newest = (query, request) => {
+ return request(
+ 'POST',
+ `https://music.163.com/api/discovery/newAlbum`,
+ {},
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ album_newest(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/album/new': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const album_new = (query, request) => {
+ const data = {
+ limit: query.limit || 30,
+ offset: query.offset || 0,
+ total: true,
+ area: query.area || 'ALL',
+ };
+ return request('POST', `https://music.163.com/weapi/album/new`, data, {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ });
+ };
+ album_new(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/album/list/style': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const album_list_style = (query, request) => {
+ const data = {
+ limit: query.limit || 10,
+ offset: query.offset || 0,
+ total: true,
+ area: query.area || 'Z_H',
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/vipmall/appalbum/album/style`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ album_list_style(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/album/list': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const album_list = (query, request) => {
+ const data = {
+ limit: query.limit || 30,
+ offset: query.offset || 0,
+ total: true,
+ area: query.area || 'ALL',
+ type: query.type,
+ };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/vipmall/albumproduct/list`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ album_list(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/album/detail/dynamic': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const album_detail_dynamic = (query, request) => {
+ const data = { id: query.id };
+ return request(
+ 'POST',
+ `https://music.163.com/api/album/detail/dynamic`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ album_detail_dynamic(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/album/detail': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const album_detail = (query, request) => {
+ const data = { id: query.id };
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/vipmall/albumproduct/detail`,
+ data,
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ album_detail(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/album': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const album = (query, request) => {
+ return request(
+ 'POST',
+ `https://music.163.com/weapi/v1/album/${query.id}`,
+ {},
+ {
+ crypto: 'weapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ );
+ };
+ album(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/activate/init/profile': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const activate_init_profile = (query, request) => {
+ const data = { nickname: query.nickname };
+ return request(
+ 'POST',
+ `https://music.163.com/eapi/activate/initProfile`,
+ data,
+ {
+ crypto: 'eapi',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ url: '/api/activate/initProfile',
+ },
+ );
+ };
+ activate_init_profile(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+ '/related/playlist': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const related_playlist = (query, request) => {
+ return request(
+ 'GET',
+ `https://music.163.com/playlist?id=${query.id}`,
+ {},
+ {
+ ua: 'pc',
+ cookie: query.cookie,
+ proxy: query.proxy,
+ realIP: query.realIP,
+ },
+ ).then((response) => {
+ try {
+ const pattern = /
[\s\S]*?
[\s\S]*?
]*>([^<]+?)<\/a>[\s\S]*?]*>([^<]+?)<\/a>/g;
+ let result,
+ playlists = [];
+ while ((result = pattern.exec(response.body)) != null) {
+ playlists.push({
+ creator: {
+ userId: result[4].slice('/user/home?id='.length),
+ nickname: result[5],
+ },
+ coverImgUrl: result[1].slice(0, -'?param=50y50'.length),
+ name: result[3],
+ id: result[2].slice('/playlist?id='.length),
+ });
+ }
+ response.body = { code: 200, playlists: playlists };
+ return response;
+ } catch (err) {
+ response.status = 500;
+ response.body = { code: 500, msg: err.stack };
+ return Promise.reject(response);
+ }
+ });
+ };
+ related_playlist(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+
+ '/batch': (req, res) => {
+ if (typeof req.query.cookie === 'string') {
+ req.query.cookie = cookieToJson(req.query.cookie);
+ }
+ let query = Object.assign(
+ {},
+ { cookie: req.cookies },
+ req.query,
+ req.body,
+ req.files,
+ );
+ const batch = (query, request) => {
+ const data = {
+ e_r: true,
+ };
+ Object.keys(query).forEach((i) => {
+ if (/^\/api\//.test(i)) {
+ data[i] = query[i];
+ }
+ });
+ return request('POST', `https://music.163.com/eapi/batch`, data, {
+ crypto: 'eapi',
+ proxy: query.proxy,
+ url: '/api/batch',
+ cookie: query.cookie,
+ realIP: query.realIP,
+ });
+ };
+ batch(query, request)
+ .then((answer) => {
+ console.log('[OK]', decodeURIComponent(req.originalUrl));
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ })
+ .catch((answer) => {
+ console.log('[ERR]', decodeURIComponent(req.originalUrl), {
+ status: answer.status,
+ body: answer.body,
+ });
+ if (answer.body.code == '301') answer.body.msg = '需要登录';
+ res.append('Set-Cookie', answer.cookie);
+ res.status(answer.status).send(answer.body);
+ });
+ },
+};
diff --git a/netease_api/tsconfig.json b/netease_api/tsconfig.json
new file mode 100644
index 0000000..248536d
--- /dev/null
+++ b/netease_api/tsconfig.json
@@ -0,0 +1,20 @@
+{
+ "compilerOptions": {
+ "target": "ES2015",
+ "module": "commonjs",
+ "experimentalDecorators": true,
+ "moduleResolution": "node",
+ "lib": ["esnext", "esnext.asynciterable", "dom"],
+ "esModuleInterop": true,
+ "allowJs": true,
+ "sourceMap": true,
+ "strict": true,
+ "noEmit": true,
+ "baseUrl": ".",
+ "paths": {
+ "~/*": ["./*"],
+ "@/*": ["./*"]
+ }
+ },
+ "exclude": ["node_modules"]
+}
diff --git a/netease_api/util/apicache.js b/netease_api/util/apicache.js
new file mode 100644
index 0000000..1b267ed
--- /dev/null
+++ b/netease_api/util/apicache.js
@@ -0,0 +1,830 @@
+var url = require('url');
+var MemoryCache = require('./memory-cache');
+
+var t = {
+ ms: 1,
+ second: 1000,
+ minute: 60000,
+ hour: 3600000,
+ day: 3600000 * 24,
+ week: 3600000 * 24 * 7,
+ month: 3600000 * 24 * 30,
+};
+
+var instances = [];
+
+var matches = function (a) {
+ return function (b) {
+ return a === b;
+ };
+};
+
+var doesntMatch = function (a) {
+ return function (b) {
+ return !matches(a)(b);
+ };
+};
+
+var logDuration = function (d, prefix) {
+ var str = d > 1000 ? (d / 1000).toFixed(2) + 'sec' : d + 'ms';
+ return '\x1b[33m- ' + (prefix ? prefix + ' ' : '') + str + '\x1b[0m';
+};
+
+function getSafeHeaders(res) {
+ return res.getHeaders ? res.getHeaders() : res._headers;
+}
+
+function ApiCache() {
+ var memCache = new MemoryCache();
+
+ var globalOptions = {
+ debug: false,
+ defaultDuration: 3600000,
+ enabled: true,
+ appendKey: [],
+ jsonp: false,
+ redisClient: false,
+ headerBlacklist: [],
+ statusCodes: {
+ include: [],
+ exclude: [],
+ },
+ events: {
+ expire: undefined,
+ },
+ headers: {
+ // 'cache-control': 'no-cache' // example of header overwrite
+ },
+ trackPerformance: false,
+ };
+
+ var middlewareOptions = [];
+ var instance = this;
+ var index = null;
+ var timers = {};
+ var performanceArray = []; // for tracking cache hit rate
+
+ instances.push(this);
+ this.id = instances.length;
+
+ function debug(a, b, c, d) {
+ var arr = ['\x1b[36m[apicache]\x1b[0m', a, b, c, d].filter(function (arg) {
+ return arg !== undefined;
+ });
+ var debugEnv =
+ process.env.DEBUG &&
+ process.env.DEBUG.split(',').indexOf('apicache') !== -1;
+
+ return (globalOptions.debug || debugEnv) && console.log.apply(null, arr);
+ }
+
+ function shouldCacheResponse(request, response, toggle) {
+ var opt = globalOptions;
+ var codes = opt.statusCodes;
+
+ if (!response) return false;
+
+ if (toggle && !toggle(request, response)) {
+ return false;
+ }
+
+ if (
+ codes.exclude &&
+ codes.exclude.length &&
+ codes.exclude.indexOf(response.statusCode) !== -1
+ )
+ return false;
+ if (
+ codes.include &&
+ codes.include.length &&
+ codes.include.indexOf(response.statusCode) === -1
+ )
+ return false;
+
+ return true;
+ }
+
+ function addIndexEntries(key, req) {
+ var groupName = req.apicacheGroup;
+
+ if (groupName) {
+ debug('group detected "' + groupName + '"');
+ var group = (index.groups[groupName] = index.groups[groupName] || []);
+ group.unshift(key);
+ }
+
+ index.all.unshift(key);
+ }
+
+ function filterBlacklistedHeaders(headers) {
+ return Object.keys(headers)
+ .filter(function (key) {
+ return globalOptions.headerBlacklist.indexOf(key) === -1;
+ })
+ .reduce(function (acc, header) {
+ acc[header] = headers[header];
+ return acc;
+ }, {});
+ }
+
+ function createCacheObject(status, headers, data, encoding) {
+ return {
+ status: status,
+ headers: filterBlacklistedHeaders(headers),
+ data: data,
+ encoding: encoding,
+ timestamp: new Date().getTime() / 1000, // seconds since epoch. This is used to properly decrement max-age headers in cached responses.
+ };
+ }
+
+ function cacheResponse(key, value, duration) {
+ var redis = globalOptions.redisClient;
+ var expireCallback = globalOptions.events.expire;
+
+ if (redis && redis.connected) {
+ try {
+ redis.hset(key, 'response', JSON.stringify(value));
+ redis.hset(key, 'duration', duration);
+ redis.expire(key, duration / 1000, expireCallback || function () {});
+ } catch (err) {
+ debug('[apicache] error in redis.hset()');
+ }
+ } else {
+ memCache.add(key, value, duration, expireCallback);
+ }
+
+ // add automatic cache clearing from duration, includes max limit on setTimeout
+ timers[key] = setTimeout(function () {
+ instance.clear(key, true);
+ }, Math.min(duration, 2147483647));
+ }
+
+ function accumulateContent(res, content) {
+ if (content) {
+ if (typeof content == 'string') {
+ res._apicache.content = (res._apicache.content || '') + content;
+ } else if (Buffer.isBuffer(content)) {
+ var oldContent = res._apicache.content;
+
+ if (typeof oldContent === 'string') {
+ oldContent = !Buffer.from
+ ? new Buffer(oldContent)
+ : Buffer.from(oldContent);
+ }
+
+ if (!oldContent) {
+ oldContent = !Buffer.alloc ? new Buffer(0) : Buffer.alloc(0);
+ }
+
+ res._apicache.content = Buffer.concat(
+ [oldContent, content],
+ oldContent.length + content.length,
+ );
+ } else {
+ res._apicache.content = content;
+ }
+ }
+ }
+
+ function makeResponseCacheable(
+ req,
+ res,
+ next,
+ key,
+ duration,
+ strDuration,
+ toggle,
+ ) {
+ // monkeypatch res.end to create cache object
+ res._apicache = {
+ write: res.write,
+ writeHead: res.writeHead,
+ end: res.end,
+ cacheable: true,
+ content: undefined,
+ };
+
+ // append header overwrites if applicable
+ Object.keys(globalOptions.headers).forEach(function (name) {
+ res.setHeader(name, globalOptions.headers[name]);
+ });
+
+ res.writeHead = function () {
+ // add cache control headers
+ if (!globalOptions.headers['cache-control']) {
+ if (shouldCacheResponse(req, res, toggle)) {
+ res.setHeader(
+ 'cache-control',
+ 'max-age=' + (duration / 1000).toFixed(0),
+ );
+ } else {
+ res.setHeader('cache-control', 'no-cache, no-store, must-revalidate');
+ }
+ }
+
+ res._apicache.headers = Object.assign({}, getSafeHeaders(res));
+ return res._apicache.writeHead.apply(this, arguments);
+ };
+
+ // patch res.write
+ res.write = function (content) {
+ accumulateContent(res, content);
+ return res._apicache.write.apply(this, arguments);
+ };
+
+ // patch res.end
+ res.end = function (content, encoding) {
+ if (shouldCacheResponse(req, res, toggle)) {
+ accumulateContent(res, content);
+
+ if (res._apicache.cacheable && res._apicache.content) {
+ addIndexEntries(key, req);
+ var headers = res._apicache.headers || getSafeHeaders(res);
+ var cacheObject = createCacheObject(
+ res.statusCode,
+ headers,
+ res._apicache.content,
+ encoding,
+ );
+ cacheResponse(key, cacheObject, duration);
+
+ // display log entry
+ var elapsed = new Date() - req.apicacheTimer;
+ debug(
+ 'adding cache entry for "' + key + '" @ ' + strDuration,
+ logDuration(elapsed),
+ );
+ debug('_apicache.headers: ', res._apicache.headers);
+ debug('res.getHeaders(): ', getSafeHeaders(res));
+ debug('cacheObject: ', cacheObject);
+ }
+ }
+
+ return res._apicache.end.apply(this, arguments);
+ };
+
+ next();
+ }
+
+ function sendCachedResponse(
+ request,
+ response,
+ cacheObject,
+ toggle,
+ next,
+ duration,
+ ) {
+ if (toggle && !toggle(request, response)) {
+ return next();
+ }
+
+ var headers = getSafeHeaders(response);
+
+ Object.assign(
+ headers,
+ filterBlacklistedHeaders(cacheObject.headers || {}),
+ {
+ // set properly-decremented max-age header. This ensures that max-age is in sync with the cache expiration.
+ 'cache-control':
+ 'max-age=' +
+ Math.max(
+ 0,
+ (
+ duration / 1000 -
+ (new Date().getTime() / 1000 - cacheObject.timestamp)
+ ).toFixed(0),
+ ),
+ },
+ );
+
+ // only embed apicache headers when not in production environment
+
+ // unstringify buffers
+ var data = cacheObject.data;
+ if (data && data.type === 'Buffer') {
+ data =
+ typeof data.data === 'number'
+ ? new Buffer.alloc(data.data)
+ : new Buffer.from(data.data);
+ }
+
+ // test Etag against If-None-Match for 304
+ var cachedEtag = cacheObject.headers.etag;
+ var requestEtag = request.headers['if-none-match'];
+
+ if (requestEtag && cachedEtag === requestEtag) {
+ response.writeHead(304, headers);
+ return response.end();
+ }
+
+ response.writeHead(cacheObject.status || 200, headers);
+
+ return response.end(data, cacheObject.encoding);
+ }
+
+ function syncOptions() {
+ for (var i in middlewareOptions) {
+ Object.assign(
+ middlewareOptions[i].options,
+ globalOptions,
+ middlewareOptions[i].localOptions,
+ );
+ }
+ }
+
+ this.clear = function (target, isAutomatic) {
+ var group = index.groups[target];
+ var redis = globalOptions.redisClient;
+
+ if (group) {
+ debug('clearing group "' + target + '"');
+
+ group.forEach(function (key) {
+ debug('clearing cached entry for "' + key + '"');
+ clearTimeout(timers[key]);
+ delete timers[key];
+ if (!globalOptions.redisClient) {
+ memCache.delete(key);
+ } else {
+ try {
+ redis.del(key);
+ } catch (err) {
+ console.log('[apicache] error in redis.del("' + key + '")');
+ }
+ }
+ index.all = index.all.filter(doesntMatch(key));
+ });
+
+ delete index.groups[target];
+ } else if (target) {
+ debug(
+ 'clearing ' +
+ (isAutomatic ? 'expired' : 'cached') +
+ ' entry for "' +
+ target +
+ '"',
+ );
+ clearTimeout(timers[target]);
+ delete timers[target];
+ // clear actual cached entry
+ if (!redis) {
+ memCache.delete(target);
+ } else {
+ try {
+ redis.del(target);
+ } catch (err) {
+ console.log('[apicache] error in redis.del("' + target + '")');
+ }
+ }
+
+ // remove from global index
+ index.all = index.all.filter(doesntMatch(target));
+
+ // remove target from each group that it may exist in
+ Object.keys(index.groups).forEach(function (groupName) {
+ index.groups[groupName] = index.groups[groupName].filter(
+ doesntMatch(target),
+ );
+
+ // delete group if now empty
+ if (!index.groups[groupName].length) {
+ delete index.groups[groupName];
+ }
+ });
+ } else {
+ debug('clearing entire index');
+
+ if (!redis) {
+ memCache.clear();
+ } else {
+ // clear redis keys one by one from internal index to prevent clearing non-apicache entries
+ index.all.forEach(function (key) {
+ clearTimeout(timers[key]);
+ delete timers[key];
+ try {
+ redis.del(key);
+ } catch (err) {
+ console.log('[apicache] error in redis.del("' + key + '")');
+ }
+ });
+ }
+ this.resetIndex();
+ }
+
+ return this.getIndex();
+ };
+
+ function parseDuration(duration, defaultDuration) {
+ if (typeof duration === 'number') return duration;
+
+ if (typeof duration === 'string') {
+ var split = duration.match(/^([\d\.,]+)\s?(\w+)$/);
+
+ if (split.length === 3) {
+ var len = parseFloat(split[1]);
+ var unit = split[2].replace(/s$/i, '').toLowerCase();
+ if (unit === 'm') {
+ unit = 'ms';
+ }
+
+ return (len || 1) * (t[unit] || 0);
+ }
+ }
+
+ return defaultDuration;
+ }
+
+ this.getDuration = function (duration) {
+ return parseDuration(duration, globalOptions.defaultDuration);
+ };
+
+ /**
+ * Return cache performance statistics (hit rate). Suitable for putting into a route:
+ *
+ * app.get('/api/cache/performance', (req, res) => {
+ * res.json(apicache.getPerformance())
+ * })
+ *
+ */
+ this.getPerformance = function () {
+ return performanceArray.map(function (p) {
+ return p.report();
+ });
+ };
+
+ this.getIndex = function (group) {
+ if (group) {
+ return index.groups[group];
+ } else {
+ return index;
+ }
+ };
+
+ this.middleware = function cache(
+ strDuration,
+ middlewareToggle,
+ localOptions,
+ ) {
+ var duration = instance.getDuration(strDuration);
+ var opt = {};
+
+ middlewareOptions.push({
+ options: opt,
+ });
+
+ var options = function (localOptions) {
+ if (localOptions) {
+ middlewareOptions.find(function (middleware) {
+ return middleware.options === opt;
+ }).localOptions = localOptions;
+ }
+
+ syncOptions();
+
+ return opt;
+ };
+
+ options(localOptions);
+
+ /**
+ * A Function for non tracking performance
+ */
+ function NOOPCachePerformance() {
+ this.report = this.hit = this.miss = function () {}; // noop;
+ }
+
+ /**
+ * A function for tracking and reporting hit rate. These statistics are returned by the getPerformance() call above.
+ */
+ function CachePerformance() {
+ /**
+ * Tracks the hit rate for the last 100 requests.
+ * If there have been fewer than 100 requests, the hit rate just considers the requests that have happened.
+ */
+ this.hitsLast100 = new Uint8Array(100 / 4); // each hit is 2 bits
+
+ /**
+ * Tracks the hit rate for the last 1000 requests.
+ * If there have been fewer than 1000 requests, the hit rate just considers the requests that have happened.
+ */
+ this.hitsLast1000 = new Uint8Array(1000 / 4); // each hit is 2 bits
+
+ /**
+ * Tracks the hit rate for the last 10000 requests.
+ * If there have been fewer than 10000 requests, the hit rate just considers the requests that have happened.
+ */
+ this.hitsLast10000 = new Uint8Array(10000 / 4); // each hit is 2 bits
+
+ /**
+ * Tracks the hit rate for the last 100000 requests.
+ * If there have been fewer than 100000 requests, the hit rate just considers the requests that have happened.
+ */
+ this.hitsLast100000 = new Uint8Array(100000 / 4); // each hit is 2 bits
+
+ /**
+ * The number of calls that have passed through the middleware since the server started.
+ */
+ this.callCount = 0;
+
+ /**
+ * The total number of hits since the server started
+ */
+ this.hitCount = 0;
+
+ /**
+ * The key from the last cache hit. This is useful in identifying which route these statistics apply to.
+ */
+ this.lastCacheHit = null;
+
+ /**
+ * The key from the last cache miss. This is useful in identifying which route these statistics apply to.
+ */
+ this.lastCacheMiss = null;
+
+ /**
+ * Return performance statistics
+ */
+ this.report = function () {
+ return {
+ lastCacheHit: this.lastCacheHit,
+ lastCacheMiss: this.lastCacheMiss,
+ callCount: this.callCount,
+ hitCount: this.hitCount,
+ missCount: this.callCount - this.hitCount,
+ hitRate: this.callCount == 0 ? null : this.hitCount / this.callCount,
+ hitRateLast100: this.hitRate(this.hitsLast100),
+ hitRateLast1000: this.hitRate(this.hitsLast1000),
+ hitRateLast10000: this.hitRate(this.hitsLast10000),
+ hitRateLast100000: this.hitRate(this.hitsLast100000),
+ };
+ };
+
+ /**
+ * Computes a cache hit rate from an array of hits and misses.
+ * @param {Uint8Array} array An array representing hits and misses.
+ * @returns a number between 0 and 1, or null if the array has no hits or misses
+ */
+ this.hitRate = function (array) {
+ var hits = 0;
+ var misses = 0;
+ for (var i = 0; i < array.length; i++) {
+ var n8 = array[i];
+ for (j = 0; j < 4; j++) {
+ switch (n8 & 3) {
+ case 1:
+ hits++;
+ break;
+ case 2:
+ misses++;
+ break;
+ }
+ n8 >>= 2;
+ }
+ }
+ var total = hits + misses;
+ if (total == 0) return null;
+ return hits / total;
+ };
+
+ /**
+ * Record a hit or miss in the given array. It will be recorded at a position determined
+ * by the current value of the callCount variable.
+ * @param {Uint8Array} array An array representing hits and misses.
+ * @param {boolean} hit true for a hit, false for a miss
+ * Each element in the array is 8 bits, and encodes 4 hit/miss records.
+ * Each hit or miss is encoded as to bits as follows:
+ * 00 means no hit or miss has been recorded in these bits
+ * 01 encodes a hit
+ * 10 encodes a miss
+ */
+ this.recordHitInArray = function (array, hit) {
+ var arrayIndex = ~~(this.callCount / 4) % array.length;
+ var bitOffset = (this.callCount % 4) * 2; // 2 bits per record, 4 records per uint8 array element
+ var clearMask = ~(3 << bitOffset);
+ var record = (hit ? 1 : 2) << bitOffset;
+ array[arrayIndex] = (array[arrayIndex] & clearMask) | record;
+ };
+
+ /**
+ * Records the hit or miss in the tracking arrays and increments the call count.
+ * @param {boolean} hit true records a hit, false records a miss
+ */
+ this.recordHit = function (hit) {
+ this.recordHitInArray(this.hitsLast100, hit);
+ this.recordHitInArray(this.hitsLast1000, hit);
+ this.recordHitInArray(this.hitsLast10000, hit);
+ this.recordHitInArray(this.hitsLast100000, hit);
+ if (hit) this.hitCount++;
+ this.callCount++;
+ };
+
+ /**
+ * Records a hit event, setting lastCacheMiss to the given key
+ * @param {string} key The key that had the cache hit
+ */
+ this.hit = function (key) {
+ this.recordHit(true);
+ this.lastCacheHit = key;
+ };
+
+ /**
+ * Records a miss event, setting lastCacheMiss to the given key
+ * @param {string} key The key that had the cache miss
+ */
+ this.miss = function (key) {
+ this.recordHit(false);
+ this.lastCacheMiss = key;
+ };
+ }
+
+ var perf = globalOptions.trackPerformance
+ ? new CachePerformance()
+ : new NOOPCachePerformance();
+
+ performanceArray.push(perf);
+
+ var cache = function (req, res, next) {
+ function bypass() {
+ debug('bypass detected, skipping cache.');
+ return next();
+ }
+
+ // initial bypass chances
+ if (!opt.enabled) return bypass();
+ if (
+ req.headers['x-apicache-bypass'] ||
+ req.headers['x-apicache-force-fetch']
+ )
+ return bypass();
+
+ // REMOVED IN 0.11.1 TO CORRECT MIDDLEWARE TOGGLE EXECUTE ORDER
+ // if (typeof middlewareToggle === 'function') {
+ // if (!middlewareToggle(req, res)) return bypass()
+ // } else if (middlewareToggle !== undefined && !middlewareToggle) {
+ // return bypass()
+ // }
+
+ // embed timer
+ req.apicacheTimer = new Date();
+
+ // In Express 4.x the url is ambigious based on where a router is mounted. originalUrl will give the full Url
+ var key = req.originalUrl || req.url;
+
+ // Remove querystring from key if jsonp option is enabled
+ if (opt.jsonp) {
+ key = url.parse(key).pathname;
+ }
+
+ // add appendKey (either custom function or response path)
+ if (typeof opt.appendKey === 'function') {
+ key += '$$appendKey=' + opt.appendKey(req, res);
+ } else if (opt.appendKey.length > 0) {
+ var appendKey = req;
+
+ for (var i = 0; i < opt.appendKey.length; i++) {
+ appendKey = appendKey[opt.appendKey[i]];
+ }
+ key += '$$appendKey=' + appendKey;
+ }
+
+ // attempt cache hit
+ var redis = opt.redisClient;
+ var cached = !redis ? memCache.getValue(key) : null;
+
+ // send if cache hit from memory-cache
+ if (cached) {
+ var elapsed = new Date() - req.apicacheTimer;
+ debug(
+ 'sending cached (memory-cache) version of',
+ key,
+ logDuration(elapsed),
+ );
+
+ perf.hit(key);
+ return sendCachedResponse(
+ req,
+ res,
+ cached,
+ middlewareToggle,
+ next,
+ duration,
+ );
+ }
+
+ // send if cache hit from redis
+ if (redis && redis.connected) {
+ try {
+ redis.hgetall(key, function (err, obj) {
+ if (!err && obj && obj.response) {
+ var elapsed = new Date() - req.apicacheTimer;
+ debug(
+ 'sending cached (redis) version of',
+ key,
+ logDuration(elapsed),
+ );
+
+ perf.hit(key);
+ return sendCachedResponse(
+ req,
+ res,
+ JSON.parse(obj.response),
+ middlewareToggle,
+ next,
+ duration,
+ );
+ } else {
+ perf.miss(key);
+ return makeResponseCacheable(
+ req,
+ res,
+ next,
+ key,
+ duration,
+ strDuration,
+ middlewareToggle,
+ );
+ }
+ });
+ } catch (err) {
+ // bypass redis on error
+ perf.miss(key);
+ return makeResponseCacheable(
+ req,
+ res,
+ next,
+ key,
+ duration,
+ strDuration,
+ middlewareToggle,
+ );
+ }
+ } else {
+ perf.miss(key);
+ return makeResponseCacheable(
+ req,
+ res,
+ next,
+ key,
+ duration,
+ strDuration,
+ middlewareToggle,
+ );
+ }
+ };
+
+ cache.options = options;
+
+ return cache;
+ };
+
+ this.options = function (options) {
+ if (options) {
+ Object.assign(globalOptions, options);
+ syncOptions();
+
+ if ('defaultDuration' in options) {
+ // Convert the default duration to a number in milliseconds (if needed)
+ globalOptions.defaultDuration = parseDuration(
+ globalOptions.defaultDuration,
+ 3600000,
+ );
+ }
+
+ if (globalOptions.trackPerformance) {
+ debug(
+ 'WARNING: using trackPerformance flag can cause high memory usage!',
+ );
+ }
+
+ return this;
+ } else {
+ return globalOptions;
+ }
+ };
+
+ this.resetIndex = function () {
+ index = {
+ all: [],
+ groups: {},
+ };
+ };
+
+ this.newInstance = function (config) {
+ var instance = new ApiCache();
+
+ if (config) {
+ instance.options(config);
+ }
+
+ return instance;
+ };
+
+ this.clone = function () {
+ return this.newInstance(this.options());
+ };
+
+ // initialize index
+ this.resetIndex();
+}
+
+module.exports = new ApiCache();
diff --git a/netease_api/util/crypto.js b/netease_api/util/crypto.js
new file mode 100644
index 0000000..de80e15
--- /dev/null
+++ b/netease_api/util/crypto.js
@@ -0,0 +1,67 @@
+const crypto = require('crypto');
+const iv = Buffer.from('0102030405060708');
+const presetKey = Buffer.from('0CoJUm6Qyw8W8jud');
+const linuxapiKey = Buffer.from('rFgB&h#%2?^eDg:Q');
+const base62 = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
+const publicKey =
+ '-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDgtQn2JZ34ZC28NWYpAUd98iZ37BUrX/aKzmFbt7clFSs6sXqHauqKWqdtLkF2KexO40H1YTX8z2lSgBBOAxLsvaklV8k4cBFK9snQXE9/DDaFt6Rr7iVZMldczhC0JNgTz+SHXT6CBHuX3e9SdB1Ua44oncaTWz7OBGLbCiK45wIDAQAB\n-----END PUBLIC KEY-----';
+const eapiKey = 'e82ckenh8dichen8';
+
+const aesEncrypt = (buffer, mode, key, iv) => {
+ const cipher = crypto.createCipheriv('aes-128-' + mode, key, iv);
+ return Buffer.concat([cipher.update(buffer), cipher.final()]);
+};
+
+const rsaEncrypt = (buffer, key) => {
+ buffer = Buffer.concat([Buffer.alloc(128 - buffer.length), buffer]);
+ return crypto.publicEncrypt(
+ { key: key, padding: crypto.constants.RSA_NO_PADDING },
+ buffer,
+ );
+};
+
+const weapi = (object) => {
+ const text = JSON.stringify(object);
+ const secretKey = crypto
+ .randomBytes(16)
+ .map((n) => base62.charAt(n % 62).charCodeAt());
+ return {
+ params: aesEncrypt(
+ Buffer.from(
+ aesEncrypt(Buffer.from(text), 'cbc', presetKey, iv).toString('base64'),
+ ),
+ 'cbc',
+ secretKey,
+ iv,
+ ).toString('base64'),
+ encSecKey: rsaEncrypt(secretKey.reverse(), publicKey).toString('hex'),
+ };
+};
+
+const linuxapi = (object) => {
+ const text = JSON.stringify(object);
+ return {
+ eparams: aesEncrypt(Buffer.from(text), 'ecb', linuxapiKey, '')
+ .toString('hex')
+ .toUpperCase(),
+ };
+};
+
+const eapi = (url, object) => {
+ const text = typeof object === 'object' ? JSON.stringify(object) : object;
+ const message = `nobody${url}use${text}md5forencrypt`;
+ const digest = crypto.createHash('md5').update(message).digest('hex');
+ const data = `${url}-36cd479b6b5-${text}-36cd479b6b5-${digest}`;
+ return {
+ params: aesEncrypt(Buffer.from(data), 'ecb', eapiKey, '')
+ .toString('hex')
+ .toUpperCase(),
+ };
+};
+
+const decrypt = (cipherBuffer) => {
+ const decipher = crypto.createDecipheriv('aes-128-ecb', eapiKey, '');
+ return Buffer.concat([decipher.update(cipherBuffer), decipher.final()]);
+};
+
+module.exports = { weapi, linuxapi, eapi, decrypt };
diff --git a/netease_api/util/index.js b/netease_api/util/index.js
new file mode 100644
index 0000000..6241c2c
--- /dev/null
+++ b/netease_api/util/index.js
@@ -0,0 +1,17 @@
+module.exports = {
+ toBoolean(val) {
+ if (typeof val === 'boolean') return val;
+ if (val === '') return val;
+ return val === 'true' || val == '1';
+ },
+ cookieToJson(cookie) {
+ if (!cookie) return {};
+ let cookieArr = cookie.split(';');
+ let obj = {};
+ cookieArr.forEach((i) => {
+ let arr = i.split('=');
+ obj[arr[0]] = arr[1];
+ });
+ return obj;
+ },
+};
diff --git a/netease_api/util/memory-cache.js b/netease_api/util/memory-cache.js
new file mode 100644
index 0000000..02e735a
--- /dev/null
+++ b/netease_api/util/memory-cache.js
@@ -0,0 +1,63 @@
+function MemoryCache() {
+ this.cache = {};
+ this.size = 0;
+}
+
+MemoryCache.prototype.add = function (key, value, time, timeoutCallback) {
+ var old = this.cache[key];
+ var instance = this;
+
+ var entry = {
+ value: value,
+ expire: time + Date.now(),
+ timeout: setTimeout(function () {
+ instance.delete(key);
+ return (
+ timeoutCallback &&
+ typeof timeoutCallback === 'function' &&
+ timeoutCallback(value, key)
+ );
+ }, time),
+ };
+
+ this.cache[key] = entry;
+ this.size = Object.keys(this.cache).length;
+
+ return entry;
+};
+
+MemoryCache.prototype.delete = function (key) {
+ var entry = this.cache[key];
+
+ if (entry) {
+ clearTimeout(entry.timeout);
+ }
+
+ delete this.cache[key];
+
+ this.size = Object.keys(this.cache).length;
+
+ return null;
+};
+
+MemoryCache.prototype.get = function (key) {
+ var entry = this.cache[key];
+
+ return entry;
+};
+
+MemoryCache.prototype.getValue = function (key) {
+ var entry = this.get(key);
+
+ return entry && entry.value;
+};
+
+MemoryCache.prototype.clear = function () {
+ Object.keys(this.cache).forEach(function (key) {
+ this.delete(key);
+ }, this);
+
+ return true;
+};
+
+module.exports = MemoryCache;
diff --git a/netease_api/util/request.js b/netease_api/util/request.js
new file mode 100644
index 0000000..84d448d
--- /dev/null
+++ b/netease_api/util/request.js
@@ -0,0 +1,177 @@
+const encrypt = require('./crypto');
+const axios = require('axios');
+const queryString = require('querystring');
+const PacProxyAgent = require('pac-proxy-agent');
+const http = require('http');
+const https = require('https');
+const tunnel = require('tunnel');
+const qs = require('url');
+// request.debug = true // 开启可看到更详细信息
+
+const chooseUserAgent = (ua = false) => {
+ const userAgentList = {
+ mobile: [
+ // iOS 13.5.1 14.0 beta with safari
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1',
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.',
+ // iOS with qq micromsg
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML like Gecko) Mobile/14A456 QQ/6.5.7.408 V1_IPH_SQ_6.5.7_1_APP_A Pixel/750 Core/UIWebView NetType/4G Mem/103',
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.15(0x17000f27) NetType/WIFI Language/zh',
+ // Android -> Huawei Xiaomi
+ 'Mozilla/5.0 (Linux; Android 9; PCT-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.64 HuaweiBrowser/10.0.3.311 Mobile Safari/537.36',
+ 'Mozilla/5.0 (Linux; U; Android 9; zh-cn; Redmi Note 8 Build/PKQ1.190616.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.141 Mobile Safari/537.36 XiaoMi/MiuiBrowser/12.5.22',
+ // Android + qq micromsg
+ 'Mozilla/5.0 (Linux; Android 10; YAL-AL00 Build/HUAWEIYAL-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.62 XWEB/2581 MMWEBSDK/200801 Mobile Safari/537.36 MMWEBID/3027 MicroMessenger/7.0.18.1740(0x27001235) Process/toolsmp WeChat/arm64 NetType/WIFI Language/zh_CN ABI/arm64',
+ 'Mozilla/5.0 (Linux; U; Android 8.1.0; zh-cn; BKK-AL10 Build/HONORBKK-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/10.6 Mobile Safari/537.36',
+ ],
+ pc: [
+ // macOS 10.15.6 Firefox / Chrome / Safari
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:80.0) Gecko/20100101 Firefox/80.0',
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.30 Safari/537.36',
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.2 Safari/605.1.15',
+ // Windows 10 Firefox / Chrome / Edge
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0',
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.30 Safari/537.36',
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/13.10586',
+ // Linux 就算了
+ ],
+ };
+ let realUserAgentList =
+ userAgentList[ua] || userAgentList.mobile.concat(userAgentList.pc);
+ return ['mobile', 'pc', false].indexOf(ua) > -1
+ ? realUserAgentList[Math.floor(Math.random() * realUserAgentList.length)]
+ : ua;
+};
+const createRequest = (method, url, data, options) => {
+ return new Promise((resolve, reject) => {
+ let headers = { 'User-Agent': chooseUserAgent(options.ua) };
+ if (method.toUpperCase() === 'POST')
+ headers['Content-Type'] = 'application/x-www-form-urlencoded';
+ if (url.includes('music.163.com'))
+ headers['Referer'] = 'https://music.163.com';
+ if (options.realIP) headers['X-Real-IP'] = options.realIP;
+ // headers['X-Real-IP'] = '118.88.88.88'
+ if (typeof options.cookie === 'object')
+ headers['Cookie'] = Object.keys(options.cookie)
+ .map(
+ (key) =>
+ encodeURIComponent(key) +
+ '=' +
+ encodeURIComponent(options.cookie[key]),
+ )
+ .join('; ');
+ else if (options.cookie) headers['Cookie'] = options.cookie;
+
+ if (!headers['Cookie']) {
+ headers['Cookie'] = options.token || '';
+ }
+ if (options.crypto === 'weapi') {
+ let csrfToken = (headers['Cookie'] || '').match(/_csrf=([^(;|$)]+)/);
+ data.csrf_token = csrfToken ? csrfToken[1] : '';
+ data = encrypt.weapi(data);
+ url = url.replace(/\w*api/, 'weapi');
+ } else if (options.crypto === 'linuxapi') {
+ data = encrypt.linuxapi({
+ method: method,
+ url: url.replace(/\w*api/, 'api'),
+ params: data,
+ });
+ headers['User-Agent'] =
+ 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36';
+ url = 'https://music.163.com/api/linux/forward';
+ } else if (options.crypto === 'eapi') {
+ const cookie = options.cookie || {};
+ const csrfToken = cookie['__csrf'] || '';
+ const header = {
+ osver: cookie.osver, //系统版本
+ deviceId: cookie.deviceId, //encrypt.base64.encode(imei + '\t02:00:00:00:00:00\t5106025eb79a5247\t70ffbaac7')
+ appver: cookie.appver || '6.1.1', // app版本
+ versioncode: cookie.versioncode || '140', //版本号
+ mobilename: cookie.mobilename, //设备model
+ buildver: cookie.buildver || Date.now().toString().substr(0, 10),
+ resolution: cookie.resolution || '1920x1080', //设备分辨率
+ __csrf: csrfToken,
+ os: cookie.os || 'android',
+ channel: cookie.channel,
+ requestId: `${Date.now()}_${Math.floor(Math.random() * 1000)
+ .toString()
+ .padStart(4, '0')}`,
+ };
+ if (cookie.MUSIC_U) header['MUSIC_U'] = cookie.MUSIC_U;
+ if (cookie.MUSIC_A) header['MUSIC_A'] = cookie.MUSIC_A;
+ headers['Cookie'] = Object.keys(header)
+ .map(
+ (key) =>
+ encodeURIComponent(key) + '=' + encodeURIComponent(header[key]),
+ )
+ .join('; ');
+ data.header = header;
+ data = encrypt.eapi(options.url, data);
+ url = url.replace(/\w*api/, 'eapi');
+ }
+
+ const answer = { status: 500, body: {}, cookie: [] };
+ const settings = {
+ method: method,
+ url: url,
+ headers: headers,
+ data: queryString.stringify(data),
+ httpAgent: new http.Agent({ keepAlive: true }),
+ httpsAgent: new https.Agent({ keepAlive: true }),
+ };
+
+ if (options.crypto === 'eapi') settings.encoding = null;
+
+ if (options.proxy) {
+ if (options.proxy.indexOf('pac') > -1) {
+ settings.httpAgent = new PacProxyAgent(options.proxy);
+ settings.httpsAgent = new PacProxyAgent(options.proxy);
+ } else {
+ var purl = qs.parse(options.proxy);
+ if (purl.hostname) {
+ const agent = tunnel.httpsOverHttp({
+ proxy: {
+ host: purl.hostname,
+ port: purl.port || 80,
+ },
+ });
+ settings.httpsAgent = agent;
+ settings.httpAgent = agent;
+ settings.proxy = false;
+ } else {
+ console.error('代理配置无效,不使用代理');
+ }
+ }
+ }
+
+ axios(settings)
+ .then((res) => {
+ const body = res.data;
+ answer.cookie = (res.headers['set-cookie'] || []).map((x) =>
+ x.replace(/\s*Domain=[^(;|$)]+;*/, ''),
+ );
+ try {
+ answer.body = body;
+ answer.status = answer.body.code || res.status;
+ if (answer.body.code === 502) {
+ answer.status = 200;
+ }
+ } catch (e) {
+ answer.body = body;
+ answer.status = res.status;
+ }
+
+ answer.status =
+ 100 < answer.status && answer.status < 600 ? answer.status : 400;
+ if (answer.status == 200) resolve(answer);
+ else reject(answer);
+ })
+ .catch((err) => {
+ answer.status = 502;
+ answer.body = { code: 502, msg: err };
+ reject(answer);
+ });
+ });
+};
+
+module.exports = createRequest;
diff --git a/package.json b/package.json
index c3ba61f..ebe112c 100644
--- a/package.json
+++ b/package.json
@@ -2,35 +2,58 @@
"name": "YesPlayMusic",
"version": "0.2.1",
"private": true,
+ "description": "A third party music application for Netease Cloud Music",
+ "author": "hawtim",
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint",
- "prettier": "npx prettier --write ./src"
- },
- "husky": {
- "hooks": {
- "pre-commit": "npm run prettier"
- }
+ "electron:build": "vue-cli-service electron:build -mwl -p never",
+ "electron:build-mac": "vue-cli-service electron:build -m -p never",
+ "electron:build-win": "vue-cli-service electron:build -w -p never",
+ "electron:build-linux": "vue-cli-service electron:build -l -p never",
+ "electron:serve": "vue-cli-service electron:serve",
+ "electron:buildicon": "electron-icon-builder --input=./build/icons/icon.png --output=build --flatten",
+ "electron:publish": "vue-cli-service electron:build -mwl -p always",
+ "postinstall": "electron-builder install-app-deps",
+ "postuninstall": "electron-builder install-app-deps",
+ "prettier": "npx prettier --write ./src ./script",
+ "netease_api:run": "cd ./netease_api && npm run start",
+ "netease_api:pull": "node script/pull.js",
+ "netease_api:install": "cd ./netease_api && npm install",
+ "netease_api:setup": "npm run netease_api:pull && npm run netease_api:install"
},
+ "main": "background.js",
"dependencies": {
- "@sentry/browser": "^5.27.0",
- "@sentry/integrations": "^5.27.0",
- "@sentry/tracing": "^5.27.0",
- "axios": "^0.20.0",
+ "axios": "^0.21.0",
+ "big-integer": "^1.6.48",
"core-js": "^3.6.5",
"crypto-js": "^4.0.0",
"dayjs": "^1.8.36",
+ "electron": "11.0.2",
+ "electron-context-menu": "^2.3.0",
+ "electron-debug": "^3.1.0",
+ "electron-devtools-installer": "^3.1.1",
+ "electron-icon-builder": "^1.0.2",
+ "electron-is-dev": "^1.2.0",
+ "electron-log": "^4.2.4",
+ "electron-updater": "^4.3.5",
+ "express": "^4.17.1",
+ "express-fileupload": "^1.2.0",
+ "extract-zip": "^2.0.1",
"howler": "^2.2.0",
"js-cookie": "^2.2.1",
"localforage": "^1.9.0",
"nprogress": "^0.2.0",
+ "pac-proxy-agent": "^4.1.0",
"plyr": "^3.6.2",
"prettier": "2.1.2",
"register-service-worker": "^1.7.1",
"svg-sprite-loader": "^5.0.0",
+ "tunnel": "^0.0.6",
"vue": "^2.6.11",
"vue-analytics": "^5.22.1",
+ "vue-electron": "^1.0.6",
"vue-global-events": "^1.2.1",
"vue-i18n": "^8.22.0",
"vue-router": "^3.4.3",
@@ -38,6 +61,9 @@
"vuex": "^3.4.0"
},
"devDependencies": {
+ "@sentry/browser": "^5.27.0",
+ "@sentry/integrations": "^5.27.0",
+ "@sentry/tracing": "^5.27.0",
"@vue/cli-plugin-babel": "~4.5.0",
"@vue/cli-plugin-eslint": "~4.5.0",
"@vue/cli-plugin-pwa": "~4.5.0",
@@ -49,12 +75,14 @@
"husky": "^4.3.0",
"sass": "^1.26.11",
"sass-loader": "^10.0.2",
+ "vue-cli-plugin-electron-builder": "~2.0.0-rc.4",
"vue-template-compiler": "^2.6.11"
},
"eslintConfig": {
"root": true,
"env": {
- "node": true
+ "node": true,
+ "browser": true
},
"extends": [
"plugin:vue/essential",
@@ -63,11 +91,19 @@
"parserOptions": {
"parser": "babel-eslint"
},
+ "globals": {
+ "ipcRenderer": "off"
+ },
"rules": {}
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead"
- ]
+ ],
+ "husky": {
+ "hooks": {
+ "pre-commit": "npm run prettier"
+ }
+ }
}
diff --git a/public/img/icons/1024x1024.png b/public/img/icons/1024x1024.png
new file mode 100644
index 0000000..f20aaf1
Binary files /dev/null and b/public/img/icons/1024x1024.png differ
diff --git a/public/img/icons/128x128.png b/public/img/icons/128x128.png
new file mode 100644
index 0000000..5d57494
Binary files /dev/null and b/public/img/icons/128x128.png differ
diff --git a/public/img/icons/16x16.png b/public/img/icons/16x16.png
new file mode 100644
index 0000000..ec10d15
Binary files /dev/null and b/public/img/icons/16x16.png differ
diff --git a/public/img/icons/24x24.png b/public/img/icons/24x24.png
new file mode 100644
index 0000000..0915087
Binary files /dev/null and b/public/img/icons/24x24.png differ
diff --git a/public/img/icons/256x256.png b/public/img/icons/256x256.png
new file mode 100644
index 0000000..185a5ea
Binary files /dev/null and b/public/img/icons/256x256.png differ
diff --git a/public/img/icons/32x32.png b/public/img/icons/32x32.png
new file mode 100644
index 0000000..018c6dd
Binary files /dev/null and b/public/img/icons/32x32.png differ
diff --git a/public/img/icons/48x48.png b/public/img/icons/48x48.png
new file mode 100644
index 0000000..c806745
Binary files /dev/null and b/public/img/icons/48x48.png differ
diff --git a/public/img/icons/512x512.png b/public/img/icons/512x512.png
new file mode 100644
index 0000000..0b6f725
Binary files /dev/null and b/public/img/icons/512x512.png differ
diff --git a/public/img/icons/64x64.png b/public/img/icons/64x64.png
new file mode 100644
index 0000000..6d07929
Binary files /dev/null and b/public/img/icons/64x64.png differ
diff --git a/public/img/icons/android-chrome-maskable-192x192.png b/public/img/icons/android-chrome-maskable-192x192.png
deleted file mode 100644
index 791e9c8..0000000
Binary files a/public/img/icons/android-chrome-maskable-192x192.png and /dev/null differ
diff --git a/public/img/icons/android-chrome-maskable-512x512.png b/public/img/icons/android-chrome-maskable-512x512.png
deleted file mode 100644
index 5f2098e..0000000
Binary files a/public/img/icons/android-chrome-maskable-512x512.png and /dev/null differ
diff --git a/public/img/icons/icon.icns b/public/img/icons/icon.icns
new file mode 100644
index 0000000..66eed86
Binary files /dev/null and b/public/img/icons/icon.icns differ
diff --git a/public/img/icons/icon.ico b/public/img/icons/icon.ico
new file mode 100644
index 0000000..d52b6a8
Binary files /dev/null and b/public/img/icons/icon.ico differ
diff --git a/public/img/icons/menu.png b/public/img/icons/menu.png
new file mode 100644
index 0000000..bd91a03
Binary files /dev/null and b/public/img/icons/menu.png differ
diff --git a/public/img/icons/menu@88.png b/public/img/icons/menu@88.png
new file mode 100644
index 0000000..cc14a82
Binary files /dev/null and b/public/img/icons/menu@88.png differ
diff --git a/public/img/icons/touchbar/like.png b/public/img/icons/touchbar/like.png
new file mode 100644
index 0000000..5b0c483
Binary files /dev/null and b/public/img/icons/touchbar/like.png differ
diff --git a/public/img/icons/touchbar/liked.png b/public/img/icons/touchbar/liked.png
new file mode 100644
index 0000000..8b46ab5
Binary files /dev/null and b/public/img/icons/touchbar/liked.png differ
diff --git a/public/img/icons/touchbar/next.png b/public/img/icons/touchbar/next.png
new file mode 100644
index 0000000..374ff4e
Binary files /dev/null and b/public/img/icons/touchbar/next.png differ
diff --git a/public/img/icons/touchbar/play.png b/public/img/icons/touchbar/play.png
new file mode 100644
index 0000000..4551268
Binary files /dev/null and b/public/img/icons/touchbar/play.png differ
diff --git a/public/img/icons/touchbar/previous.png b/public/img/icons/touchbar/previous.png
new file mode 100644
index 0000000..7ce133e
Binary files /dev/null and b/public/img/icons/touchbar/previous.png differ
diff --git a/public/img/icons/touchbar/repeat.png b/public/img/icons/touchbar/repeat.png
new file mode 100644
index 0000000..29e000a
Binary files /dev/null and b/public/img/icons/touchbar/repeat.png differ
diff --git a/public/img/icons/touchbar/search.png b/public/img/icons/touchbar/search.png
new file mode 100644
index 0000000..642805f
Binary files /dev/null and b/public/img/icons/touchbar/search.png differ
diff --git a/public/img/icons/touchbar/search2.png b/public/img/icons/touchbar/search2.png
new file mode 100644
index 0000000..d3905ae
Binary files /dev/null and b/public/img/icons/touchbar/search2.png differ
diff --git a/public/img/icons/touchbar/shuffle.png b/public/img/icons/touchbar/shuffle.png
new file mode 100644
index 0000000..787fc50
Binary files /dev/null and b/public/img/icons/touchbar/shuffle.png differ
diff --git a/script/pull.js b/script/pull.js
new file mode 100644
index 0000000..8f75eb8
--- /dev/null
+++ b/script/pull.js
@@ -0,0 +1,103 @@
+// node module
+const fs = require("fs");
+const https = require("https");
+const resolve = require("path").resolve;
+const join = require("path").resolve;
+const extract = require("extract-zip");
+
+// 函数参数
+const dest = resolve(__dirname, "../");
+const fileName = "NeteaseCloudMusicApi-master.zip";
+const options = {
+ hostname: "github.91chifun.workers.dev",
+ path: `//https://github.com/Binaryify/NeteaseCloudMusicApi/archive/master.zip`,
+};
+
+// 完整的流程控制
+/**
+ * 1. 检查本地文件是否已有
+ * 2. 下载默认/指定版本的 zip 压缩包,等待下载
+ * 3. 解压缩
+ * 4. 进入目录安装依赖 npm install
+ */
+
+function fix2(number) {
+ return number.toFixed(2);
+}
+
+async function download(options, fileName, callback) {
+ return await new Promise((resolve, reject) => {
+ const destPath = join(__dirname, "../" + fileName);
+ // Check if exist
+ if (fs.existsSync(destPath)) return resolve(destPath);
+
+ const file = fs.createWriteStream(destPath);
+ const request = https.get(options, (res) => {
+ let len = res.headers && parseInt(res.headers["content-length"], 10);
+ let cur = 0;
+ // 1048576 - bytes in 1Megabyte
+ const MEGA = 1048576;
+ let total = 0;
+ if (len) {
+ total = len / MEGA;
+ }
+ if (!len) {
+ console.log(
+ "Downloading, but can not get content-length, please be patient."
+ );
+ }
+ res.on("data", (chunk) => {
+ if (len) {
+ cur += chunk.length;
+ console.log(
+ `Downloading ${fix2((100.0 * cur) / len)}% ${fix2(
+ cur / MEGA
+ )}/${fix2(total)}mb`
+ );
+ }
+ });
+ res.on("end", () => {
+ callback("Downloading complete!");
+ });
+ res.pipe(file);
+ file.on("finish", () => {
+ file.close(() => {
+ callback("File wrote complete!");
+ resolve(destPath);
+ });
+ });
+ file.on("error", (err) => {
+ fs.unlink(destPath);
+ reject(err);
+ });
+ request.on("error", (err) => {
+ console.log("Error: " + err.message);
+ });
+ });
+ });
+}
+
+async function unzip(source, target) {
+ try {
+ await extract(source, {
+ dir: target,
+ });
+ console.log("Extraction complete");
+ return true;
+ } catch (err) {
+ // handle any errors
+ if (err.message === "end of central directory record signature not found") {
+ console.log("Not a full_downloaded zip file, removed!");
+ fs.unlinkSync(source);
+ }
+ return false;
+ }
+}
+// Download process
+download(options, fileName, (text) => {
+ console.log(text);
+}).then((path) => {
+ console.log(path);
+ // Unzip process
+ return unzip(path, dest);
+});
diff --git a/src/App.vue b/src/App.vue
index e3c1204..b1e0142 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,6 +1,6 @@
-
+
@@ -25,6 +25,7 @@
import Navbar from "./components/Navbar.vue";
import Player from "./components/Player.vue";
import GlobalEvents from "vue-global-events";
+import { ipcRenderer } from "./electron/ipcRenderer";
export default {
name: "App",
@@ -33,6 +34,16 @@ export default {
Player,
GlobalEvents,
},
+ data() {
+ return {
+ isElectron: process.env.IS_ELECTRON, // true || undefined
+ };
+ },
+ created() {
+ if (this.isElectron) {
+ ipcRenderer(this);
+ }
+ },
methods: {
play(e) {
e.preventDefault();
@@ -121,6 +132,11 @@ a {
}
}
+// for electron
+body.is-electron::-webkit-scrollbar {
+ width: 0;
+}
+
/* Let's get this party started */
::-webkit-scrollbar {
width: 8px;
diff --git a/src/background.js b/src/background.js
new file mode 100644
index 0000000..bc42b88
--- /dev/null
+++ b/src/background.js
@@ -0,0 +1,153 @@
+"use strict";
+import { app, protocol, BrowserWindow, globalShortcut } from "electron";
+import { createProtocol } from "vue-cli-plugin-electron-builder/lib";
+import installExtension, { VUEJS_DEVTOOLS } from "electron-devtools-installer";
+import { startNeteaseMusicApi } from "./electron/services";
+import { initIpcMain } from "./electron/ipcMain.js";
+import { createMenu } from "./electron/menu";
+import { createTouchBar } from "./electron/touchBar";
+import { createDockMenu } from "./electron/dockMenu";
+import { createTray } from "./electron/tray.js";
+// import { autoUpdater } from "electron-updater"
+
+const isDevelopment = process.env.NODE_ENV !== "production";
+
+// Keep a global reference of the window object, if you don't, the window will
+// be closed automatically when the JavaScript object is garbage collected.
+let win;
+
+// ipcMain
+initIpcMain(win);
+
+// Scheme must be registered before the app is ready
+protocol.registerSchemesAsPrivileged([
+ { scheme: "app", privileges: { secure: true, standard: true } },
+]);
+
+function createWindow() {
+ win = new BrowserWindow({
+ width: 1440,
+ height: 840,
+ titleBarStyle: "hiddenInset",
+ webPreferences: {
+ webSecurity: false,
+ nodeIntegration: true,
+ },
+ });
+ win.setMenuBarVisibility(false);
+
+ if (process.platform !== "darwin") {
+ createTray(win);
+ }
+
+ if (process.env.WEBPACK_DEV_SERVER_URL) {
+ // Load the url of the dev server if in development mode
+ win.loadURL(process.env.WEBPACK_DEV_SERVER_URL);
+ if (!process.env.IS_TEST) win.webContents.openDevTools();
+ } else {
+ createProtocol("app");
+ // Load the index.html when not in development
+ win.loadURL("app://./index.html");
+ }
+
+ win.on("closed", () => {
+ win = null;
+ });
+ return win;
+}
+
+// Quit when all windows are closed.
+app.on("window-all-closed", () => {
+ // On macOS it is common for applications and their menu bar
+ // to stay active until the user quits explicitly with Cmd + Q
+ if (process.platform !== "darwin") {
+ app.quit();
+ }
+});
+
+app.on("activate", () => {
+ // On macOS it's common to re-create a window in the app when the
+ // dock icon is clicked and there are no other windows open.
+ if (win === null) {
+ createWindow();
+ }
+});
+
+// This method will be called when Electron has finished
+// initialization and is ready to create browser windows.
+// Some APIs can only be used after this event occurs.
+app.on("ready", async () => {
+ // start netease music api
+ startNeteaseMusicApi();
+
+ // Install Vue Devtools xtension
+ if (isDevelopment && !process.env.IS_TEST) {
+ try {
+ await installExtension(VUEJS_DEVTOOLS);
+ } catch (e) {
+ console.error("Vue Devtools failed to install:", e.toString());
+ }
+ }
+
+ // Register shortcut for debug
+ globalShortcut.register("CommandOrControl+K", function () {
+ win.webContents.openDevTools();
+ });
+
+ // create window
+ createWindow();
+ win.once("ready-to-show", () => {
+ win.show();
+ });
+
+ // create menu
+ createMenu(win);
+
+ // create dock menu for macOS
+ app.dock.setMenu(createDockMenu(win));
+
+ // create touchbar
+ win.setTouchBar(createTouchBar(win));
+
+ // autoUpdater.checkForUpdatesAndNotify()
+});
+
+// autoUpdater.on("checking-for-update", () => {});
+// autoUpdater.on("update-available", info => {
+// console.log(info);
+// dialog.showMessageBox({
+// title: "新版本发布",
+// message: "有新内容更新,稍后将重新为您安装",
+// buttons: ["确定"],
+// type: "info",
+// noLink: true
+// });
+// });
+
+// autoUpdater.on("update-downloaded", info => {
+// console.log(info);
+// autoUpdater.quitAndInstall();
+// });
+
+// Exit cleanly on request from parent process in development mode.
+if (isDevelopment) {
+ if (process.platform === "win32") {
+ process.on("message", (data) => {
+ if (data === "graceful-exit") {
+ app.quit();
+ }
+ });
+ } else {
+ process.on("SIGTERM", () => {
+ app.quit();
+ });
+ }
+}
+
+// Make sure the app is singleton.
+function initialize() {
+ const shouldQuit = !app.requestSingleInstanceLock();
+ if (shouldQuit) return app.quit();
+}
+
+initialize();
diff --git a/src/components/Navbar.vue b/src/components/Navbar.vue
index cc94984..3d41f0a 100644
--- a/src/components/Navbar.vue
+++ b/src/components/Navbar.vue
@@ -35,6 +35,7 @@
@@ -141,9 +141,12 @@ export default {
oldVolume: 0.5,
};
},
- created() {
+ mounted() {
setInterval(() => {
- this.progress = ~~this.howler.seek();
+ // fix 歌曲播放完还设置进度的问题,及 _id 不存在的问题
+ if (this.howler && this.howler._sounds[0]._id) {
+ this.progress = ~~this.howler.seek();
+ }
}, 1000);
if (isAccountLoggedIn()) {
userLikedSongsIDs(this.data.user.userId).then((data) => {
@@ -167,9 +170,12 @@ export default {
},
playing() {
if (this.howler.state() === "loading") {
+ this.updatePlayerState({ key: "playing", value: true });
return true;
}
- return this.howler.playing();
+ const status = this.howler.playing();
+ this.updatePlayerState({ key: "playing", value: status });
+ return status;
},
progressMax() {
let max = ~~(this.currentTrack.dt / 1000);
diff --git a/src/electron/dockMenu.js b/src/electron/dockMenu.js
new file mode 100644
index 0000000..5b833c5
--- /dev/null
+++ b/src/electron/dockMenu.js
@@ -0,0 +1,25 @@
+const { Menu } = require("electron");
+
+export function createDockMenu(win) {
+ return Menu.buildFromTemplate([
+ {
+ label: "Play",
+ click() {
+ win.webContents.send("play");
+ },
+ },
+ { type: "separator" },
+ {
+ label: "Next",
+ click() {
+ win.webContents.send("next");
+ },
+ },
+ {
+ label: "Previous",
+ click() {
+ win.webContents.send("previous");
+ },
+ },
+ ]);
+}
diff --git a/src/electron/ipcMain.js b/src/electron/ipcMain.js
new file mode 100644
index 0000000..0a9dbc4
--- /dev/null
+++ b/src/electron/ipcMain.js
@@ -0,0 +1,19 @@
+import { app, ipcMain } from "electron";
+
+export function initIpcMain(win) {
+ // Make vuex copy for electron.
+ global.vuexCopy = null;
+ // 同步 vuex 状态,由于 player 有循环引用问题,拷贝部分属性
+ ipcMain.on("vuex-state", (e, state) => {
+ global.vuexCopy = state;
+ });
+
+ ipcMain.on("close", () => {
+ win.close();
+ app.quit();
+ });
+
+ ipcMain.on("minimize", () => {
+ win.minimize();
+ });
+}
diff --git a/src/electron/ipcRenderer.js b/src/electron/ipcRenderer.js
new file mode 100644
index 0000000..a9dc0c8
--- /dev/null
+++ b/src/electron/ipcRenderer.js
@@ -0,0 +1,49 @@
+export function ipcRenderer(vueInstance) {
+ const self = vueInstance;
+ // 添加专有的类名
+ document.body.classList.add("is-electron");
+ // ipc message channel
+ const electron = window.require("electron");
+ const ipcRenderer = electron.ipcRenderer;
+ // listens to the main process 'changeRouteTo' event and changes the route from
+ // inside this Vue instance, according to what path the main process requires.
+ // responds to Menu click() events at the main process and changes the route accordingly.
+ ipcRenderer.on("changeRouteTo", (event, path) => {
+ self.$router.push(path);
+ });
+ ipcRenderer.on("search", () => {
+ // 触发数据响应
+ self.$refs.navbar.$refs.searchInput.focus();
+ self.$refs.navbar.inputFocus = true;
+ });
+ ipcRenderer.on("play", () => {
+ self.$refs.player.play();
+ });
+ ipcRenderer.on("next", () => {
+ self.$refs.player.next();
+ });
+ ipcRenderer.on("previous", () => {
+ self.$refs.player.previous();
+ });
+ ipcRenderer.on("increaseVolume", () => {
+ if (self.$refs.player.volume + 0.1 >= 1) {
+ return (self.$refs.player.volume = 1);
+ }
+ self.$refs.player.volume += 0.1;
+ });
+ ipcRenderer.on("decreaseVolume", () => {
+ if (self.$refs.player.volume - 0.1 <= 0) {
+ return (self.$refs.player.volume = 0);
+ }
+ self.$refs.player.volume -= 0.1;
+ });
+ ipcRenderer.on("like", () => {
+ self.$refs.player.likeCurrentSong();
+ });
+ ipcRenderer.on("repeat", () => {
+ self.$refs.player.repeat();
+ });
+ ipcRenderer.on("shuffle", () => {
+ self.$refs.player.shuffle();
+ });
+}
diff --git a/src/electron/menu.js b/src/electron/menu.js
new file mode 100644
index 0000000..972fc9b
--- /dev/null
+++ b/src/electron/menu.js
@@ -0,0 +1,205 @@
+const { app, Menu } = require("electron");
+// import { autoUpdater } from "electron-updater"
+// const version = app.getVersion();
+
+const isMac = process.platform === "darwin";
+
+export function createMenu(win) {
+ let menu = null;
+ const template = [
+ ...(isMac
+ ? [
+ {
+ label: app.name,
+ submenu: [
+ { role: "about" },
+ { type: "separator" },
+ { role: "services" },
+ { type: "separator" },
+ { type: "separator" },
+ {
+ label: "Preferences...",
+ accelerator: (() => (isMac ? "CmdOrCtrl+," : "Ctrl+,"))(),
+ click: () => {
+ win.webContents.send("changeRouteTo", "/settings");
+ },
+ role: "preferences",
+ },
+ { type: "separator" },
+ { role: "hide" },
+ { role: "hideothers" },
+ { role: "unhide" },
+ { type: "separator" },
+ { role: "quit" },
+ ],
+ },
+ ]
+ : []),
+ {
+ label: "Edit",
+ submenu: [
+ { role: "undo" },
+ { role: "redo" },
+ { type: "separator" },
+ { role: "cut" },
+ { role: "copy" },
+ { role: "paste" },
+ ...(isMac
+ ? [
+ { role: "delete" },
+ { role: "selectAll" },
+ { type: "separator" },
+ {
+ label: "Speech",
+ submenu: [{ role: "startspeaking" }, { role: "stopspeaking" }],
+ },
+ ]
+ : [{ role: "delete" }, { type: "separator" }, { role: "selectAll" }]),
+ {
+ label: "Search",
+ accelerator: "CmdOrCtrl+F",
+ click: () => {
+ win.webContents.send("search");
+ },
+ },
+ ],
+ },
+ {
+ label: "Controls",
+ submenu: [
+ {
+ label: "Play",
+ accelerator: "Space",
+ click: () => {
+ win.webContents.send("play");
+ },
+ },
+ {
+ label: "Next",
+ accelerator: "CmdOrCtrl+Right",
+ click: () => {
+ win.webContents.send("next");
+ },
+ },
+ {
+ label: "Previous",
+ accelerator: "CmdOrCtrl+Left",
+ click: () => {
+ win.webContents.send("previous");
+ },
+ },
+ {
+ label: "Increase Volume",
+ accelerator: "CmdOrCtrl+Up",
+ click: () => {
+ win.webContents.send("increaseVolume");
+ },
+ },
+ {
+ label: "Decrease Volume",
+ accelerator: "CmdOrCtrl+Down",
+ click: () => {
+ win.webContents.send("decreaseVolume");
+ },
+ },
+ {
+ label: "Like",
+ accelerator: "CmdOrCtrl+L",
+ click: () => {
+ win.webContents.send("like");
+ },
+ },
+ {
+ label: "Repeat",
+ accelerator: "Alt+R",
+ click: () => {
+ win.webContents.send("repeat");
+ },
+ },
+ {
+ label: "Shuffle",
+ accelerator: "Alt+S",
+ click: () => {
+ win.webContents.send("shuffle");
+ },
+ },
+ ],
+ },
+ {
+ label: "Window",
+ submenu: [
+ { role: "minimize" },
+ { role: "zoom" },
+ { role: "reload" },
+ { role: "forcereload" },
+ { role: "toggledevtools" },
+ { type: "separator" },
+ { role: "togglefullscreen" },
+ ...(isMac
+ ? [
+ { type: "separator" },
+ { role: "front" },
+ { type: "separator" },
+ {
+ role: "window",
+ id: "window",
+ label: "YesPlayMusic",
+ type: "checkbox",
+ checked: true,
+ click: () => {
+ const current = menu.getMenuItemById("window");
+ if (current.checked === false) {
+ win.hide();
+ } else {
+ win.show();
+ }
+ },
+ },
+ ]
+ : [{ role: "close" }]),
+ ],
+ },
+ {
+ label: "Help",
+ submenu: [
+ {
+ label: "Github",
+ click: async () => {
+ const { shell } = require("electron");
+ await shell.openExternal("https://github.com/qier222/YesPlayMusic");
+ },
+ },
+ {
+ label: "Electron",
+ click: async () => {
+ const { shell } = require("electron");
+ await shell.openExternal("https://electronjs.org");
+ },
+ },
+ ],
+ },
+ ];
+ // for window
+ // if (process.platform === "win32") {
+ // template.push({
+ // label: "Help",
+ // submenu: [
+ // {
+ // label: `Current version v${version}`,
+ // enabled: false,
+ // },
+ // {
+ // label: "Check for update",
+ // accelerator: "Ctrl+U",
+ // click: (item, focusedWindow) => {
+ // win = focusedWindow;
+ // updateSource = "menu";
+ // autoUpdater.checkForUpdates();
+ // },
+ // },
+ // ],
+ // });
+ // }
+ menu = Menu.buildFromTemplate(template);
+ Menu.setApplicationMenu(menu);
+}
diff --git a/src/electron/services.js b/src/electron/services.js
new file mode 100644
index 0000000..27f8667
--- /dev/null
+++ b/src/electron/services.js
@@ -0,0 +1,58 @@
+const express = require("express");
+const bodyParser = require("body-parser");
+const cache = require("../../netease_api/util/apicache").middleware;
+const fileUpload = require("express-fileupload");
+import routes from "../../netease_api/routes";
+
+export function startNeteaseMusicApi() {
+ // Integrate API
+ const app = express();
+
+ // CORS & Preflight request
+ app.use((req, res, next) => {
+ if (req.path !== "/" && !req.path.includes(".")) {
+ res.set({
+ "Access-Control-Allow-Credentials": true,
+ "Access-Control-Allow-Origin": req.headers.origin || "*",
+ "Access-Control-Allow-Headers": "X-Requested-With,Content-Type",
+ "Access-Control-Allow-Methods": "PUT,POST,GET,DELETE,OPTIONS",
+ "Content-Type": "application/json; charset=utf-8",
+ });
+ }
+ req.method === "OPTIONS" ? res.status(204).end() : next();
+ });
+
+ // cookie parser
+ app.use((req, res, next) => {
+ req.cookies = {};
+ (req.headers.cookie || "").split(/\s*;\s*/).forEach((pair) => {
+ let crack = pair.indexOf("=");
+ if (crack < 1 || crack == pair.length - 1) return;
+ req.cookies[
+ decodeURIComponent(pair.slice(0, crack)).trim()
+ ] = decodeURIComponent(pair.slice(crack + 1)).trim();
+ });
+ next();
+ });
+
+ // body parser
+ app.use(bodyParser.json());
+ app.use(bodyParser.urlencoded({ extended: false }));
+
+ app.use(fileUpload());
+
+ // cache
+ app.use(cache("2 minutes", (req, res) => res.statusCode === 200));
+ // router
+
+ Object.keys(routes).forEach((route) => {
+ app.use(route, routes[route]);
+ });
+
+ const port = process.env.PORT || 10754;
+ const host = process.env.HOST || "127.0.0.1";
+
+ app.server = app.listen(port, host, () => {
+ console.log(`server running @ http://${host ? host : "localhost"}:${port}`);
+ });
+}
diff --git a/src/electron/touchbar.js b/src/electron/touchbar.js
new file mode 100644
index 0000000..ea0a753
--- /dev/null
+++ b/src/electron/touchbar.js
@@ -0,0 +1,131 @@
+const { TouchBar, nativeImage, ipcMain } = require("electron");
+const path = require("path");
+
+const {
+ TouchBarButton,
+ TouchBarGroup,
+ TouchBarSpacer,
+ TouchBarSegmentedControl,
+} = TouchBar;
+
+function getNativeIcon(name, width = 24, height = 24) {
+ return nativeImage
+ .createFromPath(path.join(__static, "img/icons/touchbar/", name))
+ .resize({
+ width,
+ height,
+ });
+}
+
+export function createSegmentedControl(renderer) {
+ const segments = [
+ {
+ icon: getNativeIcon("previous.png"),
+ },
+ {
+ icon: getNativeIcon("play.png", 20, 20),
+ },
+ {
+ icon: getNativeIcon("next.png"),
+ },
+ ];
+ const segmentedControl = new TouchBarSegmentedControl({
+ segments,
+ change: (selectedIndex) => {
+ const temp = Object.assign([], segmentedControl.segments);
+ if (selectedIndex === 0) {
+ renderer.send("previous");
+ }
+ if (selectedIndex === 1) {
+ ipcMain.on("vuex-state", (e, { player }) => {
+ const playing = player.playing;
+ if (playing === true) {
+ // To be paused
+ temp[1].icon = getNativeIcon("play.png", 20, 20);
+ segmentedControl.segments = temp;
+ } else {
+ temp[1].icon = getNativeIcon("play.png", 20, 20);
+ segmentedControl.segments = temp;
+ }
+ });
+ renderer.send("play");
+ }
+ if (selectedIndex === 2) {
+ renderer.send("next");
+ }
+ },
+ mode: "buttons",
+ });
+ return segmentedControl;
+}
+
+export function createPreferGroup(renderer) {
+ const search = new TouchBarButton({
+ icon: getNativeIcon("search.png", 22, 22),
+ click: () => {
+ renderer.send("search");
+ },
+ });
+ const like = new TouchBarButton({
+ icon: getNativeIcon("like.png"),
+ click: () => {
+ ipcMain.on("vuex-state", (e, { liked, player }) => {
+ const currentTrack = player.currentTrack;
+ if (liked.songs.includes(currentTrack.id)) {
+ like.icon = getNativeIcon("liked.png");
+ } else {
+ like.icon = getNativeIcon("like.png");
+ }
+ });
+ renderer.send("like");
+ },
+ });
+ const repeat = new TouchBarButton({
+ icon: getNativeIcon("repeat.png"),
+ click: () => {
+ ipcMain.on("vuex-state", (e, { player }) => {
+ const repeat = player.repeat;
+ if (repeat === "on") {
+ repeat.icon = getNativeIcon("repeat.png");
+ } else if (repeat === "one") {
+ repeat.icon = getNativeIcon("repeat.png");
+ } else {
+ repeat.icon = getNativeIcon("repeat.png");
+ }
+ });
+ renderer.send("repeat");
+ },
+ });
+ const shuffle = new TouchBarButton({
+ icon: getNativeIcon("shuffle.png"),
+ click: () => {
+ ipcMain.on("vuex-state", (e, { player }) => {
+ const shuffle = player.shuffle;
+ if (shuffle === true) {
+ shuffle.icon = getNativeIcon("shuffle.png");
+ } else {
+ shuffle.icon = getNativeIcon("shuffle.png");
+ }
+ });
+ renderer.send("shuffle");
+ },
+ });
+ return new TouchBar({
+ items: [search, like, repeat, shuffle],
+ });
+}
+
+export function createTouchBar(window) {
+ const renderer = window.webContents;
+ const segmentedControl = createSegmentedControl(renderer);
+ const preferGroup = createPreferGroup(renderer);
+ const touchBar = new TouchBar({
+ items: [
+ new TouchBarGroup({ items: preferGroup }),
+ new TouchBarSpacer({ size: "large" }),
+ segmentedControl,
+ new TouchBarSpacer({ size: "large" }),
+ ],
+ });
+ return touchBar;
+}
diff --git a/src/electron/touchbar1.js b/src/electron/touchbar1.js
new file mode 100644
index 0000000..752b000
--- /dev/null
+++ b/src/electron/touchbar1.js
@@ -0,0 +1,104 @@
+// 运用 ipdMain 请求用户喜欢的歌手的数据,随机抽几个歌手进行随机
+const { TouchBar } = require("electron");
+
+const { TouchBarLabel, TouchBarButton, TouchBarSpacer } = TouchBar;
+
+let spinning = false;
+
+// Reel labels
+const reel1 = new TouchBarLabel();
+const reel2 = new TouchBarLabel();
+const reel3 = new TouchBarLabel();
+
+// Spin result label
+const result = new TouchBarLabel();
+
+// Spin button
+const spin = new TouchBarButton({
+ label: "🎰 Spin",
+ backgroundColor: "#7851A9",
+ click: () => {
+ // Ignore clicks if already spinning
+ if (spinning) {
+ return;
+ }
+
+ spinning = true;
+ result.label = "";
+
+ let timeout = 10;
+ const spinLength = 4 * 1000; // 4 seconds
+ const startTime = Date.now();
+
+ const spinReels = () => {
+ updateReels();
+
+ if (Date.now() - startTime >= spinLength) {
+ finishSpin();
+ } else {
+ // Slow down a bit on each spin
+ timeout *= 1.1;
+ setTimeout(spinReels, timeout);
+ }
+ };
+
+ spinReels();
+ },
+});
+
+const getRandomValue = () => {
+ const values = ["🍒", "💎", "7️⃣", "🍊", "🔔", "⭐", "🍇", "🍀"];
+ return values[Math.floor(Math.random() * values.length)];
+};
+
+const updateReels = () => {
+ reel1.label = getRandomValue();
+ reel2.label = getRandomValue();
+ reel3.label = getRandomValue();
+};
+
+const finishSpin = () => {
+ const uniqueValues = new Set([reel1.label, reel2.label, reel3.label]).size;
+ if (uniqueValues === 1) {
+ // All 3 values are the same
+ result.label = "💰 Jackpot!";
+ result.textColor = "#FDFF00";
+ } else if (uniqueValues === 2) {
+ // 2 values are the same
+ result.label = "😍 Winner!";
+ result.textColor = "#FDFF00";
+ } else {
+ // No values are the same
+ result.label = "🙁 Spin Again";
+ result.textColor = null;
+ }
+ spinning = false;
+};
+
+const touchBar = new TouchBar({
+ items: [
+ spin,
+ new TouchBarSpacer({ size: "large" }),
+ reel1,
+ new TouchBarSpacer({ size: "small" }),
+ reel2,
+ new TouchBarSpacer({ size: "small" }),
+ reel3,
+ new TouchBarSpacer({ size: "large" }),
+ result,
+ ],
+});
+
+// let window
+
+// app.whenReady().then(() => {
+// window = new BrowserWindow({
+// frame: false,
+// titleBarStyle: 'hiddenInset',
+// backgroundColor: '#000'
+// })
+// window.loadURL('about:blank')
+// window.setTouchBar(touchBar)
+// })
+
+module.exports = touchBar;
diff --git a/src/electron/tray.js b/src/electron/tray.js
new file mode 100644
index 0000000..e624c19
--- /dev/null
+++ b/src/electron/tray.js
@@ -0,0 +1,21 @@
+import path from "path";
+import { nativeImage, Tray } from "electron";
+
+export function createTray(win) {
+ let icon = nativeImage
+ .createFromPath(path.join(__static, "img/icons/menu@88.png"))
+ .resize({
+ height: 20,
+ width: 20,
+ });
+ let tray = new Tray(icon);
+
+ tray.on("click", () => {
+ if (win && win.isVisible()) {
+ win.hide();
+ } else {
+ win.show();
+ }
+ });
+ return tray;
+}
diff --git a/src/registerServiceWorker.js b/src/registerServiceWorker.js
index 1473a0a..8c6d0d3 100644
--- a/src/registerServiceWorker.js
+++ b/src/registerServiceWorker.js
@@ -2,7 +2,10 @@
import { register } from "register-service-worker";
-if (process.env.NODE_ENV === "production") {
+if (
+ process.env.NODE_ENV === "production" &&
+ process.env.IS_ELECTRON === "undefined"
+) {
register(`${process.env.BASE_URL}service-worker.js`, {
ready() {
console.log(
diff --git a/src/store/index.js b/src/store/index.js
index 0b89997..f61da3c 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -7,42 +7,46 @@ import initLocalStorage from "./initLocalStorage";
import { Howl, Howler } from "howler";
import { changeAppearance } from "@/utils/common";
import updateApp from "@/utils/updateApp";
-import pack from "../../package.json";
+import pkg from "../../package.json";
+// vuex 自定义插件
+import { getBroadcastPlugin } from "./plugins/broadcast";
+import saveToLocalStorage from "./plugins/localStorage";
if (localStorage.getItem("appVersion") === null) {
localStorage.setItem("player", JSON.stringify(initLocalStorage.player));
localStorage.setItem("settings", JSON.stringify(initLocalStorage.settings));
localStorage.setItem("data", JSON.stringify(initLocalStorage.data));
- localStorage.setItem("appVersion", pack.version);
+ localStorage.setItem("appVersion", pkg.version);
window.location.reload();
}
updateApp();
-const saveToLocalStorage = (store) => {
- store.subscribe((mutation, state) => {
- // console.log(mutation);
- localStorage.setItem("player", JSON.stringify(state.player));
- localStorage.setItem("settings", JSON.stringify(state.settings));
- localStorage.setItem("data", JSON.stringify(state.data));
- });
-};
-
Vue.use(Vuex);
-const store = new Vuex.Store({
- state: state,
+
+let plugins = [saveToLocalStorage];
+if (process.env.IS_ELECTRON === true) {
+ let vuexBroadCast = getBroadcastPlugin();
+ plugins.push(vuexBroadCast);
+}
+
+const options = {
+ state,
mutations,
actions,
- plugins: [saveToLocalStorage],
-});
+ plugins,
+};
+
+const store = new Vuex.Store(options);
store.state.howler = new Howl({
src: [
`https://music.163.com/song/media/outer/url?id=${store.state.player.currentTrack.id}`,
],
html5: true,
- format: ["mp3"],
+ format: ["webm", "mp3"],
});
+
Howler.volume(store.state.player.volume);
if ([undefined, null].includes(store.state.settings.lang)) {
@@ -53,6 +57,7 @@ if ([undefined, null].includes(store.state.settings.lang)) {
}
changeAppearance(store.state.settings.appearance);
+
window
.matchMedia("(prefers-color-scheme: dark)")
.addEventListener("change", () => {
diff --git a/src/store/plugins/broadcast.js b/src/store/plugins/broadcast.js
new file mode 100644
index 0000000..921cbfa
--- /dev/null
+++ b/src/store/plugins/broadcast.js
@@ -0,0 +1,23 @@
+export function getBroadcastPlugin() {
+ const electron = window.require("electron");
+ const ipcRenderer = electron.ipcRenderer;
+
+ return (store) => {
+ // 第一行初始化第一次的状态
+ ipcRenderer.send("vuex-state", store.state);
+ store.subscribe(
+ (
+ mutation,
+ { data = "", settings = "", player = {}, contextMenu = {}, liked = {} }
+ ) => {
+ const copyState = { data, settings, player, contextMenu, liked };
+ ipcRenderer.send("vuex-state", copyState);
+ }
+ );
+ store.subscribe((mutation, state) => {
+ if (mutation.type === "updateData") {
+ ipcRenderer.send("updateData", state.data);
+ }
+ });
+ };
+}
diff --git a/src/store/plugins/localStorage.js b/src/store/plugins/localStorage.js
new file mode 100644
index 0000000..3ab2c95
--- /dev/null
+++ b/src/store/plugins/localStorage.js
@@ -0,0 +1,8 @@
+export default (store) => {
+ store.subscribe((mutation, state) => {
+ // console.log(mutation);
+ localStorage.setItem("player", JSON.stringify(state.player));
+ localStorage.setItem("settings", JSON.stringify(state.settings));
+ localStorage.setItem("data", JSON.stringify(state.data));
+ });
+};
diff --git a/src/utils/auth.js b/src/utils/auth.js
index ff73c4b..5376250 100644
--- a/src/utils/auth.js
+++ b/src/utils/auth.js
@@ -34,3 +34,19 @@ export function isUsernameLoggedIn() {
export function isLooseLoggedIn() {
return isAccountLoggedIn() || isUsernameLoggedIn();
}
+
+export function getMusicU(string) {
+ const temp = string.split(";");
+ if (!temp.length) {
+ return undefined;
+ }
+ const MUSIC_U = temp.find((item) => item.includes("MUSIC_U"));
+ if (MUSIC_U) {
+ return MUSIC_U.split("=")[1];
+ }
+ return "";
+}
+
+export function setMusicU(key, value) {
+ return Cookies.set(key, value);
+}
diff --git a/src/utils/db.js b/src/utils/db.js
index 83feeb5..7c8ffc6 100644
--- a/src/utils/db.js
+++ b/src/utils/db.js
@@ -1,11 +1,11 @@
-import axios from "axios";
+// import axios from "axios";
import localforage from "localforage";
import { getMP3 } from "@/api/track";
export function cacheTrack(id) {
- let tracks = localforage.createInstance({
- name: "tracks",
- });
+ // let tracks = localforage.createInstance({
+ // name: "tracks",
+ // });
// TODO: limit cache songs number
// tracks.length().then(function (length) {
@@ -18,14 +18,15 @@ export function cacheTrack(id) {
// TODO: cache track details
return getMP3(id).then((data) => {
- return axios
- .get(data.data[0].url.replace(/^http:/, "https:"), {
- responseType: "blob",
- })
- .then((data) => {
- tracks.setItem(`${id}`, { mp3: data.data });
- return { mp3: data.data };
- });
+ // return axios
+ // .get(data.data[0].url.replace(/^http:/, "https:"), {
+ // responseType: "blob",
+ // })
+ // .then((data) => {
+ // tracks.setItem(`${id}`, { mp3: data.data });
+ // return { mp3: data.data };
+ // });
+ return { mp3: data.data[0].url.replace(/^http:/, "https:") };
});
}
diff --git a/src/utils/request.js b/src/utils/request.js
index 34b74dc..e5fac75 100644
--- a/src/utils/request.js
+++ b/src/utils/request.js
@@ -1,7 +1,15 @@
import axios from "axios";
+let baseURL = "";
+// Web 和 Electron 跑在不同端口避免同时启动时冲突
+if (process.env.IS_ELECTRON) {
+ baseURL = process.env.VUE_APP_ELECTRON_API_URL;
+} else {
+ baseURL = process.env.VUE_APP_NETEASE_API_URL;
+}
+
const service = axios.create({
- baseURL: process.env.VUE_APP_NETEASE_API_URL,
+ baseURL,
withCredentials: true,
timeout: 15000,
});
diff --git a/src/views/loginAccount.vue b/src/views/loginAccount.vue
index a11dfb5..e9646a3 100644
--- a/src/views/loginAccount.vue
+++ b/src/views/loginAccount.vue
@@ -89,6 +89,7 @@ import { loginWithPhone, loginWithEmail } from "@/api/auth";
import md5 from "crypto-js/md5";
import { mapMutations } from "vuex";
import { userPlaylist } from "@/api/user";
+import { getMusicU, setMusicU } from "@/utils/auth";
export default {
name: "Login",
@@ -177,6 +178,10 @@ export default {
md5_password: md5(this.password).toString(),
})
.then((data) => {
+ // 获取接口返回的 MUSIC_U 写进本地 cookie 解决登录时跳转的问题
+ // 但是仍然无法完全模拟登录状态,像喜欢歌曲和喜欢列表都会遇到 301 需要登录问题
+ const MUSIC_U = getMusicU(data.cookie);
+ setMusicU("MUSIC_U", MUSIC_U);
if (data.code !== 502) {
this.updateData({ key: "user", value: data.profile });
this.afterLogin();
diff --git a/vue.config.js b/vue.config.js
index d284903..278d93d 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -6,7 +6,7 @@ function resolve(dir) {
module.exports = {
devServer: {
disableHostCheck: true,
- port: process.env.DEV_SERVER_PORT || 8080
+ port: process.env.DEV_SERVER_PORT || 8080,
},
pwa: {
name: "YesPlayMusic",
@@ -27,7 +27,7 @@ module.exports = {
template: "public/index.html",
filename: "index.html",
title: "YesPlayMusic",
- chunks: ["chunk-vendors", "chunk-common", "index"],
+ chunks: ["main", "chunk-vendors", "chunk-common", "index"],
},
},
chainWebpack(config) {
@@ -45,4 +45,72 @@ module.exports = {
})
.end();
},
+ // 添加插件的配置
+ pluginOptions: {
+ // electron-builder的配置文件
+ electronBuilder: {
+ builderOptions: {
+ productName: "YesPlayMusic",
+ copyright: "Copyright © YesPlayMusic",
+ compression: "maximum", // 机器好的可以打开,配置压缩
+ asar: true,
+ publish: [
+ {
+ provider: "github",
+ owner: "qier222",
+ repo: "YesPlayMusic",
+ vPrefixedTagName: true,
+ private: true,
+ releaseType: "draft",
+ },
+ ],
+ directories: {
+ output: "dist_electron",
+ },
+ mac: {
+ category: "public.app-category.music",
+ target: "dmg",
+ darkModeSupport: true,
+ },
+ win: {
+ publisherName: "YesPlayMusic",
+ icon: "build/icons/icon.ico",
+ publish: ["github"],
+ },
+ linux: {
+ target: ["AppImage", "tar.gz", "deb", "rpm", "snap"],
+ category: "Music",
+ icon: "./build/icon.icns",
+ },
+ dmg: {
+ icon: "build/icons/icon.icns",
+ },
+ nsis: {
+ oneClick: false,
+ allowToChangeInstallationDirectory: true,
+ },
+ },
+ // 主线程的配置文件
+ chainWebpackMainProcess: (config) => {
+ config.plugin("define").tap((args) => {
+ args[0]["IS_ELECTRON"] = true;
+ return args;
+ });
+ },
+ // 渲染线程的配置文件
+ chainWebpackRendererProcess: (config) => {
+ // 渲染线程的一些其他配置
+ // Chain webpack config for electron renderer process only
+ // The following example will set IS_ELECTRON to true in your app
+ config.plugin("define").tap((args) => {
+ args[0]["IS_ELECTRON"] = true;
+ return args;
+ });
+ },
+ // 主入口文件
+ // mainProcessFile: 'src/main.js',
+ mainProcessWatch: ["../netease_api/routes.js"],
+ // mainProcessArgs: []
+ },
+ },
};
diff --git a/yarn.lock b/yarn.lock
index 5e6fedd..3e24172 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,6 +2,11 @@
# yarn lockfile v1
+"7zip-bin@~5.0.3":
+ version "5.0.3"
+ resolved "https://registry.npm.taobao.org/7zip-bin/download/7zip-bin-5.0.3.tgz#bc5b5532ecafd923a61f2fb097e3b108c0106a3f"
+ integrity sha1-vFtVMuyv2SOmHy+wl+OxCMAQaj8=
+
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4":
version "7.10.4"
resolved "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.10.4.tgz?cache=0&sync_timestamp=1593522948158&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a"
@@ -828,6 +833,13 @@
dependencies:
regenerator-runtime "^0.13.4"
+"@babel/runtime@^7.7.2":
+ version "7.12.1"
+ resolved "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.12.1.tgz?cache=0&sync_timestamp=1602799933339&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.12.1.tgz#b4116a6b6711d010b2dad3b7b6e43bf1b9954740"
+ integrity sha1-tBFqa2cR0BCy2tO3tuQ78bmVR0A=
+ dependencies:
+ regenerator-runtime "^0.13.4"
+
"@babel/template@^7.10.4":
version "7.10.4"
resolved "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278"
@@ -861,6 +873,30 @@
lodash "^4.17.19"
to-fast-properties "^2.0.0"
+"@develar/schema-utils@~2.6.5":
+ version "2.6.5"
+ resolved "https://registry.npm.taobao.org/@develar/schema-utils/download/@develar/schema-utils-2.6.5.tgz#3ece22c5838402419a6e0425f85742b961d9b6c6"
+ integrity sha1-Ps4ixYOEAkGabgQl+FdCuWHZtsY=
+ dependencies:
+ ajv "^6.12.0"
+ ajv-keywords "^3.4.1"
+
+"@electron/get@^1.0.1":
+ version "1.12.2"
+ resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.12.2.tgz#6442066afb99be08cefb9a281e4b4692b33764f3"
+ integrity sha512-vAuHUbfvBQpYTJ5wB7uVIDq5c/Ry0fiTBMs7lnEYAo/qXXppIVcWdfBr57u6eRnKdVso7KSiH6p/LbQAG6Izrg==
+ dependencies:
+ debug "^4.1.1"
+ env-paths "^2.2.0"
+ fs-extra "^8.1.0"
+ got "^9.6.0"
+ progress "^2.0.3"
+ sanitize-filename "^1.6.2"
+ sumchecker "^3.0.1"
+ optionalDependencies:
+ global-agent "^2.0.2"
+ global-tunnel-ng "^2.7.1"
+
"@hapi/address@2.x.x":
version "2.1.4"
resolved "https://registry.npm.taobao.org/@hapi/address/download/@hapi/address-2.1.4.tgz?cache=0&sync_timestamp=1593993895205&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40hapi%2Faddress%2Fdownload%2F%40hapi%2Faddress-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5"
@@ -902,6 +938,325 @@
cssnano-preset-default "^4.0.0"
postcss "^7.0.0"
+"@jimp/bmp@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/bmp/download/@jimp/bmp-0.9.8.tgz#5933ab8fb359889bec380b0f7802163374933624"
+ integrity sha1-WTOrj7NZiJvsOAsPeAIWM3STNiQ=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.8"
+ bmp-js "^0.1.0"
+ core-js "^3.4.1"
+
+"@jimp/core@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/core/download/@jimp/core-0.9.8.tgz#b2b74263a80559c0ee244e0f2d1052b36a358b85"
+ integrity sha1-srdCY6gFWcDuJE4PLRBSs2o1i4U=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.8"
+ any-base "^1.1.0"
+ buffer "^5.2.0"
+ core-js "^3.4.1"
+ exif-parser "^0.1.12"
+ file-type "^9.0.0"
+ load-bmfont "^1.3.1"
+ mkdirp "^0.5.1"
+ phin "^2.9.1"
+ pixelmatch "^4.0.2"
+ tinycolor2 "^1.4.1"
+
+"@jimp/custom@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/custom/download/@jimp/custom-0.9.8.tgz#1e9d904b1b05aa22b00b899baba2be7c0704a5d1"
+ integrity sha1-Hp2QSxsFqiKwC4mbq6K+fAcEpdE=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/core" "^0.9.8"
+ core-js "^3.4.1"
+
+"@jimp/gif@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/gif/download/@jimp/gif-0.9.8.tgz#513aff511634c338d1ab33a7bba1ba3412220b5b"
+ integrity sha1-UTr/URY0wzjRqzOnu6G6NBIiC1s=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.8"
+ core-js "^3.4.1"
+ omggif "^1.0.9"
+
+"@jimp/jpeg@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/jpeg/download/@jimp/jpeg-0.9.8.tgz#8c086f69d0e8c46e43a7db9725576edc30925cb1"
+ integrity sha1-jAhvadDoxG5Dp9uXJVdu3DCSXLE=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.8"
+ core-js "^3.4.1"
+ jpeg-js "^0.3.4"
+
+"@jimp/plugin-blit@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/plugin-blit/download/@jimp/plugin-blit-0.9.8.tgz#916bf6f261e6a91dbecca0ca866b8d9cba563753"
+ integrity sha1-kWv28mHmqR2+zKDKhmuNnLpWN1M=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.8"
+ core-js "^3.4.1"
+
+"@jimp/plugin-blur@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/plugin-blur/download/@jimp/plugin-blur-0.9.8.tgz#00055d54b90532b7951dae377b3e40352c187f07"
+ integrity sha1-AAVdVLkFMreVHa43ez5ANSwYfwc=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.8"
+ core-js "^3.4.1"
+
+"@jimp/plugin-circle@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/plugin-circle/download/@jimp/plugin-circle-0.9.8.tgz#5de8735f32f931d9160d0f5211e9aab6413a1d4b"
+ integrity sha1-XehzXzL5MdkWDQ9SEemqtkE6HUs=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.8"
+ core-js "^3.4.1"
+
+"@jimp/plugin-color@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/plugin-color/download/@jimp/plugin-color-0.9.8.tgz#3c633f22955a4f5013025e9e9e78a267ac4c3a88"
+ integrity sha1-PGM/IpVaT1ATAl6enniiZ6xMOog=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.8"
+ core-js "^3.4.1"
+ tinycolor2 "^1.4.1"
+
+"@jimp/plugin-contain@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/plugin-contain/download/@jimp/plugin-contain-0.9.8.tgz#f892fb7fc87134a47b37281f0ff17d608f3e51af"
+ integrity sha1-+JL7f8hxNKR7NygfD/F9YI8+Ua8=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.8"
+ core-js "^3.4.1"
+
+"@jimp/plugin-cover@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/plugin-cover/download/@jimp/plugin-cover-0.9.8.tgz#37474b19027ac0155100b71ca17266aab19e50fc"
+ integrity sha1-N0dLGQJ6wBVRALccoXJmqrGeUPw=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.8"
+ core-js "^3.4.1"
+
+"@jimp/plugin-crop@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/plugin-crop/download/@jimp/plugin-crop-0.9.8.tgz#2308696597a8bcb528d09eeebbbadb22248e7c1c"
+ integrity sha1-IwhpZZeovLUo0J7uu7rbIiSOfBw=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.8"
+ core-js "^3.4.1"
+
+"@jimp/plugin-displace@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/plugin-displace/download/@jimp/plugin-displace-0.9.8.tgz#00331047039cb2d0d9d5f7c3d8ce542e07eea791"
+ integrity sha1-ADMQRwOcstDZ1ffD2M5ULgfup5E=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.8"
+ core-js "^3.4.1"
+
+"@jimp/plugin-dither@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/plugin-dither/download/@jimp/plugin-dither-0.9.8.tgz#9cca12997f2917f27d5681275b32affdb3083450"
+ integrity sha1-nMoSmX8pF/J9VoEnWzKv/bMINFA=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.8"
+ core-js "^3.4.1"
+
+"@jimp/plugin-fisheye@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/plugin-fisheye/download/@jimp/plugin-fisheye-0.9.8.tgz#e3f5f616ec06a9ef99aa268446f0096eac863437"
+ integrity sha1-4/X2FuwGqe+ZqiaERvAJbqyGNDc=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.8"
+ core-js "^3.4.1"
+
+"@jimp/plugin-flip@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/plugin-flip/download/@jimp/plugin-flip-0.9.8.tgz#c00559a8543a684c7cff4d1128b7152e598fbb1c"
+ integrity sha1-wAVZqFQ6aEx8/00RKLcVLlmPuxw=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.8"
+ core-js "^3.4.1"
+
+"@jimp/plugin-gaussian@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/plugin-gaussian/download/@jimp/plugin-gaussian-0.9.8.tgz#d1666167ce1b947b65db5093bb9a00d319bcfe4d"
+ integrity sha1-0WZhZ84blHtl21CTu5oA0xm8/k0=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.8"
+ core-js "^3.4.1"
+
+"@jimp/plugin-invert@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/plugin-invert/download/@jimp/plugin-invert-0.9.8.tgz#41d6e87faf01a5d8fe7554e322d2aad25f596ab1"
+ integrity sha1-Qdbof68Bpdj+dVTjItKq0l9ZarE=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.8"
+ core-js "^3.4.1"
+
+"@jimp/plugin-mask@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/plugin-mask/download/@jimp/plugin-mask-0.9.8.tgz#fe92132db1a2b9f7718226bc3c37794dd148ce36"
+ integrity sha1-/pITLbGiufdxgia8PDd5TdFIzjY=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.8"
+ core-js "^3.4.1"
+
+"@jimp/plugin-normalize@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/plugin-normalize/download/@jimp/plugin-normalize-0.9.8.tgz#05646aa15b6a789c4ba447edcad77c83c1d51f16"
+ integrity sha1-BWRqoVtqeJxLpEftytd8g8HVHxY=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.8"
+ core-js "^3.4.1"
+
+"@jimp/plugin-print@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/plugin-print/download/@jimp/plugin-print-0.9.8.tgz#808f723176d0a57186d7558290c7e53a7a8bf812"
+ integrity sha1-gI9yMXbQpXGG11WCkMflOnqL+BI=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.8"
+ core-js "^3.4.1"
+ load-bmfont "^1.4.0"
+
+"@jimp/plugin-resize@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/plugin-resize/download/@jimp/plugin-resize-0.9.8.tgz#eef750b77f1cc06e8bcf9b390860c95c489dcc02"
+ integrity sha1-7vdQt38cwG6Lz5s5CGDJXEidzAI=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.8"
+ core-js "^3.4.1"
+
+"@jimp/plugin-rotate@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/plugin-rotate/download/@jimp/plugin-rotate-0.9.8.tgz#5eba01f75a397777c6782b7999c9ac6c7ed8a411"
+ integrity sha1-XroB91o5d3fGeCt5mcmsbH7YpBE=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.8"
+ core-js "^3.4.1"
+
+"@jimp/plugin-scale@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/plugin-scale/download/@jimp/plugin-scale-0.9.8.tgz#c875d5e0b377b15b8b398ee402f45e3fc43fea40"
+ integrity sha1-yHXV4LN3sVuLOY7kAvReP8Q/6kA=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.8"
+ core-js "^3.4.1"
+
+"@jimp/plugin-shadow@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/plugin-shadow/download/@jimp/plugin-shadow-0.9.8.tgz#ca2d18afa29a1027b77b3e1fb2ce7d4e073a7170"
+ integrity sha1-yi0Yr6KaECe3ez4fss59Tgc6cXA=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.8"
+ core-js "^3.4.1"
+
+"@jimp/plugin-threshold@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/plugin-threshold/download/@jimp/plugin-threshold-0.9.8.tgz#2d1dde0791f70b2ff2d0b915cab8d40b0e446594"
+ integrity sha1-LR3eB5H3Cy/y0LkVyrjUCw5EZZQ=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.8"
+ core-js "^3.4.1"
+
+"@jimp/plugins@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/plugins/download/@jimp/plugins-0.9.8.tgz#5279dfe22d0d27633f4201ab36103e587b32eb85"
+ integrity sha1-Unnf4i0NJ2M/QgGrNhA+WHsy64U=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/plugin-blit" "^0.9.8"
+ "@jimp/plugin-blur" "^0.9.8"
+ "@jimp/plugin-circle" "^0.9.8"
+ "@jimp/plugin-color" "^0.9.8"
+ "@jimp/plugin-contain" "^0.9.8"
+ "@jimp/plugin-cover" "^0.9.8"
+ "@jimp/plugin-crop" "^0.9.8"
+ "@jimp/plugin-displace" "^0.9.8"
+ "@jimp/plugin-dither" "^0.9.8"
+ "@jimp/plugin-fisheye" "^0.9.8"
+ "@jimp/plugin-flip" "^0.9.8"
+ "@jimp/plugin-gaussian" "^0.9.8"
+ "@jimp/plugin-invert" "^0.9.8"
+ "@jimp/plugin-mask" "^0.9.8"
+ "@jimp/plugin-normalize" "^0.9.8"
+ "@jimp/plugin-print" "^0.9.8"
+ "@jimp/plugin-resize" "^0.9.8"
+ "@jimp/plugin-rotate" "^0.9.8"
+ "@jimp/plugin-scale" "^0.9.8"
+ "@jimp/plugin-shadow" "^0.9.8"
+ "@jimp/plugin-threshold" "^0.9.8"
+ core-js "^3.4.1"
+ timm "^1.6.1"
+
+"@jimp/png@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/png/download/@jimp/png-0.9.8.tgz#f88dacc9b9da1c2ea8e91026a9530d0fb45c4409"
+ integrity sha1-+I2sybnaHC6o6RAmqVMND7RcRAk=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.8"
+ core-js "^3.4.1"
+ pngjs "^3.3.3"
+
+"@jimp/tiff@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/tiff/download/@jimp/tiff-0.9.8.tgz#91dc3eab2f222e23414f139e917f3407caa73560"
+ integrity sha1-kdw+qy8iLiNBTxOekX80B8qnNWA=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ core-js "^3.4.1"
+ utif "^2.0.1"
+
+"@jimp/types@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/types/download/@jimp/types-0.9.8.tgz#46980a4a7bfcadf2f0484d187c32b4e7d6d61b8e"
+ integrity sha1-RpgKSnv8rfLwSE0YfDK059bWG44=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/bmp" "^0.9.8"
+ "@jimp/gif" "^0.9.8"
+ "@jimp/jpeg" "^0.9.8"
+ "@jimp/png" "^0.9.8"
+ "@jimp/tiff" "^0.9.8"
+ core-js "^3.4.1"
+ timm "^1.6.1"
+
+"@jimp/utils@^0.9.8":
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/@jimp/utils/download/@jimp/utils-0.9.8.tgz#6a6f47158ec6b424f03df0f55f0baff5b4b5e096"
+ integrity sha1-am9HFY7GtCTwPfD1Xwuv9bS14JY=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ core-js "^3.4.1"
+
"@mrmlnc/readdir-enhanced@^2.2.1":
version "2.2.1"
resolved "https://registry.npm.taobao.org/@mrmlnc/readdir-enhanced/download/@mrmlnc/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"
@@ -915,6 +1270,13 @@
resolved "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
integrity sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs=
+"@npmcli/move-file@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.npm.taobao.org/@npmcli/move-file/download/@npmcli/move-file-1.0.1.tgz#de103070dac0f48ce49cf6693c23af59c0f70464"
+ integrity sha1-3hAwcNrA9IzknPZpPCOvWcD3BGQ=
+ dependencies:
+ mkdirp "^1.0.4"
+
"@sentry/browser@^5.27.0":
version "5.27.0"
resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-5.27.0.tgz#35b77f076fb5f08c91eff23f3c067ee15df0ab90"
@@ -988,6 +1350,11 @@
"@sentry/types" "5.27.0"
tslib "^1.9.3"
+"@sindresorhus/is@^0.14.0":
+ version "0.14.0"
+ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea"
+ integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==
+
"@soda/friendly-errors-webpack-plugin@^1.7.1":
version "1.7.1"
resolved "https://registry.npm.taobao.org/@soda/friendly-errors-webpack-plugin/download/@soda/friendly-errors-webpack-plugin-1.7.1.tgz#706f64bcb4a8b9642b48ae3ace444c70334d615d"
@@ -1002,6 +1369,18 @@
resolved "https://registry.npm.taobao.org/@soda/get-current-script/download/@soda/get-current-script-1.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40soda%2Fget-current-script%2Fdownload%2F%40soda%2Fget-current-script-1.0.2.tgz#a53515db25d8038374381b73af20bb4f2e508d87"
integrity sha1-pTUV2yXYA4N0OBtzryC7Ty5QjYc=
+"@szmarczak/http-timer@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421"
+ integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==
+ dependencies:
+ defer-to-connect "^1.0.1"
+
+"@tootallnate/once@1":
+ version "1.1.2"
+ resolved "https://registry.npm.taobao.org/@tootallnate/once/download/@tootallnate/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
+ integrity sha1-zLkURTYBeaBOf+av94wA/8Hur4I=
+
"@types/anymatch@*":
version "1.3.1"
resolved "https://registry.npm.taobao.org/@types/anymatch/download/@types/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a"
@@ -1035,6 +1414,11 @@
dependencies:
"@types/node" "*"
+"@types/debug@^4.1.5":
+ version "4.1.5"
+ resolved "https://registry.npm.taobao.org/@types/debug/download/@types/debug-4.1.5.tgz#b14efa8852b7768d898906613c23f688713e02cd"
+ integrity sha1-sU76iFK3do2JiQZhPCP2iHE+As0=
+
"@types/express-serve-static-core@*":
version "4.17.13"
resolved "https://registry.npm.taobao.org/@types/express-serve-static-core/download/@types/express-serve-static-core-4.17.13.tgz?cache=0&sync_timestamp=1600734282121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fexpress-serve-static-core%2Fdownload%2F%40types%2Fexpress-serve-static-core-4.17.13.tgz#d9af025e925fc8b089be37423b8d1eac781be084"
@@ -1054,6 +1438,13 @@
"@types/qs" "*"
"@types/serve-static" "*"
+"@types/fs-extra@^9.0.1":
+ version "9.0.2"
+ resolved "https://registry.npm.taobao.org/@types/fs-extra/download/@types/fs-extra-9.0.2.tgz#e1e1b578c48e8d08ae7fc36e552b94c6f4621609"
+ integrity sha1-4eG1eMSOjQiuf8NuVSuUxvRiFgk=
+ dependencies:
+ "@types/node" "*"
+
"@types/glob@^7.1.1":
version "7.1.3"
resolved "https://registry.npm.taobao.org/@types/glob/download/@types/glob-7.1.3.tgz?cache=0&sync_timestamp=1596838206290&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fglob%2Fdownload%2F%40types%2Fglob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183"
@@ -1110,6 +1501,11 @@
resolved "https://registry.npm.taobao.org/@types/node/download/@types/node-14.11.2.tgz?cache=0&sync_timestamp=1600732787803&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-14.11.2.tgz#2de1ed6670439387da1c9f549a2ade2b0a799256"
integrity sha1-LeHtZnBDk4faHJ9UmireKwp5klY=
+"@types/node@^12.0.12":
+ version "12.19.6"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.6.tgz#fbf249fa46487dd8c7386d785231368b92a33a53"
+ integrity sha512-U2VopDdmBoYBmtm8Rz340mvvSz34VgX/K9+XCuckvcLGMkt3rbMX8soqFOikIPlPBc5lmw8By9NUK7bEFSBFlQ==
+
"@types/normalize-package-data@^2.4.0":
version "2.4.0"
resolved "https://registry.npm.taobao.org/@types/normalize-package-data/download/@types/normalize-package-data-2.4.0.tgz?cache=0&sync_timestamp=1596839391651&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnormalize-package-data%2Fdownload%2F%40types%2Fnormalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e"
@@ -1135,6 +1531,11 @@
resolved "https://registry.npm.taobao.org/@types/range-parser/download/@types/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c"
integrity sha1-fuMwunyq+5gJC+zoal7kQRWQTCw=
+"@types/semver@^7.3.1":
+ version "7.3.4"
+ resolved "https://registry.npm.taobao.org/@types/semver/download/@types/semver-7.3.4.tgz?cache=0&sync_timestamp=1600115372478&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fsemver%2Fdownload%2F%40types%2Fsemver-7.3.4.tgz#43d7168fec6fa0988bb1a513a697b29296721afb"
+ integrity sha1-Q9cWj+xvoJiLsaUTppeykpZyGvs=
+
"@types/serve-static@*":
version "1.13.5"
resolved "https://registry.npm.taobao.org/@types/serve-static/download/@types/serve-static-1.13.5.tgz?cache=0&sync_timestamp=1596840339942&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fserve-static%2Fdownload%2F%40types%2Fserve-static-1.13.5.tgz#3d25d941a18415d3ab092def846e135a08bbcf53"
@@ -1192,6 +1593,25 @@
"@types/webpack-sources" "*"
source-map "^0.6.0"
+"@types/yargs-parser@*":
+ version "15.0.0"
+ resolved "https://registry.npm.taobao.org/@types/yargs-parser/download/@types/yargs-parser-15.0.0.tgz?cache=0&sync_timestamp=1596841192658&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fyargs-parser%2Fdownload%2F%40types%2Fyargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d"
+ integrity sha1-yz+fdBhp4gzOMw/765JxWQSDiC0=
+
+"@types/yargs@^15.0.5":
+ version "15.0.9"
+ resolved "https://registry.npm.taobao.org/@types/yargs/download/@types/yargs-15.0.9.tgz?cache=0&sync_timestamp=1602860874296&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fyargs%2Fdownload%2F%40types%2Fyargs-15.0.9.tgz#524cd7998fe810cdb02f26101b699cccd156ff19"
+ integrity sha1-UkzXmY/oEM2wLyYQG2mczNFW/xk=
+ dependencies:
+ "@types/yargs-parser" "*"
+
+"@types/yauzl@^2.9.1":
+ version "2.9.1"
+ resolved "https://registry.npm.taobao.org/@types/yauzl/download/@types/yauzl-2.9.1.tgz?cache=0&sync_timestamp=1596841684525&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fyauzl%2Fdownload%2F%40types%2Fyauzl-2.9.1.tgz#d10f69f9f522eef3cf98e30afb684a1e1ec923af"
+ integrity sha1-0Q9p+fUi7vPPmOMK+2hKHh7JI68=
+ dependencies:
+ "@types/node" "*"
+
"@vue/babel-helper-vue-jsx-merge-props@^1.0.0":
version "1.0.0"
resolved "https://registry.npm.taobao.org/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.0.0.tgz?cache=0&sync_timestamp=1596768129236&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-helper-vue-jsx-merge-props%2Fdownload%2F%40vue%2Fbabel-helper-vue-jsx-merge-props-1.0.0.tgz#048fe579958da408fb7a8b2a3ec050b50a661040"
@@ -1643,6 +2063,13 @@ address@^1.1.2:
resolved "https://registry.npm.taobao.org/address/download/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6"
integrity sha1-vxEWycdYxRt6kz0pa3LCIe2UKLY=
+agent-base@6:
+ version "6.0.2"
+ resolved "https://registry.npm.taobao.org/agent-base/download/agent-base-6.0.2.tgz?cache=0&sync_timestamp=1603480100923&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fagent-base%2Fdownload%2Fagent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
+ integrity sha1-Sf/1hXfP7j83F2/qtMIuAPhtf3c=
+ dependencies:
+ debug "4"
+
aggregate-error@^3.0.0:
version "3.1.0"
resolved "https://registry.npm.taobao.org/aggregate-error/download/aggregate-error-3.1.0.tgz?cache=0&sync_timestamp=1598049717562&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faggregate-error%2Fdownload%2Faggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
@@ -1671,11 +2098,28 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4:
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
+ajv@^6.12.0:
+ version "6.12.6"
+ resolved "https://registry.npm.taobao.org/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1602353715225&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+ integrity sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
alphanum-sort@^1.0.0:
version "1.0.2"
resolved "https://registry.npm.taobao.org/alphanum-sort/download/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=
+ansi-align@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npm.taobao.org/ansi-align/download/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb"
+ integrity sha1-tTazcc9ofKrvI2wY0+If43l0Z8s=
+ dependencies:
+ string-width "^3.0.0"
+
ansi-colors@^3.0.0:
version "3.2.4"
resolved "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf"
@@ -1733,6 +2177,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0:
"@types/color-name" "^1.1.1"
color-convert "^2.0.1"
+any-base@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npm.taobao.org/any-base/download/any-base-1.1.0.tgz#ae101a62bc08a597b4c9ab5b7089d456630549fe"
+ integrity sha1-rhAaYrwIpZe0yatbcInUVmMFSf4=
+
any-promise@^1.0.0:
version "1.3.0"
resolved "https://registry.npm.taobao.org/any-promise/download/any-promise-1.3.0.tgz?cache=0&sync_timestamp=1589682733115&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fany-promise%2Fdownload%2Fany-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
@@ -1754,6 +2203,39 @@ anymatch@~3.1.1:
normalize-path "^3.0.0"
picomatch "^2.0.4"
+app-builder-bin@3.5.10:
+ version "3.5.10"
+ resolved "https://registry.npm.taobao.org/app-builder-bin/download/app-builder-bin-3.5.10.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fapp-builder-bin%2Fdownload%2Fapp-builder-bin-3.5.10.tgz#4a7f9999fccc0c435b6284ae1366bc76a17c4a7d"
+ integrity sha1-Sn+ZmfzMDENbYoSuE2a8dqF8Sn0=
+
+app-builder-lib@22.9.1:
+ version "22.9.1"
+ resolved "https://registry.npm.taobao.org/app-builder-lib/download/app-builder-lib-22.9.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fapp-builder-lib%2Fdownload%2Fapp-builder-lib-22.9.1.tgz#ccb8f1a02b628514a5dfab9401fa2a976689415c"
+ integrity sha1-zLjxoCtihRSl36uUAfoql2aJQVw=
+ dependencies:
+ "7zip-bin" "~5.0.3"
+ "@develar/schema-utils" "~2.6.5"
+ async-exit-hook "^2.0.1"
+ bluebird-lst "^1.0.9"
+ builder-util "22.9.1"
+ builder-util-runtime "8.7.2"
+ chromium-pickle-js "^0.2.0"
+ debug "^4.3.0"
+ ejs "^3.1.5"
+ electron-publish "22.9.1"
+ fs-extra "^9.0.1"
+ hosted-git-info "^3.0.5"
+ is-ci "^2.0.0"
+ isbinaryfile "^4.0.6"
+ js-yaml "^3.14.0"
+ lazy-val "^1.0.4"
+ minimatch "^3.0.4"
+ normalize-package-data "^2.5.0"
+ read-config-file "6.0.0"
+ sanitize-filename "^1.6.3"
+ semver "^7.3.2"
+ temp-file "^3.3.7"
+
aproba@^1.1.1:
version "1.2.0"
resolved "https://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
@@ -1771,6 +2253,16 @@ argparse@^1.0.7:
dependencies:
sprintf-js "~1.0.2"
+args@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.npm.taobao.org/args/download/args-5.0.1.tgz#4bf298df90a4799a09521362c579278cc2fdd761"
+ integrity sha1-S/KY35CkeZoJUhNixXknjML912E=
+ dependencies:
+ camelcase "5.0.0"
+ chalk "2.4.2"
+ leven "2.1.0"
+ mri "1.1.4"
+
arr-diff@^4.0.0:
version "4.0.0"
resolved "https://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
@@ -1848,21 +2340,43 @@ assign-symbols@^1.0.0:
resolved "https://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+ast-types@^0.13.2:
+ version "0.13.4"
+ resolved "https://registry.npm.taobao.org/ast-types/download/ast-types-0.13.4.tgz?cache=0&sync_timestamp=1599935985242&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fast-types%2Fdownload%2Fast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782"
+ integrity sha1-7g13s0MmOWXsw/ti2hbnIisrZ4I=
+ dependencies:
+ tslib "^2.0.1"
+
astral-regex@^1.0.0:
version "1.0.0"
resolved "https://registry.npm.taobao.org/astral-regex/download/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
integrity sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k=
+astral-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npm.taobao.org/astral-regex/download/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
+ integrity sha1-SDFDxWeu7UeFdZwIZXhtx319LjE=
+
async-each@^1.0.1:
version "1.0.3"
resolved "https://registry.npm.taobao.org/async-each/download/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
integrity sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8=
+async-exit-hook@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npm.taobao.org/async-exit-hook/download/async-exit-hook-2.0.1.tgz#8bd8b024b0ec9b1c01cccb9af9db29bd717dfaf3"
+ integrity sha1-i9iwJLDsmxwBzMua+dspvXF9+vM=
+
async-limiter@~1.0.0:
version "1.0.1"
resolved "https://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
integrity sha1-3TeelPDbgxCwgpH51kwyCXZmF/0=
+async@0.9.x:
+ version "0.9.2"
+ resolved "https://registry.npm.taobao.org/async/download/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
+ integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=
+
async@^2.6.2:
version "2.6.3"
resolved "https://registry.npm.taobao.org/async/download/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
@@ -1875,6 +2389,11 @@ asynckit@^0.4.0:
resolved "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+at-least-node@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npm.taobao.org/at-least-node/download/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
+ integrity sha1-YCzUtG6EStTv/JKoARo8RuAjjcI=
+
atob@^2.1.2:
version "2.1.2"
resolved "https://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
@@ -1903,10 +2422,10 @@ aws4@^1.8.0:
resolved "https://registry.npm.taobao.org/aws4/download/aws4-1.10.1.tgz?cache=0&sync_timestamp=1597236947743&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faws4%2Fdownload%2Faws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428"
integrity sha1-4eguTz6Zniz9YbFhKA0WoRH4ZCg=
-axios@^0.20.0:
- version "0.20.0"
- resolved "https://registry.yarnpkg.com/axios/-/axios-0.20.0.tgz#057ba30f04884694993a8cd07fa394cff11c50bd"
- integrity sha512-ANA4rr2BDcmmAQLOKft2fufrtuvlqR+cXNNinUmvfeSNCOF98PZL+7M/v1zIdGo7OLjEA9J2gXJL+j4zGsl0bA==
+axios@^0.21.0:
+ version "0.21.0"
+ resolved "https://registry.npm.taobao.org/axios/download/axios-0.21.0.tgz#26df088803a2350dff2c27f96fef99fe49442aca"
+ integrity sha1-Jt8IiAOiNQ3/LCf5b++Z/klEKso=
dependencies:
follow-redirects "^1.10.0"
@@ -1978,7 +2497,7 @@ balanced-match@^1.0.0:
resolved "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
-base64-js@^1.0.2:
+base64-js@^1.0.2, base64-js@^1.3.1:
version "1.3.1"
resolved "https://registry.npm.taobao.org/base64-js/download/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
integrity sha1-WOzoy3XdB+ce0IxzarxfrE2/jfE=
@@ -2018,6 +2537,11 @@ bfj@^6.1.1:
hoopy "^0.1.4"
tryer "^1.0.1"
+big-integer@^1.6.48:
+ version "1.6.48"
+ resolved "https://registry.npm.taobao.org/big-integer/download/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e"
+ integrity sha1-j9iL0WMsukocjD49cVnwi7lbS54=
+
big.js@^3.1.3:
version "3.2.0"
resolved "https://registry.npm.taobao.org/big.js/download/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
@@ -2045,11 +2569,23 @@ bindings@^1.5.0:
dependencies:
file-uri-to-path "1.0.0"
+bluebird-lst@^1.0.9:
+ version "1.0.9"
+ resolved "https://registry.npm.taobao.org/bluebird-lst/download/bluebird-lst-1.0.9.tgz#a64a0e4365658b9ab5fe875eb9dfb694189bb41c"
+ integrity sha1-pkoOQ2Vli5q1/odeud+2lBibtBw=
+ dependencies:
+ bluebird "^3.5.5"
+
bluebird@^3.1.1, bluebird@^3.5.0, bluebird@^3.5.5:
version "3.7.2"
resolved "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz?cache=0&sync_timestamp=1589682744631&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbluebird%2Fdownload%2Fbluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
integrity sha1-nyKcFb4nJFT/qXOs4NvueaGww28=
+bmp-js@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.npm.taobao.org/bmp-js/download/bmp-js-0.1.0.tgz#e05a63f796a6c1ff25f4771ec7adadc148c07233"
+ integrity sha1-4Fpj95amwf8l9Hcex62twUjAcjM=
+
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0:
version "4.11.9"
resolved "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828"
@@ -2093,6 +2629,25 @@ boolbase@^1.0.0, boolbase@~1.0.0:
resolved "https://registry.npm.taobao.org/boolbase/download/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
+boolean@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.0.2.tgz#df1baa18b6a2b0e70840475e1d93ec8fe75b2570"
+ integrity sha512-RwywHlpCRc3/Wh81MiCKun4ydaIFyW5Ea6JbL6sRCVx5q5irDw7pMXBUFYF/jArQ6YrG36q0kpovc9P/Kd3I4g==
+
+boxen@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.npm.taobao.org/boxen/download/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64"
+ integrity sha1-5BG2I1fW1tNlh8isPV2XTaoHDmQ=
+ dependencies:
+ ansi-align "^3.0.0"
+ camelcase "^5.3.1"
+ chalk "^3.0.0"
+ cli-boxes "^2.2.0"
+ string-width "^4.1.0"
+ term-size "^2.1.0"
+ type-fest "^0.8.1"
+ widest-line "^3.1.0"
+
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
@@ -2200,10 +2755,20 @@ browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.8.5:
escalade "^3.1.0"
node-releases "^1.1.61"
+buffer-crc32@~0.2.3:
+ version "0.2.13"
+ resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
+ integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
+
+buffer-equal@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.npm.taobao.org/buffer-equal/download/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b"
+ integrity sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=
+
buffer-from@^1.0.0:
version "1.1.1"
- resolved "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
- integrity sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+ integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
buffer-indexof@^1.0.0:
version "1.1.1"
@@ -2229,11 +2794,54 @@ buffer@^4.3.0:
ieee754 "^1.1.4"
isarray "^1.0.0"
+buffer@^5.2.0:
+ version "5.7.0"
+ resolved "https://registry.npm.taobao.org/buffer/download/buffer-5.7.0.tgz?cache=0&sync_timestamp=1603834228181&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbuffer%2Fdownload%2Fbuffer-5.7.0.tgz#88afbd29fc89fa7b58e82b39206f31f2cf34feed"
+ integrity sha1-iK+9KfyJ+ntY6Cs5IG8x8s80/u0=
+ dependencies:
+ base64-js "^1.3.1"
+ ieee754 "^1.1.13"
+
+builder-util-runtime@8.7.2:
+ version "8.7.2"
+ resolved "https://registry.npm.taobao.org/builder-util-runtime/download/builder-util-runtime-8.7.2.tgz#d93afc71428a12789b437e13850e1fa7da956d72"
+ integrity sha1-2Tr8cUKKEnibQ34ThQ4fp9qVbXI=
+ dependencies:
+ debug "^4.1.1"
+ sax "^1.2.4"
+
+builder-util@22.9.1:
+ version "22.9.1"
+ resolved "https://registry.npm.taobao.org/builder-util/download/builder-util-22.9.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbuilder-util%2Fdownload%2Fbuilder-util-22.9.1.tgz#b7087a5cde477f90d718ca5d7fafb6ae261b16af"
+ integrity sha1-twh6XN5Hf5DXGMpdf6+2riYbFq8=
+ dependencies:
+ "7zip-bin" "~5.0.3"
+ "@types/debug" "^4.1.5"
+ "@types/fs-extra" "^9.0.1"
+ app-builder-bin "3.5.10"
+ bluebird-lst "^1.0.9"
+ builder-util-runtime "8.7.2"
+ chalk "^4.1.0"
+ debug "^4.3.0"
+ fs-extra "^9.0.1"
+ is-ci "^2.0.0"
+ js-yaml "^3.14.0"
+ source-map-support "^0.5.19"
+ stat-mode "^1.0.0"
+ temp-file "^3.3.7"
+
builtin-status-codes@^3.0.0:
version "3.0.0"
resolved "https://registry.npm.taobao.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
+busboy@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.npm.taobao.org/busboy/download/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b"
+ integrity sha1-FwiZJ0xb84quJ9XGK3EmjNWF/Rs=
+ dependencies:
+ dicer "0.3.0"
+
bytes@3.0.0:
version "3.0.0"
resolved "https://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz?cache=0&sync_timestamp=1589682741197&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbytes%2Fdownload%2Fbytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
@@ -2289,6 +2897,29 @@ cacache@^13.0.1:
ssri "^7.0.0"
unique-filename "^1.1.1"
+cacache@^15.0.5:
+ version "15.0.5"
+ resolved "https://registry.npm.taobao.org/cacache/download/cacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0"
+ integrity sha1-aRYoM9opFw1nMjNGQ8YOAF9fF9A=
+ dependencies:
+ "@npmcli/move-file" "^1.0.1"
+ chownr "^2.0.0"
+ fs-minipass "^2.0.0"
+ glob "^7.1.4"
+ infer-owner "^1.0.4"
+ lru-cache "^6.0.0"
+ minipass "^3.1.1"
+ minipass-collect "^1.0.2"
+ minipass-flush "^1.0.5"
+ minipass-pipeline "^1.2.2"
+ mkdirp "^1.0.3"
+ p-map "^4.0.0"
+ promise-inflight "^1.0.1"
+ rimraf "^3.0.2"
+ ssri "^8.0.0"
+ tar "^6.0.2"
+ unique-filename "^1.1.1"
+
cache-base@^1.0.1:
version "1.0.1"
resolved "https://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
@@ -2316,6 +2947,19 @@ cache-loader@^4.1.0:
neo-async "^2.6.1"
schema-utils "^2.0.0"
+cacheable-request@^6.0.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912"
+ integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==
+ dependencies:
+ clone-response "^1.0.2"
+ get-stream "^5.1.0"
+ http-cache-semantics "^4.0.0"
+ keyv "^3.0.0"
+ lowercase-keys "^2.0.0"
+ normalize-url "^4.1.0"
+ responselike "^1.0.2"
+
call-me-maybe@^1.0.1:
version "1.0.1"
resolved "https://registry.npm.taobao.org/call-me-maybe/download/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b"
@@ -2353,6 +2997,16 @@ camel-case@3.0.x:
no-case "^2.2.0"
upper-case "^1.1.1"
+camelcase@5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npm.taobao.org/camelcase/download/camelcase-5.0.0.tgz?cache=0&sync_timestamp=1602350083472&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42"
+ integrity sha1-AylVJ9WL081Kp1Nj81sujZe+L0I=
+
+camelcase@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npm.taobao.org/camelcase/download/camelcase-3.0.0.tgz?cache=0&sync_timestamp=1602350083472&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
+ integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo=
+
camelcase@^5.0.0, camelcase@^5.3.1:
version "5.3.1"
resolved "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1589682790492&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
@@ -2388,6 +3042,15 @@ caseless@~0.12.0:
resolved "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
+chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
chalk@^1.1.3:
version "1.1.3"
resolved "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
@@ -2399,15 +3062,6 @@ chalk@^1.1.3:
strip-ansi "^3.0.0"
supports-color "^2.0.0"
-chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2:
- version "2.4.2"
- resolved "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
- integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=
- dependencies:
- ansi-styles "^3.2.1"
- escape-string-regexp "^1.0.5"
- supports-color "^5.3.0"
-
chalk@^3.0.0:
version "3.0.0"
resolved "https://registry.npm.taobao.org/chalk/download/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
@@ -2468,11 +3122,31 @@ chokidar@^2.1.8:
optionalDependencies:
fsevents "^1.2.7"
+chokidar@^3.0.2:
+ version "3.4.3"
+ resolved "https://registry.npm.taobao.org/chokidar/download/chokidar-3.4.3.tgz?cache=0&sync_timestamp=1602585381749&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b"
+ integrity sha1-wd84IxRI5FykrFiObHlXO6alfVs=
+ dependencies:
+ anymatch "~3.1.1"
+ braces "~3.0.2"
+ glob-parent "~5.1.0"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.5.0"
+ optionalDependencies:
+ fsevents "~2.1.2"
+
chownr@^1.1.1, chownr@^1.1.2:
version "1.1.4"
resolved "https://registry.npm.taobao.org/chownr/download/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
integrity sha1-b8nXtC0ypYNZYzdmbn0ICE2izGs=
+chownr@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npm.taobao.org/chownr/download/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
+ integrity sha1-Fb++U9LqtM9w8YqM1o6+Wzyx3s4=
+
chrome-trace-event@^1.0.2:
version "1.0.2"
resolved "https://registry.npm.taobao.org/chrome-trace-event/download/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4"
@@ -2480,6 +3154,11 @@ chrome-trace-event@^1.0.2:
dependencies:
tslib "^1.9.0"
+chromium-pickle-js@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.npm.taobao.org/chromium-pickle-js/download/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205"
+ integrity sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=
+
ci-info@^1.5.0:
version "1.6.0"
resolved "https://registry.npm.taobao.org/ci-info/download/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497"
@@ -2520,6 +3199,11 @@ clean-stack@^2.0.0:
resolved "https://registry.npm.taobao.org/clean-stack/download/clean-stack-2.2.0.tgz?cache=0&sync_timestamp=1592035524745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclean-stack%2Fdownload%2Fclean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
integrity sha1-7oRy27Ep5yezHooQpCfe6d/kAIs=
+cli-boxes@^2.2.0:
+ version "2.2.1"
+ resolved "https://registry.npm.taobao.org/cli-boxes/download/cli-boxes-2.2.1.tgz?cache=0&sync_timestamp=1598866401325&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-boxes%2Fdownload%2Fcli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f"
+ integrity sha1-3dUDXSUJT84iDpyrQKRYQKRAMY8=
+
cli-cursor@^2.1.0:
version "2.1.0"
resolved "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
@@ -2551,6 +3235,14 @@ cli-spinners@^2.0.0:
resolved "https://registry.npm.taobao.org/cli-spinners/download/cli-spinners-2.4.0.tgz#c6256db216b878cfba4720e719cec7cf72685d7f"
integrity sha1-xiVtsha4eM+6RyDnGc7Hz3JoXX8=
+cli-truncate@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.npm.taobao.org/cli-truncate/download/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
+ integrity sha1-w54ovwXtzeW+O5iZKiLe7Vork8c=
+ dependencies:
+ slice-ansi "^3.0.0"
+ string-width "^4.2.0"
+
cli-width@^3.0.0:
version "3.0.0"
resolved "https://registry.npm.taobao.org/cli-width/download/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6"
@@ -2565,6 +3257,15 @@ clipboardy@^2.3.0:
execa "^1.0.0"
is-wsl "^2.1.1"
+cliui@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.npm.taobao.org/cliui/download/cliui-3.2.0.tgz?cache=0&sync_timestamp=1602861367442&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
+ integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wrap-ansi "^2.0.0"
+
cliui@^5.0.0:
version "5.0.0"
resolved "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz?cache=0&sync_timestamp=1597608006561&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
@@ -2583,6 +3284,22 @@ cliui@^6.0.0:
strip-ansi "^6.0.0"
wrap-ansi "^6.2.0"
+cliui@^7.0.2:
+ version "7.0.3"
+ resolved "https://registry.npm.taobao.org/cliui/download/cliui-7.0.3.tgz?cache=0&sync_timestamp=1602861367442&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-7.0.3.tgz#ef180f26c8d9bff3927ee52428bfec2090427981"
+ integrity sha1-7xgPJsjZv/OSfuUkKL/sIJBCeYE=
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+ wrap-ansi "^7.0.0"
+
+clone-response@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b"
+ integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=
+ dependencies:
+ mimic-response "^1.0.0"
+
clone@^1.0.2:
version "1.0.4"
resolved "https://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz?cache=0&sync_timestamp=1589682821772&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclone%2Fdownload%2Fclone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
@@ -2602,6 +3319,11 @@ coa@^2.0.2:
chalk "^2.4.1"
q "^1.1.2"
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
collection-visit@^1.0.0:
version "1.0.0"
resolved "https://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
@@ -2722,16 +3444,36 @@ concat-map@0.0.1:
resolved "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
-concat-stream@^1.5.0:
+concat-stream@^1.5.0, concat-stream@^1.6.2:
version "1.6.2"
- resolved "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz?cache=0&sync_timestamp=1589682751334&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconcat-stream%2Fdownload%2Fconcat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
- integrity sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
dependencies:
buffer-from "^1.0.0"
inherits "^2.0.3"
readable-stream "^2.2.2"
typedarray "^0.0.6"
+config-chain@^1.1.11:
+ version "1.1.12"
+ resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa"
+ integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==
+ dependencies:
+ ini "^1.3.4"
+ proto-list "~1.2.1"
+
+configstore@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npm.taobao.org/configstore/download/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96"
+ integrity sha1-02UCG130uYzdGH1qOw4/anzF7ZY=
+ dependencies:
+ dot-prop "^5.2.0"
+ graceful-fs "^4.1.2"
+ make-dir "^3.0.0"
+ unique-string "^2.0.0"
+ write-file-atomic "^3.0.0"
+ xdg-basedir "^4.0.0"
+
connect-history-api-fallback@^1.6.0:
version "1.6.0"
resolved "https://registry.npm.taobao.org/connect-history-api-fallback/download/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc"
@@ -2831,14 +3573,14 @@ core-js@^2.4.0:
resolved "https://registry.npm.taobao.org/core-js/download/core-js-2.6.11.tgz?cache=0&sync_timestamp=1589682726446&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
integrity sha1-OIMUafmSK97Y7iHJ3EaYXgOZMIw=
-core-js@^3.6.5:
+core-js@^3.4.1, core-js@^3.6.5:
version "3.6.5"
resolved "https://registry.npm.taobao.org/core-js/download/core-js-3.6.5.tgz?cache=0&sync_timestamp=1589682726446&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a"
integrity sha1-c5XcJzrzf7LlDpvT2f6EEoUjHRo=
core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
- resolved "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
cosmiconfig@^5.0.0:
@@ -2944,6 +3686,11 @@ crypto-js@^4.0.0:
resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.0.0.tgz#2904ab2677a9d042856a2ea2ef80de92e4a36dcc"
integrity sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg==
+crypto-random-string@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npm.taobao.org/crypto-random-string/download/crypto-random-string-2.0.0.tgz?cache=0&sync_timestamp=1599139352103&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcrypto-random-string%2Fdownload%2Fcrypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"
+ integrity sha1-7yp6lm7BEIM4g2m6oC6+rSKbMNU=
+
css-color-names@0.0.4, css-color-names@^0.0.4:
version "0.0.4"
resolved "https://registry.npm.taobao.org/css-color-names/download/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
@@ -3124,6 +3871,11 @@ dashdash@^1.12.0:
dependencies:
assert-plus "^1.0.0"
+data-uri-to-buffer@3:
+ version "3.0.1"
+ resolved "https://registry.npm.taobao.org/data-uri-to-buffer/download/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636"
+ integrity sha1-WUuJc5OMW8LDMEZTV4U0GrxPNjY=
+
dayjs@^1.8.36:
version "1.8.36"
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.8.36.tgz#be36e248467afabf8f5a86bae0de0cdceecced50"
@@ -3134,13 +3886,20 @@ de-indent@^1.0.2:
resolved "https://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=
-debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
+debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:
version "2.6.9"
- resolved "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
- integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
dependencies:
ms "2.0.0"
+debug@4, debug@^4.0.1:
+ version "4.2.0"
+ resolved "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1"
+ integrity sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=
+ dependencies:
+ ms "2.1.2"
+
debug@^3.1.1, debug@^3.2.5:
version "3.2.6"
resolved "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
@@ -3148,14 +3907,21 @@ debug@^3.1.1, debug@^3.2.5:
dependencies:
ms "^2.1.1"
-debug@^4.0.1, debug@^4.1.0, debug@^4.1.1:
- version "4.2.0"
- resolved "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1"
- integrity sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=
+debug@^4.1.0, debug@^4.1.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
+ integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
dependencies:
ms "2.1.2"
-decamelize@^1.2.0:
+debug@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.npm.taobao.org/debug/download/debug-4.3.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.3.0.tgz#efa41cbf14fc9448075367fdaaddf82376da211e"
+ integrity sha1-76QcvxT8lEgHU2f9qt34I3baIR4=
+ dependencies:
+ ms "2.1.2"
+
+decamelize@^1.1.1, decamelize@^1.2.0:
version "1.2.0"
resolved "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
@@ -3165,6 +3931,13 @@ decode-uri-component@^0.2.0:
resolved "https://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+decompress-response@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
+ integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=
+ dependencies:
+ mimic-response "^1.0.0"
+
deep-equal@^1.0.1:
version "1.1.1"
resolved "https://registry.npm.taobao.org/deep-equal/download/deep-equal-1.1.1.tgz?cache=0&sync_timestamp=1590399968773&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeep-equal%2Fdownload%2Fdeep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a"
@@ -3177,6 +3950,11 @@ deep-equal@^1.0.1:
object-keys "^1.1.1"
regexp.prototype.flags "^1.2.0"
+deep-extend@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.npm.taobao.org/deep-extend/download/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+ integrity sha1-xPp8lUBKF6nD6Mp+FTcxK3NjMKw=
+
deep-is@~0.1.3:
version "0.1.3"
resolved "https://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
@@ -3214,6 +3992,11 @@ defaults@^1.0.3:
dependencies:
clone "^1.0.2"
+defer-to-connect@^1.0.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591"
+ integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==
+
define-properties@^1.1.2, define-properties@^1.1.3:
version "1.1.3"
resolved "https://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
@@ -3243,6 +4026,27 @@ define-property@^2.0.2:
is-descriptor "^1.0.2"
isobject "^3.0.1"
+degenerator@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.npm.taobao.org/degenerator/download/degenerator-2.2.0.tgz#49e98c11fa0293c5b26edfbb52f15729afcdb254"
+ integrity sha1-SemMEfoCk8Wybt+7UvFXKa/NslQ=
+ dependencies:
+ ast-types "^0.13.2"
+ escodegen "^1.8.1"
+ esprima "^4.0.0"
+
+del@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npm.taobao.org/del/download/del-3.0.0.tgz?cache=0&sync_timestamp=1601076882347&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdel%2Fdownload%2Fdel-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5"
+ integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=
+ dependencies:
+ globby "^6.1.0"
+ is-path-cwd "^1.0.0"
+ is-path-in-cwd "^1.0.0"
+ p-map "^1.1.1"
+ pify "^3.0.0"
+ rimraf "^2.2.8"
+
del@^4.1.1:
version "4.1.1"
resolved "https://registry.npm.taobao.org/del/download/del-4.1.1.tgz?cache=0&sync_timestamp=1589682730753&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdel%2Fdownload%2Fdel-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4"
@@ -3281,8 +4085,15 @@ destroy@~1.0.4:
detect-node@^2.0.4:
version "2.0.4"
- resolved "https://registry.npm.taobao.org/detect-node/download/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c"
- integrity sha1-AU7o+PZpxcWAI9pkuBecCDooxGw=
+ resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c"
+ integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==
+
+dicer@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.npm.taobao.org/dicer/download/dicer-0.3.0.tgz#eacd98b3bfbf92e8ab5c2fdb71aaac44bb06b872"
+ integrity sha1-6s2Ys7+/kuirXC/bcaqsRLsGuHI=
+ dependencies:
+ streamsearch "0.1.2"
diffie-hellman@^5.0.0:
version "5.0.3"
@@ -3300,6 +4111,18 @@ dir-glob@^2.0.0, dir-glob@^2.2.2:
dependencies:
path-type "^3.0.0"
+dmg-builder@22.9.1:
+ version "22.9.1"
+ resolved "https://registry.npm.taobao.org/dmg-builder/download/dmg-builder-22.9.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdmg-builder%2Fdownload%2Fdmg-builder-22.9.1.tgz#64647224f37ee47fc9bd01947c21cc010a30511f"
+ integrity sha1-ZGRyJPN+5H/JvQGUfCHMAQowUR8=
+ dependencies:
+ app-builder-lib "22.9.1"
+ builder-util "22.9.1"
+ fs-extra "^9.0.1"
+ iconv-lite "^0.6.2"
+ js-yaml "^3.14.0"
+ sanitize-filename "^1.6.3"
+
dns-equal@^1.0.0:
version "1.0.0"
resolved "https://registry.npm.taobao.org/dns-equal/download/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
@@ -3342,6 +4165,11 @@ dom-serializer@0:
domelementtype "^2.0.1"
entities "^2.0.0"
+dom-walk@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.npm.taobao.org/dom-walk/download/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84"
+ integrity sha1-DFSL7wSPTR8qlySQAiNgYNqj/YQ=
+
domain-browser@^1.1.1:
version "1.2.0"
resolved "https://registry.npm.taobao.org/domain-browser/download/domain-browser-1.2.0.tgz?cache=0&sync_timestamp=1599393068432&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomain-browser%2Fdownload%2Fdomain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
@@ -3402,6 +4230,11 @@ dotenv@^8.2.0:
resolved "https://registry.npm.taobao.org/dotenv/download/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a"
integrity sha1-l+YZJZradQ7qPk6j4mvO6lQksWo=
+duplexer3@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
+ integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
+
duplexer@^0.1.1:
version "0.1.2"
resolved "https://registry.npm.taobao.org/duplexer/download/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
@@ -3417,6 +4250,16 @@ duplexify@^3.4.2, duplexify@^3.6.0:
readable-stream "^2.0.0"
stream-shift "^1.0.0"
+duplexify@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.npm.taobao.org/duplexify/download/duplexify-4.1.1.tgz#7027dc374f157b122a8ae08c2d3ea4d2d953aa61"
+ integrity sha1-cCfcN08VexIqiuCMLT6k0tlTqmE=
+ dependencies:
+ end-of-stream "^1.4.1"
+ inherits "^2.0.3"
+ readable-stream "^3.1.1"
+ stream-shift "^1.0.0"
+
easy-stack@^1.0.0:
version "1.0.0"
resolved "https://registry.npm.taobao.org/easy-stack/download/easy-stack-1.0.0.tgz#12c91b3085a37f0baa336e9486eac4bf94e3e788"
@@ -3440,11 +4283,143 @@ ejs@^2.6.1:
resolved "https://registry.npm.taobao.org/ejs/download/ejs-2.7.4.tgz?cache=0&sync_timestamp=1597678506855&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fejs%2Fdownload%2Fejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba"
integrity sha1-SGYSh1c9zFPjZsehrlLDoSDuybo=
+ejs@^3.1.5:
+ version "3.1.5"
+ resolved "https://registry.npm.taobao.org/ejs/download/ejs-3.1.5.tgz?cache=0&sync_timestamp=1597678506855&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fejs%2Fdownload%2Fejs-3.1.5.tgz#aed723844dc20acb4b170cd9ab1017e476a0d93b"
+ integrity sha1-rtcjhE3CCstLFwzZqxAX5Hag2Ts=
+ dependencies:
+ jake "^10.6.1"
+
+electron-builder@^22.2.0:
+ version "22.9.1"
+ resolved "https://registry.npm.taobao.org/electron-builder/download/electron-builder-22.9.1.tgz?cache=0&sync_timestamp=1602521918505&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felectron-builder%2Fdownload%2Felectron-builder-22.9.1.tgz#a2962db6f2757bc01d02489f38fafe0809f68f60"
+ integrity sha1-opYttvJ1e8AdAkifOPr+CAn2j2A=
+ dependencies:
+ "@types/yargs" "^15.0.5"
+ app-builder-lib "22.9.1"
+ bluebird-lst "^1.0.9"
+ builder-util "22.9.1"
+ builder-util-runtime "8.7.2"
+ chalk "^4.1.0"
+ dmg-builder "22.9.1"
+ fs-extra "^9.0.1"
+ is-ci "^2.0.0"
+ lazy-val "^1.0.4"
+ read-config-file "6.0.0"
+ sanitize-filename "^1.6.3"
+ update-notifier "^4.1.1"
+ yargs "^16.0.3"
+
+electron-context-menu@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.npm.taobao.org/electron-context-menu/download/electron-context-menu-2.3.0.tgz#d9af9733b19a76c78c413d8eb7b00b1ae1ead356"
+ integrity sha1-2a+XM7GadseMQT2Ot7ALGuHq01Y=
+ dependencies:
+ cli-truncate "^2.0.0"
+ electron-dl "^3.0.0"
+ electron-is-dev "^1.0.1"
+
+electron-debug@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.npm.taobao.org/electron-debug/download/electron-debug-3.1.0.tgz#0df17297487fa3c82344d810812853bf67f0bd69"
+ integrity sha1-DfFyl0h/o8gjRNgQgShTv2fwvWk=
+ dependencies:
+ electron-is-dev "^1.1.0"
+ electron-localshortcut "^3.1.0"
+
+electron-devtools-installer@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.npm.taobao.org/electron-devtools-installer/download/electron-devtools-installer-3.1.1.tgz#7b56c8c86475c5e4e10de6917d150c53c9ceb55e"
+ integrity sha1-e1bIyGR1xeThDeaRfRUMU8nOtV4=
+ dependencies:
+ rimraf "^3.0.2"
+ semver "^7.2.1"
+ unzip-crx-3 "^0.2.0"
+
+electron-dl@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.npm.taobao.org/electron-dl/download/electron-dl-3.0.2.tgz#302a46f9a449ddce720cb8e7f2a24c386e19a26c"
+ integrity sha1-MCpG+aRJ3c5yDLjn8qJMOG4Zomw=
+ dependencies:
+ ext-name "^5.0.0"
+ pupa "^2.0.1"
+ unused-filename "^2.1.0"
+
+electron-icon-builder@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npm.taobao.org/electron-icon-builder/download/electron-icon-builder-1.0.2.tgz#da4875d3e4241bcfec2eedfc0c6c9424918d65e5"
+ integrity sha1-2kh10+QkG8/sLu38DGyUJJGNZeU=
+ dependencies:
+ args "^5.0.0"
+ icon-gen "^2.0.0"
+ jimp "^0.9.3"
+
+electron-is-accelerator@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.npm.taobao.org/electron-is-accelerator/download/electron-is-accelerator-0.1.2.tgz#509e510c26a56b55e17f863a4b04e111846ab27b"
+ integrity sha1-UJ5RDCala1Xhf4Y6SwThEYRqsns=
+
+electron-is-dev@^1.0.1, electron-is-dev@^1.1.0, electron-is-dev@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.npm.taobao.org/electron-is-dev/download/electron-is-dev-1.2.0.tgz#2e5cea0a1b3ccf1c86f577cee77363ef55deb05e"
+ integrity sha1-LlzqChs8zxyG9XfO53Nj71XesF4=
+
+electron-localshortcut@^3.1.0:
+ version "3.2.1"
+ resolved "https://registry.npm.taobao.org/electron-localshortcut/download/electron-localshortcut-3.2.1.tgz#cfc83a3eff5e28faf98ddcc87f80a2ce4f623cd3"
+ integrity sha1-z8g6Pv9eKPr5jdzIf4Cizk9iPNM=
+ dependencies:
+ debug "^4.0.1"
+ electron-is-accelerator "^0.1.0"
+ keyboardevent-from-electron-accelerator "^2.0.0"
+ keyboardevents-areequal "^0.2.1"
+
+electron-log@^4.2.4:
+ version "4.2.4"
+ resolved "https://registry.npm.taobao.org/electron-log/download/electron-log-4.2.4.tgz#a13e42a9fc42ca2cc7d2603c3746352efa82112e"
+ integrity sha1-oT5CqfxCyizH0mA8N0Y1LvqCES4=
+
+electron-publish@22.9.1:
+ version "22.9.1"
+ resolved "https://registry.npm.taobao.org/electron-publish/download/electron-publish-22.9.1.tgz#7cc76ac4cc53efd29ee31c1e5facb9724329068e"
+ integrity sha1-fMdqxMxT79Ke4xweX6y5ckMpBo4=
+ dependencies:
+ "@types/fs-extra" "^9.0.1"
+ bluebird-lst "^1.0.9"
+ builder-util "22.9.1"
+ builder-util-runtime "8.7.2"
+ chalk "^4.1.0"
+ fs-extra "^9.0.1"
+ lazy-val "^1.0.4"
+ mime "^2.4.6"
+
electron-to-chromium@^1.3.570:
version "1.3.570"
resolved "https://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.570.tgz#3f5141cc39b4e3892a276b4889980dabf1d29c7f"
integrity sha1-P1FBzDm044kqJ2tIiZgNq/HSnH8=
+electron-updater@^4.3.5:
+ version "4.3.5"
+ resolved "https://registry.npm.taobao.org/electron-updater/download/electron-updater-4.3.5.tgz#4fb36f593a031c87ea07ee141c9f064d5deffb15"
+ integrity sha1-T7NvWToDHIfqB+4UHJ8GTV3v+xU=
+ dependencies:
+ "@types/semver" "^7.3.1"
+ builder-util-runtime "8.7.2"
+ fs-extra "^9.0.1"
+ js-yaml "^3.14.0"
+ lazy-val "^1.0.4"
+ lodash.isequal "^4.5.0"
+ semver "^7.3.2"
+
+electron@11.0.2:
+ version "11.0.2"
+ resolved "https://registry.yarnpkg.com/electron/-/electron-11.0.2.tgz#c7bd2b9abdc1446f4578dbfa22573014b6b2df58"
+ integrity sha512-FTYtCm0oj8B8EJhp99BQSW2bd40xYEG/txMj+W3Ed0CNu5zVIIXb5WIrhXLvhcasN5LKy9nkmSZ+u220lCaARg==
+ dependencies:
+ "@electron/get" "^1.0.1"
+ "@types/node" "^12.0.12"
+ extract-zip "^1.0.3"
+
elliptic@^6.5.3:
version "6.5.3"
resolved "https://registry.npm.taobao.org/elliptic/download/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6"
@@ -3478,15 +4453,15 @@ emojis-list@^3.0.0:
resolved "https://registry.npm.taobao.org/emojis-list/download/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
integrity sha1-VXBmIEatKeLpFucariYKvf9Pang=
-encodeurl@~1.0.2:
+encodeurl@^1.0.2, encodeurl@~1.0.2:
version "1.0.2"
resolved "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
-end-of-stream@^1.0.0, end-of-stream@^1.1.0:
+end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1:
version "1.4.4"
- resolved "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
- integrity sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
dependencies:
once "^1.4.0"
@@ -3509,6 +4484,11 @@ entities@^2.0.0:
resolved "https://registry.npm.taobao.org/entities/download/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f"
integrity sha1-XEh+V0Krk8Fau12iJ1m4WQ7AO38=
+env-paths@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43"
+ integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==
+
errno@^0.1.3, errno@~0.1.7:
version "0.1.7"
resolved "https://registry.npm.taobao.org/errno/download/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
@@ -3516,7 +4496,7 @@ errno@^0.1.3, errno@~0.1.7:
dependencies:
prr "~1.0.1"
-error-ex@^1.3.1:
+error-ex@^1.2.0, error-ex@^1.3.1:
version "1.3.2"
resolved "https://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
integrity sha1-tKxAZIEH/c3PriQvQovqihTU8b8=
@@ -3574,11 +4554,31 @@ es-to-primitive@^1.2.1:
is-date-object "^1.0.1"
is-symbol "^1.0.2"
-escalade@^3.1.0:
+es6-error@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d"
+ integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==
+
+es6-promise@^4.0.3:
+ version "4.2.8"
+ resolved "https://registry.npm.taobao.org/es6-promise/download/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
+ integrity sha1-TrIVlMlyvEBVPSduUQU5FD21Pgo=
+
+escalade@^3.1.0:
version "3.1.0"
resolved "https://registry.npm.taobao.org/escalade/download/escalade-3.1.0.tgz?cache=0&sync_timestamp=1600103241976&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescalade%2Fdownload%2Fescalade-3.1.0.tgz#e8e2d7c7a8b76f6ee64c2181d6b8151441602d4e"
integrity sha1-6OLXx6i3b27mTCGB1rgVFEFgLU4=
+escalade@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.npm.taobao.org/escalade/download/escalade-3.1.1.tgz?cache=0&sync_timestamp=1602567224085&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescalade%2Fdownload%2Fescalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+ integrity sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA=
+
+escape-goat@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.npm.taobao.org/escape-goat/download/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675"
+ integrity sha1-Gy3HcANnbEV+x2Cy3GjttkgYhnU=
+
escape-html@~1.0.3:
version "1.0.3"
resolved "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
@@ -3589,6 +4589,23 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1
resolved "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+escape-string-regexp@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
+escodegen@^1.8.1:
+ version "1.14.3"
+ resolved "https://registry.npm.taobao.org/escodegen/download/escodegen-1.14.3.tgz?cache=0&sync_timestamp=1596669832613&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescodegen%2Fdownload%2Fescodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503"
+ integrity sha1-TnuB+6YVgdyXWC7XjKt/Do1j9QM=
+ dependencies:
+ esprima "^4.0.1"
+ estraverse "^4.2.0"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.6.1"
+
eslint-loader@^2.2.1:
version "2.2.1"
resolved "https://registry.npm.taobao.org/eslint-loader/download/eslint-loader-2.2.1.tgz#28b9c12da54057af0845e2a6112701a2f6bf8337"
@@ -3689,7 +4706,7 @@ espree@^6.1.2, espree@^6.2.1:
acorn-jsx "^5.2.0"
eslint-visitor-keys "^1.1.0"
-esprima@^4.0.0:
+esprima@^4.0.0, esprima@^4.0.1:
version "4.0.1"
resolved "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz?cache=0&sync_timestamp=1589682833047&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesprima%2Fdownload%2Fesprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
integrity sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=
@@ -3708,7 +4725,7 @@ esrecurse@^4.1.0, esrecurse@^4.3.0:
dependencies:
estraverse "^5.2.0"
-estraverse@^4.1.1:
+estraverse@^4.1.1, estraverse@^4.2.0:
version "4.3.0"
resolved "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz?cache=0&sync_timestamp=1596642998635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
integrity sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=
@@ -3800,6 +4817,26 @@ execa@^3.3.0:
signal-exit "^3.0.2"
strip-final-newline "^2.0.0"
+execa@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.npm.taobao.org/execa/download/execa-4.0.3.tgz#0a34dabbad6d66100bd6f2c576c8669403f317f2"
+ integrity sha1-CjTau61tZhAL1vLFdshmlAPzF/I=
+ dependencies:
+ cross-spawn "^7.0.0"
+ get-stream "^5.0.0"
+ human-signals "^1.1.1"
+ is-stream "^2.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^4.0.0"
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+ strip-final-newline "^2.0.0"
+
+exif-parser@^0.1.12:
+ version "0.1.12"
+ resolved "https://registry.npm.taobao.org/exif-parser/download/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922"
+ integrity sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=
+
expand-brackets@^2.1.4:
version "2.1.4"
resolved "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
@@ -3813,6 +4850,13 @@ expand-brackets@^2.1.4:
snapdragon "^0.8.1"
to-regex "^3.0.1"
+express-fileupload@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.npm.taobao.org/express-fileupload/download/express-fileupload-1.2.0.tgz#356c4dfd645be71ab9fb2f4e6d84eeb00d247979"
+ integrity sha1-NWxN/WRb5xq5+y9ObYTusA0keXk=
+ dependencies:
+ busboy "^0.3.1"
+
express@^4.16.3, express@^4.17.1:
version "4.17.1"
resolved "https://registry.npm.taobao.org/express/download/express-4.17.1.tgz?cache=0&sync_timestamp=1589682766604&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexpress%2Fdownload%2Fexpress-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134"
@@ -3849,6 +4893,21 @@ express@^4.16.3, express@^4.17.1:
utils-merge "1.0.1"
vary "~1.1.2"
+ext-list@^2.0.0:
+ version "2.2.2"
+ resolved "https://registry.npm.taobao.org/ext-list/download/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37"
+ integrity sha1-C5jmTtgvWs8PKTG6v2khLvUt3Tc=
+ dependencies:
+ mime-db "^1.28.0"
+
+ext-name@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npm.taobao.org/ext-name/download/ext-name-5.0.0.tgz#70781981d183ee15d13993c8822045c506c8f0a6"
+ integrity sha1-cHgZgdGD7hXROZPIgiBFxQbI8KY=
+ dependencies:
+ ext-list "^2.0.0"
+ sort-keys-length "^1.0.0"
+
extend-shallow@^2.0.1:
version "2.0.1"
resolved "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
@@ -3892,6 +4951,27 @@ extglob@^2.0.2, extglob@^2.0.4:
snapdragon "^0.8.1"
to-regex "^3.0.1"
+extract-zip@^1.0.3, extract-zip@^1.6.5:
+ version "1.7.0"
+ resolved "https://registry.npm.taobao.org/extract-zip/download/extract-zip-1.7.0.tgz?cache=0&sync_timestamp=1591773082587&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fextract-zip%2Fdownload%2Fextract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927"
+ integrity sha1-VWzDrp339FLEk6DPtRzDAneUCSc=
+ dependencies:
+ concat-stream "^1.6.2"
+ debug "^2.6.9"
+ mkdirp "^0.5.4"
+ yauzl "^2.10.0"
+
+extract-zip@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npm.taobao.org/extract-zip/download/extract-zip-2.0.1.tgz?cache=0&sync_timestamp=1591773082587&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fextract-zip%2Fdownload%2Fextract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
+ integrity sha1-Zj3KVv5G34kNXxMe9KBtIruLoTo=
+ dependencies:
+ debug "^4.1.1"
+ get-stream "^5.1.0"
+ yauzl "^2.10.0"
+ optionalDependencies:
+ "@types/yauzl" "^2.9.1"
+
extsprintf@1.3.0:
version "1.3.0"
resolved "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
@@ -3943,6 +5023,13 @@ faye-websocket@~0.11.1:
dependencies:
websocket-driver ">=0.5.1"
+fd-slicer@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
+ integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=
+ dependencies:
+ pend "~1.2.0"
+
figgy-pudding@^3.5.1:
version "3.5.2"
resolved "https://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e"
@@ -3970,11 +5057,33 @@ file-loader@^4.2.0:
loader-utils "^1.2.3"
schema-utils "^2.5.0"
+file-type@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.npm.taobao.org/file-type/download/file-type-9.0.0.tgz?cache=0&sync_timestamp=1603046153408&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-type%2Fdownload%2Ffile-type-9.0.0.tgz#a68d5ad07f486414dfb2c8866f73161946714a18"
+ integrity sha1-po1a0H9IZBTfssiGb3MWGUZxShg=
+
file-uri-to-path@1.0.0:
version "1.0.0"
resolved "https://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
integrity sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90=
+file-uri-to-path@2:
+ version "2.0.0"
+ resolved "https://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-2.0.0.tgz#7b415aeba227d575851e0a5b0c640d7656403fba"
+ integrity sha1-e0Fa66In1XWFHgpbDGQNdlZAP7o=
+
+file-url@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.npm.taobao.org/file-url/download/file-url-2.0.2.tgz#e951784d79095127d3713029ab063f40818ca2ae"
+ integrity sha1-6VF4TXkJUSfTcTApqwY/QIGMoq4=
+
+filelist@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npm.taobao.org/filelist/download/filelist-1.0.1.tgz#f10d1a3ae86c1694808e8f20906f43d4c9132dbb"
+ integrity sha1-8Q0aOuhsFpSAjo8gkG9D1MkTLbs=
+ dependencies:
+ minimatch "^3.0.4"
+
filesize@^3.6.1:
version "3.6.1"
resolved "https://registry.npm.taobao.org/filesize/download/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317"
@@ -4130,6 +5239,15 @@ fresh@0.5.2:
resolved "https://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz?cache=0&sync_timestamp=1589682752100&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffresh%2Fdownload%2Ffresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
+friendly-errors-webpack-plugin@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.npm.taobao.org/friendly-errors-webpack-plugin/download/friendly-errors-webpack-plugin-1.7.0.tgz#efc86cbb816224565861a1be7a9d84d0aafea136"
+ integrity sha1-78hsu4FiJFZYYaG+ep2E0Kr+oTY=
+ dependencies:
+ chalk "^1.1.3"
+ error-stack-parser "^2.0.0"
+ string-width "^2.0.0"
+
from2@^2.1.0:
version "2.3.0"
resolved "https://registry.npm.taobao.org/from2/download/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
@@ -4138,6 +5256,15 @@ from2@^2.1.0:
inherits "^2.0.1"
readable-stream "^2.0.0"
+fs-extra@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npm.taobao.org/fs-extra/download/fs-extra-1.0.0.tgz?cache=0&sync_timestamp=1591229972229&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-extra%2Fdownload%2Ffs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950"
+ integrity sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^2.1.0"
+ klaw "^1.0.0"
+
fs-extra@^4.0.2:
version "4.0.3"
resolved "https://registry.npm.taobao.org/fs-extra/download/fs-extra-4.0.3.tgz?cache=0&sync_timestamp=1591229972229&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-extra%2Fdownload%2Ffs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94"
@@ -4156,6 +5283,25 @@ fs-extra@^7.0.1:
jsonfile "^4.0.0"
universalify "^0.1.0"
+fs-extra@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
+ integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
+fs-extra@^9.0.1:
+ version "9.0.1"
+ resolved "https://registry.npm.taobao.org/fs-extra/download/fs-extra-9.0.1.tgz?cache=0&sync_timestamp=1591229972229&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-extra%2Fdownload%2Ffs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc"
+ integrity sha1-kQ2gBiQ3ukw5/t2GPxZ1zP78ufw=
+ dependencies:
+ at-least-node "^1.0.0"
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^1.0.0"
+
fs-minipass@^2.0.0:
version "2.1.0"
resolved "https://registry.npm.taobao.org/fs-minipass/download/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
@@ -4191,6 +5337,14 @@ fsevents@~2.1.2:
resolved "https://registry.npm.taobao.org/fsevents/download/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e"
integrity sha1-+3OHA66NL5/pAMM4Nt3r7ouX8j4=
+ftp@^0.3.10:
+ version "0.3.10"
+ resolved "https://registry.npm.taobao.org/ftp/download/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d"
+ integrity sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=
+ dependencies:
+ readable-stream "1.1.x"
+ xregexp "2.0.0"
+
function-bind@^1.1.1:
version "1.1.1"
resolved "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
@@ -4206,7 +5360,12 @@ gensync@^1.0.0-beta.1:
resolved "https://registry.npm.taobao.org/gensync/download/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269"
integrity sha1-WPQ2H/mH5f9uHnohCCeqNx6qwmk=
-get-caller-file@^2.0.1:
+get-caller-file@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
+ integrity sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o=
+
+get-caller-file@^2.0.1, get-caller-file@^2.0.5:
version "2.0.5"
resolved "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
integrity sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=
@@ -4221,20 +5380,32 @@ get-stream@^3.0.0:
resolved "https://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz?cache=0&sync_timestamp=1597056502934&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
-get-stream@^4.0.0:
+get-stream@^4.0.0, get-stream@^4.1.0:
version "4.1.0"
resolved "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz?cache=0&sync_timestamp=1597056502934&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
integrity sha1-wbJVV189wh1Zv8ec09K0axw6VLU=
dependencies:
pump "^3.0.0"
-get-stream@^5.0.0:
+get-stream@^5.0.0, get-stream@^5.1.0:
version "5.2.0"
- resolved "https://registry.npm.taobao.org/get-stream/download/get-stream-5.2.0.tgz?cache=0&sync_timestamp=1597056502934&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
- integrity sha1-SWaheV7lrOZecGxLe+txJX1uItM=
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
+ integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
dependencies:
pump "^3.0.0"
+get-uri@3:
+ version "3.0.2"
+ resolved "https://registry.npm.taobao.org/get-uri/download/get-uri-3.0.2.tgz#f0ef1356faabc70e1f9404fa3b66b2ba9bfc725c"
+ integrity sha1-8O8TVvqrxw4flAT6O2ayupv8clw=
+ dependencies:
+ "@tootallnate/once" "1"
+ data-uri-to-buffer "3"
+ debug "4"
+ file-uri-to-path "2"
+ fs-extra "^8.1.0"
+ ftp "^0.3.10"
+
get-value@^2.0.3, get-value@^2.0.6:
version "2.0.6"
resolved "https://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
@@ -4279,6 +5450,44 @@ glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
once "^1.3.0"
path-is-absolute "^1.0.0"
+global-agent@^2.0.2:
+ version "2.1.12"
+ resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-2.1.12.tgz#e4ae3812b731a9e81cbf825f9377ef450a8e4195"
+ integrity sha512-caAljRMS/qcDo69X9BfkgrihGUgGx44Fb4QQToNQjsiWh+YlQ66uqYVAdA8Olqit+5Ng0nkz09je3ZzANMZcjg==
+ dependencies:
+ boolean "^3.0.1"
+ core-js "^3.6.5"
+ es6-error "^4.1.1"
+ matcher "^3.0.0"
+ roarr "^2.15.3"
+ semver "^7.3.2"
+ serialize-error "^7.0.1"
+
+global-dirs@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npm.taobao.org/global-dirs/download/global-dirs-2.0.1.tgz#acdf3bb6685bcd55cb35e8a052266569e9469201"
+ integrity sha1-rN87tmhbzVXLNeigUiZlaelGkgE=
+ dependencies:
+ ini "^1.3.5"
+
+global-tunnel-ng@^2.7.1:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz#d03b5102dfde3a69914f5ee7d86761ca35d57d8f"
+ integrity sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==
+ dependencies:
+ encodeurl "^1.0.2"
+ lodash "^4.17.10"
+ npm-conf "^1.1.3"
+ tunnel "^0.0.6"
+
+global@~4.3.0:
+ version "4.3.2"
+ resolved "https://registry.npm.taobao.org/global/download/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f"
+ integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=
+ dependencies:
+ min-document "^2.19.0"
+ process "~0.5.1"
+
globals@^11.1.0:
version "11.12.0"
resolved "https://registry.npm.taobao.org/globals/download/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
@@ -4291,6 +5500,13 @@ globals@^12.1.0:
dependencies:
type-fest "^0.8.1"
+globalthis@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.1.tgz#40116f5d9c071f9e8fb0037654df1ab3a83b7ef9"
+ integrity sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw==
+ dependencies:
+ define-properties "^1.1.3"
+
globby@^6.1.0:
version "6.1.0"
resolved "https://registry.npm.taobao.org/globby/download/globby-6.1.0.tgz?cache=0&sync_timestamp=1591083812416&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
@@ -4328,7 +5544,24 @@ globby@^9.2.0:
pify "^4.0.1"
slash "^2.0.0"
-graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.2:
+got@^9.6.0:
+ version "9.6.0"
+ resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85"
+ integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==
+ dependencies:
+ "@sindresorhus/is" "^0.14.0"
+ "@szmarczak/http-timer" "^1.1.2"
+ cacheable-request "^6.0.0"
+ decompress-response "^3.3.0"
+ duplexer3 "^0.1.4"
+ get-stream "^4.1.0"
+ lowercase-keys "^1.0.1"
+ mimic-response "^1.0.1"
+ p-cancelable "^1.0.0"
+ to-readable-stream "^1.0.0"
+ url-parse-lax "^3.0.0"
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.2:
version "4.2.4"
resolved "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.4.tgz?cache=0&sync_timestamp=1589682809142&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgraceful-fs%2Fdownload%2Fgraceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
integrity sha1-Ila94U02MpWMRl68ltxGfKB6Kfs=
@@ -4417,6 +5650,11 @@ has-values@^1.0.0:
is-number "^3.0.0"
kind-of "^4.0.0"
+has-yarn@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npm.taobao.org/has-yarn/download/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77"
+ integrity sha1-E34RNUp7W/EapctknPDG8/8rLnc=
+
has@^1.0.0, has@^1.0.3:
version "1.0.3"
resolved "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
@@ -4451,6 +5689,14 @@ hash.js@^1.0.0, hash.js@^1.0.3:
inherits "^2.0.3"
minimalistic-assert "^1.0.1"
+hasha@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.npm.taobao.org/hasha/download/hasha-2.2.0.tgz#78d7cbfc1e6d66303fe79837365984517b2f6ee1"
+ integrity sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=
+ dependencies:
+ is-stream "^1.0.1"
+ pinkie-promise "^2.0.0"
+
he@1.2.x, he@^1.1.0, he@^1.1.1:
version "1.2.0"
resolved "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz?cache=0&sync_timestamp=1589682765156&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhe%2Fdownload%2Fhe-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
@@ -4485,6 +5731,13 @@ hosted-git-info@^2.1.4:
resolved "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.8.8.tgz?cache=0&sync_timestamp=1594427993800&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhosted-git-info%2Fdownload%2Fhosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
integrity sha1-dTm9S8Hg4KiVgVouAmJCCxKFhIg=
+hosted-git-info@^3.0.5:
+ version "3.0.7"
+ resolved "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-3.0.7.tgz?cache=0&sync_timestamp=1602803832496&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhosted-git-info%2Fdownload%2Fhosted-git-info-3.0.7.tgz#a30727385ea85acfcee94e0aad9e368c792e036c"
+ integrity sha1-owcnOF6oWs/O6U4KrZ42jHkuA2w=
+ dependencies:
+ lru-cache "^6.0.0"
+
howler@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/howler/-/howler-2.2.0.tgz#0e2c780997ae65ab9a1a186333031beac1c63c6b"
@@ -4568,6 +5821,11 @@ htmlparser2@^3.3.0, htmlparser2@^3.8.3:
inherits "^2.0.1"
readable-stream "^3.1.1"
+http-cache-semantics@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
+ integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==
+
http-deceiver@^1.2.7:
version "1.2.7"
resolved "https://registry.npm.taobao.org/http-deceiver/download/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
@@ -4584,17 +5842,7 @@ http-errors@1.7.2:
statuses ">= 1.5.0 < 2"
toidentifier "1.0.0"
-http-errors@~1.6.2:
- version "1.6.3"
- resolved "https://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz?cache=0&sync_timestamp=1593407858306&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
- integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=
- dependencies:
- depd "~1.1.2"
- inherits "2.0.3"
- setprototypeof "1.1.0"
- statuses ">= 1.4.0 < 2"
-
-http-errors@~1.7.2:
+http-errors@1.7.3, http-errors@~1.7.2:
version "1.7.3"
resolved "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.3.tgz?cache=0&sync_timestamp=1593407858306&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
integrity sha1-bGGeT5xgMIw4UZSYwU+7EKrOuwY=
@@ -4605,11 +5853,30 @@ http-errors@~1.7.2:
statuses ">= 1.5.0 < 2"
toidentifier "1.0.0"
+http-errors@~1.6.2:
+ version "1.6.3"
+ resolved "https://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz?cache=0&sync_timestamp=1593407858306&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
+ integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.3"
+ setprototypeof "1.1.0"
+ statuses ">= 1.4.0 < 2"
+
http-parser-js@>=0.5.1:
version "0.5.2"
resolved "https://registry.npm.taobao.org/http-parser-js/download/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77"
integrity sha1-2i4x0jezk6rnKs5DiC3X4nCo/3c=
+http-proxy-agent@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.npm.taobao.org/http-proxy-agent/download/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a"
+ integrity sha1-ioyO9/WTLM+VPClsqCkblap0qjo=
+ dependencies:
+ "@tootallnate/once" "1"
+ agent-base "6"
+ debug "4"
+
http-proxy-middleware@0.19.1:
version "0.19.1"
resolved "https://registry.npm.taobao.org/http-proxy-middleware/download/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a"
@@ -4643,6 +5910,14 @@ https-browserify@^1.0.0:
resolved "https://registry.npm.taobao.org/https-browserify/download/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
+https-proxy-agent@5:
+ version "5.0.0"
+ resolved "https://registry.npm.taobao.org/https-proxy-agent/download/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2"
+ integrity sha1-4qkFQqu2inYuCghQ9sntrf2FBrI=
+ dependencies:
+ agent-base "6"
+ debug "4"
+
human-signals@^1.1.1:
version "1.1.1"
resolved "https://registry.npm.taobao.org/human-signals/download/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
@@ -4664,6 +5939,17 @@ husky@^4.3.0:
slash "^3.0.0"
which-pm-runs "^1.0.0"
+icon-gen@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npm.taobao.org/icon-gen/download/icon-gen-2.0.0.tgz#2ba21902305ebafc3e500e505c5d3076dc4fb91a"
+ integrity sha1-K6IZAjBeuvw+UA5QXF0wdtxPuRo=
+ dependencies:
+ del "^3.0.0"
+ mkdirp "^0.5.1"
+ pngjs-nozlib "^1.0.0"
+ svg2png "4.1.1"
+ uuid "^3.3.2"
+
iconv-lite@0.4.24, iconv-lite@^0.4.24:
version "0.4.24"
resolved "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@@ -4671,6 +5957,13 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24:
dependencies:
safer-buffer ">= 2.1.2 < 3"
+iconv-lite@^0.6.2:
+ version "0.6.2"
+ resolved "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01"
+ integrity sha1-zhPRh1sMOmdL1qBLf3awGxtt7QE=
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3.0.0"
+
icss-utils@^4.0.0, icss-utils@^4.1.1:
version "4.1.1"
resolved "https://registry.npm.taobao.org/icss-utils/download/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467"
@@ -4678,6 +5971,11 @@ icss-utils@^4.0.0, icss-utils@^4.1.1:
dependencies:
postcss "^7.0.14"
+ieee754@^1.1.13:
+ version "1.2.1"
+ resolved "https://registry.npm.taobao.org/ieee754/download/ieee754-1.2.1.tgz?cache=0&sync_timestamp=1603838208740&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fieee754%2Fdownload%2Fieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+ integrity sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I=
+
ieee754@^1.1.4:
version "1.1.13"
resolved "https://registry.npm.taobao.org/ieee754/download/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
@@ -4738,6 +6036,11 @@ import-from@^2.1.0:
dependencies:
resolve-from "^3.0.0"
+import-lazy@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npm.taobao.org/import-lazy/download/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
+ integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=
+
import-local@^2.0.0:
version "2.0.0"
resolved "https://registry.npm.taobao.org/import-local/download/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
@@ -4789,6 +6092,11 @@ inherits@2.0.3:
resolved "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+ini@^1.3.4, ini@^1.3.5, ini@~1.3.0:
+ version "1.3.5"
+ resolved "https://registry.npm.taobao.org/ini/download/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
+ integrity sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=
+
inquirer@^7.0.0, inquirer@^7.1.0:
version "7.3.3"
resolved "https://registry.npm.taobao.org/inquirer/download/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003"
@@ -4823,6 +6131,11 @@ invariant@^2.2.2, invariant@^2.2.4:
dependencies:
loose-envify "^1.0.0"
+invert-kv@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npm.taobao.org/invert-kv/download/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
+ integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY=
+
ip-regex@^2.1.0:
version "2.1.0"
resolved "https://registry.npm.taobao.org/ip-regex/download/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"
@@ -4908,6 +6221,13 @@ is-ci@^1.0.10:
dependencies:
ci-info "^1.5.0"
+is-ci@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npm.taobao.org/is-ci/download/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
+ integrity sha1-a8YzQYGBDgS1wis9WJ/cpVAmQEw=
+ dependencies:
+ ci-info "^2.0.0"
+
is-color-stop@^1.0.0:
version "1.1.0"
resolved "https://registry.npm.taobao.org/is-color-stop/download/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345"
@@ -4984,6 +6304,13 @@ is-extglob@^2.1.0, is-extglob@^2.1.1:
resolved "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
is-fullwidth-code-point@^2.0.0:
version "2.0.0"
resolved "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
@@ -4994,6 +6321,11 @@ is-fullwidth-code-point@^3.0.0:
resolved "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
integrity sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=
+is-function@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.npm.taobao.org/is-function/download/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08"
+ integrity sha1-Twl/MKv2762smDOxfKXcA/gUTgg=
+
is-glob@^3.1.0:
version "3.1.0"
resolved "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
@@ -5008,11 +6340,24 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
dependencies:
is-extglob "^2.1.1"
+is-installed-globally@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.npm.taobao.org/is-installed-globally/download/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141"
+ integrity sha1-/T76ee5nDRGHIzGC1bCh3QAxMUE=
+ dependencies:
+ global-dirs "^2.0.1"
+ is-path-inside "^3.0.1"
+
is-negative-zero@^2.0.0:
version "2.0.0"
resolved "https://registry.npm.taobao.org/is-negative-zero/download/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461"
integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=
+is-npm@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npm.taobao.org/is-npm/download/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d"
+ integrity sha1-yQ3YOAaW34enptgjwg0LErvjyE0=
+
is-number@^3.0.0:
version "3.0.0"
resolved "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
@@ -5035,11 +6380,23 @@ is-obj@^2.0.0:
resolved "https://registry.npm.taobao.org/is-obj/download/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982"
integrity sha1-Rz+wXZc3BeP9liBUUBjKjiLvSYI=
+is-path-cwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
+ integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=
+
is-path-cwd@^2.0.0:
version "2.2.0"
resolved "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb"
integrity sha1-Z9Q7gmZKe1GR/ZEZEn6zAASKn9s=
+is-path-in-cwd@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52"
+ integrity sha1-WsSLNF72dTOb1sekipEhELJBz1I=
+ dependencies:
+ is-path-inside "^1.0.0"
+
is-path-in-cwd@^2.0.0:
version "2.1.0"
resolved "https://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb"
@@ -5047,6 +6404,13 @@ is-path-in-cwd@^2.0.0:
dependencies:
is-path-inside "^2.1.0"
+is-path-inside@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
+ integrity sha1-jvW33lBDej/cprToZe96pVy0gDY=
+ dependencies:
+ path-is-inside "^1.0.1"
+
is-path-inside@^2.1.0:
version "2.1.0"
resolved "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2"
@@ -5054,6 +6418,11 @@ is-path-inside@^2.1.0:
dependencies:
path-is-inside "^1.0.2"
+is-path-inside@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017"
+ integrity sha1-9SIPyCo+IzdXKR3dycWHfyofMBc=
+
is-plain-obj@^1.0.0, is-plain-obj@^1.1:
version "1.1.0"
resolved "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
@@ -5083,7 +6452,7 @@ is-resolvable@^1.0.0:
resolved "https://registry.npm.taobao.org/is-resolvable/download/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
integrity sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg=
-is-stream@^1.1.0:
+is-stream@^1.0.1, is-stream@^1.1.0:
version "1.1.0"
resolved "https://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
@@ -5107,11 +6476,16 @@ is-symbol@^1.0.2:
dependencies:
has-symbols "^1.0.1"
-is-typedarray@~1.0.0:
+is-typedarray@^1.0.0, is-typedarray@~1.0.0:
version "1.0.0"
resolved "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+is-utf8@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.npm.taobao.org/is-utf8/download/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+ integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
+
is-windows@^1.0.2:
version "1.0.2"
resolved "https://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
@@ -5129,11 +6503,26 @@ is-wsl@^2.1.1:
dependencies:
is-docker "^2.0.0"
+is-yarn-global@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.npm.taobao.org/is-yarn-global/download/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232"
+ integrity sha1-1QLTOCWQ6jAEiTdGdUyJE5lz4jI=
+
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+ integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
+
isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
version "1.0.0"
- resolved "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+isbinaryfile@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.npm.taobao.org/isbinaryfile/download/isbinaryfile-4.0.6.tgz#edcb62b224e2b4710830b67498c8e4e5a4d2610b"
+ integrity sha1-7ctisiTitHEIMLZ0mMjk5aTSYQs=
+
isexe@^2.0.0:
version "2.0.0"
resolved "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
@@ -5156,6 +6545,16 @@ isstream@~0.1.2:
resolved "https://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+jake@^10.6.1:
+ version "10.8.2"
+ resolved "https://registry.npm.taobao.org/jake/download/jake-10.8.2.tgz#ebc9de8558160a66d82d0eadc6a2e58fbc500a7b"
+ integrity sha1-68nehVgWCmbYLQ6txqLlj7xQCns=
+ dependencies:
+ async "0.9.x"
+ chalk "^2.4.2"
+ filelist "^1.0.1"
+ minimatch "^3.0.4"
+
javascript-stringify@^2.0.1:
version "2.0.1"
resolved "https://registry.npm.taobao.org/javascript-stringify/download/javascript-stringify-2.0.1.tgz#6ef358035310e35d667c675ed63d3eb7c1aa19e5"
@@ -5169,6 +6568,32 @@ jest-worker@^25.4.0:
merge-stream "^2.0.0"
supports-color "^7.0.0"
+jest-worker@^26.2.1:
+ version "26.6.1"
+ resolved "https://registry.npm.taobao.org/jest-worker/download/jest-worker-26.6.1.tgz?cache=0&sync_timestamp=1603442917089&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-worker%2Fdownload%2Fjest-worker-26.6.1.tgz#c2ae8cde6802cc14056043f997469ec170d9c32a"
+ integrity sha1-wq6M3mgCzBQFYEP5l0aewXDZwyo=
+ dependencies:
+ "@types/node" "*"
+ merge-stream "^2.0.0"
+ supports-color "^7.0.0"
+
+jimp@^0.9.3:
+ version "0.9.8"
+ resolved "https://registry.npm.taobao.org/jimp/download/jimp-0.9.8.tgz#2ee87b81b42e723ad74c73b8012f879c0abe5b04"
+ integrity sha1-Luh7gbQucjrXTHO4AS+HnAq+WwQ=
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/custom" "^0.9.8"
+ "@jimp/plugins" "^0.9.8"
+ "@jimp/types" "^0.9.8"
+ core-js "^3.4.1"
+ regenerator-runtime "^0.13.3"
+
+jpeg-js@^0.3.4:
+ version "0.3.7"
+ resolved "https://registry.npm.taobao.org/jpeg-js/download/jpeg-js-0.3.7.tgz#471a89d06011640592d314158608690172b1028d"
+ integrity sha1-RxqJ0GARZAWS0xQVhghpAXKxAo0=
+
js-base64@^2.1.9:
version "2.6.4"
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4"
@@ -5196,7 +6621,7 @@ js-queue@2.0.0:
resolved "https://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
integrity sha1-GSA/tZmR35jjoocFDUZHzerzJJk=
-js-yaml@^3.13.1:
+js-yaml@^3.13.1, js-yaml@^3.14.0:
version "3.14.0"
resolved "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482"
integrity sha1-p6NBcPJqIbsWJCTYray0ETpp5II=
@@ -5219,6 +6644,11 @@ jsesc@~0.5.0:
resolved "https://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
+json-buffer@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898"
+ integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=
+
json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2:
version "1.0.2"
resolved "https://registry.npm.taobao.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
@@ -5251,7 +6681,7 @@ json-stable-stringify@^1.0.1:
dependencies:
jsonify "~0.0.0"
-json-stringify-safe@~5.0.1:
+json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
version "5.0.1"
resolved "https://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz?cache=0&sync_timestamp=1589682771374&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-stringify-safe%2Fdownload%2Fjson-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
@@ -5280,13 +6710,29 @@ json5@^2.1.2:
dependencies:
minimist "^1.2.5"
+jsonfile@^2.1.0:
+ version "2.4.0"
+ resolved "https://registry.npm.taobao.org/jsonfile/download/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
+ integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug=
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
jsonfile@^4.0.0:
version "4.0.0"
- resolved "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
optionalDependencies:
graceful-fs "^4.1.6"
+jsonfile@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.npm.taobao.org/jsonfile/download/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179"
+ integrity sha1-mJZsuiFDeMjIS4LghZB7QL9hQXk=
+ dependencies:
+ universalify "^1.0.0"
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
jsonify@~0.0.0:
version "0.0.0"
resolved "https://registry.npm.taobao.org/jsonify/download/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
@@ -5302,6 +6748,38 @@ jsprim@^1.2.2:
json-schema "0.2.3"
verror "1.10.0"
+jszip@^3.1.0:
+ version "3.5.0"
+ resolved "https://registry.npm.taobao.org/jszip/download/jszip-3.5.0.tgz#b4fd1f368245346658e781fec9675802489e15f6"
+ integrity sha1-tP0fNoJFNGZY54H+yWdYAkieFfY=
+ dependencies:
+ lie "~3.3.0"
+ pako "~1.0.2"
+ readable-stream "~2.3.6"
+ set-immediate-shim "~1.0.1"
+
+kew@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.npm.taobao.org/kew/download/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b"
+ integrity sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=
+
+keyboardevent-from-electron-accelerator@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npm.taobao.org/keyboardevent-from-electron-accelerator/download/keyboardevent-from-electron-accelerator-2.0.0.tgz#ace21b1aa4e47148815d160057f9edb66567c50c"
+ integrity sha1-rOIbGqTkcUiBXRYAV/nttmVnxQw=
+
+keyboardevents-areequal@^0.2.1:
+ version "0.2.2"
+ resolved "https://registry.npm.taobao.org/keyboardevents-areequal/download/keyboardevents-areequal-0.2.2.tgz#88191ec738ce9f7591c25e9056de928b40277194"
+ integrity sha1-iBkexzjOn3WRwl6QVt6Si0AncZQ=
+
+keyv@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9"
+ integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==
+ dependencies:
+ json-buffer "3.0.0"
+
killable@^1.0.1:
version "1.0.1"
resolved "https://registry.npm.taobao.org/killable/download/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892"
@@ -5331,11 +6809,25 @@ kind-of@^6.0.0, kind-of@^6.0.2:
resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
integrity sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=
+klaw@^1.0.0:
+ version "1.3.1"
+ resolved "https://registry.npm.taobao.org/klaw/download/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
+ integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk=
+ optionalDependencies:
+ graceful-fs "^4.1.9"
+
klona@^2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0"
integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==
+latest-version@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.npm.taobao.org/latest-version/download/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face"
+ integrity sha1-EZ3+kI/jjRXfpD7NE/oS7Igy+s4=
+ dependencies:
+ package-json "^6.3.0"
+
launch-editor-middleware@^2.2.1:
version "2.2.1"
resolved "https://registry.npm.taobao.org/launch-editor-middleware/download/launch-editor-middleware-2.2.1.tgz#e14b07e6c7154b0a4b86a0fd345784e45804c157"
@@ -5351,6 +6843,23 @@ launch-editor@^2.2.1:
chalk "^2.3.0"
shell-quote "^1.6.1"
+lazy-val@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npm.taobao.org/lazy-val/download/lazy-val-1.0.4.tgz#882636a7245c2cfe6e0a4e3ba6c5d68a137e5c65"
+ integrity sha1-iCY2pyRcLP5uCk47psXWihN+XGU=
+
+lcid@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npm.taobao.org/lcid/download/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
+ integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=
+ dependencies:
+ invert-kv "^1.0.0"
+
+leven@2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npm.taobao.org/leven/download/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
+ integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA=
+
leven@^3.1.0:
version "3.1.0"
resolved "https://registry.npm.taobao.org/leven/download/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
@@ -5378,11 +6887,43 @@ lie@3.1.1:
dependencies:
immediate "~3.0.5"
+lie@~3.3.0:
+ version "3.3.0"
+ resolved "https://registry.npm.taobao.org/lie/download/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a"
+ integrity sha1-3Pgt7lRfRgdNryAMfBxaCOD0D2o=
+ dependencies:
+ immediate "~3.0.5"
+
lines-and-columns@^1.1.6:
version "1.1.6"
resolved "https://registry.npm.taobao.org/lines-and-columns/download/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
+load-bmfont@^1.3.1, load-bmfont@^1.4.0:
+ version "1.4.1"
+ resolved "https://registry.npm.taobao.org/load-bmfont/download/load-bmfont-1.4.1.tgz?cache=0&sync_timestamp=1593680203602&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fload-bmfont%2Fdownload%2Fload-bmfont-1.4.1.tgz#c0f5f4711a1e2ccff725a7b6078087ccfcddd3e9"
+ integrity sha1-wPX0cRoeLM/3Jae2B4CHzPzd0+k=
+ dependencies:
+ buffer-equal "0.0.1"
+ mime "^1.3.4"
+ parse-bmfont-ascii "^1.0.3"
+ parse-bmfont-binary "^1.0.5"
+ parse-bmfont-xml "^1.1.4"
+ phin "^2.9.1"
+ xhr "^2.0.1"
+ xtend "^4.0.0"
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.npm.taobao.org/load-json-file/download/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
loader-fs-cache@^1.0.0:
version "1.0.3"
resolved "https://registry.npm.taobao.org/loader-fs-cache/download/loader-fs-cache-1.0.3.tgz#f08657646d607078be2f0a032f8bd69dd6f277d9"
@@ -5468,6 +7009,11 @@ lodash.defaultsdeep@^4.6.1:
resolved "https://registry.npm.taobao.org/lodash.defaultsdeep/download/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6"
integrity sha1-US6b1yHSctlOPTpjZT+hdRZ0HKY=
+lodash.isequal@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.npm.taobao.org/lodash.isequal/download/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
+ integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA=
+
lodash.kebabcase@^4.1.1:
version "4.1.1"
resolved "https://registry.npm.taobao.org/lodash.kebabcase/download/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36"
@@ -5483,6 +7029,11 @@ lodash.memoize@^4.1.2:
resolved "https://registry.npm.taobao.org/lodash.memoize/download/lodash.memoize-4.1.2.tgz?cache=0&sync_timestamp=1589682725270&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash.memoize%2Fdownload%2Flodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
+lodash.merge@^4.6.1:
+ version "4.6.2"
+ resolved "https://registry.npm.taobao.org/lodash.merge/download/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
+ integrity sha1-VYqlO0O2YeGSWgr9+japoQhf5Xo=
+
lodash.template@^4.4.0:
version "4.5.0"
resolved "https://registry.npm.taobao.org/lodash.template/download/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab"
@@ -5508,7 +7059,7 @@ lodash.uniq@^4.5.0:
resolved "https://registry.npm.taobao.org/lodash.uniq/download/lodash.uniq-4.5.0.tgz?cache=0&sync_timestamp=1589682817275&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash.uniq%2Fdownload%2Flodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
-lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.3:
+lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.3:
version "4.17.20"
resolved "https://registry.npm.taobao.org/lodash/download/lodash-4.17.20.tgz?cache=0&sync_timestamp=1597335994883&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
integrity sha1-tEqbYpe8tpjxxRo1RaKzs2jVnFI=
@@ -5537,6 +7088,16 @@ lower-case@^1.1.1:
resolved "https://registry.npm.taobao.org/lower-case/download/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw=
+lowercase-keys@^1.0.0, lowercase-keys@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
+ integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
+
+lowercase-keys@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
+ integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
+
lru-cache@^4.0.1, lru-cache@^4.1.2:
version "4.1.5"
resolved "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz?cache=0&sync_timestamp=1594427582110&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
@@ -5552,6 +7113,13 @@ lru-cache@^5.1.1:
dependencies:
yallist "^3.0.2"
+lru-cache@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.npm.taobao.org/lru-cache/download/lru-cache-6.0.0.tgz?cache=0&sync_timestamp=1594427582110&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+ integrity sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=
+ dependencies:
+ yallist "^4.0.0"
+
make-dir@^2.0.0:
version "2.1.0"
resolved "https://registry.npm.taobao.org/make-dir/download/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
@@ -5560,7 +7128,7 @@ make-dir@^2.0.0:
pify "^4.0.1"
semver "^5.6.0"
-make-dir@^3.0.2:
+make-dir@^3.0.0, make-dir@^3.0.2:
version "3.1.0"
resolved "https://registry.npm.taobao.org/make-dir/download/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
integrity sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=
@@ -5579,6 +7147,13 @@ map-visit@^1.0.0:
dependencies:
object-visit "^1.0.0"
+matcher@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca"
+ integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==
+ dependencies:
+ escape-string-regexp "^4.0.0"
+
md5.js@^1.3.4:
version "1.3.5"
resolved "https://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
@@ -5704,6 +7279,11 @@ mime-db@1.44.0, "mime-db@>= 1.43.0 < 2":
resolved "https://registry.npm.taobao.org/mime-db/download/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92"
integrity sha1-+hHF6wrKEzS0Izy01S8QxaYnL5I=
+mime-db@^1.28.0:
+ version "1.45.0"
+ resolved "https://registry.npm.taobao.org/mime-db/download/mime-db-1.45.0.tgz?cache=0&sync_timestamp=1600831210195&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea"
+ integrity sha1-zO7aIczXw6dF66LezVXUtz54eeo=
+
mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24:
version "2.1.27"
resolved "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.27.tgz?cache=0&sync_timestamp=1589682770020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-types%2Fdownload%2Fmime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f"
@@ -5711,12 +7291,12 @@ mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24:
dependencies:
mime-db "1.44.0"
-mime@1.6.0:
+mime@1.6.0, mime@^1.3.4:
version "1.6.0"
resolved "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz?cache=0&sync_timestamp=1590635592890&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
integrity sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=
-mime@^2.4.4:
+mime@^2.4.4, mime@^2.4.6:
version "2.4.6"
resolved "https://registry.npm.taobao.org/mime/download/mime-2.4.6.tgz?cache=0&sync_timestamp=1590635592890&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1"
integrity sha1-5bQHyQ20QvK+tbFiNz0Htpr/pNE=
@@ -5731,6 +7311,18 @@ mimic-fn@^2.1.0:
resolved "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz?cache=0&sync_timestamp=1596095644798&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
integrity sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=
+mimic-response@^1.0.0, mimic-response@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
+ integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
+
+min-document@^2.19.0:
+ version "2.19.0"
+ resolved "https://registry.npm.taobao.org/min-document/download/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
+ integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=
+ dependencies:
+ dom-walk "^0.1.0"
+
mini-css-extract-plugin@^0.9.0:
version "0.9.0"
resolved "https://registry.npm.taobao.org/mini-css-extract-plugin/download/mini-css-extract-plugin-0.9.0.tgz?cache=0&sync_timestamp=1599924125927&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmini-css-extract-plugin%2Fdownload%2Fmini-css-extract-plugin-0.9.0.tgz#47f2cf07aa165ab35733b1fc97d4c46c0564339e"
@@ -5760,8 +7352,8 @@ minimatch@^3.0.4:
minimist@^1.2.0, minimist@^1.2.5:
version "1.2.5"
- resolved "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz?cache=0&sync_timestamp=1589682820731&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimist%2Fdownload%2Fminimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
- integrity sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
+ integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
minipass-collect@^1.0.2:
version "1.0.2"
@@ -5791,6 +7383,14 @@ minipass@^3.0.0, minipass@^3.1.1:
dependencies:
yallist "^4.0.0"
+minizlib@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.npm.taobao.org/minizlib/download/minizlib-2.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminizlib%2Fdownload%2Fminizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
+ integrity sha1-6Q00Zrogm5MkUVCKEc49NjIUWTE=
+ dependencies:
+ minipass "^3.0.0"
+ yallist "^4.0.0"
+
mississippi@^3.0.0:
version "3.0.0"
resolved "https://registry.npm.taobao.org/mississippi/download/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
@@ -5820,13 +7420,23 @@ mixin-deep@^1.2.0:
for-in "^1.0.2"
is-extendable "^1.0.1"
-mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1:
+mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.4, mkdirp@^0.5.5, mkdirp@~0.5.1:
version "0.5.5"
resolved "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz?cache=0&sync_timestamp=1589682820707&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
integrity sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=
dependencies:
minimist "^1.2.5"
+mkdirp@^1.0.3, mkdirp@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npm.taobao.org/mkdirp/download/mkdirp-1.0.4.tgz?cache=0&sync_timestamp=1589682820707&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
+ integrity sha1-PrXtYmInVteaXw4qIh3+utdcL34=
+
+modify-filename@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npm.taobao.org/modify-filename/download/modify-filename-1.1.0.tgz#9a2dec83806fbb2d975f22beec859ca26b393aa1"
+ integrity sha1-mi3sg4Bvuy2XXyK+7IWcoms5OqE=
+
move-concurrently@^1.0.1:
version "1.0.1"
resolved "https://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
@@ -5839,9 +7449,14 @@ move-concurrently@^1.0.1:
rimraf "^2.5.4"
run-queue "^1.0.3"
+mri@1.1.4:
+ version "1.1.4"
+ resolved "https://registry.npm.taobao.org/mri/download/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a"
+ integrity sha1-fLHdG5tAkF8frAU6viW2cg9EdEo=
+
ms@2.0.0:
version "2.0.0"
- resolved "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
ms@2.1.1:
@@ -5851,8 +7466,8 @@ ms@2.1.1:
ms@2.1.2, ms@^2.1.1:
version "2.1.2"
- resolved "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
- integrity sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
multicast-dns-service-types@^1.1.0:
version "1.1.0"
@@ -5918,6 +7533,11 @@ neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1, neo-async@^2.6.2:
resolved "https://registry.npm.taobao.org/neo-async/download/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
integrity sha1-tKr7k+OustgXTKU88WOrfXMIMF8=
+netmask@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.npm.taobao.org/netmask/download/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35"
+ integrity sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=
+
nice-try@^1.0.4:
version "1.0.5"
resolved "https://registry.npm.taobao.org/nice-try/download/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
@@ -5978,7 +7598,7 @@ node-releases@^1.1.61:
resolved "https://registry.npm.taobao.org/node-releases/download/node-releases-1.1.61.tgz?cache=0&sync_timestamp=1599612925853&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-releases%2Fdownload%2Fnode-releases-1.1.61.tgz#707b0fca9ce4e11783612ba4a2fcba09047af16e"
integrity sha1-cHsPypzk4ReDYSukovy6CQR68W4=
-normalize-package-data@^2.5.0:
+normalize-package-data@^2.3.2, normalize-package-data@^2.5.0:
version "2.5.0"
resolved "https://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
integrity sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=
@@ -6025,6 +7645,19 @@ normalize-url@^3.0.0:
resolved "https://registry.npm.taobao.org/normalize-url/download/normalize-url-3.3.0.tgz?cache=0&sync_timestamp=1596373165623&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-url%2Fdownload%2Fnormalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559"
integrity sha1-suHE3E98bVd0PfczpPWXjRhlBVk=
+normalize-url@^4.1.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129"
+ integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==
+
+npm-conf@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9"
+ integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==
+ dependencies:
+ config-chain "^1.1.11"
+ pify "^3.0.0"
+
npm-run-path@^2.0.0:
version "2.0.2"
resolved "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
@@ -6056,6 +7689,11 @@ num2fraction@^1.2.2:
resolved "https://registry.npm.taobao.org/num2fraction/download/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz?cache=0&sync_timestamp=1589682839339&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnumber-is-nan%2Fdownload%2Fnumber-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
oauth-sign@~0.9.0:
version "0.9.0"
resolved "https://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz?cache=0&sync_timestamp=1589682811909&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Foauth-sign%2Fdownload%2Foauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
@@ -6145,6 +7783,11 @@ obuf@^1.0.0, obuf@^1.1.2:
resolved "https://registry.npm.taobao.org/obuf/download/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
integrity sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4=
+omggif@^1.0.9:
+ version "1.0.10"
+ resolved "https://registry.npm.taobao.org/omggif/download/omggif-1.0.10.tgz#ddaaf90d4a42f532e9e7cb3a95ecdd47f17c7b19"
+ integrity sha1-3ar5DUpC9TLp58s6lezdR/F8exk=
+
on-finished@~2.3.0:
version "2.3.0"
resolved "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
@@ -6202,7 +7845,7 @@ opn@^5.5.0:
dependencies:
is-wsl "^1.1.0"
-optionator@^0.8.3:
+optionator@^0.8.1, optionator@^0.8.3:
version "0.8.3"
resolved "https://registry.npm.taobao.org/optionator/download/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
integrity sha1-hPodA2/p08fiHZmIS2ARZ+yPtJU=
@@ -6238,11 +7881,23 @@ os-browserify@^0.3.0:
resolved "https://registry.npm.taobao.org/os-browserify/download/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
+os-locale@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npm.taobao.org/os-locale/download/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
+ integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=
+ dependencies:
+ lcid "^1.0.0"
+
os-tmpdir@~1.0.2:
version "1.0.2"
resolved "https://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+p-cancelable@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc"
+ integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==
+
p-finally@^1.0.0:
version "1.0.0"
resolved "https://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
@@ -6260,6 +7915,13 @@ p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.2.1, p-limit@^2.3.0:
dependencies:
p-try "^2.0.0"
+p-limit@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.npm.taobao.org/p-limit/download/p-limit-3.0.2.tgz#1664e010af3cadc681baafd3e2a437be7b0fb5fe"
+ integrity sha1-FmTgEK88rcaBuq/T4qQ3vnsPtf4=
+ dependencies:
+ p-try "^2.0.0"
+
p-locate@^3.0.0:
version "3.0.0"
resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
@@ -6274,6 +7936,11 @@ p-locate@^4.1.0:
dependencies:
p-limit "^2.2.0"
+p-map@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.npm.taobao.org/p-map/download/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
+ integrity sha1-5OlPMR6rvIYzoeeZCBZfyiYkG2s=
+
p-map@^2.0.0:
version "2.1.0"
resolved "https://registry.npm.taobao.org/p-map/download/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
@@ -6286,6 +7953,13 @@ p-map@^3.0.0:
dependencies:
aggregate-error "^3.0.0"
+p-map@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npm.taobao.org/p-map/download/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
+ integrity sha1-uy+Vpe2i7BaOySdOBqdHw+KQTSs=
+ dependencies:
+ aggregate-error "^3.0.0"
+
p-retry@^3.0.1:
version "3.0.1"
resolved "https://registry.npm.taobao.org/p-retry/download/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328"
@@ -6298,7 +7972,41 @@ p-try@^2.0.0:
resolved "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
integrity sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=
-pako@~1.0.5:
+pac-proxy-agent@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npm.taobao.org/pac-proxy-agent/download/pac-proxy-agent-4.1.0.tgz#66883eeabadc915fc5e95457324cb0f0ac78defb"
+ integrity sha1-Zog+6rrckV/F6VRXMkyw8Kx43vs=
+ dependencies:
+ "@tootallnate/once" "1"
+ agent-base "6"
+ debug "4"
+ get-uri "3"
+ http-proxy-agent "^4.0.1"
+ https-proxy-agent "5"
+ pac-resolver "^4.1.0"
+ raw-body "^2.2.0"
+ socks-proxy-agent "5"
+
+pac-resolver@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npm.taobao.org/pac-resolver/download/pac-resolver-4.1.0.tgz#4b12e7d096b255a3b84e53f6831f32e9c7e5fe95"
+ integrity sha1-SxLn0JayVaO4TlP2gx8y6cfl/pU=
+ dependencies:
+ degenerator "^2.2.0"
+ ip "^1.1.5"
+ netmask "^1.0.6"
+
+package-json@^6.3.0:
+ version "6.5.0"
+ resolved "https://registry.npm.taobao.org/package-json/download/package-json-6.5.0.tgz?cache=0&sync_timestamp=1589683698535&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpackage-json%2Fdownload%2Fpackage-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0"
+ integrity sha1-b+7ayjXnVyWHbQsOZJdGl/7RRbA=
+ dependencies:
+ got "^9.6.0"
+ registry-auth-token "^4.0.0"
+ registry-url "^5.0.0"
+ semver "^6.2.0"
+
+pako@^1.0.5, pako@~1.0.2, pako@~1.0.5:
version "1.0.11"
resolved "https://registry.npm.taobao.org/pako/download/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
integrity sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8=
@@ -6337,6 +8045,36 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5:
pbkdf2 "^3.0.3"
safe-buffer "^5.1.1"
+parse-bmfont-ascii@^1.0.3:
+ version "1.0.6"
+ resolved "https://registry.npm.taobao.org/parse-bmfont-ascii/download/parse-bmfont-ascii-1.0.6.tgz#11ac3c3ff58f7c2020ab22769079108d4dfa0285"
+ integrity sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=
+
+parse-bmfont-binary@^1.0.5:
+ version "1.0.6"
+ resolved "https://registry.npm.taobao.org/parse-bmfont-binary/download/parse-bmfont-binary-1.0.6.tgz#d038b476d3e9dd9db1e11a0b0e53a22792b69006"
+ integrity sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=
+
+parse-bmfont-xml@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.npm.taobao.org/parse-bmfont-xml/download/parse-bmfont-xml-1.1.4.tgz#015319797e3e12f9e739c4d513872cd2fa35f389"
+ integrity sha1-AVMZeX4+EvnnOcTVE4cs0vo184k=
+ dependencies:
+ xml-parse-from-string "^1.0.0"
+ xml2js "^0.4.5"
+
+parse-headers@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.npm.taobao.org/parse-headers/download/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515"
+ integrity sha1-Xo51Ejg9FAugLwx6qfSbQ5nJJRU=
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz?cache=0&sync_timestamp=1598129182781&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+ dependencies:
+ error-ex "^1.2.0"
+
parse-json@^4.0.0:
version "4.0.0"
resolved "https://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz?cache=0&sync_timestamp=1598129182781&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
@@ -6409,7 +8147,7 @@ path-is-absolute@^1.0.0:
resolved "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
-path-is-inside@^1.0.2:
+path-is-inside@^1.0.1, path-is-inside@^1.0.2:
version "1.0.2"
resolved "https://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
@@ -6434,6 +8172,15 @@ path-to-regexp@0.1.7:
resolved "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.npm.taobao.org/path-type/download/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
path-type@^3.0.0:
version "3.0.0"
resolved "https://registry.npm.taobao.org/path-type/download/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
@@ -6457,11 +8204,36 @@ pbkdf2@^3.0.3:
safe-buffer "^5.0.1"
sha.js "^2.4.8"
+pend@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
+ integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
+
performance-now@^2.1.0:
version "2.1.0"
resolved "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
+phantomjs-prebuilt@^2.1.14:
+ version "2.1.16"
+ resolved "https://registry.npm.taobao.org/phantomjs-prebuilt/download/phantomjs-prebuilt-2.1.16.tgz#efd212a4a3966d3647684ea8ba788549be2aefef"
+ integrity sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=
+ dependencies:
+ es6-promise "^4.0.3"
+ extract-zip "^1.6.5"
+ fs-extra "^1.0.0"
+ hasha "^2.2.0"
+ kew "^0.7.0"
+ progress "^1.1.8"
+ request "^2.81.0"
+ request-progress "^2.0.1"
+ which "^1.2.10"
+
+phin@^2.9.1:
+ version "2.9.3"
+ resolved "https://registry.npm.taobao.org/phin/download/phin-2.9.3.tgz#f9b6ac10a035636fb65dfc576aaaa17b8743125c"
+ integrity sha1-+basEKA1Y2+2XfxXaqqhe4dDElw=
+
picomatch@^2.0.4, picomatch@^2.2.1:
version "2.2.2"
resolved "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
@@ -6474,7 +8246,7 @@ pify@^2.0.0:
pify@^3.0.0:
version "3.0.0"
- resolved "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
pify@^4.0.1:
@@ -6494,6 +8266,13 @@ pinkie@^2.0.0:
resolved "https://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+pixelmatch@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.npm.taobao.org/pixelmatch/download/pixelmatch-4.0.2.tgz?cache=0&sync_timestamp=1593602853981&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpixelmatch%2Fdownload%2Fpixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854"
+ integrity sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=
+ dependencies:
+ pngjs "^3.0.0"
+
pkg-dir@^1.0.0:
version "1.0.0"
resolved "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
@@ -6533,6 +8312,21 @@ plyr@^3.6.2:
rangetouch "^2.0.1"
url-polyfill "^1.1.8"
+pn@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.npm.taobao.org/pn/download/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb"
+ integrity sha1-4vTO8OIZ9GPBeas3Rj5OHs3Muvs=
+
+pngjs-nozlib@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npm.taobao.org/pngjs-nozlib/download/pngjs-nozlib-1.0.0.tgz#9e64d602cfe9cce4d9d5997d0687429a73f0b7d7"
+ integrity sha1-nmTWAs/pzOTZ1Zl9BodCmnPwt9c=
+
+pngjs@^3.0.0, pngjs@^3.3.3:
+ version "3.4.0"
+ resolved "https://registry.npm.taobao.org/pngjs/download/pngjs-3.4.0.tgz?cache=0&sync_timestamp=1603551107900&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpngjs%2Fdownload%2Fpngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f"
+ integrity sha1-mcp9clll+2VYFOr2XzjxK72/VV8=
+
pnp-webpack-plugin@^1.6.4:
version "1.6.4"
resolved "https://registry.npm.taobao.org/pnp-webpack-plugin/download/pnp-webpack-plugin-1.6.4.tgz?cache=0&sync_timestamp=1589684269502&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpnp-webpack-plugin%2Fdownload%2Fpnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149"
@@ -6540,7 +8334,7 @@ pnp-webpack-plugin@^1.6.4:
dependencies:
ts-pnp "^1.1.6"
-portfinder@^1.0.26:
+portfinder@^1.0.16, portfinder@^1.0.26:
version "1.0.28"
resolved "https://registry.npm.taobao.org/portfinder/download/portfinder-1.0.28.tgz?cache=0&sync_timestamp=1596018176291&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fportfinder%2Fdownload%2Fportfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778"
integrity sha1-Z8RiKFK9U3TdHdkA93n1NGL6x3g=
@@ -6955,6 +8749,11 @@ prepend-http@^1.0.0:
resolved "https://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
+prepend-http@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
+ integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=
+
prettier@2.1.2:
version "2.1.2"
resolved "https://registry.npm.taobao.org/prettier/download/prettier-2.1.2.tgz?cache=0&sync_timestamp=1600215482255&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-2.1.2.tgz#3050700dae2e4c8b67c4c3f666cdb8af405e1ce5"
@@ -6980,15 +8779,25 @@ pretty-error@^2.0.2:
process-nextick-args@~2.0.0:
version "2.0.1"
- resolved "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
- integrity sha1-eCDZsWEgzFXKmud5JoCufbptf+I=
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
process@^0.11.10:
version "0.11.10"
resolved "https://registry.npm.taobao.org/process/download/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
-progress@^2.0.0:
+process@~0.5.1:
+ version "0.5.2"
+ resolved "https://registry.npm.taobao.org/process/download/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf"
+ integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=
+
+progress@^1.1.8:
+ version "1.1.8"
+ resolved "https://registry.npm.taobao.org/progress/download/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
+ integrity sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=
+
+progress@^2.0.0, progress@^2.0.3:
version "2.0.3"
resolved "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
integrity sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=
@@ -6998,6 +8807,11 @@ promise-inflight@^1.0.1:
resolved "https://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
+proto-list@~1.2.1:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
+ integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=
+
proxy-addr@~2.0.5:
version "2.0.6"
resolved "https://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf"
@@ -7043,8 +8857,8 @@ pump@^2.0.0:
pump@^3.0.0:
version "3.0.0"
- resolved "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
- integrity sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
dependencies:
end-of-stream "^1.1.0"
once "^1.3.1"
@@ -7058,6 +8872,15 @@ pumpify@^1.3.3:
inherits "^2.0.3"
pump "^2.0.0"
+pumpify@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npm.taobao.org/pumpify/download/pumpify-2.0.1.tgz#abfc7b5a621307c728b551decbbefb51f0e4aa1e"
+ integrity sha1-q/x7WmITB8cotVHey777UfDkqh4=
+ dependencies:
+ duplexify "^4.1.1"
+ inherits "^2.0.3"
+ pump "^3.0.0"
+
punycode@1.3.2:
version "1.3.2"
resolved "https://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz?cache=0&sync_timestamp=1589682803838&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpunycode%2Fdownload%2Fpunycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
@@ -7073,6 +8896,13 @@ punycode@^2.1.0, punycode@^2.1.1:
resolved "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz?cache=0&sync_timestamp=1589682803838&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpunycode%2Fdownload%2Fpunycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
integrity sha1-tYsBCsQMIsVldhbI0sLALHv0eew=
+pupa@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.npm.taobao.org/pupa/download/pupa-2.1.0.tgz?cache=0&sync_timestamp=1603275711092&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpupa%2Fdownload%2Fpupa-2.1.0.tgz#9e4ec587952b5e4f2c06fe577b0e7db97e8ef721"
+ integrity sha1-nk7Fh5UrXk8sBv5Xew59uX6O9yE=
+ dependencies:
+ escape-goat "^2.0.0"
+
q@^1.1.2:
version "1.5.1"
resolved "https://registry.npm.taobao.org/q/download/q-1.5.1.tgz?cache=0&sync_timestamp=1589682817412&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fq%2Fdownload%2Fq-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
@@ -7146,6 +8976,54 @@ raw-body@2.4.0:
iconv-lite "0.4.24"
unpipe "1.0.0"
+raw-body@^2.2.0:
+ version "2.4.1"
+ resolved "https://registry.npm.taobao.org/raw-body/download/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c"
+ integrity sha1-MKyC+Yu1rowVLmcUnayNVRU7Fow=
+ dependencies:
+ bytes "3.1.0"
+ http-errors "1.7.3"
+ iconv-lite "0.4.24"
+ unpipe "1.0.0"
+
+rc@^1.2.8:
+ version "1.2.8"
+ resolved "https://registry.npm.taobao.org/rc/download/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+ integrity sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0=
+ dependencies:
+ deep-extend "^0.6.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+read-config-file@6.0.0:
+ version "6.0.0"
+ resolved "https://registry.npm.taobao.org/read-config-file/download/read-config-file-6.0.0.tgz#224b5dca6a5bdc1fb19e63f89f342680efdb9299"
+ integrity sha1-Iktdympb3B+xnmP4nzQmgO/bkpk=
+ dependencies:
+ dotenv "^8.2.0"
+ dotenv-expand "^5.1.0"
+ js-yaml "^3.13.1"
+ json5 "^2.1.2"
+ lazy-val "^1.0.4"
+
+read-pkg-up@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.npm.taobao.org/read-pkg/download/read-pkg-1.1.0.tgz?cache=0&sync_timestamp=1589682810106&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg%2Fdownload%2Fread-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
read-pkg@^5.1.1:
version "5.2.0"
resolved "https://registry.npm.taobao.org/read-pkg/download/read-pkg-5.2.0.tgz?cache=0&sync_timestamp=1589682810106&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg%2Fdownload%2Fread-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc"
@@ -7169,7 +9047,17 @@ read-pkg@^5.1.1:
string_decoder "~1.1.1"
util-deprecate "~1.0.1"
-readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0:
+readable-stream@1.1.x:
+ version "1.1.14"
+ resolved "https://registry.npm.taobao.org/readable-stream/download/readable-stream-1.1.14.tgz?cache=0&sync_timestamp=1589682741447&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
+ integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk=
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+readable-stream@^3.0.0, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0:
version "3.6.0"
resolved "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz?cache=0&sync_timestamp=1589682741447&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
integrity sha1-M3u9o63AcGvT4CRCaihtS0sskZg=
@@ -7194,6 +9082,13 @@ readdirp@~3.4.0:
dependencies:
picomatch "^2.2.1"
+readdirp@~3.5.0:
+ version "3.5.0"
+ resolved "https://registry.npm.taobao.org/readdirp/download/readdirp-3.5.0.tgz?cache=0&sync_timestamp=1602584331621&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freaddirp%2Fdownload%2Freaddirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e"
+ integrity sha1-m6dMAZsV02UnjS6Ru4xI17TULJ4=
+ dependencies:
+ picomatch "^2.2.1"
+
regenerate-unicode-properties@^8.2.0:
version "8.2.0"
resolved "https://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec"
@@ -7211,7 +9106,7 @@ regenerator-runtime@^0.11.0:
resolved "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz?cache=0&sync_timestamp=1595456311465&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
integrity sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=
-regenerator-runtime@^0.13.4:
+regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4:
version "0.13.7"
resolved "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.7.tgz?cache=0&sync_timestamp=1595456311465&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55"
integrity sha1-ysLazIoepnX+qrrriugziYrkb1U=
@@ -7261,6 +9156,20 @@ register-service-worker@^1.7.1:
resolved "https://registry.npm.taobao.org/register-service-worker/download/register-service-worker-1.7.1.tgz#6308347ac6c0af0f6c0b22ea5d59d25e836bc932"
integrity sha1-Ywg0esbArw9sCyLqXVnSXoNryTI=
+registry-auth-token@^4.0.0:
+ version "4.2.0"
+ resolved "https://registry.npm.taobao.org/registry-auth-token/download/registry-auth-token-4.2.0.tgz?cache=0&sync_timestamp=1594638370094&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregistry-auth-token%2Fdownload%2Fregistry-auth-token-4.2.0.tgz#1d37dffda72bbecd0f581e4715540213a65eb7da"
+ integrity sha1-HTff/acrvs0PWB5HFVQCE6Zet9o=
+ dependencies:
+ rc "^1.2.8"
+
+registry-url@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.npm.taobao.org/registry-url/download/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009"
+ integrity sha1-6YM0tQ1UNLgRNrROxjjZwgCcUAk=
+ dependencies:
+ rc "^1.2.8"
+
regjsgen@^0.5.1:
version "0.5.2"
resolved "https://registry.npm.taobao.org/regjsgen/download/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733"
@@ -7304,7 +9213,14 @@ repeat-string@^1.6.1:
resolved "https://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
-request@^2.88.2:
+request-progress@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npm.taobao.org/request-progress/download/request-progress-2.0.1.tgz#5d36bb57961c673aa5b788dbc8141fdf23b44e08"
+ integrity sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=
+ dependencies:
+ throttleit "^1.0.0"
+
+request@^2.81.0, request@^2.88.2:
version "2.88.2"
resolved "https://registry.npm.taobao.org/request/download/request-2.88.2.tgz?cache=0&sync_timestamp=1589682741998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frequest%2Fdownload%2Frequest-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
integrity sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM=
@@ -7335,6 +9251,11 @@ require-directory@^2.1.1:
resolved "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+require-main-filename@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
+ integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
+
require-main-filename@^2.0.0:
version "2.0.0"
resolved "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
@@ -7374,6 +9295,13 @@ resolve@^1.10.0, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.8.1:
dependencies:
path-parse "^1.0.6"
+responselike@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7"
+ integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=
+ dependencies:
+ lowercase-keys "^1.0.0"
+
restore-cursor@^2.0.0:
version "2.0.0"
resolved "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
@@ -7417,13 +9345,20 @@ rimraf@2.6.3:
dependencies:
glob "^7.1.3"
-rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3, rimraf@^2.7.1:
+rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3, rimraf@^2.7.1:
version "2.7.1"
resolved "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz?cache=0&sync_timestamp=1589682814592&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
integrity sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=
dependencies:
glob "^7.1.3"
+rimraf@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.npm.taobao.org/rimraf/download/rimraf-3.0.2.tgz?cache=0&sync_timestamp=1589682814592&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho=
+ dependencies:
+ glob "^7.1.3"
+
ripemd160@^2.0.0, ripemd160@^2.0.1:
version "2.0.2"
resolved "https://registry.npm.taobao.org/ripemd160/download/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
@@ -7432,6 +9367,18 @@ ripemd160@^2.0.0, ripemd160@^2.0.1:
hash-base "^3.0.0"
inherits "^2.0.1"
+roarr@^2.15.3:
+ version "2.15.4"
+ resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd"
+ integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==
+ dependencies:
+ boolean "^3.0.1"
+ detect-node "^2.0.4"
+ globalthis "^1.0.1"
+ json-stringify-safe "^5.0.1"
+ semver-compare "^1.0.0"
+ sprintf-js "^1.1.2"
+
run-async@^2.4.0:
version "2.4.1"
resolved "https://registry.npm.taobao.org/run-async/download/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
@@ -7453,8 +9400,8 @@ rxjs@^6.6.0:
safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2"
- resolved "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz?cache=0&sync_timestamp=1589682795646&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
- integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0=
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0:
version "5.2.1"
@@ -7468,11 +9415,18 @@ safe-regex@^1.1.0:
dependencies:
ret "~0.1.10"
-"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
+"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
version "2.1.2"
resolved "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz?cache=0&sync_timestamp=1589682784154&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafer-buffer%2Fdownload%2Fsafer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=
+sanitize-filename@^1.6.2, sanitize-filename@^1.6.3:
+ version "1.6.3"
+ resolved "https://registry.npm.taobao.org/sanitize-filename/download/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378"
+ integrity sha1-dV69dSBFkxl34wsgJdNA18kJA3g=
+ dependencies:
+ truncate-utf8-bytes "^1.0.0"
+
sass-loader@^10.0.2:
version "10.0.2"
resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.0.2.tgz#c7b73010848b264792dd45372eea0b87cba4401e"
@@ -7491,7 +9445,7 @@ sass@^1.26.11:
dependencies:
chokidar ">=2.0.0 <4.0.0"
-sax@~1.2.4:
+sax@>=0.6.0, sax@^1.2.4, sax@~1.2.4:
version "1.2.4"
resolved "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha1-KBYjTiN4vdxOU1T6tcqold9xANk=
@@ -7528,9 +9482,16 @@ selfsigned@^1.10.7:
semver-compare@^1.0.0:
version "1.0.0"
- resolved "https://registry.npm.taobao.org/semver-compare/download/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
+ resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
+semver-diff@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.npm.taobao.org/semver-diff/download/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b"
+ integrity sha1-Bfd85Z8yXgDicGr9Z7tQbdscoys=
+ dependencies:
+ semver "^6.3.0"
+
semver-regex@^2.0.0:
version "2.0.0"
resolved "https://registry.npm.taobao.org/semver-regex/download/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338"
@@ -7546,12 +9507,12 @@ semver@7.0.0:
resolved "https://registry.npm.taobao.org/semver/download/semver-7.0.0.tgz?cache=0&sync_timestamp=1589682805026&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
integrity sha1-XzyjV2HkfgWyBsba/yz4FPAxa44=
-semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.3.0:
+semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0:
version "6.3.0"
resolved "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1589682805026&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=
-semver@^7.3.2:
+semver@^7.2.1, semver@^7.3.2:
version "7.3.2"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
@@ -7575,6 +9536,13 @@ send@0.17.1:
range-parser "~1.2.1"
statuses "~1.5.0"
+serialize-error@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18"
+ integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==
+ dependencies:
+ type-fest "^0.13.1"
+
serialize-javascript@^4.0.0:
version "4.0.0"
resolved "https://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-4.0.0.tgz?cache=0&sync_timestamp=1599740650381&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fserialize-javascript%2Fdownload%2Fserialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa"
@@ -7610,6 +9578,11 @@ set-blocking@^2.0.0:
resolved "https://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+set-immediate-shim@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npm.taobao.org/set-immediate-shim/download/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
+ integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=
+
set-value@^2.0.0, set-value@^2.0.1:
version "2.0.1"
resolved "https://registry.npm.taobao.org/set-value/download/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
@@ -7657,6 +9630,11 @@ shebang-command@^2.0.0:
dependencies:
shebang-regex "^3.0.0"
+shebang-loader@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.npm.taobao.org/shebang-loader/download/shebang-loader-0.0.1.tgz#a4000495d44cceefbec63435e7b1698569fa52ec"
+ integrity sha1-pAAEldRMzu++xjQ157FphWn6Uuw=
+
shebang-regex@^1.0.0:
version "1.0.0"
resolved "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
@@ -7708,6 +9686,20 @@ slice-ansi@^2.1.0:
astral-regex "^1.0.0"
is-fullwidth-code-point "^2.0.0"
+slice-ansi@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787"
+ integrity sha1-Md3BCTCht+C2ewjJbC9Jt3p4l4c=
+ dependencies:
+ ansi-styles "^4.0.0"
+ astral-regex "^2.0.0"
+ is-fullwidth-code-point "^3.0.0"
+
+smart-buffer@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npm.taobao.org/smart-buffer/download/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba"
+ integrity sha1-kWBcJdkWUvRmHqacz0XxszHKIbo=
+
snapdragon-node@^2.0.1:
version "2.1.1"
resolved "https://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
@@ -7759,6 +9751,30 @@ sockjs@0.3.20:
uuid "^3.4.0"
websocket-driver "0.6.5"
+socks-proxy-agent@5:
+ version "5.0.0"
+ resolved "https://registry.npm.taobao.org/socks-proxy-agent/download/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60"
+ integrity sha1-fA82Tnsc9KekN+cSU77XLpAEvmA=
+ dependencies:
+ agent-base "6"
+ debug "4"
+ socks "^2.3.3"
+
+socks@^2.3.3:
+ version "2.5.0"
+ resolved "https://registry.npm.taobao.org/socks/download/socks-2.5.0.tgz?cache=0&sync_timestamp=1603686517008&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocks%2Fdownload%2Fsocks-2.5.0.tgz#3a7c286db114f67864a4bd8b4207a91d1db3d6db"
+ integrity sha1-OnwobbEU9nhkpL2LQgepHR2z1ts=
+ dependencies:
+ ip "^1.1.5"
+ smart-buffer "^4.1.0"
+
+sort-keys-length@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npm.taobao.org/sort-keys-length/download/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188"
+ integrity sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=
+ dependencies:
+ sort-keys "^1.0.0"
+
sort-keys@^1.0.0:
version "1.1.2"
resolved "https://registry.npm.taobao.org/sort-keys/download/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
@@ -7782,7 +9798,7 @@ source-map-resolve@^0.5.0:
source-map-url "^0.4.0"
urix "^0.1.0"
-source-map-support@~0.5.12:
+source-map-support@^0.5.19, source-map-support@~0.5.12:
version "0.5.19"
resolved "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.19.tgz?cache=0&sync_timestamp=1589682814927&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-support%2Fdownload%2Fsource-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
integrity sha1-qYti+G3K9PZzmWSMCFKRq56P7WE=
@@ -7866,6 +9882,18 @@ split-string@^3.0.1, split-string@^3.0.2:
dependencies:
extend-shallow "^3.0.0"
+split2@^3.0.0:
+ version "3.2.2"
+ resolved "https://registry.npm.taobao.org/split2/download/split2-3.2.2.tgz?cache=0&sync_timestamp=1598084396596&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsplit2%2Fdownload%2Fsplit2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f"
+ integrity sha1-vyzyo32DgxLCSciSBv16F90SNl8=
+ dependencies:
+ readable-stream "^3.0.0"
+
+sprintf-js@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673"
+ integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==
+
sprintf-js@~1.0.2:
version "1.0.3"
resolved "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
@@ -7901,6 +9929,13 @@ ssri@^7.0.0, ssri@^7.1.0:
figgy-pudding "^3.5.1"
minipass "^3.1.1"
+ssri@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.npm.taobao.org/ssri/download/ssri-8.0.0.tgz#79ca74e21f8ceaeddfcb4b90143c458b8d988808"
+ integrity sha1-ecp04h+M6u3fy0uQFDxFi42YiAg=
+ dependencies:
+ minipass "^3.1.1"
+
stable@^0.1.8:
version "0.1.8"
resolved "https://registry.npm.taobao.org/stable/download/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
@@ -7911,6 +9946,11 @@ stackframe@^1.1.1:
resolved "https://registry.npm.taobao.org/stackframe/download/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303"
integrity sha1-UkKUktY8YuuYmATBFVLj0i53kwM=
+stat-mode@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npm.taobao.org/stat-mode/download/stat-mode-1.0.0.tgz#68b55cb61ea639ff57136f36b216a291800d1465"
+ integrity sha1-aLVcth6mOf9XE282shaikYANFGU=
+
static-extend@^0.1.1:
version "0.1.2"
resolved "https://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
@@ -7956,11 +9996,25 @@ stream-shift@^1.0.0:
resolved "https://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
integrity sha1-1wiCgVWasneEJCebCHfaPDktWj0=
+streamsearch@0.1.2:
+ version "0.1.2"
+ resolved "https://registry.npm.taobao.org/streamsearch/download/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a"
+ integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=
+
strict-uri-encode@^1.0.0:
version "1.1.0"
resolved "https://registry.npm.taobao.org/strict-uri-encode/download/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=
+string-width@^1.0.1, string-width@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
string-width@^2.0.0:
version "2.1.1"
resolved "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
@@ -7978,7 +10032,7 @@ string-width@^3.0.0, string-width@^3.1.0:
is-fullwidth-code-point "^2.0.0"
strip-ansi "^5.1.0"
-string-width@^4.1.0, string-width@^4.2.0:
+string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0:
version "4.2.0"
resolved "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
integrity sha1-lSGCxGzHssMT0VluYjmSvRY7crU=
@@ -8010,10 +10064,15 @@ string_decoder@^1.0.0, string_decoder@^1.1.1:
dependencies:
safe-buffer "~5.2.0"
+string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+ integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
+
string_decoder@~1.1.1:
version "1.1.1"
- resolved "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
- integrity sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
dependencies:
safe-buffer "~5.1.0"
@@ -8054,6 +10113,13 @@ strip-ansi@^6.0.0:
dependencies:
ansi-regex "^5.0.0"
+strip-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npm.taobao.org/strip-bom/download/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
+ dependencies:
+ is-utf8 "^0.2.0"
+
strip-comments@^1.0.2:
version "1.0.2"
resolved "https://registry.npm.taobao.org/strip-comments/download/strip-comments-1.0.2.tgz#82b9c45e7f05873bee53f37168af930aa368679d"
@@ -8082,6 +10148,11 @@ strip-json-comments@^3.0.1:
resolved "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-3.1.1.tgz?cache=0&sync_timestamp=1594567532500&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
integrity sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=
+strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz?cache=0&sync_timestamp=1594567532500&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+ integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
+
stylehacks@^4.0.0:
version "4.0.3"
resolved "https://registry.npm.taobao.org/stylehacks/download/stylehacks-4.0.3.tgz?cache=0&sync_timestamp=1599672034713&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstylehacks%2Fdownload%2Fstylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5"
@@ -8091,6 +10162,13 @@ stylehacks@^4.0.0:
postcss "^7.0.0"
postcss-selector-parser "^3.0.0"
+sumchecker@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42"
+ integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==
+ dependencies:
+ debug "^4.1.0"
+
supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611709087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
@@ -8172,6 +10250,16 @@ svg-tags@^1.0.0:
resolved "https://registry.npm.taobao.org/svg-tags/download/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764"
integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=
+svg2png@4.1.1:
+ version "4.1.1"
+ resolved "https://registry.npm.taobao.org/svg2png/download/svg2png-4.1.1.tgz#6b9e0398aa418778b6436e127a2fb7f00d499c28"
+ integrity sha1-a54DmKpBh3i2Q24Sei+38A1JnCg=
+ dependencies:
+ file-url "^2.0.0"
+ phantomjs-prebuilt "^2.1.14"
+ pn "^1.0.0"
+ yargs "^6.5.0"
+
svgo@^1.0.0:
version "1.3.2"
resolved "https://registry.npm.taobao.org/svgo/download/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167"
@@ -8206,6 +10294,31 @@ tapable@^1.0.0, tapable@^1.1.3:
resolved "https://registry.npm.taobao.org/tapable/download/tapable-1.1.3.tgz?cache=0&sync_timestamp=1600381197118&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftapable%2Fdownload%2Ftapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
integrity sha1-ofzMBrWNth/XpF2i2kT186Pme6I=
+tar@^6.0.2:
+ version "6.0.5"
+ resolved "https://registry.npm.taobao.org/tar/download/tar-6.0.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftar%2Fdownload%2Ftar-6.0.5.tgz#bde815086e10b39f1dcd298e89d596e1535e200f"
+ integrity sha1-vegVCG4Qs58dzSmOidWW4VNeIA8=
+ dependencies:
+ chownr "^2.0.0"
+ fs-minipass "^2.0.0"
+ minipass "^3.0.0"
+ minizlib "^2.1.1"
+ mkdirp "^1.0.3"
+ yallist "^4.0.0"
+
+temp-file@^3.3.7:
+ version "3.3.7"
+ resolved "https://registry.npm.taobao.org/temp-file/download/temp-file-3.3.7.tgz#686885d635f872748e384e871855958470aeb18a"
+ integrity sha1-aGiF1jX4cnSOOE6HGFWVhHCusYo=
+ dependencies:
+ async-exit-hook "^2.0.1"
+ fs-extra "^8.1.0"
+
+term-size@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.npm.taobao.org/term-size/download/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753"
+ integrity sha1-Hxat7f6b3BiADhd2ghc0CG/MZ1M=
+
terser-webpack-plugin@^1.4.3:
version "1.4.5"
resolved "https://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-1.4.5.tgz?cache=0&sync_timestamp=1600531951208&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b"
@@ -8236,7 +10349,22 @@ terser-webpack-plugin@^2.3.6:
terser "^4.6.12"
webpack-sources "^1.4.3"
-terser@^4.1.2, terser@^4.6.12:
+terser-webpack-plugin@^3.0.3:
+ version "3.1.0"
+ resolved "https://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-3.1.0.tgz?cache=0&sync_timestamp=1602701885709&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-3.1.0.tgz#91e6d39571460ed240c0cf69d295bcf30ebf98cb"
+ integrity sha1-kebTlXFGDtJAwM9p0pW88w6/mMs=
+ dependencies:
+ cacache "^15.0.5"
+ find-cache-dir "^3.3.1"
+ jest-worker "^26.2.1"
+ p-limit "^3.0.2"
+ schema-utils "^2.6.6"
+ serialize-javascript "^4.0.0"
+ source-map "^0.6.1"
+ terser "^4.8.0"
+ webpack-sources "^1.4.3"
+
+terser@^4.1.2, terser@^4.6.12, terser@^4.8.0:
version "4.8.0"
resolved "https://registry.npm.taobao.org/terser/download/terser-4.8.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser%2Fdownload%2Fterser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17"
integrity sha1-YwVjQ9fHC7KfOvZlhlpG/gOg3xc=
@@ -8273,7 +10401,28 @@ thread-loader@^2.1.3:
loader-utils "^1.1.0"
neo-async "^2.6.0"
-through2@^2.0.0:
+throttleit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npm.taobao.org/throttleit/download/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c"
+ integrity sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=
+
+through2-filter@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npm.taobao.org/through2-filter/download/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254"
+ integrity sha1-cA54bfI2fCyIzYqlvkz5weeDElQ=
+ dependencies:
+ through2 "~2.0.0"
+ xtend "~4.0.0"
+
+through2-map@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npm.taobao.org/through2-map/download/through2-map-3.0.0.tgz#a6c3026ce63b4898a997d540506b66ffd970f271"
+ integrity sha1-psMCbOY7SJipl9VAUGtm/9lw8nE=
+ dependencies:
+ through2 "~2.0.0"
+ xtend "^4.0.0"
+
+through2@^2.0.0, through2@~2.0.0:
version "2.0.5"
resolved "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
integrity sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=
@@ -8298,11 +10447,21 @@ timers-browserify@^2.0.4:
dependencies:
setimmediate "^1.0.4"
+timm@^1.6.1:
+ version "1.7.1"
+ resolved "https://registry.npm.taobao.org/timm/download/timm-1.7.1.tgz#96bab60c7d45b5a10a8a4d0f0117c6b7e5aff76f"
+ integrity sha1-lrq2DH1FtaEKik0PARfGt+Wv928=
+
timsort@^0.3.0:
version "0.3.0"
resolved "https://registry.npm.taobao.org/timsort/download/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=
+tinycolor2@^1.4.1:
+ version "1.4.2"
+ resolved "https://registry.npm.taobao.org/tinycolor2/download/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803"
+ integrity sha1-P2pNEHGtB2dtf6Ry4frECnGdiAM=
+
tmp@^0.0.33:
version "0.0.33"
resolved "https://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz?cache=0&sync_timestamp=1589684134816&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftmp%2Fdownload%2Ftmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
@@ -8327,6 +10486,11 @@ to-object-path@^0.3.0:
dependencies:
kind-of "^3.0.2"
+to-readable-stream@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771"
+ integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==
+
to-regex-range@^2.1.0:
version "2.1.1"
resolved "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
@@ -8375,6 +10539,13 @@ traverse@^0.6.6:
resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137"
integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=
+truncate-utf8-bytes@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b"
+ integrity sha1-QFkjkJWS1W94pYGENLC3hInKXys=
+ dependencies:
+ utf8-byte-length "^1.0.1"
+
tryer@^1.0.1:
version "1.0.1"
resolved "https://registry.npm.taobao.org/tryer/download/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8"
@@ -8395,6 +10566,11 @@ tslib@^1.9.3:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
+tslib@^2.0.1:
+ version "2.0.3"
+ resolved "https://registry.npm.taobao.org/tslib/download/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c"
+ integrity sha1-jgdBrEX8DCJuWKF7/D5kubxsphw=
+
tty-browserify@0.0.0:
version "0.0.0"
resolved "https://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
@@ -8407,6 +10583,11 @@ tunnel-agent@^0.6.0:
dependencies:
safe-buffer "^5.0.1"
+tunnel@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.npm.taobao.org/tunnel/download/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c"
+ integrity sha1-cvExSzSlsZLbASMk3yzFh8pH+Sw=
+
tweetnacl@^0.14.3, tweetnacl@~0.14.0:
version "0.14.5"
resolved "https://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz?cache=0&sync_timestamp=1589682745749&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftweetnacl%2Fdownload%2Ftweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
@@ -8424,6 +10605,11 @@ type-fest@^0.11.0:
resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1"
integrity sha1-l6vwhyMQ/tiKXEZrJWgVdhReM/E=
+type-fest@^0.13.1:
+ version "0.13.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934"
+ integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==
+
type-fest@^0.6.0:
version "0.6.0"
resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
@@ -8442,9 +10628,16 @@ type-is@~1.6.17, type-is@~1.6.18:
media-typer "0.3.0"
mime-types "~2.1.24"
+typedarray-to-buffer@^3.1.5:
+ version "3.1.5"
+ resolved "https://registry.npm.taobao.org/typedarray-to-buffer/download/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
+ integrity sha1-qX7nqf9CaRufeD/xvFES/j/KkIA=
+ dependencies:
+ is-typedarray "^1.0.0"
+
typedarray@^0.0.6:
version "0.0.6"
- resolved "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
uglify-js@3.4.x:
@@ -8517,10 +10710,22 @@ unique-slug@^2.0.0:
dependencies:
imurmurhash "^0.1.4"
+unique-string@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npm.taobao.org/unique-string/download/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d"
+ integrity sha1-OcZFH4GvsnSd4rIz4/fF6IQ72J0=
+ dependencies:
+ crypto-random-string "^2.0.0"
+
universalify@^0.1.0:
version "0.1.2"
- resolved "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
- integrity sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+ integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+
+universalify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npm.taobao.org/universalify/download/universalify-1.0.0.tgz?cache=0&sync_timestamp=1603179967633&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funiversalify%2Fdownload%2Funiversalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d"
+ integrity sha1-thodoXPoQ1sv48Z9Kbmt+FlL0W0=
unpipe@1.0.0, unpipe@~1.0.0:
version "1.0.0"
@@ -8540,11 +10745,56 @@ unset-value@^1.0.0:
has-value "^0.3.1"
isobject "^3.0.0"
+unused-filename@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npm.taobao.org/unused-filename/download/unused-filename-2.1.0.tgz#33719c4e8d9644f32d2dec1bc8525c6aaeb4ba51"
+ integrity sha1-M3GcTo2WRPMtLewbyFJcaq60ulE=
+ dependencies:
+ modify-filename "^1.1.0"
+ path-exists "^4.0.0"
+
+unzip-crx-3@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.npm.taobao.org/unzip-crx-3/download/unzip-crx-3-0.2.0.tgz#d5324147b104a8aed9ae8639c95521f6f7cda292"
+ integrity sha1-1TJBR7EEqK7ZroY5yVUh9vfNopI=
+ dependencies:
+ jszip "^3.1.0"
+ mkdirp "^0.5.1"
+ yaku "^0.16.6"
+
+unzip-crx@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.npm.taobao.org/unzip-crx/download/unzip-crx-0.2.0.tgz#4c0baa8bdac756256754beca7843c13d7b858c18"
+ integrity sha1-TAuqi9rHViVnVL7KeEPBPXuFjBg=
+ dependencies:
+ jszip "^3.1.0"
+ mkdirp "^0.5.1"
+ yaku "^0.16.6"
+
upath@^1.1.1:
version "1.2.0"
resolved "https://registry.npm.taobao.org/upath/download/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
integrity sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ=
+update-notifier@^4.1.1:
+ version "4.1.3"
+ resolved "https://registry.npm.taobao.org/update-notifier/download/update-notifier-4.1.3.tgz?cache=0&sync_timestamp=1601377423138&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupdate-notifier%2Fdownload%2Fupdate-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3"
+ integrity sha1-vobuE+jOSPtQBD/3IFe1vVmOHqM=
+ dependencies:
+ boxen "^4.2.0"
+ chalk "^3.0.0"
+ configstore "^5.0.1"
+ has-yarn "^2.1.0"
+ import-lazy "^2.1.0"
+ is-ci "^2.0.0"
+ is-installed-globally "^0.3.1"
+ is-npm "^4.0.0"
+ is-yarn-global "^0.3.0"
+ latest-version "^5.0.0"
+ pupa "^2.0.1"
+ semver-diff "^3.1.1"
+ xdg-basedir "^4.0.0"
+
upper-case@^1.1.1:
version "1.1.3"
resolved "https://registry.npm.taobao.org/upper-case/download/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
@@ -8571,6 +10821,13 @@ url-loader@^2.2.0:
mime "^2.4.4"
schema-utils "^2.5.0"
+url-parse-lax@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c"
+ integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=
+ dependencies:
+ prepend-http "^2.0.0"
+
url-parse@^1.4.3:
version "1.4.7"
resolved "https://registry.npm.taobao.org/url-parse/download/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278"
@@ -8604,9 +10861,21 @@ use@^3.1.0:
resolved "https://registry.npm.taobao.org/use/download/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
integrity sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=
+utf8-byte-length@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61"
+ integrity sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=
+
+utif@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npm.taobao.org/utif/download/utif-2.0.1.tgz#9e1582d9bbd20011a6588548ed3266298e711759"
+ integrity sha1-nhWC2bvSABGmWIVI7TJmKY5xF1k=
+ dependencies:
+ pako "^1.0.5"
+
util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
version "1.0.2"
- resolved "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
util.promisify@1.0.0:
@@ -8703,6 +10972,37 @@ vue-class-component@^7.1.0:
resolved "https://registry.yarnpkg.com/vue-class-component/-/vue-class-component-7.2.6.tgz#8471e037b8e4762f5a464686e19e5afc708502e4"
integrity sha512-+eaQXVrAm/LldalI272PpDe3+i4mPis0ORiMYxF6Ae4hyuCh15W8Idet7wPUEs4N4YptgFHGys4UrgNQOMyO6w==
+vue-cli-plugin-electron-builder@~2.0.0-rc.4:
+ version "2.0.0-rc.5"
+ resolved "https://registry.npm.taobao.org/vue-cli-plugin-electron-builder/download/vue-cli-plugin-electron-builder-2.0.0-rc.5.tgz#87cd8d09877f5f3ae339abc0bedc47d7d2b733ac"
+ integrity sha1-h82NCYd/XzrjOavAvtxH19K3M6w=
+ dependencies:
+ "@vue/cli-shared-utils" "^4.5.6"
+ chokidar "^3.0.2"
+ electron-builder "^22.2.0"
+ execa "^4.0.0"
+ friendly-errors-webpack-plugin "^1.7.0"
+ fs-extra "^9.0.1"
+ lodash.merge "^4.6.1"
+ portfinder "^1.0.16"
+ pumpify "^2.0.1"
+ semver "^7.3.2"
+ shebang-loader "^0.0.1"
+ split2 "^3.0.0"
+ terser-webpack-plugin "^3.0.3"
+ through2-filter "^3.0.0"
+ through2-map "^3.0.0"
+ unzip-crx "^0.2.0"
+ webpack "^4.18.0"
+ webpack-chain "^6.0.0"
+ webpack-merge "^4.2.2"
+ yargs "^15.3.1"
+
+vue-electron@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.npm.taobao.org/vue-electron/download/vue-electron-1.0.6.tgz#e798e03180b8933539defe31f92e53b9242b9406"
+ integrity sha1-55jgMYC4kzU53v4x+S5TuSQrlAY=
+
vue-eslint-parser@^7.0.0:
version "7.1.0"
resolved "https://registry.npm.taobao.org/vue-eslint-parser/download/vue-eslint-parser-7.1.0.tgz?cache=0&sync_timestamp=1589684321779&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-eslint-parser%2Fdownload%2Fvue-eslint-parser-7.1.0.tgz#9cdbcc823e656b087507a1911732b867ac101e83"
@@ -8855,7 +11155,7 @@ webpack-bundle-analyzer@^3.8.0:
opener "^1.5.1"
ws "^6.0.0"
-webpack-chain@^6.4.0:
+webpack-chain@^6.0.0, webpack-chain@^6.4.0:
version "6.5.1"
resolved "https://registry.npm.taobao.org/webpack-chain/download/webpack-chain-6.5.1.tgz?cache=0&sync_timestamp=1595814928534&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-chain%2Fdownload%2Fwebpack-chain-6.5.1.tgz#4f27284cbbb637e3c8fbdef43eef588d4d861206"
integrity sha1-TycoTLu2N+PI+970Pu9YjU2GEgY=
@@ -8936,7 +11236,7 @@ webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-
source-list-map "^2.0.0"
source-map "~0.6.1"
-webpack@^4.0.0:
+webpack@^4.0.0, webpack@^4.18.0:
version "4.44.2"
resolved "https://registry.npm.taobao.org/webpack/download/webpack-4.44.2.tgz?cache=0&sync_timestamp=1600634845383&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack%2Fdownload%2Fwebpack-4.44.2.tgz#6bfe2b0af055c8b2d1e90ed2cd9363f841266b72"
integrity sha1-a/4rCvBVyLLR6Q7SzZNj+EEma3I=
@@ -8986,6 +11286,11 @@ websocket-extensions@>=0.1.1:
resolved "https://registry.npm.taobao.org/websocket-extensions/download/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42"
integrity sha1-f4RzvIOd/YdgituV1+sHUhFXikI=
+which-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npm.taobao.org/which-module/download/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
+ integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=
+
which-module@^2.0.0:
version "2.0.0"
resolved "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
@@ -8996,7 +11301,7 @@ which-pm-runs@^1.0.0:
resolved "https://registry.npm.taobao.org/which-pm-runs/download/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb"
integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=
-which@^1.2.9:
+which@^1.2.10, which@^1.2.9:
version "1.3.1"
resolved "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz?cache=0&sync_timestamp=1589682812246&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
integrity sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=
@@ -9010,6 +11315,13 @@ which@^2.0.1:
dependencies:
isexe "^2.0.0"
+widest-line@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.npm.taobao.org/widest-line/download/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca"
+ integrity sha1-gpIzO79my0X/DeFgOxNreuFJbso=
+ dependencies:
+ string-width "^4.0.0"
+
word-wrap@~1.2.3:
version "1.2.3"
resolved "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz?cache=0&sync_timestamp=1589683603678&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fword-wrap%2Fdownload%2Fword-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
@@ -9157,6 +11469,14 @@ worker-farm@^1.7.0:
dependencies:
errno "~0.1.7"
+wrap-ansi@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
+ integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+
wrap-ansi@^5.1.0:
version "5.1.0"
resolved "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
@@ -9175,11 +11495,30 @@ wrap-ansi@^6.2.0:
string-width "^4.1.0"
strip-ansi "^6.0.0"
+wrap-ansi@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+ integrity sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM=
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
wrappy@1:
version "1.0.2"
- resolved "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+write-file-atomic@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
+ integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
+ dependencies:
+ imurmurhash "^0.1.4"
+ is-typedarray "^1.0.0"
+ signal-exit "^3.0.2"
+ typedarray-to-buffer "^3.1.5"
+
write@1.0.3:
version "1.0.3"
resolved "https://registry.npm.taobao.org/write/download/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
@@ -9194,16 +11533,69 @@ ws@^6.0.0, ws@^6.2.1:
dependencies:
async-limiter "~1.0.0"
-xtend@^4.0.0, xtend@~4.0.1:
+xdg-basedir@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npm.taobao.org/xdg-basedir/download/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"
+ integrity sha1-S8jZmEQDaWIl74OhVzy7y0552xM=
+
+xhr@^2.0.1:
+ version "2.5.0"
+ resolved "https://registry.npm.taobao.org/xhr/download/xhr-2.5.0.tgz#bed8d1676d5ca36108667692b74b316c496e49dd"
+ integrity sha1-vtjRZ21co2EIZnaSt0sxbEluSd0=
+ dependencies:
+ global "~4.3.0"
+ is-function "^1.0.1"
+ parse-headers "^2.0.0"
+ xtend "^4.0.0"
+
+xml-parse-from-string@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npm.taobao.org/xml-parse-from-string/download/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28"
+ integrity sha1-qQKekp09vN7RafPG4oI42VpdWig=
+
+xml2js@^0.4.5:
+ version "0.4.23"
+ resolved "https://registry.npm.taobao.org/xml2js/download/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66"
+ integrity sha1-oMaVFnUkIesqx1juTUzPWIQ+rGY=
+ dependencies:
+ sax ">=0.6.0"
+ xmlbuilder "~11.0.0"
+
+xmlbuilder@~11.0.0:
+ version "11.0.1"
+ resolved "https://registry.npm.taobao.org/xmlbuilder/download/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3"
+ integrity sha1-vpuuHIoEbnazESdyY0fQrXACvrM=
+
+xregexp@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npm.taobao.org/xregexp/download/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943"
+ integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=
+
+xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1:
version "4.0.2"
resolved "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz?cache=0&sync_timestamp=1589682817913&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxtend%2Fdownload%2Fxtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
integrity sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q=
+y18n@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz?cache=0&sync_timestamp=1603637417853&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
+ integrity sha1-bRX7qITAhnnA136I53WegR4H+kE=
+
y18n@^4.0.0:
version "4.0.0"
resolved "https://registry.npm.taobao.org/y18n/download/y18n-4.0.0.tgz?cache=0&sync_timestamp=1599868323689&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
integrity sha1-le+U+F7MgdAHwmThkKEg8KPIVms=
+y18n@^5.0.2:
+ version "5.0.4"
+ resolved "https://registry.npm.taobao.org/y18n/download/y18n-5.0.4.tgz#0ab2db89dd5873b5ec4682d8e703e833373ea897"
+ integrity sha1-CrLbid1Yc7XsRoLY5wPoMzc+qJc=
+
+yaku@^0.16.6:
+ version "0.16.7"
+ resolved "https://registry.npm.taobao.org/yaku/download/yaku-0.16.7.tgz#1d195c78aa9b5bf8479c895b9504fd4f0847984e"
+ integrity sha1-HRlceKqbW/hHnIlblQT9TwhHmE4=
+
yallist@^2.1.2:
version "2.1.2"
resolved "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
@@ -9240,6 +11632,18 @@ yargs-parser@^18.1.2:
camelcase "^5.0.0"
decamelize "^1.2.0"
+yargs-parser@^20.2.2:
+ version "20.2.3"
+ resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-20.2.3.tgz?cache=0&sync_timestamp=1602861397132&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-20.2.3.tgz#92419ba867b858c868acf8bae9bf74af0dd0ce26"
+ integrity sha1-kkGbqGe4WMhorPi66b90rw3QziY=
+
+yargs-parser@^4.2.0:
+ version "4.2.1"
+ resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-4.2.1.tgz?cache=0&sync_timestamp=1602861397132&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c"
+ integrity sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=
+ dependencies:
+ camelcase "^3.0.0"
+
yargs@^13.3.2:
version "13.3.2"
resolved "https://registry.npm.taobao.org/yargs/download/yargs-13.3.2.tgz?cache=0&sync_timestamp=1600660037884&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
@@ -9256,7 +11660,7 @@ yargs@^13.3.2:
y18n "^4.0.0"
yargs-parser "^13.1.2"
-yargs@^15.0.0:
+yargs@^15.0.0, yargs@^15.3.1:
version "15.4.1"
resolved "https://registry.npm.taobao.org/yargs/download/yargs-15.4.1.tgz?cache=0&sync_timestamp=1600660037884&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
integrity sha1-DYehbeAa7p2L7Cv7909nhRcw9Pg=
@@ -9273,6 +11677,46 @@ yargs@^15.0.0:
y18n "^4.0.0"
yargs-parser "^18.1.2"
+yargs@^16.0.3:
+ version "16.1.0"
+ resolved "https://registry.npm.taobao.org/yargs/download/yargs-16.1.0.tgz?cache=0&sync_timestamp=1602805561021&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-16.1.0.tgz#fc333fe4791660eace5a894b39d42f851cd48f2a"
+ integrity sha1-/DM/5HkWYOrOWolLOdQvhRzUjyo=
+ dependencies:
+ cliui "^7.0.2"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
+ require-directory "^2.1.1"
+ string-width "^4.2.0"
+ y18n "^5.0.2"
+ yargs-parser "^20.2.2"
+
+yargs@^6.5.0:
+ version "6.6.0"
+ resolved "https://registry.npm.taobao.org/yargs/download/yargs-6.6.0.tgz?cache=0&sync_timestamp=1602805561021&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208"
+ integrity sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=
+ dependencies:
+ camelcase "^3.0.0"
+ cliui "^3.2.0"
+ decamelize "^1.1.1"
+ get-caller-file "^1.0.1"
+ os-locale "^1.4.0"
+ read-pkg-up "^1.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^1.0.2"
+ which-module "^1.0.0"
+ y18n "^3.2.1"
+ yargs-parser "^4.2.0"
+
+yauzl@^2.10.0:
+ version "2.10.0"
+ resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
+ integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=
+ dependencies:
+ buffer-crc32 "~0.2.3"
+ fd-slicer "~1.1.0"
+
yorkie@^2.0.0:
version "2.0.0"
resolved "https://registry.npm.taobao.org/yorkie/download/yorkie-2.0.0.tgz#92411912d435214e12c51c2ae1093e54b6bb83d9"