server: better structure album tracks endpoint

- client: add now-playing and recommendations to home right-sidebar
This commit is contained in:
geoffrey45
2022-02-06 19:17:26 +03:00
parent 73dec9189e
commit 195a50382a
12 changed files with 298 additions and 318 deletions
+2 -1
View File
@@ -24,5 +24,6 @@
"eslint": "^8.7.0", "eslint": "^8.7.0",
"eslint-plugin-vue": "^8.3.0", "eslint-plugin-vue": "^8.3.0",
"vite": "^2.5.4" "vite": "^2.5.4"
} },
"packageManager": "yarn@3.1.1"
} }
+9 -14
View File
@@ -15,7 +15,7 @@ def initialize() -> None:
Runs all the necessary setup functions. Runs all the necessary setup functions.
""" """
helpers.create_config_dir() helpers.create_config_dir()
helpers.check_for_new_songs() # helpers.check_for_new_songs()
initialize() initialize()
@@ -28,12 +28,10 @@ def adutsfsd():
@bp.route('/search') @bp.route('/search')
def search_by_title(): def search_by_title():
query:str = ""
if not request.args.get('q'): if not request.args.get('q'):
query = "mexican girl" query:str = "mexican girl"
else: else:
query = request.args.get('q') query:str = str(request.args.get('q'))
albums = [] albums = []
artists = [] artists = []
@@ -209,13 +207,13 @@ def getFolderTree(folder: str):
entry.path, [".flac", ".mp3"])[1] entry.path, [".flac", ".mp3"])[1]
if len(files_in_dir) != 0: if len(files_in_dir) != 0:
dir = { _dir = {
"name": entry.name, "name": entry.name,
"count": len(files_in_dir), "count": len(files_in_dir),
"path": entry.path.replace(home_dir, ""), "path": entry.path.replace(home_dir, ""),
} }
folders.append(dir) folders.append(_dir)
songs = [] songs = []
@@ -245,22 +243,19 @@ def getAlbums():
return {'albums': albums} return {'albums': albums}
@bp.route('/albums/<query>') @bp.route('/album/<title>/<artist>/tracks')
@cache.cached() @cache.cached()
def getAlbumSongs(query: str): def get_album_tracks(title:str, artist:str):
album = query.split('::')[0].replace('|', '/')
artist = query.split('::')[1].replace('|', '/')
songs = [] songs = []
for track in all_the_f_music: for track in all_the_f_music:
if track.album == album and track.album_artist == artist: if track.album_artist == artist and track.album == title:
songs.append(track) songs.append(track)
songs = helpers.remove_duplicates(songs) songs = helpers.remove_duplicates(songs)
album_obj = { album_obj = {
"name": album, "name": title,
"count": len(songs), "count": len(songs),
"duration": "56 Minutes", "duration": "56 Minutes",
"image": songs[0].image, "image": songs[0].image,
+65 -62
View File
@@ -23,21 +23,21 @@ from app import models
def populate(): def populate():
''' """
Populate the database with all songs in the music directory Populate the database with all songs in the music directory
checks if the song is in the database, if not, it adds it checks if the song is in the database, if not, it adds it
also checks if the album art exists in the image path, if not tries to also checks if the album art exists in the image path, if not tries to
extract it. extract it.
''' """
print('\nchecking for new tracks') print("\nchecking for new tracks")
files = helpers.run_fast_scandir(helpers.home_dir, [".flac", ".mp3"])[1] files = helpers.run_fast_scandir(helpers.home_dir, [".flac", ".mp3"])[1]
for file in files: for file in files:
getTags(file) getTags(file)
api.all_the_f_music = helpers.getAllSongs() api.all_the_f_music = helpers.getAllSongs()
print('\ncheck done') print("\ncheck done")
def populate_images(): def populate_images():
@@ -46,25 +46,27 @@ def populate_images():
artists = [] artists = []
for song in all_songs: for song in all_songs:
this_artists = song['artists'].split(', ') this_artists = song["artists"].split(", ")
for artist in this_artists: for artist in this_artists:
if artist not in artists: if artist not in artists:
artists.append(artist) artists.append(artist)
bar = Bar('Processing images', max=len(artists)) bar = Bar("Processing images", max=len(artists))
for artist in artists: for artist in artists:
file_path = helpers.app_dir + '/images/artists/' + \ file_path = (
artist.replace('/', '::') + '.webp' helpers.app_dir + "/images/artists/" + artist.replace("/", "::") + ".webp"
)
if not os.path.exists(file_path): if not os.path.exists(file_path):
def try_save_image(): def try_save_image():
url = 'https://api.deezer.com/search/artist?q={}'.format(artist) url = "https://api.deezer.com/search/artist?q={}".format(artist)
response = requests.get(url) response = requests.get(url)
data = response.json() data = response.json()
try: try:
img_path = data['data'][0]['picture_medium'] img_path = data["data"][0]["picture_medium"]
except: except:
img_path = None img_path = None
@@ -72,8 +74,9 @@ def populate_images():
# save image as webp # save image as webp
img = Image.open(BytesIO(requests.get(img_path).content)) img = Image.open(BytesIO(requests.get(img_path).content))
img.save(file_path, format="webp") img.save(file_path, format="webp")
try: try:
try_save_image() try_save_image()
except requests.exceptions.ConnectionError: except requests.exceptions.ConnectionError:
time.sleep(5) time.sleep(5)
try_save_image() try_save_image()
@@ -94,31 +97,29 @@ def extract_thumb(audio_file_path: str) -> str:
""" """
Returns a path to a random image in the defaults directory. Returns a path to a random image in the defaults directory.
""" """
path = str(random.randint(0, 10)) + '.webp' path = str(random.randint(0, 10)) + ".webp"
return path return path
webp_path = audio_file_path.split('/')[-1] + '.webp' webp_path = audio_file_path.split("/")[-1] + ".webp"
img_path = os.path.join(helpers.app_dir, "images", "thumbnails", webp_path) img_path = os.path.join(helpers.app_dir, "images", "thumbnails", webp_path)
if os.path.exists(img_path): if os.path.exists(img_path):
return webp_path return webp_path
if audio_file_path.endswith('.flac'): if audio_file_path.endswith(".flac"):
try: try:
audio = FLAC(audio_file_path) audio = FLAC(audio_file_path)
album_art = audio.pictures[0].data album_art = audio.pictures[0].data
except: except:
album_art = None album_art = None
elif audio_file_path.endswith('.mp3'): elif audio_file_path.endswith(".mp3"):
try: try:
audio = ID3(audio_file_path) audio = ID3(audio_file_path)
album_art = audio.getall('APIC')[0].data album_art = audio.getall("APIC")[0].data
except: except:
album_art = None album_art = None
if album_art is None: if album_art is not None:
return use_defaults()
else:
img = Image.open(BytesIO(album_art)) img = Image.open(BytesIO(album_art))
try: try:
@@ -126,13 +127,15 @@ def extract_thumb(audio_file_path: str) -> str:
small_img.save(img_path, format="webp") small_img.save(img_path, format="webp")
except OSError: except OSError:
try: try:
png = img.convert('RGB') png = img.convert("RGB")
small_img = png.resize((250, 250), Image.ANTIALIAS) small_img = png.resize((250, 250), Image.ANTIALIAS)
small_img.save(img_path, format="webp") small_img.save(img_path, format="webp")
except: except:
return use_defaults() return use_defaults()
return webp_path return webp_path
else:
return use_defaults()
def getTags(full_path: str) -> dict: def getTags(full_path: str) -> dict:
@@ -140,72 +143,72 @@ def getTags(full_path: str) -> dict:
Returns a dictionary of tags for a given file. Returns a dictionary of tags for a given file.
""" """
if full_path.endswith('.flac'): if full_path.endswith(".flac"):
try: try:
audio = FLAC(full_path) audio = FLAC(full_path)
except: except MutagenError:
return return
elif full_path.endswith('.mp3'): elif full_path.endswith(".mp3"):
try: try:
audio = MP3(full_path) audio = MP3(full_path)
except: except MutagenError:
return return
try: try:
artists = audio['artist'][0] artists = audio["artist"][0]
except KeyError: except KeyError:
try: try:
artists = audio['TPE1'][0] artists = audio["TPE1"][0]
except: except:
artists = 'Unknown' artists = "Unknown"
except IndexError: except IndexError:
artists = 'Unknown' artists = "Unknown"
try: try:
album_artist = audio['albumartist'][0] album_artist = audio["albumartist"][0]
except KeyError: except KeyError:
try: try:
album_artist = audio['TPE2'][0] album_artist = audio["TPE2"][0]
except: except:
album_artist = 'Unknown' album_artist = "Unknown"
except IndexError: except IndexError:
album_artist = 'Unknown' album_artist = "Unknown"
try: try:
title = audio['title'][0] title = audio["title"][0]
except KeyError: except KeyError:
try: try:
title = audio['TIT2'][0] title = audio["TIT2"][0]
except: except:
title = full_path.split('/')[-1] title = full_path.split("/")[-1]
except: except:
title = full_path.split('/')[-1] title = full_path.split("/")[-1]
try: try:
album = audio['album'][0] album = audio["album"][0]
except KeyError: except KeyError:
try: try:
album = audio['TALB'][0] album = audio["TALB"][0]
except: except:
album = "Unknown" album = "Unknown"
except IndexError: except IndexError:
album = "Unknown" album = "Unknown"
try: try:
genre = audio['genre'][0] genre = audio["genre"][0]
except KeyError: except KeyError:
try: try:
genre = audio['TCON'][0] genre = audio["TCON"][0]
except: except:
genre = "Unknown" genre = "Unknown"
except IndexError: except IndexError:
genre = "Unknown" genre = "Unknown"
try: try:
date = audio['date'][0] date = audio["date"][0]
except KeyError: except KeyError:
try: try:
date = audio['TDRC'][0] date = audio["TDRC"][0]
except: except:
date = "Unknown" date = "Unknown"
except IndexError: except IndexError:
@@ -216,10 +219,10 @@ def getTags(full_path: str) -> dict:
length = str(datetime.timedelta(seconds=round(audio.info.length))) length = str(datetime.timedelta(seconds=round(audio.info.length)))
if length[:2] == "0:": if length[:2] == "0:":
length = length.replace('0:', '') length = length.replace("0:", "")
tags = { tags = {
"filepath": full_path.replace(helpers.home_dir, ''), "filepath": full_path.replace(helpers.home_dir, ""),
"folder": os.path.dirname(full_path).replace(helpers.home_dir, ""), "folder": os.path.dirname(full_path).replace(helpers.home_dir, ""),
"title": title, "title": title,
"artists": artists, "artists": artists,
@@ -227,7 +230,7 @@ def getTags(full_path: str) -> dict:
"album": album, "album": album,
"genre": genre, "genre": genre,
"length": length, "length": length,
"bitrate": round(int(audio.info.bitrate)/1000), "bitrate": round(int(audio.info.bitrate) / 1000),
"date": str(date)[:4], "date": str(date)[:4],
"image": img_path, "image": img_path,
} }
@@ -236,9 +239,10 @@ def getTags(full_path: str) -> dict:
return tags return tags
def getAlbumBio(title: str, album_artist: str) -> dict: def getAlbumBio(title: str, album_artist: str):
last_fm_url = 'http://ws.audioscrobbler.com/2.0/?method=album.getinfo&api_key={}&artist={}&album={}&format=json'.format( last_fm_url = "http://ws.audioscrobbler.com/2.0/?method=album.getinfo&api_key={}&artist={}&album={}&format=json".format(
helpers.last_fm_api_key, album_artist, title) helpers.LAST_FM_API_KEY, album_artist, title
)
try: try:
response = requests.get(last_fm_url) response = requests.get(last_fm_url)
@@ -247,8 +251,7 @@ def getAlbumBio(title: str, album_artist: str) -> dict:
return "None" return "None"
try: try:
bio = data['album']['wiki']['summary'].split( bio = data["album"]["wiki"]["summary"].split('<a href="https://www.last.fm/')[0]
'<a href="https://www.last.fm/')[0]
except KeyError: except KeyError:
bio = None bio = None
@@ -260,16 +263,16 @@ def getAlbumBio(title: str, album_artist: str) -> dict:
def create_track_class(tags): def create_track_class(tags):
return models.Track( return models.Track(
tags['_id']["$oid"], tags["_id"]["$oid"],
tags['title'], tags["title"],
tags['artists'], tags["artists"],
tags['album_artist'], tags["album_artist"],
tags['album'], tags["album"],
tags['filepath'], tags["filepath"],
tags['folder'], tags["folder"],
tags['length'], tags["length"],
tags['date'], tags["date"],
tags['genre'], tags["genre"],
tags['bitrate'], tags["bitrate"],
tags['image'] tags["image"],
) )
+9 -9
View File
@@ -16,7 +16,7 @@ from app import functions
home_dir = os.path.expanduser('~') + '/' home_dir = os.path.expanduser('~') + '/'
app_dir = os.path.join(home_dir, '.musicx') app_dir = os.path.join(home_dir, '.musicx')
last_fm_api_key = "762db7a44a9e6fb5585661f5f2bdf23a" LAST_FM_API_KEY = "762db7a44a9e6fb5585661f5f2bdf23a"
def background(f): def background(f):
@@ -42,7 +42,7 @@ def check_for_new_songs():
time.sleep(300) time.sleep(300)
def run_fast_scandir(dir: str, ext: str): def run_fast_scandir(_dir:str, ext: list):
""" """
Scans a directory for files with a specific extension. Returns a list of files and folders in the directory. Scans a directory for files with a specific extension. Returns a list of files and folders in the directory.
""" """
@@ -50,15 +50,15 @@ def run_fast_scandir(dir: str, ext: str):
subfolders = [] subfolders = []
files = [] files = []
for f in os.scandir(dir): for f in os.scandir(_dir):
if f.is_dir() and not f.name.startswith('.'): if f.is_dir() and not f.name.startswith('.'):
subfolders.append(f.path) subfolders.append(f.path)
if f.is_file(): if f.is_file():
if os.path.splitext(f.name)[1].lower() in ext: if os.path.splitext(f.name)[1].lower() in ext:
files.append(f.path) files.append(f.path)
for dir in list(subfolders): for _dir in list(subfolders):
sf, f = run_fast_scandir(dir, ext) sf, f = run_fast_scandir(_dir, ext)
subfolders.extend(sf) subfolders.extend(sf)
files.extend(f) files.extend(f)
@@ -111,14 +111,14 @@ def create_config_dir() -> None:
Creates the config directory if it doesn't exist. Creates the config directory if it doesn't exist.
""" """
home_dir = os.path.expanduser('~') _home_dir = os.path.expanduser('~')
config_folder = os.path.join(home_dir, app_dir) config_folder = os.path.join(_home_dir, app_dir)
dirs = ["", "images", "images/defaults", dirs = ["", "images", "images/defaults",
"images/artists", "images/thumbnails"] "images/artists", "images/thumbnails"]
for dir in dirs: for _dir in dirs:
path = os.path.join(config_folder, dir) path = os.path.join(config_folder, _dir)
try: try:
os.makedirs(path) os.makedirs(path)
+1 -1
View File
@@ -1,3 +1,3 @@
python manage.py /home/cwilvx/.local/share/virtualenvs/server-PQNgo_Nv/bin/python manage.py
# gunicorn -b 0.0.0.0:9876 --workers=4 "wsgi:create_app()" --log-level=debug # gunicorn -b 0.0.0.0:9876 --workers=4 "wsgi:create_app()" --log-level=debug
+3 -3
View File
@@ -14,7 +14,7 @@
<tbody> <tbody>
<SongItem <SongItem
v-for="(song, index) in props.songs" v-for="(song, index) in props.songs"
:key="song.id" :key="song"
:song="song" :song="song"
:index="index + 1" :index="index + 1"
@updateQueue="updateQueue" @updateQueue="updateQueue"
@@ -46,8 +46,8 @@ import state from "@/composables/state.js";
const props = defineProps({ const props = defineProps({
songs: { songs: {
type: Array, type: Array,
required: true, required: true
}, }
}); });
let route; let route;
+8 -4
View File
@@ -1,6 +1,7 @@
<template> <template>
<div class="r-home image"> <div class="r-home">
<NowPlaying />
<Recommendations />
</div> </div>
</template> </template>
@@ -8,7 +9,10 @@
.r-home { .r-home {
height: 100%; height: 100%;
width: 31rem; width: 31rem;
background-image: url("https://pro2-bar-s3-cdn-cf2.myportfolio.com/a534e2586a621751e93466e77f5228be/d686c78b-9cd7-4eeb-a660-69cfaf7e4cac_rw_600.gif");
color: transparent;
} }
</style> </style>
<script setup>
import NowPlaying from '../NowPlaying.vue';
import Recommendations from '../Recommendation.vue';
</script>
+17 -9
View File
@@ -1,8 +1,9 @@
<template> <template>
<div class="now-playing border"> <div class="now-playing border">
<div class="art-tags"> <div class="art-tags">
<div class="duration">{{ current.length }}</div>
<div <div
class="album-art image" class="album-art image border"
:style="{ :style="{
backgroundImage: `url(&quot;${current.image}&quot;)`, backgroundImage: `url(&quot;${current.image}&quot;)`,
}" }"
@@ -21,8 +22,9 @@
</div> </div>
</div> </div>
<div class="progress"> <div class="progress">
<div class="duration">{{ current.length }}</div> <div class="prog">
<Progress /> <Progress />
</div>
</div> </div>
<div class="controls"> <div class="controls">
<div class="shuffle"> <div class="shuffle">
@@ -81,8 +83,7 @@ export default {
<style lang="scss"> <style lang="scss">
.now-playing { .now-playing {
border-radius: 0.5rem; border-radius: 0.5rem;
height: 14rem; height: 15rem;
margin-top: 0.5rem;
padding: 0.5rem; padding: 0.5rem;
background: $card-dark; background: $card-dark;
display: grid; display: grid;
@@ -91,6 +92,14 @@ export default {
.art-tags { .art-tags {
display: flex; display: flex;
align-items: center; align-items: center;
position: relative;
.duration {
position: absolute;
bottom: $small;
right: 0;
font-size: .9rem;
}
hr { hr {
border: none; border: none;
@@ -106,16 +115,15 @@ export default {
#artist { #artist {
font-size: small; font-size: small;
width: 22rem; width: 22rem;
color: rgba(255, 255, 255, 0.712); color: $highlight-blue;
} }
.album-art { .album-art {
width: 6rem; width: 7rem;
height: 6rem; height: 7rem;
border-radius: 0.5rem; border-radius: 0.5rem;
margin-right: 0.5rem; margin-right: 0.5rem;
margin-left: $small; margin-left: $small;
// background-color: #ad1717a8;
background-image: url("../../assets/images/null.webp"); background-image: url("../../assets/images/null.webp");
} }
} }
+4 -13
View File
@@ -19,11 +19,9 @@
</p> </p>
</div> </div>
</div> </div>
<div class="scrl border rounded"> <div class="scrollable-r border rounded">
<div class="scrollable-r">
<TrackItem v-for="song in queue" :key="song.id" :track="song" /> <TrackItem v-for="song in queue" :key="song.id" :track="song" />
</div> </div>
</div>
</div> </div>
</div> </div>
</template> </template>
@@ -122,17 +120,10 @@ export default {
.r-grid { .r-grid {
position: relative; position: relative;
height: calc(100% - 2rem); height: 100%;
overflow: hidden;
width: 100%;
display: grid; display: grid;
grid-template-rows: min-content 1fr; grid-template-rows: min-content;
padding-bottom: $small; padding-bottom: 2.5rem;
.scrl {
overflow: hidden;
height: 100%;
}
.scrollable-r { .scrollable-r {
height: 100%; height: 100%;
@@ -18,6 +18,10 @@
export default { export default {
setup() { setup() {
const songs = [ const songs = [
{
title: "Imagine",
artist: "John Lennon",
},
{ {
title: "Mockingbird", title: "Mockingbird",
artist: "Eminem", artist: "Eminem",
+11 -11
View File
@@ -3,10 +3,10 @@ let base_uri = "http://0.0.0.0:9876";
const getAlbumTracks = async (name, artist) => { const getAlbumTracks = async (name, artist) => {
const res = await fetch( const res = await fetch(
base_uri + base_uri +
"/albums/" + "/album/" +
encodeURIComponent(name.replaceAll("/", "|")) + encodeURIComponent(name) + "/" +
"::" + encodeURIComponent(artist) +
encodeURIComponent(artist.replaceAll("/", "|")) "/tracks"
); );
if (!res.ok) { if (!res.ok) {
@@ -38,14 +38,14 @@ const getAlbumArtists = async (name, artist) => {
return data.artists; return data.artists;
}; };
const getAlbumBio = async(name, artist) => { const getAlbumBio = async (name, artist) => {
const res = await fetch( const res = await fetch(
base_uri + base_uri +
"/album/" + "/album/" +
encodeURIComponent(name.replaceAll("/", "|")) + encodeURIComponent(name.replaceAll("/", "|")) +
"/" + "/" +
encodeURIComponent(artist.replaceAll("/", "|")) + encodeURIComponent(artist.replaceAll("/", "|")) +
"/bio" "/bio"
); );
if (!res.ok) { if (!res.ok) {
@@ -60,5 +60,5 @@ const getAlbumBio = async(name, artist) => {
export default { export default {
getAlbumTracks, getAlbumTracks,
getAlbumArtists, getAlbumArtists,
getAlbumBio getAlbumBio,
}; };
+161 -187
View File
@@ -2,10 +2,10 @@
# yarn lockfile v1 # yarn lockfile v1
"@babel/parser@^7.15.0": "@babel/parser@^7.16.4":
version "7.16.3" version "7.17.0"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.3.tgz#271bafcb811080905a119222edbc17909c82261d" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.0.tgz#f0ac33eddbe214e4105363bb17c3341c5ffcc43c"
integrity sha512-dcNwU1O4sx57ClvLBVFbEgx0UZWfd0JQX5X6fxFRCLHelFBGXFfSz6Y0FAq2PEwUqlqLkdVjVr4VASEOuUnLJw== integrity sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==
"@eslint/eslintrc@^1.0.5": "@eslint/eslintrc@^1.0.5":
version "1.0.5" version "1.0.5"
@@ -23,9 +23,9 @@
strip-json-comments "^3.1.1" strip-json-comments "^3.1.1"
"@humanwhocodes/config-array@^0.9.2": "@humanwhocodes/config-array@^0.9.2":
version "0.9.2" version "0.9.3"
resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.2.tgz#68be55c737023009dfc5fe245d51181bb6476914" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.3.tgz#f2564c744b387775b436418491f15fce6601f63e"
integrity sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA== integrity sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==
dependencies: dependencies:
"@humanwhocodes/object-schema" "^1.2.1" "@humanwhocodes/object-schema" "^1.2.1"
debug "^4.1.1" debug "^4.1.1"
@@ -37,17 +37,17 @@
integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
"@types/eslint-scope@^3.7.0": "@types/eslint-scope@^3.7.0":
version "3.7.1" version "3.7.3"
resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.1.tgz#8dc390a7b4f9dd9f1284629efce982e41612116e" resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.3.tgz#125b88504b61e3c8bc6f870882003253005c3224"
integrity sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g== integrity sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==
dependencies: dependencies:
"@types/eslint" "*" "@types/eslint" "*"
"@types/estree" "*" "@types/estree" "*"
"@types/eslint@*": "@types/eslint@*":
version "8.2.1" version "8.4.1"
resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.2.1.tgz#13f3d69bac93c2ae008019c28783868d0a1d6605" resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.1.tgz#c48251553e8759db9e656de3efc846954ac32304"
integrity sha512-UP9rzNn/XyGwb5RQ2fok+DzcIRIYwc16qTXse5+Smsy8MOIccCChT15KAwnsgQx4PzJkaMq4myFyZ4CL5TjhIQ== integrity sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==
dependencies: dependencies:
"@types/estree" "*" "@types/estree" "*"
"@types/json-schema" "*" "@types/json-schema" "*"
@@ -63,109 +63,109 @@
integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==
"@types/node@*": "@types/node@*":
version "16.11.7" version "17.0.14"
resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.7.tgz#36820945061326978c42a01e56b61cd223dfdc42" resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.14.tgz#33b9b94f789a8fedd30a68efdbca4dbb06b61f20"
integrity sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw== integrity sha512-SbjLmERksKOGzWzPNuW7fJM7fk3YXVTFiZWB/Hs99gwhk+/dnrQRPBQjPW9aO+fi1tAffi9PrwFvsmOKmDTyng==
"@vitejs/plugin-vue@^1.6.1": "@vitejs/plugin-vue@^1.6.1":
version "1.10.2" version "1.10.2"
resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-1.10.2.tgz#d718479e2789d8a94b63e00f23f1898ba239253a" resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-1.10.2.tgz#d718479e2789d8a94b63e00f23f1898ba239253a"
integrity sha512-/QJ0Z9qfhAFtKRY+r57ziY4BSbGUTGsPRMpB/Ron3QPwBZM4OZAZHdTa4a8PafCwU5DTatXG8TMDoP8z+oDqJw== integrity sha512-/QJ0Z9qfhAFtKRY+r57ziY4BSbGUTGsPRMpB/Ron3QPwBZM4OZAZHdTa4a8PafCwU5DTatXG8TMDoP8z+oDqJw==
"@vue/compiler-core@3.2.21": "@vue/compiler-core@3.2.29":
version "3.2.21" version "3.2.29"
resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.21.tgz#26566c32b2ad838199d471ef5df620a83846f24e" resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.29.tgz#b06097ab8ff0493177c68c5ea5b63d379a061097"
integrity sha512-NhhiQZNG71KNq1h5pMW/fAXdTF7lJRaSI7LDm2edhHXVz1ROMICo8SreUmQnSf4Fet0UPBVqJ988eF4+936iDQ== integrity sha512-RePZ/J4Ub3sb7atQw6V6Rez+/5LCRHGFlSetT3N4VMrejqJnNPXKUt5AVm/9F5MJriy2w/VudEIvgscCfCWqxw==
dependencies: dependencies:
"@babel/parser" "^7.15.0" "@babel/parser" "^7.16.4"
"@vue/shared" "3.2.21" "@vue/shared" "3.2.29"
estree-walker "^2.0.2" estree-walker "^2.0.2"
source-map "^0.6.1" source-map "^0.6.1"
"@vue/compiler-dom@3.2.21": "@vue/compiler-dom@3.2.29":
version "3.2.21" version "3.2.29"
resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.21.tgz#d6f6c85364ef8888f9c4e9122bfba11e78fb398c" resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.29.tgz#ad0ead405bd2f2754161335aad9758aa12430715"
integrity sha512-gsJD3DpYZSYquiA7UIPsMDSlAooYWDvHPq9VRsqzJEk2PZtFvLvHPb4aaMD8Ufd62xzYn32cnnkzsEOJhyGilA== integrity sha512-y26vK5khdNS9L3ckvkqJk/78qXwWb75Ci8iYLb67AkJuIgyKhIOcR1E8RIt4mswlVCIeI9gQ+fmtdhaiTAtrBQ==
dependencies: dependencies:
"@vue/compiler-core" "3.2.21" "@vue/compiler-core" "3.2.29"
"@vue/shared" "3.2.21" "@vue/shared" "3.2.29"
"@vue/compiler-sfc@3.2.21", "@vue/compiler-sfc@^3.0.0": "@vue/compiler-sfc@3.2.29", "@vue/compiler-sfc@^3.0.0":
version "3.2.21" version "3.2.29"
resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.21.tgz#42639ee49e725afb7d8f1d1940e75dc17a56002c" resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.29.tgz#f76d556cd5fca6a55a3ea84c88db1a2a53a36ead"
integrity sha512-+yDlUSebKpz/ovxM2vLRRx7w/gVfY767pOfYTgbIhAs+ogvIV2BsIt4fpxlThnlCNChJ+yE0ERUNoROv2kEGEQ== integrity sha512-X9+0dwsag2u6hSOP/XsMYqFti/edvYvxamgBgCcbSYuXx1xLZN+dS/GvQKM4AgGS4djqo0jQvWfIXdfZ2ET68g==
dependencies: dependencies:
"@babel/parser" "^7.15.0" "@babel/parser" "^7.16.4"
"@vue/compiler-core" "3.2.21" "@vue/compiler-core" "3.2.29"
"@vue/compiler-dom" "3.2.21" "@vue/compiler-dom" "3.2.29"
"@vue/compiler-ssr" "3.2.21" "@vue/compiler-ssr" "3.2.29"
"@vue/ref-transform" "3.2.21" "@vue/reactivity-transform" "3.2.29"
"@vue/shared" "3.2.21" "@vue/shared" "3.2.29"
estree-walker "^2.0.2" estree-walker "^2.0.2"
magic-string "^0.25.7" magic-string "^0.25.7"
postcss "^8.1.10" postcss "^8.1.10"
source-map "^0.6.1" source-map "^0.6.1"
"@vue/compiler-ssr@3.2.21": "@vue/compiler-ssr@3.2.29":
version "3.2.21" version "3.2.29"
resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.21.tgz#37d124f89e8adef9fd56b85775de4b5310a0436e" resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.29.tgz#37b15b32dcd2f6b410bb61fca3f37b1a92b7eb1e"
integrity sha512-eU+A0iWYy+1zAo2CRIJ0zSVlv1iuGAIbNRCnllSJ31pV1lX3jypJYzGbJlSRAbB7VP6E+tYveVT1Oq8JKewa3g== integrity sha512-LrvQwXlx66uWsB9/VydaaqEpae9xtmlUkeSKF6aPDbzx8M1h7ukxaPjNCAXuFd3fUHblcri8k42lfimHfzMICA==
dependencies: dependencies:
"@vue/compiler-dom" "3.2.21" "@vue/compiler-dom" "3.2.29"
"@vue/shared" "3.2.21" "@vue/shared" "3.2.29"
"@vue/devtools-api@^6.0.0-beta.18": "@vue/devtools-api@^6.0.0-beta.18":
version "6.0.0-beta.20.1" version "6.0.0-beta.21.1"
resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.0.0-beta.20.1.tgz#5b499647e929c35baf2a66a399578f9aa4601142" resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.0.0-beta.21.1.tgz#f1410f53c42aa67fa3b01ca7bdba891f69d7bc97"
integrity sha512-R2rfiRY+kZugzWh9ZyITaovx+jpU4vgivAEAiz80kvh3yviiTU3CBuGuyWpSwGz9/C7TkSWVM/FtQRGlZ16n8Q== integrity sha512-FqC4s3pm35qGVeXRGOjTsRzlkJjrBLriDS9YXbflHLsfA9FrcKzIyWnLXoNm+/7930E8rRakXuAc2QkC50swAw==
"@vue/reactivity@3.2.21": "@vue/reactivity-transform@3.2.29":
version "3.2.21" version "3.2.29"
resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.21.tgz#073ad144192ed78a07e151e95a3baa515e4099a2" resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.2.29.tgz#a08d606e10016b7cf588d1a43dae4db2953f9354"
integrity sha512-7C57zFm/5E3SSTUhVuYj1InDwuJ+GIVQ/z+H43C9sST85gIThGXVhksl1yWTAadf8Yz4T5lSbqi5Ds8U/ueWcw== integrity sha512-YF6HdOuhdOw6KyRm59+3rML8USb9o8mYM1q+SH0G41K3/q/G7uhPnHGKvspzceD7h9J3VR1waOQ93CUZj7J7OA==
dependencies: dependencies:
"@vue/shared" "3.2.21" "@babel/parser" "^7.16.4"
"@vue/compiler-core" "3.2.29"
"@vue/ref-transform@3.2.21": "@vue/shared" "3.2.29"
version "3.2.21"
resolved "https://registry.yarnpkg.com/@vue/ref-transform/-/ref-transform-3.2.21.tgz#b0c554c9f640c3f005f77e676066aa0faba90984"
integrity sha512-uiEWWBsrGeun9O7dQExYWzXO3rHm/YdtFNXDVqCSoPypzOVxWxdiL+8hHeWzxMB58fVuV2sT80aUtIVyaBVZgQ==
dependencies:
"@babel/parser" "^7.15.0"
"@vue/compiler-core" "3.2.21"
"@vue/shared" "3.2.21"
estree-walker "^2.0.2" estree-walker "^2.0.2"
magic-string "^0.25.7" magic-string "^0.25.7"
"@vue/runtime-core@3.2.21": "@vue/reactivity@3.2.29":
version "3.2.21" version "3.2.29"
resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.21.tgz#e12dac8c3893b7aebfc37e32066718d8aa686ac5" resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.29.tgz#afdc9c111d4139b14600be17ad80267212af6052"
integrity sha512-7oOxKaU0D2IunOAMOOHZgJVrHg63xwng8BZx3fbgmakqEIMwHhQcp+5GV1sOg/sWW7R4UhaRDIUCukO2GRVK2Q== integrity sha512-Ryhb6Gy62YolKXH1gv42pEqwx7zs3n8gacRVZICSgjQz8Qr8QeCcFygBKYfJm3o1SccR7U+bVBQDWZGOyG1k4g==
dependencies: dependencies:
"@vue/reactivity" "3.2.21" "@vue/shared" "3.2.29"
"@vue/shared" "3.2.21"
"@vue/runtime-dom@3.2.21": "@vue/runtime-core@3.2.29":
version "3.2.21" version "3.2.29"
resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.21.tgz#33dd15bc85281e773177a30dc6931c294bd77aa1" resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.29.tgz#fb8577b2fcf52e8d967bd91cdf49ab9fb91f9417"
integrity sha512-apBdriD6QsI4ywbllY8kjr9/0scGuStDuvLbJULPQkFPtHzntd51bP5PQTQVAEIc9kwnTozmj6x6ZdX/cwo7xA== integrity sha512-VMvQuLdzoTGmCwIKTKVwKmIL0qcODIqe74JtK1pVr5lnaE0l25hopodmPag3RcnIcIXe+Ye3B2olRCn7fTCgig==
dependencies: dependencies:
"@vue/runtime-core" "3.2.21" "@vue/reactivity" "3.2.29"
"@vue/shared" "3.2.21" "@vue/shared" "3.2.29"
"@vue/runtime-dom@3.2.29":
version "3.2.29"
resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.29.tgz#35e9a2bf04ef80b86ac2ca0e7b2ceaccf1e18f01"
integrity sha512-YJgLQLwr+SQyORzTsBQLL5TT/5UiV83tEotqjL7F9aFDIQdFBTCwpkCFvX9jqwHoyi9sJqM9XtTrMcc8z/OjPA==
dependencies:
"@vue/runtime-core" "3.2.29"
"@vue/shared" "3.2.29"
csstype "^2.6.8" csstype "^2.6.8"
"@vue/server-renderer@3.2.21": "@vue/server-renderer@3.2.29":
version "3.2.21" version "3.2.29"
resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.2.21.tgz#887d0a44de76f72313cff2686a24c0315231d634" resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.2.29.tgz#ea6afa361b9c781a868c8da18c761f9b7bc89102"
integrity sha512-QBgYqVgI7XCSBCqGa4LduV9vpfQFdZBOodFmq5Txk5W/v1KrJ1LoOh2Q0RHiRgtoK/UR9uyvRVcYqOmwHkZNEg== integrity sha512-lpiYx7ciV7rWfJ0tPkoSOlLmwqBZ9FTmQm33S+T4g0j1fO/LmhJ9b9Ctl1o5xvIFVDk9QkSUWANZn7H2pXuxVw==
dependencies: dependencies:
"@vue/compiler-ssr" "3.2.21" "@vue/compiler-ssr" "3.2.29"
"@vue/shared" "3.2.21" "@vue/shared" "3.2.29"
"@vue/shared@3.2.21": "@vue/shared@3.2.29":
version "3.2.21" version "3.2.29"
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.21.tgz#4cd80c0e62cf65a7adab2449e86b6f0cb33a130b" resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.29.tgz#07dac7051117236431d2f737d16932aa38bbb925"
integrity sha512-5EQmIPK6gw4UVYUbM959B0uPsJ58+xoMESCZs3N89XyvJ9e+fX4pqEPrOGV8OroIk3SbEvJcC+eYc8BH9JQrHA== integrity sha512-BjNpU8OK6Z0LVzGUppEk0CMYm/hKDnZfYdjSmPOs0N+TR1cLKJAkDwW8ASZUvaaSLEi6d3hVM7jnWnX+6yWnHw==
"@webassemblyjs/ast@1.11.1": "@webassemblyjs/ast@1.11.1":
version "1.11.1" version "1.11.1"
@@ -308,12 +308,7 @@ acorn-jsx@^5.3.1:
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
acorn@^8.4.1: acorn@^8.4.1, acorn@^8.7.0:
version "8.6.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.6.0.tgz#e3692ba0eb1a0c83eaa4f37f5fa7368dd7142895"
integrity sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==
acorn@^8.7.0:
version "8.7.0" version "8.7.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf"
integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==
@@ -389,12 +384,12 @@ braces@~3.0.2:
fill-range "^7.0.1" fill-range "^7.0.1"
browserslist@^4.14.5: browserslist@^4.14.5:
version "4.18.1" version "4.19.1"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.18.1.tgz#60d3920f25b6860eb917c6c7b185576f4d8b017f" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3"
integrity sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ== integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==
dependencies: dependencies:
caniuse-lite "^1.0.30001280" caniuse-lite "^1.0.30001286"
electron-to-chromium "^1.3.896" electron-to-chromium "^1.4.17"
escalade "^3.1.1" escalade "^3.1.1"
node-releases "^2.0.1" node-releases "^2.0.1"
picocolors "^1.0.0" picocolors "^1.0.0"
@@ -409,10 +404,10 @@ callsites@^3.0.0:
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
caniuse-lite@^1.0.30001280: caniuse-lite@^1.0.30001286:
version "1.0.30001280" version "1.0.30001306"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001280.tgz#066a506046ba4be34cde5f74a08db7a396718fb7" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001306.tgz#582592afe243bad2223081b8abab07bf289cc699"
integrity sha512-kFXwYvHe5rix25uwueBxC569o53J6TpnGu0BEEn+6Lhl2vsnAumRFWEBhDft1fwyo6m1r4i+RqA4+163FpeFcA== integrity sha512-Wd1OuggRzg1rbnM5hv1wXs2VkxJH/AA+LuudlIqvZiCvivF+wJJe2mgBZC8gPMgI7D76PP5CTx8Luvaqc1V6OQ==
chalk@^4.0.0: chalk@^4.0.0:
version "4.1.2" version "4.1.2"
@@ -474,18 +469,11 @@ cross-spawn@^7.0.2:
which "^2.0.1" which "^2.0.1"
csstype@^2.6.8: csstype@^2.6.8:
version "2.6.18" version "2.6.19"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.18.tgz#980a8b53085f34af313410af064f2bd241784218" resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.19.tgz#feeb5aae89020bb389e1f63669a5ed490e391caa"
integrity sha512-RSU6Hyeg14am3Ah4VZEmeX8H7kLwEEirXe6aU2IPfKNvhXwTflK5HQRDNI0ypQXoqmm+QPyG2IaPuQE5zMwSIQ== integrity sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==
debug@^4.1.1: debug@^4.1.1, debug@^4.3.2:
version "4.3.2"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b"
integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==
dependencies:
ms "2.1.2"
debug@^4.3.2:
version "4.3.3" version "4.3.3"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664"
integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==
@@ -504,10 +492,10 @@ doctrine@^3.0.0:
dependencies: dependencies:
esutils "^2.0.2" esutils "^2.0.2"
electron-to-chromium@^1.3.896: electron-to-chromium@^1.4.17:
version "1.3.896" version "1.4.63"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.896.tgz#4a94efe4870b1687eafd5c378198a49da06e8a1b" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.63.tgz#866db72d1221fda89419dc22669d03833e11625d"
integrity sha512-NcGkBVXePiuUrPLV8IxP43n1EOtdg+dudVjrfVEUd/bOqpQUFZ2diL5PPYzbgEhZFEltdXV3AcyKwGnEQ5lhMA== integrity sha512-e0PX/LRJPFRU4kzJKLvTobxyFdnANCvcoDCe8XcyTqP58nTWIwdsHvXLIl1RkB39X5yaosLaroMASWB0oIsgCA==
emojis-list@^3.0.0: emojis-list@^3.0.0:
version "3.0.0" version "3.0.0"
@@ -646,9 +634,9 @@ escape-string-regexp@^4.0.0:
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
eslint-plugin-vue@^8.3.0: eslint-plugin-vue@^8.3.0:
version "8.3.0" version "8.4.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-8.3.0.tgz#2ae4f915ed3541a58c4a4c1145c1e60b86aa7e85" resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-8.4.0.tgz#16e59b356386b4428fb7d886b6d8ee5df2bbc09d"
integrity sha512-IIuLHw4vQxGlHcoP2dG6t/2OVdQf2qoyAzEGAxreU1afZOHGA7y3TWq8I+r3ZA6Wjs6xpeUWGHlT31QGr9Rb5g== integrity sha512-Ga96QRG8GA9AyzKtEDxqYRCMt/VJM4SLkcNmm4FvUiFBE4jpaBr25unRBi9iVmHLYhA9EZ/4I+jD8n1vfWzyAA==
dependencies: dependencies:
eslint-utils "^3.0.0" eslint-utils "^3.0.0"
natural-compare "^1.4.0" natural-compare "^1.4.0"
@@ -689,9 +677,9 @@ eslint-visitor-keys@^3.1.0, eslint-visitor-keys@^3.2.0:
integrity sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ== integrity sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==
eslint@^8.7.0: eslint@^8.7.0:
version "8.7.0" version "8.8.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.7.0.tgz#22e036842ee5b7cf87b03fe237731675b4d3633c" resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.8.0.tgz#9762b49abad0cb4952539ffdb0a046392e571a2d"
integrity sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w== integrity sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==
dependencies: dependencies:
"@eslint/eslintrc" "^1.0.5" "@eslint/eslintrc" "^1.0.5"
"@humanwhocodes/config-array" "^0.9.2" "@humanwhocodes/config-array" "^0.9.2"
@@ -815,9 +803,9 @@ flat-cache@^3.0.4:
rimraf "^3.0.2" rimraf "^3.0.2"
flatted@^3.1.0: flatted@^3.1.0:
version "3.2.4" version "3.2.5"
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3"
integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw== integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==
fs.realpath@^1.0.0: fs.realpath@^1.0.0:
version "1.0.0" version "1.0.0"
@@ -871,16 +859,16 @@ glob@^7.1.3:
path-is-absolute "^1.0.0" path-is-absolute "^1.0.0"
globals@^13.6.0, globals@^13.9.0: globals@^13.6.0, globals@^13.9.0:
version "13.12.0" version "13.12.1"
resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.1.tgz#ec206be932e6c77236677127577aa8e50bf1c5cb"
integrity sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg== integrity sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==
dependencies: dependencies:
type-fest "^0.20.2" type-fest "^0.20.2"
graceful-fs@^4.1.2, graceful-fs@^4.2.4: graceful-fs@^4.1.2, graceful-fs@^4.2.4, graceful-fs@^4.2.9:
version "4.2.8" version "4.2.9"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96"
integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==
has-flag@^4.0.0: has-flag@^4.0.0:
version "4.0.0" version "4.0.0"
@@ -971,10 +959,10 @@ isexe@^2.0.0:
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
jest-worker@^27.0.6: jest-worker@^27.4.5:
version "27.4.2" version "27.4.6"
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.4.2.tgz#0fb123d50955af1a450267787f340a1bf7e12bc4" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.4.6.tgz#5d2d93db419566cb680752ca0792780e71b3273e"
integrity sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag== integrity sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw==
dependencies: dependencies:
"@types/node" "*" "@types/node" "*"
merge-stream "^2.0.0" merge-stream "^2.0.0"
@@ -1099,7 +1087,7 @@ ms@2.1.2:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
nanoid@^3.1.30: nanoid@^3.2.0:
version "3.2.0" version "3.2.0"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.2.0.tgz#62667522da6673971cca916a6d3eff3f415ff80c" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.2.0.tgz#62667522da6673971cca916a6d3eff3f415ff80c"
integrity sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA== integrity sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==
@@ -1175,23 +1163,14 @@ picomatch@^2.0.4, picomatch@^2.2.1:
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
postcss@^8.1.10: postcss@^8.1.10, postcss@^8.4.5:
version "8.3.11" version "8.4.6"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.11.tgz#c3beca7ea811cd5e1c4a3ec6d2e7599ef1f8f858" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.6.tgz#c5ff3c3c457a23864f32cb45ac9b741498a09ae1"
integrity sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA== integrity sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==
dependencies: dependencies:
nanoid "^3.1.30" nanoid "^3.2.0"
picocolors "^1.0.0" picocolors "^1.0.0"
source-map-js "^0.6.2" source-map-js "^1.0.2"
postcss@^8.4.5:
version "8.4.5"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.5.tgz#bae665764dfd4c6fcc24dc0fdf7e7aa00cc77f95"
integrity sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==
dependencies:
nanoid "^3.1.30"
picocolors "^1.0.0"
source-map-js "^1.0.1"
prelude-ls@^1.2.1: prelude-ls@^1.2.1:
version "1.2.1" version "1.2.1"
@@ -1249,9 +1228,9 @@ rimraf@^3.0.2:
glob "^7.1.3" glob "^7.1.3"
rollup@^2.59.0: rollup@^2.59.0:
version "2.66.0" version "2.67.0"
resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.66.0.tgz#ee529ea15a20485d579039637fec3050bad03bbb" resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.67.0.tgz#496de7e641dbe39f681c5a82419cb5013917d406"
integrity sha512-L6mKOkdyP8HK5kKJXaiWG7KZDumPJjuo1P+cfyHOJPNNTK3Moe7zCH5+fy7v8pVmHXtlxorzaBjvkBMB23s98g== integrity sha512-W83AaERwvDiHwHEF/dfAfS3z1Be5wf7n+pO3ZAO5IQadCT2lBTr7WQ2MwZZe+nodbD+n3HtC4OCOAdsOPPcKZQ==
optionalDependencies: optionalDependencies:
fsevents "~2.3.2" fsevents "~2.3.2"
@@ -1272,9 +1251,9 @@ sass-loader@^10:
semver "^7.3.2" semver "^7.3.2"
sass@^1.49.0: sass@^1.49.0:
version "1.49.0" version "1.49.7"
resolved "https://registry.yarnpkg.com/sass/-/sass-1.49.0.tgz#65ec1b1d9a6bc1bae8d2c9d4b392c13f5d32c078" resolved "https://registry.yarnpkg.com/sass/-/sass-1.49.7.tgz#22a86a50552b9b11f71404dfad1b9ff44c6b0c49"
integrity sha512-TVwVdNDj6p6b4QymJtNtRS2YtLJ/CqZriGg0eIAbAKMlN8Xy6kbv33FsEZSF7FufFFM705SQviHjjThfaQ4VNw== integrity sha512-13dml55EMIR2rS4d/RDHHP0sXMY3+30e1TKsyXaSz3iLWVoDWEoboY8WzJd5JMnxrRHffKO3wq2mpJ0jxRJiEQ==
dependencies: dependencies:
chokidar ">=3.0.0 <4.0.0" chokidar ">=3.0.0 <4.0.0"
immutable "^4.0.0" immutable "^4.0.0"
@@ -1315,16 +1294,11 @@ shebang-regex@^3.0.0:
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1: "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
source-map-js@^0.6.2:
version "0.6.2"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e"
integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==
source-map-support@~0.5.20: source-map-support@~0.5.20:
version "0.5.21" version "0.5.21"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
@@ -1385,11 +1359,11 @@ tapable@^2.1.1, tapable@^2.2.0:
integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
terser-webpack-plugin@^5.1.3: terser-webpack-plugin@^5.1.3:
version "5.2.5" version "5.3.1"
resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz#ce65b9880a0c36872555c4874f45bbdb02ee32c9" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz#0320dcc270ad5372c1e8993fabbd927929773e54"
integrity sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g== integrity sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==
dependencies: dependencies:
jest-worker "^27.0.6" jest-worker "^27.4.5"
schema-utils "^3.1.1" schema-utils "^3.1.1"
serialize-javascript "^6.0.0" serialize-javascript "^6.0.0"
source-map "^0.6.1" source-map "^0.6.1"
@@ -1478,33 +1452,33 @@ vue-router@^4.0.0-0:
"@vue/devtools-api" "^6.0.0-beta.18" "@vue/devtools-api" "^6.0.0-beta.18"
vue@^3.0.0: vue@^3.0.0:
version "3.2.21" version "3.2.29"
resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.21.tgz#55f5665172d95cf97e806b9aad0a375180be23a1" resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.29.tgz#3571b65dbd796d3a6347e2fd45a8e6e11c13d56a"
integrity sha512-jpy7ckXdyclfRzqLjL4mtq81AkzQleE54KjZsJg/9OorNVurAxdlU5XpD49GpjKdnftuffKUvx2C5jDOrgc/zg== integrity sha512-cFIwr7LkbtCRanjNvh6r7wp2yUxfxeM2yPpDQpAfaaLIGZSrUmLbNiSze9nhBJt5MrZ68Iqt0O5scwAMEVxF+Q==
dependencies: dependencies:
"@vue/compiler-dom" "3.2.21" "@vue/compiler-dom" "3.2.29"
"@vue/compiler-sfc" "3.2.21" "@vue/compiler-sfc" "3.2.29"
"@vue/runtime-dom" "3.2.21" "@vue/runtime-dom" "3.2.29"
"@vue/server-renderer" "3.2.21" "@vue/server-renderer" "3.2.29"
"@vue/shared" "3.2.21" "@vue/shared" "3.2.29"
watchpack@^2.3.0: watchpack@^2.3.1:
version "2.3.0" version "2.3.1"
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.3.0.tgz#a41bca3da6afaff31e92a433f4c856a0c25ea0c4" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.3.1.tgz#4200d9447b401156eeca7767ee610f8809bc9d25"
integrity sha512-MnN0Q1OsvB/GGHETrFeZPQaOelWh/7O+EiFlj8sM9GPjtQkis7k01aAxrg/18kTfoIVcLL+haEVFlXDaSRwKRw== integrity sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==
dependencies: dependencies:
glob-to-regexp "^0.4.1" glob-to-regexp "^0.4.1"
graceful-fs "^4.1.2" graceful-fs "^4.1.2"
webpack-sources@^3.2.2: webpack-sources@^3.2.3:
version "3.2.2" version "3.2.3"
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.2.tgz#d88e3741833efec57c4c789b6010db9977545260" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"
integrity sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw== integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
webpack@^5.64.4: webpack@^5.64.4:
version "5.64.4" version "5.68.0"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.64.4.tgz#e1454b6a13009f57cc2c78e08416cd674622937b" resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.68.0.tgz#a653a58ed44280062e47257f260117e4be90d560"
integrity sha512-LWhqfKjCLoYJLKJY8wk2C3h77i8VyHowG3qYNZiIqD6D0ZS40439S/KVuc/PY48jp2yQmy0mhMknq8cys4jFMw== integrity sha512-zUcqaUO0772UuuW2bzaES2Zjlm/y3kRBQDVFVCge+s2Y8mwuUTdperGaAv65/NtRL/1zanpSJOq/MD8u61vo6g==
dependencies: dependencies:
"@types/eslint-scope" "^3.7.0" "@types/eslint-scope" "^3.7.0"
"@types/estree" "^0.0.50" "@types/estree" "^0.0.50"
@@ -1520,7 +1494,7 @@ webpack@^5.64.4:
eslint-scope "5.1.1" eslint-scope "5.1.1"
events "^3.2.0" events "^3.2.0"
glob-to-regexp "^0.4.1" glob-to-regexp "^0.4.1"
graceful-fs "^4.2.4" graceful-fs "^4.2.9"
json-parse-better-errors "^1.0.2" json-parse-better-errors "^1.0.2"
loader-runner "^4.2.0" loader-runner "^4.2.0"
mime-types "^2.1.27" mime-types "^2.1.27"
@@ -1528,8 +1502,8 @@ webpack@^5.64.4:
schema-utils "^3.1.0" schema-utils "^3.1.0"
tapable "^2.1.1" tapable "^2.1.1"
terser-webpack-plugin "^5.1.3" terser-webpack-plugin "^5.1.3"
watchpack "^2.3.0" watchpack "^2.3.1"
webpack-sources "^3.2.2" webpack-sources "^3.2.3"
which@^2.0.1: which@^2.0.1:
version "2.0.2" version "2.0.2"