Merge branch 'stable' into develop

This commit is contained in:
Georg Krause 2023-06-28 13:05:47 +02:00
commit 232ca0f050
30 changed files with 623 additions and 513 deletions

View file

@ -97,6 +97,12 @@ server {
add_header Access-Control-Allow-Origin '*';
}
# Allow direct access to only specific subdirectories in /media
location /media/dynamic_preferences/ {
alias ${MEDIA_ROOT}/dynamic_preferences/;
add_header Access-Control-Allow-Origin '*';
}
# This is an internal location that is used to serve
# media (uploaded) files once correct permission / authentication
# has been checked on API side.
@ -122,6 +128,7 @@ server {
}
location /manifest.json {
return 302 /api/v1/instance/spa-manifest.json;
# If the reverse proxy is terminating SSL, nginx gets confused and redirects to http, hence the full URL
return 302 ${FUNKWHALE_PROTOCOL}://${FUNKWHALE_HOSTNAME}/api/v1/instance/spa-manifest.json;
}
}

View file

@ -16,7 +16,7 @@
<meta name="apple-mobile-web-app-title" content="Funkwhale">
<meta name="application-name" content="Funkwhale">
<meta name="msapplication-TileColor" content="#009fe3">
<meta name="theme-color" content="#ffffff">
<meta name="theme-color" content="#f2711c">
<style>
#fake-app {
width: 100vw;

View file

@ -33,22 +33,22 @@
"focus-trap": "7.2.0",
"fomantic-ui-css": "2.9.2",
"howler": "2.2.3",
"idb-keyval": "6.2.0",
"idb-keyval": "6.2.1",
"js-logger": "1.6.1",
"lodash-es": "4.17.21",
"lru-cache": "7.14.1",
"moment": "2.29.4",
"showdown": "2.1.0",
"standardized-audio-context": "25.3.41",
"standardized-audio-context": "25.3.53",
"text-clipper": "2.2.0",
"transliteration": "2.3.5",
"universal-cookie": "4.0.4",
"vue": "3.3.2",
"vue-gettext": "2.1.12",
"vue-i18n": "9.3.0-beta.16",
"vue-i18n": "9.3.0-beta.19",
"vue-router": "4.2.2",
"vue-upload-component": "3.1.6",
"vue-virtual-scroller": "2.0.0-beta.7",
"vue-upload-component": "3.1.8",
"vue-virtual-scroller": "2.0.0-beta.8",
"vue3-gettext": "2.3.4",
"vue3-lazyload": "0.3.6",
"vuedraggable": "4.1.0",

View file

@ -17,6 +17,7 @@ export interface Sound {
readonly audioNode: IAudioNode<IAudioContext>
readonly isErrored: Ref<boolean>
readonly isLoaded: Ref<boolean>
readonly isDisposed: Ref<boolean>
readonly currentTime: number
readonly playable: boolean
readonly duration: number
@ -51,6 +52,7 @@ export class HTMLSound implements Sound {
readonly isErrored = ref(false)
readonly isLoaded = ref(false)
readonly isDisposed = ref(false)
audioNode = createAudioSource(this.#audio)
onSoundLoop: EventHookOn<HTMLSound>
@ -112,12 +114,15 @@ export class HTMLSound implements Sound {
}
async preload () {
this.isDisposed.value = false
this.isErrored.value = false
console.log('CALLING PRELOAD ON', this)
this.#audio.load()
}
async dispose () {
if (this.isDisposed.value) return
// Remove all event listeners
this.#scope.stop()
@ -128,10 +133,17 @@ export class HTMLSound implements Sound {
// Cancel any request downloading the source
this.#audio.src = ''
this.#audio.load()
this.isDisposed.value = true
}
async play () {
return this.#audio.play()
try {
await this.#audio.play()
} catch (err) {
console.error('>> AUDIO PLAY ERROR', err, this)
this.isErrored.value = true
}
}
async pause () {

View file

@ -33,7 +33,7 @@ const suggestedInstances = computed(() => {
...store.state.instance.knownInstances,
serverUrl.endsWith('/') ? serverUrl : serverUrl + '/',
store.getters['instance/defaultInstance']
]).slice(1)
])
})
watch(() => store.state.instance.instanceUrl, () => store.dispatch('instance/fetchSettings'))

View file

@ -1,5 +1,5 @@
<script setup lang="ts">
import { computed, ref, reactive, watch, watchEffect, onMounted } from 'vue'
import { computed, ref, reactive, watch, onMounted } from 'vue'
import { useRouter } from 'vue-router'
import { useI18n } from 'vue-i18n'
@ -84,7 +84,11 @@ const fetchCandidates = async () => {
}
}
watch(filters, fetchCandidates)
// NOTE: Whenever we modify filters array, we refetch the candidates automatically
watch(filters, fetchCandidates, {
deep: true
})
const checkErrors = computed(() => checkResult.value?.errors ?? [])
const isPublic = ref(true)
@ -107,6 +111,7 @@ const fetchFilters = async () => {
}
}
let filterId = Number.MIN_SAFE_INTEGER
const isLoading = ref(false)
const fetchData = async () => {
isLoading.value = true
@ -114,10 +119,10 @@ const fetchData = async () => {
try {
const response = await axios.get(`radios/radios/${props.id}/`)
filters.length = 0
filters.push(...response.data.config.map((filter: FilterConfig) => ({
config: filter,
filter: availableFilters.find(available => available.type === filter.type),
hash: +new Date()
filters.push(...response.data.config.map((config: FilterConfig) => ({
config,
filter: availableFilters.find(available => available.type === config.type),
hash: filterId++
})))
radioName.value = response.data.name
@ -130,28 +135,19 @@ const fetchData = async () => {
isLoading.value = false
}
fetchFilters().then(() => watchEffect(fetchData))
fetchFilters().then(() => fetchData())
const add = async () => {
if (currentFilter.value) {
filters.push({
config: {} as FilterConfig,
filter: currentFilter.value,
hash: +new Date()
})
}
return fetchCandidates()
}
const updateConfig = async (index: number, field: keyof FilterConfig, value: unknown) => {
filters[index].config[field] = value
return fetchCandidates()
if (!currentFilter.value) return
filters.push({
config: {} as FilterConfig,
filter: currentFilter.value,
hash: +new Date()
})
}
const deleteFilter = async (index: number) => {
filters.splice(index, 1)
return fetchCandidates()
}
const success = ref(false)
@ -325,11 +321,8 @@ onMounted(() => {
<builder-filter
v-for="(f, index) in filters"
:key="f.hash"
:index="index"
:config="f.config"
:filter="f.filter"
@update-config="updateConfig"
@delete="deleteFilter"
v-model:data="filters[index]"
@delete="deleteFilter(index)"
/>
</tbody>
</table>

View file

@ -6,8 +6,8 @@ import type { Track } from '~/types'
import axios from 'axios'
import $ from 'jquery'
import { useCurrentElement } from '@vueuse/core'
import { ref, onMounted, watch } from 'vue'
import { useCurrentElement, useVModel } from '@vueuse/core'
import { ref, onMounted, watch, computed } from 'vue'
import { useStore } from '~/store'
import { clone } from 'lodash-es'
@ -20,35 +20,33 @@ type Filter = { candidates: { count: number, sample: Track[] } }
type ResponseType = { filters: Array<Filter> }
interface Events {
(e: 'update-config', index: number, name: string, value: number[] | boolean): void
(e: 'delete', index: number): void
(e: 'update:data', name: string, value: number[] | boolean): void
(e: 'delete'): void
}
interface Props {
index: number
filter: BuilderFilter
config: FilterConfig
data: {
filter: BuilderFilter
config: FilterConfig
}
}
const emit = defineEmits<Events>()
const props = defineProps<Props>()
const data = useVModel(props, 'data', emit)
const store = useStore()
const checkResult = ref<Filter | null>(null)
const showCandidadesModal = ref(false)
const exclude = ref(props.config.not)
const exclude = computed({
get: () => data.value.config.not,
set: (value: boolean) => (data.value.config.not = value)
})
const el = useCurrentElement()
onMounted(() => {
for (const field of props.filter.fields) {
const selector = ['.dropdown']
if (field.type === 'list') {
selector.push('.multiple')
}
for (const field of data.value.filter.fields) {
const settings: SemanticUI.DropdownSettings = {
onChange (value) {
value = $(this).dropdown('get value').split(',')
@ -57,15 +55,19 @@ onMounted(() => {
value = value.map((number: string) => parseInt(number))
}
value.value = value
emit('update-config', props.index, field.name, value)
data.value.config[field.name] = value
fetchCandidates()
}
}
let selector = field.type === 'list'
? '.dropdown.multiple'
: '.dropdown'
if (field.autocomplete) {
selector.push('.autocomplete')
// @ts-expect-error custom field?
selector += '.autocomplete'
// @ts-expect-error Semantic UI types are incomplete
settings.fields = field.autocomplete_fields
settings.minCharacters = 1
settings.apiSettings = {
@ -85,15 +87,15 @@ onMounted(() => {
}
}
$(el.value).find(selector.join('')).dropdown(settings)
$(el.value).find(selector).dropdown(settings)
}
})
const fetchCandidates = async () => {
const params = {
filters: [{
...clone(props.config),
type: props.filter.type
...clone(data.value.config),
type: data.value.filter.type
}]
}
@ -106,11 +108,12 @@ const fetchCandidates = async () => {
}
watch(exclude, fetchCandidates)
fetchCandidates()
</script>
<template>
<tr>
<td>{{ filter.label }}</td>
<td>{{ data.filter.label }}</td>
<td>
<div class="ui toggle checkbox">
<input
@ -118,7 +121,6 @@ watch(exclude, fetchCandidates)
v-model="exclude"
name="public"
type="checkbox"
@change="$emit('update-config', index, 'not', exclude)"
>
<label
for="exclude-filter"
@ -130,33 +132,34 @@ watch(exclude, fetchCandidates)
</td>
<td>
<div
v-for="f in filter.fields"
v-for="f in data.filter.fields"
:key="f.name"
class="ui field"
>
<div :class="['ui', 'search', 'selection', 'dropdown', {'autocomplete': f.autocomplete}, {'multiple': f.type === 'list'}]">
<div :class="['ui', 'search', 'selection', 'dropdown', { autocomplete: f.autocomplete }, { multiple: f.type === 'list' }]">
<i class="dropdown icon" />
<div class="default text">
{{ f.placeholder }}
</div>
<input
v-if="f.type === 'list' && config[f.name as keyof FilterConfig]"
v-if="f.type === 'list' && data.config[f.name as keyof FilterConfig]"
:id="f.name"
:value="(config[f.name as keyof FilterConfig] as string[]).join(',')"
:value="(data.config[f.name as keyof FilterConfig] as string[]).join(',')"
type="hidden"
>
<div
v-if="typeof config[f.name as keyof FilterConfig] === 'object'"
v-if="typeof data.config[f.name as keyof FilterConfig] === 'object'"
class="ui menu"
>
<div
v-for="(v, i) in config[f.name as keyof FilterConfig] as object"
:key="i"
v-for="(v, i) in data.config[f.name as keyof FilterConfig] as object"
v-once
:key="data.config.ids?.[i] ?? v"
class="ui item"
:data-value="v"
>
<template v-if="config.names">
{{ config.names[i] }}
<template v-if="data.config.names">
{{ data.config.names[i] }}
</template>
<template v-else>
{{ v }}
@ -170,7 +173,7 @@ watch(exclude, fetchCandidates)
<a
v-if="checkResult"
href=""
:class="['ui', {'success': checkResult.candidates.count > 10}, 'label']"
:class="['ui', { success: checkResult.candidates.count > 10 }, 'label']"
@click.prevent="showCandidadesModal = !showCandidadesModal"
>
{{ $t('components.library.radios.Filter.matchingTracks', checkResult.candidates.count) }}
@ -200,7 +203,7 @@ watch(exclude, fetchCandidates)
<td>
<button
class="ui danger button"
@click="$emit('delete', index)"
@click="emit('delete')"
>
{{ $t('components.library.radios.Filter.removeButton') }}
</button>

View file

@ -61,9 +61,7 @@ interface TargetType {
}
type Targets = Exclude<StateTarget, undefined>['type']
const targets = reactive({
track: {}
}) as Record<Targets, Record<string, TargetType>>
const targets = reactive<Record<Targets, Record<string, TargetType>>>(Object.create(null))
const fetchTargets = async () => {
// we request target data via the API so we can display previous state
@ -96,6 +94,7 @@ const fetchTargets = async () => {
})
for (const payload of response?.data?.results ?? []) {
targets[key as keyof typeof targets] ??= Object.create(null)
targets[key as keyof typeof targets][payload.id] = {
payload,
currentState: configs[key as keyof typeof targets].fields.reduce((state, field) => {

View file

@ -324,7 +324,7 @@ export const useQueue = createGlobalState(() => {
const clear = async () => {
await currentSound.value?.pause()
await currentSound.value?.seekTo(0)
currentSound.value?.dispose()
await currentSound.value?.dispose()
clearRadio.value = true

View file

@ -101,6 +101,11 @@ export const useTracks = createGlobalState(() => {
setTimeout(() => playNext(), 0)
})
// NOTE: When the sound is disposed, we need to delete it from the cache (#2157)
whenever(sound.isDisposed, () => {
soundCache.delete(track.id)
})
// NOTE: Bump current track to ensure that it lives despite enqueueing 3 tracks as next track:
//
// In every queue we have 3 tracks that are cached, in the order, they're being played:

View file

@ -7,6 +7,9 @@ import axios from 'axios'
import useLogger from '~/composables/useLogger'
import useFormData from '~/composables/useFormData'
import { clear as clearIDB } from 'idb-keyval'
import { useQueue } from '~/composables/audio/queue'
export type Permission = 'settings' | 'library' | 'moderation'
export interface State {
authenticated: boolean
@ -167,6 +170,7 @@ const store: Module<State, RootState> = {
} catch (error) {
console.log('Error while logging out, probably logged in via oauth')
}
const modules = [
'auth',
'favorites',
@ -175,9 +179,20 @@ const store: Module<State, RootState> = {
'queue',
'radios'
]
modules.forEach(m => {
commit(`${m}/reset`, null, { root: true })
})
for (const module of modules) {
commit(`${module}/reset`, null, { root: true })
}
// Clear session storage
sessionStorage.clear()
// Clear track queue
await useQueue().clear()
// Clear all indexedDB data
await clearIDB()
logger.info('Log out, goodbye!')
},

View file

@ -126,16 +126,21 @@ const logger = useLogger()
// 1. use the url provided in settings.json, if any
// 2. use the url specified when building via VUE_APP_INSTANCE_URL
// 3. use the current url
const instanceUrl = import.meta.env.VUE_APP_INSTANCE_URL as string ?? location.origin
let DEFAULT_INSTANCE_URL = `${location.origin}/`
try {
DEFAULT_INSTANCE_URL = new URL(import.meta.env.VUE_APP_INSTANCE_URL as string).href
} catch (e) {
logger.warn('Invalid VUE_APP_INSTANCE_URL, falling back to current url', e)
}
const store: Module<State, RootState> = {
namespaced: true,
state: {
frontSettings: {
defaultServerUrl: instanceUrl,
defaultServerUrl: DEFAULT_INSTANCE_URL,
additionalStylesheets: []
},
instanceUrl,
instanceUrl: DEFAULT_INSTANCE_URL,
knownInstances: [],
nodeinfo: null,
settings: {
@ -190,40 +195,31 @@ const store: Module<State, RootState> = {
state.nodeinfo = value
},
instanceUrl: (state, value) => {
if (value && !value.endsWith('/')) {
value = value + '/'
}
try {
const { href } = new URL(value)
state.instanceUrl = href
axios.defaults.baseURL = `${href}api/v1/`
state.instanceUrl = value
// append the URL to the list (and remove existing one if needed)
if (value) {
const index = state.knownInstances.indexOf(value)
if (index > -1) {
state.knownInstances.splice(index, 1)
}
state.knownInstances.splice(0, 0, value)
}
if (!value) {
// append the URL to the list (and remove existing one if needed)
const index = state.knownInstances.indexOf(href)
if (index > -1) state.knownInstances.splice(index, 1)
state.knownInstances.unshift(href)
} catch (e) {
logger.error('Invalid instance URL', e)
axios.defaults.baseURL = undefined
return
}
const suffix = 'api/v1/'
axios.defaults.baseURL = state.instanceUrl + suffix
}
},
getters: {
absoluteUrl: (state) => (relativeUrl: string) => {
absoluteUrl: (_state, getters) => (relativeUrl: string) => {
if (relativeUrl.startsWith('http')) return relativeUrl
if (state.instanceUrl?.endsWith('/') && relativeUrl.startsWith('/')) {
relativeUrl = relativeUrl.slice(1)
}
return (state.instanceUrl ?? instanceUrl) + relativeUrl
return relativeUrl.startsWith('/')
? `${getters.url.href}${relativeUrl.slice(1)}`
: `${getters.url.href}${relativeUrl}`
},
domain: (state) => new URL(state.instanceUrl ?? instanceUrl).hostname,
defaultInstance: () => instanceUrl
url: (state) => new URL(state.instanceUrl ?? DEFAULT_INSTANCE_URL),
domain: (_state, getters) => getters.url.hostname,
defaultInstance: () => DEFAULT_INSTANCE_URL
},
actions: {
setUrl ({ commit }, url) {
@ -269,7 +265,7 @@ const store: Module<State, RootState> = {
for (const [key, value] of Object.entries(response.data as FrontendSettings)) {
if (key === 'defaultServerUrl' && !value) {
state.frontSettings.defaultServerUrl = instanceUrl
state.frontSettings.defaultServerUrl = DEFAULT_INSTANCE_URL
continue
}

View file

@ -1,3 +1,6 @@
body > .modals {
z-index: 99999 !important;
}
.modal > .header {
text-align: center;

View file

@ -31,7 +31,8 @@ syncRef(pageQuery, page, {
transform: {
ltr: (left) => +left,
rtl: (right) => right.toString()
}
},
direction: 'both'
})
const q = useRouteQuery('q', '')
@ -113,7 +114,7 @@ const currentType = computed(() => types.value.find(({ id }) => id === type.valu
const axiosParams = computed(() => {
const params = new URLSearchParams({
q: query.value,
page: page.value as unknown as string,
page: pageQuery.value,
page_size: paginateBy.value as unknown as string
})
@ -171,10 +172,12 @@ const search = async () => {
}
watch(type, () => {
if (page.value === 1) return search()
page.value = 1
search()
})
// NOTE: When we watch `page`, the `pageQuery` value is never updated for some reason
watch(pageQuery, search)
search()
const labels = computed(() => ({

View file

@ -103,7 +103,8 @@ watch([uuid, object], ([uuid, object], [lastUuid, lastObject]) => {
const route = useRoute()
watchEffect(() => {
if (!store.state.auth.authenticated && store.getters['instance/domain'] !== object.value?.actor.domain) {
if (!object.value) return
if (!store.state.auth.authenticated && store.getters['instance/domain'] !== object.value.actor.domain) {
router.push({ name: 'login', query: { next: route.fullPath } })
}
})

View file

@ -925,7 +925,7 @@
resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310"
integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==
"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.21.0", "@babel/runtime@^7.21.5", "@babel/runtime@^7.22.3", "@babel/runtime@^7.22.5", "@babel/runtime@^7.8.4":
"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.21.5", "@babel/runtime@^7.22.5", "@babel/runtime@^7.8.4":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.5.tgz#8564dd588182ce0047d55d7a75e93921107b57ec"
integrity sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==
@ -1185,15 +1185,15 @@
"@intlify/shared" "9.2.2"
"@intlify/vue-devtools" "9.2.2"
"@intlify/core-base@9.3.0-beta.16":
version "9.3.0-beta.16"
resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.3.0-beta.16.tgz#bd993fde9c0a96f081a5805a78bece953bfdce9e"
integrity sha512-BoAxVoPIJoPKCCMdsuNXKaaJxvetvHrW2KA43IpkwgPd2/w6zPebh/+v8e4zpXKjFVSgcF97zP87KeVcM/Lxwg==
"@intlify/core-base@9.3.0-beta.19":
version "9.3.0-beta.19"
resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.3.0-beta.19.tgz#f89de10d183f4352500beb9c844632c96c5308b0"
integrity sha512-mlpVZ1w6ZwnP9QZAs+RzGuFMCuYjZPboX3hX7JzhV49vUcsLj0R4667cmcLpPZzXJguIy/zaqbIyoUvLV8HONQ==
dependencies:
"@intlify/devtools-if" "9.3.0-beta.16"
"@intlify/message-compiler" "9.3.0-beta.16"
"@intlify/shared" "9.3.0-beta.16"
"@intlify/vue-devtools" "9.3.0-beta.16"
"@intlify/devtools-if" "9.3.0-beta.19"
"@intlify/message-compiler" "9.3.0-beta.19"
"@intlify/shared" "9.3.0-beta.19"
"@intlify/vue-devtools" "9.3.0-beta.19"
"@intlify/devtools-if@9.2.2":
version "9.2.2"
@ -1202,12 +1202,12 @@
dependencies:
"@intlify/shared" "9.2.2"
"@intlify/devtools-if@9.3.0-beta.16":
version "9.3.0-beta.16"
resolved "https://registry.yarnpkg.com/@intlify/devtools-if/-/devtools-if-9.3.0-beta.16.tgz#fab2bf0166686e998c9a1539e1eff1e07ee2beb6"
integrity sha512-9WXn8YMAnL/DHdoWqCy6yLTXcLFxd8eXB9UNsViQA5JJV7neR+yahr+23X1wP0prhG338MruxAu65khRf+AJCw==
"@intlify/devtools-if@9.3.0-beta.19":
version "9.3.0-beta.19"
resolved "https://registry.yarnpkg.com/@intlify/devtools-if/-/devtools-if-9.3.0-beta.19.tgz#d50265591089456d923e0edfb575985b4b9c0b90"
integrity sha512-L4NyqMcuQURejKy9XX0m/2kb37f56NAUvbiXKRx96pahSBclY6T+E0TrKXup0Hx6T0qY55QYGRwyVLeHXIHAMA==
dependencies:
"@intlify/shared" "9.3.0-beta.16"
"@intlify/shared" "9.3.0-beta.19"
"@intlify/eslint-plugin-vue-i18n@2.0.0":
version "2.0.0"
@ -1238,15 +1238,7 @@
"@intlify/shared" "9.2.2"
source-map "0.6.1"
"@intlify/message-compiler@9.3.0-beta.16":
version "9.3.0-beta.16"
resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.3.0-beta.16.tgz#335f7bdb06cfb84d04a1a1c1d6eff2532dfd88e7"
integrity sha512-CGQI3xRcs1ET75eDQ0DUy3MRYOqTauRIIgaMoISKiF83gqRWg93FqN8lGMKcpBqaF4tI0JhsfosCaGiBL9+dnw==
dependencies:
"@intlify/shared" "9.3.0-beta.16"
source-map "0.6.1"
"@intlify/message-compiler@next":
"@intlify/message-compiler@9.3.0-beta.19", "@intlify/message-compiler@next":
version "9.3.0-beta.19"
resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.3.0-beta.19.tgz#1b66bf87d15843c9354a0d07d26e417f44b65182"
integrity sha512-5RBn5tMOsWh5FqM65IfEJvfpRS8R0lHEUVNDa2rNc9Y7oGEI7swezlbFqU9Kc5FyHy5Kx2jHtdgFIipDwnIYFQ==
@ -1259,11 +1251,6 @@
resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.2.2.tgz#5011be9ca2b4ab86f8660739286e2707f9abb4a5"
integrity sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==
"@intlify/shared@9.3.0-beta.16":
version "9.3.0-beta.16"
resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.3.0-beta.16.tgz#74f254dbb7eac633b86d690a341349db29573896"
integrity sha512-kXbm4svALe3lX+EjdJxfnabOphqS4yQ1Ge/iIlR8tvUiYRCoNz3hig1M4336iY++Dfx5ytEQJPNjIcknNIuvig==
"@intlify/shared@9.3.0-beta.19", "@intlify/shared@next":
version "9.3.0-beta.19"
resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.3.0-beta.19.tgz#090bdd5d6ed1eabbb92ee2f2ead2668edc576596"
@ -1295,13 +1282,13 @@
"@intlify/core-base" "9.2.2"
"@intlify/shared" "9.2.2"
"@intlify/vue-devtools@9.3.0-beta.16":
version "9.3.0-beta.16"
resolved "https://registry.yarnpkg.com/@intlify/vue-devtools/-/vue-devtools-9.3.0-beta.16.tgz#70a615f56d70e2fcaa91eb1a362c3bca1c553f3e"
integrity sha512-rQ/jSW0gBciYLBBi+XN65r80B59Ypege9oqUi+EZ2QpOaK54wDcy1xq9w6Zbj6WpY1qgf34KtYawKIF10mMr6w==
"@intlify/vue-devtools@9.3.0-beta.19":
version "9.3.0-beta.19"
resolved "https://registry.yarnpkg.com/@intlify/vue-devtools/-/vue-devtools-9.3.0-beta.19.tgz#e3053ec984d28028a3ce15cffd74ce1af40c37f7"
integrity sha512-7yz8sUbovPUIf8sCX3+sMdw/xEyeHKBCc7Agxcxv54PiQz3zwsVl0hC1X+JXUy46FiPsMEoFfY8O27xOFLupaw==
dependencies:
"@intlify/core-base" "9.3.0-beta.16"
"@intlify/shared" "9.3.0-beta.16"
"@intlify/core-base" "9.3.0-beta.19"
"@intlify/shared" "9.3.0-beta.19"
"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3":
version "0.1.3"
@ -1521,10 +1508,10 @@
dependencies:
type-detect "4.0.8"
"@sinonjs/fake-timers@^10.0.2", "@sinonjs/fake-timers@^10.2.0":
version "10.2.0"
resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.2.0.tgz#b3e322a34c5f26e3184e7f6115695f299c1b1194"
integrity sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg==
"@sinonjs/fake-timers@^10.0.2", "@sinonjs/fake-timers@^10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66"
integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==
dependencies:
"@sinonjs/commons" "^3.0.0"
@ -1665,9 +1652,9 @@
axios ">=0.13.0"
"@types/node@*":
version "20.3.0"
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.0.tgz#719498898d5defab83c3560f45d8498f58d11938"
integrity sha512-cumHmIAf6On83X7yP+LrsEyUOf/YlociZelmpRYaGFydoaPdxdt80MAbu6vWerQT2COCp2nPvHdsbD7tHn/YlQ==
version "20.3.2"
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.2.tgz#fa6a90f2600e052a03c18b8cb3fd83dd4e599898"
integrity sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==
"@types/node@^14.14.31":
version "14.18.50"
@ -1925,14 +1912,14 @@
tsutils "^3.21.0"
"@typescript-eslint/eslint-plugin@^5.0.0":
version "5.59.9"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.9.tgz#2604cfaf2b306e120044f901e20c8ed926debf15"
integrity sha512-4uQIBq1ffXd2YvF7MAvehWKW3zVv/w+mSfRAu+8cKbfj3nwzyqJLNcZJpQ/WZ1HLbJDiowwmQ6NO+63nCA+fqA==
version "5.60.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.1.tgz#81382d6ecb92b8dda70e91f9035611cb2fecd1c3"
integrity sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw==
dependencies:
"@eslint-community/regexpp" "^4.4.0"
"@typescript-eslint/scope-manager" "5.59.9"
"@typescript-eslint/type-utils" "5.59.9"
"@typescript-eslint/utils" "5.59.9"
"@typescript-eslint/scope-manager" "5.60.1"
"@typescript-eslint/type-utils" "5.60.1"
"@typescript-eslint/utils" "5.60.1"
debug "^4.3.4"
grapheme-splitter "^1.0.4"
ignore "^5.2.0"
@ -1941,13 +1928,13 @@
tsutils "^3.21.0"
"@typescript-eslint/parser@^5.0.0":
version "5.59.9"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.9.tgz#a85c47ccdd7e285697463da15200f9a8561dd5fa"
integrity sha512-FsPkRvBtcLQ/eVK1ivDiNYBjn3TGJdXy2fhXX+rc7czWl4ARwnpArwbihSOHI2Peg9WbtGHrbThfBUkZZGTtvQ==
version "5.60.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.60.1.tgz#0f2f58209c0862a73e3d5a56099abfdfa21d0fd3"
integrity sha512-pHWlc3alg2oSMGwsU/Is8hbm3XFbcrb6P5wIxcQW9NsYBfnrubl/GhVVD/Jm/t8HXhA2WncoIRfBtnCgRGV96Q==
dependencies:
"@typescript-eslint/scope-manager" "5.59.9"
"@typescript-eslint/types" "5.59.9"
"@typescript-eslint/typescript-estree" "5.59.9"
"@typescript-eslint/scope-manager" "5.60.1"
"@typescript-eslint/types" "5.60.1"
"@typescript-eslint/typescript-estree" "5.60.1"
debug "^4.3.4"
"@typescript-eslint/scope-manager@5.48.2":
@ -1958,13 +1945,13 @@
"@typescript-eslint/types" "5.48.2"
"@typescript-eslint/visitor-keys" "5.48.2"
"@typescript-eslint/scope-manager@5.59.9":
version "5.59.9"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.9.tgz#eadce1f2733389cdb58c49770192c0f95470d2f4"
integrity sha512-8RA+E+w78z1+2dzvK/tGZ2cpGigBZ58VMEHDZtpE1v+LLjzrYGc8mMaTONSxKyEkz3IuXFM0IqYiGHlCsmlZxQ==
"@typescript-eslint/scope-manager@5.60.1":
version "5.60.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz#35abdb47f500c68c08f2f2b4f22c7c79472854bb"
integrity sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ==
dependencies:
"@typescript-eslint/types" "5.59.9"
"@typescript-eslint/visitor-keys" "5.59.9"
"@typescript-eslint/types" "5.60.1"
"@typescript-eslint/visitor-keys" "5.60.1"
"@typescript-eslint/type-utils@5.48.2":
version "5.48.2"
@ -1976,13 +1963,13 @@
debug "^4.3.4"
tsutils "^3.21.0"
"@typescript-eslint/type-utils@5.59.9":
version "5.59.9"
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.59.9.tgz#53bfaae2e901e6ac637ab0536d1754dfef4dafc2"
integrity sha512-ksEsT0/mEHg9e3qZu98AlSrONAQtrSTljL3ow9CGej8eRo7pe+yaC/mvTjptp23Xo/xIf2mLZKC6KPv4Sji26Q==
"@typescript-eslint/type-utils@5.60.1":
version "5.60.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.60.1.tgz#17770540e98d65ab4730c7aac618003f702893f4"
integrity sha512-vN6UztYqIu05nu7JqwQGzQKUJctzs3/Hg7E2Yx8rz9J+4LgtIDFWjjl1gm3pycH0P3mHAcEUBd23LVgfrsTR8A==
dependencies:
"@typescript-eslint/typescript-estree" "5.59.9"
"@typescript-eslint/utils" "5.59.9"
"@typescript-eslint/typescript-estree" "5.60.1"
"@typescript-eslint/utils" "5.60.1"
debug "^4.3.4"
tsutils "^3.21.0"
@ -1991,10 +1978,10 @@
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.48.2.tgz#635706abb1ec164137f92148f06f794438c97b8e"
integrity sha512-hE7dA77xxu7ByBc6KCzikgfRyBCTst6dZQpwaTy25iMYOnbNljDT4hjhrGEJJ0QoMjrfqrx+j1l1B9/LtKeuqA==
"@typescript-eslint/types@5.59.9":
version "5.59.9"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.9.tgz#3b4e7ae63718ce1b966e0ae620adc4099a6dcc52"
integrity sha512-uW8H5NRgTVneSVTfiCVffBb8AbwWSKg7qcA4Ot3JI3MPCJGsB4Db4BhvAODIIYE5mNj7Q+VJkK7JxmRhk2Lyjw==
"@typescript-eslint/types@5.60.1":
version "5.60.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.60.1.tgz#a17473910f6b8d388ea83c9d7051af89c4eb7561"
integrity sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg==
"@typescript-eslint/typescript-estree@5.48.2":
version "5.48.2"
@ -2009,13 +1996,13 @@
semver "^7.3.7"
tsutils "^3.21.0"
"@typescript-eslint/typescript-estree@5.59.9":
version "5.59.9"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.9.tgz#6bfea844e468427b5e72034d33c9fffc9557392b"
integrity sha512-pmM0/VQ7kUhd1QyIxgS+aRvMgw+ZljB3eDb+jYyp6d2bC0mQWLzUDF+DLwCTkQ3tlNyVsvZRXjFyV0LkU/aXjA==
"@typescript-eslint/typescript-estree@5.60.1":
version "5.60.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz#8c71824b7165b64d5ebd7aa42968899525959834"
integrity sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw==
dependencies:
"@typescript-eslint/types" "5.59.9"
"@typescript-eslint/visitor-keys" "5.59.9"
"@typescript-eslint/types" "5.60.1"
"@typescript-eslint/visitor-keys" "5.60.1"
debug "^4.3.4"
globby "^11.1.0"
is-glob "^4.0.3"
@ -2036,17 +2023,17 @@
eslint-utils "^3.0.0"
semver "^7.3.7"
"@typescript-eslint/utils@5.59.9":
version "5.59.9"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.9.tgz#adee890107b5ffe02cd46fdaa6c2125fb3c6c7c4"
integrity sha512-1PuMYsju/38I5Ggblaeb98TOoUvjhRvLpLa1DoTOFaLWqaXl/1iQ1eGurTXgBY58NUdtfTXKP5xBq7q9NDaLKg==
"@typescript-eslint/utils@5.60.1":
version "5.60.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.60.1.tgz#6861ebedbefba1ac85482d2bdef6f2ff1eb65b80"
integrity sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
"@types/json-schema" "^7.0.9"
"@types/semver" "^7.3.12"
"@typescript-eslint/scope-manager" "5.59.9"
"@typescript-eslint/types" "5.59.9"
"@typescript-eslint/typescript-estree" "5.59.9"
"@typescript-eslint/scope-manager" "5.60.1"
"@typescript-eslint/types" "5.60.1"
"@typescript-eslint/typescript-estree" "5.60.1"
eslint-scope "^5.1.1"
semver "^7.3.7"
@ -2058,12 +2045,12 @@
"@typescript-eslint/types" "5.48.2"
eslint-visitor-keys "^3.3.0"
"@typescript-eslint/visitor-keys@5.59.9":
version "5.59.9"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.9.tgz#9f86ef8e95aca30fb5a705bb7430f95fc58b146d"
integrity sha512-bT7s0td97KMaLwpEBckbzj/YohnvXtqbe2XgqNvTl6RJVakY5mvENOTPvw5u66nljfZxthESpDozs86U+oLY8Q==
"@typescript-eslint/visitor-keys@5.60.1":
version "5.60.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz#19a877358bf96318ec35d90bfe6bd1445cce9434"
integrity sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw==
dependencies:
"@typescript-eslint/types" "5.59.9"
"@typescript-eslint/types" "5.60.1"
eslint-visitor-keys "^3.3.0"
"@vitejs/plugin-vue@4.2.3":
@ -2207,7 +2194,7 @@
"@vue/compiler-dom" "3.3.4"
"@vue/shared" "3.3.4"
"@vue/devtools-api@^6.0.0-beta.11", "@vue/devtools-api@^6.2.1", "@vue/devtools-api@^6.5.0":
"@vue/devtools-api@^6.0.0-beta.11", "@vue/devtools-api@^6.5.0":
version "6.5.0"
resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.5.0.tgz#98b99425edee70b4c992692628fa1ea2c1e57d07"
integrity sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==
@ -2390,9 +2377,9 @@ acorn@^7.1.1, acorn@^7.4.1:
integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
acorn@^8.1.0, acorn@^8.5.0, acorn@^8.8.0, acorn@^8.8.1, acorn@^8.8.2:
version "8.8.2"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
version "8.9.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59"
integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==
agent-base@6:
version "6.0.2"
@ -2564,21 +2551,13 @@ at-least-node@^1.0.0:
resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
automation-events@^5.0.2:
version "5.0.3"
resolved "https://registry.yarnpkg.com/automation-events/-/automation-events-5.0.3.tgz#15feb39cabc96c1d35d9ad31959f3c6a6176a41f"
integrity sha512-ZZWTNYJTkGjcJUOBX5P0MHZrArJOkcrQsbyGWwlzJpZs961Y5YvKUw5MsAf8xLlvh7+1B8SO/VTvjMmVXFkD3w==
dependencies:
"@babel/runtime" "^7.21.0"
tslib "^2.5.0"
automation-events@^6.0.1, automation-events@^6.0.5:
version "6.0.5"
resolved "https://registry.yarnpkg.com/automation-events/-/automation-events-6.0.5.tgz#5725ae4655576df2667907f768c88a897892da8e"
integrity sha512-HILDp8DRruDqM29WDbpFof+mXMSDdnOlPA07eyVfzHnXrGPbAf5ZLemelbRCrW40BzK8ihIRbZEgVj4+GiM/+A==
automation-events@^6.0.1, automation-events@^6.0.6:
version "6.0.6"
resolved "https://registry.yarnpkg.com/automation-events/-/automation-events-6.0.6.tgz#19981024e1bfc1e393bb786b1a89380114759f06"
integrity sha512-0gFiz0TCa0iLm5XBOFtXrcOmA8RB8jOFkj2IWiNnhr0LeahfGQny9ccs1+yYJBJuhKAWUu/lTsXsYELsjvuP0Q==
dependencies:
"@babel/runtime" "^7.22.5"
tslib "^2.5.3"
tslib "^2.6.0"
available-typed-arrays@^1.0.5:
version "1.0.5"
@ -2710,12 +2689,12 @@ braces@^3.0.2, braces@~3.0.2:
fill-range "^7.0.1"
browserslist@^4.21.3, browserslist@^4.21.5:
version "4.21.7"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.7.tgz#e2b420947e5fb0a58e8f4668ae6e23488127e551"
integrity sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==
version "4.21.9"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635"
integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==
dependencies:
caniuse-lite "^1.0.30001489"
electron-to-chromium "^1.4.411"
caniuse-lite "^1.0.30001503"
electron-to-chromium "^1.4.431"
node-releases "^2.0.12"
update-browserslist-db "^1.0.11"
@ -2802,10 +2781,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.30001489:
version "1.0.30001499"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001499.tgz#0235c127d9795c82aaf0a7f43e24018549dac659"
integrity sha512-IhoQqRrW6WiecFcfZgoJS1YLEN1/HR1vHP5WNgjCARRW7KUNToHHTX3FrwCM+y4zkRa48D9rE90WFYc2IWhDWQ==
caniuse-lite@^1.0.30001503:
version "1.0.30001508"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001508.tgz#4461bbc895c692a96da399639cc1e146e7302a33"
integrity sha512-sdQZOJdmt3GJs1UMNpCCCyeuS2IEGLXnHyAo9yIO5JJDjbjoVRij4M1qep6P6gFpptD1PqIYgzM+gwJbOi92mw==
caseless@~0.12.0:
version "0.12.0"
@ -3001,9 +2980,9 @@ cookie@^0.4.0:
integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
core-js-compat@^3.30.1, core-js-compat@^3.30.2:
version "3.30.2"
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.30.2.tgz#83f136e375babdb8c80ad3c22d67c69098c1dd8b"
integrity sha512-nriW1nuJjUgvkEjIot1Spwakz52V9YkYHZAQG6A1eCgC8AA1p0zngrQEP9R0+V6hji5XilWKG1Bd0YRppmGimA==
version "3.31.0"
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.31.0.tgz#4030847c0766cc0e803dcdfb30055d7ef2064bf1"
integrity sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==
dependencies:
browserslist "^4.21.5"
@ -3297,10 +3276,10 @@ ejs@^3.1.6:
dependencies:
jake "^10.8.5"
electron-to-chromium@^1.4.411:
version "1.4.427"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.427.tgz#67e8069f7a864fc092fe2e09f196e68af5cb88a1"
integrity sha512-HK3r9l+Jm8dYAm1ctXEWIC+hV60zfcjS9UA5BDlYvnI5S7PU/yytjpvSrTNrSSRRkuu3tDyZhdkwIczh+0DWaw==
electron-to-chromium@^1.4.431:
version "1.4.441"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.441.tgz#94dd9c1cbf081d83f032a4f1cd9f787e21fc24ce"
integrity sha512-LlCgQ8zgYZPymf5H4aE9itwiIWH4YlCiv1HFLmmcBeFYi5E+3eaIFnjHzYtcFQbaKfAW+CqZ9pgxo33DZuoqPg==
emoji-regex@^8.0.0:
version "8.0.0"
@ -4286,12 +4265,10 @@ iconv-lite@0.6.3:
dependencies:
safer-buffer ">= 2.1.2 < 3.0.0"
idb-keyval@6.2.0:
version "6.2.0"
resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-6.2.0.tgz#3af94a3cc0689d6ee0bc9e045d2a3340ea897173"
integrity sha512-uw+MIyQn2jl3+hroD7hF8J7PUviBU7BPKWw4f/ISf32D4LoGu98yHjrzWWJDASu9QNrX10tCJqk9YY0ClWm8Ng==
dependencies:
safari-14-idb-fix "^3.0.0"
idb-keyval@6.2.1:
version "6.2.1"
resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-6.2.1.tgz#94516d625346d16f56f3b33855da11bfded2db33"
integrity sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==
idb@^7.0.1:
version "7.1.1"
@ -5577,9 +5554,9 @@ rollup@^2.43.1:
fsevents "~2.3.2"
rollup@^3.21.0, rollup@^3.7.2:
version "3.25.0"
resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.25.0.tgz#71327d396a9decbf23c87b55916ae7204211738a"
integrity sha512-FnJkNRst2jEZGw7f+v4hFo6UTzpDKrAKcHZWcEfm5/GJQ5CK7wgb4moNLNAe7npKUev7yQn1AY/YbZRIxOv6Qg==
version "3.25.3"
resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.25.3.tgz#f9a8986f0f244bcfde2208da91ba46b8fd252551"
integrity sha512-ZT279hx8gszBj9uy5FfhoG4bZx8c+0A1sbqtr7Q3KNWIizpTdDEPZbV2xcbvHsnFp4MavCQYZyzApJ+virB8Yw==
optionalDependencies:
fsevents "~2.3.2"
@ -5597,11 +5574,6 @@ rxjs@^7.5.1:
dependencies:
tslib "^2.1.0"
safari-14-idb-fix@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/safari-14-idb-fix/-/safari-14-idb-fix-3.0.0.tgz#450fc049b996ec7f3fd9ca2f89d32e0761583440"
integrity sha512-eBNFLob4PMq8JA1dGyFn6G97q3/WzNtFK4RnzT1fnLq+9RyrGknzYiM/9B12MnKAxuj1IXr7UKYtTNtjyKMBog==
safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2:
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
@ -5642,7 +5614,14 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
semver@^7.0.0, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.6, semver@^7.3.7, semver@^7.3.8:
semver@^7.0.0, semver@^7.3.4, semver@^7.3.5, semver@^7.3.6, semver@^7.3.7, semver@^7.3.8:
version "7.5.3"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e"
integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==
dependencies:
lru-cache "^6.0.0"
semver@^7.3.2:
version "7.5.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec"
integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==
@ -5707,12 +5686,12 @@ sinon@15.0.2:
supports-color "^7.2.0"
sinon@^15.0.4:
version "15.1.0"
resolved "https://registry.yarnpkg.com/sinon/-/sinon-15.1.0.tgz#87656841545f7c63bd1e291df409fafd0e9aec09"
integrity sha512-cS5FgpDdE9/zx7no8bxROHymSlPLZzq0ChbbLk1DrxBfc+eTeBK3y8nIL+nu/0QeYydhhbLIr7ecHJpywjQaoQ==
version "15.2.0"
resolved "https://registry.yarnpkg.com/sinon/-/sinon-15.2.0.tgz#5e44d4bc5a9b5d993871137fd3560bebfac27565"
integrity sha512-nPS85arNqwBXaIsFCkolHjGIkFo+Oxu9vbgmBJizLAhqe6P2o3Qmj3KCUoRkfhHtvgDhZdWD3risLHAUJ8npjw==
dependencies:
"@sinonjs/commons" "^3.0.0"
"@sinonjs/fake-timers" "^10.2.0"
"@sinonjs/fake-timers" "^10.3.0"
"@sinonjs/samsam" "^8.0.0"
diff "^5.1.0"
nise "^5.1.4"
@ -5808,23 +5787,14 @@ standardized-audio-context-mock@9.6.18:
tslib "^2.5.0"
vehicles "^9.0.1"
standardized-audio-context@25.3.41:
version "25.3.41"
resolved "https://registry.yarnpkg.com/standardized-audio-context/-/standardized-audio-context-25.3.41.tgz#42689e0653698bba13705e220b78fe1f9cf458da"
integrity sha512-NCKY1kLCGN37dnCCIG4NX1LHWRgONvIU6u6GS3nzhMM9CV/M+GR48uIeojjeJBSICfWXfQ+t2N1MTdsgJz3wlA==
dependencies:
"@babel/runtime" "^7.21.0"
automation-events "^5.0.2"
tslib "^2.5.0"
standardized-audio-context@^25.3.46:
version "25.3.52"
resolved "https://registry.yarnpkg.com/standardized-audio-context/-/standardized-audio-context-25.3.52.tgz#46683a8230c065dcb00c33ba336df2d7d31a7406"
integrity sha512-rVWhfpVwsgmWgx+rb+K8st+nTPiceKCe+/J6RYzFIGsvbAWIM9k0IRMpQXFv7Pysvze9WRFIrnhtwMmfJhw0Xg==
standardized-audio-context@25.3.53, standardized-audio-context@^25.3.46:
version "25.3.53"
resolved "https://registry.yarnpkg.com/standardized-audio-context/-/standardized-audio-context-25.3.53.tgz#b7366724ed95913ed75f235e8cbeffcce5694db7"
integrity sha512-uLtKsl/ZDPCwKqw8lzPtJXQJYp4uF4E9A2srNMj6nxmvFaZbJPx0X9pWuYcV/kMsmlIkRxBpofyDG1AdodW0fA==
dependencies:
"@babel/runtime" "^7.22.5"
automation-events "^6.0.5"
tslib "^2.5.3"
automation-events "^6.0.6"
tslib "^2.6.0"
string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
version "4.2.3"
@ -5951,9 +5921,9 @@ symbol-tree@^3.2.4:
integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
tabbable@^6.0.1:
version "6.1.2"
resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.1.2.tgz#b0d3ca81d582d48a80f71b267d1434b1469a3703"
integrity sha512-qCN98uP7i9z0fIS4amQ5zbGBOq+OSigYeGvPy7NDk8Y9yncqDZ9pRPgfsc2PJIVM9RrJj7GIfuRgmjoUU9zTHQ==
version "6.2.0"
resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97"
integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==
temp-dir@^2.0.0:
version "2.0.0"
@ -5971,9 +5941,9 @@ tempy@^0.6.0:
unique-string "^2.0.0"
terser@^5.0.0:
version "5.17.7"
resolved "https://registry.yarnpkg.com/terser/-/terser-5.17.7.tgz#2a8b134826fe179b711969fd9d9a0c2479b2a8c3"
integrity sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==
version "5.18.2"
resolved "https://registry.yarnpkg.com/terser/-/terser-5.18.2.tgz#ff3072a0faf21ffd38f99acc9a0ddf7b5f07b948"
integrity sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==
dependencies:
"@jridgewell/source-map" "^0.3.3"
acorn "^8.8.2"
@ -6097,11 +6067,16 @@ tslib@^1.8.1, tslib@^1.9.3:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
tslib@^2.1.0, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.5.2, tslib@^2.5.3:
tslib@^2.1.0:
version "2.5.3"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913"
integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==
tslib@^2.4.0, tslib@^2.5.0, tslib@^2.5.3, tslib@^2.6.0:
version "2.6.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3"
integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==
tsutils@^3.21.0:
version "3.21.0"
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
@ -6305,13 +6280,13 @@ v8-to-istanbul@^9.0.0:
convert-source-map "^1.6.0"
vehicles@^9.0.1:
version "9.0.4"
resolved "https://registry.yarnpkg.com/vehicles/-/vehicles-9.0.4.tgz#3272981324823f97801daed709ab638f775a5b7b"
integrity sha512-s6iOudyZzhaXa3kCN9KuY0rQtO7l7FXD4APctKb7HN0i79bXjJb9VC4a9dKd1T2n7RmnkracFZG0WU4UfLt28Q==
version "9.0.5"
resolved "https://registry.yarnpkg.com/vehicles/-/vehicles-9.0.5.tgz#573d1920c43675bd2e09c6131f7333e7e4b9f2e6"
integrity sha512-bu/ThqkuMSLTVT3/2QMVWbwZJ26h0p0qNWUEIqNcsjbLMEe7qKRbsYxS4FFSaStXbl44fdvuYfv6uFd+ZW84hQ==
dependencies:
"@babel/runtime" "^7.22.3"
"@babel/runtime" "^7.22.5"
decimal.js "^10.4.3"
tslib "^2.5.2"
tslib "^2.5.3"
verror@1.10.0:
version "1.10.0"
@ -6405,15 +6380,15 @@ vue-gettext@2.1.12:
resolved "https://registry.yarnpkg.com/vue-gettext/-/vue-gettext-2.1.12.tgz#444d3220149b17fa4c7caeded3f12d439b698f33"
integrity sha512-7Kw36xtKvARp8ZafQGPK9WR6EM+dhFUikR5f0+etSkiHuvUM3yf1HsRDLYoLLdJ0AMaXxKwgekumzvCk6KX8rA==
vue-i18n@9.3.0-beta.16:
version "9.3.0-beta.16"
resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-9.3.0-beta.16.tgz#7d48c2a16087e47e388e1cd43a95ae38071a8c3d"
integrity sha512-huhBeRB0SEvv2gIgCS7Zo06nb8AAhbPQCoB/vwDfbDNs8F+giv9QCmhEed+TkLTih/54JGnXkxN6tw1VZqVY/w==
vue-i18n@9.3.0-beta.19:
version "9.3.0-beta.19"
resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-9.3.0-beta.19.tgz#d660d9b342322d8c3ae62965bf6957ff8e52607b"
integrity sha512-1pbEcoAbxaAPuR5hODnQJ5CtIimnVD+aUVnCztuuRaOZPLP1i4FxkWVvb1lu8JIRC5pePyODZxi3yoy3PUYheA==
dependencies:
"@intlify/core-base" "9.3.0-beta.16"
"@intlify/shared" "9.3.0-beta.16"
"@intlify/vue-devtools" "9.3.0-beta.16"
"@vue/devtools-api" "^6.2.1"
"@intlify/core-base" "9.3.0-beta.19"
"@intlify/shared" "9.3.0-beta.19"
"@intlify/vue-devtools" "9.3.0-beta.19"
"@vue/devtools-api" "^6.5.0"
vue-observe-visibility@^2.0.0-alpha.1:
version "2.0.0-alpha.1"
@ -6449,15 +6424,15 @@ vue-tsc@1.6.5:
"@volar/vue-typescript" "1.6.5"
semver "^7.3.8"
vue-upload-component@3.1.6:
version "3.1.6"
resolved "https://registry.yarnpkg.com/vue-upload-component/-/vue-upload-component-3.1.6.tgz#38c9c750b9177c897795a9979c45b7def6e5b374"
integrity sha512-MAQ0UCZ39/Y54yJc/K3JdVg2h/IcKMaJISG6CD6y3zacAbVb7YtNz2rYE/zpnyDez+9IOygEvwX8TtUgsl3YGg==
vue-upload-component@3.1.8:
version "3.1.8"
resolved "https://registry.yarnpkg.com/vue-upload-component/-/vue-upload-component-3.1.8.tgz#6c79aaf3c34c596ec40bbdde0f625d4855fb275a"
integrity sha512-8LHCrgmEZPg+1hbkKjQgMce2uasmGLEnIsLE8YG+vNyfNDuaQA71T+5t6kdDSG/szeh+E8mjb26uEd9WkVSFtg==
vue-virtual-scroller@2.0.0-beta.7:
version "2.0.0-beta.7"
resolved "https://registry.yarnpkg.com/vue-virtual-scroller/-/vue-virtual-scroller-2.0.0-beta.7.tgz#4ea8158638c84b2033b001a8b26c5fcb6896b271"
integrity sha512-OrouVj1i2939jaLjVfu8f5fsDlbzhAb4bOsYZYrAkpcVLylAmMoGtIL7eT3hJrdTiaKbwQpRdnv7DKf9Fn+tHg==
vue-virtual-scroller@2.0.0-beta.8:
version "2.0.0-beta.8"
resolved "https://registry.yarnpkg.com/vue-virtual-scroller/-/vue-virtual-scroller-2.0.0-beta.8.tgz#eeceda57e4faa5ba1763994c873923e2a956898b"
integrity sha512-b8/f5NQ5nIEBRTNi6GcPItE4s7kxNHw2AIHLtDp+2QvqdTjVN0FgONwX9cr53jWRgnu+HRLPaWDOR2JPI5MTfQ==
dependencies:
mitt "^2.1.0"
vue-observe-visibility "^2.0.0-alpha.1"