diff --git a/flake.nix b/flake.nix index d98d6e9..4f31635 100644 --- a/flake.nix +++ b/flake.nix @@ -20,11 +20,7 @@ }: { devShells.default = config.mk-naked-shell.lib.mkNakedShell { name = "musikspider-devshell"; - packages = with pkgs; [ - nodejs - yarn - yarn2nix - ]; + packages = with pkgs; [nodejs yarn]; }; packages.musikspider = pkgs.mkYarnPackage { src = ./.; diff --git a/package.json b/package.json index 76fe97e..098a26e 100644 --- a/package.json +++ b/package.json @@ -15,8 +15,7 @@ "@iconify-json/line-md": "^1.1.24", "@iconify-json/mdi": "^1.1.50", "@skeletonlabs/skeleton": "^1.2.5", - "@sveltejs/adapter-auto": "^2.0.1", - "@sveltejs/adapter-static": "^2.0.2", + "@sveltejs/adapter-node": "^1.2.4", "@sveltejs/kit": "^1.15.9", "@typescript-eslint/eslint-plugin": "^5.59.1", "@typescript-eslint/parser": "^5.59.1", diff --git a/src/components/a.svelte b/src/components/a.svelte index d535a63..1c754c6 100644 --- a/src/components/a.svelte +++ b/src/components/a.svelte @@ -3,8 +3,9 @@ export let href: string; export let title: string = ''; + let targetId = href === '/' ? '/(app)' : `/(app)${href}`; - $: isOnPage = href === $page.route.id; + $: isOnPage = targetId === $page.route.id; - {#if link.id === 'search' && $page.route.id === '/'} + {#if link.id === 'search' && $page.route.id === '/(app)'} import type { TrackWithId } from '../types'; - import { makeThumbnailUrl, currentTrack, setQueuePositionTo, getAudioElement } from '../stores'; + import { + makeThumbnailUrl, + currentTrack, + setQueuePositionTo, + makeGenScopedTokenUrl, + makeShareUrl + } from '../stores'; import Spinnny from '~icons/line-md/loading-loop'; import IconPlay from '~icons/mdi/play'; import IconMusic from '~icons/mdi/music'; + import { toastStore } from '@skeletonlabs/skeleton'; + import { getAudioElement } from '../utils'; export let track_with_id: TrackWithId; let track = track_with_id.track; @@ -13,6 +21,23 @@ let showSpinner = false; let isError = false; let showPlayIcon = false; + + async function shareMusic() { + try { + const resp = await fetch(makeGenScopedTokenUrl(track_id)); + const shareToken = await resp.text(); + await navigator.clipboard.writeText(makeShareUrl(shareToken)); + toastStore.trigger({ + message: `copied share URL to clipboard`, + background: 'variant-filled-success' + }); + } catch (e) { + toastStore.trigger({ + message: `error while generating share URL: ${e}`, + background: 'variant-filled-error' + }); + } + }
@@ -36,22 +61,29 @@ : 'hidden'}" /> - { - isError = true; - showSpinner = false; - }} - on:loadstart={() => (showSpinner = true)} - on:load={() => (showSpinner = false)} - /> + {#if thumbUrl !== null} + { + isError = true; + showSpinner = false; + }} + on:loadstart={() => (showSpinner = true)} + on:load={() => (showSpinner = false)} + /> + {/if}
#{track.track_num} - {track.title} + + share
import VirtualList from 'svelte-tiny-virtual-list'; - import { queue, tracks, tracksSorted } from '../stores'; - import TrackComponent from '../components/track.svelte'; - import type { Track, TrackWithId } from '../types'; + import { tracks, tracksSorted } from '../../stores'; + import TrackComponent from '../../components/track.svelte'; + import type { TrackWithId } from '../../types'; $: trackCount = $tracksSorted.length; let trackItemSize = 62; diff --git a/src/routes/queue/+page.svelte b/src/routes/(app)/queue/+page.svelte similarity index 89% rename from src/routes/queue/+page.svelte rename to src/routes/(app)/queue/+page.svelte index 6d3380e..7406011 100644 --- a/src/routes/queue/+page.svelte +++ b/src/routes/(app)/queue/+page.svelte @@ -1,10 +1,9 @@ + + + + + {data.info.title} {data.info.artist !== '' ? `- ${data.info.artist}` : ''} + + +
+
+ + diff --git a/src/stores.ts b/src/stores.ts index dccf6c4..5f30577 100644 --- a/src/stores.ts +++ b/src/stores.ts @@ -1,6 +1,8 @@ import { get, writable } from 'svelte/store'; -import { type ResourceId, type Track, type TrackId, type TrackWithId, LoopKind } from './types'; -import { dev } from '$app/environment'; +import { type Track, type TrackId, type TrackWithId, LoopKind } from './types'; + +import { PUBLIC_BASEURL, PUBLIC_MUSIKQUAD_SERVER } from '$env/static/public'; +import { scheme } from './utils'; function writableStorage(key: string, defaultValue: string) { const store = writable(localStorage.getItem(key) ?? defaultValue); @@ -8,19 +10,28 @@ function writableStorage(key: string, defaultValue: string) { return store; } -export const address = writableStorage("address", "127.0.0.1:5505"); +export const address = writableStorage("address", PUBLIC_MUSIKQUAD_SERVER); export const token = writableStorage("token", ""); -export function makeThumbnailUrl(id: ResourceId) { - const scheme = dev ? "http" : "https"; +export function makeThumbnailUrl(id: number) { + if (id === 0) { + return null; + } return `${scheme}://${get(address)}/thumbnail/${id}?token=${get(token)}`; } export function makeAudioUrl(id: TrackId) { - const scheme = dev ? "http" : "https"; return `${scheme}://${get(address)}/audio/external_id/${id}?token=${get(token)}`; } +export function makeGenScopedTokenUrl(id: TrackId) { + return `${scheme}://${get(address)}/share/generate/${id}?token=${get(token)}`; +} + +export function makeShareUrl(token: string) { + return `${scheme}://${PUBLIC_BASEURL}/share/${token}`; +} + export const currentTrack = writable(null); export function getCurrentTrack(tracks: Map, queue: TrackId[], position: number | null): TrackWithId | null { @@ -146,12 +157,4 @@ export function search(q: string) { } }); tracksSorted.set(result); -} - -export function getAudioElement() { - const elem = document.getElementById('audio-source'); - if (elem === null) { - return null; - } - return elem as HTMLAudioElement; } \ No newline at end of file diff --git a/src/types.ts b/src/types.ts index 1923fd3..83dc18e 100644 --- a/src/types.ts +++ b/src/types.ts @@ -9,7 +9,7 @@ export interface Track { album_id: ResourceId, artist_name: string, artist_id: ResourceId, - thumbnail_id: ResourceId, + thumbnail_id: number, } export interface TrackWithId { diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 0000000..0463bd6 --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,67 @@ +import { dev } from '$app/environment'; + +export const scheme = dev ? "http" : "https"; + +export function getAudioElement() { + const elem = document.getElementById('audio-source'); + if (elem === null) { + return null; + } + return elem as HTMLAudioElement; +} + +export function calculateMinuteSecond(seconds: number) { + let secs = Math.floor(seconds); + let secsLeftover = secs % 60; + let minutes = (secs - secsLeftover) / 60; + + let secondsFormatted = secsLeftover < 10 ? `0${secsLeftover}` : `${secsLeftover}`; + let minutesFormatted = minutes < 10 ? `0${minutes}` : `${minutes}`; + + return `${minutesFormatted}:${secondsFormatted}`; +} + +export function interceptKeys(extraActions: [string, () => void][] = []): (event: KeyboardEvent) => void { + return (event) => { + const tagName = document.activeElement?.tagName ?? ''; + const audio = getAudioElement(); + const actions = new Map([ + ...extraActions, + ['Space', () => { + if (audio !== null) { + audio.paused ? audio.play() : audio.pause(); + } + }], + ['KeyM', () => { + if (audio !== null) { + audio.muted = !audio.muted; + } + }], + [ + 'ArrowLeft', + () => { + if (audio !== null) { + audio.currentTime -= 5; + } + } + ], + [ + 'ArrowRight', + () => { + const audio = getAudioElement(); + if (audio !== null) { + audio.currentTime += 5; + } + } + ] + ]); + if (tagName !== 'INPUT' && actions.has(event.code)) { + event.preventDefault(); + event.stopPropagation(); + const action = actions.get(event.code) ?? null; + if (action !== null) { + action(); + } + } + } +} \ No newline at end of file diff --git a/svelte.config.js b/svelte.config.js index 00fd635..e7737a8 100644 --- a/svelte.config.js +++ b/svelte.config.js @@ -1,4 +1,4 @@ -import adapter from '@sveltejs/adapter-static'; +import adapter from '@sveltejs/adapter-node'; import { vitePreprocess } from '@sveltejs/kit/vite'; /** @type {import('@sveltejs/kit').Config} */ diff --git a/yarn.lock b/yarn.lock index 72c1233..0656bd0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -275,6 +275,46 @@ resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== +"@rollup/plugin-commonjs@^24.0.0": + version "24.1.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-24.1.0.tgz#79e54bd83bb64396761431eee6c44152ef322100" + integrity sha512-eSL45hjhCWI0jCCXcNtLVqM5N1JlBGvlFfY0m6oOYnLCJ6N0qEXoZql4sY2MOUArzhH4SA/qBpTxvvZp2Sc+DQ== + dependencies: + "@rollup/pluginutils" "^5.0.1" + commondir "^1.0.1" + estree-walker "^2.0.2" + glob "^8.0.3" + is-reference "1.2.1" + magic-string "^0.27.0" + +"@rollup/plugin-json@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-6.0.0.tgz#199fea6670fd4dfb1f4932250569b14719db234a" + integrity sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w== + dependencies: + "@rollup/pluginutils" "^5.0.1" + +"@rollup/plugin-node-resolve@^15.0.1": + version "15.0.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.2.tgz#8183a80c2cbf7b471f5ac86b16747997f3b5d185" + integrity sha512-Y35fRGUjC3FaurG722uhUuG8YHOJRJQbI6/CkbRkdPotSpDj9NtIN85z1zrcyDcCQIW4qp5mgG72U+gJ0TAFEg== + dependencies: + "@rollup/pluginutils" "^5.0.1" + "@types/resolve" "1.20.2" + deepmerge "^4.2.2" + is-builtin-module "^3.2.1" + is-module "^1.0.0" + resolve "^1.22.1" + +"@rollup/pluginutils@^5.0.1": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.2.tgz#012b8f53c71e4f6f9cb317e311df1404f56e7a33" + integrity sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^2.3.1" + "@skeletonlabs/skeleton@^1.2.5": version "1.2.5" resolved "https://registry.yarnpkg.com/@skeletonlabs/skeleton/-/skeleton-1.2.5.tgz#e35fb147b8353024c3fd35961ab0f8d63233ee3b" @@ -282,17 +322,15 @@ dependencies: svelte "^3.58.0" -"@sveltejs/adapter-auto@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@sveltejs/adapter-auto/-/adapter-auto-2.0.1.tgz#86b14efd833d7002e4ab2338d5c1efaddb8729d3" - integrity sha512-anxxYMcQy7HWSKxN4YNaVcgNzCHtNFwygq72EA1Xv7c+5gSECOJ1ez1PYoLciPiFa7A3XBvMDQXUFJ2eqLDtAA== +"@sveltejs/adapter-node@^1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@sveltejs/adapter-node/-/adapter-node-1.2.4.tgz#562e658adc805eb8ded43e26ca6f013cd28904e7" + integrity sha512-TNnhS+OKRZ9RKnC+ho5mlE2FJquI61i0v7yOXxBUSU3LAoYH2kwVVL8P8ecjefmZ8BOfM1V54pBnDODBU5CEaA== dependencies: - import-meta-resolve "^3.0.0" - -"@sveltejs/adapter-static@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@sveltejs/adapter-static/-/adapter-static-2.0.2.tgz#49afd27787fb73d789017d002a91031088494139" - integrity sha512-9wYtf6s6ew7DHUHMrt55YpD1FgV7oWql2IGsW5BXquLxqcY9vjrqCFo0TzzDpo+ZPZkW/v77k0eOP6tsAb8HmQ== + "@rollup/plugin-commonjs" "^24.0.0" + "@rollup/plugin-json" "^6.0.0" + "@rollup/plugin-node-resolve" "^15.0.1" + rollup "^3.7.0" "@sveltejs/kit@^1.15.9": version "1.16.0" @@ -330,6 +368,11 @@ resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.5.1.tgz#b29aa1f91a59f35e29ff8f7cb24faf1a3a750554" integrity sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g== +"@types/estree@*", "@types/estree@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" + integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== + "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" @@ -340,6 +383,11 @@ resolved "https://registry.yarnpkg.com/@types/pug/-/pug-2.0.6.tgz#f830323c88172e66826d0bde413498b61054b5a6" integrity sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg== +"@types/resolve@1.20.2": + version "1.20.2" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" + integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== + "@types/semver@^7.3.12": version "7.3.13" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" @@ -519,6 +567,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -541,6 +596,11 @@ buffer-crc32@^0.2.5: resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== +builtin-modules@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + busboy@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" @@ -603,6 +663,11 @@ commander@^4.0.0: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -639,7 +704,7 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -deepmerge@^4.3.1: +deepmerge@^4.2.2, deepmerge@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== @@ -841,6 +906,11 @@ estraverse@^5.1.0, estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -992,6 +1062,17 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^8.0.3: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + globals@^13.19.0: version "13.20.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" @@ -1061,11 +1142,6 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" -import-meta-resolve@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-3.0.0.tgz#94a6aabc623874fbc2f3525ec1300db71c6cbc11" - integrity sha512-4IwhLhNNA8yy445rPjD/lWh++7hMDOml2eHtd58eG7h+qK3EryMuuRbsHGPikCoAgIkkDnckKfWSk2iDla/ejg== - imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -1091,6 +1167,13 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-builtin-module@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" + integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== + dependencies: + builtin-modules "^3.3.0" + is-core-module@^2.11.0: version "2.12.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" @@ -1110,6 +1193,11 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -1120,6 +1208,13 @@ is-path-inside@^3.0.3: resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== +is-reference@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" + integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== + dependencies: + "@types/estree" "*" + is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" @@ -1263,6 +1358,13 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.0, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" @@ -1535,7 +1637,7 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve@^1.1.7, resolve@^1.22.2: +resolve@^1.1.7, resolve@^1.22.1, resolve@^1.22.2: version "1.22.2" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== @@ -1563,7 +1665,7 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -rollup@^3.21.0: +rollup@^3.21.0, rollup@^3.7.0: version "3.21.5" resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.21.5.tgz#1fbae43dc1079497b04604707f1cf979e51bfe49" integrity sha512-a4NTKS4u9PusbUJcfF4IMxuqjFzjm6ifj76P54a7cKnvVzJaG12BLVR+hgU2YDGHzyMMQNxLAZWuALsn8q2oQg==