增加网易云音乐API
This commit is contained in:
1 parent
7757265959
commit
eda8523a09
17 files changed
+1031
-207
No files matched your search
+14
-2
@@ -1,8 +1,19 @@
|
||||
{
|
||||
"name": "glass-player",
|
||||
"version": "0.2.1",
|
||||
"version": "1.0.1",
|
||||
"private": true,
|
||||
"proxy": "https://glassplayer.dengtongyu.com",
|
||||
"proxy": {
|
||||
"/netease/*": {
|
||||
"target": "https://glassplayer.dengtongyu.com",
|
||||
"secure": true,
|
||||
"changeOrigin": true
|
||||
},
|
||||
"/kugou/*": {
|
||||
"target": "https://glassplayer.dengtongyu.com",
|
||||
"secure": true,
|
||||
"changeOrigin": true
|
||||
}
|
||||
},
|
||||
"homepage": "/",
|
||||
"dependencies": {
|
||||
"antd": "^3.2.3",
|
||||
@@ -32,6 +43,7 @@
|
||||
"fs-extra": "3.0.1",
|
||||
"html-webpack-plugin": "2.29.0",
|
||||
"jest": "20.0.4",
|
||||
"light-dialog": "^2.0.6",
|
||||
"object-assign": "4.1.1",
|
||||
"postcss-flexbugs-fixes": "3.2.0",
|
||||
"postcss-loader": "2.0.8",
|
||||
|
||||
+11
-8
@@ -1,12 +1,11 @@
|
||||
@import '~antd/dist/antd.css';
|
||||
|
||||
|
||||
@font-face {font-family: "iconfont";
|
||||
src: url('./assets/iconfont.eot?t=1524288064827'); /* IE9*/
|
||||
src: url('./assets/iconfont.eot?t=1524288064827#iefix') format('embedded-opentype'), /* IE6-IE8 */
|
||||
url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff'),
|
||||
url('./assets/iconfont.ttf?t=1524288064827') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
|
||||
url('./assets/iconfont.svg?t=1524288064827#iconfont') format('svg'); /* iOS 4.1- */
|
||||
@font-face {
|
||||
font-family: "iconfont";
|
||||
src: url('./assets/iconfont.eot?t=1528943771681'); /* IE9*/
|
||||
src: url('./assets/iconfont.eot?t=1528943771681#iefix') format('embedded-opentype'), /* IE6-IE8 */
|
||||
url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff'),
|
||||
url('./assets/iconfont.ttf?t=1528943771681') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
|
||||
url('./assets/iconfont.svg?t=1528943771681#iconfont') format('svg'); /* iOS 4.1- */
|
||||
}
|
||||
|
||||
.iconfont {
|
||||
@@ -43,6 +42,9 @@
|
||||
|
||||
.icon-trash:before { content: "\e6e4"; }
|
||||
|
||||
.icon-kugou:before { content: "\e7c3"; }
|
||||
|
||||
.icon-wangyi:before { content: "\e600"; }
|
||||
|
||||
ul,ol,li {
|
||||
list-style-type: none;
|
||||
@@ -72,6 +74,7 @@ html,body {
|
||||
text-align: center;
|
||||
position: relative;
|
||||
background-color: #888;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.App a{
|
||||
|
||||
+7
-15
@@ -7,7 +7,7 @@ import SongList from './components/SongList';
|
||||
import ControlBar from './components/ControlBar';
|
||||
import SearchBar from './components/SearchBar';
|
||||
import PlayList from './components/PlayList';
|
||||
import Alert from './components/Alert';
|
||||
import dialog from 'light-dialog';
|
||||
|
||||
import './App.css';
|
||||
|
||||
@@ -26,10 +26,11 @@ class App extends Component {
|
||||
}
|
||||
|
||||
componentDidUpdate() {
|
||||
//if(DataStore.errMassge) {
|
||||
//message.warning(DataStore.errMassge);
|
||||
//DataStore.errMassge = '';
|
||||
//}
|
||||
console.log(DataStore.errMassge);
|
||||
if(DataStore.errMassge) {
|
||||
dialog.piece(DataStore.errMassge, 3000);
|
||||
DataStore.errMassge = '';
|
||||
}
|
||||
//DataStore.errMassge = '测试报错!';
|
||||
// setInterval(() => {
|
||||
// DataStore.errMassge = '测试报错!';
|
||||
@@ -41,15 +42,9 @@ class App extends Component {
|
||||
window.removeEventListener('resize', this.onWindowResize)
|
||||
}
|
||||
|
||||
alertClose = (errMassge) => {
|
||||
if(errMassge) {
|
||||
errMassge = '';
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<div className="App">
|
||||
<div className="App" err={DataStore.errMassge}>
|
||||
<div className="bg-image-mask"></div>
|
||||
<div className="bg-image blur"
|
||||
style={{backgroundImage:'url('+ DataStore.coutSongMassge.Img +')'}}></div>
|
||||
@@ -64,9 +59,6 @@ class App extends Component {
|
||||
</div>
|
||||
<ControlBar />
|
||||
</div>
|
||||
<Alert
|
||||
text={DataStore.errMassge}
|
||||
closeCallBack={this.alertClose(DataStore.errMassge)}/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
+104
-140
@@ -1,80 +1,12 @@
|
||||
import { observable } from 'mobx'
|
||||
import { observable } from 'mobx';
|
||||
import { getNeteaseHotSongList, getNeteaseSearchSongList, getNeteaseSongMassge } from './datasrc/Netease';
|
||||
import { getKugouNewSongList, getKugouSearchSongList, getKugouSongMassge } from './datasrc/Kugou';
|
||||
|
||||
let isFetching = false;
|
||||
|
||||
let host = 'https://node.dengtongyu.com';
|
||||
|
||||
async function urlFetch(url) {
|
||||
if(isFetching) return Promise.reject('您点太快了!');
|
||||
|
||||
isFetching = true;
|
||||
let result = await fetch(url)
|
||||
isFetching = false;
|
||||
return result;
|
||||
}
|
||||
|
||||
const searchUrl = host + '/data/songSearch';
|
||||
|
||||
async function getSearchSongList(keyWord,page,size) {
|
||||
if(!keyWord) keyWord = '';
|
||||
if(!page) page = 1;
|
||||
if(!size) size = 10;
|
||||
let url = searchUrl + '?keyword=' + keyWord + '&page=' + page + '&pagesize=' + size;
|
||||
let result = await urlFetch(url);
|
||||
return result;
|
||||
}
|
||||
|
||||
const newSongUrl = host + '/data/newSong';
|
||||
|
||||
async function getNewSongList() {
|
||||
let url = newSongUrl + '?json=true';
|
||||
let result = await urlFetch(url);
|
||||
return result;
|
||||
}
|
||||
|
||||
const songMassgeUrl = host + '/data/songMsg';
|
||||
|
||||
async function getSongMassge(hash) {
|
||||
let url = songMassgeUrl + '?hash=' + hash;
|
||||
let result = await urlFetch(url)
|
||||
return result;
|
||||
}
|
||||
|
||||
function parseLyric(text) {
|
||||
//将文本分隔成一行一行,存入数组
|
||||
let lines = text.split('\n'),
|
||||
//用于匹配时间的正则表达式,匹配的结果类似[xx:xx.xx]
|
||||
pattern = /\[\d{2}:\d{2}.\d{2}\]/g,
|
||||
//保存最终结果的数组
|
||||
result = [];
|
||||
//去掉不含时间的行
|
||||
while (!pattern.test(lines[0])) {
|
||||
lines = lines.slice(1);
|
||||
};
|
||||
//上面用'\n'生成生成数组时,结果中最后一个为空元素,这里将去掉
|
||||
lines[lines.length - 1].length === 0 && lines.pop();
|
||||
lines.forEach(function(v /*数组元素值*/ , i /*元素索引*/ , a /*数组本身*/ ) {
|
||||
//提取出时间[xx:xx.xx]
|
||||
var time = v.match(pattern),
|
||||
//提取歌词
|
||||
value = v.replace(pattern, '');
|
||||
//因为一行里面可能有多个时间,所以time有可能是[xx:xx.xx][xx:xx.xx][xx:xx.xx]的形式,需要进一步分隔
|
||||
time.forEach(function(v1, i1, a1) {
|
||||
//去掉时间里的中括号得到xx:xx.xx
|
||||
var t = v1.slice(1, -1).split(':');
|
||||
//将结果压入最终数组
|
||||
result.push([parseInt(t[0], 10) * 60 + parseFloat(t[1]), value]);
|
||||
});
|
||||
});
|
||||
//最后将结果数组中的元素按时间大小排序,以便保存之后正常显示歌词
|
||||
result.sort(function(a, b) {
|
||||
return a[0] - b[0];
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
class DataPageStore {
|
||||
|
||||
@observable _dataSource = 1;
|
||||
|
||||
@observable _audio = null;
|
||||
|
||||
@observable _searchSongList = [];
|
||||
@@ -105,12 +37,22 @@ class DataPageStore {
|
||||
|
||||
@observable _pageSize = 10;
|
||||
|
||||
@observable _lastPage = false;
|
||||
|
||||
@observable _listType = 0;
|
||||
|
||||
@observable _windowWidth = 900;
|
||||
|
||||
@observable _windowHeight = 680;
|
||||
|
||||
get dataSource() {
|
||||
return this._dataSource;
|
||||
}
|
||||
|
||||
set dataSource(value) {
|
||||
this._dataSource = value;
|
||||
}
|
||||
|
||||
get audio() {
|
||||
return this._audio;
|
||||
}
|
||||
@@ -124,6 +66,7 @@ class DataPageStore {
|
||||
}
|
||||
|
||||
set searchSongList(value) {
|
||||
if(!value) value = [];
|
||||
this._searchSongList = value;
|
||||
}
|
||||
|
||||
@@ -260,6 +203,14 @@ class DataPageStore {
|
||||
return this._pageSize;
|
||||
}
|
||||
|
||||
get lastPage() {
|
||||
return this._lastPage;
|
||||
}
|
||||
|
||||
set lastPage(value) {
|
||||
this._lastPage = value;
|
||||
}
|
||||
|
||||
get listType() {
|
||||
return this._listType;
|
||||
}
|
||||
@@ -309,7 +260,7 @@ class DataPageStore {
|
||||
PlayUrl: '',
|
||||
SingerName: '未知艺术家',
|
||||
AlbumName: '未知专辑',
|
||||
Img: 'https://y.gtimg.cn/music/photo_new/T002R300x300M00000366x8I0pYkOp.jpg?max_age=2592000',
|
||||
Img: require('./assets/bg.png'),
|
||||
Lyrics: [],
|
||||
Duration: 0,
|
||||
Hash: ''
|
||||
@@ -318,55 +269,68 @@ class DataPageStore {
|
||||
}
|
||||
|
||||
searchSongListStore() {
|
||||
getSearchSongList(this.keyword, this.page, this.pageSize)
|
||||
.then(result => result.json())
|
||||
.then(json => {
|
||||
//console.log(json);
|
||||
if(json.result) {
|
||||
this.listType = 0;
|
||||
let songs = [];
|
||||
let list = json.data.lists;
|
||||
for (let index = 0; index < list.length; index++) {
|
||||
let songMsg = {};
|
||||
songMsg.Hash = list[index].FileHash;
|
||||
songMsg.SongName = list[index].SongName;
|
||||
songMsg.SingerName = list[index].SingerName;
|
||||
songMsg.Duration = list[index].Duration;
|
||||
switch (this.dataSource) {
|
||||
case 1:
|
||||
getNeteaseSearchSongList(this.keyword, this.page, this.pageSize)
|
||||
.then(data => {
|
||||
this.listType = 0;
|
||||
this.lastPage = data.list.length < this.pageSize ? true : false;
|
||||
if(data.page > 1) {
|
||||
this.searchSongList = this.searchSongList.concat(data.list);
|
||||
}else{
|
||||
this.searchSongList = data.list;
|
||||
}
|
||||
}).catch((err) => {
|
||||
this.errMassge = err;
|
||||
});
|
||||
break;
|
||||
|
||||
songs.push(songMsg);
|
||||
case 2:
|
||||
getKugouSearchSongList(this.keyword, this.page, this.pageSize)
|
||||
.then(data => {
|
||||
this.listType = 0;
|
||||
this.lastPage = data.list.length < this.pageSize ? true : false;
|
||||
if(data.page > 1) {
|
||||
this.searchSongList = this.searchSongList.concat(data.list);
|
||||
}else{
|
||||
this.searchSongList = data.list;
|
||||
}
|
||||
}).catch((err) => {
|
||||
this.errMassge = err;
|
||||
});
|
||||
break;
|
||||
|
||||
}
|
||||
this.searchSongList = json.data.page > 1 ? this.searchSongList.concat(songs) : songs;
|
||||
}
|
||||
}).catch((err) => {
|
||||
this.errMassge = err;
|
||||
});
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
newSongListStore() {
|
||||
getNewSongList()
|
||||
.then(result => result.json())
|
||||
.then(json => {
|
||||
//console.log(json);
|
||||
if(json.result) {
|
||||
this.listType = 1;
|
||||
let songs = [];
|
||||
let list = json.data;
|
||||
for (let index = 0; index < list.length; index++) {
|
||||
let songMsg = {};
|
||||
songMsg.Hash = list[index].hash;
|
||||
songMsg.SongName = list[index].filename.split(' - ')[1];
|
||||
songMsg.SingerName = list[index].filename.split(' - ')[0];
|
||||
songMsg.Duration = list[index].duration;
|
||||
switch (this.dataSource) {
|
||||
case 1:
|
||||
getNeteaseHotSongList()
|
||||
.then(list => {
|
||||
this.listType = 1;
|
||||
this.searchSongList = list;
|
||||
}).catch((err) => {
|
||||
this.errMassge = err;
|
||||
});
|
||||
break;
|
||||
|
||||
songs.push(songMsg);
|
||||
case 2:
|
||||
getKugouNewSongList()
|
||||
.then(list => {
|
||||
this.listType = 1;
|
||||
this.searchSongList = list;
|
||||
}).catch((err) => {
|
||||
this.errMassge = err;
|
||||
});
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
this.searchSongList = songs;
|
||||
}
|
||||
}).catch((err) => {
|
||||
this.errMassge = err;
|
||||
});
|
||||
}
|
||||
|
||||
addSongInList(hash,callback) {
|
||||
@@ -376,31 +340,31 @@ class DataPageStore {
|
||||
let songData = this.playSongList[songIndex];
|
||||
if(callback) callback(songData,songIndex);
|
||||
}else{
|
||||
getSongMassge(hash)
|
||||
.then(result => result.json())
|
||||
.then(json => {
|
||||
//console.log(json);
|
||||
if(json.result) {
|
||||
let songMassge = {};
|
||||
songMassge.PlayUrl = json.data.play_url;
|
||||
songMassge.SongName = json.data.song_name;
|
||||
songMassge.SingerName = json.data.author_name;
|
||||
songMassge.Img = json.data.img;
|
||||
songMassge.Lyrics = json.data.lyrics ? parseLyric(json.data.lyrics) : [];
|
||||
songMassge.AlbumName = json.data.album_name;
|
||||
songMassge.Duration = Math.floor(json.data.timelength / 1000);
|
||||
songMassge.Hash = json.data.hash;
|
||||
switch (this.dataSource) {
|
||||
case 1:
|
||||
getNeteaseSongMassge(hash)
|
||||
.then(songMassge => {
|
||||
this.addPlaySongList(songMassge);
|
||||
if(callback) callback(songMassge,this.playSongList.length - 1);
|
||||
}).catch((err) => {
|
||||
console.log(err);
|
||||
this.errMassge = err;
|
||||
});
|
||||
break;
|
||||
|
||||
//if(this.findInPlayList(hash) > 0) return;
|
||||
case 2:
|
||||
getKugouSongMassge(hash)
|
||||
.then(songMassge => {
|
||||
this.addPlaySongList(songMassge);
|
||||
if(callback) callback(songMassge,this.playSongList.length - 1);
|
||||
}).catch((err) => {
|
||||
this.errMassge = err;
|
||||
});
|
||||
break;
|
||||
|
||||
this.addPlaySongList(songMassge);
|
||||
|
||||
if(callback) callback(songMassge,this.playSongList.length - 1);
|
||||
}
|
||||
}).catch((err) => {
|
||||
//console.log(err);
|
||||
this.errMassge = err;
|
||||
});
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -435,7 +399,7 @@ class DataPageStore {
|
||||
}
|
||||
|
||||
createAudio(url) {
|
||||
console.log(this.audio)
|
||||
//console.log(this.audio)
|
||||
if(this._audio && this._audio.parent) {
|
||||
document.getElementById('audio-box').removeChild(this._audio);
|
||||
}
|
||||
|
||||
Binary file not shown.
@@ -66,6 +66,12 @@ t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q-
|
||||
<glyph glyph-name="trash" unicode="" d="M556.630988 518.37443c0-0.088004 0.085958-0.217964 0.085958-0.391926-9.247618 0.085958-16.228613 0.085958-22.074761 0.085958C546.508443 518.286426 551.918663 518.286426 556.630988 518.37443zM646.024971 517.982504l133.983527 0 0-89.307002-44.675502 0-44.675502-312.728514-44.6315 0-44.6315 0L422.647461 115.946988 377.971959 115.946988l-44.6315 0-44.673455 312.728514-44.763506 0 0 89.307002L377.971959 517.982504c136.164193-1.264806 69.674872-0.176009 121.94126 0l-32.634258 0c55.843866 1.874697 20.068058 0 44.675502 0 0.871857 0 1.570775 0 2.356674 0l3.40147 0c5.41022 0.085958-21.289885 0.391926 16.928554 0.085958-2.574638 0-5.322216-0.085958-8.55177-0.085958l30.627555 0L646.024971 517.982504zM467.279984 428.675502 377.971959 428.675502l31.892361-223.421512 57.414641 0L467.278961 428.675502zM646.024971 428.675502l-89.307002 0 0-223.421512 57.414641 0L646.024971 428.675502zM958.70846 652.051989l0-536.105001c0-98.730629-79.971379-178.744987-178.700985-178.744987L243.903497-62.797999c-98.642624 0-178.61298 80.013335-178.61298 178.744987L65.290517 652.051989c0 98.730629 79.969333 178.744987 178.61298 178.744987l536.105001 0C878.73708 830.796976 958.70846 750.782617 958.70846 652.051989zM869.44546 607.375463c0 74.03825-60.119239 133.983527-134.113487 133.983527L288.667004 741.358991c-74.082252 0-134.071532-59.945277-134.071532-133.983527l0-446.753997c0-74.03825 59.989279-133.983527 134.071532-133.983527l446.664969 0c73.994248 0 134.113487 59.945277 134.113487 133.983527L869.44546 607.375463zM511.955486 562.743964c24.51944 0 44.455491-19.850094 44.675502-44.369533 10.556427 0.305969 17.97335 0.479931 89.39296-0.391926 0 74.080206-59.989279 134.069485-134.069485 134.069485-73.994248 0-133.983527-59.989279-133.983527-134.069485l89.307002 0C467.279984 542.719908 487.348042 562.743964 511.955486 562.743964z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="kugouyinle" unicode="" d="M510.723192-128c-280.897756 0-510.723192 229.825436-510.723192 510.723192s229.825436 510.723192 510.723192 510.723192 510.723192-229.825436 510.723192-510.723192c0-283.451372-229.825436-510.723192-510.723192-510.723192z m0 967.820449c-252.80798 0-457.097257-206.842893-457.097257-457.097257C53.625935 129.915212 260.468828-74.37406499999997 510.723192-74.37406499999997c252.80798 0 457.097257 206.842893 457.097257 457.097257 0 252.80798-204.289277 457.097257-457.097257 457.097257zM331.970075 622.7630919999999h127.680798v-165.985037l160.877805 165.985037h178.753118s-219.610973-204.289277-229.825437-214.50374c-10.214464-10.214464-15.321696-28.089776-2.553616-48.518704 15.321696-20.428928 191.521197-224.718204 191.521197-224.718204l-160.877805 2.553616-160.877806 191.521197-15.321696-194.074813-132.78803-2.553616L331.970075 622.7630919999999z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="wangyiyunyinlezizhi-copy" unicode="" d="M812.688 452.365c-53.338 53.338-122.877 84.571-197.517 89.152-4.864 13.476-9.237 28.122-12.955 44.445-5.406 23.756-9.41 51.082-11.482 83.564-0.506 7.925-0.895 16.16-1.163 24.724-0.258 8.306-0.402 16.927-0.421 25.875-0.031 0.003-0.059 0.006-0.09 0.013 0.023 0.226 0.061 0.45 0.087 0.678 5.899 51.69 50.605 91.766 104.187 90.233 37.757-1.079 70.706-23.047 87.364-54.811l50.365 9.678c-19.821 49.354-64.973 85.924-119.381 93.387-87.442 11.994-163.263-51.161-172.043-134.026-0.073-0.693-0.119-2.478-0.146-3.174l-0.001-6.676c0.018-5.903 0.16-15.092 0.539-25.67 0.183-5.153 0.419-10.23 0.693-15.251 2.775-50.809 10.176-94.917 22.415-133.85 0.03-0.09 0.057-0.177 0.086-0.268-27.769-2.932-54.72-9.59-80.274-19.713l-0.018-0.002-0.034-0.017c-38.362-15.204-73.57-38.233-103.627-68.291l9.538 8.534c-40.682-39.699-65.986-95.088-65.986-156.285 0-29.763 5.99-58.148 16.817-84.031 25.825-61.738 79.205-109.18 144.684-126.881 17.221-5.375 35.525-8.272 54.494-8.272 10.11 0 20.029 0.837 29.698 2.419 86.973 14.235 153.556 89.901 153.556 180.838 0 20.773-3.481 40.749-9.879 59.378-13.142 54.395-34.294 91.456-54.922 127.561-6.288 11.01-12.514 21.913-18.499 33.241 10.198-1.718 20.194-4.039 29.951-6.925 106.276-31.444 184.048-129.946 184.048-246.284 0-59.882-20.607-115.04-55.097-158.762-24.484-27.394-53.099-51.013-84.861-69.881-53.554-31.809-116.031-50.11-182.708-50.11-27.403 0-54.094 3.1-79.754 8.944-159.635 36.365-279.132 179.455-279.132 349.94 0 177.598 129.68 325.454 299.316 353.913l-6.546 49.329c-83.813-13.561-161.087-52.819-222.371-113.935-76.53-76.319-119.827-180.26-120.076-288.341-0.253-109.839 42.541-213.123 120.404-290.601 77.532-77.148 183.19-120.052 292.559-118.903 72.921 0.765 142.794 20.532 203.967 56.93 27.007 14.218 52.015 32.573 74.211 54.769 8.033 8.033 15.546 16.446 22.559 25.174 43.538 54.177 67.203 121.031 67.203 191.533 0 31.259-4.661 61.796-13.632 90.835-14.522 47.012-40.351 90.09-76.132 125.871ZM403.266 473.834c0.771 0.633 1.557 1.249 2.338 1.872-0.835-0.662-1.665-1.331-2.491-2.006l0.151 0.134ZM664.427 314.149c3.326-14.137 6.031-29.586 7.954-46.765-0.627-65.317-48.367-119.567-110.8-130.331-6.657-0.801-13.428-1.225-20.295-1.225-14.779 0-29.116 1.916-42.786 5.5-72.415 18.99-125.996 84.994-125.996 163.282 0 22.391 4.393 43.772 12.346 63.341 10.096 24.843 25.936 46.761 45.873 64.083 3.514 2.963 7.102 5.837 10.773 8.609 39.492 29.837 87.838 48.543 140.336 51.408 4.418-9.674 8.997-18.804 13.654-27.585 4.962-9.356 10.011-18.32 15.036-27.143 1.209-2.122 2.416-4.235 3.62-6.343 19.814-34.679 38.772-67.897 50.285-116.832Z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
|
||||
|
||||
</font>
|
||||
|
||||
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 19 KiB |
Binary file not shown.
Binary file not shown.
@@ -1,5 +1,4 @@
|
||||
.progress-box {
|
||||
|
||||
margin: 0 208px 0 166px;
|
||||
}
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ class Progress extends Component {
|
||||
|
||||
render() {
|
||||
return (
|
||||
<div className="progress-box">
|
||||
<div className="progress-box" value={this.sliderValue(DataStore.currentTime)}>
|
||||
<div className="song-msg">
|
||||
<div className="song-title ell">{DataStore.coutSongMassge.SongName}-{DataStore.coutSongMassge.SingerName}</div>
|
||||
<div className="song-time">{this.timeFormat(DataStore.currentTime)} / {this.timeFormat(DataStore.coutSongMassge.Duration)}</div>
|
||||
|
||||
@@ -1,22 +1,52 @@
|
||||
.search-box {
|
||||
position: relative;
|
||||
height: 36px;
|
||||
height: 56px;
|
||||
}
|
||||
|
||||
.search-input {
|
||||
.search-left {
|
||||
margin-right: 46px;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.search-tap {
|
||||
height: 26px;
|
||||
}
|
||||
|
||||
.search-tap>.iconfont {
|
||||
width: 30px;
|
||||
height: 100%;
|
||||
font-size: 20px;
|
||||
line-height: 26px;
|
||||
opacity: .6;
|
||||
border: #fff solid 1px;
|
||||
border-bottom: none;
|
||||
border-top-right-radius: 6px;
|
||||
border-top-left-radius: 6px;
|
||||
box-sizing: border-box;
|
||||
float: left;
|
||||
margin-right: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.search-tap>.curr {
|
||||
background-color: #fff;
|
||||
color: #666
|
||||
}
|
||||
|
||||
.search-input {
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
.search-input>input {
|
||||
width: 100%;
|
||||
height: 30px;
|
||||
line-height: 20px;
|
||||
display: block;
|
||||
border-radius: 6px;
|
||||
border-top-right-radius: 6px;
|
||||
border-bottom-right-radius: 6px;
|
||||
border-bottom-left-radius: 6px;
|
||||
padding: 5px 10px;
|
||||
margin: 3px 0;
|
||||
box-sizing: border-box;
|
||||
background-color: rgba(255, 255, 255, .6);
|
||||
border: none;
|
||||
@@ -27,9 +57,9 @@
|
||||
.search-btn {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
top: 21px;
|
||||
line-height: 36px;
|
||||
height: 100%;
|
||||
height: 36px;
|
||||
width: 36px;
|
||||
}
|
||||
|
||||
|
||||
@@ -39,13 +39,28 @@ class SearchBar extends Component {
|
||||
});
|
||||
}
|
||||
|
||||
selectSource = (event) => {
|
||||
DataStore.dataSource = parseInt(event.target.getAttribute('type'), 10);
|
||||
//console.log(DataStore.dataSource)
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<div className="search-box">
|
||||
<div className="search-input">
|
||||
<input type="text" placeholder="搜索歌曲或歌手"
|
||||
value={this.state.value}
|
||||
onChange={this.onTextChange} onKeyUp={this.onKeyUp} />
|
||||
<div className="search-left">
|
||||
<div className="search-tap">
|
||||
<div className={"iconfont icon-wangyi" + (DataStore.dataSource === 1 ? " curr" : "")}
|
||||
onClick={this.selectSource}
|
||||
type="1"></div>
|
||||
<div className={"iconfont icon-kugou" + (DataStore.dataSource === 2 ? " curr" : "")}
|
||||
onClick={this.selectSource}
|
||||
type="2"></div>
|
||||
</div>
|
||||
<div className="search-input">
|
||||
<input type="text" placeholder="搜索歌曲或歌手"
|
||||
value={this.state.value}
|
||||
onChange={this.onTextChange} onKeyUp={this.onKeyUp} />
|
||||
</div>
|
||||
</div>
|
||||
<div className="search-btn">
|
||||
<button className="iconfont icon-search"
|
||||
|
||||
@@ -25,6 +25,27 @@ class SongList extends Component {
|
||||
DataStore.searchSongListStore();
|
||||
}
|
||||
|
||||
canPlayHtml = (song) => {
|
||||
if(song.PlayUrl) {
|
||||
return (
|
||||
<li className="operate">
|
||||
<button className="iconfont icon-add"
|
||||
hash={song.Hash}
|
||||
onClick={this.onClickAddIcon}></button>
|
||||
<button className="iconfont icon-play"
|
||||
hash={song.Hash}
|
||||
onClick={this.onClickPlayIcon}></button>
|
||||
</li>
|
||||
)
|
||||
}else{
|
||||
return (
|
||||
<li className="operate">
|
||||
<span>已下架</span>
|
||||
</li>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
ListItems = (list) => {
|
||||
//console.log(list);
|
||||
if(list.length > 0) {
|
||||
@@ -47,7 +68,7 @@ class SongList extends Component {
|
||||
)
|
||||
}
|
||||
|
||||
if(DataStore.listType === 0 && list.length >= DataStore.pageSize) {
|
||||
if(DataStore.listType === 0 && !DataStore.lastPage) {
|
||||
listItems.push(
|
||||
<div className="more-box" key={'morebutton'}>
|
||||
<a onClick={this.onClickMore}>点击加载更多</a>
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
import { urlFetch, parseLyric} from './Util';
|
||||
|
||||
//const host = 'https://node.dengtongyu.com';
|
||||
const host = '/kugou';
|
||||
|
||||
const searchUrl = host + '/songSearch';
|
||||
|
||||
const newSongUrl = host + '/newSong';
|
||||
|
||||
const songMassgeUrl = host + '/songMsg';
|
||||
|
||||
let getKugouSearchSongList = async function(keyWord,page,size) {
|
||||
if(!keyWord) keyWord = '';
|
||||
if(!page) page = 1;
|
||||
if(!size) size = 10;
|
||||
let url = searchUrl + '?keyword=' + keyWord + '&page=' + page + '&pagesize=' + size;
|
||||
let response = await urlFetch(url);
|
||||
|
||||
try {
|
||||
let data = await response.json();
|
||||
//console.log(data)
|
||||
let songs = {};
|
||||
songs.list = [];
|
||||
songs.aggregation = [];
|
||||
songs.page = 1;
|
||||
|
||||
if(data.result) {
|
||||
let list = data.data.lists;
|
||||
for (let index = 0; index < list.length; index++) {
|
||||
let songMsg = {};
|
||||
songMsg.Hash = list[index].FileHash;
|
||||
songMsg.SongName = list[index].SongName;
|
||||
songMsg.SingerName = list[index].SingerName;
|
||||
songMsg.Duration = list[index].Duration;
|
||||
|
||||
songs.list.push(songMsg);
|
||||
|
||||
}
|
||||
songs.aggregation = data.data.aggregation;
|
||||
songs.page = data.data.page;
|
||||
}
|
||||
return songs;
|
||||
} catch (err) {
|
||||
return Promise.reject(err);
|
||||
}
|
||||
}
|
||||
|
||||
let getKugouNewSongList = async function() {
|
||||
let url = newSongUrl + '?json=true';
|
||||
let response = await urlFetch(url);
|
||||
try {
|
||||
let data = await response.json();
|
||||
|
||||
let songs = [];
|
||||
if(data.result) {
|
||||
let list = data.data;
|
||||
for (let index = 0; index < list.length; index++) {
|
||||
let songMsg = {};
|
||||
songMsg.Hash = list[index].hash;
|
||||
songMsg.SongName = list[index].filename.split(' - ')[1];
|
||||
songMsg.SingerName = list[index].filename.split(' - ')[0];
|
||||
songMsg.Duration = list[index].duration;
|
||||
|
||||
songs.push(songMsg);
|
||||
}
|
||||
}
|
||||
return songs;
|
||||
} catch (err) {
|
||||
return Promise.reject(err);
|
||||
}
|
||||
}
|
||||
|
||||
let getKugouSongMassge = async function(hash) {
|
||||
let url = songMassgeUrl + '?hash=' + hash;
|
||||
let response = await urlFetch(url);
|
||||
try {
|
||||
let json = await response.json();
|
||||
|
||||
let songMassge = {};
|
||||
|
||||
if(json.result) {
|
||||
songMassge.PlayUrl = json.data.play_url;
|
||||
songMassge.SongName = json.data.song_name;
|
||||
songMassge.SingerName = json.data.author_name;
|
||||
songMassge.Img = json.data.img;
|
||||
songMassge.Lyrics = json.data.lyrics ? parseLyric(json.data.lyrics) : [];
|
||||
songMassge.AlbumName = json.data.album_name;
|
||||
songMassge.Duration = Math.floor(json.data.timelength / 1000);
|
||||
songMassge.Hash = json.data.hash;
|
||||
}
|
||||
return songMassge;
|
||||
} catch(err) {
|
||||
return Promise.reject(err);
|
||||
}
|
||||
}
|
||||
|
||||
export { getKugouNewSongList, getKugouSearchSongList, getKugouSongMassge }
|
||||
@@ -0,0 +1,147 @@
|
||||
import { urlFetch, parseLyric} from './Util';
|
||||
|
||||
const host = '/netease';
|
||||
|
||||
const searchUrl = host + '/search';
|
||||
|
||||
const rankUrl = host + '/top/list';
|
||||
|
||||
const songDetailUrl = host + '/song/detail';
|
||||
|
||||
const songLyriclUrl = host + '/lyric';
|
||||
|
||||
const songPlayUrl = host + '/music/url';
|
||||
|
||||
let getNeteaseSearchSongList = async function(keyWord, page, size) {
|
||||
if(!keyWord) keyWord = '';
|
||||
if(!page) page = 1;
|
||||
if(!size) size = 10;
|
||||
let offset = (page - 1)* size;
|
||||
let url = searchUrl + '?keywords=' + keyWord + '&offset=' + offset + '&limit=' + size;
|
||||
let response = await urlFetch(url);
|
||||
|
||||
try {
|
||||
let data = await response.json();
|
||||
//console.log(data)
|
||||
let songs = {};
|
||||
songs.list = [];
|
||||
songs.aggregation = [];
|
||||
songs.page = 1;
|
||||
|
||||
if(data.code === 200) {
|
||||
let list = data.result.songs;
|
||||
for (let index = 0; index < list.length; index++) {
|
||||
let songMsg = {};
|
||||
songMsg.Hash = list[index].id;
|
||||
songMsg.SongName = list[index].name;
|
||||
songMsg.SingerName = singersName(list[index].artists);
|
||||
songMsg.Duration = list[index].duration;
|
||||
|
||||
songs.list.push(songMsg);
|
||||
|
||||
}
|
||||
songs.aggregation = [];
|
||||
songs.page = page;
|
||||
}
|
||||
return songs;
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
return Promise.reject(err);
|
||||
}
|
||||
}
|
||||
|
||||
let getNeteaseHotSongList = async function() {
|
||||
let url = rankUrl + '?idx=1';
|
||||
let response = await urlFetch(url);
|
||||
try {
|
||||
let data = await response.json();
|
||||
|
||||
let songs = [];
|
||||
if(data.code === 200) {
|
||||
let list = data.playlist.tracks;
|
||||
for (let index = 0; index < list.length; index++) {
|
||||
let songMsg = {};
|
||||
songMsg.Hash = list[index].id;
|
||||
songMsg.SongName = list[index].name;
|
||||
songMsg.SingerName = singersName(list[index].ar);
|
||||
songMsg.Duration = list[index].dt;
|
||||
|
||||
songs.push(songMsg);
|
||||
}
|
||||
}
|
||||
return songs;
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
return Promise.reject(err);
|
||||
}
|
||||
}
|
||||
|
||||
let getNeteaseSongMassge = async function(hash) {
|
||||
let songMassge = {};
|
||||
let detailUrl = songDetailUrl + '?ids=' + hash;
|
||||
let detailResponse = await urlFetch(detailUrl);
|
||||
try {
|
||||
let detailJson = await detailResponse.json();
|
||||
|
||||
if(detailJson.code === 200) {
|
||||
songMassge.SongName = detailJson.songs[0].name;
|
||||
songMassge.SingerName = singersName(detailJson.songs[0].ar);
|
||||
songMassge.Img = detailJson.songs[0].al.picUrl;
|
||||
songMassge.AlbumName = detailJson.songs[0].al.name;
|
||||
songMassge.Duration = Math.floor(detailJson.songs[0].dt / 1000);
|
||||
songMassge.Hash = hash;
|
||||
//songMassge.PlayUrl = getPlayUrl(hash);
|
||||
}
|
||||
} catch(err) {
|
||||
console.error(err);
|
||||
return Promise.reject(err);
|
||||
}
|
||||
|
||||
let lyricUrl = songLyriclUrl + '?id=' + hash;
|
||||
let lyricResponse = await urlFetch(lyricUrl);
|
||||
try {
|
||||
let lyricJson = await lyricResponse.json();
|
||||
|
||||
if(lyricJson.code === 200) {
|
||||
//console.log(lyricJson.lrc.lyric);
|
||||
songMassge.Lyrics = lyricJson.lrc.lyric ? parseLyric(lyricJson.lrc.lyric) : [];
|
||||
}
|
||||
} catch(err) {
|
||||
console.error(err);
|
||||
return Promise.reject(err);
|
||||
}
|
||||
|
||||
let songUrl = songPlayUrl + '?id=' + hash;
|
||||
let songResponse = await urlFetch(songUrl);
|
||||
try {
|
||||
let songJson = await songResponse.json();
|
||||
|
||||
if(songJson.code === 200) {
|
||||
songMassge.PlayUrl = songJson.data[0].url;
|
||||
}
|
||||
if(!songMassge.PlayUrl) {
|
||||
return Promise.reject('该歌曲已经下架!');
|
||||
}
|
||||
} catch(err) {
|
||||
console.error(err);
|
||||
return Promise.reject(err);
|
||||
}
|
||||
|
||||
return songMassge;
|
||||
}
|
||||
|
||||
let singersName = function(arr) {
|
||||
let singers = '';
|
||||
for (let index = 0; index < arr.length; index++) {
|
||||
singers += arr[index].name;
|
||||
singers += (index === arr.length - 1 ? '' : '、');
|
||||
}
|
||||
return singers;
|
||||
}
|
||||
|
||||
// let getPlayUrl = function(id) {
|
||||
// let playUrl = 'http://music.163.com/song/media/outer/url?id=' + id + '.mp3';
|
||||
// return playUrl;
|
||||
// }
|
||||
|
||||
export { getNeteaseHotSongList, getNeteaseSongMassge, getNeteaseSearchSongList }
|
||||
@@ -0,0 +1,45 @@
|
||||
let isFetching = false;
|
||||
|
||||
let urlFetch = async function (url) {
|
||||
if(isFetching) return Promise.reject('您点太快了!');
|
||||
|
||||
isFetching = true;
|
||||
let result = await fetch(url)
|
||||
isFetching = false;
|
||||
return result;
|
||||
}
|
||||
|
||||
let parseLyric = function (text) {
|
||||
//将文本分隔成一行一行,存入数组
|
||||
let lines = text.split('\n'),
|
||||
//用于匹配时间的正则表达式,匹配的结果类似[xx:xx.xx]
|
||||
pattern = /\[\d{2}:\d{2}.\d{2,3}\]/g,
|
||||
//保存最终结果的数组
|
||||
result = [];
|
||||
//去掉不含时间的行
|
||||
while (!pattern.test(lines[0])) {
|
||||
lines = lines.slice(1);
|
||||
};
|
||||
//上面用'\n'生成生成数组时,结果中最后一个为空元素,这里将去掉
|
||||
lines[lines.length - 1].length === 0 && lines.pop();
|
||||
lines.forEach(function(v /*数组元素值*/ , i /*元素索引*/ , a /*数组本身*/ ) {
|
||||
//提取出时间[xx:xx.xx]
|
||||
var time = v.match(pattern),
|
||||
//提取歌词
|
||||
value = v.replace(pattern, '');
|
||||
//因为一行里面可能有多个时间,所以time有可能是[xx:xx.xx][xx:xx.xx][xx:xx.xx]的形式,需要进一步分隔
|
||||
time.forEach(function(v1, i1, a1) {
|
||||
//去掉时间里的中括号得到xx:xx.xx
|
||||
var t = v1.slice(1, -1).split(':');
|
||||
//将结果压入最终数组
|
||||
result.push([parseInt(t[0], 10) * 60 + parseFloat(t[1]), value]);
|
||||
});
|
||||
});
|
||||
//最后将结果数组中的元素按时间大小排序,以便保存之后正常显示歌词
|
||||
result.sort(function(a, b) {
|
||||
return a[0] - b[0];
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
export { urlFetch, parseLyric }
|
||||
@@ -2,6 +2,142 @@
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@webassemblyjs/ast@1.5.12":
|
||||
version "1.5.12"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.5.12.tgz#a9acbcb3f25333c4edfa1fdf3186b1ccf64e6664"
|
||||
dependencies:
|
||||
"@webassemblyjs/helper-module-context" "1.5.12"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.5.12"
|
||||
"@webassemblyjs/wast-parser" "1.5.12"
|
||||
debug "^3.1.0"
|
||||
mamacro "^0.0.3"
|
||||
|
||||
"@webassemblyjs/floating-point-hex-parser@1.5.12":
|
||||
version "1.5.12"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.5.12.tgz#0f36044ffe9652468ce7ae5a08716a4eeff9cd9c"
|
||||
|
||||
"@webassemblyjs/helper-api-error@1.5.12":
|
||||
version "1.5.12"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.5.12.tgz#05466833ff2f9d8953a1a327746e1d112ea62aaf"
|
||||
|
||||
"@webassemblyjs/helper-buffer@1.5.12":
|
||||
version "1.5.12"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.5.12.tgz#1f0de5aaabefef89aec314f7f970009cd159c73d"
|
||||
dependencies:
|
||||
debug "^3.1.0"
|
||||
|
||||
"@webassemblyjs/helper-code-frame@1.5.12":
|
||||
version "1.5.12"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.5.12.tgz#3cdc1953093760d1c0f0caf745ccd62bdb6627c7"
|
||||
dependencies:
|
||||
"@webassemblyjs/wast-printer" "1.5.12"
|
||||
|
||||
"@webassemblyjs/helper-fsm@1.5.12":
|
||||
version "1.5.12"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.5.12.tgz#6bc1442b037f8e30f2e57b987cee5c806dd15027"
|
||||
|
||||
"@webassemblyjs/helper-module-context@1.5.12":
|
||||
version "1.5.12"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.5.12.tgz#b5588ca78b33b8a0da75f9ab8c769a3707baa861"
|
||||
dependencies:
|
||||
debug "^3.1.0"
|
||||
mamacro "^0.0.3"
|
||||
|
||||
"@webassemblyjs/helper-wasm-bytecode@1.5.12":
|
||||
version "1.5.12"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.5.12.tgz#d12a3859db882a448891a866a05d0be63785b616"
|
||||
|
||||
"@webassemblyjs/helper-wasm-section@1.5.12":
|
||||
version "1.5.12"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.5.12.tgz#ff9fe1507d368ad437e7969d25e8c1693dac1884"
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.5.12"
|
||||
"@webassemblyjs/helper-buffer" "1.5.12"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.5.12"
|
||||
"@webassemblyjs/wasm-gen" "1.5.12"
|
||||
debug "^3.1.0"
|
||||
|
||||
"@webassemblyjs/ieee754@1.5.12":
|
||||
version "1.5.12"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.5.12.tgz#ee9574bc558888f13097ce3e7900dff234ea19a4"
|
||||
dependencies:
|
||||
ieee754 "^1.1.11"
|
||||
|
||||
"@webassemblyjs/leb128@1.5.12":
|
||||
version "1.5.12"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.5.12.tgz#0308eec652765ee567d8a5fa108b4f0b25b458e1"
|
||||
dependencies:
|
||||
leb "^0.3.0"
|
||||
|
||||
"@webassemblyjs/utf8@1.5.12":
|
||||
version "1.5.12"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.5.12.tgz#d5916222ef314bf60d6806ed5ac045989bfd92ce"
|
||||
|
||||
"@webassemblyjs/wasm-edit@1.5.12":
|
||||
version "1.5.12"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.5.12.tgz#821c9358e644a166f2c910e5af1b46ce795a17aa"
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.5.12"
|
||||
"@webassemblyjs/helper-buffer" "1.5.12"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.5.12"
|
||||
"@webassemblyjs/helper-wasm-section" "1.5.12"
|
||||
"@webassemblyjs/wasm-gen" "1.5.12"
|
||||
"@webassemblyjs/wasm-opt" "1.5.12"
|
||||
"@webassemblyjs/wasm-parser" "1.5.12"
|
||||
"@webassemblyjs/wast-printer" "1.5.12"
|
||||
debug "^3.1.0"
|
||||
|
||||
"@webassemblyjs/wasm-gen@1.5.12":
|
||||
version "1.5.12"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.5.12.tgz#0b7ccfdb93dab902cc0251014e2e18bae3139bcb"
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.5.12"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.5.12"
|
||||
"@webassemblyjs/ieee754" "1.5.12"
|
||||
"@webassemblyjs/leb128" "1.5.12"
|
||||
"@webassemblyjs/utf8" "1.5.12"
|
||||
|
||||
"@webassemblyjs/wasm-opt@1.5.12":
|
||||
version "1.5.12"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.5.12.tgz#bd758a8bc670f585ff1ae85f84095a9e0229cbc9"
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.5.12"
|
||||
"@webassemblyjs/helper-buffer" "1.5.12"
|
||||
"@webassemblyjs/wasm-gen" "1.5.12"
|
||||
"@webassemblyjs/wasm-parser" "1.5.12"
|
||||
debug "^3.1.0"
|
||||
|
||||
"@webassemblyjs/wasm-parser@1.5.12":
|
||||
version "1.5.12"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.5.12.tgz#7b10b4388ecf98bd7a22e702aa62ec2f46d0c75e"
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.5.12"
|
||||
"@webassemblyjs/helper-api-error" "1.5.12"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.5.12"
|
||||
"@webassemblyjs/ieee754" "1.5.12"
|
||||
"@webassemblyjs/leb128" "1.5.12"
|
||||
"@webassemblyjs/utf8" "1.5.12"
|
||||
|
||||
"@webassemblyjs/wast-parser@1.5.12":
|
||||
version "1.5.12"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.5.12.tgz#9cf5ae600ecae0640437b5d4de5dd6b6088d0d8b"
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.5.12"
|
||||
"@webassemblyjs/floating-point-hex-parser" "1.5.12"
|
||||
"@webassemblyjs/helper-api-error" "1.5.12"
|
||||
"@webassemblyjs/helper-code-frame" "1.5.12"
|
||||
"@webassemblyjs/helper-fsm" "1.5.12"
|
||||
long "^3.2.0"
|
||||
mamacro "^0.0.3"
|
||||
|
||||
"@webassemblyjs/wast-printer@1.5.12":
|
||||
version "1.5.12"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.5.12.tgz#563ca4d01b22d21640b2463dc5e3d7f7d9dac520"
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.5.12"
|
||||
"@webassemblyjs/wast-parser" "1.5.12"
|
||||
long "^3.2.0"
|
||||
|
||||
abab@^1.0.3:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e"
|
||||
@@ -23,6 +159,12 @@ acorn-dynamic-import@^2.0.0:
|
||||
dependencies:
|
||||
acorn "^4.0.3"
|
||||
|
||||
acorn-dynamic-import@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz#901ceee4c7faaef7e07ad2a47e890675da50a278"
|
||||
dependencies:
|
||||
acorn "^5.0.0"
|
||||
|
||||
acorn-globals@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf"
|
||||
@@ -47,6 +189,10 @@ acorn@^5.0.0, acorn@^5.5.0:
|
||||
version "5.5.1"
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.1.tgz#84e05a9ea0acbe131227da50301e62464dc9c1d8"
|
||||
|
||||
acorn@^5.0.3, acorn@^5.6.2:
|
||||
version "5.7.1"
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8"
|
||||
|
||||
add-dom-event-listener@1.x:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/add-dom-event-listener/-/add-dom-event-listener-1.0.2.tgz#8faed2c41008721cf111da1d30d995b85be42bed"
|
||||
@@ -61,7 +207,7 @@ ajv-keywords@^2.0.0:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
|
||||
|
||||
ajv-keywords@^3.0.0:
|
||||
ajv-keywords@^3.0.0, ajv-keywords@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.1.0.tgz#ac2b27939c543e95d2c06e7f7f5c27be4aa543be"
|
||||
|
||||
@@ -81,7 +227,7 @@ ajv@^5.0.0, ajv@^5.1.5, ajv@^5.2.0:
|
||||
fast-json-stable-stringify "^2.0.0"
|
||||
json-schema-traverse "^0.3.0"
|
||||
|
||||
ajv@^6.0.1:
|
||||
ajv@^6.0.1, ajv@^6.1.0:
|
||||
version "6.2.1"
|
||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.2.1.tgz#28a6abc493a2abe0fb4c8507acaedb43fa550671"
|
||||
dependencies:
|
||||
@@ -209,7 +355,7 @@ append-transform@^0.4.0:
|
||||
dependencies:
|
||||
default-require-extensions "^1.0.0"
|
||||
|
||||
aproba@^1.0.3:
|
||||
aproba@^1.0.3, aproba@^1.1.1:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
|
||||
|
||||
@@ -316,6 +462,26 @@ arrify@^1.0.0, arrify@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
|
||||
|
||||
art-template-loader@^1.4.3:
|
||||
version "1.4.3"
|
||||
resolved "https://registry.yarnpkg.com/art-template-loader/-/art-template-loader-1.4.3.tgz#0c22565fe2f6cee37ff7dedfffbf8b53e0fba02e"
|
||||
dependencies:
|
||||
loader-utils "^1.1.0"
|
||||
|
||||
art-template@^4.12.2:
|
||||
version "4.12.2"
|
||||
resolved "https://registry.yarnpkg.com/art-template/-/art-template-4.12.2.tgz#a41eb82d9679bbd1c73f1f838ff46e8eb0612565"
|
||||
dependencies:
|
||||
acorn "^5.0.3"
|
||||
detect-node "^2.0.3"
|
||||
escodegen "^1.8.1"
|
||||
estraverse "^4.2.0"
|
||||
html-minifier "^3.4.3"
|
||||
is-keyword-js "^1.0.3"
|
||||
js-tokens "^3.0.1"
|
||||
merge-source-map "^1.0.3"
|
||||
source-map "^0.5.6"
|
||||
|
||||
asap@~2.0.3:
|
||||
version "2.0.6"
|
||||
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
|
||||
@@ -1121,7 +1287,7 @@ block-stream@*:
|
||||
dependencies:
|
||||
inherits "~2.0.0"
|
||||
|
||||
bluebird@^3.4.7:
|
||||
bluebird@^3.4.7, bluebird@^3.5.1:
|
||||
version "3.5.1"
|
||||
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
|
||||
|
||||
@@ -1329,6 +1495,24 @@ bytes@3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
|
||||
|
||||
cacache@^10.0.4:
|
||||
version "10.0.4"
|
||||
resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460"
|
||||
dependencies:
|
||||
bluebird "^3.5.1"
|
||||
chownr "^1.0.1"
|
||||
glob "^7.1.2"
|
||||
graceful-fs "^4.1.11"
|
||||
lru-cache "^4.1.1"
|
||||
mississippi "^2.0.0"
|
||||
mkdirp "^0.5.1"
|
||||
move-concurrently "^1.0.1"
|
||||
promise-inflight "^1.0.1"
|
||||
rimraf "^2.6.2"
|
||||
ssri "^5.2.4"
|
||||
unique-filename "^1.1.0"
|
||||
y18n "^4.0.0"
|
||||
|
||||
cache-base@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
|
||||
@@ -1482,6 +1666,16 @@ chokidar@^2.0.2:
|
||||
optionalDependencies:
|
||||
fsevents "^1.0.0"
|
||||
|
||||
chownr@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181"
|
||||
|
||||
chrome-trace-event@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
ci-info@^1.0.0:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.2.tgz#03561259db48d0474c8bdc90f5b47b068b6bbfb4"
|
||||
@@ -1671,7 +1865,7 @@ concat-map@0.0.1:
|
||||
version "0.0.1"
|
||||
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||
|
||||
concat-stream@^1.6.0:
|
||||
concat-stream@^1.5.0, concat-stream@^1.6.0:
|
||||
version "1.6.1"
|
||||
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.1.tgz#261b8f518301f1d834e36342b9fea095d2620a26"
|
||||
dependencies:
|
||||
@@ -1743,6 +1937,17 @@ cookie@0.3.1:
|
||||
version "0.3.1"
|
||||
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
|
||||
|
||||
copy-concurrently@^1.0.0:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
|
||||
dependencies:
|
||||
aproba "^1.1.1"
|
||||
fs-write-stream-atomic "^1.0.8"
|
||||
iferr "^0.1.5"
|
||||
mkdirp "^0.5.1"
|
||||
rimraf "^2.5.4"
|
||||
run-queue "^1.0.0"
|
||||
|
||||
copy-descriptor@^0.1.0:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
|
||||
@@ -1876,6 +2081,25 @@ css-loader@0.28.7:
|
||||
postcss-value-parser "^3.3.0"
|
||||
source-list-map "^2.0.0"
|
||||
|
||||
css-loader@^0.28.11:
|
||||
version "0.28.11"
|
||||
resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.11.tgz#c3f9864a700be2711bb5a2462b2389b1a392dab7"
|
||||
dependencies:
|
||||
babel-code-frame "^6.26.0"
|
||||
css-selector-tokenizer "^0.7.0"
|
||||
cssnano "^3.10.0"
|
||||
icss-utils "^2.1.0"
|
||||
loader-utils "^1.0.2"
|
||||
lodash.camelcase "^4.3.0"
|
||||
object-assign "^4.1.1"
|
||||
postcss "^5.0.6"
|
||||
postcss-modules-extract-imports "^1.2.0"
|
||||
postcss-modules-local-by-default "^1.2.0"
|
||||
postcss-modules-scope "^1.1.0"
|
||||
postcss-modules-values "^1.3.0"
|
||||
postcss-value-parser "^3.3.0"
|
||||
source-list-map "^2.0.0"
|
||||
|
||||
css-parse@1.7.x:
|
||||
version "1.7.0"
|
||||
resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-1.7.0.tgz#321f6cf73782a6ff751111390fc05e2c657d8c9b"
|
||||
@@ -1905,7 +2129,7 @@ cssesc@^0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4"
|
||||
|
||||
"cssnano@>=2.6.1 <4":
|
||||
"cssnano@>=2.6.1 <4", cssnano@^3.10.0:
|
||||
version "3.10.0"
|
||||
resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
|
||||
dependencies:
|
||||
@@ -1965,6 +2189,10 @@ currently-unhandled@^0.4.1:
|
||||
dependencies:
|
||||
array-find-index "^1.0.1"
|
||||
|
||||
cyclist@~0.2.2:
|
||||
version "0.2.2"
|
||||
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640"
|
||||
|
||||
d@1:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f"
|
||||
@@ -2264,6 +2492,15 @@ duplexer@^0.1.1:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
|
||||
|
||||
duplexify@^3.4.2, duplexify@^3.6.0:
|
||||
version "3.6.0"
|
||||
resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.0.tgz#592903f5d80b38d037220541264d69a198fb3410"
|
||||
dependencies:
|
||||
end-of-stream "^1.0.0"
|
||||
inherits "^2.0.1"
|
||||
readable-stream "^2.0.0"
|
||||
stream-shift "^1.0.0"
|
||||
|
||||
ecc-jsbn@~0.1.1:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
|
||||
@@ -2308,6 +2545,12 @@ encoding@^0.1.11:
|
||||
dependencies:
|
||||
iconv-lite "~0.4.13"
|
||||
|
||||
end-of-stream@^1.0.0, end-of-stream@^1.1.0:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
|
||||
dependencies:
|
||||
once "^1.4.0"
|
||||
|
||||
enhanced-resolve@^3.4.0:
|
||||
version "3.4.1"
|
||||
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e"
|
||||
@@ -2317,6 +2560,14 @@ enhanced-resolve@^3.4.0:
|
||||
object-assign "^4.0.1"
|
||||
tapable "^0.2.7"
|
||||
|
||||
enhanced-resolve@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.0.0.tgz#e34a6eaa790f62fccd71d93959f56b2b432db10a"
|
||||
dependencies:
|
||||
graceful-fs "^4.1.2"
|
||||
memory-fs "^0.4.0"
|
||||
tapable "^1.0.0"
|
||||
|
||||
enquire.js@^2.1.1, enquire.js@^2.1.6:
|
||||
version "2.1.6"
|
||||
resolved "https://registry.yarnpkg.com/enquire.js/-/enquire.js-2.1.6.tgz#3e8780c9b8b835084c3f60e166dbc3c2a3c89814"
|
||||
@@ -2419,7 +2670,7 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
||||
|
||||
escodegen@^1.6.1:
|
||||
escodegen@^1.6.1, escodegen@^1.8.1:
|
||||
version "1.9.1"
|
||||
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2"
|
||||
dependencies:
|
||||
@@ -2933,6 +3184,13 @@ flatten@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
|
||||
|
||||
flush-write-stream@^1.0.0:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd"
|
||||
dependencies:
|
||||
inherits "^2.0.1"
|
||||
readable-stream "^2.0.4"
|
||||
|
||||
for-in@^1.0.1, for-in@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
|
||||
@@ -2973,6 +3231,13 @@ fresh@0.5.2:
|
||||
version "0.5.2"
|
||||
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
|
||||
|
||||
from2@^2.1.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
|
||||
dependencies:
|
||||
inherits "^2.0.1"
|
||||
readable-stream "^2.0.0"
|
||||
|
||||
fs-extra@3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291"
|
||||
@@ -2991,6 +3256,15 @@ fs-extra@^0.30.0:
|
||||
path-is-absolute "^1.0.0"
|
||||
rimraf "^2.2.8"
|
||||
|
||||
fs-write-stream-atomic@^1.0.8:
|
||||
version "1.0.10"
|
||||
resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
|
||||
dependencies:
|
||||
graceful-fs "^4.1.2"
|
||||
iferr "^0.1.5"
|
||||
imurmurhash "^0.1.4"
|
||||
readable-stream "1 || 2"
|
||||
|
||||
fs.realpath@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
||||
@@ -3356,7 +3630,7 @@ html-entities@^1.2.0:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f"
|
||||
|
||||
html-minifier@^3.2.3:
|
||||
html-minifier@^3.2.3, html-minifier@^3.4.3:
|
||||
version "3.5.10"
|
||||
resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.10.tgz#8522c772c388db81aa5c26f62033302d906ea1c7"
|
||||
dependencies:
|
||||
@@ -3448,10 +3722,18 @@ icss-utils@^2.1.0:
|
||||
dependencies:
|
||||
postcss "^6.0.1"
|
||||
|
||||
ieee754@^1.1.11:
|
||||
version "1.1.12"
|
||||
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b"
|
||||
|
||||
ieee754@^1.1.4:
|
||||
version "1.1.8"
|
||||
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
|
||||
|
||||
iferr@^0.1.5:
|
||||
version "0.1.5"
|
||||
resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
|
||||
|
||||
ignore@^3.3.3:
|
||||
version "3.3.7"
|
||||
resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021"
|
||||
@@ -3724,6 +4006,10 @@ is-installed-globally@^0.1.0:
|
||||
global-dirs "^0.1.0"
|
||||
is-path-inside "^1.0.0"
|
||||
|
||||
is-keyword-js@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/is-keyword-js/-/is-keyword-js-1.0.3.tgz#ac30dcf35b671f4b27b17f5cb57235126021132d"
|
||||
|
||||
is-npm@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4"
|
||||
@@ -4156,7 +4442,7 @@ js-base64@^2.1.9:
|
||||
version "2.4.3"
|
||||
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.3.tgz#2e545ec2b0f2957f41356510205214e98fad6582"
|
||||
|
||||
js-tokens@^3.0.0, js-tokens@^3.0.2:
|
||||
js-tokens@^3.0.0, js-tokens@^3.0.1, js-tokens@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
|
||||
|
||||
@@ -4214,6 +4500,10 @@ json-loader@^0.5.4:
|
||||
version "0.5.7"
|
||||
resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d"
|
||||
|
||||
json-parse-better-errors@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
|
||||
|
||||
json-schema-traverse@^0.3.0:
|
||||
version "0.3.1"
|
||||
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
|
||||
@@ -4337,6 +4627,10 @@ lcid@^1.0.0:
|
||||
dependencies:
|
||||
invert-kv "^1.0.0"
|
||||
|
||||
leb@^0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/leb/-/leb-0.3.0.tgz#32bee9fad168328d6aea8522d833f4180eed1da3"
|
||||
|
||||
leven@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
|
||||
@@ -4348,6 +4642,16 @@ levn@^0.3.0, levn@~0.3.0:
|
||||
prelude-ls "~1.1.2"
|
||||
type-check "~0.3.2"
|
||||
|
||||
light-dialog@^2.0.6:
|
||||
version "2.0.6"
|
||||
resolved "https://registry.yarnpkg.com/light-dialog/-/light-dialog-2.0.6.tgz#4b3c23638acf6d61467f60c727ceb39c43cc8602"
|
||||
dependencies:
|
||||
art-template "^4.12.2"
|
||||
art-template-loader "^1.4.3"
|
||||
css-loader "^0.28.11"
|
||||
style-loader "^0.21.0"
|
||||
webpack "^4.9.1"
|
||||
|
||||
line-height@^0.1.1:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/line-height/-/line-height-0.1.1.tgz#e86705fbf0a6f50607aed65500d69db2d9db37e2"
|
||||
@@ -4489,6 +4793,10 @@ loglevel@^1.4.1:
|
||||
version "1.6.1"
|
||||
resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa"
|
||||
|
||||
long@^3.2.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b"
|
||||
|
||||
longest@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
|
||||
@@ -4514,7 +4822,7 @@ lowercase-keys@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306"
|
||||
|
||||
lru-cache@^4.0.1:
|
||||
lru-cache@^4.0.1, lru-cache@^4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55"
|
||||
dependencies:
|
||||
@@ -4537,6 +4845,10 @@ makeerror@1.0.x:
|
||||
dependencies:
|
||||
tmpl "1.0.x"
|
||||
|
||||
mamacro@^0.0.3:
|
||||
version "0.0.3"
|
||||
resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4"
|
||||
|
||||
map-cache@^0.2.2:
|
||||
version "0.2.2"
|
||||
resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
|
||||
@@ -4598,6 +4910,12 @@ merge-descriptors@1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
|
||||
|
||||
merge-source-map@^1.0.3:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646"
|
||||
dependencies:
|
||||
source-map "^0.6.1"
|
||||
|
||||
merge@^1.1.3:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da"
|
||||
@@ -4707,6 +5025,21 @@ minimist@1.2.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
|
||||
|
||||
mississippi@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f"
|
||||
dependencies:
|
||||
concat-stream "^1.5.0"
|
||||
duplexify "^3.4.2"
|
||||
end-of-stream "^1.1.0"
|
||||
flush-write-stream "^1.0.0"
|
||||
from2 "^2.1.0"
|
||||
parallel-transform "^1.1.0"
|
||||
pump "^2.0.1"
|
||||
pumpify "^1.3.3"
|
||||
stream-each "^1.1.0"
|
||||
through2 "^2.0.0"
|
||||
|
||||
mixin-deep@^1.2.0:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe"
|
||||
@@ -4734,6 +5067,17 @@ moment@2.x, moment@^2.19.3:
|
||||
version "2.21.0"
|
||||
resolved "https://registry.yarnpkg.com/moment/-/moment-2.21.0.tgz#2a114b51d2a6ec9e6d83cf803f838a878d8a023a"
|
||||
|
||||
move-concurrently@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
|
||||
dependencies:
|
||||
aproba "^1.1.1"
|
||||
copy-concurrently "^1.0.0"
|
||||
fs-write-stream-atomic "^1.0.8"
|
||||
mkdirp "^0.5.1"
|
||||
rimraf "^2.5.4"
|
||||
run-queue "^1.0.3"
|
||||
|
||||
ms@2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
||||
@@ -4997,7 +5341,7 @@ on-headers@~1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7"
|
||||
|
||||
once@^1.3.0, once@^1.3.3, once@^1.4.0:
|
||||
once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
||||
dependencies:
|
||||
@@ -5127,6 +5471,14 @@ pako@~1.0.5:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258"
|
||||
|
||||
parallel-transform@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06"
|
||||
dependencies:
|
||||
cyclist "~0.2.2"
|
||||
inherits "^2.0.3"
|
||||
readable-stream "^2.1.5"
|
||||
|
||||
param-case@2.1.x:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247"
|
||||
@@ -5456,27 +5808,27 @@ postcss-minify-selectors@^2.0.4:
|
||||
postcss "^5.0.14"
|
||||
postcss-selector-parser "^2.0.0"
|
||||
|
||||
postcss-modules-extract-imports@^1.0.0:
|
||||
postcss-modules-extract-imports@^1.0.0, postcss-modules-extract-imports@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85"
|
||||
dependencies:
|
||||
postcss "^6.0.1"
|
||||
|
||||
postcss-modules-local-by-default@^1.0.1:
|
||||
postcss-modules-local-by-default@^1.0.1, postcss-modules-local-by-default@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069"
|
||||
dependencies:
|
||||
css-selector-tokenizer "^0.7.0"
|
||||
postcss "^6.0.1"
|
||||
|
||||
postcss-modules-scope@^1.0.0:
|
||||
postcss-modules-scope@^1.0.0, postcss-modules-scope@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90"
|
||||
dependencies:
|
||||
css-selector-tokenizer "^0.7.0"
|
||||
postcss "^6.0.1"
|
||||
|
||||
postcss-modules-values@^1.1.0:
|
||||
postcss-modules-values@^1.1.0, postcss-modules-values@^1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20"
|
||||
dependencies:
|
||||
@@ -5626,6 +5978,10 @@ progress@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f"
|
||||
|
||||
promise-inflight@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
|
||||
|
||||
promise@8.0.1:
|
||||
version "8.0.1"
|
||||
resolved "https://registry.yarnpkg.com/promise/-/promise-8.0.1.tgz#e45d68b00a17647b6da711bf85ed6ed47208f450"
|
||||
@@ -5671,6 +6027,21 @@ public-encrypt@^4.0.0:
|
||||
parse-asn1 "^5.0.0"
|
||||
randombytes "^2.0.1"
|
||||
|
||||
pump@^2.0.0, pump@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
|
||||
dependencies:
|
||||
end-of-stream "^1.1.0"
|
||||
once "^1.3.1"
|
||||
|
||||
pumpify@^1.3.3:
|
||||
version "1.5.1"
|
||||
resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
|
||||
dependencies:
|
||||
duplexify "^3.6.0"
|
||||
inherits "^2.0.3"
|
||||
pump "^2.0.0"
|
||||
|
||||
punycode@1.3.2:
|
||||
version "1.3.2"
|
||||
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
|
||||
@@ -6186,16 +6557,7 @@ read-pkg@^2.0.0:
|
||||
normalize-package-data "^2.3.2"
|
||||
path-type "^2.0.0"
|
||||
|
||||
readable-stream@1.0:
|
||||
version "1.0.34"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
|
||||
dependencies:
|
||||
core-util-is "~1.0.0"
|
||||
inherits "~2.0.1"
|
||||
isarray "0.0.1"
|
||||
string_decoder "~0.10.x"
|
||||
|
||||
readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3:
|
||||
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3:
|
||||
version "2.3.5"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d"
|
||||
dependencies:
|
||||
@@ -6207,6 +6569,15 @@ readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable
|
||||
string_decoder "~1.0.3"
|
||||
util-deprecate "~1.0.1"
|
||||
|
||||
readable-stream@1.0:
|
||||
version "1.0.34"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
|
||||
dependencies:
|
||||
core-util-is "~1.0.0"
|
||||
inherits "~2.0.1"
|
||||
isarray "0.0.1"
|
||||
string_decoder "~0.10.x"
|
||||
|
||||
readdirp@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
|
||||
@@ -6449,7 +6820,7 @@ right-align@^0.1.1:
|
||||
dependencies:
|
||||
align-text "^0.1.1"
|
||||
|
||||
rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1:
|
||||
rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2:
|
||||
version "2.6.2"
|
||||
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
|
||||
dependencies:
|
||||
@@ -6475,6 +6846,12 @@ run-async@^2.2.0:
|
||||
dependencies:
|
||||
is-promise "^2.1.0"
|
||||
|
||||
run-queue@^1.0.0, run-queue@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
|
||||
dependencies:
|
||||
aproba "^1.1.1"
|
||||
|
||||
rx-lite-aggregates@^4.0.8:
|
||||
version "4.0.8"
|
||||
resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be"
|
||||
@@ -6525,6 +6902,13 @@ schema-utils@^0.3.0:
|
||||
dependencies:
|
||||
ajv "^5.0.0"
|
||||
|
||||
schema-utils@^0.4.4, schema-utils@^0.4.5:
|
||||
version "0.4.5"
|
||||
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e"
|
||||
dependencies:
|
||||
ajv "^6.1.0"
|
||||
ajv-keywords "^3.1.0"
|
||||
|
||||
select-hose@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
|
||||
@@ -6563,6 +6947,10 @@ send@0.16.1:
|
||||
range-parser "~1.2.0"
|
||||
statuses "~1.3.1"
|
||||
|
||||
serialize-javascript@^1.4.0:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.5.0.tgz#1aa336162c88a890ddad5384baebc93a655161fe"
|
||||
|
||||
serve-index@^1.7.2:
|
||||
version "1.9.1"
|
||||
resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239"
|
||||
@@ -6860,6 +7248,12 @@ sshpk@^1.7.0:
|
||||
jsbn "~0.1.0"
|
||||
tweetnacl "~0.14.0"
|
||||
|
||||
ssri@^5.2.4:
|
||||
version "5.3.0"
|
||||
resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06"
|
||||
dependencies:
|
||||
safe-buffer "^5.1.1"
|
||||
|
||||
static-extend@^0.1.1:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
|
||||
@@ -6878,6 +7272,13 @@ stream-browserify@^2.0.1:
|
||||
inherits "~2.0.1"
|
||||
readable-stream "^2.0.2"
|
||||
|
||||
stream-each@^1.1.0:
|
||||
version "1.2.2"
|
||||
resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.2.tgz#8e8c463f91da8991778765873fe4d960d8f616bd"
|
||||
dependencies:
|
||||
end-of-stream "^1.1.0"
|
||||
stream-shift "^1.0.0"
|
||||
|
||||
stream-http@^2.7.2:
|
||||
version "2.8.0"
|
||||
resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.0.tgz#fd86546dac9b1c91aff8fc5d287b98fafb41bc10"
|
||||
@@ -6888,6 +7289,10 @@ stream-http@^2.7.2:
|
||||
to-arraybuffer "^1.0.0"
|
||||
xtend "^4.0.0"
|
||||
|
||||
stream-shift@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
|
||||
|
||||
strict-uri-encode@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
|
||||
@@ -6980,6 +7385,13 @@ style-loader@0.19.0:
|
||||
loader-utils "^1.0.2"
|
||||
schema-utils "^0.3.0"
|
||||
|
||||
style-loader@^0.21.0:
|
||||
version "0.21.0"
|
||||
resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.21.0.tgz#68c52e5eb2afc9ca92b6274be277ee59aea3a852"
|
||||
dependencies:
|
||||
loader-utils "^1.1.0"
|
||||
schema-utils "^0.4.5"
|
||||
|
||||
stylus-loader@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/stylus-loader/-/stylus-loader-3.0.2.tgz#27a706420b05a38e038e7cacb153578d450513c6"
|
||||
@@ -7082,6 +7494,10 @@ tapable@^0.2.7:
|
||||
version "0.2.8"
|
||||
resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22"
|
||||
|
||||
tapable@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.0.0.tgz#cbb639d9002eed9c6b5975eb20598d7936f1f9f2"
|
||||
|
||||
tar-pack@^3.4.0:
|
||||
version "3.4.1"
|
||||
resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f"
|
||||
@@ -7127,6 +7543,13 @@ throat@^3.0.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/throat/-/throat-3.2.0.tgz#50cb0670edbc40237b9e347d7e1f88e4620af836"
|
||||
|
||||
through2@^2.0.0:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
|
||||
dependencies:
|
||||
readable-stream "^2.1.5"
|
||||
xtend "~4.0.1"
|
||||
|
||||
through@^2.3.6:
|
||||
version "2.3.8"
|
||||
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
||||
@@ -7211,6 +7634,10 @@ trim-right@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
|
||||
|
||||
tslib@^1.9.0:
|
||||
version "1.9.3"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
|
||||
|
||||
tty-browserify@0.0.0:
|
||||
version "0.0.0"
|
||||
resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
|
||||
@@ -7246,6 +7673,13 @@ ua-parser-js@^0.7.9:
|
||||
version "0.7.17"
|
||||
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac"
|
||||
|
||||
uglify-es@^3.3.4:
|
||||
version "3.3.10"
|
||||
resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.10.tgz#8b0b7992cebe20edc26de1bf325cef797b8f3fa5"
|
||||
dependencies:
|
||||
commander "~2.14.1"
|
||||
source-map "~0.6.1"
|
||||
|
||||
uglify-js@3.3.x, uglify-js@^3.0.13:
|
||||
version "3.3.13"
|
||||
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.13.tgz#8a1a89eeb16e2d6a66b0db2b04cb871af3c669cf"
|
||||
@@ -7274,6 +7708,19 @@ uglifyjs-webpack-plugin@^0.4.6:
|
||||
uglify-js "^2.8.29"
|
||||
webpack-sources "^1.0.1"
|
||||
|
||||
uglifyjs-webpack-plugin@^1.2.4:
|
||||
version "1.2.7"
|
||||
resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.7.tgz#57638dd99c853a1ebfe9d97b42160a8a507f9d00"
|
||||
dependencies:
|
||||
cacache "^10.0.4"
|
||||
find-cache-dir "^1.0.0"
|
||||
schema-utils "^0.4.5"
|
||||
serialize-javascript "^1.4.0"
|
||||
source-map "^0.6.1"
|
||||
uglify-es "^3.3.4"
|
||||
webpack-sources "^1.1.0"
|
||||
worker-farm "^1.5.2"
|
||||
|
||||
uid-number@^0.0.6:
|
||||
version "0.0.6"
|
||||
resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
|
||||
@@ -7301,6 +7748,18 @@ uniqs@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02"
|
||||
|
||||
unique-filename@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3"
|
||||
dependencies:
|
||||
unique-slug "^2.0.0"
|
||||
|
||||
unique-slug@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.0.tgz#db6676e7c7cc0629878ff196097c78855ae9f4ab"
|
||||
dependencies:
|
||||
imurmurhash "^0.1.4"
|
||||
|
||||
unique-string@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a"
|
||||
@@ -7480,7 +7939,7 @@ watch@~0.10.0:
|
||||
version "0.10.0"
|
||||
resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc"
|
||||
|
||||
watchpack@^1.4.0:
|
||||
watchpack@^1.4.0, watchpack@^1.5.0:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.5.0.tgz#231e783af830a22f8966f65c4c4bacc814072eed"
|
||||
dependencies:
|
||||
@@ -7551,7 +8010,7 @@ webpack-manifest-plugin@1.3.2:
|
||||
fs-extra "^0.30.0"
|
||||
lodash ">=3.5 <5"
|
||||
|
||||
webpack-sources@^1.0.1:
|
||||
webpack-sources@^1.0.1, webpack-sources@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54"
|
||||
dependencies:
|
||||
@@ -7585,6 +8044,36 @@ webpack@3.8.1:
|
||||
webpack-sources "^1.0.1"
|
||||
yargs "^8.0.2"
|
||||
|
||||
webpack@^4.9.1:
|
||||
version "4.12.2"
|
||||
resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.12.2.tgz#d2b8418eb40cedcbf2c1f5905d23a99546011ce9"
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.5.12"
|
||||
"@webassemblyjs/helper-module-context" "1.5.12"
|
||||
"@webassemblyjs/wasm-edit" "1.5.12"
|
||||
"@webassemblyjs/wasm-opt" "1.5.12"
|
||||
"@webassemblyjs/wasm-parser" "1.5.12"
|
||||
acorn "^5.6.2"
|
||||
acorn-dynamic-import "^3.0.0"
|
||||
ajv "^6.1.0"
|
||||
ajv-keywords "^3.1.0"
|
||||
chrome-trace-event "^1.0.0"
|
||||
enhanced-resolve "^4.0.0"
|
||||
eslint-scope "^3.7.1"
|
||||
json-parse-better-errors "^1.0.2"
|
||||
loader-runner "^2.3.0"
|
||||
loader-utils "^1.1.0"
|
||||
memory-fs "~0.4.1"
|
||||
micromatch "^3.1.8"
|
||||
mkdirp "~0.5.0"
|
||||
neo-async "^2.5.0"
|
||||
node-libs-browser "^2.0.0"
|
||||
schema-utils "^0.4.4"
|
||||
tapable "^1.0.0"
|
||||
uglifyjs-webpack-plugin "^1.2.4"
|
||||
watchpack "^1.5.0"
|
||||
webpack-sources "^1.0.1"
|
||||
|
||||
websocket-driver@>=0.5.1:
|
||||
version "0.7.0"
|
||||
resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb"
|
||||
@@ -7659,7 +8148,7 @@ wordwrap@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
|
||||
|
||||
worker-farm@^1.3.1:
|
||||
worker-farm@^1.3.1, worker-farm@^1.5.2:
|
||||
version "1.5.4"
|
||||
resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.4.tgz#4debbe46b40edefcc717ebde74a90b1ae1e909a1"
|
||||
dependencies:
|
||||
@@ -7711,6 +8200,10 @@ y18n@^3.2.1:
|
||||
version "3.2.1"
|
||||
resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
|
||||
|
||||
y18n@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
|
||||
|
||||
yallist@^2.1.2:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
|
||||
|
||||
Reference in new issue
Block a user