A music player that connects to your cloud/distributed storage.
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

Fix processing issues with Google Drive

+612 -134
+2 -1
CHANGELOG.md
··· 2 2 3 3 ## 2.2.1 4 4 5 - - Fixes processing issue with WebDAV 5 + - Fixes processing issues with Google Drive 6 + - Fixes processing issues with WebDAV 6 7 7 8 ## 2.2.0 8 9
+2 -2
package.json
··· 20 20 "webpack-cli": "^3.3.10" 21 21 }, 22 22 "dependencies": { 23 + "@tokenizer/http": "^0.4.0", 23 24 "blockstack": "https://gist.github.com/a888e02d7441aeb2af99263a3add0f73.git", 24 25 "fast-text-encoding": "^1.0.0", 25 26 "lunr": "^2.3.8", 26 - "music-metadata-browser": "^1.8.1", 27 + "music-metadata-browser": "^1.9.2", 27 28 "pep": "mpizenberg/elm-pep#071616d75ca61e261fdefc7b55bc46c34e44ea22", 28 29 "remotestoragejs": "^1.2.2", 29 - "streaming-http-token-reader": "^0.3.1", 30 30 "subworkers": "^1.0.1", 31 31 "tocca": "^2.0.4" 32 32 }
+3
src/Applications/UI/Sources/Form.elm
··· 612 612 , text "continue to the next screen." 613 613 ] 614 614 , text " Changing the client stuff allows you to use your own Google OAuth client." 615 + , text " Disclaimer: " 616 + , text "The Google Drive API is fairly slow and limited, " 617 + , text "consider using a different service." 615 618 ] 616 619 617 620 Ipfs ->
+7 -3
src/Javascript/Workers/service.js
··· 69 69 ) 70 70 71 71 // When doing a request with access token in the url, put it in the headers instead 72 - } else if (event.request.url.includes("&access_token=")) { 73 - const [urlWithoutToken, token] = event.request.url.split("&access_token=") 72 + } else if (event.request.url.includes("access_token=")) { 73 + const url = new URL(event.request.url) 74 + const token = url.searchParams.get("access_token") 75 + 76 + url.searchParams.delete("access_token") 77 + url.search = "?" + url.searchParams.toString() 74 78 75 79 newRequestWithAuth( 76 80 event, 77 - urlWithoutToken, 81 + url.toString(), 78 82 "Bearer " + token 79 83 ) 80 84
-13
src/Javascript/audio-engine.js
··· 438 438 } 439 439 440 440 441 - // function mimeType(fileExtension) { 442 - // switch (fileExtension) { 443 - // case ".mp3": return "audio/mpeg"; 444 - // case ".mp4": return "audio/mp4"; 445 - // case ".m4a": return "audio/mp4"; 446 - // case ".flac": return "audio/flac"; 447 - // case ".ogg": return "audio/ogg"; 448 - // case ".wav": return "audio/wave"; 449 - // case ".webm": return "audio/webm"; 450 - // } 451 - // } 452 - 453 - 454 441 function playAudio(element, queueItem, app) { 455 442 if (queueItem.progress && element.duration) { 456 443 element.currentTime = queueItem.progress * element.duration
+13
src/Javascript/common.js
··· 21 21 export function identity(a) { 22 22 return a 23 23 } 24 + 25 + 26 + export function mimeType(fileExtension) { 27 + switch (fileExtension) { 28 + case "mp3": return "audio/mpeg"; 29 + case "mp4": return "audio/mp4"; 30 + case "m4a": return "audio/mp4"; 31 + case "flac": return "audio/flac"; 32 + case "ogg": return "audio/ogg"; 33 + case "wav": return "audio/wave"; 34 + case "webm": return "audio/webm"; 35 + } 36 + }
+65 -21
src/Javascript/processing.js
··· 6 6 7 7 8 8 import * as musicMetadata from "music-metadata-browser" 9 - import { StreamingHttpTokenReader } from "streaming-http-token-reader" 9 + import { HttpTokenizer } from "@tokenizer/http" 10 10 11 + import { mimeType } from "./common" 11 12 import { transformUrl } from "./urls" 12 13 13 14 ··· 18 19 const initialPromise = Promise.resolve([]) 19 20 20 21 return context.urlsForTags.reduce((accumulator, urls, idx) => { 21 - let getUrl 22 - let headUrl 22 + return accumulator.then(col => { 23 + let get, head 23 24 24 - return accumulator.then(col => { 25 25 const filename = context 26 26 .receivedFilePaths[idx] 27 27 .split("/") 28 28 .reverse()[0] 29 - .replace(/\.\w+$/, "") 30 29 31 - return transformUrl(urls.getUrl) 32 - .then(url => { getUrl = url; return transformUrl(urls.headUrl) }) 33 - .then(url => { headUrl = url; return getTags(getUrl, headUrl, filename) }) 30 + return transformUrl(urls.headUrl) 31 + .then(url => resolveUrl("HEAD", url)) 32 + .then(res => head = res) 33 + 34 + .then(_ => urls.headUrl === urls.getUrl 35 + ? head 36 + : transformUrl(urls.getUrl).then(url => resolveUrl("GET", url)) 37 + ) 38 + .then(res => get = res) 39 + 40 + .then(_ => getTags(head, get, filename)) 34 41 .then(r => col.concat(r)) 42 + 35 43 .catch(e => { 36 44 console.error(e) 37 45 return col.concat(null) ··· 64 72 65 73 66 74 67 - function getTags(getUrl, headUrl, filename) { 68 - const reader = StreamingHttpTokenReader.fromUrl( 69 - headUrl, 75 + function getTags(head, get, filename) { 76 + const fileExtMatch = filename.match(/\.(\w+)$/) 77 + const fileExt = fileExtMatch && fileExtMatch[1] 78 + 79 + // Content type 80 + const overrideContentType = ( 81 + get.url.includes("googleapis.com") || 82 + get.url.includes("googleusercontent.com") 83 + ) 84 + 85 + const fileMime = overrideContentType 86 + ? mimeType(fileExt) 87 + : head.mime 88 + 89 + // Reader 90 + const reader = HttpTokenizer.fromUrl( 91 + get.url, 70 92 readerConfiguration 71 93 ) 72 94 73 - return reader.init().then(_ => { 74 - reader.url = getUrl 95 + reader.contentType = fileMime 96 + reader.fileSize = head.size 97 + reader.url = get.url 75 98 76 - return musicMetadata.parseFromTokenizer( 77 - reader, 78 - reader.contentType, 79 - parserConfiguration 80 - ) 99 + // Get tags 100 + return musicMetadata.parseFromTokenizer( 101 + reader, 102 + reader.contentType, 103 + parserConfiguration 104 + ) 105 + .then(pickTags) 106 + .catch(err => { 107 + console.error(err) 108 + return fallbackTags(filename) 81 109 }) 82 - .then(pickTags) 83 - .catch(_ => fallbackTags(filename)) 84 110 } 85 111 86 112 ··· 102 128 103 129 104 130 function fallbackTags(filename) { 131 + const filenameWithoutExt = filename.replace(/\.\w+$/, "") 132 + 105 133 return { 106 134 disc: 1, 107 135 nr: 1, 108 136 album: "Unknown", 109 137 artist: "Unknown", 110 - title: filename, 138 + title: filenameWithoutExt, 111 139 genre: null, 112 140 year: null, 113 141 picture: null 114 142 } 115 143 } 144 + 145 + 146 + function resolveUrl(method, url) { 147 + return fetch(url, { 148 + method: method, 149 + headers: method === "HEAD" 150 + ? new Headers() 151 + : new Headers({ "Range": "bytes=0-0" }) 152 + 153 + }).then(resp => ({ 154 + mime: resp.headers.get("content-type"), 155 + size: resp.headers.get("content-length"), 156 + url: resp.url 157 + 158 + })) 159 + }
+38 -15
src/Library/Sources/Services/Google.elm
··· 12 12 import Json.Encode 13 13 import Sources exposing (Property, SourceData) 14 14 import Sources.Processing exposing (..) 15 + import Sources.Services.Google.Marker as Marker 15 16 import Sources.Services.Google.Parser as Parser 16 17 import Time 18 + import Url 17 19 18 20 19 21 ··· 186 188 folderId = 187 189 Dict.fetch "folderId" "" srcData 188 190 189 - queryBase = 190 - [ "mimeType contains 'audio/'" ] 191 - 192 191 query = 193 - case folderId of 192 + case String.trim folderId of 194 193 "" -> 195 - queryBase 194 + [ "mimeType contains 'audio/'" ] 196 195 197 196 fid -> 198 - queryBase ++ [ "'" ++ fid ++ "' in parents" ] 197 + let 198 + parentId = 199 + marker 200 + |> Marker.takeOne 201 + |> Maybe.withDefault (Marker.Directory fid) 202 + |> Marker.itemDirectory 203 + in 204 + [ "(mimeType contains 'audio/'" 205 + , "or mimeType = 'application/vnd.google-apps.folder')" 206 + , "and ('" ++ parentId ++ "' in parents)" 207 + ] 199 208 200 209 paramsBase = 201 - [ ( "pageSize", "1000" ) 202 - , ( "q", String.join " and " query ) 210 + [ ( "fields" 211 + , String.join ", " 212 + [ "nextPageToken" 213 + , "files/id" 214 + , "files/mimeType" 215 + , "files/name" 216 + , "files/trashed" 217 + ] 218 + ) 219 + , ( "pageSize", "1000" ) 220 + , ( "q", String.concat query ) 203 221 , ( "spaces", "drive" ) 204 222 ] 205 223 206 224 queryString = 207 - (case marker of 208 - InProgress cursor -> 209 - [ ( "pageToken", cursor ) 210 - ] 225 + (case Marker.takeOne marker of 226 + Just (Marker.Param { token }) -> 227 + [ ( "pageToken", token ) ] 211 228 212 229 _ -> 213 230 [] ··· 267 284 268 285 -} 269 286 makeTrackUrl : Time.Posix -> SourceData -> HttpMethod -> String -> String 270 - makeTrackUrl currentTime srcData method fileId = 287 + makeTrackUrl currentTime srcData method path = 271 288 let 289 + fileId = 290 + path 291 + |> String.split "?" 292 + |> List.head 293 + |> Maybe.withDefault path 294 + 272 295 accessToken = 273 296 Dict.fetch "accessToken" "" srcData 274 297 in 275 298 String.concat 276 299 [ "https://www.googleapis.com/drive/v3/files/" 277 - , fileId 300 + , Url.percentEncode fileId 278 301 , "?alt=media&access_token=" 279 - , accessToken 302 + , Url.percentEncode accessToken 280 303 ]
+164
src/Library/Sources/Services/Google/Marker.elm
··· 1 + module Sources.Services.Google.Marker exposing (..) 2 + 3 + {-| Custom `Marker` for the Google Drive API. 4 + 5 + The Google Drive API currently doesn't make a recursive list, 6 + so we have to manage that ourselves. 7 + 8 + This custom marker is a combination of: 9 + 10 + - The standard `nextPageToken` param 11 + - Our custom logic to handle recursive listings 12 + 13 + Example: InProgress "dir=example ¶ param=defaultMarker" 14 + 15 + -} 16 + 17 + import Sources.Processing exposing (Marker(..)) 18 + 19 + 20 + type MarkerItem 21 + = Directory String 22 + | Param { directory : String, token : String } 23 + 24 + 25 + separator : String 26 + separator = 27 + " ɑ " 28 + 29 + 30 + prefixer : String 31 + prefixer = 32 + " β " 33 + 34 + 35 + paramSeparator : String 36 + paramSeparator = 37 + " ɣ " 38 + 39 + 40 + 41 + -- IN 42 + 43 + 44 + concat : List MarkerItem -> Marker -> Marker 45 + concat list marker = 46 + let 47 + listStringified = 48 + List.map itemToString list 49 + 50 + result = 51 + case marker of 52 + InProgress m -> 53 + [ listStringified, String.split separator m ] 54 + |> List.concat 55 + |> String.join separator 56 + 57 + _ -> 58 + String.join separator listStringified 59 + in 60 + case result of 61 + "" -> 62 + TheEnd 63 + 64 + r -> 65 + InProgress r 66 + 67 + 68 + 69 + -- OUT 70 + 71 + 72 + {-| Take the first item and return it. 73 + -} 74 + takeOne : Marker -> Maybe MarkerItem 75 + takeOne marker = 76 + case marker of 77 + InProgress m -> 78 + m 79 + |> String.split separator 80 + |> List.head 81 + |> Maybe.andThen stringToItem 82 + 83 + _ -> 84 + Nothing 85 + 86 + 87 + {-| Remove the first item if there is one. 88 + -} 89 + removeOne : Marker -> Marker 90 + removeOne marker = 91 + case marker of 92 + InProgress m -> 93 + let 94 + tmp = 95 + m 96 + |> String.split separator 97 + |> List.drop 1 98 + |> String.join separator 99 + in 100 + case tmp of 101 + "" -> 102 + TheEnd 103 + 104 + x -> 105 + InProgress x 106 + 107 + _ -> 108 + TheEnd 109 + 110 + 111 + 112 + -- CONVERSIONS 113 + 114 + 115 + itemDirectory : MarkerItem -> String 116 + itemDirectory item = 117 + case item of 118 + Directory dir -> 119 + dir 120 + 121 + Param { directory } -> 122 + directory 123 + 124 + 125 + itemToString : MarkerItem -> String 126 + itemToString item = 127 + case item of 128 + Directory d -> 129 + "dir" ++ prefixer ++ d 130 + 131 + Param { directory, token } -> 132 + "par" ++ prefixer ++ directory ++ paramSeparator ++ token 133 + 134 + 135 + stringToItem : String -> Maybe MarkerItem 136 + stringToItem string = 137 + let 138 + exploded = 139 + String.split prefixer string 140 + in 141 + case List.head exploded of 142 + Just "dir" -> 143 + exploded 144 + |> List.drop 1 145 + |> String.join prefixer 146 + |> Directory 147 + |> Just 148 + 149 + Just "par" -> 150 + exploded 151 + |> List.drop 1 152 + |> String.join prefixer 153 + |> String.split paramSeparator 154 + |> (\x -> 155 + case x of 156 + [ dir, tok ] -> 157 + Just (Param { directory = dir, token = tok }) 158 + 159 + _ -> 160 + Nothing 161 + ) 162 + 163 + _ -> 164 + Nothing
+86 -17
src/Library/Sources/Services/Google/Parser.elm
··· 1 - module Sources.Services.Google.Parser exposing (fileDecoder, parseErrorResponse, parsePreparationResponse, parseTreeResponse) 1 + module Sources.Services.Google.Parser exposing (..) 2 2 3 3 import Dict 4 4 import Json.Decode exposing (..) 5 + import Json.Decode.Ext exposing (..) 5 6 import Maybe.Extra 6 7 import Sources exposing (SourceData) 7 8 import Sources.Pick 8 9 import Sources.Processing exposing (Marker(..), PrepationAnswer, TreeAnswer) 10 + import Sources.Services.Google.Marker as Marker 9 11 10 12 11 13 ··· 45 47 -- TREE 46 48 47 49 50 + type alias Properties = 51 + { id : String, name : String } 52 + 53 + 54 + type Item 55 + = File Properties 56 + | Directory Properties 57 + 58 + 48 59 parseTreeResponse : String -> Marker -> TreeAnswer Marker 49 - parseTreeResponse response _ = 60 + parseTreeResponse response previousMarker = 50 61 let 51 62 nextPageToken = 52 63 response ··· 54 65 |> Result.toMaybe 55 66 |> Maybe.Extra.join 56 67 57 - files = 58 - decodeString 59 - (field "files" <| list fileDecoder) 60 - response 68 + items = 69 + response 70 + |> decodeString (field "files" <| listIgnore itemDecoder) 71 + |> Result.withDefault [] 72 + 73 + usedDirectory = 74 + previousMarker 75 + |> Marker.takeOne 76 + |> Maybe.map Marker.itemDirectory 77 + |> Maybe.withDefault "" 78 + 79 + ( directories, files ) = 80 + List.partition 81 + (\item -> 82 + case item of 83 + Directory _ -> 84 + True 85 + 86 + File _ -> 87 + False 88 + ) 89 + items 61 90 in 62 91 { filePaths = 63 92 files 64 - |> Result.withDefault [] 65 - |> List.filter (Tuple.second >> Sources.Pick.isMusicFile) 66 - |> List.map Tuple.first 93 + |> List.map itemProperties 94 + |> List.filter (.name >> Sources.Pick.isMusicFile) 95 + |> List.map (\{ id, name } -> id ++ "?name=" ++ name) 67 96 , marker = 68 - case nextPageToken of 69 - Just token -> 70 - InProgress token 97 + previousMarker 98 + |> Marker.removeOne 99 + |> Marker.concat 100 + (List.map 101 + (itemProperties >> .id >> Marker.Directory) 102 + directories 103 + ) 104 + |> (case nextPageToken of 105 + Just token -> 106 + { directory = usedDirectory, token = token } 107 + |> Marker.Param 108 + |> List.singleton 109 + |> Marker.concat 71 110 72 - Nothing -> 73 - TheEnd 111 + Nothing -> 112 + identity 113 + ) 74 114 } 75 115 76 116 77 - fileDecoder : Decoder ( String, String ) 78 - fileDecoder = 79 - map2 Tuple.pair 117 + itemDecoder : Decoder Item 118 + itemDecoder = 119 + map4 120 + (\id name mime _ -> 121 + case mime of 122 + "application/vnd.google-apps.folder" -> 123 + Directory { id = id, name = name } 124 + 125 + _ -> 126 + File { id = id, name = name } 127 + ) 80 128 (field "id" string) 81 129 (field "name" string) 130 + (field "mimeType" string) 131 + (andThen 132 + (\b -> 133 + if b then 134 + fail "Exclude deleted files" 135 + 136 + else 137 + succeed b 138 + ) 139 + (field "trashed" bool) 140 + ) 141 + 142 + 143 + itemProperties : Item -> Properties 144 + itemProperties item = 145 + case item of 146 + Directory props -> 147 + props 148 + 149 + File props -> 150 + props 82 151 83 152 84 153
+232 -62
yarn.lock
··· 31 31 resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" 32 32 integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== 33 33 34 + "@tokenizer/http@^0.4.0": 35 + version "0.4.0" 36 + resolved "https://registry.yarnpkg.com/@tokenizer/http/-/http-0.4.0.tgz#23b95169139ee5630a602c44a287e1017397dede" 37 + integrity sha512-Rus+0s446hvgYqbE0uvsP1DttDyAx27/IOxLhoBuYttvpahtV0qK/BASoaC/wNP4wP/8kPMFTHmq+LC3K7uUwQ== 38 + dependencies: 39 + "@tokenizer/range" "^0.1.0" 40 + debug "^4.1.1" 41 + node-fetch "^2.6.0" 42 + strtok3 "^3.1.2" 43 + 44 + "@tokenizer/range@^0.1.0": 45 + version "0.1.0" 46 + resolved "https://registry.yarnpkg.com/@tokenizer/range/-/range-0.1.0.tgz#3be97516213694a4995c08dee869c32ff3555f02" 47 + integrity sha512-wIojK1GDoD4lhuaDganB5JiOtNOWzRJnVgwKSdUQmx+UYiQpLWR02JpOoJcy9P7/rT78Pb86BkfmyTLLXc/XOg== 48 + dependencies: 49 + debug "^4.1.1" 50 + mocha "^6.2.2" 51 + strtok3 "^3.0.4" 52 + 34 53 "@types/events@*": 35 54 version "3.0.0" 36 55 resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" ··· 251 270 json-schema-traverse "^0.4.1" 252 271 uri-js "^4.2.2" 253 272 273 + ansi-colors@3.2.3: 274 + version "3.2.3" 275 + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" 276 + integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== 277 + 254 278 ansi-escapes@^4.2.1: 255 279 version "4.2.1" 256 280 resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.2.1.tgz#4dccdb846c3eee10f6d64dea66273eab90c37228" ··· 553 577 version "1.1.0" 554 578 resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" 555 579 integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= 580 + 581 + browser-stdout@1.3.1: 582 + version "1.3.1" 583 + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 584 + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 556 585 557 586 browserify-aes@^1.0.0, browserify-aes@^1.0.4: 558 587 version "1.2.0" ··· 1116 1145 resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" 1117 1146 integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= 1118 1147 1148 + debug@3.2.6, debug@^3.2.6: 1149 + version "3.2.6" 1150 + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 1151 + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== 1152 + dependencies: 1153 + ms "^2.1.1" 1154 + 1119 1155 debug@^2.2.0, debug@^2.3.3: 1120 1156 version "2.6.9" 1121 1157 resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" ··· 1123 1159 dependencies: 1124 1160 ms "2.0.0" 1125 1161 1126 - debug@^3.2.6: 1127 - version "3.2.6" 1128 - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 1129 - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== 1130 - dependencies: 1131 - ms "^2.1.1" 1132 - 1133 1162 debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: 1134 1163 version "4.1.1" 1135 1164 resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" ··· 1157 1186 resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 1158 1187 integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 1159 1188 1160 - define-properties@^1.1.1, define-properties@^1.1.3: 1189 + define-properties@^1.1.1, define-properties@^1.1.2, define-properties@^1.1.3: 1161 1190 version "1.1.3" 1162 1191 resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 1163 1192 integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== ··· 1218 1247 version "1.0.3" 1219 1248 resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" 1220 1249 integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= 1250 + 1251 + diff@3.5.0: 1252 + version "3.5.0" 1253 + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" 1254 + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== 1221 1255 1222 1256 diffie-hellman@^5.0.0: 1223 1257 version "5.0.3" ··· 1376 1410 string.prototype.trimleft "^2.1.0" 1377 1411 string.prototype.trimright "^2.1.0" 1378 1412 1413 + es-abstract@^1.17.0-next.1: 1414 + version "1.17.0-next.1" 1415 + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.0-next.1.tgz#94acc93e20b05a6e96dacb5ab2f1cb3a81fc2172" 1416 + integrity sha512-7MmGr03N7Rnuid6+wyhD9sHNE2n4tFSwExnU2lQl3lIo2ShXWGePY80zYaoMOmILWv57H0amMjZGHNzzGG70Rw== 1417 + dependencies: 1418 + es-to-primitive "^1.2.1" 1419 + function-bind "^1.1.1" 1420 + has "^1.0.3" 1421 + has-symbols "^1.0.1" 1422 + is-callable "^1.1.4" 1423 + is-regex "^1.0.4" 1424 + object-inspect "^1.7.0" 1425 + object-keys "^1.1.1" 1426 + object.assign "^4.1.0" 1427 + string.prototype.trimleft "^2.1.0" 1428 + string.prototype.trimright "^2.1.0" 1429 + 1379 1430 es-to-primitive@^1.2.1: 1380 1431 version "1.2.1" 1381 1432 resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" ··· 1390 1441 resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" 1391 1442 integrity sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw= 1392 1443 1393 - escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 1444 + escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 1394 1445 version "1.0.5" 1395 1446 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1396 1447 integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= ··· 1693 1744 firstline "1.2.0" 1694 1745 lodash "4.17.15" 1695 1746 1696 - find-up@^3.0.0: 1747 + find-up@3.0.0, find-up@^3.0.0: 1697 1748 version "3.0.0" 1698 1749 resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 1699 1750 integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== ··· 1732 1783 rimraf "2.6.3" 1733 1784 write "1.0.3" 1734 1785 1786 + flat@^4.1.0: 1787 + version "4.1.0" 1788 + resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2" 1789 + integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw== 1790 + dependencies: 1791 + is-buffer "~2.0.3" 1792 + 1735 1793 flatted@^2.0.0: 1736 1794 version "2.0.1" 1737 1795 resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" ··· 1910 1968 resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" 1911 1969 integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= 1912 1970 1971 + glob@7.1.3: 1972 + version "7.1.3" 1973 + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" 1974 + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== 1975 + dependencies: 1976 + fs.realpath "^1.0.0" 1977 + inflight "^1.0.4" 1978 + inherits "2" 1979 + minimatch "^3.0.4" 1980 + once "^1.3.0" 1981 + path-is-absolute "^1.0.0" 1982 + 1913 1983 glob@^7.1.2: 1914 1984 version "7.1.6" 1915 1985 resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" ··· 1996 2066 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" 1997 2067 integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== 1998 2068 2069 + growl@1.10.5: 2070 + version "1.10.5" 2071 + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 2072 + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 2073 + 1999 2074 har-schema@^2.0.0: 2000 2075 version "2.0.0" 2001 2076 resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" ··· 2021 2096 resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 2022 2097 integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 2023 2098 2024 - has-symbols@^1.0.1: 2099 + has-symbols@^1.0.0, has-symbols@^1.0.1: 2025 2100 version "1.0.1" 2026 2101 resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" 2027 2102 integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== ··· 2091 2166 integrity sha1-bWC8b/r3Ebav1g5CbQd5iAFOZVQ= 2092 2167 dependencies: 2093 2168 traverse ">=0.2.4" 2169 + 2170 + he@1.2.0: 2171 + version "1.2.0" 2172 + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 2173 + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 2094 2174 2095 2175 hmac-drbg@^1.0.0: 2096 2176 version "1.0.1" ··· 2129 2209 dependencies: 2130 2210 safer-buffer ">= 2.1.2 < 3" 2131 2211 2132 - ieee754@^1.1.4: 2212 + ieee754@^1.1.13, ieee754@^1.1.4: 2133 2213 version "1.1.13" 2134 2214 resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" 2135 2215 integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== ··· 2303 2383 version "1.1.6" 2304 2384 resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 2305 2385 integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== 2386 + 2387 + is-buffer@~2.0.3: 2388 + version "2.0.4" 2389 + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" 2390 + integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== 2306 2391 2307 2392 is-callable@^1.1.4: 2308 2393 version "1.1.4" ··· 2501 2586 resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 2502 2587 integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 2503 2588 2504 - js-yaml@^3.13.1: 2589 + js-yaml@3.13.1, js-yaml@^3.13.1: 2505 2590 version "3.13.1" 2506 2591 resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" 2507 2592 integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== ··· 2646 2731 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" 2647 2732 integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== 2648 2733 2649 - log-symbols@^2.2.0: 2734 + log-symbols@2.2.0, log-symbols@^2.2.0: 2650 2735 version "2.2.0" 2651 2736 resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" 2652 2737 integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== ··· 2800 2885 resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" 2801 2886 integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= 2802 2887 2803 - minimatch@^3.0.4: 2888 + minimatch@3.0.4, minimatch@^3.0.4: 2804 2889 version "3.0.4" 2805 2890 resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 2806 2891 integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== ··· 2856 2941 for-in "^1.0.2" 2857 2942 is-extendable "^1.0.1" 2858 2943 2859 - mkdirp@^0.5.0, mkdirp@^0.5.1: 2944 + mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1: 2860 2945 version "0.5.1" 2861 2946 resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 2862 2947 integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= 2863 2948 dependencies: 2864 2949 minimist "0.0.8" 2865 2950 2951 + mocha@^6.2.2: 2952 + version "6.2.2" 2953 + resolved "https://registry.yarnpkg.com/mocha/-/mocha-6.2.2.tgz#5d8987e28940caf8957a7d7664b910dc5b2fea20" 2954 + integrity sha512-FgDS9Re79yU1xz5d+C4rv1G7QagNGHZ+iXF81hO8zY35YZZcLEsJVfFolfsqKFWunATEvNzMK0r/CwWd/szO9A== 2955 + dependencies: 2956 + ansi-colors "3.2.3" 2957 + browser-stdout "1.3.1" 2958 + debug "3.2.6" 2959 + diff "3.5.0" 2960 + escape-string-regexp "1.0.5" 2961 + find-up "3.0.0" 2962 + glob "7.1.3" 2963 + growl "1.10.5" 2964 + he "1.2.0" 2965 + js-yaml "3.13.1" 2966 + log-symbols "2.2.0" 2967 + minimatch "3.0.4" 2968 + mkdirp "0.5.1" 2969 + ms "2.1.1" 2970 + node-environment-flags "1.0.5" 2971 + object.assign "4.1.0" 2972 + strip-json-comments "2.0.1" 2973 + supports-color "6.0.0" 2974 + which "1.3.1" 2975 + wide-align "1.1.3" 2976 + yargs "13.3.0" 2977 + yargs-parser "13.1.1" 2978 + yargs-unparser "1.6.0" 2979 + 2866 2980 move-concurrently@^1.0.1: 2867 2981 version "1.0.1" 2868 2982 resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" ··· 2880 2994 resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 2881 2995 integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 2882 2996 2997 + ms@2.1.1: 2998 + version "2.1.1" 2999 + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 3000 + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 3001 + 2883 3002 ms@^2.1.1: 2884 3003 version "2.1.2" 2885 3004 resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 2886 3005 integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 2887 3006 2888 - music-metadata-browser@^1.8.1: 2889 - version "1.8.1" 2890 - resolved "https://registry.yarnpkg.com/music-metadata-browser/-/music-metadata-browser-1.8.1.tgz#8c38462e88b384664535d8d3db4bd3f076dfd870" 2891 - integrity sha512-oVvOWfT/W4ALoEafpRNZUNflkFgo05b6gQph97XSaIXq/KMueBrraiRX2P99eKpOPMzBMfEafGDMGcC7sTcAdQ== 3007 + music-metadata-browser@^1.9.2: 3008 + version "1.9.2" 3009 + resolved "https://registry.yarnpkg.com/music-metadata-browser/-/music-metadata-browser-1.9.2.tgz#2fb195d9e159a01e84a7b0f012fe5d95b464ccc4" 3010 + integrity sha512-5C6NhJLKvZmDkyU87QZotPiRuSbDZwWaZqRY74Gq25SHj6GgMDAug6gHzTbreTXjPlAiapLIi9tYJuhnjo/Xkw== 2892 3011 dependencies: 2893 3012 assert "^2.0.0" 2894 3013 buffer "^5.2.1" 2895 3014 debug "^4.0.1" 2896 - music-metadata "^5.0.1" 3015 + music-metadata "^5.1.1" 2897 3016 readable-stream "^3.3.0" 2898 3017 readable-web-to-node-stream "^2.0.0" 2899 3018 remove "^0.1.5" 2900 3019 typedarray-to-buffer "^3.1.5" 2901 3020 2902 - music-metadata@^5.0.1: 2903 - version "5.0.1" 2904 - resolved "https://registry.yarnpkg.com/music-metadata/-/music-metadata-5.0.1.tgz#94aaadba5e82645108c7a8d2cc772e8e7befaeb9" 2905 - integrity sha512-LFqfMkb/NhTZv21KZckPdUNoiNPgRl8cF2Qid0CThaoNBPCy+8RuYh0MaAQQoEbzt+RbIGz2ctzv8TPoiNv7kw== 3021 + music-metadata@^5.1.1: 3022 + version "5.2.0" 3023 + resolved "https://registry.yarnpkg.com/music-metadata/-/music-metadata-5.2.0.tgz#ebeb97a0d86c79ef43f75e517e5bf35f9498157c" 3024 + integrity sha512-0ya4ct9T7RqTCa2aFacTs9N7pUXq6/1vG1Nnr8P36u6UQO1nRpD7O0InK3IcASiwSrGaCw1PnYrQek33T+/C9w== 2906 3025 dependencies: 2907 3026 content-type "^1.0.4" 2908 3027 debug "^4.1.0" 2909 3028 file-type "^12.4.0" 2910 3029 media-typer "^1.1.0" 2911 - strtok3 "^3.1.0" 2912 - token-types "^1.1.0" 3030 + strtok3 "^3.1.4" 3031 + token-types "^1.2.2" 2913 3032 2914 3033 mustache@^3.0.1: 2915 3034 version "3.1.0" ··· 2983 3102 integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw== 2984 3103 dependencies: 2985 3104 lodash.toarray "^4.4.0" 3105 + 3106 + node-environment-flags@1.0.5: 3107 + version "1.0.5" 3108 + resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.5.tgz#fa930275f5bf5dae188d6192b24b4c8bbac3d76a" 3109 + integrity sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ== 3110 + dependencies: 3111 + object.getownpropertydescriptors "^2.0.3" 3112 + semver "^5.7.0" 2986 3113 2987 3114 node-fetch@^2.6.0: 2988 3115 version "2.6.0" ··· 3140 3267 resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" 3141 3268 integrity sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY= 3142 3269 3143 - object-keys@^1.0.12, object-keys@^1.1.1: 3270 + object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: 3144 3271 version "1.1.1" 3145 3272 resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 3146 3273 integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== ··· 3152 3279 dependencies: 3153 3280 isobject "^3.0.0" 3154 3281 3282 + object.assign@4.1.0, object.assign@^4.1.0: 3283 + version "4.1.0" 3284 + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" 3285 + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== 3286 + dependencies: 3287 + define-properties "^1.1.2" 3288 + function-bind "^1.1.1" 3289 + has-symbols "^1.0.0" 3290 + object-keys "^1.0.11" 3291 + 3155 3292 object.entries@^1.1.0: 3156 3293 version "1.1.0" 3157 3294 resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519" ··· 3161 3298 es-abstract "^1.12.0" 3162 3299 function-bind "^1.1.1" 3163 3300 has "^1.0.3" 3301 + 3302 + object.getownpropertydescriptors@^2.0.3: 3303 + version "2.1.0" 3304 + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" 3305 + integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== 3306 + dependencies: 3307 + define-properties "^1.1.3" 3308 + es-abstract "^1.17.0-next.1" 3164 3309 3165 3310 object.pick@^1.3.0: 3166 3311 version "1.3.0" ··· 3977 4122 ajv-errors "^1.0.0" 3978 4123 ajv-keywords "^3.1.0" 3979 4124 3980 - semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: 4125 + semver@^5.3.0, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0: 3981 4126 version "5.7.1" 3982 4127 resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 3983 4128 integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== ··· 4212 4357 resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" 4213 4358 integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= 4214 4359 4215 - streaming-http-token-reader@^0.3.1: 4216 - version "0.3.1" 4217 - resolved "https://registry.yarnpkg.com/streaming-http-token-reader/-/streaming-http-token-reader-0.3.1.tgz#fab384060fb214d7ffa70f00a4c669413695370f" 4218 - integrity sha512-8HLGXNvGvGWgwACaHXbj5DSPCItXn9rbXkzz6q3uDYTjjx1lqhCGKttHUC8iqDFPY7U2FcpXh3A4WKr6EiXntg== 4219 - dependencies: 4220 - debug "^4.1.1" 4221 - node-fetch "^2.6.0" 4222 - strtok3 "^3.0.4" 4223 - 4224 4360 string-width@^1.0.1: 4225 4361 version "1.0.2" 4226 4362 resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" ··· 4312 4448 resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 4313 4449 integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= 4314 4450 4451 + strip-json-comments@2.0.1, strip-json-comments@~2.0.1: 4452 + version "2.0.1" 4453 + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 4454 + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 4455 + 4315 4456 strip-json-comments@^3.0.1: 4316 4457 version "3.0.1" 4317 4458 resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" 4318 4459 integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== 4319 4460 4320 - strip-json-comments@~2.0.1: 4321 - version "2.0.1" 4322 - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 4323 - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 4324 - 4325 4461 strtok3@^3.0.4: 4326 4462 version "3.0.4" 4327 4463 resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-3.0.4.tgz#e8b3e35afafcf46f592cdd71b352a78cc6ee3efe" ··· 4331 4467 then-read-stream "^2.0.7" 4332 4468 token-types "^1.0.4" 4333 4469 4334 - strtok3@^3.1.0: 4335 - version "3.1.2" 4336 - resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-3.1.2.tgz#0aa7d84a06c1ece03ce775cc035d5669309d661e" 4337 - integrity sha512-dwzaZhSHdZUWqXAhaw53Wx+2g86C2dbOm0ZmWoKuhRx+Zr3qxa0+NRQpVni6br71UXWPq3f94khwJSH7AEGl/Q== 4470 + strtok3@^3.1.2, strtok3@^3.1.4: 4471 + version "3.1.4" 4472 + resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-3.1.4.tgz#3498446fba1ac483005110d950eb79eb8cef7bb6" 4473 + integrity sha512-K8qbPskXA2dR8UTBb0zt+UBSZZaSS3pnB+1xLF3Dt0S37Chu3IsIYKhsHQuKD3Cm6A/3lUMCBG2I7sQKLy/BBQ== 4338 4474 dependencies: 4339 4475 debug "^4.1.1" 4340 4476 then-read-stream "^2.0.8" 4341 - token-types "^1.1.0" 4477 + token-types "^1.2.2" 4342 4478 4343 4479 subworkers@^1.0.1: 4344 4480 version "1.0.1" 4345 4481 resolved "https://registry.yarnpkg.com/subworkers/-/subworkers-1.0.1.tgz#38d35968c0cece0ae1c2b4492325ac27e10ef8b3" 4346 4482 integrity sha512-5R3HH7AMvvuWozRqgOCe/zJic3Hn/mdVHpg7ILuo2BV8qosTiDDngLpsvNernPnUnH57fP3IWU8Eux354E2WcQ== 4483 + 4484 + supports-color@6.0.0: 4485 + version "6.0.0" 4486 + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" 4487 + integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== 4488 + dependencies: 4489 + has-flag "^3.0.0" 4347 4490 4348 4491 supports-color@6.1.0, supports-color@^6.1.0: 4349 4492 version "6.1.0" ··· 4570 4713 resolved "https://registry.yarnpkg.com/token-types/-/token-types-1.0.4.tgz#954d935616e4c5c01c94d4953ff10fd4f21d6177" 4571 4714 integrity sha512-Qhg+62OTm+ip8f6Ko1ylxas2G0ailgvIsHk0gvTmNWDNdQfcN30niH5MoRcVbKdHrHpiWhY159FBUiZkaNzh1w== 4572 4715 4573 - token-types@^1.1.0: 4574 - version "1.1.0" 4575 - resolved "https://registry.yarnpkg.com/token-types/-/token-types-1.1.0.tgz#8bf60f633583089a8653005bdff96020e44f947e" 4576 - integrity sha512-CgM5GmtJaZ+uTOiZHzs9pwUa/udjEVl/cxQ2KGpl88Hh7k71sdBz9j95dYjx83O68B6CGvefm29l4rBZq1PeuQ== 4716 + token-types@^1.2.2: 4717 + version "1.2.2" 4718 + resolved "https://registry.yarnpkg.com/token-types/-/token-types-1.2.2.tgz#bd79e5a16ca16ff95d9e2f87cd24b164fb5c523a" 4719 + integrity sha512-PG5qoX5kwZELQdW2UCemTtT22eAiuBpMt64KuJRXdhrS8ppdVGPlniGZS2ACA42cur+u2V5UNy3Qf1LCUjHU4w== 4720 + dependencies: 4721 + ieee754 "^1.1.13" 4577 4722 4578 4723 tough-cookie@^2.3.3: 4579 4724 version "2.5.0" ··· 4871 5016 resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 4872 5017 integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 4873 5018 4874 - which@^1.2.14, which@^1.2.9, which@^1.3.1: 5019 + which@1.3.1, which@^1.2.14, which@^1.2.9, which@^1.3.1: 4875 5020 version "1.3.1" 4876 5021 resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 4877 5022 integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 4878 5023 dependencies: 4879 5024 isexe "^2.0.0" 4880 5025 4881 - wide-align@^1.1.0: 5026 + wide-align@1.1.3, wide-align@^1.1.0: 4882 5027 version "1.1.3" 4883 5028 resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 4884 5029 integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== ··· 4946 5091 resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" 4947 5092 integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== 4948 5093 5094 + yargs-parser@13.1.1, yargs-parser@^13.1.0, yargs-parser@^13.1.1: 5095 + version "13.1.1" 5096 + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" 5097 + integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== 5098 + dependencies: 5099 + camelcase "^5.0.0" 5100 + decamelize "^1.2.0" 5101 + 4949 5102 yargs-parser@^11.1.1: 4950 5103 version "11.1.1" 4951 5104 resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" ··· 4954 5107 camelcase "^5.0.0" 4955 5108 decamelize "^1.2.0" 4956 5109 4957 - yargs-parser@^13.1.0: 4958 - version "13.1.1" 4959 - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" 4960 - integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== 4961 - dependencies: 4962 - camelcase "^5.0.0" 4963 - decamelize "^1.2.0" 4964 - 4965 5110 yargs-parser@^15.0.0: 4966 5111 version "15.0.0" 4967 5112 resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.0.tgz#cdd7a97490ec836195f59f3f4dbe5ea9e8f75f08" ··· 4970 5115 camelcase "^5.0.0" 4971 5116 decamelize "^1.2.0" 4972 5117 5118 + yargs-unparser@1.6.0: 5119 + version "1.6.0" 5120 + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" 5121 + integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== 5122 + dependencies: 5123 + flat "^4.1.0" 5124 + lodash "^4.17.15" 5125 + yargs "^13.3.0" 5126 + 4973 5127 yargs@13.2.4: 4974 5128 version "13.2.4" 4975 5129 resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" ··· 4986 5140 which-module "^2.0.0" 4987 5141 y18n "^4.0.0" 4988 5142 yargs-parser "^13.1.0" 5143 + 5144 + yargs@13.3.0, yargs@^13.3.0: 5145 + version "13.3.0" 5146 + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" 5147 + integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== 5148 + dependencies: 5149 + cliui "^5.0.0" 5150 + find-up "^3.0.0" 5151 + get-caller-file "^2.0.1" 5152 + require-directory "^2.1.1" 5153 + require-main-filename "^2.0.0" 5154 + set-blocking "^2.0.0" 5155 + string-width "^3.0.0" 5156 + which-module "^2.0.0" 5157 + y18n "^4.0.0" 5158 + yargs-parser "^13.1.1" 4989 5159 4990 5160 yargs@^12.0.1: 4991 5161 version "12.0.5"