diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..886bda8 --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/public/build/ \ No newline at end of file diff --git a/public/assets/download.svg b/app/public/assets/download.svg similarity index 100% rename from public/assets/download.svg rename to app/public/assets/download.svg diff --git a/app/public/favicon.png b/app/public/favicon.png new file mode 100644 index 0000000..7e6f5eb Binary files /dev/null and b/app/public/favicon.png differ diff --git a/app/public/global.css b/app/public/global.css new file mode 100644 index 0000000..961670b --- /dev/null +++ b/app/public/global.css @@ -0,0 +1,124 @@ +html, body { + position: relative; + width: 100%; + height: 100%; +} + +body { + color: #333; + margin: 0; + padding: 8px; + box-sizing: border-box; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; +} + +a { + color: rgb(0,100,200); + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +a:visited { + color: rgb(0,80,160); +} + +label { + display: block; +} + +input, button, select, textarea { + font-family: inherit; + font-size: inherit; + -webkit-padding: 0.4em 0; + padding: 0.4em; + margin: 0 0 0.5em 0; + box-sizing: border-box; + border: 1px solid #ccc; + border-radius: 2px; +} + +input:disabled { + color: #ccc; +} + +button { + color: #333; + background-color: #f4f4f4; + outline: none; +} + +button:disabled { + color: #999; +} + +button:not(:disabled):active { + background-color: #ddd; +} + +button:focus { + border-color: #666; +} + +body { + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; +} + +* { + transition: 0.1s background-color ease-out; +} + +.link { + cursor: pointer; + transition: 0.1s color ease-out, 0.1s filter ease-out; +} + +.small { + font-size: medium; +} +.big { + font-weight: bold; +} + +#albums { + margin-top: 20px; + width: 600px; + max-width: 98%; +} + +@media (prefers-color-scheme: dark) { + body { + background-color: #0a0a0f; + color: #fff; + accent-color: rgb(131, 131, 243); + } + .small { + color: #c8c8d2; + } + .link { + color:#ea74ac; + } + .link:hover { + color: #f484b6; + filter: drop-shadow( 0px 0px 2px #f484b6); + } +} +@media (prefers-color-scheme: light) { + body { + background-color: #f0f0f0; + color: #1e1e2d; + accent-color: #ea74ac; + } + .small { + color: #888; + } + .link { + color:rgb(131, 131, 243); + } + .link:hover { + color: rgb(151, 151, 255); + filter: drop-shadow( 0px 0px 2px #8383F3); + } +} \ No newline at end of file diff --git a/app/public/index.html b/app/public/index.html new file mode 100644 index 0000000..5da7ed3 --- /dev/null +++ b/app/public/index.html @@ -0,0 +1,18 @@ + + + + + + + Svelte app + + + + + + + + + + + diff --git a/public/robots.txt b/app/public/robots.txt similarity index 100% rename from public/robots.txt rename to app/public/robots.txt diff --git a/app/src/Album.svelte b/app/src/Album.svelte new file mode 100644 index 0000000..f0b408a --- /dev/null +++ b/app/src/Album.svelte @@ -0,0 +1,166 @@ + + + + +
+
+ + Download downloadAlbum(id)}> +
+
+ Cover +
+
+ +
+ {#if tracks.length === 0} + + {:else} + {#each tracks as track} + + {/each} + {/if} +
\ No newline at end of file diff --git a/app/src/App.svelte b/app/src/App.svelte new file mode 100644 index 0000000..67e473f --- /dev/null +++ b/app/src/App.svelte @@ -0,0 +1,32 @@ + + + + +
+ + {#if $display === displays.AlbumSearch} + +
+ {#each $albums as album} +
+ {/each} +
+ {/if} + {#if $display === displays.Download && $downloading} + + {/if} +
+
\ No newline at end of file diff --git a/app/src/Download.svelte b/app/src/Download.svelte new file mode 100644 index 0000000..429e614 --- /dev/null +++ b/app/src/Download.svelte @@ -0,0 +1,45 @@ + + +{#if title && artist && coverArt} +
+
+ +
+ {#each $log as l} +
{l} + {/each} +
+
+
+ Cover +
+
+ + {#if $progress > 0} +
+ {/if} +{:else} + +{/if} \ No newline at end of file diff --git a/app/src/Loading.svelte b/app/src/Loading.svelte new file mode 100644 index 0000000..1eba3fe --- /dev/null +++ b/app/src/Loading.svelte @@ -0,0 +1,51 @@ + + +
\ No newline at end of file diff --git a/app/src/Search.svelte b/app/src/Search.svelte new file mode 100644 index 0000000..0b60c7c --- /dev/null +++ b/app/src/Search.svelte @@ -0,0 +1,55 @@ + + + + + \ No newline at end of file diff --git a/app/src/Track.svelte b/app/src/Track.svelte new file mode 100644 index 0000000..6719238 --- /dev/null +++ b/app/src/Track.svelte @@ -0,0 +1,98 @@ + + + + +
+ {artist} - {title} + + + Download + + {formatTime(duration)} + +
\ No newline at end of file diff --git a/app/src/api.js b/app/src/api.js new file mode 100644 index 0000000..e02aff0 --- /dev/null +++ b/app/src/api.js @@ -0,0 +1,9 @@ +export async function querySearch(q) { + let response = await fetch(`http://localhost:4500/api/search?search=${encodeURI(q)}`); + return await response.json(); +} + +export async function queryTracks(id) { + let response = await fetch(`http://localhost:4500/api/album?id=${id}`); + return await response.json(); +} \ No newline at end of file diff --git a/app/src/download.js b/app/src/download.js new file mode 100644 index 0000000..5171f22 --- /dev/null +++ b/app/src/download.js @@ -0,0 +1,10 @@ +import {downloading, display, displays} from './stores'; + +export function downloadAlbum(id) { + display.set(displays.Download); + downloading.set({id: id, isAlbum: true}); +} +export function downloadTrack(id) { + display.set(displays.Download); + downloading.set({id: id, isAlbum: false}); +} \ No newline at end of file diff --git a/app/src/main.js b/app/src/main.js new file mode 100644 index 0000000..1719c77 --- /dev/null +++ b/app/src/main.js @@ -0,0 +1,9 @@ +import App from './App.svelte'; + +const app = new App({ + target: document.body, + props: { + } +}); + +export default app; \ No newline at end of file diff --git a/app/src/stores.js b/app/src/stores.js new file mode 100644 index 0000000..30aeab5 --- /dev/null +++ b/app/src/stores.js @@ -0,0 +1,19 @@ +import {writable} from 'svelte/store'; + +export const albums = writable([]); + +export function clearAlbums() { + albums.set([]); +} +export function pushAlbum(id) { + albums.update((l) => [...l, id]); +} + +export const displays = { + AlbumSearch: 0, + Download: 1, +} + +export let display = writable(displays.AlbumSearch); + +export let downloading = writable(null); \ No newline at end of file diff --git a/app/src/websocket.js b/app/src/websocket.js new file mode 100644 index 0000000..fa000e3 --- /dev/null +++ b/app/src/websocket.js @@ -0,0 +1,37 @@ +/* +function getWebsocketLocation() { + return window.window.location.toString().replace('https://', 'wss://').replace('http://', 'ws://'); +} +*/ +function getWebsocketLocation() { + return 'ws://localhost:4500/'; +} + +export function startWebsocket(id, isAlbum, log, coverArt, title, artist, progress) { + let type = isAlbum ? 'album' : 'track'; + const ws = new WebSocket(`${getWebsocketLocation()}api/${type}?id=${id}`); + + ws.onmessage = (m) => { + const d = JSON.parse(m.data); + console.log(d); + if (d.key === 'downloadInfo') { + log(`[${d.data.data.title}] ${d.data.state}`); + } else if (d.key === 'updateQueue') { + progress(d.data.progress); + } else if (d.key === 'coverArt') { + log('Fetched cover art'); + coverArt(d.data); + } else if (d.key === 'metadata') { + log('Fetched metadata'); + title(d.data.title); + artist(d.data.artist); + } else if (d.key === 'download') { + console.log(d.data); + download(d.data); + } else if (d.key === 'finishDownload') { + log('Download finished'); + } else if (d.key === 'zipping') { + log('Zipping up files'); + } + }; +} \ No newline at end of file diff --git a/package.json b/package.json index 1e18d07..e495940 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,10 @@ "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "quickrun": "tsc && node dist/index.js", - "build": "tsc" + "build": "tsc", + "febuild": "rollup -c", + "fedev": "rollup -c -w", + "start": "sirv app/public --no-clear" }, "repository": { "type": "git", @@ -14,29 +17,39 @@ }, "keywords": [ "deemix", - "piracy" + "piracy", + "svelte" ], "author": "oatmealine", "license": "AGPL-3.0", "dependencies": { "deemix": "git+https://git.freezerapp.xyz/RemixDev/deemix-js", - "deezer-js": "^1.2.4", + "deezer-js": "^1.3.5", "dotenv": "^10.0.0", - "express": "^4.17.1", + "express": "^4.17.3", "express-ws": "^5.0.2", + "sirv-cli": "^2.0.2", "timeago.js": "^4.0.2", "toml": "^3.0.0", - "winston": "^3.3.3", - "ws": "^8.2.3" + "winston": "^3.6.0", + "ws": "^8.5.0" }, "optionalDependencies": { - "bufferutil": "^4.0.5", - "utf-8-validate": "^5.0.7" + "bufferutil": "^4.0.6", + "utf-8-validate": "^5.0.8" }, "devDependencies": { - "typescript": "^4.4.4", + "@rollup/plugin-commonjs": "^17.1.0", + "@rollup/plugin-node-resolve": "^11.2.1", "@types/express": "^4.17.13", "@types/express-ws": "^3.0.1", - "@types/ws": "^8.2.0" + "@types/ws": "^8.2.3", + "rollup": "^2.68.0", + "rollup-plugin-css-only": "^3.1.0", + "rollup-plugin-livereload": "^2.0.5", + "rollup-plugin-svelte": "^7.1.0", + "rollup-plugin-terser": "^7.0.2", + "svelte": "^3.46.4", + "typescript": "^4.5.5" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 58eaf42..5a306ad 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,55 +1,154 @@ lockfileVersion: 5.3 specifiers: + '@rollup/plugin-commonjs': ^17.1.0 + '@rollup/plugin-node-resolve': ^11.2.1 '@types/express': ^4.17.13 '@types/express-ws': ^3.0.1 - '@types/ws': ^8.2.0 - bufferutil: ^4.0.5 + '@types/ws': ^8.2.3 + bufferutil: ^4.0.6 deemix: git+https://git.freezerapp.xyz/RemixDev/deemix-js - deezer-js: ^1.2.4 + deezer-js: ^1.3.5 dotenv: ^10.0.0 - express: ^4.17.1 + express: ^4.17.3 express-ws: ^5.0.2 + rollup: ^2.68.0 + rollup-plugin-css-only: ^3.1.0 + rollup-plugin-livereload: ^2.0.5 + rollup-plugin-svelte: ^7.1.0 + rollup-plugin-terser: ^7.0.2 + sirv-cli: ^2.0.2 + svelte: ^3.46.4 timeago.js: ^4.0.2 toml: ^3.0.0 - typescript: ^4.4.4 - utf-8-validate: ^5.0.7 - winston: ^3.3.3 - ws: ^8.2.3 + typescript: ^4.5.5 + utf-8-validate: ^5.0.8 + winston: ^3.6.0 + ws: ^8.5.0 dependencies: - deemix: git.freezerapp.xyz/RemixDev/deemix-js/5c81a56d11d0e2dc4392bfcb0b0e67a88fe14ee2 - deezer-js: 1.2.4 + deemix: git.freezerapp.xyz/RemixDev/deemix-js/58bd92bc303a338aafc56ccf51940713812756ec + deezer-js: 1.3.5 dotenv: 10.0.0 - express: 4.17.1 - express-ws: 5.0.2_38c2bbebc27369556ed28f8d7fcfa503 + express: 4.17.3 + express-ws: 5.0.2_9938c0c959a5f2b516218250f750cbca + sirv-cli: 2.0.2 timeago.js: 4.0.2 toml: 3.0.0 - winston: 3.3.3 - ws: 8.2.3_5971b5a749a91823f5467a6d31a2f8b3 + winston: 3.6.0 + ws: 8.5.0_bffff4271b89d628e8333ead80d3d8e8 optionalDependencies: - bufferutil: 4.0.5 - utf-8-validate: 5.0.7 + bufferutil: 4.0.6 + utf-8-validate: 5.0.8 devDependencies: + '@rollup/plugin-commonjs': 17.1.0_rollup@2.68.0 + '@rollup/plugin-node-resolve': 11.2.1_rollup@2.68.0 '@types/express': 4.17.13 '@types/express-ws': 3.0.1 - '@types/ws': 8.2.0 - typescript: 4.4.4 + '@types/ws': 8.2.3 + rollup: 2.68.0 + rollup-plugin-css-only: 3.1.0_rollup@2.68.0 + rollup-plugin-livereload: 2.0.5_bffff4271b89d628e8333ead80d3d8e8 + rollup-plugin-svelte: 7.1.0_rollup@2.68.0+svelte@3.46.4 + rollup-plugin-terser: 7.0.2_rollup@2.68.0 + svelte: 3.46.4 + typescript: 4.5.5 packages: - /@dabh/diagnostics/2.0.2: - resolution: {integrity: sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==} + /@babel/code-frame/7.16.7: + resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.16.10 + dev: true + + /@babel/helper-validator-identifier/7.16.7: + resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/highlight/7.16.10: + resolution: {integrity: sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.16.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@colors/colors/1.5.0: + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + dev: false + + /@dabh/diagnostics/2.0.3: + resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} dependencies: colorspace: 1.1.4 enabled: 2.0.0 kuler: 2.0.0 dev: false - /@sindresorhus/is/4.2.0: - resolution: {integrity: sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==} + /@polka/url/1.0.0-next.21: + resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} + dev: false + + /@rollup/plugin-commonjs/17.1.0_rollup@2.68.0: + resolution: {integrity: sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^2.30.0 + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.68.0 + commondir: 1.0.1 + estree-walker: 2.0.2 + glob: 7.2.0 + is-reference: 1.2.1 + magic-string: 0.25.7 + resolve: 1.22.0 + rollup: 2.68.0 + dev: true + + /@rollup/plugin-node-resolve/11.2.1_rollup@2.68.0: + resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} + engines: {node: '>= 10.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.68.0 + '@types/resolve': 1.17.1 + builtin-modules: 3.2.0 + deepmerge: 4.2.2 + is-module: 1.0.0 + resolve: 1.22.0 + rollup: 2.68.0 + dev: true + + /@rollup/pluginutils/3.1.0_rollup@2.68.0: + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.68.0 + dev: true + + /@rollup/pluginutils/4.1.2: + resolution: {integrity: sha512-ROn4qvkxP9SyPeHaf7uQC/GPFY6L/OWy9+bd9AwcjOAWQwxRscoEyAUD8qCY5o5iL4jqQwoLk2kaTKJPb/HwzQ==} + engines: {node: '>= 8.0.0'} + dependencies: + estree-walker: 2.0.2 + picomatch: 2.3.1 + dev: true + + /@sindresorhus/is/4.4.0: + resolution: {integrity: sha512-QppPM/8l3Mawvh4rn9CNEYIU9bxpXUCRMaX9yUpvBk1nMKusLKpfXGDEKExKaPhLzcn3lzil7pR6rnJ11HgeRQ==} engines: {node: '>=10'} dev: false @@ -60,11 +159,11 @@ packages: defer-to-connect: 2.0.1 dev: false - /@types/body-parser/1.19.1: - resolution: {integrity: sha512-a6bTJ21vFOGIkwM0kzh9Yr89ziVxq4vYH2fQ6N8AeipEzai/cFK6aGMArIkUeIdRIgpwQa+2bXiLuUJCpSf2Cg==} + /@types/body-parser/1.19.2: + resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 - '@types/node': 16.11.4 + '@types/node': 17.0.21 dev: true /@types/cacheable-request/6.0.2: @@ -72,20 +171,28 @@ packages: dependencies: '@types/http-cache-semantics': 4.0.1 '@types/keyv': 3.1.3 - '@types/node': 16.11.4 + '@types/node': 17.0.21 '@types/responselike': 1.0.0 dev: false /@types/connect/3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: - '@types/node': 16.11.4 + '@types/node': 17.0.21 dev: true - /@types/express-serve-static-core/4.17.24: - resolution: {integrity: sha512-3UJuW+Qxhzwjq3xhwXm2onQcFHn76frIYVbTu+kn24LFxI+dEhdfISDFovPB8VpEgW8oQCTpRuCe+0zJxB7NEA==} + /@types/estree/0.0.39: + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + dev: true + + /@types/estree/0.0.51: + resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} + dev: true + + /@types/express-serve-static-core/4.17.28: + resolution: {integrity: sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==} dependencies: - '@types/node': 16.11.4 + '@types/node': 17.0.21 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 dev: true @@ -94,15 +201,15 @@ packages: resolution: {integrity: sha512-VguRXzcpPBF0IggIGpUoM65cZJDfMQxoc6dKoCz1yLzcwcXW7ft60yhq3ygKhyEhEIQFtLrWjyz4AJ1qjmzCFw==} dependencies: '@types/express': 4.17.13 - '@types/express-serve-static-core': 4.17.24 - '@types/ws': 8.2.0 + '@types/express-serve-static-core': 4.17.28 + '@types/ws': 8.2.3 dev: true /@types/express/4.17.13: resolution: {integrity: sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==} dependencies: - '@types/body-parser': 1.19.1 - '@types/express-serve-static-core': 4.17.24 + '@types/body-parser': 1.19.2 + '@types/express-serve-static-core': 4.17.28 '@types/qs': 6.9.7 '@types/serve-static': 1.13.10 dev: true @@ -114,15 +221,15 @@ packages: /@types/keyv/3.1.3: resolution: {integrity: sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==} dependencies: - '@types/node': 16.11.4 + '@types/node': 17.0.21 dev: false /@types/mime/1.3.2: resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} dev: true - /@types/node/16.11.4: - resolution: {integrity: sha512-TMgXmy0v2xWyuCSCJM6NCna2snndD8yvQF67J29ipdzMcsPa9u+o0tjF5+EQNdhcuZplYuouYqpc4zcd5I6amQ==} + /@types/node/17.0.21: + resolution: {integrity: sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==} /@types/qs/6.9.7: resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} @@ -132,63 +239,117 @@ packages: resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} dev: true + /@types/resolve/1.17.1: + resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + dependencies: + '@types/node': 17.0.21 + dev: true + /@types/responselike/1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} dependencies: - '@types/node': 16.11.4 + '@types/node': 17.0.21 dev: false /@types/serve-static/1.13.10: resolution: {integrity: sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==} dependencies: '@types/mime': 1.3.2 - '@types/node': 16.11.4 + '@types/node': 17.0.21 dev: true - /@types/ws/8.2.0: - resolution: {integrity: sha512-cyeefcUCgJlEk+hk2h3N+MqKKsPViQgF5boi9TTHSK+PoR9KWBb/C5ccPcDyAqgsbAYHTwulch725DV84+pSpg==} + /@types/ws/8.2.3: + resolution: {integrity: sha512-ahRJZquUYCdOZf/rCsWg88S0/+cb9wazUBHv6HZEe3XdYaBe2zr/slM8J28X07Hn88Pnm4ezo7N8/ofnOgrPVQ==} dependencies: - '@types/node': 16.11.4 + '@types/node': 17.0.21 dev: true - /accepts/1.3.7: - resolution: {integrity: sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==} + /accepts/1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} dependencies: - mime-types: 2.1.33 - negotiator: 0.6.2 + mime-types: 2.1.34 + negotiator: 0.6.3 dev: false + /acorn/8.7.0: + resolution: {integrity: sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /ansi-styles/3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: true + + /anymatch/3.1.2: + resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + /array-flatten/1.1.1: resolution: {integrity: sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=} dev: false - /async/3.2.1: - resolution: {integrity: sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg==} + /async/3.2.3: + resolution: {integrity: sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==} dev: false /asynckit/0.4.0: resolution: {integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=} dev: false - /body-parser/1.19.0: - resolution: {integrity: sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==} + /balanced-match/1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /binary-extensions/2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /body-parser/1.19.2: + resolution: {integrity: sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==} engines: {node: '>= 0.8'} dependencies: - bytes: 3.1.0 + bytes: 3.1.2 content-type: 1.0.4 debug: 2.6.9 depd: 1.1.2 - http-errors: 1.7.2 + http-errors: 1.8.1 iconv-lite: 0.4.24 on-finished: 2.3.0 - qs: 6.7.0 - raw-body: 2.4.0 + qs: 6.9.7 + raw-body: 2.4.3 type-is: 1.6.18 dev: false - /bufferutil/4.0.5: - resolution: {integrity: sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==} + /brace-expansion/1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /braces/3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /buffer-from/1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: true + + /bufferutil/4.0.6: + resolution: {integrity: sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==} engines: {node: '>=6.14.2'} requiresBuild: true dependencies: @@ -196,8 +357,13 @@ packages: dev: false optional: true - /bytes/3.1.0: - resolution: {integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==} + /builtin-modules/3.2.0: + resolution: {integrity: sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==} + engines: {node: '>=6'} + dev: true + + /bytes/3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} dev: false @@ -213,7 +379,7 @@ packages: clone-response: 1.0.2 get-stream: 5.2.0 http-cache-semantics: 4.1.0 - keyv: 4.0.3 + keyv: 4.1.1 lowercase-keys: 2.0.0 normalize-url: 6.1.0 responselike: 2.0.0 @@ -226,6 +392,30 @@ packages: get-intrinsic: 1.1.1 dev: false + /chalk/2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + + /chokidar/3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.2 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + /clone-response/1.0.2: resolution: {integrity: sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=} dependencies: @@ -236,18 +426,16 @@ packages: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 - dev: false /color-name/1.1.3: resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} - dev: false /color-name/1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} dev: false - /color-string/1.6.0: - resolution: {integrity: sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==} + /color-string/1.9.0: + resolution: {integrity: sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==} dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 @@ -257,12 +445,7 @@ packages: resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} dependencies: color-convert: 1.9.3 - color-string: 1.6.0 - dev: false - - /colors/1.4.0: - resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} - engines: {node: '>=0.1.90'} + color-string: 1.9.0 dev: false /colorspace/1.1.4: @@ -279,20 +462,37 @@ packages: delayed-stream: 1.0.0 dev: false + /commander/2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: true + /commander/8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} dev: false + /commondir/1.0.1: + resolution: {integrity: sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=} + dev: true + /component-emitter/1.3.0: resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} dev: false - /content-disposition/0.5.3: - resolution: {integrity: sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==} + /concat-map/0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + dev: true + + /console-clear/1.1.1: + resolution: {integrity: sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ==} + engines: {node: '>=4'} + dev: false + + /content-disposition/0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} dependencies: - safe-buffer: 5.1.2 + safe-buffer: 5.2.1 dev: false /content-type/1.0.4: @@ -304,8 +504,8 @@ packages: resolution: {integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw=} dev: false - /cookie/0.4.0: - resolution: {integrity: sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==} + /cookie/0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} engines: {node: '>= 0.6'} dev: false @@ -313,15 +513,6 @@ packages: resolution: {integrity: sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==} dev: false - /core-util-is/1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: false - - /crypto/1.0.1: - resolution: {integrity: sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==} - deprecated: This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in. - dev: false - /debug/2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} dependencies: @@ -334,8 +525,8 @@ packages: ms: 2.1.3 dev: false - /debug/4.3.2: - resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} + /debug/4.3.3: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -353,17 +544,15 @@ packages: mimic-response: 3.1.0 dev: false - /deezer-js/1.2.4: - resolution: {integrity: sha512-Scki1I03YEcnxWiYBz1LQT9gJHo9KIlvMK3gYE65gik19BQ/PW6fsWYPVl/lR7eKuxfO1SWUYF1i49J6Ja0eVg==} - dependencies: - got: 11.8.2 - tough-cookie: 4.0.0 - dev: false + /deepmerge/4.2.2: + resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} + engines: {node: '>=0.10.0'} + dev: true - /deezer-js/1.3.4: - resolution: {integrity: sha512-jPANN+mouVm7hzSjmtGRfi7I/pShBYTd/sZuiBQIYtLYp/5XR1HFdvzrxmx63fqlYhmJEKLR3/izIyotEIUfqg==} + /deezer-js/1.3.5: + resolution: {integrity: sha512-eyIHRdCx1ZHHz+sPlC0fSgOtfbaAK9pRUz8paJkcgfa0dB70gBQI9b8zr0C2PPn/VGLFK5Bi2KT3RlV57BaMiA==} dependencies: - got: 11.8.2 + got: 11.8.3 tough-cookie: 4.0.0 dev: false @@ -414,34 +603,51 @@ packages: resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=} dev: false + /escape-string-regexp/1.0.5: + resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} + engines: {node: '>=0.8.0'} + dev: true + + /estree-walker/0.6.1: + resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} + dev: true + + /estree-walker/1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + dev: true + + /estree-walker/2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: true + /etag/1.8.1: resolution: {integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=} engines: {node: '>= 0.6'} dev: false - /express-ws/5.0.2_38c2bbebc27369556ed28f8d7fcfa503: + /express-ws/5.0.2_9938c0c959a5f2b516218250f750cbca: resolution: {integrity: sha512-0uvmuk61O9HXgLhGl3QhNSEtRsQevtmbL94/eILaliEADZBHZOQUAiHFrGPrgsjikohyrmSG5g+sCfASTt0lkQ==} engines: {node: '>=4.5.0'} peerDependencies: express: ^4.0.0 || ^5.0.0-alpha.1 dependencies: - express: 4.17.1 - ws: 7.5.5_5971b5a749a91823f5467a6d31a2f8b3 + express: 4.17.3 + ws: 7.5.7_bffff4271b89d628e8333ead80d3d8e8 transitivePeerDependencies: - bufferutil - utf-8-validate dev: false - /express/4.17.1: - resolution: {integrity: sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==} + /express/4.17.3: + resolution: {integrity: sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==} engines: {node: '>= 0.10.0'} dependencies: - accepts: 1.3.7 + accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.19.0 - content-disposition: 0.5.3 + body-parser: 1.19.2 + content-disposition: 0.5.4 content-type: 1.0.4 - cookie: 0.4.0 + cookie: 0.4.2 cookie-signature: 1.0.6 debug: 2.6.9 depd: 1.1.2 @@ -456,12 +662,12 @@ packages: parseurl: 1.3.3 path-to-regexp: 0.1.7 proxy-addr: 2.0.7 - qs: 6.7.0 + qs: 6.9.7 range-parser: 1.2.1 - safe-buffer: 5.1.2 - send: 0.17.1 - serve-static: 1.14.1 - setprototypeof: 1.1.1 + safe-buffer: 5.2.1 + send: 0.17.2 + serve-static: 1.14.2 + setprototypeof: 1.2.0 statuses: 1.5.0 type-is: 1.6.18 utils-merge: 1.0.1 @@ -476,6 +682,13 @@ packages: resolution: {integrity: sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==} dev: false + /fill-range/7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + /finalhandler/1.1.2: resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} engines: {node: '>= 0.8'} @@ -499,11 +712,11 @@ packages: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 - mime-types: 2.1.33 + mime-types: 2.1.34 dev: false - /formidable/1.2.2: - resolution: {integrity: sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==} + /formidable/1.2.6: + resolution: {integrity: sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==} deprecated: 'Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau' dev: false @@ -517,9 +730,20 @@ packages: engines: {node: '>= 0.6'} dev: false + /fs.realpath/1.0.0: + resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} + dev: true + + /fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + /function-bind/1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: false /get-intrinsic/1.1.1: resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==} @@ -529,6 +753,11 @@ packages: has-symbols: 1.0.2 dev: false + /get-port/3.2.0: + resolution: {integrity: sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=} + engines: {node: '>=4'} + dev: false + /get-stream/5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} @@ -536,11 +765,29 @@ packages: pump: 3.0.0 dev: false - /got/11.8.2: - resolution: {integrity: sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==} + /glob-parent/5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob/7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /got/11.8.3: + resolution: {integrity: sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg==} engines: {node: '>=10.19.0'} dependencies: - '@sindresorhus/is': 4.2.0 + '@sindresorhus/is': 4.4.0 '@szmarczak/http-timer': 4.0.6 '@types/cacheable-request': 6.0.2 '@types/responselike': 1.0.0 @@ -553,6 +800,16 @@ packages: responselike: 2.0.0 dev: false + /has-flag/3.0.0: + resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} + engines: {node: '>=4'} + dev: true + + /has-flag/4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + /has-symbols/1.0.2: resolution: {integrity: sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==} engines: {node: '>= 0.4'} @@ -563,32 +820,20 @@ packages: engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 - dev: false /http-cache-semantics/4.1.0: resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==} dev: false - /http-errors/1.7.2: - resolution: {integrity: sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==} - engines: {node: '>= 0.6'} - dependencies: - depd: 1.1.2 - inherits: 2.0.3 - setprototypeof: 1.1.1 - statuses: 1.5.0 - toidentifier: 1.0.0 - dev: false - - /http-errors/1.7.3: - resolution: {integrity: sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==} + /http-errors/1.8.1: + resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} engines: {node: '>= 0.6'} dependencies: depd: 1.1.2 inherits: 2.0.4 - setprototypeof: 1.1.1 + setprototypeof: 1.2.0 statuses: 1.5.0 - toidentifier: 1.0.0 + toidentifier: 1.0.1 dev: false /http2-wrapper/1.0.3: @@ -606,13 +851,15 @@ packages: safer-buffer: 2.1.2 dev: false - /inherits/2.0.3: - resolution: {integrity: sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=} - dev: false + /inflight/1.0.6: + resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true /inherits/2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: false /ipaddr.js/1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} @@ -623,40 +870,117 @@ packages: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} dev: false + /is-binary-path/2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-core-module/2.8.1: + resolution: {integrity: sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==} + dependencies: + has: 1.0.3 + dev: true + + /is-extglob/2.1.1: + resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} + engines: {node: '>=0.10.0'} + dev: true + + /is-glob/4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-module/1.0.0: + resolution: {integrity: sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=} + dev: true + + /is-number/7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-reference/1.2.1: + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + dependencies: + '@types/estree': 0.0.51 + dev: true + /is-stream/2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} dev: false - /isarray/1.0.0: - resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=} - dev: false + /jest-worker/26.6.2: + resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 17.0.21 + merge-stream: 2.0.0 + supports-color: 7.2.0 + dev: true + + /js-tokens/4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true /json-buffer/3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} dev: false - /keyv/4.0.3: - resolution: {integrity: sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==} + /keyv/4.1.1: + resolution: {integrity: sha512-tGv1yP6snQVDSM4X6yxrv2zzq/EvpW+oYiUz6aueW1u9CtS8RzUQYxxmFwgZlO2jSgCxQbchhxaqXXp2hnKGpQ==} dependencies: json-buffer: 3.0.1 dev: false + /kleur/4.1.4: + resolution: {integrity: sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==} + engines: {node: '>=6'} + dev: false + /kuler/2.0.0: resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} dev: false + /livereload-js/3.3.3: + resolution: {integrity: sha512-a7Jipme3XIBIryJluWP5LQrEAvhobDPyScBe+q+MYwxBiMT2Ck7msy4tAdF8TAa33FMdJqX4guP81Yhiu6BkmQ==} + dev: true + + /livereload/0.9.3_bffff4271b89d628e8333ead80d3d8e8: + resolution: {integrity: sha512-q7Z71n3i4X0R9xthAryBdNGVGAO2R5X+/xXpmKeuPMrteg+W2U8VusTKV3YiJbXZwKsOlFlHe+go6uSNjfxrZw==} + engines: {node: '>=8.0.0'} + hasBin: true + dependencies: + chokidar: 3.5.3 + livereload-js: 3.3.3 + opts: 2.0.2 + ws: 7.5.7_bffff4271b89d628e8333ead80d3d8e8 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /local-access/1.1.0: + resolution: {integrity: sha512-XfegD5pyTAfb+GY6chk283Ox5z8WexG56OvM06RWLpAc/UHozO8X6xAxEkIitZOtsSMM1Yr3DkHgW5W+onLhCw==} + engines: {node: '>=6'} + dev: false + /lodash.merge/4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: false - /logform/2.3.0: - resolution: {integrity: sha512-graeoWUH2knKbGthMtuG1EfaSPMZFZBIrhuJHhkS5ZseFBrc7DupCzihOQAzsK/qIKPQaPJ/lFQFctILUY5ARQ==} + /logform/2.4.0: + resolution: {integrity: sha512-CPSJw4ftjf517EhXZGGvTHHkYobo7ZCc0kvwUoOYcjfR2UVrI66RHj8MCrfAdEitdmFqbu2BYdYs8FHHZSb6iw==} dependencies: - colors: 1.4.0 + '@colors/colors': 1.5.0 fecha: 4.2.1 ms: 2.1.3 - safe-stable-stringify: 1.1.1 + safe-stable-stringify: 2.3.1 triple-beam: 1.3.0 dev: false @@ -672,6 +996,12 @@ packages: yallist: 4.0.0 dev: false + /magic-string/0.25.7: + resolution: {integrity: sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + /media-typer/0.3.0: resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=} engines: {node: '>= 0.6'} @@ -681,12 +1011,16 @@ packages: resolution: {integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=} dev: false + /merge-stream/2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + /metaflac-js2/1.0.8: resolution: {integrity: sha512-Ql39J3w4RPUEaTMRgq/CtGd6QXIH5cjUwexg/dupVxoamA94DCsUd3J6bH43JyXrd4L16FaxT4tc5f/sjNEiVw==} hasBin: true dependencies: commander: 8.3.0 - probe-image-size: 7.2.1 + probe-image-size: 7.2.3 dev: false /methods/1.1.2: @@ -694,16 +1028,16 @@ packages: engines: {node: '>= 0.6'} dev: false - /mime-db/1.50.0: - resolution: {integrity: sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==} + /mime-db/1.51.0: + resolution: {integrity: sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==} engines: {node: '>= 0.6'} dev: false - /mime-types/2.1.33: - resolution: {integrity: sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==} + /mime-types/2.1.34: + resolution: {integrity: sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==} engines: {node: '>= 0.6'} dependencies: - mime-db: 1.50.0 + mime-db: 1.51.0 dev: false /mime/1.6.0: @@ -712,8 +1046,8 @@ packages: hasBin: true dev: false - /mime/2.5.2: - resolution: {integrity: sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==} + /mime/2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} engines: {node: '>=4.0.0'} hasBin: true dev: false @@ -728,12 +1062,24 @@ packages: engines: {node: '>=10'} dev: false - /ms/2.0.0: - resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=} + /minimatch/3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /mri/1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} dev: false - /ms/2.1.1: - resolution: {integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==} + /mrmime/1.0.0: + resolution: {integrity: sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ==} + engines: {node: '>=10'} + dev: false + + /ms/2.0.0: + resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=} dev: false /ms/2.1.2: @@ -754,8 +1100,8 @@ packages: sax: 1.2.4 dev: false - /negotiator/0.6.2: - resolution: {integrity: sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==} + /negotiator/0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} dev: false @@ -765,13 +1111,18 @@ packages: dev: false optional: true + /normalize-path/3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + /normalize-url/6.1.0: resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} engines: {node: '>=10'} dev: false - /object-inspect/1.11.0: - resolution: {integrity: sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==} + /object-inspect/1.12.0: + resolution: {integrity: sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==} dev: false /on-finished/2.3.0: @@ -785,7 +1136,6 @@ packages: resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} dependencies: wrappy: 1.0.2 - dev: false /one-time/1.0.0: resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} @@ -793,6 +1143,10 @@ packages: fn.name: 1.1.0 dev: false + /opts/2.0.2: + resolution: {integrity: sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==} + dev: true + /p-cancelable/2.1.1: resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} engines: {node: '>=8'} @@ -803,22 +1157,32 @@ packages: engines: {node: '>= 0.8'} dev: false + /path-is-absolute/1.0.1: + resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} + engines: {node: '>=0.10.0'} + dev: true + + /path-parse/1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + /path-to-regexp/0.1.7: resolution: {integrity: sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=} dev: false - /probe-image-size/7.2.1: - resolution: {integrity: sha512-d+6L3NvQBCNt4peRDoEfA7r9bPm6/qy18FnLKwg4NWBC5JrJm0pMLRg1kF4XNsPe1bUdt3WIMonPJzQWN2HXjQ==} + /picomatch/2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /probe-image-size/7.2.3: + resolution: {integrity: sha512-HubhG4Rb2UH8YtV4ba0Vp5bQ7L78RTONYu/ujmCu5nBI8wGv24s4E9xSKBi0N1MowRpxk76pFCpJtW0KPzOK0w==} dependencies: lodash.merge: 4.6.2 needle: 2.9.1 stream-parser: 0.3.1 dev: false - /process-nextick-args/2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: false - /proxy-addr/2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -843,15 +1207,15 @@ packages: engines: {node: '>=6'} dev: false - /qs/6.10.1: - resolution: {integrity: sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==} + /qs/6.10.3: + resolution: {integrity: sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==} engines: {node: '>=0.6'} dependencies: side-channel: 1.0.4 dev: false - /qs/6.7.0: - resolution: {integrity: sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==} + /qs/6.9.7: + resolution: {integrity: sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==} engines: {node: '>=0.6'} dev: false @@ -860,33 +1224,27 @@ packages: engines: {node: '>=10'} dev: false + /randombytes/2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + /range-parser/1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} dev: false - /raw-body/2.4.0: - resolution: {integrity: sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==} + /raw-body/2.4.3: + resolution: {integrity: sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==} engines: {node: '>= 0.8'} dependencies: - bytes: 3.1.0 - http-errors: 1.7.2 + bytes: 3.1.2 + http-errors: 1.8.1 iconv-lite: 0.4.24 unpipe: 1.0.0 dev: false - /readable-stream/2.3.7: - resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - dev: false - /readable-stream/3.6.0: resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} engines: {node: '>= 6'} @@ -896,26 +1254,108 @@ packages: util-deprecate: 1.0.2 dev: false + /readdirp/3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /require-relative/0.8.7: + resolution: {integrity: sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=} + dev: true + /resolve-alpn/1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} dev: false + /resolve/1.22.0: + resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} + hasBin: true + dependencies: + is-core-module: 2.8.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + /responselike/2.0.0: resolution: {integrity: sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==} dependencies: lowercase-keys: 2.0.0 dev: false - /safe-buffer/5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + /rollup-plugin-css-only/3.1.0_rollup@2.68.0: + resolution: {integrity: sha512-TYMOE5uoD76vpj+RTkQLzC9cQtbnJNktHPB507FzRWBVaofg7KhIqq1kGbcVOadARSozWF883Ho9KpSPKH8gqA==} + engines: {node: '>=10.12.0'} + peerDependencies: + rollup: 1 || 2 + dependencies: + '@rollup/pluginutils': 4.1.2 + rollup: 2.68.0 + dev: true + + /rollup-plugin-livereload/2.0.5_bffff4271b89d628e8333ead80d3d8e8: + resolution: {integrity: sha512-vqQZ/UQowTW7VoiKEM5ouNW90wE5/GZLfdWuR0ELxyKOJUIaj+uismPZZaICU4DnWPVjnpCDDxEqwU7pcKY/PA==} + engines: {node: '>=8.3'} + dependencies: + livereload: 0.9.3_bffff4271b89d628e8333ead80d3d8e8 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /rollup-plugin-svelte/7.1.0_rollup@2.68.0+svelte@3.46.4: + resolution: {integrity: sha512-vopCUq3G+25sKjwF5VilIbiY6KCuMNHP1PFvx2Vr3REBNMDllKHFZN2B9jwwC+MqNc3UPKkjXnceLPEjTjXGXg==} + engines: {node: '>=10'} + peerDependencies: + rollup: '>=2.0.0' + svelte: '>=3.5.0' + dependencies: + require-relative: 0.8.7 + rollup: 2.68.0 + rollup-pluginutils: 2.8.2 + svelte: 3.46.4 + dev: true + + /rollup-plugin-terser/7.0.2_rollup@2.68.0: + resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + peerDependencies: + rollup: ^2.0.0 + dependencies: + '@babel/code-frame': 7.16.7 + jest-worker: 26.6.2 + rollup: 2.68.0 + serialize-javascript: 4.0.0 + terser: 5.11.0 + dev: true + + /rollup-pluginutils/2.8.2: + resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} + dependencies: + estree-walker: 0.6.1 + dev: true + + /rollup/2.68.0: + resolution: {integrity: sha512-XrMKOYK7oQcTio4wyTz466mucnd8LzkiZLozZ4Rz0zQD+HeX4nUK4B8GrTX/2EvN2/vBF/i2WnaXboPxo0JylA==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /sade/1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + dependencies: + mri: 1.2.0 dev: false /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: false - /safe-stable-stringify/1.1.1: - resolution: {integrity: sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==} + /safe-stable-stringify/2.3.1: + resolution: {integrity: sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==} + engines: {node: '>=10'} dev: false /safer-buffer/2.1.2: @@ -926,6 +1366,11 @@ packages: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} dev: false + /semiver/1.1.0: + resolution: {integrity: sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==} + engines: {node: '>=6'} + dev: false + /semver/7.3.5: resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} engines: {node: '>=10'} @@ -934,8 +1379,8 @@ packages: lru-cache: 6.0.0 dev: false - /send/0.17.1: - resolution: {integrity: sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==} + /send/0.17.2: + resolution: {integrity: sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==} engines: {node: '>= 0.8.0'} dependencies: debug: 2.6.9 @@ -945,26 +1390,32 @@ packages: escape-html: 1.0.3 etag: 1.8.1 fresh: 0.5.2 - http-errors: 1.7.3 + http-errors: 1.8.1 mime: 1.6.0 - ms: 2.1.1 + ms: 2.1.3 on-finished: 2.3.0 range-parser: 1.2.1 statuses: 1.5.0 dev: false - /serve-static/1.14.1: - resolution: {integrity: sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==} + /serialize-javascript/4.0.0: + resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} + dependencies: + randombytes: 2.1.0 + dev: true + + /serve-static/1.14.2: + resolution: {integrity: sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==} engines: {node: '>= 0.8.0'} dependencies: encodeurl: 1.0.2 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.17.1 + send: 0.17.2 dev: false - /setprototypeof/1.1.1: - resolution: {integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==} + /setprototypeof/1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} dev: false /side-channel/1.0.4: @@ -972,7 +1423,7 @@ packages: dependencies: call-bind: 1.0.2 get-intrinsic: 1.1.1 - object-inspect: 1.11.0 + object-inspect: 1.12.0 dev: false /simple-swizzle/0.2.2: @@ -981,6 +1432,51 @@ packages: is-arrayish: 0.3.2 dev: false + /sirv-cli/2.0.2: + resolution: {integrity: sha512-OtSJDwxsF1NWHc7ps3Sa0s+dPtP15iQNJzfKVz+MxkEo3z72mCD+yu30ct79rPr0CaV1HXSOBp+MIY5uIhHZ1A==} + engines: {node: '>= 10'} + hasBin: true + dependencies: + console-clear: 1.1.1 + get-port: 3.2.0 + kleur: 4.1.4 + local-access: 1.1.0 + sade: 1.8.1 + semiver: 1.1.0 + sirv: 2.0.2 + tinydate: 1.3.0 + dev: false + + /sirv/2.0.2: + resolution: {integrity: sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==} + engines: {node: '>= 10'} + dependencies: + '@polka/url': 1.0.0-next.21 + mrmime: 1.0.0 + totalist: 3.0.0 + dev: false + + /source-map-support/0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + + /source-map/0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + + /source-map/0.7.3: + resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} + engines: {node: '>= 8'} + dev: true + + /sourcemap-codec/1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + dev: true + /spotify-web-api-node/5.0.2: resolution: {integrity: sha512-r82dRWU9PMimHvHEzL0DwEJrzFk+SMCVfq249SLt3I7EFez7R+jeoKQd+M1//QcnjqlXPs2am4DFsGk8/GCsrA==} dependencies: @@ -1004,12 +1500,6 @@ packages: debug: 2.6.9 dev: false - /string_decoder/1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - dependencies: - safe-buffer: 5.1.2 - dev: false - /string_decoder/1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: @@ -1019,22 +1509,58 @@ packages: /superagent/6.1.0: resolution: {integrity: sha512-OUDHEssirmplo3F+1HWKUrUjvnQuA+nZI6i/JJBdXb5eq9IyEQwPyPpqND+SSsxf6TygpBEkUjISVRN4/VOpeg==} engines: {node: '>= 7.0.0'} + deprecated: Please upgrade to v7.0.2+ of superagent. We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing. See the releases tab for more information at . dependencies: component-emitter: 1.3.0 cookiejar: 2.1.3 - debug: 4.3.2 + debug: 4.3.3 fast-safe-stringify: 2.1.1 form-data: 3.0.1 - formidable: 1.2.2 + formidable: 1.2.6 methods: 1.1.2 - mime: 2.5.2 - qs: 6.10.1 + mime: 2.6.0 + qs: 6.10.3 readable-stream: 3.6.0 semver: 7.3.5 transitivePeerDependencies: - supports-color dev: false + /supports-color/5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-color/7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-preserve-symlinks-flag/1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /svelte/3.46.4: + resolution: {integrity: sha512-qKJzw6DpA33CIa+C/rGp4AUdSfii0DOTCzj/2YpSKKayw5WGSS624Et9L1nU1k2OVRS9vaENQXp2CVZNU+xvIg==} + engines: {node: '>= 8'} + dev: true + + /terser/5.11.0: + resolution: {integrity: sha512-uCA9DLanzzWSsN1UirKwylhhRz3aKPInlfmpGfw8VN6jHsAtu8HJtIpeeHHK23rxnE/cDc+yvmq5wqkIC6Kn0A==} + engines: {node: '>=10'} + hasBin: true + dependencies: + acorn: 8.7.0 + commander: 2.20.3 + source-map: 0.7.3 + source-map-support: 0.5.21 + dev: true + /text-hex/1.0.0: resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} dev: false @@ -1043,8 +1569,20 @@ packages: resolution: {integrity: sha512-a7wPxPdVlQL7lqvitHGGRsofhdwtkoSXPGATFuSOA2i1ZNQEPLrGnj68vOp2sOJTCFAQVXPeNMX/GctBaO9L2w==} dev: false - /toidentifier/1.0.0: - resolution: {integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==} + /tinydate/1.3.0: + resolution: {integrity: sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==} + engines: {node: '>=4'} + dev: false + + /to-regex-range/5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /toidentifier/1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} dev: false @@ -1052,6 +1590,11 @@ packages: resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} dev: false + /totalist/3.0.0: + resolution: {integrity: sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==} + engines: {node: '>=6'} + dev: false + /tough-cookie/4.0.0: resolution: {integrity: sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==} engines: {node: '>=6'} @@ -1070,11 +1613,11 @@ packages: engines: {node: '>= 0.6'} dependencies: media-typer: 0.3.0 - mime-types: 2.1.33 + mime-types: 2.1.34 dev: false - /typescript/4.4.4: - resolution: {integrity: sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==} + /typescript/4.5.5: + resolution: {integrity: sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==} engines: {node: '>=4.2.0'} hasBin: true dev: true @@ -1089,8 +1632,8 @@ packages: engines: {node: '>= 0.8'} dev: false - /utf-8-validate/5.0.7: - resolution: {integrity: sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==} + /utf-8-validate/5.0.8: + resolution: {integrity: sha512-k4dW/Qja1BYDl2qD4tOMB9PFVha/UJtxTc1cXYOe3WwA/2m0Yn4qB7wLMpJyLJ/7DR0XnTut3HsCSzDT4ZvKgA==} engines: {node: '>=6.14.2'} requiresBuild: true dependencies: @@ -1112,35 +1655,36 @@ packages: engines: {node: '>= 0.8'} dev: false - /winston-transport/4.4.0: - resolution: {integrity: sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==} + /winston-transport/4.5.0: + resolution: {integrity: sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==} engines: {node: '>= 6.4.0'} dependencies: - readable-stream: 2.3.7 + logform: 2.4.0 + readable-stream: 3.6.0 triple-beam: 1.3.0 dev: false - /winston/3.3.3: - resolution: {integrity: sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==} - engines: {node: '>= 6.4.0'} + /winston/3.6.0: + resolution: {integrity: sha512-9j8T75p+bcN6D00sF/zjFVmPp+t8KMPB1MzbbzYjeN9VWxdsYnTB40TkbNUEXAmILEfChMvAMgidlX64OG3p6w==} + engines: {node: '>= 12.0.0'} dependencies: - '@dabh/diagnostics': 2.0.2 - async: 3.2.1 + '@dabh/diagnostics': 2.0.3 + async: 3.2.3 is-stream: 2.0.1 - logform: 2.3.0 + logform: 2.4.0 one-time: 1.0.0 readable-stream: 3.6.0 + safe-stable-stringify: 2.3.1 stack-trace: 0.0.10 triple-beam: 1.3.0 - winston-transport: 4.4.0 + winston-transport: 4.5.0 dev: false /wrappy/1.0.2: resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} - dev: false - /ws/7.5.5_5971b5a749a91823f5467a6d31a2f8b3: - resolution: {integrity: sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==} + /ws/7.5.7_bffff4271b89d628e8333ead80d3d8e8: + resolution: {integrity: sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==} engines: {node: '>=8.3.0'} peerDependencies: bufferutil: ^4.0.1 @@ -1151,12 +1695,11 @@ packages: utf-8-validate: optional: true dependencies: - bufferutil: 4.0.5 - utf-8-validate: 5.0.7 - dev: false + bufferutil: 4.0.6 + utf-8-validate: 5.0.8 - /ws/8.2.3_5971b5a749a91823f5467a6d31a2f8b3: - resolution: {integrity: sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==} + /ws/8.5.0_bffff4271b89d628e8333ead80d3d8e8: + resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -1167,23 +1710,22 @@ packages: utf-8-validate: optional: true dependencies: - bufferutil: 4.0.5 - utf-8-validate: 5.0.7 + bufferutil: 4.0.6 + utf-8-validate: 5.0.8 dev: false /yallist/4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: false - git.freezerapp.xyz/RemixDev/deemix-js/5c81a56d11d0e2dc4392bfcb0b0e67a88fe14ee2: - resolution: {commit: 5c81a56d11d0e2dc4392bfcb0b0e67a88fe14ee2, repo: https://git.freezerapp.xyz/RemixDev/deemix-js, type: git} + git.freezerapp.xyz/RemixDev/deemix-js/58bd92bc303a338aafc56ccf51940713812756ec: + resolution: {commit: 58bd92bc303a338aafc56ccf51940713812756ec, repo: https://git.freezerapp.xyz/RemixDev/deemix-js, type: git} name: deemix - version: 3.6.4 + version: 3.6.7 dependencies: - async: 3.2.1 - crypto: 1.0.1 - deezer-js: 1.3.4 - got: 11.8.2 + async: 3.2.3 + deezer-js: 1.3.5 + got: 11.8.3 metaflac-js2: 1.0.8 spotify-web-api-node: 5.0.2 transitivePeerDependencies: diff --git a/public/android-icon-192x192.png b/public-old/android-icon-192x192.png similarity index 100% rename from public/android-icon-192x192.png rename to public-old/android-icon-192x192.png diff --git a/public/apple-icon-114x114.png b/public-old/apple-icon-114x114.png similarity index 100% rename from public/apple-icon-114x114.png rename to public-old/apple-icon-114x114.png diff --git a/public/apple-icon-120x120.png b/public-old/apple-icon-120x120.png similarity index 100% rename from public/apple-icon-120x120.png rename to public-old/apple-icon-120x120.png diff --git a/public/apple-icon-144x144.png b/public-old/apple-icon-144x144.png similarity index 100% rename from public/apple-icon-144x144.png rename to public-old/apple-icon-144x144.png diff --git a/public/apple-icon-152x152.png b/public-old/apple-icon-152x152.png similarity index 100% rename from public/apple-icon-152x152.png rename to public-old/apple-icon-152x152.png diff --git a/public/apple-icon-180x180.png b/public-old/apple-icon-180x180.png similarity index 100% rename from public/apple-icon-180x180.png rename to public-old/apple-icon-180x180.png diff --git a/public/apple-icon-57x57.png b/public-old/apple-icon-57x57.png similarity index 100% rename from public/apple-icon-57x57.png rename to public-old/apple-icon-57x57.png diff --git a/public/apple-icon-60x60.png b/public-old/apple-icon-60x60.png similarity index 100% rename from public/apple-icon-60x60.png rename to public-old/apple-icon-60x60.png diff --git a/public/apple-icon-72x72.png b/public-old/apple-icon-72x72.png similarity index 100% rename from public/apple-icon-72x72.png rename to public-old/apple-icon-72x72.png diff --git a/public/apple-icon-76x76.png b/public-old/apple-icon-76x76.png similarity index 100% rename from public/apple-icon-76x76.png rename to public-old/apple-icon-76x76.png diff --git a/public/favicon-16x16.png b/public-old/favicon-16x16.png similarity index 100% rename from public/favicon-16x16.png rename to public-old/favicon-16x16.png diff --git a/public/favicon-32x32.png b/public-old/favicon-32x32.png similarity index 100% rename from public/favicon-32x32.png rename to public-old/favicon-32x32.png diff --git a/public/favicon-96x96.png b/public-old/favicon-96x96.png similarity index 100% rename from public/favicon-96x96.png rename to public-old/favicon-96x96.png diff --git a/public-old/index.css b/public-old/index.css new file mode 100644 index 0000000..4191457 --- /dev/null +++ b/public-old/index.css @@ -0,0 +1,163 @@ +@media (prefers-color-scheme: dark) { + .lds-ring div { + border: 8px solid #fff; + border-color: #fff transparent transparent transparent; + } + #progress-bar { + background-color: #161627; + } + #progress-bar-inner { + background-color: rgb(131, 131, 243); + } + .slider { + background-color: rgb(131, 131, 243); + } + .slider:hover { + filter: drop-shadow( 0px 0px 5px #8383F3); + } + #progress-state { + background-color: #0a0a0f; + } +} +@media (prefers-color-scheme: light) { + #progress-bar { + background-color: #fafafa; + } + #progress-bar-inner { + background-color: #ea74ac; + } + .slider { + background-color: #ea74ac; + } + .slider:hover { + filter: drop-shadow( 0px 0px 5px #ea74ac); + } + #git { + filter: invert(100%); + } + #progress-state { + background-color: #fafafa; + } +} + +#progress { + width: 600px; + max-width: 98%; +} + +#progress-bar { + border-radius: 10px; + width: 100%; + height: 12px; +} +#progress-bar-inner { + border-radius: 10px; +} + + +#header { + display: flex; + align-items: left; + justify-content: left; + flex-direction: row; +} +#header > * { + margin-left: 12px; + margin-right: 12px; +} +#header .link { + font-size: x-large; + text-decoration: none; +} +#header img { + position: relative; + top: 5px; +} + + /* The switch - the box around the slider */ +.switch { + position: relative; + display: inline-block; + width: 60px; + height: 34px; +} + +/* Hide default HTML checkbox */ +.switch input { + opacity: 0; + width: 0; + height: 0; +} + +/* The slider */ +.slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + -webkit-transition: .2s; + transition: .2s; +} + +.slider:before { + position: absolute; + content: ""; + height: 26px; + width: 26px; + left: 4px; + bottom: 4px; + background-color: white; + -webkit-transition: .2s; + transition: .2s; +} + +input:checked + .slider:before { + -webkit-transform: translateX(26px); + -ms-transform: translateX(26px); + transform: translateX(26px); +} + +/* Rounded sliders */ +.slider.round { + border-radius: 34px; +} + +.slider.round:before { + border-radius: 50%; +} + +#header-left { + width: 100%; +} +#header-left > * { + margin-right: 16px; +} + +#progress-state { + font-family: monospace; + font-size: 12px; + border-radius: 10px; + width: 80%; + padding: 6px; + height: 110px; +} + +.album-downloading { + border-radius: 10px; +} + +.error { + background-color: rgb(255, 155, 155, 0.3); + padding: 20px; + border-radius: 15px; + border: 3px solid rgb(255, 155, 155, 0.8); + text-align: center; + margin: 15px; + width: 400px; + display: none; /* this is changed by the js */ +} +.error .big { + font-size: x-large; +} \ No newline at end of file diff --git a/public/index.html b/public-old/index.html similarity index 100% rename from public/index.html rename to public-old/index.html diff --git a/public/index.js b/public-old/index.js similarity index 100% rename from public/index.js rename to public-old/index.js diff --git a/public/manifest.json b/public-old/manifest.json similarity index 100% rename from public/manifest.json rename to public-old/manifest.json diff --git a/public/index.css b/public/index.css deleted file mode 100644 index 2b743ee..0000000 --- a/public/index.css +++ /dev/null @@ -1,450 +0,0 @@ -@media (prefers-color-scheme: dark) { - * { - transition: 0.1s background-color ease-out; - } - body { - background-color: #0a0a0f; - color: #fff; - accent-color: rgb(131, 131, 243); - } - input { - background-color: #112; - color: #fff; - box-shadow: 0px 0px 15px #000; - border-bottom: 0rem solid rgb(131, 131, 243); - } - input:focus, input:hover { - border-bottom: 0.25rem solid rgb(131, 131, 243); - background-color: #161626; - } - .album { - background-color: #161627; - box-shadow: 0px 0px 12px #000; - border-left: 0rem solid rgb(131, 131, 243); - } - .album:hover { - border-left: 0.25rem solid rgb(131, 131, 243); - background-color: #181829; - } - .small { - color: #888; - } - .album-image { - border: 0px solid rgb(131, 131, 243); - box-shadow: 0px 0px 15px #000; - } - .album:hover .album-image { - border: 2px solid rgb(131, 131, 243); - box-shadow: 0px 0px 30px #000; - } - .album-image-wrapper { - border: 2px solid rgba(0, 0, 0, 0); - } - .album:hover .album-image-wrapper { - border: 0px solid rgba(0, 0, 0, 0); - } - .link { - color:rgb(131, 131, 243); - } - .link:hover { - color: rgb(151, 151, 255); - filter: drop-shadow( 0px 0px 2px #8383F3); - } - .album-download { - filter: invert(100%); - } - .album-download:hover { - filter: invert(50%) sepia(58%) saturate(893%) hue-rotate(206deg) brightness(99%) contrast(92%) drop-shadow( 0px 0px 5px #8383F3); - } - .lds-ring div { - border: 8px solid #fff; - border-color: #fff transparent transparent transparent; - } - #progress-bar { - background-color: #161627; - } - #progress-bar-inner { - background-color: rgb(131, 131, 243); - } - .album-bottom { - background-color: #112; - border-left: 0rem solid rgb(131, 131, 243); - } - .album:hover .album-bottom { - border-left: 0.25rem solid rgb(131, 131, 243); - } - .track { - border-bottom: 3px solid #0a0a0f; - border-left: 0rem solid rgb(131, 131, 243); - } - .track:hover { - background-color: #161627; - border-left: 0.25rem solid rgb(131, 131, 243); - } - .slider { - background-color: rgb(131, 131, 243); - } - .slider:hover { - filter: drop-shadow( 0px 0px 5px #8383F3); - } - #progress-state { - background-color: #0a0a0f; - } -} -@media (prefers-color-scheme: light) { - body { - background-color: #f0f0f0; - color: #1e1e2d; - accent-color: #ea74ac; - } - input { - background-color: #ffffff; - color: #1e1e2d; - box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.2); - border-bottom: 0rem solid #ea74ac; - } - input:focus, input:hover { - border-bottom: 0.25rem solid #ea74ac; - background-color: #fafafa; - } - .album { - background-color: #ffffff; - box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.2); - border-left: 0rem solid #ea74ac; - } - .album:hover { - border-left: 0.25rem solid #ea74ac; - background-color: #fafafa; - } - .small { - color: #c8c8d2; - } - .album-image { - border: 0px solid #ea74ac; - box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.2); - } - .album:hover .album-image { - border: 2px solid #ea74ac; - box-shadow: 0px 0px 30px rgba(0, 0, 0, 0.2); - } - .album-image-wrapper { - border: 2px solid rgba(0, 0, 0, 0); - } - .album:hover .album-image-wrapper { - border: 0px solid rgba(0, 0, 0, 0); - } - .link { - color:#ea74ac; - } - .link:hover { - color: #f484b6; - filter: drop-shadow( 0px 0px 2px #f484b6); - } - .album-download { - filter: none; - } - .album-download:hover { - filter: invert(65%) sepia(45%) saturate(772%) hue-rotate(295deg) brightness(103%) contrast(91%) drop-shadow( 0px 0px 5px #f484b6); - } - .lds-ring div { - border: 8px solid #1e1e2d; - border-color: #1e1e2d transparent transparent transparent; - } - #progress-bar { - background-color: #fafafa; - } - #progress-bar-inner { - background-color: #ea74ac; - } - .album-bottom { - background-color: #ffffff; - border-left: 0rem solid #ea74ac; - } - .album:hover .album-bottom { - border-left: 0.25rem solid #ea74ac; - } - .track { - border-bottom: 3px solid #f0f0f0; - border-left: 0rem solid #ea74ac; - } - .track:hover { - background-color: #fafafa; - border-left: 0.25rem solid #ea74ac; - } - .slider { - background-color: #ea74ac; - } - .slider:hover { - filter: drop-shadow( 0px 0px 5px #ea74ac); - } - #git { - filter: invert(100%); - } - #progress-state { - background-color: #fafafa; - } -} - -body { - font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; -} - -#main { - display: flex; - justify-content: center; - align-items: center; - flex-direction: column; -} - -input { - margin: 5px; - width: 550px; - max-width: 98%; - padding: 15px; - font-size: x-large; - border: none; - border-radius: 7px; - transition: 0.1s border-bottom ease-out, 0.1s background-color ease-in-out; -} - -.album { - padding: 15px; - margin: 2px; - font-size: large; - border-radius: 10px 10px 0px 0px; - transition: 0.1s border-left ease-out, 0.1s background-color ease-in-out; - min-height: 96px; - display: flex; - justify-content: space-between; -} -.small { - font-size: medium; -} -.big { - font-weight: bold; -} - -#albums { - margin-top: 20px; - width: 600px; - max-width: 98%; -} -#progress { - width: 600px; - max-width: 98%; -} -.album-image { - width: auto; - height: 100%; - border-radius: 10px; - transition: 0.1s border ease-out, 0.1s box-shadow ease-out; - width: 96px; - height: 96px; -} -.album-image-wrapper { - transition: 0.1s border ease-out; -} -.album-metadata { - display: flex; - flex-direction: column; - width: 100%; -} -.metadata { - height: 100%; -} -.link { - cursor: pointer; - transition: 0.1s color ease-out, 0.1s filter ease-out; -} -.album-download { - width: 32px; - height: 32px; - cursor: pointer; - transition: 0.1s filter ease-out; -} -.track .album-download { - position: relative; - top: 20px; -} -.lds-ring { - display: inline-block; - position: relative; - width: 80px; - height: 80px; -} -.lds-ring div { - box-sizing: border-box; - display: block; - position: absolute; - width: 64px; - height: 64px; - margin: 8px; - border-radius: 50%; - animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite; -} -.lds-ring div:nth-child(1) { - animation-delay: -0.45s; -} -.lds-ring div:nth-child(2) { - animation-delay: -0.3s; -} -.lds-ring div:nth-child(3) { - animation-delay: -0.15s; -} -@keyframes lds-ring { - 0% { - transform: rotate(0deg); - } - 100% { - transform: rotate(360deg); - } -} - -#progress-bar { - border-radius: 10px; - width: 100%; - height: 12px; -} -#progress-bar-inner { - border-radius: 10px; -} - -.album-bottom { - padding: 0px; - margin-left: 2px; - margin-right: 2px; - border-radius: 0px 0px 10px 10px; - transition: 0.1s border-left ease-out; -} -.track { - padding: 10px; - padding-top: 6px; - padding-bottom: 6px; - margin: none; - display: flex; - justify-content: space-between; - font-size: large; - transition: 0.05s background-color ease-out, 0.1s border-left ease-out; -} -.track:nth-last-child(1) { - border-bottom: none; - border-radius: 0px 0px 15px 15px; -} - -.track .album-download { - vertical-align: top; -} - -.track-download-wrapper { - position: relative; - bottom: 20px; - height: 50%; - width: auto; -} - -#header { - display: flex; - align-items: left; - justify-content: left; - flex-direction: row; -} -#header > * { - margin-left: 12px; - margin-right: 12px; -} -#header .link { - font-size: x-large; - text-decoration: none; -} -#header img { - position: relative; - top: 5px; -} - - /* The switch - the box around the slider */ -.switch { - position: relative; - display: inline-block; - width: 60px; - height: 34px; -} - -/* Hide default HTML checkbox */ -.switch input { - opacity: 0; - width: 0; - height: 0; -} - -/* The slider */ -.slider { - position: absolute; - cursor: pointer; - top: 0; - left: 0; - right: 0; - bottom: 0; - -webkit-transition: .2s; - transition: .2s; -} - -.slider:before { - position: absolute; - content: ""; - height: 26px; - width: 26px; - left: 4px; - bottom: 4px; - background-color: white; - -webkit-transition: .2s; - transition: .2s; -} - -input:checked + .slider:before { - -webkit-transform: translateX(26px); - -ms-transform: translateX(26px); - transform: translateX(26px); -} - -/* Rounded sliders */ -.slider.round { - border-radius: 34px; -} - -.slider.round:before { - border-radius: 50%; -} - -#header-left { - width: 100%; -} -#header-left > * { - margin-right: 16px; -} - -#progress-state { - font-family: monospace; - font-size: 12px; - border-radius: 10px; - width: 80%; - padding: 6px; - height: 110px; -} - -.album-downloading { - border-radius: 10px; -} - -.error { - background-color: rgb(255, 155, 155, 0.3); - padding: 20px; - border-radius: 15px; - border: 3px solid rgb(255, 155, 155, 0.8); - text-align: center; - margin: 15px; - width: 400px; - display: none; /* this is changed by the js */ -} -.error .big { - font-size: x-large; -} \ No newline at end of file diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 0000000..5222ef7 --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,76 @@ +import svelte from 'rollup-plugin-svelte'; +import commonjs from '@rollup/plugin-commonjs'; +import resolve from '@rollup/plugin-node-resolve'; +import livereload from 'rollup-plugin-livereload'; +import { terser } from 'rollup-plugin-terser'; +import css from 'rollup-plugin-css-only'; + +const production = !process.env.ROLLUP_WATCH; + +function serve() { + let server; + + function toExit() { + if (server) server.kill(0); + } + + return { + writeBundle() { + if (server) return; + server = require('child_process').spawn('npm', ['run', 'start', '--', '--dev'], { + stdio: ['ignore', 'inherit', 'inherit'], + shell: true + }); + + process.on('SIGTERM', toExit); + process.on('exit', toExit); + } + }; +} + +export default { + input: 'app/src/main.js', + output: { + sourcemap: true, + format: 'iife', + name: 'app', + file: 'app/public/build/bundle.js' + }, + plugins: [ + svelte({ + compilerOptions: { + // enable run-time checks when not in production + dev: !production + } + }), + // we'll extract any component CSS out into + // a separate file - better for performance + css({ output: 'bundle.css' }), + + // If you have external dependencies installed from + // npm, you'll most likely need these plugins. In + // some cases you'll need additional configuration - + // consult the documentation for details: + // https://github.com/rollup/plugins/tree/master/packages/commonjs + resolve({ + browser: true, + dedupe: ['svelte'] + }), + commonjs(), + + // In dev mode, call `npm run start` once + // the bundle has been generated + !production && serve(), + + // Watch the `public` directory and refresh the + // browser on changes when not in production + !production && livereload('app/public'), + + // If we're building for production (npm run build + // instead of npm run dev), minify + production && terser() + ], + watch: { + clearScreen: false + } +}; diff --git a/src/index.ts b/src/index.ts index 5c39c55..250caef 100644 --- a/src/index.ts +++ b/src/index.ts @@ -24,6 +24,7 @@ if (config.server.proxy) { app.use((req, res, next) => { logger.http(`${(config.server.proxy && req.headers['x-forwarded-for']) || req.connection.remoteAddress} ${req.method} ${req.originalUrl} `); + res.setHeader('Access-Control-Allow-Origin', '*'); next(); });