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