diff --git a/package.json b/package.json index 9d5c503..8523155 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/src/App.css b/src/App.css index 2fbc800..11b9206 100644 --- a/src/App.css +++ b/src/App.css @@ -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{ diff --git a/src/App.js b/src/App.js index aef9b0d..fbaaa21 100644 --- a/src/App.js +++ b/src/App.js @@ -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 ( -
+
@@ -64,9 +59,6 @@ class App extends Component {
- ); } diff --git a/src/DataStore.js b/src/DataStore.js index bb7b783..4302fbb 100644 --- a/src/DataStore.js +++ b/src/DataStore.js @@ -1,79 +1,11 @@ -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; @@ -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; - - songs.push(songMsg); - - } - this.searchSongList = json.data.page > 1 ? this.searchSongList.concat(songs) : songs; - } - }).catch((err) => { - this.errMassge = err; - }); + 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; + + 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; + + 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; - - songs.push(songMsg); - - } - this.searchSongList = songs; - } - }).catch((err) => { - this.errMassge = err; - }); + switch (this.dataSource) { + case 1: + getNeteaseHotSongList() + .then(list => { + this.listType = 1; + this.searchSongList = list; + }).catch((err) => { + this.errMassge = err; + }); + break; + + case 2: + getKugouNewSongList() + .then(list => { + this.listType = 1; + this.searchSongList = list; + }).catch((err) => { + this.errMassge = err; + }); + break; + + default: + break; + } + } 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; - - //if(this.findInPlayList(hash) > 0) return; - - this.addPlaySongList(songMassge); - - if(callback) callback(songMassge,this.playSongList.length - 1); - } - }).catch((err) => { - //console.log(err); - this.errMassge = err; - }); + 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; + + case 2: + getKugouSongMassge(hash) + .then(songMassge => { + this.addPlaySongList(songMassge); + if(callback) callback(songMassge,this.playSongList.length - 1); + }).catch((err) => { + this.errMassge = err; + }); + break; + + 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); } diff --git a/src/assets/iconfont.eot b/src/assets/iconfont.eot index 810f7e1..02b6a07 100644 Binary files a/src/assets/iconfont.eot and b/src/assets/iconfont.eot differ diff --git a/src/assets/iconfont.svg b/src/assets/iconfont.svg index 70af7b5..870bba1 100644 --- a/src/assets/iconfont.svg +++ b/src/assets/iconfont.svg @@ -66,6 +66,12 @@ t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q- + + + + + + diff --git a/src/assets/iconfont.ttf b/src/assets/iconfont.ttf index 0f8bedf..f90bb80 100644 Binary files a/src/assets/iconfont.ttf and b/src/assets/iconfont.ttf differ diff --git a/src/assets/iconfont.woff b/src/assets/iconfont.woff index 65905c2..a0dd56f 100644 Binary files a/src/assets/iconfont.woff and b/src/assets/iconfont.woff differ diff --git a/src/components/Progress.css b/src/components/Progress.css index 39e02fe..b900c43 100644 --- a/src/components/Progress.css +++ b/src/components/Progress.css @@ -1,5 +1,4 @@ .progress-box { - margin: 0 208px 0 166px; } diff --git a/src/components/Progress.js b/src/components/Progress.js index 4fb0e59..fdadfbb 100644 --- a/src/components/Progress.js +++ b/src/components/Progress.js @@ -41,7 +41,7 @@ class Progress extends Component { render() { return ( -
+
{DataStore.coutSongMassge.SongName}-{DataStore.coutSongMassge.SingerName}
{this.timeFormat(DataStore.currentTime)} / {this.timeFormat(DataStore.coutSongMassge.Duration)}
diff --git a/src/components/SearchBar.css b/src/components/SearchBar.css index 92a2e91..6a9ffdf 100644 --- a/src/components/SearchBar.css +++ b/src/components/SearchBar.css @@ -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; } diff --git a/src/components/SearchBar.js b/src/components/SearchBar.js index 21b651c..c66c557 100644 --- a/src/components/SearchBar.js +++ b/src/components/SearchBar.js @@ -39,13 +39,28 @@ class SearchBar extends Component { }); } + selectSource = (event) => { + DataStore.dataSource = parseInt(event.target.getAttribute('type'), 10); + //console.log(DataStore.dataSource) + } + render() { return (
-
- +
+
+
+
+
+
+ +
+ + + ) + }else{ + return ( +
  • + 已下架 +
  • + ) + } + } + ListItems = (list) => { //console.log(list); if(list.length > 0) { @@ -46,8 +67,8 @@ class SongList extends Component { ) } - - if(DataStore.listType === 0 && list.length >= DataStore.pageSize) { + + if(DataStore.listType === 0 && !DataStore.lastPage) { listItems.push(
    点击加载更多 diff --git a/src/datasrc/Kugou.js b/src/datasrc/Kugou.js new file mode 100644 index 0000000..0de2a76 --- /dev/null +++ b/src/datasrc/Kugou.js @@ -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 } \ No newline at end of file diff --git a/src/datasrc/Netease.js b/src/datasrc/Netease.js new file mode 100644 index 0000000..e249077 --- /dev/null +++ b/src/datasrc/Netease.js @@ -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 } \ No newline at end of file diff --git a/src/datasrc/Util.js b/src/datasrc/Util.js new file mode 100644 index 0000000..a57a471 --- /dev/null +++ b/src/datasrc/Util.js @@ -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 } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 3963a17..543c40a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -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"